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
 min prongs to accept the vertex for topology calculation More...
 
TObjArray eOther
 recursive array of EdbVertexComb objects in multyvertex case More...
 
Float_t eProbDetached
 default probability for the detached track (1-prong vertex) More...
 
Float_t eProbMinV
 min probability to accept the vertex for topology calculation More...
 
Int_t eRecursion
 recursion level (0 - no recursion) More...
 
Int_t eRecursionMax
 number of vertex/event to be searched More...
 
TObjArray eTopologies
 found EdbTopologies sorted by rating More...
 
TObjArray eTracks
 input EdbTracks More...
 
TObjArray eVertices
 output vertices More...
 
EdbVertexPar eVPar
 
Float_t eZ0
 input parameter: the first approximation for the vertex z-position More...
 

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
input EdbTracks
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.GetEntries() < 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
input parameter: the first approximation for the vertex z-position
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.GetEntries(); 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;
158}
Int_t eRecursionMax
number of vertex/event to be searched
Definition: EdbVertexComb.h:42
Int_t eRecursion
recursion level (0 - no recursion)
Definition: EdbVertexComb.h:43
Int_t eNProngMinV
min prongs to accept the vertex for topology calculation
Definition: EdbVertexComb.h:49
Float_t eProbMinV
min probability to accept the vertex for topology calculation
Definition: EdbVertexComb.h:48

◆ FindTopologies()

int EdbVertexComb::FindTopologies ( )
191{
192 FormVertices();
193 eTopologies.Clear();
197 int n = eTopologies.GetEntries();
198 Log(2,"EdbVertexComb::FindTopologies"," %d input tracks, upto %d vtx to search -> %d topologies found", eTracks.GetEntries(), 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
found EdbTopologies sorted by rating
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.GetEntries();
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}
objects combinations generator
Definition: EdbCombGen.h:15
Definition: EdbVertexComb.h:37
EdbVertex * CheckVTX(TObjArray &tracks)
Definition: EdbVertexComb.cxx:332
EdbVertexComb()
Definition: EdbVertexComb.h:59
TObjArray eOther
recursive array of EdbVertexComb objects in multyvertex case
Definition: EdbVertexComb.h:54
TObjArray eVertices
output vertices
Definition: EdbVertexComb.h:53
void CopyPar(EdbVertexComb &comb)
Definition: EdbVertexComb.cxx:149
int Nvtx() const
Definition: EdbVertexComb.h:78
Definition: EdbVertex.h:69
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.GetEntries();}

◆ Nvtx()

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

◆ PrintTeoricalCombinations()

void EdbVertexComb::PrintTeoricalCombinations ( Int_t  n)

Print only the first level (1 vertex combinations)

162{
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.GetEntries();
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.GetEntries();
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:113

◆ SelectTopologies()

void EdbVertexComb::SelectTopologies ( TObjArray &  topoarr)
294{
295 int nvtx = eVertices.GetEntries();
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.GetEntries();
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}
EdbVertex * AddVertex(EdbVertex *v)
Definition: EdbVertexComb.h:21
void AddSingleTracks(TObjArray &tracks)
Definition: EdbVertexComb.h:24
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.GetEntries();
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:21
s
Definition: check_shower.C:55

◆ SortTopologies()

void EdbVertexComb::SortTopologies ( TObjArray &  topoarr)
280{
281 int nt = topoarr.GetEntries();
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

min prongs to accept the vertex for topology calculation

◆ eOther

TObjArray EdbVertexComb::eOther

recursive array of EdbVertexComb objects in multyvertex case

◆ eProbDetached

Float_t EdbVertexComb::eProbDetached

default probability for the detached track (1-prong vertex)

◆ eProbMinV

Float_t EdbVertexComb::eProbMinV

min probability to accept the vertex for topology calculation

◆ eRecursion

Int_t EdbVertexComb::eRecursion

recursion level (0 - no recursion)

◆ eRecursionMax

Int_t EdbVertexComb::eRecursionMax

number of vertex/event to be searched

◆ eTopologies

TObjArray EdbVertexComb::eTopologies

found EdbTopologies sorted by rating

◆ eTracks

TObjArray EdbVertexComb::eTracks

input EdbTracks

◆ eVertices

TObjArray EdbVertexComb::eVertices

output vertices

◆ eVPar

EdbVertexPar EdbVertexComb::eVPar

◆ eZ0

Float_t EdbVertexComb::eZ0

input parameter: the first approximation for the vertex z-position


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