1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies
7 //*-- Authors: Oystein Djuvsland (Bergen)
8 //_________________________________________________________________________
9 #include "AliAnalysisEtSelector.h"
10 #include "AliAnalysisEtCuts.h"
11 #include "AliESDCaloCluster.h"
13 #include "TParticle.h"
14 #include "TParticlePDG.h"
15 #include "AliAnalysisEtCommon.h"
18 ClassImp(AliAnalysisEtSelector);
20 AliAnalysisEtSelector::AliAnalysisEtSelector(AliAnalysisEtCuts *cuts) : AliAnalysisEtCommon()
28 AliAnalysisEtSelector::~AliAnalysisEtSelector()
35 void AliAnalysisEtSelector::SetEvent(const AliESDEvent* event)
38 if(!fInitialized) Init(event);
41 Bool_t AliAnalysisEtSelector::IsNeutralMcParticle(Int_t pIdx, AliStack& s, const TParticlePDG& pdg) const
43 return s.IsPhysicalPrimary(pIdx) &&(TMath::Abs(TMath::Abs(pdg.Charge()) - fCuts->GetMonteCarloNeutralParticle())<1e-3);
46 Bool_t AliAnalysisEtSelector::IsEmEtParticle(const Int_t pdgCode) const
48 return pdgCode == fgGammaCode || pdgCode == fgPi0Code || pdgCode == fgEtaCode || pdgCode == fgEPlusCode || pdgCode == fgEMinusCode;
52 Bool_t AliAnalysisEtSelector::PrimaryIsEmEtParticle(const Int_t pIdx, AliStack& stack) const
54 return IsEmEtParticle(stack.Particle(GetPrimary(pIdx, stack))->GetPdgCode());
56 Int_t AliAnalysisEtSelector::GetPrimary(const Int_t partIdx, AliStack& stack) const
60 Int_t mothIdx = stack.Particle(partIdx)->GetMother(0);
61 if(mothIdx < 0) return -1;
62 TParticle *mother = stack.Particle(mothIdx);
65 if(stack.IsPhysicalPrimary(mothIdx)) return mothIdx;
66 else return GetPrimary(mothIdx, stack);
70 std::cout << "WAT!" << std::endl;
76 Bool_t AliAnalysisEtSelector::FromSecondaryInteraction(const TParticle& part, AliStack &stack) const
78 // Bool_t partVtxSecondary = (
79 // TMath::Sqrt(part.Vx()*part.Vx() + part.Vy()*part.Vy()) > fCuts->GetPrimaryVertexCutXY()
80 // || TMath::Abs(part.Vz()) > fCuts->GetPrimaryVertexCutZ()
82 // && TMath::Sqrt(part.Vx()*part.Vx()+part.Vy()*part.Vy() + part.Vz()*part.Vz())<(fCuts->GetGeometryPhosDetectorRadius()-10);
84 //Let's find suspect decay (typical for secondary interaction)...
86 return SuspeciousDecayInChain(211, 111, part, stack);
93 Bool_t AliAnalysisEtSelector::SuspeciousDecayInChain(const UInt_t suspectMotherPdg, const UInt_t suspectDaughterPdg, const TParticle &part, AliStack& stack) const
95 UInt_t partPdg = TMath::Abs(part.GetPdgCode());
96 if(part.GetFirstMother() == -1)
100 TParticle *mother = stack.Particle(part.GetFirstMother());
101 UInt_t motherPdg = TMath::Abs(mother->GetPdgCode());
102 if((suspectDaughterPdg==partPdg || 2112 == partPdg )&& suspectMotherPdg == motherPdg)
106 return SuspeciousDecayInChain(suspectMotherPdg, suspectDaughterPdg, *mother, stack);