FEDRA emulsion software from the OPERA Collaboration
EdbScanProc Class Reference

#include <EdbScanProc.h>

Inheritance diagram for EdbScanProc:
Collaboration diagram for EdbScanProc:

Public Member Functions

bool AddAFFtoScanSet (EdbScanSet &sc, EdbID id1, EdbID id2)
 
bool AddAFFtoScanSet (EdbScanSet &sc, int b1, int p1, int s1, int e1, int b2, int p2, int s2, int e2)
 
bool AddAFFtoScanSet (EdbScanSet &sc, int id1[4], int id2[4])
 
bool AddParLine (const char *file, const char *line, bool recreate=false)
 
int Align (EdbID id1, EdbID id2, const char *option="")
 
int Align (int id1[4], int id2[4], const char *option="")
 
int AlignAll (EdbID id1, EdbID id2, int npre=1, int nfull=3, const char *opt="-z")
 
int AlignAll (int id1[4], int id2[4], int npre=1, int nfull=3, const char *opt="-z")
 
int AlignNewCPFiles (const char *f1, const char *f2, TEnv &cenv, EdbAffine2D *aff=0, float dz=0)
 
int AlignNewNopar (EdbID id1, EdbID id2, TEnv &cenv, EdbAffine2D *aff=0, float dz=0)
 
void AlignOverlaps (EdbID id, EdbPattern &p1, EdbPattern &p2, TEnv &cenv, const char *suff)
 
int AlignRaw (EdbID id1, EdbID id2, TEnv &cenv, EdbAffine2D *applyAff=0)
 
void AlignRawSet (EdbID id1, EdbID id2, TEnv &cenv)
 
void AlignSet (EdbID id, int npre, int nfull, const char *opt="-z")
 
int AlignSet (EdbScanSet &sc, int npre=1, int nfull=3, const char *opt="-z")
 
void AlignSetNewNopar (EdbID id, TEnv &cenv)
 
int AlignSetNewNopar (EdbScanSet &sc, TEnv &cenv)
 
bool ApplyAffZ (EdbPattern &pat, int id1[4], int id2[4])
 
int AssembleScanSet (EdbScanSet &ss)
 
char * BrickDir (int brick)
 
bool CheckAFFDir (int brick, bool create=true)
 
bool CheckBrickDir (EdbID id, bool create=true)
 
bool CheckDir (const char *dir, bool create=true)
 
bool CheckDirWritable (const char *dir)
 
void CheckFiles (EdbScanSet &sc, const char *suffix)
 
bool CheckPlateDir (EdbID id, bool create=true)
 
bool CheckProcDir (EdbID id, bool create=true)
 
bool CheckProcDir (int id[4], bool create=true)
 
void CheckRunQualityRaw (EdbID idss)
 
void CheckSetQualityRaw (EdbID idss)
 
void CheckViewOverlaps (EdbID id, TEnv &cenv)
 
int ConvertAreas (EdbScanClient &scan, int id[4], int flag=-1, const char *opt="NOCLCLFRAMESUM")
 
int CopyAFFPar (int id1c[4], int id2c[4], int id1p[4], int id2p[4], bool overwrite=true)
 
int CopyFile (int id1[4], int id2[4], const char *suffix, bool overwrite)
 
int CopyPar (EdbID id1, EdbID id2, bool overwrite=true)
 
int CopyPar (int id1[4], int id2[4], bool overwrite=true)
 
void CopyParSet (EdbID idset1, EdbID idset2)
 
int CopyPred (int id1[4], int id2[4], bool overwrite=true)
 
bool CorrectAffWithPred (int id1[4], int id2[4], const char *opt="-z", int patmin=6, const char *parfile="fullalignment")
 
int CorrectAngles (int id[4])
 
bool CorrectPredWithFound (int id1[4], int id2[4], const char *opt="-z", int patmin=6)
 
 EdbScanProc ()
 
void ExtractRawVolume (EdbID id, EdbID idnew, EdbSegP pred, int plate, TEnv &cenv)
 
void ExtractRawVolume (EdbScanSet &ss, EdbScanSet &ssnew, EdbSegP &pred, float dR)
 
int FindCompliments (EdbSegP &s, EdbPattern &pat, TObjArray &found, float chi2max, TArrayF &chiarr)
 
int FindPredictions (EdbPattern &pred, int id[4], EdbPattern &found, int maxholes=3)
 
int FindPredictions (int id[4], int flag=-1, int maxholes=3)
 
int FindPredictionsRaw (EdbID idp, EdbID idr)
 
int FindPredictionsRaw (EdbPattern &pred, EdbPattern &found, EdbRunAccess &ra, EdbScanCond &condBT, EdbScanCond &condMT, float delta_theta=0.1, float puls_min=5., float puls_mt=9., float chi2max=1.6, FILE *out=0)
 
int FindPredictionsRawSet (EdbID idp, EdbScanSet &ss, int npl)
 
int FindRawTrack (EdbTrackP &pred, EdbTrackP &found, EdbID idset, int plate)
 
int FindRawTrack (EdbTrackP &pred, EdbTrackP &found, EdbID idset, int plate, TEnv &cenv)
 
bool FlashRawDir (EdbScanClient &scan, int id[4])
 
bool GetAffZ (EdbAffine2D &aff, float &z, int id1[4], int id2[4])
 
bool GetMap (int brick, TString &map)
 
void GetPatternSide (EdbID id, int side, EdbLayer &la, const char *segcut, int afid, EdbPattern &p)
 
const char * GetServerRunName () const
 
bool InitPiece (EdbDataPiece &piece, EdbID id)
 
bool InitPiece (EdbDataPiece &piece, int id[4])
 
EdbRunInitRun (int id[4], char *runname_=NULL, char *runnamesrv_=NULL, bool createrun_=true)
 
bool InitRunAccess (EdbRunAccess &ra, EdbID id, bool do_update=false)
 
bool InitRunAccess (EdbRunAccess &ra, int id[4], bool do_update=false)
 
bool InitRunAccessNew (EdbRunAccess &ra, EdbID id, EdbPlateP &plate, bool do_update=false)
 
bool InitRunAccessNew (EdbRunAccess &ra, EdbID idset, int idplate, bool do_update=false)
 
int LinkRun (int id[4], int noUpdate=1)
 
int LinkRunAll (EdbID id, int npre=3, int nfull=1, int correct_ang=1)
 
int LinkRunAll (int id[4], int npre=3, int nfull=1, int correct_ang=1)
 
void LinkRunNew (EdbID id, EdbPlateP &plate, TEnv &cenv)
 
void LinkRunTest (EdbID id, EdbPlateP &plate, TEnv &cenv, Int_t ix=-1, Int_t iy=-1)
 
int LinkSet (EdbScanSet &sc, int npre=3, int nfull=1, int correct_ang=1)
 
void LinkSetNew (EdbScanSet &sc, TEnv &cenv)
 
void LinkSetNewTest (EdbScanSet &sc, TEnv &cenv, Int_t ix=-1, Int_t iy=-1)
 
int LoadPlate (EdbScanClient &scan, int id[4], int attempts=1)
 
void LogPrint (int brick, int level, const char *rout, const char *msgfmt,...)
 
void MakeAffName (TString &s, EdbID id1, EdbID id2, const char *suffix="aff.par")
 
void MakeAffName (TString &s, int id1[4], int id2[4], const char *suffix="aff.par")
 
bool MakeAFFSet (EdbScanSet &sc)
 
void MakeAlignSetSummary (EdbID id, const char *fileformat="pdf")
 
void MakeAlignSetSummary (EdbID id1, EdbID id2, const char *fout, const char *opt="UPDATE")
 
void MakeEraseFile (EdbID id, EdbPattern &pat)
 
void MakeFileName (TString &s, EdbID id, const char *suffix, bool inplate=true)
 
void MakeFileName (TString &s, int id[4], const char *suffix, bool inplate=true)
 
void MakeFileNameSrv (TString &s, EdbID id, const char *suffix, bool inplate=true)
 
void MakeFileNameSrv (TString &s, int id[4], const char *suffix, bool inplate=true)
 
bool MakeInPar (EdbID id, const char *option)
 
bool MakeInPar (int id[4], const char *option)
 
void MakeInParSet (EdbID id, const char *option)
 
void MakeLinkSetSummary (EdbID id, const char *fileformat="pdf")
 
bool MakeParSet (EdbScanSet &sc)
 
void MakeScannedIDList (EdbID id0, EdbScanSet &sc, int pl_from, int pl_to, const char *suffix)
 
int MakeTracksPred (TObjArray &tracks, EdbID id, EdbLayer &layer)
 
void MergeSetSBT (EdbID id)
 
void MergeSetSBT (EdbID id, EdbScanSet &ss)
 
void OptimizeScanPath (EdbPattern &pin, EdbPattern &pout, int brick)
 
bool PrepareSetStructure (EdbScanSet &sc)
 
void PrepareVolumesPred (int id[4], EdbPattern &points, int before=5, int after=5, int pmin=1, int pmax=57, EdbScanSet *sc=0)
 
void Print ()
 
bool ProjectFound (EdbID id1, EdbID id2)
 
bool ProjectFound (int id1[4], int id2[4])
 
bool ReadAffToLayer (EdbLayer &la, EdbID id1, EdbID id2)
 
EdbMaskReadEraseMask (EdbID id)
 
int ReadFound (EdbPattern &pred, EdbID id, int flag=-1)
 
int ReadFound (EdbPattern &pred, int id[4], int flag=-1)
 
int ReadFoundSegment (EdbID id, EdbSegP &s, int flag=-1)
 
int ReadFoundTrack (EdbScanSet &ss, EdbTrackP &track, int flag=-1)
 
int ReadFoundTracks (EdbScanSet &ss, EdbPVRec &ali, int flag=-1)
 
int ReadManFoundTracks (EdbScanSet &ss, EdbPVRec &ali, int flag=-1)
 
int ReadMarksSet (EdbMarksSet &ms, int brick, const char *filename, char spacer='_', char shape='S')
 
int ReadPatCP (EdbPattern &pat, EdbID id, TCut c="1")
 
int ReadPatCP (EdbPattern &pat, int id[4], TCut c="1")
 
int ReadPatCPnopar (EdbPattern &pat, const char *file, TCut cut="1", EdbMask *erase_mask=0, bool read_mt=false)
 
int ReadPatCPnopar (EdbPattern &pat, EdbID id, TCut cut="1", bool do_erase=false, bool read_mt=false)
 
int ReadPatRoot (EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
 
int ReadPatTXT (const char *file, EdbPattern &pred, int flag=-1)
 
int ReadPatTXT (EdbPattern &pred, EdbID id, const char *suffix, int flag=-1)
 
int ReadPatTXT (EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
 
int ReadPiece (EdbDataPiece &piece, EdbPattern &pat)
 
bool ReadPiecePar (EdbID id, EdbPlateP &plate)
 
int ReadPred (EdbPattern &pred, EdbID id, int flag=-1)
 
int ReadPred (EdbPattern &pred, int id[4], int flag=-1)
 
TObjArray * ReadSBTracks (EdbID id)
 
EdbScanSetReadScanSet (EdbID id)
 
int ReadScanSetCP (EdbID id, EdbPVRec &ali, TCut c="1", bool do_erase=true, bool do_assemble=true, int minplate=-1000, int maxplate=-1000)
 
int ReadScanSetCP (EdbScanSet &ss, EdbPVRec &ali, TCut c="1", bool do_erase=true, int minplate=-1000, int maxplate=-1000)
 
EdbScanSetReadScanSetGlobal (EdbID id, bool x_marks)
 
int ReadTracksTree (const char *name, EdbPVRec &ali, TCut cut="1")
 
int ReadTracksTree (EdbID id, EdbPVRec &ali, TCut cut="1")
 
void ReadUncorrectedBTforFoundTracks (EdbPVRec &ali)
 
int RemoveDublets (EdbPattern &pin, EdbPattern &pout, int brick)
 
int RemoveFile (EdbID id, const char *suffix)
 
int ScanAreas (EdbScanClient::ScanType st, EdbScanClient &scan, EdbPattern &pred, int id[4], const char *opt="NOCLCLFRAMESUM")
 
int ScanAreas (EdbScanClient::ScanType st, EdbScanClient &scan, int id[4], int flag=-1, const char *opt="NOCLCLFRAMESUM")
 
bool SetAFF0 (int id1[4], int id2[4])
 
bool SetAFFDZ (int id1[4], int id2[4], float dz)
 
void SetDefaultCondBT (EdbScanCond &cond)
 
void SetDefaultCondMT (EdbScanCond &cond)
 
void SetServerRunName (const char *fname_)
 
int TestAl (const char *cpfile1, const char *cpfile2, TCut &cut, float dz, EdbAffine2D *aff=0)
 
int TestAl (EdbID id1, EdbID id2)
 
int TestAl (EdbPattern &p1, EdbPattern &p2)
 
int TestAl (int id1[4], int id2[4])
 
int TrackSetBT (EdbScanSet &sc, TEnv &cenv)
 
bool UpdateAFFPar (EdbID id1, EdbID id2, EdbLayer &l, EdbAffine2D *aff0=0)
 
void UpdateAlignSummaryTree (EdbID idset1, EdbID idset2, TTree &tree)
 
bool UpdatePlatePar (EdbID id, EdbLayer &l)
 
void UpdateSetWithAff (EdbID id, EdbID id1, EdbID id2)
 
void UpdateSetWithAff (EdbID id, EdbID idu)
 
void UpdateSetWithAff (EdbID idset, EdbAffine2D aff)
 
void UpdateSetWithPlatePar (EdbID id)
 
void UpdateSetWithPlatePar (EdbScanSet &ss)
 
bool WaitFileReady (const char *fname_)
 
int WriteFound (EdbPattern &found, EdbID id, int flag=-1)
 
int WriteFound (EdbPattern &pred, int id[4], int flag=-1)
 
int WriteMarksSet (EdbMarksSet &ms, int brick, const char *filename, char spacer='_', char shape='S', int plate=1)
 
int WritePatRoot (EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
 
int WritePatTXT (EdbPattern &pred, EdbID id, const char *suffix, int flag=-1)
 
int WritePatTXT (EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
 
int WritePred (EdbPattern &pred, EdbID id, int flag=-1)
 
int WritePred (EdbPattern &pred, int id[4], int flag=-1)
 
int WriteSBcndTXT (int id[4], const char *suffix="man.sbt.txt")
 
int WriteSBTrack (EdbTrackP &t, int path, EdbID id)
 
int WriteSBTracks (TObjArray &tracks, EdbID id)
 
int WriteScanSet (EdbID id, EdbScanSet &ss)
 
virtual ~EdbScanProc ()
 

Public Attributes

TString eParDir
 
TString eProcDirClient
 
TString eProcDirServer
 

Private Attributes

TString eServerCreatedRunName
 

Constructor & Destructor Documentation

◆ EdbScanProc()

EdbScanProc::EdbScanProc ( )

◆ ~EdbScanProc()

virtual EdbScanProc::~EdbScanProc ( )
inlinevirtual
23 {}

Member Function Documentation

◆ AddAFFtoScanSet() [1/3]

bool EdbScanProc::AddAFFtoScanSet ( EdbScanSet sc,
EdbID  id1,
EdbID  id2 
)
57 {
58  int id1[4]; eid1.Get(id1);
59  int id2[4]; eid2.Get(id2);
60  return AddAFFtoScanSet(sc,id1,id2);
61 }
void Get(Int_t id[])
Definition: EdbID.h:26
bool AddAFFtoScanSet(EdbScanSet &sc, EdbID id1, EdbID id2)
Definition: EdbScanProc.cxx:56

◆ AddAFFtoScanSet() [2/3]

bool EdbScanProc::AddAFFtoScanSet ( EdbScanSet sc,
int  b1,
int  p1,
int  s1,
int  e1,
int  b2,
int  p2,
int  s2,
int  e2 
)
49 {
50  int id1[4]={b1,p1,s1,e1};
51  int id2[4]={b2,p2,s2,e2};
52  return AddAFFtoScanSet(sc,id1,id2);
53 }
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31

◆ AddAFFtoScanSet() [3/3]

bool EdbScanProc::AddAFFtoScanSet ( EdbScanSet sc,
int  id1[4],
int  id2[4] 
)
81 {
82  // read affine tranformation from file, form "plate", add "plate" to EdbScanSet:ePC
83 
84  EdbDataPiece piece;
85  TString parfile;
86  MakeAffName(parfile,id1,id2);
87  piece.eFileNamePar = parfile;
88  float dz=0;
89  EdbAffine2D *a=0;
90  if (piece.TakePiecePar() < 0) {
91  dz = 1300.*( id2[1]-id1[1] );
92  a = new EdbAffine2D();
93  Log(2,"AddAFFtoScanSet","add default transform with dz = %f",dz);
94  } else {
95  dz = piece.GetLayer(0)->Z();
96  a = piece.GetLayer(0)->GetAffineXY();
97  Log(2,"AddAFFtoScanSet","add read transform with dz = %f",dz);
98  }
99  if(gEDBDEBUGLEVEL>2) a->Print();
100  EdbPlateP *p = new EdbPlateP(); // in this function 1-one plate, 2-next plate
101  p->GetLayer(1)->SetID(id1[1]);
102  p->GetLayer(1)->SetZlayer(-dz,-dz,-dz);
103  p->GetLayer(1)->SetAffXY(a->A11(),a->A12(),a->A21(),a->A22(),a->B1(),a->B2());
104  p->GetLayer(2)->SetID(id2[1]);
105  p->GetLayer(2)->SetZlayer(0,0,0);
106  p->GetLayer(2)->SetAffXY(1,0,0,1,0,0);
107 
108  sc.ePC.Add(p);
109 
110  return true;
111 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
brick dz
Definition: RecDispMC.C:107
void a()
Definition: check_aligned.C:59
Definition: EdbAffine.h:17
Definition: EdbDataSet.h:25
int TakePiecePar()
Definition: EdbDataSet.cxx:281
TString eFileNamePar
Definition: EdbDataSet.h:50
EdbLayer * GetLayer(int id)
Definition: EdbDataSet.h:86
EdbAffine2D * GetAffineXY()
Definition: EdbLayer.h:120
float Z() const
Definition: EdbLayer.h:78
Definition: EdbBrick.h:13
void MakeAffName(TString &s, int id1[4], int id2[4], const char *suffix="aff.par")
Definition: EdbScanProc.cxx:1917
TObjArray ePC
Definition: EdbScanSet.h:15
gEDBDEBUGLEVEL
Definition: energy.C:7
p
Definition: testBGReduction_AllMethods.C:8

◆ AddParLine()

bool EdbScanProc::AddParLine ( const char *  file,
const char *  line,
bool  recreate = false 
)
2026 {
2027  // add string to par file
2028  FILE *f=0;
2029  if(recreate) f = fopen(file,"w");
2030  else f = fopen(file,"a+");
2031  if (!f) return false;
2032  fprintf(f,"%s\n",line);
2033  fclose(f);
2034  return true;
2035 }
FILE * f
Definition: RecDispMC.C:150
fclose(pFile)
TFile * file
Definition: write_pvr.C:3

◆ Align() [1/2]

int EdbScanProc::Align ( EdbID  id1,
EdbID  id2,
const char *  option = "" 
)
inline
127 {int id14[4]; id1.Get(id14); int id24[4]; id2.Get(id24); return Align(id14,id24,option);}
int Align(EdbID id1, EdbID id2, const char *option="")
Definition: EdbScanProc.h:127

◆ Align() [2/2]

int EdbScanProc::Align ( int  id1[4],
int  id2[4],
const char *  option = "" 
)
2689 {
2690  // Align 2 patterns, assumed that already exists file x.x.x.x_y.y.y.y.aff.par with deltaZ inside.
2691  // Convension about Z(setted while process): the z of id2 is 0, the z of id1 is (-deltaZ) where
2692  // deltaZ readed from aff.par file in a way that pattern of id1 projected
2693  // to deltaZ correspond to pattern of id2
2694 
2695  int npat=0;
2696  TString name;
2697  MakeFileName(name,id1,"in.par");
2698  TString parfileOUT;
2699  MakeAffName(parfileOUT,id1,id2);
2700  parfileOUT.Prepend("INCLUDE ");
2701  AddParLine(name.Data(), parfileOUT.Data());
2702 
2703  EdbPVRec ali;
2704  EdbPattern *pat=0;
2705  EdbDataPiece piece1,piece2;
2706 
2707  InitPiece(piece1, id1);
2708  piece1.GetLayer(0)->SetZlayer(-1*piece1.GetLayer(0)->Z(), 0,0);
2709  pat = new EdbPattern(0.,0., piece1.GetLayer(0)->Z(),100 );
2710  if (!ReadPiece(piece1, *pat)) {delete pat; return -1;}
2711  pat->SetPID(0);
2712  pat->SetSegmentsZ();
2713  ali.AddPattern(pat);
2714 
2715  InitPiece(piece2, id2);
2716  piece2.GetLayer(0)->SetZlayer(0, 0,0);
2717  pat = new EdbPattern(0.,0., piece2.GetLayer(0)->Z(),100 );
2718  if (!ReadPiece(piece2, *pat)) {delete pat; return -1;}
2719  pat->SetPID(1);
2720  pat->SetSegmentsZ();
2721  ali.AddPattern(pat);
2722 
2723  Log(2,"EdbScanProc::Align","Z1 = %f z2 = %f with option: %s",
2724  piece1.GetLayer(0)->Z(),piece2.GetLayer(0)->Z(), option );
2725 
2726  EdbScanCond *cond = piece1.GetCond(0);
2727  cond->SetChi2Mode(3);
2728  ali.SetScanCond( cond );
2729  ali.SetPatternsID();
2731  ali.SetCouplesAll();
2732  ali.SetChi2Max(cond->Chi2PMax());
2733  ali.SetOffsetsMax(cond->OffX(),cond->OffY());
2734 
2735  if( strstr( option,"-a") && strstr( option,"-a2")==0 ) ali.Align(0);
2736  else ali.Align(2);
2737 
2738  ali.PrintAff();
2739  npat = ali.GetCouple(0)->Ncouples();
2740 
2741  EdbAffine2D aff;
2742  MakeAffName(parfileOUT,id1,id2);
2743  piece1.eFileNamePar = parfileOUT;
2744  ali.GetPattern(0)->GetKeep(aff);
2745  piece1.UpdateAffPar(0,aff);
2746 
2747  TString cpfile;
2748  MakeFileName(cpfile,id1,"al.cp.root");
2749  EdbDataProc proc;
2750  proc.LinkTracksWithFlag( &ali, 10., 0.05, 2, 3, 0 );
2751 
2752  TTree *cptree=EdbDataPiece::InitCouplesTree(cpfile.Data(),"RECREATE");
2753 
2754  proc.FillCouplesTree(cptree, &ali,0);
2755  proc.CloseCouplesTree(cptree);
2756 
2757  //ali.FitTracks( 10, 0.139 ); // is important to call it before MakeTracksTree!
2758  //MakeFileName(cpfile,id1,"al.tr.root");
2759  //proc.MakeTracksTree(&ali,cpfile.Data());
2760  if( strstr(option,"-z") ) {
2761  ali.FineCorrZnew();
2762  piece1.UpdateZPar(0,-ali.GetPattern(0)->Z());
2763  }
2764 
2765  return npat;
2766  }
Int_t npat
Definition: Xi2HatStartScript.C:33
EdbPVRec * ali
Definition: align.C:1
int InitCouplesTree(const char *mode="READ")
Definition: EdbDataSet.cxx:1244
int UpdateZPar(int layer, float z)
Definition: EdbDataSet.cxx:513
EdbScanCond * GetCond(int id)
Definition: EdbDataSet.h:89
int UpdateAffPar(int layer, EdbAffine2D &aff)
Definition: EdbDataSet.cxx:493
Definition: EdbDataSet.h:180
void FillCouplesTree(TTree *tree, EdbPVRec *al, int fillraw=0)
Definition: EdbDataSet.cxx:1745
void CloseCouplesTree(TTree *tree)
Definition: EdbDataSet.cxx:1814
static int LinkTracksWithFlag(EdbPVRec *ali, float p, float probmin, int nsegmin, int maxgap, int flag, float mass=0.1396)
Definition: EdbDataSet.cxx:2261
void SetZlayer(float z, float zmin, float zmax)
Definition: EdbLayer.h:102
Definition: EdbPVRec.h:148
void SetSegmentsErrors()
Definition: EdbPVRec.cxx:1125
int Align(int alignFlag)
Definition: EdbPVRec.cxx:1206
int FineCorrZnew()
Definition: EdbPVRec.cxx:2185
void SetChi2Max(float chi)
Definition: EdbPVRec.h:186
EdbPatCouple * GetCouple(int i) const
Definition: EdbPVRec.h:190
void SetCouplesAll()
Definition: EdbPVRec.cxx:974
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
void SetOffsetsMax(float ox, float oy)
Definition: EdbPVRec.cxx:924
int Ncouples() const
Definition: EdbPVRec.h:80
Definition: EdbPattern.h:280
void SetPID(int pid)
Definition: EdbPattern.h:319
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1867
void PrintAff() const
Definition: EdbPattern.cxx:1811
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1887
void SetPatternsID()
Definition: EdbPattern.cxx:1763
virtual const EdbAffine2D * GetKeep() const
Definition: EdbVirtual.h:175
Definition: EdbScanCond.h:10
float OffY() const
Definition: EdbScanCond.h:70
float Chi2PMax() const
Definition: EdbScanCond.h:86
float OffX() const
Definition: EdbScanCond.h:69
void SetChi2Mode(int mode)
Definition: EdbScanCond.h:88
int ReadPiece(EdbDataPiece &piece, EdbPattern &pat)
Definition: EdbScanProc.cxx:2444
bool InitPiece(EdbDataPiece &piece, int id[4])
Definition: EdbScanProc.cxx:2410
bool AddParLine(const char *file, const char *line, bool recreate=false)
Definition: EdbScanProc.cxx:2025
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1885
Float_t Z() const
Definition: EdbPattern.h:87
void SetSegmentsZ()
Definition: EdbPattern.cxx:275
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
int piece2
Definition: shower_btr.C:21
EdbDataProc * proc
Definition: read_pvr.C:3

◆ AlignAll() [1/2]

int EdbScanProc::AlignAll ( EdbID  id1,
EdbID  id2,
int  npre = 1,
int  nfull = 3,
const char *  opt = "-z" 
)
inline
131  {int id41[4]; id1.Get(id41); int id42[4]; id2.Get(id42); return AlignAll(id41, id42, npre, nfull, opt);}
int AlignAll(int id1[4], int id2[4], int npre=1, int nfull=3, const char *opt="-z")
Definition: EdbScanProc.cxx:2661
const char * opt
Definition: mc2raw.cxx:42

◆ AlignAll() [2/2]

int EdbScanProc::AlignAll ( int  id1[4],
int  id2[4],
int  npre = 1,
int  nfull = 3,
const char *  opt = "-z" 
)
2662 {
2663  int nal=0;
2664  if (npre > 0) {
2665  MakeInPar(id1,"prealignment");
2666  MakeInPar(id2,"prealignment");
2667  for (Int_t i = 0; i < npre; i++) {
2668  // find affine transformation from id1 to id2 and update par of id1
2669  nal = Align(id1, id2, "");
2670  if (nal == -1) return -1;
2671  }
2672  }
2673  if (nfull > 0) {
2674  MakeInPar(id1,"fullalignment");
2675  MakeInPar(id2,"fullalignment");
2676  for (Int_t i = 0; i < nfull; i++) {
2677  // find affine transformation from id1 to id2 and update par of id1
2678  nal = Align(id1, id2, opt);
2679  if (nal == -1) return -1;
2680  }
2681  }
2682  LogPrint(id1[0],1,"AlignAll","%d.%d.%d.%d to %d.%d.%d.%d with %d pre and %d full. The final pattern is: %d",
2683  id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3],npre,nfull,nal);
2684  return nal;
2685 }
void LogPrint(int brick, int level, const char *rout, const char *msgfmt,...)
Definition: EdbScanProc.cxx:3129
bool MakeInPar(int id[4], const char *option)
Definition: EdbScanProc.cxx:2049

◆ AlignNewCPFiles()

int EdbScanProc::AlignNewCPFiles ( const char *  f1,
const char *  f2,
TEnv &  cenv,
EdbAffine2D aff = 0,
float  dz = 0 
)
521 {
522  // Align 2 patterns taken from files. All necessary information should be in the envfile
523  // Convension about Z(setted while process): the z of id2 is 0, the z of id1 is (-deltaZ) where
524  // deltaZ readed from aff.par file in a way that pattern of id1 projected
525  // to deltaZ correspond to pattern of id2
526 
527  int npat=0;
528 
530  av.eOffsetMax = cenv.GetValue("fedra.align.OffsetMax" , 500. );
531  av.SetSigma( cenv.GetValue("fedra.align.SigmaR" , 13. ),
532  cenv.GetValue("fedra.align.SigmaT" , 0.008) );
533  av.eDoFine = cenv.GetValue("fedra.align.DoFine" , 1);
534  av.eDZ = cenv.GetValue("fedra.align.DZ" , 120.);
535  av.eDPHI = cenv.GetValue("fedra.align.DPHI" , 0.008 );
536  const char *cut = cenv.GetValue("fedra.readCPcut" , "eCHI2P<2.5&&s.eW>18&&eN1==1&&eN2==1&&s.Theta()>0.05&&s.Theta()<0.5");
537  const char *cutA = cenv.GetValue("fedra.readCPcutA" , "1");
538  const char *cutB = cenv.GetValue("fedra.readCPcutB" , "1");
539  av.eSaveCouples = cenv.GetValue("fedra.align.SaveCouples" , 1);
540 
541  EdbPattern p1,p2;
542  ReadPatCPnopar( p1, f1, Form("(%s)&&(%s)",cut,cutA) );
543  ReadPatCPnopar( p2, f2, Form("(%s)&&(%s)",cut,cutB) );
544  if(aff) { aff->Print(); p1.Transform(aff);}
545 
546 // TString dataout; MakeAffName(dataout,id1,id2,"al.root");
547  av.InitOutputFile( "a_b.al.root" );
548  av.Align( p1, p2 , dz);
549  av.CloseOutputFile();
550 // UpdateAFFPar( id1, id2, av.eCorrL[0], aff );
551 
552  av.eCorrL[0].Print();
553 
554  return npat;
555 }
TCut cut
Definition: check_shower.C:6
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
EdbLayer eCorrL[2]
Definition: EdbAlignmentV.h:25
void InitOutputFile(const char *file="report_al.root", const char *option="RECREATE")
Definition: EdbAlignmentV.cxx:55
void CloseOutputFile()
Definition: EdbAlignmentV.cxx:64
void Print()
Definition: EdbLayer.cxx:150
Definition: EdbPlateAlignment.h:8
Float_t eOffsetMax
Definition: EdbPlateAlignment.h:12
Bool_t eSaveCouples
Definition: EdbPlateAlignment.h:24
void SetSigma(float spos, float sang)
Definition: EdbPlateAlignment.h:56
Bool_t eDoFine
Definition: EdbPlateAlignment.h:22
Float_t eDZ
Definition: EdbPlateAlignment.h:14
Float_t eDPHI
Definition: EdbPlateAlignment.h:15
void Align(EdbPattern &p1, EdbPattern &p2, float dz, int flag=0)
Definition: EdbPlateAlignment.cxx:62
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:154
int ReadPatCPnopar(EdbPattern &pat, EdbID id, TCut cut="1", bool do_erase=false, bool read_mt=false)
Definition: EdbScanProc.cxx:719
TEnv cenv("emrec")

◆ AlignNewNopar()

int EdbScanProc::AlignNewNopar ( EdbID  id1,
EdbID  id2,
TEnv &  cenv,
EdbAffine2D aff = 0,
float  dz = 0 
)
486 {
487  // Align 2 patterns. All necessary information should be in the envfile
488  // Convension about Z(setted while process): the z of id2 is 0, the z of id1 is (-deltaZ) where
489  // deltaZ readed from aff.par file in a way that pattern of id1 projected
490  // to deltaZ correspond to pattern of id2
491 
492  int npat=0;
493 
495  av.eOffsetMax = cenv.GetValue("fedra.align.OffsetMax" , 500. );
496  av.SetSigma( cenv.GetValue("fedra.align.SigmaR" , 13. ),
497  cenv.GetValue("fedra.align.SigmaT" , 0.008) );
498  av.eDoFine = cenv.GetValue("fedra.align.DoFine" , 1);
499  av.eDZ = cenv.GetValue("fedra.align.DZ" , 120.);
500  av.eDPHI = cenv.GetValue("fedra.align.DPHI" , 0.008 );
501  const char *cut = cenv.GetValue("fedra.readCPcut" , "eCHI2P<2.5&&s.eW>18&&eN1==1&&eN2==1&&s.Theta()>0.05&&s.Theta()<0.5");
502  const char *cutA = cenv.GetValue("fedra.readCPcutA" , "1");
503  const char *cutB = cenv.GetValue("fedra.readCPcutB" , "1");
504  av.eSaveCouples = cenv.GetValue("fedra.align.SaveCouples" , 1);
505 
506  EdbPattern p1,p2;
507  ReadPatCPnopar( p1, id1, Form("(%s)&&(%s)",cut,cutA) );
508  ReadPatCPnopar( p2, id2, Form("(%s)&&(%s)",cut,cutB) );
509  if(aff) { aff->Print(); p1.Transform(aff);}
510 
511  TString dataout; MakeAffName(dataout,id1,id2,"al.root");
512  av.InitOutputFile( dataout );
513  av.Align( p1, p2 , dz);
514  av.CloseOutputFile();
515  UpdateAFFPar( id1, id2, av.eCorrL[0], aff );
516  return npat;
517 }
bool UpdateAFFPar(EdbID id1, EdbID id2, EdbLayer &l, EdbAffine2D *aff0=0)
Definition: EdbScanProc.cxx:1026

◆ AlignOverlaps()

void EdbScanProc::AlignOverlaps ( EdbID  id,
EdbPattern p1,
EdbPattern p2,
TEnv &  cenv,
const char *  suff 
)
3284 {
3285  float sigmaR = cenv.GetValue("fedra.alignRaw.sigmaR" , 0.7 );
3286  float sigmaT = cenv.GetValue("fedra.alignRaw.sigmaT" , 0.019 );
3287  float offsetMax = cenv.GetValue("fedra.alignRaw.offsetMax" , 10. );
3288  float DZ = cenv.GetValue("fedra.alignRaw.DZ" , 10. );
3289  float DPHI = cenv.GetValue("fedra.alignRaw.DPHI" , 0.0015 );
3290  EdbPlateAlignment av;
3291  av.SetSigma(sigmaR,sigmaT);
3292  av.eOffsetMax = offsetMax;
3293  av.eDZ = DZ;
3294  av.eDPHI = DPHI;
3295  av.eDoFine = 1;
3296 
3297  TString dataout; MakeFileName(dataout,id,suff);
3298  av.InitOutputFile( dataout );
3299  av.eSaveCouples=true;
3300  av.Align( p1, p2, 0);
3301  av.CloseOutputFile();
3302 }
float DZ
Definition: hwinit.C:66

◆ AlignRaw()

int EdbScanProc::AlignRaw ( EdbID  id1,
EdbID  id2,
TEnv &  cenv,
EdbAffine2D applyAff = 0 
)
3024 {
3025  // Align raw segments patterns. Typical application: align 2 different scannings of the same emulsion plate.
3026 
3027  int npat=0;
3028  Log(1,"\nAlignRaw","%s_%s", id1.AsString(), id2.AsString() );
3029  int side1 = cenv.GetValue("fedra.alignRaw.side1" , 1);
3030  int side2 = cenv.GetValue("fedra.alignRaw.side2" , 1);
3031  float z1 = cenv.GetValue("fedra.alignRaw.Z1" , 0);
3032  float z2 = cenv.GetValue("fedra.alignRaw.Z2" , 0);
3033  float wmin1 = cenv.GetValue("fedra.alignRaw.Wmin1" , 8);
3034  float wmin2 = cenv.GetValue("fedra.alignRaw.Wmin2" , 8);
3035  float sigmaR = cenv.GetValue("fedra.alignRaw.sigmaR" , 2.5 );
3036  float sigmaT = cenv.GetValue("fedra.alignRaw.sigmaT" , 0.005 );
3037  float offsetMax = cenv.GetValue("fedra.alignRaw.offsetMax" , 500. );
3038  float thetaMax = cenv.GetValue("fedra.alignRaw.thetaMax" , 1. );
3039  int path1 = cenv.GetValue("fedra.alignRaw.path1" , -1 );
3040  int path2 = cenv.GetValue("fedra.alignRaw.path2" , -1 );
3041 
3042  float xmin1 = cenv.GetValue("fedra.alignRaw.xmin1" , -500. );
3043  float xmax1 = cenv.GetValue("fedra.alignRaw.xmax1" , 500. );
3044  float xmin2 = cenv.GetValue("fedra.alignRaw.xmin2" , -500. );
3045  float xmax2 = cenv.GetValue("fedra.alignRaw.xmax2" , 500. );
3046  float ymin1 = cenv.GetValue("fedra.alignRaw.ymin1" , -500. );
3047  float ymax1 = cenv.GetValue("fedra.alignRaw.ymax1" , 500. );
3048  float ymin2 = cenv.GetValue("fedra.alignRaw.ymin2" , -500. );
3049  float ymax2 = cenv.GetValue("fedra.alignRaw.ymax2" , 500. );
3050 
3051  float DZ = cenv.GetValue("fedra.alignRaw.DZ" , 25. );
3052  float DPHI = cenv.GetValue("fedra.alignRaw.DPHI" , 0.003 );
3053 
3054 
3055  EdbRunAccess r1; if(!InitRunAccess(r1,id1)) return 0;
3056  EdbRunAccess r2; if(!InitRunAccess(r2,id2)) return 0;
3057  r1.eAFID = r2.eAFID = cenv.GetValue("fedra.alignRaw.AFID" , 1);
3058 
3059  float min1[5] = {xmin1,ymin1,-thetaMax,-thetaMax, wmin1 };
3060  float max1[5] = {xmax1,ymax1, thetaMax, thetaMax, 100 };
3061  r1.AddSegmentCut(side1, 1, min1, max1);
3062  float min2[5] = {xmin2,ymin2,-thetaMax,-thetaMax, wmin2 };
3063  float max2[5] = {xmax2,ymax2, thetaMax, thetaMax, 100 };
3064  r2.AddSegmentCut(side2, 1, min2, max2);
3065 
3066  EdbPattern p1, p2;
3067  r1.GetPatternDataForPrediction( path1, side1, p1 );
3068 
3069  if(applyAff) p1.Transform(applyAff);
3070 
3071  if(path2>=0) r2.GetPatternDataForPrediction( path2, side2, p2 );
3072  else {
3073  float xmin=p1.Xmin(), xmax=p1.Xmax();
3074  float ymin=p1.Ymin(), ymax=p1.Ymax();
3075  EdbSegP s(0, (xmin+xmax)/2., (ymin+ymax)/2., 0,0);
3076  float dx=(xmax-xmin)/2., dy=(ymax-ymin)/2.;
3077  float size = Sqrt( dx*dx+dy*dy ) + offsetMax+200.;
3078  r2.GetPatternXY(s, side2, p2, size);
3079  }
3080 
3081  EdbPlateAlignment av;
3082  av.SetSigma(sigmaR,sigmaT);
3083  av.eOffsetMax = offsetMax;
3084  av.eDZ = DZ;
3085  av.eDPHI = DPHI;
3086  av.eDoFine = 1;
3087  TString dataout; MakeAffName(dataout,id1,id2,"al.root");
3088  av.InitOutputFile( dataout );
3089 
3090  av.Align( p1, p2, z2-z1);
3091  av.CloseOutputFile();
3092 
3093  //av.eCorrL[0].Print();
3094  UpdateAFFPar( id1, id2, av.eCorrL[0] );
3095  return npat;
3096  }
char * AsString() const
Definition: EdbID.cxx:24
virtual Float_t Xmax() const
Definition: EdbVirtual.cxx:195
virtual Float_t Ymin() const
Definition: EdbVirtual.cxx:205
virtual Float_t Xmin() const
Definition: EdbVirtual.cxx:185
virtual Float_t Ymax() const
Definition: EdbVirtual.cxx:215
Definition: EdbRunAccess.h:22
void AddSegmentCut(int xi, const char *cutline)
Definition: EdbRunAccess.cxx:1317
Int_t eAFID
Definition: EdbRunAccess.h:25
int GetPatternXY(EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
Definition: EdbRunAccess.cxx:382
int GetPatternDataForPrediction(int id, int side, EdbPattern &pat)
Definition: EdbRunAccess.cxx:576
bool InitRunAccess(EdbRunAccess &ra, int id[4], bool do_update=false)
Definition: EdbScanProc.cxx:2383
Definition: EdbSegP.h:18
float xmin
Definition: emthickness.cpp:61
float ymin
Definition: emthickness.cpp:63
float xmax
Definition: emthickness.cpp:61
float ymax
Definition: emthickness.cpp:63
EdbSegP * s
Definition: tlg2pattern.C:32

◆ AlignRawSet()

void EdbScanProc::AlignRawSet ( EdbID  id1,
EdbID  id2,
TEnv &  cenv 
)
3009 {
3010  // assuming that exist the scan sets for idset1 and idset2
3011  // for each plate do the alignment raw from 1 to 2 and write id1_id2.aff.par
3012  EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
3013  EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
3014  int n = ss1->eIDS.GetSize();
3015  for(int i=0; i<n; i++) {
3016  EdbID *id1 = ss1->GetID(i);
3017  EdbID *id2 = ss2->FindPlateID(id1->ePlate);
3018  if(id2) AlignRaw(*id1,*id2,cenv);
3019  }
3020 }
Definition: EdbID.h:7
Int_t ePlate
Definition: EdbID.h:11
int AlignRaw(EdbID id1, EdbID id2, TEnv &cenv, EdbAffine2D *applyAff=0)
Definition: EdbScanProc.cxx:3023
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1521
Definition: EdbScanSet.h:11
TList eIDS
Definition: EdbScanSet.h:17
EdbID * FindPlateID(Int_t p)
Definition: EdbScanSet.cxx:482
EdbID * GetID(Int_t i)
Definition: EdbScanSet.h:47

◆ AlignSet() [1/2]

void EdbScanProc::AlignSet ( EdbID  id,
int  npre,
int  nfull,
const char *  opt = "-z" 
)
575 {
576  EdbScanSet *ss = ReadScanSet(id);
577  if(!ss) { Log(1,"AlignSet","Error! set for %s do not found",id.AsString()); return; }
578  AlignSet(*ss, npre,nfull, opt);
579  ss->eB.ResetAff();
580  WriteScanSet(id,*ss);
581  UpdateSetWithAff(id,id);
582 }
void UpdateSetWithAff(EdbID idset, EdbAffine2D aff)
Definition: EdbScanProc.cxx:2796
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1467
void AlignSet(EdbID id, int npre, int nfull, const char *opt="-z")
Definition: EdbScanProc.cxx:574
ss
Definition: energy.C:62

◆ AlignSet() [2/2]

int EdbScanProc::AlignSet ( EdbScanSet sc,
int  npre = 1,
int  nfull = 3,
const char *  opt = "-z" 
)
586 {
587  if(sc.eIDS.GetSize()<2) return 0;
588  int n=0;
589  EdbID *id1,*id2;
590  for(int i=0; i<sc.eIDS.GetSize()-1; i++) {
591  id1 = (EdbID *)(sc.eIDS.At(i));
592  id2 = (EdbID *)(sc.eIDS.At(i+1));
593  int id14[4]; id1->Get(id14);
594  int id24[4]; id2->Get(id24);
595  n += AlignAll(id14, id24, npre, nfull, opt);
596  }
597  return n;
598 }

◆ AlignSetNewNopar() [1/2]

void EdbScanProc::AlignSetNewNopar ( EdbID  id,
TEnv &  cenv 
)
454 {
455  EdbScanSet *ss = ReadScanSet(id);
456  if(!ss) { Log(1,"AlignSetNewNopar","Error! set for %s not found",id.AsString()); return; }
458  ss->eB.ResetAff();
459  WriteScanSet(id,*ss);
460  UpdateSetWithAff(id,id);
461 }
int AlignSetNewNopar(EdbScanSet &sc, TEnv &cenv)
Definition: EdbScanProc.cxx:464

◆ AlignSetNewNopar() [2/2]

int EdbScanProc::AlignSetNewNopar ( EdbScanSet sc,
TEnv &  cenv 
)
465 {
466  if(sc.eIDS.GetSize()<2) return 0;
467  int n=0;
468  int minPlate = cenv.GetValue("fedra.align.minPlate" ,-999);
469  int maxPlate = cenv.GetValue("fedra.align.maxPlate" , 999);
470  for(int i=0; i<sc.eIDS.GetSize()-1; i++) {
471  EdbID *id1 = sc.GetID(i);
472  EdbID *id2 = sc.GetID(i+1);
473  if(id1->ePlate<minPlate||id1->ePlate>maxPlate) continue;
474  if(id2->ePlate<minPlate||id2->ePlate>maxPlate) continue;
475  EdbAffine2D aff;
476  float dz = -1300;
477  if(sc.GetAffP2P(id1->ePlate, id2->ePlate, aff))
478  dz = sc.GetDZP2P(id1->ePlate, id2->ePlate);
479  n += AlignNewNopar(*id1, *id2, cenv, &aff, dz);
480  }
481  return n;
482 }
int AlignNewNopar(EdbID id1, EdbID id2, TEnv &cenv, EdbAffine2D *aff=0, float dz=0)
Definition: EdbScanProc.cxx:485
Bool_t GetAffP2P(Int_t p1, Int_t p2, EdbAffine2D &aff)
Definition: EdbScanSet.cxx:247
Float_t GetDZP2P(Int_t p1, Int_t p2)
Definition: EdbScanSet.cxx:263

◆ ApplyAffZ()

bool EdbScanProc::ApplyAffZ ( EdbPattern pat,
int  id1[4],
int  id2[4] 
)
2646 {
2647  // read affine transformations and deltaZ from x.x.x.x_y.y.y.y.aff.par and apply it to pat
2648  EdbAffine2D aff;
2649  float dz;
2650  if( !GetAffZ( aff, dz, id1, id2) ) return false;
2651  if(gEDBDEBUGLEVEL>2) {
2652  printf("ApplyAffZ: dz = %f\n",dz);
2653  aff.Print();
2654  }
2655  pat.ProjectTo(dz);
2656  pat.Transform(&aff);
2657  return true;
2658 }
bool GetAffZ(EdbAffine2D &aff, float &z, int id1[4], int id2[4])
Definition: EdbScanProc.cxx:2629
void ProjectTo(const float dz)
Definition: EdbPattern.cxx:311

◆ AssembleScanSet()

int EdbScanProc::AssembleScanSet ( EdbScanSet ss)
135 {
136  if(sc.eIDS.GetSize() < 1) return 0;
137  else if (sc.eIDS.GetSize() == 1) { // add nominal plate
138  EdbPlateP *plate = new EdbPlateP();
139  plate->SetID(sc.GetID(0)->ePlate);
140  Float_t z=0, dz0=214,dz1=45,dz2=45; //TODO!
141  plate->SetZlayer(z, z - dz0/2 + dz1, z+dz0/2+dz2);
142  plate->GetLayer(0)->SetZlayer(0,-dz0/2,dz0/2); // internal plate coord
143  plate->GetLayer(2)->SetZlayer(-dz0/2,-dz0/2-dz2,-dz0/2);
144  plate->GetLayer(1)->SetZlayer( dz0/2, dz0/2, dz0/2+dz1);
145  sc.eB.AddPlate(plate);
146  sc.MakePIDList();
147  return 1;
148  }
149 
150  sc.ePC.Delete(); // clear plate array
151 
152  EdbID *id1=0, *id2=0;
153 
154  for (Int_t i = 1; i < sc.eIDS.GetSize(); i++) {
155  id1 = (EdbID *)(sc.eIDS.At(i-1));
156  id2 = (EdbID *)(sc.eIDS.At(i));
157  if (!AddAFFtoScanSet(sc, *id1, *id2)) return -1;
158  }
159 
160  return sc.AssembleBrickFromPC();
161 }
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1

◆ BrickDir()

char * EdbScanProc::BrickDir ( int  brick)
1877 {
1878  char *str = new char[256];
1879  sprintf(str,"%s/b%6.6d",
1880  eProcDirClient.Data(),brick);
1881  return str;
1882 }
BRICK brick
Definition: RecDispMC.C:103
TString eProcDirClient
Definition: EdbScanProc.h:14

◆ CheckAFFDir()

bool EdbScanProc::CheckAFFDir ( int  brick,
bool  create = true 
)
1838 {
1839  //return true if dir ../bXXXXXX/AFF is exists, if create==true (default) create it if necessary
1840  char str[256];
1841  sprintf(str,"%s/b%6.6d/AFF", eProcDirClient.Data(),brick);
1842  return CheckDir(str,create);
1843 }
bool CheckDir(const char *dir, bool create=true)
Definition: EdbScanProc.cxx:1812

◆ CheckBrickDir()

bool EdbScanProc::CheckBrickDir ( EdbID  id,
bool  create = true 
)
1847 {
1848  //return true if dir ../bXXXXXX exist, if create==true (default) create it if necessary
1849  char str[256];
1850  sprintf(str,"%s/b%6.6d", eProcDirClient.Data(),id.eBrick);
1851  if(!CheckDir(str,create)) return false;
1852  return true;
1853 }

◆ CheckDir()

bool EdbScanProc::CheckDir ( const char *  dir,
bool  create = true 
)
1813 {
1814  // check the existance of the directory dir
1815  // if do not exist and create==true (default) - create it
1816  // return true if the directory exists or succesfully created
1817 
1818  void *dirp=0; // pointer to the directory
1819  dirp = gSystem->OpenDirectory(dir);
1820  if(!dirp) {
1821  if(create) {
1822  if(gSystem->MakeDirectory(dir)==0) Log(2,"EdbScanProc::CheckDir","create directory %s", dir);
1823  else Log(1,"EdbScanProc::CheckDir","ERROR! can not create directory %s", dir);
1824  }
1825  else return false;
1826  } else { gSystem->FreeDirectory(dirp); dirp=0;}
1827  dirp = gSystem->OpenDirectory(dir);
1828  if(!dirp) {
1829  Log(1,"EdbScanProc::CheckDir","ERROR! directory %s is not created!", dir);
1830  return false;
1831  }
1832  gSystem->FreeDirectory(dirp);
1833  return true;
1834 }

◆ CheckDirWritable()

bool EdbScanProc::CheckDirWritable ( const char *  dir)
1802 {
1803  if( gSystem->AccessPathName(dir, kWritePermission) ) //can not access file!
1804  {
1805  Log(1,"CheckDirWritable","ERROR: can not open output directory: %s !!!",dir);
1806  return 0;
1807  }
1808  return 1;
1809 }

◆ CheckFiles()

void EdbScanProc::CheckFiles ( EdbScanSet sc,
const char *  suffix 
)
675 {
676  EdbID *id;
677  for(int i=0; i<sc.eIDS.GetSize(); i++) {
678  id = (EdbID*)sc.eIDS.At(i);
679  TString str;
680  MakeFileName(str,*id,suffix);
681  gSystem->Exec(Form("ls -l %s",str.Data()));
682  }
683 }
UInt_t id
Definition: tlg2pattern.C:118

◆ CheckPlateDir()

bool EdbScanProc::CheckPlateDir ( EdbID  id,
bool  create = true 
)
1857 {
1858  //return true if dir ../bXXXXXX/pXXX exist, if create==true (default) create it if necessary
1859  char str[256];
1860  sprintf(str,"%s/b%6.6d/p%3.3d", eProcDirClient.Data(),id.eBrick,id.ePlate);
1861  if(!CheckDir(str,create)) return false;
1862  return true;
1863 }

◆ CheckProcDir() [1/2]

bool EdbScanProc::CheckProcDir ( EdbID  id,
bool  create = true 
)
inline
32 {int id4[4]; id.Get(id4); return CheckProcDir(id4,create); }
bool CheckProcDir(int id[4], bool create=true)
Definition: EdbScanProc.cxx:1866

◆ CheckProcDir() [2/2]

bool EdbScanProc::CheckProcDir ( int  id[4],
bool  create = true 
)
1867 {
1868  //return true if dir ../bXXXXXX/pXXX exist, if create==true (default) create it if necessary
1869  EdbID idd( id[0], id[1], id[2], id[3] );
1870  if(!CheckBrickDir(idd,create)) return false;
1871  if(!CheckPlateDir(idd,create)) return false;
1872  return true;
1873 }
bool CheckBrickDir(EdbID id, bool create=true)
Definition: EdbScanProc.cxx:1846
bool CheckPlateDir(EdbID id, bool create=true)
Definition: EdbScanProc.cxx:1856

◆ CheckRunQualityRaw()

void EdbScanProc::CheckRunQualityRaw ( EdbID  idss)
inline
175 {}

◆ CheckSetQualityRaw()

void EdbScanProc::CheckSetQualityRaw ( EdbID  idss)
559 {
560  EdbScanSet *ss = ReadScanSet(idss);
561  int n = ss->eIDS.GetSize(); if(n<1) return;
562  for(int i=0; i<n; i++) {
563  EdbID *id = (EdbID *)(ss->eIDS.At(i));
564  TString name;
565  MakeFileName(name,*id,"raw.root");
566  EdbRunAccess a(name.Data());
567  a.InitRun();
568  a.CheckRunLine();
569  }
570  delete ss;
571 }

◆ CheckViewOverlaps()

void EdbScanProc::CheckViewOverlaps ( EdbID  id,
TEnv &  cenv 
)
3306 {
3307  float pulsMin1 = 6;
3308  float pulsMin2 = 6;
3309  EdbRunAccess r; if(!InitRunAccess(r,id)) return;
3310  r.CheckViewStep();
3312  r.GetVolumeArea(vol, 1);
3313  r.CheckViewSize();
3314 
3315  EdbPattern p1l,p1r, p2l,p2r;
3316  r.SetCutLeft(1, pulsMin1); r.GetPatternDataForPrediction( -1, 1, p1l );
3317  r.SetCutLeft(2, pulsMin1); r.GetPatternDataForPrediction( -1, 2, p2l );
3318  r.SetCutRight(1, pulsMin1); r.GetPatternDataForPrediction( -1, 1, p1r );
3319  r.SetCutRight(2, pulsMin1); r.GetPatternDataForPrediction( -1, 2, p2r );
3320 
3321  EdbPattern p1t,p1b, p2t,p2b;
3322  r.SetCutTop(1, pulsMin2); r.GetPatternDataForPrediction( -1, 1, p1t );
3323  r.SetCutTop(2, pulsMin2); r.GetPatternDataForPrediction( -1, 2, p2t );
3324  r.SetCutBottom(1, pulsMin2); r.GetPatternDataForPrediction( -1, 1, p1b );
3325  r.SetCutBottom(2, pulsMin2); r.GetPatternDataForPrediction( -1, 2, p2b );
3326 
3327  AlignOverlaps(id, p1l,p1r, cenv, "al.vlr1.root");
3328  AlignOverlaps(id, p2l,p2r, cenv, "al.vlr2.root");
3329  AlignOverlaps(id, p1t,p1b, cenv, "al.vtb1.root");
3330  AlignOverlaps(id, p2t,p2b, cenv, "al.vtb2.root");
3331 }
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
Definition: EdbPattern.h:348
void AlignOverlaps(EdbID id, EdbPattern &p1, EdbPattern &p2, TEnv &cenv, const char *suff)
Definition: EdbScanProc.cxx:3283
void r(int rid=2)
Definition: test.C:201

◆ ConvertAreas()

int EdbScanProc::ConvertAreas ( EdbScanClient scan,
int  id[4],
int  flag = -1,
const char *  opt = "NOCLCLFRAMESUM" 
)
917 {
918  // can be called separately in case of missed conversion
919  EdbPattern pred;
920  ReadPred(pred, id, flag);
921  EdbRun *run = InitRun(id);
922  if(!run) return 0;
923  int scanned = scan.ConvertAreas(id,pred,*run,opt);
924  LogPrint(id[0],1,"ConvertAreas","%d.%d.%d.%d with %d predictions with flag %d; %d views stored",
925  id[0],id[1],id[2],id[3],pred.N(),flag,run->GetEntries());
926  run->Close();
927  delete run;
928  return scanned;
929 }
EdbScanCond * scan
Definition: RecDispNU.C:117
Definition: EdbRun.h:74
void Close()
Definition: EdbRun.cxx:466
int GetEntries() const
Definition: EdbRun.h:135
int ReadPred(EdbPattern &pred, int id[4], int flag=-1)
Definition: EdbScanProc.h:68
EdbRun * InitRun(int id[4], char *runname_=NULL, char *runnamesrv_=NULL, bool createrun_=true)
Definition: EdbScanProc.cxx:1985
Int_t N() const
Definition: EdbPattern.h:89
EdbRun * run
Definition: check_raw.C:38

◆ CopyAFFPar()

int EdbScanProc::CopyAFFPar ( int  id1c[4],
int  id2c[4],
int  id1p[4],
int  id2p[4],
bool  overwrite = true 
)
1016 {
1017  // copy AFF/xc_yc.par to AFF/xp_yp.par
1018  TString name1, name2;
1019  MakeAffName(name1,id1c,id2c);
1020  MakeAffName(name2,id1p,id2p);
1021  LogPrint(id1c[0],2,"CopyAFFPar","from %s to %s", name1.Data(),name2.Data());
1022  return gSystem->CopyFile(name1.Data(), name2.Data(), overwrite);
1023 }

◆ CopyFile()

int EdbScanProc::CopyFile ( int  id1[4],
int  id2[4],
const char *  suffix,
bool  overwrite 
)
989 {
990  // copy piece file from id1 to id2
991  TString name1, name2;
992  MakeFileName(name1,id1,suffix);
993  MakeFileName(name2,id2,suffix);
994  int status = gSystem->CopyFile(name1.Data(), name2.Data(), overwrite);
995  LogPrint(id1[0],2,"CopyFile","status=%d from %s to %s", status, name1.Data(),name2.Data() );
996  //sleep(10);
997  if( gSystem->AccessPathName(name2, kReadPermission) ) return 0; //can not access file!
998  return 1;
999 }

◆ CopyPar() [1/2]

int EdbScanProc::CopyPar ( EdbID  id1,
EdbID  id2,
bool  overwrite = true 
)
inline
48  {
49  int id14[4], id24[4]; id1.Get(id14); id2.Get(id24);
50  return CopyPar(id14,id24,overwrite);}
int CopyPar(EdbID id1, EdbID id2, bool overwrite=true)
Definition: EdbScanProc.h:48

◆ CopyPar() [2/2]

int EdbScanProc::CopyPar ( int  id1[4],
int  id2[4],
bool  overwrite = true 
)
inline
51 {return CopyFile(id1,id2,"par",overwrite);}
int CopyFile(int id1[4], int id2[4], const char *suffix, bool overwrite)
Definition: EdbScanProc.cxx:988

◆ CopyParSet()

void EdbScanProc::CopyParSet ( EdbID  idset1,
EdbID  idset2 
)
165 {
166  // assuming that exist the scan sets for idset1 and idset2
167  // copy the plate par files with shrinkage corrections from 1 to 2
168  EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
169  EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
170  int n = ss1->eIDS.GetSize();
171  for(int i=0; i<n; i++) {
172  EdbID *id1 = ss1->GetID(i);
173  EdbID *id2 = ss2->FindPlateID(id1->ePlate);
174  if(id2) CopyPar(*id1,*id2);
175  }
176 
177 }

◆ CopyPred()

int EdbScanProc::CopyPred ( int  id1[4],
int  id2[4],
bool  overwrite = true 
)
inline
52 {return CopyFile(id1,id2,"pred.root",overwrite);}

◆ CorrectAffWithPred()

bool EdbScanProc::CorrectAffWithPred ( int  id1[4],
int  id2[4],
const char *  opt = "-z",
int  patmin = 6,
const char *  parfile = "fullalignment" 
)
1221 {
1222  // take p1.found.root, apply AFF/p1_p2.par, align to p2 and update AFF/p1_p2.par
1223  EdbPattern pat;
1224  ReadFound(pat,id1);
1225  if(pat.N()<patmin)
1226  LogPrint(id1[0],1,"CorrectAffWithPred","WARNING: unreliable correction - pattern is too small: %d < %d", pat.N(),patmin);
1227  else if(pat.N()<2) {
1228  LogPrint(id1[0],1,"CorrectAffWithPred","ERROR: correction is impossible - too small pattern: %d", pat.N());
1229  return false;
1230  }
1231 
1232  EdbAffine2D aff;
1233  float dz;
1234  if(!GetAffZ(aff, dz, id1,id2)) return false;
1235  pat.Transform(&aff);
1236  pat.SetZ(-dz);
1237  pat.SetSegmentsZ();
1238 
1239  MakeInPar(id2,parfile);
1240  EdbPattern p2;
1242  InitPiece(piece2, id2);
1243  ReadPiece(piece2, p2);
1244  p2.SetZ(0);
1245  p2.SetSegmentsZ();
1246 
1247  EdbPVRec ali;
1248  ali.AddPattern(&pat);
1249  ali.AddPattern(&p2);
1250  EdbScanCond *cond = piece2.GetCond(0);
1251  cond->SetChi2Mode(3);
1252  ali.SetScanCond( cond );
1253  ali.SetPatternsID();
1255  ali.SetCouplesAll();
1256  ali.SetChi2Max(cond->Chi2PMax());
1257  ali.SetOffsetsMax(cond->OffX(),cond->OffY());
1258 
1259  ali.Align(2);
1260  //ali.Align(0);
1261  int nal = ali.GetCouple(0)->Ncouples();
1262 
1263  if(nal<patmin) {
1264  LogPrint(id1[0],1,"CorrectAffWithPred","WARNING: pattern is too small: %d < %d: do not update par file!", nal, patmin);
1265  return false;
1266  }
1267 
1268  TString parfileOUT;
1269  MakeAffName(parfileOUT,id1,id2);
1270  piece2.eFileNamePar = parfileOUT;
1271  ali.GetPattern(0)->GetKeep(aff);
1272  piece2.UpdateAffPar(0,aff);
1273  if( strstr(opt,"-z")) {
1274  EdbDataProc proc;
1275  proc.LinkTracksWithFlag( &ali, 10., 0.05, 2, 3, 0 );
1276  ali.FineCorrZnew();
1277  piece2.UpdateZPar(0,-ali.GetPattern(0)->Z());
1278  }
1279 
1280  LogPrint(id1[0],1,"CorrectAffWithPred","from %d.%d.%d.%d to %d.%d.%d.%d: used %d (out of %d predictions) for correction",
1281  id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3], nal, pat.N() );
1282  return true;
1283 }
int ReadFound(EdbPattern &pred, int id[4], int flag=-1)
Definition: EdbScanProc.h:70
void SetZ(float z)
Definition: EdbPattern.h:41

◆ CorrectAngles()

int EdbScanProc::CorrectAngles ( int  id[4])
2074 {
2075  EdbDataPiece piece;
2076  InitPiece(piece,id);
2077  TString parfileOUT;
2078  MakeFileName(parfileOUT,id,"par");
2079  piece.eFileNamePar = parfileOUT;
2080  return piece.CorrectAngles();
2081 }
int CorrectAngles()
Definition: EdbDataSet.cxx:880

◆ CorrectPredWithFound()

bool EdbScanProc::CorrectPredWithFound ( int  id1[4],
int  id2[4],
const char *  opt = "-z",
int  patmin = 6 
)
1155 {
1156  // take p1.found.root, apply AFF/p1_p2.par, read p2.found.root, align and update AFF/p1_p2.par
1157 
1158  EdbPattern p1; ReadFound(p1,id1);
1159  EdbPattern p2; ReadFound(p2,id2);
1160 
1161  if(p1.N()<2||p2.N()<2) {
1162  LogPrint(id1[0],1,"CorrectPredWithFound","ERROR: correction is impossible - too small pattern: %d", p1.N(), p2.N());
1163  return false;
1164  }
1165  else if(p1.N()<patmin || p2.N()<patmin)
1166  LogPrint(id1[0],1,"CorrectPredWithFound","WARNING: unreliable correction - pattern is too small: %d < %d", p1.N(), p2.N(),patmin);
1167 
1168  EdbAffine2D aff; float dz;
1169  if(!GetAffZ(aff, dz, id1,id2)) return false;
1170  p1.Transform(&aff);
1171  p1.SetZ(-dz); p1.SetSegmentsZ();
1172  p2.SetZ(0); p2.SetSegmentsZ();
1173 
1174  MakeInPar(id2,"fullalignment");
1176  InitPiece(piece2, id2);
1177 
1178  EdbPVRec ali;
1179  ali.AddPattern(&p1);
1180  ali.AddPattern(&p2);
1181  EdbScanCond *cond = piece2.GetCond(0);
1182  cond->SetChi2Mode(3);
1183  ali.SetScanCond( cond );
1184  ali.SetPatternsID();
1186  ali.SetCouplesAll();
1187  ali.SetChi2Max(cond->Chi2PMax());
1188  ali.SetOffsetsMax(cond->OffX(),cond->OffY());
1189 
1190  ali.Align(2);
1191  //ali.Align(0);
1192  int nal = ali.GetCouple(0)->Ncouples();
1193 
1194  if(nal<patmin) {
1195  LogPrint(id1[0],1,"CorrectAffWithPred","WARNING: pattern is too small: %d < %d: do not update par file!", nal, patmin);
1196  return false;
1197  }
1198 
1199  TString parfileOUT;
1200  MakeAffName(parfileOUT,id1,id2);
1201  piece2.eFileNamePar = parfileOUT;
1202  ali.GetPattern(0)->GetKeep(aff);
1203  piece2.UpdateAffPar(0,aff);
1204 
1205  if( strstr(opt,"-z")) {
1206  EdbDataProc proc;
1207  proc.LinkTracksWithFlag( &ali, 10., 0.05, 2, 3, 0 );
1208  printf("befire corr z: z1=%f z2=%f \n",ali.GetPattern(0)->Z(), ali.GetPattern(1)->Z());
1209  ali.FineCorrZnew();
1210  printf("after corr z: z1=%f z2=%f \n",ali.GetPattern(0)->Z(), ali.GetPattern(1)->Z());
1211  piece2.UpdateZPar(0,-ali.GetPattern(0)->Z());
1212  }
1213 
1214  LogPrint(id1[0],1,"CorrectPredWithFound","from %d.%d.%d.%d to %d.%d.%d.%d: used %d (out of %d predictions and %d found) for correction",
1215  id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3], nal, p1.N(), p2.N() );
1216  return true;
1217 }

◆ ExtractRawVolume() [1/2]

void EdbScanProc::ExtractRawVolume ( EdbID  id,
EdbID  idnew,
EdbSegP  pred,
int  plate,
TEnv &  cenv 
)
3392 {
3393  // from EdbScanSet id extract volume around pred and save into idnew
3394  // Note: the z of pred is assumed to be the z of plate in this function
3395 
3396  int nplBefore = cenv.GetValue("fedra.ExtractVol.NplBefore" , 4 );
3397  int nplAfter = cenv.GetValue("fedra.ExtractVol.NplAfter" , 5 );
3398  float dR = cenv.GetValue("fedra.ExtractVol.DR" , 1000.);
3399  Log(2,"ExtractRawVolume","%s --> %s ref plate: %d (%d %d) at (%f %f)",
3400  id.AsString(),idnew.AsString(), plateid, plateid-nplBefore, plateid+nplAfter, pred.X(),pred.Y() );
3401  if(gEDBDEBUGLEVEL>2) cenv.Print();
3402 
3403  EdbScanSet *ss = ReadScanSet(id); if(!ss) return;
3404  EdbScanSet ssnew; ssnew.Copy(*ss);
3405  ssnew.eB.SetID(idnew.eBrick);
3406  ssnew.eIDS.Clear();
3407  ssnew.SetID(idnew);
3408 
3409  EdbPlateP *pl = ss->GetPlate(plateid);
3410  if(!pl) Log(1,"ExtractRawVolume","ERROR: the plate %d is missing in scan set",plateid);
3411  Log(3,"ExtractRawVolume","assign to the prediction z = %f of the plate %d",pl->Z(),plateid );
3412  pred.SetZ(pl->Z());
3413 
3414  int n = ss->eIDS.GetSize();
3415  for(int i=0; i<n; i++ ) {
3416  EdbID *id = ss->GetID(i);
3417  if( (id->ePlate >= plateid-nplBefore) && (id->ePlate <= plateid+nplAfter) ) {
3418  EdbID *newid = new EdbID(*id);
3419  newid->eBrick = idnew.eBrick;
3420  newid->eMajor = idnew.eMajor;
3421  newid->eMinor = idnew.eMinor;
3422  ssnew.eIDS.Add( newid );
3423  }
3424  }
3425  ssnew.MakePIDList();
3426 
3427  ExtractRawVolume(*ss, ssnew, pred, dR);
3428 }
Int_t eBrick
Definition: EdbID.h:10
Int_t eMinor
Definition: EdbID.h:13
Int_t eMajor
Definition: EdbID.h:12
void SetID(int id)
Definition: EdbLayer.h:95
void ExtractRawVolume(EdbID id, EdbID idnew, EdbSegP pred, int plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3391
void MakePIDList()
Definition: EdbScanSet.cxx:178
void Copy(EdbScanSet &sc)
Definition: EdbScanSet.cxx:51
void SetID(EdbID id)
Definition: EdbScanSet.h:48
EdbBrickP eB
Definition: EdbScanSet.h:13
Float_t X() const
Definition: EdbSegP.h:170
void SetZ(float z)
Definition: EdbSegP.h:122
Float_t Y() const
Definition: EdbSegP.h:171

◆ ExtractRawVolume() [2/2]

void EdbScanProc::ExtractRawVolume ( EdbScanSet ss,
EdbScanSet ssnew,
EdbSegP pred,
float  dR 
)
3478 {
3479  // from EdbScanSet ss extract volume for plates defined in ssnew around pred with dR
3480  int n = ssnew.eIDS.GetSize(); if(n<1) return;
3481  if(!CheckBrickDir(ssnew.eID,true)) return;
3482  WriteScanSet(ssnew.eID,ssnew);
3483 
3484  for(int i=0; i<n; i++ ) {
3485  EdbID *newid = ssnew.GetID(i);
3486  newid->Print();
3487  EdbPlateP *plate = ssnew.GetPlate(newid->ePlate);
3488  EdbSegP newpred(pred);
3489  newpred.PropagateTo(plate->Z());
3490 
3491  EdbID *id = ss.FindPlateID(newid->ePlate);
3492  EdbRunAccess ra; if(!InitRunAccess(ra,*id)) return; // TODO: check transformations used to select views!
3493 
3494  if(CheckProcDir(*newid,true)) {
3495  TString runfile;
3496  MakeFileName(runfile,*newid,"raw.root");
3497  ra.CopyRawDataXY( newpred.X(), newpred.Y(), dR,runfile.Data() );
3498  }
3499  }
3500 
3501 }
void Print()
Definition: EdbID.h:30
bool CopyRawDataXY(float x0, float y0, float dR, const char *file)
Definition: EdbRunAccess.cxx:1343
EdbPlateP * GetPlate(Int_t p)
Definition: EdbScanSet.h:57
EdbID eID
Definition: EdbScanSet.h:20

◆ FindCompliments()

int EdbScanProc::FindCompliments ( EdbSegP s,
EdbPattern pat,
TObjArray &  found,
float  chi2max,
TArrayF &  chiarr 
)
2316 {
2317  // return found sorted by increasing chi2
2318 
2319  int nfound=0;
2320  int maxcand=chiarr.GetSize();
2321  TArrayF chi2arr(maxcand);
2322  TObjArray arr(maxcand);
2323  TArrayI ind(maxcand);
2324 
2325  int nseg = pat.FindCompliments(s,arr,30,200); // acceptance (prelim): s.SX()*30; s.STX*200
2326  //printf("\nnseg = %d\n",nseg);
2327  if(nseg>maxcand) {
2328  Log(1,"FindCompliments","Warning!: Too many segments %d, accept only the first %d", nseg, maxcand);
2329  nseg = maxcand;
2330  }
2331  if(nseg<=0) return 0;
2332 
2333  EdbSegP *s2=0;
2334  for(int j=0; j<nseg; j++) {
2335  s2 = (EdbSegP *)arr.At(j);
2336  EdbSegP s3;
2337  s3.Copy(s);
2338  chi2arr[j] = EdbTrackFitter::Chi2Seg(&s3, s2);
2339  }
2340  TMath::Sort(nseg,chi2arr.GetArray(),ind.GetArray(),0);
2341  for(int j=0; j<nseg; j++) {
2342  s2 = (EdbSegP *)arr.At(ind[j]);
2343  if(chi2arr[ind[j]] > chi2max ) break;
2344  chiarr[j] = chi2arr[ind[j]];
2345  s2->SetMC(s.MCEvt(),s.MCTrack());
2346  found.Add(s2);
2347  nfound++;
2348  }
2349 
2350  //printf("nfound = %d\n",nfound);
2351  return nfound;
2352 }
int FindCompliments(EdbSegP &s, TObjArray &arr, float nsig, float nsigt)
Definition: EdbPattern.cxx:1447
void SetMC(int mEvt, int mTrack)
Definition: EdbSegP.h:138
Int_t MCTrack() const
Definition: EdbSegP.h:143
void Copy(const EdbSegP &s)
Definition: EdbSegP.cxx:104
Int_t MCEvt() const
Definition: EdbSegP.h:142
static float Chi2Seg(EdbSegP *s1, EdbSegP *s2)
Definition: EdbTrackFitter.cxx:62

◆ FindPredictions() [1/2]

int EdbScanProc::FindPredictions ( EdbPattern pred,
int  id[4],
EdbPattern found,
int  maxholes = 3 
)
2458 {
2459  // find predictions pred in couples tree of id and prepare pattern "found"
2460  // assumed that pred are transformed and projected into the coord system of id
2461  // Input: pred - pattern with predictions
2462  // id - the data piece to be processed
2463  // maxholes - the maximum number of holes (missed segments) for doing extrapolation
2464  // Output: found - pattern with found tracks
2465  // x.x.x.x.found.txt summary file with all candidats
2466  //
2467 
2468  // Probably obsolete function - to investigate if it in use now - in most
2469  // of cases it can be substituted by EdbRunTracking::FindPredictions (VT, AC)
2470  //
2471 
2472  EdbPVRec ali;
2473  EdbPattern *pat=0;
2474  EdbDataPiece piece;
2475 
2476  // predicted:
2477  pat = new EdbPattern(pred.X(),pred.Y(),0,100);
2478  for(int i=0; i<pred.N(); i++) pat->AddSegment(*(pred.GetSegment(i)));
2479  pat->SetPID(0);
2480  pat->SetSegmentsZ(); // z=0 (the same)
2481  ali.AddPattern(pat);
2482 
2483  // scanned:
2484  InitPiece(piece, id);
2485  EdbPattern *patbt = new EdbPattern(0.,0., 0,100 );
2486  EdbPattern *pat1 = new EdbPattern(0.,0., 0,100 );
2487  EdbPattern *pat2 = new EdbPattern(0.,0., 0,100 );
2488 
2489  if(!piece.InitCouplesTree("READ")) return 0;
2490  piece.GetCPData_new( patbt,pat1,pat2,0 );
2491  patbt->SetSegmentsZ();
2492  patbt->Transform( piece.GetLayer(0)->GetAffineXY() );
2493  patbt->TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2494  patbt->TransformShr( piece.GetLayer(0)->Shr() );
2495  pat1->SetSegmentsZ();
2496  pat1->Transform( piece.GetLayer(0)->GetAffineXY() );
2497  pat1->TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2498  pat2->SetSegmentsZ();
2499  pat2->Transform( piece.GetLayer(0)->GetAffineXY() );
2500  pat2->TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2501 
2502  //ReadPiece(piece, *pat);
2503  patbt->SetSegmentsZ(); // z=0 (the same)
2504  patbt->SetPID(1);
2505  ali.AddPattern(patbt);
2506 
2507  EdbScanCond *cond = piece.GetCond(0);
2508  cond->SetChi2Mode(3);
2509  ali.SetScanCond( cond );
2510  ali.SetPatternsID();
2511  //ali.SetSegmentsErrors();
2512  ali.SetCouplesAll();
2513  ali.SetChi2Max(cond->Chi2PMax());
2514 
2515  EdbSegP *s=0;
2516  for(int ip=0; ip<ali.Npatterns(); ip++)
2517  for(int i=0; i<ali.GetPattern(ip)->N(); i++) {
2518  s = ali.GetPattern(ip)->GetSegment(i);
2519  s->SetErrors();
2520  cond->FillErrorsCov( s->TX(), s->TY(), s->COV() );
2521  }
2522 
2523  TString str;
2524  MakeFileName(str,id,"found.txt");
2525  FILE *f = fopen(str.Data(),"w");
2526 
2527  TString strmt;
2528  MakeFileName(strmt,id,"found.mt.txt");
2529  FILE *fmt = fopen(strmt.Data(),"w");
2530 
2531  int maxcand=100;
2532  TArrayF chiarr(maxcand);
2533  TArrayI ind(maxcand);
2534  TArrayI count(maxcand);
2535  TArrayI cnsel(maxcand);
2536 
2537  pat = ali.GetPattern(1);
2538  pat->FillCell(20,20,0.01,0.01);
2539  int nseg=0;
2540  TObjArray arr;
2541  EdbSegP *s2=0;
2542  EdbSegP s3;
2543  for(int i=0; i<pred.N(); i++) {
2544  s = ali.GetPattern(0)->GetSegment(i);
2545  arr.Clear();
2546  nseg = pat->FindCompliments(*s,arr,cond->BinX(),cond->BinTX());
2547  if(nseg>maxcand) continue;
2548  count[nseg]++;
2549  int nsel=0;
2550  if(nseg>=0) {
2551  for(int j=0; j<nseg; j++) {
2552  s2 = (EdbSegP *)arr.At(j);
2553  s3.Copy(*s2);
2554  chiarr[j] = EdbTrackFitter::Chi2Seg(&s3, s);
2555  }
2556  TMath::Sort(nseg,chiarr.GetArray(),ind.GetArray(),0);
2557  for(int j=0; j<nseg; j++) {
2558  s2 = (EdbSegP *)arr.At(ind[j]);
2559  if(chiarr[ind[j]] > cond->Chi2PMax() ) break;
2560  nsel=j+1;
2561  s2->SetMC(s->MCEvt(),s->MCTrack());
2562  }
2563 
2564  fprintf(f,"\n%8.8d %11.2f %11.2f %8.4f %8.4f %d\n",
2565  s->ID(),s->X(),s->Y(),s->TX(),s->TY(), nsel);
2566  fprintf(fmt,"\n%8.8d %11.2f %11.2f %8.4f %8.4f %d\n",
2567  s->ID(),s->X(),s->Y(),s->TX(),s->TY(), nsel);
2568  for(int j=0; j<nsel; j++) {
2569  s2 = (EdbSegP *)arr.At(ind[j]);
2570  fprintf(f,"%8d %11.2f %11.2f %8.4f %8.4f %6.2f %3.0f\n",
2571  j+1,s2->X(),s2->Y(),s2->TX(),s2->TY(),chiarr[ind[j]],s2->W());
2572  fprintf(fmt,"%8d %11.2f %11.2f %8.4f %8.4f %6.2f %3.0f\n",
2573  j+1,s2->X(),s2->Y(),s2->TX(),s2->TY(),chiarr[ind[j]],s2->W());
2574  int imt=-1;
2575  if(patbt->GetSegments()->FindObject(s2)) imt = patbt->GetSegments()->IndexOf(s2);
2576  if(imt>0) {
2577  EdbSegP *smt = pat1->GetSegment(imt);
2578  fprintf(fmt,"s1:%5d %11.2f %11.2f %8.4f %8.4f %3.0f\n",
2579  j+1,smt->X(),smt->Y(),smt->TX(),smt->TY(),smt->W());
2580  smt = pat2->GetSegment(imt);
2581  fprintf(fmt,"s2:%5d %11.2f %11.2f %8.4f %8.4f %3.0f\n",
2582  j+1,smt->X(),smt->Y(),smt->TX(),smt->TY(),smt->W());
2583  }
2584  }
2585 
2586  }
2587  cnsel[nsel]++;
2588  if(nsel>0) {
2589  found.AddSegment(*((EdbSegP *)arr.At(ind[0]))); // add the best segment
2590  found.GetSegmentLast()->SetFlag(0); // reset flag if found good candidate
2591  found.GetSegmentLast()->SetID(s->ID());
2592  }
2593  else if(s->Flag()<maxholes) {
2594  found.AddSegment(*(s)); // add itself in case of hole
2595  found.GetSegmentLast()->SetFlag(s->Flag()+1); // flag is the number of missed plates // OLD FLAG DEFINITION
2596  found.GetSegmentLast()->SetID(s->ID());
2597  }
2598  }
2599  fclose(f);
2600  fclose(fmt);
2601  delete pat1; pat1=0;
2602  delete pat2; pat2=0;
2603 
2604  printf("Total: %d predictions, %d basetracks in scanned pattern\n",pred.N(), pat->N() );
2605  int sum=0;
2606  printf("Before chi2 cut: \n" );
2607  for(int i=0; i<maxcand; i++)
2608  if(count[i]>0) {
2609  printf("count(%5d)= %5d\n",i, count[i] );
2610  sum+=count[i];
2611  }
2612  printf("sum = %d\n",sum );
2613  sum=0;
2614  printf("After chi2 cut: \n" );
2615  for(int i=0; i<maxcand; i++)
2616  if(cnsel[i]>0) {
2617  printf("cnsel(%5d)= %5d\n",i, cnsel[i] );
2618  sum+=cnsel[i];
2619  }
2620  printf("sum = %d\n",sum );
2621 
2622  LogPrint(id[0],1,"FindPredictions","%d.%d.%d.%d: %d out of %d predictions are found (%d-zero, %d-single, %d-multy), maxholes=%d",
2623  id[0],id[1],id[2],id[3],sum-cnsel[0],pred.N(),cnsel[0],cnsel[1], sum-cnsel[0]-cnsel[1], maxholes);
2624 
2625  return sum-cnsel[0];
2626 }
int GetCPData_new(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbDataSet.cxx:797
float Shr() const
Definition: EdbLayer.h:90
EdbAffine2D * GetAffineTXTY()
Definition: EdbLayer.h:121
void FillCell(float stepx, float stepy, float steptx, float stepty)
Definition: EdbPattern.cxx:1416
Int_t Npatterns() const
Definition: EdbPattern.h:380
float BinTX() const
Definition: EdbScanCond.h:80
void FillErrorsCov(float tx, float ty, TMatrixD &cov)
Definition: EdbScanCond.cxx:161
float BinX() const
Definition: EdbScanCond.h:78
void SetErrors()
Definition: EdbSegP.h:89
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t TX() const
Definition: EdbSegP.h:172
Int_t ID() const
Definition: EdbSegP.h:144
void SetID(int id)
Definition: EdbSegP.h:125
Float_t W() const
Definition: EdbSegP.h:148
Float_t TY() const
Definition: EdbSegP.h:173
void Clear()
Definition: EdbSegP.h:85
void SetFlag(int flag)
Definition: EdbSegP.h:127
Int_t Flag() const
Definition: EdbSegP.h:146
void TransformA(const EdbAffine2D *affA)
Definition: EdbPattern.cxx:367
void TransformShr(const float shr)
Definition: EdbPattern.cxx:384
Float_t Y() const
Definition: EdbPattern.h:86
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
Float_t X() const
Definition: EdbPattern.h:85
EdbSegP * GetSegmentLast() const
Definition: EdbPattern.h:67
TClonesArray * GetSegments() const
Definition: EdbPattern.h:69
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71

◆ FindPredictions() [2/2]

int EdbScanProc::FindPredictions ( int  id[4],
int  flag = -1,
int  maxholes = 3 
)
1287 {
1288  //find predictions of yp.yp.yp.yp.pred.root in yp.yp.yp.yp.cp.root and produce yp.yp.yp.yp.found.root
1289  // flag: -1 - all predictions
1290  // 0 - only found in the previous plate (no holes)
1291  // 1 - 1 holes before
1292  // 2 - 2 holes before
1293  // 3 - 3 holes before
1294 
1295  int nfound=0;
1296  EdbPattern pred, found;
1297  ReadPred(pred,id, flag);
1298  nfound = FindPredictions(pred, id,found, maxholes);
1299  WriteFound(found,id);
1300 
1301  //EdbTestAl ta;
1302  //ta.HDistance(pred,found);
1303  //ta.FillTree(0);
1304  //EdbAffine2D aff;
1305  //ta.MakeTrans(aff,0,"(dx*dx+dy*dy)>0.00001&&abs(dx)<100&&abs(dy)<100");
1306 
1307  return nfound;
1308 }
int WriteFound(EdbPattern &pred, int id[4], int flag=-1)
Definition: EdbScanProc.h:71
int FindPredictions(EdbPattern &pred, int id[4], EdbPattern &found, int maxholes=3)
Definition: EdbScanProc.cxx:2457

◆ FindPredictionsRaw() [1/2]

int EdbScanProc::FindPredictionsRaw ( EdbID  idp,
EdbID  idr 
)
2120 {
2121  // find raw microtracks for the predictions of idp in raw data of idr
2122  // Input: idp.pred.root, idr.raw.root
2123  // Output: idp.found.root, idp.found.raw.txt
2124 
2125  EdbPattern pred;
2126  EdbPattern found;
2127  ReadPred(pred,idp);
2128  EdbRunAccess ra;
2129  InitRunAccess(ra,idr);
2130 
2131  EdbScanCond condBT;
2132  EdbScanCond condMT;
2133  SetDefaultCondBT(condBT);
2134  SetDefaultCondMT(condMT);
2135  float delta_theta = 0.1;
2136  float puls_min = 7;
2137  float chi2max = 1.6;
2138  int nfound = FindPredictionsRaw(pred,found,ra, condBT,condMT, delta_theta, puls_min, chi2max);
2139  WriteFound(found, idp);
2140 
2141  return nfound;
2142 }
int FindPredictionsRaw(EdbID idp, EdbID idr)
Definition: EdbScanProc.cxx:2119
void SetDefaultCondBT(EdbScanCond &cond)
Definition: EdbScanProc.cxx:2355
void SetDefaultCondMT(EdbScanCond &cond)
Definition: EdbScanProc.cxx:2369

◆ FindPredictionsRaw() [2/2]

int EdbScanProc::FindPredictionsRaw ( EdbPattern pred,
EdbPattern found,
EdbRunAccess ra,
EdbScanCond condBT,
EdbScanCond condMT,
float  delta_theta = 0.1,
float  puls_min = 5.,
float  puls_mt = 9.,
float  chi2max = 1.6,
FILE *  out = 0 
)
2148 {
2149  // find raw microtracks for the predictions "pred" in run "ra"
2150  // Input: pred,ra
2151  // Output: fnd - basetracks with position taken from the best microtrack (if any) and the angle of the predicted basetrack
2152 
2153  Log(2,"FindPredictionsRaw"," search for %d predictions \n", pred.N());
2154 
2155  TFile ftree("micro.root","RECREATE");
2156  EdbSegP *s_b = new EdbSegP();
2157  EdbSegP *sf_b = new EdbSegP();
2158  TClonesArray *pat1_b = new TClonesArray("EdbSegP");
2159  TClonesArray *pat2_b = new TClonesArray("EdbSegP");
2160  TTree micro("micro","micro");
2161  micro.Branch("s.","EdbSegP",&s_b,32000,99);
2162  micro.Branch("sf.","EdbSegP",&sf_b,32000,99);
2163  micro.Branch("s1.",&pat1_b,32000,99);
2164  micro.Branch("s2.",&pat2_b,32000,99);
2165 
2166  if(!out) out = fopen("micro.txt","w");
2167  if(!out) return 0;
2168  if(gEDBDEBUGLEVEL>2) ra.Print();
2169 
2170  for(int i=0; i<pred.N(); i++) {
2171  ra.ClearCuts();
2172  EdbSegP s;
2173  s.Copy( *(pred.GetSegment(i)) );
2174  s.SetZ(107.); // TODO!
2175  s.SetErrors();
2176  float xmin[5]={-500, -500, s.TX()-delta_theta, s.TY()-delta_theta, puls_min }; //TODO!!
2177  float xmax[5]={ 500, 500, s.TX()+delta_theta, s.TY()+delta_theta, 50 };
2178  condBT.FillErrorsCov( s.TX(), s.TY(), s.COV() );
2179  fprintf(out,"\n%8.8d %11.2f %11.2f %7.4f %7.4f\n",s.ID(),s.X(),s.Y(),s.TX(),s.TY());
2180 
2181  EdbPVRec aview; //with 2 patterns of preselected microtracks
2182  aview.AddPattern( new EdbPattern(0,0,214)); // TODO! sequence??
2183  aview.AddPattern( new EdbPattern(0,0,0) );
2184 
2185  for(int side=1; side<=2; side++) {
2186  Log(3,"FindPredictionsRaw","side = %d\n",side);
2187  EdbPattern pat;
2188  ra.AddSegmentCut(side,1,xmin,xmax);
2189  ra.GetPatternXY( s, side, pat );
2190 
2191  for(int i=0; i<pat.N(); i++) {
2192  EdbSegP *ss = pat.GetSegment(i);
2193  ss->SetErrors();
2194  condMT.FillErrorsCov( s.TX(), s.TY(), ss->COV() );
2195  }
2196  pat.FillCell(10,10,0.01,0.01); //divide view on this cells
2197 
2198  TArrayF chi2arr(1000); //TODO!
2199  TObjArray found;
2200  int nf= FindCompliments(s,pat,found, chi2max, chi2arr);
2201  for(int j=0; j<found.GetEntriesFast(); j++) {
2202  EdbSegP *s2 = (EdbSegP *)(found.At(j));
2203  s2->SetChi2(chi2arr[j]); // TODO -???
2204  aview.GetPattern(side-1)->AddSegment(*s2);
2205  float offx=s2->X()-(s.X()+s.TX()*(s2->Z()-s.Z()));
2206  float offy=s2->Y()-(s.Y()+s.TY()*(s2->Z()-s.Z()));
2207  fprintf(out,"s%1d(%2d)%4d %11.2f %11.2f %7.4f %7.4f %6.1f %7.2f %7.2f %7.4f %7.4f %6.3f %3.0f\n",
2208  side,nf,s2->ID(),s2->X(),s2->Y(),s2->TX(),s2->TY(),s2->Z(),
2209  offx,offy,
2210  s2->TX()-s.TX(),s2->TY()-s.TY(),chi2arr[j],s2->W());
2211  }
2212  }
2213 
2214  EdbSegP sfmt; // container for the found best microtrack passed the cuts
2215  sfmt.SetChi2(10.*chi2max);
2216 
2217  float rlim = 20; // TODO
2218  float chi, chimin = 1.5; // TODO for bt selection
2219  EdbSegP *s1b=0, *s2b=0; // the best bt
2220  EdbSegP s3;
2221 
2222  for(int is1=0; is1<aview.GetPattern(0)->N(); is1++) {
2223  EdbSegP *s1 = aview.GetPattern(0)->GetSegment(is1);
2224  if( sfmt.Chi2() > s1->Chi2() && s1->W() >= puls_mt ) {sfmt.Copy(*s1); sfmt.SetFlag(1);}
2225  }
2226  for(int is2=0; is2<aview.GetPattern(1)->N(); is2++) {
2227  EdbSegP *s2 = aview.GetPattern(1)->GetSegment(is2);
2228  if( sfmt.Chi2() > s2->Chi2() && s2->W() >= puls_mt ) {sfmt.Copy(*s2); sfmt.SetFlag(2);}
2229  }
2230 
2231  for(int is1=0; is1<aview.GetPattern(0)->N(); is1++) {
2232  for(int is2=0; is2<aview.GetPattern(1)->N(); is2++) {
2233  EdbSegP *s1 = aview.GetPattern(0)->GetSegment(is1);
2234  EdbSegP *s2 = aview.GetPattern(1)->GetSegment(is2);
2235 
2236  float dx1=s1->X()-(s.X()+s.TX()*(s1->Z()-s.Z()));
2237  float dy1=s1->Y()-(s.Y()+s.TY()*(s1->Z()-s.Z()));
2238  float dx2=s2->X()-(s.X()+s.TX()*(s2->Z()-s.Z()));
2239  float dy2=s2->Y()-(s.Y()+s.TY()*(s2->Z()-s.Z()));
2240  float r = Sqrt( (dx1-dx2)*(dx1-dx2) + (dy1-dy2)*(dy1-dy2) );
2241  fprintf(out,"r = %7.2f ",r);
2242  if(r<rlim) { // has good BT
2243  s3.Copy(s);
2244  s3.SetX( 0.5*(s1->X() + s2->X()) );
2245  s3.SetY( 0.5*(s1->Y() + s2->Y()) );
2246  s3.SetZ( 0.5*(s1->Z() + s2->Z()) );
2247  s3.SetTX( (s2->X() - s1->X()) / (s2->Z() - s1->Z()) );
2248  s3.SetTY( (s2->Y() - s1->Y()) / (s2->Z() - s1->Z()) );
2249  s3.SetFlag(0);
2250 
2251  //s3.Print();
2252  //s.Print();
2253  chi = EdbTrackFitter::Chi2Seg(&s3, &s);
2254  //printf("chi = %7.4f\n",chi);
2255  fprintf(out,"chi = %7.4f\n",chi);
2256  if(chi<chimin) { //select the best basetrack
2257  chimin = chi;
2258  s1b = s1;
2259  s2b = s2;
2260  }
2261  }
2262  }
2263  }
2264 
2265  EdbSegP sf; // container for the found track
2266 
2267  int bth, mth, tb; // basetrack holes, mt-holes, top/bottom;
2268 
2269  sf.Copy(s);
2270  if(s1b&&s2b) {
2271  sf.SetX( 0.5*(s1b->X() + s2b->X()) );
2272  sf.SetY( 0.5*(s1b->Y() + s2b->Y()) );
2273  sf.SetZ( 0.5*(s1b->Z() + s2b->Z()) );
2274  sf.SetTX( (s2b->X() - s1b->X()) / (s2b->Z() - s1b->Z()) );
2275  sf.SetTY( (s2b->Y() - s1b->Y()) / (s2b->Z() - s1b->Z()) );
2276  sf.SetFlag(0); // if bt found : bth=0, mth=0, tb=0
2277  sf.SetChi2(chimin);
2278  } else if(sfmt.Chi2()<chi2max) { // found good microtrack
2279  //float zmean = ra.GetLayer(0)->Z();
2280  float zmean = s.Z();
2281  //printf("Zmt = %f zmean = %f Zs = %f \n",sfmt.Z(),zmean,s.Z());
2282  sf.SetX( sfmt.X() + s.TX()*(zmean-sfmt.Z()) );
2283  sf.SetY( sfmt.Y() + s.TY()*(zmean-sfmt.Z()) );
2284  sf.SetZ(zmean);
2285  bth = s.Flag()/10000; bth++;
2286  mth = 0;
2287  tb = sfmt.Flag();
2288  sf.SetFlag(bth*10000+mth*100+tb); // if mt found : bth++, mth=0, tb=1/2
2289  } else {
2290  bth = s.Flag()/10000; bth++;
2291  mth = (s.Flag()/100)%100; mth++;
2292  tb = s.Flag()%10;
2293  sf.SetFlag(bth*10000+mth*100+tb); // hole: if not found: bth++, mth++, tb= keep last value
2294  }
2295 
2296  s_b->Copy(s);
2297  sf_b->Copy(sf);
2298  pat1_b = aview.GetPattern(0)->GetSegments();
2299  pat2_b = aview.GetPattern(1)->GetSegments();
2300  micro.SetBranchAddress("s1." , &pat1_b );
2301  micro.SetBranchAddress("s2." , &pat2_b );
2302  micro.Fill();
2303 
2304  fnd.AddSegment(sf);
2305  }
2306 
2307  //ftree.cd();
2308  micro.Write();
2309  ftree.Close();
2310  fclose(out);
2311  return 1; //TODO!
2312 }
My_Track * micro
Definition: RecDispNU.C:86
void ClearCuts()
Definition: EdbRunAccess.cxx:95
void Print()
Definition: EdbRunAccess.cxx:103
int FindCompliments(EdbSegP &s, EdbPattern &pat, TObjArray &found, float chi2max, TArrayF &chiarr)
Definition: EdbScanProc.cxx:2315
void SetY(Float_t y)
Definition: EdbSegP.h:175
void SetTX(Float_t tx)
Definition: EdbSegP.h:176
void SetX(Float_t x)
Definition: EdbSegP.h:174
Float_t Chi2() const
Definition: EdbSegP.h:154
Float_t Z() const
Definition: EdbSegP.h:150
void SetTY(Float_t ty)
Definition: EdbSegP.h:177
void SetChi2(float chi2)
Definition: EdbSegP.h:132

◆ FindPredictionsRawSet()

int EdbScanProc::FindPredictionsRawSet ( EdbID  idp,
EdbScanSet ss,
int  npl 
)
2099 {
2100  bool direction = idp.ePlate<last_plate ? true : false;
2101  int count=0;
2102  EdbID *idthis = ss.FindPlateID(idp.ePlate);
2103  if(!idthis) return 0;
2104  EdbID *idnext = 0;
2105  while(1) {
2106  FindPredictionsRaw(*idthis, *idthis);
2107  count++;
2108  idnext = ss.FindNextPlateID( idthis->ePlate, direction ); // find next plate
2109  if(!idnext) break;
2110  if( direction && idnext->ePlate>last_plate ) break;
2111  if( !direction && idnext->ePlate<last_plate ) break;
2112  ProjectFound(*idthis,*idnext);
2113  idthis=idnext;
2114  }
2115  return count;
2116 }
bool ProjectFound(int id1[4], int id2[4])
Definition: EdbScanProc.cxx:1135

◆ FindRawTrack() [1/2]

int EdbScanProc::FindRawTrack ( EdbTrackP pred,
EdbTrackP found,
EdbID  idset,
int  plate 
)
3432 {
3433  // found segments will be added to track tr
3434  TEnv env; //env.SaveLevel(kEnvLocal);
3435  return FindRawTrack( pred,found,idset,plate,env );
3436 }
int FindRawTrack(EdbTrackP &pred, EdbTrackP &found, EdbID idset, int plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3439
EdbID idset
Definition: emrec.cpp:35

◆ FindRawTrack() [2/2]

int EdbScanProc::FindRawTrack ( EdbTrackP pred,
EdbTrackP found,
EdbID  idset,
int  plate,
TEnv &  cenv 
)
3440 {
3441  // found segments will be added to track tr
3442 
3443  EdbRunTracking rt;
3444  rt.eDeltaRview = env.GetValue( "fedra.RawTrack.DeltaRview", 700. );
3445  rt.eDeltaTheta = env.GetValue( "fedra.RawTrack.DeltaTheta", 0.15 );
3446  rt.eDeltaR = env.GetValue( "fedra.RawTrack.DeltaR", 10. );
3447  rt.ePreliminaryPulsMinMT = env.GetValue( "fedra.RawTrack.PreliminaryPulsMinMT", 4. );
3448  rt.ePreliminaryChi2MaxMT = env.GetValue( "fedra.RawTrack.PreliminaryChi2MaxMT", 5. );
3449  rt.ePulsMinMT = env.GetValue( "fedra.RawTrack.PulsMinMT", 10. );
3450  rt.eChi2MaxMT = env.GetValue( "fedra.RawTrack.Chi2MaxMT", 2.6 );
3451  rt.ePulsMinBT = env.GetValue( "fedra.RawTrack.PulsMinBT", 15. );
3452  rt.eChi2MaxBT = env.GetValue( "fedra.RawTrack.Chi2MaxBT", 2.5 );
3453  rt.eDegradPos = env.GetValue( "fedra.RawTrack.DegradPos", 3. );
3454  rt.eDegradSlope = env.GetValue( "fedra.RawTrack.DegradSlope", 0.001 );
3455  rt.eAFID = env.GetValue( "fedra.RawTrack.AFID" , 1 );
3458 
3459  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return 0;
3460  EdbID *id = ss->FindPlateID(plate); if(!id) return 0;
3461  EdbPlateP *pl = ss->GetPlate(plate); if(!pl) return 0;
3462 
3463  TString runfile;
3464  MakeFileName(runfile,*id,"raw.root");
3465  if( !rt.InitRun(runfile) ) return 0;
3466 
3467  rt.GetLayer(2)->Copy( *(pl->GetLayer(2)) );
3468  rt.GetLayer(1)->Copy( *(pl->GetLayer(1)) );
3469 
3470  int status = rt.FindTrack(pred,found, *pl);
3471  //found.AddSegment( new EdbSegP( rt.eS1 ) );
3472  //found.AddSegment( new EdbSegP( rt.eS2 ) );
3473  return status;
3474 }
void Copy(const EdbLayer &l, bool nomap=false)
Definition: EdbLayer.cxx:36
EdbLayer * GetLayer(int i)
Definition: EdbBrick.h:28
EdbLayer * GetLayer(int id)
Definition: EdbRunAccess.h:125
bool InitRun(const char *runfile=0, bool do_update=false)
Definition: EdbRunAccess.cxx:112
Definition: EdbRunTracking.h:18
int FindTrack(EdbTrackP &pred, EdbTrackP &found, EdbPlateP &plate)
Definition: EdbRunTracking.cxx:574
Float_t ePulsMinBT
Definition: EdbRunTracking.h:37
Float_t eDeltaR
Definition: EdbRunTracking.h:33
EdbScanCond eCondMT
Definition: EdbRunTracking.h:22
Float_t ePreliminaryPulsMinMT
Definition: EdbRunTracking.h:27
Float_t eChi2MaxMT
Definition: EdbRunTracking.h:45
Float_t eDeltaRview
Definition: EdbRunTracking.h:25
Float_t ePreliminaryChi2MaxMT
Definition: EdbRunTracking.h:28
Float_t ePulsMinMT
Definition: EdbRunTracking.h:43
Float_t eDegradSlope
Definition: EdbRunTracking.h:56
EdbScanCond eCondBT
Definition: EdbRunTracking.h:23
Float_t eChi2MaxBT
Definition: EdbRunTracking.h:39
Float_t eDegradPos
Definition: EdbRunTracking.h:55
Float_t eDeltaTheta
Definition: EdbRunTracking.h:26

◆ FlashRawDir()

bool EdbScanProc::FlashRawDir ( EdbScanClient scan,
int  id[4] 
)
804 {
805  // move all rwc and rwd files from the raw scanning directory into the new subdir
806 
807  char str[256];
808  TDatime dt;
809  sprintf(str,"%s/rw_%u",scan.GetRawDirClient(),dt.Get());
810  LogPrint(id[0],2,"FlashRawDir","%d.%d.%d.%d: move all into %s", id[0],id[1],id[2],id[3],str);
811  if(!gSystem->OpenDirectory(str))
812  if( gSystem->MakeDirectory(str) == -1)
813  {
814  LogPrint(id[0],2,"FlashRawDir","WARNING! %d.%d.%d.%d: FAILED creating directory %s",
815  id[0],id[1],id[2],id[3],str);
816  return false;
817  }
818  char str2[256];
819 
820 #ifdef WIN32
821  sprintf(str2,"ren %s/raw.* %s",scan.GetRawDirClient(),str);
822 #else
823  sprintf(str2,"mv %s/raw.* %s",scan.GetRawDirClient(),str);
824 #endif
825 
826  gSystem->Exec(str2);
827  return true;
828 }

◆ GetAffZ()

bool EdbScanProc::GetAffZ ( EdbAffine2D aff,
float &  z,
int  id1[4],
int  id2[4] 
)
2630 {
2631  // read affine transformations and deltaZ from x.x.x.x_y.y.y.y.aff.par
2632  TString parfile;
2633  MakeAffName(parfile,id1,id2);
2634  EdbDataPiece piece;
2635  piece.eFileNamePar = parfile;
2636  if (piece.TakePiecePar() < 0) return false;
2637  EdbAffine2D *a = piece.GetLayer(0)->GetAffineXY();
2638  if(!a) return false;
2639  aff.Set( a->A11(),a->A12(),a->A21(),a->A22(),a->B1(),a->B2() );
2640  dz = piece.GetLayer(0)->Z();
2641  return true;
2642 }
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36

◆ GetMap()

bool EdbScanProc::GetMap ( int  brick,
TString &  map 
)
1931 {
1932  // get map string from the map file of this brick : .../bXXXXXX/bXXXXXX.map
1933  char str[256];
1934  sprintf(str,"%s/b%6.6d/b%6.6d.map", eProcDirClient.Data(),brick,brick);
1935  LogPrint(brick,1,"GetMap"," from file: %s\n",str);
1936  FILE *f = fopen(str,"r");
1937  if(!f) { LogPrint(brick,1,"GetMap","no map file: %s !!!\n",str); return false; }
1938  else if (fgets (str, 256, f) == NULL)
1939  { LogPrint(brick,1,"GetMap","error reading map file: %s !!!\n",str); return false; }
1940  LogPrint(brick,1,"GetMap","%s\n",str);
1941  map=str;
1942  fclose(f);
1943  return true;
1944 }
#define NULL
Definition: nidaqmx.h:84

◆ GetPatternSide()

void EdbScanProc::GetPatternSide ( EdbID  id,
int  side,
EdbLayer la,
const char *  segcut,
int  afid,
EdbPattern p 
)
3153 {
3154  int runside = 3-side;
3155  Log(2,"EdbScanProc::GetPatternSide","for id %s with cut %s", id.AsString(), segcut);
3156  EdbRunAccess r;
3157  TString runfile;
3158  MakeFileName(runfile,id,"raw.root");
3159  if( !r.InitRun(runfile) ) return;
3160  r.eAFID = afid;
3161  *(r.GetLayer(runside)) = la;
3162  r.AddSegmentCut( 1, segcut );
3163  r.GetLayer(runside)->Print();
3164  r.GetPatternDataForPrediction( -1, runside, p );
3165 }

◆ GetServerRunName()

const char * EdbScanProc::GetServerRunName ( ) const
3507  {
3508  return eServerCreatedRunName.Data();
3509 };
TString eServerCreatedRunName
Definition: EdbScanProc.h:19

◆ InitPiece() [1/2]

bool EdbScanProc::InitPiece ( EdbDataPiece piece,
EdbID  id 
)
inline
86 {int id4[4]; id.Get(id4); return InitPiece(piece,id4);}

◆ InitPiece() [2/2]

bool EdbScanProc::InitPiece ( EdbDataPiece piece,
int  id[4] 
)
2411 {
2412  // set raw, cp and par for the piece according to id
2413  TString runfile, cpfile, parfile;
2414  MakeFileName(runfile,id,"raw.root");
2415  MakeFileName(cpfile,id,"cp.root");
2416  MakeFileName(parfile,id,"in.par");
2417  piece.AddRunFile(runfile);
2418  piece.eFileNameCP = cpfile;
2419  piece.eFileNamePar = parfile;
2420  if(piece.TakePiecePar()<0) Log(1,"InitPiece","Warning: file %s does not exist!",parfile.Data());
2421  return true;
2422 }
void AddRunFile(const char *name)
Definition: EdbDataSet.cxx:181
TString eFileNameCP
root-style text cuts
Definition: EdbDataSet.h:49

◆ InitRun()

EdbRun * EdbScanProc::InitRun ( int  id[4],
char *  runname_ = NULL,
char *  runnamesrv_ = NULL,
bool  createrun_ = true 
)
1986 {
1987  // create new run file as eProcDirClient/bXXXXXX/pYYY/x.y.s.p.raw.root
1988  if(!CheckProcDir(id)) return 0;
1989  TString str;
1990  TString strSrv;
1991 
1992  MakeFileName(str,id,"raw.root"); // the file will have the requested name
1993  MakeFileNameSrv(strSrv,id,"raw.root"); // the file will have the requested name
1994 
1995  if( !gSystem->AccessPathName(str.Data(), kFileExists) ) { // if the file with the same name exists it will be saved as *root.xxx.save
1996  TString str2;
1997  for(int ic=0; ic<1000; ic++) {
1998  str2 = str; str2+="."; str2+=ic; str2+=".save";
1999  if( !gSystem->AccessPathName(str2.Data(), kFileExists) ) continue;
2000  else break;
2001  }
2002  //gSystem->CopyFile(str.Data(), str2.Data());
2003  char strbuf[1024];
2004 #ifdef WIN32
2005  sprintf(strbuf,"move /F %s %s", str.Data(), str2.Data());
2006 #else
2007  sprintf(strbuf,"mv -f %s %s", str.Data(), str2.Data());
2008 #endif
2009  gSystem->Exec(strbuf);
2010  LogPrint(id[0], 3,"EdbScanProc::InitRun"," %s\n",str2.Data());
2011  }
2012  LogPrint(id[0], 3,"EdbScanProc::InitRun"," %s\n",str.Data());
2013  if(runname_ != NULL){
2014  strcpy(runname_, str.Data());
2015  }
2016  if(runnamesrv_ != NULL){
2017  strcpy(runnamesrv_, strSrv.Data());
2018  }
2019  EdbRun* run = NULL;
2020  if(createrun_)
2021  run = new EdbRun(str.Data(),"RECREATE");
2022  return run;
2023 }
void MakeFileNameSrv(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1901
strcpy(cmd,"cp Shower.root Shower2.root")

◆ InitRunAccess() [1/2]

bool EdbScanProc::InitRunAccess ( EdbRunAccess ra,
EdbID  id,
bool  do_update = false 
)
inline
149 {int id4[4]; id.Get(id4); return InitRunAccess(ra, id4, do_update); }

◆ InitRunAccess() [2/2]

bool EdbScanProc::InitRunAccess ( EdbRunAccess ra,
int  id[4],
bool  do_update = false 
)
2384 {
2385  // initialize the EdbRunAccess object useful for the raw data handling
2386  EdbDataPiece p;
2387  if(!InitPiece(p,id)) return false;
2388  if(gEDBDEBUGLEVEL>2) p.Print();
2389  ra.eAFID = p.eAFID;
2390  if( !ra.InitRun(p.GetRunFile(0), do_update) ) {
2391  LogPrint(id[0],1,"InitRunAccess","ERROR open file %s !!!",p.GetRunFile(0));
2392  return false;
2393  } else
2394  LogPrint(id[0],2,"InitRunAccess"," %s with %d views",p.GetRunFile(0), ra.GetRun()->GetEntries() );
2395 
2396  ra.GetLayer(1)->SetZlayer( p.GetLayer(1)->Z(),p.GetLayer(1)->Zmin(),p.GetLayer(1)->Zmax());
2397  ra.GetLayer(2)->SetZlayer( p.GetLayer(2)->Z(),p.GetLayer(2)->Zmin(),p.GetLayer(2)->Zmax());
2398  ra.GetLayer(1)->SetShrinkage( p.GetLayer(1)->Shr());
2399  ra.GetLayer(2)->SetShrinkage( p.GetLayer(2)->Shr());
2400 
2401  EdbAffine2D *a1 = p.GetLayer(1)->GetAffineTXTY();
2402  EdbAffine2D *a2 = p.GetLayer(2)->GetAffineTXTY();
2403  ra.GetLayer(1)->SetAffTXTY( a1->A11(),a1->A12(),a1->A21(),a1->A22(), a1->B1(), a1->B2() );
2404  ra.GetLayer(2)->SetAffTXTY( a2->A11(),a2->A12(),a2->A21(),a2->A22(), a2->B1(), a2->B2() );
2405 
2406  return true;
2407 }
Float_t B2() const
Definition: EdbAffine.h:48
Float_t A22() const
Definition: EdbAffine.h:46
Float_t A21() const
Definition: EdbAffine.h:45
Float_t A12() const
Definition: EdbAffine.h:44
Float_t B1() const
Definition: EdbAffine.h:47
Float_t A11() const
Definition: EdbAffine.h:43
void SetAffTXTY(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbLayer.h:105
void SetShrinkage(float shr)
Definition: EdbLayer.h:100
EdbRun * GetRun() const
Definition: EdbRunAccess.h:123

◆ InitRunAccessNew() [1/2]

bool EdbScanProc::InitRunAccessNew ( EdbRunAccess ra,
EdbID  id,
EdbPlateP plate,
bool  do_update = false 
)
3183 {
3184  // use only scanset file (no *.par)
3185  // before this function one should define variables:
3186  // r.eInvertSides (default is 0 - no invert)
3187  // after:
3188  // r.eAFID (default is 1 - use view aff)
3189  // r.AddSegmentCut(...) , etc
3190  TString runfile;
3191  MakeFileName(runfile,id,"raw.root");
3192  if( r.InitRun(runfile, do_update) )
3193  {
3194  LogPrint(id.eBrick,2,"InitRunAccess"," %s with %d views",runfile.Data(), r.GetRun()->GetEntries() );
3195  r.GetLayer(2)->Copy( *(plate.GetLayer(1)) );
3196  r.GetLayer(1)->Copy( *(plate.GetLayer(2)) );
3197  r.GetLayer(0)->Copy( *((EdbLayer*)(&plate)) );
3198  return true;
3199  }
3200  return false;
3201 }
Definition: EdbLayer.h:40

◆ InitRunAccessNew() [2/2]

bool EdbScanProc::InitRunAccessNew ( EdbRunAccess ra,
EdbID  idset,
int  idplate,
bool  do_update = false 
)
3169 {
3171  if(set) {
3172  EdbPlateP *plate = set->GetPlate(idplate);
3173  if(plate) {
3174  EdbID id = idset; id.ePlate = idplate;
3175  return InitRunAccessNew(r, id, *plate, do_update);
3176  }
3177  }
3178  return false;
3179 }
bool InitRunAccessNew(EdbRunAccess &ra, EdbID id, EdbPlateP &plate, bool do_update=false)
Definition: EdbScanProc.cxx:3182
EdbScanSet * set
Definition: emtraceback.cpp:14

◆ LinkRun()

int EdbScanProc::LinkRun ( int  id[4],
int  noUpdate = 1 
)
2085 {
2086  // the x.x.x.x.in.par file must be prepared before
2087  EdbDataPiece piece;
2088  InitPiece(piece,id);
2089  EdbDataProc proc;
2090  proc.SetNoUpdate(noUpdate);
2091  TString parfileOUT;
2092  MakeFileName(parfileOUT,id,"par");
2093  piece.eFileNamePar = parfileOUT;
2094  return proc.Link(piece);
2095 }
void SetNoUpdate(int nu)
Definition: EdbDataSet.h:225
int Link()
Definition: EdbDataSet.cxx:1654

◆ LinkRunAll() [1/2]

int EdbScanProc::LinkRunAll ( EdbID  id,
int  npre = 3,
int  nfull = 1,
int  correct_ang = 1 
)
inline
106 {int id4[4]; id.Get(id4); return LinkRunAll(id4,npre,nfull,correct_ang);}
int LinkRunAll(int id[4], int npre=3, int nfull=1, int correct_ang=1)
Definition: EdbScanProc.cxx:1104

◆ LinkRunAll() [2/2]

int EdbScanProc::LinkRunAll ( int  id[4],
int  npre = 3,
int  nfull = 1,
int  correct_ang = 1 
)
1105 {
1106  LogPrint(id[0],1,"LinkRunAll","%d.%d.%d.%d %d prelinking + %d fullinking",
1107  id[0],id[1],id[2],id[3],npre,nfull);
1108  Int_t nc = 0;
1109  if (npre > 0) {
1110  MakeInPar(id, "prelinking"); // make input par file (x.x.x.x.in.par) for the current ID including the prelinking par file
1111  for (Int_t i = 0; i < npre; i++) {
1112  nc = LinkRun(id, 0); // will be done (pre)linking and updated x.x.x.x.par file
1113  if (correct_ang) CorrectAngles(id);
1114  }
1115  }
1116  if (nfull > 0) {
1117  MakeInPar(id, "fulllinking"); // make input par file including the fulllinking par file
1118  for (Int_t i = 0; i < nfull; i++) {
1119  //SafeDelete(gDIFF);
1120  //TFile f("diff.root","RECREATE");
1121  //gDIFF = new TNtuple("diff","diff","x1:y1:tx1:ty1:w1:x2:y2:tx2:ty2:w2:z:aid10:aid11:aid20:aid21");
1122 
1123  nc = LinkRun(id,1); // will be done (full)linking and DO NOT updated x.x.x.x.par file
1124 
1125  //gDIFF->AutoSave();
1126  //f.Close();
1127  //SafeDelete(gDIFF);
1128  }
1129  }
1130  LogPrint(id[0],1,"LinkRunAll","%d couples stored", nc);
1131  return nc;
1132 }
int CorrectAngles(int id[4])
Definition: EdbScanProc.cxx:2073
int LinkRun(int id[4], int noUpdate=1)
Definition: EdbScanProc.cxx:2084

◆ LinkRunNew()

void EdbScanProc::LinkRunNew ( EdbID  id,
EdbPlateP plate,
TEnv &  cenv 
)
3335 {
3336  TString rawfile, cpfile;
3337  MakeFileName(rawfile,id,"raw.root");
3338  MakeFileName(cpfile,id,"cp.root");
3339  EdbAlignmentMap amap( cpfile.Data(), "RECREATE");
3340  amap.eEnv = &cenv;
3341  amap.Link( rawfile.Data(), plate );
3342 }
Definition: EdbAlignmentMap.h:16

◆ LinkRunTest()

void EdbScanProc::LinkRunTest ( EdbID  id,
EdbPlateP plate,
TEnv &  cenv,
Int_t  ix = -1,
Int_t  iy = -1 
)
3205 {
3206  //which cell are we looking for? -1, no cell at all.
3207 
3208  EdbRunAccess r;
3209  r.eInvertSides=cenv.GetValue("fedra.link.read.InvertSides" , 0);
3210  r.eHeaderCut = cenv.GetValue("fedra.link.read.HeaderCut" , "1");
3211 
3212  if (ix >= 0 && iy >= 0){
3213 
3214  int ncellsX = cenv.GetValue("fedra.link.map.NX" , 19);
3215  int ncellsY = cenv.GetValue("fedra.link.map.NY" , 19);
3216 
3217  float xmin = cenv.GetValue("fedra.link.map.xmin" , 0.);
3218  float xmax = cenv.GetValue("fedra.link.map.xmax" , 190000.);
3219  float ymin = cenv.GetValue("fedra.link.map.ymin" , 0.);
3220  float ymax = cenv.GetValue("fedra.link.map.ymax" , 190000.);
3221 
3222  float overlap_fraction = cenv.GetValue("fedra.link.map.overlapfraction" , 0.); //how much should they overlap (for each side)
3223 
3224  printf("EdbScanProc::LinkRunTest ** processing cell %d %d\n", ix , iy);
3225  EdbCell2 * emulsioncell = new EdbCell2();
3226  Log(2,"LinkRunTest","cell layout, %d x cells from %f to %f, %d y cells from %f to %f",ncellsX, xmin, xmax, ncellsY, ymin, ymax );
3227  emulsioncell->InitCell(ncellsX,xmin,xmax,ncellsY,ymin,ymax,1); //1 is the maximum number for cells. In this case I use the cells only to map positions
3228  //setting header cut manually
3229  r.eHeaderCut = Form("TMath::Abs(eXview-%f) < %f && TMath::Abs(eYview-%f) < %f",
3230  emulsioncell->X(ix),emulsioncell->Xbin()*(1.+overlap_fraction)/2.,emulsioncell->Y(iy),emulsioncell->Ybin()*(1.+overlap_fraction)/2.);
3231  }
3232 
3233  r.eHeaderCut.Print();
3234  r.eAFID = cenv.GetValue("fedra.link.AFID" , 1);
3235  printf("EdbScanProc::LinkRunTest ** AFID=%d\n", r.eAFID);
3236  InitRunAccessNew(r,id,plate);
3237 
3238  r.eWeightAlg = cenv.GetValue("fedra.link.read.WeightAlg" , 0 );
3239  r.AddSegmentCut(1,cenv.GetValue("fedra.link.read.ICUT" , "-1") );
3240  r.eDoImageCorr = cenv.GetValue("fedra.link.DoImageCorr", 0 );
3241  if(r.eDoImageCorr) {
3242  r.SetImageCorrection( 1, cenv.GetValue("fedra.link.ImageCorrSide1" , "1. 1. 0.") );
3243  r.SetImageCorrection( 2, cenv.GetValue("fedra.link.ImageCorrSide2" , "1. 1. 0.") );
3244  }
3245 
3246  r.eDoImageMatrixCorr = cenv.GetValue("fedra.link.DoImageMatrixCorr", 0 );
3247  if(r.eDoImageMatrixCorr) {
3248  r.ReadImageMatrixCorrection( 1, cenv.GetValue("fedra.link.ImageMatrixCorrSide1" , "") );
3249  r.ReadImageMatrixCorrection( 2, cenv.GetValue("fedra.link.ImageMatrixCorrSide2" , "") );
3250  }
3251 
3252  r.eTracking = cenv.GetValue("fedra.link.Tracking" , -1);
3253 
3254  EdbPattern p1, p2;
3255  p1.SetScanID(id); p1.SetSide(2);
3256  p2.SetScanID(id); p2.SetSide(1);
3257  r.GetPatternDataForPrediction( -1, 2, p1 );
3258  r.GetPatternDataForPrediction( -1, 1, p2 );
3259 
3260  EdbLinking link;
3261  TString cpfile;
3262 
3263  MakeFileName(cpfile,id,"cp.root");
3264  link.InitOutputFile( cpfile );
3265 
3266  if( cenv.GetValue("fedra.link.CheckUpDownOffset" , 1) ) r.CheckUpDownOffsets()->Write();
3267  if(r.eDoViewAnalysis) {
3268  r.eHViewXY[1].DrawH2("ViewXY1","XY segments distribution in a view coord side 1")->Write();
3269  r.eHViewXY[2].DrawH2("ViewXY2","XY segments distribution in a view coord side 2")->Write();
3270  r.CheckViewSize();
3271  //r.CheckStepSize();
3272  }
3273 
3274  link.Link( p2, p1, *(plate.GetLayer(2)), *(plate.GetLayer(1)), cenv );
3275  link.CloseOutputFile();
3276  if(link.eDoCorrectShrinkage || link.eDoCorrectAngles) {
3277  UpdatePlatePar( id, link.eL1 ); //TODO: check up/down id
3278  UpdatePlatePar( id, link.eL2 );
3279  }
3280 }
Definition: EdbCell2.h:151
int InitCell(EdbCell2 &c)
Definition: EdbCell2.h:170
float X(int ix) const
Definition: EdbCell2.h:60
float Ybin() const
Definition: EdbCell2.h:78
float Y(int iy) const
Definition: EdbCell2.h:61
float Xbin() const
Definition: EdbCell2.h:77
Definition: EdbLinking.h:11
void SetSide(int side)
Definition: EdbPattern.h:321
void SetScanID(EdbID id)
Definition: EdbPattern.h:303
bool UpdatePlatePar(EdbID id, EdbLayer &l)
Definition: EdbScanProc.cxx:1060

◆ LinkSet()

int EdbScanProc::LinkSet ( EdbScanSet sc,
int  npre = 3,
int  nfull = 1,
int  correct_ang = 1 
)
663 {
664  int n=0;
665  EdbID *id;
666  for(int i=0; i<sc.eIDS.GetSize(); i++) {
667  id = (EdbID *)(sc.eIDS.At(i));
668  n += LinkRunAll(*id,npre,nfull,correct_ang);
669  }
670  return n;
671 }

◆ LinkSetNew()

void EdbScanProc::LinkSetNew ( EdbScanSet sc,
TEnv &  cenv 
)
3357 {
3358  if(sc.eIDS.GetSize()<1) return;
3359  for(int i=0; i<sc.eIDS.GetSize(); i++) {
3360  EdbID *id = (EdbID *)(sc.eIDS.At(i));
3361  EdbPlateP *plate = sc.GetPlate(id->ePlate);
3362  LinkRunNew(*id, *plate, cenv);
3363  }
3364 }
void LinkRunNew(EdbID id, EdbPlateP &plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3334

◆ LinkSetNewTest()

void EdbScanProc::LinkSetNewTest ( EdbScanSet sc,
TEnv &  cenv,
Int_t  ix = -1,
Int_t  iy = -1 
)
3346 {
3347  if(sc.eIDS.GetSize()<1) return;
3348  for(int i=0; i<sc.eIDS.GetSize(); i++) {
3349  EdbID *id = (EdbID *)(sc.eIDS.At(i)); if(!id) continue;
3350  EdbPlateP *plate = sc.GetPlate(id->ePlate); if(!plate) continue;
3351  LinkRunTest(*id, *plate, cenv,ix,iy);
3352  }
3353 }
void LinkRunTest(EdbID id, EdbPlateP &plate, TEnv &cenv, Int_t ix=-1, Int_t iy=-1)
Definition: EdbScanProc.cxx:3204

◆ LoadPlate()

int EdbScanProc::LoadPlate ( EdbScanClient scan,
int  id[4],
int  attempts = 1 
)
832 {
833  int status=0;
834  FlashRawDir(scan,id);
835  TString map;
836  if(!GetMap(id[0],map)) {
837  LogPrint(id[0],1,"LoadPlate","ERROR: map file does not exist! Stop here. *** %d.%d.%d status = %d ***",
838  id[0],id[1],id[2],status);
839  return status;
840  }
841  status= scan.LoadPlate(id[0],id[1],map.Data(),attempts);
842  LogPrint(id[0],1,"LoadPlate","******************** %d.%d.%d status = %d ************************************",
843  id[0],id[1],id[2],status);
844  return status;
845 }
bool GetMap(int brick, TString &map)
Definition: EdbScanProc.cxx:1930
bool FlashRawDir(EdbScanClient &scan, int id[4])
Definition: EdbScanProc.cxx:803

◆ LogPrint()

void EdbScanProc::LogPrint ( int  brick,
int  level,
const char *  rout,
const char *  msgfmt,
  ... 
)
3130 {
3131 // Print message to the logfile and to stdout.
3132  if(gEDBLOGFILE) {
3133  printf("WARNING in LogPrint! logfile seems to be opened. Trying to close it...\n");
3135  gEDBLOGFILE=0;
3136  }
3137  char str[512];
3138  sprintf(str,"%s/b%6.6d/b%6.6d.log", eProcDirClient.Data(), brick,brick);
3139  gEDBLOGFILE = fopen(str,"a");
3140  if(!gEDBLOGFILE) printf("ERROR in LogPrint! can not open logfile: %s\n",str);
3141 
3142  va_list ap;
3143  va_start(ap,va_(fmt));
3144  Log0(level, location, va_(fmt), ap);
3145  va_end(ap);
3146 
3148  gEDBLOGFILE=0;
3149 }
FILE * gEDBLOGFILE
Definition: EdbLog.cxx:25
void Log0(int level, const char *location, const char *fmt, va_list ap)
Definition: EdbLog.cxx:87

◆ MakeAffName() [1/2]

void EdbScanProc::MakeAffName ( TString &  s,
EdbID  id1,
EdbID  id2,
const char *  suffix = "aff.par" 
)
inline
41  { int id14[4]; id1.Get(id14); int id24[4]; id2.Get(id24); return MakeAffName(s,id14,id24,suffix); }

◆ MakeAffName() [2/2]

void EdbScanProc::MakeAffName ( TString &  s,
int  id1[4],
int  id2[4],
const char *  suffix = "aff.par" 
)
1918 {
1919  //make affine file name as ../bXXXXXX/AFF/a.a.a.a_b.b.b.b.aff.par
1920  char str[256];
1921  sprintf(str,"%s/b%6.6d/AFF/%d.%d.%d.%d_%d.%d.%d.%d.%s",
1922  eProcDirClient.Data(), id1[0],
1923  id1[0], id1[1], id1[2], id1[3],
1924  id2[0], id2[1], id2[2], id2[3],
1925  suffix);
1926  s=str;
1927 }

◆ MakeAFFSet()

bool EdbScanProc::MakeAFFSet ( EdbScanSet sc)
395 {
396  // create AFF dir if do not exist
397  // put all affine transformations inside for each plates couple
398 
399  if(!CheckAFFDir(sc.eID.eBrick)) return false;
400  if(sc.eIDS.GetSize()<2) return 0;
401  EdbID *id1,*id2;
402  for(int i=0; i<sc.eIDS.GetSize()-1; i++) {
403  id1 = (EdbID *)(sc.eIDS.At(i));
404  id2 = (EdbID *)(sc.eIDS.At(i+1));
405  EdbAffine2D aff;
406  sc.GetAffP2P(id1->ePlate,id2->ePlate, aff);
407  float dz = sc.GetDZP2P(id1->ePlate,id2->ePlate);
408  TString str;
409  MakeAffName(str,*id1,*id2);
410  char card[128];
411  sprintf(card,"ZLAYER 0 %f 0 0",dz);
412  LogPrint(id1->eBrick,2,"MakeAFFSet","%s as %s", str.Data(),card);
413  AddParLine(str.Data(),card);
414  sprintf(card,"AFFXY 0 %f %f %f %f %f %f", aff.A11(), aff.A12(), aff.A21(), aff.A22(), aff.B1(), aff.B2() );
415  LogPrint(id1->eBrick,2,"MakeAFFSet","%s as %s", str.Data(),card);
416  AddParLine(str.Data(),card);
417  }
418  return 1;
419 }
bool CheckAFFDir(int brick, bool create=true)
Definition: EdbScanProc.cxx:1837

◆ MakeAlignSetSummary() [1/2]

void EdbScanProc::MakeAlignSetSummary ( EdbID  id,
const char *  fileformat = "pdf" 
)
2895 {
2896  // assuming that exist the scan sets for idset
2897  // read id.n_id.n+1.aff.par and make a summary tree
2898 
2899  TString name;
2900  MakeFileName(name,idset,Form("align.%s",fileformat),false);
2901  Log(2,"MakeAlignSetSummary","%s",name.Data());
2902  gStyle->SetOptDate(1);
2903  gStyle->SetPalette(1);
2904  gStyle->SetOptStat(1001111);
2905  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2906  int n = ss->eIDS.GetSize(); if(n<2) return;
2907  for(int i=0; i<n-1; i++) {
2908  EdbID *id1 = ss->GetID(i);
2909  EdbID *id2 = ss->GetID(i+1);
2910 
2911  TString dataout; MakeAffName(dataout,*id1,*id2,"al.root");
2912  TFile *f = new TFile(dataout,"READ");
2913  if(!f) continue;
2914 
2915  EdbLayer *corr = (EdbLayer*)f->Get("corr_layer1");
2916  EdbPeak2 *peak2c = (EdbPeak2*)f->Get("peak2c");
2917  float xcenter1 = corr->X();
2918  float ycenter1 = corr->Y();
2919  EdbAffine2D *aXY=corr->GetAffineXY();
2920  float xoffset= aXY->A11()*xcenter1 + aXY->A12()*ycenter1 + aXY->B1() - xcenter1;
2921  float yoffset= aXY->A21()*xcenter1 + aXY->A22()*ycenter1 + aXY->B2() - ycenter1;
2922 
2923  Log(1,"UpdateAlignSummaryTree","peak: %7.0f/%7.2f/%7.3f dx,dy,dz: %7.3f %7.3f %7.3f for %s_%s",
2924  peak2c->Peak(),peak2c->Mean3(),peak2c->Mean(), xoffset,yoffset,corr->Zcorr(), id1->AsString(),id2->AsString() );
2925 
2926  TCanvas *c = (TCanvas*)f->Get("report_al");
2927  if(c) {
2928  c->SetName(Form("%s_%s",id1->AsString(), id2->AsString()));
2929  //c->Draw();
2930  if(i==0&&n>2) c->Print(Form("%s(",name.Data()),fileformat);
2931  else if(i==n-2&&n>2) c->Print(Form("%s)",name.Data()),fileformat);
2932  else c->Print(name,fileformat);
2933  }
2934  f->Close();
2935  }
2936 }
float Zcorr() const
Definition: EdbLayer.h:91
float Y() const
Definition: EdbLayer.h:77
float X() const
Definition: EdbLayer.h:76
Definition: EdbCell2.h:104
float Mean3(int i=0) const
Definition: EdbCell2.h:141
float Mean(int i=0) const
Definition: EdbCell2.h:142
float Peak(int i=0) const
Definition: EdbCell2.h:140
new TCanvas()

◆ MakeAlignSetSummary() [2/2]

void EdbScanProc::MakeAlignSetSummary ( EdbID  id1,
EdbID  id2,
const char *  fout,
const char *  opt = "UPDATE" 
)
2856 {
2857  // assuming that exist the scan sets for idset1 and idset2
2858  // read id1_id2.aff.par and make a summary tree
2859 
2860  Log(2,"MakeAlignSetSummary","open file %s for %s",file,mode);
2861  TFile *f = file? new TFile(file,mode): 0;
2862  if(!f) return;
2863  TTree *tree = (TTree*)f->Get("alsum");
2864  if(!tree) {
2865  tree = new TTree("alsum","Alignment Summary");
2866  Int_t peak=0;
2867  //Float_t x0,y0,dx,dy,dz1,dz2;
2868  EdbID *id1=0, *id2=0;
2869  EdbLayer *corr = 0;
2870  EdbPeak2 *peak2c = 0;
2871  Float_t xoffset=0,yoffset=0;
2872  tree->Branch("id1", "EdbID", &id1);
2873  tree->Branch("id2", "EdbID", &id2);
2874  tree->Branch("corr", "EdbLayer", &corr);
2875  tree->Branch("peak2c","EdbPeak2", &peak2c);
2876  tree->Branch("peak", &peak,"peak/I");
2877  tree->Branch("xoffset", &xoffset,"xoffset/F");
2878  tree->Branch("yoffset", &yoffset,"yoffset/F");
2879  }
2880  EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
2881  EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
2882  gStyle->SetPalette(1);
2883  int n = ss1->eIDS.GetSize();
2884  for(int i=0; i<n; i++) {
2885  EdbID *id1 = ss1->GetID(i);
2886  EdbID *id2 = ss2->FindPlateID(id1->ePlate);
2887  if(id2) UpdateAlignSummaryTree(*id1,*id2,*tree);
2888  }
2889  tree->AutoSave();
2890  f->Close();
2891 }
void UpdateAlignSummaryTree(EdbID idset1, EdbID idset2, TTree &tree)
Definition: EdbScanProc.cxx:2939

◆ MakeEraseFile()

void EdbScanProc::MakeEraseFile ( EdbID  id,
EdbPattern pat 
)
312 {
313  // input: pat with the segments to be erased - assumed that s.eVid[1] is the entry number in the couples tree
314  // ouput: file id.er.root with the EdbMask object "mask" inside
315  int entrmax=0;
316  for(int i=0; i<pat.N(); i++) if(pat.GetSegment(i)->Vid(1)>entrmax) entrmax=pat.GetSegment(i)->Vid(1);
317  if(!entrmax) return;
318  EdbMask mask(entrmax+1);
319  for(int i=0; i<pat.N(); i++) mask.SetAt(pat.GetSegment(i)->Vid(1),1);
320  TString str;
321  MakeFileName(str,id,"er.root");
322 
323  std::unique_ptr<TFile> f(TFile::Open(str.Data(),"RECREATE"));
324  if (!f || f->IsZombie()) Log(1,"EdbScanProc::MakeEraseFile","ERROR! can not open file %s", str.Data());
325  else mask.Write("mask");
326 }
Definition: EdbMask.h:8
Int_t Vid(int i) const
Definition: EdbSegP.h:165

◆ MakeFileName() [1/2]

void EdbScanProc::MakeFileName ( TString &  s,
EdbID  id,
const char *  suffix,
bool  inplate = true 
)
inline
35  {int id4[4]; id.Get(id4); return MakeFileName(s,id4,suffix,inplate);}

◆ MakeFileName() [2/2]

void EdbScanProc::MakeFileName ( TString &  s,
int  id[4],
const char *  suffix,
bool  inplate = true 
)
1886 {
1887  //make file pathname as .../bXXXXXX/pYYY/a.a.a.a.suffix if inplate==true
1888  //otherwise as .../bXXXXXX/a.a.a.a.suffix
1889  char str[256];
1890  if (inplate)
1891  sprintf(str,"%s/b%6.6d/p%3.3d/%d.%d.%d.%d.%s",
1892  eProcDirClient.Data(),ID[0], ID[1], ID[0], ID[1], ID[2], ID[3],suffix);
1893  else
1894  sprintf(str,"%s/b%6.6d/b%6.6d.%d.%d.%d.%s",
1895  eProcDirClient.Data(),ID[0], ID[0], ID[1], ID[2], ID[3],suffix);
1896 
1897  s=str;
1898 }

◆ MakeFileNameSrv() [1/2]

void EdbScanProc::MakeFileNameSrv ( TString &  s,
EdbID  id,
const char *  suffix,
bool  inplate = true 
)
inline
38  {int id4[4]; id.Get(id4); return MakeFileNameSrv(s,id4,suffix,inplate);}

◆ MakeFileNameSrv() [2/2]

void EdbScanProc::MakeFileNameSrv ( TString &  s,
int  id[4],
const char *  suffix,
bool  inplate = true 
)
1902 {
1903  //make file pathname as .../bXXXXXX/pYYY/a.a.a.a.suffix if inplate==true
1904  //otherwise as .../bXXXXXX/a.a.a.a.suffix
1905  char str[256];
1906  if (inplate)
1907  sprintf(str,"%s/b%6.6d/p%3.3d/%d.%d.%d.%d.%s",
1908  eProcDirServer.Data(),ID[0], ID[1], ID[0], ID[1], ID[2], ID[3],suffix);
1909  else
1910  sprintf(str,"%s/b%6.6d/b%6.6d.%d.%d.%d.%s",
1911  eProcDirServer.Data(),ID[0], ID[0], ID[1], ID[2], ID[3],suffix);
1912 
1913  s=str;
1914 }
TString eProcDirServer
Definition: EdbScanProc.h:15

◆ MakeInPar() [1/2]

bool EdbScanProc::MakeInPar ( EdbID  id,
const char *  option 
)
inline
45 {int id4[4]; id.Get(id4); return MakeInPar(id4,option);}

◆ MakeInPar() [2/2]

bool EdbScanProc::MakeInPar ( int  id[4],
const char *  option 
)
2050 {
2051  // prepare x.x.x.x.in.par file for the process defined in the option string
2052  TString name;
2053  MakeFileName(name,id,"in.par");
2054  FILE *f = fopen(name.Data(),"w");
2055  if(!f) {
2056  LogPrint(id[0],2,"MakeInPar","ERROR! can't open file: %s",name.Data() );
2057  return false;
2058  }
2059  if(eParDir.IsNull()) {
2060  eParDir=eProcDirClient; eParDir+="/parset"; // for backword scripts compatibility
2061  Log(3,"EdbScanProc::MakeInPar","take default parameters from: %s",eParDir.Data());
2062  }
2063  fprintf(f,"INCLUDE %s/opera_emulsion.par\n",eParDir.Data());
2064  fprintf(f,"INCLUDE %s/%s.par\n",eParDir.Data(),option);
2065  TString nm;
2066  MakeFileName(nm,id,"par");
2067  fprintf(f,"INCLUDE %s\n",nm.Data());
2068  fclose(f);
2069  return true;
2070 }
TString eParDir
Definition: EdbScanProc.h:16

◆ MakeInParSet()

void EdbScanProc::MakeInParSet ( EdbID  id,
const char *  option 
)
2039 {
2040  EdbScanSet *ss = ReadScanSet(id);
2041  int n = ss->eIDS.GetSize();
2042  for(int i=0; i<n; i++) {
2043  EdbID *id = ss->GetID(i);
2044  if(id) MakeInPar(*id,option);
2045  }
2046 }

◆ MakeLinkSetSummary()

void EdbScanProc::MakeLinkSetSummary ( EdbID  idset,
const char *  fileformat = "pdf" 
)

2977 {
2978  // assuming that exist the scan sets for idset
2979  // read id.n_id.n+1.aff.par and make a summary tree
2980 
2981  TString name;
2982  MakeFileName(name,idset,Form("link.%s",fileformat),false);
2983 
2984  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2985  int n = ss->eIDS.GetSize(); if(n<1) return;
2986  gStyle->SetOptDate(1);
2987  gStyle->SetPalette(1);
2988  gStyle->SetOptStat(1001111);
2989  for(int i=0; i<n; i++) {
2990  EdbID *id = ss->GetID(i);
2991  TString dataout; MakeFileName(dataout, *id, "cp.root");
2992  TFile *f = new TFile(dataout,"READ");
2993  if(!f) return;
2994  TCanvas *c = (TCanvas*)f->Get("report");
2995  if(c) {
2996  c->SetName(Form("%s",id->AsString()));
2997  if(i==0&&n>1) c->Print(Form("%s(",name.Data()),fileformat);
2998  else if(i==n-1&&n>1) c->Print(Form("%s)",name.Data()),fileformat);
2999  else c->Print(name,fileformat);
3000  }
3001  SafeDelete(f);
3002  }
3003  //tree->AutoSave();
3004  //f->Close();
3005 }

◆ MakeParSet()

bool EdbScanProc::MakeParSet ( EdbScanSet sc)
423 {
424  if(sc.eIDS.GetSize()<1) return false;
425  EdbID *id=0;
426  for(int i=0; i<sc.eIDS.GetSize(); i++) {
427  id = (EdbID *)(sc.eIDS.At(i));
428  CheckProcDir(*id);
429  TString name;
430  MakeFileName(name,*id,"par");
431  char card[128];
432  sprintf(card,"SHRINK 1 %f",sc.GetPlate(id->ePlate)->GetLayer(1)->Shr());
433  AddParLine(name,card,1);
434  sprintf(card,"SHRINK 2 %f",sc.GetPlate(id->ePlate)->GetLayer(2)->Shr());
435  AddParLine(name,card);
436  }
437  return 1;
438 }

◆ MakeScannedIDList()

void EdbScanProc::MakeScannedIDList ( EdbID  id0,
EdbScanSet sc,
int  pl_from,
int  pl_to,
const char *  suffix 
)
687 {
688  // check in all directories from pl_from to pl_to for a files with versions defined in id0 and the given suffix
689  // if found - add EdbID the scan set
690  sc.eIDS.Delete();
691  EdbID id(id0);
692  int step = pl_from>pl_to? -1:1;
693  for(int i=pl_from; i != pl_to+step; i+=step) {
694  id.ePlate=i;
695  TString str;
696  MakeFileName(str,id,suffix);
697  if( gSystem->AccessPathName(str, kReadPermission) )
698  { Log(3,"MakeScannedIDList","not found %s",str.Data()); continue; }
699  else Log(3,"MakeScannedIDList","use file %s",str.Data());
700  sc.eIDS.Add(new EdbID(id));
701  }
702 }

◆ MakeTracksPred()

int EdbScanProc::MakeTracksPred ( TObjArray &  tracks,
EdbID  id,
EdbLayer layer 
)
3368 {
3369  // Extrapolate each track of array tracks to layer.Z(), apply layer.Aff() and prepare
3370  // id.pred.root
3371 
3372  int ntr = tracks.GetEntriesFast();
3373  Log(2,"MakeTracksPred","%d tracks",ntr );
3374  id.Print(); layer.Print();
3375 
3376  EdbPattern pred(0,0, layer.Z(), ntr);
3377  EdbSegP s;
3378  for(int i=0; i<ntr; i++) {
3379  EdbTrackP *t = (EdbTrackP*)tracks.At(i);
3380  t->MakePredictionTo( layer.Z(), s );
3381  pred.AddSegment(s);
3382  }
3383  EdbAffine2D aff(*(layer.GetAffineXY()));
3384  aff.Invert();
3385  pred.Transform( &aff );
3386  WritePred(pred,id);
3387  return pred.N();
3388 }
TTree * t
Definition: check_shower.C:4
int WritePred(EdbPattern &pred, int id[4], int flag=-1)
Definition: EdbScanProc.h:69
Definition: EdbPattern.h:118
TTree * tracks
Definition: check_tr.C:19

◆ MergeSetSBT() [1/2]

void EdbScanProc::MergeSetSBT ( EdbID  id)
1397 {
1398  EdbScanSet *ss = ReadScanSet(id);
1399  if(ss) MergeSetSBT(id, *ss);
1400  delete ss;
1401 }
void MergeSetSBT(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1404

◆ MergeSetSBT() [2/2]

void EdbScanProc::MergeSetSBT ( EdbID  id,
EdbScanSet ss 
)
1405 {
1406  // merge all sbt files for a given scan set into bxxxxx.x.x.x.sbt.root
1407  if(!CheckBrickDir(id)) return;
1408  int npl = ss.eIDS.GetSize();
1409  if(npl<1) return;
1410  TString filename;
1411  TChain allsbt("sbt");
1412 
1413  for( int i=0; i<npl; i++ ) {
1414  EdbID *idp = ss.GetID(i);
1415  Log(2,"MergeSetSBT", "Adding plate %d...",idp->ePlate);
1416  MakeFileName(filename,*idp,"sbt.root");
1417  allsbt.Add(filename.Data());
1418  }
1419  MakeFileName(filename,id,"sbt.root",false);
1420  Log(2,"MergeSetSBT","Writing %s file...",filename.Data());
1421  allsbt.Merge(filename.Data());
1422 }
string filename
Definition: emthickness.cpp:34

◆ OptimizeScanPath()

void EdbScanProc::OptimizeScanPath ( EdbPattern pin,
EdbPattern pout,
int  brick 
)
875 {
876  // input: pin - predictions pattern
877  // output: pout - predictions pattern with optimized path (should be empty at the beginning)
878 
879  int n = pin.N();
880  if(pout.N()) pout.GetSegments()->Delete();
881  if(n>2) {
882  EdbSegP *s;
883  TIndexCell cell;
884  float xmin = pin.Xmin()-0.000001, xmax = pin.Xmax()+0.000001;
885  float ymin = pin.Ymin()-0.000001, ymax = pin.Ymax()+0.000001;
886  float eps = Sqrt(3.*(xmax-xmin)*(ymax-ymin)/n);
887  float binx = (xmax-xmin)/((int)((xmax-xmin)/eps));
888  Long_t v[3]; // x,y,i
889  for(int i=0; i<n; i++ ) {
890  s = pin.GetSegment(i);
891  v[0] = (Long_t)((s->X()-xmin)/binx);
892  v[1] = (Long_t)((s->Y()-ymin));
893  if(v[0]%2 != 0) v[1] = -v[1]; // serpentina along y
894  v[2] = i;
895  cell.Add(3,v);
896  }
897  cell.Sort();
898  for(int ix=0; ix<cell.GetEntriesFast(); ix++)
899  for(int iy=0; iy<cell.At(ix)->GetEntriesFast(); iy++)
900  for(int ii=0; ii<cell.At(ix)->At(iy)->GetEntriesFast(); ii++) {
901  s = pin.GetSegment(cell.At(ix)->At(iy)->At(ii)->Value());
902  pout.AddSegment(*s);
903  }
904  }
905  if( pout.N()>0 )
906  if( pin.SummaryPath() > pout.SummaryPath() ) { // good optimization
907  LogPrint(brick,2,"OptimizeScanPath","with %d predictions: gain in path[mm] before/after = %.1f/%.1f = %.1f",
908  n, pin.SummaryPath()/1000,pout.SummaryPath()/1000, pin.SummaryPath()/pout.SummaryPath());
909  return;
910  }
911  if(pout.N()) pout.GetSegments()->Delete();
912  for(int i=0; i<n; i++) pout.AddSegment(*(pin.GetSegment(i)));
913 }
float SummaryPath()
Definition: EdbPattern.cxx:1402
Definition: TIndexCell.h:19
Long_t Value() const
Definition: TIndexCell.h:79
Int_t GetEntriesFast() const
Definition: TIndexCell.h:82
TIndexCell const * At(Int_t narg, Int_t vind[]) const
Definition: TIndexCell.cpp:519
void Sort(Int_t upto=kMaxInt)
Definition: TIndexCell.cpp:539
Int_t Add(Int_t narg, Long_t varg[])
Definition: TIndexCell.cpp:602

◆ PrepareSetStructure()

bool EdbScanProc::PrepareSetStructure ( EdbScanSet sc)
442 {
443  // input: sc with brick and all id's defined
444  // function -check or create the directory structure for this brick,
445  // -create par-files for all plates
446  // -create aff.par files for all couples in the defined order
447  MakeParSet(sc);
448  MakeAFFSet(sc);
449  return true;
450 }
bool MakeAFFSet(EdbScanSet &sc)
Definition: EdbScanProc.cxx:394
bool MakeParSet(EdbScanSet &sc)
Definition: EdbScanProc.cxx:422

◆ PrepareVolumesPred()

void EdbScanProc::PrepareVolumesPred ( int  id[4],
EdbPattern points,
int  before = 5,
int  after = 5,
int  pmin = 1,
int  pmax = 57,
EdbScanSet sc = 0 
)
756 {
757  // Create prediction patterns for the stopping points in the segments of the pattern "points".
758  // For each point should be correctly defined (eID ePID eX eY eSX eSY).
759  // Input: idIN - identifier for predictions to be created
760  // points - stopping points in form of the segments (last found segment)
761  // before,after - number of plates before and after stopping point
762  // pmin,pmax - brick limits (normally 1-57)
763  // sc - EdbScanSet with affine transformations
764  // Output: x.x.x.x.pred.root for all necessary plates
765 
766  TIndexCell cell;
767  Long_t v[2]; // pl,id
768  EdbSegP *s=0;
769  for(int i=0; i<points.N(); i++) {
770  s = points.GetSegment(i);
771  for(int ip=Max(s->PID()-before,pmin); ip<=Min(s->PID()+after,pmax); ip++) {
772  v[0] = (Long_t)(ip);
773  v[1] = (Long_t)(i);
774  cell.Add(2,v);
775  }
776  }
777 
778  cell.Sort();
779  int count=0;
780  int plate;
781  for(int ip=0; ip<cell.GetEntriesFast(); ip++) {
782  plate = cell.At(ip)->Value(); // current prediction plate
783  EdbPattern pat;
784  for(int iv=0; iv<cell.At(ip)->GetEntriesFast(); iv++) {
785  s = points.GetSegment(cell.At(ip)->At(iv)->Value()); // s.PID() - stopping plate
786  pat.AddSegment(*s);
787  pat.GetSegment(iv)->SetPID(plate);
788  if(sc) {
789  EdbAffine2D aff;
790  if(sc->GetAffP2P(s->PID(), plate, aff) ) pat.GetSegment(iv)->Transform(&aff);
791  }
792  }
793  int id[4]={idIN[0],plate,idIN[2],idIN[3]};
794  WritePred(pat,id);
795  count += pat.N();
796  }
797 
798  LogPrint(idIN[0],2,"PrepareVolumesPred","%d.%d.%d.%d: for %d volumes generated %d predictions with settings: before=%d after=%d pmin=%d pmax=%d\n",
799  idIN[0],idIN[1],idIN[2],idIN[3],points.N(), count, before,after,pmin,pmax );
800 }
void SetPID(int pid)
Definition: EdbSegP.h:126
Int_t PID() const
Definition: EdbSegP.h:145
virtual void Transform(const EdbAffine2D *a)

◆ Print()

void EdbScanProc::Print ( )
43 {
44  printf("ProcDirClient: %s\n",eProcDirClient.Data());
45 }

◆ ProjectFound() [1/2]

bool EdbScanProc::ProjectFound ( EdbID  id1,
EdbID  id2 
)
inline
140 {int id14[4]; id1.Get(id14); int id24[4]; id2.Get(id24); return ProjectFound(id14, id24); }

◆ ProjectFound() [2/2]

bool EdbScanProc::ProjectFound ( int  id1[4],
int  id2[4] 
)
1136 {
1137  //take xp.xp.xp.xp.found.root and produce yp.yp.yp.yp.pred.root using the AFF/xp_yp.par
1138  LogPrint(id1[0],2,"ProjectFound","from %d.%d.%d.%d to %d.%d.%d.%d",
1139  id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3]);
1140  EdbPattern pat;
1141  ReadFound(pat,id1);
1142  //pat.SetZ(0);
1143  //pat.SetSegmentsZ();
1144  for (Int_t i = 0; i < pat.N(); i++) {
1145  pat.GetSegment(i)->SetErrors(50., 50., 0., .1, .1); // area to be scanned for this prediction
1146  }
1147  ApplyAffZ(pat,id1,id2);
1148  if (!WritePred(pat,id2)) return false;
1149  WritePatTXT(pat,id2,"man.pred.txt");
1150  return true;
1151 }
int WritePatTXT(EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
Definition: EdbScanProc.cxx:1561
bool ApplyAffZ(EdbPattern &pat, int id1[4], int id2[4])
Definition: EdbScanProc.cxx:2645

◆ ReadAffToLayer()

bool EdbScanProc::ReadAffToLayer ( EdbLayer la,
EdbID  id1,
EdbID  id2 
)
65 {
66  // read affine tranformation from file, into layer
67  EdbDataPiece piece;
68  TString parfile;
69  MakeAffName(parfile,id1,id2);
70  piece.eFileNamePar = parfile;
71  if (piece.TakePiecePar() < 0) { Log(2,"ReadAFFtoLayer","file %s do not found...", parfile.Data() ); return 0; }
72  la.Copy( *(piece.GetLayer(0)) );
73  la.SetZcorr(piece.GetLayer(0)->Z());
74  la.SetZlayer(0.,0.,0.);
75  if(gEDBDEBUGLEVEL>2) la.Print();
76  return true;
77 }
void SetZcorr(float zcorr)
Definition: EdbLayer.h:107

◆ ReadEraseMask()

EdbMask * EdbScanProc::ReadEraseMask ( EdbID  id)
706 {
707  TString str;
708  MakeFileName(str,id,"er.root");
709  Log(3,"EdbScanProc::ReadEraseMask"," %s",str.Data());
710  if( gSystem->AccessPathName(str, kReadPermission) ) return 0; //can not access file!
711  EdbMask *m = 0;
712  std::unique_ptr<TFile> f(TFile::Open(str.Data()));
713  if (!f || f->IsZombie()) Log(1,"EdbScanProc::ReadEraseFile","ERROR! can not open file %s", str.Data());
714  else m = dynamic_cast<EdbMask*>(f->Get("mask"));
715  return m;
716 }

◆ ReadFound() [1/2]

int EdbScanProc::ReadFound ( EdbPattern pred,
EdbID  id,
int  flag = -1 
)
inline
72 {int id4[4]; id.Get(id4); return ReadFound(pred,id4,flag);}

◆ ReadFound() [2/2]

int EdbScanProc::ReadFound ( EdbPattern pred,
int  id[4],
int  flag = -1 
)
inline
70 {return ReadPatRoot(pred,id,"found.root",flag);}
int ReadPatRoot(EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
Definition: EdbScanProc.cxx:1755

◆ ReadFoundSegment()

int EdbScanProc::ReadFoundSegment ( EdbID  id,
EdbSegP s,
int  flag = -1 
)
181 {
182  EdbPattern pat;
183  if (!ReadFound(pat, id, flag)) return 0;
184  EdbSegP *ss = pat.FindSegment(s.ID());
185  if (!ss) return 0;
186  s.Copy(*ss);
187  return 1;
188 }
EdbSegP * FindSegment(int id)
Definition: EdbPattern.cxx:1395

◆ ReadFoundTrack()

int EdbScanProc::ReadFoundTrack ( EdbScanSet ss,
EdbTrackP track,
int  flag = -1 
)
192 {
193  // read track.ID() from pieces in sc.IDS .found.root and apply transformations from sc
194 
195  EdbPlateP *plate;
196  int count=0;
197  int n = sc.eIDS.GetSize();
198  EdbPattern pat;
199  pat.AddSegment(track.ID(), 0,0,0,0);
200  EdbSegP *s = pat.GetSegment(0);
201 
202  for(int i=0; i<n; i++) {
203  EdbID *id = (EdbID *)(sc.eIDS.At(i));
204  if (ReadFoundSegment(*id,*s,flag) <= 0) continue;
205  count++;
206  plate = sc.GetPlate(id->ePlate);
207  pat.Transform( plate->GetAffineXY() );
208  pat.TransformA( plate->GetAffineTXTY() );
209  pat.TransformShr( plate->Shr() );
210  s->SetZ(plate->Z());
211  s->SetDZ(-214); //TODO!!!
212  s->SetPID(id->ePlate);
213  track.AddSegment( new EdbSegP(*s) );
214  }
215  track.SetCounters();
216  return count;
217 }
int ReadFoundSegment(EdbID id, EdbSegP &s, int flag=-1)
Definition: EdbScanProc.cxx:180
void SetDZ(float dz)
Definition: EdbSegP.h:123
Definition: bitview.h:14

◆ ReadFoundTracks()

int EdbScanProc::ReadFoundTracks ( EdbScanSet ss,
EdbPVRec ali,
int  flag = -1 
)
221 {
222  // read all tracks from found.root listed in sc.IDS and apply transformations from sc.eB
223  // return the total number of segments added
224 
225  EdbPlateP *plate;
226  int n = sc.eIDS.GetSize();
227  int count=0;
228 
229  for(int i=0; i<n; i++) {
230  EdbID *id = sc.GetID(i);
231  EdbPattern pat;
232  ReadFound(pat, *id, flag);
233  plate = sc.GetPlate(id->ePlate);
234  pat.SetPID(id->ePlate);
235  pat.SetID(id->ePlate);
236  pat.SetSegmentsPID();
237  pat.Transform( plate->GetAffineXY() );
238  pat.TransformA( plate->GetAffineTXTY() );
239  pat.TransformShr( plate->Shr() );
240  pat.SetZ(plate->Z());
241  pat.SetSegmentsZ();
242  pat.SetSegmentsDZ(plate->DZ()); // to check the direction!
243 
244  for(int j=0; j<pat.N(); j++) {
245  EdbSegP *s = pat.GetSegment(j);
246  EdbTrackP *track = ali.FindTrack(s->ID());
247  if(track) track->AddSegment( new EdbSegP(*s) );
248  else ali.AddTrack( new EdbTrackP(new EdbSegP(*s)) );
249  count++;
250  }
251  }
252 
253  int ntr = ali.Ntracks();
254  for(int i=0; i<ntr; i++) ali.GetTrack(i)->SetCounters();
255 
256  LogPrint(sc.eB.ID(),2,"ReadFoundTracks","%d segments read\n",count );
257 
258  return count;
259 }
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
Int_t Ntracks() const
Definition: EdbPVRec.h:203
EdbTrackP * FindTrack(int id) const
Definition: EdbPVRec.cxx:892
void AddTrack(EdbTrackP *track)
Definition: EdbPVRec.h:246
void SetSegmentsPID()
Definition: EdbPattern.cxx:1548
void SetID(int id)
Definition: EdbPattern.h:318
void SetSegmentsDZ(float dz)
Definition: EdbPattern.cxx:284
void SetCounters()
Definition: EdbPattern.h:164

◆ ReadManFoundTracks()

int EdbScanProc::ReadManFoundTracks ( EdbScanSet ss,
EdbPVRec ali,
int  flag = -1 
)
263 {
264  // read all tracks from *man.found.txt listed in sc.IDS and apply transformations from sc.eB
265  // return the total number of segments added
266 
267  EdbPlateP *plate;
268  int n = sc.eIDS.GetSize();
269  int count=0;
270 
271  for(int i=0; i<n; i++) {
272  EdbPattern pat;
273  EdbID *id = sc.GetID(i); if(!id) continue;
274  if( !ReadPatTXT(pat, *id, "man.found.txt",flag) ) continue;
275  plate = sc.GetPlate(id->ePlate); if(!plate) continue;
276  pat.SetPID(id->ePlate);
277  pat.SetID(id->ePlate);
278  pat.SetSegmentsPID();
279  pat.Transform( plate->GetAffineXY() );
280  pat.TransformA( plate->GetAffineTXTY() );
281  pat.TransformShr( plate->Shr() );
282  pat.SetZ(plate->Z());
283  //pat.SetSegmentsZ();
284  //pat.SetSegmentsDZ(plate->DZ()); // to check the direction!
285 
286  for(int j=0; j<pat.N(); j++) {
287  EdbSegP *s = pat.GetSegment(j);
288  s->SetVid(id->ePlate,0);
289  int side = s->Flag()%10;
290  if(side==0) s->SetZ(plate->Z());
291  if(side==1) s->SetZ(plate->Z()+107);
292  if(side==2) s->SetZ(plate->Z()-107);
293  EdbTrackP *track = ali.FindTrack(s->ID());
294  if(track) track->AddSegment( new EdbSegP(*s) );
295  else ali.AddTrack( new EdbTrackP(new EdbSegP(*s)) );
296  count++;
297  }
298  }
299 
300  n = ali.Ntracks();
301  for(int i=0; i<n; i++) {
302  ali.GetTrack(i)->SetCounters();
303  }
304 
305  LogPrint(sc.eB.ID(),2,"ReadManFoundTracks","%d segments read\n",count );
306 
307  return count;
308 }
int ReadPatTXT(EdbPattern &pred, EdbID id, const char *suffix, int flag=-1)
Definition: EdbScanProc.h:61
void SetVid(int vid, int sid)
Definition: EdbSegP.h:134

◆ ReadMarksSet()

int EdbScanProc::ReadMarksSet ( EdbMarksSet ms,
int  brick,
const char *  filename,
char  spacer = '_',
char  shape = 'S' 
)
3100 {
3101  // Reads map file and copy its informations into an EdbMarksSet object
3102  // With "spacer" you can choose the character which is assumed to be
3103  // between the words in the map file. Default is '_'
3104  char str[256];
3105  sprintf(str,"%s/b%6.6d/b%6.6d.%s",
3107 
3108  ms.ReadMap(str,spacer,shape);
3109 
3110  return(1);
3111 }
Int_t ReadMap(char *file, char spacer='_', char shape='S')
Definition: EdbFiducial.cxx:395

◆ ReadPatCP() [1/2]

int EdbScanProc::ReadPatCP ( EdbPattern pat,
EdbID  id,
TCut  c = "1" 
)
inline
89 {int id4[4]; id.Get(id4); return ReadPatCP(pat,id4,c);}
int ReadPatCP(EdbPattern &pat, int id[4], TCut c="1")
Definition: EdbScanProc.cxx:2425

◆ ReadPatCP() [2/2]

int EdbScanProc::ReadPatCP ( EdbPattern pat,
int  id[4],
TCut  c = "1" 
)
2426 {
2427  // read CP file ("base" segments) applying all cuts and transformations from x.x.x.x.in.par
2428  // the Z of the pat and all segments will be z of layer 0 defined in the par file(s)
2429  EdbDataPiece piece;
2430  InitPiece(piece, id);
2431  piece.GetLayer(0)->SetZlayer(piece.GetLayer(0)->Z(), 0,0);
2432  piece.AddRCut(0,cut);
2433  int n = ReadPiece(piece, pat);
2434  pat.SetZ(piece.GetLayer(0)->Z());
2435  pat.SetSegmentsZ();
2436 
2437  EdbID sid(id[0],id[1],id[2],id[3]);
2438  pat.SetSegmentsScanID(sid);
2439 
2440  return n;
2441 }
void AddRCut(int layer, TCut &cut)
Definition: EdbDataSet.cxx:240
void SetSegmentsScanID(EdbID id)
Definition: EdbPattern.cxx:1557

◆ ReadPatCPnopar() [1/2]

int EdbScanProc::ReadPatCPnopar ( EdbPattern pat,
const char *  file,
TCut  cut = "1",
EdbMask erase_mask = 0,
bool  read_mt = false 
)
730 {
731  EdbCouplesTree ect;
732  if(!ect.InitCouplesTree("couples",cpfile,"READ")) return 0;
733  ect.eCut=cut;
734  ect.eEraseMask = mask;
735 
736  int nread=0;
737  if(!read_mt) nread = ect.GetCPData( &pat );
738  else { // add microtracks as "digits" to the basetrack
739  EdbPattern p1, p2;
740  nread = ect.GetCPData( &pat,&p1,&p2,0 );
741  if (nread == 0) return 0;
742  for(int i=0; i<pat.N(); i++) {
743  EdbSegP *s = pat.GetSegment(i);
744  s->addEMULDigit( new EdbSegP(*(p1.GetSegment(i))) );
745  s->addEMULDigit( new EdbSegP(*(p2.GetSegment(i))) );
746  s->EMULDigitArray()->SetOwner();
747  }
748  }
749  ect.Close();
750  return nread;
751 }
Definition: EdbCouplesTree.h:17
TCut eCut
Definition: EdbCouplesTree.h:31
bool InitCouplesTree(const char *name="couples", const char *fname=0, Option_t *mode="READ")
Definition: EdbCouplesTree.cxx:87
void Close()
Definition: EdbCouplesTree.cxx:70
int GetCPData(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbCouplesTree.cxx:325
EdbMask * eEraseMask
Definition: EdbCouplesTree.h:27
void addEMULDigit(TObject *a)
Definition: EdbSegP.h:76
TRefArray * EMULDigitArray() const
Definition: EdbSegP.h:81

◆ ReadPatCPnopar() [2/2]

int EdbScanProc::ReadPatCPnopar ( EdbPattern pat,
EdbID  id,
TCut  cut = "1",
bool  do_erase = false,
bool  read_mt = false 
)
720 {
721  TString cpfile;
722  MakeFileName(cpfile,id,"cp.root");
723  EdbMask* mask = 0;
724  if(do_erase) mask = ReadEraseMask(id);
725  return ReadPatCPnopar(pat,cpfile.Data(),cut, mask, read_mt );
726 }
EdbMask * ReadEraseMask(EdbID id)
Definition: EdbScanProc.cxx:705

◆ ReadPatRoot()

int EdbScanProc::ReadPatRoot ( EdbPattern pred,
int  id[4],
const char *  suffix,
int  flag = -1 
)
1756 {
1757  // read root predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
1758  // flag convention:
1759  // -1 read all: basetracks, microtracks and holes (extrapolated predictions)
1760  // >=0 read only segments with this flag
1761  // -11 read basetracks or microtracks, skip holes (expected behaviour for display users)
1762 
1763  int n=0;
1764  TString str;
1765  MakeFileName(str,id,suffix);
1766 
1767  // checking for the existing directory
1768 
1769  FileStat_t buf;
1770 
1771  if (gSystem->GetPathInfo(gSystem->DirName(str), buf)) {
1772  if (gEDBDEBUGLEVEL > 0) {
1773  cout << "ERROR! Directory " << gSystem->DirName(str)
1774  << " does not exist.\n";
1775  cout << "Please run scanning procedure for the plate number " << id[1]
1776  << endl;
1777  }
1778  return 0;
1779  }
1780 
1781  EdbPattern *p=0;
1782  std::unique_ptr<TFile> f(TFile::Open(str.Data()));
1783  if (!f || f->IsZombie()) { Log(1,"EdbScanProc::ReadPatRoot","ERROR! can not open file %s", str.Data()); return 0;}
1784  else p = dynamic_cast<EdbPattern*>(f->Get("pat"));
1785  if (!p) return 0;
1786  for(int i=0; i<p->N(); i++) {
1787  EdbSegP *s = p->GetSegment(i);
1788  if (flag > -1 && flag != s->Flag()) continue;
1789  if (flag == -11 && EdbRunTracking::GetMTHoles(s->Flag())>0) continue;
1790  pred.AddSegment(*s)->SetSide( s->Flag()%10 );
1791  n++;
1792  }
1793  EdbID sid(id[0],id[1],id[2],id[3]);
1794  pred.SetSegmentsScanID(sid);
1795  SafeDelete(p);
1796  LogPrint(id[0],2,"ReadPatRoot","%s with %d predictions with flag: %d", str.Data(),n,flag);
1797  return n;
1798 }
static int GetMTHoles(int flag)
Definition: EdbRunTracking.h:79
void SetSide(int side=0)
Definition: EdbSegP.h:136

◆ ReadPatTXT() [1/3]

int EdbScanProc::ReadPatTXT ( const char *  file,
EdbPattern pred,
int  flag = -1 
)
1653 {
1654  // read ascii predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
1655  // man - for manual check by sysal
1656  // - overvise complete format
1657  // flag convention:
1658  // -1 read all: basetracks, microtracks and holes (extrapolated predictions)
1659  // >=0 read only segments with this flag
1660  // -11 read basetracks or microtracks, skip holes (expected behaviour for display users)
1661 
1662  EdbSegP s;
1663  Int_t ids = 0, flag = 0, ic = 0;
1664  Float_t x=0,y=0,tx=0,ty=0,sx=0,sy=0,stx=0,sty=0;
1665 
1666  char buffer[256];
1667 
1668  FILE *f = fopen(file, "r");
1669 
1670  if (!f) {
1671  Log(1,"ReadPatTXT","ERROR! can not open file %s", file);
1672  return 0;
1673  }
1674 
1675  fgets (buffer, sizeof(buffer), f);
1676  int ncolumns = sscanf(buffer,"%d %f %f %f %f %f %f %f %f %d",
1677  &ids,&x,&y,&tx,&ty,&sx,&sy,&stx,&sty,&flag);
1678 
1679  if (ncolumns!=6 && ncolumns!=10) {
1680  Log(1,"ReadPatTXT","ERROR! cannot recognize the format of file %s", file);
1681  return 0;
1682  }
1683 
1684  rewind(f);
1685 
1686  while (fgets (buffer, sizeof(buffer), f)) {
1687  if (sscanf(buffer,"%d %f %f %f %f %d",
1688  &ids,&x,&y,&tx,&ty,&flag) !=ncolumns ) break;
1689  if (flag0 > -1 && flag0 != flag) continue;
1690  if (flag0 == -11 && EdbRunTracking::GetMTHoles(flag)>0) continue;
1691  int side = flag%10;
1692  float ww=50;
1693  s.SetDZ(-214);
1694  if(side!=0) ww=25;
1695  if(side==1) s.SetDZ(45);
1696  if(side==2) s.SetDZ(-45);
1697 
1698  s.Set(ids,x,y,tx,ty,ww,flag);
1699  s.SetSide( side );
1700  if (ncolumns==10) s.SetErrors(sx,sy,0.,stx,sty);
1701  else s.SetErrors(50,50,0.,0.6,0.6);
1702  pred.AddSegment(s);
1703  ic++;
1704  }
1705 
1706  fclose(f);
1707 
1708  return ic;
1709 }
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86

◆ ReadPatTXT() [2/3]

int EdbScanProc::ReadPatTXT ( EdbPattern pred,
EdbID  id,
const char *  suffix,
int  flag = -1 
)
inline
61 {int id4[4]; id.Get(id4); return ReadPatTXT(pred,id4,suffix,flag);}

◆ ReadPatTXT() [3/3]

int EdbScanProc::ReadPatTXT ( EdbPattern pred,
int  id[4],
const char *  suffix,
int  flag = -1 
)
1636 {
1637  TString str;
1638  MakeFileName(str,id,suffix);
1639 
1640  ReadPatTXT(str.Data(),pred,flag);
1641  EdbID sid(id[0],id[1],id[2],id[3]);
1642  pred.SetSegmentsScanID(sid);
1643 
1644  LogPrint(id[0], 2, "ReadPatTXT","%s with %d predictions with flag: %d",
1645  str.Data(), pred.N(), flag);
1646 
1647  return pred.N();
1648 }

◆ ReadPiece()

int EdbScanProc::ReadPiece ( EdbDataPiece piece,
EdbPattern pat 
)
2445 {
2446  //assuming that piece was initialised correctly
2447  if(!piece.InitCouplesTree("READ")) return 0;
2448  piece.GetCPData_new( &pat,0,0,0 );
2449  pat.SetSegmentsZ();
2450  pat.Transform( piece.GetLayer(0)->GetAffineXY() );
2451  pat.TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2452  pat.TransformShr( piece.GetLayer(0)->Shr() );
2453  return 1;
2454 }

◆ ReadPiecePar()

bool EdbScanProc::ReadPiecePar ( EdbID  id,
EdbPlateP plate 
)
115 {
116  EdbDataPiece piece;
117  TString str;
118  MakeFileName(str,id,"par");
119  piece.ReadPiecePar(str);
120  for(int i=0; i<3; i++) {
121  EdbLayer *l=piece.GetLayer(i);
122  if(l) {
123  EdbAffine2D *a = l->GetAffineXY();
124  plate.GetLayer(i)->SetAffXY( a->A11(),a->A12(),a->A21(),a->A22(),a->B1(),a->B2() );
125  a = l->GetAffineTXTY();
126  plate.GetLayer(i)->SetAffTXTY( a->A11(),a->A12(),a->A21(),a->A22(),a->B1(),a->B2() );
127  plate.GetLayer(i)->SetShrinkage( l->Shr() );
128  }
129  }
130  return true;
131 }
int ReadPiecePar(const char *file)
Definition: EdbDataSet.cxx:287

◆ ReadPred() [1/2]

int EdbScanProc::ReadPred ( EdbPattern pred,
EdbID  id,
int  flag = -1 
)
inline
73 {int id4[4]; id.Get(id4); return ReadPred(pred,id4,flag);}

◆ ReadPred() [2/2]

int EdbScanProc::ReadPred ( EdbPattern pred,
int  id[4],
int  flag = -1 
)
inline
68 {return ReadPatRoot(pred,id,"pred.root",flag);}

◆ ReadSBTracks()

TObjArray * EdbScanProc::ReadSBTracks ( EdbID  id)
1454 {
1455  if(!CheckBrickDir(id)) return 0;
1456  TString name;
1457  MakeFileName(name,id,"sb.root",false);
1458  TFile f(name.Data(),"READ");
1459  if(!f.IsOpen()) return 0;
1460  TObjArray *tracks = (TObjArray*)f.Get("sbtracks");
1461  f.Close();
1462  LogPrint(id.eBrick,2,"ReadSBTracks","%d tracks read from %s", tracks->GetEntriesFast(), name.Data());
1463  return tracks;
1464 }

◆ ReadScanSet()

EdbScanSet * EdbScanProc::ReadScanSet ( EdbID  id)
1522 {
1523  TString name;
1524  MakeFileName(name, id, "set.root", false);
1525  Log(3, "ReadScanSet", "Attempting to read from %s", name.Data());
1526  std::unique_ptr<TFile> f(TFile::Open(name.Data()));
1527  if (!f || !f->IsOpen() || f->IsZombie()) {
1528  Log(1, "ReadScanSet", "Failed to open file: %s", name.Data());
1529  return 0;
1530  }
1531  TObject *ss = f->Get("set");
1532  if (!ss) {
1533  Log(1, "ReadScanSet", "Object 'set' not found in file: %s", name.Data());
1534  return 0;
1535  }
1536  EdbScanSet *result = dynamic_cast<EdbScanSet*>(ss);
1537  if (!result) {
1538  Log(1, "ReadScanSet", "Object 'set' is not of type EdbScanSet in file: %s", name.Data());
1539  return 0;
1540  }
1541  Log(2, "ReadScanSet", "Successfully read EdbScanSet from %s", name.Data());
1542  return result;
1543 }

◆ ReadScanSetCP() [1/2]

int EdbScanProc::ReadScanSetCP ( EdbID  id,
EdbPVRec ali,
TCut  c = "1",
bool  do_erase = true,
bool  do_assemble = true,
int  minplate = -1000,
int  maxplate = -1000 
)
330 {
331  // read data for scanset defined with id apply cut c and fill ali
332  // if(do_erase) - exclude segmets from the erase mask if it is exist (default is true)
333  // if(do_assemble) - read affine parfiles (default is true)
334 
335  EdbScanSet *ss = ReadScanSet(id);
336  ss->Brick().SetID(id.eBrick);
337  if(do_assemble) AssembleScanSet(*ss);
338  return ReadScanSetCP(*ss, ali, c, do_erase, minplate, maxplate);
339 }
int ReadScanSetCP(EdbScanSet &ss, EdbPVRec &ali, TCut c="1", bool do_erase=true, int minplate=-1000, int maxplate=-1000)
Definition: EdbScanProc.cxx:342
int AssembleScanSet(EdbScanSet &ss)
Definition: EdbScanProc.cxx:134

◆ ReadScanSetCP() [2/2]

int EdbScanProc::ReadScanSetCP ( EdbScanSet ss,
EdbPVRec ali,
TCut  c = "1",
bool  do_erase = true,
int  minplate = -1000,
int  maxplate = -1000 
)
343 {
344  // read data from scanset sc with cut c and fill ali
345  // sc.eIDS is used as an id list
346  // sc.eB is used to get the brick geometry and affine transformations - must be filled before
347  // if(do_erase) - exclude segmets from the erase mask if it is exist (default is true)
348 
349  if(minplate>maxplate) {
350  Log(1,"EdbScanProc::ReadScanSetCP","ERROR: minplate (%d) greater then maxplate(%d)!",minplate, maxplate);
351  return 0;
352  }
353  int cnt=0;
354  int n = sc.eIDS.GetSize(); // number of pieces to get
355  EdbID *id;
356  EdbPlateP *plate;
357  EdbPattern *pat;
358  for(int i=0; i<n; i++) {
359  id = (EdbID *)(sc.eIDS.At(i));
360  if( !(minplate==-1000&&maxplate==-1000) ) {
361  if( id->ePlate < minplate) continue;
362  if( id->ePlate > maxplate) continue;
363  }
364  plate = sc.GetPlate(id->ePlate);
365  pat = new EdbPattern();
366  cnt += ReadPatCPnopar( *pat, *id, c, do_erase);
367 
368  pat->SetScanID(*id);
369  pat->SetPID(id->ePlate);
370  for(int j=0; j<pat->N(); j++) pat->GetSegment(j)->SetVid( id->ePlate, pat->GetSegment(j)->Vid(1) );
371  pat->SetZ(plate->Z());
372  pat->SetSegmentsZ();
373  pat->Transform( plate->GetAffineXY() );
374  pat->TransformA( plate->GetAffineTXTY() );
375  pat->TransformShr( plate->Shr() );
376  pat->SetSegmentsPlate(id->ePlate);
377  ali.AddPattern( pat );
378  }
379 
380  ali.SetPatternsID();
381  int np = ali.Npatterns();
382  for(int i=0; i<np; i++) ali.GetPattern(i)->SetSegmentsPID(); // PID of the segment must be ID of the pattern!
383 
384  // to be moved into the processing part???
386  ali.SetCouplesAll();
389 
390  return cnt;
391 }
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
void SetSegmentsPlate(int plate)
Definition: EdbPattern.cxx:266

◆ ReadScanSetGlobal()

EdbScanSet * EdbScanProc::ReadScanSetGlobal ( EdbID  id,
bool  x_marks 
)
1481 {
1482  // read scan set and use map.OL and map.XG files to obtain transformations in global OPERA RS
1483  EdbScanSet *ss = ReadScanSet(id);
1484  if(ss) {
1485  if(gEDBDEBUGLEVEL>2) ss->Print();
1486  EdbMarksSet msOL;
1487  if (x_marks) ReadMarksSet(msOL,id.eBrick,"map.LL",'_','L');
1488  else ReadMarksSet(msOL,id.eBrick,"map.OL",'_','S');
1489  if(gEDBDEBUGLEVEL>2) msOL.Print();
1490  float MINX = msOL.eXmin;
1491  float MAXX = msOL.eXmax;
1492  float MINY = msOL.eYmin;
1493  float MAXY = msOL.eYmax;
1494  EdbMarksSet msXG;
1495  ReadMarksSet(msXG,id.eBrick,"map.XG",'_');
1496  float ZEROX = msXG.eXmin;
1497  float ZEROY = msXG.eYmin;
1498  if(gEDBDEBUGLEVEL>2) msXG.Print();
1499 
1500  int n = ss->eIDS.GetSize();
1501  for(int i=0; i<n; i++) {
1502  EdbID *pid = ss->GetID(i);
1503  EdbPlateP *plate = ss->GetPlate(pid->ePlate);
1504  float RX = 0.5*(MINX+MAXX) - ZEROX;
1505  float RY = 0.5*(MINY+MAXY) - ZEROY;
1506  EdbAffine2D *aff = plate->GetAffineXY();
1507  float MAPXX = aff->A11();
1508  float MAPXY = aff->A12();
1509  float MAPYX = aff->A21();
1510  float MAPYY = aff->A22();
1511  float MAPDX = aff->B1() - RX + aff->A11() * RX + aff->A12() * RY;
1512  float MAPDY = aff->B2() - RY + aff->A21() * RX + aff->A22() * RY;
1513  aff->Set(MAPXX,MAPXY,MAPYX,MAPYY,MAPDX,MAPDY);
1514  }
1515  if(gEDBDEBUGLEVEL>2) ss->Print();
1516  }
1517  return ss;
1518 }
Definition: EdbFiducial.h:88
Float_t eXmin
Definition: EdbFiducial.h:96
Float_t eYmin
Definition: EdbFiducial.h:97
Float_t eYmax
Definition: EdbFiducial.h:97
void Print(Option_t *opt="") const
Definition: EdbFiducial.cxx:593
Float_t eXmax
Definition: EdbFiducial.h:96
int ReadMarksSet(EdbMarksSet &ms, int brick, const char *filename, char spacer='_', char shape='S')
Definition: EdbScanProc.cxx:3099
int pid[1000]
Definition: m2track.cpp:13
Double_t RX
Definition: tlg2pattern.C:79
Double_t RY
Definition: tlg2pattern.C:79

◆ ReadTracksTree() [1/2]

int EdbScanProc::ReadTracksTree ( const char *  name,
EdbPVRec ali,
TCut  cut = "1" 
)
653 {
654  int n=0;
656  n = dproc.ReadTracksTree(ali, name, cut.GetTitle());
657  return n;
658 }
EdbDataProc * dproc
Definition: check_vertex.C:13
static int ReadTracksTree(EdbPVRec &ali, const char *fname="linked_tracks.root", const char *rcut="t.eFlag>-1&&nseg>2&&t.eProb>.01")
Definition: EdbDataSet.cxx:2937

◆ ReadTracksTree() [2/2]

int EdbScanProc::ReadTracksTree ( EdbID  id,
EdbPVRec ali,
TCut  cut = "1" 
)
645 {
646  TString name;
647  MakeFileName(name,id,"trk.root",false);
648  return ReadTracksTree(name.Data(), ali, cut);
649 }
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:644

◆ ReadUncorrectedBTforFoundTracks()

void EdbScanProc::ReadUncorrectedBTforFoundTracks ( EdbPVRec ali)
3513 {
3514  // get from couples trees and set in the ali the uncorrected basetracks
3516  int npat = ali.Npatterns();
3517  for(int i=0; i<npat; i++)
3518  {
3519  EdbPattern *pat = ali.GetPattern(i);
3520  int nseg = pat->N(); if(nseg<1) return;
3521  EdbID idpl((pat->GetSegment(0)->ScanID()));
3522  TString cpfile;
3523  MakeFileName(cpfile,idpl,"cp.root");
3524  EdbCouplesTree ect;
3525  if(!ect.InitCouplesTree("couples",cpfile,"READ")) continue;
3526  ect.eAcceptMask = new EdbMask(ect.eTree->GetEntries());
3527  EdbSegP **segments = new EdbSegP*[ect.eTree->GetEntries()];
3528  for(int j=0; j<nseg; j++) ect.eAcceptMask->SetAt( pat->GetSegment(j)->Vid(1), 1);
3529  EdbPattern newpat;
3530  int nnew= ect.GetCPDataAcceptedMask(&newpat);
3531  for(int j=0; j<nnew; j++) segments[newpat.GetSegment(j)->Vid(1)] = newpat.GetSegment(j);
3532  for(int j=0; j<nseg; j++) {
3533  EdbSegP *sc = pat->GetSegment(j);
3534  EdbSegP *sn = segments[sc->Vid(1)];
3535  //sc->PrintNice();
3536  //sn->PrintNice();
3537  sc->SetX(sn->X());
3538  sc->SetY(sn->Y());
3539  sc->SetTX(sn->TX());
3540  sc->SetTY(sn->TY());
3541  }
3542  Log(2,"EdbScanProc::ReadUncorrectedBTforFoundTracks","%d -> %d segments for %s",
3543  pat->N(), newpat.N(), idpl.AsString() );
3544  }
3545 
3546 }
EdbMask * eAcceptMask
Definition: EdbCouplesTree.h:28
int GetCPDataAcceptedMask(EdbPattern *pat)
Definition: EdbCouplesTree.cxx:377
TTree * eTree
Definition: EdbCouplesTree.h:25
void SetAt(int i, int val)
Definition: EdbMask.cxx:14
void SetSegmentsTracks()
Definition: EdbPVRec.cxx:2470
EdbID ScanID() const
Definition: EdbSegP.h:157

◆ RemoveDublets()

int EdbScanProc::RemoveDublets ( EdbPattern pin,
EdbPattern pout,
int  brick 
)
849 {
850  // input: pin - predictions pattern
851  // output: pout - predictions pattern with dublets removed
852  if(pin.N()<2) return 0;
853  float r,rt;
854  float rmin = 0.1; // [micron] TODO - pass as parameter?
855  float rtmin= 0.0001; // [rad] TODO - pass as parameter?
856  OptimizeScanPath(pin, pout,brick);
857  EdbSegP *s=0,*s1=0;
858  int n= pout.N();
859  for(int i=n-1; i>0; i--) {
860  s = pout.GetSegment(i);
861  s1 = pout.GetSegment(i-1);
862  r = Sqrt((s->X()-s1->X())*(s->X()-s1->X()) + (s->Y()-s1->Y())*(s->Y()-s1->Y()));
863  if( r>rmin ) continue;
864  rt = Sqrt((s->TX()-s1->TX())*(s->TX()-s1->TX()) + (s->TY()-s1->TY())*(s->TY()-s1->TY()));
865  if( rt>rtmin ) continue;
866  pout.GetSegments()->RemoveAt(i);
867  }
868  pout.GetSegments()->Compress();
869  LogPrint(brick,2,"RemoveDublets","%d segments before -> %d segments after: %d dublets removed", n, pout.N(), n-pout.N());
870  return n-pout.N();
871 }
void OptimizeScanPath(EdbPattern &pin, EdbPattern &pout, int brick)
Definition: EdbScanProc.cxx:874

◆ RemoveFile()

int EdbScanProc::RemoveFile ( EdbID  id,
const char *  suffix 
)
1003 {
1004  // remove file
1005  TString name;
1006  MakeFileName(name,id,suffix);
1007  char str[256];
1008  sprintf(str,"%s/file_to_remove",eProcDirClient.Data());
1009  int status = gSystem->Rename(name.Data(), str);
1010  LogPrint(id.eBrick,2,"RemoveFile","status=%d from %s to %s", status, name.Data(), str );
1011  return status;
1012 }

◆ ScanAreas() [1/2]

int EdbScanProc::ScanAreas ( EdbScanClient::ScanType  st,
EdbScanClient scan,
EdbPattern pred,
int  id[4],
const char *  opt = "NOCLCLFRAMESUM" 
)
941 {
942  LogPrint(id[0],1,"ScanAreas","%d.%d.%d.%d with %d predictions", id[0],id[1],id[2],id[3],pred.N());
943  EdbPattern predopt;
944  OptimizeScanPath(pred,predopt,id[0]);
945 
946  bool createRun = !scan.ServerCreatesRootFile(); // if is created by server side - no need to create it
947  char runname[512];
948  char runNameSrv[512];
949 
950  EdbRun *run = InitRun(id, runname, runNameSrv, createRun);
951  if(!run && createRun) return 0;
952 
953  if(!createRun && eProcDirServer.Length())//if ProcDir not set - server cant create proper files
954  scan.SetProcTgtServer(runNameSrv);
955  scan.SetProcPthServer(eProcDirServer.Data());
956 
957  int scanned = scan.ScanAreas(st, id,predopt,run,opt);
958  LogPrint(id[0],1,"ScanAreas","%d.%d.%d.%d %d predictions scanned; run with %d views stored", id[0],id[1],id[2],id[3],scanned, (createRun)? run->GetEntries(): (-1) );
959 
960  if(run){
961  run->Close();
962  delete run;
963  }
964 
965  if(!createRun){
966  if(!scan.ServerCreatesTarget()){//server creates *.root in tmp dir move server-side created file in target loaction (<*>/brick/plate/*.*.*.*.raw.root)
967  TString serverCreatedRunName = scan.GetServerCreatedRunName();
968  if(serverCreatedRunName.Length()==0){
969  printf("Server had to create run but we don't know where it is.\n");
970  return 0;
971  }
972  WaitFileReady(serverCreatedRunName.Data());
973  char str[1024];
974  #ifdef WIN32
975  sprintf(str,"move /F %s %s", serverCreatedRunName.Data(), runname);
976  #else
977  sprintf(str,"mv -f %s %s", serverCreatedRunName.Data(), runname);
978  #endif
979  gSystem->Exec(str);
980  }else{//Server creates *.root on place
981  WaitFileReady(runname);
982  }
983  }
984  return scanned;
985 }
bool WaitFileReady(const char *fname_)
Definition: EdbScanProc.cxx:1947

◆ ScanAreas() [2/2]

int EdbScanProc::ScanAreas ( EdbScanClient::ScanType  st,
EdbScanClient scan,
int  id[4],
int  flag = -1,
const char *  opt = "NOCLCLFRAMESUM" 
)
933 {
934  EdbPattern pred;
935  ReadPred(pred, id, flag);
936  return ScanAreas(st, scan, pred, id, opt);
937 }
int ScanAreas(EdbScanClient::ScanType st, EdbScanClient &scan, int id[4], int flag=-1, const char *opt="NOCLCLFRAMESUM")
Definition: EdbScanProc.cxx:932

◆ SetAFF0()

bool EdbScanProc::SetAFF0 ( int  id1[4],
int  id2[4] 
)
1083 {
1084  TString str;
1085  MakeAffName(str,id1,id2);
1086  char card[64];
1087  sprintf(card,"AFFXY 0 1. 0. 0. 1. 0. 0.");
1088  LogPrint(id1[0],2,"SetAFF0","%s as %s", str.Data(),card);
1089  return AddParLine(str.Data(),card);
1090 }

◆ SetAFFDZ()

bool EdbScanProc::SetAFFDZ ( int  id1[4],
int  id2[4],
float  dz 
)
1094 {
1095  TString str;
1096  MakeAffName(str,id1,id2);
1097  char card[64];
1098  sprintf(card,"ZLAYER 0 %f 0 0",dz);
1099  LogPrint(id1[0],2,"SetAFFDZ","%s as %s", str.Data(),card);
1100  return AddParLine(str.Data(),card);
1101 }

◆ SetDefaultCondBT()

void EdbScanProc::SetDefaultCondBT ( EdbScanCond cond)
2356 {
2357  cond.SetSigma0( 10., 10., 0.007, 0.007 ); // sigma0 "x, y, tx, ty" at zero angle
2358  cond.SetDegrad( 5. ); // sigma(tx) = sigma0*(1+degrad*tx)
2359  cond.SetBins(0, 0, 0, 0); //??? // bins in [sigma] for checks
2360  cond.SetPulsRamp0( 5., 5. ); // in range (Pmin:Pmax) Signal/All is nearly linear
2361  cond.SetPulsRamp04( 5., 5. );
2362  cond.SetChi2Max( 6.5 );
2363  cond.SetChi2PMax( 6.5 );
2364  cond.SetRadX0( 5810. );
2365  cond.SetName("OPERA_basetrack");
2366 }
void SetPulsRamp0(float p1, float p2)
Definition: EdbScanCond.h:74
void SetChi2Max(float chi2)
Definition: EdbScanCond.h:83
void SetDegrad(float d)
Definition: EdbScanCond.h:71
void SetSigma0(float x, float y, float tx, float ty)
Definition: EdbScanCond.h:62
void SetBins(float bx, float by, float btx, float bty)
Definition: EdbScanCond.h:65
void SetPulsRamp04(float p1, float p2)
Definition: EdbScanCond.h:75
void SetRadX0(float x0)
Definition: EdbScanCond.h:57
void SetChi2PMax(float chi2)
Definition: EdbScanCond.h:84

◆ SetDefaultCondMT()

void EdbScanProc::SetDefaultCondMT ( EdbScanCond cond)
2370 {
2371  cond.SetSigma0( 1., 1., 0.025, 0.025 ); // sigma0 "x, y, tx, ty" at zero angle
2372  cond.SetDegrad( 5. ); // sigma(tx) = sigma0*(1+degrad*tx)
2373  cond.SetBins(0, 0, 0, 0); //??? // bins in [sigma] for checks
2374  cond.SetPulsRamp0( 5., 5. ); // in range (Pmin:Pmax) Signal/All is nearly linear
2375  cond.SetPulsRamp04( 5., 5. );
2376  cond.SetChi2Max( 6.5 );
2377  cond.SetChi2PMax( 6.5 );
2378  cond.SetRadX0( 5810. );
2379  cond.SetName("OPERA_microtrack");
2380 }

◆ SetServerRunName()

void EdbScanProc::SetServerRunName ( const char *  fname_)
3504  {
3505  eServerCreatedRunName = fname_;
3506 };

◆ TestAl() [1/4]

int EdbScanProc::TestAl ( const char *  cpfile1,
const char *  cpfile2,
TCut &  cut,
float  dz,
EdbAffine2D aff = 0 
)
1340 {
1341  EdbPattern p1,p2;
1342  ReadPatCPnopar(p2, cpfile2, cut);
1343  p2.SetZ(0); p2.SetSegmentsZ();
1344  ReadPatCPnopar(p1, cpfile1, cut);
1345  if(aff) p1.Transform(aff);
1346  p1.SetZ(-dz); p1.SetSegmentsZ();
1347  return TestAl(p1,p2);
1348 }
int TestAl(int id1[4], int id2[4])
Definition: EdbScanProc.cxx:1311

◆ TestAl() [2/4]

int EdbScanProc::TestAl ( EdbID  id1,
EdbID  id2 
)
inline
197 {int id14[4]; id1.Get(id14); int id24[4]; id2.Get(id24); return TestAl(id14,id24); }

◆ TestAl() [3/4]

int EdbScanProc::TestAl ( EdbPattern p1,
EdbPattern p2 
)
1352 {
1353  Log(2,"EdbScanProc::TestAl","align patterns %d and %d", p1.N(), p2.N());
1354  EdbTestAl ta;
1355  TFile ftree("testal.root","RECREATE");
1356  ta.eBinTree = new TNtuple("bintree","bin tree","dz:phi:dx:dy:bin");
1357  ta.eITMAX=50; // default value
1358  ta.HDistance(p1,p2);
1359 
1360  float bin[4]={250,250, 250,0.001}; // default values for normal alignment (expected dz=1300)
1361  ta.eDmin[0]=-25000; ta.eDmin[1]=-25000; ta.eDmin[2]= -25; ta.eDmin[3]=-0.015;
1362  ta.eDmax[0]= 25000; ta.eDmax[1]= 25000; ta.eDmax[2]= 25; ta.eDmax[3]= 0.015;
1363 
1364  FILE *f = fopen("testal.par","r");
1365  if(f) {
1366  for(int i=0; i<4; i++) {
1367  float min=0,max=0,b=0;
1368  if(!(fscanf(f,"%f %f %f",&min,&max,&b )==3)) {Log(1,"EdbScanProc::TestAl","ERROR: read from testal.par"); return 0;}
1369  else {
1370  ta.eDmin[i]=min; ta.eDmax[i]=max; bin[i]=b;
1371  }
1372  }
1373  fclose(f);
1374  }
1375  for(int i=0; i<4; i++) ta.eN[i] = (Int_t)((ta.eDmax[i]-ta.eDmin[i]-bin[i]/2.)/bin[i])+1;
1376  for(int i=0; i<4; i++) ta.eDmax[i] = ta.eDmin[i]+bin[i]*ta.eN[i];
1377  for(int i=0; i<4; i++) printf("%d \t%f %f %f %d\n",i, ta.eDmin[i],ta.eDmax[i],bin[i],ta.eN[i]);
1378 
1379  ta.CheckMaxBin();
1380  EdbAffine2D aff;
1381  aff.Rotate(-ta.eD0[3]);
1382  aff.ShiftX(ta.eD0[0]);
1383  aff.ShiftY(ta.eD0[1]);
1384  //if(gEDBDEBUGLEVEL>1) {
1385  //aff.Print();
1386  //ta.FillTree(-ta.eD0[2]);
1387  //}
1388 
1389  ta.eBinTree->Write("bintree");
1390  ftree.Close();
1391 
1392  return 0;
1393 }
float min(TClonesArray *t)
Definition: bitview.cxx:275
int max
Definition: check_shower.C:41
void ShiftX(float d)
Definition: EdbAffine.h:64
void ShiftY(float d)
Definition: EdbAffine.h:65
void Rotate(float angle)
Definition: EdbAffine.cxx:383
Definition: EdbTestAl.h:12
int CheckMaxBin(float dz, float phi, float &meanbin, float &xmax, float &ymax)
Definition: EdbTestAl.cxx:270
Float_t eD0[4]
Definition: EdbTestAl.h:34
Int_t eITMAX
Definition: EdbTestAl.h:17
Int_t eN[4]
Definition: EdbTestAl.h:33
Float_t eDmin[4]
Definition: EdbTestAl.h:34
Float_t eDmax[4]
Definition: EdbTestAl.h:34
void HDistance(EdbPattern &p1, EdbPattern &p2)
Definition: EdbTestAl.cxx:176
TNtuple * eBinTree
Definition: EdbTestAl.h:25
float bin
Definition: emthickness.cpp:98

◆ TestAl() [4/4]

int EdbScanProc::TestAl ( int  id1[4],
int  id2[4] 
)
1312 {
1313  MakeInPar(id1,"prealignment");
1314  MakeInPar(id2,"prealignment");
1315  TString name;
1316  MakeFileName(name,id1,"in.par");
1317  TString parfileOUT;
1318  MakeAffName(parfileOUT,id1,id2);
1319  parfileOUT.Prepend("INCLUDE ");
1320  AddParLine(name.Data(), parfileOUT.Data());
1321 
1322  EdbPattern p1,p2;
1323 
1324  ReadPatCP(p2,id2);
1325  p2.SetZ(0);
1326  p2.SetSegmentsZ();
1327 
1328  ReadPatCP(p1,id1);
1329  EdbAffine2D aff1;
1330  float dz;
1331  GetAffZ(aff1,dz,id1,id2);
1332  p1.SetZ(-dz);
1333  p1.SetSegmentsZ();
1334 
1335  return TestAl(p1,p2);
1336 }

◆ TrackSetBT()

int EdbScanProc::TrackSetBT ( EdbScanSet sc,
TEnv &  cenv 
)
602 {
603  EdbScanCond cond;
604  TCut c = cenv.GetValue("fedra.readCPcut" , "eCHI2P<2.5&&s.eW>13&&eN1==1&&eN2==1&&s1.eFlag>=0&&s2.eFlag>=0");
605  int nsegmin = cenv.GetValue("fedra.track.nsegmin" , 2 );
606  int ngapmax = cenv.GetValue("fedra.track.ngapmax" , 4 );
607  float probmin = cenv.GetValue("fedra.track.probmin" , 0.01 );
608  float momentum = cenv.GetValue("fedra.track.momentum" , 2 );
609  float mass = cenv.GetValue("fedra.track.mass" , 0.14 );
610  bool do_erase = cenv.GetValue("fedra.track.erase" , false );
611  cond.SetSigma0( cenv.GetValue("fedra.track.Sigma0" , "3 3 0.005 0.005") );
612  cond.SetPulsRamp0( cenv.GetValue("fedra.track.PulsRamp0" , "15 20") );
613  cond.SetPulsRamp04( cenv.GetValue("fedra.track.PulsRamp04" , "15 20") );
614  cond.SetDegrad( cenv.GetValue("fedra.track.Degrad" , 4) );
615  cond.SetRadX0( cenv.GetValue("fedra.track.RadX0" , 5810.) );
616 
617  if(sc.eIDS.GetSize()<2) return 0;
618  int n=0;
619  EdbID *id=0;
620  for(int i=0; i<sc.eIDS.GetSize(); i++) {
621  id = (EdbID *)(sc.eIDS.At(i));
622  MakeInPar(*id,"tracking");
623  }
624 
626  EdbPVRec *ali = dproc.PVR();
627  ali->SetScanCond( &cond );
628  ReadScanSetCP(sc, *ali, c, do_erase);
629  ali->Print();
630 
631  n = dproc.LinkTracksWithFlag( ali, momentum, probmin, nsegmin, ngapmax, 0 );
632  ali->FitTracks( momentum, mass );
633 
634  EdbID ido( *((EdbID *)(sc.eIDS.At(0))) );
635  ido.ePlate=0;
636  TString name;
637  MakeFileName(name,ido,"trk.root",false);
639 
640  return n;
641 }
EdbPVRec * PVR() const
Definition: EdbDataSet.h:197
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2511
void FitTracks(float p=10., float mass=0.139, TObjArray *gener=0, int design=0)
Definition: EdbPVRec.cxx:1889
void Print() const
Definition: EdbPattern.cxx:1853
int nsegmin
Definition: check_vertex.C:23
float mass
Definition: check_vertex.C:21
float momentum
Definition: check_vertex.C:20
int ngapmax
Definition: check_vertex.C:24

◆ UpdateAFFPar()

bool EdbScanProc::UpdateAFFPar ( EdbID  id1,
EdbID  id2,
EdbLayer l,
EdbAffine2D aff0 = 0 
)
1027 {
1028  // update the aff par file with the values defined in the EdbLayer
1029 
1030  TString parout; MakeAffName(parout,id1,id2);
1031  LogPrint(id1.eBrick,2,"UpdateAFFPar","%s ", parout.Data());
1032  char card[80];
1033 
1034  TDatime t;
1035  sprintf(card,"\n## %s", t.AsSQLString());
1036  if(!AddParLine(parout.Data(),card)) return false;
1037 
1038  sprintf(card,"ZLAYER \t %d \t %f %f %f",l.ID(), l.Zcorr() ,0.,0. );
1039  if(!AddParLine(parout.Data(),card)) return false;
1040 
1041  EdbAffine2D &aff = *(l.GetAffineXY());
1042  if(aff0) aff.Transform(aff0);
1043 
1044  //sprintf(card,"AFFXY \t %d \t %f %f %f %f %f %f", l.ID(),
1045  sprintf(card,"AFFXY \t %d \t %g %g %g %g %g %g", l.ID(),
1046  aff.A11(),aff.A12(),aff.A21(),aff.A22(),aff.B1(),aff.B2() );
1047  if(!AddParLine(parout.Data(),card)) return false;
1048 
1049  EdbAffine2D &afftxy = *(l.GetAffineTXTY());
1050  sprintf(card,"AFFTXTY \t %d \t %g %g %g %g %g %g", l.ID(),
1051  afftxy.A11(),afftxy.A12(),afftxy.A21(),afftxy.A22(),afftxy.B1(),afftxy.B2() );
1052  if(!AddParLine(parout.Data(),card)) return false;
1053 
1054  sprintf(card,"SHRINK \t %d \t %f",l.ID(), l.Shr() ); if(!AddParLine(parout.Data(),card)) return false;
1055 
1056  return true;
1057 }
void Transform(const EdbAffine2D *a)
Definition: EdbAffine.cxx:93
int ID() const
Definition: EdbLayer.h:74

◆ UpdateAlignSummaryTree()

void EdbScanProc::UpdateAlignSummaryTree ( EdbID  idset1,
EdbID  idset2,
TTree &  tree 
)
2940 {
2941  TString dataout; MakeAffName(dataout,id1s,id2s,"al.root");
2942  TFile *f = new TFile(dataout,"READ");
2943  if(!f) return;
2944  EdbLayer *corr = (EdbLayer*)f->Get("corr_layer1");
2945  EdbPeak2 *peak2c = (EdbPeak2*)f->Get("peak2c");
2946  if(!corr) {Log(1,"UpdateAlignSummaryTree","Warning no corr for %s_%s",id1s.AsString(), id2s.AsString()); return;}
2947  if(!peak2c) {Log(1,"UpdateAlignSummaryTree","Warning no peak2c for %s_%s",id1s.AsString(), id2s.AsString()); return;}
2948  EdbAffine2D *aXY=corr->GetAffineXY();
2949  int peak = (int)(peak2c->Peak(0));
2950  float xcenter1 = corr->X();
2951  float ycenter1 = corr->Y();
2952  float xoffset= aXY->A11()*xcenter1 + aXY->A12()*ycenter1 + aXY->B1() - xcenter1;
2953  float yoffset= aXY->A21()*xcenter1 + aXY->A22()*ycenter1 + aXY->B2() - ycenter1;
2954 
2955  EdbID *id1=&id1s, *id2=&id2s;
2956  tree.SetBranchAddress("id1" , &id1);
2957  tree.SetBranchAddress("id2" , &id2);
2958  tree.SetBranchAddress("corr" , &corr);
2959  tree.SetBranchAddress("peak2c", &peak2c);
2960  tree.SetBranchAddress("peak", &peak);
2961  tree.SetBranchAddress("xoffset", &xoffset);
2962  tree.SetBranchAddress("yoffset", &yoffset);
2963  tree.Fill();
2964  Log(1,"UpdateAlignSummaryTree","peak: %7.0f/%7.2f/%7.3f dx,dy,dz: %7.3f %7.3f %7.3f for %s_%s",
2965  peak2c->Peak(),peak2c->Mean3(),peak2c->Mean(), xoffset,yoffset,corr->Zcorr(), id1s.AsString(),id2s.AsString() );
2966 
2967  TCanvas *c = (TCanvas*)f->Get("report_al");
2968  if(c) {
2969  c->SetName(Form("%s_%s",id1s.AsString(), id2s.AsString()));
2970  c->Draw();
2971  }
2972  SafeDelete(f);
2973 }

◆ UpdatePlatePar()

bool EdbScanProc::UpdatePlatePar ( EdbID  id,
EdbLayer l 
)
1061 {
1062  // update the plate par file with the values defined in the EdbLayer
1063 
1064  TString parout; MakeFileName(parout,id,"par");
1065  LogPrint(id.eBrick,2,"UpdatePar","%s ", parout.Data());
1066  char card[80];
1067 
1068  TDatime t;
1069  sprintf(card,"\n## %s", t.AsSQLString()); if(!AddParLine(parout.Data(),card)) return false;
1070  sprintf(card,"SHRINK \t %d \t %f",l.ID(), l.Shr() ); if(!AddParLine(parout.Data(),card)) return false;
1071 
1072  EdbAffine2D &aff = *(l.GetAffineXY());
1073  sprintf( card,"AFFXY \t %d %s", l.ID(), aff.AsString() ); if(!AddParLine(parout.Data(),card)) return false;
1074 
1075  aff = *(l.GetAffineTXTY());
1076  sprintf( card,"AFFTXTY \t %d %s", l.ID(), aff.AsString() ); if(!AddParLine(parout.Data(),card)) return false;
1077 
1078  return true;
1079 }
const char * AsString() const
Definition: EdbAffine.cxx:57

◆ UpdateSetWithAff() [1/3]

void EdbScanProc::UpdateSetWithAff ( EdbID  id,
EdbID  id1,
EdbID  id2 
)
2770 {
2771  // in this function the geometry of the brick of idset is updated with the affine transformations
2772  // found for the couple idset1 idset2 (same plate rescanning transformations)
2773  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2774  EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
2775  EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
2776  int n = ss->eIDS.GetSize();
2777  for(int i=0; i<n; i++) {
2778  EdbID *id = ss->GetID(i);
2779  EdbID *id1 = ss1->FindPlateID(id->ePlate); if(!id1) continue;
2780  EdbID *id2 = ss2->FindPlateID(id->ePlate); if(!id2) continue;
2781 
2782  EdbLayer la; ReadAffToLayer( la, *id1, *id2);
2783  EdbPlateP *p = ss->GetPlate(id->ePlate);
2784  if(p) {
2785  p->SetZcorr(la.Zcorr());
2786  p->GetAffineXY()->Transform(la.GetAffineXY());
2787  p->GetAffineTXTY()->Transform(la.GetAffineTXTY());
2788  p->SetShrinkage(la.Shr());
2789  }
2790  }
2791  WriteScanSet( idset ,*ss );
2792  SafeDelete(ss); SafeDelete(ss1); SafeDelete(ss2);
2793 }
bool ReadAffToLayer(EdbLayer &la, EdbID id1, EdbID id2)
Definition: EdbScanProc.cxx:64

◆ UpdateSetWithAff() [2/3]

void EdbScanProc::UpdateSetWithAff ( EdbID  id,
EdbID  idu 
)
2814 {
2815  // in this function the geometry of the brick of idset is updated with the affine transformations
2816  // found for plate-to-plate alignment of idset
2817  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2818  EdbScanSet *ssu = ReadScanSet(idsetu); if(!ssu) return;
2819  int n = ssu->eIDS.GetSize(); if(n<2) return;
2820  for(int i=0; i<n-1; i++) {
2821  EdbID *id1 = ssu->GetID(i);
2822  EdbID *id2 = ssu->GetID(i+1);
2823  EdbLayer la; if(!ReadAffToLayer( la, *id1, *id2)) continue;
2824  ss->UpdateBrickWithP2P(la,id1->ePlate,id2->ePlate);
2825  }
2826  WriteScanSet( idset ,*ss );
2827  SafeDelete(ss); SafeDelete(ssu);
2828 }

◆ UpdateSetWithAff() [3/3]

void EdbScanProc::UpdateSetWithAff ( EdbID  idset,
EdbAffine2D  aff 
)
2797 {
2798  // in this function the geometry of the brick of idset is updated with the given affine transformations
2799  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2800  int n = ss->eIDS.GetSize();
2801  for(int i=0; i<n; i++) {
2802  EdbID *id = ss->GetID(i);
2803  EdbPlateP *p = ss->GetPlate(id->ePlate);
2804  if(p) {
2805  p->GetAffineXY()->Transform(&aff);
2806  }
2807  }
2808  WriteScanSet( idset ,*ss );
2809  SafeDelete(ss);
2810 }

◆ UpdateSetWithPlatePar() [1/2]

void EdbScanProc::UpdateSetWithPlatePar ( EdbID  id)
2832 {
2833  EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2835  WriteScanSet( idset ,*ss );
2836  SafeDelete(ss);
2837 }
void UpdateSetWithPlatePar(EdbID id)
Definition: EdbScanProc.cxx:2831

◆ UpdateSetWithPlatePar() [2/2]

void EdbScanProc::UpdateSetWithPlatePar ( EdbScanSet ss)
2841 {
2842  int n = ss.eIDS.GetSize();
2843  Log(3,"EdbScanProc::UpdateSetWithPlatePar","set with %d plates",n);
2844  for(int i=0; i<n; i++) {
2845  EdbID *id = ss.GetID(i);
2846  EdbPlateP *plate = ss.GetPlate(id->ePlate);
2847  if(!plate) Log(1,"EdbScanProc::UpdateSetWithPlatePar","ERROR! plate %d do not found!",id->ePlate);
2848  //printf("plate %d before\n",i); plate->Print();
2849  if(plate) ReadPiecePar( *id, *plate);
2850  //printf("after\n"); plate->Print();
2851  }
2852 }
bool ReadPiecePar(EdbID id, EdbPlateP &plate)
Definition: EdbScanProc.cxx:114

◆ WaitFileReady()

bool EdbScanProc::WaitFileReady ( const char *  fname_)
1947  {//waits file copied/moved, in ready state
1948 time_t t0 = time(0);
1949  const int dt=5; //wait max 5 sec till file ready
1950  const int dtupd=500; //wait 500 msec to check if file is updating
1951  const int dtslp=100; //wait 100 msec before recheck
1952 
1953  bool ready = false;
1954  LogPrint(0,2,"WaitFileReady","source file \"%s\"\n",fname_);
1955  while(t0+dt > time(0) && !ready){
1956  FILE *f=fopen(fname_, "r");
1957  if(f != NULL){
1958  fclose(f);
1959  //printf("file there\n");
1960  struct stat statbuf1, statbuf2;
1961  int v=stat(fname_, &statbuf1);
1962  if (v != -1) {
1963  if(statbuf1.st_size != 0){
1964  gSystem->Sleep(dtupd);
1965  if (stat(fname_, &statbuf2) != -1) {
1966  if(statbuf2.st_size == statbuf1.st_size){
1967  ready=true;
1968  }else{
1969  //printf("file updating\n");
1970  }
1971  }
1972  }
1973  }
1974  //printf("%d\n", v);
1975  }else{
1976  //printf("file not there\n");
1977  gSystem->Sleep(dtslp);
1978 
1979  }
1980  }
1981  LogPrint(0,2,"WaitFileReady","%s\n", ready ? "file is ready." : "file waiting timeout!");
1982  return ready;
1983 }

◆ WriteFound() [1/2]

int EdbScanProc::WriteFound ( EdbPattern found,
EdbID  id,
int  flag = -1 
)
inline
75 {int id4[4]; id.Get(id4); return WriteFound(found,id4,flag);}

◆ WriteFound() [2/2]

int EdbScanProc::WriteFound ( EdbPattern pred,
int  id[4],
int  flag = -1 
)
inline
71 {return WritePatRoot(pred,id,"found.root",flag);}
int WritePatRoot(EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
Definition: EdbScanProc.cxx:1712

◆ WriteMarksSet()

int EdbScanProc::WriteMarksSet ( EdbMarksSet ms,
int  brick,
const char *  filename,
char  spacer = '_',
char  shape = 'S',
int  plate = 1 
)
3115 {
3116  // Reads an EdbMarksSet object and uses its content to write a map file
3117  // With "spacer" you can choose the character that you want to insert
3118  // between the words in the map file. Default is '_'
3119  char str[256];
3120  sprintf(str,"%s/b%6.6d/b%6.6d.%s",
3122 
3123  ms.WriteMap(str,spacer,shape,plate);
3124 
3125  return(1);
3126 }
Int_t WriteMap(char *file, char spacer='_', char shape='S', int plate=1)
Definition: EdbFiducial.cxx:495

◆ WritePatRoot()

int EdbScanProc::WritePatRoot ( EdbPattern pred,
int  id[4],
const char *  suffix,
int  flag = -1 
)
1713 {
1714  // write root predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
1715  int n = pred.N();
1716  TString str;
1717  MakeFileName(str,id,suffix);
1718 
1719  // checking for the existing directory
1720 
1721  FileStat_t buf;
1722 
1723  if (gSystem->GetPathInfo(gSystem->DirName(str), buf)) {
1724  if (gEDBDEBUGLEVEL > 0) {
1725  cout << "ERROR! Directory " << gSystem->DirName(str)
1726  << " does not exist.\n";
1727  cout << "Please run scanning procedure for the plate number " << id[1]
1728  << endl;
1729  }
1730  return 0;
1731  }
1732 
1733  TFile f(str.Data(), "RECREATE");
1734 
1735  if (flag < 0) pred.Write("pat");
1736  else {
1737  EdbPattern pat;
1738  pat.SetID(pred.ID());
1739  pat.SetPID(pred.PID());
1740  pat.SetX(pred.X());
1741  pat.SetY(pred.Y());
1742  pat.SetZ(pred.Z());
1743  for (Int_t i = 0; i < pred.N(); i++)
1744  if (pred.GetSegment(i)->Flag()==flag) pat.AddSegment(*(pred.GetSegment(i)));
1745  n = pat.N();
1746  pat.Write("pat");
1747  }
1748  f.Close();
1749  LogPrint(id[0],2,"WritePatRoot","%s with %d predictions with flag: %d",
1750  str.Data(),n,flag);
1751  return n;
1752 }
int PID() const
Definition: EdbPattern.h:329
int ID() const
Definition: EdbPattern.h:328
void SetY(float y)
Definition: EdbPattern.h:83
void SetX(float x)
Definition: EdbPattern.h:82

◆ WritePatTXT() [1/2]

int EdbScanProc::WritePatTXT ( EdbPattern pred,
EdbID  id,
const char *  suffix,
int  flag = -1 
)
inline
76 {int id4[4]; id.Get(id4); return WritePatTXT(pred,id4,suffix,flag);}

◆ WritePatTXT() [2/2]

int EdbScanProc::WritePatTXT ( EdbPattern pred,
int  id[4],
const char *  suffix,
int  flag = -1 
)
1562 {
1563  // write ascii predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
1564  // man - for manual check by sysal
1565  // - overvise complete format
1566  EdbSegP *s=0;
1567  TString str;
1568  MakeFileName(str,id,suffix);
1569  FILE *f = fopen(str.Data(),"w");
1570  if(!f) { LogPrint(id[0],1,"WritePatTXT","ERROR! can not open file %s", str.Data()); return 0; }
1571  for(int i=0; i<pred.N(); i++) {
1572  s = pred.GetSegment(i);
1573  if (flag > -1 && flag != s->Flag()) continue;
1574  if( strcmp(suffix,"man") >=0 )
1575  fprintf(f,"%8d %11.2f %11.2f %8.4f %8.4f %d\n",
1576  s->ID(),s->X(),s->Y(),s->TX(),s->TY(),s->Flag());
1577  else
1578  fprintf(f,"%8d %11.2f %11.2f %8.4f %8.4f %9.2f %9.2f %8.4f %8.4f %d\n",
1579  s->ID(),s->X(),s->Y(),s->TX(),s->TY(),s->SX(),s->SY(),s->STX(),s->STY(),s->Flag());
1580  }
1581  fclose(f);
1582  LogPrint(id[0],2,"WritePatTXT","%s with %d predictions with flag: %d", str.Data(),pred.N(), flag);
1583  return pred.N();
1584 }
Float_t STX() const
Definition: EdbSegP.h:161
Float_t SY() const
Definition: EdbSegP.h:160
Float_t STY() const
Definition: EdbSegP.h:162
Float_t SX() const
Definition: EdbSegP.h:159

◆ WritePred() [1/2]

int EdbScanProc::WritePred ( EdbPattern pred,
EdbID  id,
int  flag = -1 
)
inline
74 {int id4[4]; id.Get(id4); return WritePred(pred,id4,flag);}

◆ WritePred() [2/2]

int EdbScanProc::WritePred ( EdbPattern pred,
int  id[4],
int  flag = -1 
)
inline
69 {return WritePatRoot(pred,id,"pred.root",flag);}

◆ WriteSBcndTXT()

int EdbScanProc::WriteSBcndTXT ( int  id[4],
const char *  suffix = "man.sbt.txt" 
)
1588 {
1589  // write ascii found candidates file as .../bXXXXXX/pYYY/a.a.a.a.suffix
1590  // - new id = 1000*id + 100* [BT:0; MT1:1; MT2:2]+ #
1591  TString sbtname;
1592  MakeFileName(sbtname,id,"sbt.root");
1593 
1594  TString outname;
1595  MakeFileName(outname,id,suffix);
1596 
1597 
1598  FILE *f = fopen(outname.Data(),"w");
1599  if(!f) { LogPrint(id[0],1,"WriteSBcndTXT","ERROR! can not open file %s", outname.Data()); return 0; }
1600  int num=0;
1601 
1602 
1603  EdbRunTracking t;
1604  TTree *st = t.InitSBtree(sbtname.Data(), "OPEN");
1605  int n = st->GetEntries();
1606  EdbSegP *s=0;
1607  for(int i =0; i<n; ++i){
1608  t.GetSBtreeEntry(i, *st);
1609  int pid = t.eNext.ID();
1610  for(int j = 0; j<t.eScnd.N(); ++j){
1611  s=t.eScnd.GetSegment(j);
1612  fprintf(f, "%d\t%.3lf\t%.3lf\t%.5lf\t%.5lf\t0\n", pid*1000+j, s->X(), s->Y(), s->TX(), s->TY());
1613  num++;
1614  }
1615  for(int j = 0; j<t.eS1cnd.N(); ++j){
1616  s=t.eS1cnd.GetSegment(j);
1617  fprintf(f, "%d\t%.3lf\t%.3lf\t%.5lf\t%.5lf\t10001\n", pid*1000+100+j, s->X(), s->Y(), s->TX(), s->TY());
1618  num++;
1619  }
1620  for(int j = 0; j<t.eS2cnd.N(); ++j){
1621  s=t.eS2cnd.GetSegment(j);
1622  fprintf(f, "%d\t%.3lf\t%.3lf\t%.5lf\t%.5lf\t10002\n", pid*1000+200+j, s->X(), s->Y(), s->TX(), s->TY());
1623  num++;
1624  }
1625  }
1626  t.CloseSBtree(st);
1627 
1628 
1629  fclose(f);
1630  LogPrint(id[0],2,"WriteSBcndTXT","%s with %d predictions", outname.Data(),num);
1631  return num;
1632 }

◆ WriteSBTrack()

int EdbScanProc::WriteSBTrack ( EdbTrackP t,
int  path,
EdbID  id 
)
1426 {
1427  if(!CheckBrickDir(id)) return 0;
1428  TString name;
1429  MakeFileName(name,id,"sb.root",false);
1430  TFile f(name.Data(),"UPDATE");
1431  if(!f.IsOpen()) return 0;
1432  sb.Write(Form("sb_%d",path));
1433  f.Close();
1434  return 1;
1435 }

◆ WriteSBTracks()

int EdbScanProc::WriteSBTracks ( TObjArray &  tracks,
EdbID  id 
)
1439 {
1440  if(!CheckBrickDir(id)) return 0;
1441  TString name;
1442  MakeFileName(name,id,"sb.root",false);
1443  //TFile f(name.Data(),"UPDATE");
1444  TFile f(name.Data(),"RECREATE");
1445  if(!f.IsOpen()) return 0;
1446  tracks.Write("sbtracks",1);
1447  f.Close();
1448  LogPrint(id.eBrick,2,"WriteSBTracks","%d tracks are written into %s", tracks.GetEntriesFast(), name.Data());
1449  return 1;
1450 }

◆ WriteScanSet()

int EdbScanProc::WriteScanSet ( EdbID  id,
EdbScanSet ss 
)
1468 {
1469  if(!CheckBrickDir(id)) return 0;
1470  TString name;
1471  MakeFileName(name,id,"set.root",false);
1472  TFile f(name.Data(),"UPDATE");
1473  if(!f.IsOpen()) return 0;
1474  ss.Write("set");
1475  f.Purge(3); f.Close();
1476  return 1;
1477 }

Member Data Documentation

◆ eParDir

TString EdbScanProc::eParDir

◆ eProcDirClient

TString EdbScanProc::eProcDirClient

◆ eProcDirServer

TString EdbScanProc::eProcDirServer

◆ eServerCreatedRunName

TString EdbScanProc::eServerCreatedRunName
private

The documentation for this class was generated from the following files: