FEDRA emulsion software from the OPERA Collaboration
EdbRunTracking Class Reference

helper class for access to the run data More...

#include <EdbRunTracking.h>

Inheritance diagram for EdbRunTracking:
Collaboration diagram for EdbRunTracking:

Public Member Functions

void CheckZ (float &z1, float &z2)
 
 EdbRunTracking ()
 
 EdbRunTracking (const char *fname)
 
 EdbRunTracking (EdbRun *run)
 
int ExtrapolateCond (EdbScanCond &inputcond, int flag, EdbScanCond &outputcond)
 
int FindBestCandidate (EdbPattern &fndbt, EdbSegP &fnd, EdbPattern &cnd, float wmin, float wmindegrad, float chi2max)
 
int FindCandidateMT (EdbPattern &fnds1, EdbPattern &fnds2, EdbSegP &fnd)
 
int FindCandidates (EdbSegP &spred, EdbPattern &fndbt, EdbPattern &fnds1, EdbPattern &fnds2)
 
int FindCompliments (EdbSegP &s, EdbPattern &pat, TObjArray &found, float chi2max, TArrayF &chiarr)
 
int FindPrediction (EdbSegP &spred, EdbSegP &fndbt, EdbSegP &fnds1, EdbSegP &fnds2, EdbSegP &snewpred)
 
int FindTrack (EdbTrackP &pred, EdbTrackP &found, EdbPlateP &plate)
 
bool GetSBtreeEntry (int entry, TTree &tsbt)
 
int GetSegmentsForDB (EdbSegP &s, EdbSegP &s1, EdbSegP &s2)
 
void Print ()
 
void Set0 ()
 
void SetCondBT (EdbScanCond &cond)
 
void SetCondMT (EdbScanCond &cond)
 
void SetPred (const EdbSegP &pred)
 
void TransformFromPlateRS (EdbPlateP &plate)
 
int UpdateFlag (int flag, int status)
 
bool UpdateSBtree (TTree &tsbt, int idp[4], int idf[4])
 
virtual ~EdbRunTracking ()
 
- Public Member Functions inherited from EdbRunAccess
bool AcceptRawSegment (EdbView *view, int ud, EdbSegP &segP, int side, int entry)
 
bool AddRWDToRun (char *rwdname, const char *options="")
 
void AddSegmentCut (int ud, int xi, float min[5], float max[5])
 
void AddSegmentCut (int ud, int xi, float var[10])
 
void AddSegmentCut (int xi, const char *cutline)
 
void ApplyCorrections (const EdbView &view, EdbSegment &s, const int rs)
 
float CalculateSegmentChi2 (EdbSegment *seg, float sx, float sy, float sz)
 
int Check0Views (EdbPattern &pat, int thres=1)
 
int CheckEmptyViews (EdbPattern &pat)
 
float CheckMeanSegsPerView (EdbPattern &pat)
 
void CheckRunLine ()
 
TH2F * CheckUpDownOffsets ()
 
void CheckViewSize ()
 
void CheckViewStep ()
 
void CheckViewStep (int ud)
 
void ClearCuts ()
 
bool CopyRawDataXY (float x0, float y0, float dR, const char *file)
 
 EdbRunAccess ()
 
 EdbRunAccess (const char *fname)
 
 EdbRunAccess (EdbRun *run)
 
void FillDZMaps ()
 
int FillVP ()
 
int FirstArea () const
 
EdbScanCondGetCond (int ud)
 
EdbSegmentCutGetCut (int ud, int i)
 
float GetCutGR () const
 
int GetEntryXY (int ud, float x, float y)
 
EdbLayerGetLayer (int id)
 
EdbScanCondGetMakeCond (int ud)
 
EdbLayerGetMakeLayer (int id)
 
Int_t GetNareas ()
 
Int_t GetNviewsPerArea ()
 
int GetPatternData (EdbPattern &pat, int side, int nviews, TArrayI &srt, int &nrej)
 
int GetPatternDataForPrediction (int id, int side, EdbPattern &pat)
 
int GetPatternXY (EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
 
int GetPatternXYcut (EdbSegP &s, int side, EdbPattern &pat, float dr, float dt)
 
EdbSegmentGetRawSegment (EdbView &v, int sid, int rs=0)
 
EdbSegmentGetRawSegment (int vid, int sid, int rs=0)
 
EdbSegmentGetRawSegmentN (int vid, int sid, int rs=0)
 
float GetRawSegmentPix (EdbSegment *seg)
 
EdbRunGetRun () const
 
int GetViewsArea (int ud, TArrayI &entr, float xmin, float xmax, float ymin, float ymax)
 
int GetViewsArea (int ud, TArrayI &entr, int area, float &xmin, float &xmax, float &ymin, float &ymax)
 
int GetViewsAreaMarg (int ud, TArrayI &entr, int area, float xmarg, float ymarg)
 
int GetViewsXY (int ud, TArrayI &entr, float x, float y, float r=200.)
 
int GetVolumeArea (EdbPatternsVolume &vol, int area)
 
int GetVolumeData (EdbPatternsVolume &vol, int nviews, TArrayI &srt, int &nrej)
 
int GetVolumeXY (EdbSegP &s, EdbPatternsVolume &vol)
 
EdbPatternGetVP (int ud) const
 
void GuessNviewsPerArea ()
 
bool InitRun (const char *runfile=0, bool do_update=false)
 
bool InitRunFromRWC (char *rwcname, bool bAddRWD=true, const char *options="")
 
int LastArea () const
 
int NCuts (int ud)
 
float OverlapX (int ud)
 
float OverlapY (int ud)
 
bool PassCuts (int ud, EdbSegment &seg)
 
void Print ()
 
void PrintStat ()
 
void ReadVAfile ()
 
float SegmentWeight (const EdbSegment &s)
 
void Set0 ()
 
void SetCond (int ud, EdbScanCond &cond)
 
void SetCutBottom (int ud, float wmin)
 
void SetCutLeft (int ud, float wmin)
 
void SetCutRight (int ud, float wmin)
 
void SetCutTop (int ud, float wmin)
 
void SetPixelCorrection (const char *str)
 
bool SetSegmentAtExternalSurface (EdbSegment *seg, int side)
 
int ViewSide (const EdbView *view) const
 
float ViewX (const EdbView *view) const
 
float ViewY (const EdbView *view) const
 
virtual ~EdbRunAccess ()
 

Static Public Member Functions

static void CloseSBtree (TTree *tree)
 
static int GetBTHoles (int flag)
 
static int GetMTHoles (int flag)
 
static TTree * InitSBtree (const char *file_name="sbt.root", const char *mode="RECREATE")
 

Public Attributes

Float_t eChi2MaxBT
 (1.5) maximum chi2 accepted between prediction and basetrack candidates More...
 
Float_t eChi2MaxMT
 (1.6) maximum chi2 accepted between prediction and microtrack candidates More...
 
EdbScanCond eCondBT
 conditions for basetracks More...
 
EdbScanCond eCondMT
 conditions for microtracks More...
 
Float_t eDegradPos
 SigmaX = SigmaX(0) + degradPos * mth. More...
 
Float_t eDegradSlope
 SigmaTX = SigmaTX(0) + degradSlope * bth. More...
 
Float_t eDeltaR
 (20) More...
 
Float_t eDeltaRview
 (400) More...
 
Float_t eDeltaTheta
 (0.15) slope acceptance More...
 
Int_t eIdf [4]
 
Int_t eIdp [4]
 to read from sbt More...
 
EdbSegP eNext
 next prediction More...
 
EdbSegP ePred
 prediction More...
 
bool ePredictionScan
 if true use GetPatternDataForPrediction( spred.ID(), side, pat ); in FindCandidates (default is false) More...
 
Float_t ePreliminaryChi2MaxMT
 (1.6) / microtracks and basetracks selection More...
 
Float_t ePreliminaryPulsMinMT
 (6) _ preliminary cuts to microtracks candidates for More...
 
Float_t ePulsMinBT
 (18) More...
 
Float_t ePulsMinDegradBT
 (0) More...
 
Float_t ePulsMinDegradMT
 (0) More...
 
Float_t ePulsMinMT
 (10) mimimal number of grains accepted to select microtracks More...
 
EdbSegP eS
 
EdbSegP eS1
 
EdbPattern eS1cnd
 microtrack candidates passed all cuts More...
 
EdbPattern eS1pre
 the result of the preliminary selection of microtracks More...
 
EdbSegP eS2
 found segments More...
 
EdbPattern eS2cnd
 
EdbPattern eS2pre
 
EdbPattern eScnd
 basetracks candidates passed all cuts More...
 
EdbPattern eSpre
 preliminary selected basetracks More...
 
Int_t eStatus
 -1-nothing, 0-bt, 1-mt1, 2-mt2 More...
 
- Public Attributes inherited from EdbRunAccess
Int_t eAFID
 if =1 - use affine transformations of the fiducial marks More...
 
Int_t eCLUST
 1-use clusters, 0 - do not More...
 
Int_t eDoPixelCorr
 apply or not pix/mic correction when read data (default is 0) More...
 
Bool_t eDoViewAnalysis
 fill or not the histograms for optional view analysis More...
 
TGraph2D * eGraphDZ [3]
 keep the base/layer1/layer2 thickness calculated using eZ1/eZ2/eZ3/eZ4 for each view More...
 
TGraph2D * eGraphZ [4]
 keep z1/z2/z3/z4 surfaces using eZ1/eZ2/eZ3/eZ4 for each view More...
 
TCut eHeaderCut
 header cut to be applied in run initialization More...
 
EdbH2 eHViewXY [3]
 XY segments distribution in a view local coords. More...
 
Bool_t eInvertSides
 0 -do nothing, 1-invert sides More...
 
Float_t ePixelCorrX
 pixel/micron correction factor to be applied for data More...
 
Float_t ePixelCorrY
 
Int_t eTracking
 to test tracking alorithm: -1-ignored(def),0/1 - trackings to accept More...
 
Bool_t eUseDensityAsW
 in case of LASSO tracking possible to use eSigmaY as eW
More...
 
Bool_t eUseExternalSurface
 if true - set segment position corrisponding to the very external cluster More...
 
Int_t eWeightAlg
 0-puls, 1 - density(former eUseDensityAsW), 2-Likelyhood (eSigmaX) More...
 

Detailed Description

helper class for access to the run data

Constructor & Destructor Documentation

◆ EdbRunTracking() [1/3]

EdbRunTracking::EdbRunTracking ( )
inline
66: EdbRunAccess() { Set0(); };
void Set0()
Definition: EdbRunTracking.cxx:27

◆ EdbRunTracking() [2/3]

EdbRunTracking::EdbRunTracking ( EdbRun run)
inline
67: EdbRunAccess(run) { Set0(); };
EdbRun * run
Definition: check_raw.C:38

◆ EdbRunTracking() [3/3]

EdbRunTracking::EdbRunTracking ( const char *  fname)
inline
68: EdbRunAccess(fname) { Set0(); };
const char * fname
Definition: mc2raw.cxx:41

◆ ~EdbRunTracking()

virtual EdbRunTracking::~EdbRunTracking ( )
virtual

Member Function Documentation

◆ CheckZ()

void EdbRunTracking::CheckZ ( float &  z1,
float &  z2 
)
673{
674 EdbSegP *s1 = (EdbSegP*)(eS1pre.At(0));
675 EdbSegP *s2 = (EdbSegP*)(eS2pre.At(0));
676 if(s1&&s2)
677 {
678 z1=s1->Z();
679 z2=s2->Z();
680 }
681 else
682 {
683 z1 = 214;
684 z2 = 0;
685 }
686}
EdbPattern eS2pre
Definition: EdbRunTracking.h:32
EdbPattern eS1pre
the result of the preliminary selection of microtracks
Definition: EdbRunTracking.h:31
Definition: EdbSegP.h:21
Float_t Z() const
Definition: EdbSegP.h:153
EdbPoint * At(int i) const
Definition: EdbPattern.h:87
EdbSegP * s1
Definition: tlg2couples.C:29
EdbSegP * s2
Definition: tlg2couples.C:30

◆ CloseSBtree()

void EdbRunTracking::CloseSBtree ( TTree *  tree)
static
549{
550 tree->AutoSave();
551 TFile *f=0;
552 f = tree->GetCurrentFile();
553 if(f) {
554 f->Purge();
555 f->Close();
556 }
557 tree=0;
558}
FILE * f
Definition: RecDispMC.C:150

◆ ExtrapolateCond()

int EdbRunTracking::ExtrapolateCond ( EdbScanCond inputcond,
int  flag,
EdbScanCond outputcond 
)

TODO: tuning the dependency of sigma
NOTED by Artem: when we do jumping we have no "holes" stored in the flag, so this function do not
extrapolate errors correctly so one had to encrease the acceptance manually,
possible solution can be to add total plates number before the last found
track into the flag and use it only for extrapolatio

108{
114
115 int bth = GetBTHoles(flag);
116 int mth = GetMTHoles(flag);
117 outputcond = inputcond;
118 outputcond.SetSigma0( inputcond.SigmaX(0) + eDegradPos * mth,
119 inputcond.SigmaY(0) + eDegradPos * mth,
120 inputcond.SigmaTX(0) + eDegradSlope * bth,
121 inputcond.SigmaTY(0) + eDegradSlope * bth );
122 return(0);
123}
static int GetBTHoles(int flag)
Definition: EdbRunTracking.h:79
static int GetMTHoles(int flag)
Definition: EdbRunTracking.h:80
Float_t eDegradSlope
SigmaTX = SigmaTX(0) + degradSlope * bth.
Definition: EdbRunTracking.h:57
Float_t eDegradPos
SigmaX = SigmaX(0) + degradPos * mth.
Definition: EdbRunTracking.h:56
float SigmaTX(float ax) const
Definition: EdbScanCond.h:106
float SigmaTY(float ay) const
Definition: EdbScanCond.h:107
float SigmaX(float ax) const
Definition: EdbScanCond.h:102
void SetSigma0(float x, float y, float tx, float ty)
Definition: EdbScanCond.h:62
float SigmaY(float ay) const
Definition: EdbScanCond.h:103

◆ FindBestCandidate()

int EdbRunTracking::FindBestCandidate ( EdbPattern fndbt,
EdbSegP fnd,
EdbPattern cnd,
float  wmin,
float  wmindegrad,
float  chi2max 
)
310{
311 int n=0;
312 fnd.Set0();
313 fnd.SetChi2(10000.+chi2max);
314 for (int i=0; i<cand.N(); i++) {
315 EdbSegP *s = cand.GetSegment(i);
316 if ( s->W()<wmin+s->Chi2()*wmindegrad ) continue;
317 if ( s->Chi2()>chi2max ) continue;
318 n++;
319 passed.AddSegment(*s);
320 if (s->Chi2()<fnd.Chi2()) fnd.Copy(*s);
321 }
322 return n;
323}
Float_t Chi2() const
Definition: EdbSegP.h:157
void SetChi2(float chi2)
Definition: EdbSegP.h:135
void Copy(const EdbSegP &s)
Definition: EdbSegP.cxx:105
void Set0()
Definition: EdbSegP.cxx:30
s
Definition: check_shower.C:55

◆ FindCandidateMT()

int EdbRunTracking::FindCandidateMT ( EdbPattern fnds1,
EdbPattern fnds2,
EdbSegP fnd 
)
289{
290 EdbSegP s1,s2;
293 Log(2,"FindCandidateMT","Found %d+%d microtrack candidates after cuts",n1,n2);
294
295 if( n1==0&&n2==0 ) return 0;
296
297 if( s1.Chi2() <= s2.Chi2() ) {
298 fnd.Copy(s1);
299 return 1;
300 }
301 else {
302 fnd.Copy(s2);
303 return 2;
304 }
305 return 0;
306}
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
int FindBestCandidate(EdbPattern &fndbt, EdbSegP &fnd, EdbPattern &cnd, float wmin, float wmindegrad, float chi2max)
Definition: EdbRunTracking.cxx:309
Float_t eChi2MaxMT
(1.6) maximum chi2 accepted between prediction and microtrack candidates
Definition: EdbRunTracking.h:46
Float_t ePulsMinMT
(10) mimimal number of grains accepted to select microtracks
Definition: EdbRunTracking.h:44
Float_t ePulsMinDegradMT
(0)
Definition: EdbRunTracking.h:39
EdbPattern eS2cnd
Definition: EdbRunTracking.h:49
EdbPattern eS1cnd
microtrack candidates passed all cuts
Definition: EdbRunTracking.h:48

◆ FindCandidates()

int EdbRunTracking::FindCandidates ( EdbSegP spred,
EdbPattern fndbt,
EdbPattern fnds1,
EdbPattern fnds2 
)

Find microtracks and basetracks for the prediction segment "spred"
Selection criteria:
1) select all microtracks with (puls >= ePreliminaryPulsMinMT) (6) and (chi2 < ePreliminaryChi2MaxMT) for both side
2) select all basetracks by using the selected microtracks, with (chi2_bt < eChi2MaxBT)
Microtracks and basetracks in output are sorted according to chi2 (ascending order = the first one is the best one)
Input:
spred - track prediction
Output:
fnds1 - microtracks having puls>=ePreliminaryPulsMinMT and chi2<ePreliminaryChi2MaxMT
in the top side of the emulsion plate
fnds2 - microtracks having puls>=ePreliminaryPulsMinMT and chi2<ePreliminaryChi2MaxMT
in the bottom side of the emulsion plate
fndbt - basetracks built from the microtracks and (chi2_bt < eChi2MaxBT)

172{
187
188 ClearCuts();
189
190 EdbScanCond condBT;
191 ExtrapolateCond(eCondBT,spred.Flag(),condBT);
192 if (gEDBDEBUGLEVEL>=3) condBT.Print();
193
194 spred.SetZ(107.); // TODO!
195 spred.SetErrors();
196 condBT.FillErrorsCov( spred.TX(), spred.TY(), spred.COV() );
197
198 //EdbPVRec aview; //with 2 patterns of preselected microtracks
199 //aview.AddPattern( new EdbPattern(0,0,214)); // TODO! sequence??
200 //aview.AddPattern( new EdbPattern(0,0,0) );
201
202 float xmin[5]={-500, -500, spred.TX()-eDeltaTheta, spred.TY()-eDeltaTheta, ePreliminaryPulsMinMT }; //TODO!!
203 float xmax[5]={ 500, 500, spred.TX()+eDeltaTheta, spred.TY()+eDeltaTheta, 50 };
204
205 for(int side=1; side<=2; side++) {
206 EdbPattern pat;
207 AddSegmentCut(side,1,xmin,xmax);
208 if(ePredictionScan) GetPatternDataForPrediction( spred.ID(), side, pat );
209 else GetPatternXY( spred, side, pat, eDeltaRview);
210 Log(2,"FindCandidates","%d microtracks in side %d",pat.N(),side);
211
212 for(int i=0; i<pat.N(); i++) {
213 EdbSegP *s = pat.GetSegment(i);
214 s->SetErrors();
215 eCondMT.FillErrorsCov( spred.TX(), spred.TY(), s->COV() );
216 }
217
218 pat.FillCell(10,10,0.01,0.01); //divide view on this cells
219
220 TArrayF chi2arr(10000); //TODO!
221 TObjArray found;
222 FindCompliments( spred, pat, found, ePreliminaryChi2MaxMT, chi2arr );
223
224 for(int j=0; j<found.GetEntries(); j++) {
225 EdbSegP *s = (EdbSegP *)(found.At(j));
226 s->SetChi2(chi2arr[j]);
227 if (side==1) fnds1.AddSegment(*s);
228 else if(side==2) fnds2.AddSegment(*s);
229 }
230
231 }
232
233 // filling fndbt
234
235 EdbPattern bt;
236
237 for(int is1=0; is1<fnds1.N(); is1++) {
238 for(int is2=0; is2<fnds2.N(); is2++) {
239
240 EdbSegP *s1 = fnds1.GetSegment(is1);
241 EdbSegP *s2 = fnds2.GetSegment(is2);
242
243 float dx1=s1->X()-(spred.X()+spred.TX()*(s1->Z()-spred.Z()));
244 float dy1=s1->Y()-(spred.Y()+spred.TY()*(s1->Z()-spred.Z()));
245 float dx2=s2->X()-(spred.X()+spred.TX()*(s2->Z()-spred.Z()));
246 float dy2=s2->Y()-(spred.Y()+spred.TY()*(s2->Z()-spred.Z()));
247 float r = Sqrt( (dx1-dx2)*(dx1-dx2) + (dy1-dy2)*(dy1-dy2) );
248
249 if(r<eDeltaR) { // has good BT
250 EdbSegP s3;
251 s3.Copy(spred);
252 s3.SetX( 0.5*(s1->X() + s2->X()) );
253 s3.SetY( 0.5*(s1->Y() + s2->Y()) );
254 s3.SetZ( 0.5*(s1->Z() + s2->Z()) );
255 s3.SetTX( (s2->X() - s1->X()) / (s2->Z() - s1->Z()) );
256 s3.SetTY( (s2->Y() - s1->Y()) / (s2->Z() - s1->Z()) );
257 s3.SetW(s1->W()+s2->W());
258
259 s3.SetFlag(is2*10000+is1);
260
261 EdbSegP s4(spred);
262 float chi = EdbTrackFitter::Chi2Seg(&s4, &s3); // depends on the sequence (best defined should be first)
263 //float chi = EdbTrackFitter::Chi2SegM(spred, s3, s4, eCondBT, eCondBT);
264 if(chi<eChi2MaxBT) {
265 s3.SetChi2(chi);
266 bt.AddSegment(s3);
267 }
268 }
269 }
270 }
271
272 TArrayF chi2arr(bt.N());
273 for (int i=0;i<bt.N();i++) chi2arr[i]=bt.GetSegment(i)->Chi2();
274 TArrayI ind(bt.N());
275 TMath::Sort(bt.N(),chi2arr.GetArray(),ind.GetArray(),false);
276 for(int i=0; i<bt.N(); i++) {
277 EdbSegP *s = bt.GetSegment(ind[i]);
278 fndbt.AddSegment(*s);
279 }
280
281 Log(2,"FindCandidates","Found %d basetrack candidate in %d+%d preselected microtracks",fndbt.N(),fnds1.N(),fnds2.N());
282
283 return 1; //TODO!
284}
Definition: EdbPattern.h:273
void FillCell(float stepx, float stepy, float steptx, float stepty)
Definition: EdbPattern.cxx:1323
void ClearCuts()
Definition: EdbRunAccess.cxx:95
void AddSegmentCut(int xi, const char *cutline)
Definition: EdbRunAccess.cxx:1187
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
int ExtrapolateCond(EdbScanCond &inputcond, int flag, EdbScanCond &outputcond)
Definition: EdbRunTracking.cxx:107
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 eDeltaRview
(400)
Definition: EdbRunTracking.h:26
Float_t ePreliminaryChi2MaxMT
(1.6) / microtracks and basetracks selection
Definition: EdbRunTracking.h:29
int FindCompliments(EdbSegP &s, EdbPattern &pat, TObjArray &found, float chi2max, TArrayF &chiarr)
Definition: EdbRunTracking.cxx:126
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
bool ePredictionScan
if true use GetPatternDataForPrediction( spred.ID(), side, pat ); in FindCandidates (default is false...
Definition: EdbRunTracking.h:62
Float_t eDeltaTheta
(0.15) slope acceptance
Definition: EdbRunTracking.h:27
Definition: EdbScanCond.h:10
void Print() const
Definition: EdbScanCond.cxx:50
void FillErrorsCov(float tx, float ty, TMatrixD &cov)
Definition: EdbScanCond.cxx:161
void SetY(Float_t y)
Definition: EdbSegP.h:178
void SetErrors()
Definition: EdbSegP.h:90
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
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 X() const
Definition: EdbSegP.h:173
TMatrixD & COV() const
Definition: EdbSegP.h:123
void SetZ(float z)
Definition: EdbSegP.h:125
void SetTY(Float_t ty)
other functions
Definition: EdbSegP.h:180
void SetW(float w)
Definition: EdbSegP.h:132
Float_t Y() const
Definition: EdbSegP.h:174
Float_t W() const
Definition: EdbSegP.h:151
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
void SetFlag(int flag)
Definition: EdbSegP.h:130
Int_t Flag() const
Definition: EdbSegP.h:149
Int_t N() const
Definition: EdbPattern.h:86
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:72
static float Chi2Seg(EdbSegP *s1, EdbSegP *s2)
Definition: EdbTrackFitter.cxx:62
gEDBDEBUGLEVEL
Definition: energy.C:7
void r(int rid=2)
Definition: test.C:201

◆ FindCompliments()

int EdbRunTracking::FindCompliments ( EdbSegP s,
EdbPattern pat,
TObjArray &  found,
float  chi2max,
TArrayF &  chiarr 
)
127{
128 // return found sorted by increasing chi2
129
130 int nfound=0;
131 int maxcand=chiarr.GetSize();
132 TArrayF chi2arr(maxcand);
133 TObjArray arr(maxcand);
134 TArrayI ind(maxcand);
135
136 int nseg = pat.FindCompliments(s,arr,30,200); // acceptance (prelim): s.SX()*30; s.STX*200
137 // printf("\nnseg = %d\n",nseg);
138 if(nseg>maxcand) {
139 printf("Warning!: Too many segments %d, accept only the first %d \n", nseg, maxcand);
140 nseg = maxcand;
141 }
142 if(nseg<=0) return 0;
143
144 EdbSegP *s2=0;
145 for(int j=0; j<nseg; j++) {
146 s2 = (EdbSegP *)arr.At(j);
147 EdbSegP s3;
148 s3.Copy(s);
149 chi2arr[j] = EdbTrackFitter::Chi2Seg(&s3, s2);
150 //chi2arr[j] = EdbTrackFitter::Chi2SegM(s, *s2,s3,eCondBT,eCondMT);
151 }
152 TMath::Sort(nseg,chi2arr.GetArray(),ind.GetArray(),0);
153 // printf("pred = %f %f %f %f\n",s.X(),s.Y(),s.TX(),s.TY());
154 for(int j=0; j<nseg; j++) {
155 s2 = (EdbSegP *)arr.At(ind[j]);
156 // printf("j = %d, ind = %d, chi2 = %f %f\n",j,ind[j],chi2arr[ind[j]],chi2max);
157 // printf("Tx = %f %f %f %f\n",s2->X(),s2->Y(),s2->TX(),s2->TY());
158 if(chi2arr[ind[j]] > chi2max ) break;
159 chiarr[j] = chi2arr[ind[j]];
160 s2->SetMC(s.MCEvt(),s.MCTrack());
161 found.Add(s2);
162 nfound++;
163 }
164
165 // printf("nfound = %d\n",nfound);
166 return nfound;
167}
int FindCompliments(EdbSegP &s, TObjArray &arr, float nsig, float nsigt)
Definition: EdbPattern.cxx:1354
void SetMC(int mEvt, int mTrack)
Definition: EdbSegP.h:141

◆ FindPrediction()

int EdbRunTracking::FindPrediction ( EdbSegP spred,
EdbSegP fndbt,
EdbSegP fnds1,
EdbSegP fnds2,
EdbSegP snewpred 
)

Select the best (micro or base) track matching with the prediction
and prepare for a new search.
Selection criteria: 1) Call FindCandidates having the list of basetrack and microtrack candidates
2) Call FindCandidateBT which looks for the best basetrack, if any
3) If no basetrack is found, call FindCandidateMT which looks fot the best microtrack, if any.
Microtracks accepted shold satisfy the following cut: (puls >= ePulsMinMT) (10) and (chi2 < eChi2MaxMT)
Input:
spred - track prediction
Output:

  • if a basetrack is found (status 0):
    fndbt - basetrack found
    fnds1 - microtrack top contained in the found basetrack
    fnds2 - microtrack bottom contained in the found basetrack
    snewpred - fndbt with flag equal to 0
  • if a microtrack top is found (status 1):
    fndbt - dummy
    fnds1 - microtrack top found
    fnds2 - dummy
    snewpred - a track with slopes from the prediction spred and positions
    from an extrapolation of fnds1. The flag is updated by UpdateFlag
  • if a microtrack bottom is found (status 2):
    fndbt - dummy
    fnds1 - dummy
    fnds2 - microtrack bottom found
    snewpred - a track with slopes from the prediction spred and positions
    from an extrapolation of fnds2. The flag is updated by UpdateFlag
  • if nothing is found (status -1):
    fndbt - dummy
    fnds1 - dummy
    fnds2 - dummy
    snewpred - the prediction spred. The flag is updated by UpdateFlag
    Return:
    -1: no track found
    0: basetrack found
    1: microtrack top found
    2: microtrack bottom found
327{
371
372 //EdbPattern vfndbt,vfnds1,vfnds2;
373
374 eStatus = -1;
375 SetPred(spred);
376 FindCandidates( spred, eSpre, eS1pre, eS2pre );
377
378 EdbSegP fnd;
380 if ( nbt > 0 ) {
381 eS.Copy(fnd);
382 eS1.Copy(*(eS1pre.GetSegment(fnd.Flag()%10000)));
383 eS2.Copy(*(eS2pre.GetSegment(fnd.Flag()/10000)));
384 eS.SetFlag(0);
385 eNext.Copy(fnd);
386 eNext.SetFlag(UpdateFlag(spred.Flag(),0)); // if bt found : bth=0, mth=0, tb=0
387 eStatus = 0;
388 }
389
390 int if_mt = FindCandidateMT(eS1pre,eS2pre,fnd);
391 if(eStatus!=-1) goto RESUME;
392
393 switch(if_mt) {
394 case 0: // find nothing
395 eNext.Copy(spred);
396 eNext.SetFlag(UpdateFlag(spred.Flag(),-1)); // hole: if not found: bth++, mth++, tb= keep last value
397 eNext.SetW(0);
398 eStatus = -1; goto RESUME;
399 case 1: // best microtrack is on the 1-st side
400 eS1.Copy(fnd);
401 eNext.Copy(spred);
402 eNext.SetX( fnd.X() + spred.TX()*(spred.Z()-fnd.Z()) );
403 eNext.SetY( fnd.Y() + spred.TY()*(spred.Z()-fnd.Z()) );
404 eNext.SetZ(spred.Z());
405 eNext.SetFlag(UpdateFlag(spred.Flag(),1)); // if mt found : bth++, mth=0, tb=1
406 eNext.SetW(fnd.W());
407 eStatus = 1; goto RESUME;
408 case 2: // best microtrack is on the 2-d side
409 eS2.Copy(fnd);
410 eNext.Copy(spred);
411 eNext.SetX( fnd.X() + spred.TX()*(spred.Z()-fnd.Z()) );
412 eNext.SetY( fnd.Y() + spred.TY()*(spred.Z()-fnd.Z()) );
413 eNext.SetZ(spred.Z());
414 eNext.SetFlag(UpdateFlag(spred.Flag(),2)); // if mt found : bth++, mth=0, tb=2
415 eNext.SetW(fnd.W());
416 eStatus = 2; goto RESUME;
417 }
418
419 RESUME:
420
421 Log(2,"FindPrediction","status = %d, good candidates [s:s1:s2] %d:%d:%d ; preliminary [s:s1:s2] %d:%d:%d",
422 eStatus,
423 eScnd.N(),eS1cnd.N(),eS2cnd.N(),
424 eSpre.N(),eS1pre.N(),eS2pre.N()
425 );
426 snewpred.Copy(eNext);
427 fndbt.Copy(eS);
428 fnds1.Copy(eS1);
429 fnds2.Copy(eS2);
430 return eStatus;
431}
EdbPattern eScnd
basetracks candidates passed all cuts
Definition: EdbRunTracking.h:42
Float_t ePulsMinDegradBT
(0)
Definition: EdbRunTracking.h:45
Float_t ePulsMinBT
(18)
Definition: EdbRunTracking.h:38
int FindCandidates(EdbSegP &spred, EdbPattern &fndbt, EdbPattern &fnds1, EdbPattern &fnds2)
Definition: EdbRunTracking.cxx:171
int UpdateFlag(int flag, int status)
Definition: EdbRunTracking.cxx:88
EdbSegP eS
Definition: EdbRunTracking.h:52
Int_t eStatus
-1-nothing, 0-bt, 1-mt1, 2-mt2
Definition: EdbRunTracking.h:54
void SetPred(const EdbSegP &pred)
Definition: EdbRunTracking.cxx:52
int FindCandidateMT(EdbPattern &fnds1, EdbPattern &fnds2, EdbSegP &fnd)
Definition: EdbRunTracking.cxx:288
EdbPattern eSpre
preliminary selected basetracks
Definition: EdbRunTracking.h:36
EdbSegP eNext
next prediction
Definition: EdbRunTracking.h:53
EdbSegP eS1
Definition: EdbRunTracking.h:52
EdbSegP eS2
found segments
Definition: EdbRunTracking.h:52

◆ FindTrack()

int EdbRunTracking::FindTrack ( EdbTrackP pred,
EdbTrackP found,
EdbPlateP plate 
)

look for tracks in this plate
track - input track in brick RS - will be updated on output
plate - all plate parameters including affine transformation plate-to-brick

576{
580
581 int status=-100;
582 float DZmax = 1350*100;
583
584 EdbAffine2D p2b(*(plate.GetAffineXY())); // from plate to brick
585 EdbAffine2D b2p(p2b); b2p.Invert(); // from brick to plate
586 EdbSegP ps;
587
588 float dz = pred.MakePredictionTo(plate.Z(), ps);
589 printf("EdbRunTracking::FindTrack: dz: %f - %f = %f\n", plate.Z(), pred.Z(), dz );
590
591 if(Abs(dz)>DZmax) return status;
592 if(GetBTHoles(pred.Flag())>5) return status;
593 if(GetMTHoles(pred.Flag())>3) return status;
594
595 ps.SetFlag(pred.Flag());
596 ps.PrintNice();
597 ps.Transform(&b2p); // plate.Transoform(seg) ???
598 ps.PrintNice();
599
600 EdbSegP fndbt, fnds1, fnds2, snewpred;
601 status = FindPrediction( ps, fndbt, fnds1, fnds2, snewpred ); // -1: not found; 0-bt, 1-bot, 2-top
602 found.SetFlag(snewpred.Flag());
603 fnds1.PrintNice();
604 fnds2.PrintNice();
605
606 TransformFromPlateRS(plate); // transform all components into brick RS
607
608 if(status>=0) {
609 found.AddSegment( new EdbSegP(eNext) );
610 found.AddSegmentF( new EdbSegP(ePred) ); // add prediction as "fitted segment" because it is an extrapolation
611 found.SetSegmentsTrack();
612 }
613
614 Log(2,"EdbRunTracking::FindTracks","status = %d",status);
615 return status;
616}
brick dz
Definition: RecDispMC.C:107
Definition: EdbAffine.h:17
void TransformFromPlateRS(EdbPlateP &plate)
Definition: EdbRunTracking.cxx:619
EdbSegP ePred
prediction
Definition: EdbRunTracking.h:51
int FindPrediction(EdbSegP &spred, EdbSegP &fndbt, EdbSegP &fnds1, EdbSegP &fnds2, EdbSegP &snewpred)
Definition: EdbRunTracking.cxx:326
void PrintNice() const
Definition: EdbSegP.cxx:392
virtual void Transform(const EdbAffine2D *a)
void AddSegmentF(EdbSegP *s)
Definition: EdbPattern.h:233
void AddSegment(EdbSegP *s)
Definition: EdbPattern.h:214
float MakePredictionTo(Float_t z, EdbSegP &ss)
Definition: EdbPattern.cxx:1050
int SetSegmentsTrack(int id)
Definition: EdbPattern.h:246
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1
float DZmax
Definition: check_vertex.C:28

◆ GetBTHoles()

static int EdbRunTracking::GetBTHoles ( int  flag)
inlinestatic
79{ return(flag/10000); }

◆ GetMTHoles()

static int EdbRunTracking::GetMTHoles ( int  flag)
inlinestatic
80{ return((flag/100)%100); }

◆ GetSBtreeEntry()

bool EdbRunTracking::GetSBtreeEntry ( int  entry,
TTree &  tsbt 
)
517{
518 EdbSegP *s_pred = &ePred, *s_bt = &eS, *s_mt1=&eS1, *s_mt2=&eS2, *s_next=&eNext;
519
520 tsbt.SetBranchAddress("idpred",eIdp);
521 tsbt.SetBranchAddress("idfound",eIdf);
522 tsbt.SetBranchAddress("stat",&eStatus);
523 tsbt.SetBranchAddress("pred.", &s_pred);
524 tsbt.SetBranchAddress("s.", &s_bt);
525 tsbt.SetBranchAddress("s1.", &s_mt1);
526 tsbt.SetBranchAddress("s2.", &s_mt2);
527 tsbt.SetBranchAddress("next.", &s_next);
528
529 TClonesArray *s_cnd = eScnd.GetSegments();
530 tsbt.SetBranchAddress("scnd", &s_cnd);
531 TClonesArray *s1_cnd = eS1cnd.GetSegments();
532 tsbt.SetBranchAddress("s1cnd", &s1_cnd);
533 TClonesArray *s2_cnd = eS2cnd.GetSegments();
534 tsbt.SetBranchAddress("s2cnd", &s2_cnd);
535
536 TClonesArray *s_pre = eSpre.GetSegments();
537 tsbt.SetBranchAddress("spre", &s_pre);
538 TClonesArray *s1_pre = eS1pre.GetSegments();
539 tsbt.SetBranchAddress("s1pre", &s1_pre);
540 TClonesArray *s2_pre = eS2pre.GetSegments();
541 tsbt.SetBranchAddress("s2pre", &s2_pre);
542
543 tsbt.GetEntry(entry);
544 return true;
545}
TLegendEntry * entry
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:130
Int_t eIdp[4]
to read from sbt
Definition: EdbRunTracking.h:59
Int_t eIdf[4]
Definition: EdbRunTracking.h:60
TClonesArray * GetSegments() const
Definition: EdbPattern.h:69

◆ GetSegmentsForDB()

int EdbRunTracking::GetSegmentsForDB ( EdbSegP s,
EdbSegP s1,
EdbSegP s2 
)

return s,s1,s2 if status >=0, create fake microtracks if necessary
for fakes: seg->GetPuls(), seg->GetVolume(), seg->GetSigmaX() //0, 0, -1

690{
693 float z1=0,z2=0;
694 CheckZ(z1,z2);
695 s.Copy(eNext); //has z in the center of base (107)
696 if (eStatus==0) // both microtracks and basetrack found
697 {
698 s1.Copy(eS1);
699 s2.Copy(eS2);
700 }
701 else if (eStatus==1) // s1 found
702 {
703 s1.Copy(eS1);
704 s2.Copy(eNext);
705 s2.PropagateTo(z1);
706 s2.SetW(0); s2.SetChi2(0);
707 }
708 else if (eStatus==2) // s1 found
709 {
710 s2.Copy(eS2);
711 s1.Copy(eNext);
712 s1.PropagateTo(z2);
713 s1.SetW(0); s1.SetChi2(0);
714 }
715 else
716 {
717 s1.Copy(eNext);
718 s2.Copy(eNext);
719 }
720 Log(2,"EdbRunTracking::GetSegmentsForDB","status = %d, z1=%f z2= %f",eStatus,s1.Z(),s2.Z());
721 return eStatus;
722}
void CheckZ(float &z1, float &z2)
Definition: EdbRunTracking.cxx:672
void PropagateTo(float z)
Definition: EdbSegP.cxx:293

◆ InitSBtree()

TTree * EdbRunTracking::InitSBtree ( const char *  file_name = "sbt.root",
const char *  mode = "RECREATE" 
)
static
436{
437 const char *tree_name="sbt";
438 TTree *tree=0;
439 if (!tree) {
440 TFile *f = new TFile(file_name,mode);
441 if (f) tree = (TTree*)f->Get(tree_name);
442 if(!tree) {
443
444 f->cd();
445 tree = new TTree(tree_name,tree_name);
446 tree->SetMaxTreeSize(15000000000LL); //set 15 Gb file size limit)
447
448 Int_t idp[4], idf[4], stat;
449 EdbSegP *s_pred = 0, *s_bt = 0, *s_mt1=0, *s_mt2=0, *s_next=0;
450 TClonesArray *scnd = new TClonesArray("EdbSegP");
451 TClonesArray *s1cnd = new TClonesArray("EdbSegP");
452 TClonesArray *s2cnd = new TClonesArray("EdbSegP");
453 TClonesArray *spre = new TClonesArray("EdbSegP");
454 TClonesArray *s1pre = new TClonesArray("EdbSegP");
455 TClonesArray *s2pre = new TClonesArray("EdbSegP");
456
457 tree->Branch("idpred",idp,"idp[4]/I");
458 tree->Branch("idfound",idf,"idf[4]/I");
459 tree->Branch("stat",&stat,"stat/I");
460 tree->Branch("pred.", "EdbSegP", &s_pred);
461 tree->Branch("s.", "EdbSegP", &s_bt);
462 tree->Branch("s1.", "EdbSegP", &s_mt1);
463 tree->Branch("s2.", "EdbSegP", &s_mt2);
464 tree->Branch("next.", "EdbSegP", &s_next);
465 tree->Branch("scnd",&scnd);
466 tree->Branch("s1cnd",&s1cnd);
467 tree->Branch("s2cnd",&s2cnd);
468 tree->Branch("spre",&spre);
469 tree->Branch("s1pre",&s1pre);
470 tree->Branch("s2pre",&s2pre);
471 tree->Write();
472 }
473 }
474
475 if(!tree) Log(1,"InitSBtree","ERROR!!! can't initialize tree at %s as %s\n",file_name,mode);
476 return tree;
477}

◆ Print()

void EdbRunTracking::Print ( )
67{
68 printf("EdbRunTracking selection criteria:\n");
69 printf("Preliminary mt selection:\n");
70 printf(" eDeltaRview = %5.3f\n", eDeltaRview);
71 printf(" eDeltaTheta = %5.3f\n", eDeltaTheta);
72 printf(" ePreliminaryPulsMinMT = %3.1f\n", ePreliminaryPulsMinMT);
73 printf(" ePreliminaryChi2MaxMT = %5.3f\n", ePreliminaryChi2MaxMT);
74 printf("Preliminary bt selection:\n");
75 printf(" eDeltaR = %3.1f\n", eDeltaR);
76 printf(" eChi2MaxBT = %5.3f\n", eChi2MaxBT);
77 printf("Final bt selection:\n");
78 printf(" ePulsMinBT = %3.1f\n", ePulsMinBT);
79 printf(" ePulsMinDegradBT = %3.1f\n", ePulsMinDegradBT);
80 printf("Final mt selection:\n");
81 printf(" ePulsMinMT = %3.1f\n", ePulsMinMT);
82 printf(" ePulsMinDegradMT = %3.1f\n", ePulsMinDegradMT);
83 printf(" eChi2MaxMT = %5.3f\n", eChi2MaxMT);
84 printf("\n");
85}

◆ Set0()

void EdbRunTracking::Set0 ( )
28{
31
32 eDeltaRview = 400;
33 eDeltaTheta = 0.15;
36
37 eDeltaR = 20;
38 ePulsMinBT = 18;
40 eChi2MaxBT = 2.5;
41
42 eChi2MaxMT = 1.6;
44 ePulsMinMT = 10.;
45
46 eDegradPos = 0;
47 eDegradSlope = 0;
48 ePredictionScan = false;
49}
void SetDefault()
Definition: EdbScanCond.cxx:16

◆ SetCondBT()

void EdbRunTracking::SetCondBT ( EdbScanCond cond)
inline
74{ eCondBT = cond; }

◆ SetCondMT()

void EdbRunTracking::SetCondMT ( EdbScanCond cond)
inline
73{ eCondMT = cond; }

◆ SetPred()

void EdbRunTracking::SetPred ( const EdbSegP pred)
53{
54 ePred.Copy(pred);
55 eNext.Set0();
56 eS.Set0(); eS1.Set0(); eS2.Set0();
57 eS1cnd.Reset();
58 eS2cnd.Reset();
59 eScnd.Reset();
60 eS1pre.Reset();
61 eS2pre.Reset();
62 eSpre.Reset();
63}
void Reset()
Definition: EdbPattern.cxx:1509

◆ TransformFromPlateRS()

void EdbRunTracking::TransformFromPlateRS ( EdbPlateP plate)
620{
621 EdbAffine2D p2b(*(plate.GetAffineXY())); // from plate to brick
622
623 ePred.Transform(&p2b);
624 eNext.Transform(&p2b);
625 eS.Transform(&p2b);
626 eS1.Transform(&p2b);
627 eS2.Transform(&p2b);
628 eScnd.Transform(&p2b);
629 eS1cnd.Transform(&p2b);
630 eS2cnd.Transform(&p2b);
631 eSpre.Transform(&p2b);
632 eS1pre.Transform(&p2b);
633 eS2pre.Transform(&p2b);
634
635 ePred.SetPID( plate.ID() );
636 eNext.SetPID( plate.ID() );
637 eS.SetPID( plate.ID() );
638 eS1.SetPID( plate.ID() );
639 eS2.SetPID( plate.ID() );
640 for(int i=0; i<eScnd.N(); i++) eScnd.GetSegment(i)->SetPID( plate.ID() );
641 for(int i=0; i<eS1cnd.N(); i++) eS1cnd.GetSegment(i)->SetPID( plate.ID() );
642 for(int i=0; i<eS2cnd.N(); i++) eS2cnd.GetSegment(i)->SetPID( plate.ID() );
643 for(int i=0; i<eSpre.N(); i++) eSpre.GetSegment(i)->SetPID( plate.ID() );
644 for(int i=0; i<eS1pre.N(); i++) eS1pre.GetSegment(i)->SetPID( plate.ID() );
645 for(int i=0; i<eS2pre.N(); i++) eS2pre.GetSegment(i)->SetPID( plate.ID() );
646
647 ePred.SetZ( plate.Z() );
648 eNext.SetZ( plate.Z() );
649 eS.SetZ( plate.Z() );
650 eS1.SetZ( plate.GetLayer(1)->Z() + plate.Z() );
651 eS2.SetZ( plate.GetLayer(2)->Z() + plate.Z() );
652 for(int i=0; i<eScnd.N(); i++) eScnd.GetSegment(i)->SetZ( plate.Z() );
653 for(int i=0; i<eS1cnd.N(); i++) eS1cnd.GetSegment(i)->SetZ( plate.GetLayer(1)->Z() + plate.Z() );
654 for(int i=0; i<eS2cnd.N(); i++) eS2cnd.GetSegment(i)->SetZ( plate.GetLayer(2)->Z() + plate.Z() );
655 for(int i=0; i<eSpre.N(); i++) eSpre.GetSegment(i)->SetZ( plate.Z() );
656 for(int i=0; i<eS1pre.N(); i++) eS1pre.GetSegment(i)->SetZ( plate.GetLayer(1)->Z() + plate.Z() );
657 for(int i=0; i<eS2pre.N(); i++) eS2pre.GetSegment(i)->SetZ( plate.GetLayer(2)->Z() + plate.Z() );
658
659 eNext.SetDZ( plate.GetLayer(0)->DZ() );
660 eS.SetDZ( plate.GetLayer(0)->DZ() );
661 eS1.SetDZ( plate.GetLayer(1)->DZ());
662 eS2.SetDZ( plate.GetLayer(2)->DZ());
663 for(int i=0; i<eScnd.N(); i++) eScnd.GetSegment(i)->SetDZ( plate.GetLayer(0)->DZ() );
664 for(int i=0; i<eS1cnd.N(); i++) eS1cnd.GetSegment(i)->SetDZ( plate.GetLayer(1)->DZ() );
665 for(int i=0; i<eS2cnd.N(); i++) eS2cnd.GetSegment(i)->SetDZ( plate.GetLayer(2)->DZ() );
666 for(int i=0; i<eSpre.N(); i++) eSpre.GetSegment(i)->SetDZ( plate.GetLayer(0)->DZ() );
667 for(int i=0; i<eS1pre.N(); i++) eS1pre.GetSegment(i)->SetDZ( plate.GetLayer(1)->DZ() );
668 for(int i=0; i<eS2pre.N(); i++) eS2pre.GetSegment(i)->SetDZ( plate.GetLayer(2)->DZ() );
669}
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:155
void SetPID(int pid)
Definition: EdbSegP.h:129
void SetDZ(float dz)
Definition: EdbSegP.h:126

◆ UpdateFlag()

int EdbRunTracking::UpdateFlag ( int  flag,
int  status 
)

status: -1 -found nothing, 0-bt, 1-mt1, 2-mt2

89{
91
92 int bth = flag/10000;
93 int mth = (flag/100)%100;
94 int tb = flag%10;
95
96 switch (status) {
97 case -1: bth++; mth++; break;
98 case 0: bth=0; mth=0; tb=0; break;
99 case 1: bth++; mth=0; tb=1; break;
100 case 2: bth++; mth=0; tb=2; break;
101 }
102
103 return( bth*10000+mth*100+tb );
104}

◆ UpdateSBtree()

bool EdbRunTracking::UpdateSBtree ( TTree &  tsbt,
int  idp[4],
int  idf[4] 
)
484{
485 EdbSegP *s_pred = &ePred, *s_bt = &eS, *s_mt1=&eS1, *s_mt2=&eS2, *s_next=&eNext;
486
487 tsbt.SetBranchAddress("idpred",idp);
488 tsbt.SetBranchAddress("idfound",idf);
489 tsbt.SetBranchAddress("stat",&eStatus);
490 tsbt.SetBranchAddress("pred.", &s_pred);
491 tsbt.SetBranchAddress("s.", &s_bt);
492 tsbt.SetBranchAddress("s1.", &s_mt1);
493 tsbt.SetBranchAddress("s2.", &s_mt2);
494 tsbt.SetBranchAddress("next.", &s_next);
495
496 TClonesArray *s_cnd = eScnd.GetSegments();
497 tsbt.SetBranchAddress("scnd", &s_cnd);
498 TClonesArray *s1_cnd = eS1cnd.GetSegments();
499 tsbt.SetBranchAddress("s1cnd", &s1_cnd);
500 TClonesArray *s2_cnd = eS2cnd.GetSegments();
501 tsbt.SetBranchAddress("s2cnd", &s2_cnd);
502
503 TClonesArray *s_pre = eSpre.GetSegments();
504 tsbt.SetBranchAddress("spre", &s_pre);
505 TClonesArray *s1_pre = eS1pre.GetSegments();
506 tsbt.SetBranchAddress("s1pre", &s1_pre);
507 TClonesArray *s2_pre = eS2pre.GetSegments();
508 tsbt.SetBranchAddress("s2pre", &s2_pre);
509
510 tsbt.Fill();
511 return true;
512}

Member Data Documentation

◆ eChi2MaxBT

Float_t EdbRunTracking::eChi2MaxBT

(1.5) maximum chi2 accepted between prediction and basetrack candidates

◆ eChi2MaxMT

Float_t EdbRunTracking::eChi2MaxMT

(1.6) maximum chi2 accepted between prediction and microtrack candidates

◆ eCondBT

EdbScanCond EdbRunTracking::eCondBT

conditions for basetracks

◆ eCondMT

EdbScanCond EdbRunTracking::eCondMT

conditions for microtracks

◆ eDegradPos

Float_t EdbRunTracking::eDegradPos

SigmaX = SigmaX(0) + degradPos * mth.

◆ eDegradSlope

Float_t EdbRunTracking::eDegradSlope

SigmaTX = SigmaTX(0) + degradSlope * bth.

◆ eDeltaR

Float_t EdbRunTracking::eDeltaR

(20)

◆ eDeltaRview

Float_t EdbRunTracking::eDeltaRview

(400)

◆ eDeltaTheta

Float_t EdbRunTracking::eDeltaTheta

(0.15) slope acceptance

◆ eIdf

Int_t EdbRunTracking::eIdf[4]

◆ eIdp

Int_t EdbRunTracking::eIdp[4]

to read from sbt

◆ eNext

EdbSegP EdbRunTracking::eNext

next prediction

◆ ePred

EdbSegP EdbRunTracking::ePred

prediction

◆ ePredictionScan

bool EdbRunTracking::ePredictionScan

if true use GetPatternDataForPrediction( spred.ID(), side, pat ); in FindCandidates (default is false)

◆ ePreliminaryChi2MaxMT

Float_t EdbRunTracking::ePreliminaryChi2MaxMT

(1.6) / microtracks and basetracks selection

◆ ePreliminaryPulsMinMT

Float_t EdbRunTracking::ePreliminaryPulsMinMT

(6) _ preliminary cuts to microtracks candidates for

◆ ePulsMinBT

Float_t EdbRunTracking::ePulsMinBT

(18)

◆ ePulsMinDegradBT

Float_t EdbRunTracking::ePulsMinDegradBT

(0)

◆ ePulsMinDegradMT

Float_t EdbRunTracking::ePulsMinDegradMT

(0)

◆ ePulsMinMT

Float_t EdbRunTracking::ePulsMinMT

(10) mimimal number of grains accepted to select microtracks

◆ eS

EdbSegP EdbRunTracking::eS

◆ eS1

EdbSegP EdbRunTracking::eS1

◆ eS1cnd

EdbPattern EdbRunTracking::eS1cnd

microtrack candidates passed all cuts

◆ eS1pre

EdbPattern EdbRunTracking::eS1pre

the result of the preliminary selection of microtracks

◆ eS2

EdbSegP EdbRunTracking::eS2

found segments

◆ eS2cnd

EdbPattern EdbRunTracking::eS2cnd

◆ eS2pre

EdbPattern EdbRunTracking::eS2pre

◆ eScnd

EdbPattern EdbRunTracking::eScnd

basetracks candidates passed all cuts

◆ eSpre

EdbPattern EdbRunTracking::eSpre

preliminary selected basetracks

◆ eStatus

Int_t EdbRunTracking::eStatus

-1-nothing, 0-bt, 1-mt1, 2-mt2


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