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
 
TList eVTA
 
TObjArray * eVTX
 
- Public Attributes inherited from EdbVertexPar
Float_t eAbin
 
Float_t eDZmax
 
Float_t eImpMax
 
Float_t eImpMaxV
 
Float_t eProbMin
 
Int_t eQualityMode
 
Bool_t eUseKalman
 
Bool_t eUseLimits
 
Bool_t eUseMom
 
Bool_t eUseSegPar
 
TVector3 eVmax
 
TVector3 eVmin
 
Float_t eZbin
 

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
58  {
59  // initial values;
60  eDZmax = 5000.; // maximum z-gap in the track-vertex group
61  eProbMin = 0.001; // minimum acceptable probability for chi2-distance between tracks
62  eImpMax = 5.; // maximal acceptable impact parameter [microns] (for preliminary check)
63  eUseMom = false; // use or not track momentum for vertex calculations
64  eUseSegPar = true; // use only the nearest measured segments for vertex fit (as Neuchatel)
65  eQualityMode= 0; // vertex quality estimation method (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distance
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
Definition: EdbVertex.h:181
Int_t eQualityMode
Definition: EdbVertex.h:183
Bool_t eUseSegPar
Definition: EdbVertex.h:182
Float_t eImpMax
Definition: EdbVertex.h:179
Float_t eDZmax
Definition: EdbVertex.h:177
Float_t eProbMin
Definition: EdbVertex.h:178
TObjArray * eVTX
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)
162  {
163  if(set != NULL) eSet = set;
164  else eSet=gEDA->GetTrackSet("TS");
165  // Select tracks for vertexing
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  }
193  SetPVRec(eSet->GetPVRec());
194 
195  // Vertexing
196  printf("%d tracks for vertexing\n", eEdbTracks->GetEntriesFast() );
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
void ClearTracks(void)
Definition: EdbEDATrackSet.h:327
EdbPVRec * GetPVRec()
Definition: EdbEDATrackSet.h:320
void DoSelection()
Definition: EdbEDATrackSet.h:503
TObjArray * GetTracks()
Definition: EdbEDATrackSet.h:310
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
Definition: EdbPVRec.h:162
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbScanCond.h:10
Int_t ProbVertexN()
Definition: EdbVertex.cxx:1448
Int_t FindVertex()
Definition: EdbVertex.cxx:1087
TObjArray * eEdbTracks
Definition: EdbVertex.h:204
void SetPVRec(EdbPVRec *pvr)
Definition: EdbVertex.h:285
EdbPVRec rec
Definition: emtang.cpp:16
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  {
215  gEDA->ClearSelected();
217  gEDA->ClearVertices();
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
TTree * t
Definition: check_shower.C:4
void ClearSelected()
Definition: EdbEDA.h:397
void ClearSelectedVertex()
Definition: EdbEDA.h:441
TObjArray * GetVertices()
Definition: EdbEDA.h:662
void AddVertex(EdbVertex *v)
Definition: EdbEDA.h:661
Definition: EdbPattern.h:118
Int_t Nvtx() const
Definition: EdbVertex.h:287
Definition: EdbVertex.h:68
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121

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: