FEDRA emulsion software from the OPERA Collaboration
EdbEDAVertexTab Class Reference

#include <EdbEDATabs.h>

Inheritance diagram for EdbEDAVertexTab:
Collaboration diagram for EdbEDAVertexTab:

Public Types

enum  { USE_CURRENT_TRACKS , USE_ALL_TRACKS }
 

Public Member Functions

void ApplyParams ()
 
void Clear ()
 
void DoVertexing (EdbEDATrackSet *set=NULL)
 
void DoVertexingButton ()
 
 EdbEDAVertexTab ()
 
void MakeGUI ()
 
void Redraw ()
 
void SetVertices ()
 
- Public Member Functions inherited from EdbVertexRec
void AcceptModifiedVTX (EdbVertex *eVertex, EdbVertex *eWorking)
 
void AcceptPolish ()
 
Int_t AddSegmentToVertex (EdbSegP *s, float ImpMax=25., float ProbMin=0.01, float Mom=0.3)
 
EdbVTAAddTrack (EdbVertex &edbv, EdbTrackP *track, int zpos)
 
EdbVertexAddTrackToVertex (EdbVertex *eVertex, EdbTrackP *eTr, int zpos)
 
void AddVertex (EdbVertex *vtx)
 
void AddVTA (EdbVTA *vta)
 
void CancelModifiedVTX (EdbVertex *eVertex, EdbVertex *eWorking)
 
Bool_t CheckDZ2 (float z1, float z2, int zpos1, int zpos2, float z)
 
Float_t CheckImpact (EdbSegP *s1, EdbSegP *s2, int zpos1, int zpos2, float pv[3])
 
Float_t CheckImpactN (EdbSegP *s1, EdbSegP *s2, float pv[3], bool &parallel, float dzMax=6000.)
 
int CheckTrack (EdbTrackP &track, int zpos)
 
void CheckVTX ()
 
bool CompatibleSegments (EdbSegP &spred, EdbSegP &stest, float impact, float dthetaMax, float dxy, float zminT, float zmaxT, float zminV, float zmaxV)
 
 EdbVertexRec ()
 
 EdbVertexRec (EdbVertexPar &vpar)
 
int EstimateVertexFlag (int zpos1, int zpos2)
 
Bool_t EstimateVertexPosition (EdbVertex &v)
 
Bool_t EstimateVertexQuality (EdbVertex &v)
 
void FillTracksStartEnd (TIndexCell &starts, TIndexCell &ends)
 
Int_t FindSimilarSegments (EdbSegP &spred, TObjArray &found, EdbPattern &pat, float impact, float dthetaMax, float dxy, float zminT, float zmaxT, float zminV, float zmaxV)
 
Int_t FindSimilarTracks (EdbTrackP &t, TObjArray &found, int nsegmin=2, float dMax=100., float dTheta=0.01, float dZmax=50000.)
 
Int_t FindSimilarTracksE (EdbSegP &spred, TObjArray &found, bool startend, float impact, float dthetaMax, float dxy, float zminT, float zmaxT, float zminV, float zmaxV)
 
Int_t FindVertex ()
 
EdbTrackPGetEdbTrack (const int index)
 
EdbVertexGetVertex (Int_t &i)
 
Bool_t IsInsideLimits (EdbSegP &s)
 
Int_t LinkedVertexes ()
 
Int_t LoopVertex (TIndexCell &list1, TIndexCell &list2, int zpos1, int zpos2)
 
EdbVertexMake1Vertex (TObjArray &tracks, float zexpected)
 
Int_t MakeV (EdbVertex &edbv, bool isRefit=false)
 
Double_t MoveTrackToOtherVertex (EdbVertex *v2, int it2max, EdbVertex *v1, int seltype, EdbVertex **v2n, EdbVertex **v1n)
 
Int_t Nvtx () const
 
EdbVertexProbVertex2 (EdbTrackP *tr1, EdbTrackP *tr2, int zpos1, int zpos2)
 
Int_t ProbVertexN ()
 
Int_t ProbVertexN_old ()
 
Int_t ProbVertexNpos (int zpos)
 
int RefitAll ()
 
void RejectPolish ()
 
EdbVertexRemoveTrackFromVertex (EdbVertex *eVertex, int itr)
 
EdbVertexRemoveVTAFromVertex (EdbVertex &vtx, EdbVTA &vta)
 
void Reset ()
 
Int_t SegmentNeighbor (EdbSegP *s, float RadMax=1000., int Dpat=1, float ImpMax=1000000., float SegWmin=9, TObjArray *aseg=0, TObjArray *atr=0, TObjArray *arv=0)
 
Int_t SelSegNeighbor (EdbSegP *s, int seltype, float RadMax, int Dpat, TObjArray *ao)
 
Int_t SelVertNeighbor (EdbVertex *v, int seltype, float RadMax, int Dpat, TObjArray *ao)
 
void Set0 ()
 
void SetPVRec (EdbPVRec *pvr)
 
void StatVertexN ()
 
EdbVertexStripBadTracks (EdbVertex &v, float impMax, int ntrMin)
 
Double_t Tdistance (const EdbSegP &s1, const EdbSegP &s2)
 
Double_t Tdistance (const VERTEX::Track &t1, const VERTEX::Track &t2)
 
Double_t TdistanceChi2 (const EdbSegP &s1, const EdbSegP &s2, float m)
 
Double_t TdistanceChi2 (const EdbTrackP &tr1, const EdbTrackP &tr2)
 
EdbVertexTestVTAGroup (TObjArray &arrvta)
 
Int_t VertexNeighbor (EdbVertex *v, float RadMax=1000., int Dpat=1, float ImpMax=1000000.)
 
Int_t VertexNeighbor (float RadMax=1000., int Dpat=1, float ImpMax=1000000.)
 
Int_t VertexPolish (EdbVertex *v, int refill=0, float RadMax=1000., int Dpat=2, float ImpMax=25., float ProbMin=0.01, float Mom=0.3)
 
Int_t VertexTuning (int seltype=0)
 
const TVector3 * Vmax () const
 
const TVector3 * Vmin () const
 
virtual ~EdbVertexRec ()
 
- Public Member Functions inherited from EdbVertexPar
 EdbVertexPar ()
 
virtual ~EdbVertexPar ()
 

Public Attributes

int eAngularCut
 
double eDT
 
TGCheckButton * eGCBAngularCut
 
TGCheckButton * eGCBUseMom
 
TGCheckButton * eGCBUseSegPar
 
TGComboBox * eGCBVtxTrk
 
TGNumberEntryField * eGNEDZmax
 
TGNumberEntryField * eGNEImpMax
 
TGNumberEntryField * eGNEProbMinV
 
TGNumberEntry * eGNEVNtrk
 
int eNtrk
 
EdbEDATrackSeteSet
 
double eTX
 
double eTY
 
int eVtxTrk
 
- Public Attributes inherited from EdbVertexRec
TObjArray * eEdbTracks
 
EdbPVRecePVR
 patterns volume (optional) More...
 
TList eVTA
 vertex-track associations More...
 
TObjArray * eVTX
 array of vertex More...
 
- Public Attributes inherited from EdbVertexPar
Float_t eAbin
 safety margin for angular aperture of vertex products More...
 
Float_t eDZmax
 maximum z-gap in the track-vertex group More...
 
Float_t eImpMax
 maximal acceptable impact parameter (preliminary check) More...
 
Float_t eImpMaxV
 if the impact is <= eImpMaxV the 2-vertex is accepted disregard to it's probability More...
 
Float_t eProbMin
 minimum acceptable probability for chi2-distance between tracks More...
 
Int_t eQualityMode
 vertex quality estimation method (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distance) More...
 
Bool_t eUseKalman
 use or not Kalman for the vertex fit. Default is true More...
 
Bool_t eUseLimits
 if true - look for the vertex only inside limits defined by eVmin:eVmax, default is false More...
 
Bool_t eUseMom
 use or not track momentum for vertex calculations More...
 
Bool_t eUseSegPar
 use only the nearest measured segments for vertex fit (as Neuchatel) More...
 
TVector3 eVmax
 limits for the vertex search More...
 
TVector3 eVmin
 
Float_t eZbin
 z- granularity (default is 100 microns) More...
 

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
USE_CURRENT_TRACKS 
USE_ALL_TRACKS 
53 {
56 };
@ USE_CURRENT_TRACKS
Definition: EdbEDATabs.h:54
@ USE_ALL_TRACKS
Definition: EdbEDATabs.h:55

Constructor & Destructor Documentation

◆ EdbEDAVertexTab()

EdbEDAVertexTab::EdbEDAVertexTab ( )
inline

initial values;

< maximum z-gap in the track-vertex group

< minimum acceptable probability for chi2-distance between tracks

< maximal acceptable impact parameter [microns] (for preliminary check)

< use or not track momentum for vertex calculations

< use only the nearest measured segments for vertex fit (as Neuchatel)

< vertex quality estimation method (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distance

58 {
60 eDZmax = 5000.;
61 eProbMin = 0.001;
62 eImpMax = 5.;
63 eUseMom = false;
64 eUseSegPar = true;
65 eQualityMode= 0;
67 eNtrk = 3;
68 eVTX = NULL;
69 MakeGUI();
70 }
void MakeGUI()
Definition: EdbEDATabs.C:249
int eVtxTrk
Definition: EdbEDATabs.h:35
int eNtrk
Definition: EdbEDATabs.h:34
Bool_t eUseMom
use or not track momentum for vertex calculations
Definition: EdbVertex.h:181
Int_t eQualityMode
vertex quality estimation method (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distanc...
Definition: EdbVertex.h:183
Bool_t eUseSegPar
use only the nearest measured segments for vertex fit (as Neuchatel)
Definition: EdbVertex.h:182
Float_t eImpMax
maximal acceptable impact parameter (preliminary check)
Definition: EdbVertex.h:179
Float_t eDZmax
maximum z-gap in the track-vertex group
Definition: EdbVertex.h:177
Float_t eProbMin
minimum acceptable probability for chi2-distance between tracks
Definition: EdbVertex.h:178
TObjArray * eVTX
array of vertex
Definition: EdbVertex.h:205
#define NULL
Definition: nidaqmx.h:84

Member Function Documentation

◆ ApplyParams()

void EdbEDAVertexTab::ApplyParams ( )
140 {
141 eNtrk = eGNEVNtrk->GetIntNumber();
142 eVtxTrk = eGCBVtxTrk->GetSelected();
143 eDZmax = eGNEDZmax->GetNumber();
144 eProbMin = eGNEProbMinV->GetNumber();
145 eImpMax = eGNEImpMax->GetNumber();
146 eUseMom = eGCBUseMom->IsOn();
147 eUseSegPar = eGCBUseSegPar->IsOn();
149
150 eAngularCut = eGCBAngularCut->IsOn();
151 eTX = gEDA->GetMainTab()->GetTX();
152 eTY = gEDA->GetMainTab()->GetTY();
153 eDT = gEDA->GetMainTab()->GetDT();
154}
EdbEDA * gEDA
Definition: EdbEDA.C:3
double GetDT()
Definition: EdbEDAMainTab.h:113
double GetTX()
Definition: EdbEDAMainTab.h:111
double GetTY()
Definition: EdbEDAMainTab.h:112
TGComboBox * eGCBVtxTrk
Definition: EdbEDATabs.h:43
double eDT
Definition: EdbEDATabs.h:49
TGNumberEntryField * eGNEDZmax
Definition: EdbEDATabs.h:39
TGCheckButton * eGCBUseSegPar
Definition: EdbEDATabs.h:42
int eAngularCut
Definition: EdbEDATabs.h:46
TGCheckButton * eGCBUseMom
Definition: EdbEDATabs.h:41
TGCheckButton * eGCBAngularCut
Definition: EdbEDATabs.h:45
double eTY
Definition: EdbEDATabs.h:48
TGNumberEntry * eGNEVNtrk
Definition: EdbEDATabs.h:40
double eTX
Definition: EdbEDATabs.h:47
TGNumberEntryField * eGNEImpMax
Definition: EdbEDATabs.h:37
TGNumberEntryField * eGNEProbMinV
Definition: EdbEDATabs.h:38
EdbEDAMainTab * GetMainTab()
Definition: EdbEDA.h:724

◆ Clear()

void EdbEDAVertexTab::Clear ( )
245{ gEDA->ClearVertices(); gEDA->Redraw(); }
void ClearVertices()
Definition: EdbEDA.h:663
void Redraw()
Definition: EdbEDA.h:680

◆ DoVertexing()

void EdbEDAVertexTab::DoVertexing ( EdbEDATrackSet set = NULL)

Select tracks for vertexing

162 {
163 if(set != NULL) eSet = set;
164 else eSet=gEDA->GetTrackSet("TS");
166
167 ApplyParams();
168 printf("----------------------------------------------------------\n");
169 printf(" Do vertexing, ");
171 printf("using tracks in current view.\n");
173 }
174 else {
175 printf("using tracks all tracks with Nseg, MaxPlate cuts\n");
176 // apply cuts on Nseg and Penetration.
178 eSet->SetImpactSearch (kFALSE);
179 eSet->SetNeighborSearch (kFALSE);
180 eSet->SetAngularCut (kFALSE);
181 eSet->ClearTracks();
182 eSet->DoSelection();
184 }
185
186 // Setting parameters
187 eVTX = new TObjArray;
188 if( eSet->GetPVRec()==NULL) {
189 EdbPVRec *rec = new EdbPVRec;
190 eSet->SetPVRec(rec);
191 }
194
195 // Vertexing
196 printf("%d tracks for vertexing\n", eEdbTracks->GetEntries() );
197 int nvtx = FindVertex();
198 printf("%d 2-track vertexes was found\n",nvtx);
199 int nadd;
200 if(nvtx != 0) nadd = ProbVertexN();
201
202 eSet->GetPVRec()->eVTX = eVTX;
203
204}
void ApplyParams()
void SetImpactSearch(bool b=kTRUE, EdbVertex *v=NULL)
Definition: EdbEDATrackSet.h:94
void SetNeighborSearch(bool b=kTRUE, TObjArray *selected=NULL, double dzup=-1, double dzdown=-1)
Definition: EdbEDATrackSet.h:95
void SetAngularCut(bool b=kTRUE)
Definition: EdbEDATrackSet.h:102
void SetPVRec(EdbPVRec *pvr)
Definition: EdbEDATrackSet.h:321
TObjArray * GetTracks()
Definition: EdbEDATrackSet.h:310
void ClearTracks(void)
Definition: EdbEDATrackSet.h:327
EdbPVRec * GetPVRec()
Definition: EdbEDATrackSet.h:320
void DoSelection()
Definition: EdbEDATrackSet.h:503
void ApplyParams()
Definition: EdbEDATabs.C:140
EdbEDATrackSet * eSet
Definition: EdbEDATabs.h:51
EdbEDATrackSet * GetTrackSet(int i)
Definition: EdbEDA.h:617
Definition: EdbPVRec.h:148
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
TObjArray * eVTX
array of vertex
Definition: EdbPVRec.h:162
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbScanCond.h:10
Int_t ProbVertexN()
Definition: EdbVertex.cxx:1426
Int_t FindVertex()
Definition: EdbVertex.cxx:1065
TObjArray * eEdbTracks
Definition: EdbVertex.h:204
void SetPVRec(EdbPVRec *pvr)
Definition: EdbVertex.h:285
EdbScanSet * set
Definition: emtraceback.cpp:14

◆ DoVertexingButton()

void EdbEDAVertexTab::DoVertexingButton ( )
206 {
207 DoVertexing();
208 gEDA->GetVertexSet()->Clear();
211 Redraw();
212}
void SetTracksVertices(TObjArray *vertices, bool clear_previous=kTRUE)
Definition: EdbEDATrackSet.h:515
void AddVertices(TObjArray *vertices)
Definition: EdbEDASets.h:189
void Clear()
Definition: EdbEDASets.h:214
void Redraw()
Definition: EdbEDATabs.C:156
void DoVertexing(EdbEDATrackSet *set=NULL)
Definition: EdbEDATabs.C:162
EdbEDAVertexSet * GetVertexSet()
Definition: EdbEDA.h:660

◆ MakeGUI()

void EdbEDAVertexTab::MakeGUI ( )
249 {
250 TEveBrowser* browser = gEve->GetBrowser();
251 browser->StartEmbedding(TRootBrowser::kBottom);
252
253 TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot());
254 frmMain->SetWindowName("XX GUI");
255 frmMain->SetCleanup(kDeepCleanup);
256 frmMain->SetLayoutBroken(kTRUE);
257
258 TGLabel *fLabel;
259 int posy=10;
260 int posx=10;
261 int dx=50;
262
263 fLabel = new TGLabel(frmMain,"ImpMax =");
264 fLabel->MoveResize(posx,posy,dx,20);
265 posx+=dx+5;
266 eGNEImpMax = new TGNumberEntryField(frmMain, -1, eImpMax);
267 eGNEImpMax->MoveResize(posx,posy,dx=30,20);
268
269 posx+=dx+10;
270 fLabel = new TGLabel(frmMain,"DZmax =");
271 fLabel->MoveResize(posx,posy,dx=50,20);
272 posx+=dx+5;
273 eGNEDZmax = new TGNumberEntryField(frmMain, -1, eDZmax);
274 eGNEDZmax->MoveResize(posx,posy,dx,20);
275
276 posx+=dx+10;
277 fLabel = new TGLabel(frmMain,"ProbMinV =");
278 fLabel->MoveResize(posx,posy,dx=70,20);
279 posx+=dx+5;
280 eGNEProbMinV = new TGNumberEntryField(frmMain, -1, eProbMin);
281 eGNEProbMinV->MoveResize(posx,posy,dx=50,20);
282
283 posx+=dx+15;
284 eGCBUseMom = new TGCheckButton(frmMain,"UseMom");
285 eGCBUseMom->MoveResize(posx,posy,dx=70,20);
286 eGCBUseMom->SetState(eUseMom?kButtonDown:kButtonUp);
287
288 posx+=dx+10;
289 eGCBUseSegPar = new TGCheckButton(frmMain,"UseSegPar");
290 eGCBUseSegPar->MoveResize(posx,posy,dx=90,20);
291 eGCBUseSegPar->SetState(eUseSegPar?kButtonDown:kButtonUp);
292
293 // combo box
294 posx+=dx+10;
295 eGCBVtxTrk = new TGComboBox(frmMain,-1,kHorizontalFrame | kSunkenFrame | kDoubleBorder | kOwnBackground);
296 frmMain->AddFrame(eGCBVtxTrk);
297 eGCBVtxTrk->AddEntry("All Tracks", USE_ALL_TRACKS);
298 eGCBVtxTrk->AddEntry("Current View",USE_CURRENT_TRACKS);
299 eGCBVtxTrk->Select(USE_ALL_TRACKS);
300 eGCBVtxTrk->MoveResize(posx,posy,dx=100,20);
301
302
303 posx+=dx+10;
304 TGTextButton *fb = new TGTextButton(frmMain,"Do Vertexing");
305 fb->MoveResize(posx,posy,dx=80,20);
306 fb->Connect("Clicked()","EdbEDAVertexTab", this, "DoVertexingButton()");
307
308 posy+=30;
309 posx=20;
310 fLabel = new TGLabel(frmMain,"Ntracks");
311 fLabel->MoveResize(posx,posy,dx,20);
312 posx+=dx+5;
313 eGNEVNtrk = new TGNumberEntry(frmMain,eNtrk,11,-1,(TGNumberFormat::EStyle) 5);
314 eGNEVNtrk->MoveResize(posx,posy,dx=50,20);
315
316 posx+=dx+10;
317 eGCBAngularCut = new TGCheckButton(frmMain,"Angular cut");
318 eGCBAngularCut->MoveResize(posx,posy,dx=90,20);
319 eGCBAngularCut->SetToolTipText("Select the vertices including a given-angle track.\nAngle and tolerances in Main tab will be used.");
320
321 posx+=dx+10;
322 fb = new TGTextButton(frmMain,"Show vertex");
323 fb->MoveResize(posx,posy,dx=80,20);
324 fb->Connect("Clicked()","EdbEDAVertexTab", this, "Redraw()");
325
326 posx+=dx+10;
327 fb = new TGTextButton(frmMain,"Clear");
328 fb->MoveResize(posx,posy,dx=50,20);
329 fb->Connect("Clicked()","EdbEDAVertexTab", this, "Clear()");
330
331 frmMain->MapSubwindows();
332 frmMain->Resize();
333 frmMain->MapWindow();
334
335 browser->StopEmbedding();
336 browser->SetTabTitle("Vertexing", 2);
337}

◆ Redraw()

void EdbEDAVertexTab::Redraw ( )
156 {
157 SetVertices();
158 gEDA->Redraw();
159}
void SetVertices()
Definition: EdbEDATabs.C:214

◆ SetVertices()

void EdbEDAVertexTab::SetVertices ( )
214 {
218 ApplyParams();
219
220 if(eVTX==NULL) DoVertexing();
221
222 for(int j=0 ; j < Nvtx() ; j++){
223 EdbVertex *v = (EdbVertex *) (eVTX->At(j));
224
225 // ntrack cut
226 if(v->N()<eNtrk) continue;
227
228 // cut vertices which doesn't have a track matching the angle.
229 if ( eAngularCut){
230 int flag=0;
231 for(int i=0;i<v->N();i++){
232 EdbTrackP *t = v->GetTrack(i);
233 if( fabs(t->TX() - eTX) < eDT &&
234 fabs(t->TY() - eTY) < eDT) flag++;
235 }
236 if(flag==0) continue;
237 }
238 gEDA->AddVertex(v);
239 }
240
242}
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
void ClearSelected()
Definition: EdbEDA.h:397
void ClearSelectedVertex()
Definition: EdbEDA.h:441
void AddVertex(EdbVertex *v)
Definition: EdbEDA.h:661
TObjArray * GetVertices()
Definition: EdbEDA.h:662
Definition: EdbPattern.h:113
Int_t Nvtx() const
Definition: EdbVertex.h:287
Definition: EdbVertex.h:69
Int_t N() const
Definition: EdbVertex.h:121
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
TTree * t
Definition: check_shower.C:4

Member Data Documentation

◆ eAngularCut

int EdbEDAVertexTab::eAngularCut

◆ eDT

double EdbEDAVertexTab::eDT

◆ eGCBAngularCut

TGCheckButton* EdbEDAVertexTab::eGCBAngularCut

◆ eGCBUseMom

TGCheckButton* EdbEDAVertexTab::eGCBUseMom

◆ eGCBUseSegPar

TGCheckButton* EdbEDAVertexTab::eGCBUseSegPar

◆ eGCBVtxTrk

TGComboBox* EdbEDAVertexTab::eGCBVtxTrk

◆ eGNEDZmax

TGNumberEntryField* EdbEDAVertexTab::eGNEDZmax

◆ eGNEImpMax

TGNumberEntryField* EdbEDAVertexTab::eGNEImpMax

◆ eGNEProbMinV

TGNumberEntryField* EdbEDAVertexTab::eGNEProbMinV

◆ eGNEVNtrk

TGNumberEntry* EdbEDAVertexTab::eGNEVNtrk

◆ eNtrk

int EdbEDAVertexTab::eNtrk

◆ eSet

EdbEDATrackSet* EdbEDAVertexTab::eSet

◆ eTX

double EdbEDAVertexTab::eTX

◆ eTY

double EdbEDAVertexTab::eTY

◆ eVtxTrk

int EdbEDAVertexTab::eVtxTrk

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