FEDRA emulsion software from the OPERA Collaboration
emvtx.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 emvtx.cpp:

Functions

TEnv cenv ("emvtx")
 
Long64_t FindID (EdbTrackP *t, TObjArray &tracks, TArrayL64 &idArr)
 
int main (int argc, char *argv[])
 
EdbTrackPmake_seg_track (int id, float x, float y, float z, float tx, float ty, float p, float *vp=0)
 
void MakeScanCondBT (EdbScanCond &cond)
 
void MakeScanCondCS (EdbScanCond &cond)
 
void print_help_message ()
 
int readBTdata (const char *fname, TObjArray &tracks, TObjArray &aux_tr)
 
int readCSdata (const char *fname, TObjArray &tracks, TArrayL64 &idArr, int minRank)
 
void set_default (TEnv &cenv)
 
void SetTracksErrors (TObjArray &tracks, EdbScanCond &cond)
 
void test_EdbVertexComb (TObjArray &tracks, TEnv &env)
 
void vd (const char *dsname, EdbVertexRec *evr)
 
EdbVertexvtxBT (const char *file, TEnv &env)
 
EdbVertexvtxBT1 (TObjArray &tracks, TEnv &env)
 
void vtxBTcomb (const char *file, TEnv &env)
 
void vtxComb (TObjArray &tracks, TObjArray &aux_tr, TEnv &env)
 
EdbVertexvtxCS (const char *file, TEnv &env)
 
EdbVertexvtxStrip (TObjArray &tracks, TArrayL64 &idArr, TEnv &env)
 

Variables

EdbScanCond gCond
 
EdbVertexRecgEVRCS =0
 

Function Documentation

◆ cenv()

TEnv cenv ( "emvtx"  )

◆ FindID()

Long64_t FindID ( EdbTrackP t,
TObjArray &  tracks,
TArrayL64 &  idArr 
)
248 {
249  int n = tracks.GetEntries();
250  for(int i=0; i<n; i++) {
251  if(t == tracks.At(i)) return idArr[i];
252  }
253  return -1;
254 }
TTree * t
Definition: check_shower.C:4
TTree * tracks
Definition: check_tr.C:19

◆ main()

int main ( int  argc,
char *  argv[] 
)
493 {
494  if (argc < 2) { print_help_message(); return 0; }
495 
496  bool do_fcs = false;
497  bool do_fbt = false;
498  bool do_display = false;
499  const char *filecs=0;
500  const char *filebt=0;
501 
502  for(int i=1; i<argc; i++ ) {
503  char *key = argv[i];
504  if(!strncmp(key,"-fcs=",5))
505  {
506  if(strlen(key)>5) { filecs = key+5; do_fcs=true; }
507  }
508  else if(!strncmp(key,"-fbt=",5))
509  {
510  if(strlen(key)>5) { filebt = key+5; do_fbt=true; }
511  }
512  else if(!strncmp(key,"-v=",3))
513  {
514  if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
515  }
516  else if(!strncmp(key,"-display",8))
517  {
518  do_display=true;
519  }
520  }
521 
522  set_default(cenv);
523  cenv.ReadFile("emvtx.rootrc" ,kEnvLocal);
524  //cenv.Print();
525 
526  if(do_fcs)
527  {
528  EdbVertex *v = vtxCS( filecs, cenv );
529  }
530 
531  if(do_fbt)
532  {
533  //EdbVertex *v = vtxBT( filebt, cenv );
534  //v->Print();
535  vtxBTcomb( filebt, cenv );
536  }
537 
538  cenv.WriteFile("emvtx.save.rootrc");
539 
540  if(do_display)
541  {
542  int argc2=1;
543  char *argv2[]={"-l"};
544  TRint app("APP",&argc2, argv2);
545 
546  vd("display",gEVRCS);
547  app.Run();
548  }
549 
550 
551  return 0;
552 }
Definition: EdbVertex.h:68
void set_default(TEnv &cenv)
Definition: emvtx.cpp:47
void print_help_message()
Definition: emvtx.cpp:27
void vtxBTcomb(const char *file, TEnv &env)
Definition: emvtx.cpp:447
void vd(const char *dsname, EdbVertexRec *evr)
Definition: emvtx.cpp:62
EdbVertexRec * gEVRCS
Definition: emvtx.cpp:24
EdbVertex * vtxCS(const char *file, TEnv &env)
Definition: emvtx.cpp:291
TEnv cenv("emvtx")
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ make_seg_track()

EdbTrackP* make_seg_track ( int  id,
float  x,
float  y,
float  z,
float  tx,
float  ty,
float  p,
float *  vp = 0 
)
121 {
122  EdbSegP *s = new EdbSegP( id, x,y, tx,ty, 20, 0);
123  s->SetZ(z);
124  if(vp) {
125  s->SetDZ(500*vp[2]); // the length is proportional to P
126  s->PropagateTo(z+s->DZ()/2);
127  } else {
128  s->SetDZ(200);
129  }
130  s->SetErrorsCOV( 10,10,100, 0.00003,0.00003, 1);
131  EdbTrackP *t = new EdbTrackP(s);
132  t->SetM(0.12);
133  t->SetP(p);
134  t->FitTrackKFS();
135  return t;
136 }
Definition: EdbSegP.h:18
Float_t DZ() const
Definition: EdbSegP.h:151
void PropagateTo(float z)
Definition: EdbSegP.cxx:292
void SetErrorsCOV(float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1.)
Definition: EdbSegP.cxx:71
void SetZ(float z)
Definition: EdbSegP.h:122
void SetDZ(float dz)
Definition: EdbSegP.h:123
Definition: EdbPattern.h:118
p
Definition: testBGReduction_AllMethods.C:8
EdbSegP * s
Definition: tlg2pattern.C:32

◆ MakeScanCondBT()

void MakeScanCondBT ( EdbScanCond cond)
202 {
203  cond.SetSigma0( 1., 1., 0.002, 0.002);
204  cond.SetDegrad( 5. );
205  cond.SetBins(3, 3, 3, 3);
206  cond.SetPulsRamp0( 12., 18. );
207  cond.SetPulsRamp04( 12., 18. );
208  cond.SetChi2Max( 6.5 );
209  cond.SetChi2PMax( 6.5 );
210  cond.SetChi2Mode( 3 );
211  cond.SetRadX0( 5810. );
212  cond.SetName("OPERA_basetrack");
213 }
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

◆ MakeScanCondCS()

void MakeScanCondCS ( EdbScanCond cond)
217 {
218  cond.SetSigma0( 10., 10., 0.006, 0.006);
219  cond.SetDegrad( 5. );
220  cond.SetBins(3, 3, 3, 3);
221  cond.SetPulsRamp0( 12., 18. );
222  cond.SetPulsRamp04( 12., 18. );
223  cond.SetChi2Max( 6.5 );
224  cond.SetChi2PMax( 6.5 );
225  cond.SetChi2Mode( 3 );
226  cond.SetRadX0( 5810. );
227  cond.SetName("OPERA_CS_prediction");
228 }

◆ print_help_message()

void print_help_message ( )
28 {
29  cout<< "\n Vertex check using as input tracks ascii files\n";
30 
31  cout<< "\nUsage: \n\t emvtx -fcs=tracks_file.txt [-display -v=DEBUG] \n";
32  cout<< "\t\t fcs - file in CS format \n";
33  cout<< "\t\t fbt - file with basetracks in \"Bari format\" \n";
34  cout<< "\t\t display- start interactive event display \n";
35  cout<< "\t\t DEBUG - verbosity level: 0-print nothing, 1-errors only, 2-normal, 3-print all messages\n";
36 
37  cout<< "\nCS format:\n\t BRICK EVENT \n\t x y z tx ty nbt rank idtr idtrG \n\t ...\n";
38  cout<< "\nExample: \n";
39  cout<< "\t emvtx -fcs=tracks_ev1.txt -v=2\n";
40 
41  cout<< "\n If the parameters file (emvtx.rootrc) is not presented - the default \n";
42  cout<< " parameters are used. After the execution them will be saved into emvtx.save.rootrc\n";
43  cout<<endl;
44 }

◆ readBTdata()

int readBTdata ( const char *  fname,
TObjArray &  tracks,
TObjArray &  aux_tr 
)
171 {
172  printf("open file (expect Bari format): %s\n",fname);
173  FILE *f = fopen( fname, "r" ); if(!f) return -1;
174  char buffer[256];
175 
176  // read brick and event
177  Long_t BRICK=0, NTR=0;
178  if(!fgets (buffer, 256, f)) return -1;
179  if ( sscanf(buffer,"%ld %ld", &BRICK,&NTR) !=2 ) return -1;
180  printf("BRICK: %ld NTR: %ld\n",BRICK,NTR);
181 
182  // read CS tracks
183  int ntr=0;
184  int idtr, plate;
185  float x,y,z,tx,ty, p;
186  if(gEDBDEBUGLEVEL>1) printf(" idtr X Y Z TX TY P idpl\n");
187  while( fgets (buffer, 256, f) ) {
188  if ( sscanf(buffer,"%d %f %f %f %f %f %f %d", &idtr, &x, &y, &z, &tx, &ty, &p, &plate) !=8 ) break;
189  if(idtr>=0) tracks.Add( make_seg_track( idtr, x, y, z, tx, ty, p,0) );
190  else aux_tr.Add( make_seg_track( idtr, x, y, z, tx, ty, p,0) );
191  if(gEDBDEBUGLEVEL>1) printf("%5d %12.2f %12.2f %12.2f %8.4f %8.4f %8.2f %4d\n"
192  ,idtr, x, y, z, tx, ty, p, plate );
193  ntr++;
194  }
195  if(NTR!=ntr) Log(1,"readVTXdata","Warning! expected number of tracks is different: %d %d", NTR, ntr);
196  fclose(f);
197  return ntr;
198 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
FILE * f
Definition: RecDispMC.C:150
EdbTrackP * make_seg_track(int id, float x, float y, float z, float tx, float ty, float p, float *vp=0)
Definition: emvtx.cpp:120
const char * fname
Definition: mc2raw.cxx:41
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1
fclose(pFile)
Definition: RecDispMC.C:95

◆ readCSdata()

int readCSdata ( const char *  fname,
TObjArray &  tracks,
TArrayL64 &  idArr,
int  minRank 
)
140 {
141 //
142  printf("open file (expect CS format): %s\n",fname);
143  FILE *f = fopen( fname, "r" ); if(!f) return -1;
144  char buffer[256];
145 
146  // read brick and event
147  Long_t BRICK=0, EVENT=0;
148  if(!fgets (buffer, 256, f)) return -1;
149  if ( sscanf(buffer,"%ld %ld", &BRICK,&EVENT) !=2 ) return -1;
150  printf("brick: %ld event: %ld\n",BRICK,EVENT);
151 
152  float momentum=1.0;
153  // read CS tracks
154  int ntr=0;
155  int nbt, idtr;
156  Long64_t idtrG;
157  float x,y,z,tx,ty, rank;
158  while( fgets (buffer, 256, f) ) {
159  if ( sscanf(buffer,"%f %f %f %f %f %d %f %d %lld", &x, &y, &z, &tx, &ty, &nbt, &rank, &idtr, &idtrG) !=9 ) break;
160  if(rank<minRank) continue;
161  idArr[ntr] = idtrG;
162  tracks.Add( make_seg_track( idtr, x, y, 0, tx, ty, momentum,0) );
163  ntr++;
164  }
165  fclose(f);
166  return ntr;
167 }
float momentum
Definition: check_vertex.C:20

◆ set_default()

void set_default ( TEnv &  cenv)
48 {
49  // default parameters
50  cenv.SetValue("emvtx.CS.minRank", 0 );
51  cenv.SetValue("emvtx.CS.maxImp", 1000);
52 
53  cenv.SetValue("emvtx.comb.Sigma0", "1. 1. 0.002 0.002");
54  cenv.SetValue("emvtx.comb.maxImp", 1000.);
55  cenv.SetValue("emvtx.comb.ProbMin", 0.00000001);
56  cenv.SetValue("emvtx.comb.Z0", -10000);
57  cenv.SetValue("emvtx.comb.NVmax", 3 );
58  cenv.SetValue("emvtx.comb.ProbMinV", 0.001);
59 }

◆ SetTracksErrors()

void SetTracksErrors ( TObjArray &  tracks,
EdbScanCond cond 
)
232 {
233  int n = tracks.GetEntries();
234  for(int i=0; i<n; i++) {
235  EdbTrackP *t = (EdbTrackP*)tracks.At(i);
236  int nseg = t->N();
237  for(int j=0; j<nseg; j++) {
238  EdbSegP *s = t->GetSegment(j);
239  s->SetErrors0();
240  cond.FillErrorsCov( s->TX(),s->TY(), s->COV() );
241  }
242  t->FitTrackKFS();
243  }
244 }
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

◆ test_EdbVertexComb()

void test_EdbVertexComb ( TObjArray &  tracks,
TEnv &  env 
)

461 {
462  EdbVertexComb vcomb( tracks );
463  gCond.SetSigma0( env.GetValue("emvtx.comb.Sigma0", "1. 1. 0.002 0.002" ) );
464  vcomb.SetTracksErrors(gCond);
465  vcomb.eVPar.eImpMax = env.GetValue("emvtx.comb.maxImp", 1000. ); // used in EstimateVertexPosition!
466  vcomb.eVPar.eProbMin = env.GetValue("emvtx.comb.ProbMin", 0.00000001 );
467  vcomb.eVPar.eUseMom = true;
468  vcomb.eVPar.eUseSegPar = false; // use fitted track parameters
469  vcomb.eVPar.eUseKalman = true; // use or not Kalman for the vertex fit. Default is true
470  vcomb.eVPar.eUseLimits = false; // if true - look for the vertex only inside limits defined by eVmin:eVmax, default is false
471  vcomb.eZ0 = env.GetValue("emvtx.comb.Z0", -10000 ); // the first approximation for the vertex z
472  vcomb.eRecursionMax = env.GetValue("emvtx.comb.NVmax", 3 );
473  vcomb.eProbMinV = env.GetValue("emvtx.comb.ProbMinV", 0.001 );
474  vcomb.FindTopologies();
475  vcomb.PrintTopologies();
476 }
Definition: EdbVertexComb.h:37
EdbScanCond gCond
Definition: emvtx.cpp:23

◆ vd()

void vd ( const char *  dsname,
EdbVertexRec evr 
)

for(int i=0; i<nv; i++) {

63 {
64  // draw vertexes with multiplicity>=trmin, and aperture >= amin
65  int trmin=2;
66  float amin=.0;
67 
68  TObjArray *varr = new TObjArray();
69  TObjArray *tarr = new TObjArray();
70 
71  EdbVertex *v=0;
72  EdbTrackP *t=0;
73 
74  int nv = evr->Nvtx();
75  printf("nv=%d\n",nv);
76  if(nv<1) return;
77 
79  for(int i=nv-1; i<nv; i++) {
80  v = (EdbVertex *)(evr->eVTX->At(i));
81  //if(v->Flag()<0) continue;
82  //if( v->N()<trmin ) continue;
83  //if( v->N()<3 && v->MaxAperture()<amin ) continue;
84  varr->Add(v);
85  for(int j=0; j<v->N(); j++) tarr->Add( v->GetTrack(j) );
86  }
87 
88 // TObjArray *tsegG = new TObjArray();
89 // for(int i=0; i<gAliV->Ntracks(); i++) {
90 // EdbSegG *sg = new EdbSegG( *( gAliV->GetTrack(i) ) );
91 // sg->SetLineColor(kRed);
92 // tsegG->Add(sg);
93 // }
94 
95  gStyle->SetPalette(1);
96 
98  if(!ds) ds=new EdbDisplay(dsname,-10000.,10000.,-10000.,10000.,-10000., 10000.);
99  ds->SetVerRec(evr);
100  ds->SetArrTr( tarr );
101  printf("%d tracks to display\n", tarr->GetEntries() );
102  ds->SetArrV( varr );
103  printf("%d vertex to display\n", varr->GetEntries() );
104  //ds->SetArrSegG( tsegG );
105  //printf("%d primary tracks to display\n", tsegG->GetEntries() );
106  ds->SetDrawTracks(14);
107  ds->SetDrawVertex(1);
108 // //ds->SetView(90,180,90);
109 
110  ds->GuessRange(10000,2000,30000);
111  ds->SetStyle(1);
112  ds->Draw();
113 
114 // float s[3] = {0,0,0 };
115  //float e[3] = {Vmc[0],Vmc[1],Vmc[2]+600};
116  //ds->DrawRef(Vmc,e);
117 }
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
TObjArray * eVTX
Definition: EdbVertex.h:205
Int_t Nvtx() const
Definition: EdbVertex.h:287
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121

◆ vtxBT()

EdbVertex* vtxBT ( const char *  file,
TEnv &  env 
)
480 {
481  TObjArray tracks, aux_tr;
482  int ntrBT = readBTdata( file, tracks, aux_tr );
483  if(ntrBT < 0) { printf("bad file - skip\n"); return 0; }
486 
487  return vtxBT1(tracks, env);
488 }
int readBTdata(const char *fname, TObjArray &tracks, TObjArray &aux_tr)
Definition: emvtx.cpp:170
void SetTracksErrors(TObjArray &tracks, EdbScanCond &cond)
Definition: emvtx.cpp:231
void MakeScanCondBT(EdbScanCond &cond)
Definition: emvtx.cpp:201
EdbVertex * vtxBT1(TObjArray &tracks, TEnv &env)
Definition: emvtx.cpp:321
TFile * file
Definition: write_pvr.C:3

◆ vtxBT1()

EdbVertex* vtxBT1 ( TObjArray &  tracks,
TEnv &  env 
)
322 {
323  int ntr = tracks.GetEntries(); if(ntr<2) return 0;
324 
325  EdbScanCond cond(gCond);
326  //MakeScanCondBT(cond);
327  SetTracksErrors(tracks,cond);
328 
329  SafeDelete(gEVRCS);
330  gEVRCS = new EdbVertexRec();
331  gEVRCS->eProbMin = 0; // minimum acceptable probability for chi2-distance between tracks
332  gEVRCS->eImpMax = 150; // maximal acceptable impact parameter (preliminary check)
333  gEVRCS->eUseSegPar = 0; // use only the nearest measured segments for vertex fit
334  gEVRCS->eUseMom = 1; // use or not track momentum for vertex calculations
335 
336  EdbPVRec *pvr = new EdbPVRec();
337  pvr->SetScanCond( new EdbScanCond(cond) );
338  gEVRCS->SetPVRec(pvr);
339 
340  EdbVertex *v = gEVRCS->Make1Vertex( tracks, -6000. ); if(!v) return 0;
341  //v=gEVRCS->StripBadTracks( *v, 200., 3 ); if(!v) return 0;
342  return v;
343 }
Definition: EdbPVRec.h:148
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbScanCond.h:10
Bool_t eUseMom
Definition: EdbVertex.h:181
Bool_t eUseSegPar
Definition: EdbVertex.h:182
Float_t eImpMax
Definition: EdbVertex.h:179
Float_t eProbMin
Definition: EdbVertex.h:178
Definition: EdbVertex.h:194
EdbVertex * Make1Vertex(TObjArray &tracks, float zexpected)
Definition: EdbVertex.cxx:879
void SetPVRec(EdbPVRec *pvr)
Definition: EdbVertex.h:285

◆ vtxBTcomb()

void vtxBTcomb ( const char *  file,
TEnv &  env 
)
448 {
449  TObjArray tracks;
450  TObjArray aux_tr;
451  int ntr = readBTdata( file, tracks, aux_tr );
452  if(ntr < 0) { printf("bad file - skip\n"); return; }
453  if(ntr < 2) return;
455  //vtxComb(tracks,aux_tr,env);
457 }
void test_EdbVertexComb(TObjArray &tracks, TEnv &env)
Definition: emvtx.cpp:460

◆ vtxComb()

void vtxComb ( TObjArray &  tracks,
TObjArray &  aux_tr,
TEnv &  env 
)
347 {
348  int ntr = tracks.GetEntries();
349  Log(3,"vtxComb","ntr=%d",ntr);
350  TObjArray vertices1, vertices2;
351 
352  int ic=0;
353  for( int nitems=ntr; nitems >= ntr/2; nitems-- )
354  {
355  EdbCombGen comber(tracks,nitems);
356  TObjArray selected, other;
357  while( comber.NextCombination(selected,other) ) {
358  EdbVertex *v1 = vtxBT1(selected, env);
359  vertices1.Add(v1);
360  EdbVertex *v2 = vtxBT1(other, env);
361  vertices2.Add(v2);
362  ic++;
363  }
364  }
365 
366  TArrayF probarr(ic);
367  TArrayI ind(ic);
368  for(int i=0; i<ic; i++) {
369  EdbVertex *v1 = (EdbVertex*)vertices1.At(i);
370  EdbVertex *v2 = (EdbVertex*)vertices2.At(i);
371  float prob = v1->V()->prob();
372  if( v2 ) prob *= v2->V()->prob();
373  probarr[i]= prob;
374  }
375  Sort(ic,probarr.GetArray(),ind.GetArray(),1);
376 
377  // remove duplications (possible in case of equal groups)
378  for(int i=0; i<ic-1; i++)
379  {
380  int i1 = ind[i];
381  int i2 = ind[i+1];
382  if(i1<0) continue;
383  if(i2<0) continue;
384  if( Abs( probarr[i1]-probarr[i2] ) < 0.00000001 ) ind[i+1]=-1;
385  }
386 
387  //printf("\n # prob1 Z1 prob2 Z2 set1 set2\n");
388  printf("\n # prob1 X1 Y1 Z1 prob2 X2 Y2 Z2 set1 set2\n");
389  printf("-----------------------------------------------------------------------------------------------------------------------------------------------\n");
390  float prob_pred=1;
391  float prob_lim = env.GetValue("emvtx.fbt.ProbLim", 0.001 );
392  for(int i=0; i<ic; i++)
393  {
394  if(ind[i]<0) continue;
395  if(prob_pred>prob_lim && probarr[ind[i]] < prob_lim)
396  printf(" ----- below the probability product is less then %f ------\n",prob_lim );
397  prob_pred=probarr[ind[i]];
398  EdbVertex *vv1 = (EdbVertex*)vertices1.At(ind[i]);
399  EdbVertex *vv2 = (EdbVertex*)vertices2.At(ind[i]);
400  EdbVertex *v1=0, *v2=0;
401  if(!vv2) v1 = vv1;
402  else { // the primary is first
403  if( vv1->VZ() < vv2->VZ() ) {v1 = vv1; v2 = vv2; }
404  else {v2 = vv1; v1 = vv2; }
405  }
406  printf("%5d",i);
407  printf(" %9.7f %9.1f %9.1f %9.1f", v1->V()->prob(), v1->VX(), v1->VY(), v1->VZ());
408  if(v2) printf(" %9.7f %9.1f %9.1f %9.1f",v2->V()->prob(), v2->VX(), v2->VY(), v2->VZ());
409  else printf(" ");
410  printf("\t(");
411  for(int i=0; i<v1->N(); i++) printf("%6d", v1->GetTrack(i)->ID() );
412  for(int i=0; i<ntr-v1->N(); i++) printf(" " );
413  printf(") & (");
414  if(v2) for(int i=0; i<v2->N(); i++) printf("%6d", v2->GetTrack(i)->ID() );
415  printf(")\n");
416  }
417 
418  printf("\n---------------- The most probable combinations --------------------\n" );
419  for(int i=0; i<ic; i++)
420  {
421  if(ind[i]<0) continue;
422  if(probarr[ind[i]] < prob_lim) continue;
423 
424  printf("\n----------- the probability product is %f :----------\n", probarr[ind[i]]);
425 
426  EdbVertex *vv1 = (EdbVertex*)vertices1.At(ind[i]); vv1->Print();
427  EdbVertex *vv2 = (EdbVertex*)vertices2.At(ind[i]); vv2->Print();
428 
429  int naux = aux_tr.GetEntries();
430  for(int j=0; j<naux; j++)
431  {
432  EdbTrackP *t = (EdbTrackP*)(aux_tr.At(j));
433  printf("Impact (v1, %d) = %f %f\n", t->ID(), vv1->CheckImp(t), vv1->CheckImpGeom(t) );
434  printf("Impact (v2, %d) = %f %f\n", t->ID(), vv2->CheckImp(t), vv2->CheckImpGeom(t) );
435  }
436  }
437 
438  const EdbScanCond *cond = gEVRCS->ePVR->GetScanCond();
439  printf("\n The measurements errors assigned to tracks at last measured point:\n");
440  printf(" sigmaX0 sigmaY0 sigmaTX0 sigmaTY0 Degrad\n");
441  printf("%8.3f %8.3f %8.4f %8.4f %8.2f\n",
442  cond->SigmaX(0),cond->SigmaY(0),cond->SigmaTX(0),cond->SigmaTY(0),cond->Degrad() );
443  printf("The errors extrapolated to the vertex point taking into account CMS with Rad length of the media X0 = %10.2f [microns]\n",cond->RadX0());
444 }
Definition: EdbCombGen.h:15
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
float SigmaTX(float ax) const
Definition: EdbScanCond.h:106
float Degrad() const
Definition: EdbScanCond.h:100
float SigmaTY(float ay) const
Definition: EdbScanCond.h:107
float SigmaX(float ax) const
Definition: EdbScanCond.h:102
float SigmaY(float ay) const
Definition: EdbScanCond.h:103
float RadX0() const
Definition: EdbScanCond.h:58
Int_t ID() const
Definition: EdbSegP.h:144
EdbPVRec * ePVR
Definition: EdbVertex.h:206
void Print()
Definition: EdbVertex.cxx:328
Float_t VX() const
Definition: EdbVertex.h:133
float CheckImp(const EdbTrackP *tr)
Definition: EdbVertex.cxx:463
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
Float_t VY() const
Definition: EdbVertex.h:134
float CheckImpGeom(const EdbTrackP *tr)
Definition: EdbVertex.cxx:452
Float_t VZ() const
Definition: EdbVertex.h:135
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237

◆ vtxCS()

EdbVertex* vtxCS ( const char *  file,
TEnv &  env 
)
292 {
293  TObjArray tracks;
294  TArrayL64 idArr(100);
295  int minRank = env.GetValue("emvtx.CS.minRank", 0 );
296  int ntrCS = readCSdata( file, tracks, idArr, minRank );
297 
298  EdbVertex *v = vtxStrip(tracks,idArr, env);
299 
300  FILE *f = fopen( Form("%s.vtx",file), "w" );
301  int ntrv = v? v->N() : 0;
302  fprintf(f,"%5d\n",ntrCS);
303  if(ntrv) {
304  fprintf(f,"%5d %10.2f %10.2f %12.2f %12.2f %12.2f\n",
305  ntrv, v->MaxImpact(), v->V()->prob(),
306  v->VX(), v->VY(), v->VZ() );
307  fprintf(f,"\t\t\t\t %10.2f %10.2f %10.2f\n", v->V()->vxerr(), v->V()->vyerr(), v->V()->vzerr() );
308  for(int i=0; i<v->N(); i++) {
309  EdbTrackP *t = v->GetTrack(i);
310  fprintf(f,"%5d %12.2f %llu\n", t->ID(), v->Impact(i), FindID(t,tracks,idArr) );
311  }
312  }
313  fclose(f);
314  v->Print();
315 
316  test_EdbVertexComb( tracks, env );
317  return v;
318 }
Float_t Impact(int i)
Definition: EdbVertex.h:149
Float_t MaxImpact()
Definition: EdbVertex.h:116
double vyerr() const
$\sqrt{\sigma_{vy}^2}$ vertex $y$-error
double vzerr() const
$\sqrt{\sigma_{vz}^2}$ vertex $z$-error
double vxerr() const
$\sqrt{\sigma_{vx}^2}$ vertex $x$-error
EdbVertex * vtxStrip(TObjArray &tracks, TArrayL64 &idArr, TEnv &env)
Definition: emvtx.cpp:257
Long64_t FindID(EdbTrackP *t, TObjArray &tracks, TArrayL64 &idArr)
Definition: emvtx.cpp:247
int readCSdata(const char *fname, TObjArray &tracks, TArrayL64 &idArr, int minRank)
Definition: emvtx.cpp:139

◆ vtxStrip()

EdbVertex* vtxStrip ( TObjArray &  tracks,
TArrayL64 &  idArr,
TEnv &  env 
)
258 {
259  int ntrCS = tracks.GetEntries();
260  EdbVertex *v=0;
261  float maxImp = env.GetValue("emvtx.CS.maxImp", 1000. );
262  //EdbScanCond cond;
265  EdbPVRec *pvr = new EdbPVRec();
266 
267  if(ntrCS < 0) { printf("bad file - skip\n"); goto OUTPUT; }
268 
269  if(ntrCS<2) goto OUTPUT;
270 
271  gEVRCS = new EdbVertexRec();
272  gEVRCS->eProbMin = 0; // minimum acceptable probability for chi2-distance between tracks
273  gEVRCS->eImpMax = 15000; // maximal acceptable impact parameter (preliminary check)
274  gEVRCS->eUseSegPar = 0; // use only the nearest measured segments for vertex fit
275  gEVRCS->eUseMom = 1; // to use or not tracks momenta for vertex calculations
276 
277 
278  pvr->SetScanCond( new EdbScanCond(gCond) );
279  gEVRCS->SetPVRec(pvr);
280 
281  v = gEVRCS->Make1Vertex( tracks, 0. );
282  if(v) v=gEVRCS->StripBadTracks( *v, maxImp, 3 );
283 
284 OUTPUT:
285 
286 
287  return v;
288 }
EdbVertex * StripBadTracks(EdbVertex &v, float impMax, int ntrMin)
Definition: EdbVertex.cxx:860
void MakeScanCondCS(EdbScanCond &cond)
Definition: emvtx.cpp:216

Variable Documentation

◆ gCond

EdbScanCond gCond

◆ gEVRCS

EdbVertexRec* gEVRCS =0