FEDRA emulsion software from the OPERA Collaboration
EdbRunTracking Class Reference

#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)
 
void ApplyImageMatrixCorr (int side, float &x, float &y)
 
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 GetPatternView (EdbPattern &pat, int side, int entry, int &nrej)
 
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
 
float GetScoreA () const
 
float GetScoreB () 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 ReadImageMatrixCorrection (EdbCell2 &map, const char *file)
 
void ReadImageMatrixCorrection (int side, const char *file)
 
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 SetImageCorrection (int side, const char *str)
 
void SetImageCorrectionAff (int side, const char *str)
 
void SetScoreCut (const char *cut)
 
void SetScoreCut (float a, float b)
 
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
 
Float_t eChi2MaxMT
 
EdbScanCond eCondBT
 
EdbScanCond eCondMT
 
Float_t eDegradPos
 
Float_t eDegradSlope
 
Float_t eDeltaR
 
Float_t eDeltaRview
 
Float_t eDeltaTheta
 
Int_t eIdf [4]
 
Int_t eIdp [4]
 
EdbSegP eNext
 
EdbSegP ePred
 
bool ePredictionScan
 
Float_t ePreliminaryChi2MaxMT
 
Float_t ePreliminaryPulsMinMT
 
Float_t ePulsMinBT
 
Float_t ePulsMinDegradBT
 
Float_t ePulsMinDegradMT
 
Float_t ePulsMinMT
 
EdbSegP eS
 
EdbSegP eS1
 
EdbPattern eS1cnd
 
EdbPattern eS1pre
 
EdbSegP eS2
 
EdbPattern eS2cnd
 
EdbPattern eS2pre
 
EdbPattern eScnd
 
EdbPattern eSpre
 
Int_t eStatus
 
- Public Attributes inherited from EdbRunAccess
Int_t eAFID
 
Int_t eCLUST
 
EdbCell2 eCorrMap [3]
 
Int_t eDoImageCorr
 
Int_t eDoImageMatrixCorr
 
Bool_t eDoViewAnalysis
 
TGraph2D * eGraphDZ [3]
 keep z1/z2/z3/z4 surfaces using eZ1/eZ2/eZ3/eZ4 for each view More...
 
TGraph2D * eGraphZ [4]
 
TCut eHeaderCut
 
EdbH2 eHViewXY [3]
 
EdbAffine2D eImageCorr [3]
 
Bool_t eInvertSides
 
Int_t eTracking
 
Bool_t eUseDensityAsW
 
Bool_t eUseExternalSurface
 
Int_t eWeightAlg
 

Constructor & Destructor Documentation

◆ EdbRunTracking() [1/3]

EdbRunTracking::EdbRunTracking ( )
inline
65 : EdbRunAccess() { Set0(); };
void Set0()
Definition: EdbRunTracking.cxx:26

◆ EdbRunTracking() [2/3]

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

◆ EdbRunTracking() [3/3]

EdbRunTracking::EdbRunTracking ( const char *  fname)
inline
67 : 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 
)
672 {
673  EdbSegP *s1 = (EdbSegP*)(eS1pre.At(0));
674  EdbSegP *s2 = (EdbSegP*)(eS2pre.At(0));
675  if(s1&&s2)
676  {
677  z1=s1->Z();
678  z2=s2->Z();
679  }
680  else
681  {
682  z1 = 214;
683  z2 = 0;
684  }
685 }
EdbPattern eS2pre
Definition: EdbRunTracking.h:31
EdbPattern eS1pre
Definition: EdbRunTracking.h:30
Definition: EdbSegP.h:18
Float_t Z() const
Definition: EdbSegP.h:150
EdbPoint * At(int i) const
Definition: EdbPattern.h:90
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31

◆ CloseSBtree()

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

◆ ExtrapolateCond()

int EdbRunTracking::ExtrapolateCond ( EdbScanCond inputcond,
int  flag,
EdbScanCond outputcond 
)
107 {
108  // TODO: tuning the dependency of sigma
109  // NOTED by Artem: when we do jumping we have no "holes" stored in the flag, so this function do not
110  // extrapolate errors correctly so one had to encrease the acceptance manually,
111  // possible solution can be to add total plates number before the last found
112  // track into the flag and use it only for extrapolation
113 
114  int bth = GetBTHoles(flag);
115  int mth = GetMTHoles(flag);
116  outputcond = inputcond;
117  outputcond.SetSigma0( inputcond.SigmaX(0) + eDegradPos * mth,
118  inputcond.SigmaY(0) + eDegradPos * mth,
119  inputcond.SigmaTX(0) + eDegradSlope * bth,
120  inputcond.SigmaTY(0) + eDegradSlope * bth );
121  return(0);
122 }
static int GetBTHoles(int flag)
Definition: EdbRunTracking.h:78
static int GetMTHoles(int flag)
Definition: EdbRunTracking.h:79
Float_t eDegradSlope
Definition: EdbRunTracking.h:56
Float_t eDegradPos
Definition: EdbRunTracking.h:55
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 
)
309 {
310  int n=0;
311  fnd.Set0();
312  fnd.SetChi2(10000.+chi2max);
313  for (int i=0; i<cand.N(); i++) {
314  EdbSegP *s = cand.GetSegment(i);
315  if ( s->W()<wmin+s->Chi2()*wmindegrad ) continue;
316  if ( s->Chi2()>chi2max ) continue;
317  n++;
318  passed.AddSegment(*s);
319  if (s->Chi2()<fnd.Chi2()) fnd.Copy(*s);
320  }
321  return n;
322 }
Float_t Chi2() const
Definition: EdbSegP.h:154
void SetChi2(float chi2)
Definition: EdbSegP.h:132
Float_t W() const
Definition: EdbSegP.h:148
void Copy(const EdbSegP &s)
Definition: EdbSegP.cxx:104
void Set0()
Definition: EdbSegP.cxx:29
EdbSegP * s
Definition: tlg2pattern.C:32

◆ FindCandidateMT()

int EdbRunTracking::FindCandidateMT ( EdbPattern fnds1,
EdbPattern fnds2,
EdbSegP fnd 
)
288 {
289  EdbSegP s1,s2;
292  Log(2,"FindCandidateMT","Found %d+%d microtrack candidates after cuts",n1,n2);
293 
294  if( n1==0&&n2==0 ) return 0;
295 
296  if( s1.Chi2() <= s2.Chi2() ) {
297  fnd.Copy(s1);
298  return 1;
299  }
300  else {
301  fnd.Copy(s2);
302  return 2;
303  }
304  return 0;
305 }
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:308
Float_t eChi2MaxMT
Definition: EdbRunTracking.h:45
Float_t ePulsMinMT
Definition: EdbRunTracking.h:43
Float_t ePulsMinDegradMT
Definition: EdbRunTracking.h:38
EdbPattern eS2cnd
Definition: EdbRunTracking.h:48
EdbPattern eS1cnd
Definition: EdbRunTracking.h:47

◆ FindCandidates()

int EdbRunTracking::FindCandidates ( EdbSegP spred,
EdbPattern fndbt,
EdbPattern fnds1,
EdbPattern fnds2 
)
171 {
172  // Find microtracks and basetracks for the prediction segment "spred"
173  // Selection criteria:
174  // 1) select all microtracks with (puls >= ePreliminaryPulsMinMT) (6) and (chi2 < ePreliminaryChi2MaxMT) for both side
175  // 2) select all basetracks by using the selected microtracks, with (chi2_bt < eChi2MaxBT)
176  // Microtracks and basetracks in output are sorted according to chi2 (ascending order = the first one is the best one)
177  //
178  // Input:
179  // spred - track prediction
180  // Output:
181  // fnds1 - microtracks having puls>=ePreliminaryPulsMinMT and chi2<ePreliminaryChi2MaxMT
182  // in the top side of the emulsion plate
183  // fnds2 - microtracks having puls>=ePreliminaryPulsMinMT and chi2<ePreliminaryChi2MaxMT
184  // in the bottom side of the emulsion plate
185  // fndbt - basetracks built from the microtracks and (chi2_bt < eChi2MaxBT)
186 
187  ClearCuts();
188 
189  EdbScanCond condBT;
190  ExtrapolateCond(eCondBT,spred.Flag(),condBT);
191  if (gEDBDEBUGLEVEL>=3) condBT.Print();
192 
193  spred.SetZ(107.); // TODO!
194  spred.SetErrors();
195  condBT.FillErrorsCov( spred.TX(), spred.TY(), spred.COV() );
196 
197  //EdbPVRec aview; //with 2 patterns of preselected microtracks
198  //aview.AddPattern( new EdbPattern(0,0,214)); // TODO! sequence??
199  //aview.AddPattern( new EdbPattern(0,0,0) );
200 
201  float xmin[5]={-500, -500, spred.TX()-eDeltaTheta, spred.TY()-eDeltaTheta, ePreliminaryPulsMinMT }; //TODO!!
202  float xmax[5]={ 500, 500, spred.TX()+eDeltaTheta, spred.TY()+eDeltaTheta, 50 };
203 
204  for(int side=1; side<=2; side++) {
205  EdbPattern pat;
206  AddSegmentCut(side,1,xmin,xmax);
207  if(ePredictionScan) GetPatternDataForPrediction( spred.ID(), side, pat );
208  else GetPatternXY( spred, side, pat, eDeltaRview);
209  Log(2,"FindCandidates","%d microtracks in side %d",pat.N(),side);
210 
211  for(int i=0; i<pat.N(); i++) {
212  EdbSegP *s = pat.GetSegment(i);
213  s->SetErrors();
214  eCondMT.FillErrorsCov( spred.TX(), spred.TY(), s->COV() );
215  }
216 
217  pat.FillCell(10,10,0.01,0.01); //divide view on this cells
218 
219  TArrayF chi2arr(10000); //TODO!
220  TObjArray found;
221  FindCompliments( spred, pat, found, ePreliminaryChi2MaxMT, chi2arr );
222 
223  for(int j=0; j<found.GetEntries(); j++) {
224  EdbSegP *s = (EdbSegP *)(found.At(j));
225  s->SetChi2(chi2arr[j]);
226  if (side==1) fnds1.AddSegment(*s);
227  else if(side==2) fnds2.AddSegment(*s);
228  }
229 
230  }
231 
232  // filling fndbt
233 
234  EdbPattern bt;
235 
236  for(int is1=0; is1<fnds1.N(); is1++) {
237  for(int is2=0; is2<fnds2.N(); is2++) {
238 
239  EdbSegP *s1 = fnds1.GetSegment(is1);
240  EdbSegP *s2 = fnds2.GetSegment(is2);
241 
242  float dx1=s1->X()-(spred.X()+spred.TX()*(s1->Z()-spred.Z()));
243  float dy1=s1->Y()-(spred.Y()+spred.TY()*(s1->Z()-spred.Z()));
244  float dx2=s2->X()-(spred.X()+spred.TX()*(s2->Z()-spred.Z()));
245  float dy2=s2->Y()-(spred.Y()+spred.TY()*(s2->Z()-spred.Z()));
246  float r = Sqrt( (dx1-dx2)*(dx1-dx2) + (dy1-dy2)*(dy1-dy2) );
247 
248  if(r<eDeltaR) { // has good BT
249  EdbSegP s3;
250  s3.Copy(spred);
251  s3.SetX( 0.5*(s1->X() + s2->X()) );
252  s3.SetY( 0.5*(s1->Y() + s2->Y()) );
253  s3.SetZ( 0.5*(s1->Z() + s2->Z()) );
254  s3.SetTX( (s2->X() - s1->X()) / (s2->Z() - s1->Z()) );
255  s3.SetTY( (s2->Y() - s1->Y()) / (s2->Z() - s1->Z()) );
256  s3.SetW(s1->W()+s2->W());
257 
258  s3.SetFlag(is2*10000+is1);
259 
260  EdbSegP s4(spred);
261  float chi = EdbTrackFitter::Chi2Seg(&s4, &s3); // depends on the sequence (best defined should be first)
262  //float chi = EdbTrackFitter::Chi2SegM(spred, s3, s4, eCondBT, eCondBT);
263  if(chi<eChi2MaxBT) {
264  s3.SetChi2(chi);
265  bt.AddSegment(s3);
266  }
267  }
268  }
269  }
270 
271  TArrayF chi2arr(bt.N());
272  for (int i=0;i<bt.N();i++) chi2arr[i]=bt.GetSegment(i)->Chi2();
273  TArrayI ind(bt.N());
274  TMath::Sort(bt.N(),chi2arr.GetArray(),ind.GetArray(),false);
275  for(int i=0; i<bt.N(); i++) {
276  EdbSegP *s = bt.GetSegment(ind[i]);
277  fndbt.AddSegment(*s);
278  }
279 
280  Log(2,"FindCandidates","Found %d basetrack candidate in %d+%d preselected microtracks",fndbt.N(),fnds1.N(),fnds2.N());
281 
282  return 1; //TODO!
283 }
Definition: EdbPattern.h:280
void FillCell(float stepx, float stepy, float steptx, float stepty)
Definition: EdbPattern.cxx:1416
void ClearCuts()
Definition: EdbRunAccess.cxx:95
void AddSegmentCut(int xi, const char *cutline)
Definition: EdbRunAccess.cxx:1317
int GetPatternXY(EdbSegP &s, int side, EdbPattern &pat, float rmin=200)
Definition: EdbRunAccess.cxx:382
int GetPatternDataForPrediction(int id, int side, EdbPattern &pat)
Definition: EdbRunAccess.cxx:576
int ExtrapolateCond(EdbScanCond &inputcond, int flag, EdbScanCond &outputcond)
Definition: EdbRunTracking.cxx:106
Float_t eDeltaR
Definition: EdbRunTracking.h:33
EdbScanCond eCondMT
Definition: EdbRunTracking.h:22
Float_t ePreliminaryPulsMinMT
Definition: EdbRunTracking.h:27
Float_t eDeltaRview
Definition: EdbRunTracking.h:25
Float_t ePreliminaryChi2MaxMT
Definition: EdbRunTracking.h:28
int FindCompliments(EdbSegP &s, EdbPattern &pat, TObjArray &found, float chi2max, TArrayF &chiarr)
Definition: EdbRunTracking.cxx:125
EdbScanCond eCondBT
Definition: EdbRunTracking.h:23
Float_t eChi2MaxBT
Definition: EdbRunTracking.h:39
bool ePredictionScan
Definition: EdbRunTracking.h:61
Float_t eDeltaTheta
Definition: EdbRunTracking.h:26
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:175
void SetErrors()
Definition: EdbSegP.h:89
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t TX() const
Definition: EdbSegP.h:172
void SetTX(Float_t tx)
Definition: EdbSegP.h:176
Int_t ID() const
Definition: EdbSegP.h:144
void SetX(Float_t x)
Definition: EdbSegP.h:174
Float_t X() const
Definition: EdbSegP.h:170
void SetZ(float z)
Definition: EdbSegP.h:122
void SetTY(Float_t ty)
Definition: EdbSegP.h:177
void SetW(float w)
Definition: EdbSegP.h:129
Float_t Y() const
Definition: EdbSegP.h:171
Float_t TY() const
Definition: EdbSegP.h:173
void SetFlag(int flag)
Definition: EdbSegP.h:127
Int_t Flag() const
Definition: EdbSegP.h:146
Int_t N() const
Definition: EdbPattern.h:89
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71
static float Chi2Seg(EdbSegP *s1, EdbSegP *s2)
Definition: EdbTrackFitter.cxx:62
float xmin
Definition: emthickness.cpp:61
float xmax
Definition: emthickness.cpp:61
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 
)
126 {
127  // return found sorted by increasing chi2
128 
129  int nfound=0;
130  int maxcand=chiarr.GetSize();
131  TArrayF chi2arr(maxcand);
132  TObjArray arr(maxcand);
133  TArrayI ind(maxcand);
134 
135  int nseg = pat.FindCompliments(s,arr,30,200); // acceptance (prelim): s.SX()*30; s.STX*200
136  // printf("\nnseg = %d\n",nseg);
137  if(nseg>maxcand) {
138  printf("Warning!: Too many segments %d, accept only the first %d \n", nseg, maxcand);
139  nseg = maxcand;
140  }
141  if(nseg<=0) return 0;
142 
143  EdbSegP *s2=0;
144  for(int j=0; j<nseg; j++) {
145  s2 = (EdbSegP *)arr.At(j);
146  EdbSegP s3;
147  s3.Copy(s);
148  chi2arr[j] = EdbTrackFitter::Chi2Seg(&s3, s2);
149  //chi2arr[j] = EdbTrackFitter::Chi2SegM(s, *s2,s3,eCondBT,eCondMT);
150  }
151  TMath::Sort(nseg,chi2arr.GetArray(),ind.GetArray(),0);
152  // printf("pred = %f %f %f %f\n",s.X(),s.Y(),s.TX(),s.TY());
153  for(int j=0; j<nseg; j++) {
154  s2 = (EdbSegP *)arr.At(ind[j]);
155  // printf("j = %d, ind = %d, chi2 = %f %f\n",j,ind[j],chi2arr[ind[j]],chi2max);
156  // printf("Tx = %f %f %f %f\n",s2->X(),s2->Y(),s2->TX(),s2->TY());
157  if(chi2arr[ind[j]] > chi2max ) break;
158  chiarr[j] = chi2arr[ind[j]];
159  s2->SetMC(s.MCEvt(),s.MCTrack());
160  found.Add(s2);
161  nfound++;
162  }
163 
164  // printf("nfound = %d\n",nfound);
165  return nfound;
166 }
int FindCompliments(EdbSegP &s, TObjArray &arr, float nsig, float nsigt)
Definition: EdbPattern.cxx:1447
void SetMC(int mEvt, int mTrack)
Definition: EdbSegP.h:138
Int_t MCTrack() const
Definition: EdbSegP.h:143
Int_t MCEvt() const
Definition: EdbSegP.h:142

◆ FindPrediction()

int EdbRunTracking::FindPrediction ( EdbSegP spred,
EdbSegP fndbt,
EdbSegP fnds1,
EdbSegP fnds2,
EdbSegP snewpred 
)
326 {
327  // Select the best (micro or base) track matching with the prediction
328  // and prepare for a new search.
329  //
330  // Selection criteria:
331  // 1) Call FindCandidates having the list of basetrack and microtrack candidates
332  // 2) Call FindCandidateBT which looks for the best basetrack, if any
333  // 3) If no basetrack is found, call FindCandidateMT which looks fot the best microtrack, if any.
334  // Microtracks accepted shold satisfy the following cut: (puls >= ePulsMinMT) (10) and (chi2 < eChi2MaxMT)
335  //
336  // Input:
337  // spred - track prediction
338  // Output:
339  // - if a basetrack is found (status 0):
340  // fndbt - basetrack found
341  // fnds1 - microtrack top contained in the found basetrack
342  // fnds2 - microtrack bottom contained in the found basetrack
343  // snewpred - fndbt with flag equal to 0
344  //
345  // - if a microtrack top is found (status 1):
346  // fndbt - dummy
347  // fnds1 - microtrack top found
348  // fnds2 - dummy
349  // snewpred - a track with slopes from the prediction spred and positions
350  // from an extrapolation of fnds1. The flag is updated by UpdateFlag
351  //
352  // - if a microtrack bottom is found (status 2):
353  // fndbt - dummy
354  // fnds1 - dummy
355  // fnds2 - microtrack bottom found
356  // snewpred - a track with slopes from the prediction spred and positions
357  // from an extrapolation of fnds2. The flag is updated by UpdateFlag
358  //
359  // - if nothing is found (status -1):
360  // fndbt - dummy
361  // fnds1 - dummy
362  // fnds2 - dummy
363  // snewpred - the prediction spred. The flag is updated by UpdateFlag
364  //
365  // Return:
366  // -1: no track found
367  // 0: basetrack found
368  // 1: microtrack top found
369  // 2: microtrack bottom found
370 
371  //EdbPattern vfndbt,vfnds1,vfnds2;
372 
373  eStatus = -1;
374  SetPred(spred);
375  FindCandidates( spred, eSpre, eS1pre, eS2pre );
376 
377  EdbSegP fnd;
379  if ( nbt > 0 ) {
380  eS.Copy(fnd);
381  eS1.Copy(*(eS1pre.GetSegment(fnd.Flag()%10000)));
382  eS2.Copy(*(eS2pre.GetSegment(fnd.Flag()/10000)));
383  eS.SetFlag(0);
384  eNext.Copy(fnd);
385  eNext.SetFlag(UpdateFlag(spred.Flag(),0)); // if bt found : bth=0, mth=0, tb=0
386  eStatus = 0;
387  }
388 
389  int if_mt = FindCandidateMT(eS1pre,eS2pre,fnd);
390  if(eStatus!=-1) goto RESUME;
391 
392  switch(if_mt) {
393  case 0: // find nothing
394  eNext.Copy(spred);
395  eNext.SetFlag(UpdateFlag(spred.Flag(),-1)); // hole: if not found: bth++, mth++, tb= keep last value
396  eNext.SetW(0);
397  eStatus = -1; goto RESUME;
398  case 1: // best microtrack is on the 1-st side
399  eS1.Copy(fnd);
400  eNext.Copy(spred);
401  eNext.SetX( fnd.X() + spred.TX()*(spred.Z()-fnd.Z()) );
402  eNext.SetY( fnd.Y() + spred.TY()*(spred.Z()-fnd.Z()) );
403  eNext.SetZ(spred.Z());
404  eNext.SetFlag(UpdateFlag(spred.Flag(),1)); // if mt found : bth++, mth=0, tb=1
405  eNext.SetW(fnd.W());
406  eStatus = 1; goto RESUME;
407  case 2: // best microtrack is on the 2-d side
408  eS2.Copy(fnd);
409  eNext.Copy(spred);
410  eNext.SetX( fnd.X() + spred.TX()*(spred.Z()-fnd.Z()) );
411  eNext.SetY( fnd.Y() + spred.TY()*(spred.Z()-fnd.Z()) );
412  eNext.SetZ(spred.Z());
413  eNext.SetFlag(UpdateFlag(spred.Flag(),2)); // if mt found : bth++, mth=0, tb=2
414  eNext.SetW(fnd.W());
415  eStatus = 2; goto RESUME;
416  }
417 
418  RESUME:
419 
420  Log(2,"FindPrediction","status = %d, good candidates [s:s1:s2] %d:%d:%d ; preliminary [s:s1:s2] %d:%d:%d",
421  eStatus,
422  eScnd.N(),eS1cnd.N(),eS2cnd.N(),
423  eSpre.N(),eS1pre.N(),eS2pre.N()
424  );
425  snewpred.Copy(eNext);
426  fndbt.Copy(eS);
427  fnds1.Copy(eS1);
428  fnds2.Copy(eS2);
429  return eStatus;
430 }
EdbPattern eScnd
Definition: EdbRunTracking.h:41
Float_t ePulsMinDegradBT
Definition: EdbRunTracking.h:44
Float_t ePulsMinBT
Definition: EdbRunTracking.h:37
int FindCandidates(EdbSegP &spred, EdbPattern &fndbt, EdbPattern &fnds1, EdbPattern &fnds2)
Definition: EdbRunTracking.cxx:170
int UpdateFlag(int flag, int status)
Definition: EdbRunTracking.cxx:87
EdbSegP eS
Definition: EdbRunTracking.h:51
Int_t eStatus
Definition: EdbRunTracking.h:53
void SetPred(const EdbSegP &pred)
Definition: EdbRunTracking.cxx:51
int FindCandidateMT(EdbPattern &fnds1, EdbPattern &fnds2, EdbSegP &fnd)
Definition: EdbRunTracking.cxx:287
EdbPattern eSpre
Definition: EdbRunTracking.h:35
EdbSegP eNext
Definition: EdbRunTracking.h:52
EdbSegP eS1
Definition: EdbRunTracking.h:51
EdbSegP eS2
Definition: EdbRunTracking.h:51

◆ FindTrack()

int EdbRunTracking::FindTrack ( EdbTrackP pred,
EdbTrackP found,
EdbPlateP plate 
)
575 {
576  // look for tracks in this plate
577  // track - input track in brick RS - will be updated on output
578  // plate - all plate parameters including affine transformation plate-to-brick
579 
580  int status=-100;
581  float DZmax = 1350*100;
582 
583  EdbAffine2D p2b(*(plate.GetAffineXY())); // from plate to brick
584  EdbAffine2D b2p(p2b); b2p.Invert(); // from brick to plate
585  EdbSegP ps;
586 
587  float dz = pred.MakePredictionTo(plate.Z(), ps);
588  printf("EdbRunTracking::FindTrack: dz: %f - %f = %f\n", plate.Z(), pred.Z(), dz );
589 
590  if(Abs(dz)>DZmax) return status;
591  if(GetBTHoles(pred.Flag())>5) return status;
592  if(GetMTHoles(pred.Flag())>3) return status;
593 
594  ps.SetFlag(pred.Flag());
595  ps.PrintNice();
596  ps.Transform(&b2p); // plate.Transoform(seg) ???
597  ps.PrintNice();
598 
599  EdbSegP fndbt, fnds1, fnds2, snewpred;
600  status = FindPrediction( ps, fndbt, fnds1, fnds2, snewpred ); // -1: not found; 0-bt, 1-bot, 2-top
601  found.SetFlag(snewpred.Flag());
602  fnds1.PrintNice();
603  fnds2.PrintNice();
604 
605  TransformFromPlateRS(plate); // transform all components into brick RS
606 
607  if(status>=0) {
608  found.AddSegment( new EdbSegP(eNext) );
609  found.AddSegmentF( new EdbSegP(ePred) ); // add prediction as "fitted segment" because it is an extrapolation
610  found.SetSegmentsTrack();
611  }
612 
613  Log(2,"EdbRunTracking::FindTracks","status = %d",status);
614  return status;
615 }
brick dz
Definition: RecDispMC.C:107
Definition: EdbAffine.h:17
void TransformFromPlateRS(EdbPlateP &plate)
Definition: EdbRunTracking.cxx:618
EdbSegP ePred
Definition: EdbRunTracking.h:50
int FindPrediction(EdbSegP &spred, EdbSegP &fndbt, EdbSegP &fnds1, EdbSegP &fnds2, EdbSegP &snewpred)
Definition: EdbRunTracking.cxx:325
void PrintNice() const
Definition: EdbSegP.cxx:418
virtual void Transform(const EdbAffine2D *a)
void AddSegmentF(EdbSegP *s)
Definition: EdbPattern.h:238
void AddSegment(EdbSegP *s)
Definition: EdbPattern.h:219
float MakePredictionTo(Float_t z, EdbSegP &ss)
Definition: EdbPattern.cxx:1143
int SetSegmentsTrack(int id)
Definition: EdbPattern.h:252
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
78 { return(flag/10000); }

◆ GetMTHoles()

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

◆ GetSBtreeEntry()

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

◆ GetSegmentsForDB()

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

◆ InitSBtree()

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

◆ Print()

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

◆ Set0()

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

◆ SetCondBT()

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

◆ SetCondMT()

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

◆ SetPred()

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

◆ TransformFromPlateRS()

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

◆ UpdateFlag()

int EdbRunTracking::UpdateFlag ( int  flag,
int  status 
)
88 {
89  // status: -1 -found nothing, 0-bt, 1-mt1, 2-mt2
90 
91  int bth = flag/10000;
92  int mth = (flag/100)%100;
93  int tb = flag%10;
94 
95  switch (status) {
96  case -1: bth++; mth++; break;
97  case 0: bth=0; mth=0; tb=0; break;
98  case 1: bth++; mth=0; tb=1; break;
99  case 2: bth++; mth=0; tb=2; break;
100  }
101 
102  return( bth*10000+mth*100+tb );
103 }

◆ UpdateSBtree()

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

Member Data Documentation

◆ eChi2MaxBT

Float_t EdbRunTracking::eChi2MaxBT

◆ eChi2MaxMT

Float_t EdbRunTracking::eChi2MaxMT

◆ eCondBT

EdbScanCond EdbRunTracking::eCondBT

◆ eCondMT

EdbScanCond EdbRunTracking::eCondMT

◆ eDegradPos

Float_t EdbRunTracking::eDegradPos

◆ eDegradSlope

Float_t EdbRunTracking::eDegradSlope

◆ eDeltaR

Float_t EdbRunTracking::eDeltaR

◆ eDeltaRview

Float_t EdbRunTracking::eDeltaRview

◆ eDeltaTheta

Float_t EdbRunTracking::eDeltaTheta

◆ eIdf

Int_t EdbRunTracking::eIdf[4]

◆ eIdp

Int_t EdbRunTracking::eIdp[4]

◆ eNext

EdbSegP EdbRunTracking::eNext

◆ ePred

EdbSegP EdbRunTracking::ePred

◆ ePredictionScan

bool EdbRunTracking::ePredictionScan

◆ ePreliminaryChi2MaxMT

Float_t EdbRunTracking::ePreliminaryChi2MaxMT

◆ ePreliminaryPulsMinMT

Float_t EdbRunTracking::ePreliminaryPulsMinMT

◆ ePulsMinBT

Float_t EdbRunTracking::ePulsMinBT

◆ ePulsMinDegradBT

Float_t EdbRunTracking::ePulsMinDegradBT

◆ ePulsMinDegradMT

Float_t EdbRunTracking::ePulsMinDegradMT

◆ ePulsMinMT

Float_t EdbRunTracking::ePulsMinMT

◆ eS

EdbSegP EdbRunTracking::eS

◆ eS1

EdbSegP EdbRunTracking::eS1

◆ eS1cnd

EdbPattern EdbRunTracking::eS1cnd

◆ eS1pre

EdbPattern EdbRunTracking::eS1pre

◆ eS2

EdbSegP EdbRunTracking::eS2

◆ eS2cnd

EdbPattern EdbRunTracking::eS2cnd

◆ eS2pre

EdbPattern EdbRunTracking::eS2pre

◆ eScnd

EdbPattern EdbRunTracking::eScnd

◆ eSpre

EdbPattern EdbRunTracking::eSpre

◆ eStatus

Int_t EdbRunTracking::eStatus

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