FEDRA emulsion software from the OPERA Collaboration
emvertex.cpp File Reference
#include <iostream>
#include "TRint.h"
#include "TStyle.h"
#include "TArrayL64.h"
#include "TMath.h"
#include "EdbLog.h"
#include "EdbScanProc.h"
#include "EdbProcPars.h"
#include "EdbVertex.h"
#include "EdbDisplay.h"
#include "EdbCombGen.h"
#include "EdbVertexComb.h"
Include dependency graph for emvertex.cpp:

Functions

void AddCompatibleTracks (EdbPVRec &v_trk, EdbPVRec &v_vtx)
 
void AjustSegmentsDisplay (TObjArray &tarr)
 
void Display (const char *dsname, EdbVertexRec *evr, TEnv &env)
 
void do_vertex (TEnv &env)
 
bool IsCompatible (EdbVertex &v, EdbTrackP &t)
 
int main (int argc, char *argv[])
 
void MakeScanCondBT (EdbScanCond &cond, TEnv &env)
 
void print_help_message ()
 
void ReadVertex (EdbID id, TEnv &env)
 
void set_default (TEnv &env)
 
void SetTracksErrors (TObjArray &tracks, EdbScanCond &cond, float p, float m)
 
void VertexRec (EdbID id, TEnv &cenv)
 

Variables

EdbPVRec gAli
 
EdbScanCond gCond
 
EdbVertexRec gEVR
 
EdbScanProc gSproc
 
EdbID idset
 

Function Documentation

◆ AddCompatibleTracks()

void AddCompatibleTracks ( EdbPVRec v_trk,
EdbPVRec v_vtx 
)
322 {
323  int ntr = v_trk.Ntracks();
324  int nvtx = v_vtx.Nvtx();
325  Log(1,"AddCompatibleTracks", "%d tracks, %d vertex", ntr,nvtx );
326  for(int iv=0; iv<nvtx; iv++)
327  {
328  EdbVertex *v = v_vtx.GetVertex(iv);
329  for(int it=0; it<ntr; it++)
330  {
331  EdbTrackP *t = v_trk.GetTrack(it);
332  if( IsCompatible(*v,*t) ) {
333  t->SetFlag(999999);
334  v_vtx.AddTrack(t);
335  }
336  }
337  }
338 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
TTree * t
Definition: check_shower.C:4
EdbVertex * GetVertex(Int_t &i)
Definition: EdbPVRec.h:256
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
Int_t Ntracks() const
Definition: EdbPVRec.h:203
Int_t Nvtx() const
Definition: EdbPVRec.h:255
void AddTrack(EdbTrackP *track)
Definition: EdbPVRec.h:246
Definition: EdbPattern.h:118
Definition: EdbVertex.h:68
bool IsCompatible(EdbVertex &v, EdbTrackP &t)
Definition: emvertex.cpp:340

◆ AjustSegmentsDisplay()

void AjustSegmentsDisplay ( TObjArray &  tarr)
80 {
81  int n=tarr.GetEntries();
82  for(int i=0; i<n; i++)
83  {
84  EdbTrackP *t = (EdbTrackP*)(tarr.At(i));
85  int nseg = t->N();
86  for(int j=0; j<nseg; j++)
87  {
88  EdbSegP *s=t->GetSegment(j);
89  s->SetDZ(1300);
90  s->SetW(10);
91  }
92  }
93 }
Definition: EdbSegP.h:18
void SetW(float w)
Definition: EdbSegP.h:129
void SetDZ(float dz)
Definition: EdbSegP.h:123
EdbSegP * s
Definition: tlg2pattern.C:32

◆ Display()

void Display ( const char *  dsname,
EdbVertexRec evr,
TEnv &  env 
)
97 {
98  TObjArray *varr = new TObjArray();
99  TObjArray *tarr = new TObjArray();
100 
101  EdbVertex *v=0;
102  EdbTrackP *t=0;
103 
104  int nv = evr->Nvtx();
105  printf("nv=%d\n",nv);
106  if(nv<1) return;
107 
108  for(int i=0; i<nv; i++) {
109  v = (EdbVertex *)(evr->eVTX->At(i));
110  varr->Add(v);
111  v->PrintGeom();
112 // v->SaveGeom();
113  for(int j=0; j<v->N(); j++) {
114  EdbTrackP *t = v->GetTrack(j);
115  tarr->Add( t );
116  }
117  }
118 
119  EdbPVRec *pvr = evr->ePVR;
120  if(pvr) {
121  int ntr = pvr->Ntracks();
122  for(int i=0; i<ntr; i++)
123  {
124  EdbTrackP *t = pvr->GetTrack(i);
125  if(t->Flag()==999999) tarr->Add(t);
126  }
127  }
128 
129  if( env.GetValue("emvertex.edd.ajustseg" , 0 ) ) AjustSegmentsDisplay( *tarr );
130 
131  gStyle->SetPalette(1);
132 
134  if(!ds) ds=new EdbDisplay(dsname,-10000.,10000.,-10000.,10000.,-10000., 10000.);
135  ds->SetVerRec(evr);
136  ds->SetArrTr( tarr );
137  printf("%d tracks to display\n", tarr->GetEntries() );
138  ds->SetArrV( varr );
139  printf("%d vertex to display\n", varr->GetEntries() );
140  //ds->SetArrSegG( tsegG );
141  //printf("%d primary tracks to display\n", tsegG->GetEntries() );
142  ds->SetDrawTracks(env.GetValue("emvertex.edd.DrawTracks" , 14));
143  ds->SetDrawVertex(env.GetValue("emvertex.edd.DrawVertex" , 1));
144  // //ds->SetView(90,180,90);
145 
146  ds->GuessRange(2000,2000,30000);
147  ds->SetStyle(1);
148  ds->Draw();
149 
150  // float s[3] = {0,0,0 };
151  //float e[3] = {Vmc[0],Vmc[1],Vmc[2]+600};
152  //ds->DrawRef(Vmc,e);
153 }
EdbDisplay * ds
Definition: check_vertex.C:16
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:786
virtual void SetStyle(int Style=0)
Definition: EdbDisplayBase.cxx:263
Definition: EdbDisplay.h:21
void SetDrawVertex(int opt)
Definition: EdbDisplay.h:108
void SetArrTr(TObjArray *arr)
Definition: EdbDisplay.cxx:430
void SetArrV(TObjArray *arrv)
Definition: EdbDisplay.cxx:500
void SetDrawTracks(int opt)
Definition: EdbDisplay.h:97
void SetVerRec(EdbVertexRec *evr)
Definition: EdbDisplay.h:91
static EdbDisplay * EdbDisplayExist(const char *title)
Definition: EdbDisplay.cxx:232
void GuessRange(float margZmin=3000, float margZmax=1000, float margR=300)
Definition: EdbDisplay.cxx:260
Definition: EdbPVRec.h:148
TObjArray * eVTX
Definition: EdbVertex.h:205
Int_t Nvtx() const
Definition: EdbVertex.h:287
EdbPVRec * ePVR
Definition: EdbVertex.h:206
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121
void PrintGeom()
Definition: EdbVertex.cxx:355
void AjustSegmentsDisplay(TObjArray &tarr)
Definition: emvertex.cpp:79

◆ do_vertex()

void do_vertex ( TEnv &  env)
274 {
275  //gAli.PrintSummary();
276  bool do_trfit = env.GetValue("emvertex.trfit.doit" , 1 );
277  float pfit = env.GetValue("emvertex.trfit.P" , 10 );
278  float mfit = env.GetValue("emvertex.trfit.M" , 0.139);
279  if(do_trfit) {
280  SetTracksErrors( *(gAli.eTracks), gCond, pfit,mfit );
281  //gAli.FitTracks(pfit,mfit );
282  }
283 
285  gEVR.eVTX = gAli.eVTX;
286  gEVR.SetPVRec(&gAli);
287 
288  gEVR.eDZmax = env.GetValue("emvertex.vtx.DZmax" , 3000.);
289  gEVR.eProbMin = env.GetValue("emvertex.vtx.ProbMinV" , 0.001);
290  gEVR.eImpMax = env.GetValue("emvertex.vtx.ImpMax" , 10.);
291  gEVR.eUseMom = env.GetValue("emvertex.vtx.UseMom" , false);
292  gEVR.eUseSegPar = env.GetValue("emvertex.vtx.UseSegPar" , false);
293  gEVR.eQualityMode= env.GetValue("emvertex.vtx.QualityMode" , 0); // (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distance)
294 
295  printf("%d tracks for vertexing\n", gEVR.eEdbTracks->GetEntries() );
296 
297  int nvtx = gEVR.FindVertex();
298  printf("%d 2-track vertexes was found\n",nvtx);
299 
300  if(nvtx == 0) return;
301  int nadd = gEVR.ProbVertexN();
302  TString name;
303  gSproc.MakeFileName(name,idset,"vtx.root",false);
305 }
static int MakeVertexTree(TObjArray &vtxarr, const char *file)
Definition: EdbDataSet.cxx:2522
TObjArray * eVTX
Definition: EdbPVRec.h:162
TObjArray * eTracks
Definition: EdbPVRec.h:161
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1885
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
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
EdbID idset
Definition: emvertex.cpp:19
EdbPVRec gAli
Definition: emvertex.cpp:20
EdbScanProc gSproc
Definition: emvertex.cpp:21
void SetTracksErrors(TObjArray &tracks, EdbScanCond &cond, float p, float m)
Definition: emvertex.cpp:353
EdbScanCond gCond
Definition: emvertex.cpp:18
EdbVertexRec gEVR
Definition: emvertex.cpp:22
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24

◆ IsCompatible()

bool IsCompatible ( EdbVertex v,
EdbTrackP t 
)
341 {
342  EdbSegP ss;
343  t.EstimatePositionAt(v.VZ(),ss);
344  float dx=ss.X()-v.VX();
345  float dy=ss.Y()-v.VY();
346  float r2 = Sqrt(dx*dx+dy*dy);
347  float dz = Abs(ss.DZ());
348  if(r2<5&&dz<4000) { printf("r2=%.4f dz=%.2f\n",r2,ss.DZ()); return true;}
349  return false;
350 }
brick dz
Definition: RecDispMC.C:107
Float_t VX() const
Definition: EdbVertex.h:133
Float_t VY() const
Definition: EdbVertex.h:134
Float_t VZ() const
Definition: EdbVertex.h:135
ss
Definition: energy.C:62

◆ main()

int main ( int  argc,
char *  argv[] 
)
158 {
159  if (argc < 2) { print_help_message(); return 0; }
160  TEnv cenv("vertexenv");
161  set_default(cenv);
162  gEDBDEBUGLEVEL = cenv.GetValue("emvertex.EdbDebugLevel" , 1 );
163  const char *outdir = cenv.GetValue("emvertex.outdir" , "..");
165  cenv.ReadFile( "vertex.rootrc" ,kEnvLocal);
166 
167  bool do_set = false;
168  bool do_display = false;
169  bool do_read = false;
170 
171  for(int i=1; i<argc; i++ ) {
172  char *key = argv[i];
173  if(!strncmp(key,"-set=",5))
174  {
175  if(strlen(key)>5) if(idset.Set(key+5)) do_set=true;
176  }
177  else if(!strncmp(key,"-r",2))
178  {
179  do_read=true;
180  }
181  else if(!strncmp(key,"-v=",3))
182  {
183  if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
184  }
185  else if(!strncmp(key,"-display",8))
186  {
187  do_display=true;
188  }
189  }
190  cenv.WriteFile("vertex.save.rootrc");
191 
192  if(do_set)
193  {
194  if(do_read)
195  {
197  }
198  else
199  {
200  Log(1,"vertex","set %s",idset.AsString());
202  }
203  }
204 
205  cenv.WriteFile("vertex.save.rootrc");
206 
207  if(do_display)
208  {
209  int argc2=1;
210  char *argv2[]={"-l"};
211  TRint app("APP",&argc2, argv2);
212  Display("display",&gEVR, cenv);
213  app.Run();
214  }
215 
216  return 0;
217 }
char * AsString() const
Definition: EdbID.cxx:24
bool Set(const char *id_string)
Definition: EdbID.cxx:17
TString eProcDirClient
Definition: EdbScanProc.h:14
TEnv cenv("emrec")
bool do_set
Definition: emrec.cpp:36
const char * outdir
Definition: emrec.cpp:37
void print_help_message()
Definition: emvertex.cpp:34
void ReadVertex(EdbID id, TEnv &env)
Definition: emvertex.cpp:219
void Display(const char *dsname, EdbVertexRec *evr, TEnv &env)
Definition: emvertex.cpp:96
void set_default(TEnv &env)
Definition: emvertex.cpp:50
void VertexRec(EdbID id, TEnv &cenv)
Definition: emvertex.cpp:252
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ MakeScanCondBT()

void MakeScanCondBT ( EdbScanCond cond,
TEnv &  env 
)
308 {
309  cond.SetSigma0( env.GetValue("emvertex.bt.Sigma0", "0.2 0.2 0.002 0.002" ) );
310  cond.SetDegrad( env.GetValue("emvertex.bt.Degrad", 5. ) );
311  cond.SetBins(3, 3, 3, 3);
312  cond.SetPulsRamp0( 12., 18. );
313  cond.SetPulsRamp04( 12., 18. );
314  cond.SetChi2Max( 6.5 );
315  cond.SetChi2PMax( 6.5 );
316  cond.SetChi2Mode( 3 );
317  cond.SetRadX0( 5810. );
318  cond.SetName("SND_basetrack");
319 }
void SetPulsRamp0(float p1, float p2)
Definition: EdbScanCond.h:74
void SetChi2Max(float chi2)
Definition: EdbScanCond.h:83
void SetDegrad(float d)
Definition: EdbScanCond.h:71
void SetChi2Mode(int mode)
Definition: EdbScanCond.h:88
void SetSigma0(float x, float y, float tx, float ty)
Definition: EdbScanCond.h:62
void SetBins(float bx, float by, float btx, float bty)
Definition: EdbScanCond.h:65
void SetPulsRamp04(float p1, float p2)
Definition: EdbScanCond.h:75
void SetRadX0(float x0)
Definition: EdbScanCond.h:57
void SetChi2PMax(float chi2)
Definition: EdbScanCond.h:84

◆ print_help_message()

void print_help_message ( )
35 {
36  cout<< "\n Vertex reconstruction in the volume. Input *.trk.root, output *.vtx.root\n";
37 
38  cout<< "\nUsage: \n\t emvertex -set=ID [-v=DEBUG] \n";
39  cout<< "\n\t emvertex -set=ID [-r -display -v=DEBUG] \n";
40  cout<< "\t\t r - read found vertices from *.vtx.root\n";
41  cout<< "\t\t display - start interactive event display\n";
42  cout<< "\t\t DEBUG - verbosity level: 0-print nothing, 1-errors only, 2-normal, 3-print all messages\n";
43 
44  cout<< "\n If the parameters file (vertex.rootrc) is not presented - the default \n";
45  cout<< " parameters are used. After the execution them will be saved into vertex.save.rootrc\n";
46  cout<<endl;
47 }

◆ ReadVertex()

void ReadVertex ( EdbID  id,
TEnv &  env 
)
220 {
221  MakeScanCondBT(gCond, env);
224  gEVR.eVTX = gAli.eVTX;
225  gEVR.SetPVRec(&gAli);
226 
227  gEVR.eDZmax = env.GetValue("emvertex.vtx.DZmax" , 3000.);
228  gEVR.eProbMin = env.GetValue("emvertex.vtx.ProbMinV" , 0.001);
229  gEVR.eImpMax = env.GetValue("emvertex.vtx.ImpMax" , 10.);
230  gEVR.eUseMom = env.GetValue("emvertex.vtx.UseMom" , false);
231  gEVR.eUseSegPar = env.GetValue("emvertex.vtx.UseSegPar" , false);
232  gEVR.eQualityMode= env.GetValue("emvertex.vtx.QualityMode" , 0); // (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distance)
233  TCut cutvtx = env.GetValue("emvertex.vtx.cutvtx" , "(flag==0||flag==3)&&n>4");
234 
235  EdbDataProc *dproc = new EdbDataProc();
236  TString name;
237  gSproc.MakeFileName(name,id,"vtx.root",false);
238  int nvtx = dproc->ReadVertexTree(gEVR, name.Data(), cutvtx);
239  if(nvtx) {
240  int do_addtracks = env.GetValue("emvertex.addtr.doit" , 0);
241  if(do_addtracks)
242  {
243  TCut cuttr = env.GetValue("emvertex.addtr.cuttr" , "1");
244  EdbPVRec *vtr = new EdbPVRec();
245  vtr->SetScanCond( new EdbScanCond(gCond) );
246  gSproc.ReadTracksTree( idset,*vtr, cuttr);
247  AddCompatibleTracks( *vtr, gAli ); // assign to the vertices of gAli additional tracks from vtr if any
248  }
249  }
250 }
EdbDataProc * dproc
Definition: check_vertex.C:13
Definition: EdbDataSet.h:180
static int ReadVertexTree(EdbVertexRec &vertexrec, const char *fname, const char *rcut, std::map< int, EdbTrackP * > &trackID_map)
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbScanCond.h:10
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:644
void MakeScanCondBT(EdbScanCond &cond, TEnv &env)
Definition: emvertex.cpp:307
void AddCompatibleTracks(EdbPVRec &v_trk, EdbPVRec &v_vtx)
Definition: emvertex.cpp:321

◆ set_default()

void set_default ( TEnv &  env)
51 {
52  // default parameters
53 
54  env.SetValue("emvertex.vtx.DZmax" , 3000.);
55  env.SetValue("emvertex.vtx.ProbMinV" , 0.001);
56  env.SetValue("emvertex.vtx.ImpMax" , 10.);
57  env.SetValue("emvertex.vtx.UseMom" , false);
58  env.SetValue("emvertex.vtx.UseSegPar" , false);
59  env.SetValue("emvertex.vtx.QualityMode" , 0); // (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distance)
60  env.SetValue("emvertex.vtx.cutvtx" , "(flag==0||flag==3)&&n>4");
61  env.SetValue("emvertex.vtx.cuttr" , "nseg>4&&npl<50");
62 
63  env.SetValue("emvertex.addtr.doit" , 0 );
64  env.SetValue("emvertex.addtr.cuttr" , "1");
65 
66  env.SetValue("emvertex.edd.ajustseg" , 0);
67  env.SetValue("emvertex.edd.seglength" , 300);
68  env.SetValue("emvertex.edd.DrawTracks" , 14);
69  env.SetValue("emvertex.edd.DrawVertex" , 1);
70 
71  env.SetValue("emvertex.trfit.doit" , 1 );
72  env.SetValue("emvertex.trfit.P" , 10 );
73  env.SetValue("emvertex.trfit.M" , 0.139);
74  env.SetValue("emvertex.bt.Sigma0", "0.2 0.2 0.002 0.002" );
75  env.SetValue("emvertex.bt.Degrad", 5. );
76 }

◆ SetTracksErrors()

void SetTracksErrors ( TObjArray &  tracks,
EdbScanCond cond,
float  p,
float  m 
)
354 {
355  int n = tracks.GetEntries();
356  Log(2,"SetTracksErrors","refit %d tracks with a new errors and p=%f m=%f",n,p,m);
357  for(int i=0; i<n; i++) {
358  EdbTrackP *t = (EdbTrackP*)tracks.At(i);
359  int nseg = t->N();
360  t->SetSegmentsP(p);
361  t->SetM(m);
362  for(int j=0; j<nseg; j++) {
363  EdbSegP *s = t->GetSegment(j);
364  s->SetErrors0();
365  cond.FillErrorsCov( s->TX(),s->TY(), s->COV() );
366  }
367  t->FitTrackKFS();
368  }
369 }
void FillErrorsCov(float tx, float ty, TMatrixD &cov)
Definition: EdbScanCond.cxx:161
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
TTree * tracks
Definition: check_tr.C:19
p
Definition: testBGReduction_AllMethods.C:8

◆ VertexRec()

void VertexRec ( EdbID  id,
TEnv &  cenv 
)
253 {
254  /*
255  float x=105;
256  float y=163;
257  float dx,dy;
258  dx=dy=5000;
259  float x0=x*1000;
260  float y0=y*1000;
261  TCut cutvol("cutvol",Form("abs(t.eX-%f)<%f&&abs(t.eY-%f)<%f",x0,dx+500,y0,dy+500));
262  */
263  TCut cuttr = env.GetValue("emvertex.vtx.cuttr" , "nseg>4&&npl<50");
264 // TCut cut=cutvol&&cuttr;
265  TCut cut=cuttr;
266 
267  MakeScanCondBT(gCond,env);
270  do_vertex(env);
271 }
TCut cut
Definition: check_shower.C:6
void do_vertex(TEnv &env)
Definition: emvertex.cpp:273

Variable Documentation

◆ gAli

EdbPVRec gAli

◆ gCond

EdbScanCond gCond

◆ gEVR

◆ gSproc

EdbScanProc gSproc

◆ idset

EdbID idset