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
 
EdbScanCond * GetCond (int ud)
 
EdbSegmentCut * GetCut (int ud, int i)
 
float GetCutGR () const
 
int GetEntryXY (int ud, float x, float y)
 
EdbLayer * GetLayer (int id)
 
EdbScanCond * GetMakeCond (int ud)
 
EdbLayer * GetMakeLayer (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)
 
EdbSegment * GetRawSegment (EdbView &v, int sid, int rs=0)
 
EdbSegment * GetRawSegment (int vid, int sid, int rs=0)
 
EdbSegment * GetRawSegmentN (int vid, int sid, int rs=0)
 
float GetRawSegmentPix (EdbSegment *seg)
 
EdbRun * GetRun () 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)
 
EdbPattern * GetVP (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: