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

Classes

struct  BRICK
 

Functions

void BookHistsV ()
 
void CalcCovMS ()
 
void ClearHistsV ()
 
void DrawHistsV ()
 
void g1 (int nv=1)
 
void gen_segs_v (BRICK &b, EdbVertex &vedb)
 
void gen_tracks_v (EdbVertex &vedb)
 
void gen_v (BRICK &b, int nv)
 
void graphs ()
 
void gv (int n=1)
 
void makeVolumeOPERAn (BRICK &b, EdbPatternsVolume *v)
 
void rec_v (EdbVertex &vedb)
 
Double_t roadp (Double_t *x, Double_t *par)
 
void run (int Nstat=20000)
 

Variables

EdbPVRecali =0
 
BRICK brick
 
double CovMS [dim2]
 
TCanvascv = 0
 
TCanvascv1 = 0
 
TCanvascv2 = 0
 
TCanvascv3 = 0
 
TCanvascv4 = 0
 
TCanvascv5 = 0
 
TCanvascv6 = 0
 
TCanvascvg1 = 0
 
TCanvascvg2 = 0
 
TCanvascvg3 = 0
 
TCanvascvg4 = 0
 
TCanvascvg5 = 0
 
TCanvascvg6 = 0
 
double DE
 
double DE_MC
 
int design = 0
 
float dpp = 0.
 
brick dz = 1300.
 
int eloss_flag = 1
 
EdbPVGengener = 0
 
EdbVertexRecgEVR =0
 
TH1F * hp [9] = {0,0,0,0,0,0,0,0,0}
 
TProfile * hpp [6] = {0,0,0,0,0,0}
 
int isegtest = -1
 
brick lim [0] = -50000.
 
bool linfit = false
 
float momentum = 4000.
 
float NewSxy = 0.
 
double * pCovMS = &CovMS[0]
 
brick plates = 56
 
const unsigned long int PrintN = 100
 
float * pxl = &xl[0]
 
float * pzl = &zl[0]
 
EdbScanCondscanCond =0
 
float seg_s [4] = {2.5,2.5,0.0025,0.0025}
 
float seg_zero [4] = {.0,.0,.0,.0}
 
float ShiftP = 0.
 
float ShiftX = -3.*seg_s[0]
 
EdbTrackPti [10] = {0,0,0,0,0,0,0,0,0,0}
 
EdbVertexvedb
 
float vxyz [3] = {0., 0., -1000.}
 
brick X0 = 5810.
 
float xl [dim]
 
float Xn [5] = {2., 3., 5., 10., 20.}
 
float Xnlin [5] = {2.2, 3.2, 5.2, 10.2, 20.2}
 
float Yerrtx [5][5]
 
float Yerrx [5][5]
 
float Yerrxlin [5][5]
 
float Yrmstx [5][5]
 
float Yrmsx [5][5]
 
float Ysigtx [5][5]
 
float Ysigx [5][5]
 
brick z0 = 0.
 
float zl [dim]
 

Function Documentation

◆ BookHistsV()

void BookHistsV ( )

658 {
659  if (!hp[0]) hp[0] = new TH1F("Hist_Vt_DtrackX","Track Delta X, microns",100,-20.,+20.);
660  if (!hp[1]) hp[1] = new TH1F("Hist_Vt_DtrackTX","Track Delta TX, rad",100,-0.020,+0.020);
661  if (!hp[2]) hp[2] = new TH1F("Hist_Vt_DsegX","Segment Delta X, microns",100,-20.,+20.);
662  if (!hp[3]) hp[3] = new TH1F("Hist_Vt_DsegTX","Segment Delta TX, rad",100,-0.050,+0.050);
663  if (!hp[4]) hp[4] = new TH1F("Hist_Vt_StrackX","Track Sigma X, microns",100,0.,+10.);
664  if (!hp[5]) hp[5] = new TH1F("Hist_Vt_StrackTX","Track Sigma TX, rad",100,0.,+0.010);
665  if (!hp[6]) hp[6] = new TH1F("Hist_Vt_Prob","Chi Square Probability",101,0.,1.01);
666  if (!hp[7]) hp[7] = new TH1F("Hist_Vt_Chi2","Chi Square",100,0.,20.0);
667  if (!hpp[0]) hpp[0] = new TProfile("Hist_DX_Prof","Delta X vs Z",brick.plates,0.,brick.plates,-1000.,+1000.,"s");
668  if (!hpp[1]) hpp[1] = new TProfile("Hist_SX_Prof","Sigma X vs Z",brick.plates,0.,brick.plates,-1000.,+1000.," ");
669  if (!hpp[2]) hpp[2] = new TProfile("Hist_DXP_Prof","Pull quantities X vs Z",brick.plates,0.,brick.plates,-5.,+5.,"s");
670  if (!hpp[3]) hpp[3] = new TProfile("Hist_DTXP_Prof","Pull quantities TX vs Z",brick.plates,0.,brick.plates,-5.,+5.,"s");
671  if (!hpp[4]) hpp[4] = new TProfile("Hist_Chi2_Prof","Chi2 vs Z",brick.plates,0.,brick.plates, 0.,+20.,"s");
672  if (!hpp[5]) hpp[5] = new TProfile("Hist_Prob_Prof","Prob vs Z",brick.plates,0.,brick.plates, 0.,+1.04,"s");
673  hpp[0]->SetStats(kFALSE);
674  hpp[1]->SetStats(kFALSE);
675  hpp[2]->SetStats(kFALSE);
676  hpp[3]->SetStats(kFALSE);
677  hpp[4]->SetStats(kFALSE);
678  hpp[5]->SetStats(kFALSE);
679 }
TH1F * hp[9]
Definition: RecDispMC_Profiles_new.C:56
BRICK brick
Definition: RecDispMC_Profiles_new.C:25
TProfile * hpp[6]
Definition: RecDispMC_Profiles_new.C:57
int plates
Definition: RecDispMC.C:96

◆ CalcCovMS()

void CalcCovMS ( )

860 {
861  int i, j, l;
862  int n = brick.plates;
863  int m = n*2;
864  int plusi = 0, plusj = 0, emul = 0;
865  Double_t xi, xj, dx, dxi, dxj, xg1, xg2;
866  Double_t sx2 = seg_s[0]*seg_s[0]+seg_s[2]*seg_s[2]*150.*150.;
867  Double_t sxc = seg_s[0]*seg_s[0]-seg_s[2]*seg_s[2]*150.*150.;
868  Double_t stx2 = seg_s[2]*seg_s[2];
869  Double_t cov = 0., len = 0., X = 0.;
870  Double_t beta = momentum/TMath::Sqrt(momentum*momentum+0.139*0.139);
871  Double_t h = 0.0141/(momentum*beta);
872  h = h*h;
873  Double_t H = 0.;
874 
875  for (i = 0; i<m*m; i++)
876  {
877  CovMS[i] = 0.;
878  }
879 
880  for (i = 0; i<m; i++)
881  {
882  plusi = i%2;
883  xi = brick.z0 + brick.dz*(i/2);
884  if (plusi) xi = xi + 150.;
885  else xi = xi - 150.;
886  for (j = 0; j<m; j++)
887  {
888  plusj = j%2;
889  xj = brick.z0 + brick.dz*(j/2);
890  if (plusj) xj = xj + 150.;
891  else xj = xj - 150.;
892  cov = 0.;
893  xg1 = 0.;
894  xg2 = 0.;
895  for (l = 0; l<m; l++)
896  {
897  emul = 1 - l%2;
898  if (emul)
899  {
900  len = 300.;
901  X = 286000.;
902  H = h/X;
903  }
904  else
905  {
906  len = 1000.;
907  X = 5600.;
908  H = h/X;
909  }
910  xg2 = xg1 + len;
911  if (xi <= xg1 ) break;
912  if (xj <= xg1 ) break;
913  if (xi > xg1 && xi <= xg2 && xj > xg1 && xj <=xg2)
914  {
915  dx = xi - xg1;
916  cov += 0.5*H*dx*dx*(xj - xg1 - 0.33333*dx);
917  }
918  else if (xi > xg1 && xi <= xg2 && xj > xg2)
919  {
920  dx = xi - xg1;
921  cov += 0.5*H*dx*dx*(len - 0.33333*dx + (xj - xg2));
922  }
923  else if (xj > xg1 && xj <= xg2 && xi > xg2)
924  {
925  dx = xj - xg1;
926  cov += 0.5*H*dx*dx*(len - 0.33333*dx + (xi - xg2));
927  }
928  else if (xi >= xg2 && xj >= xg2)
929  {
930  dxi = xi - xg2;
931  dxj = xj - xg2;
932  cov += H*len*(0.33333*len*len + 0.5*len*(dxi+dxj) + dxi*dxj);
933  }
934  xg1 = xg2;
935  }
936  if (i == j)
937  {
938  cov += sx2;
939  }
940  else if ( TMath::Abs(xi-xj) <= 305. )
941  {
942  cov += sxc;
943  }
944  CovMS[m*i+j] = cov;
945  }
946  }
947 }
double CovMS[dim2]
Definition: RecDispMC_Profiles_new.C:66
float momentum
Definition: RecDispMC_Profiles_new.C:39
float seg_s[4]
Definition: RecDispMC_Profiles_new.C:41
struct @9 H
Double_t X
Definition: tlg2pattern.C:77
float z0
Definition: RecDispMC.C:97
float dz
Definition: RecDispMC.C:98

◆ ClearHistsV()

void ClearHistsV ( )

848 {
849  for(int i=0; i<7; i++) {
850 // if (hp[i]) hp[i]->Clear();
851  if (hp[i]) hp[i]->Reset();
852  }
853  for(int i=0; i<4; i++) {
854 // if (hpp[i]) hpp[i]->Clear();
855  if (hpp[i]) hpp[i]->Reset();
856  }
857 }

◆ DrawHistsV()

void DrawHistsV ( )

705 {
706  char title[80];
707  if (!cv)
708  {
709  cv = new TCanvas("cv", "Track parameters", 500, 0, 600, 750);
710  cv->Divide(2,3);
711  }
712  else
713  {
714  cv->Clear();
715  cv->Divide(2,3);
716  }
717  for(int i=0; i<6; i++) {
718  cv->cd(i+1);
719  if (hp[i]) hp[i]->Draw();
720  }
721  cv->Update();
722  if (!linfit)
723  {
724 // double xr = 7.;
725 // double pr = 0.;
726 // printf("roadp(%4.1f) = %f\n", xr, roadp(&xr, &pr));
727  TF1 *f = new TF1("roadp", roadp, 0., (double)brick.plates, 0);
728 // f->SetParameters(&pr);
729  f->SetMinimum(0.);
730  if (!cv1)
731  {
732  cv1 = new TCanvas("cv1", "Error road", 0, 400, 500, 350);
733 // cv1->Divide(1,2);
734  }
735  else
736  {
737  cv1->Clear();
738 // cv1->Divide(1,2);
739  }
740  cv1->cd();
741  sprintf(title, "Track momentum %d GeV/c", (int)momentum);
742  hpp[0]->SetTitle(title);
743  hpp[0]->SetXTitle("Track segment number");
744  hpp[0]->SetYTitle("Coordinate accuracy, microns");
745  hpp[0]->SetLineColor(2);
746  hpp[0]->Draw();
747  hpp[1]->SetLineColor(3);
748  hpp[1]->Draw("HISTCSAME");
749  f->SetLineColor(4);
750  f->Draw("LSAME");
751 
752  if (!cv3)
753  {
754  cv3 = new TCanvas("cv3", "Chi2 vs Segment", 0, 400, 500, 350);
755 // cv3->Divide(1,2);
756  }
757  else
758  {
759  cv3->Clear();
760 // cv3->Divide(1,2);
761  }
762  cv3->cd();
763  sprintf(title, "Track momentum %d GeV/c", (int)momentum);
764  hpp[4]->SetTitle(title);
765  hpp[4]->SetXTitle("Track segment number");
766  hpp[4]->SetYTitle("Fitted Segment Chi2");
767  hpp[4]->SetLineColor(2);
768  hpp[4]->Draw();
769 
770  if (!cv6)
771  {
772  cv6 = new TCanvas("cv6", "Prob vs Segment", 0, 400, 500, 350);
773 // cv6->Divide(1,2);
774  }
775  else
776  {
777  cv6->Clear();
778 // cv6->Divide(1,2);
779  }
780 
781  cv6->cd();
782  sprintf(title, "Track momentum %d GeV/c", (int)momentum);
783  hpp[5]->SetTitle(title);
784  hpp[5]->SetXTitle("Track segment number");
785  hpp[5]->SetYTitle("Fitted Segment Prob");
786  hpp[5]->SetLineColor(2);
787  hpp[5]->Draw();
788 
789  if (!cv4)
790  {
791  cv4 = new TCanvas("cv4", "Pull quantities", 0, 400, 500, 350);
792  cv4->Divide(1,2);
793  }
794  else
795  {
796  cv4->Clear();
797  cv4->Divide(1,2);
798  }
799  cv4->cd(1);
800  sprintf(title, "Coordinate pull quantity, track momentum %d GeV/c", (int)momentum);
801  hpp[2]->SetTitle(title);
802  hpp[2]->SetXTitle("Track segment number");
803  hpp[2]->SetYTitle("Pull quantity mean and sigma");
804  hpp[2]->SetLineColor(2);
805  hpp[2]->SetMinimum(-1.5);
806  hpp[2]->SetMaximum(+1.5);
807  hpp[2]->Draw();
808  cv4->cd(2);
809  sprintf(title, "Slope pull quantity, track momentum %d GeV/c", (int)momentum);
810  hpp[3]->SetTitle(title);
811  hpp[3]->SetXTitle("Track segment number");
812  hpp[3]->SetYTitle("Pull quantity mean and sigma");
813  hpp[3]->SetLineColor(2);
814  hpp[3]->SetMinimum(-1.5);
815  hpp[3]->SetMaximum(+1.5);
816  hpp[3]->Draw();
817  }
818  if (!cv2)
819  {
820  cv2 = new TCanvas("cv2", "Probability", 0, 400, 500, 350);
821  cv2->cd();
822  if (hp[6]) hp[6]->Draw();
823  }
824  else
825  {
826  cv2->Clear();
827  cv2->cd();
828  if (hp[6]) hp[6]->Draw();
829  }
830 // cv2->Update();
831 
832  if (!cv5)
833  {
834  cv5 = new TCanvas("cv5", "Chi2", 0, 400, 500, 350);
835  cv5->cd();
836  if (hp[7]) hp[7]->Draw();
837  }
838  else
839  {
840  cv5->Clear();
841  cv5->cd();
842  if (hp[7]) hp[7]->Draw();
843  }
844 // cv2->Update();
845 }
FILE * f
Definition: RecDispMC.C:150
bool linfit
Definition: RecDispMC_Profiles_new.C:63
TCanvas * cv4
Definition: RecDispMC_Profiles_new.C:70
TCanvas * cv3
Definition: RecDispMC_Profiles_new.C:70
Double_t roadp(Double_t *x, Double_t *par)
Definition: RecDispMC_Profiles_new.C:682
TCanvas * cv1
Definition: RecDispMC_Profiles_new.C:70
TCanvas * cv6
Definition: RecDispMC_Profiles_new.C:70
TCanvas * cv2
Definition: RecDispMC_Profiles_new.C:70
TCanvas * cv
Definition: RecDispMC_Profiles_new.C:70
TCanvas * cv5
Definition: RecDispMC_Profiles_new.C:70
new TCanvas()

◆ g1()

void g1 ( int  nv = 1)

413 {
414  //generation of 1 event
415 
416  gen_v(brick, nv);
417 
418  for(int i=0; i<nv; i++) {
419  vedb = (EdbVertex *)(ali->eVTX->At(i));
420  rec_v(*vedb);
421  }
422 
423  ali->eVTX->Clear();
424  ali->eTracks->Clear();
425  ali->Clear();
426 
427  delete vedb;
428  vedb = 0;
429 }
EdbVertex * vedb
Definition: RecDispMC_Profiles_new.C:59
EdbPVRec * ali
Definition: RecDispMC_Profiles_new.C:12
void gen_v(BRICK &b, int nv)
Definition: RecDispMC_Profiles_new.C:432
void rec_v(EdbVertex &vedb)
Definition: RecDispMC_Profiles_new.C:513
TObjArray * eVTX
Definition: EdbPVRec.h:162
TObjArray * eTracks
Definition: EdbPVRec.h:161
Definition: EdbVertex.h:68

◆ gen_segs_v()

void gen_segs_v ( BRICK b,
EdbVertex vedb 
)
484 {
485  // generation of basetracks for secondary tracks
486 
487  unsigned int seed = 0;
488  float zlim[2];
489  zlim[0] = -1000.;
490  zlim[1] = 130000.;
491  EdbTrackP *tr;
492 
493  int nt = vedb.N();
494  for(int ip=0; ip<nt; ip++) {
495  tr = vedb.GetTrack(ip);
496  tr->SetFlag(1000+ip);
497  ti[ip] = new EdbTrackP();
498  ti[ip]->Set(tr->ID(),tr->X(),tr->Y(),tr->TX(),tr->TY(),tr->W(),tr->Flag());
499  ti[ip]->SetZ(tr->Z());
500  ti[ip]->SetP(tr->P());
501  ti[ip]->SetM(tr->M());
502  seed = gRandom->GetSeed();
503  gener->TrackMC( zlim, b.lim, *tr, eloss_flag, 0.);
504  gRandom->SetSeed(seed);
505  scanCond->SetSigma0( 0., 0., 0., 0. ); // sigma0 "x,y,tx,ty" at 0 angle
506  gener->TrackMC( zlim, b.lim, *ti[ip], eloss_flag, 0.);
507  scanCond->SetSigma0( seg_s[0], seg_s[1], seg_s[2], seg_s[3] ); // sigma0 "x,y,tx,ty" at 0 angle
508  }
509 }
int eloss_flag
Definition: RecDispMC_Profiles_new.C:36
EdbPVGen * gener
Definition: RecDispMC_Profiles_new.C:13
EdbTrackP * ti[10]
Definition: RecDispMC_Profiles_new.C:61
EdbScanCond * scanCond
Definition: RecDispMC_Profiles_new.C:14
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
void TrackMC(float zlim[2], float lim[4], EdbTrackP &tr, int eloss_flag=0, float PGap=0.)
Definition: EdbPVGen.cxx:389
void SetSigma0(float x, float y, float tx, float ty)
Definition: EdbScanCond.h:62
void SetZ(float z)
Definition: EdbSegP.h:122
void SetP(float p)
Definition: EdbSegP.h:130
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86
Definition: EdbPattern.h:118
void SetM(float m)
Definition: EdbPattern.h:159
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121
float lim[4]
Definition: RecDispMC.C:99

◆ gen_tracks_v()

void gen_tracks_v ( EdbVertex vedb)
460 {
461  // generation of track parameters according to phase space
462 
463  EdbTrackP *tr[10];
464  float x = 0.;
465  float y = 0.;
466  float z = 0.;
467  float tx = 0.;
468  float ty = 0.;
469 
470  for(int ip=0; ip<1; ip++) {
471  tr[ip] = new EdbTrackP();
472  tr[ip]->Set(ip, x, y, tx, ty, 1, 0);
473  tr[ip]->SetZ(z);
474  tr[ip]->SetP(momentum);
475  tr[ip]->SetM(0.139);
476  gEVR->AddTrack(vedb, tr[ip], 0);
477  ali->AddTrack(tr[ip]);
478  }
479 
480 }
EdbVertexRec * gEVR
Definition: RecDispMC_Profiles_new.C:15
void AddTrack(EdbTrackP *track)
Definition: EdbPVRec.h:246
EdbVTA * AddTrack(EdbVertex &edbv, EdbTrackP *track, int zpos)
Definition: EdbVertex.cxx:900

◆ gen_v()

void gen_v ( BRICK b,
int  nv 
)

433 {
434  // event generation
435 
436  for(int i=0; i<nv; i++) {
437  vedb = new EdbVertex();
438  vedb->SetXYZ(vxyz[0],vxyz[1], vxyz[2]);
439  ali->eVTX->Add(vedb);
440  gen_tracks_v( *vedb);
441  gen_segs_v(b, *vedb);
442  }
443 
444 }
void gen_segs_v(BRICK &b, EdbVertex &vedb)
Definition: RecDispMC_Profiles_new.C:483
void gen_tracks_v(EdbVertex &vedb)
Definition: RecDispMC_Profiles_new.C:459
float vxyz[3]
Definition: RecDispMC_Profiles_new.C:54
void SetXYZ(float x, float y, float z)
Definition: EdbVertex.h:157

◆ graphs()

void graphs ( )
1003 {
1004  char legt[64];
1005  int imom[5] = {1, 2, 4, 6, 1000};
1006  TGraph *gsigx[5];
1007  TGraph *grmsx[5];
1008  TGraph *gerrx[5];
1009  TGraph *gerrxlin[5];
1010  TGraph *gsigtx[5];
1011  TGraph *grmstx[5];
1012  TGraph *gerrtx[5];
1013  TLegend *lx = new TLegend(0.15,0.15,0.4,0.4);
1014  TLegend *ltx = new TLegend(0.6,0.16,0.85,0.41);
1015  for (int i=0; i<5; i++)
1016  {
1017  gsigx[i] = new TGraph(5, &Xn[0], &Ysigx[i][0]);
1018  gsigx[i]->SetMinimum(0.);
1019  gsigx[i]->SetMaximum(0.6);
1020  gsigx[i]->SetTitle("Track coordinate sigma");
1021  gsigx[i]->SetMarkerStyle(20);
1022  gsigx[i]->SetMarkerColor(i+2);
1023  sprintf(legt, "%4d GeV/c", imom[i]);
1024  lx->AddEntry(gsigx[i], legt, "p");
1025  ltx->AddEntry(gsigx[i], legt, "p");
1026  gsigx[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1027  gsigx[i]->GetYaxis()->SetTitle("Sigma, microns");
1028  gsigx[i]->SetLineColor(i+2);
1029 
1030  grmsx[i] = new TGraph(5, &Xn[0], &Yrmsx[i][0]);
1031  grmsx[i]->SetMinimum(0.);
1032  grmsx[i]->SetMaximum(0.6);
1033  grmsx[i]->SetTitle("Track coordinate RMS");
1034  grmsx[i]->SetMarkerStyle(20);
1035  grmsx[i]->SetMarkerColor(i+2);
1036  grmsx[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1037  grmsx[i]->GetYaxis()->SetTitle("RMS, microns");
1038  grmsx[i]->SetLineColor(i+2);
1039 
1040  gerrx[i] = new TGraph(5, &Xn[0], &Yerrx[i][0]);
1041  gerrx[i]->SetMinimum(0.);
1042  gerrx[i]->SetMaximum(0.6);
1043  gerrx[i]->SetTitle("Track coordinate error");
1044  gerrx[i]->SetMarkerStyle(20);
1045  gerrx[i]->SetMarkerColor(i+2);
1046  gerrx[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1047  gerrx[i]->GetYaxis()->SetTitle("Error, microns");
1048  gerrx[i]->SetLineColor(i+2);
1049 
1050  gerrxlin[i] = new TGraph(5, &Xnlin[0], &Yerrxlin[i][0]);
1051  gerrxlin[i]->SetMinimum(0.);
1052  gerrxlin[i]->SetMaximum(0.6);
1053  gerrxlin[i]->SetTitle("Track coordinate sigma");
1054  gerrxlin[i]->SetMarkerStyle(22);
1055  gerrxlin[i]->SetMarkerColor(1);
1056  gerrxlin[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1057  gerrxlin[i]->GetYaxis()->SetTitle("Sigma, microns");
1058 
1059  gsigtx[i] = new TGraph(5, &Xn[0], &Ysigtx[i][0]);
1060  gsigtx[i]->SetMinimum(0.);
1061  gsigtx[i]->SetMaximum(1.6);
1062  gsigtx[i]->SetTitle("Track slope sigma");
1063  gsigtx[i]->SetMarkerStyle(20);
1064  gsigtx[i]->SetMarkerColor(i+2);
1065  gsigtx[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1066  gsigtx[i]->GetYaxis()->SetTitle("Sigma, mrad");
1067  gsigtx[i]->SetLineColor(i+2);
1068 
1069  grmstx[i] = new TGraph(5, &Xn[0], &Yrmstx[i][0]);
1070  grmstx[i]->SetMinimum(0.);
1071  grmstx[i]->SetMaximum(1.6);
1072  grmstx[i]->SetTitle("Track slope RMS");
1073  grmstx[i]->SetMarkerStyle(20);
1074  grmstx[i]->SetMarkerColor(i+2);
1075  grmstx[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1076  grmstx[i]->GetYaxis()->SetTitle("RMS, mrad");
1077  grmstx[i]->SetLineColor(i+2);
1078 
1079  gerrtx[i] = new TGraph(5, &Xn[0], &Yerrtx[i][0]);
1080  gerrtx[i]->SetMinimum(0.);
1081  gerrtx[i]->SetMaximum(1.6);
1082  gerrtx[i]->SetTitle("Track slope error");
1083  gerrtx[i]->SetMarkerStyle(20);
1084  gerrtx[i]->SetMarkerColor(i+2);
1085  gerrtx[i]->GetXaxis()->SetTitle("Track lenght (in segments)");
1086  gerrtx[i]->GetYaxis()->SetTitle("Error, mrad");
1087  gerrtx[i]->SetLineColor(i+2);
1088  }
1089  sprintf(legt, "Global fit");
1090  lx->AddEntry(gerrxlin[0], legt, "p");
1091  if (!cvg1 && 0)
1092  {
1093  cvg1 = new TCanvas("cvg1", "Track coordinate sigma, microns", 0, 400, 500, 350);
1094  }
1095  else
1096  {
1097  if (cvg1) cvg1->Clear();
1098  }
1099  if (cvg1) cvg1->cd(1);
1100  for (int i=0; i<5 && cvg1; i++)
1101  {
1102  if (i == 0)
1103  {
1104  gsigx[i]->Draw("CPA");
1105  lx->Draw();
1106  }
1107  else
1108  gsigx[i]->Draw("CPSAME");
1109  }
1110  if (!cvg2 && 0)
1111  {
1112  cvg2 = new TCanvas("cvg2", "Track coordinate RMS, microns", 0, 400, 500, 350);
1113  }
1114  else
1115  {
1116  if (cvg2) cvg2->Clear();
1117  }
1118  if (cvg2) cvg2->cd(1);
1119  for (int i=0; i<5 && cvg2; i++)
1120  {
1121  if (i == 0)
1122  {
1123  grmsx[i]->Draw("CPA");
1124  lx->Draw();
1125  }
1126  else
1127  grmsx[i]->Draw("CPSAME");
1128  }
1129  if (!cvg3 && 1)
1130  {
1131  cvg3 = new TCanvas("cvg3", "Track oordinate error, microns", 0, 400, 500, 600);
1132  }
1133  else
1134  {
1135  if (cvg3) cvg3->Clear();
1136  }
1137  if (cvg3) cvg3->cd(1);
1138  for (int i=0; i<5 && cvg3; i++)
1139  {
1140  if (i == 0)
1141  {
1142  gerrx[i]->Draw("CPA");
1143  gerrxlin[i]->Draw("PSAME");
1144  lx->Draw();
1145  }
1146  else
1147  {
1148  gerrx[i]->Draw("CPSAME");
1149  gerrxlin[i]->Draw("PSAME");
1150  }
1151  }
1152 
1153  if (!cvg4 && 0)
1154  {
1155  cvg4 = new TCanvas("cvg4", "Track slope sigma, mrad", 0, 400, 500, 350);
1156  }
1157  else
1158  {
1159  if (cvg4) cvg4->Clear();
1160  }
1161  if (cvg4) cvg4->cd(1);
1162  for (int i=0; i<5 && cvg4; i++)
1163  {
1164  if (i == 0)
1165  {
1166  gsigtx[i]->Draw("CPA");
1167  lxt->Draw();
1168  }
1169  else
1170  gsigtx[i]->Draw("CPSAME");
1171  }
1172 
1173  if (!cvg5 && 0)
1174  {
1175  cvg5 = new TCanvas("cvg5", "Track slope RMS, mrad", 0, 400, 500, 350);
1176  }
1177  else
1178  {
1179  if (cvg5) cvg5->Clear();
1180  }
1181  if (cvg5) cvg5->cd(1);
1182  for (int i=0; i<5 && cvg5; i++)
1183  {
1184  if (i == 0)
1185  {
1186  grmstx[i]->Draw("CPA");
1187  ltx->Draw();
1188  }
1189  else
1190  grmstx[i]->Draw("CPSAME");
1191  }
1192 
1193  if (!cvg6 && 1)
1194  {
1195  cvg6 = new TCanvas("cvg6", "Track slope error, mrad", 0, 400, 500, 350);
1196  }
1197  else
1198  {
1199  if (cvg6) cvg6->Clear();
1200  }
1201  if (cvg6) cvg6->cd(1);
1202  for (int i=0; i<5 && cvg6; i++)
1203  {
1204  if (i == 0)
1205  {
1206  gerrtx[i]->Draw("CPA");
1207  ltx->Draw();
1208  }
1209  else
1210  gerrtx[i]->Draw("CPSAME");
1211  }
1212 }
float Yerrxlin[5][5]
Definition: RecDispMC_Profiles_new.C:970
float Ysigx[5][5]
Definition: RecDispMC_Profiles_new.C:949
TCanvas * cvg2
Definition: RecDispMC_Profiles_new.C:71
float Yrmsx[5][5]
Definition: RecDispMC_Profiles_new.C:956
float Ysigtx[5][5]
Definition: RecDispMC_Profiles_new.C:977
float Yerrx[5][5]
Definition: RecDispMC_Profiles_new.C:963
float Xn[5]
Definition: RecDispMC_Profiles_new.C:1000
TCanvas * cvg5
Definition: RecDispMC_Profiles_new.C:71
TCanvas * cvg4
Definition: RecDispMC_Profiles_new.C:71
TCanvas * cvg3
Definition: RecDispMC_Profiles_new.C:71
float Xnlin[5]
Definition: RecDispMC_Profiles_new.C:1001
float Yrmstx[5][5]
Definition: RecDispMC_Profiles_new.C:984
float Yerrtx[5][5]
Definition: RecDispMC_Profiles_new.C:991
TCanvas * cvg6
Definition: RecDispMC_Profiles_new.C:71
TCanvas * cvg1
Definition: RecDispMC_Profiles_new.C:71

◆ gv()

void gv ( int  n = 1)
338 {
339  // main steering routine for K->3Pi vertex generation&reconstruction test
340 
341  timespec_t t0, t;
342  double dt;
343 
344  BookHistsV();
345  if (linfit) CalcCovMS();
346 
347  ali = new EdbPVRec();
349 
351 
352  scanCond = new EdbScanCond();
353 
354  scanCond->SetSigma0( seg_s[0], seg_s[1], seg_s[2], seg_s[3] ); // sigma0 "x,y,tx,ty" at 0 angle
355  scanCond->SetDegrad( 0.1 ); // sigma(tx) = sigma0*(1+degrad*tx)
356  scanCond->SetBins(8,8,4,4); // bins in [sigma] for checks
357  scanCond->SetPulsRamp0( 1.,1. ); // in range (Pmin:Pmax) Signal/All is nearly linear
358  scanCond->SetPulsRamp04( 1.,1. ); //
359  scanCond->SetChi2Max(2.7);
360  scanCond->SetChi2PMax(2.7);
362  scanCond->SetName("Prototype_OPERA_basetrack");
363 
365  ali->eVTX = new TObjArray();
366 
367  gener = new EdbPVGen();
368  gener->SetVolume(vol);
369  gener->eVTX = new TObjArray(1000);
371 
372  gEVR = new EdbVertexRec();
373  if (!(ali->eTracks)) ali->eTracks = new TObjArray(100);
375  if (!(ali->eVTX)) ali->eVTX = new TObjArray(100);
376  gEVR->eVTX = ali->eVTX;
377  gEVR->ePVR = ali;
378 
379  gEVR->eZbin = 100.; // default is 100. microns
380  gEVR->eAbin = 0.01; // default is 0.01 rad
381  gEVR->eDZmax = 3000.; // default is 3000. microns
382  gEVR->eProbMin = 0.01; // default 0.01, i.e 1%
383  gEVR->eImpMax = 25.; // default is 25. microns
384  gEVR->eUseSegPar = false; // default is FALSE - use fitted track parameters
385 
386 
387  TTimeStamp ts=TTimeStamp();
388  t0=ts.GetTimeSpec();
389  for(int i=1; i<=n; i++) {
390  g1(1);
391  if (i)
392  {
393  if (!(i%PrintN))
394  {
395  ts=TTimeStamp();
396  t=ts.GetTimeSpec();
397  dt=(t.tv_sec-t0.tv_sec)*1000000000.+(t.tv_nsec-t0.tv_nsec);
398  printf("%d events generated in %.4f sec (%.1f msec per event)\n",
399  i,dt/1000000000.,dt/(double)i/1000000.);
400  }
401  }
402  }
403  DrawHistsV();
404  delete ali;
405  ali = 0;
406  delete gener;
407  gener = 0;
408 }
const unsigned long int PrintN
Definition: RecDispMC_Profiles_new.C:51
void DrawHistsV()
Definition: RecDispMC_Profiles_new.C:704
void CalcCovMS()
Definition: RecDispMC_Profiles_new.C:859
void makeVolumeOPERAn(BRICK &b, EdbPatternsVolume *v)
Definition: RecDispMC_Profiles_new.C:447
void g1(int nv=1)
Definition: RecDispMC_Profiles_new.C:412
void BookHistsV()
Definition: RecDispMC_Profiles_new.C:657
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
TTree * t
Definition: check_shower.C:4
Definition: EdbPVGen.h:18
void SetVolume(EdbPatternsVolume *pv)
Definition: EdbPVGen.h:34
TObjArray * eVTX
Definition: EdbPVGen.h:28
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVGen.h:35
Definition: EdbPVRec.h:148
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbPattern.h:348
Definition: EdbScanCond.h:10
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 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
Float_t eAbin
Definition: EdbVertex.h:176
Bool_t eUseSegPar
Definition: EdbVertex.h:182
Float_t eImpMax
Definition: EdbVertex.h:179
Float_t eZbin
Definition: EdbVertex.h:175
Float_t eDZmax
Definition: EdbVertex.h:177
Float_t eProbMin
Definition: EdbVertex.h:178
Definition: EdbVertex.h:194
TObjArray * eVTX
Definition: EdbVertex.h:205
EdbPVRec * ePVR
Definition: EdbVertex.h:206
TObjArray * eEdbTracks
Definition: EdbVertex.h:204
float X0
Definition: RecDispMC.C:100

◆ makeVolumeOPERAn()

void makeVolumeOPERAn ( BRICK b,
EdbPatternsVolume v 
)

448 {
449  // Volume geometry setting
450 
451  EdbPattern *pat =0;
452  for(int i=0; i<b.plates; i++) {
453  pat = new EdbPattern(0,0,b.z0+b.dz*i);
454  v->AddPattern(pat);
455  }
456 }
Definition: EdbPattern.h:280
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1867

◆ rec_v()

void rec_v ( EdbVertex vedb)

514 {
515 
516  // tracks and vertex reconstruction (KF fitting only without track finding)
517 
518  int nsegMin = 2;
519  int ns = 0, ns2 = 0, is = 0;
520  float p, de;
521  EdbTrackP *tr;
522  float par[2], dpar[2][2], chi2l = 0.;
523  float *ppar = &par[0], *pdpar = &dpar[0][0];
524  float dx = 0., dtx = 0., sx = 0., stx = 0.;
525 
526  int nt = vedb.N();
527  //printf("\n nt = %d\n\n",nt);
528  for(int ip=0; ip<nt; ip++) {
529  tr = vedb.GetTrack(ip);
530  // tr->Print();
531  if (tr->N() < nsegMin) break;
532  if (tr->P() < 0.1) break;
533 
534  p = tr->P();
535  tr->SetErrorP(p*p*dpp*dpp);
536  DE_MC = tr->DE();
537 
538  if (dpp > 0.)
539  {
540  p = p*(1.+dpp*gRandom->Gaus());
541  if (p < 0.01) p = 0.01;
542  }
543  else
544  {
545  p = p*(1.+ShiftP);
546  if (p < 0.01) p = 0.01;
547  }
548  tr->SetP(p);
549  if (linfit)
550  {
551  if ((ns = tr->N()) != brick.plates) continue;
552  ns2 = 2*ns;
553  for (int i = 0; i<ns2; i++)
554  {
555  is = i/2;
556  zl[i] = tr->GetSegment(is)->Z();
557  if (i%2) zl[i] = zl[i] + 150.;
558  else zl[i] = zl[i] - 150.;
559  xl[i] = tr->GetSegment(is)->X();
560  if (i%2) xl[i] = xl[i] + 150.*tr->GetSegment(is)->TX();
561  else xl[i] = xl[i] - 150.*tr->GetSegment(is)->TX();
562  }
563  if (EdbMath::LinFitCOV(ns2, pzl, pxl, pCovMS, ppar, pdpar, &chi2l))
564  {
565  hp[0]->Fill(par[0]-ti[ip]->X());
566  hp[1]->Fill(par[1]-ti[ip]->TX());
567  sx = (float)TMath::Sqrt(dpar[0][0]);
568  stx = (float)TMath::Sqrt(dpar[1][1]);
569  hp[4]->Fill(sx);
570  hp[5]->Fill(stx);
571  hp[6]->Fill(TMath::Prob((double)chi2l, ns2-2));
572  }
573  hp[2]->Fill((tr->GetSegmentFirst())->X()-ti[ip]->X());
574  hp[3]->Fill((tr->GetSegmentFirst())->TX()-ti[ip]->TX());
575  continue;
576  }
577 
578  EdbSegP *s, *sf, *sg;
579  float sx,sy;
580 
581  if(tr->N() == brick.plates)
582  {
583  for (int is = 0; is < brick.plates; is++)
584  {
585  s = tr->GetSegment(is);
586  if (is == isegtest)
587  {
588  if (ShiftX < 0.)
589  {
590  sg = ti[ip]->GetSegment(is);
591  s->SetX(sg->X() + (1.-2.*gRandom->Rndm())*ShiftX);
592  }
593  else if (ShiftX > 0.)
594  {
595  s->SetX(s->X()+ShiftX);
596  }
597  }
598  if (NewSxy != 0.)
599  {
600  sx = NewSxy*NewSxy;
601  sy = NewSxy*NewSxy;
602  s->SetErrors(sx,sy,s->SZ(),s->STX(),s->STY());
603  }
604  }
605  }
606 
607  tr->FitTrackKFS(true, brick.X0, design);
608 
609  hp[0]->Fill((tr->GetSegmentFFirst())->X()-ti[ip]->X());
610  hp[1]->Fill((tr->GetSegmentFFirst())->TX()-ti[ip]->TX());
611  hp[2]->Fill((tr->GetSegmentFirst())->X()-ti[ip]->X());
612  hp[3]->Fill((tr->GetSegmentFirst())->TX()-ti[ip]->TX());
613  hp[6]->Fill(tr->Prob());
614  hp[7]->Fill(tr->Chi2());
615 
616  DE = tr->DE();
617 
618  TMatrixD cov(5,5);
619 
620  if(tr->NF() == brick.plates)
621  {
622  for (int is = 0; is < brick.plates; is++)
623  {
624  s = tr->GetSegment(is);
625  sf = tr->GetSegmentF(is);
626  dx = sf->X() - s->X();
627  if (ti[ip])
628  {
629  dx = sf->X() - (ti[ip]->GetSegment(is))->X();
630  dtx = sf->TX() - (ti[ip]->GetSegment(is))->TX();
631  }
632  cov = (sf->COV());
633  sx = (float)TMath::Sqrt(cov(0,0));
634  stx = (float)TMath::Sqrt(cov(2,2));
635  hpp[0]->Fill((float)is,dx);
636  hpp[1]->Fill((float)is,sx);
637 
638  dx = sf->X() - s->X();
639  dtx = sf->TX() - s->TX();
640  if (seg_s[0] > sx) hpp[2]->Fill((float)is,dx/TMath::Sqrt(seg_s[0]*seg_s[0] - sx*sx));
641  if (seg_s[2] > stx) hpp[3]->Fill((float)is,dtx/TMath::Sqrt(seg_s[2]*seg_s[2] - stx*stx));
642 
643  hpp[4]->Fill((float)is,sf->Chi2());
644  hpp[5]->Fill((float)is,sf->Prob());
645 
646  if (is == 0)
647  {
648  hp[4]->Fill(sx);
649  hp[5]->Fill(stx);
650  }
651  }
652  }
653  }
654 }
T Prob(const T &rhs, int n)
Definition: Prob.hh:37
int nsegMin
Definition: RecDispEX.C:19
float zl[dim]
Definition: RecDispMC_Profiles_new.C:68
float ShiftP
Definition: RecDispMC_Profiles_new.C:46
double DE_MC
Definition: RecDispMC_Profiles_new.C:511
int isegtest
Definition: RecDispMC_Profiles_new.C:44
float ShiftX
Definition: RecDispMC_Profiles_new.C:45
double * pCovMS
Definition: RecDispMC_Profiles_new.C:67
int design
Definition: RecDispMC_Profiles_new.C:37
float * pzl
Definition: RecDispMC_Profiles_new.C:69
float dpp
Definition: RecDispMC_Profiles_new.C:49
float xl[dim]
Definition: RecDispMC_Profiles_new.C:68
float * pxl
Definition: RecDispMC_Profiles_new.C:69
double DE
Definition: RecDispMC_Profiles_new.C:511
float NewSxy
Definition: RecDispMC_Profiles_new.C:47
static bool LinFitCOV(int n, float *x, float *y, double *c, float *p, float *d, float *chi2)
Definition: EdbMath.cxx:193
Definition: EdbSegP.h:18
void SetErrors()
Definition: EdbSegP.h:89
Float_t Prob() const
Definition: EdbSegP.h:153
Float_t STX() const
Definition: EdbSegP.h:161
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t TX() const
Definition: EdbSegP.h:172
void SetX(Float_t x)
Definition: EdbSegP.h:174
Float_t SZ() const
Definition: EdbSegP.h:164
Float_t X() const
Definition: EdbSegP.h:170
Float_t Chi2() const
Definition: EdbSegP.h:154
Float_t STY() const
Definition: EdbSegP.h:162
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:200
Double_t TX
Definition: tlg2pattern.C:79
p
Definition: testBGReduction_AllMethods.C:8
EdbSegP * s
Definition: tlg2pattern.C:32

◆ roadp()

Double_t roadp ( Double_t *  x,
Double_t *  par 
)

683 {
684 // double s = seg_s[0];
685  double s = TMath::Sqrt(seg_s[0]*seg_s[0]+seg_s[2]*seg_s[2]*150.*150.);
686  double n = brick.plates*2;
687  double x0 = (float)brick.plates/2.;
688  double sx = 0.;
689  double xs = 0.;
690  double xx = *x - x0;
691  for (int i=0; i<n; i++)
692  {
693  xs = i/2+0.5;
694  if (i%2) xs = xs + 0.15/1.3;
695  else xs = xs - 0.15/1.3;
696  sx += (xs-x0)*(xs-x0);
697  }
698  Double_t r2 = 2.*(1./n+xx*xx/sx);
699  Double_t r = 0.;
700  if (r2 > 0.) r = s*TMath::Sqrt(r2);
701  return r;
702 }
for(int i=0;i< nentries;i++)
Definition: check_shower.C:42
void r(int rid=2)
Definition: test.C:201

◆ run()

void run ( int  Nstat = 20000)
75 {
76  // p = 1., 2., 4., 6., 1000.
77  // n = 2 3 5 10 20
78  FILE *f = 0;
79  int ip1=0, ip2=1, in1=2, in2=3;
80  float sigxt[5][5];
81  float sigtxt[5][5];
82  float sigxs[5][5];
83  float sigtxs[5][5];
84  float rmsxt[5][5];
85  float rmstxt[5][5];
86  float rmsxs[5][5];
87  float rmstxs[5][5];
88  float meaxt[5][5];
89  float meatxt[5][5];
90  float meaxs[5][5];
91  float meatxs[5][5];
92  float errxt[5][5];
93  float errtxt[5][5];
94  int hst[5][5];
95  float mom[5], ns[5];
96  for (int i=ip1; i<ip2; i++)
97  {
98  mom[i] = i*2;
99  if (i == 0) mom[i] = .1;
100  if (i == 4) mom[i] = 1000.;
101  momentum = mom[i];
102  for (int j=in1; j<in2; j++)
103  {
104  if (j == 0) brick.plates = 2;
105  if (j == 1) brick.plates = 3;
106  if (j == 2) brick.plates = 5;
107  if (j == 3) brick.plates = 10;
108  if (j == 4) brick.plates = 20;
109  printf("--------------------------\n P = %6.1f N = %2d\n",
110  mom[i], brick.plates);
111  ClearHistsV();
112  gv(Nstat);
113  cv->cd(1);
114  hp[0]->Fit("gaus","q");
115  rmsxt[i][j] = hp[0]->GetRMS(1);
116  meaxt[i][j] = hp[0]->GetFunction("gaus")->GetParameter(1);
117  errxt[i][j] = hp[4]->GetMean(1);
118  sigxt[i][j] = hp[0]->GetFunction("gaus")->GetParameter(2);
119  cv->cd(2);
120  hp[1]->Fit("gaus","q");
121  rmstxt[i][j] = hp[1]->GetRMS(1);
122  meatxt[i][j] = hp[1]->GetFunction("gaus")->GetParameter(1);
123  errtxt[i][j] = hp[5]->GetMean(1);
124  sigtxt[i][j] = hp[1]->GetFunction("gaus")->GetParameter(2);
125  cv->cd(3);
126  hp[2]->Fit("gaus","q");
127  rmsxs[i][j] = hp[2]->GetRMS(1);
128  meaxs[i][j] = hp[2]->GetFunction("gaus")->GetParameter(1);
129  sigxs[i][j] = hp[2]->GetFunction("gaus")->GetParameter(2);
130  cv->cd(4);
131  hp[3]->Fit("gaus","q");
132  rmstxs[i][j] = hp[3]->GetRMS(1);
133  meatxs[i][j] = hp[3]->GetFunction("gaus")->GetParameter(1);
134  sigtxs[i][j] = hp[3]->GetFunction("gaus")->GetParameter(2);
135  hst[i][j] = hp[0]->GetEntries();
136  ns[j] = brick.plates;
137  }
138  }
139  f = fopen("result.out","w");
140  for (int i=ip1; i<ip2; i++)
141  {
142  for (int j=in1; j<in2; j++)
143  {
144  printf("**** P = %3.1f N = %2d Nev = %4d\n",
145  mom[i], ns[j], hst[i][j]);
146  fprintf(f, "**** P = %3.1f N = %2d Nev = %4d\n",
147  mom[i], ns[j], hst[i][j]);
148  printf("SX_tr = %6.3f STX_tr = %10.7f SX_s = %6.3f STX_s = %8.5f\n",
149  sigxt[i][j], sigtxt[i][j], sigxs[i][j], sigtxs[i][j]);
150  fprintf(f, "SX_tr = %6.3f STX_tr = %10.7f SX_s = %6.3f STX_s = %8.5f\n",
151  sigxt[i][j], sigtxt[i][j], sigxs[i][j], sigtxs[i][j]);
152  printf("RX_tr = %6.3f RTX_tr = %10.7f RX_s = %6.3f RTX_s = %8.5f\n",
153  rmsxt[i][j], rmstxt[i][j], rmsxs[i][j], rmstxs[i][j]);
154  fprintf(f, "RX_tr = %6.3f RTX_tr = %10.7f RX_s = %6.3f RTX_s = %8.5f\n",
155  rmsxt[i][j], rmstxt[i][j], rmsxs[i][j], rmstxs[i][j]);
156  printf("MX_tr = %6.3f MTX_tr = %10.7f MX_s = %6.3f MTX_s = %8.5f\n",
157  meaxt[i][j], meatxt[i][j], meaxs[i][j], meatxs[i][j]);
158  fprintf(f, "MX_tr = %6.3f MTX_tr = %10.7f MX_s = %6.3f MTX_s = %8.5f\n",
159  meaxt[i][j], meatxt[i][j], meaxs[i][j], meatxs[i][j]);
160  printf("EX_tr = %6.3f ETX_tr = %10.7f\n",
161  errxt[i][j], errtxt[i][j]);
162  fprintf(f, "EX_tr = %6.3f ETX_tr = %10.7f\n",
163  errxt[i][j], errtxt[i][j]);
164  }
165  }
166  fclose(f);
167  if (linfit)
168  {
169  f = fopen("linfit.out","w");
170  printf(" Track fitting accuracy vs number of segments and momentum\n");
171  printf(" (Global matrix method\n\n");
172  fprintf(f, " Track fitting accuracy vs number of segments and momentum\n");
173  fprintf(f, " (Global matrix method)\n\n");
174  }
175  else
176  {
177  f = fopen("kalman.out","w");
178  printf(" Track fitting accuracy vs number of segments and momentum\n");
179  printf(" (Kalman filtering method)\n\n");
180  fprintf(f, " Track fitting accuracy vs number of segments and momentum\n");
181  fprintf(f, " (Kalman filtering method)\n\n");
182  }
183  printf("\n*************** Sigma X (microns) **********\n");
184  printf(" Nplates\n");
185  printf(" P (GeV/c) ");
186  fprintf(f, "\n*************** Sigma X (microns) **********\n");
187  fprintf(f, " Nplates\n");
188  fprintf(f, " P (GeV/c) ");
189  for (int j=in1; j<in2; j++)
190  {
191  printf("%2d ", ns[j]);
192  fprintf(f, "%2d ", ns[j]);
193  }
194  printf("\n");
195  fprintf(f, "\n");
196  for (int i=ip1; i<ip2; i++)
197  {
198  printf(" %6.1f ", mom[i]);
199  fprintf(f, " %6.1f ", mom[i]);
200  for (int j=in1; j<in2; j++)
201  {
202  printf("%7.3f ",sigxt[i][j]);
203  fprintf(f, "%7.3f ",sigxt[i][j]);
204  }
205  printf("\n");
206  fprintf(f, "\n");
207  }
208  printf("\n*************** RMS X (microns) **********\n");
209  printf(" Nplates\n");
210  printf(" P (GeV/c) ");
211  fprintf(f, "\n*************** RMS X (microns) **********\n");
212  fprintf(f, " Nplates\n");
213  fprintf(f, " P (GeV/c) ");
214  for (int j=in1; j<in2; j++)
215  {
216  printf("%2d ", ns[j]);
217  fprintf(f, "%2d ", ns[j]);
218  }
219  printf("\n");
220  fprintf(f, "\n");
221  for (int i=ip1; i<ip2; i++)
222  {
223  printf(" %6.1f ", mom[i]);
224  fprintf(f, " %6.1f ", mom[i]);
225  for (int j=in1; j<in2; j++)
226  {
227  printf("%7.3f ",rmsxt[i][j]);
228  fprintf(f, "%7.3f ",rmsxt[i][j]);
229  }
230  printf("\n");
231  fprintf(f, "\n");
232  }
233  printf("\n*************** ERR X (microns) **********\n");
234  printf(" Nplates\n");
235  printf(" P (GeV/c) ");
236  fprintf(f, "\n*************** ERR X (microns) **********\n");
237  fprintf(f, " Nplates\n");
238  fprintf(f, " P (GeV/c) ");
239  for (int j=in1; j<in2; j++)
240  {
241  printf("%2d ", ns[j]);
242  fprintf(f, "%2d ", ns[j]);
243  }
244  printf("\n");
245  fprintf(f, "\n");
246  for (int i=ip1; i<ip2; i++)
247  {
248  printf(" %6.1f ", mom[i]);
249  fprintf(f, " %6.1f ", mom[i]);
250  for (int j=in1; j<in2; j++)
251  {
252  printf("%7.3f ",errxt[i][j]);
253  fprintf(f, "%7.3f ",errxt[i][j]);
254  }
255  printf("\n");
256  fprintf(f, "\n");
257  }
258  printf("\n*************** Sigma TX (mrad) **********\n");
259  printf(" Nplates\n");
260  printf(" P (GeV/c) ");
261  fprintf(f, "\n*************** Sigma TX (mrad) **********\n");
262  fprintf(f, " Nplates\n");
263  fprintf(f, " P (GeV/c) ");
264  for (int j=in1; j<in2; j++)
265  {
266  printf("%2d ", ns[j]);
267  fprintf(f, "%2d ", ns[j]);
268  }
269  printf("\n");
270  fprintf(f, "\n");
271  for (int i=ip1; i<ip2; i++)
272  {
273  printf(" %6.1f ", mom[i]);
274  fprintf(f, " %6.1f ", mom[i]);
275  for (int j=in1; j<in2; j++)
276  {
277  printf("%7.2f ",sigtxt[i][j]*1000.);
278  fprintf(f, "%7.2f ",sigtxt[i][j]*1000.);
279  }
280  printf("\n");
281  fprintf(f, "\n");
282  }
283  printf("\n*************** RMS TX (mrad) **********\n");
284  printf(" Nplates\n");
285  printf(" P (GeV/c) ");
286  fprintf(f, "\n*************** RMS TX (mrad) **********\n");
287  fprintf(f, " Nplates\n");
288  fprintf(f, " P (GeV/c) ");
289  for (int j=in1; j<in2; j++)
290  {
291  printf("%2d ", ns[j]);
292  fprintf(f, "%2d ", ns[j]);
293  }
294  printf("\n");
295  fprintf(f, "\n");
296  for (int i=ip1; i<ip2; i++)
297  {
298  printf(" %6.1f ", mom[i]);
299  fprintf(f, " %6.1f ", mom[i]);
300  for (int j=in1; j<in2; j++)
301  {
302  printf("%7.2f ",rmstxt[i][j]*1000.);
303  fprintf(f, "%7.2f ",rmstxt[i][j]*1000.);
304  }
305  printf("\n");
306  fprintf(f, "\n");
307  }
308  printf("\n*************** ERR TX (mrad) **********\n");
309  printf(" Nplates\n");
310  printf(" P (GeV/c) ");
311  fprintf(f, "\n*************** ERR TX (mrad) **********\n");
312  fprintf(f, " Nplates\n");
313  fprintf(f, " P (GeV/c) ");
314  for (int j=in1; j<in2; j++)
315  {
316  printf("%2d ", ns[j]);
317  fprintf(f, "%2d ", ns[j]);
318  }
319  printf("\n");
320  fprintf(f, "\n");
321  for (int i=ip1; i<ip2; i++)
322  {
323  printf(" %6.1f ", mom[i]);
324  fprintf(f, " %6.1f ", mom[i]);
325  for (int j=in1; j<in2; j++)
326  {
327  printf("%7.2f ",errtxt[i][j]*1000.);
328  fprintf(f, "%7.2f ",errtxt[i][j]*1000.);
329  }
330  printf("\n");
331  fprintf(f, "\n");
332  }
333  fclose(f);
334 }
void ClearHistsV()
Definition: RecDispMC_Profiles_new.C:847
void gv(int n=1)
Definition: RecDispMC_Profiles_new.C:337
fclose(pFile)

Variable Documentation

◆ ali

EdbPVRec* ali =0

◆ brick

BRICK brick

◆ CovMS

double CovMS[dim2]

◆ cv

TCanvas* cv = 0

◆ cv1

TCanvas * cv1 = 0

◆ cv2

TCanvas * cv2 = 0

◆ cv3

TCanvas * cv3 = 0

◆ cv4

TCanvas * cv4 = 0

◆ cv5

TCanvas * cv5 = 0

◆ cv6

TCanvas * cv6 = 0

◆ cvg1

TCanvas* cvg1 = 0

◆ cvg2

TCanvas * cvg2 = 0

◆ cvg3

TCanvas * cvg3 = 0

◆ cvg4

TCanvas * cvg4 = 0

◆ cvg5

TCanvas * cvg5 = 0

◆ cvg6

TCanvas * cvg6 = 0

◆ DE

double DE

◆ DE_MC

double DE_MC

◆ design

int design = 0

◆ dpp

float dpp = 0.

◆ dz

brick dz = 1300.

◆ eloss_flag

int eloss_flag = 1

◆ gener

EdbPVGen* gener = 0

◆ gEVR

EdbVertexRec* gEVR =0

◆ hp

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

◆ hpp

TProfile* hpp[6] = {0,0,0,0,0,0}

◆ isegtest

int isegtest = -1

◆ lim

brick lim[3] = -50000.

◆ linfit

bool linfit = false

◆ momentum

float momentum = 4000.

◆ NewSxy

float NewSxy = 0.

◆ pCovMS

double* pCovMS = &CovMS[0]

◆ plates

brick plates = 56

◆ PrintN

const unsigned long int PrintN = 100

◆ pxl

float * pxl = &xl[0]

◆ pzl

float* pzl = &zl[0]

◆ scanCond

EdbScanCond* scanCond =0

◆ seg_s

float seg_s[4] = {2.5,2.5,0.0025,0.0025}

◆ seg_zero

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

◆ ShiftP

float ShiftP = 0.

◆ ShiftX

float ShiftX = -3.*seg_s[0]

◆ ti

EdbTrackP* ti[10] = {0,0,0,0,0,0,0,0,0,0}

◆ vedb

EdbVertex* vedb

◆ vxyz

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

◆ X0

brick X0 = 5810.

◆ xl

float xl[dim]

◆ Xn

float Xn[5] = {2., 3., 5., 10., 20.}

◆ Xnlin

float Xnlin[5] = {2.2, 3.2, 5.2, 10.2, 20.2}

◆ Yerrtx

float Yerrtx[5][5]
Initial value:
= {
{ 1.37, 1.37, 1.37, 1.37, 1.37},
{ 1.16, 1.16, 1.16, 1.16, 1.16},
{ 0.87, 0.87, 0.87, 0.87, 0.87},
{ 0.72, 0.70, 0.70, 0.70, 0.70},
{ 0.48, 0.26, 0.12, 0.07, 0.04}
}

◆ Yerrx

float Yerrx[5][5]
Initial value:
= {
{0.492, 0.492, 0.492, 0.492, 0.492},
{0.484, 0.482, 0.482, 0.482, 0.482},
{0.477, 0.470, 0.470, 0.470, 0.470},
{0.475, 0.463, 0.462, 0.462, 0.462},
{0.473, 0.444, 0.383, 0.294, 0.224}
}

◆ Yerrxlin

float Yerrxlin[5][5]
Initial value:
= {
{0.487, 0.487, 0.487, 0.487, 0.487},
{0.479, 0.477, 0.477, 0.477, 0.477},
{0.475, 0.467, 0.467, 0.467, 0.467},
{0.474, 0.461, 0.459, 0.459, 0.459},
{0.473, 0.444, 0.383, 0.294, 0.223}
}

◆ Yrmstx

float Yrmstx[5][5]
Initial value:
= {
{ 1.39, 1.41, 1.32, 1.43, 1.36},
{ 1.14, 1.17, 1.19, 1.17, 1.17},
{ 0.90, 0.85, 0.88, 0.86, 0.86},
{ 0.72, 0.68, 0.69, 0.69, 0.71},
{ 0.48, 0.26, 0.12, 0.07, 0.04}
}

◆ Yrmsx

float Yrmsx[5][5]
Initial value:
= {
{0.506, 0.505, 0.474, 0.480, 0.495},
{0.457, 0.469, 0.460, 0.491, 0.482},
{0.477, 0.452, 0.472, 0.466, 0.458},
{0.477, 0.462, 0.463, 0.480, 0.452},
{0.454, 0.450, 0.385, 0.289, 0.227}
}

◆ Ysigtx

float Ysigtx[5][5]
Initial value:
= {
{ 1.38, 1.41, 1.30, 1.41, 1.33},
{ 1.12, 1.15, 1.15, 1.15, 1.16},
{ 0.83, 0.85, 0.87, 0.84, 0.87},
{ 0.71, 0.68, 0.69, 0.68, 0.71},
{ 0.49, 0.27, 0.13, 0.11, 0.11}
}

◆ Ysigx

float Ysigx[5][5]
Initial value:
= {
{0.502, 0.489, 0.461, 0.458, 0.486},
{0.442, 0.469, 0.453, 0.470, 0.469},
{0.463, 0.447, 0.463, 0.468, 0.459},
{0.479, 0.452, 0.453, 0.480, 0.442},
{0.450, 0.451, 0.384, 0.290, 0.223}
}

◆ z0

brick z0 = 0.

◆ zl

float zl[dim]