FEDRA emulsion software from the OPERA Collaboration
EdbVertexComb Class Reference

#include <EdbVertexComb.h>

Inheritance diagram for EdbVertexComb:
Collaboration diagram for EdbVertexComb:

Public Member Functions

void AddTrack (EdbTrackP *t)
 
EdbVertexCheckVTX (TObjArray &tracks)
 
void ClearDoublets (TObjArray &topoarr)
 
void CopyPar (EdbVertexComb &comb)
 
 EdbVertexComb ()
 
 EdbVertexComb (TObjArray &tracks)
 
int FindTopologies ()
 
void FormVertices ()
 
EdbTopologyGetTopology (int i) const
 
EdbVertexGetVertex (int i) const
 
EdbVertexCombGetVertexComb (int i) const
 
bool IsAcceptable (EdbVertex &v)
 
int Ntr () const
 
int Nvtx () const
 
void PrintTeoricalCombinations (Int_t n)
 
void PrintTopologies ()
 
void PrintTracks ()
 
void SelectTopologies (TObjArray &topoarr)
 
void Set0 ()
 
void SetTracksErrors ()
 
void SetTracksErrors (EdbScanCond &cond)
 
void SetTracksErrors (TObjArray &tracks, EdbScanCond &cond)
 
void SortTopologies (TObjArray &topoarr)
 
virtual ~EdbVertexComb ()
 

Public Attributes

EdbScanCond eCond
 
Int_t eNProngMinV
 
TObjArray eOther
 
Float_t eProbDetached
 
Float_t eProbMinV
 
Int_t eRecursion
 
Int_t eRecursionMax
 
TObjArray eTopologies
 
TObjArray eTracks
 
TObjArray eVertices
 
EdbVertexPar eVPar
 
Float_t eZ0
 

Constructor & Destructor Documentation

◆ EdbVertexComb() [1/2]

EdbVertexComb::EdbVertexComb ( )
inline
59 { Set0(); }
void Set0()
Definition: EdbVertexComb.cxx:139

◆ EdbVertexComb() [2/2]

EdbVertexComb::EdbVertexComb ( TObjArray &  tracks)
128 {
129  Set0();
130  eTracks = tracks;
131 }
TObjArray eTracks
Definition: EdbVertexComb.h:40
TTree * tracks
Definition: check_tr.C:19

◆ ~EdbVertexComb()

EdbVertexComb::~EdbVertexComb ( )
virtual
135 {
136 }

Member Function Documentation

◆ AddTrack()

void EdbVertexComb::AddTrack ( EdbTrackP t)
inline
65 { eTracks.Add(t); }
TTree * t
Definition: check_shower.C:4

◆ CheckVTX()

EdbVertex * EdbVertexComb::CheckVTX ( TObjArray &  tracks)
333 {
334  if(tracks.GetEntriesFast() < 2 ) return 0;
335  EdbVertexRec evr(eVPar);
336  EdbPVRec *pvr = new EdbPVRec();
337  pvr->SetScanCond( new EdbScanCond(eCond) );
338  evr.SetPVRec(pvr);
339  return evr.Make1Vertex( tracks, eZ0 );
340 }
Definition: EdbPVRec.h:148
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbScanCond.h:10
Float_t eZ0
Definition: EdbVertexComb.h:46
EdbVertexPar eVPar
Definition: EdbVertexComb.h:45
EdbScanCond eCond
Definition: EdbVertexComb.h:44
Definition: EdbVertex.h:194

◆ ClearDoublets()

void EdbVertexComb::ClearDoublets ( TObjArray &  topoarr)
264 {
265  int nremove=1;
266  do {
267  nremove=0;
268  int nt = topoarr.GetEntriesFast(); if(!nt) return;
269  for(int i=nt-1; i>0; i--) {
270  EdbTopology *t = (EdbTopology*)topoarr.At(i);
271  EdbTopology *tn = (EdbTopology*)topoarr.At(i-1);
272  if( t->IsEqual(*tn) ) { topoarr.RemoveAt(i); nremove++; }
273  }
274  topoarr.Compress();
275  } while(nremove);
276 }
Definition: EdbVertexComb.h:7

◆ CopyPar()

void EdbVertexComb::CopyPar ( EdbVertexComb comb)
150 {
152  eRecursion = comb.eRecursion;
153  eCond = comb.eCond;
154  eVPar = comb.eVPar;
155  eZ0 = comb.eZ0;
156  eProbMinV = comb.eProbMinV;
157  eNProngMinV = comb.eNProngMinV;
158 }
Int_t eRecursionMax
Definition: EdbVertexComb.h:42
Int_t eRecursion
Definition: EdbVertexComb.h:43
Int_t eNProngMinV
Definition: EdbVertexComb.h:49
Float_t eProbMinV
Definition: EdbVertexComb.h:48

◆ FindTopologies()

int EdbVertexComb::FindTopologies ( )
191 {
192  FormVertices();
193  eTopologies.Clear();
197  int n = eTopologies.GetEntriesFast();
198  Log(2,"EdbVertexComb::FindTopologies"," %d input tracks, upto %d vtx to search -> %d topologies found", eTracks.GetEntriesFast(), eRecursionMax, n);
199  return n;
200 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
void FormVertices()
Definition: EdbVertexComb.cxx:211
TObjArray eTopologies
Definition: EdbVertexComb.h:56
void ClearDoublets(TObjArray &topoarr)
Definition: EdbVertexComb.cxx:263
void SelectTopologies(TObjArray &topoarr)
Definition: EdbVertexComb.cxx:293
void SortTopologies(TObjArray &topoarr)
Definition: EdbVertexComb.cxx:279

◆ FormVertices()

void EdbVertexComb::FormVertices ( )
212 {
213  if( eRecursion >= eRecursionMax ) return;
214  int ntr = eTracks.GetEntriesFast();
215  if(ntr<eNProngMinV) return;
216  if(ntr<2) return;
217  //if(nprongMin<2) return 0;
218 
219  //float distMax=100000;
220  for( int nitems=eNProngMinV; nitems <= ntr; nitems++ )
221  {
222  EdbCombGen comber(eTracks,nitems);
223  TObjArray selected, other;
224  while( comber.NextCombination(selected,other) ) {
225  EdbVertex *v = CheckVTX(selected);
226  if( v->V()->prob() < eProbMinV ) continue;
227  //if( v->MinDist() > distMax ) continue;
228  eVertices.Add(v);
230  EdbVertexComb *combo = new EdbVertexComb(other);
231  combo->CopyPar(*this);
232  combo->eRecursion++;
233  eOther.Add(combo);
234  }
235  }
236  }
237 
238  int nvtx = Nvtx();
239  //printf("eRecursion = %d nvtx = %d\n",eRecursion, nvtx);
240 
241  for(int i=0; i<nvtx; i++) {
242  EdbVertexComb *combo = (EdbVertexComb*)(eOther.At(i));
243  if(combo) combo->FormVertices();
244  }
245 }
Definition: EdbCombGen.h:15
Definition: EdbVertexComb.h:37
EdbVertex * CheckVTX(TObjArray &tracks)
Definition: EdbVertexComb.cxx:332
EdbVertexComb()
Definition: EdbVertexComb.h:59
TObjArray eOther
Definition: EdbVertexComb.h:54
TObjArray eVertices
Definition: EdbVertexComb.h:53
void CopyPar(EdbVertexComb &comb)
Definition: EdbVertexComb.cxx:149
int Nvtx() const
Definition: EdbVertexComb.h:78
Definition: EdbVertex.h:68
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237

◆ GetTopology()

EdbTopology* EdbVertexComb::GetTopology ( int  i) const
inline
75 {return ((EdbTopology*)(eTopologies.At(i)));}

◆ GetVertex()

EdbVertex* EdbVertexComb::GetVertex ( int  i) const
inline
79 { return (EdbVertex *)eVertices.At(i); }

◆ GetVertexComb()

EdbVertexComb* EdbVertexComb::GetVertexComb ( int  i) const
inline
80 { return (EdbVertexComb *)eOther.At(i); }

◆ IsAcceptable()

bool EdbVertexComb::IsAcceptable ( EdbVertex v)
326 {
327  if( v.V()->prob() > 0.001 ) return true;
328  return false;
329 }

◆ Ntr()

int EdbVertexComb::Ntr ( ) const
inline
77 {return eTracks.GetEntriesFast();}

◆ Nvtx()

int EdbVertexComb::Nvtx ( ) const
inline
78 {return eVertices.GetEntriesFast();}

◆ PrintTeoricalCombinations()

void EdbVertexComb::PrintTeoricalCombinations ( Int_t  n)
162 {
163  // Print only the first level (1 vertex combinations)
164  Long_t total=0;
165  for(int i=1; i<=n; i++) {
166  Long_t ncomb = (Long_t)(Factorial(n)/Factorial(n-i)/Factorial(i));
167  printf("%8d of %8d = %16ld \n", i,n,ncomb);
168  total +=ncomb;
169  }
170  printf("total = %ld\n",total);
171 }

◆ PrintTopologies()

void EdbVertexComb::PrintTopologies ( )
204 {
205  int n = eTopologies.GetEntriesFast();
206  PrintTracks();
207  for(int i=0; i<n; i++) GetTopology(i)->Print();
208 }
void Print()
Definition: EdbVertexComb.cxx:113
void PrintTracks()
Definition: EdbVertexComb.cxx:248
EdbTopology * GetTopology(int i) const
Definition: EdbVertexComb.h:75

◆ PrintTracks()

void EdbVertexComb::PrintTracks ( )
249 {
250  printf("\n---------------------------- Input Tracks --------------------------------------------------------\n");
251  printf(" idtr X Y Z TX TY P idpl\n");
252  printf("--------------------------------------------------------------------------------------------------\n");
253  int ntr = eTracks.GetEntriesFast();
254  for(int i=0; i<ntr; i++) {
255  EdbTrackP *t = (EdbTrackP*)(eTracks.At(i));
256  printf("%5d %12.2f %12.2f %12.2f %8.4f %8.4f %8.2f %4d\n"
257  ,t->ID(), t->X(), t->Y(), t->Z(), t->TX(), t->TY(), t->P(), t->Plate() );
258  }
259  printf("--------------------------------------------------------------------------------------------------\n");
260 }
Definition: EdbPattern.h:118

◆ SelectTopologies()

void EdbVertexComb::SelectTopologies ( TObjArray &  topoarr)
294 {
295  int nvtx = eVertices.GetEntriesFast();
296  Log(3,"EdbVertexComb::SelectTopologies","nvtx = %d",nvtx);
297  if(!nvtx) return;
298  for(int i=0; i<nvtx; i++)
299  {
300  EdbVertex *v = GetVertex(i);
301  //if(!IsAcceptable(*v)) continue;
302 
303  TObjArray newarr;
304  int nnew=0;
305  EdbVertexComb *combo = GetVertexComb(i);
306  if(combo) {
307  combo->SelectTopologies(newarr);
308  nnew=newarr.GetEntriesFast();
309  }
310  if(!nnew) {
311  EdbTopology *topa = new EdbTopology();
312  topa->AddSingleTracks(combo->eTracks);
313  newarr.Add( topa );
314  nnew+=1;
315  }
316  for(int j=0; j< nnew; j++) {
317  EdbTopology *topa = (EdbTopology *)(newarr.At(j));
318  topa->AddVertex( v );
319  topoarr.Add( topa );
320  }
321  }
322 }
void AddSingleTracks(TObjArray &tracks)
Definition: EdbVertexComb.h:24
EdbVertex * AddVertex(EdbVertex *v)
Definition: EdbVertexComb.h:21
EdbVertex * GetVertex(int i) const
Definition: EdbVertexComb.h:79
EdbVertexComb * GetVertexComb(int i) const
Definition: EdbVertexComb.h:80

◆ Set0()

void EdbVertexComb::Set0 ( )
140 {
141  eRecursionMax = 1;
142  eRecursion = 0;
143  eZ0 = 0;
144  eProbMinV = 0.001; // min probability to accept the vertex for topology calculation
145  eNProngMinV = 2; // min prongs to accept the vertex for topology calculation
146 }

◆ SetTracksErrors() [1/3]

void EdbVertexComb::SetTracksErrors ( )
inline
void SetTracksErrors()
Definition: EdbVertexComb.h:67

◆ SetTracksErrors() [2/3]

void EdbVertexComb::SetTracksErrors ( EdbScanCond cond)
inline
66 { eCond = cond; SetTracksErrors(); }

◆ SetTracksErrors() [3/3]

void EdbVertexComb::SetTracksErrors ( TObjArray &  tracks,
EdbScanCond cond 
)
175 {
176  int n = tracks.GetEntriesFast();
177  for(int i=0; i<n; i++) {
178  EdbTrackP *t = (EdbTrackP*)tracks.At(i);
179  int nseg = t->N();
180  for(int j=0; j<nseg; j++) {
181  EdbSegP *s = t->GetSegment(j);
182  s->SetErrors0();
183  cond.FillErrorsCov( s->TX(),s->TY(), s->COV() );
184  }
185  t->FitTrackKFS();
186  }
187 }
void FillErrorsCov(float tx, float ty, TMatrixD &cov)
Definition: EdbScanCond.cxx:161
Definition: EdbSegP.h:18
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t TX() const
Definition: EdbSegP.h:172
void SetErrors0()
Definition: EdbSegP.cxx:50
Float_t TY() const
Definition: EdbSegP.h:173
EdbSegP * s
Definition: tlg2pattern.C:32

◆ SortTopologies()

void EdbVertexComb::SortTopologies ( TObjArray &  topoarr)
280 {
281  int nt = topoarr.GetEntriesFast();
282  TArrayF rating(nt); TArrayI ind(nt);
283  for(int i=0; i<nt; i++) rating[i] =((EdbTopology*)topoarr.At(i))->Probability();
284  Sort( nt, rating.GetArray(), ind.GetArray(), 1 );
285  TObjArray tmparr(nt);
286  for(int i=0; i<nt; i++) tmparr.Add( topoarr.At(ind[i]) );
287  topoarr.Clear(); topoarr.AddAll( &tmparr );
288 
289  for(int i=0; i<nt; i++) ((EdbTopology*)topoarr.At(i))->OrderVtxByZ();
290 }

Member Data Documentation

◆ eCond

EdbScanCond EdbVertexComb::eCond

◆ eNProngMinV

Int_t EdbVertexComb::eNProngMinV

◆ eOther

TObjArray EdbVertexComb::eOther

◆ eProbDetached

Float_t EdbVertexComb::eProbDetached

◆ eProbMinV

Float_t EdbVertexComb::eProbMinV

◆ eRecursion

Int_t EdbVertexComb::eRecursion

◆ eRecursionMax

Int_t EdbVertexComb::eRecursionMax

◆ eTopologies

TObjArray EdbVertexComb::eTopologies

◆ eTracks

TObjArray EdbVertexComb::eTracks

◆ eVertices

TObjArray EdbVertexComb::eVertices

◆ eVPar

EdbVertexPar EdbVertexComb::eVPar

◆ eZ0

Float_t EdbVertexComb::eZ0

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