19 #include <TClonesArray.h> 20 #include <TObjString.h> 22 #include "TDatabasePDG.h" 23 #include "AliVTrack.h" 28 #include "AliMCEvent.h" 32 #include "AliVCluster.h" 33 #include "AliVParticle.h" 34 #include "AliMixedEvent.h" 45 fMinDist(0.), fMinDist2(0.), fMinDist3(0.),
46 fTimeCutMin(-1), fTimeCutMax(999999),
47 fNCellsCut(0), fNLMCutMin(-1), fNLMCutMax(10),
48 fFillSSHistograms(kFALSE), fFillOnlySimpleSSHisto(1),
49 fFillWeightHistograms(kFALSE), fNOriginHistograms(8),
50 fdEdxMin(0.), fdEdxMax (200.),
51 fEOverPMin(0), fEOverPMax (2),
53 fMomentum(), fMomentumMC(), fProdVertex(),
55 fhdEdxvsE(0), fhdEdxvsP(0),
56 fhEOverPvsE(0), fhEOverPvsP(0),
57 fhdEdxvsECutM02(0), fhdEdxvsPCutM02(0),
58 fhEOverPvsECutM02(0), fhEOverPvsPCutM02(0),
59 fhdEdxvsECutEOverP(0), fhdEdxvsPCutEOverP(0),
60 fhEOverPvsECutM02CutdEdx(0), fhEOverPvsPCutM02CutdEdx(0),
62 fhECellClusterRatio(0), fhECellClusterLogRatio(0),
63 fhEMaxCellClusterRatio(0), fhEMaxCellClusterLogRatio(0),
66 fhMCElectronELambda0NoOverlap(0),
67 fhMCElectronELambda0TwoOverlap(0), fhMCElectronELambda0NOverlap(0),
70 fhEmbeddedSignalFractionEnergy(0),
71 fhEmbedElectronELambda0FullSignal(0), fhEmbedElectronELambda0MostlySignal(0),
72 fhEmbedElectronELambda0MostlyBkg(0), fhEmbedElectronELambda0FullBkg(0)
74 for(
Int_t index = 0; index < 2; index++)
109 for(
Int_t i = 0; i < 10; i++)
112 fhMCE [index][i] = 0;
123 for(
Int_t i = 0; i < 6; i++)
133 for(
Int_t i = 0; i < 5; i++)
140 for(
Int_t i =0; i < 14; i++)
169 AliDebug(1,Form(
"Current Event %d; Before selection : E %2.2f, pT %2.2f, Ecl %2.2f, phi %2.2f, eta %2.2f",
175 AliDebug(2,Form(
"\t Cluster %d Pass E Cut",calo->GetID()));
180 if(tof < fTimeCutMin || tof >
fTimeCutMax)
return kFALSE;
181 AliDebug(2,Form(
"\t Cluster %d Pass Time Cut",calo->GetID()));
185 AliDebug(2,Form(
"\t Cluster %d Pass NCell Cut",calo->GetID()));
192 if(! in )
return kFALSE ;
194 AliDebug(2,
"\t Fiducial cut passed");
200 AliDebug(1,
"\t Reject non track-matched clusters");
203 else AliDebug(2,
"\t Track-matching cut passed");
207 if(nMaxima < fNLMCutMin || nMaxima >
fNLMCutMax)
return kFALSE ;
208 AliDebug(2,Form(
"\t Cluster %d pass NLM %d of out of range",calo->GetID(), nMaxima));
212 Double_t distBad=calo->GetDistanceToBadChannel() ;
213 if(distBad < 0.) distBad=9999. ;
217 else AliDebug(2,Form(
"\t Bad channel cut passed %4.2f > %2.2f",distBad,
fMinDist));
220 AliDebug(1,Form(
"Current Event %d; After selection : E %2.2f, pT %2.2f, Ecl %2.2f, phi %2.2f, eta %2.2f",
242 Int_t ncells = cluster->GetNCells();
243 Float_t lambda0 = cluster->GetM02();
244 Float_t lambda1 = cluster->GetM20();
245 Float_t disp = cluster->GetDispersion()*cluster->GetDispersion();
248 Float_t dispp= 0., dEta = 0., dPhi = 0.;
249 Float_t sEta = 0., sPhi = 0., sEtaPhi = 0.;
253 if(phi < 0) phi+=TMath::TwoPi();
285 l0, l1, dispp, dEta, dPhi, sEta, sPhi, sEtaPhi);
305 AliVCaloCells* cells = 0;
311 if(
GetReader()->IsEmbeddedClusterSelectionOn()){
315 for(
Int_t icell = 0; icell < cluster->GetNCells(); icell++){
316 cellE = cells->GetCellAmplitude(cluster->GetCellAbsId(icell));
318 fraction+=cellE*cluster->GetCellAmplitudeFraction(icell);
324 AliDebug(1,Form(
"Energy fraction of embedded signal %2.3f, Energy %2.3f",fraction, clusterE));
344 if(!
GetReader()->IsEmbeddedClusterSelectionOn())
349 Int_t ancPDG = 0, ancStatus = -1;
352 for (
UInt_t ilab = 0; ilab < cluster->GetNLabels(); ilab++ )
356 if(ancPDG!=22 && TMath::Abs(ancPDG)!=11) noverlaps++;
362 else if(noverlaps == 2){
365 else if(noverlaps > 2){
370 AliWarning(Form(
"N overlaps = %d for ancestor %d!!", noverlaps, ancLabel));
375 if(
GetReader()->IsEmbeddedClusterSelectionOn())
381 else if(fraction > 0.5)
385 else if(fraction > 0.1)
433 const Int_t buffersize = 255;
434 char onePar[buffersize] ;
436 snprintf(onePar,buffersize,
"--- AliAnaElectron ---: ") ;
444 snprintf(onePar,buffersize,
"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster);",
fMinDist) ;
446 snprintf(onePar,buffersize,
"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation);",
fMinDist2) ;
448 snprintf(onePar,buffersize,
"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study);",
fMinDist3) ;
460 return new TObjString(parList) ;
470 outputContainer->SetName(
"ElectronHistos") ;
482 TString ptypess[] = {
"#gamma",
"hadron?",
"#pi^{0}",
"#eta",
"#gamma->e^{#pm}",
"e^{#pm}"} ;
483 TString pnamess[] = {
"Photon",
"Hadron" ,
"Pi0" ,
"Eta" ,
"Conversion" ,
"Electron"} ;
484 TString ptype[] = {
"#gamma",
"#gamma_{#pi decay}",
"#gamma_{other decay}",
"#pi^{0}",
"#eta",
485 "e^{#pm}",
"#gamma->e^{#pm}",
"hadron?",
"Anti-N",
"Anti-P" } ;
487 TString pname[] = {
"Photon",
"PhotonPi0Decay",
"PhotonOtherDecay",
"Pi0",
"Eta",
"Electron",
488 "Conversion",
"Hadron",
"AntiNeutron",
"AntiProton" } ;
490 fhdEdxvsE =
new TH2F (
"hdEdxvsE",
"matched track <dE/dx> vs cluster E ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
495 fhdEdxvsP =
new TH2F (
"hdEdxvsP",
"matched track <dE/dx> vs track P ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
500 fhEOverPvsE =
new TH2F (
"hEOverPvsE",
"matched track E/p vs cluster E ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
505 fhEOverPvsP =
new TH2F (
"hEOverPvsP",
"matched track E/p vs track P ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
511 fhdEdxvsECutM02 =
new TH2F (
"hdEdxvsECutM02",
"matched track <dE/dx> vs cluster E, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
516 fhdEdxvsPCutM02 =
new TH2F (
"hdEdxvsPCutM02",
"matched track <dE/dx> vs track P, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
521 fhEOverPvsECutM02 =
new TH2F (
"hEOverPvsECutM02",
"matched track E/p vs cluster E, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
526 fhEOverPvsPCutM02 =
new TH2F (
"hEOverPvsPCutM02",
"matched track E/p vs track P, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
532 fhdEdxvsECutEOverP =
new TH2F (
"hdEdxvsECutEOverP",
"matched track <dE/dx> vs cluster E, cut on E/p", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
537 fhdEdxvsPCutEOverP =
new TH2F (
"hdEdxvsPCutEOverP",
"matched track <dE/dx> vs track P, cut on E/p", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
542 fhEOverPvsECutM02CutdEdx =
new TH2F (
"hEOverPvsECutM02CutdEdx",
"matched track E/p vs cluster E, dEdx cut, mild #lambda_{0}^{2} cut", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
547 fhEOverPvsPCutM02CutdEdx =
new TH2F (
"hEOverPvsPCutM02CutdEdx",
"matched track E/p vs track P, dEdx cut, mild #lambda_{0}^{2} cut ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
557 Form(
"matched track <dE/dx> vs cluster E from %s : E ",ptype[i].
Data()),
558 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
564 Form(
"matched track <dE/dx> vs track P from %s : E ",ptype[i].
Data()),
565 nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
572 Form(
"matched track E/p vs cluster E from %s : E ",ptype[i].
Data()),
573 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
579 Form(
"matched track E/pvs track P from %s : E ",ptype[i].
Data()),
580 nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
587 TString pidParticle[] = {
"Electron",
"ChargedHadron"} ;
591 fhECellClusterRatio =
new TH2F (
"hECellClusterRatio",
" cell energy / cluster energy vs cluster energy, for selected electrons",
592 nptbins,ptmin,ptmax, 100,0,1.);
597 fhECellClusterLogRatio =
new TH2F (
"hECellClusterLogRatio",
" Log(cell energy / cluster energy) vs cluster energy, for selected electrons",
598 nptbins,ptmin,ptmax, 100,-10,0);
603 fhEMaxCellClusterRatio =
new TH2F (
"hEMaxCellClusterRatio",
" max cell energy / cluster energy vs cluster energy, for selected electrons",
604 nptbins,ptmin,ptmax, 100,0,1.);
609 fhEMaxCellClusterLogRatio =
new TH2F (
"hEMaxCellClusterLogRatio",
" Log(max cell energy / cluster energy) vs cluster energy, for selected electrons",
610 nptbins,ptmin,ptmax, 100,-10,0);
615 for(
Int_t iw = 0; iw < 14; iw++)
617 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),
618 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
631 for(
Int_t pidIndex = 0; pidIndex < 2; pidIndex++)
636 fhLam0E[pidIndex] =
new TH2F (Form(
"h%sLam0E",pidParticle[pidIndex].
Data()),
637 Form(
"%s: #lambda_{0}^{2} vs E",pidParticle[pidIndex].
Data()),
638 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
639 fhLam0E[pidIndex]->SetYTitle(
"#lambda_{0}^{2}");
640 fhLam0E[pidIndex]->SetXTitle(
"E (GeV)");
641 outputContainer->Add(
fhLam0E[pidIndex]);
643 fhLam1E[pidIndex] =
new TH2F (Form(
"h%sLam1E",pidParticle[pidIndex].
Data()),
644 Form(
"%s: #lambda_{1}^{2} vs E",pidParticle[pidIndex].
Data()),
645 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
646 fhLam1E[pidIndex]->SetYTitle(
"#lambda_{1}^{2}");
647 fhLam1E[pidIndex]->SetXTitle(
"E (GeV)");
648 outputContainer->Add(
fhLam1E[pidIndex]);
650 fhDispE[pidIndex] =
new TH2F (Form(
"h%sDispE",pidParticle[pidIndex].
Data()),
651 Form(
"%s: dispersion^{2} vs E",pidParticle[pidIndex].
Data()),
652 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
653 fhDispE[pidIndex]->SetYTitle(
"D^{2}");
654 fhDispE[pidIndex]->SetXTitle(
"E (GeV) ");
655 outputContainer->Add(
fhDispE[pidIndex]);
660 Form(
"%s: #lambda_{0}^{2} vs E, EMCAL SM covered by TRD",pidParticle[pidIndex].
Data()),
661 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
662 fhLam0ETRD[pidIndex]->SetYTitle(
"#lambda_{0}^{2}");
667 Form(
"%s: #lambda_{1}^{2} vs E, EMCAL SM covered by TRD",pidParticle[pidIndex].
Data()),
668 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
669 fhLam1ETRD[pidIndex]->SetYTitle(
"#lambda_{1}^{2}");
674 Form(
"%s: dispersion^{2} vs E, EMCAL SM covered by TRD",pidParticle[pidIndex].
Data()),
675 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
676 fhDispETRD[pidIndex]->SetYTitle(
"Dispersion^{2}");
684 Form(
"%s: N_{cells} in cluster vs #lambda_{0}^{2}, E < 2 GeV",pidParticle[pidIndex].
Data()),
685 nbins,nmin, nmax, ssbins,ssmin,ssmax);
691 Form(
"%s: N_{cells} in cluster vs #lambda_{0}^{2}, E > 2 GeV",pidParticle[pidIndex].
Data()),
692 nbins,nmin, nmax, ssbins,ssmin,ssmax);
699 Form(
"%s: #eta vs #lambda_{0}^{2}, E < 2 GeV",pidParticle[pidIndex].
Data()),
700 netabins,etamin,etamax, ssbins,ssmin,ssmax);
706 Form(
"%s: #varphi vs #lambda_{0}^{2}, E < 2 GeV",pidParticle[pidIndex].
Data()),
707 nphibins,phimin,phimax, ssbins,ssmin,ssmax);
713 Form(
"%s: #eta vs #lambda_{0}^{2}, E > 2 GeV",pidParticle[pidIndex].
Data()),
714 netabins,etamin,etamax, ssbins,ssmin,ssmax);
720 Form(
"%s: #varphi vs #lambda_{0}^{2}, E > 2 GeV",pidParticle[pidIndex].
Data()),
721 nphibins,phimin,phimax, ssbins,ssmin,ssmax);
729 Form(
"%s: #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i} - <#eta>)^{2}/ #Sigma w_{i} vs E",pidParticle[pidIndex].
Data()),
730 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
732 fhDispEtaE[pidIndex]->SetYTitle(
"#sigma^{2}_{#eta #eta}");
736 Form(
"%s: #sigma^{2}_{#varphi #varphi} = #Sigma w_{i}(#varphi_{i} - <#varphi>)^{2} / #Sigma w_{i} vs E",pidParticle[pidIndex].
Data()),
737 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
739 fhDispPhiE[pidIndex]->SetYTitle(
"#sigma^{2}_{#varphi #varphi}");
743 Form(
"%s: #sigma^{2}_{#eta #eta} = #Sigma w_{i}(#eta_{i})^{2} / #Sigma w_{i} - <#eta>^{2} vs E",pidParticle[pidIndex].
Data()),
744 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
745 fhSumEtaE[pidIndex]->SetXTitle(
"E (GeV)");
746 fhSumEtaE[pidIndex]->SetYTitle(
"#delta^{2}_{#eta #eta}");
747 outputContainer->Add(
fhSumEtaE[pidIndex]);
750 Form(
"%s: #sigma^{2}_{#varphi #varphi} = #Sigma w_{i}(#varphi_{i})^{2}/ #Sigma w_{i} - <#varphi>^{2} vs E",pidParticle[pidIndex].
Data()),
751 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
752 fhSumPhiE[pidIndex]->SetXTitle(
"E (GeV)");
753 fhSumPhiE[pidIndex]->SetYTitle(
"#delta^{2}_{#varphi #varphi}");
754 outputContainer->Add(
fhSumPhiE[pidIndex]);
757 Form(
"%s: #delta^{2}_{#eta #varphi} = #Sigma w_{i}(#varphi_{i} #eta_{i} ) / #Sigma w_{i} - <#varphi><#eta> vs E",pidParticle[pidIndex].
Data()),
758 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
760 fhSumEtaPhiE[pidIndex]->SetYTitle(
"#delta^{2}_{#eta #varphi}");
764 Form(
"%s: #sigma^{2}_{#varphi #varphi} - #sigma^{2}_{#eta #eta} vs E",pidParticle[pidIndex].
Data()),
765 nptbins,ptmin,ptmax,200, -10,10);
767 fhDispEtaPhiDiffE[pidIndex]->SetYTitle(
"#sigma^{2}_{#varphi #varphi}-#sigma^{2}_{#eta #eta}");
771 Form(
"%s: (#sigma^{2}_{#varphi #varphi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#varphi #varphi}) vs E",pidParticle[pidIndex].
Data()),
772 nptbins,ptmin,ptmax, 200, -1,1);
774 fhSphericityE[pidIndex]->SetYTitle(
"s = (#sigma^{2}_{#varphi #varphi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#varphi #varphi})");
777 Int_t bin[] = {0,2,4,6,10,1000};
778 for(
Int_t i = 0; i < 5; i++)
781 Form(
"%s: #sigma^{2}_{#varphi #varphi} vs #sigma^{2}_{#eta #eta} for %d < E < %d GeV",pidParticle[pidIndex].
Data(),bin[i],bin[i+1]),
782 ssbins,ssmin,ssmax , ssbins,ssmin,ssmax);
795 for(
Int_t i = 0; i < 6; i++)
798 Form(
"%s like cluster from %s : E vs #lambda_{0}^{2}",pidParticle[pidIndex].
Data(),ptypess[i].
Data()),
799 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
800 fhMCELambda0[pidIndex][i]->SetYTitle(
"#lambda_{0}^{2}");
807 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()),
808 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
810 fhMCEDispEta[pidIndex][i]->SetYTitle(
"#sigma^{2}_{#eta #eta}");
814 Form(
"cluster from %s : %s like, #sigma^{2}_{#varphi #varphi} = #Sigma w_{i}(#varphi_{i} - <#varphi>)^{2} / #Sigma w_{i} vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
815 nptbins,ptmin,ptmax, ssbins,ssmin,ssmax);
817 fhMCEDispPhi[pidIndex][i]->SetYTitle(
"#sigma^{2}_{#varphi #varphi}");
821 Form(
"cluster from %s : %s like, #delta^{2}_{#eta #varphi} = #Sigma w_{i}(#varphi_{i} #eta_{i} ) / #Sigma w_{i} - <#varphi><#eta> vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
822 nptbins,ptmin,ptmax, 2*ssbins,-ssmax,ssmax);
824 fhMCESumEtaPhi[pidIndex][i]->SetYTitle(
"#delta^{2}_{#eta #varphi}");
828 Form(
"cluster from %s : %s like, #sigma^{2}_{#varphi #varphi} - #sigma^{2}_{#eta #eta} vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
829 nptbins,ptmin,ptmax,200,-10,10);
831 fhMCEDispEtaPhiDiff[pidIndex][i]->SetYTitle(
"#sigma^{2}_{#varphi #varphi}-#sigma^{2}_{#eta #eta}");
835 Form(
"cluster from %s : %s like, (#sigma^{2}_{#varphi #varphi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#varphi #varphi}) vs E",ptypess[i].
Data(),pidParticle[pidIndex].
Data()),
836 nptbins,ptmin,ptmax, 200,-1,1);
838 fhMCESphericity[pidIndex][i]->SetYTitle(
"s = (#sigma^{2}_{#varphi #varphi} - #sigma^{2}_{#eta #eta}) / (#sigma^{2}_{#eta #eta} + #sigma^{2}_{#varphi #varphi})");
849 Form(
"N cells in %s cluster vs E ",pidParticle[pidIndex].
Data()),
850 nptbins,ptmin,ptmax, nbins,nmin,nmax);
851 fhNCellsE[pidIndex]->SetXTitle(
"E (GeV)");
852 fhNCellsE[pidIndex]->SetYTitle(
"# of cells in cluster");
853 outputContainer->Add(
fhNCellsE[pidIndex]);
855 fhNLME[pidIndex] =
new TH2F (Form(
"h%sNLME",pidParticle[pidIndex].
Data()),
856 Form(
"NLM in %s cluster vs E ",pidParticle[pidIndex].
Data()),
857 nptbins,ptmin,ptmax, 10,0,10);
858 fhNLME[pidIndex]->SetXTitle(
"E (GeV)");
859 fhNLME[pidIndex]->SetYTitle(
"# of cells in cluster");
860 outputContainer->Add(
fhNLME[pidIndex]);
862 fhTimeE[pidIndex] =
new TH2F(Form(
"h%sTimeE",pidParticle[pidIndex].
Data()),
863 Form(
"Time in %s cluster vs E ",pidParticle[pidIndex].
Data())
864 ,nptbins,ptmin,ptmax, tbins,tmin,tmax);
865 fhTimeE[pidIndex]->SetXTitle(
"E (GeV)");
866 fhTimeE[pidIndex]->SetYTitle(
" t (ns)");
867 outputContainer->Add(
fhTimeE[pidIndex]);
870 Form(
"%s: energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",pidParticle[pidIndex].
Data()),
871 nptbins,ptmin,ptmax, 500,0,1.);
876 fhE[pidIndex] =
new TH1F(Form(
"h%sE",pidParticle[pidIndex].
Data()),
877 Form(
"Number of %s over calorimeter vs energy",pidParticle[pidIndex].
Data()),
878 nptbins,ptmin,ptmax);
879 fhE[pidIndex]->SetYTitle(
"N");
880 fhE[pidIndex]->SetXTitle(
"E_{#gamma}(GeV)");
881 outputContainer->Add(
fhE[pidIndex]) ;
883 fhPt[pidIndex] =
new TH1F(Form(
"h%sPtElectron",pidParticle[pidIndex].
Data()),
884 Form(
"Number of %s over calorimeter vs p_{T}",pidParticle[pidIndex].
Data()),
885 nptbins,ptmin,ptmax);
886 fhPt[pidIndex]->SetYTitle(
"N");
887 fhPt[pidIndex]->SetXTitle(
"p_{T #gamma}(GeV/c)");
888 outputContainer->Add(
fhPt[pidIndex]) ;
890 fhPhi[pidIndex] =
new TH2F(Form(
"h%sPhiElectron",pidParticle[pidIndex].
Data()),
891 Form(
"%s: #varphi vs p_{T}",pidParticle[pidIndex].
Data()),
892 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
893 fhPhi[pidIndex]->SetYTitle(
"#varphi (rad)");
894 fhPhi[pidIndex]->SetXTitle(
"p_{T #gamma} (GeV/c)");
895 outputContainer->Add(
fhPhi[pidIndex]) ;
897 fhEta[pidIndex] =
new TH2F(Form(
"h%sEta",pidParticle[pidIndex].
Data()),
898 Form(
"%s: #eta vs p_{T}",pidParticle[pidIndex].
Data()),
899 nptbins,ptmin,ptmax,netabins,etamin,etamax);
900 fhEta[pidIndex]->SetYTitle(
"#eta");
901 fhEta[pidIndex]->SetXTitle(
"p_{T #gamma} (GeV/c)");
902 outputContainer->Add(
fhEta[pidIndex]) ;
904 fhEtaPhi[pidIndex] =
new TH2F(Form(
"h%sEtaPhi",pidParticle[pidIndex].
Data()),
905 Form(
"%s: #eta vs #varphi",pidParticle[pidIndex].
Data()),
906 netabins,etamin,etamax,nphibins,phimin,phimax);
907 fhEtaPhi[pidIndex]->SetYTitle(
"#varphi (rad)");
908 fhEtaPhi[pidIndex]->SetXTitle(
"#eta");
909 outputContainer->Add(
fhEtaPhi[pidIndex]) ;
913 Form(
"%s: #eta vs #varphi, E > 0.5",pidParticle[pidIndex].
Data()),
914 netabins,etamin,etamax,nphibins,phimin,phimax);
915 fhEtaPhi05[pidIndex]->SetYTitle(
"#varphi (rad)");
925 fhMCE[pidIndex][i] =
new TH1F(Form(
"h%sE_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
926 Form(
"%s like cluster from %s : E ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
927 nptbins,ptmin,ptmax);
928 fhMCE[pidIndex][i]->SetXTitle(
"E (GeV)");
929 outputContainer->Add(
fhMCE[pidIndex][i]) ;
931 fhMCPt[pidIndex][i] =
new TH1F(Form(
"h%sPt_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
932 Form(
"%s like cluster from %s : p_{T} ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
933 nptbins,ptmin,ptmax);
934 fhMCPt[pidIndex][i]->SetXTitle(
"p_{T} (GeV/c)");
935 outputContainer->Add(
fhMCPt[pidIndex][i]) ;
937 fhMCEta[pidIndex][i] =
new TH2F(Form(
"h%sEta_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
938 Form(
"%s like cluster from %s : #eta ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
939 nptbins,ptmin,ptmax,netabins,etamin,etamax);
940 fhMCEta[pidIndex][i]->SetYTitle(
"#eta");
941 fhMCEta[pidIndex][i]->SetXTitle(
"E (GeV)");
942 outputContainer->Add(
fhMCEta[pidIndex][i]) ;
944 fhMCPhi[pidIndex][i] =
new TH2F(Form(
"h%sPhi_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
945 Form(
"%s like cluster from %s : #varphi ",pidParticle[pidIndex].
Data(),ptype[i].
Data()),
946 nptbins,ptmin,ptmax,nphibins,phimin,phimax);
947 fhMCPhi[pidIndex][i]->SetYTitle(
"#varphi (rad)");
948 fhMCPhi[pidIndex][i]->SetXTitle(
"E (GeV)");
949 outputContainer->Add(
fhMCPhi[pidIndex][i]) ;
953 Form(
"%s like MC - Reco E from %s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
954 nptbins,ptmin,ptmax, 200,-50,50);
955 fhMCDeltaE[pidIndex][i]->SetXTitle(
"#Delta E (GeV)");
956 outputContainer->Add(
fhMCDeltaE[pidIndex][i]);
958 fhMC2E[pidIndex][i] =
new TH2F (Form(
"h%s2E_MC%s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
959 Form(
"%s like E distribution, reconstructed vs generated from %s",pidParticle[pidIndex].
Data(),pname[i].
Data()),
960 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
961 fhMC2E[pidIndex][i]->SetXTitle(
"E_{rec} (GeV)");
962 fhMC2E[pidIndex][i]->SetYTitle(
"E_{gen} (GeV)");
963 outputContainer->Add(
fhMC2E[pidIndex][i]);
974 if(!
GetReader()->IsEmbeddedClusterSelectionOn())
977 "cluster from Electron : E vs #lambda_{0}^{2}",
978 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
984 "cluster from Electron : E vs #lambda_{0}^{2}",
985 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
991 "cluster from Electron : E vs #lambda_{0}^{2}",
992 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
999 if(
GetReader()->IsEmbeddedClusterSelectionOn())
1002 "Energy Fraction of embedded signal versus cluster energy",
1003 nptbins,ptmin,ptmax,100,0.,1.);
1009 "cluster from Electron embedded with more than 90% energy in cluster : E vs #lambda_{0}^{2}",
1010 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1016 "cluster from Electron embedded with 50% to 90% energy in cluster : E vs #lambda_{0}^{2}",
1017 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1023 "cluster from Electron embedded with 10% to 50% energy in cluster : E vs #lambda_{0}^{2}",
1024 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1030 "cluster from Electronm embedded with 0% to 10% energy in cluster : E vs #lambda_{0}^{2}",
1031 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1039 return outputContainer ;
1048 AliFatal(
"STOP: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!");
1050 AliFatal(
"STOP: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!");
1096 Int_t nCaloClusters = pl->GetEntriesFast();
1105 for(
Int_t icalo = 0; icalo < nCaloClusters; icalo++)
1107 AliVCluster * calo = (AliVCluster*) (pl->At(icalo));
1111 Int_t evtIndex = 0 ;
1114 evtIndex=
GetMixedEvent()->EventIndexForCaloCluster(calo->GetID()) ;
1133 AliVCaloCells* cells = 0;
1148 AliWarning(
"Null track");
1153 Float_t dEdx = track->GetTPCsignal();
1154 Float_t eOverp = calo->E()/track->P();
1159 if( eOverp < fEOverPMax && eOverp >
fEOverPMin)
1167 if(m02 > 0.1 && m02 < 0.4)
1177 if( dEdx < fdEdxMax && dEdx >
fdEdxMin)
1182 if(m02 > 0.1 && m02 < 0.4)
1188 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));
1337 Int_t label = calo->GetLabel();
1345 aodpart.
SetM02(calo->GetM02());
1346 aodpart.
SetM20(calo->GetM20());
1348 aodpart.
SetTime(calo->GetTOF()*1e9);
1355 Double_t distBad=calo->GetDistanceToBadChannel() ;
1372 AliDebug(1,Form(
"End fill AODs, with %d entries",
GetOutputAODBranch()->GetEntriesFast()));
1383 AliVParticle * primary = 0x0;
1387 AliFatal(
"MCEvent not available! STOP");
1400 AliDebug(1,Form(
"AOD branch entries %d", naod));
1402 for(
Int_t iaod = 0; iaod < naod ; iaod++)
1414 AliDebug(1,Form(
"ID Electron: pt %f, phi %f, eta %f", ph->
Pt(),ph->
Phi(),ph->
Eta())) ;
1441 AliDebug(1,Form(
"*** bad label ***: label %d", label));
1446 if ( label >= nprim )
1448 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d", label, nprim));
1454 primary =
GetMC()->GetTrack(label);
1458 AliWarning(Form(
"*** no primary ***: label %d", label));
1462 eprim = primary->E();
1592 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
1598 printf(
"Min Distance to Bad Channel = %2.1f\n",
fMinDist);
1599 printf(
"Min Distance to Bad Channel 2 = %2.1f\n",
fMinDist2);
1600 printf(
"Min Distance to Bad Channel 3 = %2.1f\n",
fMinDist3);
1602 printf(
"Number of cells in cluster is > %d \n",
fNCellsCut);
1613 AliVCaloCells* cells = 0;
1620 for (
Int_t ipos = 0; ipos < clus->GetNCells(); ipos++) {
1622 Int_t id = clus->GetCellsAbsId()[ipos];
1625 Float_t amp = cells->GetCellAmplitude(
id);
1636 AliWarning(Form(
"Wrong calculated energy %f",energy));
1645 for (
Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
1647 Int_t id = clus->GetCellsAbsId()[ipos];
1650 Float_t amp = cells->GetCellAmplitude(
id);
1661 Float_t l0org = clus->GetM02();
1662 Float_t l1org = clus->GetM20();
1663 Float_t dorg = clus->GetDispersion();
1665 for(
Int_t iw = 0; iw < 14; iw++){
1677 clus->SetM02(l0org);
1678 clus->SetM20(l1org);
1679 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.
virtual Double_t Eta() const
TH2F * fhSumPhiE[2]
! shower dispersion in phi direction
void FillShowerShapeHistograms(AliVCluster *cluster, Int_t mcTag, Int_t pidTag)
Fill cluster Shower Shape histograms.
virtual void SetNLM(Int_t nlm)
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
virtual Double_t Pt() const
Int_t GetHistoNClusterCellMin() const
Float_t GetHistoPtMin() const
Int_t GetHistoShowerShapeBins() const
virtual Int_t GetCalorimeter() const
Float_t GetHistodEdxMax() const
virtual void AddAODParticle(AliCaloTrackParticle part)
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 void GetVertex(Double_t vertex[3]) const
virtual TString GetNameOfMCEventHederGeneratorToAccept() const
Int_t fNLMCutMax
Remove clusters/cells with number of local maxima larger than this value.
virtual Int_t GetLabel() const
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
virtual void SetNCells(Int_t nce)
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
virtual void SetDetectorTag(UInt_t d)
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
virtual void SetTime(Float_t tim)
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
virtual UInt_t GetDetectorTag() 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
virtual void SetIdentifiedParticleType(Int_t pdg)
Float_t GetHistoPhiMin() const
virtual Double_t E() 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()
Container for input particle information on CaloTrackCorr package.
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 ...
void RecalculateClusterShowerShapeParameters(const AliEMCALGeometry *geom, AliVCaloCells *cells, AliVCluster *cluster)
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
virtual void SetTrackLabel(Int_t a, Int_t b)
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
virtual void SetM02(Float_t m02)
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.
virtual void SetLabel(Int_t l)
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)
virtual void SetTag(Int_t tag)
virtual AliMCEvent * GetMC() const
virtual void SetSModNumber(Int_t sm)
TH2F * fhMCDeltaE[2][10]
! MC-Reco E distribution coming from MC particle
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
virtual void SetCaloLabel(Int_t a, Int_t b)
TH1F * fhPt[2]
! Number of identified electron vs transerse momentum
Float_t GetHistoEtaMax() const
TH2F * fhLam0E[2]
! cluster lambda0 vs E
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
virtual Int_t GetModuleNumber(AliCaloTrackParticle *part) const
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.
virtual Double_t Phi() const
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
Int_t CheckCommonAncestor(Int_t index1, Int_t index2, const AliMCEvent *mcevent, Int_t &ancPDG, Int_t &ancStatus, TLorentzVector &momentum, TVector3 &prodVertex)
virtual Int_t GetDataType() const
Float_t GetHistoTimeMin() const
Float_t GetHistoShowerShapeMax() const
virtual void SetM20(Float_t m20)
TH2F * fhNCellsE[2]
! Number of cells in cluster vs E
Float_t GetHistoPhiMax() const
virtual AliCaloTrackReader * GetReader() const
Int_t GetHistoEtaBins() const
Int_t CheckOrigin(Int_t label, AliMCEvent *mcevent, TString selectHeaderName)
TH2F * fhDispE[2]
! cluster dispersion vs E
virtual Int_t GetTag() const
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
virtual void SetDistToBad(Int_t dist)
AliAnaElectron()
Default constructor. Initialize parameters.
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.
virtual Int_t GetIdentifiedParticleType() const
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.