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
Double_t X
Definition: tlg2couples.C:76
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
array of vertex
Definition: EdbPVRec.h:162
TObjArray * eTracks
Definition: EdbPVRec.h:161
Definition: EdbVertex.h:69

◆ 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:125
void SetP(float p)
Definition: EdbSegP.h:133
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:87
Definition: EdbPattern.h:113
void SetM(float m)
Definition: EdbPattern.h:154
Int_t N() const
Definition: EdbVertex.h:121
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
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:878

◆ 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);
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();
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
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:334
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
safety margin for angular aperture of vertex products
Definition: EdbVertex.h:176
Bool_t eUseSegPar
use only the nearest measured segments for vertex fit (as Neuchatel)
Definition: EdbVertex.h:182
Float_t eImpMax
maximal acceptable impact parameter (preliminary check)
Definition: EdbVertex.h:179
Float_t eZbin
z- granularity (default is 100 microns)
Definition: EdbVertex.h:175
Float_t eDZmax
maximum z-gap in the track-vertex group
Definition: EdbVertex.h:177
Float_t eProbMin
minimum acceptable probability for chi2-distance between tracks
Definition: EdbVertex.h:178
Definition: EdbVertex.h:194
TObjArray * eVTX
array of vertex
Definition: EdbVertex.h:205
EdbPVRec * ePVR
patterns volume (optional)
Definition: EdbVertex.h:206
TObjArray * eEdbTracks
Definition: EdbVertex.h:204
TTree * t
Definition: check_shower.C:4
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:273
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1707

◆ 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:21
Float_t Prob() const
Definition: EdbSegP.h:156
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
Float_t X() const
Definition: EdbSegP.h:173
Float_t Chi2() const
Definition: EdbSegP.h:157
TMatrixD & COV() const
Definition: EdbSegP.h:123
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:195
s
Definition: check_shower.C:55
Double_t TX
Definition: tlg2couples.C:78
p
Definition: testBGReduction_AllMethods.C:8

◆ 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]