FEDRA emulsion software from the OPERA Collaboration
RecDispMC.C File Reference

Classes

struct  BRICK
 

Functions

void BookHistsV (int nve)
 
void clear_all ()
 
void ClearHistsV ()
 
void d ()
 
void DrawHistsV ()
 
void DrawHlist (TCanvas *c, TObjArray h)
 
void dsall ()
 
void dst (int numt=-1)
 
void dsv (int numv=-1, int ntrMin=0, float binx=6, float bint=10)
 
void dsvg (int numv=-1, float binx=6, float bint=10)
 
void dsvg2 (int numv=-1, float binx=6, float bint=10)
 
void FillHistsGen ()
 
void FillHistsV (EdbVertex &edbv, Vertex &v)
 
int g1 (int ne=1, float b1=0., float b2=0.)
 
void gv (int n=1, int nve=100, float back1=0., float back2=0.)
 
TGenPhaseSpace * K3Pi (float p=3.)
 
void makeVolumeOPERAn (BRICK &b, EdbPatternsVolume *v)
 
void print_conditions (int n, int nve, float back1, float back2)
 
void print_results ()
 
int read_events_from_file (int ne, float *fractbkg, float vlim[4], float vzlim[2])
 
void rec_all ()
 
void Set_Prototype_OPERA_basetrack (EdbScanCond *cond)
 

Variables

EdbPVRecali =0
 
float AngleAcceptance = 2.0
 
TObjArray * arrs = new TObjArray()
 
TObjArray * arrs2 = new TObjArray()
 
TObjArray * arrtr = new TObjArray()
 
TObjArray * arrtr2 = new TObjArray()
 
TObjArray * arrv = new TObjArray()
 
TObjArray * arrv2 = new TObjArray()
 
float back1_tetamax = 0.35
 
float back2_plim [2] = {1., 1.}
 
float back2_tetamax = 0.25
 
BRICK brick
 
int charges [101]
 
double DE_FIT
 
double DE_MC
 
int design = +0
 
float dpp = 0.20
 
EdbDisplayds =0
 
EdbDisplayds2 =0
 
brick dz = 1290.
 
int eloss_flag = 0
 
int evcount = 0
 
FILE * f =0
 
float fiducial_border = 50000.
 
float fiducial_border_z = 12000.
 
bool fmc1steof = true
 
FILE * fmcdata =0
 
EdbPVGengener = 0
 
TObjArray hld1
 
TObjArray hld2
 
TObjArray hld3
 
TObjArray hld4
 
TObjArray hlist
 
TH1F * hp [24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
 
brick lim [0] = -60000.
 
int maxgaps [6] = {0,3,3,6,3,6}
 
bool mc_make_tracks = true
 
double mK =5.6
 
float momentumK =15.
 
double mP =0.938
 
double mPi =.139
 
int n2gv = 0
 
int neg_tot = 0
 
int negood_tot = 0
 
int neutral_primary = 1
 
int npi = 5
 
int nprongmax = 0
 
int nprongmaxg = 0
 
int nsegMin = 2
 
int ntall = 0
 
int ntr_tot = 0
 
int ntrg_tot = 0
 
int ntrgb = 0
 
int ntrgood_r_tot = 0
 
int ntrgood_tot = 0
 
int ntrgoodb_r_tot = 0
 
int ntrgoodb_tot = 0
 
int ntrgv_tot = 0
 
int numbricks = 0
 
int nuse = 5
 
int nvg_tot = 0
 
int nvgm_tot [100]
 
int nvgood_tot [100]
 
int nvgoodm_tot [100]
 
int nvgoodmg_tot [100]
 
int nvgoodmt_tot = 0
 
TGenPhaseSpace * pDecay = 0
 
brick plates = 58
 
int primary_vertex_ntracks_min = 2
 
const unsigned long int PrintN = 100
 
float ProbGap = 0.10
 
float ProbMinP = 0.01
 
float ProbMinT = 0.01
 
float ProbMinV = 0.01
 
float ProbMinVN = 0.01
 
bool read_from_file = false
 
int rec_primary_vertex_ntracks_min = 2
 
bool regenerate_vertex_xyz = true
 
TFile * rf =0
 
float RightRatioMin = 0.5
 
EdbScanCondscanCond =0
 
float seg_s [4] ={1.2, 1.2, 0.0015, 0.0015}
 
float seg_zero [4] ={.0,.0,.0,.0}
 
bool select_neighborhood = true
 
bool use_mc_mass = false
 
bool use_mc_momentum = true
 
EdbVertexvedb
 
float vxg = 0.
 
float vxo = 0.
 
float vxyz [3] = {0., 0., 0.}
 
float vyg = 0.
 
float vyo = 0.
 
float vzg = 0.
 
float vzo = 0.
 
brick X0 = 5810.
 
brick z0 = 0.
 

Function Documentation

◆ BookHistsV()

void BookHistsV ( int  nve)

1168{
1169 if (!hp[0]) hp[0] = new TH1F("Hist_Vt_Dx","Vertex X error",100,-50.,50.);
1170 if (!hp[1]) hp[1] = new TH1F("Hist_Vt_Dy","Vertex Y error",100,-50.,50.);
1171 if (!hp[2]) hp[2] = new TH1F("Hist_Vt_Dz","Vertex Z error",100,-100.,100.);
1172 if (!hp[3]) hp[3] = new TH1F("Hist_Vt_Sx","Vertex X sigma",100,0.,10.);
1173 if (!hp[4]) hp[4] = new TH1F("Hist_Vt_Sy","Vertex Y sigma",100,0.,10.);
1174 if (!hp[5]) hp[5] = new TH1F("Hist_Vt_Sz","Vertex Z sigma",100,0.,500.);
1175 if (!hp[6]) hp[6] = new TH1F("Hist_Vt_Chi2","Vertex Chi-square/D.F.",25,0.,5.);
1176 if (!hp[7]) hp[7] = new TH1F("Hist_Vt_Prob","Vertex Chi-square Probability",26,0.,1.04);
1177 if (!hp[8]) hp[8] = new TH1F("Hist_Vt_Mass","Vertex Mass error",50,-1.000,+1.000);
1178 char title[128];
1179 sprintf(title,"Number of reconstructed vertexs (%d generated)",nve);
1180 if (!hp[9]) hp[9] = new TH1F("Hist_Vt_Nvert",title,nve*2,0.,(float)(nve*2));
1181 sprintf(title,"Number of reconstructed tracks (%d generated)",ntall);
1182 if (!hp[10]) hp[10] = new TH1F("Hist_Vt_Ntrack",title,ntall*2,0.,(float)(ntall*2));
1183 if (!hp[11]) hp[11] = new TH1F("Hist_Vt_Nsegs","Number of track segments",brick.plates+1,0.,(float)(brick.plates+1));
1184 if (!hp[12]) hp[12] = new TH1F("Hist_Vt_Dtrack","Track DeltaX, microns",100,-5.,+5.);
1185 if (!hp[13]) hp[13] = new TH1F("Hist_Vt_NsegsG","Number of generated track segments",brick.plates+1,0.,(float)(brick.plates+1));
1186 if (!hp[19]) hp[19] = new TH1F("Hist_Vt_DE","DE(MC)-DE",100,-0.25,+0.25);
1187// if (!hp[19]) hp[19] = new TH1F("Hist_Vt_DE","Momentum for low prob tracks",100,0.,2000.);
1188 if (!hp[14]) hp[14] = new TH1F("Hist_Vt_Dist","RMS track-vertex distance",100, 0.,50.);
1189 if (!hp[15]) hp[15] = new TH1F("Hist_Vt_Match","Right segments fraction (tracks at vertexes)",110, 0.,1.1);
1190 if (!hp[16]) hp[16] = new TH1F("Hist_Vt_Matchb","Right segments fraction (backgound tracks) ",110, 0.,1.1);
1191 if (!hp[17]) hp[17] = new TH1F("Hist_Vt_Trprob","Track probability",110, 0.,1.1);
1192 if (!hp[18]) hp[18] = new TH1F("Hist_Vt_AngleV","RMS track-track angle, mrad", 100, 0.,1000.);
1193 if (!hp[20]) hp[20] = new TH1F("Hist_Vt_Angle","Track angle, mrad", 100, 0.,2000.);
1194 if (!hp[21]) hp[21] = new TH1F("Hist_Vt_Momen","Track momentum, GeV/c", 50, 0.,5.);
1195 if (!hp[22]) hp[22] = new TH1F("Hist_Vt_Ntracks","Number of tracks at vertex", 20, 0.,20.);
1196 if (!hp[23]) hp[23] = new TH1F("Hist_Vt_Pmulsca","Relative Momentum error", 50, -100.,100.);
1197
1198 hld1.Add(hp[0]);
1199 hld1.Add(hp[1]);
1200 hld1.Add(hp[2]);
1201 hld1.Add(hp[3]);
1202 hld1.Add(hp[4]);
1203 hld1.Add(hp[5]);
1204 hld1.Add(hp[6]);
1205 hld1.Add(hp[7]);
1206 hld1.Add(hp[8]);
1207
1208 hld2.Add(hp[11]);
1209 hld2.Add(hp[15]);
1210 hld2.Add(hp[12]);
1211 hld2.Add(hp[13]);
1212 hld2.Add(hp[16]);
1213 hld2.Add(hp[19]);
1214 hld2.Add(hp[17]);
1215 hld2.Add(hp[20]);
1216 hld2.Add(hp[21]);
1217
1218 hld3.Add(hp[9]);
1219 hld3.Add(hp[10]);
1220 hld3.Add(hp[14]);
1221 hld3.Add(hp[18]);
1222
1223 hld4.Add(hp[22]);
1224 hld4.Add(hp[23]);
1225
1226 for (int i=0; i<24; i++)
1227 if (hp[i]) hlist.Add(hp[i]);
1228}
TObjArray hld1
Definition: RecDispMC.C:154
TObjArray hld2
Definition: RecDispMC.C:154
TObjArray hlist
Definition: RecDispMC.C:154
TObjArray hld4
Definition: RecDispMC.C:154
BRICK brick
Definition: RecDispMC.C:103
int ntall
Definition: RecDispMC.C:141
TObjArray hld3
Definition: RecDispMC.C:154
TH1F * hp[24]
Definition: RecDispMC.C:137
int plates
Definition: RecDispMC.C:96

◆ clear_all()

void clear_all ( )

514{
515 nvg_tot = 0;
516 ntrg_tot = 0;
517 ntrgb = 0;
518 ntr_tot = 0;
519 ntrgood_tot = 0;
520 ntrgoodb_tot = 0;
521 ntrgood_r_tot = 0;
522 ntrgoodb_r_tot = 0;
523 nvgoodmt_tot = 0;
524 numbricks = 0;
525 ntrgv_tot = 0;
526 nprongmax = 0;
527 nprongmaxg = 0;
528 evcount = 0;
529 for (int i=0; i<100; i++)
530 {
531 nvgm_tot[i] = 0;
532 nvgood_tot[i] = 0;
533 nvgoodm_tot[i] = 0;
534 nvgoodmg_tot[i] = 0;
535 }
536
537 hlist.Clear();
538 hld1.Clear();
539 hld2.Clear();
540 hld3.Clear();
541 hld4.Clear();
542
543 if (ali)
544 {
545 delete ali;
546 ali = 0;
547 }
548 if (gener)
549 {
550 delete gener;
551 gener = 0;
552 }
553 if (pDecay)
554 {
555 delete pDecay;
556 pDecay = 0;
557 }
558 return;
559}
int ntrgood_tot
Definition: RecDispMC.C:166
int ntrgoodb_r_tot
Definition: RecDispMC.C:172
int ntr_tot
Definition: RecDispMC.C:165
int nvgoodmt_tot
Definition: RecDispMC.C:180
int ntrgb
Definition: RecDispMC.C:162
int nvg_tot
Definition: RecDispMC.C:157
EdbPVRec * ali
Definition: RecDispMC.C:122
int ntrg_tot
Definition: RecDispMC.C:160
int numbricks
Definition: RecDispMC.C:142
int nvgood_tot[100]
Definition: RecDispMC.C:174
TGenPhaseSpace * pDecay
Definition: RecDispMC.C:187
int ntrgoodb_tot
Definition: RecDispMC.C:168
EdbPVGen * gener
Definition: RecDispMC.C:123
int nprongmaxg
Definition: RecDispMC.C:183
int nvgm_tot[100]
Definition: RecDispMC.C:158
int nprongmax
Definition: RecDispMC.C:182
int ntrgood_r_tot
Definition: RecDispMC.C:170
int ntrgv_tot
Definition: RecDispMC.C:161
int nvgoodm_tot[100]
Definition: RecDispMC.C:176
int nvgoodmg_tot[100]
Definition: RecDispMC.C:178
int evcount
Definition: RecDispMC.C:184

◆ ClearHistsV()

void ClearHistsV ( )

1389{
1390 for(int i=0; hp[i]; i++) {
1391 hp[i]->Clear();
1392 }
1393}

◆ d()

void d ( )

1395{ DrawHistsV();}
void DrawHistsV()
Definition: RecDispMC.C:1314

◆ DrawHistsV()

void DrawHistsV ( )

1315{
1316 char title[128];
1317
1318 sprintf(title,"Number of reconstructed vertexs (%d generated)",nvg_tot);
1319 if (hp[9]) hp[9]->SetTitle(title);
1320 sprintf(title,"Number of reconstructed tracks (%d generated)",ntrg_tot);
1321 if (hp[10]) hp[10]->SetTitle(title);
1322
1323 TCanvas *cv1 = new TCanvas("Vertex_reconstruction_1","MC Vertex reconstruction", 760, 760);
1324 DrawHlist(cv1, hld1);
1325
1326 TCanvas *cv2 = new TCanvas("Vertex_reconstruction_2","Vertex reconstruction (tracks hists)", 600, 760);
1327 DrawHlist(cv2, hld2);
1328
1329 TCanvas *cv3 = new TCanvas("Vertex_reconstruction_3","Vertex reconstruction (eff hists)", 600, 760);
1330 DrawHlist(cv3, hld3);
1331
1332 TCanvas *cv4 = new TCanvas("Vertex_reconstruction_4","Vertex reconstruction (ntracks)", 600, 760);
1333 DrawHlist(cv4, hld4);
1334}
void DrawHlist(TCanvas *c, TObjArray h)
Definition: RecDispMC.C:1336
TCanvas * cv4
Definition: RecDispMC_Profiles.C:63
TCanvas * cv1
Definition: RecDispMC_Profiles.C:63
TCanvas * cv2
Definition: RecDispMC_Profiles.C:63
TCanvas * cv3
Definition: RecDispMC_Profiles_new.C:70
new TCanvas()

◆ DrawHlist()

void DrawHlist ( TCanvas c,
TObjArray  h 
)

1337{
1338 int n = h.GetEntries();
1339 if (n < 2)
1340 {
1341 }
1342 else if (n < 3)
1343 {
1344 c->Divide(1,2);
1345 }
1346 else if (n < 4)
1347 {
1348 c->Divide(1,3);
1349 }
1350 else if (n < 5)
1351 {
1352 c->Divide(2,2);
1353 }
1354 else if (n < 6)
1355 {
1356 c->Divide(2,3);
1357 }
1358 else if (n < 7)
1359 {
1360 c->Divide(2,3);
1361 }
1362 else if (n < 8)
1363 {
1364 c->Divide(2,4);
1365 }
1366 else if (n < 9)
1367 {
1368 c->Divide(2,4);
1369 }
1370 else if (n < 10)
1371 {
1372 c->Divide(3,3);
1373 }
1374 else if (n < 11)
1375 {
1376 c->Divide(2,5);
1377 }
1378 else
1379 {
1380 c->Divide(3,5);
1381 }
1382 for(int i=0; i<n; i++) {
1383 c->cd(i+1);
1384 if (h.At(i)) h.At(i)->Draw();
1385 }
1386}

◆ dsall()

void dsall ( )

1402{
1403
1404 arrs->Clear();
1405
1407
1408 gStyle->SetPalette(1);
1409
1410 const char *title = "display-segments";
1411 if(!EdbDisplay::EdbDisplayExist(title))
1412 ds=new EdbDisplay(title, -60000.,60000.,-60000., 60000., 0.,80000.);
1413
1414 ds->SetArrSegP( arrs );
1415 if (ali->eTracks) ds->SetArrTr( ali->eTracks );
1416 if (ali->eVTX) ds->SetArrV( ali->eVTX );
1417 ds->SetDrawTracks(3);
1418 ds->Draw();
1419
1420}
TObjArray * arrs
Definition: RecDispMC.C:128
EdbDisplay * ds
Definition: RecDispMC.C:1398
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:787
FEDRA Event Display.
Definition: EdbDisplay.h:22
void SetArrSegP(TObjArray *arr)
Definition: EdbDisplay.cxx:390
void SetArrTr(TObjArray *arr)
Definition: EdbDisplay.cxx:431
void SetArrV(TObjArray *arrv)
Definition: EdbDisplay.cxx:501
void SetDrawTracks(int opt)
Definition: EdbDisplay.h:98
static EdbDisplay * EdbDisplayExist(const char *title)
Definition: EdbDisplay.cxx:233
int ExtractDataVolumeSegAll(TObjArray &arr)
Definition: EdbPVRec.cxx:2881
TObjArray * eVTX
array of vertex
Definition: EdbPVRec.h:162
TObjArray * eTracks
Definition: EdbPVRec.h:161

◆ dst()

void dst ( int  numt = -1)

1423{
1424
1425 arrs->Clear();
1426 arrtr->Clear();
1427
1428 if (ali->eTracks)
1429 {
1430 int ntr = ali->eTracks->GetEntries();
1431 if (!ntr) return;
1432 }
1433 else return;
1434
1435 int it0,it1;
1436 if (numt == -1)
1437 {
1438 it0 = 0;
1439 it1 = ntr;
1440 }
1441 else
1442 {
1443 it0 = numt;
1444 it1 = numt+1;
1445 }
1446
1447 //if (numt < 0) ali->ExtractDataVolumeSegAll( *arrs );
1448
1449 gStyle->SetPalette(1);
1450 const char *title = "display-tracks";
1451 if(!EdbDisplay::EdbDisplayExist(title))
1452 ds=new EdbDisplay(title,-60000.,60000.,-60000., 60000., 0.,80000.);
1453
1454 EdbTrackP *track = 0;
1455 for(int i=it0; i<it1; i++) {
1456 track = (EdbTrackP *)(ali->eTracks->At(i));
1457 if(track->Flag()<0) continue;
1458 if (track->Prob() < ProbMinT) continue;
1459 arrtr->Add(track);
1460 }
1461 ds->SetArrSegP( arrs );
1462 ds->SetArrTr(arrtr);
1463 ds->SetDrawTracks(4);
1464 ds->Draw();
1465
1466}
TObjArray * arrtr
Definition: RecDispMC.C:129
float ProbMinT
Definition: RecDispMC.C:87
Definition: EdbPattern.h:113
Definition: bitview.h:14

◆ dsv()

void dsv ( int  numv = -1,
int  ntrMin = 0,
float  binx = 6,
float  bint = 10 
)
1470{
1471 if(!ali->eVTX) return;
1472 if(!ali->eTracks) return;
1473
1474 arrs->Clear();
1475 arrtr->Clear();
1476 arrv->Clear();
1477 //if(ds) delete ds;
1478
1479 int nvtx = ali->eVTX->GetEntries();
1480 EdbVertex *v = 0;
1481 int iv0,iv1;
1482 if (numv <0 )
1483 {
1484 iv0 = 0;
1485 iv1 = nvtx;
1486 }
1487 else
1488 {
1489 iv0 = numv;
1490 iv1 = numv+1;
1491 }
1492
1493 if (numv == -10) ali->ExtractDataVolumeSegAll( *arrs );
1494
1495 for(int iv=iv0; iv<iv1; iv++) {
1496 v = (EdbVertex *)(ali->eVTX->At(iv));
1497 if(!v) continue;
1498 if(v->N()<ntrMin) continue;
1499 if(v->Flag() == -10) continue;
1500 arrv->Add(v);
1501
1502 int ntr = v->N();
1503 printf("Vertex %d, number of tracks %d\n", iv, ntr);
1504 for(int i=0; i<ntr; i++) {
1505 EdbTrackP *track = v->GetTrack(i);
1506 printf(" Track ID %d, Z = %f, Nseg = %d, Zpos = %d\n",
1507 track->ID(), track->Z(), track->N(), v->Zpos(i));
1508 arrtr->Add(track);
1509 }
1510
1511 if (numv == -1) continue;
1512
1513 int nntr = v->Nn();
1514 for(int i=0; i<nntr; i++) {
1515 if (v->GetVTn(i)->Flag() == 1)
1516 {
1517 EdbSegP *seg = (EdbSegP *)(v->GetVTn(i)->GetTrack());
1518 if (!seg) continue;
1519 arrs->Add(seg);
1520 printf(" Neighboor Segment ID %d, Z = %f\n",
1521 seg->ID(), seg->Z());
1522 }
1523 else if (v->GetVTn(i)->Flag() == 0)
1524 {
1525 EdbTrackP *track = (EdbTrackP *)v->GetVTn(i)->GetTrack();
1526 if (!track) continue;
1527 arrtr->Add(track);
1528 printf(" Neighboor Track ID %d, Z = %f, Nseg = %d, Zpos = %d\n",
1529 track->ID(), track->Z(), track->N(), v->GetVTn(i)->Zpos());
1530 }
1531 }
1532 }
1533
1534 gStyle->SetPalette(1);
1535
1536 const char *title = "display-vertexes";
1537 if(!(EdbDisplay::EdbDisplayExist(title)))
1538 ds=new EdbDisplay(title,-60000.,60000.,-60000., 60000., 0.,80000.);
1539
1540// ds->SetPVR( ali );
1541 ds->SetArrSegP( arrs );
1542 ds->SetArrTr( arrtr );
1543 ds->SetArrV( arrv );
1544 if (numv == -10)
1545 ds->SetDrawTracks(3);
1546 else
1547 ds->SetDrawTracks(4);
1548 ds->SetDrawVertex(1);
1549 ds->Draw();
1550
1551}
TObjArray * arrv
Definition: RecDispMC.C:130
void SetDrawVertex(int opt)
Definition: EdbDisplay.h:109
Definition: EdbSegP.h:21
Int_t ID() const
Definition: EdbSegP.h:147
Float_t Z() const
Definition: EdbSegP.h:153
EdbTrackP * GetTrack() const
Definition: EdbVertex.h:51
Int_t Flag() const
Definition: EdbVertex.h:48
Int_t Zpos() const
Definition: EdbVertex.h:47
Definition: EdbVertex.h:69
Int_t N() const
Definition: EdbVertex.h:121
EdbVTA * GetVTn(int i)
Definition: EdbVertex.h:140
Int_t Nn() const
Definition: EdbVertex.h:122
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t Flag() const
Definition: EdbVertex.h:124
Int_t Zpos(int i)
Definition: EdbVertex.h:127

◆ dsvg()

void dsvg ( int  numv = -1,
float  binx = 6,
float  bint = 10 
)
1554{
1555 if(!gener->eVTX) return;
1556
1557 arrs->Clear();
1558 arrtr->Clear();
1559 arrv->Clear();
1560
1561 EdbSegP *seg=0; // direction
1562
1563 int ntrMin=2;
1564 int nvtx = gener->eVTX->GetEntries();
1565 EdbVertex *v = 0;
1566 int iv0,iv1;
1567 if (numv < 0)
1568 {
1569 iv0 = 0;
1570 iv1 = nvtx;
1571 }
1572 else
1573 {
1574 iv0 = numv;
1575 iv1 = numv+1;
1576 }
1577
1578 if (numv == -10) ali->ExtractDataVolumeSegAll( *arrs );
1579
1580 for(int iv=iv0; iv<iv1; iv++) {
1581 v = (EdbVertex *)(gener->eVTX->At(iv));
1582 if(!v) continue;
1583 if(v->N()<ntrMin) continue;
1584
1585 arrv->Add(v);
1586
1587 int ntr = v->N();
1588 printf("Vertex %d, number of tracks %d\n", iv, ntr);
1589 for(int i=0; i<ntr; i++) {
1590 EdbTrackP *track = v->GetTrack(i);
1591 printf(" Track ID %d, Z = %f, Nseg = %d, Zpos = %d\n",
1592 track->ID(), track->Z(), track->N(), v->Zpos(i));
1593 arrtr->Add(track);
1594 }
1595
1596 }
1597
1598 gStyle->SetPalette(1);
1599
1600 const char *title = "display-generated-vertexes";
1601 if(!EdbDisplay::EdbDisplayExist(title))
1602 ds=new EdbDisplay(title, -60000.,60000.,-60000., 60000., 0.,80000.);
1603
1604 ds->SetArrSegP( arrs );
1605 ds->SetArrTr( arrtr );
1606 ds->SetArrV( arrv );
1607 if (numv == -10)
1608 ds->SetDrawTracks(3);
1609 else
1610 ds->SetDrawTracks(4);
1611 ds->SetDrawVertex(1);
1612 ds->Draw();
1613}
TObjArray * eVTX
Definition: EdbPVGen.h:28

◆ dsvg2()

void dsvg2 ( int  numv = -1,
float  binx = 6,
float  bint = 10 
)
1616{
1617 if(!gener->eVTX) return;
1618
1619 if(ds2) delete ds2;
1620 arrs2->Clear();
1621 arrtr2->Clear();
1622 arrv2->Clear();
1623
1624 EdbSegP *seg=0; // direction
1625
1626 int ntrMin=2;
1627 int nvtx = gener->eVTX->GetEntries();
1628 EdbVertex *v = 0;
1629 int iv0,iv1;
1630 if (numv < 0)
1631 {
1632 iv0 = 0;
1633 iv1 = nvtx;
1634 }
1635 else
1636 {
1637 iv0 = numv;
1638 iv1 = numv+1;
1639 }
1640 if (numv == -10) ali->ExtractDataVolumeSegAll( *arrs2 );
1641 for(int iv=iv0; iv<iv1; iv++) {
1642 v = (EdbVertex *)(gener->eVTX->At(iv));
1643 if(!v) continue;
1644 if(v->N()<ntrMin) continue;
1645
1646 arrv2->Add(v);
1647
1648 int ntr = v->N();
1649 printf("Vertex %d, number of tracks %d\n", iv, ntr);
1650 for(int i=0; i<ntr; i++) {
1651 EdbTrackP *track = v->GetTrack(i);
1652 printf(" Track ID %d, Z = %f, Nseg = %d, Zpos = %d\n",
1653 track->ID(), track->Z(), track->N(), v->Zpos(i));
1654 arrtr2->Add(track);
1655 }
1656 }
1657
1658 gStyle->SetPalette(1);
1659
1660 ds2=new EdbDisplay("display-generated-vertexes-2",-60000.,60000.,-60000., 60000., 0.,80000.);
1661
1662 ds2->SetArrSegP( arrs2 );
1663 ds2->SetArrTr( arrtr2 );
1664 ds2->SetArrV( arrv2 );
1665 if (numv == -10)
1666 ds->SetDrawTracks(3);
1667 else
1668 ds->SetDrawTracks(4);
1669 ds2->SetDrawVertex(1);
1670 ds2->Draw();
1671}
TObjArray * arrs2
Definition: RecDispMC.C:131
EdbDisplay * ds2
Definition: RecDispMC.C:1399
TObjArray * arrv2
Definition: RecDispMC.C:133
TObjArray * arrtr2
Definition: RecDispMC.C:132

◆ FillHistsGen()

void FillHistsGen ( )

1264{
1265 // tracks and vertex reconstruction (KF fitting only without track finding)
1266
1267 double xg, yg, zg, txg, tyg, pg, ang;
1268 EdbTrackP *tr;
1269 EdbVertex *vedbg = 0;
1270
1271 int nv = 0;
1272 if (!gener) return;
1273 if(gener->eVTX) nv = gener->eVTX->GetEntries();
1274 // loop on generated vertexes
1275 for(int i=0; i<nv; i++) {
1276 vedbg = (EdbVertex *)(gener->eVTX->At(i));
1277 if (!vedbg) continue;
1278 int nt = vedbg->N();
1279 // loop on vertex tracks
1280 for(int ip=0; ip<nt; ip++) {
1281 tr = vedbg->GetTrack(ip);
1282 if (!tr) continue;
1283 xg = tr->X();
1284 yg = tr->Y();
1285 zg = tr->Z();
1286 txg = tr->TX();
1287 tyg = tr->TY();
1288 pg = tr->P();
1289 // calculate teta angle (mrad)
1290 ang = TMath::ACos(1./(1.+txg*txg+tyg*tyg))*1000.;
1291 if (hp[20]) hp[20]->Fill(ang);
1292 if (hp[21]) hp[21]->Fill(pg);
1293 }
1294 }
1295 int nt = 0;
1296 if (gener->eTracks) nt = gener->eTracks->GetEntries();
1297 // loop on all generated tracks
1298 for(int i=0; i<nt; i++) {
1299 tr = (EdbTrackP *)(gener->eTracks->At(i));
1300 if (!tr) continue;
1301 xg = tr->X();
1302 yg = tr->Y();
1303 zg = tr->Z();
1304 txg = tr->TX();
1305 tyg = tr->TY();
1306 pg = tr->P();
1307 ang = TMath::ACos(1./(1.+txg*txg+tyg*tyg))*180./TMath::Pi();
1308 // fill hist with number of generated segments
1309 if (hp[13]) hp[13]->Fill(tr->N());
1310 }
1311}
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
TObjArray * eTracks
Definition: EdbPVGen.h:27

◆ FillHistsV()

void FillHistsV ( EdbVertex edbv,
Vertex v 
)

1231{
1232 double smass = 0.13957;
1233 // fill hists with differences between reconstructed and generated position
1234 hp[0]->Fill((double)vxo - (double)vxg);
1235 hp[1]->Fill((double)vyo - (double)vyg);
1236 hp[2]->Fill((double)vzo - (double)vzg);
1237 // fill hists with vertex coordinate errors
1238 hp[3]->Fill(v.vxerr());
1239 hp[4]->Fill(v.vyerr());
1240 hp[5]->Fill(v.vzerr());
1241 // fill hist with chi2/ndf
1242 hp[6]->Fill(v.ndf() > 0 ? v.chi2()/v.ndf() : 0);
1243 // fill hist with vertex chi2 probability
1244 hp[7]->Fill(v.prob());
1245 if ( (nuse == npi) && neutral_primary && !read_from_file)
1246 {
1247 double rmass = v.mass(smass);
1248 hp[8]->Fill(rmass-mK);
1249 }
1250 // calculate average track-vertex distance
1251 double rmsdist = v.rmsDistAngle();
1252// hp[14]->Fill(rmsdist);
1253 // fill hist with average track-track angle
1254 hp[18]->Fill(v.angle()*1000.);
1255 // fill histy with vertex multiplicity
1256 hp[22]->Fill(v.ntracks());
1257 // fill hist with impact parameters
1258 int n = edbv.N();
1259 for (int j=0; j<n; j++)
1260 if (hp[14]) hp[14]->Fill(edbv.Impact(j));
1261}
int neutral_primary
Definition: RecDispMC.C:44
float vxg
Definition: RecDispMC.C:146
int npi
Definition: RecDispMC.C:45
float vyg
Definition: RecDispMC.C:146
float vyo
Definition: RecDispMC.C:145
float vxo
Definition: RecDispMC.C:145
bool read_from_file
Definition: RecDispMC.C:26
double mK
Definition: RecDispMC.C:49
int nuse
Definition: RecDispMC.C:46
float vzg
Definition: RecDispMC.C:146
float vzo
Definition: RecDispMC.C:145
double smass
Definition: RecDispNU.C:1099
Float_t Impact(int i)
Definition: EdbVertex.h:149
double vyerr() const
$\sqrt{\sigma_{vy}^2}$ vertex $y$-error
unsigned short int ndf() const
degrees of freedom of vertex fit
Definition: VtVertex.C:238
float chi2() const
$\chi^2$ of vertex fit
Definition: VtVertex.C:236
double vzerr() const
$\sqrt{\sigma_{vz}^2}$ vertex $z$-error
double angle() const
double mass(const bool use=false) const
rest-mass 0 or track rest mass
Definition: VtVertex.C:929
unsigned short int ntracks() const
no of tracks in vertex $n$
Definition: VtVertex.C:240
double rmsDistAngle() const
calc rms dist and rms angle
Definition: VtVertex.C:1073
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237
double vxerr() const
$\sqrt{\sigma_{vx}^2}$ vertex $x$-error

◆ g1()

int g1 ( int  ne = 1,
float  b1 = 0.,
float  b2 = 0. 
)

708{
709 // generation of 1 pattern volume
710 float vlim[4], vzlim[2];
711 // delete previous generated tracks and vertexes
712 if (gener)
713 {
714 if (gener->eVTX) gener->eVTX->Delete();
715 if (gener->eTracks) gener->eTracks->Delete();
716 gener->eVTX = new TObjArray(1000);
717 }
718 // delete previous reconstructed tracks and vertexes, generated segments
719 if (ali)
720 {
721 ali->eVTA.Clear();
722 if (ali->eVTX) ali->eVTX->Delete();
723 if (ali->eTracks) ali->eTracks->Delete();
724 ali->ResetCouples();
725 int npat=ali->Npatterns();
726 TClonesArray *segs = 0;
727 for(int i=0; i<npat; i++ )
728 if ( segs = (ali->GetPattern(i))->GetSegments()) segs->Delete();
729 ali->eVTX = new TObjArray(1000);
730 }
731
732 vlim[0] = brick.lim[0] + fiducial_border;
733 vlim[1] = brick.lim[1] + fiducial_border;
734 vlim[2] = brick.lim[2] - fiducial_border;
735 vlim[3] = brick.lim[3] - fiducial_border;
736 // working area
737 float area = (vlim[2]-vlim[0])*(vlim[3]-vlim[1])/1000000.;
738 // number of background segments and tracks
739 int nb1 = b1*area;
740 int nb2 = b2*area;
741 vzlim[0] = fiducial_border_z;
743
744 float fractbkg = 1.;
745 int retval = 0;
746// generate events (vertexes)
747 if (read_from_file && ne)
748 {
749 retval = read_events_from_file(ne, &fractbkg, vlim, vzlim);
750 }
751 else if (ne)
752 {
753 gener->GeneratePhaseSpaceEvents( ne, pDecay, vzlim, vlim,
755 charges);
756 neg_tot+=ne;
757 nvgm_tot[nuse + 1 - neutral_primary] += ne;
758 }
759 int nb1f, nb2f;
760// generate uncorrelated segments
761 if ((nb1f = (int)(nb1*fractbkg)))
763 back1_tetamax, 0 );
764// generate cosmictracks
765 if ((nb2f = (int)(nb2*fractbkg)))
769 ntrgb += nb2f;
770// fill hists with generated track parameters
771 FillHistsGen();
772// reconstruction procedure
773 rec_all();
774
775 return retval;
776}
int read_events_from_file(int ne, float *fractbkg, float vlim[4], float vzlim[2])
Definition: RecDispMC.C:561
float back2_tetamax
Definition: RecDispMC.C:31
void rec_all()
Definition: RecDispMC.C:790
int neg_tot
Definition: RecDispMC.C:156
float fiducial_border_z
Definition: RecDispMC.C:35
float fiducial_border
Definition: RecDispMC.C:34
int eloss_flag
Definition: RecDispMC.C:89
float back1_tetamax
Definition: RecDispMC.C:30
float ProbGap
Definition: RecDispMC.C:56
int charges[101]
Definition: RecDispMC.C:148
float back2_plim[2]
Definition: RecDispMC.C:32
void FillHistsGen()
Definition: RecDispMC.C:1263
Int_t npat
Definition: Xi2HatStartScript.C:33
void GeneratePhaseSpaceEvents(int nv, TGenPhaseSpace *pDecay, float vzlim[2], float vlim[4], float lim[4], float ProbGap, int eloss_flag, int *charges)
Definition: EdbPVGen.cxx:699
void GenerateUncorrelatedSegments(int nb, float lim[4], float TetaMax, int flag)
Definition: EdbPVGen.cxx:587
void GenerateBackgroundTracks(int nb, float vlim[4], float lim[4], float plim[2], float TetaMax, float ProbGap, int eloss_flag)
Definition: EdbPVGen.cxx:640
void ResetCouples()
Definition: EdbPVRec.cxx:950
Int_t Npatterns() const
Definition: EdbPattern.h:366
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1721
float lim[4]
Definition: RecDispMC.C:99
float dz
Definition: RecDispMC.C:98

◆ gv()

void gv ( int  n = 1,
int  nve = 100,
float  back1 = 0.,
float  back2 = 0. 
)

228{
229 // main steering routine for vertex generation & reconstruction test
230 char outfile[128];
231
232 if ( !read_from_file && (npi < 2 || npi > 100 || nuse > npi) )
233 {
234 printf("Wrong combination of kinematic conditions:\n");
235 printf(" %d secondary pions, tracking for %d pions \n", npi, nuse);
236 return;
237 }
238
239 timespec_t t0, t;
240 double dt;
241
242 if (read_from_file)
243 {
244 fmcdata = fopen("vertexes_and_tracks.data","r");
245 rewind(fmcdata);
246 ntall = 10*nve;
247 }
248 else
249 {
250 float area = (brick.lim[2]-brick.lim[0]-2.*fiducial_border)*
251 (brick.lim[3]-brick.lim[1]-2.*fiducial_border)/1000000.;
252 ntall = nve*(nuse+1-neutral_primary)+back2*area;
253 }
254
255 // log MC conditions on stdout and logfile
256 print_conditions(n, nve, back1, back2);
257
258 // clear variables and objects
259 clear_all();
260
261 // histogram booking
262 BookHistsV(nve);
263
264 // Phase Space Generator initialization
266 // Create PVRec object
267 ali = new EdbPVRec();
268 // Get Patterns Volume pointer
270 // Make patterns
272 // Create Vertexes TObjArray in PVRec
273 ali->eVTX = new TObjArray(1000);
274 // Create Scan Conditions object
275 scanCond = new EdbScanCond();
276 // Set Scan conditions variables
278 // Assign Scan Conditions to PVRec
280
284
285 // Create PVGen object
286 gener = new EdbPVGen();
287 // Use the same volume as PVRec
289 // Create Vertexes TObjArray in PVGen
290 gener->eVTX = new TObjArray(1000);
291 // Assign Scan Conditions to PVGen (the same as for PVRec)
293
294 TTimeStamp ts; // Time Stamp for printing
295 t0=ts.GetTimeSpec();
296
297 int breakflag = 0;
298 int print_at_end = 0;
299 int nprong = nuse + 1 - neutral_primary;
300
301 for(int i=1; i<=n; i++) {
302 numbricks++;
303 // generate one brick with:
304 // nve events,
305 // back1 uncorrelated segments per mm^2 per plate,
306 // back2 cosmic tracks per mm^2,
307 // return true if EOF conditions (when readevents from file)
308 if (g1(nve,back1,back2)) breakflag = 1;
309 // print time and statistic
310 if ((!(nvg_tot%PrintN)) || breakflag || (i == n))
311 {
312 TTimeStamp ts;
313 t=ts.GetTimeSpec();
314 dt=(t.tv_sec-t0.tv_sec)*1000000000.+(t.tv_nsec-t0.tv_nsec);
315 if ( !breakflag && (i != n) )
316 {
317 if (nve>0&&back2<=0.)
318 printf("%d events generated in %.4f sec (%.1f msec per event)\n",
319 neg_tot,dt/1000000000.,dt/(double)(neg_tot)/1000000.);
320 else if (nve>0&&back2>0.)
321 printf("%d events and %d cosmic tracks generated in %.4f sec (%.1f msec per event)\n",
322 neg_tot,ntrgb, dt/1000000000.,dt/(double)(neg_tot)/1000000.);
323 else if (nve<=0&&back2>0.)
324 printf("%d cosmic tracks generated in %.4f sec (%.1f msec per track)\n",
325 ntrgb, dt/1000000000.,dt/(double)(ntrgb)/1000000.);
326 }
327 else
328 {
329 print_at_end = 1;
330 }
331 }
332 if (breakflag) break;
333 }
334 if (read_from_file)
335 {
337 }
338 else
339 {
340 ntrgv_tot = nprong*nvg_tot;
341 nprongmaxg = nprong;
342 }
343
344 // log MC results on stdout and logfile
346 // Store histogramms on ROOT file
347 sprintf(outfile,"%db_%dK%dpi_%dub_%3.1ftb", n, nve, nuse, (int)back1, back2);
348 rf = new TFile(strcat(outfile,".root"),"RECREATE","MC Vertex reconstruction");
349 hlist.Write();
350 rf->Close();
351 delete rf;
352 rf = 0;
353 // print time and statistic
354 if ( print_at_end )
355 {
356 if (nve>0&&back2<=0.)
357 printf("%d events generated in %.4f sec (%.1f msec per event)\n",
358 neg_tot,dt/1000000000.,dt/(double)(neg_tot)/1000000.);
359 else if (nve>0&&back2>0.)
360 printf("%d events and %d cosmic tracks generated in %.4f sec (%.1f msec per event)\n",
361 neg_tot,ntrgb, dt/1000000000.,dt/(double)(neg_tot)/1000000.);
362 else if (nve<=0&&back2>0.)
363 printf("%d cosmic tracks generated in %.4f sec (%.1f msec per track)\n",
364 ntrgb, dt/1000000000.,dt/(double)(ntrgb)/1000000.);
365 }
366}
const unsigned long int PrintN
Definition: RecDispMC.C:120
TGenPhaseSpace * K3Pi(float p=3.)
Definition: RecDispMC.C:190
TFile * rf
Definition: RecDispMC.C:152
float momentumK
Definition: RecDispMC.C:47
void print_conditions(int n, int nve, float back1, float back2)
Definition: RecDispMC.C:368
void Set_Prototype_OPERA_basetrack(EdbScanCond *cond)
Definition: RecDispMC.C:212
int g1(int ne=1, float b1=0., float b2=0.)
Definition: RecDispMC.C:707
void makeVolumeOPERAn(BRICK &b, EdbPatternsVolume *v)
Definition: RecDispMC.C:779
EdbScanCond * scanCond
Definition: RecDispMC.C:124
void print_results()
Definition: RecDispMC.C:423
void BookHistsV(int nve)
Definition: RecDispMC.C:1167
FILE * fmcdata
Definition: RecDispMC.C:151
void clear_all()
Definition: RecDispMC.C:513
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
Definition: EdbPVGen.h:18
void SetVolume(EdbPatternsVolume *pv)
Definition: EdbPVGen.h:34
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVGen.h:35
Definition: EdbPVRec.h:148
void SetChi2Max(float chi)
Definition: EdbPVRec.h:186
void SetCouplesAll()
Definition: EdbPVRec.cxx:975
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbPattern.h:334
void SetPatternsID()
Definition: EdbPattern.cxx:1603
Definition: EdbScanCond.h:10
float Chi2PMax() const
Definition: EdbScanCond.h:86
TTree * t
Definition: check_shower.C:4
fclose(pFile)

◆ K3Pi()

TGenPhaseSpace * K3Pi ( float  p = 3.)
191{
192 // K->3Pi decay phase space
193
194 double e=TMath::Sqrt(p*p+mK*mK);
195 TLorentzVector K(0,0,p,e);
196 Double_t masses[100];
197 for (int i=0; i<100; i++)
198 {
199 masses[i] = 0;
200 if (i < npi) masses[i] = mPi;
201 if (i == 0) masses[i] = mP;
202 charges[i] = 0;
203 if (i < nuse) charges[i] = 1;
204 }
205 charges[npi] = 1;
206 if (neutral_primary) charges[npi] = 0;
207 TGenPhaseSpace *psp = new TGenPhaseSpace();
208 psp->SetDecay(K, npi, masses);
209 return psp;
210}
double mP
Definition: RecDispMC.C:51
double mPi
Definition: RecDispMC.C:50
p
Definition: testBGReduction_AllMethods.C:8

◆ makeVolumeOPERAn()

void makeVolumeOPERAn ( BRICK b,
EdbPatternsVolume v 
)

780{
781 // Volume geometry setting
782
783 EdbPattern *pat =0;
784 for(int i=0; i<b.plates; i++) {
785 pat = new EdbPattern(0,0,b.z0+b.dz*i);
786 v->AddPattern(pat);
787 }
788}
Definition: EdbPattern.h:273
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1707
float z0
Definition: RecDispMC.C:97

◆ print_conditions()

void print_conditions ( int  n,
int  nve,
float  back1,
float  back2 
)

369{
370 char outfile[128];
371
372 sprintf(outfile,"%db_%dK%dpi_%dub_%3.1ftb", n, nve, nuse, (int)back1, back2);
373
374 f = fopen(strcat(outfile,".out"),"w");
375
376 if (read_from_file)
377 fprintf(f,"Monte-Carlo for %d brick(s) with %d events from file vertexes_and_tracks.data\n", n, nve);
378 else
379 fprintf(f,"Monte-Carlo for %d brick(s) with %d K-%dpi decays, kaon momentum %.1f GeV/c\n",
380 n, nve, nuse, momentumK);
381 if (back1)
382 fprintf(f,"%d uncorrelated segments per mm^2 per pattern, acceptance %.2f rad\n",
383 (int)back1, back1_tetamax);
384 else
385 fprintf(f,"No uncorrelated segments background\n");
386 if (back2)
387 fprintf(f,"%3.1f cosmic tracks per volume, acceptance %.2f rad, momentum %.2f-%.2f GeV/c\n",
388 back2, back2_tetamax, back2_plim[0], back2_plim[1]);
389 else
390 fprintf(f,"No cosmic tracks background\n");
391 fprintf(f,"%3d plates (thickness %5.2f mm) per brick, total area %.1fx%.1f mm2\n",
392 brick.plates, brick.dz/1000., (brick.lim[2]-brick.lim[0])/1000.,
393 (brick.lim[3]-brick.lim[1])/1000.);
394 fprintf(f," work area %.1fx%.1f mm2\n",
395 (brick.lim[2]-brick.lim[0]-2.*fiducial_border)/1000.,
396 (brick.lim[3]-brick.lim[1]-2.*fiducial_border)/1000.);
397 fprintf(f,"Basetrack measurement errors:\n %6.1f microns (X) , %6.1f microns (Y)\n",
398 seg_s[0], seg_s[1]);
399 fprintf(f," %6.4f mrad (TX), %6.4f mrad (TY)\n",
400 seg_s[2], seg_s[3]);
401 fprintf(f,"Track momentum relative error %d%%\n",
402 (int)(dpp*100.));
403 if (eloss_flag == 0)
404 fprintf(f,"No energy losses simulation during particle tracking.\n");
405 else if (eloss_flag == 1)
406 fprintf(f,"Take into account average energy losses.\n");
407 else if (eloss_flag == 2)
408 fprintf(f,"Simulate energy losses according Landau distribution.\n");
409 fprintf(f,"Track segment registration un-efficiency %d%%\n",
410 (int)(ProbGap*100.));
411 fprintf(f,"Minimal Chi2 probability for segment attachment %6.4f\n",
412 ProbMinP);
413 fprintf(f,"Minimal number of track segments for vertexing %d\n",
414 nsegMin);
415 fprintf(f,"Minimal Chi2 track probability for vertexing %6.4f\n",
416 ProbMinT);
417 fprintf(f,"Minimal Chi2 vertex probability for vertex registration %6.4f\n",
418 ProbMinV);
419 fprintf(f,"-----------------------------------------------------------\n");
420 return;
421}
FILE * f
Definition: RecDispMC.C:150
float ProbMinV
Definition: RecDispMC.C:84
float seg_s[4]
Definition: RecDispMC.C:54
int nsegMin
Definition: RecDispMC.C:60
float dpp
Definition: RecDispMC.C:53
float ProbMinP
Definition: RecDispMC.C:86

◆ print_results()

void print_results ( )

424{
425 float tr_eff = (float)ntr_tot/(ntrgv_tot+ntrgb);
426 printf("-----------------------------------------------------------\n");
427 fprintf(f,"-----------------------------------------------------------\n");
428 printf("Total tracks finding efficiency %6.1f%%\n",
429 tr_eff*100.);
430 fprintf(f,"Toatal tracks finding efficiency %6.1f%%\n",
431 tr_eff*100.);
432 if (ntrgv_tot)
433 {
434 float trgood_eff = (float)ntrgood_tot/ntrgv_tot;
435 float trgood_r_eff = (float)ntrgood_r_tot/ntrgv_tot;
436 printf("Event tracks finding efficiency %6.1f%% ( %6.1f%% with right segs >= %.1f%%)\n",
437 trgood_eff*100., trgood_r_eff*100., RightRatioMin*100.);
438 fprintf(f, "Event tracks finding efficiency %6.1f%% ( %6.1f%% with right segs >= %.1f%%)\n",
439 trgood_eff*100., trgood_r_eff*100., RightRatioMin*100.);
440 }
441 if (ntrgb)
442 {
443 float trgoodb_eff = (float)ntrgoodb_tot/ntrgb;
444 float trgoodb_r_eff = (float)ntrgoodb_r_tot/ntrgb;
445 printf("Cosmic tracks finding efficiency %6.1f%% ( %6.1f%% with right segs >= %.1f%%)\n",
446 trgoodb_eff*100., trgoodb_r_eff*100., RightRatioMin*100.);
447 fprintf(f, "Cosmic tracks finding efficiency %6.1f%% ( %6.1f%% with right segs >= %.1f%%)\n",
448 trgoodb_eff*100., trgoodb_r_eff*100., RightRatioMin*100.);
449 }
450 printf("------------------------------------------------------------\n");
451 fprintf(f, "------------------------------------------------------------\n");
452 if (!read_from_file)
453 {
454 int nprong = nuse + 1 - neutral_primary;
455 n2gv = (nprong*(nprong-1)/2)*nvg_tot;
456 }
457 printf("Maximal generated vertex multiplicity %d tracks\n", nprongmaxg);
458 fprintf(f, "Maximal generated vertex multiplicity %d tracks\n", nprongmaxg);
459 printf("Maximal reconstructed vertex multiplicity %d tracks\n", nprongmax);
460 fprintf(f, "Maximal reconstructed vertex multiplicity %d tracks\n", nprongmax);
461 int nvgmsum = 0;
462 int nvgoodmsum = 0;
463 int nvgoodmgsum = 0;
464 printf("------------------------------------------------------------\n");
465 fprintf(f, "------------------------------------------------------------\n");
466 for (int i=2; (i<=nprongmaxg) && nvg_tot; i++)
467 {
468 nvgmsum += nvgm_tot[i];
469 nvgoodmsum += nvgoodm_tot[i];
470 nvgoodmgsum += nvgoodmg_tot[i];
471 if (nvgood_tot[i] <= 0) continue;
472 float vgood_eff = (float)nvgood_tot[i]/nvg_tot;
473 float vgooda_eff = 0.;
474 if (nvgm_tot[i]) vgooda_eff = (float)nvgood_tot[i]/nvgm_tot[i];
475 if (i>2) printf("-----\n");
476 printf("Total %d-track vertexes finding efficiency %6.1f%% (%6.1f%%)\n",
477 i, vgood_eff*100., vgooda_eff*100.);
478 fprintf(f,"Total %d-Track vertexes finding efficiency %6.1f%% (%6.1f%%)\n",
479 i, vgood_eff*100., vgooda_eff*100.);
480 float vgoodm_eff = (float)nvgoodm_tot[i]/nvg_tot;
481 vgooda_eff = 0.;
482 if (nvgm_tot[i]) vgooda_eff = (float)nvgoodm_tot[i]/nvgm_tot[i];
483 printf("Match %d-Track vertexes finding efficiency %6.1f%% (%6.1f%%)\n",
484 i, vgoodm_eff*100., vgooda_eff*100.);
485 fprintf(f,"Match %d-Track vertexes finding efficiency %6.1f%% (%6.1f%%)\n",
486 i, vgoodm_eff*100., vgooda_eff*100.);
487 float vgoodmg_eff = (float)nvgoodmg_tot[i]/nvg_tot;
488 vgooda_eff = 0.;
489 if (nvgm_tot[i]) vgooda_eff = (float)nvgoodmg_tot[i]/nvgm_tot[i];
490 printf("Right %d-Track vertexes finding efficiency %6.1f%% (%6.1f%%)\n",
491 i, vgoodmg_eff*100., vgooda_eff*100.);
492 fprintf(f,"Right %d-Track vertexes finding efficiency %6.1f%% (%6.1f%%)\n",
493 i, vgoodmg_eff*100., vgooda_eff*100.);
494 }
495 printf("------------------------------------------------------------\n");
496 fprintf(f, "------------------------------------------------------------\n");
497// printf("nvg_tot = %d, nvgmsum = %d, nvgoodmsum = %d, nvgoodmt_tot = %d, nvgoodmgsum = %d\n",
498// nvg_tot, nvgmsum, nvgoodmsum, nvgoodmt_tot, nvgoodmgsum);
499 if (neg_tot)
500 {
501 printf("Primary vertex finding efficiency %6.1f%% (%6.1f%%)\n",
502 (float)negood_tot/neg_tot*100., (float)nvgoodmgsum/neg_tot*100.);
503 fprintf(f, "Primary vertex finding efficiency %6.1f%% (%6.1f%%)\n",
504 (float)negood_tot/neg_tot*100., (float)nvgoodmgsum/neg_tot*100.);
505 }
506 printf("------------------------------------------------------------\n");
507 fprintf(f, "------------------------------------------------------------\n");
508 fclose(f);
509 f = 0;
510 return;
511}
int n2gv
Definition: RecDispMC.C:181
int negood_tot
Definition: RecDispMC.C:164
float RightRatioMin
Definition: RecDispMC.C:58

◆ read_events_from_file()

int read_events_from_file ( int  ne,
float *  fractbkg,
float  vlim[4],
float  vzlim[2] 
)

562{
563 int retval = 0;
564 float VTx;
565 float VTy;
566 float VTz;
567 float zlimt[2];
568 EdbVertex *vedb = 0;
569 EdbTrackP *tr = 0;
570 int numt = 0, ntrv = 0, indv, gcode, nitem;
571 float TMass, Pt, TXt, TYt;
572 int iiv = 0;
573 while (iiv == 0)
574 {
575 for (int iv = 0; iv < ne; iv++)
576 {
577 // read vertex line: vert number, multiplicity, coordinates
578 nitem = fscanf(fmcdata, "%d %d %f %f %f\n", &indv, &ntrv, &VTx, &VTy, &VTz);
579 if (nitem <= 0 && fmc1steof && evcount == 0)
580 {
581 fmc1steof = false;
582 rewind(fmcdata);
583 // re-read vertex line: vert number, multiplicity, coordinates
584 nitem = fscanf(fmcdata, "%d %d %f %f %f\n", &indv, &ntrv, &VTx, &VTy, &VTz);
585 if (nitem <= 0)
586 {
587 retval = 1;
588 *fractbkg = (float)evcount/ne;
589 iiv = -1;
590 break;
591 }
592 }
593 else if ( nitem <= 0 )
594 {
595 retval = 1;
596 *fractbkg = (float)evcount/ne;
597 iiv = -1;
598 break;
599 }
601 {
602 // skip event with low multiplicity
603 for (int it = 0; it < ntrv; it++)
604 {
605 fscanf(fmcdata, "%d %f %f %f %f\n", &gcode, &TMass, &Pt, &TXt, &TYt);
606 }
607 continue;
608 }
610 {
611 // generate vertex position into fiducial volume
612 VTx = vlim[0] + (vlim[2] - vlim[0])*gRandom->Rndm();
613 VTy = vlim[1] + (vlim[3] - vlim[1])*gRandom->Rndm();
614 VTz = vzlim[0] + (vzlim[1] - vzlim[0])*gRandom->Rndm();
615 }
616 evcount++;
617 vedb = new EdbVertex();
618 vedb->SetXYZ(VTx, VTy, VTz);
619 int ntrvreal = 0;
620 for (int it = 0; it < ntrv; it++)
621 {
622 // read track parameters: Geant_code, mass, momentum, slopes
623 fscanf(fmcdata, "%d %f %f %f %f\n", &gcode, &TMass, &Pt, &TXt, &TYt);
624 tr = new EdbTrackP();
625 tr->Set(numt++, VTx, VTy, TXt, TYt, 1, iiv+1);
626 tr->SetZ(VTz);
627 tr->SetP(Pt);
628 tr->SetM(TMath::Abs(TMass));
629 if (TMass >= 0.)
630 {
631 zlimt[0] = VTz;
632 zlimt[1] = 100000.;
633 }
634 else
635 {
636 zlimt[0] = VTz;
637 zlimt[1] = -1000.;
638 }
639 // generate segments
640 gener->TrackMC( zlimt, brick.lim, *tr, eloss_flag, ProbGap);
641 // reject tracks with one segment only
642 if (tr->N() >= 2)
643 {
644 gener->AddTrack(tr);
645 if (TMass < 0.)
646 vedb->AddTrack(tr, 0);
647 else
648 vedb->AddTrack(tr, 1);
649 ntrvreal++;
650 ntrgv_tot++;
651 }
652 else
653 {
654 if (tr->N())
655 {
656 tr->GetSegment(0)->SetFlag(-1);
657 }
658 delete tr;
659 tr = 0;
660 }
661 }
662 if (ntrvreal == 0)
663 {
664 // reject vertex with no "good" tracks
665 delete vedb;
666 vedb = 0;
667 }
668 else if (ntrvreal == 1)
669 {
670 // reject vertex with no one track only
671 delete vedb;
672 vedb = 0;
673 if (indv == 1)
674 {
675 // primary vertex
676 if (tr)
677 {
678 ntrgv_tot--;
679 gener->eTracks->Remove(tr);
680 delete tr;
681 tr = 0;
682 }
683 }
684 if (tr)
685 {
686 tr->SetFlag(0);
687 ntrgv_tot--;
688 }
689 }
690 else
691 {
692 // accept vertex
693 vedb->SetFlag(indv);
695 iiv++;
696 if (indv == 1) neg_tot++;
697 n2gv += (ntrvreal*(ntrvreal-1)/2);
698 nvgm_tot[ntrvreal]++;
699 if (ntrvreal > nprongmaxg) nprongmaxg = ntrvreal;
700 }
701 }
702 if (iiv < 0) break;
703 }
704 return retval;
705}
int primary_vertex_ntracks_min
Definition: RecDispMC.C:24
EdbVertex * vedb
Definition: RecDispMC.C:139
bool regenerate_vertex_xyz
Definition: RecDispMC.C:27
bool fmc1steof
Definition: RecDispMC.C:185
float TMass[500]
Definition: RecDispNU.C:109
float VTz[500]
Definition: RecDispNU.C:104
float VTy[500]
Definition: RecDispNU.C:104
float Pt[500]
Definition: RecDispNU.C:99
float TXt[500]
Definition: RecDispNU.C:100
float TYt[500]
Definition: RecDispNU.C:101
float VTx[500]
Definition: RecDispNU.C:104
void TrackMC(float zlim[2], float lim[4], EdbTrackP &tr, int eloss_flag=0, float PGap=0.)
Definition: EdbPVGen.cxx:389
void AddVertex(EdbVertex *vtx)
Definition: EdbPVGen.h:54
void AddTrack(EdbTrackP *track)
Definition: EdbPVGen.h:49
void SetFlag(int flag=0)
Definition: EdbVertex.h:158
void SetXYZ(float x, float y, float z)
Definition: EdbVertex.h:157

◆ rec_all()

void rec_all ( )

791{
792 // tracks and vertex reconstruction (track finding and fitting, vertex finding and fitting)
793
794 int numrect[10000];
795 float xg, yg, zg, txg, tyg, pg;
796 int zpos;
797 Vertex *v;
798 EdbVertex *edbv, *edbv1, *edbv2, *edbvg
799 EdbTrackP *tr = 0;
800 EdbTrackP *trg = 0;
801 EdbSegP *s = 0;
802 float p;
803
804
805 int nvg = 0;
806 if (gener->eVTX) nvg = gener->eVTX->GetEntries();
807 int ntrg = 0;
808 if (gener->eTracks) ntrg = gener->eTracks->GetEntries();
809
810 nvg_tot += nvg;
811 ntrg_tot += ntrg;
812
813 // link microtracks
814 ali->Link();
816
817 printf("------------------------------------------------------------\n");
818 printf("%d generated vertexes\n", nvg);
819 printf("%d generated tracks\n", ntrg);
820 fprintf(f," %6d generated vertexes\n", nvg);
821 fprintf(f," %6d generated tracks\n", ntrg);
822
823 // make track candidates
824 if (mc_make_tracks)
825 {
826 ali->eTracks = new TObjArray();
828 }
829 else
830 ali->MakeTracks();
831
832 int itrg = 0;
833 int nsegmatch = 0;
834 int ntr = 0;
835 if (ali->eTracks) ntr = ali->eTracks->GetEntries();
836 // loop for tracks momentum and momentum error setting
837 for (int itr=0; itr<ntr; itr++) {
838 tr = (EdbTrackP*)(ali->eTracks->At(itr));
839 trg = 0;
840 if (ntrg)
841 {
842 itrg = tr->GetSegmentsFlag(nsegmatch);
843 if (itrg >= 0 && itrg < ntrg)
844 {
845 trg = (EdbTrackP*)(gener->eTracks->At(itrg));
846 p = trg->P();
847 if (dpp != 0.) tr->SetErrorP(p*p*dpp*dpp);
848 else tr->SetErrorP(p*p*0.2*0.2);
849 if (use_mc_momentum)
850 {
851 p = p*(1.+dpp*gRandom->Gaus());
852 if (p < 0.050) p = 0.050;
853 }
854 else
855 {
856 p = 0.;
857 }
858 tr->SetP(p);
859 }
860 }
861 }
862
863 fprintf(f," %6d tracks found after track making\n", ntr);
864
865 float mpar = -1.;
866 if (use_mc_mass)
867 mpar = -1.;
868 else
869 mpar = 0.;
870 // fit tracks
871 ali->FitTracks(0., mpar, gener->eTracks, design);
872 ali->FillCell(50,50,0.015,0.015);
873
874 // merge tracks
876
877 ntr = 0;
878 if (ali->eTracks) ntr = ali->eTracks->GetEntries();
879
880 // clear some counters
881 int ntrgood = 0;
882 int ntrgood_r = 0;
883 int negflag = 0;
884 int notmatched = 0;
885 int nreject_prob = 0;
886 int nreject_nseg = 0;
887 int ntrgoodb = 0;
888 int ntrgoodb_r = 0;
889 double right_ratio = 0.;
890 float pro = 0.;
891
892 // loop on tracks for count statistic and hists filling
893
894 for(int itr=0; itr<ntr; itr++) {
895 tr = (EdbTrackP*)(ali->eTracks->At(itr));
896 if (tr->Flag()<0)
897 {
898 // count "broken" tracks (at track merging procedure)
899 negflag++;
900 continue;
901 }
902 if (hp[11]) hp[11]->Fill(tr->N());
903 if (tr->N()<nsegMin)
904 {
905 // count too short tracks
906 nreject_nseg++;
907 continue;
908 }
909 trg = 0;
910 if (ntrg)
911 {
912 // find corresponding generated track
913 itrg = tr->GetSegmentsFlag(nsegmatch);
914 if (itrg >= 0 && itrg < ntrg)
915 {
916 trg = (EdbTrackP*)(gener->eTracks->At(itrg));
917 }
918 }
919 if (trg && ((pro = tr->Prob()) < 0.9999))
920 {
921 // fill probability hist (reject "one-segment" tracks (too high MS)
922 hp[17]->Fill(pro);
923 }
924 if (tr->Prob()<ProbMinT)
925 {
926// ang = TMath::ACos(1./(1.+tr->TX()*tr->TX()+tr->TY()*tr->TY()))*1000.;
927// printf("Track ID = %d, N = %d Prob = %f X = %f Y = %f Z = %f\n TX = %f TY = %f P = %f M = %f\n",
928// tr->ID(), tr->N(), tr->Prob(), tr->X(), tr->Y(), tr->Z(),
929// tr->TX(), tr->TY(), tr->P(), tr->M());
930// hp[19]->Fill(ang);
931 // count low probability tracks
932 nreject_prob++;
933 continue;
934 }
935 if (ntrg)
936 {
937 if (trg)
938 {
939 if (trg->Flag() == 0) // background track
940 {
941 // count tracks matched to MC (cosmic)
942 ntrgoodb++;
943 right_ratio = (double)nsegmatch/tr->N();
944 if (right_ratio >= RightRatioMin)
945 {
946 // count tracks matched to MC with high "right" segments
947 // contamination (cosmic tracks)
948 ntrgoodb_r++;
949 }
950 hp[16]->Fill(right_ratio);
951
952 }
953 else if (trg->Flag() <= nvg) // track at vertex
954 {
955 // count tracks matched to MC (tracks at vertexes)
956 ntrgood++;
957 right_ratio = (double)nsegmatch/tr->N();
958 if (right_ratio >= RightRatioMin)
959 {
960 // count tracks matched to MC with high "right" segments
961 // contamination (tracks at vertexes)
962 ntrgood_r++;
963 }
964 hp[15]->Fill(right_ratio);
965 }
966 }
967 else
968 {
969 // count tracks not matched to MC
970 notmatched++;
971 }
972 }
973 else
974 {
975 // count tracks not matched to MC
976 notmatched++;
977 }
978
979// printf(" tr # %d, N = %d P = %f\n", itr, tr->N(), tr->P());
980// if (tr->N() < nsegMin) continue;
981// if (tr->P() < 0.1) continue;
982
983
984 // fill hist with difference between measured and fitted track coordinate
985 if (hp[12]) hp[12]->Fill(tr->GetSegmentFirst()->X()-tr->GetSegmentFFirst()->X());
986
987 if (trg != 0)
988 {
989 DE_MC = trg->DE();
990 DE_FIT = tr->DE();
991 // fill hist with difference between estimated and
992 // generated track energy losses
993 hp[19]->Fill(DE_FIT-DE_MC);
994 // fill hist with relative difference between MS-estimated and
995 // generated track momentum
996// float pms = tr->P_MS(brick.X0, trg->M(), true);
997 float pms = tr->P_MS(brick.X0, trg->M(), false);
998 if (pms > 0.)
999 {
1000 hp[23]->Fill((1./pms - 1./trg->P())*trg->P()*100.);
1001 }
1002 }
1003 }
1004
1005 printf(" %6d tracks found after propagation\n", ntr-negflag);
1006 printf(" %6d matched tracks found (at vertexes), %6d with right segs >= %.0f%%\n", ntrgood, ntrgood_r, RightRatioMin*100.);
1007 printf(" %6d matched tracks found (cosmic ), %6d with right segs >= %.0f%%\n", ntrgoodb, ntrgoodb_r, RightRatioMin*100.);
1008 printf(" ( %4d tracks not matched with generated ones)\n", notmatched);
1009 printf(" ( %4d tracks with nseg < %d )\n", nreject_nseg, nsegMin);
1010 printf(" ( %4d tracks with prob < %6.3f )\n", nreject_prob, ProbMinT);
1011 fprintf(f," %6d tracks found after propagation\n", ntr-negflag);
1012 fprintf(f," %6d matched tracks found (at vertexes), %6d with right segs >= %.0f%%\n", ntrgood, ntrgood_r, RightRatioMin*100.);
1013 fprintf(f," %6d matched tracks found (cosmic ), %6d with right segs >= %.0f%%\n", ntrgoodb, ntrgoodb_r, RightRatioMin*100.);
1014 fprintf(f," ( %4d tracks not matched with generated ones)\n", notmatched);
1015 fprintf(f," ( %4d tracks with nseg < %d )\n", nreject_nseg, nsegMin);
1016 fprintf(f," ( %4d tracks with prob < %6.3f )\n", nreject_prob, ProbMinT);
1017
1018 ntr_tot += ntr-negflag;
1019 ntrgood_tot += ntrgood;
1020 ntrgoodb_tot += ntrgoodb;
1021 ntrgood_r_tot += ntrgood_r;
1022 ntrgoodb_r_tot += ntrgoodb_r;
1023
1024
1025
1026 if (hp[10]) hp[10]->Fill(ntr-negflag);
1027
1028 bool usemom = false;
1029 if ( neutral_primary && (nuse == npi) && !read_from_file ) usemom = true;
1030
1031 // build 2-tracks vertexes
1032 int nvtx = ali->ProbVertex(maxgaps, AngleAcceptance, ProbMinV, ProbMinT, nsegMin, usemom);
1033
1034 // clearsome counters
1035 int nvgood[100];
1036 int nvgoodm[100];
1037 for (int i=0; i<100; i++) nvgood[i] = 0;
1038 for (int i=0; i<100; i++) nvgoodm[i] = 0;
1039 for (int i=0; i<10000; i++) numrect[i] = 0;
1040
1041 int nadd = 0, npg = 0;
1042 int nprong = nuse + 1 - neutral_primary;
1043
1044 // build N-tracks vertexes
1045 if (nprong > 2 || read_from_file) nadd = ali->ProbVertexN(ProbMinVN);
1046
1047 // loop on found vertexes, search of corresponding generated vertex,
1048 // count some statistics, fill hists
1049 int ivg = 0, nvgoodt = 0, nvgoodmt = 0, np = 0, ntold = 0;
1050 for (int i=0; i<nvtx; i++)
1051 {
1052 edbv = (EdbVertex *)((ali->eVTX)->At(i));
1053 if (edbv)
1054 {
1055 if (edbv->Flag() == -10) continue;
1056 v = edbv->V();
1057 if (v)
1058 {
1059 if (v->valid())
1060 {
1061 if ((np = v->ntracks()) >= 2)
1062 {
1063 // reconstructed vertex with "np" tracks
1064 nvgood[np]++;
1065 nvgoodt++;
1066 if (np > nprongmax) nprongmax = np;
1067 tr = edbv->GetTrack(0);
1068 // search corresponding generated vertex for 1st track
1069 int ivg0 = -1000000;
1070 if(tr) ivg0 = tr->GetSegmentsFlag(nsegmatch);
1071 if (ivg0 >= 0 && ivg0 < ntrg)
1072 ivg0 = ((EdbTrackP*)(gener->eTracks->At(ivg0)))->Flag();
1073 else
1074 ivg0 = -1000000;
1075 ivg = -2000000;
1076 // check that all track has the same generated vertex
1077 for (int j=1; j<edbv->N() && ivg0>0; j++)
1078 {
1079 tr = edbv->GetTrack(j);
1080 int ivg = -2000000;
1081 if(tr) ivg = tr->GetSegmentsFlag(nsegmatch);
1082 if (ivg >= 0 && ivg < ntrg)
1083 ivg = ((EdbTrackP*)(gener->eTracks->At(ivg)))->Flag();
1084 else
1085 {
1086 ivg = -2000000;
1087 break;
1088 }
1089 if (ivg != ivg0) break;
1090 }
1091 if (ivg != ivg0) continue;
1092 if (ivg <= 0) continue;
1093 if (ivg > nvg) continue;
1094 // corresponding generated vertex found!
1095 if (np < rec_primary_vertex_ntracks_min) continue;
1096 edbvg = (EdbVertex *)((gener->eVTX)->At(ivg-1));
1097 npg = edbvg->N();
1098 ntold = numrect[ivg];
1099 // count reconstructed vertex only one time for
1100 // the same generated vertex
1101 if (ntold == 0)
1102 {
1103 nvgoodmg_tot[npg]++;
1104 numrect[ivg] = npg;
1105 }
1106 nvgoodmt++;
1107 nvgoodmt_tot++;
1108 nvgoodm[np]++;
1109 // count primary vertexes (i.e. events)
1110 if (edbvg->Flag() == 1) negood_tot++;
1111 vxo = edbv->VX();
1112 vyo = edbv->VY();
1113 vzo = edbv->VZ();
1114 vxg = edbvg->X();
1115 vyg = edbvg->Y();
1116 vzg = edbvg->Z();
1117 FillHistsV(*edbv, *v);
1118 }
1119 }
1120 }
1121 }
1122 }
1123 if (hp[9]) hp[9]->Fill(nvgoodmt);
1124 for (int i=2; i<=nprongmax; i++)
1125 {
1126 if (nvgood[i] <= 0) continue;
1127 printf("%6d %d-tracks vertexes found (%d matched to MC)\n", nvgood[i], i, nvgoodm[i]);
1128 fprintf(f,"%6d %d-tracks vertexes found (%d matched to MC)\n", nvgood[i], i, nvgoodm[i]);
1129 nvgood_tot[i] += nvgood[i];
1130 nvgoodm_tot[i] += nvgoodm[i];
1131 }
1132 if (nvtx)
1133 {
1134 int nlv = ali->LinkedVertexes();
1135 printf("------------------------------------------------------------\n");
1136 printf("%d linked vertexes found\n", nlv);
1137 if (nlv)
1138 {
1139 EdbVertex *vl = 0;
1140 EdbVertex *vc = 0;
1141 for(int i=0; i<nvtx; i++)
1142 {
1143 vl = (EdbVertex*)(ali->eVTX->At(i));
1144 if (!vl) continue;
1145 if (vl->Flag()) > 2)
1146 {
1147 vc = vl->GetConnectedVertex(0);
1148 if (!vc) continue;
1149 if (vc->ID() > vl->ID())
1150 {
1151// vl->Print();
1152// vc->Print();
1153 }
1154 }
1155 }
1156 }
1158 {
1159 int nn = ali->VertexNeighboor(1000., 2, 10000.);
1160 printf("------------------------------------------------------------\n");
1161 printf("%d neighbooring tracks and segments found\n", nn);
1162 }
1163 }
1164}
bool usemom
Definition: RecDispEX.C:20
int maxgaps[6]
Definition: RecDispMC.C:62
bool use_mc_mass
Definition: RecDispMC.C:23
bool mc_make_tracks
Definition: RecDispMC.C:21
bool use_mc_momentum
Definition: RecDispMC.C:22
int rec_primary_vertex_ntracks_min
Definition: RecDispMC.C:25
double DE_FIT
Definition: RecDispMC.C:147
double DE_MC
Definition: RecDispMC.C:147
float AngleAcceptance
Definition: RecDispMC.C:82
void FillHistsV(EdbVertex &edbv, Vertex &v)
Definition: RecDispMC.C:1230
int design
Definition: RecDispMC.C:90
bool select_neighborhood
Definition: RecDispMC.C:29
float ProbMinVN
Definition: RecDispMC.C:85
int MakeTracksMC(int nsegmin, TObjArray *tracks)
Definition: EdbPVGen.cxx:1046
int MakeTracks(int nsegments=2, int flag=0)
Definition: EdbPVRec.cxx:1989
void FillTracksCell()
Definition: EdbPVRec.cxx:1319
void FillCell(float stepx, float stepy, float steptx, float stepty)
Definition: EdbPVRec.cxx:1092
int Link()
Definition: EdbPVRec.cxx:1187
int PropagateTracks(int nplmax, int nplmin, float probMin=0.05, int ngapMax=3, int design=0)
Definition: EdbPVRec.cxx:2487
void FitTracks(float p=10., float mass=0.139, TObjArray *gener=0, int design=0)
Definition: EdbPVRec.cxx:1893
Float_t P() const
Definition: EdbSegP.h:152
Int_t Flag() const
Definition: EdbSegP.h:149
Float_t M() const
Definition: EdbPattern.h:155
Float_t DE() const
Definition: EdbPattern.h:166
Int_t ID() const
Definition: EdbVertex.h:126
Float_t VX() const
Definition: EdbVertex.h:133
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
Float_t VY() const
Definition: EdbVertex.h:134
EdbVertex * GetConnectedVertex(int nv)
Definition: EdbVertex.cxx:405
Float_t VZ() const
Definition: EdbVertex.h:135
Definition: VtVertex.hh:88
bool valid() const
is vertex valid?
s
Definition: check_shower.C:55
float X0
Definition: RecDispMC.C:100

◆ Set_Prototype_OPERA_basetrack()

void Set_Prototype_OPERA_basetrack ( EdbScanCond cond)

213{
214 // sigma0 "x, y, tx, ty" at zero angle
215 cond->SetSigma0( seg_s[0], seg_s[1], seg_s[2], seg_s[3] );
216 cond->SetDegrad( 0.2 ); // sigma(tx) = sigma0*(1+degrad*tx)
217 cond->SetBins(20, 20, 10, 10); // bins in [sigma] for checks
218 cond->SetPulsRamp0( 15., 15. ); // in range (Pmin:Pmax) Signal/All is nearly linear
219 cond->SetPulsRamp04( 15., 15. );
220 cond->SetChi2Max( 3.5 );
221 cond->SetChi2PMax( 3.5 );
222 cond->SetRadX0( brick.X0 );
223
224 cond->SetName("Prototype_OPERA_basetrack");
225}
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 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

Variable Documentation

◆ ali

EdbPVRec* ali =0

◆ AngleAcceptance

float AngleAcceptance = 2.0

◆ arrs

TObjArray* arrs = new TObjArray()

◆ arrs2

TObjArray* arrs2 = new TObjArray()

◆ arrtr

TObjArray* arrtr = new TObjArray()

◆ arrtr2

TObjArray* arrtr2 = new TObjArray()

◆ arrv

TObjArray* arrv = new TObjArray()

◆ arrv2

TObjArray* arrv2 = new TObjArray()

◆ back1_tetamax

float back1_tetamax = 0.35

◆ back2_plim

float back2_plim[2] = {1., 1.}

◆ back2_tetamax

float back2_tetamax = 0.25

◆ brick

BRICK brick

◆ charges

int charges[101]

◆ DE_FIT

double DE_FIT

◆ DE_MC

double DE_MC

◆ design

int design = +0

◆ dpp

float dpp = 0.20

◆ ds

EdbDisplay* ds =0

◆ ds2

EdbDisplay* ds2 =0

◆ dz

brick dz = 1290.

◆ eloss_flag

int eloss_flag = 0

◆ evcount

int evcount = 0

◆ f

FILE* f =0

◆ fiducial_border

float fiducial_border = 50000.

◆ fiducial_border_z

float fiducial_border_z = 12000.

◆ fmc1steof

bool fmc1steof = true

◆ fmcdata

FILE* fmcdata =0

◆ gener

EdbPVGen* gener = 0

◆ hld1

TObjArray hld1

◆ hld2

TObjArray hld2

◆ hld3

TObjArray hld3

◆ hld4

TObjArray hld4

◆ hlist

TObjArray hlist

◆ hp

TH1F* hp[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

◆ lim

brick lim = -60000.

◆ maxgaps

int maxgaps[6] = {0,3,3,6,3,6}

◆ mc_make_tracks

bool mc_make_tracks = true

◆ mK

double mK =5.6

◆ momentumK

float momentumK =15.

◆ mP

double mP =0.938

◆ mPi

double mPi =.139

◆ n2gv

int n2gv = 0

◆ neg_tot

int neg_tot = 0

◆ negood_tot

int negood_tot = 0

◆ neutral_primary

int neutral_primary = 1

◆ npi

int npi = 5

◆ nprongmax

int nprongmax = 0

◆ nprongmaxg

int nprongmaxg = 0

◆ nsegMin

int nsegMin = 2

◆ ntall

int ntall = 0

◆ ntr_tot

int ntr_tot = 0

◆ ntrg_tot

int ntrg_tot = 0

◆ ntrgb

int ntrgb = 0

◆ ntrgood_r_tot

int ntrgood_r_tot = 0

◆ ntrgood_tot

int ntrgood_tot = 0

◆ ntrgoodb_r_tot

int ntrgoodb_r_tot = 0

◆ ntrgoodb_tot

int ntrgoodb_tot = 0

◆ ntrgv_tot

int ntrgv_tot = 0

◆ numbricks

int numbricks = 0

◆ nuse

int nuse = 5

◆ nvg_tot

int nvg_tot = 0

◆ nvgm_tot

int nvgm_tot[100]

◆ nvgood_tot

int nvgood_tot[100]

◆ nvgoodm_tot

int nvgoodm_tot[100]

◆ nvgoodmg_tot

int nvgoodmg_tot[100]

◆ nvgoodmt_tot

int nvgoodmt_tot = 0

◆ pDecay

TGenPhaseSpace* pDecay = 0

◆ plates

brick plates = 58

◆ primary_vertex_ntracks_min

int primary_vertex_ntracks_min = 2

◆ PrintN

const unsigned long int PrintN = 100

◆ ProbGap

float ProbGap = 0.10

◆ ProbMinP

float ProbMinP = 0.01

◆ ProbMinT

float ProbMinT = 0.01

◆ ProbMinV

float ProbMinV = 0.01

◆ ProbMinVN

float ProbMinVN = 0.01

◆ read_from_file

bool read_from_file = false

◆ rec_primary_vertex_ntracks_min

int rec_primary_vertex_ntracks_min = 2

◆ regenerate_vertex_xyz

bool regenerate_vertex_xyz = true

◆ rf

TFile* rf =0

◆ RightRatioMin

float RightRatioMin = 0.5

◆ scanCond

EdbScanCond* scanCond =0

◆ seg_s

float seg_s[4] ={1.2, 1.2, 0.0015, 0.0015}

◆ seg_zero

float seg_zero[4] ={.0,.0,.0,.0}

◆ select_neighborhood

bool select_neighborhood = true

◆ use_mc_mass

bool use_mc_mass = false

◆ use_mc_momentum

bool use_mc_momentum = true

◆ vedb

EdbVertex* vedb

◆ vxg

float vxg = 0.

◆ vxo

float vxo = 0.

◆ vxyz

float vxyz[3] = {0., 0., 0.}

◆ vyg

float vyg = 0.

◆ vyo

float vyo = 0.

◆ vzg

float vzg = 0.

◆ vzo

float vzo = 0.

◆ X0

brick X0 = 5810.

◆ z0

brick z0 = 0.