81{
83
84 std::cout << std::endl;
85 std::cout << std::endl;
86 std::cout << "--- CaloHadDMCoeffCheck::process() --- " << std::endl;
87
98 }
102
105
106
107 m_data->fChain->SetBranchStatus(
"*",0);
108 m_data->fChain->SetBranchStatus(
"mc_ener",1);
109 m_data->fChain->SetBranchStatus(
"mc_eta",1);
110 m_data->fChain->SetBranchStatus(
"mc_phi",1);
111 m_data->fChain->SetBranchStatus(
"mc_pdg",1);
112 m_data->fChain->SetBranchStatus(
"ncls",1);
113 m_data->fChain->SetBranchStatus(
"cls_eta",1);
114 m_data->fChain->SetBranchStatus(
"cls_phi",1);
115 m_data->fChain->SetBranchStatus(
"cls_lambda",1);
116 m_data->fChain->SetBranchStatus(
"cls_calib_emfrac",1);
117 m_data->fChain->SetBranchStatus(
"cls_engcalib",1);
118 m_data->fChain->SetBranchStatus(
"engClusSumCalib",1);
119 m_data->fChain->SetBranchStatus(
"cls_ener_unw",1);
120 m_data->fChain->SetBranchStatus(
"narea",1);
121 m_data->fChain->SetBranchStatus(
"cls_eprep",1);
122 m_data->fChain->SetBranchStatus(
"cls_dmener",1);
123 m_data->fChain->SetBranchStatus(
"cls_smpener_unw",1);
124 m_data->fChain->SetBranchStatus(
"cls_oocener",1);
125 m_data->fChain->SetBranchStatus(
"cls_engcalibpres",1);
126
127 if( !
m_data->GetEntries() ) {
128 std::cout << "CaloHadDMCoeffCheck::process -> Error! No entries in DeadMaterialTree." << std::endl;
129 return 0;
130 }
131
132 std::vector<std::vector<std::vector<CaloHadDMCoeffFit::PrepData *> > > ereco;
133 std::vector<std::vector<std::vector<CaloHadDMCoeffFit::PrepData *> > > etrue;
135 ereco.resize(nArea);
136 etrue.resize(nArea);
137 for(int i_area=0; i_area<nArea; i_area++){
140 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
144 ereco[i_area][i_eta][i_ener] = new CaloHadDMCoeffFit::PrepData();
145 etrue[i_area][i_eta][i_ener] = new CaloHadDMCoeffFit::PrepData();
146 }
147 }
148 }
149
150
151
152
153
154 std::cout << "CaloHadDMCoeffCheck::process() -> Info. First loop to find histogram limits " << std::endl;
155 for(
int i_ev=0;
m_data->GetEntry(i_ev)>0;i_ev++) {
156 if(i_ev%10000==0) std::cout <<
" i_ev: " << i_ev <<
" '" <<
static_cast<TChain *
>(
m_data->fChain)->GetFile()->GetName() <<
"'" << std::endl;
157 if(
m_data->m_mc_ener <= 0.0) {
158 std::cout <<
"CaloHadDMCoeffCheck::process() -> Warning! Unknown particle energy " <<
m_data->m_mc_ener << std::endl;
159 continue;
160 }
161
162
163 if(isSingleParticle) {
164 bool GoodClusterFound(false);
166 HepLorentzVector hlv_pion(1,0,0,1);
168 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
169 HepLorentzVector hlv_cls(1,0,0,1);
170 hlv_cls.setREtaPhi(1./cosh( (*
m_data->m_cls_eta)[i_cls] ), (*
m_data->m_cls_eta)[i_cls], (*
m_data->m_cls_phi)[i_cls]);
171 double r = hlv_pion.angle(hlv_cls.vect());
173 && (*
m_data->m_cls_engcalib)[i_cls] > 20.0*MeV
174
175 ) {
176 GoodClusterFound = true;
177 break;
178 }
179 }
180 }
181 if(!GoodClusterFound) continue;
182 }
183
187
188 if(mc_etabin <0 || mc_etabin >=
m_netabin || mc_enerbin <0 || mc_enerbin >=
m_nlogenerbin || mc_phibin!=0)
continue;
189 if(
m_data->m_engClusSumCalib <=0.0)
continue;
190
191 std::vector<std::vector<double > > engDmReco;
193 std::vector<double > engDmRecSumClus;
194 std::vector<double > engDmTrueSumClus;
195 engDmRecSumClus.resize(nArea, 0.0);
196 engDmTrueSumClus.resize(nArea, 0.0);
197 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
198 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet(); i_area++){
199 engDmRecSumClus[i_area] += engDmReco[i_cls][i_area];
200 engDmTrueSumClus[i_area] += (*
m_data->m_cls_dmener)[i_cls][i_area];
201 engDmRecSumClus[
m_HadDMCoeff->getSizeAreaSet()] += engDmReco[i_cls][i_area];
202 engDmTrueSumClus[
m_HadDMCoeff->getSizeAreaSet()] += (*
m_data->m_cls_dmener)[i_cls][i_area];
203 }
204 }
205 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet()+1; i_area++){
206 ereco[i_area][mc_etabin][mc_enerbin]->add(engDmRecSumClus[i_area]);
207 etrue[i_area][mc_etabin][mc_enerbin] ->
add(engDmTrueSumClus[i_area]);
208 }
209 }
210
211
212
213
214
218 for(int i_area=0; i_area<nArea; i_area++){
221 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
225 float elimreco = ereco[i_area][i_eta][i_ener]->m_aver + 5.*sqrt(ereco[i_area][i_eta][i_ener]->m_rms);
226 float elimtrue = etrue[i_area][i_eta][i_ener]->m_aver + 5.*sqrt(etrue[i_area][i_eta][i_ener]->m_rms);
227 if(elimreco <=0.0) elimreco = 1.0;
228 if(elimtrue <=0.0) elimtrue = 1.0;
229
230 sprintf(hname,"h2_etrue_vs_ereco_dm%d_eta%d_ener%d",i_area, i_eta, i_ener);
232 sprintf(hname,"hp_etrue_vs_ereco_dm%d_eta%d_ener%d",i_area, i_eta, i_ener);
236 }
237 }
238 }
239
240
242 for(
int i_pdg=0; i_pdg<
m_npdg; i_pdg++){
244 for(int i_area=0; i_area<nArea; i_area++){
246 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
249 sprintf(hname,"m_hp_engRecoOverTruth_vs_eta_pdg%d_dm%d_reco%d_ener%d",i_pdg,i_area, i_reco, i_ener);
251 }
252 }
253 }
254 }
255
256
258 for(
int i_pdg=0; i_pdg<
m_npdg; i_pdg++){
260 for(int i_area=0; i_area<nArea; i_area++){
262 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
266 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
267 sprintf(hname,"m_engRecSpect_pdg%d_dm%d_reco%d_ener%d_eta%d",i_pdg,i_area, i_reco, i_ener, i_eta);
268 TH1F *
h1 =
new TH1F(hname, hname, 110, -0.2, 2.0);
270 }
271 }
272 }
273 }
274 }
275
276
277
278
279 std::cout << "CaloHadDMCoeffCheck::process() -> Info. Second loop to fill histogram " << std::endl;
280 for(
int i_ev=0;
m_data->GetEntry(i_ev)>0;i_ev++) {
281 if(i_ev%10000==0) std::cout <<
" i_ev: " << i_ev <<
" '" <<
static_cast<TChain *
>(
m_data->fChain)->GetFile()->GetName() <<
"'" << std::endl;
282
286 if(mc_etabin <0 || mc_etabin >=
m_netabin || mc_enerbin <0 || mc_enerbin >=
m_nlogenerbin || mc_phibin!=0)
continue;
287 if(
m_data->m_engClusSumCalib <=0.0)
continue;
288
289 int i_pdg=0;
290 if( abs(
m_data->m_mc_pdg)==211) {
291 i_pdg=0;
292 }else{
293 i_pdg=1;
294 }
295
296 std::vector<std::vector<double > > engDmReco;
298 std::vector<double > engDmRecSumClus;
299 std::vector<double > engDmTrueSumClus;
300 engDmRecSumClus.resize(nArea, 0.0);
301 engDmTrueSumClus.resize(nArea, 0.0);
302 double engClusSumCalib = 0.0;
303 double engClusSumOOC = 0.0;
304 double engClusSumDM = 0.0;
305 double engClusSumCalibInPresampler = 0.0;
306
307 for(
int i_cls=0; i_cls<
m_data->m_ncls; i_cls++){
308 engClusSumCalib +=
m_data->m_cls_engcalib ? (*
m_data->m_cls_engcalib)[i_cls] : 0.0;
309 engClusSumOOC +=
m_data->m_cls_oocener ? (*
m_data->m_cls_oocener)[i_cls] : 0.0;
310 engClusSumCalibInPresampler +=
m_data->m_cls_engcalibpres ? (*
m_data->m_cls_engcalibpres)[i_cls] : 0.0;
311 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet(); i_area++){
312 engDmRecSumClus[i_area] += engDmReco[i_cls][i_area];
313 engDmTrueSumClus[i_area] +=
m_data->m_cls_dmener ? (*
m_data->m_cls_dmener)[i_cls][i_area] : 0.0;
314 engDmRecSumClus[
m_HadDMCoeff->getSizeAreaSet()] += engDmReco[i_cls][i_area];
316 m_data->m_cls_dmener ? (*
m_data->m_cls_dmener)[i_cls][i_area] : 0.0;
317 engClusSumDM +=
m_data->m_cls_dmener ? (*
m_data->m_cls_dmener)[i_cls][i_area] : 0.0;
318 }
319 }
320 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet()+1; i_area++){
321 m_h2_etrue_vs_ereco[i_area][mc_etabin][mc_enerbin]->Fill(engDmTrueSumClus[i_area], engDmRecSumClus[i_area]);
322 m_hp_etrue_vs_ereco[i_area][mc_etabin][mc_enerbin]->Fill(engDmTrueSumClus[i_area], engDmRecSumClus[i_area]);
323 }
324
325
326 double sum = engClusSumCalib + engClusSumOOC + engClusSumDM - engClusSumCalibInPresampler;
327 for(
int i_area=0; i_area<
m_HadDMCoeff->getSizeAreaSet()+1; i_area++){
328 for(
int i_reco=0; i_reco<
m_nrecobin; i_reco++){
329 double engReco = 0.0;
331 engReco =
sum - engDmTrueSumClus[i_area] + engDmRecSumClus[i_area];
335 engReco =
sum - engDmTrueSumClus[i_area];
336 }else{
337 std::cout << "panic" << std::endl;
338 }
340 m_engRecSpect[i_pdg][i_area][i_reco][mc_enerbin][mc_etabin]->Fill(engReco/
m_data->m_mc_ener);
341 }
342 }
343
344 }
345
346
347
348
349 TF1 *fun_p1 = new TF1("fun_udeg3","[0]+[1]*x",1.,200000.);
350 for(int i_area=0; i_area<nArea; i_area++){
351 for(
int i_eta=0; i_eta<
m_netabin; i_eta++){
354 if(hp->GetEntries() < 100) continue;
355 float fitlim1 = hp->GetBinCenter(2);
356 float fitlim2 = hp->GetBinCenter(30);
357 hp->Fit(fun_p1,"0Q","",fitlim1,fitlim2);
358 TF1 *
f=hp->GetFunction(fun_p1->GetName());
359 if(f) {
360 f->ResetBit(TF1::kNotDraw);
363 }
364 }
365 }
366 }
367
368
369
370 return 0;
371}
void getDmReco(std::vector< std::vector< double > > &engDmReco)
static double angle_mollier_factor(double x)
bool add(const std::string &hname, TKey *tobj)
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)