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
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:69
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
EdbVertex * vtxCS(const char *file, TEnv &env)
Definition: emvtx.cpp:291
void vd(const char *dsname, EdbVertexRec *evr)
Definition: emvtx.cpp:62
EdbVertexRec * gEVRCS
Definition: emvtx.cpp:24
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:21
Definition: EdbPattern.h:113
s
Definition: check_shower.C:55
p
Definition: testBGReduction_AllMethods.C:8

◆ 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

◆ 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}
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:787
virtual void SetStyle(int Style=0)
Definition: EdbDisplayBase.cxx:264
FEDRA Event Display.
Definition: EdbDisplay.h:22
void SetDrawVertex(int opt)
Definition: EdbDisplay.h:109
void SetArrTr(TObjArray *arr)
Definition: EdbDisplay.cxx:431
void SetArrV(TObjArray *arrv)
Definition: EdbDisplay.cxx:501
void SetDrawTracks(int opt)
Definition: EdbDisplay.h:98
void SetVerRec(EdbVertexRec *evr)
Definition: EdbDisplay.h:92
static EdbDisplay * EdbDisplayExist(const char *title)
Definition: EdbDisplay.cxx:233
void GuessRange(float margZmin=3000, float margZmax=1000, float margR=300)
Definition: EdbDisplay.cxx:261
TObjArray * eVTX
array of vertex
Definition: EdbVertex.h:205
Int_t Nvtx() const
Definition: EdbVertex.h:287
Int_t N() const
Definition: EdbVertex.h:121
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
EdbDisplay * ds
Definition: check_vertex.C:16

◆ 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
EdbVertex * vtxBT1(TObjArray &tracks, TEnv &env)
Definition: emvtx.cpp:321
void SetTracksErrors(TObjArray &tracks, EdbScanCond &cond)
Definition: emvtx.cpp:231
void MakeScanCondBT(EdbScanCond &cond)
Definition: emvtx.cpp:201
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);
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
use or not track momentum for vertex calculations
Definition: EdbVertex.h:181
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 eProbMin
minimum acceptable probability for chi2-distance between tracks
Definition: EdbVertex.h:178
Definition: EdbVertex.h:194
EdbVertex * Make1Vertex(TObjArray &tracks, float zexpected)
Definition: EdbVertex.cxx:857
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}
objects combinations generator
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:147
EdbPVRec * ePVR
patterns volume (optional)
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:441
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
Float_t VY() const
Definition: EdbVertex.h:134
float CheckImpGeom(const EdbTrackP *tr)
Definition: EdbVertex.cxx:430
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
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
284OUTPUT:
285
286
287 return v;
288}
EdbVertex * StripBadTracks(EdbVertex &v, float impMax, int ntrMin)
Definition: EdbVertex.cxx:838
void MakeScanCondCS(EdbScanCond &cond)
Definition: emvtx.cpp:216

Variable Documentation

◆ gCond

EdbScanCond gCond

◆ gEVRCS

EdbVertexRec* gEVRCS =0