File indexing completed on 2025-12-16 09:18:03
0001 #ifndef InttSeedTrackPerformance_cxx
0002 #define InttSeedTrackPerformance_cxx
0003
0004 #include "InttSeedTracking.h"
0005 #include "InttSeedTrackPerformance.h"
0006
0007
0008 #include <TStyle.h>
0009 #include <TCanvas.h>
0010
0011 #include "SPHTracKuma.h"
0012
0013 bool bCaloClu = false;
0014 Int_t strockEvents = 1;
0015
0016 void InttSeedTrackPerformance::Loop(Int_t runNum)
0017 {
0018 if (fChain == 0) return;
0019 HistInit();
0020
0021 Long64_t nentries = fChain->GetEntriesFast();
0022 Long64_t nbytes = 0, nb = 0;
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 bool bTargetEV = false;
0033 std::vector<Int_t > vTargetEvents = {};
0034
0035
0036
0037
0038
0039
0040 for (Long64_t jentry=(1000*runNum); jentry<(1000*runNum + 9900); jentry++) {
0041
0042
0043 Long64_t tempJEntry = jentry;
0044 if(bTargetEV) jentry = vTargetEvents.at(jentry);
0045 pubEvNum = jentry;
0046
0047 Long64_t ientry = LoadTree(jentry);
0048 if (ientry < 0) break;
0049 nb = fChain->GetEntry(jentry); nbytes += nb;
0050
0051 if(jentry%100 == 0) std::cout << " == event" << jentry << " =====" << std::endl;
0052
0053 CheckPrimP(m_TruthParticle);
0054
0055
0056
0057 ReadInttHitting(m_fMvtxHits, m_sMvtxHits, m_tMvtxHits, m_iInttHits, m_oInttHits, m_TpcHits);
0058 if(bCaloClu) ReadCalCluHitting(m_emcalHits, m_iHCalHits, m_oHCalHits);
0059 else ReadCalHitting(m_emcalHits, m_iHCalHits, m_oHCalHits);
0060
0061
0062
0063
0064 m_vTruthParticle.push_back(m_TruthParticle);
0065 m_viInttHits.push_back(m_iInttHits);
0066 m_voInttHits.push_back(m_oInttHits);
0067 m_vTpcHits.push_back(m_TpcHits);
0068 m_vemcalHits.push_back(m_emcalHits);
0069 m_viHCalHits.push_back(m_iHCalHits);
0070 m_voHCalHits.push_back(m_oHCalHits);
0071 if(jentry%strockEvents == 0){
0072 for(Int_t iEvent = 0; iEvent < strockEvents; iEvent++){
0073 m_iInttHits = m_viInttHits.at(iEvent);
0074 m_oInttHits = m_voInttHits.at(iEvent);
0075 m_TpcHits = m_vTpcHits.at(iEvent);
0076 m_emcalHits = m_vemcalHits.at(iEvent);
0077 InttSeedTracking *TracKumaContainer = new InttSeedTracking(m_tracks, m_fMvtxHits, m_sMvtxHits, m_tMvtxHits, m_viInttHits.at(iEvent), m_voInttHits.at(iEvent),\
0078 m_vemcalHits.at(iEvent), m_viHCalHits.at(iEvent), m_voHCalHits.at(iEvent));
0079 CaloEnergyQA(0, m_vemcalHits.at(iEvent));
0080 CaloEnergyQA(1, m_viHCalHits.at(iEvent));
0081 CaloEnergyQA(2, m_voHCalHits.at(iEvent));
0082 TrackQA(m_vTruthParticle.at(iEvent), m_vemcalHits.at(iEvent));
0083 m_bDecayEvent = false;
0084 }
0085 AllResetValuesForEvent();
0086 }
0087
0088 PartResetValuesForEvent();
0089
0090 if(bTargetEV) jentry = tempJEntry;
0091 }
0092
0093
0094 WrightHists();
0095
0096 std::cout << "std::vector<Int_t > vTargetEvents = {";
0097 for(Int_t i = 0; i < m_vTargetEvents.size(); i++) std::cout << m_vTargetEvents.at(i) << ", ";
0098 std::cout << "};" << std::endl;
0099 }
0100
0101 void InttSeedTrackPerformance::HistInit(){
0102 m_HINTTHitMap = new TH2D( "m_HINTTHitMap", "Global Hit Map;x [cm];y [cm]",
0103 2000, -100., 100., 2000, -100., 100. );
0104
0105 m_HGlobalHitMap = new TH2D( "m_HGlobalHitMap", "Global Hit Map;x [cm];y [cm]",
0106 5000, -250., 250., 2500, 0., 250. );
0107
0108
0109 m_HMatchCalEVsHighestCalE = new TH1D( "m_HMatchCalEVsHighestCalE", \
0110 "EMCal Energy disparsion map;phi [rad];E [MeV]", \
0111 320, -1.6, 1.6);
0112
0113 m_HdPhiInttdPhiECal = new TH2D( "m_HdPhiInttdPhiECal", \
0114 "EMCal Energy disparsion map;d#it{#phi}_{INTT} [rad];d#it{#phi}_{ECal} [rad]", \
0115 320, -1.6, 1.6, 320, -1.6, 1.6);
0116 m_HTruthPtVsdPhiInttdPhiECal = new TH2D( "m_HTruthPtVsdPhiInttdPhiECal", \
0117 "truth pT vs dPhi (INTT to ECal);#it{p}_{T, truth} [cm];dPhi [rad]", \
0118 150, 0., 15., 6, -3., 3. );
0119
0120 m_HTruthPtVsdPhiIIntt = new TH2D( "m_HTruthPtVsdPhiIIntt", \
0121 "truth pT vs dPhi (vertex to iINTT);#it{p}_{T, truth} [cm];dPhi [rad]",
0122 150, 0., 15., 6, -3., 3. );
0123 m_HTruthPtVsdPhiOIntt = new TH2D( "m_HTruthPtVsdPhiOIntt", \
0124 "truth pT vs dPhi (vertex to oINTT);#it{p}_{T, truth} [cm];dPhi [rad]",
0125 150, 0., 15., 6, -3., 3. );
0126
0127
0128
0129 m_HTruthPtVsSagittaPt_rough = new TH3D( "m_HTruthPtVsSagittaPt_rough", \
0130 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0131 150, 0., 15., 250, -2., 2., 20, -1., 1);
0132 m_HTruthPtVsSagittaPt_VtxIntt = new TH3D( "m_HTruthPtVsSagittaPt_VtxIntt", \
0133 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0134 150, 0., 15., 250, -2., 2., 20, -1., 1);
0135 m_HTruthPtVsSagittaPt_InttEmcal = new TH3D( "m_HTruthPtVsSagittaPt_InttEmcal", \
0136 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0137 150, 0., 15., 250, -2., 2., 20, -1., 1);
0138 m_HTruthPtVsSagittaPt_VtxInttEmcal = new TH3D( "m_HTruthPtVsSagittaPt_VtxInttEmcal", \
0139 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0140 150, 0., 15., 250, -2., 2., 20, -1., 1);
0141 m_HTruthPtVsSagittaPt_MvtxInttEmcal = new TH3D( "m_HTruthPtVsSagittaPt_MvtxInttEmcal", \
0142 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0143 150, 0., 15., 250, -2., 2., 20, -1., 1);
0144 m_HTruthPtVsSagittaPt_VtxMvtxInttEmcal = new TH3D( "m_HTruthPtVsSagittaPt_VtxMvtxInttEmcal", \
0145 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0146 150, 0., 15., 250, -2., 2., 20, -1., 1);
0147
0148 m_HTruthPtVsFitFuncPt_IInttOInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_IInttOInttEmcal", \
0149 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0150 150, 0., 15., 250, -2., 2., 20, -1., 1);
0151
0152 m_HTruthPtVsFitFuncPt_VtxIInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_VtxIInttEmcal", \
0153 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0154 150, 0., 15., 250, -2., 2., 20, -1., 1);
0155 m_HTruthPtVsFitFuncPt_VtxOInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_VtxOInttEmcal", \
0156 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0157 150, 0., 15., 250, -2., 2., 20, -1., 1);
0158 m_HTruthPtVsFitFuncPt_VtxInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_VtxInttEmcal", \
0159 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0160 150, 0., 15., 250, -2., 2., 20, -1., 1);
0161
0162 m_HTruthPtVsFitFuncPt_MvtxIInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_MVtxIInttEmcal", \
0163 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0164 150, 0., 15., 250, -2., 2., 20, -1., 1);
0165 m_HTruthPtVsFitFuncPt_MvtxOInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_MVtxOInttEmcal", \
0166 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0167 150, 0., 15., 250, -2., 2., 20, -1., 1);
0168 m_HTruthPtVsFitFuncPt_MvtxInttEmcal = new TH3D( "m_HTruthPtVsFitFuncPt_MVtxInttEmcal", \
0169 "truth pT vs delta pt;#it{p}_{T} [GeV/#it{c}];#it{#delta}#it{p}_{T}/#it{p}_{T};#eta",
0170 150, 0., 15., 250, -2., 2., 20, -1., 1);
0171
0172
0173
0174 m_HTruthPVsTheta_InttEmcal = new TH2D( "m_HTruthPVsTheta_InttEmcal", \
0175 "truth p vs delta pt;#it{p} [GeV/#it{c}];#it{#delta}#it{#theta}",
0176 150, 0., 15., 100, -0.5, 0.5 );
0177 m_HTruthPVsTheta_MvtxInttEmcal = new TH2D( "m_HTruthPVsTheta_MvtxInttEmcal", \
0178 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{#delta}#it{#theta}",
0179 150, 0., 15., 100, -0.5, 0.5 );
0180
0181
0182 m_HTruthPVsPhi_InttEmcal = new TH2D( "m_HTruthPVsPhi_InttEmcal", \
0183 "truth p vs delta pt;#it{p} [GeV/#it{c}];#it{#delta}#it{#phi}",
0184 150, 0., 15., 100, -0.5, 0.5 );
0185 m_HTruthPVsPhi_MvtxInttEmcal = new TH2D( "m_HTruthPVsPhi_MvtxInttEmcal", \
0186 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{#delta}#it{#phi}",
0187 150, 0., 15., 100, -0.5, 0.5 );
0188
0189
0190 m_HTruthPVsRecoP_InttEmcal = new TH2D( "m_HTruthPVsRecoP_InttEmcal", \
0191 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{#delta}#it{p}/#it{p}",
0192 150, 0., 15., 50, -2.5, 2.5 );
0193 m_HTruthPVsRecoP_MvtxInttEmcal = new TH2D( "m_HTruthPVsRecoP_MvtxInttEmcal", \
0194 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{#delta}#it{p}/#it{p}",
0195 150, 0., 15., 50, -2.5, 2.5 );
0196 m_HTruthPVsRecoP_FitFunc = new TH2D( "m_HTruthPVsRecoP_FitFunc", \
0197 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{#delta}#it{p}/#it{p}",
0198 150, 0., 15., 50, -2.5, 2.5 );
0199
0200
0201 m_HDE = new TH3D( "m_HDE", "truth E vs Reco E;#it{E} [MeV];#it{#delta}#it{E}/#it{E};#eta",
0202 200, 0., 20., 50, -2.5, 2.5, 20, -1., 1);
0203
0204
0205 m_HTruthPVsEOverP_InttEmcal = new TH2D( "m_HTruthPVsEOverP_InttEmcal", \
0206 "truth p vs delta pt;#it{p} [GeV/#it{c}];#it{E}/#it{p}",
0207 150, 0., 15., 60, 0., 3. );
0208 m_HTruthPVsEOverP_MvtxInttEmcal = new TH2D( "m_HTruthPVsEOverP_MvtxInttEmcal", \
0209 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{E}/#it{p}",
0210 150, 0., 15., 60, 0., 3. );
0211 m_HTruthPVsEOverP_FitFunc = new TH2D( "m_HTruthPVsEOverP_FitFunc", \
0212 "truth p vs delta p;#it{p} [GeV/#it{c}];#it{E}/#it{p}",
0213 150, 0., 15., 60, 0., 3. );
0214
0215
0216 m_dVtxXY_InttEmcal = new TH2D( "m_dVtxXY_InttEmcal", "vertexReso;d#it{X}_{(reco - truth)} [cm];d#it{Y}_{(reco - truth)} [cm];count", 1000, -50., 50., 1000, -50., 50.);
0217 m_dVtxXY_MvtxInttEmcal = new TH2D( "m_dVtxXY_MvtxInttEmcal", "vertexReso;d#it{X}_{(reco - truth)} [cm];d#it{Y}_{(reco - truth)} [cm];count", 1000, -50., 50., 1000, -50., 50.);
0218
0219 m_dVtxR_InttEmcal = new TH1D( "m_dVtxR_InttEmcal", "vertexReso;d#it{R}_{(reco - truth)} [cm];count", 500, 0., 50.);
0220 m_dVtxR_MvtxInttEmcal = new TH1D( "m_dVtxR_MvtxInttEmcal", "vertexReso;d#it{R}_{(reco - truth)} [cm];count", 500, 0., 50.);
0221
0222 m_dVtxZ_InttEmcal = new TH1D( "m_dVtxZ_InttEmcal", "vertexReso;d#it{Z}_{(reco - truth)} [cm];count", 1000, -50., 50.);
0223 m_dVtxZ_MvtxInttEmcal = new TH1D( "m_dVtxZ_MvtxInttEmcal", "vertexReso;d#it{Z}_{(reco - truth)} [cm];count", 1000, -50., 50.);
0224
0225
0226 m_HECalPhiVsE = new TProfile2D( "m_HECalPhiVsE", "EMCal Energy disparsion map;#phi [rad];#eta;E [MeV]", 320, -1.6, 1.6, 300, -1.5, 1.5);
0227 m_HIHCalPhiVsE = new TProfile2D( "m_HIHCalPhiVsE", "iHCal Energy disparsion map;#phi [rad];#eta;E [MeV]", 320, -1.6, 1.6, 300, -1.5, 1.5);
0228 m_HOHCalPhiVsE = new TProfile2D( "m_HOHCalPhiVsE", "oHCal Energy disparsion map;#phi [rad];#eta;E [MeV]", 320, -1.6, 1.6, 300, -1.5, 1.5);
0229
0230
0231
0232 m_HDPhiVsDStraightVsTruPt = new TH3D("m_HDPhiVsDStraightVsTruPt", "dPhi/dl between vertex and inner INTT;d#it{l} [cm];d#it{phi} [rad];#it{p}_{T} [GeV/#it{c}];", 150, 0., 150., 100, -0.05, 0.05, 150, 0., 15.);
0233
0234 m_HDPhiDStraight_VtxIIntt = new TH2D("m_HDPhiDStraight_VtxIIntt", "dPhi/dl between vertex and inner INTT;#it{p}_{T} [GeV/#it{c}];d#it{phi}/d#it{l} [rad/cm]", 150, 0., 15., 100, -0.05, 0.05);
0235 m_HDPhiDStraight1D_VtxIIntt = new TH1D("m_HDPhiDStraight1D_VtxIIntt", "dPhi/dl between vertex and inner INTT;d#it{phi}/d#it{l} [rad/cm];count", 100, -0.05, 0.05);
0236
0237 m_HDPhiDStraight_IInttOIntt = new TH2D("m_HDPhiDStraight_IInttOIntt", "dPhi/dl between vertex and inner INTT;#it{p}_{T} [GeV/#it{c}];d#it{phi}/d#it{l} [rad/cm]", 150, 0., 15., 100, -0.05, 0.05);
0238 m_HDPhiDStraight1D_IInttOIntt = new TH1D("m_HDPhiDStraight1D_IInttOIntt", "dPhi/dl between vertex and inner INTT;d#it{phi}/d#it{l} [rad/cm];count", 100, -0.05, 0.05);
0239
0240 m_HTruthPtVsDdPhiddStraight_IInttOInttEmcal = new TH2D("m_HTruthPtVsDdPhiddStraight_IInttOInttEmcal", "dPhi/dl between vertex and inner INTT;#it{p}_{T} [GeV/#it{c}];d#it{phi}/d#it{l} [rad/cm]", 150, 0., 15., 100, -0.05, 0.05);
0241
0242 m_HDPhiDStraight_OInttEmcal = new TH2D("m_HDPhiDStraight_OInttEmcal", "dPhi/dl between vertex and inner INTT;#it{p}_{T} [GeV/#it{c}];d#it{phi}/d#it{l} [rad/cm]", 150, 0., 15., 100, -0.05, 0.05);
0243 m_HDPhiDStraight1D_OInttEmcal = new TH1D("m_HDPhiDStraight1D_OInttEmcal", "dPhi/dl between vertex and inner INTT;d#it{phi}/d#it{l} [rad/cm];count", 100, -0.05, 0.05);
0244
0245
0246 m_HDLVsTruthPtVsEta_VtxIIntt = new TH3D( "m_HDLVsTruthPtVsEta_VtxIIntt", \
0247 "truth pT vs shift distanse (L);L [cm];#it{p}_{T} [GeV/#it{c}];#eta",
0248 1200, -10., 10., 1000, -50., 50., 20, -1., 1);
0249 m_HDL1D_VtxIIntt = new TH1D( "m_HDL1D_VtxIIntt", \
0250 "truth pT vs shift distanse (L);L [cm]; count", 200, -10., 10.);
0251 m_HDLVsTruthPtVsEta_IInttOIntt = new TH3D( "m_HDLVsTruthPtVsEta_IInttOIntt", \
0252 "truth pT vs shift distanse (L);L [cm];#it{p}_{T} [GeV/#it{c}];#eta",
0253 200, -10., 10., 1000, -50., 50., 20, -1., 1);
0254 m_HDL1D_IInttOIntt = new TH1D( "m_HDL1D_IInttOIntt", \
0255 "truth pT vs shift distanse (L);L [cm]; count", 200, -10., 10.);
0256 m_HDLVsTruthPtVsEta_OInttEmcal = new TH3D( "m_HDLVsTruthPtVsEta_OInttEmcal", \
0257 "truth pT vs shift distanse (L);L [cm];#it{p}_{T} [GeV/#it{c}];#eta",
0258 1000, -50., 50., 1000, -50., 50., 20, -1., 1);
0259 m_HDL1D_OInttEmcal = new TH1D( "m_HDL1D_OInttEmcal", \
0260 "truth pT vs shift distanse (L);L [cm]; count", 1000, -50., 50.);
0261
0262
0263 m_HDPhiVsTruthPtVsEta_VtxIIntt = new TH3D( "m_HDPhiVsTruthPtVsEta_VtxIIntt", \
0264 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0265 200, -1., 1., 150, 0., 15., 10, -1., 1);
0266 m_HDPhiVsTruthPtVsEta_IInttOIntt = new TH3D( "m_HDPhiVsTruthPtVsEta_IInttOIntt", \
0267 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0268 200, -1., 1., 150, 0., 15., 10, -1., 1);
0269 m_HDPhiVsTruthPtVsEta_OInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_OInttEmcal", \
0270 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0271 200, -1., 1., 150, 0., 15., 10, -1., 1);
0272
0273
0274 m_HDPhiVsTruthPtVsEta_IInttOInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_IInttOInttEmcal", \
0275 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0276 200, -1., 1., 150, 0., 15., 10, -1., 1);
0277
0278 m_HDPhiVsTruthPtVsEta_VtxIInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_VtxIInttEmcal", \
0279 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0280 200, -1., 1., 150, 0., 15., 10, -1., 1);
0281 m_HDPhiVsTruthPtVsEta_VtxOInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_VtxOInttEmcal", \
0282 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0283 200, -1., 1., 150, 0., 15., 10, -1., 1);
0284 m_HDPhiVsTruthPtVsEta_VtxInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_VtxInttEmcal", \
0285 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0286 200, -1., 1., 150, 0., 15., 10, -1., 1);
0287
0288 m_HDPhiVsTruthPtVsEta_MvtxIInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_MvtxIInttEmcal", \
0289 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0290 200, -1., 1., 150, 0., 15., 10, -1., 1);
0291 m_HDPhiVsTruthPtVsEta_MvtxOInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_MvtxOInttEmcal", \
0292 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0293 200, -1., 1., 150, 0., 15., 10, -1., 1);
0294 m_HDPhiVsTruthPtVsEta_MvtxInttEmcal = new TH3D( "m_HDPhiVsTruthPtVsEta_MvtxInttEmcal", \
0295 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];#eta",
0296 200, -1., 1., 150, 0., 15., 10, -1., 1);
0297
0298 m_HDPhiVsTruthPtProf_IInttOInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_IInttOInttEmcal", \
0299 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];", 200, -1., 1.);
0300 m_HDPhiVsTruthPtProf_VtxIIntt = new TProfile( "m_HDPhiVsTruthPtProf_VtxIIntt", \
0301 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}];", 200, -1., 1.);
0302 m_HDPhiVsTruthPtProf_IInttOIntt = new TProfile( "m_HDPhiVsTruthPtProf_IInttOIntt", \
0303 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]", 200, -1., 1.);
0304 m_HDPhiVsTruthPtProf_OInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_OInttEmcal", \
0305 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]", 200, -1., 1.);
0306
0307 m_HDPhiVsTruthPtProf_VtxIInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_VtxIInttEmcal", \
0308 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]", 200, -1., 1.);
0309 m_HDPhiVsTruthPtProf_VtxOInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_VtxOInttEmcal", \
0310 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]",200, -1., 1.);
0311 m_HDPhiVsTruthPtProf_VtxInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_VtxInttEmcal", \
0312 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]", 200, -1., 1.);
0313
0314 m_HDPhiVsTruthPtProf_MvtxIInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_MvtxIInttEmcal", \
0315 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]",200, -1., 1.);
0316 m_HDPhiVsTruthPtProf_MvtxOInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_MvtxOInttEmcal", \
0317 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]", 200, -1., 1.);
0318 m_HDPhiVsTruthPtProf_MvtxInttEmcal = new TProfile( "m_HDPhiVsTruthPtProf_MvtxInttEmcal", \
0319 "truth pT vs shift distanse (L);#phi [rad];#it{p}_{T} [GeV/#it{c}]", 200, -1., 1.);
0320
0321
0322 m_HPtEfficiency = new TH1D( "m_HPtEfficiency", \
0323 "reconstrucntion efficinecy for pT;#it{p}_{T} [GeV/#it{c}];Efficiency [%]", 150, 0., 15);
0324 m_HTruTrackNum = new TH1D( "m_HTruTrackNum", \
0325 "reconstrucntion efficinecy for pT;#it{p}_{T} [GeV/#it{c}];Efficiency [%]", 150, 0., 15);
0326 }
0327
0328
0329 void InttSeedTrackPerformance::CheckPrimP(std::vector<hitStruct >& vTruthParticle){
0330 Int_t numOfP = PrimaryG4P_PID->size();
0331 if(numOfP == 0) return;
0332
0333 for(Int_t iP = 0; iP < numOfP; iP++){
0334 hitStruct truthParticle;
0335 Double_t pPhi = PrimaryG4P_Phi->at(iP);
0336 Double_t pEta = PrimaryG4P_Eta->at(iP);
0337 Double_t pE = PrimaryG4P_E->at(iP);
0338 Double_t pPt = PrimaryG4P_Pt->at(iP);
0339
0340 truthParticle.phi = pPhi;
0341 truthParticle.eta = pEta;
0342 truthParticle.pt = pPt;
0343 truthParticle.energy = pE;
0344
0345 vTruthParticle.push_back(truthParticle);
0346 }
0347 }
0348
0349 void InttSeedTrackPerformance::ReadInttHitting(std::vector<hitStruct >& vFMvtxHits,\
0350 std::vector<hitStruct >& vSMvtxHits, std::vector<hitStruct >& vTMvtxHits,\
0351 std::vector<hitStruct >& vIInttHits, std::vector<hitStruct >& vOInttHits,\
0352 std::vector<hitStruct >& vTpcHits)
0353 {
0354 Int_t numOfClu = trk_system->size();
0355 if(numOfClu == 0) return;
0356
0357 for(Int_t iClu = 0; iClu < numOfClu; iClu++)
0358 {
0359 Int_t CluSysId = trk_system->at(iClu);
0360 Int_t CluLayId = trk_layer->at(iClu);
0361
0362
0363
0364 Double_t CluX = trk_X->at(iClu);
0365 Double_t CluY = trk_Y->at(iClu);
0366 Double_t CluZ = trk_Z->at(iClu);
0367
0368 Double_t CluR = sqrt(CluX*CluX + CluY*CluY);
0369 Double_t CluPhi = std::atan(CluY/CluX);
0370 if((CluPhi < 0)&&(CluX < 0)) CluPhi += TMath::Pi();
0371 else if((CluPhi > 0)&&(CluX < 0)) CluPhi -= TMath::Pi();
0372
0373 Double_t CluTheta = std::atan(CluR/CluZ);
0374 Double_t CluEta = (CluZ/std::abs(CluZ)) * (- log(std::abs(std::tan(CluTheta/2))));
0375
0376 CluX = CluR*std::cos(CluPhi);
0377 CluY = CluR*std::sin(CluPhi);
0378 m_HINTTHitMap->Fill(CluX, CluY);
0379
0380 hitStruct cluHit;
0381 cluHit.r = CluR;
0382 cluHit.z = CluZ;
0383 cluHit.phi = CluPhi;
0384 cluHit.eta = CluEta;
0385
0386 if(CluSysId == 0)
0387 {
0388 if(CluLayId == 0) vFMvtxHits.push_back(cluHit);
0389 else if(CluLayId == 1) vSMvtxHits.push_back(cluHit);
0390 else if(CluLayId == 2) vTMvtxHits.push_back(cluHit);
0391 }
0392 else if(CluSysId == 1)
0393 {
0394 if((CluLayId == 3) || (CluLayId == 4)) vIInttHits.push_back(cluHit);
0395 else if((CluLayId == 5) || (CluLayId == 6)) vOInttHits.push_back(cluHit);
0396 }
0397 else vTpcHits.push_back(cluHit);
0398 }
0399 }
0400
0401
0402 void InttSeedTrackPerformance::ReadCalHitting(std::vector<hitStruct >& vEmcalHits,\
0403 std::vector<hitStruct >& vIHCalHits, std::vector<hitStruct >& vOHcalHits)
0404 {
0405 Int_t numOfCalTower = tower_Phi->size();
0406 if(numOfCalTower == 0) return;
0407
0408 for(Int_t iCalTower = 0; iCalTower < numOfCalTower; iCalTower++)
0409 {
0410 Int_t calId = tower_system->at(iCalTower);
0411
0412 Double_t caloX = tower_X->at(iCalTower);
0413 Double_t caloY = tower_Y->at(iCalTower);
0414 Double_t caloZ = tower_Z->at(iCalTower);
0415 Double_t caloPhi = tower_Phi->at(iCalTower);
0416
0417 Double_t caloEta = tower_Eta->at(iCalTower);
0418 Double_t caloE = tower_edep->at(iCalTower);
0419
0420 hitStruct caloHit;
0421 caloHit.r = std::sqrt(caloX*caloX + caloY*caloY);
0422 caloHit.z = caloZ;
0423 caloHit.phi = caloPhi;
0424 caloHit.eta = caloEta;
0425 caloHit.energy = caloE;
0426
0427 if(calId == 0) vEmcalHits.push_back(caloHit);
0428 else if(calId == 1) vIHCalHits.push_back(caloHit);
0429 else if(calId == 2) vOHcalHits.push_back(caloHit);
0430
0431
0432
0433
0434 }
0435 }
0436
0437
0438 void InttSeedTrackPerformance::ReadCalCluHitting(std::vector<hitStruct>& vEmcalHits,\
0439 std::vector<hitStruct>& vIHCalHits, std::vector<hitStruct>& vOHcalHits)
0440 {
0441 Int_t numOfCaloCluster = caloClus_Phi->size();
0442 if(numOfCaloCluster == 0) return;
0443
0444 for(Int_t iCaloCluster = 0; iCaloCluster < numOfCaloCluster; iCaloCluster++)
0445 {
0446 Int_t calId = caloClus_system->at(iCaloCluster);
0447
0448 Double_t caloX = caloClus_X->at(iCaloCluster);
0449 Double_t caloY = caloClus_Y->at(iCaloCluster);
0450 Double_t caloZ = caloClus_Z->at(iCaloCluster);
0451
0452 Double_t caloPhi = caloClus_Phi->at(iCaloCluster);
0453 Double_t caloE = caloClus_edep->at(iCaloCluster);
0454
0455 hitStruct caloHit;
0456 caloHit.r = std::sqrt(caloX*caloX + caloY*caloY);
0457 caloHit.z = caloZ;
0458 caloHit.phi = caloPhi;
0459
0460 Double_t caloTheta = std::atan(caloHit.r/caloHit.z);
0461 Double_t caloEta = (caloZ/std::abs(caloZ)) * (- log(std::abs(std::tan(caloTheta/2))));
0462 caloHit.eta = caloEta;
0463 caloHit.energy = caloE;
0464
0465 if(calId == 0) vEmcalHits.push_back(caloHit);
0466 else if(calId == 1) vIHCalHits.push_back(caloHit);
0467 else if(calId == 2) vOHcalHits.push_back(caloHit);
0468 }
0469 }
0470
0471
0472
0473 void InttSeedTrackPerformance::TrackQA(std::vector<hitStruct > vTruthPs, std::vector<hitStruct > vEmcalHits){
0474 std::vector<Int_t > matchiedRecoTrkId = {};
0475 Int_t numOfP = PrimaryG4P_PID->size();
0476 for(Int_t iP = 0; iP < numOfP; iP++){
0477 m_HTruTrackNum->Fill(vTruthPs.at(iP).pt);
0478 if(m_tracks.size() == 0) continue;
0479 Int_t trkId = TruRecoMatching(vTruthPs.at(iP), m_tracks, matchiedRecoTrkId);
0480 if(trkId == 9999) continue;
0481
0482
0483
0484
0485 DeltaPtPerform(vTruthPs.at(iP), m_tracks.at(trkId));
0486 EstimateMagneticShift(vTruthPs.at(iP), m_tracks.at(trkId));
0487 Double_t truE = vTruthPs.at(iP).energy;
0488 Double_t recoE = m_tracks.at(trkId).getTrackE();
0489 m_HDE->Fill(truE, (recoE - truE)/truE, vTruthPs.at(iP).eta);
0490 m_HPtEfficiency->Fill(vTruthPs.at(iP).pt);
0491 }
0492
0493
0494 }
0495
0496 Int_t InttSeedTrackPerformance::TruRecoMatching(hitStruct truthP, std::vector<tracKuma > vRecoTrk,\
0497 std::vector<Int_t > vMatchiedRecoTrkId){
0498 Int_t matchiedRecoTrkId = 9999;
0499 Double_t closestDPt = 9999.;
0500 for(Int_t iRecoTrk = 0; iRecoTrk < vRecoTrk.size(); iRecoTrk++){
0501 Double_t tempTruTheta = 2*atan(std::exp(-truthP.eta));
0502 Double_t tempRecoTheta = vRecoTrk.at(iRecoTrk).getTrackTheta();
0503 Double_t tempRecoPhi = 0.;
0504 if(vRecoTrk.at(iRecoTrk).getHitIs(4)) tempRecoPhi = vRecoTrk.at(iRecoTrk).getHitPhi(4);
0505 else if(vRecoTrk.at(iRecoTrk).getHitIs(5)) tempRecoPhi = vRecoTrk.at(iRecoTrk).getHitPhi(5);
0506
0507 if((std::abs(tempRecoTheta - tempTruTheta) < 0.1)){
0508
0509 if((std::abs(tempRecoPhi - truthP.phi) < 0.3)){
0510
0511 if(closestDPt > std::abs(vRecoTrk.at(iRecoTrk).getTrackPt() - truthP.pt)){
0512 bool matchedIs = std::find( vMatchiedRecoTrkId.begin(), vMatchiedRecoTrkId.end(), \
0513 iRecoTrk) != vMatchiedRecoTrkId.end();
0514 if(matchedIs) continue;
0515 closestDPt = std::abs(vRecoTrk.at(iRecoTrk).getTrackPt() - truthP.pt);
0516 matchiedRecoTrkId = matchedIs;
0517 }
0518 }
0519 }
0520 }
0521 vMatchiedRecoTrkId.push_back(matchiedRecoTrkId);
0522
0523 return matchiedRecoTrkId;
0524 }
0525
0526 void InttSeedTrackPerformance::DeltaPtPerform(hitStruct truthP, tracKuma trk){
0527 InttSeedTracking truckF;
0528
0529 Double_t truthPt = truthP.pt;
0530 Double_t truthEta = truthP.eta;
0531
0532 Double_t sagittaR = 9999.;
0533 Double_t centerX = 9999.;
0534 Double_t centerY = 9999.;
0535
0536 Double_t HitsXY[3][2];
0537 truckF.Set3PointsXY(HitsXY, trk, 0);
0538 truckF.RoughEstiSagittaCenter3Point(sagittaR, centerX, centerY, HitsXY);
0539 Double_t sagittaPt = truckF.CalcSagittaPt(sagittaR);
0540 Double_t tempdPt = (sagittaPt - truthPt)/truthPt;
0541 m_HTruthPtVsSagittaPt_rough->Fill(truthPt, tempdPt, truthEta);
0542
0543 std::vector<Int_t > subDetIds_VtxIntt = {0, 4, 5};
0544 std::vector<Double_t > hitsR_VtxIntt = {};
0545 std::vector<Double_t > hitsPhi_VtxIntt = {};
0546 if(truckF.ReturnHitsRPhiVect(hitsR_VtxIntt, hitsPhi_VtxIntt, subDetIds_VtxIntt, trk)){
0547 Double_t tempHitOInttPhi = trk.getHitPhi(4);
0548 Double_t tempHitEmcalPhi = trk.getHitPhi(6);
0549 truckF.SagittaRByCircleFit(centerX, centerY, sagittaR, hitsR_VtxIntt, hitsPhi_VtxIntt, tempHitOInttPhi, tempHitEmcalPhi);
0550 Double_t recoPt = truckF.CalcSagittaPt(sagittaR);
0551 Double_t dPt = (sagittaPt - truthPt)/truthPt;
0552 m_HTruthPtVsSagittaPt_VtxIntt->Fill(truthPt, dPt, truthEta);
0553 }
0554
0555
0556
0557
0558
0559 std::vector<Int_t > subDetIds_InttEmcal = {4, 5, 6};
0560 std::vector<Double_t > hitsR_InttEmcal = {};
0561 std::vector<Double_t > hitsPhi_InttEmcal = {};
0562 if(truckF.ReturnHitsRPhiVect(hitsR_InttEmcal, hitsPhi_InttEmcal, subDetIds_InttEmcal, trk)){
0563 Double_t tempHitOInttPhi = trk.getHitPhi(4);
0564 Double_t tempHitEmcalPhi = trk.getHitPhi(6);
0565 truckF.SagittaRByCircleFit(centerX, centerY, sagittaR, hitsR_InttEmcal, hitsPhi_InttEmcal, tempHitOInttPhi, tempHitEmcalPhi);
0566 Double_t recoPt = truckF.CalcSagittaPt(sagittaR);
0567 Double_t dPt = (recoPt - truthPt)/truthPt;
0568 m_HTruthPtVsSagittaPt_InttEmcal->Fill(truthPt, dPt, truthEta);
0569
0570 TrackOtherPropertiesWTruth(truthP, trk, sagittaR, centerX, centerY, recoPt,\
0571 m_HTruthPVsTheta_InttEmcal, m_HTruthPVsPhi_InttEmcal, m_HTruthPVsRecoP_InttEmcal, m_HTruthPVsEOverP_InttEmcal,\
0572 m_dVtxXY_InttEmcal, m_dVtxR_InttEmcal, m_dVtxZ_InttEmcal);
0573 }
0574
0575 std::vector<Int_t > subDetIds_VtxInttEmcal = {0, 4, 5, 6};
0576 std::vector<Double_t > hitsR_VtxInttEmcal = {};
0577 std::vector<Double_t > hitsPhi_VtxInttEmcal = {};
0578 if(truckF.ReturnHitsRPhiVect(hitsR_VtxInttEmcal, hitsPhi_VtxInttEmcal, subDetIds_VtxInttEmcal, trk)){
0579 Double_t tempHitOInttPhi = trk.getHitPhi(4);
0580 Double_t tempHitEmcalPhi = trk.getHitPhi(6);
0581 truckF.SagittaRByCircleFit(centerX, centerY, sagittaR, hitsR_VtxInttEmcal, hitsPhi_VtxInttEmcal, tempHitOInttPhi, tempHitEmcalPhi);
0582 Double_t recoPt = truckF.CalcSagittaPt(sagittaR);
0583 Double_t dPt = (recoPt - truthPt)/truthPt;
0584 m_HTruthPtVsSagittaPt_VtxInttEmcal->Fill(truthPt, dPt, truthEta);
0585 }
0586
0587 std::vector<Int_t > subDetIds_MvtxInttEmcal = {1, 2, 3, 4, 5, 6};
0588 std::vector<Double_t > hitsR_MvtxInttEmcal = {};
0589 std::vector<Double_t > hitsPhi_MvtxInttEmcal = {};
0590 if(truckF.ReturnHitsRPhiVect(hitsR_MvtxInttEmcal, hitsPhi_MvtxInttEmcal, subDetIds_MvtxInttEmcal, trk)){
0591 Double_t tempHitOInttPhi = trk.getHitPhi(4);
0592 Double_t tempHitEmcalPhi = trk.getHitPhi(6);
0593 truckF.SagittaRByCircleFit(centerX, centerY, sagittaR, hitsR_MvtxInttEmcal, hitsPhi_MvtxInttEmcal, tempHitOInttPhi, tempHitEmcalPhi);
0594 Double_t recoPt = truckF.CalcSagittaPt(sagittaR);
0595 Double_t dPt = (recoPt - truthPt)/truthPt;
0596 m_HTruthPtVsSagittaPt_MvtxInttEmcal->Fill(truthPt, dPt, truthEta);
0597
0598
0599
0600 TrackOtherPropertiesWTruth(truthP, trk, sagittaR, centerX, centerY, recoPt,\
0601 m_HTruthPVsTheta_MvtxInttEmcal, m_HTruthPVsPhi_MvtxInttEmcal,\
0602 m_HTruthPVsRecoP_MvtxInttEmcal, m_HTruthPVsEOverP_MvtxInttEmcal,\
0603 m_dVtxXY_MvtxInttEmcal, m_dVtxR_MvtxInttEmcal, m_dVtxZ_MvtxInttEmcal);
0604
0605
0606
0607
0608 }
0609
0610 std::vector<Int_t > subDetIds_VtxMvtxInttEmcal = {0, 1, 2, 3, 4, 5, 6};
0611 std::vector<Double_t > hitsR_VtxMvtxInttEmcal = {};
0612 std::vector<Double_t > hitsPhi_VtxMvtxInttEmcal = {};
0613 if(truckF.ReturnHitsRPhiVect(hitsR_VtxMvtxInttEmcal, hitsPhi_VtxMvtxInttEmcal, subDetIds_VtxMvtxInttEmcal, trk)){
0614 Double_t tempHitOInttPhi = trk.getHitPhi(4);
0615 Double_t tempHitEmcalPhi = trk.getHitPhi(6);
0616 truckF.SagittaRByCircleFit(centerX, centerY, sagittaR, hitsR_VtxMvtxInttEmcal, hitsPhi_VtxMvtxInttEmcal, tempHitOInttPhi, tempHitEmcalPhi);
0617 Double_t recoPt = truckF.CalcSagittaPt(sagittaR);
0618 Double_t dPt = (recoPt - truthPt)/truthPt;
0619 m_HTruthPtVsSagittaPt_VtxMvtxInttEmcal->Fill(truthPt, dPt, truthEta);
0620 }
0621
0622 Double_t dPhiOInttEmcal = truckF.dPhiOInttEmcalEsti(trk);
0623 Double_t OriFunTrackPt = truckF.FitFunctionPt(dPhiOInttEmcal);
0624 Double_t dPtOriFun = (OriFunTrackPt - truthPt)/truthPt;
0625 m_HTruthPtVsFitFuncPt_IInttOInttEmcal->Fill(truthPt, dPtOriFun, truthEta);
0626 EventJudge(pubEvNum, dPtOriFun ,-2, -1, true);
0627
0628
0629
0630 Double_t dPhiVtxIInttEmcal = truckF.dPhiVtxIInttEmcalEsti(trk);
0631 Double_t OriFunTrackPt_VtxIInttEmcal = truckF.FitFunctionPt_VtxIInttEmcal(dPhiOInttEmcal);
0632 Double_t dPtOriFun_VtxIInttEmcal = (OriFunTrackPt_VtxIInttEmcal - truthPt)/truthPt;
0633 m_HTruthPtVsFitFuncPt_VtxIInttEmcal->Fill(truthPt, dPtOriFun_VtxIInttEmcal, truthEta);
0634
0635 Double_t dPhiVtxOInttEmcal = truckF.dPhiVtxOInttEmcalEsti(trk);
0636 Double_t OriFunTrackPt_VtxOInttEmcal = truckF.FitFunctionPt_VtxOInttEmcal(dPhiVtxOInttEmcal);
0637 Double_t dPtOriFun_VtxOInttEmcal = (OriFunTrackPt_VtxOInttEmcal - truthPt)/truthPt;
0638 m_HTruthPtVsFitFuncPt_VtxOInttEmcal->Fill(truthPt, dPtOriFun_VtxOInttEmcal, truthEta);
0639
0640 Double_t dPhiVtxInttEmcal = truckF.dPhiVtxInttEmcalEsti(trk);
0641 Double_t OriFunTrackPt_VtxInttEmcal = truckF.FitFunctionPt_VtxInttEmcal(dPhiVtxInttEmcal);
0642 Double_t dPtOriFun_VtxInttEmcal = (OriFunTrackPt_VtxInttEmcal - truthPt)/truthPt;
0643 m_HTruthPtVsFitFuncPt_VtxInttEmcal->Fill(truthPt, dPtOriFun_VtxInttEmcal, truthEta);
0644
0645 Double_t dPhiMvtxIInttEmcal = truckF.dPhiMvtxIInttEmcalEsti(trk);
0646 Double_t OriFunTrackPt_MvtxIInttEmcal = truckF.FitFunctionPt_MVtxIInttEmcal(dPhiMvtxIInttEmcal);
0647 Double_t dPtOriFun_MvtxIInttEmcal = (OriFunTrackPt_MvtxIInttEmcal - truthPt)/truthPt;
0648 m_HTruthPtVsFitFuncPt_MvtxIInttEmcal->Fill(truthPt, dPtOriFun_MvtxIInttEmcal, truthEta);
0649
0650 Double_t dPhiMvtxOInttEmcal = truckF.dPhiMvtxOInttEmcalEsti(trk);
0651 Double_t OriFunTrackPt_MvtxOInttEmcal = truckF.FitFunctionPt_MVtxInttEmcal(dPhiMvtxOInttEmcal);
0652 Double_t dPtOriFun_MvtxOInttEmcal = (OriFunTrackPt_MvtxOInttEmcal - truthPt)/truthPt;
0653 m_HTruthPtVsFitFuncPt_MvtxOInttEmcal->Fill(truthPt, dPtOriFun_MvtxOInttEmcal, truthEta);
0654
0655 Double_t dPhiMvtxInttEmcal = truckF.dPhiMvtxInttEmcalEsti(trk);
0656 Double_t OriFunTrackPt_MvtxInttEmcal = truckF.FitFunctionPt_MVtxInttEmcal(dPhiMvtxInttEmcal);
0657 Double_t dPtOriFun_MvtxInttEmcal = (OriFunTrackPt_MvtxInttEmcal - truthPt)/truthPt;
0658 m_HTruthPtVsFitFuncPt_MvtxInttEmcal->Fill(truthPt, dPtOriFun_MvtxInttEmcal, truthEta);
0659 }
0660
0661
0662
0663 void InttSeedTrackPerformance::TrackOtherPropertiesWTruth(hitStruct truthP, tracKuma trk,\
0664 Double_t sagittaR, Double_t centerX, Double_t centerY, Double_t recoPt,\
0665 TH2D* hTruthPVsTheta, TH2D* hTruthPVsPhi, TH2D* hTruthPVsRecoP,TH2D* hTruthPVsEOverP,\
0666 TH2D* hDVtxXY, TH1D* hDVtxR, TH1D* hDVtxZ){
0667 InttSeedTracking truckF;
0668
0669 Double_t truthPt = truthP.pt;
0670 Double_t truthPhi = truthP.phi;
0671 Double_t truthTheta = 2*atan(std::exp(-truthP.eta));
0672 Double_t truVtxX = 0.;
0673 Double_t truVtxY = 0.;
0674 Double_t truVtxZ = 0.;
0675
0676 Double_t recoTheta = truckF.EstimateRecoTheta(trk, 0);
0677
0678 Double_t trackE = trk.getTrackE();
0679 Double_t recoP = recoPt/sin(recoTheta);
0680
0681 Double_t vtxX = 0.;
0682 Double_t vtxY = 0.;
0683 truckF.CrossLineCircle(vtxX, vtxY, centerX, centerY, sagittaR);
0684 Double_t vtxR = std::sqrt(vtxX*vtxX + vtxY*vtxY);
0685 Double_t vtxPhi = atan(vtxY/vtxX);
0686 if((vtxPhi < 0)&&(vtxX < 0)) vtxPhi += TMath::Pi();
0687 else if((vtxPhi > 0)&&(vtxY < 0)) vtxPhi -= TMath::Pi();
0688
0689 Double_t trkPhi = -1/std::tan(vtxPhi);
0690 Double_t vtxZ = 0.;
0691 if(trk.getHitIs(6)){
0692 vtxZ = trk.getHitZ(6) - trk.getHitZ(6)/std::tan(recoTheta);
0693 }
0694
0695
0696 Double_t dVtxX = 9999.;
0697 Double_t dVtxY = 9999.;
0698 Double_t dVtxR = 9999.;
0699 Double_t dVtxZ = 9999.;
0700 dVtxX = vtxX - truVtxX;
0701 dVtxY = vtxY - truVtxY;
0702 dVtxR = std::sqrt(dVtxX*dVtxX + dVtxY*dVtxY);
0703 dVtxZ = vtxZ - truVtxZ;
0704
0705
0706 hTruthPVsTheta->Fill(truthPt, recoTheta - truthTheta);
0707
0708
0709 hTruthPVsEOverP->Fill(truthPt, trackE/recoP);
0710 hTruthPVsPhi->Fill(truthPt, trkPhi - truthPhi);
0711
0712 hDVtxXY->Fill(dVtxX, dVtxY);
0713 hDVtxR->Fill(dVtxR);
0714 hDVtxZ->Fill(dVtxZ);
0715
0716 }
0717
0718 void InttSeedTrackPerformance::EstimateMagneticShift(hitStruct truthP, tracKuma trk){
0719 InttSeedTracking truckF;
0720
0721 Double_t truthPt = truthP.pt;
0722 Double_t truthEta = truthP.eta;
0723 Double_t truthPhi = truthP.phi;
0724
0725 Double_t refPhi = truthPhi;
0726 refPhi = TMath::Pi()/2 - refPhi;
0727 Double_t tempTruPhi = truthPhi + refPhi;
0728
0729
0730 Double_t fMvtxHitR = trk.getHitR(1);
0731 Double_t fMvtxHitPhi = trk.getHitPhi(1) + refPhi;
0732 Double_t sMvtxHitR = trk.getHitR(2);
0733 Double_t sMvtxHitPhi = trk.getHitPhi(2) + refPhi;
0734 Double_t tMvtxHitR = trk.getHitR(3);
0735 Double_t tMvtxHitPhi = trk.getHitPhi(3) + refPhi;
0736 Double_t MvtxHitR = (fMvtxHitR + sMvtxHitR + tMvtxHitR)/3;
0737 Double_t MvtxHitPhi = (fMvtxHitPhi + sMvtxHitPhi + tMvtxHitPhi)/3;
0738
0739 Double_t iInttHitR = trk.getHitR(4);
0740 Double_t iInttHitPhi = trk.getHitPhi(4) + refPhi;
0741 Double_t oInttHitR = trk.getHitR(5);
0742 Double_t oInttHitPhi = trk.getHitPhi(5) + refPhi;
0743 Double_t InttHitR = (iInttHitR + oInttHitR)/2;
0744 Double_t InttHitPhi = (iInttHitPhi + oInttHitPhi)/2;
0745
0746 Double_t emcalHitR = trk.getHitR(6);
0747 Double_t emcalHitPhi = trk.getHitPhi(6) + refPhi;
0748
0749
0750 Double_t dStraight_VtxIIntt = iInttHitR*sin(iInttHitPhi);
0751 Double_t dShiftL_VtxIIntt = iInttHitR*cos(iInttHitPhi);
0752
0753 Double_t slopeIInttOIntt = 0.;
0754 Double_t sectionIInttOIntt = 0.;
0755 truckF.CalcLineEq(slopeIInttOIntt, sectionIInttOIntt, \
0756 iInttHitR*cos(iInttHitPhi), iInttHitR*sin(iInttHitPhi),\
0757 oInttHitR*cos(oInttHitPhi), oInttHitR*sin(oInttHitPhi));
0758
0759 Double_t crossX1 = 0.;
0760 Double_t crossY1 = 0.;
0761 Double_t slopeIINTT = dStraight_VtxIIntt/dShiftL_VtxIIntt;
0762 Double_t sectionIINTT = - slopeIINTT*iInttHitR*cos(iInttHitPhi) + iInttHitR*sin(iInttHitPhi);
0763 truckF.CalcCrossPoint(crossX1, crossY1, slopeIINTT, sectionIINTT, \
0764 oInttHitR*cos(oInttHitPhi), oInttHitR*sin(oInttHitPhi));
0765 Double_t dShiftL_VtxOIntt = oInttHitR * cos(oInttHitPhi);
0766 Double_t dShiftL_IInttOIntt = dShiftL_VtxOIntt - dShiftL_VtxIIntt;
0767 Double_t dStraight_IInttOIntt = \
0768 std::sqrt((crossX1 - iInttHitR*cos(iInttHitPhi))*(crossX1 - iInttHitR*cos(iInttHitPhi))\
0769 + (crossY1 - iInttHitR*sin(iInttHitPhi))*(crossY1 - iInttHitR*sin(iInttHitPhi)));
0770
0771
0772 Double_t slopeOInttEmcal = 0.;
0773 Double_t sectionOInttEmcal = 0.;
0774 truckF.CalcLineEq(slopeOInttEmcal, sectionOInttEmcal, oInttHitR*cos(oInttHitPhi), oInttHitR*sin(oInttHitPhi),\
0775 emcalHitR*cos(emcalHitPhi), emcalHitR*sin(emcalHitPhi));
0776 Double_t crossX2 = 0.;
0777 Double_t crossY2 = 0.;
0778 truckF.CalcCrossPoint(crossX2, crossY2, slopeIInttOIntt, sectionIInttOIntt, \
0779 emcalHitR*cos(emcalHitPhi), emcalHitR*sin(emcalHitPhi));
0780 Double_t dStraight_OInttEmcal \
0781 = std::sqrt((crossX2 - oInttHitR*cos(oInttHitPhi))*(crossX2 - oInttHitR * cos(oInttHitPhi))\
0782 + (crossY2 - oInttHitR*sin(oInttHitPhi))*(crossY2 - oInttHitR * sin(oInttHitPhi)));
0783
0784
0785 Double_t dShiftL_VtxEmcal = emcalHitR*cos(emcalHitPhi);
0786 Double_t dStraight_VtxEmcal = emcalHitR*sin(emcalHitPhi);
0787 Double_t dShiftL_OInttEmcal = dShiftL_VtxEmcal - dShiftL_VtxOIntt;
0788
0789 Double_t dPhi_VtxIIntt = TMath::Pi()/2 - iInttHitPhi;
0790 Double_t temp_dPhi_IInttOIntt = atan(dStraight_IInttOIntt/dShiftL_IInttOIntt);
0791 if(temp_dPhi_IInttOIntt < 0) temp_dPhi_IInttOIntt += TMath::Pi();
0792 Double_t dPhi_IInttOIntt = TMath::Pi()/2 - temp_dPhi_IInttOIntt - dPhi_VtxIIntt;
0793 Double_t temp_dPhi_OInttEmcal = atan(dStraight_OInttEmcal/dShiftL_OInttEmcal);
0794 if(temp_dPhi_OInttEmcal < 0) temp_dPhi_OInttEmcal += TMath::Pi();
0795 Double_t dPhi_OInttEmcal = TMath::Pi()/2 - temp_dPhi_OInttEmcal - dPhi_VtxIIntt - dPhi_IInttOIntt;
0796
0797 Double_t dPhiDStraight_VtxIIntt = dPhi_VtxIIntt/dStraight_VtxIIntt;
0798 m_HDPhiDStraight_VtxIIntt->Fill(truthPt, dPhiDStraight_VtxIIntt);
0799 m_HDPhiDStraight1D_VtxIIntt->Fill(dPhiDStraight_VtxIIntt);
0800
0801 Double_t dPhiDStraight_IInttOIntt = dPhi_IInttOIntt/dStraight_IInttOIntt;
0802 m_HDPhiDStraight_IInttOIntt->Fill(truthPt, dPhiDStraight_IInttOIntt);
0803 m_HDPhiDStraight1D_IInttOIntt->Fill(dPhiDStraight_IInttOIntt);
0804
0805 Double_t dPhiDStraight_OInttEmcal = dPhi_OInttEmcal/dStraight_OInttEmcal;
0806 m_HDPhiDStraight_OInttEmcal->Fill(truthPt, dPhiDStraight_OInttEmcal);
0807 m_HDPhiDStraight1D_OInttEmcal->Fill(dPhiDStraight_OInttEmcal);
0808
0809 Double_t ddPhiddStraight_IInttOInttEmcal = dPhiDStraight_OInttEmcal - dPhiDStraight_IInttOIntt;
0810 m_HTruthPtVsDdPhiddStraight_IInttOInttEmcal->Fill(truthPt, ddPhiddStraight_IInttOInttEmcal);
0811
0812 m_HDPhiVsDStraightVsTruPt->Fill(dStraight_VtxIIntt, dPhi_VtxIIntt, truthPt);
0813 m_HDPhiVsDStraightVsTruPt->Fill(dStraight_IInttOIntt, dPhi_IInttOIntt, truthPt);
0814 m_HDPhiVsDStraightVsTruPt->Fill(dPhiDStraight_OInttEmcal, dPhi_OInttEmcal, truthPt);
0815
0816 m_HDLVsTruthPtVsEta_VtxIIntt->Fill(dShiftL_VtxIIntt, truthPt, truthEta);
0817 m_HDL1D_VtxIIntt->Fill(dShiftL_VtxIIntt);
0818 m_HDLVsTruthPtVsEta_IInttOIntt->Fill(dShiftL_IInttOIntt, truthPt, truthEta);
0819 m_HDL1D_IInttOIntt->Fill(dShiftL_IInttOIntt);
0820 m_HDLVsTruthPtVsEta_OInttEmcal->Fill(dShiftL_OInttEmcal, truthPt, truthEta);
0821 m_HDL1D_OInttEmcal->Fill(dShiftL_OInttEmcal);
0822
0823 Double_t tempMvtxX = MvtxHitR*std::cos(MvtxHitPhi);
0824 Double_t tempMvtxY = MvtxHitR*std::sin(MvtxHitPhi);
0825 Double_t tempIInttX = iInttHitR*std::cos(iInttHitPhi);
0826 Double_t tempIInttY = iInttHitR*std::sin(iInttHitPhi);
0827 Double_t tempOInttX = oInttHitR*std::cos(oInttHitPhi);
0828 Double_t tempOInttY = oInttHitR*std::sin(oInttHitPhi);
0829 Double_t tempInttX = InttHitR*std::cos(InttHitPhi);
0830 Double_t tempInttY = InttHitR*std::sin(InttHitPhi);
0831 Double_t tempEmcalX = emcalHitR*std::cos(emcalHitPhi);
0832 Double_t tempEmcalY = emcalHitR*std::sin(emcalHitPhi);
0833
0834 Double_t dPhiMvtxIIntt = std::atan((tempIInttY - tempMvtxY)/(tempIInttX - tempMvtxX));
0835 if(dPhiMvtxIIntt < 0) dPhiMvtxIIntt += TMath::Pi();
0836 Double_t dPhiVtxMvtxIIntt = dPhiMvtxIIntt - MvtxHitPhi;
0837
0838 Double_t dPhiMvtxOIntt = std::atan((tempOInttY - tempMvtxY)/(tempOInttX - tempMvtxX));
0839 if(dPhiMvtxOIntt < 0) dPhiMvtxOIntt += TMath::Pi();
0840 Double_t dPhiVtxMvtxOIntt = dPhiMvtxOIntt - MvtxHitPhi;
0841
0842 Double_t dPhiMvtxIntt = std::atan((tempInttY - tempMvtxY)/(tempInttX - tempMvtxX));
0843 if(dPhiMvtxIntt < 0) dPhiMvtxIntt += TMath::Pi();
0844 Double_t dPhiVtxMvtxIntt = dPhiMvtxIntt - MvtxHitPhi;
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854
0855
0856
0857
0858
0859
0860 if(!m_bDecayEvent){
0861 Double_t dPhiIInttEmcal = std::atan((tempEmcalY - tempIInttY)/(tempEmcalX - tempIInttX));
0862 if(dPhiIInttEmcal < 0) dPhiIInttEmcal += TMath::Pi();
0863 Double_t dPhiVtxIInttEmcal = dPhiIInttEmcal - iInttHitPhi;
0864 Double_t dPhiMvtxIInttEmcal = dPhiIInttEmcal - dPhiMvtxIIntt;
0865
0866 Double_t dPhiOInttEmcal = std::atan((tempEmcalY - tempOInttY)/(tempEmcalX - tempOInttX));
0867 if(dPhiOInttEmcal < 0) dPhiOInttEmcal += TMath::Pi();
0868 Double_t dPhiVtxOInttEmcal = dPhiOInttEmcal - oInttHitPhi;
0869 Double_t dPhiMvtxOInttEmcal = dPhiOInttEmcal - dPhiMvtxOIntt;
0870
0871 Double_t dPhiInttEmcal = std::atan((tempEmcalY - tempInttY)/(tempEmcalX - tempInttX));
0872 if(dPhiInttEmcal < 0) dPhiInttEmcal += TMath::Pi();
0873 Double_t dPhiVtxInttEmcal = dPhiInttEmcal - InttHitPhi;
0874 Double_t dPhiMvtxInttEmcal = dPhiInttEmcal - dPhiMvtxIntt;
0875
0876 Double_t dPhiIInttOIntt = std::atan((tempOInttY - tempIInttY)/(tempOInttX - tempIInttX));
0877 if(dPhiIInttOIntt < 0) dPhiIInttOIntt += TMath::Pi();
0878 Double_t dPhi_IInttOInttEmcal = dPhiOInttEmcal - dPhiIInttOIntt;
0879
0880 m_HDPhiVsTruthPtVsEta_VtxIIntt->Fill(dPhi_VtxIIntt, truthPt, truthEta);
0881 m_HDPhiVsTruthPtVsEta_IInttOIntt->Fill(dPhi_IInttOIntt, truthPt, truthEta);
0882 m_HDPhiVsTruthPtVsEta_OInttEmcal->Fill(dPhi_OInttEmcal, truthPt, truthEta);
0883
0884 m_HDPhiVsTruthPtProf_VtxIIntt->Fill(dPhi_VtxIIntt, truthPt);
0885 m_HDPhiVsTruthPtProf_IInttOIntt->Fill(dPhi_IInttOIntt, truthPt);
0886 m_HDPhiVsTruthPtProf_OInttEmcal->Fill(dPhi_OInttEmcal, truthPt);
0887
0888 m_HDPhiVsTruthPtVsEta_IInttOInttEmcal->Fill(dPhi_IInttOInttEmcal, truthPt, truthEta);
0889 m_HDPhiVsTruthPtProf_IInttOInttEmcal->Fill(dPhi_IInttOInttEmcal, truthPt);
0890
0891 m_HDPhiVsTruthPtVsEta_VtxIInttEmcal->Fill(dPhiVtxIInttEmcal, truthPt, truthEta);
0892 m_HDPhiVsTruthPtVsEta_VtxOInttEmcal->Fill(dPhiVtxOInttEmcal, truthPt, truthEta);
0893 m_HDPhiVsTruthPtVsEta_VtxInttEmcal->Fill(dPhiVtxInttEmcal, truthPt, truthEta);
0894
0895 m_HDPhiVsTruthPtVsEta_MvtxIInttEmcal->Fill(dPhiMvtxIInttEmcal, truthPt, truthEta);
0896 m_HDPhiVsTruthPtVsEta_MvtxOInttEmcal->Fill(dPhiMvtxOInttEmcal, truthPt, truthEta);
0897 m_HDPhiVsTruthPtVsEta_MvtxInttEmcal->Fill(dPhiMvtxInttEmcal, truthPt, truthEta);
0898
0899 m_HDPhiVsTruthPtProf_VtxIInttEmcal->Fill(dPhiVtxIInttEmcal, truthPt);
0900 m_HDPhiVsTruthPtProf_VtxOInttEmcal->Fill(dPhiVtxOInttEmcal, truthPt);
0901 m_HDPhiVsTruthPtProf_VtxInttEmcal->Fill(dPhiVtxInttEmcal, truthPt);
0902
0903 m_HDPhiVsTruthPtProf_MvtxIInttEmcal->Fill(dPhiMvtxIInttEmcal, truthPt);
0904 m_HDPhiVsTruthPtProf_MvtxOInttEmcal->Fill(dPhiMvtxOInttEmcal, truthPt);
0905 m_HDPhiVsTruthPtProf_MvtxInttEmcal->Fill(dPhiMvtxInttEmcal, truthPt);
0906 }
0907
0908
0909 }
0910
0911 void InttSeedTrackPerformance::CaloEnergyQA(Int_t CalId, std::vector<hitStruct > calHits){
0912 Int_t highestEID = 9999;
0913 Double_t highestE = 0.;
0914 Int_t numOfCalT = calHits.size();
0915 for(Int_t iCalTower = 0; iCalTower < numOfCalT; iCalTower++){
0916 if(highestE < calHits.at(iCalTower).energy){
0917 highestE = calHits.at(iCalTower).energy;
0918 highestEID = iCalTower;
0919 }
0920 }
0921 if(highestEID == 9999) return;
0922 Double_t refCalPhi = calHits.at(highestEID).phi;
0923 Double_t refCalEta = calHits.at(highestEID).eta;
0924 for(Int_t iCalT = 0; iCalT < numOfCalT; iCalT++){
0925 Double_t phi = calHits.at(iCalT).phi - refCalPhi;
0926 Double_t eta = calHits.at(iCalT).eta - refCalEta;
0927 Double_t E = calHits.at(iCalT).energy;
0928 if(CalId == 0) m_HECalPhiVsE->Fill(phi, eta, E);
0929 else if(CalId == 1) m_HIHCalPhiVsE->Fill(phi, eta, E);
0930 else if(CalId == 2) m_HOHCalPhiVsE->Fill(phi, eta, E);
0931 }
0932 }
0933
0934
0935 bool InttSeedTrackPerformance::ParticleDecayCheck(tracKuma trk, std::vector<hitStruct > vEmcalHits){
0936 bool bIsDecay = false;
0937
0938 Int_t numOfCal = vEmcalHits.size();
0939 for(Int_t iCal = 0; iCal < numOfCal; iCal++){
0940 if((vEmcalHits.at(iCal).energy > 0.1)\
0941 && (std::abs(vEmcalHits.at(iCal).phi - trk.getHitPhi(6)) > 0.04)){
0942 bIsDecay = true;
0943 }
0944 }
0945
0946 return bIsDecay;
0947 }
0948
0949
0950
0951
0952 void InttSeedTrackPerformance::ResetValuesForEvent(){
0953 m_tracks.clear();
0954 m_tracks.shrink_to_fit();
0955
0956 m_TruthParticle.clear();
0957 m_TruthParticle.shrink_to_fit();
0958
0959 m_fMvtxHits.clear();
0960 m_sMvtxHits.clear();
0961 m_tMvtxHits.clear();
0962
0963 m_iInttHits.clear();
0964 m_oInttHits.clear();
0965
0966 m_TpcHits.clear();
0967
0968 m_emcalHits.clear();
0969 m_iHCalHits.clear();
0970 m_oHCalHits.clear();
0971
0972
0973 m_fMvtxHits.shrink_to_fit();
0974 m_sMvtxHits.shrink_to_fit();
0975 m_tMvtxHits.shrink_to_fit();
0976
0977 m_iInttHits.shrink_to_fit();
0978 m_oInttHits.shrink_to_fit();
0979
0980 m_TpcHits.shrink_to_fit();
0981
0982 m_emcalHits.shrink_to_fit();
0983 m_iHCalHits.shrink_to_fit();
0984 m_oHCalHits.shrink_to_fit();
0985
0986 }
0987
0988 void InttSeedTrackPerformance::AllResetValuesForEvent(){
0989 m_tracks.clear();
0990 m_tracks.shrink_to_fit();
0991
0992 m_vTruthParticle.clear();
0993 m_viInttHits.clear();
0994 m_voInttHits.clear();
0995 m_vTpcHits.clear();
0996 m_vemcalHits.clear();
0997 m_viHCalHits.clear();
0998 m_voHCalHits.clear();
0999
1000 m_vTruthParticle.shrink_to_fit();
1001 m_viInttHits.shrink_to_fit();
1002 m_voInttHits.shrink_to_fit();
1003 m_vTpcHits.shrink_to_fit();
1004 m_vemcalHits.shrink_to_fit();
1005 m_viHCalHits.shrink_to_fit();
1006 m_voHCalHits.shrink_to_fit();
1007
1008
1009 m_TruthParticle.clear();
1010 m_TruthParticle.shrink_to_fit();
1011
1012 m_fMvtxHits.clear();
1013 m_sMvtxHits.clear();
1014 m_tMvtxHits.clear();
1015
1016 m_iInttHits.clear();
1017 m_oInttHits.clear();
1018
1019 m_TpcHits.clear();
1020
1021 m_emcalHits.clear();
1022 m_iHCalHits.clear();
1023 m_oHCalHits.clear();
1024
1025
1026 m_fMvtxHits.shrink_to_fit();
1027 m_sMvtxHits.shrink_to_fit();
1028 m_tMvtxHits.shrink_to_fit();
1029
1030 m_iInttHits.shrink_to_fit();
1031 m_oInttHits.shrink_to_fit();
1032
1033 m_TpcHits.shrink_to_fit();
1034
1035 m_emcalHits.shrink_to_fit();
1036 m_iHCalHits.shrink_to_fit();
1037 m_oHCalHits.shrink_to_fit();
1038
1039 }
1040
1041 void InttSeedTrackPerformance::PartResetValuesForEvent(){
1042 m_TruthParticle.clear();
1043 m_TruthParticle.shrink_to_fit();
1044
1045 m_iInttHits.clear();
1046 m_oInttHits.clear();
1047
1048 m_TpcHits.clear();
1049
1050 m_emcalHits.clear();
1051 m_iHCalHits.clear();
1052 m_oHCalHits.clear();
1053
1054
1055 m_iInttHits.shrink_to_fit();
1056 m_oInttHits.shrink_to_fit();
1057
1058 m_TpcHits.shrink_to_fit();
1059
1060 m_emcalHits.shrink_to_fit();
1061 m_iHCalHits.shrink_to_fit();
1062 m_oHCalHits.shrink_to_fit();
1063 }
1064
1065
1066
1067 void InttSeedTrackPerformance::WrightHists(){
1068 oFile = new TFile(fOutput.c_str(), "recreate");
1069 oFile->cd();
1070 m_HINTTHitMap->Write();
1071
1072 m_HGlobalHitMap->Write();
1073
1074 m_HECalPhiVsE->Write();
1075 m_HIHCalPhiVsE->Write();
1076 m_HOHCalPhiVsE->Write();
1077
1078 m_HMatchCalEVsHighestCalE->Write();
1079
1080 m_HdPhiInttdPhiECal->Write();
1081 m_HTruthPtVsdPhiInttdPhiECal->Write();
1082
1083 m_HTruthPtVsSagittaPt_rough->Write();
1084 m_HTruthPtVsSagittaPt_VtxIntt->Write();
1085 m_HTruthPtVsSagittaPt_InttEmcal->Write();
1086 m_HTruthPtVsSagittaPt_VtxInttEmcal->Write();
1087 m_HTruthPtVsSagittaPt_MvtxInttEmcal->Write();
1088 m_HTruthPtVsSagittaPt_VtxMvtxInttEmcal->Write();
1089
1090 m_HTruthPtVsFitFuncPt_IInttOInttEmcal->Write();
1091
1092 m_HTruthPtVsFitFuncPt_VtxIInttEmcal->Write();
1093 m_HTruthPtVsFitFuncPt_VtxOInttEmcal->Write();
1094 m_HTruthPtVsFitFuncPt_VtxInttEmcal->Write();
1095
1096 m_HTruthPtVsFitFuncPt_MvtxIInttEmcal->Write();
1097 m_HTruthPtVsFitFuncPt_MvtxOInttEmcal->Write();
1098 m_HTruthPtVsFitFuncPt_MvtxInttEmcal->Write();
1099
1100 m_HTruthPVsRecoP_InttEmcal->Write();
1101 m_HTruthPVsRecoP_MvtxInttEmcal->Write();
1102 m_HTruthPVsRecoP_FitFunc->Write();
1103
1104 m_HTruthPVsEOverP_InttEmcal->Write();
1105 m_HTruthPVsEOverP_MvtxInttEmcal->Write();
1106 m_HTruthPVsEOverP_FitFunc->Write();
1107
1108 m_HTruthPVsTheta_InttEmcal->Write();
1109 m_HTruthPVsTheta_MvtxInttEmcal->Write();
1110
1111 m_HTruthPVsPhi_InttEmcal->Write();
1112 m_HTruthPVsPhi_MvtxInttEmcal->Write();
1113
1114
1115 m_dVtxXY_InttEmcal->Write();
1116 m_dVtxXY_MvtxInttEmcal->Write();
1117
1118 m_dVtxR_InttEmcal->Write();
1119 m_dVtxR_MvtxInttEmcal->Write();
1120
1121 m_dVtxZ_InttEmcal->Write();
1122 m_dVtxZ_MvtxInttEmcal->Write();
1123
1124 m_HDE->Write();
1125
1126 m_HDPhiVsDStraightVsTruPt->Write();
1127
1128 m_HDPhiDStraight_VtxIIntt->Write();
1129 m_HDPhiDStraight1D_VtxIIntt->Write();
1130 m_HDPhiDStraight_IInttOIntt->Write();
1131 m_HDPhiDStraight1D_IInttOIntt->Write();
1132 m_HDPhiDStraight_OInttEmcal->Write();
1133 m_HDPhiDStraight1D_OInttEmcal->Write();
1134 m_HTruthPtVsDdPhiddStraight_IInttOInttEmcal->Write();
1135
1136
1137 m_HDLVsTruthPtVsEta_VtxIIntt->Write();
1138 m_HDL1D_VtxIIntt->Write();
1139 m_HDLVsTruthPtVsEta_IInttOIntt->Write();
1140 m_HDL1D_IInttOIntt->Write();
1141 m_HDLVsTruthPtVsEta_OInttEmcal->Write();
1142 m_HDL1D_OInttEmcal->Write();
1143
1144 m_HDPhiVsTruthPtVsEta_VtxIIntt->Write();
1145 m_HDPhiVsTruthPtVsEta_IInttOIntt->Write();
1146 m_HDPhiVsTruthPtVsEta_OInttEmcal->Write();
1147
1148 m_HDPhiVsTruthPtVsEta_IInttOInttEmcal->Write();
1149
1150 m_HDPhiVsTruthPtVsEta_VtxIInttEmcal->Write();
1151 m_HDPhiVsTruthPtVsEta_VtxOInttEmcal->Write();
1152 m_HDPhiVsTruthPtVsEta_VtxInttEmcal->Write();
1153 m_HDPhiVsTruthPtVsEta_MvtxIInttEmcal->Write();
1154 m_HDPhiVsTruthPtVsEta_MvtxOInttEmcal->Write();
1155 m_HDPhiVsTruthPtVsEta_MvtxInttEmcal->Write();
1156 m_HDPhiVsTruthPtProf_VtxIIntt->Write();
1157
1158 m_HDPhiVsTruthPtProf_IInttOInttEmcal->Write();
1159 m_HDPhiVsTruthPtProf_IInttOIntt->Write();
1160 m_HDPhiVsTruthPtProf_OInttEmcal->Write();
1161 m_HDPhiVsTruthPtProf_VtxIInttEmcal->Write();
1162 m_HDPhiVsTruthPtProf_VtxOInttEmcal->Write();
1163 m_HDPhiVsTruthPtProf_VtxInttEmcal->Write();
1164 m_HDPhiVsTruthPtProf_MvtxIInttEmcal->Write();
1165 m_HDPhiVsTruthPtProf_MvtxOInttEmcal->Write();
1166 m_HDPhiVsTruthPtProf_MvtxInttEmcal->Write();
1167
1168 m_HPtEfficiency->Divide(m_HPtEfficiency, m_HTruTrackNum, 1.0, 1.0, "b");
1169 m_HPtEfficiency->Write();
1170 m_HTruTrackNum->Write();
1171
1172 oFile->Close();
1173
1174 std::cout << "root " << fOutput << std::endl;
1175 }
1176
1177
1178 InttSeedTrackPerformance::InttSeedTrackPerformance(TTree *tree, std::string fInputName, std::string fOutputName, Int_t runNum) : fChain(0)
1179 {
1180
1181
1182 fInput = fInputName;
1183 fOutput = fOutputName + std::to_string(runNum) + ".root";
1184
1185 if (tree == 0) {
1186 TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject(fInput.c_str());
1187 if (!f || !f->IsOpen()) {
1188 f = new TFile(fInput.c_str());
1189 }
1190 f->GetObject("tree",tree);
1191
1192 }
1193 Init(tree);
1194 }
1195
1196 InttSeedTrackPerformance::~InttSeedTrackPerformance()
1197 {
1198 if (!fChain) return;
1199 delete fChain->GetCurrentFile();
1200 }
1201
1202 Int_t InttSeedTrackPerformance::GetEntry(Long64_t entry)
1203 {
1204
1205 if (!fChain) return 0;
1206 return fChain->GetEntry(entry);
1207 }
1208
1209 Long64_t InttSeedTrackPerformance::LoadTree(Long64_t entry)
1210 {
1211
1212 if (!fChain) return -5;
1213 Long64_t centry = fChain->LoadTree(entry);
1214 if (centry < 0) return centry;
1215 if (fChain->GetTreeNumber() != fCurrent) {
1216 fCurrent = fChain->GetTreeNumber();
1217 }
1218 return centry;
1219 }
1220
1221 void InttSeedTrackPerformance::Init(TTree *tree)
1222 {
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232 trk_system = 0;
1233 trk_layer = 0;
1234 trk_adc = 0;
1235 trk_X = 0;
1236 trk_Y = 0;
1237 trk_Z = 0;
1238 trk_size = 0;
1239 trk_phi_size = 0;
1240 trk_Z_size = 0;
1241
1242 tower_system = 0;
1243 tower_X = 0;
1244 tower_Y = 0;
1245 tower_Z = 0;
1246 tower_Eta = 0;
1247 tower_Phi = 0;
1248 tower_Eta_test = 0;
1249 tower_Phi_test = 0;
1250 tower_Eta_bin = 0;
1251 tower_Phi_bin = 0;
1252 tower_edep = 0;
1253
1254 caloClus_system = 0;
1255 caloClus_X = 0;
1256 caloClus_Y = 0;
1257 caloClus_Z = 0;
1258 caloClus_R = 0;
1259 caloClus_Phi = 0;
1260 caloClus_edep = 0;
1261
1262 PrimaryG4P_Pt = 0;
1263 PrimaryG4P_Eta = 0;
1264 PrimaryG4P_Phi = 0;
1265 PrimaryG4P_E = 0;
1266 PrimaryG4P_PID = 0;
1267 PrimaryG4P_isChargeHadron = 0;
1268
1269 if (!tree) return;
1270 fChain = tree;
1271 fCurrent = -1;
1272 fChain->SetMakeClass(1);
1273
1274 fChain->SetBranchAddress("trk_NClus", &trk_NClus, &b_trk_NClus);
1275 fChain->SetBranchAddress("trk_system", &trk_system, &b_trk_system);
1276 fChain->SetBranchAddress("trk_layer", &trk_layer, &b_trk_layer);
1277 fChain->SetBranchAddress("trk_adc", &trk_adc, &b_trk_adc);
1278 fChain->SetBranchAddress("trk_X", &trk_X, &b_trk_X);
1279 fChain->SetBranchAddress("trk_Y", &trk_Y, &b_trk_Y);
1280 fChain->SetBranchAddress("trk_Z", &trk_Z, &b_trk_Z);
1281 fChain->SetBranchAddress("trk_size", &trk_size, &b_trk_size);
1282 fChain->SetBranchAddress("trk_phi_size", &trk_phi_size, &b_trk_phi_size);
1283 fChain->SetBranchAddress("trk_Z_size", &trk_Z_size, &b_trk_Z_size);
1284
1285 fChain->SetBranchAddress("nTowers", &nTowers, &b_nTowers);
1286 fChain->SetBranchAddress("tower_system", &tower_system, &b_tower_system);
1287 fChain->SetBranchAddress("tower_X", &tower_X, &b_tower_X);
1288 fChain->SetBranchAddress("tower_Y", &tower_Y, &b_tower_Y);
1289 fChain->SetBranchAddress("tower_Z", &tower_Z, &b_tower_Z);
1290 fChain->SetBranchAddress("tower_Eta", &tower_Eta, &b_tower_Eta);
1291 fChain->SetBranchAddress("tower_Phi", &tower_Phi, &b_tower_Phi);
1292 fChain->SetBranchAddress("tower_Eta_test", &tower_Eta_test, &b_tower_Eta_test);
1293 fChain->SetBranchAddress("tower_Phi_test", &tower_Phi_test, &b_tower_Phi_test);
1294 fChain->SetBranchAddress("tower_Eta_bin", &tower_Eta_bin, &b_tower_Eta_bin);
1295 fChain->SetBranchAddress("tower_Phi_bin", &tower_Phi_bin, &b_tower_Phi_bin);
1296 fChain->SetBranchAddress("tower_edep", &tower_edep, &b_tower_edep);
1297
1298
1299 if(bCaloClu){
1300 fChain->SetBranchAddress("nCaloClus", &nCaloClus, &b_nCaloClus);
1301 fChain->SetBranchAddress("caloClus_system", &caloClus_system, &b_caloClus_system);
1302 fChain->SetBranchAddress("caloClus_X", &caloClus_X, &b_caloClus_X);
1303 fChain->SetBranchAddress("caloClus_Y", &caloClus_Y, &b_caloClus_Y);
1304 fChain->SetBranchAddress("caloClus_Z", &caloClus_Z, &b_caloClus_Z);
1305 fChain->SetBranchAddress("caloClus_R", &caloClus_R, &b_caloClus_R);
1306 fChain->SetBranchAddress("caloClus_Phi", &caloClus_Phi, &b_caloClus_Phi);
1307 fChain->SetBranchAddress("caloClus_edep", &caloClus_edep, &b_caloClus_edep);
1308 }
1309
1310
1311 fChain->SetBranchAddress("NTruthVtx", &NTruthVtx, &b_NTruthVtx);
1312 fChain->SetBranchAddress("TruthPV_trig_x", &TruthPV_trig_x, &b_TruthPV_trig_x);
1313 fChain->SetBranchAddress("TruthPV_trig_y", &TruthPV_trig_y, &b_TruthPV_trig_y);
1314 fChain->SetBranchAddress("TruthPV_trig_z", &TruthPV_trig_z, &b_TruthPV_trig_z);
1315 fChain->SetBranchAddress("NPrimaryG4P", &NPrimaryG4P, &b_NPrimaryG4P);
1316 fChain->SetBranchAddress("PrimaryG4P_Pt", &PrimaryG4P_Pt, &b_PrimaryG4P_Pt);
1317 fChain->SetBranchAddress("PrimaryG4P_Eta", &PrimaryG4P_Eta, &b_PrimaryG4P_Eta);
1318 fChain->SetBranchAddress("PrimaryG4P_Phi", &PrimaryG4P_Phi, &b_PrimaryG4P_Phi);
1319 fChain->SetBranchAddress("PrimaryG4P_E", &PrimaryG4P_E, &b_PrimaryG4P_E);
1320 fChain->SetBranchAddress("PrimaryG4P_PID", &PrimaryG4P_PID, &b_PrimaryG4P_PID);
1321 fChain->SetBranchAddress("PrimaryG4P_isChargeHadron", &PrimaryG4P_isChargeHadron, &b_PrimaryG4P_isChargeHadron);
1322
1323 }
1324
1325
1326
1327 void InttSeedTrackPerformance::DrawEventDisplay(Int_t eventId, std::vector<tracKuma > trks){
1328 if(qaEvent != 9999){
1329 TCanvas* c = new TCanvas("c","c: pT",800,850);
1330 c->cd();
1331 TPad* pad1 = new TPad("pad1", "pad1", 0.1, 0.1, 1, 1.0);
1332 pad1->SetBottomMargin(0.15);
1333 pad1->SetLeftMargin(0.15);
1334 pad1->SetRightMargin(0.05);
1335 pad1->SetTopMargin(0.05);
1336 pad1->Draw();
1337 pad1->cd();
1338
1339 TH2D* hHitMapED = new TH2D( "hHitMapED", "hHitMapED", 200, -100, 100, 200, -100, 100);
1340 std::vector<TArc* > trkLines;
1341 for(Int_t iTrk = 0; iTrk < trks.size(); iTrk++){
1342 tracKuma trk = trks.at(iTrk);
1343 for(Int_t iHit = 1; iHit < 7; iHit++){
1344 Double_t tempX = trk.getHitR(iHit)*std::cos(trk.getHitPhi(iHit));
1345 Double_t tempY = trk.getHitR(iHit)*std::sin(trk.getHitPhi(iHit));
1346 hHitMapED->Fill(tempX, tempY);
1347 }
1348
1349 Double_t tempR = trk.getTrackSagR();
1350 Double_t tempXc = trk.getTrackSagX();
1351 Double_t tempYc = trk.getTrackSagY();
1352
1353 Double_t edgeX1 = 0.;
1354 Double_t edgeY1 = 0.;
1355 Double_t edgePhi1 = std::atan((edgeY1 - tempYc)/(edgeX1 - tempXc));
1356 if((edgePhi1 < 0)&&((edgeX1 - tempXc) < 0)) edgePhi1 += TMath::Pi();
1357 else if((edgePhi1 > 0)&&((edgeX1 - tempXc) < 0)) edgePhi1 += TMath::Pi();
1358
1359 Double_t edgeX2 = trk.getHitR(6)*std::cos(trk.getHitPhi(6));
1360 Double_t edgeY2 = trk.getHitR(6)*std::sin(trk.getHitPhi(6));
1361 Double_t edgePhi2 = std::atan((edgeY2 - tempYc)/(edgeX2 - tempXc));
1362 if((edgePhi2 < 0)&&((edgeX2 - tempXc) < 0)) edgePhi2 += TMath::Pi();
1363 else if((edgePhi2 > 0)&&((edgeX2 - tempXc) < 0)) edgePhi2 += TMath::Pi();
1364
1365 Double_t diffPhi1 = std::abs(edgePhi2 - edgePhi1);
1366 Double_t diffPhi2 = std::abs((edgePhi2 - 2*TMath::Pi()) - edgePhi1);
1367 if(diffPhi2 < diffPhi1) edgePhi2 -= 2*TMath::Pi();
1368
1369 Double_t tempMinPhi = 0.;
1370 Double_t tempMaxPhi = 360.;
1371 if(edgePhi1 < edgePhi2){
1372 tempMinPhi = edgePhi1 - 10.;
1373 tempMaxPhi = edgePhi2 + 10.;
1374 }else{
1375 tempMinPhi = edgePhi2 - 10.;
1376 tempMaxPhi = edgePhi1 + 10.;
1377 }
1378
1379 auto arc = new TArc(tempXc, tempYc, tempR, tempMinPhi, tempMaxPhi);
1380 arc->SetFillStyle(0);
1381
1382 trkLines.push_back(arc);
1383 }
1384
1385 hHitMapED->SetFillColor(3);
1386 hHitMapED->Draw("BOX");
1387 for(Int_t iTrk = 0; iTrk < trkLines.size(); iTrk++){
1388 trkLines.at(iTrk)->Draw("only");
1389 }
1390
1391 c->SaveAs("hQaSagittaFit.root");
1392 c->Close();
1393
1394
1395
1396 qaEvent = 9999;
1397 }
1398 }
1399
1400 void InttSeedTrackPerformance::ShowEventInfo(){
1401 std::cout << "TH2D* hHitMapMvtx = new TH2D( \"hHitMapMvtx\", \"hHitMap\", 2000, -100, 100, 2000, -100, 100);" << std::endl;
1402 std::cout << "TH2D* hHitMapIntt = new TH2D( \"hHitMapIntt\", \"hHitMap\", 2000, -100, 100, 2000, -100, 100);" << std::endl;
1403 std::cout << "TH2D* hHitMapTpc = new TH2D( \"hHitMapTpc\", \"hHitMap\", 2000, -100, 100, 2000, -100, 100);" << std::endl;
1404 std::cout << "TH2D* hHitMapEmcal = new TH2D( \"hHitMapEmcal\", \"hHitMap\", 2000, -100, 100, 2000, -100, 100);" << std::endl;
1405 std::cout << "hHitMapMvtx->SetLineWidth(8);" << std::endl;
1406 std::cout << "hHitMapIntt->SetLineWidth(8);" << std::endl;
1407 std::cout << "hHitMapTpc->SetLineWidth(8);" << std::endl;
1408 std::cout << "hHitMapEmcal->SetLineWidth(8);" << std::endl;
1409 std::cout << "hHitMapMvtx->SetLineColor(860);" << std::endl;
1410 std::cout << "hHitMapIntt->SetLineColor(875);" << std::endl;
1411 std::cout << "hHitMapTpc->SetLineColor(870);" << std::endl;
1412 std::cout << "hHitMapEmcal->SetLineColor(807);" << std::endl;
1413
1414
1415 for(Int_t i=0; i<m_fMvtxHits.size(); i++){
1416 std::cout << "hHitMapMvtx->Fill(" << m_fMvtxHits.at(i).r*std::cos(m_fMvtxHits.at(i).phi) \
1417 << ", " << m_fMvtxHits.at(i).r*std::sin(m_fMvtxHits.at(i).phi) << ");" << std::endl;
1418 }
1419 for(Int_t i=0; i<m_sMvtxHits.size(); i++){
1420 std::cout << "hHitMapMvtx->Fill(" << m_sMvtxHits.at(i).r*std::cos(m_sMvtxHits.at(i).phi) \
1421 << ", " << m_sMvtxHits.at(i).r*std::sin(m_sMvtxHits.at(i).phi) << ");" << std::endl;
1422 }
1423 for(Int_t i=0; i<m_tMvtxHits.size(); i++){
1424 std::cout << "hHitMapMvtx->Fill(" << m_tMvtxHits.at(i).r*std::cos(m_tMvtxHits.at(i).phi) \
1425 << ", " << m_tMvtxHits.at(i).r*std::sin(m_tMvtxHits.at(i).phi) << ");" << std::endl;
1426 }
1427 for(Int_t i=0; i< m_iInttHits.size(); i++){
1428 std::cout << "hHitMapIntt->Fill(" << m_iInttHits.at(i).r*std::cos(m_iInttHits.at(i).phi) \
1429 << ", " << m_iInttHits.at(i).r*std::sin(m_iInttHits.at(i).phi) << ");" << std::endl;
1430 }
1431 for(Int_t i=0; i< m_oInttHits.size(); i++){
1432 std::cout << "hHitMapIntt->Fill(" << m_oInttHits.at(i).r*std::cos(m_oInttHits.at(i).phi) \
1433 << ", " << m_oInttHits.at(i).r*std::sin(m_oInttHits.at(i).phi) << ");" << std::endl;
1434 }
1435 for(Int_t i=0; i< m_TpcHits.size(); i++){
1436 std::cout << "hHitMapTpc->Fill(" << m_TpcHits.at(i).r*std::cos(m_TpcHits.at(i).phi) \
1437 << ", " << m_TpcHits.at(i).r*std::sin(m_TpcHits.at(i).phi) << ");" << std::endl;
1438 }
1439 for(Int_t i=0; i< m_emcalHits.size(); i++){
1440 if(m_emcalHits.at(i).energy > 0.1) std::cout << "hHitMapEmcal->Fill(" << m_emcalHits.at(i).r*std::cos(m_emcalHits.at(i).phi) \
1441 << ", " << m_emcalHits.at(i).r*std::sin(m_emcalHits.at(i).phi) << ");" << std::endl;
1442 }
1443
1444 std::cout << "hHitMapMvtx->Draw(\"BOX\");" << std::endl;
1445 std::cout << "hHitMapIntt->Draw(\"BOX same\");" << std::endl;
1446 std::cout << "hHitMapTpc->Draw(\"BOX same\");" << std::endl;
1447 std::cout << "hHitMapEmcal->Draw(\"BOX same\");" << std::endl;
1448 }
1449
1450
1451 void InttSeedTrackPerformance::ShowTrackInfo(tracKuma trk, Double_t dPt, Double_t centerX, Double_t centerY, Double_t sagittaR){
1452 std::cout << "222: dPt, R, Xc, Yc = " << dPt << ", " << sagittaR << ", " << centerX << ", " << centerY << std::endl;
1453 std::cout << "auto arc = new TArc(" << centerX << ", " << centerY << ", " << sagittaR << ");" << std::endl;
1454 std::cout << "arc->SetFillStyle(0);" << std::endl;
1455 std::cout << "arc->Draw(\"only\");" << std::endl;
1456
1457
1458 std::cout << "TH2D* hHitMapTrk = new TH2D( \"hHitMapTrk\", \"hHitMapTrk\", 2000, -100, 100, 2000, -100, 100);" << std::endl;
1459 std::cout << "hHitMapTrk->SetLineWidth(3);" << std::endl;
1460 std::cout << "hHitMapTrk->SetLineColor(632);" << std::endl;
1461
1462 std::cout << "hHitMapTrk->Fill(" << trk.getHitR(1)*std::cos(trk.getHitPhi(1)) \
1463 << ", " << trk.getHitR(1)*std::sin(trk.getHitPhi(1)) << ");" << std::endl;
1464 std::cout << "hHitMapTrk->Fill(" << trk.getHitR(2)*std::cos(trk.getHitPhi(2)) \
1465 << ", " << trk.getHitR(2)*std::sin(trk.getHitPhi(2)) << ");" << std::endl;
1466 std::cout << "hHitMapTrk->Fill(" << trk.getHitR(3)*std::cos(trk.getHitPhi(3)) \
1467 << ", " << trk.getHitR(3)*std::sin(trk.getHitPhi(3)) << ");" << std::endl;
1468 std::cout << "hHitMapTrk->Fill(" << trk.getHitR(4)*std::cos(trk.getHitPhi(4)) \
1469 << ", " << trk.getHitR(4)*std::sin(trk.getHitPhi(4)) << ");" << std::endl;
1470 std::cout << "hHitMapTrk->Fill(" << trk.getHitR(5)*std::cos(trk.getHitPhi(5)) \
1471 << ", " << trk.getHitR(5)*std::sin(trk.getHitPhi(5)) << ");" << std::endl;
1472 std::cout << "hHitMapTrk->Fill(" << trk.getHitR(6)*std::cos(trk.getHitPhi(6)) \
1473 << ", " << trk.getHitR(6)*std::sin(trk.getHitPhi(6)) << ");" << std::endl;
1474
1475 std::cout << "hHitMapTrk->Draw(\"BOX same\");" << std::endl;
1476 }
1477
1478 void InttSeedTrackPerformance::EventJudge(Int_t eventNum, Double_t targetVal, Double_t minLim, Double_t maxLim, bool bIn){
1479 if(bIn){
1480 if((targetVal > minLim)&&(targetVal < maxLim)){
1481 m_vTargetEvents.push_back(eventNum);
1482 }
1483 }else{
1484 if((targetVal < minLim)||(targetVal > maxLim)){
1485 m_vTargetEvents.push_back(eventNum);
1486 }
1487 }
1488
1489 }
1490
1491
1492 void InttSeedTrackPerformance::ChecKuma(std::string checkNo){
1493 std::cout <<"CheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecKuma"<< checkNo << std::endl;
1494 }
1495
1496 #endif