3 #include <AliMCEvent.h> 4 #include <AliTrackReference.h> 14 #include "AliCollisionGeometry.h" 15 #include "AliGenEventHeader.h" 23 fUseOnlyPrimary(false),
34 fTrackGammaToPi0(false)
37 DGUARD(
fDebug, 3,
"Default CTOR of AliBasMCTrackDensity");
42 :
TNamed(name,
"mcTrackDensity"),
57 DGUARD(
fDebug, 3,
"Named CTOR of AliBasMCTrackDensity: %s", name);
86 if (&o ==
this)
return *
this;
137 ll->SetName(GetTitle());
141 fBinFlow =
new TH2D(
"binFlow",
"#eta and #varphi bin flow",
142 200, -5, 5, 40, -180, 180);
144 fBinFlow->SetYTitle(
"#Delta#varphi");
150 200, -4, 6, 200, -5, 5);
158 40, 0, 360, 40, -180, 180);
165 fNRefs =
new TH1D(
"nRefs",
"# references per track", 21, -.5, 20.5);
166 fNRefs->SetXTitle(
"# references");
167 fNRefs->SetFillColor(kMagenta+1);
168 fNRefs->SetFillStyle(3001);
179 const AliMCParticle* mother,
180 AliTrackReference* ref)
const 201 Double_t thetaR = TMath::ATan2(rr,z);
203 Double_t etaR = -TMath::Log(TMath::Tan(thetaR/2));
206 if (thetaR < 0) thetaR += 2*TMath::Pi();
207 thetaR *= 180. / TMath::Pi();
208 if (phiR < 0) phiR += 2*TMath::Pi();
209 phiR *= 180. / TMath::Pi();
211 const AliMCParticle* mp = (mother ? mother : particle);
213 Double_t dPhi = mp->Phi() * 180 / TMath::Pi() - phiR;
214 if (dPhi > 180) dPhi -= 360;
215 if (dPhi < -180) dPhi += 360;
232 Double_t ang = TMath::Abs(TMath::Pi()-theta);
245 const AliMCParticle* candidate = 0;
247 const AliMCParticle* p =
static_cast<AliMCParticle*
>(
event.GetTrack(i));
249 if (gammaSeen && TMath::Abs(p->PdgCode()) == 111)
255 if (const_cast<AliMCEvent&>(event).IsPhysicalPrimary(i)) {
275 AliWarningF(
"No mother found for track # %d", iTr);
283 DGUARD(
fDebug,3,
"MC track density get collision parameters");
284 AliCollisionGeometry* hd =
285 dynamic_cast<AliCollisionGeometry*
>(
event.GenEventHeader());
286 fPhiR = (hd ? hd->ReactionPlaneAngle() : 0.);
287 fB = (hd ? hd->ImpactParameter() : -1 );
294 const AliMCParticle* mother)
302 if (!particle)
return false;
304 Int_t nTrRef = particle->GetNumberOfTrackReferences();
305 AliTrackReference* store = 0;
311 for (
Int_t iTrRef = 0; iTrRef < nTrRef; iTrRef++) {
312 AliTrackReference* ref = particle->GetTrackReference(iTrRef);
324 if (test) store =
test;
327 if (!store)
return true;
360 fIP.SetXYZ(ip.X(), ip.Y(), ip.Z());
367 Int_t nTracks =
event.GetNumberOfTracks();
369 Int_t nPrim = ((AliMCEvent&)event).GetNumberOfPrimaries();
370 for (
Int_t iTr = 0; iTr < nTracks; iTr++) {
371 AliMCParticle* particle =
372 static_cast<AliMCParticle*
>(
event.GetTrack(iTr));
375 if (particle->Charge() == 0)
continue;
377 Bool_t isPrimary =
event.IsPhysicalPrimary(iTr) && iTr < nPrim;
380 if (isPrimary && primary) {
383 primary->Fill(particle->Eta(), particle->Phi(), w);
390 const AliMCParticle* mother = isPrimary ? particle :
GetMother(iTr, event);
417 #define PF(N,V,...) \ 418 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__) 419 #define PFB(N,FLAG) \ 421 AliForwardUtil::PrintName(N); \ 422 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \ 424 #define PFV(N,VALUE) \ 426 AliForwardUtil::PrintName(N); \ 427 std::cout << (VALUE) << std::endl; } while(false) 434 gROOT->IncreaseDirLevel();
438 gROOT->DecreaseDirLevel();
void SetUseFlowWeights(Bool_t use)
void SetTruthWeights(AliBaseMCWeights *weights)
virtual void Print(Option_t *option="") const
const AliMCParticle * GetMother(Int_t iTr, const AliMCEvent &event) const
virtual void CreateOutputObjects(TList *list)
void SetWeights(AliBaseMCWeights *weights)
virtual Bool_t CheckTrackRef(AliTrackReference *) const
virtual Double_t StoreParticle(AliMCParticle *particle, const AliMCParticle *mother, AliTrackReference *ref) const
virtual void Print(Option_t *option="") const
Double_t GetTrackRefTheta(const AliTrackReference *ref) const
Various utilities used in PWGLF/FORWARD.
virtual AliTrackReference * ProcessRef(AliMCParticle *particle, const AliMCParticle *mother, AliTrackReference *ref)=0
Double_t CalculateWeight(const AliMCParticle *p, Bool_t isPrimary) const
AliBaseMCWeights * fWeights
AliBaseMCTrackDensity & operator=(const AliBaseMCTrackDensity &o)
virtual void Init(TList *l)
virtual Int_t GetDetectorId() const =0
#define DGUARD(L, N, F,...)
virtual void EndTrackRefs(Int_t)
static void PrintTask(const TObject &o)
Double_t CalculateTruthWeight(const AliMCParticle *p) const
void test(int runnumber=195345)
Bool_t ProcessTracks(const AliMCEvent &event, const TVector3 &ip, TH2D *primary)
AliBaseMCWeights * fTruthWeights
virtual Double_t CalcWeight(const AliMCParticle *p, Bool_t isPrimary, Double_t phiR, Double_t b) const
Bool_t GetCollisionParameters(const AliMCEvent &event)
Bool_t ProcessTrack(AliMCParticle *particle, const AliMCParticle *mother)
virtual void BeginTrackRefs()