FEDRA emulsion software from the OPERA Collaboration
RecDispNU.C File Reference
#include "My_Track.h"
#include "My_Header.h"
Include dependency graph for RecDispNU.C:

Macros

#define MAXCODES   10000
 

Functions

void BookHistsV ()
 
void ClearHistsV ()
 
void d ()
 
void DrawHistsV ()
 
void DrawHlist (TCanvas *c, TObjArray h)
 
void dsall ()
 
void dsv (int numv=-1, int numt=-1, 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 (Vertex &v)
 
void FillPVGen ()
 
void GCodesInit ()
 
void init (char *data_set="data_set.def")
 
void init_rec (char *data_set="data_set.def")
 
double MassGeant (int val)
 
int Pdg2Geant (int val)
 
void RecDispNU ()
 
void run (int ib=1, int ie=100, int nutype=2)
 
void scan1 ()
 
void scanend ()
 
void SmearSegments ()
 

Variables

float AngleAcceptance = 1.5
 
float back1_tetamax = 0.35
 
float back2_plim [2] = {0.5, 5.5}
 
float back2_tetamax = 0.25
 
float DIRt [500]
 
float dpp = 0.20
 
EdbDisplayds =0
 
EdbDisplayds2 =0
 
EdbDataProcdset =0
 
int evnum = 0
 
float fiducial_border = 20000.
 
float fiducial_border_z = 20000.
 
const char filename [256]
 
FILE * fmcdata = 0
 
TFile * fmicro
 
EdbPVRecgAli =0
 
int Geant [2 *MAXCODES]
 
EdbPVGengener =0
 
TObjArray hld1
 
TObjArray hld2
 
TObjArray hld3
 
TObjArray hld4
 
TObjArray hld5
 
TObjArray hld6
 
TObjArray hld7
 
TObjArray hld8
 
TObjArray hlist
 
TH1F * hp [32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
 
TProfile * hpp [10] = {0,0,0,0,0,0,0,0,0,0}
 
const char * INfile = &filename[0]
 
FILE * log
 
int maxgaps [6] = {0,3,3,6,3,6}
 
int MaxTrack = 0
 
int MaxVertex = 0
 
My_Track * micro = 0
 
int nsegMin = 2
 
int Nst [500]
 
int ntgood = 0
 
int Ntr = 0
 
int ntrgood_gen1 = 0
 
int Numgent [500]
 
int Numgenv [500]
 
float Numvtr [500][500]
 
int nutypes = 0
 
int nvggood = 0
 
int Nvt = 0
 
int NVt [500]
 
float Nvtr [500]
 
bool only_primary_vertex = true
 
int PdgId [500]
 
int primary_vertex_ntracks_min = 2
 
float ProbGap = 0.10
 
float ProbMinP = 0.01
 
float ProbMinT = 0.01
 
float ProbMinV = 0.01
 
float ProbMinVN = 0.01
 
float Pt [500]
 
int rec_primary_vertex_ntracks_min = 2
 
TFile * rf =0
 
float RightRatioMin = 0.5
 
EdbScanCondscan =0
 
bool scanning = false
 
float seg_s [4] ={1.2, 1.2, 0.0015, 0.0015}
 
bool setz = true
 
double smass = 0.1395700
 
bool smear = true
 
FILE * stderr
 
FILE * stdout
 
float TMass [500]
 
TTree * TreeMS = 0
 
float TXt [500]
 
float TYt [500]
 
bool use_mc_mass = false
 
bool use_mc_momentum = false
 
bool usemom =false
 
EdbPatternsVolumevol =0
 
float VTx [500]
 
float VTy [500]
 
float VTz [500]
 
float vxg = 0.
 
float vxo = 0.
 
float vyg = 0.
 
float vyo = 0.
 
float vzg = 0.
 
float vzo = 0.
 
bool write_mc_data = false
 
float z0shift = 295.
 

Macro Definition Documentation

◆ MAXCODES

#define MAXCODES   10000

Function Documentation

◆ BookHistsV()

void BookHistsV ( )

1015{
1016 if (!hp[0]) hp[0] = new TH1F("Hist_Vt_Dx","Vertex X error",100,-50.,50.);
1017 if (!hp[1]) hp[1] = new TH1F("Hist_Vt_Dy","Vertex Y error",100,-50.,50.);
1018 if (!hp[2]) hp[2] = new TH1F("Hist_Vt_Dz","Vertex Z error",100,-100.,100.);
1019 if (!hp[3]) hp[3] = new TH1F("Hist_Vt_Sx","Vertex X sigma",100,0.,25.);
1020 if (!hp[4]) hp[4] = new TH1F("Hist_Vt_Sy","Vertex Y sigma",100,0.,25.);
1021 if (!hp[5]) hp[5] = new TH1F("Hist_Vt_Sz","Vertex Z sigma",100,0.,50.);
1022 if (!hp[6]) hp[6] = new TH1F("Hist_Vt_Chi2","Vertex Chi-square/D.F.",25,0.,5.);
1023 if (!hp[7]) hp[7] = new TH1F("Hist_Vt_Prob","Vertex Chi-square Probability",26,0.,1.04);
1024// if (!hp[8]) hp[8] = new TH1F("Hist_Vt_Mass","Vertex Mass error",50,-1.000,+1.000);
1025 if (!hp[8]) hp[8] = new TH1F("Hist_Vt_Vpercg","Ratio reconstructed/generated vertexes",150, 0.,3.0);
1026 char title[128];
1027 sprintf(title,"Number of reconstructed vertexs");
1028 if (!hp[9]) hp[9] = new TH1F("Hist_Vt_Nvert",title,20,0.,20.);
1029 sprintf(title,"Number of reconstructed tracks");
1030 if (!hp[10]) hp[10] = new TH1F("Hist_Vt_Ntrack",title,100,0.,100.);
1031 if (!hp[11]) hp[11] = new TH1F("Hist_Vt_Nsegs","Number of track segments",60,0.,60.);
1032 if (!hp[12]) hp[12] = new TH1F("Hist_Vt_Dtrack","Track DeltaX, microns",100,-1.,+1.);
1033 if (!hp[13]) hp[13] = new TH1F("Hist_Vt_NsegsG","Number of generated track segments",60,0.,60.);
1034// if (!hp[19]) hp[19] = new TH1F("Hist_Vt_DE","DE(MC)-DE",100,-0.25,+0.25);
1035 if (!hp[19]) hp[19] = new TH1F("Hist_Vt_Tperc","Ratio reconstructed/generated tracks",250, 0.,5.0);
1036 if (!hp[14]) hp[14] = new TH1F("Hist_Vt_Dist","RMS track-vertex distance",100, 0.,50.);
1037 if (!hp[15]) hp[15] = new TH1F("Hist_Vt_Match","Right segments fraction (tracks at vertexes)",110, 0.,1.1);
1038// if (!hp[16]) hp[16] = new TH1F("Hist_Vt_Matchb","Right segments fraction (backgound tracks)",110, 0.,1.1);
1039 if (!hp[16]) hp[16] = new TH1F("Hist_Vt_Tpercg","Ratio reconstructed(matched)/generated tracks",250, 0.,5.0);
1040 if (!hp[17]) hp[17] = new TH1F("Hist_Vt_Trprob","Track probability",110, 0.,1.1);
1041 if (!hp[18]) hp[18] = new TH1F("Hist_Vt_AngleV","RMS track-track angle, mrad", 100, 0.,1000.);
1042 if (!hp[20]) hp[20] = new TH1F("Hist_Vt_Angle","Track angle, mrad", 100, 0.,2000.);
1043 if (!hp[21]) hp[21] = new TH1F("Hist_Vt_Momen","Track momentum, GeV/c", 50, 0.,5.);
1044 if (!hp[22]) hp[22] = new TH1F("Hist_Vt_Ntracks","Number of tracks at vertex (rec)", 20, 0.,20.);
1045// if (!hp[23]) hp[23] = new TH1F("Hist_Vt_Pmulsca","Relative Momentum error", 50, -250.,250.);
1046 if (!hp[23]) hp[23] = new TH1F("Hist_Vt_Vpercmg","Ratio reconstructed(matched)/generated vertexes",100, 0.,5.0);
1047 if (!hp[24]) hp[24] = new TH1F("Hist_Vt_NtracksMCTV","Number of tracks at vertex (MC)", 20, 0.,20.);
1048 if (!hp[25]) hp[25] = new TH1F("Hist_Vt_NtracksMCT","Number of generated tracks", 100, 0.,100.);
1049 if (!hp[26]) hp[26] = new TH1F("Hist_Vt_NtracksMCV","Number of generated vertexes", 20, 0.,20.);
1050 if (!hp[27]) hp[27] = new TH1F("Hist_Vt_Nneg","Number of primary vertex tracks (not broken ones)", 20, 0.,20.);
1051 if (!hp[28]) hp[28] = new TH1F("Hist_Vt_Nnsg","Number of primary vertex tracks (not short ones)", 20, 0.,20.);
1052 if (!hp[29]) hp[29] = new TH1F("Hist_Vt_Npro","Number of primary vertex tracks (high probability)", 20, 0.,20.);
1053 if (!hp[30]) hp[30] = new TH1F("Hist_Vt_Noko","Number of rejected primary vertex tracks", 20, 0.,20.);
1054 if (!hp[31]) hp[31] = new TH1F("Hist_Vt_DZpat","DZ for ajunced patterns", 300, 0.,3000.);
1055 if (!hpp[0]) hpp[0] = new TProfile("Hist_Vt_Zpat","Segments Z vs pattern number", 60, -1.,59., -1000000., +1000000, "s");
1056
1057 hld1.Add(hp[0]);
1058 hld1.Add(hp[1]);
1059 hld1.Add(hp[2]);
1060 hld1.Add(hp[3]);
1061 hld1.Add(hp[4]);
1062 hld1.Add(hp[5]);
1063 hld1.Add(hp[6]);
1064 hld1.Add(hp[7]);
1065 hld1.Add(hp[8]);
1066
1067 hld2.Add(hp[11]);
1068 hld2.Add(hp[15]);
1069 hld2.Add(hp[12]);
1070 hld2.Add(hp[13]);
1071 hld2.Add(hp[16]);
1072 hld2.Add(hp[19]);
1073 hld2.Add(hp[17]);
1074 hld2.Add(hp[20]);
1075 hld2.Add(hp[21]);
1076
1077 hld3.Add(hp[9]);
1078 hld3.Add(hp[10]);
1079 hld3.Add(hp[26]);
1080 hld3.Add(hp[25]);
1081
1082 hld4.Add(hp[22]);
1083 hld4.Add(hp[23]);
1084 hld4.Add(hp[24]);
1085 hld4.Add(hp[14]);
1086
1087 hld5.Add(hp[27]);
1088 hld5.Add(hp[28]);
1089 hld5.Add(hp[29]);
1090 hld5.Add(hp[30]);
1091
1092 hld6.Add(hpp[0]);
1093 hld6.Add(hp[31]);
1094
1095 for (int i=0; i<32; i++)
1096 if (hp[i]) hlist.Add(hp[i]);
1097}
TProfile * hpp[10]
Definition: RecDispNU.C:78
TObjArray hld1
Definition: RecDispNU.C:79
TObjArray hld2
Definition: RecDispNU.C:79
TObjArray hlist
Definition: RecDispNU.C:79
TObjArray hld4
Definition: RecDispNU.C:79
TObjArray hld6
Definition: RecDispNU.C:79
TObjArray hld3
Definition: RecDispNU.C:79
TObjArray hld5
Definition: RecDispNU.C:79
TH1F * hp[32]
Definition: RecDispNU.C:77

◆ ClearHistsV()

void ClearHistsV ( )

1235{
1236 for(int i=0; hp[i]; i++) {
1237 hp[i]->Clear();
1238 }
1239}

◆ d()

void d ( )

1232{ DrawHistsV();}
void DrawHistsV()
Definition: RecDispNU.C:1159

◆ DrawHistsV()

void DrawHistsV ( )

1160{
1161 TCanvas *cv1 = new TCanvas("Vertex_reconstruction_1","MC Vertex reconstruction", 760, 760);
1162 DrawHlist(cv1, hld1);
1163
1164 TCanvas *cv2 = new TCanvas("Vertex_reconstruction_2","Vertex reconstruction (tracks hists)", 600, 760);
1165 DrawHlist(cv2, hld2);
1166
1167 TCanvas *cv3 = new TCanvas("Vertex_reconstruction_3","Vertex reconstruction (eff hists)", 600, 760);
1168 DrawHlist(cv3, hld3);
1169
1170 TCanvas *cv4 = new TCanvas("Vertex_reconstruction_4","Vertex reconstruction (ntracks)", 600, 760);
1171 DrawHlist(cv4, hld4);
1172
1173 TCanvas *cv5 = new TCanvas("Vertex_reconstruction_5","Vertex reconstruction (1st vertex tracks)", 600, 760);
1174 DrawHlist(cv5, hld5);
1175
1176 TCanvas *cv6 = new TCanvas("Vertex_reconstruction_6","Vertex reconstruction (1st pattern Z)", 600, 760);
1177 DrawHlist(cv6, hld6);
1178}
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
TCanvas * cv6
Definition: RecDispMC_Profiles_new.C:70
TCanvas * cv5
Definition: RecDispMC_Profiles_new.C:70
void DrawHlist(TCanvas *c, TObjArray h)
Definition: RecDispNU.C:1180
new TCanvas()

◆ DrawHlist()

void DrawHlist ( TCanvas c,
TObjArray  h 
)

1181{
1182 int n = h.GetEntries();
1183 if (n < 2)
1184 {
1185 }
1186 else if (n < 3)
1187 {
1188 c->Divide(1,2);
1189 }
1190 else if (n < 4)
1191 {
1192 c->Divide(1,3);
1193 }
1194 else if (n < 5)
1195 {
1196 c->Divide(2,2);
1197 }
1198 else if (n < 6)
1199 {
1200 c->Divide(2,3);
1201 }
1202 else if (n < 7)
1203 {
1204 c->Divide(2,3);
1205 }
1206 else if (n < 8)
1207 {
1208 c->Divide(2,4);
1209 }
1210 else if (n < 9)
1211 {
1212 c->Divide(2,4);
1213 }
1214 else if (n < 10)
1215 {
1216 c->Divide(3,3);
1217 }
1218 else if (n < 11)
1219 {
1220 c->Divide(2,5);
1221 }
1222 else
1223 {
1224 c->Divide(3,5);
1225 }
1226 for(int i=0; i<n; i++) {
1227 c->cd(i+1);
1228 if (h.At(i)) h.At(i)->Draw();
1229 }
1230}

◆ dsall()

void dsall ( )
823{
824
825 TObjArray *arr = new TObjArray();
826
828
829 gStyle->SetPalette(1);
830 const char *title = "display-segments";
831 if(!EdbDisplay::EdbDisplayExist(title))
832 ds=new EdbDisplay(title, -60000.,60000.,-60000., 62000., 0.,100000.);
833
834 ds->SetArrSegP( arr );
835 ds->SetArrTr( gAli->eTracks );
836 ds->SetDrawTracks(3);
837 ds->Draw();
838 delete arr;
839 arr = 0;
840}
EdbDisplay * ds
Definition: RecDispNU.C:112
EdbPVRec * gAli
Definition: RecDispNU.C:114
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 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 * eTracks
Definition: EdbPVRec.h:161

◆ dsv()

void dsv ( int  numv = -1,
int  numt = -1,
float  binx = 6,
float  bint = 10 
)
844{
845 if(!gAli->eVTX) return;
846 if(!gAli->eTracks) return;
847
848 EdbSegP *seg=0; // direction
849
850 TObjArray *arrV = new TObjArray(); // vertexes
851 TObjArray *arr = new TObjArray(); // segments
852 TObjArray *arrtr = new TObjArray(); // tracks
853
854 int ntrMin=2;
855 int nvtx = gAli->eVTX->GetEntries();
856 EdbVertex *v = 0;
857 int iv0,iv1;
858 if (numv == -1)
859 {
860 iv0 = 0;
861 iv1 = nvtx;
862 }
863 else
864 {
865 iv0 = numv;
866 iv1 = numv+1;
867 }
868
870
871 int ntr = gAli->eTracks->GetEntries();
872 for(int i=0; i<ntr; i++) {
873 EdbTrackP *track = (EdbTrackP *)(gAli->eTracks->At(i));
874 if (track->Flag() < 0) continue;
875 printf("Track ID %d, Z = %f, Nseg = %d\n",
876 track->ID(), track->Z(), track->N());
877 if (numt < 0 || numt == i)
878 arrtr->Add(track);
879 }
880
881 for(int iv=iv0; iv<iv1; iv++) {
882 v = (EdbVertex *)(gAli->eVTX->At(iv));
883 if(!v) continue;
884 if(v->N()<ntrMin) continue;
885
886 arrV->Add(v);
887 }
888
889 gStyle->SetPalette(1);
890
891 if(ds) delete ds;
892 ds=new EdbDisplay("display-vertexes",-60000.,60000.,-60000., 62000., 0.,100000.);
893
894 ds->SetArrSegP( arr );
895 ds->SetArrTr( arrtr );
896 ds->SetArrV( arrV );
897 ds->SetDrawVertex(1);
898 ds->Draw();
899}
TObjArray * arrtr
Definition: RecDispMC.C:129
void SetDrawVertex(int opt)
Definition: EdbDisplay.h:109
void SetArrV(TObjArray *arrv)
Definition: EdbDisplay.cxx:501
TObjArray * eVTX
array of vertex
Definition: EdbPVRec.h:162
Definition: EdbSegP.h:21
Definition: EdbPattern.h:113
Definition: EdbVertex.h:69
Int_t N() const
Definition: EdbVertex.h:121
Definition: bitview.h:14

◆ dsvg()

void dsvg ( int  numv = -1,
float  binx = 6,
float  bint = 10 
)
902{
903 if(!gener->eVTX) return;
904
905 EdbSegP *seg=0; // direction
906
907 TObjArray *arrV = new TObjArray(); // vertexes
908 TObjArray *arr = new TObjArray(); // segments
909 TObjArray *arrtr = new TObjArray(); // tracks
910
911 int ntrMin=2;
912 int nvtx = gener->eVTX->GetEntries();
913 EdbVertex *v = 0;
914 int iv0,iv1;
915 if (numv == -1)
916 {
917 iv0 = 0;
918 iv1 = nvtx;
919 }
920 else
921 {
922 iv0 = numv;
923 iv1 = numv+1;
924 }
925 for(int iv=iv0; iv<iv1; iv++) {
926 v = (EdbVertex *)(gener->eVTX->At(iv));
927 if(!v) continue;
928 if(v->N()<ntrMin) continue;
929
930 arrV->Add(v);
931
932 int ntr = v->N();
933 printf("Vertex %d, multiplicity %d\n", iv, ntr);
934 for(int i=0; i<ntr; i++) {
935 EdbTrackP *track = v->GetTrack(i);
936 printf(" Track ID %d, Z = %f, Nseg = %d, Zpos = %d\n",
937 track->ID(), track->Z(), track->N(), v->Zpos(i));
938 arrtr->Add(track);
939 }
940
941 }
942
943 gStyle->SetPalette(1);
944
945 const char *title = "display-generated";
946 if(!EdbDisplay::EdbDisplayExist(title))
947 ds=new EdbDisplay(title, -60000.,60000.,-60000., 62000., 0.,100000.);
948
949 ds->SetArrSegP( arr );
950 ds->SetArrTr( arrtr );
951 ds->SetArrV( arrV );
952 ds->SetDrawVertex(1);
953 ds->SetDrawTrack(4);
954 ds->Draw();
955}
EdbPVGen * gener
Definition: RecDispNU.C:115
TObjArray * eVTX
Definition: EdbPVGen.h:28
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t Zpos(int i)
Definition: EdbVertex.h:127

◆ dsvg2()

void dsvg2 ( int  numv = -1,
float  binx = 6,
float  bint = 10 
)
958{
959 if(!gener->eVTX) return;
960
961 EdbSegP *seg=0; // direction
962
963 TObjArray *arrV = new TObjArray(); // vertexes
964 TObjArray *arr = new TObjArray(); // segments
965 TObjArray *arrtr = new TObjArray(); // tracks
966
967 int ntrMin=2;
968 int nvtx = gener->eVTX->GetEntries();
969 EdbVertex *v = 0;
970 int iv0,iv1;
971 if (numv == -1)
972 {
973 iv0 = 0;
974 iv1 = nvtx;
975 }
976 else
977 {
978 iv0 = numv;
979 iv1 = numv+1;
980 }
981 for(int iv=iv0; iv<iv1; iv++) {
982 v = (EdbVertex *)(gener->eVTX->At(iv));
983 if(!v) continue;
984 if(v->N()<ntrMin) continue;
985
986 arrV->Add(v);
987
989 int ntr = v->N();
990 printf("Vertex %d, multiplicity %d\n", iv, ntr);
991 for(int i=0; i<ntr; i++) {
992 EdbTrackP *track = v->GetTrack(i);
993 printf(" Track ID %d, Z = %f, Nseg = %d, Zpos = %d\n",
994 track->ID(), track->Z(), track->N(), v->Zpos(i));
995 arrtr->Add(track);
996 }
997
998 }
999
1000 gStyle->SetPalette(1);
1001
1002 const char *title = "display-generated-2";
1003 if(!EdbDisplay::EdbDisplayExist(title))
1004 ds2=new EdbDisplay(title, -60000.,60000.,-60000., 62000., 0.,100000.);
1005
1006 ds2->SetArrSegP( arr );
1007 ds2->SetArrTr( arrtr );
1008 ds2->SetArrV( arrV );
1009 ds2->SetDrawVertex(1);
1010 ds2->Draw();
1011}
EdbDisplay * ds2
Definition: RecDispNU.C:113

◆ FillHistsGen()

void FillHistsGen ( )

1118{
1119 // tracks and vertex reconstruction (KF fitting only without track finding)
1120
1121 double xg, yg, zg, txg, tyg, pg, ang;
1122 EdbTrackP *tr;
1123 EdbVertex *vedbg = 0;
1124
1125 int nv = 0;
1126 if(gener->eVTX) nv = gener->eVTX->GetEntries();
1127 for(int i=0; i<nv; i++) {
1128 vedbg = (EdbVertex *)(gener->eVTX->At(i));
1129 int nt = vedbg->N();
1130 for(int ip=0; ip<nt; ip++) {
1131 tr = vedbg->GetTrack(ip);
1132 xg = tr->X();
1133 yg = tr->Y();
1134 zg = tr->Z();
1135 txg = tr->TX();
1136 tyg = tr->TY();
1137 pg = tr->P();
1138 ang = TMath::ACos(1./(1.+txg*txg+tyg*tyg))*1000.;
1139 if (hp[20]) hp[20]->Fill(ang);
1140 if (hp[21]) hp[21]->Fill(pg);
1141 }
1142 }
1143 int nt = 0;
1144 if (gener->eTracks) nt = gener->eTracks->GetEntries();
1145 for(int i=0; i<nt; i++) {
1146 tr = (EdbTrackP *)(gener->eTracks->At(i));
1147 xg = tr->X();
1148 yg = tr->Y();
1149 zg = tr->Z();
1150 txg = tr->TX();
1151 tyg = tr->TY();
1152 pg = tr->P();
1153 ang = TMath::ACos(1./(1.+txg*txg+tyg*tyg))*180./TMath::Pi();
1154 if (hp[13]) hp[13]->Fill(tr->W());
1155 }
1156}
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
TObjArray * eTracks
Definition: EdbPVGen.h:27

◆ FillHistsV()

void FillHistsV ( Vertex v)

1103{
1104 hp[0]->Fill((double)vxo - (double)vxg);
1105 hp[1]->Fill((double)vyo - (double)vyg);
1106 hp[2]->Fill((double)vzo - (double)vzg);
1107 hp[3]->Fill(v.vxerr());
1108 hp[4]->Fill(v.vyerr());
1109 hp[5]->Fill(v.vzerr());
1110 hp[6]->Fill(v.ndf() > 0 ? v.chi2()/v.ndf() : 0);
1111 hp[7]->Fill(v.prob());
1112 hp[14]->Fill(v.rmsDistAngle());
1113 hp[18]->Fill(v.angle()*1000.);
1114 hp[22]->Fill(v.ntracks());
1115}
float vxg
Definition: RecDispNU.C:75
float vyg
Definition: RecDispNU.C:75
float vyo
Definition: RecDispNU.C:74
float vxo
Definition: RecDispNU.C:74
float vzg
Definition: RecDispNU.C:75
float vzo
Definition: RecDispNU.C:74
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
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

◆ FillPVGen()

void FillPVGen ( )
333{
334 EdbTrackP *trg = 0;
335 EdbVertex *vert = 0;
336 int numt = 0, Track = 0, ntgoodv = 0;
337 nvggood = 0;
338 ntgood = 0;
339
341 // loop on event vertexes and fill PVGen with vertexes and tracks
342 for (int iv = 0; iv <= MaxVertex; iv++)
343 {
344 if (VTx[iv] != -1000000.)
345 {
346 vert = new EdbVertex();
347 vert->SetXYZ(VTx[iv], VTy[iv], VTz[iv]-z0shift);
348 ntgoodv = 0;
349 for (int it = 0; it < Nvtr[iv]; it++)
350 {
351 Track = Numvtr[iv][it];
352 if (Pt[Track] != -100.)
353 {
354 // check if less than 2 segment
355 if (Nst[Track] < 2) continue;
356 // count tracks
357 ntgood++;
358 trg = new EdbTrackP();
359 Numgent[Track] = numt;
360 trg->Set(numt++, VTx[iv], VTy[iv], TXt[Track], TYt[Track], Nst[Track], nvggood+1);
361 trg->SetZ(VTz[iv]-z0shift);
362 trg->SetP(Pt[Track]);
363 if (TMass[Track] < 0.)
364 trg->SetM(0.1395700);
365 else
366 trg->SetM(TMass[Track]);
367 gener->AddTrack(trg);
368 // count tracks at current vertex
369 ntgoodv++;
370 // check if vertex with one track only
371 if (Nvtr[iv] < 2) break;
372 if (DIRt[Track] < 0.)
373 vert->AddTrack(trg, 0);
374 else
375 vert->AddTrack(trg, 1);
376 }
377 }
378 if (hp[24]) hp[24]->Fill((float)ntgoodv);
379 if (ntgoodv < 2) // delete vertex with low multiplicity
380 {
381 if(trg) trg->SetFlag(0);
382 delete vert;
383 vert = 0;
384 }
385 else
386 {
387 if (write_mc_data) // if data storing requested
388 {
389 fprintf(fmcdata, "%d %d %f %f %f\n", iv, ntgoodv,
390 VTx[iv], VTy[iv], VTz[iv]);
391 for (int it = 0; it < Nvtr[iv]; it++)
392 {
393 Track = Numvtr[iv][it];
394 if (Pt[Track] != -100.)
395 {
396 if (Nst[Track] < 2) continue;
397 if (TMass[Track] < 0.) TMass[Track] = 0.1395700;
398 fprintf(fmcdata, "%d %f %f %f %f\n",
400 Pt[Track],
401 TXt[Track], TYt[Track]);
402 }
403 }
404 }
405 // check if primary vertex has too low multiplicity
406 if (iv == 1 && (ntgoodv < primary_vertex_ntracks_min)) break;
407 // accept vertex
408 gener->AddVertex(vert);
409 // store MC vertex number
410 Numgenv[nvggood] = iv;
411 nvggood++;
412 if (iv == 1)
413 {
414 // generated primary vertex multiplicity
415 ntrgood_gen1 = ntgoodv;
416 }
417 }
418 }
419 }
420}
bool write_mc_data
Definition: RecDispNU.C:13
int ntgood
Definition: RecDispNU.C:98
int Numgent[500]
Definition: RecDispNU.C:94
int primary_vertex_ntracks_min
Definition: RecDispNU.C:7
float z0shift
Definition: RecDispNU.C:120
int nvggood
Definition: RecDispNU.C:96
int ntrgood_gen1
Definition: RecDispNU.C:97
float Nvtr[500]
Definition: RecDispNU.C:106
float TMass[500]
Definition: RecDispNU.C:109
int Nst[500]
Definition: RecDispNU.C:92
float Numvtr[500][500]
Definition: RecDispNU.C:107
float VTz[500]
Definition: RecDispNU.C:104
float VTy[500]
Definition: RecDispNU.C:104
int Numgenv[500]
Definition: RecDispNU.C:95
float Pt[500]
Definition: RecDispNU.C:99
float TXt[500]
Definition: RecDispNU.C:100
int MaxVertex
Definition: RecDispNU.C:91
void SmearSegments()
Definition: RecDispNU.C:1375
int Pdg2Geant(int val)
Definition: RecDispNU.C:1302
float DIRt[500]
Definition: RecDispNU.C:103
int PdgId[500]
Definition: RecDispNU.C:93
FILE * fmcdata
Definition: RecDispNU.C:71
float TYt[500]
Definition: RecDispNU.C:101
float VTx[500]
Definition: RecDispNU.C:104
void AddVertex(EdbVertex *vtx)
Definition: EdbPVGen.h:54
void AddTrack(EdbTrackP *track)
Definition: EdbPVGen.h:49
void SetZ(float z)
Definition: EdbSegP.h:125
void SetP(float p)
Definition: EdbSegP.h:133
void SetFlag(int flag)
Definition: EdbSegP.h:130
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:87
void SetM(float m)
Definition: EdbPattern.h:154
void SetXYZ(float x, float y, float z)
Definition: EdbVertex.h:157
Definition: VtTrack.hh:64
@ Track
Definition: tlg2couples.C:52

◆ GCodesInit()

void GCodesInit ( )
1245 {
1246
1247 for(int i=0;i<MAXCODES*2;i++) Geant[i]=0;
1248
1249 Geant[22]=1; // photon
1250 Geant[MAXCODES+11]=2; // e+
1251 Geant[11]=3; // e-
1252 Geant[12]=4; // e-neutrino (NB: flavour undefined by Geant)
1253 Geant[14]=4; // mu-neutrino (NB: flavour undefined by Geant)
1254 Geant[16]=4; // tau-neutrino (NB: flavour undefined by Geant)
1255 Geant[MAXCODES+13]=5; // mu+
1256 Geant[13]=6; // mu-
1257 Geant[111]=7; // pi0
1258 Geant[211]=8; // pi+
1259 Geant[MAXCODES+211]=9; // pi-
1260 Geant[130]=10; // K long
1261 Geant[321]=11; // K+
1262 Geant[MAXCODES+321]=12; // K-
1263 Geant[2112]=13; // n
1264 Geant[2212]=14; // p
1265 Geant[MAXCODES+2212]=15; // anti-proton
1266 Geant[310]=16; // K short
1267 Geant[221]=17; // eta
1268 Geant[3122]=18; // Lambda
1269 Geant[3222]=19; // Sigma+
1270 Geant[3212]=20; // Sigma0
1271 Geant[3112]=21; // Sigma-
1272 Geant[3322]=22; // Xi0
1273 Geant[3212]=23; // Xi-
1274 Geant[3334]=24; // Omega- (PB) ???diff from babar
1275 Geant[MAXCODES+2112]=25; // anti-neutron
1276 Geant[MAXCODES+3122]=26; // anti-Lambda
1277 Geant[MAXCODES+3222]=27; // Sigma-
1278 Geant[MAXCODES+3212]=28; // Sigma0
1279 Geant[MAXCODES+3112]=29; // Sigma+ (PB)*/
1280 Geant[MAXCODES+3322]=30; // Xi0
1281 Geant[MAXCODES+3312]=31; // Xi+
1282 Geant[MAXCODES+3334]=32; // Omega+ (PB) ???diff from babar
1283 Geant[MAXCODES+15]=33; // tau+
1284 Geant[15]=34; // tau-
1285 Geant[411]=35; // D+
1286 Geant[MAXCODES+411]=36; // D-
1287 Geant[421]=37; // D0
1288 Geant[MAXCODES+421]=38; // D0
1289 Geant[431]=39; // Ds+
1290 Geant[MAXCODES+431]=40; // anti Ds-
1291 Geant[4122]=41; // Lamba_c+
1292 Geant[24]=42; // W+
1293 Geant[MAXCODES+24]=43; // W-
1294 Geant[23]=44; // Z
1295 Geant[0]=45; // deuteron
1296 Geant[0]=46; // triton
1297 Geant[0]=47; // alpha
1298 Geant[0]=48; // G nu ? PDG ID 0 is undefined
1299}
int Geant[2 *MAXCODES]
Definition: RecDispNU.C:1242
#define MAXCODES
Definition: RecDispNU.C:1241

◆ init()

void init ( char *  data_set = "data_set.def")
815{
816 dset=new EdbDataProc(data_set);
817 dset->InitVolume(100);
818 gAli = dset->PVR();
819}
EdbDataProc * dset
Definition: RecDispNU.C:111
emulsion data processing
Definition: EdbDataSet.h:181
int InitVolume(int datatype=0, const char *rcut="1")
Definition: EdbDataSet.cxx:2066
EdbPVRec * PVR() const
Definition: EdbDataSet.h:198

◆ init_rec()

void init_rec ( char *  data_set = "data_set.def")
423{
424
425 EdbTrackP *trg = 0;
426 Vertex *v = 0, *vc = 0;
427 int Track = 0;
428
429 if (Geant[11] != 3) GCodesInit();
430
431 // delete previous objects
432 if (dset)
433 {
434 if (gAli->eVTX) gAli->eVTX->Delete();
435 if (gAli->eTracks) gAli->eTracks->Delete();
437 int npat=gAli->Npatterns();
438 TClonesArray *segs = 0;
439 for(int i=0; i<npat; i++ )
440 if ( segs = (gAli->GetPattern(i))->GetSegments()) segs->Delete();
441 delete dset;
442 dset = 0;
443 gAli = 0;
444 }
445 if (gener)
446 {
447 delete gener;
448 gener = 0;
449 }
450
451 dset=new EdbDataProc(data_set);
452 dset->InitVolume(0);
453 gAli = dset->PVR();
454
456 gener = new EdbPVGen();
458 gener->eVTX = new TObjArray(1000);
459 scan = gAli->GetScanCond();
461
462 // fill PVGen object with generated vertexes and tracks
463 FillPVGen();
464 // if nothing generated
465 if (!(gener->eVTX) || !(gener->eTracks) || (nvggood == 0))
466 {
467 if (hp[25]) hp[25]->Fill(0.);
468 if (hp[26]) hp[26]->Fill(0.);
469 return;
470 }
471
472 // fill hists with generated tracks parameters
473 FillHistsGen();
474
475 // link microtracks
476 gAli->Link();
477
478 if (hp[25]) hp[25]->Fill((float)ntgood);
479 if (hp[26]) hp[26]->Fill((float)nvggood);
480
482
483 printf("Monte-Carlo Ntr = %d Nvt = %d MaxTrackIndex = %d MaxVertexIndex = %d\n", ntgood, nvggood, MaxTrack, MaxVertex);
484
485 // make track candidates
486 gAli->MakeTracks();
487
488 int nvg = (gener->eVTX)->GetEntries();
489 if (!nvg) return;
490 int ntrg = (gener->eTracks)->GetEntries();
491 if (!ntrg) return;
492
493 int ntr = 0;
494 if (gAli->eTracks) ntr = gAli->eTracks->GetEntries();
495 if (!ntr)
496 {
497 if (hp[16]) hp[16]->Fill(0.);
498 if (hp[19]) hp[19]->Fill(0.);
499 if (hp[10]) hp[10]->Fill(0.);
500 if (hp[9]) hp[9]->Fill(0.);
501 if (hp[8]) hp[8]->Fill(0.);
502 if (hp[23]) hp[23]->Fill(0.);
503 return;
504 }
505
506 int nsegmatch = 0, itrg = 0;
507 float p = 0.;
508 EdbTrackP *tr = 0;
509 // loop on tracks for momentum and momentum error setting
510 for (int itr=0; itr<ntr; itr++) {
511 tr = (EdbTrackP*)(gAli->eTracks->At(itr));
512 trg = 0;
513 if (ntrg)
514 {
515 itrg = tr->GetSegmentsAid(nsegmatch);
516 if (itrg >= 0 && itrg < MaxTrack)
517 {
518 itrg = Numgent[itrg];
519 if (itrg < 0 || itrg >= ntrg) continue;
520 trg = (EdbTrackP*)(gener->eTracks->At(itrg));
521 p = trg->P();
522 if (dpp > 0.)
523 tr->SetErrorP(p*p*dpp*dpp);
524 else
525 tr->SetErrorP(p*p*0.2*0.2);
526 if (use_mc_momentum)
527 {
528 p = p*(1.+dpp*gRandom->Gaus());
529 if (p < 0.05) p = 0.05;
530 else if (p > 30.0) p = 30.;
531 tr->SetP(p);
532 }
533 else
534 {
535 p = 0.;
536 }
537 tr->SetP(p);
538 if (use_mc_mass) tr->SetM(trg->M());
539 else tr->SetM(0.);
540 }
541 }
542 }
543 // fit tracks, use predefined track momentum and mass
544 gAli->FitTracks(0., 0.);
545
546 gAli->FillCell(50,50,0.015,0.015);
547 // merge tracks
549
550 ntr = gAli->eTracks->GetEntries();
551 printf("%d tracks was found\n",ntr);
552
553 int ntrgood = 0;
554 int notmatched = 0;
555 int negflag = 0, ntrgood_r = 0, numveg = 0;
556 int negflag1 = 0, ntrgood_r1 = 0;
557 int nreject_nseg = 0, nreject_prob = 0;
558 int nreject_nseg1 = 0, nreject_prob1 = 0;
559 double right_ratio = 0.;
560 float dx = 0.;
561 // loop on tracks for finding corresponding generated track,
562 // count statistic and hists filling
563 for(int itr=0; itr<ntr; itr++) {
564 tr = (EdbTrackP*)(gAli->eTracks->At(itr));
565 trg = 0;
566 numveg = 0;
567 right_ratio = 0.;
568 if (ntrg) // number of generated tracks
569 {
570 itrg = tr->GetSegmentsAid(nsegmatch);
571 if (itrg >= 0 && itrg <= MaxTrack) // valid generated track MC index
572 {
573 itrg = Numgent[itrg];
574 if (itrg >= 0 && itrg < ntrg) // valid generated track PVGen index
575 {
576 trg = (EdbTrackP*)(gener->eTracks->At(itrg));
577 right_ratio = (double)nsegmatch/tr->N(); // "right" segments %%
578 if (right_ratio >= RightRatioMin)
579 {
580 numveg = trg->Flag() - 1;
581 if (numveg >= 0 && numveg < 500)
582 {
583 numveg = Numgenv[numveg]; // number of generated vertex
584 }
585 else
586 {
587 numveg = 0;
588 }
589 }
590 }
591 else
592 {
593 notmatched++;
594 }
595 }
596 else
597 {
598 notmatched++;
599 }
600 }
601 else
602 {
603 notmatched++;
604 }
605
606 if (tr->Flag()<0)
607 {
608 // count "broken" tracks
609 negflag++;
610 if (numveg == 1) negflag1++;
611 continue;
612 }
613 if (hp[11]) hp[11]->Fill(tr->N());
614 if (tr->N()<nsegMin)
615 {
616 // count short tracks
617 nreject_nseg++;
618 if (numveg == 1) nreject_nseg1++;
619 continue;
620 }
621
622 dx = (tr->GetSegmentFirst())->X()-(tr->GetSegmentFFirst())->X();
623
624 if (trg != 0 && dx != 0.) // reject 'one-segment' tracks (due to high MS)
625 {
626 hp[17]->Fill(tr->Prob());
627 }
628 if (tr->Prob()<ProbMinT)
629 {
630 // count low probability tracks
631 nreject_prob++;
632 if (numveg == 1) nreject_prob1++;
633 continue;
634 }
635 if (trg)
636 {
637 if (trg->Flag() == 0) // background track
638 {
639// ntrgoodb++;
640 if (right_ratio >= RightRatioMin)
641 {
642// ntrgoodb_r++;
643 }
644// hp[16]->Fill(right_ratio);
645
646 }
647 else if (trg->Flag() <= nvg) // track at vertex
648 {
649 // count matched tracks
650 ntrgood++;
651 if (right_ratio >= RightRatioMin)
652 {
653 ntrgood_r++;
654 if (numveg == 1) ntrgood_r1++;
655 }
656 hp[15]->Fill(right_ratio);
657 }
658 }
659
660 if (hp[12])
661 {
662 if (dx != 0. && tr->N() > 2) hp[12]->Fill(dx);
663 }
664
665 }
666
667 printf(" %6d tracks found after propagation\n", ntr-negflag);
668
669 if (hp[16]) hp[16]->Fill((float)(ntrgood_r)/ntrg);
670 if (hp[19]) hp[19]->Fill((float)(ntr-negflag)/ntrg);
671 if (hp[10]) hp[10]->Fill(ntr-negflag);
672 if (hp[27]) hp[27]->Fill(ntrgood_gen1 - negflag1);
673 if (hp[28]) hp[28]->Fill(ntrgood_gen1 - nreject_nseg1);
674 if (hp[29]) hp[29]->Fill(ntrgood_gen1 - nreject_prob1);
675 if (hp[30]) hp[30]->Fill(ntrgood_gen1 - ntrgood_r1);
676
677
678 bool usemom = false;
679 // find 2-track vertexes
680 int nvtx = gAli->ProbVertex(maxgaps, AngleAcceptance, ProbMinV, ProbMinT, nsegMin, usemom);
681 // clear some statistic counters
682 int nvagood[100];
683 int nvagoodm[100];
684 for (int i=0; i<100; i++) nvagood[i] = 0;
685 for (int i=0; i<100; i++) nvagoodm[i] = 0;
686 int nvgoodm = 0, nvgood = 0;
687 int ivg = 0;
688
689 if (!nvtx)
690 {
691 if (hp[9]) hp[9]->Fill(0.);
692 if (hp[23]) hp[23]->Fill(0.);
693 if (hp[8]) hp[8]->Fill(0.);
694 return;
695 }
696
697 int nadd = 0;
698 int np = 0;
699 // find N-tracks vertexes
700 nadd = gAli->ProbVertexN(ProbMinVN);
701
702 nvtx = gAli->eVTX->GetEntries();
703 // loop on found vertexes
704 for (int i=0; i<nvtx; i++)
705 {
706 edbv = (EdbVertex *)((gAli->eVTX)->At(i));
707 if (edbv && (edbv->Flag() != -10)) // reject "used" 2-tracks vertexes
708 {
709 v = edbv->V();
710 if (v)
711 {
712 if (v->valid())
713 {
714 if ((np = v->ntracks()) >= 2) // np is vertex multiplicity
715 {
716 // count valid vertexes
717 nvgood++;
718 nvagood[np]++;
719 tr = edbv->GetTrack(0);
720 // find 'ivg0' - index of corresponding PVGen vertex
721 int ivg0 = -1000000;
722 if(tr) ivg0 = tr->GetSegmentsAid(nsegmatch);
723 if (ivg0 >= 0 && ivg0 <= MaxTrack)
724 {
725 ivg0 = Numgent[ivg0];
726 if (ivg0 >= 0 && ivg0 < ntrg)
727 ivg0 = ((EdbTrackP*)(gener->eTracks->At(ivg0)))->Flag();
728 else
729 ivg0 = -1000000;
730 }
731 else
732 {
733 ivg0 = -1000000;
734 }
735 // check if all vertex tracks belong to the same
736 // generated vertex
737 ivg = -2000000;
738 for (int j=1; j<edbv->N() && ivg0>0; j++)
739 {
740 tr = edbv->GetTrack(j);
741 int ivg = -2000000;
742 if (tr) ivg = tr->GetSegmentsAid(nsegmatch);
743 if (ivg >= 0 && ivg < MaxTrack)
744 {
745 ivg = Numgent[ivg];
746 if (ivg >= 0 && ivg < ntrg)
747 ivg = ((EdbTrackP*)(gener->eTracks->At(ivg)))->Flag();
748 else
749 ivg = -2000000;
750 }
751 else
752 break;
753 if (ivg != ivg0) break;
754 }
755 if (ivg != ivg0) continue;
756 if (ivg <= 0) continue;
757 if (ivg > nvg) continue;
758 // check if vertex has valid multiplicity
759 if (np < rec_primary_vertex_ntracks_min) continue;
760 // count 'right' vertexes
761 nvagoodm[np]++;
762 nvgoodm++;
763 edbvg = (EdbVertex *)((gener->eVTX)->At(ivg-1));
764 vxo = edbv->VX();
765 vyo = edbv->VY();
766 vzo = edbv->VZ();
767 vxg = edbvg->X();
768 vyg = edbvg->Y();
769 vzg = edbvg->Z();
770 FillHistsV(*v);
771 }
772 }
773 }
774 }
775 }
776 if (hp[9]) hp[9]->Fill(nvgood);
777 if (nvggood)
778 {
779 if (hp[23]) hp[23]->Fill((float)nvgoodm/nvggood);
780 if (hp[8]) hp[8]->Fill((float)nvgood/nvggood);
781 }
782
783 if (1) return;
784 // set special flag values for 'linked' vertexes (i.e. with common track)
785 if (nvtx)
786 {
787 int nlv = gAli->LinkedVertexes();
788 printf("%d linked vertexes found\n", nlv);
789 if (nlv)
790 {
791 for(int i=0; i<nv; i++)
792 {
793 v = (EdbVertex*)(gAli->eVTX->At(i));
794 if (v->Flag() > 2)
795 {
796 vc = v->GetConnectedVertex(0);
797 if (vc->ID() > v->ID())
798 {
799// v->Print();
800// vc->Print();
801 }
802 }
803 }
804 }
805 }
806 // fill vertexes neighborhood
807 int nn = gAli->VertexNeighboor(1000.,2);
808 printf("%d neighbooring tracks found\n", nn);
809 delete vol;
810 vol = 0;
811}
ParaSet Fill()
int MaxTrack
Definition: RecDispNU.C:90
int maxgaps[6]
Definition: RecDispNU.C:36
bool use_mc_mass
Definition: RecDispNU.C:5
bool use_mc_momentum
Definition: RecDispNU.C:4
int rec_primary_vertex_ntracks_min
Definition: RecDispNU.C:9
bool usemom
Definition: RecDispNU.C:64
EdbPatternsVolume * vol
Definition: RecDispNU.C:116
float ProbMinV
Definition: RecDispNU.C:59
float AngleAcceptance
Definition: RecDispNU.C:57
void FillHistsV(Vertex &v)
Definition: RecDispNU.C:1102
float ProbMinT
Definition: RecDispNU.C:62
void GCodesInit()
Definition: RecDispNU.C:1245
int nsegMin
Definition: RecDispNU.C:63
float dpp
Definition: RecDispNU.C:30
float ProbMinP
Definition: RecDispNU.C:61
void FillPVGen()
Definition: RecDispNU.C:332
EdbScanCond * scan
Definition: RecDispNU.C:117
float ProbMinVN
Definition: RecDispNU.C:60
float RightRatioMin
Definition: RecDispNU.C:33
void FillHistsGen()
Definition: RecDispNU.C:1117
cout<< tr-> GetEntries()<< endl
Int_t npat
Definition: Xi2HatStartScript.C:33
Definition: EdbPVGen.h:18
void SetVolume(EdbPatternsVolume *pv)
Definition: EdbPVGen.h:34
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVGen.h:35
int MakeTracks(int nsegments=2, int flag=0)
Definition: EdbPVRec.cxx:1989
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
void FillTracksCell()
Definition: EdbPVRec.cxx:1319
void ResetCouples()
Definition: EdbPVRec.cxx:950
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
Definition: EdbPattern.h:334
Int_t Npatterns() const
Definition: EdbPattern.h:366
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1721
Float_t P() const
Definition: EdbSegP.h:152
Int_t Flag() const
Definition: EdbSegP.h:149
Float_t M() const
Definition: EdbPattern.h:155
const MATRIX::CMatrix & V() const
covariance matrix
Definition: VtTrack.C:205
Definition: VtVertex.hh:88
bool valid() const
is vertex valid?
Double_t X
Definition: tlg2couples.C:76
p
Definition: testBGReduction_AllMethods.C:8

◆ MassGeant()

double MassGeant ( int  val)
1312 {
1313double masses[50] = {
1314 0.,
1315 0.00051099906,
1316 0.00051099906,
1317 0.,
1318 0.105658389,
1319 0.105658389,
1320 0.1349764,
1321 0.1395700,
1322 0.1395700,
1323 0.497672,
1324 0.493677,
1325 0.493677,
1326 0.93956563,
1327 0.93827231,
1328 0.93827231,
1329 0.497672,
1330 0.54745 ,
1331 1.115684,
1332 1.18937 ,
1333 1.19255 ,
1334 1.197436,
1335 1.3149 ,
1336 1.32132 ,
1337 1.67245 ,
1338 0.93956563,
1339 1.115684,
1340 1.18937 ,
1341 1.19255 ,
1342 1.197436,
1343 1.3149 ,
1344 1.32132 ,
1345 1.67245 ,
1346 1.7771 ,
1347 1.7771 ,
1348 1.8694 ,
1349 1.8694 ,
1350 1.8646 ,
1351 1.8646 ,
1352 1.9685 ,
1353 1.9685 ,
1354 2.2851 ,
1355 80.220 ,
1356 80.220 ,
1357 91.187 ,
1358 1.875613,
1359 2.80925 ,
1360 3.727417,
1361 0. ,
1362 2.80923 ,
1363 0.};
1364
1365 if (abs(val) >= MAXCODES) return(0.13957);
1366 int gc = 0;
1367 if (val>=0) gc = Geant[val];
1368 else gc = Geant[MAXCODES-val];
1369 if(gc > 0)
1370 return masses[gc-1];
1371 else
1372 return(0.13957);
1373}

◆ Pdg2Geant()

int Pdg2Geant ( int  val)
1302 {
1303
1304 if (abs(val)>MAXCODES) return(-1);
1305
1306 if (val>=0 && (val < MAXCODES)) return( Geant[val] );
1307 else if (val < 0 && (-val < MAXCODES)) return( Geant[MAXCODES-val] );
1308 else return 8;
1309}

◆ RecDispNU()

void RecDispNU ( )
328{
329 init_rec();
330}
void init_rec(char *data_set="data_set.def")
Definition: RecDispNU.C:422

◆ run()

void run ( int  ib = 1,
int  ie = 100,
int  nutype = 2 
)
170{
171 // steering routine for event analysis
172 // take events with numbers from 'ib' to 'ie'
173 // nutype = 0 - NC events, 1 - CC events, 2 - NC & CC events
174
175 char line[80], nusmtype[7], nutyp[3];
176 FILE *frunlist = 0;
177 int i, j, k, evold;
178 int Event, Track, nV;
179 float Vt, Vx, Vy, Vz, VPx, VPy, VPz, Tx, Ty, P;
180
181 // initialize Geant Codes arrays
182 if (Geant[11] != 3) GCodesInit();
183 // save old runs.lst file
184 gSystem->Exec("mv -f runs.lst runs.lst.old &> /dev/null");
185 // find last event number for previos script execution
186 for (evold = 1; evold <= 100; evold++)
187 {
188 sprintf(line,"ls par/01_%03d.par &>/dev/null", evold);
189 if (!(gSystem->Exec(line))) break;
190 }
191 // book hists
192 BookHistsV();
193 // open file for write event data
194 if (write_mc_data) fmcdata = fopen("vertexes_and_tracks.data","w");
195 // loop on NC and CC collections
196 for (int nut = 0; nut < 2; nut++)
197 {
198 if (nut == 0 && nutype == 1) continue;
199 if (nut == 1 && nutype == 0) continue;
200 // build dir and file names for corresponding collection
201 if (nut == 0) { strcpy(nusmtype, "NC"); strcpy(nutyp, "nc"); }
202 if (nut == 1) { strcpy(nusmtype, "CC"); strcpy(nutyp, "cc"); }
203 // use data w/o smearing at generation phase
204 if (smear == 1) strcat(nusmtype,"_NOS");
205 // loop on events in selected (NC or CC) collection
206 for (i = ib; i <= ie; i++)
207 {
208 // set symbolic link for requested data directory
209 sprintf(line,"rm -f data &>/dev/null");
210 gSystem->Exec(line);
211 sprintf(line,"ln -s /mnt/nusrv3/opera/NUMU%s/numu%s.%03d data\n", nusmtype, nutyp, i);
212 gSystem->Exec(line);
213 // create runs.lst file
214 frunlist = fopen("runs.lst","w");
215 for (j = 58; j>0; j--)
216 {
217
218 if (evold != i)
219 {
220 sprintf(line,"mv -f par/%02d_%03d.par par/%02d_%03d.par\n", j, evold, j, i);
221 gSystem->Exec(line);
222 }
223 sprintf(line,"%d %d data/%02d_%03d.cp.root 1\n", j, i, j, i);
224 fprintf(frunlist,"%s",line);
225 }
226 evold = i;
227 fclose(frunlist);
228 // clear some counters ( <=500 tracks, <=500 vertexes)
229 for (j = 0; j<500; j++) Pt[j] = -100.;
230 for (j = 0; j<500; j++) VTx[j] = -1000000.;
231 Ntr = 0;
232 Nvt = 0;
233 for (j = 0; j<500; j++) Nst[j] = 0;
234 for (j = 0; j<500; j++) Nvtr[j] = 0;
235 for (j = 0; j<500; j++) Numgent[j] = -1;
236 for (j = 0; j<500; j++) Numgenv[j] = -1;
237 for (j = 0; j<500; j++) TMass[j] = -1;
238 // open ROOT file with microtrack information
239 sprintf(filename, "/mnt/nusrv3/opera/NUMU%s/numu%s.%03d/numu%s.%03d.root", nusmtype, nutyp, i, nutyp, i);
240 INfile = &filename[0];
241 fmicro = new TFile(INfile);
242 TreeMS = (TTree*)fmicro->Get("TreeMS");
243 micro = new My_Track(TreeMS, INfile);
244
245
246 int nentries_micro = Int_t(micro->fChain->GetEntriesFast());
247 MaxTrack = 0;
248 MaxVertex = 0;
249 k = 0;
250 // loop on file entries (microtracks) and fill arrays with
251 // tracks parameters
252 while(k<nentries_micro){
253 micro->GetEntry(k);
254 k++;
255 Event = micro->Event;
256 Track = micro->Track;
257 nV = micro->nV;
258 if (nV != 1 && only_primary_vertex) continue;
259 Vt = micro->Vt;
260 Vx = micro->VTX[0];
261 Vy = micro->VTX[1];
262 Vz = micro->VTX[2];
263 VPx = micro->VPx;
264 VPy = micro->VPy;
265 VPz = micro->VPz;
266 P = TMath::Sqrt(VPx*VPx + VPy*VPy + VPz*VPz);
267 Tx = VPx/VPz;
268 Ty = VPy/VPz;
269 P = micro->P;
270 if (Track >= 500) continue;
271 if (Pt[Track] == -100.) // first occurence for track
272 {
273 Ntr++;
274 Pt[Track] = P;
275 PdgId[Track] = micro->PdgId;
276 TXt[Track] = Tx;
277 TYt[Track] = Ty;
278 NVt[Track] = nV;
280 if (VPz <= 0.) DIRt[Track] = -1.;
281 else DIRt[Track] = +1.;
282 Numvtr[nV][Nvtr[nV]] = Track;
283 Nvtr[nV]++;
284 if (Track > MaxTrack) MaxTrack = Track;
285 }
286 if (nV >= 500) continue;
287 if (VTx[nV] == -1000000.) // first occurence for vertex
288 {
289 Nvt++;
290 VTx[nV] = Vx;
291 VTy[nV] = Vy;
292 VTz[nV] = Vz;
293 if (nV > MaxVertex) MaxVertex = nV;
294 }
295 Nst[Track]++;
296 }
297 for (j = 0; j < MaxTrack; j++)
298 {
299 Nst[j] /= 2; // number of basetracks (microtracs/2)
300 }
301 init_rec(); // reconstruct one event
302 delete micro;
303 micro = 0;
304 fmicro = 0;
305 }
306 }
307
309
310 // rename .par files to event number 1
311 for (j = 58; j>0; j--)
312 {
313 sprintf(line,"mv -f par/%02d_%03d.par par/%02d_%03d.par &>/dev/null\n", j, i-1, j, 1);
314 gSystem->Exec(line);
315 }
316 if (scanning) return;
317 // save hists
318 rf = new TFile("RecDispNU.root","RECREATE","MC Vertex reconstruction");
319 hlist.Write();
320 rf->Close();
321 delete rf;
322 rf = 0;
323 printf(" Shift in Z0 is %f\n", z0shift);
324}
const char filename[256]
Definition: RecDispNU.C:83
const char * INfile
Definition: RecDispNU.C:84
TFile * rf
Definition: RecDispNU.C:72
int Nvt
Definition: RecDispNU.C:89
TTree * TreeMS
Definition: RecDispNU.C:87
bool smear
Definition: RecDispNU.C:14
int NVt[500]
Definition: RecDispNU.C:102
TFile * fmicro
Definition: RecDispNU.C:85
My_Track * micro
Definition: RecDispNU.C:86
bool scanning
Definition: RecDispNU.C:11
void BookHistsV()
Definition: RecDispNU.C:1014
bool only_primary_vertex
Definition: RecDispNU.C:6
int Ntr
Definition: RecDispNU.C:88
double MassGeant(int val)
Definition: RecDispNU.C:1312
strcpy(cmd,"cp Shower.root Shower2.root")
fclose(pFile)

◆ scan1()

void scan1 ( )
141{
142 // analyze one event in scanning mode
143 evnum++;
144 if (evnum > 100)
145 {
146 if (nutype == 0)
147 {
148 evnum = 1;
149 nutypes = 1;
150 }
151 else
152 {
153 printf("No more events!");
154 evnum = 0;
155 scanning = false;
156 return;
157 }
158 }
160}
int evnum
Definition: RecDispNU.C:119
int nutypes
Definition: RecDispNU.C:121
void run(int ib=1, int ie=100, int nutype=2)
Definition: RecDispNU.C:169

◆ scanend()

void scanend ( )
163{
164 // stop scanning routine
165 scanning = false;
166 evnum = 0;
167}

◆ SmearSegments()

void SmearSegments ( )
1376{
1377 // smearing with parameters defined by ScanCond
1378
1379 Float_t x,y,z,tx,ty;
1380 Float_t sx,sy,sz,stx,sty,sumz, sumzold;
1381
1382 EdbPattern *pat = 0;
1383 EdbSegP *seg = 0;
1384 EdbTrackP *tr = 0;
1385 int trgind = 0, Track = 0;
1386 int n = vol->Npatterns();
1387
1388 sumzold = -1.;
1389 for( int i=0; i<n; i++ ) {
1390 pat = vol->GetPattern(i);
1391
1392 sumz = 0.;
1393 for( int j=0; j<pat->N(); j++ ) {
1394 seg = pat->GetSegment(j);
1395
1396 Track = seg->Aid(1);
1397 trgind = -1;
1398 if (Track < 500) trgind = Numgent[Track];
1399 if (gener && trgind >= 0)
1400 {
1401 if (gener->eTracks)
1402 {
1403 if (trgind < gener->eTracks->GetEntries())
1404 {
1405 tr = (EdbTrackP *)gener->eTracks->At(trgind);
1406 if (tr) tr->AddSegment(seg);
1407 }
1408 }
1409 }
1410 if (smear)
1411 {
1412 sx = scan->SigmaX(seg->TX());
1413 sy = scan->SigmaY(seg->TY());
1414 sz = 0.;
1415 stx = scan->SigmaTX(seg->TX());
1416 sty = scan->SigmaTY(seg->TY());
1417
1418 x = gRandom->Gaus(seg->X(), sx);
1419 y = gRandom->Gaus(seg->Y(), sy);
1420 z = gRandom->Gaus(seg->Z(), sz);
1421 tx = gRandom->Gaus(seg->TX(), stx);
1422 ty = gRandom->Gaus(seg->TY(), sty);
1423
1424 seg->Set( seg->ID(), x, y, tx, ty, seg->W(), seg->Flag());
1425 seg->SetErrorsCOV( sx*sx, sy*sy, sz*sz, stx*stx, sty*sty );
1426 }
1427 if (setz)
1428 {
1429 z = seg->Z();
1430 sumz += z;
1431 hpp[0]->Fill(i, z);
1432 if (i && sumzold != -1.) hp[31]->Fill(sumzold - z);
1433 seg->SetZ( (n - i - 1)*1290. );
1434 }
1435 }
1436 if (pat->N()) sumzold = sumz/pat->N();
1437 else sumzold = -1.;
1438 }
1439}
bool setz
Definition: RecDispNU.C:15
Definition: EdbPattern.h:273
float SigmaTX(float ax) const
Definition: EdbScanCond.h:106
float SigmaTY(float ay) const
Definition: EdbScanCond.h:107
float SigmaX(float ax) const
Definition: EdbScanCond.h:102
float SigmaY(float ay) const
Definition: EdbScanCond.h:103
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
void SetErrorsCOV(float sx2, float sy2, float sz2, float stx2, float sty2, float sp2=1.)
Definition: EdbSegP.cxx:72
Int_t ID() const
Definition: EdbSegP.h:147
Float_t X() const
Definition: EdbSegP.h:173
Float_t Z() const
Definition: EdbSegP.h:153
Float_t Y() const
Definition: EdbSegP.h:174
Float_t W() const
Definition: EdbSegP.h:151
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
Int_t Aid(int i) const
Definition: EdbSegP.h:169
Int_t N() const
Definition: EdbPattern.h:86
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66

Variable Documentation

◆ AngleAcceptance

float AngleAcceptance = 1.5

◆ back1_tetamax

float back1_tetamax = 0.35

◆ back2_plim

float back2_plim[2] = {0.5, 5.5}

◆ back2_tetamax

float back2_tetamax = 0.25

◆ DIRt

float DIRt[500]

◆ dpp

float dpp = 0.20

◆ ds

EdbDisplay* ds =0

◆ ds2

EdbDisplay* ds2 =0

◆ dset

EdbDataProc* dset =0

◆ evnum

int evnum = 0

◆ fiducial_border

float fiducial_border = 20000.

◆ fiducial_border_z

float fiducial_border_z = 20000.

◆ filename

const char filename[256]

◆ fmcdata

FILE* fmcdata = 0

◆ fmicro

TFile* fmicro

◆ gAli

EdbPVRec* gAli =0

◆ Geant

int Geant[2 *MAXCODES]

◆ gener

EdbPVGen* gener =0

◆ hld1

TObjArray hld1

◆ hld2

TObjArray hld2

◆ hld3

TObjArray hld3

◆ hld4

TObjArray hld4

◆ hld5

TObjArray hld5

◆ hld6

TObjArray hld6

◆ hld7

TObjArray hld7

◆ hld8

TObjArray hld8

◆ hlist

TObjArray hlist

◆ hp

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

◆ hpp

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

◆ INfile

const char* INfile = &filename[0]

◆ log

FILE* log
extern

◆ maxgaps

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

◆ MaxTrack

int MaxTrack = 0

◆ MaxVertex

int MaxVertex = 0

◆ micro

My_Track* micro = 0

◆ nsegMin

int nsegMin = 2

◆ Nst

int Nst[500]

◆ ntgood

int ntgood = 0

◆ Ntr

int Ntr = 0

◆ ntrgood_gen1

int ntrgood_gen1 = 0

◆ Numgent

int Numgent[500]

◆ Numgenv

int Numgenv[500]

◆ Numvtr

float Numvtr[500][500]

◆ nutypes

int nutypes = 0

◆ nvggood

int nvggood = 0

◆ Nvt

int Nvt = 0

◆ NVt

int NVt[500]

◆ Nvtr

float Nvtr[500]

◆ only_primary_vertex

bool only_primary_vertex = true

◆ PdgId

int PdgId[500]

◆ primary_vertex_ntracks_min

int primary_vertex_ntracks_min = 2

◆ 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

◆ Pt

float Pt[500]

◆ rec_primary_vertex_ntracks_min

int rec_primary_vertex_ntracks_min = 2

◆ rf

TFile* rf =0

◆ RightRatioMin

float RightRatioMin = 0.5

◆ scan

void scan =0

◆ scanning

bool scanning = false

◆ seg_s

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

◆ setz

bool setz = true

◆ smass

double smass = 0.1395700

◆ smear

bool smear = true

◆ stderr

FILE* stderr
extern

◆ stdout

FILE* stdout
extern

◆ TMass

float TMass[500]

◆ TreeMS

TTree* TreeMS = 0

◆ TXt

float TXt[500]

◆ TYt

float TYt[500]

◆ use_mc_mass

bool use_mc_mass = false

◆ use_mc_momentum

bool use_mc_momentum = false

◆ usemom

bool usemom =false

◆ vol

◆ VTx

float VTx[500]

◆ VTy

float VTy[500]

◆ VTz

float VTz[500]

◆ vxg

float vxg = 0.

◆ vxo

float vxo = 0.

◆ vyg

float vyg = 0.

◆ vyo

float vyo = 0.

◆ vzg

float vzg = 0.

◆ vzo

float vzo = 0.

◆ write_mc_data

bool write_mc_data = false

◆ z0shift

float z0shift = 295.