FEDRA emulsion software from the OPERA Collaboration
EdbScanProc Class Reference

scanned data processing More...

#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 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 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 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)
 
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)
 
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
 directory path for off-line processing parameters More...
 
TString eProcDirClient
 directory path for root data More...
 
TString eProcDirServer
 directory path for root data More...
 

Private Attributes

TString eServerCreatedRunName
 EdbRun file name that is created by scanserver side. More...
 

Detailed Description

scanned data processing

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 
)
58{
59 int id1[4]; eid1.Get(id1);
60 int id2[4]; eid2.Get(id2);
61 return AddAFFtoScanSet(sc,id1,id2);
62}
void Get(Int_t id[])
Definition: EdbID.h:26
bool AddAFFtoScanSet(EdbScanSet &sc, EdbID id1, EdbID id2)
Definition: EdbScanProc.cxx:57

◆ AddAFFtoScanSet() [2/3]

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

◆ AddAFFtoScanSet() [3/3]

bool EdbScanProc::AddAFFtoScanSet ( EdbScanSet sc,
int  id1[4],
int  id2[4] 
)

read affine tranformation from file, form "plate", add "plate" to EdbScanSet:ePC

82{
84
85 EdbDataPiece piece;
86 TString parfile;
87 MakeAffName(parfile,id1,id2);
88 piece.eFileNamePar = parfile;
89 float dz=0;
90 EdbAffine2D *a=0;
91 if (piece.TakePiecePar() < 0) {
92 dz = 1300.*( id2[1]-id1[1] );
93 a = new EdbAffine2D();
94 Log(2,"AddAFFtoScanSet","add default transform with dz = %f",dz);
95 } else {
96 dz = piece.GetLayer(0)->Z();
97 a = piece.GetLayer(0)->GetAffineXY();
98 Log(2,"AddAFFtoScanSet","add read transform with dz = %f",dz);
99 }
100 if(gEDBDEBUGLEVEL>2) a->Print();
101 EdbPlateP *p = new EdbPlateP(); // in this function 1-one plate, 2-next plate
102 p->GetLayer(1)->SetID(id1[1]);
103 p->GetLayer(1)->SetZlayer(-dz,-dz,-dz);
104 p->GetLayer(1)->SetAffXY(a->A11(),a->A12(),a->A21(),a->A22(),a->B1(),a->B2());
105 p->GetLayer(2)->SetID(id2[1]);
106 p->GetLayer(2)->SetZlayer(0,0,0);
107 p->GetLayer(2)->SetAffXY(1,0,0,1,0,0);
108
109 sc.ePC.Add(p);
110
111 return true;
112}
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
Edb raw data unit (scanned plate) associated with run file.
Definition: EdbDataSet.h:26
EdbLayer * GetLayer(int id)
Definition: EdbDataSet.h:87
int TakePiecePar()
Definition: EdbDataSet.cxx:276
TString eFileNamePar
name of the parameters file
Definition: EdbDataSet.h:51
EdbAffine2D * GetAffineXY()
Definition: EdbLayer.h:119
float Z() const
Definition: EdbLayer.h:77
Definition: EdbBrick.h:14
void MakeAffName(TString &s, int id1[4], int id2[4], const char *suffix="aff.par")
Definition: EdbScanProc.cxx:1851
TObjArray ePC
Plate Couples. Each couple represented as EdbPlateP where 2 sides in reality corresponds to 2 plates.
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 
)

add string to par file

1960{
1962 FILE *f=0;
1963 if(recreate) f = fopen(file,"w");
1964 else f = fopen(file,"a+");
1965 if (!f) return false;
1966 fprintf(f,"%s\n",line);
1967 fclose(f);
1968 return true;
1969}
FILE * f
Definition: RecDispMC.C:150
TFile * file
Definition: write_pvr.C:3
fclose(pFile)

◆ Align() [1/2]

int EdbScanProc::Align ( EdbID  id1,
EdbID  id2,
const char *  option = "" 
)
inline
126{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:126

◆ Align() [2/2]

int EdbScanProc::Align ( int  id1[4],
int  id2[4],
const char *  option = "" 
)

Align 2 patterns, assumed that already exists file x.x.x.x_y.y.y.y.aff.par with deltaZ inside.
Convension about Z(setted while process): the z of id2 is 0, the z of id1 is (-deltaZ) where
deltaZ readed from aff.par file in a way that pattern of id1 projected
to deltaZ correspond to pattern of id2

2623{
2628
2629 int npat=0;
2630 TString name;
2631 MakeFileName(name,id1,"in.par");
2632 TString parfileOUT;
2633 MakeAffName(parfileOUT,id1,id2);
2634 parfileOUT.Prepend("INCLUDE ");
2635 AddParLine(name.Data(), parfileOUT.Data());
2636
2637 EdbPVRec ali;
2638 EdbPattern *pat=0;
2639 EdbDataPiece piece1,piece2;
2640
2641 InitPiece(piece1, id1);
2642 piece1.GetLayer(0)->SetZlayer(-1*piece1.GetLayer(0)->Z(), 0,0);
2643 pat = new EdbPattern(0.,0., piece1.GetLayer(0)->Z(),100 );
2644 if (!ReadPiece(piece1, *pat)) {delete pat; return -1;}
2645 pat->SetPID(0);
2646 pat->SetSegmentsZ();
2647 ali.AddPattern(pat);
2648
2649 InitPiece(piece2, id2);
2650 piece2.GetLayer(0)->SetZlayer(0, 0,0);
2651 pat = new EdbPattern(0.,0., piece2.GetLayer(0)->Z(),100 );
2652 if (!ReadPiece(piece2, *pat)) {delete pat; return -1;}
2653 pat->SetPID(1);
2654 pat->SetSegmentsZ();
2655 ali.AddPattern(pat);
2656
2657 Log(2,"EdbScanProc::Align","Z1 = %f z2 = %f with option: %s",
2658 piece1.GetLayer(0)->Z(),piece2.GetLayer(0)->Z(), option );
2659
2660 EdbScanCond *cond = piece1.GetCond(0);
2661 cond->SetChi2Mode(3);
2662 ali.SetScanCond( cond );
2666 ali.SetChi2Max(cond->Chi2PMax());
2667 ali.SetOffsetsMax(cond->OffX(),cond->OffY());
2668
2669 if( strstr( option,"-a") && strstr( option,"-a2")==0 ) ali.Align(0);
2670 else ali.Align(2);
2671
2672 ali.PrintAff();
2673 npat = ali.GetCouple(0)->Ncouples();
2674
2675 EdbAffine2D aff;
2676 MakeAffName(parfileOUT,id1,id2);
2677 piece1.eFileNamePar = parfileOUT;
2678 ali.GetPattern(0)->GetKeep(aff);
2679 piece1.UpdateAffPar(0,aff);
2680
2681 TString cpfile;
2682 MakeFileName(cpfile,id1,"al.cp.root");
2684 proc.LinkTracksWithFlag( &ali, 10., 0.05, 2, 3, 0 );
2685
2686 TTree *cptree=EdbDataPiece::InitCouplesTree(cpfile.Data(),"RECREATE");
2687
2688 proc.FillCouplesTree(cptree, &ali,0);
2689 proc.CloseCouplesTree(cptree);
2690
2691 //ali.FitTracks( 10, 0.139 ); // is important to call it before MakeTracksTree!
2692 //MakeFileName(cpfile,id1,"al.tr.root");
2693 //proc.MakeTracksTree(&ali,cpfile.Data());
2694 if( strstr(option,"-z") ) {
2695 ali.FineCorrZnew();
2696 piece1.UpdateZPar(0,-ali.GetPattern(0)->Z());
2697 }
2698
2699 return npat;
2700 }
Int_t npat
Definition: Xi2HatStartScript.C:33
int InitCouplesTree(const char *mode="READ")
Definition: EdbDataSet.cxx:1239
int UpdateZPar(int layer, float z)
Definition: EdbDataSet.cxx:508
int UpdateAffPar(int layer, EdbAffine2D &aff)
Definition: EdbDataSet.cxx:488
EdbScanCond * GetCond(int id)
Definition: EdbDataSet.h:90
emulsion data processing
Definition: EdbDataSet.h:181
void FillCouplesTree(TTree *tree, EdbPVRec *al, int fillraw=0)
Definition: EdbDataSet.cxx:1740
void CloseCouplesTree(TTree *tree)
Definition: EdbDataSet.cxx:1809
static int LinkTracksWithFlag(EdbPVRec *ali, float p, float probmin, int nsegmin, int maxgap, int flag, float mass=0.1396)
Definition: EdbDataSet.cxx:2256
void SetZlayer(float z, float zmin, float zmax)
Definition: EdbLayer.h:101
Definition: EdbPVRec.h:148
void SetSegmentsErrors()
Definition: EdbPVRec.cxx:1129
int Align(int alignFlag)
Definition: EdbPVRec.cxx:1210
EdbPatCouple * GetCouple(int i) const
Definition: EdbPVRec.h:190
int FineCorrZnew()
Definition: EdbPVRec.cxx:2189
void SetChi2Max(float chi)
Definition: EdbPVRec.h:186
void SetCouplesAll()
Definition: EdbPVRec.cxx:975
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
void SetOffsetsMax(float ox, float oy)
Definition: EdbPVRec.cxx:925
int Ncouples() const
Definition: EdbPVRec.h:80
Definition: EdbPattern.h:273
void SetPID(int pid)
Definition: EdbPattern.h:310
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1707
void PrintAff() const
Definition: EdbPattern.cxx:1651
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1721
void SetPatternsID()
Definition: EdbPattern.cxx:1603
virtual const EdbAffine2D * GetKeep() const
Definition: EdbVirtual.h:176
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:2378
bool InitPiece(EdbDataPiece &piece, int id[4])
Definition: EdbScanProc.cxx:2344
bool AddParLine(const char *file, const char *line, bool recreate=false)
Definition: EdbScanProc.cxx:1959
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1819
Float_t Z() const
Definition: EdbPattern.h:84
void SetSegmentsZ()
Definition: EdbPattern.cxx:250
EdbDataProc * proc
Definition: read_pvr.C:3
EdbPVRec * ali
Definition: test_oracle.C:9
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
int piece2
Definition: shower_btr.C:21

◆ AlignAll() [1/2]

int EdbScanProc::AlignAll ( EdbID  id1,
EdbID  id2,
int  npre = 1,
int  nfull = 3,
const char *  opt = "-z" 
)
inline
130 {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:2595
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" 
)
2596{
2597 int nal=0;
2598 if (npre > 0) {
2599 MakeInPar(id1,"prealignment");
2600 MakeInPar(id2,"prealignment");
2601 for (Int_t i = 0; i < npre; i++) {
2602 // find affine transformation from id1 to id2 and update par of id1
2603 nal = Align(id1, id2, "");
2604 if (nal == -1) return -1;
2605 }
2606 }
2607 if (nfull > 0) {
2608 MakeInPar(id1,"fullalignment");
2609 MakeInPar(id2,"fullalignment");
2610 for (Int_t i = 0; i < nfull; i++) {
2611 // find affine transformation from id1 to id2 and update par of id1
2612 nal = Align(id1, id2, opt);
2613 if (nal == -1) return -1;
2614 }
2615 }
2616 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",
2617 id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3],npre,nfull,nal);
2618 return nal;
2619}
void LogPrint(int brick, int level, const char *rout, const char *msgfmt,...)
Definition: EdbScanProc.cxx:3063
bool MakeInPar(int id[4], const char *option)
Definition: EdbScanProc.cxx:1983

◆ AlignNewNopar()

int EdbScanProc::AlignNewNopar ( EdbID  id1,
EdbID  id2,
TEnv &  cenv,
EdbAffine2D aff = 0,
float  dz = 0 
)

Align 2 patterns. All necessary information should be in the envfile
Convension about Z(setted while process): the z of id2 is 0, the z of id1 is (-deltaZ) where deltaZ readed from aff.par file in a way that pattern of id1 projected to deltaZ correspond to pattern of id2

486{
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 av.eSaveCouples = cenv.GetValue("fedra.align.SaveCouples" , 1);
503
504 EdbPattern p1,p2;
505 ReadPatCPnopar( p1, id1, cut );
506 ReadPatCPnopar( p2, id2, cut );
507 if(aff) { aff->Print(); p1.Transform(aff);}
508
509 TString dataout; MakeAffName(dataout,id1,id2,"al.root");
510 av.InitOutputFile( dataout );
511 av.Align( p1, p2 , dz);
512 av.CloseOutputFile();
513 UpdateAFFPar( id1, id2, av.eCorrL[0], aff );
514 return npat;
515}
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
EdbLayer eCorrL[2]
corrections in form of affine transformations - the final output
Definition: EdbAlignmentV.h:25
void InitOutputFile(const char *file="report_al.root", const char *option="RECREATE")
IO, initialization and finalization functions.
Definition: EdbAlignmentV.cxx:41
void CloseOutputFile()
Definition: EdbAlignmentV.cxx:48
plate-to-plate alignment
Definition: EdbPlateAlignment.h:8
Float_t eOffsetMax
the maximal offset to be looked for
Definition: EdbPlateAlignment.h:12
Bool_t eSaveCouples
save couples tree with the report file
Definition: EdbPlateAlignment.h:23
void SetSigma(float spos, float sang)
Definition: EdbPlateAlignment.h:53
Bool_t eDoFine
Definition: EdbPlateAlignment.h:21
void Align(EdbPattern &p1, EdbPattern &p2, float dz)
Definition: EdbPlateAlignment.cxx:61
Float_t eDZ
the range +- dz will be scanned by coarce align
Definition: EdbPlateAlignment.h:14
Float_t eDPHI
the range +- dphi will be scanned by coarce align
Definition: EdbPlateAlignment.h:15
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:155
bool UpdateAFFPar(EdbID id1, EdbID id2, EdbLayer &l, EdbAffine2D *aff0=0)
Definition: EdbScanProc.cxx:987
int ReadPatCPnopar(EdbPattern &pat, EdbID id, TCut cut="1", bool do_erase=false, bool read_mt=false)
Definition: EdbScanProc.cxx:681
TEnv cenv("emrec")
TCut cut
Definition: check_shower.C:6

◆ AlignOverlaps()

void EdbScanProc::AlignOverlaps ( EdbID  id,
EdbPattern p1,
EdbPattern p2,
TEnv &  cenv,
const char *  suff 
)
3182{
3183 float sigmaR = cenv.GetValue("fedra.alignRaw.sigmaR" , 0.7 );
3184 float sigmaT = cenv.GetValue("fedra.alignRaw.sigmaT" , 0.019 );
3185 float offsetMax = cenv.GetValue("fedra.alignRaw.offsetMax" , 10. );
3186 float DZ = cenv.GetValue("fedra.alignRaw.DZ" , 10. );
3187 float DPHI = cenv.GetValue("fedra.alignRaw.DPHI" , 0.0015 );
3189 av.SetSigma(sigmaR,sigmaT);
3190 av.eOffsetMax = offsetMax;
3191 av.eDZ = DZ;
3192 av.eDPHI = DPHI;
3193 av.eDoFine = 1;
3194
3195 TString dataout; MakeFileName(dataout,id,suff);
3196 av.InitOutputFile( dataout );
3197 av.eSaveCouples=true;
3198 av.Align( p1, p2, 0);
3199 av.CloseOutputFile();
3200}
float DZ
Definition: hwinit.C:66

◆ AlignRaw()

int EdbScanProc::AlignRaw ( EdbID  id1,
EdbID  id2,
TEnv &  cenv,
EdbAffine2D applyAff = 0 
)

Align raw segments patterns. Typical application: align 2 different scannings of the same emulsion plate.

2958{
2960
2961 int npat=0;
2962 Log(1,"\nAlignRaw","%s_%s", id1.AsString(), id2.AsString() );
2963 int side1 = cenv.GetValue("fedra.alignRaw.side1" , 1);
2964 int side2 = cenv.GetValue("fedra.alignRaw.side2" , 1);
2965 float z1 = cenv.GetValue("fedra.alignRaw.Z1" , 0);
2966 float z2 = cenv.GetValue("fedra.alignRaw.Z2" , 0);
2967 float wmin1 = cenv.GetValue("fedra.alignRaw.Wmin1" , 8);
2968 float wmin2 = cenv.GetValue("fedra.alignRaw.Wmin2" , 8);
2969 float sigmaR = cenv.GetValue("fedra.alignRaw.sigmaR" , 2.5 );
2970 float sigmaT = cenv.GetValue("fedra.alignRaw.sigmaT" , 0.005 );
2971 float offsetMax = cenv.GetValue("fedra.alignRaw.offsetMax" , 500. );
2972 float thetaMax = cenv.GetValue("fedra.alignRaw.thetaMax" , 1. );
2973 int path1 = cenv.GetValue("fedra.alignRaw.path1" , -1 );
2974 int path2 = cenv.GetValue("fedra.alignRaw.path2" , -1 );
2975
2976 float xmin1 = cenv.GetValue("fedra.alignRaw.xmin1" , -500. );
2977 float xmax1 = cenv.GetValue("fedra.alignRaw.xmax1" , 500. );
2978 float xmin2 = cenv.GetValue("fedra.alignRaw.xmin2" , -500. );
2979 float xmax2 = cenv.GetValue("fedra.alignRaw.xmax2" , 500. );
2980 float ymin1 = cenv.GetValue("fedra.alignRaw.ymin1" , -500. );
2981 float ymax1 = cenv.GetValue("fedra.alignRaw.ymax1" , 500. );
2982 float ymin2 = cenv.GetValue("fedra.alignRaw.ymin2" , -500. );
2983 float ymax2 = cenv.GetValue("fedra.alignRaw.ymax2" , 500. );
2984
2985 float DZ = cenv.GetValue("fedra.alignRaw.DZ" , 25. );
2986 float DPHI = cenv.GetValue("fedra.alignRaw.DPHI" , 0.003 );
2987
2988
2989 EdbRunAccess r1; if(!InitRunAccess(r1,id1)) return 0;
2990 EdbRunAccess r2; if(!InitRunAccess(r2,id2)) return 0;
2991 r1.eAFID = r2.eAFID = cenv.GetValue("fedra.alignRaw.AFID" , 1);
2992
2993 float min1[5] = {xmin1,ymin1,-thetaMax,-thetaMax, wmin1 };
2994 float max1[5] = {xmax1,ymax1, thetaMax, thetaMax, 100 };
2995 r1.AddSegmentCut(side1, 1, min1, max1);
2996 float min2[5] = {xmin2,ymin2,-thetaMax,-thetaMax, wmin2 };
2997 float max2[5] = {xmax2,ymax2, thetaMax, thetaMax, 100 };
2998 r2.AddSegmentCut(side2, 1, min2, max2);
2999
3000 EdbPattern p1, p2;
3001 r1.GetPatternDataForPrediction( path1, side1, p1 );
3002
3003 if(applyAff) p1.Transform(applyAff);
3004
3005 if(path2>=0) r2.GetPatternDataForPrediction( path2, side2, p2 );
3006 else {
3007 float xmin=p1.Xmin(), xmax=p1.Xmax();
3008 float ymin=p1.Ymin(), ymax=p1.Ymax();
3009 EdbSegP s(0, (xmin+xmax)/2., (ymin+ymax)/2., 0,0);
3010 float dx=(xmax-xmin)/2., dy=(ymax-ymin)/2.;
3011 float size = Sqrt( dx*dx+dy*dy ) + offsetMax+200.;
3012 r2.GetPatternXY(s, side2, p2, size);
3013 }
3014
3016 av.SetSigma(sigmaR,sigmaT);
3017 av.eOffsetMax = offsetMax;
3018 av.eDZ = DZ;
3019 av.eDPHI = DPHI;
3020 av.eDoFine = 1;
3021 TString dataout; MakeAffName(dataout,id1,id2,"al.root");
3022 av.InitOutputFile( dataout );
3023
3024 av.Align( p1, p2, z2-z1);
3025 av.CloseOutputFile();
3026
3027 //av.eCorrL[0].Print();
3028 UpdateAFFPar( id1, id2, av.eCorrL[0] );
3029 return npat;
3030 }
char * AsString() const
Definition: EdbID.cxx:26
virtual Float_t Xmax() const
Definition: EdbVirtual.cxx:196
virtual Float_t Ymin() const
Definition: EdbVirtual.cxx:206
virtual Float_t Xmin() const
Definition: EdbVirtual.cxx:186
virtual Float_t Ymax() const
Definition: EdbVirtual.cxx:216
helper class for access to the run data
Definition: EdbRunAccess.h:23
void AddSegmentCut(int xi, const char *cutline)
Definition: EdbRunAccess.cxx:1187
Int_t eAFID
if =1 - use affine transformations of the fiducial marks
Definition: EdbRunAccess.h:26
int GetPatternXY(EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
Definition: EdbRunAccess.cxx:377
int GetPatternDataForPrediction(int id, int side, EdbPattern &pat)
Definition: EdbRunAccess.cxx:540
bool InitRunAccess(EdbRunAccess &ra, int id[4], bool do_update=false)
Definition: EdbScanProc.cxx:2317
Definition: EdbSegP.h:21
s
Definition: check_shower.C:55

◆ AlignRawSet()

void EdbScanProc::AlignRawSet ( EdbID  id1,
EdbID  id2,
TEnv &  cenv 
)

assuming that exist the scan sets for idset1 and idset2
for each plate do the alignment raw from 1 to 2 and write id1_id2.aff.par

2943{
2946 EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
2947 EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
2948 int n = ss1->eIDS.GetEntries();
2949 for(int i=0; i<n; i++) {
2950 EdbID *id1 = ss1->GetID(i);
2951 EdbID *id2 = ss2->FindPlateID(id1->ePlate);
2952 if(id2) AlignRaw(*id1,*id2,cenv);
2953 }
2954}
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:2957
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1482
Definition: EdbScanSet.h:11
EdbID * GetID(Int_t i)
Definition: EdbScanSet.h:46
TList eIDS
list of the identifiers to be processed
Definition: EdbScanSet.h:16
EdbID * FindPlateID(Int_t p)
Definition: EdbScanSet.cxx:465

◆ AlignSet() [1/2]

void EdbScanProc::AlignSet ( EdbID  id,
int  npre,
int  nfull,
const char *  opt = "-z" 
)
535{
537 if(!ss) { Log(1,"AlignSet","Error! set for %s do not found",id.AsString()); return; }
538 AlignSet(*ss, npre,nfull, opt);
539 ss->eB.ResetAff();
540 WriteScanSet(id,*ss);
541 UpdateSetWithAff(id,id);
542}
void UpdateSetWithAff(EdbID idset, EdbAffine2D aff)
Definition: EdbScanProc.cxx:2730
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1428
void AlignSet(EdbID id, int npre, int nfull, const char *opt="-z")
Definition: EdbScanProc.cxx:534
ss
Definition: energy.C:62

◆ AlignSet() [2/2]

int EdbScanProc::AlignSet ( EdbScanSet sc,
int  npre = 1,
int  nfull = 3,
const char *  opt = "-z" 
)
546{
547 if(sc.eIDS.GetEntries()<2) return 0;
548 int n=0;
549 EdbID *id1,*id2;
550 for(int i=0; i<sc.eIDS.GetEntries()-1; i++) {
551 id1 = (EdbID *)(sc.eIDS.At(i));
552 id2 = (EdbID *)(sc.eIDS.At(i+1));
553 int id14[4]; id1->Get(id14);
554 int id24[4]; id2->Get(id24);
555 n += AlignAll(id14, id24, npre, nfull, opt);
556 }
557 return n;
558}

◆ AlignSetNewNopar() [1/2]

void EdbScanProc::AlignSetNewNopar ( EdbID  id,
TEnv &  cenv 
)
454{
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.GetEntries()<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.GetEntries()-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] 
)

read affine transformations and deltaZ from x.x.x.x_y.y.y.y.aff.par and apply it to pat

2580{
2582 EdbAffine2D aff;
2583 float dz;
2584 if( !GetAffZ( aff, dz, id1, id2) ) return false;
2585 if(gEDBDEBUGLEVEL>2) {
2586 printf("ApplyAffZ: dz = %f\n",dz);
2587 aff.Print();
2588 }
2589 pat.ProjectTo(dz);
2590 pat.Transform(&aff);
2591 return true;
2592}
bool GetAffZ(EdbAffine2D &aff, float &z, int id1[4], int id2[4])
Definition: EdbScanProc.cxx:2563
void ProjectTo(const float dz)
Definition: EdbPattern.cxx:268

◆ AssembleScanSet()

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

◆ BrickDir()

char * EdbScanProc::BrickDir ( int  brick)
1811{
1812 char *str = new char[256];
1813 sprintf(str,"%s/b%6.6d",
1814 eProcDirClient.Data(),brick);
1815 return str;
1816}
BRICK brick
Definition: RecDispMC.C:103
TString eProcDirClient
directory path for root data
Definition: EdbScanProc.h:14

◆ CheckAFFDir()

bool EdbScanProc::CheckAFFDir ( int  brick,
bool  create = true 
)

return true if dir ../bXXXXXX/AFF is exists, if create==true (default) create it if necessary

1772{
1774 char str[256];
1775 sprintf(str,"%s/b%6.6d/AFF", eProcDirClient.Data(),brick);
1776 return CheckDir(str,create);
1777}
bool CheckDir(const char *dir, bool create=true)
Definition: EdbScanProc.cxx:1746

◆ CheckBrickDir()

bool EdbScanProc::CheckBrickDir ( EdbID  id,
bool  create = true 
)

return true if dir ../bXXXXXX exist, if create==true (default) create it if necessary

1781{
1783 char str[256];
1784 sprintf(str,"%s/b%6.6d", eProcDirClient.Data(),id.eBrick);
1785 if(!CheckDir(str,create)) return false;
1786 return true;
1787}

◆ CheckDir()

bool EdbScanProc::CheckDir ( const char *  dir,
bool  create = true 
)

check the existance of the directory dir
if do not exist and create==true (default) - create it
return true if the directory exists or succesfully created

1747{
1751
1752 void *dirp=0; // pointer to the directory
1753 dirp = gSystem->OpenDirectory(dir);
1754 if(!dirp) {
1755 if(create) {
1756 if(gSystem->MakeDirectory(dir)==0) Log(2,"EdbScanProc::CheckDir","create directory %s", dir);
1757 else Log(1,"EdbScanProc::CheckDir","ERROR! can not create directory %s", dir);
1758 }
1759 else return false;
1760 } else { gSystem->FreeDirectory(dirp); dirp=0;}
1761 dirp = gSystem->OpenDirectory(dir);
1762 if(!dirp) {
1763 Log(1,"EdbScanProc::CheckDir","ERROR! directory %s is not created!", dir);
1764 return false;
1765 }
1766 gSystem->FreeDirectory(dirp);
1767 return true;
1768}

◆ CheckDirWritable()

bool EdbScanProc::CheckDirWritable ( const char *  dir)
1736{
1737 if( gSystem->AccessPathName(dir, kWritePermission) ) //can not access file!
1738 {
1739 Log(1,"CheckDirWritable","ERROR: can not open output directory: %s !!!",dir);
1740 return 0;
1741 }
1742 return 1;
1743}

◆ CheckFiles()

void EdbScanProc::CheckFiles ( EdbScanSet sc,
const char *  suffix 
)
635{
636 EdbID *id;
637 for(int i=0; i<sc.eIDS.GetEntries(); i++) {
638 id = (EdbID*)sc.eIDS.At(i);
639 TString str;
640 MakeFileName(str,*id,suffix);
641 gSystem->Exec(Form("ls -l %s",str.Data()));
642 }
643}
UInt_t id
Definition: tlg2couples.C:117

◆ CheckPlateDir()

bool EdbScanProc::CheckPlateDir ( EdbID  id,
bool  create = true 
)

return true if dir ../bXXXXXX/pXXX exist, if create==true (default) create it if necessary

1791{
1793 char str[256];
1794 sprintf(str,"%s/b%6.6d/p%3.3d", eProcDirClient.Data(),id.eBrick,id.ePlate);
1795 if(!CheckDir(str,create)) return false;
1796 return true;
1797}

◆ 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:1800

◆ CheckProcDir() [2/2]

bool EdbScanProc::CheckProcDir ( int  id[4],
bool  create = true 
)

return true if dir ../bXXXXXX/pXXX exist, if create==true (default) create it if necessary

1801{
1803 EdbID idd( id[0], id[1], id[2], id[3] );
1804 if(!CheckBrickDir(idd,create)) return false;
1805 if(!CheckPlateDir(idd,create)) return false;
1806 return true;
1807}
bool CheckBrickDir(EdbID id, bool create=true)
Definition: EdbScanProc.cxx:1780
bool CheckPlateDir(EdbID id, bool create=true)
Definition: EdbScanProc.cxx:1790

◆ CheckRunQualityRaw()

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

◆ CheckSetQualityRaw()

void EdbScanProc::CheckSetQualityRaw ( EdbID  idss)
519{
520 EdbScanSet *ss = ReadScanSet(idss);
521 int n = ss->eIDS.GetEntries(); if(n<1) return;
522 for(int i=0; i<n; i++) {
523 EdbID *id = (EdbID *)(ss->eIDS.At(i));
524 TString name;
525 MakeFileName(name,*id,"raw.root");
526 EdbRunAccess a(name.Data());
527 a.InitRun();
528 a.CheckRunLine();
529 }
530 delete ss;
531}

◆ CheckViewOverlaps()

void EdbScanProc::CheckViewOverlaps ( EdbID  id,
TEnv &  cenv 
)
3204{
3205 float pulsMin1 = 6;
3206 float pulsMin2 = 6;
3207 EdbRunAccess r; if(!InitRunAccess(r,id)) return;
3208 r.CheckViewStep();
3210 r.GetVolumeArea(vol, 1);
3211 r.CheckViewSize();
3212
3213 EdbPattern p1l,p1r, p2l,p2r;
3214 r.SetCutLeft(1, pulsMin1); r.GetPatternDataForPrediction( -1, 1, p1l );
3215 r.SetCutLeft(2, pulsMin1); r.GetPatternDataForPrediction( -1, 2, p2l );
3216 r.SetCutRight(1, pulsMin1); r.GetPatternDataForPrediction( -1, 1, p1r );
3217 r.SetCutRight(2, pulsMin1); r.GetPatternDataForPrediction( -1, 2, p2r );
3218
3219 EdbPattern p1t,p1b, p2t,p2b;
3220 r.SetCutTop(1, pulsMin2); r.GetPatternDataForPrediction( -1, 1, p1t );
3221 r.SetCutTop(2, pulsMin2); r.GetPatternDataForPrediction( -1, 2, p2t );
3222 r.SetCutBottom(1, pulsMin2); r.GetPatternDataForPrediction( -1, 1, p1b );
3223 r.SetCutBottom(2, pulsMin2); r.GetPatternDataForPrediction( -1, 2, p2b );
3224
3225 AlignOverlaps(id, p1l,p1r, cenv, "al.vlr1.root");
3226 AlignOverlaps(id, p2l,p2r, cenv, "al.vlr2.root");
3227 AlignOverlaps(id, p1t,p1b, cenv, "al.vtb1.root");
3228 AlignOverlaps(id, p2t,p2b, cenv, "al.vtb2.root");
3229}
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
Definition: EdbPattern.h:334
void AlignOverlaps(EdbID id, EdbPattern &p1, EdbPattern &p2, TEnv &cenv, const char *suff)
Definition: EdbScanProc.cxx:3181
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" 
)

can be called separately in case of missed conversion

878{
880 EdbPattern pred;
881 ReadPred(pred, id, flag);
882 EdbRun *run = InitRun(id);
883 if(!run) return 0;
884 int scanned = scan.ConvertAreas(id,pred,*run,opt);
885 LogPrint(id[0],1,"ConvertAreas","%d.%d.%d.%d with %d predictions with flag %d; %d views stored",
886 id[0],id[1],id[2],id[3],pred.N(),flag,run->GetEntries());
887 run->Close();
888 delete run;
889 return scanned;
890}
EdbScanCond * scan
Definition: RecDispNU.C:117
Definition: EdbRun.h:75
void Close()
Definition: EdbRun.cxx:439
int GetEntries() const
Definition: EdbRun.h:136
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:1919
Int_t N() const
Definition: EdbPattern.h:86
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 
)

copy AFF/xc_yc.par to AFF/xp_yp.par

977{
979 TString name1, name2;
980 MakeAffName(name1,id1c,id2c);
981 MakeAffName(name2,id1p,id2p);
982 LogPrint(id1c[0],2,"CopyAFFPar","from %s to %s", name1.Data(),name2.Data());
983 return gSystem->CopyFile(name1.Data(), name2.Data(), overwrite);
984}

◆ CopyFile()

int EdbScanProc::CopyFile ( int  id1[4],
int  id2[4],
const char *  suffix,
bool  overwrite 
)

copy piece file from id1 to id2

950{
952 TString name1, name2;
953 MakeFileName(name1,id1,suffix);
954 MakeFileName(name2,id2,suffix);
955 int status = gSystem->CopyFile(name1.Data(), name2.Data(), overwrite);
956 LogPrint(id1[0],2,"CopyFile","status=%d from %s to %s", status, name1.Data(),name2.Data() );
957 //sleep(10);
958 if( gSystem->AccessPathName(name2, kReadPermission) ) return 0; //can not access file!
959 return 1;
960}

◆ 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:949

◆ CopyParSet()

void EdbScanProc::CopyParSet ( EdbID  idset1,
EdbID  idset2 
)

assuming that exist the scan sets for idset1 and idset2
copy the plate par files with shrinkage corrections from 1 to 2

166{
169 EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
170 EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
171 int n = ss1->eIDS.GetEntries();
172 for(int i=0; i<n; i++) {
173 EdbID *id1 = ss1->GetID(i);
174 EdbID *id2 = ss2->FindPlateID(id1->ePlate);
175 if(id2) CopyPar(*id1,*id2);
176 }
177
178}

◆ 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" 
)

take p1.found.root, apply AFF/p1_p2.par, align to p2 and update AFF/p1_p2.par

1182{
1184 EdbPattern pat;
1185 ReadFound(pat,id1);
1186 if(pat.N()<patmin)
1187 LogPrint(id1[0],1,"CorrectAffWithPred","WARNING: unreliable correction - pattern is too small: %d < %d", pat.N(),patmin);
1188 else if(pat.N()<2) {
1189 LogPrint(id1[0],1,"CorrectAffWithPred","ERROR: correction is impossible - too small pattern: %d", pat.N());
1190 return false;
1191 }
1192
1193 EdbAffine2D aff;
1194 float dz;
1195 if(!GetAffZ(aff, dz, id1,id2)) return false;
1196 pat.Transform(&aff);
1197 pat.SetZ(-dz);
1198 pat.SetSegmentsZ();
1199
1200 MakeInPar(id2,parfile);
1201 EdbPattern p2;
1203 InitPiece(piece2, id2);
1204 ReadPiece(piece2, p2);
1205 p2.SetZ(0);
1206 p2.SetSegmentsZ();
1207
1208 EdbPVRec ali;
1209 ali.AddPattern(&pat);
1210 ali.AddPattern(&p2);
1211 EdbScanCond *cond = piece2.GetCond(0);
1212 cond->SetChi2Mode(3);
1213 ali.SetScanCond( cond );
1217 ali.SetChi2Max(cond->Chi2PMax());
1218 ali.SetOffsetsMax(cond->OffX(),cond->OffY());
1219
1220 ali.Align(2);
1221 //ali.Align(0);
1222 int nal = ali.GetCouple(0)->Ncouples();
1223
1224 if(nal<patmin) {
1225 LogPrint(id1[0],1,"CorrectAffWithPred","WARNING: pattern is too small: %d < %d: do not update par file!", nal, patmin);
1226 return false;
1227 }
1228
1229 TString parfileOUT;
1230 MakeAffName(parfileOUT,id1,id2);
1231 piece2.eFileNamePar = parfileOUT;
1232 ali.GetPattern(0)->GetKeep(aff);
1233 piece2.UpdateAffPar(0,aff);
1234 if( strstr(opt,"-z")) {
1236 proc.LinkTracksWithFlag( &ali, 10., 0.05, 2, 3, 0 );
1237 ali.FineCorrZnew();
1238 piece2.UpdateZPar(0,-ali.GetPattern(0)->Z());
1239 }
1240
1241 LogPrint(id1[0],1,"CorrectAffWithPred","from %d.%d.%d.%d to %d.%d.%d.%d: used %d (out of %d predictions) for correction",
1242 id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3], nal, pat.N() );
1243 return true;
1244}
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])
2008{
2009 EdbDataPiece piece;
2010 InitPiece(piece,id);
2011 TString parfileOUT;
2012 MakeFileName(parfileOUT,id,"par");
2013 piece.eFileNamePar = parfileOUT;
2014 return piece.CorrectAngles();
2015}
int CorrectAngles()
Definition: EdbDataSet.cxx:875

◆ CorrectPredWithFound()

bool EdbScanProc::CorrectPredWithFound ( int  id1[4],
int  id2[4],
const char *  opt = "-z",
int  patmin = 6 
)

take p1.found.root, apply AFF/p1_p2.par, read p2.found.root, align and update AFF/p1_p2.par

1116{
1118
1119 EdbPattern p1; ReadFound(p1,id1);
1120 EdbPattern p2; ReadFound(p2,id2);
1121
1122 if(p1.N()<2||p2.N()<2) {
1123 LogPrint(id1[0],1,"CorrectPredWithFound","ERROR: correction is impossible - too small pattern: %d", p1.N(), p2.N());
1124 return false;
1125 }
1126 else if(p1.N()<patmin || p2.N()<patmin)
1127 LogPrint(id1[0],1,"CorrectPredWithFound","WARNING: unreliable correction - pattern is too small: %d < %d", p1.N(), p2.N(),patmin);
1128
1129 EdbAffine2D aff; float dz;
1130 if(!GetAffZ(aff, dz, id1,id2)) return false;
1131 p1.Transform(&aff);
1132 p1.SetZ(-dz); p1.SetSegmentsZ();
1133 p2.SetZ(0); p2.SetSegmentsZ();
1134
1135 MakeInPar(id2,"fullalignment");
1137 InitPiece(piece2, id2);
1138
1139 EdbPVRec ali;
1140 ali.AddPattern(&p1);
1141 ali.AddPattern(&p2);
1142 EdbScanCond *cond = piece2.GetCond(0);
1143 cond->SetChi2Mode(3);
1144 ali.SetScanCond( cond );
1148 ali.SetChi2Max(cond->Chi2PMax());
1149 ali.SetOffsetsMax(cond->OffX(),cond->OffY());
1150
1151 ali.Align(2);
1152 //ali.Align(0);
1153 int nal = ali.GetCouple(0)->Ncouples();
1154
1155 if(nal<patmin) {
1156 LogPrint(id1[0],1,"CorrectAffWithPred","WARNING: pattern is too small: %d < %d: do not update par file!", nal, patmin);
1157 return false;
1158 }
1159
1160 TString parfileOUT;
1161 MakeAffName(parfileOUT,id1,id2);
1162 piece2.eFileNamePar = parfileOUT;
1163 ali.GetPattern(0)->GetKeep(aff);
1164 piece2.UpdateAffPar(0,aff);
1165
1166 if( strstr(opt,"-z")) {
1168 proc.LinkTracksWithFlag( &ali, 10., 0.05, 2, 3, 0 );
1169 printf("befire corr z: z1=%f z2=%f \n",ali.GetPattern(0)->Z(), ali.GetPattern(1)->Z());
1170 ali.FineCorrZnew();
1171 printf("after corr z: z1=%f z2=%f \n",ali.GetPattern(0)->Z(), ali.GetPattern(1)->Z());
1172 piece2.UpdateZPar(0,-ali.GetPattern(0)->Z());
1173 }
1174
1175 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",
1176 id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3], nal, p1.N(), p2.N() );
1177 return true;
1178}

◆ ExtractRawVolume() [1/2]

void EdbScanProc::ExtractRawVolume ( EdbID  id,
EdbID  idnew,
EdbSegP  pred,
int  plate,
TEnv &  cenv 
)

from EdbScanSet id extract volume around pred and save into idnew
Note: the z of pred is assumed to be the z of plate in this function

3290{
3293
3294 int nplBefore = cenv.GetValue("fedra.ExtractVol.NplBefore" , 4 );
3295 int nplAfter = cenv.GetValue("fedra.ExtractVol.NplAfter" , 5 );
3296 float dR = cenv.GetValue("fedra.ExtractVol.DR" , 1000.);
3297 Log(2,"ExtractRawVolume","%s --> %s ref plate: %d (%d %d) at (%f %f)",
3298 id.AsString(),idnew.AsString(), plateid, plateid-nplBefore, plateid+nplAfter, pred.X(),pred.Y() );
3299 if(gEDBDEBUGLEVEL>2) cenv.Print();
3300
3301 EdbScanSet *ss = ReadScanSet(id); if(!ss) return;
3302 EdbScanSet ssnew; ssnew.Copy(*ss);
3303 ssnew.eB.SetID(idnew.eBrick);
3304 ssnew.eIDS.Clear();
3305 ssnew.SetID(idnew);
3306
3307 EdbPlateP *pl = ss->GetPlate(plateid);
3308 if(!pl) Log(1,"ExtractRawVolume","ERROR: the plate %d is missing in scan set",plateid);
3309 Log(3,"ExtractRawVolume","assign to the prediction z = %f of the plate %d",pl->Z(),plateid );
3310 pred.SetZ(pl->Z());
3311
3312 int n = ss->eIDS.GetEntries();
3313 for(int i=0; i<n; i++ ) {
3314 EdbID *id = ss->GetID(i);
3315 if( (id->ePlate >= plateid-nplBefore) && (id->ePlate <= plateid+nplAfter) ) {
3316 EdbID *newid = new EdbID(*id);
3317 newid->eBrick = idnew.eBrick;
3318 newid->eMajor = idnew.eMajor;
3319 newid->eMinor = idnew.eMinor;
3320 ssnew.eIDS.Add( newid );
3321 }
3322 }
3323 ssnew.MakePIDList();
3324
3325 ExtractRawVolume(*ss, ssnew, pred, dR);
3326}
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:94
void ExtractRawVolume(EdbID id, EdbID idnew, EdbSegP pred, int plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3289
void MakePIDList()
Definition: EdbScanSet.cxx:178
void Copy(EdbScanSet &sc)
Definition: EdbScanSet.cxx:51
void SetID(EdbID id)
Definition: EdbScanSet.h:47
EdbBrickP eB
all layers of the brick defined here
Definition: EdbScanSet.h:13
Float_t X() const
Definition: EdbSegP.h:173
void SetZ(float z)
Definition: EdbSegP.h:125
Float_t Y() const
Definition: EdbSegP.h:174

◆ ExtractRawVolume() [2/2]

void EdbScanProc::ExtractRawVolume ( EdbScanSet ss,
EdbScanSet ssnew,
EdbSegP pred,
float  dR 
)

from EdbScanSet ss extract volume for plates defined in ssnew around pred with dR

3376{
3378 int n = ssnew.eIDS.GetEntries(); if(n<1) return;
3379 if(!CheckBrickDir(ssnew.eID,true)) return;
3380 WriteScanSet(ssnew.eID,ssnew);
3381
3382 for(int i=0; i<n; i++ ) {
3383 EdbID *newid = ssnew.GetID(i);
3384 newid->Print();
3385 EdbPlateP *plate = ssnew.GetPlate(newid->ePlate);
3386 EdbSegP newpred(pred);
3387 newpred.PropagateTo(plate->Z());
3388
3389 EdbID *id = ss.FindPlateID(newid->ePlate);
3390 EdbRunAccess ra; if(!InitRunAccess(ra,*id)) return; // TODO: check transformations used to select views!
3391
3392 if(CheckProcDir(*newid,true)) {
3393 TString runfile;
3394 MakeFileName(runfile,*newid,"raw.root");
3395 ra.CopyRawDataXY( newpred.X(), newpred.Y(), dR,runfile.Data() );
3396 }
3397 }
3398
3399}
void Print()
Definition: EdbID.h:30
bool CopyRawDataXY(float x0, float y0, float dR, const char *file)
Definition: EdbRunAccess.cxx:1213
EdbPlateP * GetPlate(Int_t p)
Definition: EdbScanSet.h:56
EdbID eID
id of the scanset itself
Definition: EdbScanSet.h:19

◆ FindCompliments()

int EdbScanProc::FindCompliments ( EdbSegP s,
EdbPattern pat,
TObjArray &  found,
float  chi2max,
TArrayF &  chiarr 
)

return found sorted by increasing chi2

2250{
2252
2253 int nfound=0;
2254 int maxcand=chiarr.GetSize();
2255 TArrayF chi2arr(maxcand);
2256 TObjArray arr(maxcand);
2257 TArrayI ind(maxcand);
2258
2259 int nseg = pat.FindCompliments(s,arr,30,200); // acceptance (prelim): s.SX()*30; s.STX*200
2260 //printf("\nnseg = %d\n",nseg);
2261 if(nseg>maxcand) {
2262 Log(1,"FindCompliments","Warning!: Too many segments %d, accept only the first %d", nseg, maxcand);
2263 nseg = maxcand;
2264 }
2265 if(nseg<=0) return 0;
2266
2267 EdbSegP *s2=0;
2268 for(int j=0; j<nseg; j++) {
2269 s2 = (EdbSegP *)arr.At(j);
2270 EdbSegP s3;
2271 s3.Copy(s);
2272 chi2arr[j] = EdbTrackFitter::Chi2Seg(&s3, s2);
2273 }
2274 TMath::Sort(nseg,chi2arr.GetArray(),ind.GetArray(),0);
2275 for(int j=0; j<nseg; j++) {
2276 s2 = (EdbSegP *)arr.At(ind[j]);
2277 if(chi2arr[ind[j]] > chi2max ) break;
2278 chiarr[j] = chi2arr[ind[j]];
2279 s2->SetMC(s.MCEvt(),s.MCTrack());
2280 found.Add(s2);
2281 nfound++;
2282 }
2283
2284 //printf("nfound = %d\n",nfound);
2285 return nfound;
2286}
int FindCompliments(EdbSegP &s, TObjArray &arr, float nsig, float nsigt)
Definition: EdbPattern.cxx:1354
void SetMC(int mEvt, int mTrack)
Definition: EdbSegP.h:141
void Copy(const EdbSegP &s)
Definition: EdbSegP.cxx:105
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 
)

find predictions pred in couples tree of id and prepare pattern "found"
assumed that pred are transformed and projected into the coord system of id
Input: pred - pattern with predictions
id - the data piece to be processed
maxholes - the maximum number of holes (missed segments) for doing extrapolation
Output: found - pattern with found tracks
x.x.x.x.found.txt summary file with all candidats

Probably obsolete function - to investigate if it in use now - in most
of cases it can be substituted by EdbRunTracking::FindPredictions (VT, AC)

2392{
2401
2405
2406 EdbPVRec ali;
2407 EdbPattern *pat=0;
2408 EdbDataPiece piece;
2409
2410 // predicted:
2411 pat = new EdbPattern(pred.X(),pred.Y(),0,100);
2412 for(int i=0; i<pred.N(); i++) pat->AddSegment(*(pred.GetSegment(i)));
2413 pat->SetPID(0);
2414 pat->SetSegmentsZ(); // z=0 (the same)
2415 ali.AddPattern(pat);
2416
2417 // scanned:
2418 InitPiece(piece, id);
2419 EdbPattern *patbt = new EdbPattern(0.,0., 0,100 );
2420 EdbPattern *pat1 = new EdbPattern(0.,0., 0,100 );
2421 EdbPattern *pat2 = new EdbPattern(0.,0., 0,100 );
2422
2423 if(!piece.InitCouplesTree("READ")) return 0;
2424 piece.GetCPData_new( patbt,pat1,pat2,0 );
2425 patbt->SetSegmentsZ();
2426 patbt->Transform( piece.GetLayer(0)->GetAffineXY() );
2427 patbt->TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2428 patbt->TransformShr( piece.GetLayer(0)->Shr() );
2429 pat1->SetSegmentsZ();
2430 pat1->Transform( piece.GetLayer(0)->GetAffineXY() );
2431 pat1->TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2432 pat2->SetSegmentsZ();
2433 pat2->Transform( piece.GetLayer(0)->GetAffineXY() );
2434 pat2->TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2435
2436 //ReadPiece(piece, *pat);
2437 patbt->SetSegmentsZ(); // z=0 (the same)
2438 patbt->SetPID(1);
2439 ali.AddPattern(patbt);
2440
2441 EdbScanCond *cond = piece.GetCond(0);
2442 cond->SetChi2Mode(3);
2443 ali.SetScanCond( cond );
2445 //ali.SetSegmentsErrors();
2447 ali.SetChi2Max(cond->Chi2PMax());
2448
2449 EdbSegP *s=0;
2450 for(int ip=0; ip<ali.Npatterns(); ip++)
2451 for(int i=0; i<ali.GetPattern(ip)->N(); i++) {
2452 s = ali.GetPattern(ip)->GetSegment(i);
2453 s->SetErrors();
2454 cond->FillErrorsCov( s->TX(), s->TY(), s->COV() );
2455 }
2456
2457 TString str;
2458 MakeFileName(str,id,"found.txt");
2459 FILE *f = fopen(str.Data(),"w");
2460
2461 TString strmt;
2462 MakeFileName(strmt,id,"found.mt.txt");
2463 FILE *fmt = fopen(strmt.Data(),"w");
2464
2465 int maxcand=100;
2466 TArrayF chiarr(maxcand);
2467 TArrayI ind(maxcand);
2468 TArrayI count(maxcand);
2469 TArrayI cnsel(maxcand);
2470
2471 pat = ali.GetPattern(1);
2472 pat->FillCell(20,20,0.01,0.01);
2473 int nseg=0;
2474 TObjArray arr;
2475 EdbSegP *s2=0;
2476 EdbSegP s3;
2477 for(int i=0; i<pred.N(); i++) {
2478 s = ali.GetPattern(0)->GetSegment(i);
2479 arr.Clear();
2480 nseg = pat->FindCompliments(*s,arr,cond->BinX(),cond->BinTX());
2481 if(nseg>maxcand) continue;
2482 count[nseg]++;
2483 int nsel=0;
2484 if(nseg>=0) {
2485 for(int j=0; j<nseg; j++) {
2486 s2 = (EdbSegP *)arr.At(j);
2487 s3.Copy(*s2);
2488 chiarr[j] = EdbTrackFitter::Chi2Seg(&s3, s);
2489 }
2490 TMath::Sort(nseg,chiarr.GetArray(),ind.GetArray(),0);
2491 for(int j=0; j<nseg; j++) {
2492 s2 = (EdbSegP *)arr.At(ind[j]);
2493 if(chiarr[ind[j]] > cond->Chi2PMax() ) break;
2494 nsel=j+1;
2495 s2->SetMC(s->MCEvt(),s->MCTrack());
2496 }
2497
2498 fprintf(f,"\n%8.8d %11.2f %11.2f %8.4f %8.4f %d\n",
2499 s->ID(),s->X(),s->Y(),s->TX(),s->TY(), nsel);
2500 fprintf(fmt,"\n%8.8d %11.2f %11.2f %8.4f %8.4f %d\n",
2501 s->ID(),s->X(),s->Y(),s->TX(),s->TY(), nsel);
2502 for(int j=0; j<nsel; j++) {
2503 s2 = (EdbSegP *)arr.At(ind[j]);
2504 fprintf(f,"%8d %11.2f %11.2f %8.4f %8.4f %6.2f %3.0f\n",
2505 j+1,s2->X(),s2->Y(),s2->TX(),s2->TY(),chiarr[ind[j]],s2->W());
2506 fprintf(fmt,"%8d %11.2f %11.2f %8.4f %8.4f %6.2f %3.0f\n",
2507 j+1,s2->X(),s2->Y(),s2->TX(),s2->TY(),chiarr[ind[j]],s2->W());
2508 int imt=-1;
2509 if(patbt->GetSegments()->FindObject(s2)) imt = patbt->GetSegments()->IndexOf(s2);
2510 if(imt>0) {
2511 EdbSegP *smt = pat1->GetSegment(imt);
2512 fprintf(fmt,"s1:%5d %11.2f %11.2f %8.4f %8.4f %3.0f\n",
2513 j+1,smt->X(),smt->Y(),smt->TX(),smt->TY(),smt->W());
2514 smt = pat2->GetSegment(imt);
2515 fprintf(fmt,"s2:%5d %11.2f %11.2f %8.4f %8.4f %3.0f\n",
2516 j+1,smt->X(),smt->Y(),smt->TX(),smt->TY(),smt->W());
2517 }
2518 }
2519
2520 }
2521 cnsel[nsel]++;
2522 if(nsel>0) {
2523 found.AddSegment(*((EdbSegP *)arr.At(ind[0]))); // add the best segment
2524 found.GetSegmentLast()->SetFlag(0); // reset flag if found good candidate
2525 found.GetSegmentLast()->SetID(s->ID());
2526 }
2527 else if(s->Flag()<maxholes) {
2528 found.AddSegment(*(s)); // add itself in case of hole
2529 found.GetSegmentLast()->SetFlag(s->Flag()+1); // flag is the number of missed plates // OLD FLAG DEFINITION
2530 found.GetSegmentLast()->SetID(s->ID());
2531 }
2532 }
2533 fclose(f);
2534 fclose(fmt);
2535 delete pat1; pat1=0;
2536 delete pat2; pat2=0;
2537
2538 printf("Total: %d predictions, %d basetracks in scanned pattern\n",pred.N(), pat->N() );
2539 int sum=0;
2540 printf("Before chi2 cut: \n" );
2541 for(int i=0; i<maxcand; i++)
2542 if(count[i]>0) {
2543 printf("count(%5d)= %5d\n",i, count[i] );
2544 sum+=count[i];
2545 }
2546 printf("sum = %d\n",sum );
2547 sum=0;
2548 printf("After chi2 cut: \n" );
2549 for(int i=0; i<maxcand; i++)
2550 if(cnsel[i]>0) {
2551 printf("cnsel(%5d)= %5d\n",i, cnsel[i] );
2552 sum+=cnsel[i];
2553 }
2554 printf("sum = %d\n",sum );
2555
2556 LogPrint(id[0],1,"FindPredictions","%d.%d.%d.%d: %d out of %d predictions are found (%d-zero, %d-single, %d-multy), maxholes=%d",
2557 id[0],id[1],id[2],id[3],sum-cnsel[0],pred.N(),cnsel[0],cnsel[1], sum-cnsel[0]-cnsel[1], maxholes);
2558
2559 return sum-cnsel[0];
2560}
int GetCPData_new(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbDataSet.cxx:792
float Shr() const
Definition: EdbLayer.h:89
EdbAffine2D * GetAffineTXTY()
Definition: EdbLayer.h:120
void FillCell(float stepx, float stepy, float steptx, float stepty)
Definition: EdbPattern.cxx:1323
Int_t Npatterns() const
Definition: EdbPattern.h:366
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
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
void SetID(int id)
Definition: EdbSegP.h:128
Float_t W() const
Definition: EdbSegP.h:151
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
void Clear()
Definition: EdbSegP.h:86
void SetFlag(int flag)
Definition: EdbSegP.h:130
void TransformA(const EdbAffine2D *affA)
Definition: EdbPattern.cxx:324
EdbSegP * GetSegmentLast() const
Definition: EdbPattern.h:67
void TransformShr(const float shr)
Definition: EdbPattern.cxx:341
Float_t Y() const
Definition: EdbPattern.h:83
TClonesArray * GetSegments() const
Definition: EdbPattern.h:69
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
Float_t X() const
Definition: EdbPattern.h:82
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:72

◆ FindPredictions() [2/2]

int EdbScanProc::FindPredictions ( int  id[4],
int  flag = -1,
int  maxholes = 3 
)

find predictions of yp.yp.yp.yp.pred.root in yp.yp.yp.yp.cp.root and produce yp.yp.yp.yp.found.root
flag: -1 - all predictions
0 - only found in the previous plate (no holes)
1 - 1 holes before
2 - 2 holes before
3 - 3 holes before

1248{
1255
1256 int nfound=0;
1257 EdbPattern pred, found;
1258 ReadPred(pred,id, flag);
1259 nfound = FindPredictions(pred, id,found, maxholes);
1260 WriteFound(found,id);
1261
1262 //EdbTestAl ta;
1263 //ta.HDistance(pred,found);
1264 //ta.FillTree(0);
1265 //EdbAffine2D aff;
1266 //ta.MakeTrans(aff,0,"(dx*dx+dy*dy)>0.00001&&abs(dx)<100&&abs(dy)<100");
1267
1268 return nfound;
1269}
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:2391

◆ FindPredictionsRaw() [1/2]

int EdbScanProc::FindPredictionsRaw ( EdbID  idp,
EdbID  idr 
)

find raw microtracks for the predictions of idp in raw data of idr
Input: idp.pred.root, idr.raw.root
Output: idp.found.root, idp.found.raw.txt

2054{
2058
2059 EdbPattern pred;
2060 EdbPattern found;
2061 ReadPred(pred,idp);
2062 EdbRunAccess ra;
2063 InitRunAccess(ra,idr);
2064
2065 EdbScanCond condBT;
2066 EdbScanCond condMT;
2067 SetDefaultCondBT(condBT);
2068 SetDefaultCondMT(condMT);
2069 float delta_theta = 0.1;
2070 float puls_min = 7;
2071 float chi2max = 1.6;
2072 int nfound = FindPredictionsRaw(pred,found,ra, condBT,condMT, delta_theta, puls_min, chi2max);
2073 WriteFound(found, idp);
2074
2075 return nfound;
2076}
int FindPredictionsRaw(EdbID idp, EdbID idr)
Definition: EdbScanProc.cxx:2053
void SetDefaultCondBT(EdbScanCond &cond)
Definition: EdbScanProc.cxx:2289
void SetDefaultCondMT(EdbScanCond &cond)
Definition: EdbScanProc.cxx:2303

◆ 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 
)

find raw microtracks for the predictions "pred" in run "ra"
Input: pred,ra
Output: fnd - basetracks with position taken from the best microtrack (if any) and the angle of the predicted basetrack

2082{
2086
2087 Log(2,"FindPredictionsRaw"," search for %d predictions \n", pred.N());
2088
2089 TFile ftree("micro.root","RECREATE");
2090 EdbSegP *s_b = new EdbSegP();
2091 EdbSegP *sf_b = new EdbSegP();
2092 TClonesArray *pat1_b = new TClonesArray("EdbSegP");
2093 TClonesArray *pat2_b = new TClonesArray("EdbSegP");
2094 TTree micro("micro","micro");
2095 micro.Branch("s.","EdbSegP",&s_b,32000,99);
2096 micro.Branch("sf.","EdbSegP",&sf_b,32000,99);
2097 micro.Branch("s1.",&pat1_b,32000,99);
2098 micro.Branch("s2.",&pat2_b,32000,99);
2099
2100 if(!out) out = fopen("micro.txt","w");
2101 if(!out) return 0;
2102 if(gEDBDEBUGLEVEL>2) ra.Print();
2103
2104 for(int i=0; i<pred.N(); i++) {
2105 ra.ClearCuts();
2106 EdbSegP s;
2107 s.Copy( *(pred.GetSegment(i)) );
2108 s.SetZ(107.); // TODO!
2109 s.SetErrors();
2110 float xmin[5]={-500, -500, s.TX()-delta_theta, s.TY()-delta_theta, puls_min }; //TODO!!
2111 float xmax[5]={ 500, 500, s.TX()+delta_theta, s.TY()+delta_theta, 50 };
2112 condBT.FillErrorsCov( s.TX(), s.TY(), s.COV() );
2113 fprintf(out,"\n%8.8d %11.2f %11.2f %7.4f %7.4f\n",s.ID(),s.X(),s.Y(),s.TX(),s.TY());
2114
2115 EdbPVRec aview; //with 2 patterns of preselected microtracks
2116 aview.AddPattern( new EdbPattern(0,0,214)); // TODO! sequence??
2117 aview.AddPattern( new EdbPattern(0,0,0) );
2118
2119 for(int side=1; side<=2; side++) {
2120 Log(3,"FindPredictionsRaw","side = %d\n",side);
2121 EdbPattern pat;
2122 ra.AddSegmentCut(side,1,xmin,xmax);
2123 ra.GetPatternXY( s, side, pat );
2124
2125 for(int i=0; i<pat.N(); i++) {
2126 EdbSegP *ss = pat.GetSegment(i);
2127 ss->SetErrors();
2128 condMT.FillErrorsCov( s.TX(), s.TY(), ss->COV() );
2129 }
2130 pat.FillCell(10,10,0.01,0.01); //divide view on this cells
2131
2132 TArrayF chi2arr(1000); //TODO!
2133 TObjArray found;
2134 int nf= FindCompliments(s,pat,found, chi2max, chi2arr);
2135 for(int j=0; j<found.GetEntries(); j++) {
2136 EdbSegP *s2 = (EdbSegP *)(found.At(j));
2137 s2->SetChi2(chi2arr[j]); // TODO -???
2138 aview.GetPattern(side-1)->AddSegment(*s2);
2139 float offx=s2->X()-(s.X()+s.TX()*(s2->Z()-s.Z()));
2140 float offy=s2->Y()-(s.Y()+s.TY()*(s2->Z()-s.Z()));
2141 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",
2142 side,nf,s2->ID(),s2->X(),s2->Y(),s2->TX(),s2->TY(),s2->Z(),
2143 offx,offy,
2144 s2->TX()-s.TX(),s2->TY()-s.TY(),chi2arr[j],s2->W());
2145 }
2146 }
2147
2148 EdbSegP sfmt; // container for the found best microtrack passed the cuts
2149 sfmt.SetChi2(10.*chi2max);
2150
2151 float rlim = 20; // TODO
2152 float chi, chimin = 1.5; // TODO for bt selection
2153 EdbSegP *s1b=0, *s2b=0; // the best bt
2154 EdbSegP s3;
2155
2156 for(int is1=0; is1<aview.GetPattern(0)->N(); is1++) {
2157 EdbSegP *s1 = aview.GetPattern(0)->GetSegment(is1);
2158 if( sfmt.Chi2() > s1->Chi2() && s1->W() >= puls_mt ) {sfmt.Copy(*s1); sfmt.SetFlag(1);}
2159 }
2160 for(int is2=0; is2<aview.GetPattern(1)->N(); is2++) {
2161 EdbSegP *s2 = aview.GetPattern(1)->GetSegment(is2);
2162 if( sfmt.Chi2() > s2->Chi2() && s2->W() >= puls_mt ) {sfmt.Copy(*s2); sfmt.SetFlag(2);}
2163 }
2164
2165 for(int is1=0; is1<aview.GetPattern(0)->N(); is1++) {
2166 for(int is2=0; is2<aview.GetPattern(1)->N(); is2++) {
2167 EdbSegP *s1 = aview.GetPattern(0)->GetSegment(is1);
2168 EdbSegP *s2 = aview.GetPattern(1)->GetSegment(is2);
2169
2170 float dx1=s1->X()-(s.X()+s.TX()*(s1->Z()-s.Z()));
2171 float dy1=s1->Y()-(s.Y()+s.TY()*(s1->Z()-s.Z()));
2172 float dx2=s2->X()-(s.X()+s.TX()*(s2->Z()-s.Z()));
2173 float dy2=s2->Y()-(s.Y()+s.TY()*(s2->Z()-s.Z()));
2174 float r = Sqrt( (dx1-dx2)*(dx1-dx2) + (dy1-dy2)*(dy1-dy2) );
2175 fprintf(out,"r = %7.2f ",r);
2176 if(r<rlim) { // has good BT
2177 s3.Copy(s);
2178 s3.SetX( 0.5*(s1->X() + s2->X()) );
2179 s3.SetY( 0.5*(s1->Y() + s2->Y()) );
2180 s3.SetZ( 0.5*(s1->Z() + s2->Z()) );
2181 s3.SetTX( (s2->X() - s1->X()) / (s2->Z() - s1->Z()) );
2182 s3.SetTY( (s2->Y() - s1->Y()) / (s2->Z() - s1->Z()) );
2183 s3.SetFlag(0);
2184
2185 //s3.Print();
2186 //s.Print();
2187 chi = EdbTrackFitter::Chi2Seg(&s3, &s);
2188 //printf("chi = %7.4f\n",chi);
2189 fprintf(out,"chi = %7.4f\n",chi);
2190 if(chi<chimin) { //select the best basetrack
2191 chimin = chi;
2192 s1b = s1;
2193 s2b = s2;
2194 }
2195 }
2196 }
2197 }
2198
2199 EdbSegP sf; // container for the found track
2200
2201 int bth, mth, tb; // basetrack holes, mt-holes, top/bottom;
2202
2203 sf.Copy(s);
2204 if(s1b&&s2b) {
2205 sf.SetX( 0.5*(s1b->X() + s2b->X()) );
2206 sf.SetY( 0.5*(s1b->Y() + s2b->Y()) );
2207 sf.SetZ( 0.5*(s1b->Z() + s2b->Z()) );
2208 sf.SetTX( (s2b->X() - s1b->X()) / (s2b->Z() - s1b->Z()) );
2209 sf.SetTY( (s2b->Y() - s1b->Y()) / (s2b->Z() - s1b->Z()) );
2210 sf.SetFlag(0); // if bt found : bth=0, mth=0, tb=0
2211 sf.SetChi2(chimin);
2212 } else if(sfmt.Chi2()<chi2max) { // found good microtrack
2213 //float zmean = ra.GetLayer(0)->Z();
2214 float zmean = s.Z();
2215 //printf("Zmt = %f zmean = %f Zs = %f \n",sfmt.Z(),zmean,s.Z());
2216 sf.SetX( sfmt.X() + s.TX()*(zmean-sfmt.Z()) );
2217 sf.SetY( sfmt.Y() + s.TY()*(zmean-sfmt.Z()) );
2218 sf.SetZ(zmean);
2219 bth = s.Flag()/10000; bth++;
2220 mth = 0;
2221 tb = sfmt.Flag();
2222 sf.SetFlag(bth*10000+mth*100+tb); // if mt found : bth++, mth=0, tb=1/2
2223 } else {
2224 bth = s.Flag()/10000; bth++;
2225 mth = (s.Flag()/100)%100; mth++;
2226 tb = s.Flag()%10;
2227 sf.SetFlag(bth*10000+mth*100+tb); // hole: if not found: bth++, mth++, tb= keep last value
2228 }
2229
2230 s_b->Copy(s);
2231 sf_b->Copy(sf);
2232 pat1_b = aview.GetPattern(0)->GetSegments();
2233 pat2_b = aview.GetPattern(1)->GetSegments();
2234 micro.SetBranchAddress("s1." , &pat1_b );
2235 micro.SetBranchAddress("s2." , &pat2_b );
2236 micro.Fill();
2237
2238 fnd.AddSegment(sf);
2239 }
2240
2241 //ftree.cd();
2242 micro.Write();
2243 ftree.Close();
2244 fclose(out);
2245 return 1; //TODO!
2246}
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:2249
void SetY(Float_t y)
Definition: EdbSegP.h:178
void SetTX(Float_t tx)
Definition: EdbSegP.h:179
Int_t ID() const
Definition: EdbSegP.h:147
void SetX(Float_t x)
Definition: EdbSegP.h:177
Float_t Chi2() const
Definition: EdbSegP.h:157
Float_t Z() const
Definition: EdbSegP.h:153
void SetTY(Float_t ty)
other functions
Definition: EdbSegP.h:180
void SetChi2(float chi2)
Definition: EdbSegP.h:135
Int_t Flag() const
Definition: EdbSegP.h:149

◆ FindPredictionsRawSet()

int EdbScanProc::FindPredictionsRawSet ( EdbID  idp,
EdbScanSet ss,
int  npl 
)
2033{
2034 bool direction = idp.ePlate<last_plate ? true : false;
2035 int count=0;
2036 EdbID *idthis = ss.FindPlateID(idp.ePlate);
2037 if(!idthis) return 0;
2038 EdbID *idnext = 0;
2039 while(1) {
2040 FindPredictionsRaw(*idthis, *idthis);
2041 count++;
2042 idnext = ss.FindNextPlateID( idthis->ePlate, direction ); // find next plate
2043 if(!idnext) break;
2044 if( direction && idnext->ePlate>last_plate ) break;
2045 if( !direction && idnext->ePlate<last_plate ) break;
2046 ProjectFound(*idthis,*idnext);
2047 idthis=idnext;
2048 }
2049 return count;
2050}
bool ProjectFound(int id1[4], int id2[4])
Definition: EdbScanProc.cxx:1096

◆ FindRawTrack() [1/2]

int EdbScanProc::FindRawTrack ( EdbTrackP pred,
EdbTrackP found,
EdbID  idset,
int  plate 
)

found segments will be added to track tr

3330{
3332 TEnv env; //env.SaveLevel(kEnvLocal);
3333 return FindRawTrack( pred,found,idset,plate,env );
3334}
int FindRawTrack(EdbTrackP &pred, EdbTrackP &found, EdbID idset, int plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3337
EdbID idset
Definition: emrec.cpp:35

◆ FindRawTrack() [2/2]

int EdbScanProc::FindRawTrack ( EdbTrackP pred,
EdbTrackP found,
EdbID  idset,
int  plate,
TEnv &  cenv 
)

found segments will be added to track tr

3338{
3340
3341 EdbRunTracking rt;
3342 rt.eDeltaRview = env.GetValue( "fedra.RawTrack.DeltaRview", 700. );
3343 rt.eDeltaTheta = env.GetValue( "fedra.RawTrack.DeltaTheta", 0.15 );
3344 rt.eDeltaR = env.GetValue( "fedra.RawTrack.DeltaR", 10. );
3345 rt.ePreliminaryPulsMinMT = env.GetValue( "fedra.RawTrack.PreliminaryPulsMinMT", 4. );
3346 rt.ePreliminaryChi2MaxMT = env.GetValue( "fedra.RawTrack.PreliminaryChi2MaxMT", 5. );
3347 rt.ePulsMinMT = env.GetValue( "fedra.RawTrack.PulsMinMT", 10. );
3348 rt.eChi2MaxMT = env.GetValue( "fedra.RawTrack.Chi2MaxMT", 2.6 );
3349 rt.ePulsMinBT = env.GetValue( "fedra.RawTrack.PulsMinBT", 15. );
3350 rt.eChi2MaxBT = env.GetValue( "fedra.RawTrack.Chi2MaxBT", 2.5 );
3351 rt.eDegradPos = env.GetValue( "fedra.RawTrack.DegradPos", 3. );
3352 rt.eDegradSlope = env.GetValue( "fedra.RawTrack.DegradSlope", 0.001 );
3353 rt.eAFID = env.GetValue( "fedra.RawTrack.AFID" , 1 );
3356
3357 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return 0;
3358 EdbID *id = ss->FindPlateID(plate); if(!id) return 0;
3359 EdbPlateP *pl = ss->GetPlate(plate); if(!pl) return 0;
3360
3361 TString runfile;
3362 MakeFileName(runfile,*id,"raw.root");
3363 if( !rt.InitRun(runfile) ) return 0;
3364
3365 rt.GetLayer(2)->Copy( *(pl->GetLayer(2)) );
3366 rt.GetLayer(1)->Copy( *(pl->GetLayer(1)) );
3367
3368 int status = rt.FindTrack(pred,found, *pl);
3369 //found.AddSegment( new EdbSegP( rt.eS1 ) );
3370 //found.AddSegment( new EdbSegP( rt.eS2 ) );
3371 return status;
3372}
void Copy(const EdbLayer &l)
Definition: EdbLayer.cxx:35
EdbLayer * GetLayer(int i)
Definition: EdbBrick.h:29
bool InitRun(const char *runfile=0, bool do_update=false)
Definition: EdbRunAccess.cxx:112
EdbLayer * GetLayer(int id)
Definition: EdbRunAccess.h:113
helper class for access to the run data
Definition: EdbRunTracking.h:19
int FindTrack(EdbTrackP &pred, EdbTrackP &found, EdbPlateP &plate)
Definition: EdbRunTracking.cxx:575
Float_t ePulsMinBT
(18)
Definition: EdbRunTracking.h:38
Float_t eDeltaR
(20)
Definition: EdbRunTracking.h:34
EdbScanCond eCondMT
conditions for microtracks
Definition: EdbRunTracking.h:23
Float_t ePreliminaryPulsMinMT
(6) _ preliminary cuts to microtracks candidates for
Definition: EdbRunTracking.h:28
Float_t eChi2MaxMT
(1.6) maximum chi2 accepted between prediction and microtrack candidates
Definition: EdbRunTracking.h:46
Float_t eDeltaRview
(400)
Definition: EdbRunTracking.h:26
Float_t ePreliminaryChi2MaxMT
(1.6) / microtracks and basetracks selection
Definition: EdbRunTracking.h:29
Float_t ePulsMinMT
(10) mimimal number of grains accepted to select microtracks
Definition: EdbRunTracking.h:44
Float_t eDegradSlope
SigmaTX = SigmaTX(0) + degradSlope * bth.
Definition: EdbRunTracking.h:57
EdbScanCond eCondBT
conditions for basetracks
Definition: EdbRunTracking.h:24
Float_t eChi2MaxBT
(1.5) maximum chi2 accepted between prediction and basetrack candidates
Definition: EdbRunTracking.h:40
Float_t eDegradPos
SigmaX = SigmaX(0) + degradPos * mth.
Definition: EdbRunTracking.h:56
Float_t eDeltaTheta
(0.15) slope acceptance
Definition: EdbRunTracking.h:27

◆ FlashRawDir()

bool EdbScanProc::FlashRawDir ( EdbScanClient scan,
int  id[4] 
)

move all rwc and rwd files from the raw scanning directory into the new subdir

765{
767
768 char str[256];
769 TDatime dt;
770 sprintf(str,"%s/rw_%u",scan.GetRawDirClient(),dt.Get());
771 LogPrint(id[0],2,"FlashRawDir","%d.%d.%d.%d: move all into %s", id[0],id[1],id[2],id[3],str);
772 if(!gSystem->OpenDirectory(str))
773 if( gSystem->MakeDirectory(str) == -1)
774 {
775 LogPrint(id[0],2,"FlashRawDir","WARNING! %d.%d.%d.%d: FAILED creating directory %s",
776 id[0],id[1],id[2],id[3],str);
777 return false;
778 }
779 char str2[256];
780
781#ifdef WIN32
782 sprintf(str2,"ren %s/raw.* %s",scan.GetRawDirClient(),str);
783#else
784 sprintf(str2,"mv %s/raw.* %s",scan.GetRawDirClient(),str);
785#endif
786
787 gSystem->Exec(str2);
788 return true;
789}

◆ GetAffZ()

bool EdbScanProc::GetAffZ ( EdbAffine2D aff,
float &  z,
int  id1[4],
int  id2[4] 
)

read affine transformations and deltaZ from x.x.x.x_y.y.y.y.aff.par

2564{
2566 TString parfile;
2567 MakeAffName(parfile,id1,id2);
2568 EdbDataPiece piece;
2569 piece.eFileNamePar = parfile;
2570 if (piece.TakePiecePar() < 0) return false;
2571 EdbAffine2D *a = piece.GetLayer(0)->GetAffineXY();
2572 if(!a) return false;
2573 aff.Set( a->A11(),a->A12(),a->A21(),a->A22(),a->B1(),a->B2() );
2574 dz = piece.GetLayer(0)->Z();
2575 return true;
2576}
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36

◆ GetMap()

bool EdbScanProc::GetMap ( int  brick,
TString &  map 
)

get map string from the map file of this brick : .../bXXXXXX/bXXXXXX.map

1865{
1867 char str[256];
1868 sprintf(str,"%s/b%6.6d/b%6.6d.map", eProcDirClient.Data(),brick,brick);
1869 LogPrint(brick,1,"GetMap"," from file: %s\n",str);
1870 FILE *f = fopen(str,"r");
1871 if(!f) { LogPrint(brick,1,"GetMap","no map file: %s !!!\n",str); return false; }
1872 else if (fgets (str, 256, f) == NULL)
1873 { LogPrint(brick,1,"GetMap","error reading map file: %s !!!\n",str); return false; }
1874 LogPrint(brick,1,"GetMap","%s\n",str);
1875 map=str;
1876 fclose(f);
1877 return true;
1878}
#define NULL
Definition: nidaqmx.h:84

◆ GetPatternSide()

void EdbScanProc::GetPatternSide ( EdbID  id,
int  side,
EdbLayer la,
const char *  segcut,
int  afid,
EdbPattern p 
)
3087{
3088 int runside = 3-side;
3089 Log(2,"EdbScanProc::GetPatternSide","for id %s with cut %s", id.AsString(), segcut);
3091 TString runfile;
3092 MakeFileName(runfile,id,"raw.root");
3093 if( !r.InitRun(runfile) ) return;
3094 r.eAFID = afid;
3095 *(r.GetLayer(runside)) = la;
3096 r.AddSegmentCut( 1, segcut );
3097 r.GetLayer(runside)->Print();
3098 r.GetPatternDataForPrediction( -1, runside, p );
3099}

◆ GetServerRunName()

const char * EdbScanProc::GetServerRunName ( ) const
3405 {
3406 return eServerCreatedRunName.Data();
3407};
TString eServerCreatedRunName
EdbRun file name that is created by scanserver side.
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] 
)

set raw, cp and par for the piece according to id

2345{
2347 TString runfile, cpfile, parfile;
2348 MakeFileName(runfile,id,"raw.root");
2349 MakeFileName(cpfile,id,"cp.root");
2350 MakeFileName(parfile,id,"in.par");
2351 piece.AddRunFile(runfile);
2352 piece.eFileNameCP = cpfile;
2353 piece.eFileNamePar = parfile;
2354 if(piece.TakePiecePar()<0) Log(1,"InitPiece","Warning: file %s does not exist!",parfile.Data());
2355 return true;
2356}
void AddRunFile(const char *name)
Definition: EdbDataSet.cxx:176
TString eFileNameCP
root-style text cuts
Definition: EdbDataSet.h:50

◆ InitRun()

EdbRun * EdbScanProc::InitRun ( int  id[4],
char *  runname_ = NULL,
char *  runnamesrv_ = NULL,
bool  createrun_ = true 
)

create new run file as eProcDirClient/bXXXXXX/pYYY/x.y.s.p.raw.root

1920{
1922 if(!CheckProcDir(id)) return 0;
1923 TString str;
1924 TString strSrv;
1925
1926 MakeFileName(str,id,"raw.root"); // the file will have the requested name
1927 MakeFileNameSrv(strSrv,id,"raw.root"); // the file will have the requested name
1928
1929 if( !gSystem->AccessPathName(str.Data(), kFileExists) ) { // if the file with the same name exists it will be saved as *root.xxx.save
1930 TString str2;
1931 for(int ic=0; ic<1000; ic++) {
1932 str2 = str; str2+="."; str2+=ic; str2+=".save";
1933 if( !gSystem->AccessPathName(str2.Data(), kFileExists) ) continue;
1934 else break;
1935 }
1936 //gSystem->CopyFile(str.Data(), str2.Data());
1937 char strbuf[1024];
1938#ifdef WIN32
1939 sprintf(strbuf,"move /F %s %s", str.Data(), str2.Data());
1940#else
1941 sprintf(strbuf,"mv -f %s %s", str.Data(), str2.Data());
1942#endif
1943 gSystem->Exec(strbuf);
1944 LogPrint(id[0], 3,"EdbScanProc::InitRun"," %s\n",str2.Data());
1945 }
1946 LogPrint(id[0], 3,"EdbScanProc::InitRun"," %s\n",str.Data());
1947 if(runname_ != NULL){
1948 strcpy(runname_, str.Data());
1949 }
1950 if(runnamesrv_ != NULL){
1951 strcpy(runnamesrv_, strSrv.Data());
1952 }
1953 EdbRun* run = NULL;
1954 if(createrun_)
1955 run = new EdbRun(str.Data(),"RECREATE");
1956 return run;
1957}
void MakeFileNameSrv(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1835
strcpy(cmd,"cp Shower.root Shower2.root")

◆ InitRunAccess() [1/2]

bool EdbScanProc::InitRunAccess ( EdbRunAccess ra,
EdbID  id,
bool  do_update = false 
)
inline
148{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 
)

initialize the EdbRunAccess object useful for the raw data handling

2318{
2321 if(!InitPiece(p,id)) return false;
2322 if(gEDBDEBUGLEVEL>2) p.Print();
2323 ra.eAFID = p.eAFID;
2324 if( !ra.InitRun(p.GetRunFile(0), do_update) ) {
2325 LogPrint(id[0],1,"InitRunAccess","ERROR open file %s !!!",p.GetRunFile(0));
2326 return false;
2327 } else
2328 LogPrint(id[0],2,"InitRunAccess"," %s with %d views",p.GetRunFile(0), ra.GetRun()->GetEntries() );
2329
2330 ra.GetLayer(1)->SetZlayer( p.GetLayer(1)->Z(),p.GetLayer(1)->Zmin(),p.GetLayer(1)->Zmax());
2331 ra.GetLayer(2)->SetZlayer( p.GetLayer(2)->Z(),p.GetLayer(2)->Zmin(),p.GetLayer(2)->Zmax());
2332 ra.GetLayer(1)->SetShrinkage( p.GetLayer(1)->Shr());
2333 ra.GetLayer(2)->SetShrinkage( p.GetLayer(2)->Shr());
2334
2335 EdbAffine2D *a1 = p.GetLayer(1)->GetAffineTXTY();
2336 EdbAffine2D *a2 = p.GetLayer(2)->GetAffineTXTY();
2337 ra.GetLayer(1)->SetAffTXTY( a1->A11(),a1->A12(),a1->A21(),a1->A22(), a1->B1(), a1->B2() );
2338 ra.GetLayer(2)->SetAffTXTY( a2->A11(),a2->A12(),a2->A21(),a2->A22(), a2->B1(), a2->B2() );
2339
2340 return true;
2341}
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:104
void SetShrinkage(float shr)
Definition: EdbLayer.h:99
EdbRun * GetRun() const
Definition: EdbRunAccess.h:111

◆ InitRunAccessNew() [1/2]

bool EdbScanProc::InitRunAccessNew ( EdbRunAccess ra,
EdbID  id,
EdbPlateP plate,
bool  do_update = false 
)

use only scanset file (no *.par)
before this function one should define variables:
r.eInvertSides (default is 0 - no invert)
after:
r.eAFID (default is 1 - use view aff)
r.AddSegmentCut(...) , etc

3113{
3120 TString runfile;
3121 MakeFileName(runfile,id,"raw.root");
3122 if( !r.InitRun(runfile, do_update) )
3123 {
3124 LogPrint(id.eBrick,1,"InitRunAccess","ERROR open file %s !!!",runfile.Data());
3125 return false;
3126 }
3127 else
3128 LogPrint(id.eBrick,2,"InitRunAccess"," %s with %d views",runfile.Data(), r.GetRun()->GetEntries() );
3129 r.GetLayer(2)->Copy( *(plate.GetLayer(1)) );
3130 r.GetLayer(1)->Copy( *(plate.GetLayer(2)) );
3131 r.GetLayer(0)->Copy( *((EdbLayer*)(&plate)) );
3132 //r.GetLayer(2)->Print();
3133 //r.GetLayer(1)->Print();
3134 //r.GetLayer(0)->Print();
3135 return true;
3136}
Definition: EdbLayer.h:39

◆ InitRunAccessNew() [2/2]

bool EdbScanProc::InitRunAccessNew ( EdbRunAccess ra,
EdbID  idset,
int  idplate,
bool  do_update = false 
)
3103{
3105 EdbPlateP *plate = set->GetPlate(idplate);
3106 if(!plate) return 0;
3107 EdbID id = idset; id.ePlate = idplate;
3108 return InitRunAccessNew(r, id, *plate, do_update);
3109}
bool InitRunAccessNew(EdbRunAccess &ra, EdbID id, EdbPlateP &plate, bool do_update=false)
Definition: EdbScanProc.cxx:3112
EdbScanSet * set
Definition: emtraceback.cpp:14

◆ LinkRun()

int EdbScanProc::LinkRun ( int  id[4],
int  noUpdate = 1 
)

the x.x.x.x.in.par file must be prepared before

2019{
2021 EdbDataPiece piece;
2022 InitPiece(piece,id);
2024 proc.SetNoUpdate(noUpdate);
2025 TString parfileOUT;
2026 MakeFileName(parfileOUT,id,"par");
2027 piece.eFileNamePar = parfileOUT;
2028 return proc.Link(piece);
2029}
void SetNoUpdate(int nu)
Definition: EdbDataSet.h:226
int Link()
Definition: EdbDataSet.cxx:1649

◆ 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:1065

◆ LinkRunAll() [2/2]

int EdbScanProc::LinkRunAll ( int  id[4],
int  npre = 3,
int  nfull = 1,
int  correct_ang = 1 
)
1066{
1067 LogPrint(id[0],1,"LinkRunAll","%d.%d.%d.%d %d prelinking + %d fullinking",
1068 id[0],id[1],id[2],id[3],npre,nfull);
1069 Int_t nc = 0;
1070 if (npre > 0) {
1071 MakeInPar(id, "prelinking"); // make input par file (x.x.x.x.in.par) for the current ID including the prelinking par file
1072 for (Int_t i = 0; i < npre; i++) {
1073 nc = LinkRun(id, 0); // will be done (pre)linking and updated x.x.x.x.par file
1074 if (correct_ang) CorrectAngles(id);
1075 }
1076 }
1077 if (nfull > 0) {
1078 MakeInPar(id, "fulllinking"); // make input par file including the fulllinking par file
1079 for (Int_t i = 0; i < nfull; i++) {
1080 //SafeDelete(gDIFF);
1081 //TFile f("diff.root","RECREATE");
1082 //gDIFF = new TNtuple("diff","diff","x1:y1:tx1:ty1:w1:x2:y2:tx2:ty2:w2:z:aid10:aid11:aid20:aid21");
1083
1084 nc = LinkRun(id,1); // will be done (full)linking and DO NOT updated x.x.x.x.par file
1085
1086 //gDIFF->AutoSave();
1087 //f.Close();
1088 //SafeDelete(gDIFF);
1089 }
1090 }
1091 LogPrint(id[0],1,"LinkRunAll","%d couples stored", nc);
1092 return nc;
1093}
int CorrectAngles(int id[4])
Definition: EdbScanProc.cxx:2007
int LinkRun(int id[4], int noUpdate=1)
Definition: EdbScanProc.cxx:2018

◆ LinkRunNew()

void EdbScanProc::LinkRunNew ( EdbID  id,
EdbPlateP plate,
TEnv &  cenv 
)
3233{
3234 TString rawfile, cpfile;
3235 MakeFileName(rawfile,id,"raw.root");
3236 MakeFileName(cpfile,id,"cp.root");
3237 EdbAlignmentMap amap( cpfile.Data(), "RECREATE");
3238 amap.eEnv = &cenv;
3239 amap.Link( rawfile.Data(), plate );
3240}
2-d alignment map finder
Definition: EdbAlignmentMap.h:16

◆ LinkRunTest()

void EdbScanProc::LinkRunTest ( EdbID  id,
EdbPlateP plate,
TEnv &  cenv 
)
3140{
3142 r.eInvertSides=cenv.GetValue("fedra.link.read.InvertSides" , 0);
3143 r.eHeaderCut = cenv.GetValue("fedra.link.read.HeaderCut" , "1");
3144 r.eHeaderCut.Print();
3145 r.eAFID = cenv.GetValue("fedra.link.AFID" , 1);
3146 printf("EdbScanProc::LinkRunTest ** AFID=%d\n", r.eAFID);
3148 r.eWeightAlg = cenv.GetValue("fedra.link.read.WeightAlg" , 0 );
3149 r.AddSegmentCut(1,cenv.GetValue("fedra.link.read.ICUT" , "-1") );
3150 r.SetPixelCorrection( cenv.GetValue("fedra.link.PixelCorr" , "0 1. 1.") );
3151 r.eTracking = cenv.GetValue("fedra.link.Tracking" , -1);
3152
3153 EdbPattern p1, p2;
3154 p1.SetScanID(id); p1.SetSide(2);
3155 p2.SetScanID(id); p2.SetSide(1);
3156 r.GetPatternDataForPrediction( -1, 2, p1 );
3157 r.GetPatternDataForPrediction( -1, 1, p2 );
3158
3160 TString cpfile;
3161 MakeFileName(cpfile,id,"cp.root");
3162 link.InitOutputFile( cpfile );
3163
3164 if( cenv.GetValue("fedra.link.CheckUpDownOffset" , 1) ) r.CheckUpDownOffsets()->Write();
3165 if(r.eDoViewAnalysis) {
3166 r.eHViewXY[1].DrawH2("ViewXY1","XY segments distribution in a view coord side 1")->Write();
3167 r.eHViewXY[2].DrawH2("ViewXY2","XY segments distribution in a view coord side 2")->Write();
3168 r.CheckViewSize();
3169 //r.CheckStepSize();
3170 }
3171
3172 link.Link( p2, p1, *(plate.GetLayer(2)), *(plate.GetLayer(1)), cenv );
3173 link.CloseOutputFile();
3174 if(link.eDoCorrectShrinkage || link.eDoCorrectAngles) {
3175 UpdatePlatePar( id, link.eL1 ); //TODO: check up/down id
3176 UpdatePlatePar( id, link.eL2 );
3177 }
3178}
microtracks linking in one plate
Definition: EdbLinking.h:11
void SetSide(int side)
Definition: EdbPattern.h:312
void SetScanID(EdbID id)
Definition: EdbPattern.h:296
bool UpdatePlatePar(EdbID id, EdbLayer &l)
Definition: EdbScanProc.cxx:1021
void link()
Definition: shower_tr.C:50

◆ LinkSet()

int EdbScanProc::LinkSet ( EdbScanSet sc,
int  npre = 3,
int  nfull = 1,
int  correct_ang = 1 
)
623{
624 int n=0;
625 EdbID *id;
626 for(int i=0; i<sc.eIDS.GetEntries(); i++) {
627 id = (EdbID *)(sc.eIDS.At(i));
628 n += LinkRunAll(*id,npre,nfull,correct_ang);
629 }
630 return n;
631}

◆ LinkSetNew()

void EdbScanProc::LinkSetNew ( EdbScanSet sc,
TEnv &  cenv 
)
3255{
3256 if(sc.eIDS.GetEntries()<1) return;
3257 for(int i=0; i<sc.eIDS.GetEntries(); i++) {
3258 EdbID *id = (EdbID *)(sc.eIDS.At(i));
3259 EdbPlateP *plate = sc.GetPlate(id->ePlate);
3260 LinkRunNew(*id, *plate, cenv);
3261 }
3262}
void LinkRunNew(EdbID id, EdbPlateP &plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3232

◆ LinkSetNewTest()

void EdbScanProc::LinkSetNewTest ( EdbScanSet sc,
TEnv &  cenv 
)
3244{
3245 if(sc.eIDS.GetEntries()<1) return;
3246 for(int i=0; i<sc.eIDS.GetEntries(); i++) {
3247 EdbID *id = (EdbID *)(sc.eIDS.At(i)); if(!id) continue;
3248 EdbPlateP *plate = sc.GetPlate(id->ePlate); if(!plate) continue;
3249 LinkRunTest(*id, *plate, cenv);
3250 }
3251}
void LinkRunTest(EdbID id, EdbPlateP &plate, TEnv &cenv)
Definition: EdbScanProc.cxx:3139

◆ LoadPlate()

int EdbScanProc::LoadPlate ( EdbScanClient scan,
int  id[4],
int  attempts = 1 
)
793{
794 int status=0;
795 FlashRawDir(scan,id);
796 TString map;
797 if(!GetMap(id[0],map)) {
798 LogPrint(id[0],1,"LoadPlate","ERROR: map file does not exist! Stop here. *** %d.%d.%d status = %d ***",
799 id[0],id[1],id[2],status);
800 return status;
801 }
802 status= scan.LoadPlate(id[0],id[1],map.Data(),attempts);
803 LogPrint(id[0],1,"LoadPlate","******************** %d.%d.%d status = %d ************************************",
804 id[0],id[1],id[2],status);
805 return status;
806}
bool GetMap(int brick, TString &map)
Definition: EdbScanProc.cxx:1864
bool FlashRawDir(EdbScanClient &scan, int id[4])
Definition: EdbScanProc.cxx:764

◆ LogPrint()

void EdbScanProc::LogPrint ( int  brick,
int  level,
const char *  rout,
const char *  msgfmt,
  ... 
)

Print message to the logfile and to stdout.

3064{
3066 if(gEDBLOGFILE) {
3067 printf("WARNING in LogPrint! logfile seems to be opened. Trying to close it...\n");
3069 gEDBLOGFILE=0;
3070 }
3071 char str[512];
3072 sprintf(str,"%s/b%6.6d/b%6.6d.log", eProcDirClient.Data(), brick,brick);
3073 gEDBLOGFILE = fopen(str,"a");
3074 if(!gEDBLOGFILE) printf("ERROR in LogPrint! can not open logfile: %s\n",str);
3075
3076 va_list ap;
3077 va_start(ap,va_(fmt));
3078 Log0(level, location, va_(fmt), ap);
3079 va_end(ap);
3080
3082 gEDBLOGFILE=0;
3083}
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" 
)

make affine file name as ../bXXXXXX/AFF/a.a.a.a_b.b.b.b.aff.par

1852{
1854 char str[256];
1855 sprintf(str,"%s/b%6.6d/AFF/%d.%d.%d.%d_%d.%d.%d.%d.%s",
1856 eProcDirClient.Data(), id1[0],
1857 id1[0], id1[1], id1[2], id1[3],
1858 id2[0], id2[1], id2[2], id2[3],
1859 suffix);
1860 s=str;
1861}

◆ MakeAFFSet()

bool EdbScanProc::MakeAFFSet ( EdbScanSet sc)

create AFF dir if do not exist
put all affine transformations inside for each plates couple

395{
398
399 if(!CheckAFFDir(sc.eID.eBrick)) return false;
400 if(sc.eIDS.GetEntries()<2) return 0;
401 EdbID *id1,*id2;
402 for(int i=0; i<sc.eIDS.GetEntries()-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:1771

◆ MakeAlignSetSummary() [1/2]

void EdbScanProc::MakeAlignSetSummary ( EdbID  id)

assuming that exist the scan sets for idset
read id.n_id.n+1.aff.par and make a summary tree

2829{
2832
2833 TString name;
2834 MakeFileName(name,idset,"align.pdf",false);
2835 Log(2,"MakeAlignSetSummary","%s",name.Data());
2836 gStyle->SetOptDate(1);
2837 gStyle->SetPalette(1);
2838 gStyle->SetOptStat(1001111);
2839 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2840 int n = ss->eIDS.GetEntries(); if(n<2) return;
2841 for(int i=0; i<n-1; i++) {
2842 EdbID *id1 = ss->GetID(i);
2843 EdbID *id2 = ss->GetID(i+1);
2844
2845 TString dataout; MakeAffName(dataout,*id1,*id2,"al.root");
2846 TFile *f = new TFile(dataout,"READ");
2847 if(!f) continue;
2848
2849 EdbLayer *corr = (EdbLayer*)f->Get("corr_layer1");
2850 EdbPeak2 *peak2c = (EdbPeak2*)f->Get("peak2c");
2851 float xcenter1 = corr->X();
2852 float ycenter1 = corr->Y();
2853 EdbAffine2D *aXY=corr->GetAffineXY();
2854 float xoffset= aXY->A11()*xcenter1 + aXY->A12()*ycenter1 + aXY->B1() - xcenter1;
2855 float yoffset= aXY->A21()*xcenter1 + aXY->A22()*ycenter1 + aXY->B2() - ycenter1;
2856
2857 Log(1,"UpdateAlignSummaryTree","peak: %7.0f/%7.2f/%7.3f dx,dy,dz: %7.3f %7.3f %7.3f for %s_%s",
2858 peak2c->Peak(),peak2c->Mean3(),peak2c->Mean(), xoffset,yoffset,corr->Zcorr(), id1->AsString(),id2->AsString() );
2859
2860 TCanvas *c = (TCanvas*)f->Get("report_al");
2861 if(c) {
2862 c->SetName(Form("%s_%s",id1->AsString(), id2->AsString()));
2863 //c->Draw();
2864 if(i==0&&n>2) c->Print(Form("%s(",name.Data()),"pdf");
2865 else if(i==n-2&&n>2) c->Print(Form("%s)",name.Data()),"pdf");
2866 else c->Print(name,"pdf");
2867 }
2868 f->Close();
2869 }
2870}
float Zcorr() const
Definition: EdbLayer.h:90
float Y() const
Definition: EdbLayer.h:76
float X() const
Definition: EdbLayer.h:75
peak analyser for EdbH2
Definition: EdbCell2.h:105
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" 
)

assuming that exist the scan sets for idset1 and idset2
read id1_id2.aff.par and make a summary tree

2790{
2793
2794 Log(2,"MakeAlignSetSummary","open file %s for %s",file,mode);
2795 TFile *f = file? new TFile(file,mode): 0;
2796 if(!f) return;
2797 TTree *tree = (TTree*)f->Get("alsum");
2798 if(!tree) {
2799 tree = new TTree("alsum","Alignment Summary");
2800 Int_t peak=0;
2801 //Float_t x0,y0,dx,dy,dz1,dz2;
2802 EdbID *id1=0, *id2=0;
2803 EdbLayer *corr = 0;
2804 EdbPeak2 *peak2c = 0;
2805 Float_t xoffset=0,yoffset=0;
2806 tree->Branch("id1", "EdbID", &id1);
2807 tree->Branch("id2", "EdbID", &id2);
2808 tree->Branch("corr", "EdbLayer", &corr);
2809 tree->Branch("peak2c","EdbPeak2", &peak2c);
2810 tree->Branch("peak", &peak,"peak/I");
2811 tree->Branch("xoffset", &xoffset,"xoffset/F");
2812 tree->Branch("yoffset", &yoffset,"yoffset/F");
2813 }
2814 EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
2815 EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
2816 gStyle->SetPalette(1);
2817 int n = ss1->eIDS.GetEntries();
2818 for(int i=0; i<n; i++) {
2819 EdbID *id1 = ss1->GetID(i);
2820 EdbID *id2 = ss2->FindPlateID(id1->ePlate);
2821 if(id2) UpdateAlignSummaryTree(*id1,*id2,*tree);
2822 }
2823 tree->AutoSave();
2824 f->Close();
2825}
void UpdateAlignSummaryTree(EdbID idset1, EdbID idset2, TTree &tree)
Definition: EdbScanProc.cxx:2873

◆ MakeEraseFile()

void EdbScanProc::MakeEraseFile ( EdbID  id,
EdbPattern pat 
)

input: pat with the segments to be erased - assumed that s.eVid[1] is the entry number in the couples tree
ouput: file id.er.root with the EdbMask object "mask" inside

313{
316 int entrmax=0;
317 for(int i=0; i<pat.N(); i++) if(pat.GetSegment(i)->Vid(1)>entrmax) entrmax=pat.GetSegment(i)->Vid(1);
318 if(!entrmax) return;
319 EdbMask mask(entrmax+1);
320 for(int i=0; i<pat.N(); i++) mask.SetAt(pat.GetSegment(i)->Vid(1),1);
321 TString str;
322 MakeFileName(str,id,"er.root");
323 TFile f(str.Data(),"RECREATE");
324 mask.Write("mask");
325 f.Close();
326}
mask service class
Definition: EdbMask.h:8
Int_t Vid(int i) const
Definition: EdbSegP.h:168

◆ 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 
)

make file pathname as .../bXXXXXX/pYYY/a.a.a.a.suffix if inplate==true
otherwise as .../bXXXXXX/a.a.a.a.suffix

1820{
1823 char str[256];
1824 if (inplate)
1825 sprintf(str,"%s/b%6.6d/p%3.3d/%d.%d.%d.%d.%s",
1826 eProcDirClient.Data(),ID[0], ID[1], ID[0], ID[1], ID[2], ID[3],suffix);
1827 else
1828 sprintf(str,"%s/b%6.6d/b%6.6d.%d.%d.%d.%s",
1829 eProcDirClient.Data(),ID[0], ID[0], ID[1], ID[2], ID[3],suffix);
1830
1831 s=str;
1832}

◆ 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 
)

make file pathname as .../bXXXXXX/pYYY/a.a.a.a.suffix if inplate==true
otherwise as .../bXXXXXX/a.a.a.a.suffix

1836{
1839 char str[256];
1840 if (inplate)
1841 sprintf(str,"%s/b%6.6d/p%3.3d/%d.%d.%d.%d.%s",
1842 eProcDirServer.Data(),ID[0], ID[1], ID[0], ID[1], ID[2], ID[3],suffix);
1843 else
1844 sprintf(str,"%s/b%6.6d/b%6.6d.%d.%d.%d.%s",
1845 eProcDirServer.Data(),ID[0], ID[0], ID[1], ID[2], ID[3],suffix);
1846
1847 s=str;
1848}
TString eProcDirServer
directory path for root data
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 
)

prepare x.x.x.x.in.par file for the process defined in the option string

1984{
1986 TString name;
1987 MakeFileName(name,id,"in.par");
1988 FILE *f = fopen(name.Data(),"w");
1989 if(!f) {
1990 LogPrint(id[0],2,"MakeInPar","ERROR! can't open file: %s",name.Data() );
1991 return false;
1992 }
1993 if(eParDir.IsNull()) {
1994 eParDir=eProcDirClient; eParDir+="/parset"; // for backword scripts compatibility
1995 Log(3,"EdbScanProc::MakeInPar","take default parameters from: %s",eParDir.Data());
1996 }
1997 fprintf(f,"INCLUDE %s/opera_emulsion.par\n",eParDir.Data());
1998 fprintf(f,"INCLUDE %s/%s.par\n",eParDir.Data(),option);
1999 TString nm;
2000 MakeFileName(nm,id,"par");
2001 fprintf(f,"INCLUDE %s\n",nm.Data());
2002 fclose(f);
2003 return true;
2004}
TString eParDir
directory path for off-line processing parameters
Definition: EdbScanProc.h:16

◆ MakeInParSet()

void EdbScanProc::MakeInParSet ( EdbID  id,
const char *  option 
)
1973{
1974 EdbScanSet *ss = ReadScanSet(id);
1975 int n = ss->eIDS.GetEntries();
1976 for(int i=0; i<n; i++) {
1977 EdbID *id = ss->GetID(i);
1978 if(id) MakeInPar(*id,option);
1979 }
1980}

◆ MakeLinkSetSummary()

void EdbScanProc::MakeLinkSetSummary ( EdbID  idset)

assuming that exist the scan sets for idset

read id.n_id.n+1.aff.par and make a summary tree

2911{
2914
2915 TString name;
2916 MakeFileName(name,idset,"link.pdf",false);
2917
2918 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2919 int n = ss->eIDS.GetEntries(); if(n<1) return;
2920 gStyle->SetOptDate(1);
2921 gStyle->SetPalette(1);
2922 gStyle->SetOptStat(1001111);
2923 for(int i=0; i<n; i++) {
2924 EdbID *id = ss->GetID(i);
2925 TString dataout; MakeFileName(dataout, *id, "cp.root");
2926 TFile *f = new TFile(dataout,"READ");
2927 if(!f) return;
2928 TCanvas *c = (TCanvas*)f->Get("report");
2929 if(c) {
2930 c->SetName(Form("%s",id->AsString()));
2931 if(i==0&&n>1) c->Print(Form("%s(",name.Data()),"pdf");
2932 else if(i==n-1&&n>1) c->Print(Form("%s)",name.Data()),"pdf");
2933 else c->Print(name,"pdf");
2934 }
2935 SafeDelete(f);
2936 }
2937 //tree->AutoSave();
2938 //f->Close();
2939}

◆ MakeParSet()

bool EdbScanProc::MakeParSet ( EdbScanSet sc)
423{
424 if(sc.eIDS.GetEntries()<1) return false;
425 EdbID *id=0;
426 for(int i=0; i<sc.eIDS.GetEntries(); 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 
)

check in all directories from pl_from to pl_to for a files with versions defined in id0 and the given suffix
if found - add EdbID the scan set

647{
650 sc.eIDS.Delete();
651 EdbID id(id0);
652 int step = pl_from>pl_to? -1:1;
653 for(int i=pl_from; i != pl_to+step; i+=step) {
654 id.ePlate=i;
655 TString str;
656 MakeFileName(str,id,suffix);
657 if( gSystem->AccessPathName(str, kReadPermission) )
658 { Log(3,"MakeScannedIDList","not found %s",str.Data()); continue; }
659 else Log(3,"MakeScannedIDList","use file %s",str.Data());
660 sc.eIDS.Add(new EdbID(id));
661 }
662}

◆ MakeTracksPred()

int EdbScanProc::MakeTracksPred ( TObjArray &  tracks,
EdbID  id,
EdbLayer layer 
)

Extrapolate each track of array tracks to layer.Z(), apply layer.Aff() and prepare id.pred.root

3266{
3269
3270 int ntr = tracks.GetEntries();
3271 Log(2,"MakeTracksPred","%d tracks",ntr );
3272 id.Print(); layer.Print();
3273
3274 EdbPattern pred(0,0, layer.Z(), ntr);
3275 EdbSegP s;
3276 for(int i=0; i<ntr; i++) {
3277 EdbTrackP *t = (EdbTrackP*)tracks.At(i);
3278 t->MakePredictionTo( layer.Z(), s );
3279 pred.AddSegment(s);
3280 }
3281 EdbAffine2D aff(*(layer.GetAffineXY()));
3282 aff.Invert();
3283 pred.Transform( &aff );
3284 WritePred(pred,id);
3285 return pred.N();
3286}
void Print()
Definition: EdbLayer.cxx:149
int WritePred(EdbPattern &pred, int id[4], int flag=-1)
Definition: EdbScanProc.h:69
Definition: EdbPattern.h:113
TTree * t
Definition: check_shower.C:4
TTree * tracks
Definition: check_tr.C:19

◆ MergeSetSBT() [1/2]

void EdbScanProc::MergeSetSBT ( EdbID  id)
1358{
1359 EdbScanSet *ss = ReadScanSet(id);
1360 if(ss) MergeSetSBT(id, *ss);
1361 delete ss;
1362}
void MergeSetSBT(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1365

◆ MergeSetSBT() [2/2]

void EdbScanProc::MergeSetSBT ( EdbID  id,
EdbScanSet ss 
)

merge all sbt files for a given scan set into bxxxxx.x.x.x.sbt.root

1366{
1368 if(!CheckBrickDir(id)) return;
1369 int npl = ss.eIDS.GetEntries();
1370 if(npl<1) return;
1371 TString filename;
1372 TChain allsbt("sbt");
1373
1374 for( int i=0; i<npl; i++ ) {
1375 EdbID *idp = ss.GetID(i);
1376 Log(2,"MergeSetSBT", "Adding plate %d...",idp->ePlate);
1377 MakeFileName(filename,*idp,"sbt.root");
1378 allsbt.Add(filename.Data());
1379 }
1380 MakeFileName(filename,id,"sbt.root",false);
1381 Log(2,"MergeSetSBT","Writing %s file...",filename.Data());
1382 allsbt.Merge(filename.Data());
1383}
const char filename[256]
Definition: RecDispNU.C:83

◆ OptimizeScanPath()

void EdbScanProc::OptimizeScanPath ( EdbPattern pin,
EdbPattern pout,
int  brick 
)

input: pin - predictions pattern
output: pout - predictions pattern with optimized path (should be empty at the beginning)

836{
839
840 int n = pin.N();
841 if(pout.N()) pout.GetSegments()->Delete();
842 if(n>2) {
843 EdbSegP *s;
844 TIndexCell cell;
845 float xmin = pin.Xmin()-0.000001, xmax = pin.Xmax()+0.000001;
846 float ymin = pin.Ymin()-0.000001, ymax = pin.Ymax()+0.000001;
847 float eps = Sqrt(3.*(xmax-xmin)*(ymax-ymin)/n);
848 float binx = (xmax-xmin)/((int)((xmax-xmin)/eps));
849 Long_t v[3]; // x,y,i
850 for(int i=0; i<n; i++ ) {
851 s = pin.GetSegment(i);
852 v[0] = (Long_t)((s->X()-xmin)/binx);
853 v[1] = (Long_t)((s->Y()-ymin));
854 if(v[0]%2 != 0) v[1] = -v[1]; // serpentina along y
855 v[2] = i;
856 cell.Add(3,v);
857 }
858 cell.Sort();
859 for(int ix=0; ix<cell.GetEntries(); ix++)
860 for(int iy=0; iy<cell.At(ix)->GetEntries(); iy++)
861 for(int ii=0; ii<cell.At(ix)->At(iy)->GetEntries(); ii++) {
862 s = pin.GetSegment(cell.At(ix)->At(iy)->At(ii)->Value());
863 pout.AddSegment(*s);
864 }
865 }
866 if( pout.N()>0 )
867 if( pin.SummaryPath() > pout.SummaryPath() ) { // good optimization
868 LogPrint(brick,2,"OptimizeScanPath","with %d predictions: gain in path[mm] before/after = %.1f/%.1f = %.1f",
869 n, pin.SummaryPath()/1000,pout.SummaryPath()/1000, pin.SummaryPath()/pout.SummaryPath());
870 return;
871 }
872 if(pout.N()) pout.GetSegments()->Delete();
873 for(int i=0; i<n; i++) pout.AddSegment(*(pin.GetSegment(i)));
874}
float SummaryPath()
Definition: EdbPattern.cxx:1309
sort collection with attributes
Definition: TIndexCell.h:19
Long_t Value() const
Definition: TIndexCell.h:79
Int_t GetEntries() 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)

input: sc with brick and all id's defined
function -check or create the directory structure for this brick, -create par-files for all plates -create aff.par files for all couples in the defined order

442{
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 
)

Create prediction patterns for the stopping points in the segments of the pattern "points".
For each point should be correctly defined (eID ePID eX eY eSX eSY).
Input: idIN - identifier for predictions to be created
points - stopping points in form of the segments (last found segment)
before,after - number of plates before and after stopping point
pmin,pmax - brick limits (normally 1-57)
sc - EdbScanSet with affine transformations
Output: x.x.x.x.pred.root for all necessary plates

717{
726
727 TIndexCell cell;
728 Long_t v[2]; // pl,id
729 EdbSegP *s=0;
730 for(int i=0; i<points.N(); i++) {
731 s = points.GetSegment(i);
732 for(int ip=Max(s->PID()-before,pmin); ip<=Min(s->PID()+after,pmax); ip++) {
733 v[0] = (Long_t)(ip);
734 v[1] = (Long_t)(i);
735 cell.Add(2,v);
736 }
737 }
738
739 cell.Sort();
740 int count=0;
741 int plate;
742 for(int ip=0; ip<cell.GetEntries(); ip++) {
743 plate = cell.At(ip)->Value(); // current prediction plate
744 EdbPattern pat;
745 for(int iv=0; iv<cell.At(ip)->GetEntries(); iv++) {
746 s = points.GetSegment(cell.At(ip)->At(iv)->Value()); // s.PID() - stopping plate
747 pat.AddSegment(*s);
748 pat.GetSegment(iv)->SetPID(plate);
749 if(sc) {
750 EdbAffine2D aff;
751 if(sc->GetAffP2P(s->PID(), plate, aff) ) pat.GetSegment(iv)->Transform(&aff);
752 }
753 }
754 int id[4]={idIN[0],plate,idIN[2],idIN[3]};
755 WritePred(pat,id);
756 count += pat.N();
757 }
758
759 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",
760 idIN[0],idIN[1],idIN[2],idIN[3],points.N(), count, before,after,pmin,pmax );
761}
void SetPID(int pid)
Definition: EdbSegP.h:129
virtual void Transform(const EdbAffine2D *a)

◆ Print()

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

◆ ProjectFound() [1/2]

bool EdbScanProc::ProjectFound ( EdbID  id1,
EdbID  id2 
)
inline
139{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] 
)

take xp.xp.xp.xp.found.root and produce yp.yp.yp.yp.pred.root using the AFF/xp_yp.par

1097{
1099 LogPrint(id1[0],2,"ProjectFound","from %d.%d.%d.%d to %d.%d.%d.%d",
1100 id1[0],id1[1],id1[2],id1[3],id2[0],id2[1],id2[2],id2[3]);
1101 EdbPattern pat;
1102 ReadFound(pat,id1);
1103 //pat.SetZ(0);
1104 //pat.SetSegmentsZ();
1105 for (Int_t i = 0; i < pat.N(); i++) {
1106 pat.GetSegment(i)->SetErrors(50., 50., 0., .1, .1); // area to be scanned for this prediction
1107 }
1108 ApplyAffZ(pat,id1,id2);
1109 if (!WritePred(pat,id2)) return false;
1110 WritePatTXT(pat,id2,"man.pred.txt");
1111 return true;
1112}
int WritePatTXT(EdbPattern &pred, int id[4], const char *suffix, int flag=-1)
Definition: EdbScanProc.cxx:1495
bool ApplyAffZ(EdbPattern &pat, int id1[4], int id2[4])
Definition: EdbScanProc.cxx:2579
void SetErrors()
Definition: EdbSegP.h:90

◆ ReadAffToLayer()

bool EdbScanProc::ReadAffToLayer ( EdbLayer la,
EdbID  id1,
EdbID  id2 
)

read affine tranformation from file, into layer

66{
68 EdbDataPiece piece;
69 TString parfile;
70 MakeAffName(parfile,id1,id2);
71 piece.eFileNamePar = parfile;
72 if (piece.TakePiecePar() < 0) { Log(2,"ReadAFFtoLayer","file %s do not found...", parfile.Data() ); return 0; }
73 la.Copy( *(piece.GetLayer(0)) );
74 la.SetZcorr(piece.GetLayer(0)->Z());
75 la.SetZlayer(0.,0.,0.);
76 if(gEDBDEBUGLEVEL>2) la.Print();
77 return true;
78}
void SetZcorr(float zcorr)
Definition: EdbLayer.h:106

◆ ReadEraseMask()

EdbMask * EdbScanProc::ReadEraseMask ( EdbID  id)
666{
667 TString str;
668 MakeFileName(str,id,"er.root");
669 Log(3,"EdbScanProc::ReadEraseMask"," %s",str.Data());
670 if( gSystem->AccessPathName(str, kReadPermission) ) return 0; //can not access file!
671 TFile f(str.Data());
672 if(!f.IsOpen()) return 0;
673
674 EdbMask *m = 0;
675 f.GetObject("mask",m);
676 f.Close();
677 return m;
678}

◆ 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:1689

◆ ReadFoundSegment()

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

◆ ReadFoundTrack()

int EdbScanProc::ReadFoundTrack ( EdbScanSet ss,
EdbTrackP track,
int  flag = -1 
)

read track.ID() from pieces in sc.IDS .found.root and apply transformations from sc

193{
195
197 int count=0;
198 int n = sc.eIDS.GetEntries();
199 EdbPattern pat;
200 pat.AddSegment(track.ID(), 0,0,0,0);
201 EdbSegP *s = pat.GetSegment(0);
202
203 for(int i=0; i<n; i++) {
204 EdbID *id = (EdbID *)(sc.eIDS.At(i));
205 if (ReadFoundSegment(*id,*s,flag) <= 0) continue;
206 count++;
207 plate = sc.GetPlate(id->ePlate);
208 pat.Transform( plate->GetAffineXY() );
209 pat.TransformA( plate->GetAffineTXTY() );
210 pat.TransformShr( plate->Shr() );
211 s->SetZ(plate->Z());
212 s->SetDZ(-214); //TODO!!!
213 s->SetPID(id->ePlate);
214 track.AddSegment( new EdbSegP(*s) );
215 }
216 track.SetCounters();
217 return count;
218}
int ReadFoundSegment(EdbID id, EdbSegP &s, int flag=-1)
Definition: EdbScanProc.cxx:181
Definition: bitview.h:14

◆ ReadFoundTracks()

int EdbScanProc::ReadFoundTracks ( EdbScanSet ss,
EdbPVRec ali,
int  flag = -1 
)

read all tracks from found.root listed in sc.IDS and apply transformations from sc.eB
return the total number of segments added

222{
225
227 int n = sc.eIDS.GetEntries();
228 int count=0;
229
230 for(int i=0; i<n; i++) {
231 EdbID *id = sc.GetID(i);
232 EdbPattern pat;
233 ReadFound(pat, *id, flag);
234 plate = sc.GetPlate(id->ePlate);
235 pat.SetPID(id->ePlate);
236 pat.SetID(id->ePlate);
237 pat.SetSegmentsPID();
238 pat.Transform( plate->GetAffineXY() );
239 pat.TransformA( plate->GetAffineTXTY() );
240 pat.TransformShr( plate->Shr() );
241 pat.SetZ(plate->Z());
242 pat.SetSegmentsZ();
243 pat.SetSegmentsDZ(plate->DZ()); // to check the direction!
244
245 for(int j=0; j<pat.N(); j++) {
246 EdbSegP *s = pat.GetSegment(j);
247 EdbTrackP *track = ali.FindTrack(s->ID());
248 if(track) track->AddSegment( new EdbSegP(*s) );
249 else ali.AddTrack( new EdbTrackP(new EdbSegP(*s)) );
250 count++;
251 }
252 }
253
254 int ntr = ali.Ntracks();
255 for(int i=0; i<ntr; i++) ali.GetTrack(i)->SetCounters();
256
257 LogPrint(sc.eB.ID(),2,"ReadFoundTracks","%d segments read\n",count );
258
259 return count;
260}
Int_t Ntracks() const
Definition: EdbPVRec.h:203
EdbTrackP * FindTrack(int id) const
Definition: EdbPVRec.cxx:893
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
void AddTrack(EdbTrackP *track)
Definition: EdbPVRec.h:246
void SetSegmentsPID()
Definition: EdbPattern.cxx:1455
void SetID(int id)
Definition: EdbPattern.h:309
void SetSegmentsDZ(float dz)
Definition: EdbPattern.cxx:259
void SetCounters()
Definition: EdbPattern.h:159

◆ ReadManFoundTracks()

int EdbScanProc::ReadManFoundTracks ( EdbScanSet ss,
EdbPVRec ali,
int  flag = -1 
)

read all tracks from *man.found.txt listed in sc.IDS and apply transformations from sc.eB
return the total number of segments added

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

◆ ReadMarksSet()

int EdbScanProc::ReadMarksSet ( EdbMarksSet ms,
int  brick,
const char *  filename,
char  spacer = '_',
char  shape = 'S' 
)

Reads map file and copy its informations into an EdbMarksSet object
With "spacer" you can choose the character which is assumed to be
between the words in the map file. Default is '_'

3034{
3038 char str[256];
3039 sprintf(str,"%s/b%6.6d/b%6.6d.%s",
3041
3042 ms.ReadMap(str,spacer,shape);
3043
3044 return(1);
3045}
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:2359

◆ ReadPatCP() [2/2]

int EdbScanProc::ReadPatCP ( EdbPattern pat,
int  id[4],
TCut  c = "1" 
)

read CP file ("base" segments) applying all cuts and transformations from x.x.x.x.in.par
the Z of the pat and all segments will be z of layer 0 defined in the par file(s)

2360{
2363 EdbDataPiece piece;
2364 InitPiece(piece, id);
2365 piece.GetLayer(0)->SetZlayer(piece.GetLayer(0)->Z(), 0,0);
2366 piece.AddRCut(0,cut);
2367 int n = ReadPiece(piece, pat);
2368 pat.SetZ(piece.GetLayer(0)->Z());
2369 pat.SetSegmentsZ();
2370
2371 EdbID sid(id[0],id[1],id[2],id[3]);
2372 pat.SetSegmentsScanID(sid);
2373
2374 return n;
2375}
void AddRCut(int layer, TCut &cut)
Definition: EdbDataSet.cxx:235
void SetSegmentsScanID(EdbID id)
Definition: EdbPattern.cxx:1464

◆ ReadPatCPnopar() [1/2]

int EdbScanProc::ReadPatCPnopar ( EdbPattern pat,
const char *  file,
TCut  cut = "1",
EdbMask erase_mask = 0,
bool  read_mt = false 
)
692{
693 EdbCouplesTree ect;
694 if(!ect.InitCouplesTree("couples",cpfile,"READ")) return 0;;
695 ect.eCut=cut;
696 ect.eEraseMask = mask;
697
698 int nread=0;
699 if(!read_mt) nread = ect.GetCPData( &pat );
700 else { // add microtracks as "digits" to the basetrack
701 EdbPattern p1, p2;
702 nread = ect.GetCPData( &pat,&p1,&p2,0 );
703 for(int i=0; i<pat.N(); i++) {
704 EdbSegP *s = pat.GetSegment(i);
705 s->addEMULDigit( new EdbSegP(*(p1.GetSegment(i))) );
706 s->addEMULDigit( new EdbSegP(*(p2.GetSegment(i))) );
707 s->EMULDigitArray()->SetOwner();
708 }
709 }
710 ect.Close();
711 return nread;
712}
Definition: EdbCouplesTree.h:17
TCut eCut
cut to be applied on read
Definition: EdbCouplesTree.h:31
bool InitCouplesTree(const char *name="couples", const char *fname=0, Option_t *mode="READ")
Definition: EdbCouplesTree.cxx:79
void Close()
Definition: EdbCouplesTree.cxx:62
int GetCPData(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbCouplesTree.cxx:296
EdbMask * eEraseMask
id's (entries) of segments to be erased when read couples tree
Definition: EdbCouplesTree.h:27

◆ ReadPatCPnopar() [2/2]

int EdbScanProc::ReadPatCPnopar ( EdbPattern pat,
EdbID  id,
TCut  cut = "1",
bool  do_erase = false,
bool  read_mt = false 
)
682{
683 TString cpfile;
684 MakeFileName(cpfile,id,"cp.root");
685 EdbMask* mask = 0;
686 if(do_erase) mask = ReadEraseMask(id);
687 return ReadPatCPnopar(pat,cpfile.Data(),cut, mask, read_mt );
688}
EdbMask * ReadEraseMask(EdbID id)
Definition: EdbScanProc.cxx:665

◆ ReadPatRoot()

int EdbScanProc::ReadPatRoot ( EdbPattern pred,
int  id[4],
const char *  suffix,
int  flag = -1 
)

read root predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
flag convention:
-1 read all: basetracks, microtracks and holes (extrapolated predictions)
>=0 read only segments with this flag
-11 read basetracks or microtracks, skip holes (expected behaviour for display users)

1690{
1696
1697 int n=0;
1698 TString str;
1699 MakeFileName(str,id,suffix);
1700
1701 // checking for the existing directory
1702
1703 FileStat_t buf;
1704
1705 if (gSystem->GetPathInfo(gSystem->DirName(str), buf)) {
1706 if (gEDBDEBUGLEVEL > 0) {
1707 cout << "ERROR! Directory " << gSystem->DirName(str)
1708 << " does not exist.\n";
1709 cout << "Please run scanning procedure for the plate number " << id[1]
1710 << endl;
1711 }
1712 return 0;
1713 }
1714
1715 TFile f(str.Data());
1716 EdbPattern *p=0;
1717 f.GetObject("pat",p);
1718 if (!p) {f.Close(); return 0;}
1719 for(int i=0; i<p->N(); i++) {
1720 EdbSegP *s = p->GetSegment(i);
1721 if (flag > -1 && flag != s->Flag()) continue;
1722 if (flag == -11 && EdbRunTracking::GetMTHoles(s->Flag())>0) continue;
1723 pred.AddSegment(*s)->SetSide( s->Flag()%10 );
1724 n++;
1725 }
1726 EdbID sid(id[0],id[1],id[2],id[3]);
1727 pred.SetSegmentsScanID(sid);
1728 f.Close();
1729 p->Delete();
1730 LogPrint(id[0],2,"ReadPatRoot","%s with %d predictions with flag: %d", str.Data(),n,flag);
1731 return n;
1732}
static int GetMTHoles(int flag)
Definition: EdbRunTracking.h:80
void SetSide(int side=0)
Definition: EdbSegP.h:139

◆ ReadPatTXT() [1/3]

int EdbScanProc::ReadPatTXT ( const char *  file,
EdbPattern pred,
int  flag = -1 
)

read ascii predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
man - for manual check by sysal

  • overvise complete format
    flag convention:
    -1 read all: basetracks, microtracks and holes (extrapolated predictions)
    >=0 read only segments with this flag
    -11 read basetracks or microtracks, skip holes (expected behaviour for display users)
1587{
1595
1596 EdbSegP s;
1597 Int_t ids = 0, flag = 0, ic = 0;
1598 Float_t x=0,y=0,tx=0,ty=0,sx=0,sy=0,stx=0,sty=0;
1599
1600 char buffer[256];
1601
1602 FILE *f = fopen(file, "r");
1603
1604 if (!f) {
1605 Log(1,"ReadPatTXT","ERROR! can not open file %s", file);
1606 return 0;
1607 }
1608
1609 fgets (buffer, sizeof(buffer), f);
1610 int ncolumns = sscanf(buffer,"%d %f %f %f %f %f %f %f %f %d",
1611 &ids,&x,&y,&tx,&ty,&sx,&sy,&stx,&sty,&flag);
1612
1613 if (ncolumns!=6 && ncolumns!=10) {
1614 Log(1,"ReadPatTXT","ERROR! cannot recognize the format of file %s", file);
1615 return 0;
1616 }
1617
1618 rewind(f);
1619
1620 while (fgets (buffer, sizeof(buffer), f)) {
1621 if (sscanf(buffer,"%d %f %f %f %f %d",
1622 &ids,&x,&y,&tx,&ty,&flag) !=ncolumns ) break;
1623 if (flag0 > -1 && flag0 != flag) continue;
1624 if (flag0 == -11 && EdbRunTracking::GetMTHoles(flag)>0) continue;
1625 int side = flag%10;
1626 float ww=50;
1627 s.SetDZ(-214);
1628 if(side!=0) ww=25;
1629 if(side==1) s.SetDZ(45);
1630 if(side==2) s.SetDZ(-45);
1631
1632 s.Set(ids,x,y,tx,ty,ww,flag);
1633 s.SetSide( side );
1634 if (ncolumns==10) s.SetErrors(sx,sy,0.,stx,sty);
1635 else s.SetErrors(50,50,0.,0.6,0.6);
1636 pred.AddSegment(s);
1637 ic++;
1638 }
1639
1640 fclose(f);
1641
1642 return ic;
1643}

◆ 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 
)
1570{
1571 TString str;
1572 MakeFileName(str,id,suffix);
1573
1574 ReadPatTXT(str.Data(),pred,flag);
1575 EdbID sid(id[0],id[1],id[2],id[3]);
1576 pred.SetSegmentsScanID(sid);
1577
1578 LogPrint(id[0], 2, "ReadPatTXT","%s with %d predictions with flag: %d",
1579 str.Data(), pred.N(), flag);
1580
1581 return pred.N();
1582}

◆ ReadPiece()

int EdbScanProc::ReadPiece ( EdbDataPiece piece,
EdbPattern pat 
)

assuming that piece was initialised correctly

2379{
2381 if(!piece.InitCouplesTree("READ")) return 0;
2382 piece.GetCPData_new( &pat,0,0,0 );
2383 pat.SetSegmentsZ();
2384 pat.Transform( piece.GetLayer(0)->GetAffineXY() );
2385 pat.TransformA( piece.GetLayer(0)->GetAffineTXTY() );
2386 pat.TransformShr( piece.GetLayer(0)->Shr() );
2387 return 1;
2388}

◆ ReadPiecePar()

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

◆ 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)
1415{
1416 if(!CheckBrickDir(id)) return 0;
1417 TString name;
1418 MakeFileName(name,id,"sb.root",false);
1419 TFile f(name.Data(),"READ");
1420 if(!f.IsOpen()) return 0;
1421 TObjArray *tracks = (TObjArray*)f.Get("sbtracks");
1422 f.Close();
1423 LogPrint(id.eBrick,2,"ReadSBTracks","%d tracks read from %s", tracks->GetEntries(), name.Data());
1424 return tracks;
1425}

◆ ReadScanSet()

EdbScanSet * EdbScanProc::ReadScanSet ( EdbID  id)
1483{
1484 TString name;
1485 MakeFileName(name,id,"set.root",false);
1486 TFile f(name.Data());
1487 Log(2,"ReadScanSet","from %s",name.Data());
1488 if(!f.IsOpen()) return 0;
1489 TObject *ss = f.Get("set");
1490 if(ss) return (EdbScanSet *)ss;
1491 else return 0;
1492}

◆ 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 
)

read data for scanset defined with id apply cut c and fill ali
if(do_erase) - exclude segmets from the erase mask if it is exist (default is true)
if(do_assemble) - read affine parfiles (default is true)

330{
334
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:135

◆ ReadScanSetCP() [2/2]

int EdbScanProc::ReadScanSetCP ( EdbScanSet ss,
EdbPVRec ali,
TCut  c = "1",
bool  do_erase = true,
int  minplate = -1000,
int  maxplate = -1000 
)

read data from scanset sc with cut c and fill ali
sc.eIDS is used as an id list
sc.eB is used to get the brick geometry and affine transformations - must be filled before
if(do_erase) - exclude segmets from the erase mask if it is exist (default is true)

343{
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.GetEntries(); // number of pieces to get
355 EdbID *id;
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
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???
389
390 return cnt;
391}
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
void SetVid(int vid, int sid)
Definition: EdbSegP.h:137
void SetSegmentsPlate(int plate)
Definition: EdbPattern.cxx:241

◆ ReadScanSetGlobal()

EdbScanSet * EdbScanProc::ReadScanSetGlobal ( EdbID  id,
bool  x_marks 
)

read scan set and use map.OL and map.XG files to obtain transformations in global OPERA RS

1442{
1444 EdbScanSet *ss = ReadScanSet(id);
1445 if(ss) {
1446 if(gEDBDEBUGLEVEL>2) ss->Print();
1447 EdbMarksSet msOL;
1448 if (x_marks) ReadMarksSet(msOL,id.eBrick,"map.LL",'_','L');
1449 else ReadMarksSet(msOL,id.eBrick,"map.OL",'_','S');
1450 if(gEDBDEBUGLEVEL>2) msOL.Print();
1451 float MINX = msOL.eXmin;
1452 float MAXX = msOL.eXmax;
1453 float MINY = msOL.eYmin;
1454 float MAXY = msOL.eYmax;
1455 EdbMarksSet msXG;
1456 ReadMarksSet(msXG,id.eBrick,"map.XG",'_');
1457 float ZEROX = msXG.eXmin;
1458 float ZEROY = msXG.eYmin;
1459 if(gEDBDEBUGLEVEL>2) msXG.Print();
1460
1461 int n = ss->eIDS.GetEntries();
1462 for(int i=0; i<n; i++) {
1463 EdbID *pid = ss->GetID(i);
1464 EdbPlateP *plate = ss->GetPlate(pid->ePlate);
1465 float RX = 0.5*(MINX+MAXX) - ZEROX;
1466 float RY = 0.5*(MINY+MAXY) - ZEROY;
1467 EdbAffine2D *aff = plate->GetAffineXY();
1468 float MAPXX = aff->A11();
1469 float MAPXY = aff->A12();
1470 float MAPYX = aff->A21();
1471 float MAPYY = aff->A22();
1472 float MAPDX = aff->B1() - RX + aff->A11() * RX + aff->A12() * RY;
1473 float MAPDY = aff->B2() - RY + aff->A21() * RX + aff->A22() * RY;
1474 aff->Set(MAPXX,MAPXY,MAPYX,MAPYY,MAPDX,MAPDY);
1475 }
1476 if(gEDBDEBUGLEVEL>2) ss->Print();
1477 }
1478 return ss;
1479}
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:3033
int pid[1000]
Definition: m2track.cpp:13
Double_t RX
Definition: tlg2couples.C:78
Double_t RY
Definition: tlg2couples.C:78

◆ ReadTracksTree() [1/2]

int EdbScanProc::ReadTracksTree ( const char *  name,
EdbPVRec ali,
TCut  cut = "1" 
)
613{
614 int n=0;
617 return n;
618}
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:2922
EdbDataProc * dproc
Definition: check_vertex.C:13

◆ ReadTracksTree() [2/2]

int EdbScanProc::ReadTracksTree ( EdbID  id,
EdbPVRec ali,
TCut  cut = "1" 
)
605{
606 TString name;
607 MakeFileName(name,id,"trk.root",false);
608 return ReadTracksTree(name.Data(), ali, cut);
609}
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:604

◆ ReadUncorrectedBTforFoundTracks()

void EdbScanProc::ReadUncorrectedBTforFoundTracks ( EdbPVRec ali)

get from couples trees and set in the ali the uncorrected basetracks

3411{
3414 int npat = ali.Npatterns();
3415 for(int i=0; i<npat; i++)
3416 {
3417 EdbPattern *pat = ali.GetPattern(i);
3418 int nseg = pat->N(); if(nseg<1) return;
3419 EdbID idpl((pat->GetSegment(0)->ScanID()));
3420 TString cpfile;
3421 MakeFileName(cpfile,idpl,"cp.root");
3422 EdbCouplesTree ect;
3423 if(!ect.InitCouplesTree("couples",cpfile,"READ")) continue;
3424 ect.eAcceptMask = new EdbMask(ect.eTree->GetEntries());
3425 EdbSegP **segments = new EdbSegP*[ect.eTree->GetEntries()];
3426 for(int j=0; j<nseg; j++) ect.eAcceptMask->SetAt( pat->GetSegment(j)->Vid(1), 1);
3427 EdbPattern newpat;
3428 int nnew= ect.GetCPDataAcceptedMask(&newpat);
3429 for(int j=0; j<nnew; j++) segments[newpat.GetSegment(j)->Vid(1)] = newpat.GetSegment(j);
3430 for(int j=0; j<nseg; j++) {
3431 EdbSegP *sc = pat->GetSegment(j);
3432 EdbSegP *sn = segments[sc->Vid(1)];
3433 //sc->PrintNice();
3434 //sn->PrintNice();
3435 sc->SetX(sn->X());
3436 sc->SetY(sn->Y());
3437 sc->SetTX(sn->TX());
3438 sc->SetTY(sn->TY());
3439 }
3440 Log(2,"EdbScanProc::ReadUncorrectedBTforFoundTracks","%d -> %d segments for %s",
3441 pat->N(), newpat.N(), idpl.AsString() );
3442 }
3443
3444}
EdbMask * eAcceptMask
id's (entries) of segments to be accepted when read couples tree
Definition: EdbCouplesTree.h:28
int GetCPDataAcceptedMask(EdbPattern *pat)
Definition: EdbCouplesTree.cxx:347
TTree * eTree
couples tree
Definition: EdbCouplesTree.h:25
void SetAt(int i, int val)
Definition: EdbMask.h:20
void SetSegmentsTracks()
Definition: EdbPVRec.cxx:2474
EdbID ScanID() const
Definition: EdbSegP.h:160

◆ RemoveDublets()

int EdbScanProc::RemoveDublets ( EdbPattern pin,
EdbPattern pout,
int  brick 
)

input: pin - predictions pattern
output: pout - predictions pattern with dublets removed

810{
813 if(pin.N()<2) return 0;
814 float r,rt;
815 float rmin = 0.1; // [micron] TODO - pass as parameter?
816 float rtmin= 0.0001; // [rad] TODO - pass as parameter?
817 OptimizeScanPath(pin, pout,brick);
818 EdbSegP *s=0,*s1=0;
819 int n= pout.N();
820 for(int i=n-1; i>0; i--) {
821 s = pout.GetSegment(i);
822 s1 = pout.GetSegment(i-1);
823 r = Sqrt((s->X()-s1->X())*(s->X()-s1->X()) + (s->Y()-s1->Y())*(s->Y()-s1->Y()));
824 if( r>rmin ) continue;
825 rt = Sqrt((s->TX()-s1->TX())*(s->TX()-s1->TX()) + (s->TY()-s1->TY())*(s->TY()-s1->TY()));
826 if( rt>rtmin ) continue;
827 pout.GetSegments()->RemoveAt(i);
828 }
829 pout.GetSegments()->Compress();
830 LogPrint(brick,2,"RemoveDublets","%d segments before -> %d segments after: %d dublets removed", n, pout.N(), n-pout.N());
831 return n-pout.N();
832}
void OptimizeScanPath(EdbPattern &pin, EdbPattern &pout, int brick)
Definition: EdbScanProc.cxx:835

◆ RemoveFile()

int EdbScanProc::RemoveFile ( EdbID  id,
const char *  suffix 
)

remove file

964{
966 TString name;
967 MakeFileName(name,id,suffix);
968 char str[256];
969 sprintf(str,"%s/file_to_remove",eProcDirClient.Data());
970 int status = gSystem->Rename(name.Data(), str);
971 LogPrint(id.eBrick,2,"RemoveFile","status=%d from %s to %s", status, name.Data(), str );
972 return status;
973}

◆ ScanAreas() [1/2]

int EdbScanProc::ScanAreas ( EdbScanClient::ScanType  st,
EdbScanClient scan,
EdbPattern pred,
int  id[4],
const char *  opt = "NOCLCLFRAMESUM" 
)
902{
903 LogPrint(id[0],1,"ScanAreas","%d.%d.%d.%d with %d predictions", id[0],id[1],id[2],id[3],pred.N());
904 EdbPattern predopt;
905 OptimizeScanPath(pred,predopt,id[0]);
906
907 bool createRun = !scan.ServerCreatesRootFile(); // if is created by server side - no need to create it
908 char runname[512];
909 char runNameSrv[512];
910
911 EdbRun *run = InitRun(id, runname, runNameSrv, createRun);
912 if(!run && createRun) return 0;
913
914 if(!createRun && eProcDirServer.Length())//if ProcDir not set - server cant create proper files
915 scan.SetProcTgtServer(runNameSrv);
916 scan.SetProcPthServer(eProcDirServer.Data());
917
918 int scanned = scan.ScanAreas(st, id,predopt,run,opt);
919 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) );
920
921 if(run){
922 run->Close();
923 delete run;
924 }
925
926 if(!createRun){
927 if(!scan.ServerCreatesTarget()){//server creates *.root in tmp dir move server-side created file in target loaction (<*>/brick/plate/*.*.*.*.raw.root)
928 TString serverCreatedRunName = scan.GetServerCreatedRunName();
929 if(serverCreatedRunName.Length()==0){
930 printf("Server had to create run but we don't know where it is.\n");
931 return 0;
932 }
933 WaitFileReady(serverCreatedRunName.Data());
934 char str[1024];
935 #ifdef WIN32
936 sprintf(str,"move /F %s %s", serverCreatedRunName.Data(), runname);
937 #else
938 sprintf(str,"mv -f %s %s", serverCreatedRunName.Data(), runname);
939 #endif
940 gSystem->Exec(str);
941 }else{//Server creates *.root on place
942 WaitFileReady(runname);
943 }
944 }
945 return scanned;
946}
bool WaitFileReady(const char *fname_)
Definition: EdbScanProc.cxx:1881

◆ ScanAreas() [2/2]

int EdbScanProc::ScanAreas ( EdbScanClient::ScanType  st,
EdbScanClient scan,
int  id[4],
int  flag = -1,
const char *  opt = "NOCLCLFRAMESUM" 
)
894{
895 EdbPattern pred;
896 ReadPred(pred, id, flag);
897 return ScanAreas(st, scan, pred, id, opt);
898}
int ScanAreas(EdbScanClient::ScanType st, EdbScanClient &scan, int id[4], int flag=-1, const char *opt="NOCLCLFRAMESUM")
Definition: EdbScanProc.cxx:893

◆ SetAFF0()

bool EdbScanProc::SetAFF0 ( int  id1[4],
int  id2[4] 
)
1044{
1045 TString str;
1046 MakeAffName(str,id1,id2);
1047 char card[64];
1048 sprintf(card,"AFFXY 0 1. 0. 0. 1. 0. 0.");
1049 LogPrint(id1[0],2,"SetAFF0","%s as %s", str.Data(),card);
1050 return AddParLine(str.Data(),card);
1051}

◆ SetAFFDZ()

bool EdbScanProc::SetAFFDZ ( int  id1[4],
int  id2[4],
float  dz 
)
1055{
1056 TString str;
1057 MakeAffName(str,id1,id2);
1058 char card[64];
1059 sprintf(card,"ZLAYER 0 %f 0 0",dz);
1060 LogPrint(id1[0],2,"SetAFFDZ","%s as %s", str.Data(),card);
1061 return AddParLine(str.Data(),card);
1062}

◆ SetDefaultCondBT()

void EdbScanProc::SetDefaultCondBT ( EdbScanCond cond)
2290{
2291 cond.SetSigma0( 10., 10., 0.007, 0.007 ); // sigma0 "x, y, tx, ty" at zero angle
2292 cond.SetDegrad( 5. ); // sigma(tx) = sigma0*(1+degrad*tx)
2293 cond.SetBins(0, 0, 0, 0); //??? // bins in [sigma] for checks
2294 cond.SetPulsRamp0( 5., 5. ); // in range (Pmin:Pmax) Signal/All is nearly linear
2295 cond.SetPulsRamp04( 5., 5. );
2296 cond.SetChi2Max( 6.5 );
2297 cond.SetChi2PMax( 6.5 );
2298 cond.SetRadX0( 5810. );
2299 cond.SetName("OPERA_basetrack");
2300}
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)
2304{
2305 cond.SetSigma0( 1., 1., 0.025, 0.025 ); // sigma0 "x, y, tx, ty" at zero angle
2306 cond.SetDegrad( 5. ); // sigma(tx) = sigma0*(1+degrad*tx)
2307 cond.SetBins(0, 0, 0, 0); //??? // bins in [sigma] for checks
2308 cond.SetPulsRamp0( 5., 5. ); // in range (Pmin:Pmax) Signal/All is nearly linear
2309 cond.SetPulsRamp04( 5., 5. );
2310 cond.SetChi2Max( 6.5 );
2311 cond.SetChi2PMax( 6.5 );
2312 cond.SetRadX0( 5810. );
2313 cond.SetName("OPERA_microtrack");
2314}

◆ SetServerRunName()

void EdbScanProc::SetServerRunName ( const char *  fname_)
3402 {
3403 eServerCreatedRunName = fname_;
3404};

◆ TestAl() [1/4]

int EdbScanProc::TestAl ( const char *  cpfile1,
const char *  cpfile2,
TCut &  cut,
float  dz,
EdbAffine2D aff = 0 
)
1301{
1302 EdbPattern p1,p2;
1303 ReadPatCPnopar(p2, cpfile2, cut);
1304 p2.SetZ(0); p2.SetSegmentsZ();
1305 ReadPatCPnopar(p1, cpfile1, cut);
1306 if(aff) p1.Transform(aff);
1307 p1.SetZ(-dz); p1.SetSegmentsZ();
1308 return TestAl(p1,p2);
1309}
int TestAl(int id1[4], int id2[4])
Definition: EdbScanProc.cxx:1272

◆ TestAl() [2/4]

int EdbScanProc::TestAl ( EdbID  id1,
EdbID  id2 
)
inline
196{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 
)
1313{
1314 Log(2,"EdbScanProc::TestAl","align patterns %d and %d", p1.N(), p2.N());
1315 EdbTestAl ta;
1316 TFile ftree("testal.root","RECREATE");
1317 ta.eBinTree = new TNtuple("bintree","bin tree","dz:phi:dx:dy:bin");
1318 ta.eITMAX=50; // default value
1319 ta.HDistance(p1,p2);
1320
1321 float bin[4]={250,250, 250,0.001}; // default values for normal alignment (expected dz=1300)
1322 ta.eDmin[0]=-25000; ta.eDmin[1]=-25000; ta.eDmin[2]= -25; ta.eDmin[3]=-0.015;
1323 ta.eDmax[0]= 25000; ta.eDmax[1]= 25000; ta.eDmax[2]= 25; ta.eDmax[3]= 0.015;
1324
1325 FILE *f = fopen("testal.par","r");
1326 if(f) {
1327 for(int i=0; i<4; i++) {
1328 float min=0,max=0,b=0;
1329 if(!(fscanf(f,"%f %f %f",&min,&max,&b )==3)) {Log(1,"EdbScanProc::TestAl","ERROR: read from testal.par"); return 0;}
1330 else {
1331 ta.eDmin[i]=min; ta.eDmax[i]=max; bin[i]=b;
1332 }
1333 }
1334 fclose(f);
1335 }
1336 for(int i=0; i<4; i++) ta.eN[i] = (Int_t)((ta.eDmax[i]-ta.eDmin[i]-bin[i]/2.)/bin[i])+1;
1337 for(int i=0; i<4; i++) ta.eDmax[i] = ta.eDmin[i]+bin[i]*ta.eN[i];
1338 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]);
1339
1340 ta.CheckMaxBin();
1341 EdbAffine2D aff;
1342 aff.Rotate(-ta.eD0[3]);
1343 aff.ShiftX(ta.eD0[0]);
1344 aff.ShiftY(ta.eD0[1]);
1345 //if(gEDBDEBUGLEVEL>1) {
1346 //aff.Print();
1347 //ta.FillTree(-ta.eD0[2]);
1348 //}
1349
1350 ta.eBinTree->Write("bintree");
1351 ftree.Close();
1352
1353 return 0;
1354}
float min(TClonesArray *t)
Definition: bitview.cxx:275
void ShiftX(float d)
Definition: EdbAffine.h:64
void ShiftY(float d)
Definition: EdbAffine.h:65
void Rotate(float angle)
Definition: EdbAffine.cxx:354
alignment test class
Definition: EdbTestAl.h:12
int CheckMaxBin(float dz, float phi, float &meanbin, float &xmax, float &ymax)
Definition: EdbTestAl.cxx:270
Float_t eD0[4]
limits, and found value of the peak for dx,dy,dz,phi
Definition: EdbTestAl.h:34
Int_t eITMAX
angular step (def=50)
Definition: EdbTestAl.h:17
Int_t eN[4]
nx,ny,nz,nphi - number of divisions
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
put bins value for all attempts
Definition: EdbTestAl.h:25
int max
Definition: check_shower.C:41

◆ TestAl() [4/4]

int EdbScanProc::TestAl ( int  id1[4],
int  id2[4] 
)
1273{
1274 MakeInPar(id1,"prealignment");
1275 MakeInPar(id2,"prealignment");
1276 TString name;
1277 MakeFileName(name,id1,"in.par");
1278 TString parfileOUT;
1279 MakeAffName(parfileOUT,id1,id2);
1280 parfileOUT.Prepend("INCLUDE ");
1281 AddParLine(name.Data(), parfileOUT.Data());
1282
1283 EdbPattern p1,p2;
1284
1285 ReadPatCP(p2,id2);
1286 p2.SetZ(0);
1287 p2.SetSegmentsZ();
1288
1289 ReadPatCP(p1,id1);
1290 EdbAffine2D aff1;
1291 float dz;
1292 GetAffZ(aff1,dz,id1,id2);
1293 p1.SetZ(-dz);
1294 p1.SetSegmentsZ();
1295
1296 return TestAl(p1,p2);
1297}

◆ TrackSetBT()

int EdbScanProc::TrackSetBT ( EdbScanSet sc,
TEnv &  cenv 
)
562{
563 EdbScanCond cond;
564 TCut c = cenv.GetValue("fedra.readCPcut" , "eCHI2P<2.5&&s.eW>13&&eN1==1&&eN2==1&&s1.eFlag>=0&&s2.eFlag>=0");
565 int nsegmin = cenv.GetValue("fedra.track.nsegmin" , 2 );
566 int ngapmax = cenv.GetValue("fedra.track.ngapmax" , 4 );
567 float probmin = cenv.GetValue("fedra.track.probmin" , 0.01 );
568 float momentum = cenv.GetValue("fedra.track.momentum" , 2 );
569 float mass = cenv.GetValue("fedra.track.mass" , 0.14 );
570 bool do_erase = cenv.GetValue("fedra.track.erase" , false );
571 cond.SetSigma0( cenv.GetValue("fedra.track.Sigma0" , "3 3 0.005 0.005") );
572 cond.SetPulsRamp0( cenv.GetValue("fedra.track.PulsRamp0" , "15 20") );
573 cond.SetPulsRamp04( cenv.GetValue("fedra.track.PulsRamp04" , "15 20") );
574 cond.SetDegrad( cenv.GetValue("fedra.track.Degrad" , 4) );
575 cond.SetRadX0( cenv.GetValue("fedra.track.RadX0" , 5810.) );
576
577 if(sc.eIDS.GetEntries()<2) return 0;
578 int n=0;
579 EdbID *id=0;
580 for(int i=0; i<sc.eIDS.GetEntries(); i++) {
581 id = (EdbID *)(sc.eIDS.At(i));
582 MakeInPar(*id,"tracking");
583 }
584
586 EdbPVRec *ali = dproc.PVR();
587 ali->SetScanCond( &cond );
588 ReadScanSetCP(sc, *ali, c, do_erase);
589 ali->Print();
590
591 n = dproc.LinkTracksWithFlag( ali, momentum, probmin, nsegmin, ngapmax, 0 );
593
594 EdbID ido( *((EdbID *)(sc.eIDS.At(0))) );
595 ido.ePlate=0;
596 TString name;
597 MakeFileName(name,ido,"trk.root",false);
599
600 return n;
601}
EdbPVRec * PVR() const
Definition: EdbDataSet.h:198
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2506
void FitTracks(float p=10., float mass=0.139, TObjArray *gener=0, int design=0)
Definition: EdbPVRec.cxx:1893
void Print() const
Definition: EdbPattern.cxx:1693
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 
)

update the aff par file with the values defined in the EdbLayer

988{
990
991 TString parout; MakeAffName(parout,id1,id2);
992 LogPrint(id1.eBrick,2,"UpdateAFFPar","%s ", parout.Data());
993 char card[80];
994
995 TDatime t;
996 sprintf(card,"\n## %s", t.AsSQLString());
997 if(!AddParLine(parout.Data(),card)) return false;
998
999 sprintf(card,"ZLAYER \t %d \t %f %f %f",l.ID(), l.Zcorr() ,0.,0. );
1000 if(!AddParLine(parout.Data(),card)) return false;
1001
1002 EdbAffine2D &aff = *(l.GetAffineXY());
1003 if(aff0) aff.Transform(aff0);
1004
1005 //sprintf(card,"AFFXY \t %d \t %f %f %f %f %f %f", l.ID(),
1006 sprintf(card,"AFFXY \t %d \t %g %g %g %g %g %g", l.ID(),
1007 aff.A11(),aff.A12(),aff.A21(),aff.A22(),aff.B1(),aff.B2() );
1008 if(!AddParLine(parout.Data(),card)) return false;
1009
1010 EdbAffine2D &afftxy = *(l.GetAffineTXTY());
1011 sprintf(card,"AFFTXTY \t %d \t %g %g %g %g %g %g", l.ID(),
1012 afftxy.A11(),afftxy.A12(),afftxy.A21(),afftxy.A22(),afftxy.B1(),afftxy.B2() );
1013 if(!AddParLine(parout.Data(),card)) return false;
1014
1015 sprintf(card,"SHRINK \t %d \t %f",l.ID(), l.Shr() ); if(!AddParLine(parout.Data(),card)) return false;
1016
1017 return true;
1018}
void Transform(const EdbAffine2D *a)
Definition: EdbAffine.cxx:93
int ID() const
Definition: EdbLayer.h:73

◆ UpdateAlignSummaryTree()

void EdbScanProc::UpdateAlignSummaryTree ( EdbID  idset1,
EdbID  idset2,
TTree &  tree 
)
2874{
2875 TString dataout; MakeAffName(dataout,id1s,id2s,"al.root");
2876 TFile *f = new TFile(dataout,"READ");
2877 if(!f) return;
2878 EdbLayer *corr = (EdbLayer*)f->Get("corr_layer1");
2879 EdbPeak2 *peak2c = (EdbPeak2*)f->Get("peak2c");
2880 if(!corr) {Log(1,"UpdateAlignSummaryTree","Warning no corr for %s_%s",id1s.AsString(), id2s.AsString()); return;}
2881 if(!peak2c) {Log(1,"UpdateAlignSummaryTree","Warning no peak2c for %s_%s",id1s.AsString(), id2s.AsString()); return;}
2882 EdbAffine2D *aXY=corr->GetAffineXY();
2883 int peak = (int)(peak2c->Peak(0));
2884 float xcenter1 = corr->X();
2885 float ycenter1 = corr->Y();
2886 float xoffset= aXY->A11()*xcenter1 + aXY->A12()*ycenter1 + aXY->B1() - xcenter1;
2887 float yoffset= aXY->A21()*xcenter1 + aXY->A22()*ycenter1 + aXY->B2() - ycenter1;
2888
2889 EdbID *id1=&id1s, *id2=&id2s;
2890 tree.SetBranchAddress("id1" , &id1);
2891 tree.SetBranchAddress("id2" , &id2);
2892 tree.SetBranchAddress("corr" , &corr);
2893 tree.SetBranchAddress("peak2c", &peak2c);
2894 tree.SetBranchAddress("peak", &peak);
2895 tree.SetBranchAddress("xoffset", &xoffset);
2896 tree.SetBranchAddress("yoffset", &yoffset);
2897 tree.Fill();
2898 Log(1,"UpdateAlignSummaryTree","peak: %7.0f/%7.2f/%7.3f dx,dy,dz: %7.3f %7.3f %7.3f for %s_%s",
2899 peak2c->Peak(),peak2c->Mean3(),peak2c->Mean(), xoffset,yoffset,corr->Zcorr(), id1s.AsString(),id2s.AsString() );
2900
2901 TCanvas *c = (TCanvas*)f->Get("report_al");
2902 if(c) {
2903 c->SetName(Form("%s_%s",id1s.AsString(), id2s.AsString()));
2904 c->Draw();
2905 }
2906 SafeDelete(f);
2907}

◆ UpdatePlatePar()

bool EdbScanProc::UpdatePlatePar ( EdbID  id,
EdbLayer l 
)

update the plate par file with the values defined in the EdbLayer

1022{
1024
1025 TString parout; MakeFileName(parout,id,"par");
1026 LogPrint(id.eBrick,2,"UpdatePar","%s ", parout.Data());
1027 char card[80];
1028
1029 TDatime t;
1030 sprintf(card,"\n## %s", t.AsSQLString()); if(!AddParLine(parout.Data(),card)) return false;
1031 sprintf(card,"SHRINK \t %d \t %f",l.ID(), l.Shr() ); if(!AddParLine(parout.Data(),card)) return false;
1032
1033 EdbAffine2D &aff = *(l.GetAffineXY());
1034 sprintf( card,"AFFXY \t %d %s", l.ID(), aff.AsString() ); if(!AddParLine(parout.Data(),card)) return false;
1035
1036 aff = *(l.GetAffineTXTY());
1037 sprintf( card,"AFFTXTY \t %d %s", l.ID(), aff.AsString() ); if(!AddParLine(parout.Data(),card)) return false;
1038
1039 return true;
1040}
const char * AsString() const
Definition: EdbAffine.cxx:57

◆ UpdateSetWithAff() [1/3]

void EdbScanProc::UpdateSetWithAff ( EdbID  id,
EdbID  id1,
EdbID  id2 
)

in this function the geometry of the brick of idset is updated with the affine transformations
found for the couple idset1 idset2 (same plate rescanning transformations)

2704{
2707 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2708 EdbScanSet *ss1 = ReadScanSet(idset1); if(!ss1) return;
2709 EdbScanSet *ss2 = ReadScanSet(idset2); if(!ss2) return;
2710 int n = ss->eIDS.GetEntries();
2711 for(int i=0; i<n; i++) {
2712 EdbID *id = ss->GetID(i);
2713 EdbID *id1 = ss1->FindPlateID(id->ePlate); if(!id1) continue;
2714 EdbID *id2 = ss2->FindPlateID(id->ePlate); if(!id2) continue;
2715
2716 EdbLayer la; ReadAffToLayer( la, *id1, *id2);
2717 EdbPlateP *p = ss->GetPlate(id->ePlate);
2718 if(p) {
2719 p->SetZcorr(la.Zcorr());
2720 p->GetAffineXY()->Transform(la.GetAffineXY());
2721 p->GetAffineTXTY()->Transform(la.GetAffineTXTY());
2722 p->SetShrinkage(la.Shr());
2723 }
2724 }
2725 WriteScanSet( idset ,*ss );
2726 SafeDelete(ss); SafeDelete(ss1); SafeDelete(ss2);
2727}
bool ReadAffToLayer(EdbLayer &la, EdbID id1, EdbID id2)
Definition: EdbScanProc.cxx:65

◆ UpdateSetWithAff() [2/3]

void EdbScanProc::UpdateSetWithAff ( EdbID  id,
EdbID  idu 
)

in this function the geometry of the brick of idset is updated with the affine transformations
found for plate-to-plate alignment of idset

2748{
2751 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2752 EdbScanSet *ssu = ReadScanSet(idsetu); if(!ssu) return;
2753 int n = ssu->eIDS.GetEntries(); if(n<2) return;
2754 for(int i=0; i<n-1; i++) {
2755 EdbID *id1 = ssu->GetID(i);
2756 EdbID *id2 = ssu->GetID(i+1);
2757 EdbLayer la; if(!ReadAffToLayer( la, *id1, *id2)) continue;
2758 ss->UpdateBrickWithP2P(la,id1->ePlate,id2->ePlate);
2759 }
2760 WriteScanSet( idset ,*ss );
2761 SafeDelete(ss); SafeDelete(ssu);
2762}

◆ UpdateSetWithAff() [3/3]

void EdbScanProc::UpdateSetWithAff ( EdbID  idset,
EdbAffine2D  aff 
)

in this function the geometry of the brick of idset is updated with the given affine transformations

2731{
2733 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2734 int n = ss->eIDS.GetEntries();
2735 for(int i=0; i<n; i++) {
2736 EdbID *id = ss->GetID(i);
2737 EdbPlateP *p = ss->GetPlate(id->ePlate);
2738 if(p) {
2739 p->GetAffineXY()->Transform(&aff);
2740 }
2741 }
2742 WriteScanSet( idset ,*ss );
2743 SafeDelete(ss);
2744}

◆ UpdateSetWithPlatePar() [1/2]

void EdbScanProc::UpdateSetWithPlatePar ( EdbID  id)
2766{
2767 EdbScanSet *ss = ReadScanSet(idset); if(!ss) return;
2769 WriteScanSet( idset ,*ss );
2770 SafeDelete(ss);
2771}
void UpdateSetWithPlatePar(EdbID id)
Definition: EdbScanProc.cxx:2765

◆ UpdateSetWithPlatePar() [2/2]

void EdbScanProc::UpdateSetWithPlatePar ( EdbScanSet ss)
2775{
2776 int n = ss.eIDS.GetEntries();
2777 Log(3,"EdbScanProc::UpdateSetWithPlatePar","set with %d plates",n);
2778 for(int i=0; i<n; i++) {
2779 EdbID *id = ss.GetID(i);
2780 EdbPlateP *plate = ss.GetPlate(id->ePlate);
2781 if(!plate) Log(1,"EdbScanProc::UpdateSetWithPlatePar","ERROR! plate %d do not found!",id->ePlate);
2782 //printf("plate %d before\n",i); plate->Print();
2783 if(plate) ReadPiecePar( *id, *plate);
2784 //printf("after\n"); plate->Print();
2785 }
2786}
bool ReadPiecePar(EdbID id, EdbPlateP &plate)
Definition: EdbScanProc.cxx:115

◆ WaitFileReady()

bool EdbScanProc::WaitFileReady ( const char *  fname_)
1881 {//waits file copied/moved, in ready state
1882time_t t0 = time(0);
1883 const int dt=5; //wait max 5 sec till file ready
1884 const int dtupd=500; //wait 500 msec to check if file is updating
1885 const int dtslp=100; //wait 100 msec before recheck
1886
1887 bool ready = false;
1888 LogPrint(0,2,"WaitFileReady","source file \"%s\"\n",fname_);
1889 while(t0+dt > time(0) && !ready){
1890 FILE *f=fopen(fname_, "r");
1891 if(f != NULL){
1892 fclose(f);
1893 //printf("file there\n");
1894 struct stat statbuf1, statbuf2;
1895 int v=stat(fname_, &statbuf1);
1896 if (v != -1) {
1897 if(statbuf1.st_size != 0){
1898 gSystem->Sleep(dtupd);
1899 if (stat(fname_, &statbuf2) != -1) {
1900 if(statbuf2.st_size == statbuf1.st_size){
1901 ready=true;
1902 }else{
1903 //printf("file updating\n");
1904 }
1905 }
1906 }
1907 }
1908 //printf("%d\n", v);
1909 }else{
1910 //printf("file not there\n");
1911 gSystem->Sleep(dtslp);
1912
1913 }
1914 }
1915 LogPrint(0,2,"WaitFileReady","%s\n", ready ? "file is ready." : "file waiting timeout!");
1916 return ready;
1917}

◆ 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:1646

◆ WriteMarksSet()

int EdbScanProc::WriteMarksSet ( EdbMarksSet ms,
int  brick,
const char *  filename,
char  spacer = '_',
char  shape = 'S',
int  plate = 1 
)

Reads an EdbMarksSet object and uses its content to write a map file
With "spacer" you can choose the character that you want to insert
between the words in the map file. Default is '_'

3049{
3053 char str[256];
3054 sprintf(str,"%s/b%6.6d/b%6.6d.%s",
3056
3057 ms.WriteMap(str,spacer,shape,plate);
3058
3059 return(1);
3060}
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 
)

write root predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix

1647{
1649 int n = pred.N();
1650 TString str;
1651 MakeFileName(str,id,suffix);
1652
1653 // checking for the existing directory
1654
1655 FileStat_t buf;
1656
1657 if (gSystem->GetPathInfo(gSystem->DirName(str), buf)) {
1658 if (gEDBDEBUGLEVEL > 0) {
1659 cout << "ERROR! Directory " << gSystem->DirName(str)
1660 << " does not exist.\n";
1661 cout << "Please run scanning procedure for the plate number " << id[1]
1662 << endl;
1663 }
1664 return 0;
1665 }
1666
1667 TFile f(str.Data(), "RECREATE");
1668
1669 if (flag < 0) pred.Write("pat");
1670 else {
1671 EdbPattern pat;
1672 pat.SetID(pred.ID());
1673 pat.SetPID(pred.PID());
1674 pat.SetX(pred.X());
1675 pat.SetY(pred.Y());
1676 pat.SetZ(pred.Z());
1677 for (Int_t i = 0; i < pred.N(); i++)
1678 if (pred.GetSegment(i)->Flag()==flag) pat.AddSegment(*(pred.GetSegment(i)));
1679 n = pat.N();
1680 pat.Write("pat");
1681 }
1682 f.Close();
1683 LogPrint(id[0],2,"WritePatRoot","%s with %d predictions with flag: %d",
1684 str.Data(),n,flag);
1685 return n;
1686}
int PID() const
Definition: EdbPattern.h:320
int ID() const
Definition: EdbPattern.h:319
void SetY(float y)
Definition: EdbPattern.h:80
void SetX(float x)
mandatory virtual functions:
Definition: EdbPattern.h:79

◆ 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 
)

write ascii predictions file as .../bXXXXXX/pYYY/a.a.a.a.suffix
man - for manual check by sysal

  • overvise complete format
1496{
1500 EdbSegP *s=0;
1501 TString str;
1502 MakeFileName(str,id,suffix);
1503 FILE *f = fopen(str.Data(),"w");
1504 if(!f) { LogPrint(id[0],1,"WritePatTXT","ERROR! can not open file %s", str.Data()); return 0; }
1505 for(int i=0; i<pred.N(); i++) {
1506 s = pred.GetSegment(i);
1507 if (flag > -1 && flag != s->Flag()) continue;
1508 if( strcmp(suffix,"man") >=0 )
1509 fprintf(f,"%8d %11.2f %11.2f %8.4f %8.4f %d\n",
1510 s->ID(),s->X(),s->Y(),s->TX(),s->TY(),s->Flag());
1511 else
1512 fprintf(f,"%8d %11.2f %11.2f %8.4f %8.4f %9.2f %9.2f %8.4f %8.4f %d\n",
1513 s->ID(),s->X(),s->Y(),s->TX(),s->TY(),s->SX(),s->SY(),s->STX(),s->STY(),s->Flag());
1514 }
1515 fclose(f);
1516 LogPrint(id[0],2,"WritePatTXT","%s with %d predictions with flag: %d", str.Data(),pred.N(), flag);
1517 return pred.N();
1518}

◆ 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" 
)

write ascii found candidates file as .../bXXXXXX/pYYY/a.a.a.a.suffix

  • new id = 1000*id + 100* [BT:0; MT1:1; MT2:2]+ #
1522{
1525 TString sbtname;
1526 MakeFileName(sbtname,id,"sbt.root");
1527
1528 TString outname;
1529 MakeFileName(outname,id,suffix);
1530
1531
1532 FILE *f = fopen(outname.Data(),"w");
1533 if(!f) { LogPrint(id[0],1,"WriteSBcndTXT","ERROR! can not open file %s", outname.Data()); return 0; }
1534 int num=0;
1535
1536
1538 TTree *st = t.InitSBtree(sbtname.Data(), "OPEN");
1539 int n = st->GetEntries();
1540 EdbSegP *s=0;
1541 for(int i =0; i<n; ++i){
1542 t.GetSBtreeEntry(i, *st);
1543 int pid = t.eNext.ID();
1544 for(int j = 0; j<t.eScnd.N(); ++j){
1545 s=t.eScnd.GetSegment(j);
1546 fprintf(f, "%d\t%.3lf\t%.3lf\t%.5lf\t%.5lf\t0\n", pid*1000+j, s->X(), s->Y(), s->TX(), s->TY());
1547 num++;
1548 }
1549 for(int j = 0; j<t.eS1cnd.N(); ++j){
1550 s=t.eS1cnd.GetSegment(j);
1551 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());
1552 num++;
1553 }
1554 for(int j = 0; j<t.eS2cnd.N(); ++j){
1555 s=t.eS2cnd.GetSegment(j);
1556 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());
1557 num++;
1558 }
1559 }
1560 t.CloseSBtree(st);
1561
1562
1563 fclose(f);
1564 LogPrint(id[0],2,"WriteSBcndTXT","%s with %d predictions", outname.Data(),num);
1565 return num;
1566}

◆ WriteSBTrack()

int EdbScanProc::WriteSBTrack ( EdbTrackP t,
int  path,
EdbID  id 
)
1387{
1388 if(!CheckBrickDir(id)) return 0;
1389 TString name;
1390 MakeFileName(name,id,"sb.root",false);
1391 TFile f(name.Data(),"UPDATE");
1392 if(!f.IsOpen()) return 0;
1393 sb.Write(Form("sb_%d",path));
1394 f.Close();
1395 return 1;
1396}

◆ WriteSBTracks()

int EdbScanProc::WriteSBTracks ( TObjArray &  tracks,
EdbID  id 
)
1400{
1401 if(!CheckBrickDir(id)) return 0;
1402 TString name;
1403 MakeFileName(name,id,"sb.root",false);
1404 //TFile f(name.Data(),"UPDATE");
1405 TFile f(name.Data(),"RECREATE");
1406 if(!f.IsOpen()) return 0;
1407 tracks.Write("sbtracks",1);
1408 f.Close();
1409 LogPrint(id.eBrick,2,"WriteSBTracks","%d tracks are written into %s", tracks.GetEntries(), name.Data());
1410 return 1;
1411}

◆ WriteScanSet()

int EdbScanProc::WriteScanSet ( EdbID  id,
EdbScanSet ss 
)
1429{
1430 if(!CheckBrickDir(id)) return 0;
1431 TString name;
1432 MakeFileName(name,id,"set.root",false);
1433 TFile f(name.Data(),"UPDATE");
1434 if(!f.IsOpen()) return 0;
1435 ss.Write("set");
1436 f.Purge(3); f.Close();
1437 return 1;
1438}

Member Data Documentation

◆ eParDir

TString EdbScanProc::eParDir

directory path for off-line processing parameters

◆ eProcDirClient

TString EdbScanProc::eProcDirClient

directory path for root data

◆ eProcDirServer

TString EdbScanProc::eProcDirServer

directory path for root data

◆ eServerCreatedRunName

TString EdbScanProc::eServerCreatedRunName
private

EdbRun file name that is created by scanserver side.


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