19 #include <TClonesArray.h>
20 #include <TObjString.h>
22 #include "TParticle.h"
23 #include "TDatabasePDG.h"
24 #include "AliVTrack.h"
33 #include "AliVCluster.h"
34 #include "AliAODMCParticle.h"
35 #include "AliMixedEvent.h"
46 fMinDist(0.), fMinDist2(0.), fMinDist3(0.),
47 fTimeCutMin(-1), fTimeCutMax(999999),
48 fNCellsCut(0), fNLMCutMin(-1), fNLMCutMax(10),
49 fFillSSHistograms(kFALSE), fFillOnlySimpleSSHisto(1),
50 fFillWeightHistograms(kFALSE), fNOriginHistograms(8),
51 fdEdxMin(0.), fdEdxMax (200.),
52 fEOverPMin(0), fEOverPMax (2),
54 fMomentum(), fMomentumMC(), fProdVertex(),
56 fhdEdxvsE(0), fhdEdxvsP(0),
57 fhEOverPvsE(0), fhEOverPvsP(0),
58 fhdEdxvsECutM02(0), fhdEdxvsPCutM02(0),
59 fhEOverPvsECutM02(0), fhEOverPvsPCutM02(0),
60 fhdEdxvsECutEOverP(0), fhdEdxvsPCutEOverP(0),
61 fhEOverPvsECutM02CutdEdx(0), fhEOverPvsPCutM02CutdEdx(0),
63 fhECellClusterRatio(0), fhECellClusterLogRatio(0),
64 fhEMaxCellClusterRatio(0), fhEMaxCellClusterLogRatio(0),
67 fhMCElectronELambda0NoOverlap(0),
68 fhMCElectronELambda0TwoOverlap(0), fhMCElectronELambda0NOverlap(0),
71 fhEmbeddedSignalFractionEnergy(0),
72 fhEmbedElectronELambda0FullSignal(0), fhEmbedElectronELambda0MostlySignal(0),
73 fhEmbedElectronELambda0MostlyBkg(0), fhEmbedElectronELambda0FullBkg(0)
75 for(Int_t index = 0; index < 2; index++)
110 for(Int_t i = 0; i < 10; i++)
113 fhMCE [index][i] = 0;
124 for(Int_t i = 0; i < 6; i++)
134 for(Int_t i = 0; i < 5; i++)
141 for(Int_t i =0; i < 14; i++)
170 AliDebug(1,Form(
"Current Event %d; Before selection : E %2.2f, pT %2.2f, Ecl %2.2f, phi %2.2f, eta %2.2f",
176 AliDebug(2,Form(
"\t Cluster %d Pass E Cut",calo->GetID()));
180 Double_t tof = calo->GetTOF()*1e9;
181 if(tof < fTimeCutMin || tof >
fTimeCutMax)
return kFALSE;
182 AliDebug(2,Form(
"\t Cluster %d Pass Time Cut",calo->GetID()));
186 AliDebug(2,Form(
"\t Cluster %d Pass NCell Cut",calo->GetID()));
193 if(! in )
return kFALSE ;
195 AliDebug(2,
"\t Fiducial cut passed");
201 AliDebug(1,
"\t Reject non track-matched clusters");
204 else AliDebug(2,
"\t Track-matching cut passed");
208 if(nMaxima < fNLMCutMin || nMaxima >
fNLMCutMax)
return kFALSE ;
209 AliDebug(2,Form(
"\t Cluster %d pass NLM %d of out of range",calo->GetID(), nMaxima));
213 Double_t distBad=calo->GetDistanceToBadChannel() ;
214 if(distBad < 0.) distBad=9999. ;
218 else AliDebug(2,Form(
"\t Bad channel cut passed %4.2f > %2.2f",distBad,
fMinDist));
221 AliDebug(1,Form(
"Current Event %d; After selection : E %2.2f, pT %2.2f, Ecl %2.2f, phi %2.2f, eta %2.2f",
242 Float_t
energy = cluster->E();
243 Int_t ncells = cluster->GetNCells();
244 Float_t lambda0 = cluster->GetM02();
245 Float_t lambda1 = cluster->GetM20();
246 Float_t disp = cluster->GetDispersion()*cluster->GetDispersion();
248 Float_t l0 = 0., l1 = 0.;
249 Float_t dispp= 0., dEta = 0., dPhi = 0.;
250 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
254 if(phi < 0) phi+=TMath::TwoPi();
286 l0, l1, dispp, dEta, dPhi, sEta, sPhi, sEtaPhi);
306 AliVCaloCells* cells = 0;
311 Float_t fraction = 0;
312 if(
GetReader()->IsEmbeddedClusterSelectionOn()){
314 Float_t clusterE = 0;
316 for(Int_t icell = 0; icell < cluster->GetNCells(); icell++){
317 cellE = cells->GetCellAmplitude(cluster->GetCellAbsId(icell));
319 fraction+=cellE*cluster->GetCellAmplitudeFraction(icell);
325 AliDebug(1,Form(
"Energy fraction of embedded signal %2.3f, Energy %2.3f",fraction, clusterE));
345 if(!
GetReader()->IsEmbeddedClusterSelectionOn())
350 Int_t ancPDG = 0, ancStatus = -1;
353 for (UInt_t ilab = 0; ilab < cluster->GetNLabels(); ilab++ )
357 if(ancPDG!=22 && TMath::Abs(ancPDG)!=11) noverlaps++;
363 else if(noverlaps == 2){
366 else if(noverlaps > 2){
371 AliWarning(Form(
"N overlaps = %d for ancestor %d!!", noverlaps, ancLabel));
376 if(
GetReader()->IsEmbeddedClusterSelectionOn())
382 else if(fraction > 0.5)
386 else if(fraction > 0.1)
434 const Int_t buffersize = 255;
435 char onePar[buffersize] ;
437 snprintf(onePar,buffersize,
"--- AliAnaElectron ---: ") ;
445 snprintf(onePar,buffersize,
"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster);",
fMinDist) ;
447 snprintf(onePar,buffersize,
"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation);",
fMinDist2) ;
449 snprintf(onePar,buffersize,
"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study);",
fMinDist3) ;
461 return new TObjString(parList) ;
470 TList * outputContainer =
new TList() ;
471 outputContainer->SetName(
"ElectronHistos") ;
483 TString ptypess[] = {
"#gamma",
"hadron?",
"#pi^{0}",
"#eta",
"#gamma->e^{#pm}",
"e^{#pm}"} ;
484 TString pnamess[] = {
"Photon",
"Hadron" ,
"Pi0" ,
"Eta" ,
"Conversion" ,
"Electron"} ;
485 TString ptype[] = {
"#gamma",
"#gamma_{#pi decay}",
"#gamma_{other decay}",
"#pi^{0}",
"#eta",
486 "e^{#pm}",
"#gamma->e^{#pm}",
"hadron?",
"Anti-N",
"Anti-P" } ;
488 TString pname[] = {
"Photon",
"PhotonPi0Decay",
"PhotonOtherDecay",
"Pi0",
"Eta",
"Electron",
489 "Conversion",
"Hadron",
"AntiNeutron",
"AntiProton" } ;
491 fhdEdxvsE =
new TH2F (
"hdEdxvsE",
"matched track <dE/dx> vs cluster E ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
496 fhdEdxvsP =
new TH2F (
"hdEdxvsP",
"matched track <dE/dx> vs track P ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
501 fhEOverPvsE =
new TH2F (
"hEOverPvsE",
"matched track E/p vs cluster E ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
506 fhEOverPvsP =
new TH2F (
"hEOverPvsP",
"matched track E/p vs track P ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
512 fhdEdxvsECutM02 =
new TH2F (
"hdEdxvsECutM02",
"matched track <dE/dx> vs cluster E, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
517 fhdEdxvsPCutM02 =
new TH2F (
"hdEdxvsPCutM02",
"matched track <dE/dx> vs track P, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
522 fhEOverPvsECutM02 =
new TH2F (
"hEOverPvsECutM02",
"matched track E/p vs cluster E, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
527 fhEOverPvsPCutM02 =
new TH2F (
"hEOverPvsPCutM02",
"matched track E/p vs track P, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
533 fhdEdxvsECutEOverP =
new TH2F (
"hdEdxvsECutEOverP",
"matched track <dE/dx> vs cluster E, cut on E/p", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
538 fhdEdxvsPCutEOverP =
new TH2F (
"hdEdxvsPCutEOverP",
"matched track <dE/dx> vs track P, cut on E/p", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
543 fhEOverPvsECutM02CutdEdx =
new TH2F (
"hEOverPvsECutM02CutdEdx",
"matched track E/p vs cluster E, dEdx cut, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
548 fhEOverPvsPCutM02CutdEdx =
new TH2F (
"hEOverPvsPCutM02CutdEdx",
"matched track E/p vs track P, dEdx cut, mild #lambda_{0}^{2} cut ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
558 Form(
"matched track <dE/dx> vs cluster E from %s : E ",ptype[i].
Data()),
559 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
565 Form(
"matched track <dE/dx> vs track P from %s : E ",ptype[i].
Data()),
566 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
573 Form(
"matched track E/p vs cluster E from %s : E ",ptype[i].
Data()),
574 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
580 Form(
"matched track E/pvs track P from %s : E ",ptype[i].
Data()),
581 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
588 TString pidParticle[] = {
"Electron",
"ChargedHadron"} ;
592 fhECellClusterRatio =
new TH2F (
"hECellClusterRatio",
" cell energy / cluster energy vs cluster energy, for selected electrons",
593 nptbins,ptmin,ptmax, 100,0,1.);
598 fhECellClusterLogRatio =
new TH2F (
"hECellClusterLogRatio",
" Log(cell energy / cluster energy) vs cluster energy, for selected electrons",
599 nptbins,ptmin,ptmax, 100,-10,0);
604 fhEMaxCellClusterRatio =
new TH2F (
"hEMaxCellClusterRatio",
" max cell energy / cluster energy vs cluster energy, for selected electrons",
605 nptbins,ptmin,ptmax, 100,0,1.);
610 fhEMaxCellClusterLogRatio =
new TH2F (
"hEMaxCellClusterLogRatio",
" Log(max cell energy / cluster energy) vs cluster energy, for selected electrons",
611 nptbins,ptmin,ptmax, 100,-10,0);
616 for(Int_t iw = 0; iw < 14; iw++)
618 fhLambda0ForW0[iw] =
new TH2F (Form(
"hLambda0ForW0%d",iw),Form(
"shower shape, #lambda^{2}_{0} vs E, w0 = %1.1f, for selected electrons",1+0.5*iw),
619 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
632 for(Int_t pidIndex = 0; pidIndex < 2; pidIndex++)
637 fhLam0E[pidIndex] =
new TH2F (Form(
"h%sLam0E",pidParticle[pidIndex].
Data()),
638 Form(
"%s: #lambda_{0}^{2} vs E",pidParticle[pidIndex].
Data()),
639 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
640 fhLam0E[pidIndex]->SetYTitle(
"#lambda_{0}^{2}");
641 fhLam0E[pidIndex]->SetXTitle(
"E (GeV)");
642 outputContainer->Add(
fhLam0E[pidIndex]);
644 fhLam1E[pidIndex] =
new TH2F (Form(
"h%sLam1E",pidParticle[pidIndex].
Data()),
645 Form(
"%s: #lambda_{1}^{2} vs E",pidParticle[pidIndex].
Data()),
646 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
647 fhLam1E[pidIndex]->SetYTitle(
"#lambda_{1}^{2}");
648 fhLam1E[pidIndex]->SetXTitle(
"E (GeV)");
649 outputContainer->Add(
fhLam1E[pidIndex]);
651 fhDispE[pidIndex] =
new TH2F (Form(
"h%sDispE",pidParticle[pidIndex].
Data()),
652 Form(
"%s: dispersion^{2} vs E",pidParticle[pidIndex].
Data()),
653 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
654 fhDispE[pidIndex]->SetYTitle(
"D^{2}");
655 fhDispE[pidIndex]->SetXTitle(
"E (GeV) ");
656 outputContainer->Add(
fhDispE[pidIndex]);
660 fhLam0ETRD[pidIndex] =
new TH2F (Form(
"h%sLam0ETRD",pidParticle[pidIndex].
Data()),
661 Form(
"%s: #lambda_{0}^{2} vs E, EMCAL SM covered by TRD",pidParticle[pidIndex].
Data()),
662 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
663 fhLam0ETRD[pidIndex]->SetYTitle(
"#lambda_{0}^{2}");
667 fhLam1ETRD[pidIndex] =
new TH2F (Form(
"h%sLam1ETRD",pidParticle[pidIndex].
Data()),
668 Form(
"%s: #lambda_{1}^{2} vs E, EMCAL SM covered by TRD",pidParticle[pidIndex].
Data()),
669 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
670 fhLam1ETRD[pidIndex]->SetYTitle(
"#lambda_{1}^{2}");
674 fhDispETRD[pidIndex] =
new TH2F (Form(
"h%sDispETRD",pidParticle[pidIndex].
Data()),
675 Form(
"%s: dispersion^{2} vs E, EMCAL SM covered by TRD",pidParticle[pidIndex].
Data()),
676 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
677 fhDispETRD[pidIndex]->SetYTitle(
"Dispersion^{2}");
685 Form(
"%s: N_{cells} in cluster vs #lambda_{0}^{2}, E < 2 GeV",pidParticle[pidIndex].
Data()),
686 nbins,nmin, nmax, ssbins,ssmin,ssmax);
692 Form(
"%s: N_{cells} in cluster vs #lambda_{0}^{2}, E > 2 GeV",pidParticle[pidIndex].
Data()),
693 nbins,nmin, nmax, ssbins,ssmin,ssmax);
699 fhEtaLam0LowE[pidIndex] =
new TH2F (Form(
"h%sEtaLam0LowE",pidParticle[pidIndex].
Data()),
700 Form(
"%s: #eta vs #lambda_{0}^{2}, E < 2 GeV",pidParticle[pidIndex].
Data()),
701 netabins,etamin,etamax, ssbins,ssmin,ssmax);
706 fhPhiLam0LowE[pidIndex] =
new TH2F (Form(
"h%sPhiLam0LowE",pidParticle[pidIndex].
Data()),
707 Form(
"%s: #phi vs #lambda_{0}^{2}, E < 2 GeV",pidParticle[pidIndex].
Data()),
708 nphibins,phimin,phimax, ssbins,ssmin,ssmax);
713 fhEtaLam0HighE[pidIndex] =
new TH2F (Form(
"h%sEtaLam0HighE",pidParticle[pidIndex].
Data()),
714 Form(
"%s: #eta vs #lambda_{0}^{2}, E > 2 GeV",pidParticle[pidIndex].
Data()),
715 netabins,etamin,etamax, ssbins,ssmin,ssmax);
720 fhPhiLam0HighE[pidIndex] =
new TH2F (Form(
"h%sPhiLam0HighE",pidParticle[pidIndex].
Data()),
721 Form(
"%s: #phi vs #lambda_{0}^{2}, E > 2 GeV",pidParticle[pidIndex].
Data()),
722 nphibins,phimin,phimax, ssbins,ssmin,ssmax);
729 fhDispEtaE[pidIndex] =
new TH2F (Form(
"h%sDispEtaE",pidParticle[pidIndex].
Data()),
730 Form(
"%s: #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs E",pidParticle[pidIndex].
Data()),
731 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
733 fhDispEtaE[pidIndex]->SetYTitle(
"#sigma^{2}_{#eta #eta}");
736 fhDispPhiE[pidIndex] =
new TH2F (Form(
"h%sDispPhiE",pidParticle[pidIndex].
Data()),
737 Form(
"%s: #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs E",pidParticle[pidIndex].
Data()),
738 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
740 fhDispPhiE[pidIndex]->SetYTitle(
"#sigma^{2}_{#phi #phi}");
743 fhSumEtaE[pidIndex] =
new TH2F (Form(
"h%sSumEtaE",pidParticle[pidIndex].
Data()),
744 Form(
"%s: #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i})^{2} / #Sigma w_{i} - <#eta>^{2} vs E",pidParticle[pidIndex].
Data()),
745 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
746 fhSumEtaE[pidIndex]->SetXTitle(
"E (GeV)");
747 fhSumEtaE[pidIndex]->SetYTitle(
"#delta^{2}_{#eta #eta}");
748 outputContainer->Add(
fhSumEtaE[pidIndex]);
750 fhSumPhiE[pidIndex] =
new TH2F (Form(
"h%sSumPhiE",pidParticle[pidIndex].
Data()),
751 Form(
"%s: #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i})^{2}/ #Sigma w_{i} - <#phi>^{2} vs E",pidParticle[pidIndex].
Data()),
752 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
753 fhSumPhiE[pidIndex]->SetXTitle(
"E (GeV)");
754 fhSumPhiE[pidIndex]->SetYTitle(
"#delta^{2}_{#phi #phi}");
755 outputContainer->Add(
fhSumPhiE[pidIndex]);
757 fhSumEtaPhiE[pidIndex] =
new TH2F (Form(
"h%sSumEtaPhiE",pidParticle[pidIndex].
Data()),
758 Form(
"%s: #delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs E",pidParticle[pidIndex].
Data()),
759 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
761 fhSumEtaPhiE[pidIndex]->SetYTitle(
"#delta^{2}_{#eta #phi}");
765 Form(
"%s: #sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs E",pidParticle[pidIndex].
Data()),
766 nptbins,ptmin,ptmax,200, -10,10);
768 fhDispEtaPhiDiffE[pidIndex]->SetYTitle(
"#sigma^{2}_{#phi #phi}-#sigma^{2}_{#eta #eta}");
771 fhSphericityE[pidIndex] =
new TH2F (Form(
"h%sSphericityE",pidParticle[pidIndex].
Data()),
772 Form(
"%s: (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs E",pidParticle[pidIndex].
Data()),
773 nptbins,ptmin,ptmax, 200, -1,1);
775 fhSphericityE[pidIndex]->SetYTitle(
"s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
778 Int_t bin[] = {0,2,4,6,10,1000};
779 for(Int_t i = 0; i < 5; i++)
782 Form(
"%s: #sigma^{2}_{#phi #phi} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",pidParticle[pidIndex].
Data(),bin[i],bin[i+1]),
783 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
796 for(Int_t i = 0; i < 6; i++)
798 fhMCELambda0[pidIndex][i] =
new TH2F(Form(
"h%sELambda0_MC%s",pidParticle[pidIndex].
Data(),pnamess[i].
Data()),
799 Form(
"%s like cluster from %s : E vs #lambda_{0}^{2}",pidParticle[pidIndex].
Data(),ptypess[i].
Data()),
800 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
801 fhMCELambda0[pidIndex][i]->SetYTitle(
"#lambda_{0}^{2}");
807 fhMCEDispEta[pidIndex][i] =
new TH2F (Form(
"h%sEDispEtaE_MC%s",pidParticle[pidIndex].
Data(),pnamess[i].
Data()),
808 Form(
"cluster from %s : %s like, #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
809 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
811 fhMCEDispEta[pidIndex][i]->SetYTitle(
"#sigma^{2}_{#eta #eta}");
814 fhMCEDispPhi[pidIndex][i] =
new TH2F (Form(
"h%sEDispPhiE_MC%s",pidParticle[pidIndex].
Data(),pnamess[i].
Data()),
815 Form(
"cluster from %s : %s like, #sigma^{2}_{#phi #phi} = #Sigma w_{i}(#phi_{i} - <#phi>)^{2} / #Sigma w_{i} vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
816 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
818 fhMCEDispPhi[pidIndex][i]->SetYTitle(
"#sigma^{2}_{#phi #phi}");
821 fhMCESumEtaPhi[pidIndex][i] =
new TH2F (Form(
"h%sESumEtaPhiE_MC%s",pidParticle[pidIndex].
Data(),pnamess[i].
Data()),
822 Form(
"cluster from %s : %s like, #delta^{2}_{#eta #phi} = #Sigma w_{i}(#phi_{i} #eta_{i} ) / #Sigma w_{i} - <#phi><#eta> vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
823 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
829 Form(
"cluster from %s : %s like, #sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta} vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
830 nptbins,ptmin,ptmax,200,-10,10);
832 fhMCEDispEtaPhiDiff[pidIndex][i]->SetYTitle(
"#sigma^{2}_{#phi #phi}-#sigma^{2}_{#eta #eta}");
835 fhMCESphericity[pidIndex][i] =
new TH2F (Form(
"h%sESphericity_MC%s",pidParticle[pidIndex].
Data(),pnamess[i].
Data()),
836 Form(
"cluster from %s : %s like, (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi}) vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
837 nptbins,ptmin,ptmax, 200,-1,1);
839 fhMCESphericity[pidIndex][i]->SetYTitle(
"s = (#sigma^{2}_{#phi #phi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#phi #phi})");
849 fhNCellsE[pidIndex] =
new TH2F (Form(
"h%sNCellsE",pidParticle[pidIndex].
Data()),
850 Form(
"N cells in %s cluster vs E ",pidParticle[pidIndex].
Data()),
851 nptbins,ptmin,ptmax, nbins,nmin,nmax);
852 fhNCellsE[pidIndex]->SetXTitle(
"E (GeV)");
853 fhNCellsE[pidIndex]->SetYTitle(
"# of cells in cluster");
854 outputContainer->Add(
fhNCellsE[pidIndex]);
856 fhNLME[pidIndex] =
new TH2F (Form(
"h%sNLME",pidParticle[pidIndex].
Data()),
857 Form(
"NLM in %s cluster vs E ",pidParticle[pidIndex].
Data()),
858 nptbins,ptmin,ptmax, 10,0,10);
859 fhNLME[pidIndex]->SetXTitle(
"E (GeV)");
860 fhNLME[pidIndex]->SetYTitle(
"# of cells in cluster");
861 outputContainer->Add(
fhNLME[pidIndex]);
863 fhTimeE[pidIndex] =
new TH2F(Form(
"h%sTimeE",pidParticle[pidIndex].
Data()),
864 Form(
"Time in %s cluster vs E ",pidParticle[pidIndex].
Data())
865 ,nptbins,ptmin,ptmax, tbins,tmin,tmax);
866 fhTimeE[pidIndex]->SetXTitle(
"E (GeV)");
867 fhTimeE[pidIndex]->SetYTitle(
" t (ns)");
868 outputContainer->Add(
fhTimeE[pidIndex]);
871 Form(
"%s: energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",pidParticle[pidIndex].
Data()),
872 nptbins,ptmin,ptmax, 500,0,1.);
877 fhE[pidIndex] =
new TH1F(Form(
"h%sE",pidParticle[pidIndex].
Data()),
878 Form(
"Number of %s over calorimeter vs energy",pidParticle[pidIndex].
Data()),
879 nptbins,ptmin,ptmax);
880 fhE[pidIndex]->SetYTitle(
"N");
881 fhE[pidIndex]->SetXTitle(
"E_{#gamma}(GeV)");
882 outputContainer->Add(
fhE[pidIndex]) ;
884 fhPt[pidIndex] =
new TH1F(Form(
"h%sPtElectron",pidParticle[pidIndex].
Data()),
885 Form(
"Number of %s over calorimeter vs p_{T}",pidParticle[pidIndex].
Data()),
886 nptbins,ptmin,ptmax);
887 fhPt[pidIndex]->SetYTitle(
"N");
888 fhPt[pidIndex]->SetXTitle(
"p_{T #gamma}(GeV/c)");
889 outputContainer->Add(
fhPt[pidIndex]) ;
891 fhPhi[pidIndex] =
new TH2F(Form(
"h%sPhiElectron",pidParticle[pidIndex].
Data()),
892 Form(
"%s: #phi vs p_{T}",pidParticle[pidIndex].
Data()),
893 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
894 fhPhi[pidIndex]->SetYTitle(
"#phi (rad)");
895 fhPhi[pidIndex]->SetXTitle(
"p_{T #gamma} (GeV/c)");
896 outputContainer->Add(
fhPhi[pidIndex]) ;
898 fhEta[pidIndex] =
new TH2F(Form(
"h%sEta",pidParticle[pidIndex].
Data()),
899 Form(
"%s: #eta vs p_{T}",pidParticle[pidIndex].
Data()),
900 nptbins,ptmin,ptmax,netabins,etamin,etamax);
901 fhEta[pidIndex]->SetYTitle(
"#eta");
902 fhEta[pidIndex]->SetXTitle(
"p_{T #gamma} (GeV/c)");
903 outputContainer->Add(
fhEta[pidIndex]) ;
905 fhEtaPhi[pidIndex] =
new TH2F(Form(
"h%sEtaPhi",pidParticle[pidIndex].
Data()),
906 Form(
"%s: #eta vs #phi",pidParticle[pidIndex].
Data()),
907 netabins,etamin,etamax,nphibins,phimin,phimax);
908 fhEtaPhi[pidIndex]->SetYTitle(
"#phi (rad)");
909 fhEtaPhi[pidIndex]->SetXTitle(
"#eta");
910 outputContainer->Add(
fhEtaPhi[pidIndex]) ;
913 fhEtaPhi05[pidIndex] =
new TH2F(Form(
"h%sEtaPhi05",pidParticle[pidIndex].
Data()),
914 Form(
"%s: #eta vs #phi, E > 0.5",pidParticle[pidIndex].
Data()),
915 netabins,etamin,etamax,nphibins,phimin,phimax);
916 fhEtaPhi05[pidIndex]->SetYTitle(
"#phi (rad)");
926 fhMCE[pidIndex][i] =
new TH1F(Form(
"h%sE_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
927 Form(
"%s like cluster from %s : E ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
928 nptbins,ptmin,ptmax);
929 fhMCE[pidIndex][i]->SetXTitle(
"E (GeV)");
930 outputContainer->Add(
fhMCE[pidIndex][i]) ;
932 fhMCPt[pidIndex][i] =
new TH1F(Form(
"h%sPt_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
933 Form(
"%s like cluster from %s : p_{T} ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
934 nptbins,ptmin,ptmax);
935 fhMCPt[pidIndex][i]->SetXTitle(
"p_{T} (GeV/c)");
936 outputContainer->Add(
fhMCPt[pidIndex][i]) ;
938 fhMCEta[pidIndex][i] =
new TH2F(Form(
"h%sEta_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
939 Form(
"%s like cluster from %s : #eta ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
940 nptbins,ptmin,ptmax,netabins,etamin,etamax);
941 fhMCEta[pidIndex][i]->SetYTitle(
"#eta");
942 fhMCEta[pidIndex][i]->SetXTitle(
"E (GeV)");
943 outputContainer->Add(
fhMCEta[pidIndex][i]) ;
945 fhMCPhi[pidIndex][i] =
new TH2F(Form(
"h%sPhi_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
946 Form(
"%s like cluster from %s : #phi ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
947 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
948 fhMCPhi[pidIndex][i]->SetYTitle(
"#phi (rad)");
949 fhMCPhi[pidIndex][i]->SetXTitle(
"E (GeV)");
950 outputContainer->Add(
fhMCPhi[pidIndex][i]) ;
953 fhMCDeltaE[pidIndex][i] =
new TH2F (Form(
"h%sDeltaE_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
954 Form(
"%s like MC - Reco E from %s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
955 nptbins,ptmin,ptmax, 200,-50,50);
956 fhMCDeltaE[pidIndex][i]->SetXTitle(
"#Delta E (GeV)");
957 outputContainer->Add(
fhMCDeltaE[pidIndex][i]);
959 fhMC2E[pidIndex][i] =
new TH2F (Form(
"h%s2E_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
960 Form(
"%s like E distribution, reconstructed vs generated from %s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
961 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
962 fhMC2E[pidIndex][i]->SetXTitle(
"E_{rec} (GeV)");
963 fhMC2E[pidIndex][i]->SetYTitle(
"E_{gen} (GeV)");
964 outputContainer->Add(
fhMC2E[pidIndex][i]);
975 if(!
GetReader()->IsEmbeddedClusterSelectionOn())
978 "cluster from Electron : E vs #lambda_{0}^{2}",
979 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
985 "cluster from Electron : E vs #lambda_{0}^{2}",
986 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
992 "cluster from Electron : E vs #lambda_{0}^{2}",
993 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1000 if(
GetReader()->IsEmbeddedClusterSelectionOn())
1003 "Energy Fraction of embedded signal versus cluster energy",
1004 nptbins,ptmin,ptmax,100,0.,1.);
1010 "cluster from Electron embedded with more than 90% energy in cluster : E vs #lambda_{0}^{2}",
1011 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1017 "cluster from Electron embedded with 50% to 90% energy in cluster : E vs #lambda_{0}^{2}",
1018 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1024 "cluster from Electron embedded with 10% to 50% energy in cluster : E vs #lambda_{0}^{2}",
1025 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1031 "cluster from Electronm embedded with 0% to 10% energy in cluster : E vs #lambda_{0}^{2}",
1032 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1040 return outputContainer ;
1049 AliFatal(
"STOP: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!");
1051 AliFatal(
"STOP: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!");
1082 Double_t v[3] = {0,0,0};
1086 TObjArray * pl = 0x0;
1097 Int_t nCaloClusters = pl->GetEntriesFast();
1106 for(Int_t icalo = 0; icalo < nCaloClusters; icalo++)
1108 AliVCluster * calo = (AliVCluster*) (pl->At(icalo));
1112 Int_t evtIndex = 0 ;
1115 evtIndex=
GetMixedEvent()->EventIndexForCaloCluster(calo->GetID()) ;
1127 Double_t vertex[]={0,0,0};
1134 AliVCaloCells* cells = 0;
1149 AliWarning(
"Null track");
1154 Float_t dEdx = track->GetTPCsignal();
1155 Float_t eOverp = calo->E()/track->P();
1160 if( eOverp < fEOverPMax && eOverp >
fEOverPMin)
1167 Float_t m02 = calo->GetM02();
1168 if(m02 > 0.1 && m02 < 0.4)
1178 if( dEdx < fdEdxMax && dEdx >
fdEdxMin)
1183 if(m02 > 0.1 && m02 < 0.4)
1189 if( eOverp < fEOverPMax && eOverp > fEOverPMin)
1209 AliDebug(1,Form(
"Origin of candidate, bit map %d",tag));
1313 AliDebug(1,Form(
"PDG of identified particle %d",pid));
1316 AliDebug(1,Form(
"Photon selection cuts passed: pT %3.2f, pdg %d",
fMomentum.Pt(),pid));
1318 Float_t maxCellFraction = 0;
1333 AliAODPWG4Particle aodpart = AliAODPWG4Particle(
fMomentum);
1337 Int_t label = calo->GetLabel();
1338 aodpart.SetLabel(label);
1339 aodpart.SetCaloLabel (calo->GetID(),-1);
1340 aodpart.SetTrackLabel(
GetReader()->GetTrackID(track),-1);
1345 aodpart.SetM02(calo->GetM02());
1346 aodpart.SetM20(calo->GetM20());
1347 aodpart.SetNLM(nMaxima);
1348 aodpart.SetTime(calo->GetTOF()*1e9);
1349 aodpart.SetNCells(calo->GetNCells());
1351 aodpart.SetSModNumber(nSM);
1355 Double_t distBad=calo->GetDistanceToBadChannel() ;
1356 if (distBad >
fMinDist3) aodpart.SetDistToBad(2) ;
1357 else if(distBad >
fMinDist2) aodpart.SetDistToBad(1) ;
1358 else aodpart.SetDistToBad(0) ;
1362 aodpart.SetTag(tag);
1365 aodpart.SetIdentifiedParticleType(pid);
1372 AliDebug(1,Form(
"End fill AODs, with %d entries",
GetOutputAODBranch()->GetEntriesFast()));
1383 AliStack * stack = 0x0;
1384 TParticle * primary = 0x0;
1385 TClonesArray * mcparticles = 0x0;
1386 AliAODMCParticle * aodprimary = 0x0;
1395 AliFatal(
"Stack not available, is the MC handler called? STOP");
1399 else if(
GetReader()->ReadAODMCParticles())
1405 AliFatal(
"Standard MCParticles not available! STOP");
1412 Double_t v[3] = {0,0,0};
1420 AliDebug(1,Form(
"AOD branch entries %d", naod));
1422 for(Int_t iaod = 0; iaod < naod ; iaod++)
1425 Int_t
pdg = ph->GetIdentifiedParticleType();
1434 AliDebug(1,Form(
"ID Electron: pt %f, phi %f, eta %f", ph->Pt(),ph->Phi(),ph->Eta())) ;
1438 Float_t ptcluster = ph->Pt();
1439 Float_t phicluster = ph->Phi();
1440 Float_t etacluster = ph->Eta();
1441 Float_t ecluster = ph->E();
1458 Int_t label =ph->GetLabel();
1461 AliDebug(1,Form(
"*** bad label ***: label %d", label));
1469 if(label >= stack->GetNtrack())
1471 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d", label, stack->GetNtrack()));
1475 primary = stack->Particle(label);
1478 AliWarning(Form(
"*** no primary ***: label %d", label));
1482 eprim = primary->Energy();
1485 else if(
GetReader()->ReadAODMCParticles() )
1487 if(label >= mcparticles->GetEntriesFast())
1489 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d",label, mcparticles->GetEntriesFast()));
1493 aodprimary = (AliAODMCParticle*) mcparticles->At(label);
1497 AliWarning(Form(
"*** no primary ***: label %d", label));
1501 eprim = aodprimary->E();
1505 Int_t tag =ph->GetTag();
1632 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1638 printf(
"Min Distance to Bad Channel = %2.1f\n",
fMinDist);
1639 printf(
"Min Distance to Bad Channel 2 = %2.1f\n",
fMinDist2);
1640 printf(
"Min Distance to Bad Channel 3 = %2.1f\n",
fMinDist3);
1642 printf(
"Number of cells in cluster is > %d \n",
fNCellsCut);
1653 AliVCaloCells* cells = 0;
1660 for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++) {
1662 Int_t
id = clus->GetCellsAbsId()[ipos];
1665 Float_t amp = cells->GetCellAmplitude(
id);
1676 AliWarning(Form(
"Wrong calculated energy %f",energy));
1685 for (Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
1687 Int_t
id = clus->GetCellsAbsId()[ipos];
1690 Float_t amp = cells->GetCellAmplitude(
id);
1701 Float_t l0org = clus->GetM02();
1702 Float_t l1org = clus->GetM20();
1703 Float_t dorg = clus->GetDispersion();
1705 for(Int_t iw = 0; iw < 14; iw++){
1717 clus->SetM02(l0org);
1718 clus->SetM20(l1org);
1719 clus->SetDispersion(dorg);
virtual Bool_t IsFiducialCutOn() const
Float_t GetHistoPtMax() const
TH2F * fhDispEtaPhiDiffE[2]
! shower dispersion eta - phi
TH2F * fhEtaPhi05[2]
! Pseudorapidity vs Phi of identified electron for transerse momentum < 0.5
TH2F * fhMCESumEtaPhi[2][6]
! shower dispersion in eta vs phi direction from MC particle
Float_t fEOverPMax
Min E/p for electrons, after dEdx cut.
TH2F * fhSumPhiE[2]
! shower dispersion in phi direction
void FillShowerShapeHistograms(AliVCluster *cluster, Int_t mcTag, Int_t pidTag)
Fill cluster Shower Shape histograms.
TH2F * fhMCEDispPhi[2][6]
! shower dispersion in phi direction from MC particle
TH2F * fhLambda0ForW0[14]
! L0 for 7 defined w0= 3, 3.5 ... 6 for selected electrons
Int_t GetHistoNClusterCellMin() const
Float_t GetHistoPtMin() const
Int_t GetHistoShowerShapeBins() const
virtual Int_t GetCalorimeter() const
Float_t GetHistodEdxMax() const
virtual void AddToHistogramsName(TString add)
virtual AliVCaloCells * GetEMCALCells() const
TH2F * fhNLME[2]
! Number of local maxima in cluster vs E
TH1F * fhMCPt[2][10]
! Number of identified electron vs cluster energy coming from MC particle
virtual Bool_t IsDataMC() const
TH2F * fhEmbedElectronELambda0MostlyBkg
! Lambda0 vs E for embedded electrons with 50%<fraction<10%
AliEMCALRecoUtils * GetEMCALRecoUtils() const
TH2F * fhMCEDispEtaPhiDiff[2][6]
! shower dispersion in eta -phi direction from MC particle
virtual AliStack * GetMCStack() const
virtual void GetVertex(Double_t vertex[3]) const
Int_t fNLMCutMax
Remove clusters/cells with number of local maxima larger than this value.
TH2F * fhdEdxvsECutM02
! Matched track dEdx vs cluster E, mild M02 cut
TH2F * fhEOverPvsPCutM02
! Matched track E cluster over P track vs track P, after dEdx cut, mild M02 cut
TH2F * fhMCEta[2][10]
! eta of identified electron coming from MC particle
virtual Float_t GetZvertexCut() const
Maximal number of events for mixin.
TH1F * fhMCE[2][10]
! Number of identified electron vs cluster energy coming from MC particle
TH2F * fhLam1ETRD[2]
! cluster lambda1 vs E, SM covered by TRD
TH2F * fhPhi[2]
! Azimuthal angle of identified electron vs transerse momentum
Bool_t fFillSSHistograms
Fill shower shape histograms.
virtual Bool_t IsTrackMatched(AliVCluster *cluster, AliVEvent *event)
TH2F * fhTimeE[2]
! E vs Time of selected cluster
Float_t fMinDist3
One more cut on distance used for acceptance-efficiency study.
TH2F * fhdEdxvsPCutEOverP
! Matched track dEdx vs track P, cut on EOverP
TH2F * fhMCdEdxvsE[10]
! Matched track dEdx vs cluster E, coming from MC particle
Int_t GetHistoPhiBins() const
TH2F * fhdEdxvsP
! Matched track dEdx vs track P
TH2F * fhMCEOverPvsP[10]
! Matched track E cluster over P track vs track P, after dEdx cut, coming from MC particle ...
TLorentzVector fMomentumMC
! mc particle momentum
TH2F * fhEmbedElectronELambda0FullSignal
! Lambda0 vs E for embedded electrons with more than 90% of the cluster energy
TH2F * fhDispEtaE[2]
! shower dispersion in eta direction
Int_t GetHistoNClusterCellBins() const
virtual TClonesArray * GetOutputAODBranch() const
TH2F * fhPhiLam0LowE[2]
! cluster phi vs lambda0, E<2
Selection of electron clusters in calorimeter.
TH2F * fhDispETRD[2]
! cluster dispersion vs E, SM covered by TRD
TH2F * fhMCESphericity[2][6]
! shower sphericity, eta vs phi from MC particle
TH2F * fhdEdxvsECutEOverP
! Matched track dEdx vs cluster E , cut on EOverP
virtual void GetVertex(Double_t v[3]) const
TH2F * fhMCEDispEta[2][6]
! shower dispersion in eta direction from MC particle
Int_t fAODParticle
Select the type of particle to put in AODs for other analysis.
Int_t GetHistoPOverEBins() const
TH2F * fhECellClusterRatio
! E cell / e cluster vs e cluster for selected electrons
Float_t GetHistoPhiMin() const
void InitParameters()
Initialize the parameters of the analysis with default values.
TH2F * fhMCELambda0[2][6]
! E vs Lambda0 from MC particle
virtual Bool_t IsCaloPIDOn() const
TH2F * fhECellClusterLogRatio
! log (E cell / E cluster) vs E cluster for selected electrons
TString GetPIDParametersList()
Put data member values in string to keep in output container.
TH2F * fhLam1E[2]
! cluster lambda1 vs E
TH2F * fhdEdxvsPCutM02
! Matched track dEdx vs track P, mild M02 cut
virtual Float_t GetMinEnergy() const
TH2F * fhNCellsLam0HighE[2]
! cluster N Cells vs lambda0, E>2
Base class for CaloTrackCorr analysis algorithms.
virtual TString GetBaseParametersList()
virtual TString GetCalorimeterString() const
TObjString * GetAnalysisCuts()
Save parameters used for analysis.
TH2F * fhEOverPvsECutM02CutdEdx
! Matched track E cluster over P track vs cluster E, after dEdx cut and mild M02 cut ...
TH2F * fhSphericityE[2]
! shower sphericity in eta vs phi
Double_t fTimeCutMin
Remove clusters/cells with time smaller than this value, in ns.
Float_t GetHistodEdxMin() const
virtual AliFiducialCut * GetFiducialCut()
virtual TClonesArray * GetAODMCParticles() const
virtual AliHistogramRanges * GetHistogramRanges()
Float_t fEOverPMin
Max E/p for electrons, after dEdx cut.
TH2F * fhMCEOverPvsE[10]
! Matched track E cluster over P track vs cluster E, after dEdx cut, coming from MC particle ...
TH2F * fhEOverPvsPCutM02CutdEdx
! Matched track E cluster over P track vs track P, after dEdx cut and mild M02 cut ...
Double_t fTimeCutMax
Remove clusters/cells with time larger than this value, in ns.
Int_t fNCellsCut
Accept for the analysis clusters with more than fNCellsCut cells.
TH2F * fhMCdEdxvsP[10]
! Matched track dEdx vs track P, coming from MC particle
TH2F * fhEmbeddedSignalFractionEnergy
! Fraction of electron energy of embedded signal vs cluster energy
void Init()
Init. Check if requested calorimeter is on, if not, abort.
TLorentzVector fMomentum
! cluster momentum
virtual AliEMCALGeometry * GetEMCALGeometry() const
TH2F * fhSumEtaPhiE[2]
! shower dispersion in eta and phi direction
TList * GetCreateOutputObjects()
TH2F * fhEmbedElectronELambda0MostlySignal
! Lambda0 vs E for embedded electrons with 90%<fraction<50%
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
Int_t CheckOrigin(Int_t label, const AliCaloTrackReader *reader, Int_t calorimeter)
virtual Bool_t NewOutputAOD() const
Float_t GetHistoShowerShapeMin() const
Float_t fdEdxMin
Max dEdx for electrons.
Int_t GetHistodEdxBins() const
virtual AliCalorimeterUtils * GetCaloUtils() const
Int_t GetHistoNClusterCellMax() const
Float_t fdEdxMax
Min dEdx for electrons.
TH2F * fhEtaLam0HighE[2]
! cluster eta vs lambda0, E>2
TH2F * fhdEdxvsE
! Matched track dEdx vs cluster E
void WeightHistograms(AliVCluster *clus)
Calculate weights and fill histograms.
virtual Double_t GetEventWeight() const
TH2F * fhEtaPhi[2]
! Pseudorapidity vs Phi of identified electron for transerse momentum > 0.5
TH2F * fhEmbedElectronELambda0FullBkg
! Lambda0 vs E for embedded electrons with less than 10% of the cluster energy
Int_t fNOriginHistograms
Fill only NOriginHistograms of the 14 defined types.
virtual AliCaloPID * GetCaloPID()
Int_t GetNumberOfLocalMaxima(AliVCluster *cluster, AliVCaloCells *cells)
Find the number of local maxima in cluster.
TH2F * fhEMaxCellClusterLogRatio
! log (e max cell / e cluster) vs e cluster for selected electrons
TH2F * fhLam0ETRD[2]
! cluster lambda0 vs E, SM covered by TRD
Bool_t fFillWeightHistograms
Fill weigth histograms.
TH2F * fhPhiLam0HighE[2]
! cluster phi vs lambda0, E>2
TH2F * fhEOverPvsECutM02
! Matched track E cluster over P track vs cluster E, after dEdx cut, mild M02 cut ...
virtual TObjArray * GetPHOSClusters() const
Float_t GetHistoEtaMin() const
Float_t fMinDist2
Cuts on Minimal distance to study acceptance evaluation.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH2F * fhMCDeltaE[2][10]
! MC-Reco E distribution coming from MC particle
virtual Int_t GetModuleNumber(AliAODPWG4Particle *part) const
TH2F * fhMCPhi[2][10]
! Phi of identified electron coming from MC particle
Bool_t fFillOnlySimpleSSHisto
Fill selected cluster histograms, selected SS histograms.
TH2F * fhMCElectronELambda0TwoOverlap
! E vs Lambda0 from MC electrons, 2 particles overlap
TH2F * fhEOverPvsE
! Matched track E cluster over P track vs cluster E, after dEdx cut
TH1F * fhPt[2]
! Number of identified electron vs transerse momentum
Float_t GetHistoEtaMax() const
TH2F * fhLam0E[2]
! cluster lambda0 vs E
virtual void AddAODParticle(AliAODPWG4Particle part)
TH2F * fhMCElectronELambda0NoOverlap
! E vs Lambda0 from MC electrons, no overlap
TH2F * fhEtaLam0LowE[2]
! cluster eta vs lambda0, E<2
TH2F * fhDispPhiE[2]
! shower dispersion in phi direction
Int_t GetHistoPtBins() const
TH2F * fhMC2E[2][10]
! E distribution, Reco vs MC coming from MC particle
AliVTrack * GetMatchedTrack(AliVCluster *cluster, AliVEvent *event, Int_t index=-1) const
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Float_t GetHistoPOverEMax() const
Bool_t ClusterSelected(AliVCluster *cl, Int_t nMaxima)
void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
void RecalibrateCellAmplitude(Float_t &, Int_t calo, Int_t absId) const
Recalculate cell energy if recalibration factor.
virtual AliMCAnalysisUtils * GetMCAnalysisUtils()
virtual Int_t GetEventNumber() const
virtual Float_t GetMaxEnergy() const
TH2F * fhEOverPvsP
! Matched track E cluster over P track vs track P, after dEdx cut
void MakeAnalysisFillAOD()
Do photon analysis selecting electron clusters (or charged non electron) and fill aods...
virtual Float_t GetMinPt() const
TH2F * fhEta[2]
! Pseudorapidity of identified electron vs transerse momentum
TH1F * fhE[2]
! Number of identified electron vs energy
virtual void Print(const Option_t *) const
Print some relevant parameters set for the analysis.
Int_t GetHistoTimeBins() const
Float_t GetHistoPOverEMin() const
TH2F * fhSumEtaE[2]
! shower dispersion in eta direction
Float_t fMinDist
Minimal distance to bad channel to accept cluster.
Float_t GetHistoTimeMax() const
virtual Int_t GetDataType() const
Float_t GetHistoTimeMin() const
Float_t GetHistoShowerShapeMax() const
TH2F * fhNCellsE[2]
! Number of cells in cluster vs E
Float_t GetHistoPhiMax() const
virtual AliCaloTrackReader * GetReader() const
Int_t GetHistoEtaBins() const
TH2F * fhDispE[2]
! cluster dispersion vs E
virtual TObjArray * GetEMCALClusters() const
TH2F * fhMaxCellDiffClusterE[2]
! Fraction of energy carried by cell with maximum energy
TH2F * fhDispEtaDispPhiEBin[2][5]
! shower dispersion in eta direction vs phi direction for 5 E bins [0-2],[2-4],[4-6],[6-10],[> 10]
TH2F * fhNCellsLam0LowE[2]
! cluster N cells vs lambda0, E<2
virtual AliVCaloCells * GetPHOSCells() const
AliAnaElectron()
Default constructor. Initialize parameters.
Int_t CheckCommonAncestor(Int_t index1, Int_t index2, const AliCaloTrackReader *reader, Int_t &ancPDG, Int_t &ancStatus, TLorentzVector &momentum, TVector3 &prodVertex)
Bool_t CheckTagBit(Int_t tag, UInt_t test) const
Int_t GetMaxEnergyCell(AliVCaloCells *cells, AliVCluster *clu, Float_t &fraction) const
For a given CaloCluster, it gets the absId of the cell with maximum energy deposit.
TH2F * fhEMaxCellClusterRatio
! E max cell / E cluster vs E cluster for selected electrons
virtual AliMixedEvent * GetMixedEvent() const
void MakeAnalysisFillHistograms()
Fill histograms for selected clusters.
TH2F * fhMCElectronELambda0NOverlap
! E vs Lambda0 from MC electrons, N particles overlap
TVector3 fProdVertex
! mc particle production vertex
Int_t GetFirstSMCoveredByTRD() const
Time cut in ns.