27 #include "TDirectory.h"
28 #include "TLorentzVector.h"
32 #include "AliAnalysisManager.h"
33 #include "AliESDInputHandler.h"
36 #include "AliESDEvent.h"
37 #include "AliESDpid.h"
38 #include "AliESDtrackCuts.h"
39 #include "AliESDtrackCuts.h"
40 #include "AliCFContainer.h"
41 #include "AliESDCaloCluster.h"
42 #include "AliPHOSGeoUtils.h"
43 #include "AliEMCALGeometry.h"
44 #include "AliCFContainer.h"
45 #include "AliMCEventHandler.h"
46 #include "AliMCEvent.h"
48 #include "AliKFParticle.h"
49 #include "AliKFVertex.h"
63 fOutputContainer(NULL),
64 fCFOutputContainer(NULL),
70 fTriggerCINT1B(kFALSE),
72 fMinOpeningAngleGhostCut(0.),
85 fnSigmaAboveElectronLine(5.),
86 fnSigmaBelowElectronLine(-3.),
87 fnSigmaAbovePionLine(0.),
88 fpnSigmaAbovePionLine(1.),
94 fchi2CutConversion(30.)
98 for(
Int_t i=0;i<nBin;i++){
104 for(
Int_t i=0; i<6; i++){
105 snprintf(key,55,
"PHOS_BadMap_mod%d",i) ;
106 fPHOSBadMap[i]=
new TH2I(key,
"Bad Modules map",64,0.,64.,56,0.,56.) ;
108 for(
Int_t i=0; i<10; i++){
109 snprintf(key,55,
"EMCAL_BadMap_mod%d",i) ;
110 fEMCALBadMap[i] =
new TH2I(key,
"Bad Modules map",24,0.,24.,48,0.,48.) ;
119 fOutputContainer(NULL),
120 fCFOutputContainer(NULL),
126 fTriggerCINT1B(kFALSE),
128 fMinOpeningAngleGhostCut(0.),
133 fBadDistCutPHOS(3.3),
134 fBadDistCutEMCAL(6.),
141 fnSigmaAboveElectronLine(5.),
142 fnSigmaBelowElectronLine(-3.),
143 fnSigmaAbovePionLine(0.),
144 fpnSigmaAbovePionLine(1.),
150 fchi2CutConversion(30.)
153 DefineInput (0, TChain::Class());
154 DefineOutput(0, TTree::Class());
157 DefineOutput(1, TList::Class());
158 DefineOutput(2, TList::Class());
161 for(
Int_t i=0;i<nBin;i++){
167 for(
Int_t i=0; i<6; i++){
168 snprintf(key,55,
"PHOS_BadMap_mod%d",i) ;
169 fPHOSBadMap[i]=
new TH2I(key,
"Bad Modules map",64,0.,64.,56,0.,56.) ;
171 for(
Int_t i=0; i<10; i++){
172 snprintf(key,55,
"EMCAL_BadMap_mod%d",i) ;
173 fEMCALBadMap[i] =
new TH2I(key,
"Bad Modules map",24,0.,24.,48,0.,48.) ;
182 if (AliAnalysisManager::GetAnalysisManager()->GetAnalysisType() !=
183 AliAnalysisManager::kProofAnalysis) {
204 for(
Int_t ivtx=0; ivtx<10; ivtx++){
218 for(
Int_t i=0; i<6; i++)
223 for(
Int_t i=0; i<10; i++)
245 AliESDInputHandler *esdHandler=
dynamic_cast<AliESDInputHandler*
>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
247 if( esdHandler && esdHandler->GetESDpid()){
248 fESDpid=
new AliESDpid(*(esdHandler->GetESDpid())) ;
253 if(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()){
254 alephParameters[0] = 2.15898e+00/50.;
255 alephParameters[1] = 1.75295e+01;
256 alephParameters[2] = 3.40030e-09;
257 alephParameters[3] = 1.96178e+00;
258 alephParameters[4] = 3.91720e+00;
259 fESDpid->GetTOFResponse().SetTimeResolution(80.);
262 alephParameters[0] = 0.0283086;
263 alephParameters[1] = 2.63394e+01;
264 alephParameters[2] = 5.04114e-11;
265 alephParameters[3] = 2.12543e+00;
266 alephParameters[4] = 4.88663e+00;
267 fESDpid->GetTOFResponse().SetTimeResolution(130.);
268 fESDpid->GetTPCResponse().SetMip(47.9);
271 fESDpid->GetTPCResponse().SetBetheBlochParameters(
272 alephParameters[0],alephParameters[1],alephParameters[2],
273 alephParameters[3],alephParameters[4]);
274 fESDpid->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
289 fESDtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
290 AliESDtrackCuts::kAny);
293 fESDtrackCuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
316 Bool_t isSelected = esdHandler && ((esdHandler->IsEventSelected()& AliVEvent::kMB) == AliVEvent::kMB);
318 printf(
"Not selected !!!!! \n") ;
335 if(
fESDEvent->GetPrimaryVertex()->GetNContributors()<=0) {
341 if(TMath::Abs(
fESDEvent->GetPrimaryVertex()->GetZ())>10.){
349 Int_t trackCounter = 0;
351 AliESDtrack *track =
new AliESDtrack(*
fESDEvent->GetTrack(i)) ;
352 if(
fESDtrackCuts->AcceptTrack(track) && TMath::Abs(track->Eta())< 0.9)
381 AliAnalysisTaskSE::ConnectInputData(option);
388 if(fDebug)gDirectory->Print() ;
407 Int_t iBin[3]={500,40,100};
408 fConvCFCont =
new AliCFContainer(
"ConvContainer",
"container for converted photons", 23,3,iBin);
414 fPHOSCFCont =
new AliCFContainer(
"PHOSContainer",
"container for PHOS photons", 10,2,iBin);
419 fEMCALCFCont =
new AliCFContainer(
"EMCALContainer",
"container for EMCAL photons", 10,2,iBin);
424 fPi0CFCont =
new AliCFContainer(
"Pi0Container",
"container for EMCAL photons", 10,2,iBin);
433 Int_t firstRun= 125000 ;
434 Int_t lastRun = 135000 ;
435 Int_t nRuns =lastRun-firstRun+1 ;
438 fOutputContainer->Add(
new TH2F(
"hRunTrigger",
"Triggers fired",nRuns,
float(firstRun),
float(lastRun),2,0.,2.)) ;
439 fOutputContainer->Add(
new TH1F(
"hRunEvents",
"Events per run",nRuns,
float(firstRun),
float(lastRun))) ;
440 fOutputContainer->Add(
new TH1F(
"hRunConvs",
"Conversion photons per run",nRuns,
float(firstRun),
float(lastRun))) ;
441 fOutputContainer->Add(
new TH1F(
"hRunPHOS",
"PHOS photons per run",nRuns,
float(firstRun),
float(lastRun))) ;
442 fOutputContainer->Add(
new TH1F(
"hRunEMCAL",
"EMCAL photons per run",nRuns,
float(firstRun),
float(lastRun))) ;
445 fOutputContainer->Add(
new TH1F(
"hEventsTrig",
"Events processed",10,0.,10.)) ;
447 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod1_soft",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
448 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod2_soft",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
449 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod3_soft",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
450 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod4_soft",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
451 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod5_soft",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
452 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod1_hard",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
453 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod2_hard",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
454 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod3_hard",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
455 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod4_hard",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
456 fOutputContainer->Add(
new TH2F(
"hQA_PHOS_mod5_hard",
"number of clusters per cell",64,0.,64.,56,0.,56.)) ;
458 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM0_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
459 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM1_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
460 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM2_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
461 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM3_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
462 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM4_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
463 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM5_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
464 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM6_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
465 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM7_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
466 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM8_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
467 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM9_soft",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
468 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM0_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
469 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM1_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
470 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM2_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
471 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM3_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
472 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM4_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
473 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM5_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
474 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM6_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
475 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM7_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
476 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM8_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
477 fOutputContainer->Add(
new TH2F(
"hQA_EMCAL_SM9_hard",
"number of clusters per cell",24,0.,24,48,0.,48.)) ;
479 fOutputContainer->Add(
new TH2F(
"hQA_ConvPhiEta",
"Number of V0s phi eta",100,0.,TMath::TwoPi(),40,-1.5,1.5)) ;
481 fOutputContainer->Add(
new TH2F(
"hdEdx",
"dEdx of acceptaed electrons",1000,0.,10.,150,0.,150.)) ;
488 fOutputContainer->Add(
new TH3F(
"PHOS_mod1_th1",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
489 fOutputContainer->Add(
new TH3F(
"PHOS_mod2_th1",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
490 fOutputContainer->Add(
new TH3F(
"PHOS_mod3_th1",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
491 fOutputContainer->Add(
new TH3F(
"PHOS_mod4_th1",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
492 fOutputContainer->Add(
new TH3F(
"PHOS_mod5_th1",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
494 fOutputContainer->Add(
new TH3F(
"PHOS_mod1_th2",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
495 fOutputContainer->Add(
new TH3F(
"PHOS_mod2_th2",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
496 fOutputContainer->Add(
new TH3F(
"PHOS_mod3_th2",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
497 fOutputContainer->Add(
new TH3F(
"PHOS_mod4_th2",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
498 fOutputContainer->Add(
new TH3F(
"PHOS_mod5_th2",
"Inv.Mass distr. per channel",64,0.,64,56,0.,56,100,0.,0.5)) ;
504 fOutputContainer->Add(
new TH3F(
"PHOS_Re_mvsPt_OnFly_mult",
"Mass vs pt",400,0.,1.,npt,0.,ptmax,150,0.,150.)) ;
505 fOutputContainer->Add(
new TH3F(
"PHOS_Re_mvsPt_Offline_mult",
"Mass vs pt",400,0.,1.,npt,0.,ptmax,150,0.,150.)) ;
519 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_On_Wcut_Neu",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
521 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_Off_Wcut_Neu",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
523 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_Off_ArmQt",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
542 fOutputContainer->Add(
new TH2F(
"PHOS_Mi_mvsPt_Off_ArmQt",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
546 fOutputContainer->Add(
new TH3F(
"EMCAL_Re_mvsPt_OnFly_mult",
"Mass vs pt",400,0.,1.,npt,0.,ptmax,30,0.,60.)) ;
547 fOutputContainer->Add(
new TH3F(
"EMCAL_Re_mvsPt_Offline_mult",
"Mass vs pt",400,0.,1.,npt,0.,ptmax,30,0.,60.)) ;
548 fOutputContainer->Add(
new TH2F(
"EMCAL_Re_mvsPt_On_ArmQt",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
549 fOutputContainer->Add(
new TH2F(
"EMCAL_Re_mvsPt_Off_ArmQt",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
551 fOutputContainer->Add(
new TH2F(
"EMCAL_Re_mvsPt_Off_dEdx",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
555 fOutputContainer->Add(
new TH2F(
"EMCAL_Re_mvsPt_Off_R120",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
563 fOutputContainer->Add(
new TH2F(
"EMCAL_Re_mvsPt_Off_Wcut",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
567 fOutputContainer->Add(
new TH2F(
"EMCAL_Mi_mvsPt_On_ArmQt",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
568 fOutputContainer->Add(
new TH2F(
"EMCAL_Mi_mvsPt_Off_ArmQt",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
570 fOutputContainer->Add(
new TH2F(
"EMCAL_Mi_mvsPt_Off_dEdx",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
574 fOutputContainer->Add(
new TH2F(
"EMCAL_Mi_mvsPt_Off_R120",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
582 fOutputContainer->Add(
new TH2F(
"EMCAL_Mi_mvsPt_Off_Wcut",
"Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
585 fOutputContainer->Add(
new TH3F(
"PHOS_Re_mvsPt_alpha",
"Mass vs pt vs PHOS E",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
586 fOutputContainer->Add(
new TH3F(
"PHOS_Re_mvsPt_E",
"Mass vs pt vs PHOS E",400,0.,1.,npt,0.,ptmax,100,0.,10.)) ;
589 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_Disp",
"Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
590 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_TOF",
"Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
591 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_Neutral",
"Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
592 fOutputContainer->Add(
new TH2F(
"PHOS_Re_mvsPt_DispNeutral",
"Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
596 fOutputContainer->Add(
new TH2F(
"PHOS_Mi_mvsPt_Disp",
"Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
597 fOutputContainer->Add(
new TH2F(
"PHOS_Mi_mvsPt_TOF",
"Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
598 fOutputContainer->Add(
new TH2F(
"PHOS_Mi_mvsPt_Neutral",
"Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
599 fOutputContainer->Add(
new TH2F(
"PHOS_Mi_mvsPt_DispNeutral",
"Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
602 for(
Int_t mod=1; mod<=5;mod++){
603 snprintf(key,155,
"PHOS_Re_mvsPt_mod%d_single",mod) ;
605 snprintf(key,155,
"PHOS_Re_mvsPt_mod%d_all",mod) ;
611 fOutputContainer->Add(
new TH1F(
"Single_conv_OnFly",
"Single photon spectrum",npt,0.,ptmax)) ;
612 fOutputContainer->Add(
new TH1F(
"Single_conv_Offline",
"Single photon spectrum",npt,0.,ptmax)) ;
613 fOutputContainer->Add(
new TH1F(
"Single_conv_On_ArmQt",
"Single photon spectrum",npt,0.,ptmax)) ;
614 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_ArmQt",
"Single photon spectrum",npt,0.,ptmax)) ;
615 fOutputContainer->Add(
new TH1F(
"Single_conv_On_dEdx",
"Single photon spectrum",npt,0.,ptmax)) ;
616 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_dEdx",
"Single photon spectrum",npt,0.,ptmax)) ;
619 fOutputContainer->Add(
new TH1F(
"Single_conv_On_R120",
"Single photon spectrum",npt,0.,ptmax)) ;
620 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_R120",
"Single photon spectrum",npt,0.,ptmax)) ;
621 fOutputContainer->Add(
new TH1F(
"Single_conv_On_Z",
"Single photon spectrum",npt,0.,ptmax)) ;
622 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_Z",
"Single photon spectrum",npt,0.,ptmax)) ;
623 fOutputContainer->Add(
new TH1F(
"Single_conv_On_chi",
"Single photon spectrum",npt,0.,ptmax)) ;
624 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_chi",
"Single photon spectrum",npt,0.,ptmax)) ;
625 fOutputContainer->Add(
new TH1F(
"Single_conv_On_Eta",
"Single photon spectrum",npt,0.,ptmax)) ;
626 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_Eta",
"Single photon spectrum",npt,0.,ptmax)) ;
627 fOutputContainer->Add(
new TH1F(
"Single_conv_On_Wcut",
"Single photon spectrum",npt,0.,ptmax)) ;
628 fOutputContainer->Add(
new TH1F(
"Single_conv_Off_Wcut",
"Single photon spectrum",npt,0.,ptmax)) ;
631 fOutputContainer->Add(
new TH2F(
"PHOS_single_all_mult",
"Single photon spectrum",npt,0.,ptmax,150,0.,150.)) ;
632 fOutputContainer->Add(
new TH2F(
"PHOS_single_disp_mult",
"Single photon spectrum",npt,0.,ptmax,150,0.,150.)) ;
633 fOutputContainer->Add(
new TH2F(
"PHOS_single_neu_mult",
"Single photon spectrum",npt,0.,ptmax,150,0.,150.)) ;
635 for(
Int_t mod=1; mod<=5;mod++){
636 snprintf(key,155,
"PHOS_single_mod%d_all",mod) ;
637 fOutputContainer->Add(
new TH1F(key,
"Single photon spectrum",npt,0.,ptmax)) ;
638 snprintf(key,155,
"PHOS_single_mod%d_disp",mod) ;
639 fOutputContainer->Add(
new TH1F(key,
"Single photon spectrum",npt,0.,ptmax)) ;
640 snprintf(key,155,
"PHOS_single_mod%d_neutral",mod) ;
641 fOutputContainer->Add(
new TH1F(key,
"Single photon spectrum",npt,0.,ptmax)) ;
642 snprintf(key,155,
"PHOS_single_mod%d_dispneutral",mod) ;
643 fOutputContainer->Add(
new TH1F(key,
"Single photon spectrum",npt,0.,ptmax)) ;
644 snprintf(key,155,
"PHOS_single_mod%d_dist1",mod) ;
645 fOutputContainer->Add(
new TH1F(key,
"Single photon spectrum",npt,0.,ptmax)) ;
646 snprintf(key,155,
"PHOS_single_mod%d_dist2",mod) ;
647 fOutputContainer->Add(
new TH1F(key,
"Single photon spectrum",npt,0.,ptmax)) ;
650 for(
Int_t mod=0; mod<4;mod++){
651 snprintf(key,155,
"EMCAL_mod%d_th1",mod) ;
652 fOutputContainer->Add(
new TH3F(key,
"Inv.Mass distr. per channel",24,0.,24,48,0.,48,100,0.,0.5)) ;
653 snprintf(key,155,
"EMCAL_mod%d_th2",mod) ;
654 fOutputContainer->Add(
new TH3F(key,
"Inv.Mass distr. per channel",24,0.,24,48,0.,48,100,0.,0.5)) ;
656 snprintf(key,155,
"EMCAL_Re_mvsPt_mod%d_single",mod) ;
659 snprintf(key,155,
"EMCAL_Re_mvsPt_mod%d_all",mod) ;
661 snprintf(key,155,
"EMCAL_Re_mvsPt_mod%d_Disp",mod) ;
663 snprintf(key,155,
"EMCAL_Re_mvsPt_mod%d_TOF",mod) ;
665 snprintf(key,155,
"EMCAL_Re_mvsPt_mod%d_Neutral",mod) ;
667 snprintf(key,155,
"EMCAL_Re_mvsPt_mod%d_DispNeutral",mod) ;
670 snprintf(key,155,
"EMCAL_Mi_mvsPt_mod%d_all",mod) ;
672 snprintf(key,155,
"EMCAL_Mi_mvsPt_mod%d_Disp",mod) ;
674 snprintf(key,155,
"EMCAL_Mi_mvsPt_mod%d_TOF",mod) ;
676 snprintf(key,155,
"EMCAL_Mi_mvsPt_mod%d_Neutral",mod) ;
678 snprintf(key,155,
"EMCAL_Mi_mvsPt_mod%d_DispNeutral",mod) ;
683 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_pi0_unitEta",
"Primary #pi^{0}",npt,0.,ptmax,150,0.,150.)) ;
684 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_eta_unitEta",
"Primary #pi^{0}",npt,0.,ptmax,150,0.,150.)) ;
685 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_allpi0",
"Primary #pi^{0}",npt,0.,ptmax)) ;
686 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_alleta",
"Primary #pi^{0}",npt,0.,ptmax)) ;
687 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0PHOSacc",
"#pi^{0} decayed in PHOS acc",npt,0.,ptmax)) ;
688 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_etaPHOSacc",
"#pi^{0} decayed in PHOS acc",npt,0.,ptmax)) ;
689 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0EMCALacc",
"#pi^{0} decayed in EMCAL acc",npt,0.,ptmax)) ;
690 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_etaEMCALacc",
"#pi^{0} decayed in EMCAL acc",npt,0.,ptmax)) ;
691 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_PHOS_conv",
"#pi^{0} decayed in PHOS acc asnd conv. photon",npt,0.,ptmax)) ;
692 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_PHOS_conv",
"#pi^{0} decayed in PHOS acc asnd conv. photon",npt,0.,ptmax)) ;
693 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_EMCAL_conv",
"#pi^{0} decayed in EMCAL acc asnd conv. photon",npt,0.,ptmax)) ;
694 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_EMCAL_conv",
"#pi^{0} decayed in EMCAL acc asnd conv. photon",npt,0.,ptmax)) ;
695 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_bothphot_conv",
"#pi^{0} both photons converted",npt,0.,ptmax)) ;
696 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_bothphot_conv",
"#pi^{0} both photons converted",npt,0.,ptmax)) ;
697 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_convPhotInCalo",
"#pi^{0} photon in calo converted",npt,0.,ptmax)) ;
698 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_convPhotInCalo",
"#pi^{0} photon in calo converted",npt,0.,ptmax)) ;
699 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
700 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
701 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
702 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
703 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_EMCALacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
704 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_EMCALacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
705 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_EMCALacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
706 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_EMCALacc",
"#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
707 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
708 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
709 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_pid",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
710 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_pid",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
711 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
712 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
713 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_pid",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
714 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_pid",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
715 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_good",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
716 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_good",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
717 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_good",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
718 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_good",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
719 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_mod1",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
720 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_mod1",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
721 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_mod2",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
722 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_mod2",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
723 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_mod3",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
724 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_mod3",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
725 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_mod4",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
726 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_mod4",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
727 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_PHOSclu_mod5",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
728 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0onfly_PHOSclu_mod5",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
729 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_mod1",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
730 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_mod1",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
731 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_mod2",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
732 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_mod2",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
733 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_mod3",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
734 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_mod3",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
735 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_mod4",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
736 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_mod4",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
737 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_PHOSclu_mod5",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
738 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0offline_PHOSclu_mod5",
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
740 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0on_PHOSclu_ptRec",
"#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
741 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0on_PHOSclu_ptRec",
"#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
742 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0off_PHOSclu_ptRec",
"#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
743 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_eta_v0off_PHOSclu_ptRec",
"#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
744 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_pi0_v0on_PHOSclu_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
745 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_eta_v0on_PHOSclu_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
746 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_pi0_v0off_PHOSclu_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
747 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_eta_v0off_PHOSclu_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
749 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0off_EMCALclu_ptRec",
"#pi^{0} V0 and cluster in EMCAL found (rec pt)",npt,0.,ptmax)) ;
750 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0on_EMCALclu_ptRec",
"#pi^{0} V0 and cluster in EMCAL found (rec pt)",npt,0.,ptmax)) ;
751 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_EMCALclu",
"#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
752 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_EMCALclu_pid",
"#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
753 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_EMCALclu",
"#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
754 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_EMCALclu_pid",
"#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
755 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0onfly_EMCALclu_good",
"#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
756 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_pi0_v0offline_EMCALclu_good",
"#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
757 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_pi0_v0on_EMCALclu_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
758 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_pi0_v0off_EMCALclu_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
760 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_Phot_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
761 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_Pi0_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
762 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_eta_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
763 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_K_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
764 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_pi_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
765 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_pbar_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
766 fOutputContainer->Add(
new TH3F(
"hMC_Resid_PHOS_other_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
767 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_Phot_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
768 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_Pi0_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
769 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_eta_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
770 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_K_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
771 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_pi_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
772 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_pbar_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
773 fOutputContainer->Add(
new TH3F(
"hMC_Resid_EMCAL_other_mvsPt",
"m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax,10,0.,1.)) ;
776 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_phot",
"Primary photons",npt,0.,ptmax)) ;
777 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gammaPHOSacc",
"Photons in PHOS acc",npt,0.,ptmax)) ;
778 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gammaEMCALacc",
"Photons in EMCAL acc",npt,0.,ptmax)) ;
779 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_conv",
"Converted photons",npt,0.,ptmax)) ;
780 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_v0",
"Converted photons with V0",npt,0.,ptmax)) ;
781 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_gamma_v0_devsE",
"Converted photons with V0",200,-1.,1.,npt,0.,ptmax)) ;
782 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_PHOSclu",
"Photons with cluster in PHOS",npt,0.,ptmax)) ;
783 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_PHOSclu_dist1",
"Photons with cluster in PHOS",npt,0.,ptmax)) ;
784 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_PHOSclu_dist2",
"Photons with cluster in PHOS",npt,0.,ptmax)) ;
785 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_EMCALclu",
"Photons with cluster in EMCAL",npt,0.,ptmax)) ;
786 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_EMCALclu_dist1",
"Photons with cluster in EMCAL",npt,0.,ptmax)) ;
787 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_EMCALclu_dist2",
"Photons with cluster in EMCAL",npt,0.,ptmax)) ;
788 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_PHOSclu_recE",
"Photons with cluster in PHOS",npt,0.,ptmax)) ;
789 fOutputContainer->Add(
new TH1F(
"hMC_CaloConv_gamma_EMCALclu_recE",
"Photons with cluster in EMCAL",npt,0.,ptmax)) ;
790 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_gamma_PHOSclu_devsE",
"Photons with cluster in PHOS",200,-1.,1.,npt,0.,ptmax)) ;
791 fOutputContainer->Add(
new TH2F(
"hMC_CaloConv_gamma_EMCALclu_devsE",
"Photons with cluster in EMCAL",200,-1.,1.,npt,0.,ptmax)) ;
796 for(
Int_t iw=0;iw<10;iw++){
797 for(
Int_t in=0;in<10;in++){
798 snprintf(keym,55,
"hMC_nonlinearity_w%d_n%d",iw,in) ;
800 snprintf(keym,55,
"hMC_nonlinearity_ConvPHOS_w%d_n%d",iw,in) ;
802 snprintf(keym,55,
"hMC_nonlinearity_EMCAL_w%d_n%d",iw,in) ;
804 snprintf(keym,55,
"hMC_CaloConv_pi0_v0onfly_PHOSclu_w%d_n%d",iw,in) ;
805 fOutputContainer->Add(
new TH1F(keym,
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
806 snprintf(keym,55,
"hMC_CaloConv_pi0_v0onfly_ConvPHOSclu_w%d_n%d",iw,in) ;
807 fOutputContainer->Add(
new TH1F(keym,
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
808 snprintf(keym,55,
"hMC_CaloConv_pi0_v0onfly_EMCALclu_w%d_n%d",iw,in) ;
809 fOutputContainer->Add(
new TH1F(keym,
"#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
814 fOutputContainer->Add(
new TH3F(
"All_chi2_eta_pt",
"MC chi2 vs eta vs phi",100,0.,100.,200,-2.,2.,npt,0.,ptmax)) ;
816 fOutputContainer->Add(
new TH3F(
"MC_V0_pt_eta_phi",
"MC pt vs eta vs phi",npt,0.,ptmax,200,-2.,2.,200,0.,TMath::TwoPi())) ;
817 fOutputContainer->Add(
new TH3F(
"MC_V0_m_eta_pt",
"MC m vs eta vs phi",400,0.,1.,200,-2.,2.,npt,0.,ptmax)) ;
818 fOutputContainer->Add(
new TH3F(
"MC_V0_chi2_eta_pt",
"MC chi2 vs eta vs phi",100,0.,100.,200,-2.,2.,npt,0.,ptmax)) ;
836 AliFatal(
"Can not read geometry matrixes from ESD/AOD: NO ESD") ;
838 fPHOSgeom =
new AliPHOSGeoUtils(
"IHEP",
"");
839 for(
Int_t mod=0; mod<5; mod++){
841 const TGeoHMatrix* m=esd->GetPHOSMatrix(mod) ;
848 fEMCALgeom = AliEMCALGeometry::GetInstance(
"EMCAL_FIRSTYEARV1");
849 for(
Int_t mod=0; mod < (
fEMCALgeom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){
851 const TGeoHMatrix* m=esd->GetEMCALMatrix(mod) ;
865 fPHOSEvent =
new TClonesArray(
"TLorentzVector",10) ;
871 vtx[0] =
fESDEvent->GetPrimaryVertex()->GetX();
872 vtx[1] =
fESDEvent->GetPrimaryVertex()->GetY();
873 vtx[2] =
fESDEvent->GetPrimaryVertex()->GetZ();
875 AliESDCaloCluster * clu =
fESDEvent->GetCaloCluster(i);
879 clu ->GetMomentum(p ,vtx);
883 if(clu->GetNCells()<=2){
887 Bool_t isNeutral = kTRUE ;
892 isNeutral = clu->GetEmcCpvDistance()>5. ;
894 Double_t l0=clu->GetM02(),l1=clu->GetM20() ;
895 if(l1>= 0 && l0>= 0 && l1 < 0.1 && l0 < 0.1) isDispOK=kFALSE ;
896 if(l1>= 0 && l0 > 0.5 && l1 < 0.1 && l0 < 1.5) isDispOK=kTRUE ;
897 if(l1>= 0 && l0 > 2.0 && l1 < 0.1 && l0 < 2.7) isDispOK=kFALSE ;
898 if(l1>= 0 && l0 > 2.7 && l1 < 0.1 && l0 < 4.0) isDispOK=kFALSE ;
899 if(l1 > 0.1 && l1 < 0.7 && l0 > 0.7 && l0 < 2.1) isDispOK=kTRUE ;
900 if(l1 > 0.1 && l1 < 0.3 && l0 > 3.0 && l0 < 5.0) isDispOK=kFALSE ;
901 if(l1 > 0.3 && l1 < 0.7 && l0 > 2.5 && l0 < 4.0) isDispOK=kFALSE ;
902 if(l1 > 0.7 && l1 < 1.3 && l0 > 1.0 && l0 < 1.6) isDispOK=kTRUE ;
903 if(l1 > 0.7 && l1 < 1.3 && l0 > 1.6 && l0 < 3.5) isDispOK=kTRUE ;
904 if(l1 > 1.3 && l1 < 3.5 && l0 > 1.3 && l0 < 3.5) isDispOK=kTRUE ;
907 clu->GetPosition(xyz);
908 TVector3 global(xyz) ;
910 if(!
fPHOSgeom->GlobalPos2RelId(global,relid)){
911 printf(
"PHOS_beyond: x=%f, y=%f, z=%f \n",xyz[0],xyz[1],xyz[2]) ;
925 p.SetBit(BIT(17+iMod),kTRUE) ;
927 new((*fPHOSEvent)[inPHOS]) TLorentzVector(p) ;
934 TString skey=
"PHOS_single_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_all" ;
938 skey=
"PHOS_single_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_disp" ;
943 skey=
"PHOS_single_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_neutral" ;
947 if(isNeutral && isDispOK){
948 skey=
"PHOS_single_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_dispneutral" ;
953 skey=
"PHOS_single_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_dist1" ;
957 skey=
"PHOS_single_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_dist2" ;
963 skey=
"hQA_PHOS_mod"; skey+=iMod; skey+=
"_soft" ;
966 skey=
"hQA_PHOS_mod"; skey+=iMod; skey+=
"_hard" ;
974 TLorentzVector *gammaConv=
static_cast<TLorentzVector*
>(
fConvEvent->At(iconv)) ;
976 skey=
"PHOS_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_th1" ;
979 skey=
"PHOS_"; skey+=
"mod"; skey+=iMod ; skey+=
"_th2" ;
992 fEMCALEvent =
new TClonesArray(
"TLorentzVector",10) ;
998 vtx[0] =
fESDEvent->GetPrimaryVertex()->GetX();
999 vtx[1] =
fESDEvent->GetPrimaryVertex()->GetY();
1000 vtx[2] =
fESDEvent->GetPrimaryVertex()->GetZ();
1003 AliESDCaloCluster * clu =
fESDEvent->GetCaloCluster(i);
1007 TLorentzVector pRecal ;
1008 clu ->GetMomentum(p ,vtx);
1009 Bool_t isNeutral = kTRUE ;
1010 Bool_t isDispOK = kTRUE ;
1016 isNeutral = clu->GetEmcCpvDistance()>10. ;
1017 if(clu->GetTOF()>550.e-9 && clu->GetTOF()<750.e-9)
1022 if(phi < 0) phi+=TMath::TwoPi();
1024 fEMCALgeom->GetAbsCellIdFromEtaPhi(p.Eta(),phi, absId);
1025 iMod=
fEMCALgeom->GetSuperModuleNumber(absId) ;
1026 Int_t imod = -1, iTower = -1, iIphi = -1, iIeta = -1, iphi = -1, ieta = -1;
1027 fEMCALgeom->GetCellIndex(absId,imod,iTower,iIphi,iIeta);
1028 fEMCALgeom->GetCellPhiEtaIndexInSModule(imod,iTower, iIphi, iIeta,iphi,ieta);
1029 if(imod<0 || imod>5){
1030 printf(
"EMCAL: Beyond the geometry!\n") ;
1031 printf(
"phi=%f, eta=%f, absId=%d, SM=%d \n",p.Eta(),phi, absId, imod) ;
1042 p.SetBit(BIT(17+imod),kTRUE) ;
1043 new((*fEMCALEvent)[inEMCAL]) TLorentzVector(p) ;
1049 if(clu->E()>0.5 && iMod>=0){
1050 TString skey=
"hQA_EMCAL_SM";skey+=iMod ; skey+=
"_soft" ;
1053 skey=
"hQA_EMCAL_SM";skey+=iMod ; skey+=
"_hard" ;
1061 TLorentzVector *gammaConv=
static_cast<TLorentzVector*
>(
fConvEvent->At(iconv)) ;
1063 TString skey=
"EMCAL_"; skey+=
"mod" ; skey+=iMod ; skey+=
"_th1" ;
1066 skey=
"EMCAL_"; skey+=
"mod"; skey+=iMod ; skey+=
"_th2" ;
1079 const Double_t cutSigmaMass=0.0001;
1080 const Bool_t useImprovedVertex=kTRUE ;
1082 const Double_t zrSlope12 = TMath::Tan(2*TMath::ATan(TMath::Exp(-1.2)));
1083 const Double_t zrSlope09 = TMath::Tan(2*TMath::ATan(TMath::Exp(-0.9)));
1087 fConvEvent =
new TClonesArray(
"TLorentzVector",10) ;
1092 if(
fESDEvent->GetPrimaryVertex()->GetNContributors()<=0) {
1100 AliESDtrack * pos =
fESDEvent->GetTrack(v0->GetPindex()) ;
1101 AliESDtrack * neg =
fESDEvent->GetTrack(v0->GetNindex()) ;
1102 const AliExternalTrackParam * paramPos = v0->GetParamP() ;
1103 const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
1104 if(pos->GetSign() <0){
1106 neg=
fESDEvent->GetTrack(v0->GetPindex()) ;
1108 paramNeg=v0->GetParamP() ;
1110 AliKFParticle negKF(*paramNeg,11);
1111 AliKFParticle posKF(*paramPos,-11);
1112 AliKFParticle photKF(negKF,posKF) ;
1113 photKF.SetMassConstraint(0,cutSigmaMass);
1115 if(useImprovedVertex){
1116 AliKFVertex primaryVertexImproved(*(
fESDEvent->GetPrimaryVertex()));
1118 if(primaryVertexImproved.GetNContributors()>1){
1119 primaryVertexImproved+=photKF;
1120 photKF.SetProductionVertex(primaryVertexImproved);
1124 photKF.GetMass(m,width);
1126 TLorentzVector photLV;
1129 photLV.SetXYZM(photKF.GetPx(),photKF.GetPy(),photKF.GetPz(),0.) ;
1132 Double_t a[3]={photLV.Pt(),photLV.Eta(),m} ;
1139 if (v0->GetOnFlyStatus()){
1150 if(neg->GetNcls(1) <2 || pos->GetNcls(1) <2){
1155 if(pos->GetSign() == neg->GetSign()){
1165 if( !(pos->GetStatus() & AliESDtrack::kTPCrefit) ||
1166 !(neg->GetStatus() & AliESDtrack::kTPCrefit) ){
1176 if( neg->GetKinkIndex(0) > 0 ||
1177 pos->GetKinkIndex(0) > 0) {
1188 const Double_t minPnSigmaAbovePionLine = 1. ;
1189 const Double_t maxPnSigmaAbovePionLine = 3. ;
1190 const Double_t nSigmaAbovePionLine = 0 ;
1191 if(pos->P()>minPnSigmaAbovePionLine && pos->P()<maxPnSigmaAbovePionLine ){
1192 if(
fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion)<nSigmaAbovePionLine){
1196 if(neg->P()>minPnSigmaAbovePionLine && neg->P()<maxPnSigmaAbovePionLine){
1197 if(
fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion)<nSigmaAbovePionLine){
1203 if(pos->P()>minPnSigmaAbovePionLine && pos->P()<maxPnSigmaAbovePionLine ){
1204 if(
fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion)<2.){
1208 if(neg->P()>minPnSigmaAbovePionLine && neg->P()<maxPnSigmaAbovePionLine){
1209 if(
fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion)<2.){
1216 const Double_t minPKaonRejection=1.5 ;
1217 const Double_t sigmaAroundLine=1. ;
1218 if(neg->P()<minPKaonRejection ){
1219 if(TMath::Abs(
fESDpid->NumberOfSigmasTPC(neg,AliPID::kKaon))<sigmaAroundLine){
1223 if(pos->P()<minPKaonRejection ){
1224 if(TMath::Abs(
fESDpid->NumberOfSigmasTPC(pos,AliPID::kKaon))<sigmaAroundLine){
1230 const Double_t minPProtonRejection=2. ;
1231 if(neg->P()<minPProtonRejection){
1236 if(pos->P()<minPProtonRejection ){
1242 const Double_t minPPionRejection=0.5 ;
1243 if(neg->P()<minPPionRejection ){
1244 if(TMath::Abs(
fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion))<sigmaAroundLine){
1248 if(pos->P()<minPPionRejection ){
1249 if( TMath::Abs(
fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion))<sigmaAroundLine){
1256 FillHistogram(
"hdEdx",paramPos->GetP(),pos->GetTPCsignal()) ;
1257 FillHistogram(
"hdEdx",paramNeg->GetP(),neg->GetTPCsignal()) ;
1265 neg->GetTPCpid(negProbArray);
1266 pos->GetTPCpid(posProbArray);
1267 if(negProbArray[AliPID::kElectron]<
fprobCut || posProbArray[AliPID::kElectron]<
fprobCut){
1278 v0->GetXYZ(v0x,v0y,v0z) ;
1279 Double_t r=TMath::Sqrt(v0x*v0x + v0y*v0y) ;
1287 Bool_t isStrictR=kFALSE ;
1298 if((TMath::Abs(v0z)*zrSlope12)-zOffset > r ){
1308 if(TMath::Abs(v0z) >
fmaxZ ){
1311 Bool_t isStrictZ=kFALSE ;
1312 if((TMath::Abs(v0z)*zrSlope09)-zOffset < r )
1322 if(photKF.GetNDF()<=0){
1332 Double_t chi2V0 = photKF.GetChi2()/photKF.GetNDF();
1333 FillHistogram(
"All_chi2_eta_pt",chi2V0,photLV.Eta(),photLV.Pt()) ;
1338 Bool_t isStrictChi=kFALSE ;
1339 if(chi2V0 < 0.7*fchi2CutConversion && chi2V0 >0){
1351 if(TMath::Abs(photLV.Eta())> wideEtaCut){
1354 if(TMath::Abs(paramPos->Eta())> wideEtaCut ||
1355 TMath::Abs(paramNeg->Eta())> wideEtaCut ){
1360 if(TMath::Abs(photLV.Eta())<
fetaCut &&
1361 TMath::Abs(paramPos->Eta())<
fetaCut &&
1362 TMath::Abs(paramNeg->Eta()) <
fetaCut){
1379 if(photLV.Pt()>0.5){
1381 while(phi<0.)phi+=TMath::TwoPi() ;
1382 while(phi>TMath::TwoPi())phi-=TMath::TwoPi() ;
1387 Bool_t isPlanarityCut = (0.08-0.22*w > m || 0.15*(w-2.4)>m) ;
1390 const Double_t armenterosAlphaCut=0.05 ;
1391 Double_t armenterosQtAlfa[2]={0.,0.} ;
1393 Bool_t isArmQt=(armenterosQtAlfa[1]<armenterosAlphaCut) ;
1399 photLV.SetBit(
kConvR,isStrictR) ;
1400 photLV.SetBit(
kConvZR,isStrictZ) ;
1401 photLV.SetBit(
kConvNDF,isStrictChi) ;
1402 photLV.SetBit(
kConvEta,isWideEta) ;
1403 photLV.SetBit(
kConvPlan,isPlanarityCut) ;
1405 new((*fConvEvent)[inConv]) TLorentzVector(photLV) ;
1415 if(isdEdx && !isWideEta)
1417 if(!isWideEta && isStrictR)
1419 if( !isWideEta && isStrictZ)
1421 if(!isWideEta && isStrictChi)
1425 if(!isWideEta && isPlanarityCut)
1427 if(!isWideEta && isArmQt)
1433 if(isdEdx && !isWideEta)
1435 if(!isWideEta && isStrictR)
1437 if(!isWideEta && isStrictZ)
1439 if(!isWideEta && isStrictChi)
1443 if(!isWideEta && isPlanarityCut)
1445 if(!isWideEta && isArmQt)
1451 TParticle * negativeMC =
fMCEvent->Particle(TMath::Abs(neg->GetLabel()));
1452 TParticle * positiveMC =
fMCEvent->Particle(TMath::Abs(pos->GetLabel()));
1454 if(!negativeMC || !positiveMC)
1457 if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
1460 if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
1463 if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
1467 TParticle * v0Gamma =
fMCEvent->Particle(negativeMC->GetMother(0));
1469 if(negativeMC->GetUniqueID() != 5 || positiveMC->GetUniqueID() !=5){
1472 if(v0Gamma->GetPdgCode() == 22){
1473 FillHistogram(
"MC_V0_pt_eta_phi",v0Gamma->Pt(),v0Gamma->Eta(),v0Gamma->Phi()) ;
1474 FillHistogram(
"MC_V0_m_eta_pt",m,v0Gamma->Eta(),v0Gamma->Pt()) ;
1475 FillHistogram(
"MC_V0_chi2_eta_pt",chi2V0,v0Gamma->Eta(),v0Gamma->Pt()) ;
1487 vtx[0] =
fESDEvent->GetPrimaryVertex()->GetX();
1488 vtx[1] =
fESDEvent->GetPrimaryVertex()->GetY();
1489 vtx[2] =
fESDEvent->GetPrimaryVertex()->GetZ();
1498 if(trigClasses.Contains(
"CINT1B-ABCE-NOPF-ALL"))
1519 for(
Int_t iConv = 0; iConv<nConv; iConv++){
1520 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
1530 for(
Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1531 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fPHOSEvent->At(iPHOS)) ;
1532 for(
Int_t iConv = 0; iConv<nConv; iConv++){
1533 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
1534 TLorentzVector
pi=*cal + *cnv ;
1535 Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
1539 for(
Int_t iw=0;iw<10;iw++){
1540 for(
Int_t in=0;in<10;in++){
1541 snprintf(keym,55,
"hMC_nonlinearity_w%d_n%d",iw,in) ;
1545 snprintf(keym,55,
"hMC_nonlinearity_ConvPHOS_w%d_n%d",iw,in) ;
1553 FillHistogram(
"PHOS_Re_mvsPt_E",pi.M(),pi.Pt(),cal->Energy()) ;
1608 FillHistogram(
"PHOS_Re_mvsPt_Off_Wcut_Neu",pi.M(),pi.Pt()) ;
1616 for(
Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1617 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fPHOSEvent->At(iPHOS)) ;
1619 while(!cal->TestBit(BIT(17+mod)) && mod<5)mod++ ;
1620 TString base(
"PHOS_Re_mvsPt_mod") ; base+=mod ;
1622 for(
Int_t iConv = 0; iConv<nConv; iConv++){
1623 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
1624 TLorentzVector
pi=*cal + *cnv ;
1625 full=base ; full+=
"_single" ;
1628 full=base ; full+=
"_all" ;
1633 for(
Int_t iEMCAL=0; iEMCAL<nEMCAL;iEMCAL++){
1634 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fEMCALEvent->At(iEMCAL)) ;
1636 while(!cal->TestBit(BIT(17+mod)) && mod<6)mod++ ;
1637 TString base(
"EMCAL_Re_mvsPt_mod") ; base+=mod ;
1639 for(
Int_t iConv = 0; iConv<nConv; iConv++){
1640 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
1641 TLorentzVector
pi=*cal + *cnv ;
1643 full=base+
"_single" ;
1649 for(
Int_t iw=0;iw<10;iw++){
1650 for(
Int_t in=0;in<10;in++){
1651 snprintf(keym,55,
"hMC_nonlinearity_EMCAL_w%d_n%d",iw,in) ;
1709 for(
Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1710 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fPHOSEvent->At(iPHOS)) ;
1711 for(
Int_t ev=0; ev<prevConv->GetSize();ev++){
1712 TClonesArray * mixConv =
static_cast<TClonesArray*
>(prevConv->At(ev)) ;
1713 for(
Int_t iConv = 0; iConv<mixConv->GetEntriesFast(); iConv++){
1714 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(mixConv->At(iConv)) ;
1715 TLorentzVector
pi=*cal + *cnv ;
1769 for(
Int_t iConv = 0; iConv<nConv; iConv++){
1770 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
1771 for(
Int_t ev=0; ev<prevPHOS->GetSize();ev++){
1772 TClonesArray * mixPHOS =
static_cast<TClonesArray*
>(prevPHOS->At(ev)) ;
1773 for(
Int_t iPHOS=0; iPHOS<mixPHOS->GetEntriesFast();iPHOS++){
1774 TLorentzVector * cal =
static_cast<TLorentzVector*
>(mixPHOS->At(iPHOS)) ;
1775 TLorentzVector
pi=*cal + *cnv ;
1871 for(
Int_t iEMCAL=0; iEMCAL<nEMCAL;iEMCAL++){
1872 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fEMCALEvent->At(iEMCAL)) ;
1874 while(!cal->TestBit(BIT(17+mod)) && mod<6)mod++ ;
1875 TString base(
"EMCAL_Mi_mvsPt_mod") ; base+=mod ;
1877 for(
Int_t ev=0; ev<prevConv->GetSize();ev++){
1878 TClonesArray * mixConv =
static_cast<TClonesArray*
>(prevConv->At(ev)) ;
1879 for(
Int_t iConv = 0; iConv<mixConv->GetEntriesFast(); iConv++){
1880 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(mixConv->At(iConv)) ;
1881 TLorentzVector
pi=*cal + *cnv ;
2017 if(prevPHOS->GetSize()>100){
2018 TClonesArray * tmp =
static_cast<TClonesArray*
>(prevPHOS->Last()) ;
2019 prevPHOS->RemoveLast() ;
2021 tmp =
static_cast<TClonesArray*
>(prevEMCAL->Last()) ;
2022 prevEMCAL->RemoveLast() ;
2024 tmp =
static_cast<TClonesArray*
>(prevConv->Last()) ;
2025 prevConv->RemoveLast() ;
2039 vtx[0] =
fESDEvent->GetPrimaryVertex()->GetX();
2040 vtx[1] =
fESDEvent->GetPrimaryVertex()->GetY();
2041 vtx[2] =
fESDEvent->GetPrimaryVertex()->GetZ();
2050 for (
Int_t iTracks = 0; iTracks <
fMCEvent->GetNumberOfTracks(); iTracks++) {
2051 TParticle* particle = (TParticle *)
fMCEvent->Particle(iTracks);
2052 if(particle->GetPdgCode() == 111)
2053 snprintf(partName,10,
"pi0") ;
2055 if(particle->GetPdgCode() == 221)
2056 snprintf(partName,10,
"eta") ;
2061 if(particle->R() >rcut)
2066 snprintf(hkey,55,
"hMC_CaloConv_all%s",partName) ;
2068 if(TMath::Abs(particle->Y())<1.){
2069 snprintf(hkey,55,
"hMC_CaloConv_%s_unitEta",partName) ;
2074 if(particle->GetNDaughters()!=2)
2077 TParticle * gamma1 =
fMCEvent->Particle(particle->GetFirstDaughter());
2078 TParticle * gamma2 =
fMCEvent->Particle(particle->GetLastDaughter());
2080 Bool_t inAcc1 = (TMath::Abs(gamma1->Eta())<0.9) ;
2081 Bool_t inAcc2 = (TMath::Abs(gamma2->Eta())<0.9) ;
2090 if((inAcc1 && hitPHOS2) || (inAcc2 && hitPHOS1)){
2091 snprintf(hkey,55,
"hMC_CaloConv_%sPHOSacc",partName) ;
2095 if((inAcc1 && hitEMCAL2) || (inAcc2 && hitEMCAL1)){
2096 snprintf(hkey,55,
"hMC_CaloConv_%sEMCALacc",partName) ;
2104 Bool_t converted1 = kFALSE ;
2105 if(gamma1->GetNDaughters()==2){
2106 TParticle * e1=
fMCEvent->Particle(gamma1->GetFirstDaughter()) ;
2107 TParticle * e2=
fMCEvent->Particle(gamma1->GetLastDaughter()) ;
2108 if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){
2110 converted1 = kTRUE ;
2113 Bool_t converted2 = kFALSE ;
2114 if(gamma2->GetNDaughters()==2){
2115 TParticle * e1=
fMCEvent->Particle(gamma2->GetFirstDaughter()) ;
2116 TParticle * e2=
fMCEvent->Particle(gamma2->GetLastDaughter()) ;
2117 if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){
2119 converted2 = kTRUE ;
2124 if((converted1 && !converted2 && hitPHOS2) || (!converted1 && hitPHOS1 && converted2)) {
2125 snprintf(hkey,55,
"hMC_CaloConv_%s_PHOS_conv",partName) ;
2129 if((converted1 && !converted2 && hitEMCAL2) || (!converted1 && hitEMCAL1 && converted2)) {
2130 snprintf(hkey,55,
"hMC_CaloConv_%s_EMCAL_conv",partName) ;
2135 if(converted1 && converted2) {
2136 snprintf(hkey,55,
"hMC_CaloConv_%s_bothphot_conv",partName) ;
2142 if((converted1 && hitPHOS1 && !hitEMCAL2) || (converted2 && hitPHOS2 && !hitEMCAL1) ||
2143 (converted1 && hitEMCAL1 && !hitPHOS2) || (converted2 && hitEMCAL2 && !hitPHOS1)){
2144 snprintf(hkey,55,
"hMC_CaloConv_%s_convPhotInCalo",partName) ;
2150 Bool_t foundV01onfly=kFALSE, foundV01offline=kFALSE, foundV02onfly=kFALSE, foundV02offline=kFALSE ;
2151 Bool_t foundV01onflyPID=kFALSE, foundV01offlinePID=kFALSE, foundV02onflyPID=kFALSE, foundV02offlinePID=kFALSE ;
2152 TLorentzVector pConvOn,pConvOff ;
2156 TParticle * negativeMC =
fMCEvent->Particle(TMath::Abs(
fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
2157 TParticle * positiveMC =
fMCEvent->Particle(TMath::Abs(
fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
2159 if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
2162 if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
2165 if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
2169 TParticle * v0Gamma =
fMCEvent->Particle(negativeMC->GetMother(0));
2170 Bool_t same = (v0Gamma == gamma1) ;
2171 TParticle * tmp = v0Gamma ;
2172 while(!same && tmp->GetFirstMother()>=0){
2173 tmp =
fMCEvent->Particle(tmp->GetFirstMother());
2174 same = (tmp == gamma1) ;
2177 if(v0->GetOnFlyStatus())
2178 foundV01onfly = kTRUE ;
2180 foundV01offline= kTRUE ;
2181 for(
Int_t iconv=0; iconv<nConv;iconv++){
2183 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iconv)) ;
2186 if(v0->GetOnFlyStatus()){
2188 foundV01onflyPID = kTRUE ;
2192 foundV01offlinePID = kTRUE ;
2200 same = (v0Gamma == gamma2) ;
2202 while(!same && tmp->GetFirstMother()>=0){
2203 tmp =
fMCEvent->Particle(tmp->GetFirstMother());
2204 same = (tmp == gamma2) ;
2207 if(v0->GetOnFlyStatus())
2208 foundV02onfly = kTRUE ;
2210 foundV02offline = kTRUE ;
2211 for(
Int_t iconv=0; iconv<nConv;iconv++){
2213 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iconv)) ;
2216 if(v0->GetOnFlyStatus()){
2218 foundV02onflyPID = kTRUE ;
2222 foundV02offlinePID = kTRUE ;
2232 if((foundV01onfly && hitPHOS2) || (foundV02onfly && hitPHOS1)){
2233 snprintf(hkey,55,
"hMC_CaloConv_%s_v0onfly_PHOSacc",partName) ;
2237 if((foundV01offline && hitPHOS2) || (foundV02offline && hitPHOS1)){
2238 snprintf(hkey,55,
"hMC_CaloConv_%s_v0offline_PHOSacc",partName) ;
2242 if((foundV01onfly && hitEMCAL2) || (foundV02onfly && hitEMCAL1)){
2243 snprintf(hkey,55,
"hMC_CaloConv_%s_v0onfly_EMCALacc",partName) ;
2247 if((foundV01offline && hitEMCAL2) || (foundV02offline && hitEMCAL1)){
2248 snprintf(hkey,55,
"hMC_CaloConv_%s_v0offline_EMCALacc",partName) ;
2257 Bool_t cluInPHOS = kFALSE,cluInEMCAL=kFALSE ;
2258 Bool_t cluInPHOSpid = kFALSE,cluInEMCALpid=kFALSE ;
2259 Bool_t closeToBad= kFALSE ;
2260 TLorentzVector pCalo ;
2262 AliESDCaloCluster * clu =
fESDEvent->GetCaloCluster(i);
2263 Int_t iprim = clu->GetLabel() ;
2264 Bool_t matched = kFALSE ;
2266 if(iprim==particle->GetFirstDaughter() || iprim==particle->GetLastDaughter()){
2271 iprim=
fMCEvent->Particle(iprim)->GetFirstMother() ;
2276 if(clu->IsPHOS() && (hitPHOS1 || hitPHOS2)){
2279 for(
Int_t inPHOS=0; inPHOS<nPHOS;inPHOS++){
2281 cluInPHOSpid=kTRUE ;
2285 clu->GetMomentum(pCalo ,vtx);
2290 if(!clu->IsPHOS() && (hitEMCAL1 || hitEMCAL2)){
2293 for(
Int_t inEMCAL=0; inEMCAL<nEMCAL;inEMCAL++){
2295 cluInPHOSpid=kTRUE ;
2299 clu->GetMomentum(pCalo ,vtx);
2308 if(foundV01onfly ||foundV02onfly){
2309 snprintf(hkey,55,
"hMC_CaloConv_%s_v0onfly_PHOSclu",partName) ;
2312 if((foundV01onflyPID ||foundV02onflyPID) && cluInPHOSpid){
2313 snprintf(hkey,55,
"hMC_CaloConv_%s_v0onfly_PHOSclu_pid",partName) ;
2315 for(
Int_t iw=0;iw<10;iw++){
2316 for(
Int_t in=0;in<10;in++){
2318 snprintf(keym,55,
"hMC_CaloConv_%s_v0onfly_PHOSclu_w%d_n%d",partName,iw,in) ;
2320 Recalibrate(mMod, ptMod, &pCalo, &pConvOn, iw, in) ;
2322 snprintf(keym,55,
"hMC_CaloConv_%s_v0onfly_ConvPHOSclu_w%d_n%d",partName,iw,in) ;
2328 snprintf(hkey,55,
"hMC_CaloConv_%s_v0onfly_PHOSclu_good",partName) ;
2332 Double_t ptm=(pCalo+pConvOn).Pt() ;
2333 snprintf(hkey,55,
"hMC_CaloConv_%s_v0on_PHOSclu_ptRec",partName) ;
2335 snprintf(hkey,55,
"hMC_CaloConv_%s_v0on_PHOSclu_mvsPt",partName) ;
2341 if(foundV01offline ||foundV02offline){
2342 snprintf(hkey,55,
"hMC_CaloConv_%s_v0offline_PHOSclu",partName) ;
2344 if((foundV01offlinePID ||foundV02offlinePID) && cluInPHOSpid){
2345 snprintf(hkey,55,
"hMC_CaloConv_%s_v0offline_PHOSclu_pid",partName) ;
2348 Double_t ptm=(pCalo+pConvOff).Pt() ;
2349 snprintf(hkey,55,
"hMC_CaloConv_%s_v0off_PHOSclu_ptRec",partName) ;
2351 snprintf(hkey,55,
"hMC_CaloConv_%s_v0off_PHOSclu_mvsPt",partName) ;
2354 snprintf(hkey,55,
"hMC_CaloConv_%s_v0offline_PHOSclu_good",partName) ;
2360 if((foundV01onflyPID ||foundV02onflyPID) && cluInPHOSpid){
2361 TString base(
"hMC_CaloConv_") ; base+=partName; base+=
"_v0onfly_PHOSclu_mod" ;
2369 if((foundV01offlinePID ||foundV02offlinePID) && cluInPHOSpid){
2370 TString base(
"hMC_CaloConv_") ; base+=partName; base+=
"_v0offline_PHOSclu_mod" ;
2378 if(cluInEMCAL && strcmp(partName,
"pi0")==0){
2380 if(foundV01onfly ||foundV02onfly){
2383 if((foundV01onflyPID ||foundV02onflyPID) && cluInEMCALpid){
2385 for(
Int_t iw=0;iw<10;iw++){
2386 for(
Int_t in=0;in<10;in++){
2388 snprintf(keym,55,
"hMC_CaloConv_pi0_v0onfly_EMCALclu_w%d_n%d",iw,in) ;
2395 FillHistogram(
"hMC_CaloConv_pi0_v0onfly_EMCALclu_good",pt) ;
2397 Double_t ptm=(pCalo+pConvOn).Pt() ;
2399 FillHistogram(
"hMC_CaloConv_pi0_v0on_EMCALclu_mvsPt",m,ptm) ;
2404 if(foundV01offline ||foundV02offline){
2406 if((foundV01offlinePID ||foundV02offlinePID) && cluInEMCALpid){
2407 FillHistogram(
"hMC_CaloConv_pi0_v0offline_EMCALclu_pid",pt) ;
2409 Double_t ptm=(pCalo+pConvOff).Pt() ;
2410 FillHistogram(
"hMC_CaloConv_pi0_v0off_EMCALclu_ptRec",ptm) ;
2411 FillHistogram(
"hMC_CaloConv_pi0_v0off_EMCALclu_mvsPt",m,ptm) ;
2413 FillHistogram(
"hMC_CaloConv_pi0_v0offline_EMCALclu_good",pt) ;
2422 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fPHOSEvent->At(iPHOS)) ;
2424 AliESDCaloCluster * clu =
fESDEvent->GetCaloCluster(iclu);
2425 Int_t iprimPHOS = clu->GetLabel() ;
2427 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
2433 Int_t iprimNeg = TMath::Abs(
fESDEvent->GetTrack(v0->GetNindex())->GetLabel()) ;
2434 Int_t iprimPos = TMath::Abs(
fESDEvent->GetTrack(v0->GetPindex())->GetLabel()) ;
2438 Int_t curPHOS=iprimPHOS ;
2440 while(!found && curPHOS>-1){
2441 Int_t curNeg=iprimNeg ;
2442 while(!found && curNeg>-1){
2443 if(curNeg==curPHOS){
2448 curNeg=
fMCEvent->Particle(curNeg)->GetFirstMother() ;
2451 curPHOS=
fMCEvent->Particle(curPHOS)->GetFirstMother() ;
2456 while(!found && curPHOS>-1){
2457 Int_t curPos=iprimPos ;
2458 while(!found && curPos>-1){
2459 if(curPos==curPHOS){
2464 curPos=
fMCEvent->Particle(curPos)->GetFirstMother() ;
2467 curPHOS=
fMCEvent->Particle(curPHOS)->GetFirstMother() ;
2469 if(commonA != commonB){
2471 AliInfo(Form(
"CommonA=%d, commonB=%d",commonA,commonB)) ;
2475 TLorentzVector
pi=*cal + *cnv ;
2478 Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
2517 TLorentzVector * cal =
static_cast<TLorentzVector*
>(
fEMCALEvent->At(iEMCAL)) ;
2519 AliESDCaloCluster * clu =
fESDEvent->GetCaloCluster(iclu);
2520 Int_t iprimEMCAL = clu->GetLabel() ;
2522 TLorentzVector * cnv =
static_cast<TLorentzVector*
>(
fConvEvent->At(iConv)) ;
2527 Int_t iprimNeg = TMath::Abs(
fESDEvent->GetTrack(v0->GetNindex())->GetLabel()) ;
2528 Int_t iprimPos = TMath::Abs(
fESDEvent->GetTrack(v0->GetPindex())->GetLabel()) ;
2532 Int_t curEMCAL=iprimEMCAL ;
2534 while(!found && curEMCAL>-1){
2535 Int_t curNeg=iprimNeg ;
2536 while(!found && curNeg>-1){
2537 if(curNeg==curEMCAL){
2542 curNeg=
fMCEvent->Particle(curNeg)->GetFirstMother() ;
2545 curEMCAL=
fMCEvent->Particle(curEMCAL)->GetFirstMother() ;
2548 curEMCAL=iprimEMCAL ;
2550 while(!found && curEMCAL>-1){
2551 Int_t curPos=iprimPos ;
2552 while(!found && curPos>-1){
2553 if(curPos==curEMCAL){
2558 curPos=
fMCEvent->Particle(curPos)->GetFirstMother() ;
2561 curEMCAL=
fMCEvent->Particle(curEMCAL)->GetFirstMother() ;
2564 if(commonA != commonB){
2566 AliInfo(Form(
"CommonA=%d, commonB=%d",commonA,commonB)) ;
2570 TLorentzVector
pi=*cal + *cnv ;
2573 Double_t alpha=TMath::Abs(cal->Energy()-cnv->Energy())/(cal->Energy()+cnv->Energy()) ;
2611 for (
Int_t iTracks = 0; iTracks <
fMCEvent->GetNumberOfTracks(); iTracks++) {
2612 TParticle* particle = (TParticle *)
fMCEvent->Particle(iTracks);
2613 if(particle->GetPdgCode() != 22)
2616 if(particle->R() >rcut)
2619 if(TMath::Abs(particle->Eta())>0.9)
2638 Bool_t converted = kFALSE ;
2639 if(particle->GetNDaughters()==2){
2640 TParticle * e1=
fMCEvent->Particle(particle->GetFirstDaughter()) ;
2641 TParticle * e2=
fMCEvent->Particle(particle->GetLastDaughter()) ;
2642 if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){
2651 TLorentzVector pConv ;
2656 TParticle * negativeMC =
fMCEvent->Particle(TMath::Abs(
fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
2657 TParticle * positiveMC =
fMCEvent->Particle(TMath::Abs(
fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
2659 if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
2662 if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
2665 if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
2669 TParticle * v0Gamma =
fMCEvent->Particle(negativeMC->GetMother(0));
2670 Bool_t same = (v0Gamma == particle) ;
2671 TParticle * tmp = v0Gamma ;
2672 while(!same && tmp->GetFirstMother()>=0){
2673 tmp =
fMCEvent->Particle(tmp->GetFirstMother());
2674 same = (tmp == particle) ;
2678 const AliExternalTrackParam * paramPos = v0->GetParamP() ;
2679 const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
2680 AliKFParticle negKF(*paramNeg,11);
2681 AliKFParticle posKF(*paramPos,-11);
2682 pConv.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
2688 FillHistogram(
"hMC_CaloConv_gamma_v0_devsE",(particle->Energy()-pConv.E())/particle->Energy(),particle->Energy()) ;
2692 Bool_t cluInPHOS = kFALSE,cluInEMCAL=kFALSE ;
2693 TLorentzVector pCalo ;
2694 Bool_t dist1=kFALSE, dist2=kFALSE ;
2696 AliESDCaloCluster * clu =
fESDEvent->GetCaloCluster(i);
2697 Int_t iprim = clu->GetLabel() ;
2698 Bool_t matched = kFALSE ;
2705 iprim=
fMCEvent->Particle(iprim)->GetFirstMother() ;
2710 if(clu->IsPHOS() && hitPHOS){
2712 clu->GetMomentum(pCalo ,vtx);
2719 if(!clu->IsPHOS() && hitEMCAL){
2721 clu->GetMomentum(pCalo ,vtx);
2736 FillHistogram(
"hMC_CaloConv_gamma_PHOSclu_recE",pCalo.E()) ;
2737 FillHistogram(
"hMC_CaloConv_gamma_PHOSclu_devsE",(particle->Energy()-pCalo.E())/particle->Energy(),particle->Energy()) ;
2745 FillHistogram(
"hMC_CaloConv_gamma_EMCALclu_recE",pCalo.E()) ;
2746 FillHistogram(
"hMC_CaloConv_gamma_EMCALclu_devsE",(particle->Energy()-pCalo.E())/particle->Energy(),particle->Energy()) ;
2755 AliInfo(Form(
"can not find histogram <%s> ",key)) ;
2765 AliInfo(Form(
"can not find histogram <%s> ",key)) ;
2768 if(tmp->IsA() == TClass::GetClass(
"TH1F")){
2769 ((TH1F*)tmp)->Fill(x,y) ;
2772 if(tmp->IsA() == TClass::GetClass(
"TH2F")){
2773 ((
TH2F*)tmp)->Fill(x,y) ;
2776 AliError(Form(
"Calling FillHistogram with 2 parameters for histo <%s> of type %s",key,tmp->IsA()->GetName())) ;
2784 AliInfo(Form(
"can not find histogram <%s> ",key)) ;
2787 if(tmp->IsA() == TClass::GetClass(
"TH2F")){
2788 ((
TH2F*)tmp)->Fill(x,y,z) ;
2791 if(tmp->IsA() == TClass::GetClass(
"TH3F")){
2792 ((
TH3F*)tmp)->Fill(x,y,z) ;
2801 TVector3 u(paramPos->Px()+paramNeg->Px(),paramPos->Py()+paramNeg->Py(),paramPos->Pz()+paramNeg->Pz()) ;
2803 TVector3 vPos(paramPos->Px(),paramPos->Py(),paramPos->Pz()) ;
2804 TVector3 vNeg(paramNeg->Px(),paramNeg->Py(),paramNeg->Pz()) ;
2805 TVector3 v=vPos.Cross(vNeg) ;
2806 TVector3 w = u.Cross(v);
2808 TVector3 ua=u.Cross(z);
2814 return TMath::Pi()-wa ;
2821 if(strcmp(det,
"PHOS")==0){
2823 AliError(Form(
"No bad map for PHOS module %d ",mod)) ;
2827 AliError(Form(
"No Bad map for PHOS module %d",mod)) ;
2836 if(strcmp(det,
"EMCAL")==0){
2838 AliError(Form(
"No bad map for EMCAL module %d ",mod)) ;
2842 AliError(Form(
"No bad map for EMCAL module %d ",mod)) ;
2851 AliError(Form(
"Can not find bad channels for detector %s ",det)) ;
2860 TLorentzVector calo2(*calo) ;
2867 Double_t enNew=1.-a*TMath::Exp(-en/b) ;
2871 m=(calo2+ *conv).M() ;
2872 pt=(calo2+ *conv).Pt() ;
2878 TLorentzVector calo2(*calo) ;
2885 Double_t enNew=1.-a*TMath::Exp(-en/b) ;
2889 m=(calo2+ *conv).M() ;
2890 pt=(calo2+ *conv).Pt() ;
2898 TLorentzVector calo2(*calo) ;
2905 Double_t enNew=1.+a*TMath::Exp(-en/b) ;
2910 TLorentzVector conv2(*conv) ;
2914 eta+= c *TMath::Sign(0.9-TMath::Abs(eta),eta) ;
2921 Double_t enNewc=1.+ac*TMath::Exp(-enConv/bc) ;
2922 corr=
gRandom->Gaus(enNewc,0.01) ;
2924 conv2.SetPtEtaPhiM(ptc,eta,conv2.Phi(),0.) ;
2926 m =(calo2 + conv2).M() ;
2927 pt=(calo2 + conv2).Pt() ;
2934 TVector3 momentumVectorPositiveKF(positiveKFParticle->GetPx(),positiveKFParticle->GetPy(),positiveKFParticle->GetPz());
2935 TVector3 momentumVectorNegativeKF(negativeKFParticle->GetPx(),negativeKFParticle->GetPy(),negativeKFParticle->GetPz());
2936 TVector3 vecV0(gammaKFCandidate->GetPx(),gammaKFCandidate->GetPy(),gammaKFCandidate->GetPz());
2938 Float_t thetaV0pos=TMath::ACos(( momentumVectorPositiveKF* vecV0)/(momentumVectorPositiveKF.Mag() * vecV0.Mag()));
2939 Float_t thetaV0neg=TMath::ACos(( momentumVectorNegativeKF* vecV0)/(momentumVectorNegativeKF.Mag() * vecV0.Mag()));
2941 Float_t alfa =((momentumVectorPositiveKF.Mag())*TMath::Cos(thetaV0pos)-(momentumVectorNegativeKF.Mag())*TMath::Cos(thetaV0neg))/
2942 ((momentumVectorPositiveKF.Mag())*TMath::Cos(thetaV0pos)+(momentumVectorNegativeKF.Mag())*TMath::Cos(thetaV0neg)) ;
2945 Float_t qt = momentumVectorPositiveKF.Mag()*TMath::Sin(thetaV0pos);
2947 armenterosQtAlfa[0]=qt;
2948 armenterosQtAlfa[1]=alfa;
virtual void UserExec(Option_t *option)
AliPHOSGeoUtils * fPHOSgeom
void FillHistogram(const char *key, Double_t x) const
Bool_t IsGoodChannel(const char *det="PHOS", Int_t mod=1, Int_t ix=1, Int_t iz=1)
Double_t fPi0Thresh1
EMCAL geometry.
void RecalibrateConvPHOS(Double_t &m, Double_t &pt, const TLorentzVector *calo, const TLorentzVector *conv, Int_t iw, Int_t in)
AliAnalysisTaskCaloConv()
void GetArmenterosQtAlfa(AliKFParticle *positiveKFParticle, AliKFParticle *negativeKFParticle, AliKFParticle *gammaKFCandidate, Double_t armenterosQtAlfa[2])
Double_t fnSigmaBelowElectronLine
AliCFContainer * fPHOSCFCont
AliEMCALGeometry * fEMCALgeom
PHOS geometry.
Double_t PlanarityAngle(const AliExternalTrackParam *pos, const AliExternalTrackParam *neg) const
AliCFContainer * fEMCALCFCont
AliESDtrackCuts * fESDtrackCuts
AliCFContainer * fPi0CFCont
void RecalibrateEMCAL(Double_t &m, Double_t &pt, const TLorentzVector *calo, const TLorentzVector *conv, Int_t iw, Int_t in)
void SelectEMCALPhotons()
Double_t fnSigmaAboveElectronLine
TClonesArray * fConvEvent
TClonesArray * fPHOSEvent
AliESDpid * fESDpid
pointer to the ESDEvent
virtual void ConnectInputData(Option_t *option)
ClassImp(AliAnalysisTaskCaloConv) AliAnalysisTaskCaloConv
void Recalibrate(Double_t &m, Double_t &pt, const TLorentzVector *calo, const TLorentzVector *conv, Int_t iw, Int_t in)
TClonesArray * fEMCALEvent
virtual void UserCreateOutputObjects()
TList * fCFOutputContainer
AliCFContainer * fConvCFCont
Double_t fchi2CutConversion
Double_t fBadDistCutEMCAL
virtual ~AliAnalysisTaskCaloConv()