]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PWGLF/FORWARD/analysis2/AliSPDMCTrackDensity.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliSPDMCTrackDensity.cxx
... / ...
CommitLineData
1#include "AliSPDMCTrackDensity.h"
2#include "AliMCEvent.h"
3#include "AliTrackReference.h"
4#include "AliForwardUtil.h"
5#include <TMath.h>
6#include <AliLog.h>
7#include <TROOT.h>
8#include <TH2D.h>
9#include <iostream>
10
11//____________________________________________________________________
12AliSPDMCTrackDensity::AliSPDMCTrackDensity()
13 : AliBaseMCTrackDensity(),
14 fMinR(3.5),
15 fMaxR(4.5),
16 fMinZ(-15), // -14.1),
17 fMaxZ(+15), // +14.1)
18 fStored(0),
19 fOutput(0)
20{
21 // Default constructor
22}
23
24//____________________________________________________________________
25AliSPDMCTrackDensity::AliSPDMCTrackDensity(const char*)
26 : AliBaseMCTrackDensity("spdMCTrackDensity"),
27 fMinR(3.5),
28 fMaxR(4.5),
29 fMinZ(-14.1),
30 fMaxZ(+14.1),
31 fStored(0),
32 fOutput(0)
33{
34 // Normal constructor constructor
35}
36
37//____________________________________________________________________
38AliSPDMCTrackDensity::AliSPDMCTrackDensity(const AliSPDMCTrackDensity& o)
39 : AliBaseMCTrackDensity(o),
40 fMinR(o.fMinR),
41 fMaxR(o.fMaxR),
42 fMinZ(o.fMinZ),
43 fMaxZ(o.fMaxZ),
44 fStored(o.fStored),
45 fOutput(o.fOutput)
46{
47 // Normal constructor constructor
48}
49
50//____________________________________________________________________
51AliSPDMCTrackDensity&
52AliSPDMCTrackDensity::operator=(const AliSPDMCTrackDensity& o)
53{
54 // Assignment operator
55 if (&o == this) return *this;
56 AliBaseMCTrackDensity::operator=(o);
57 fMinR = o.fMinR;
58 fMaxR = o.fMaxR;
59 fMinZ = o.fMinZ;
60 fMaxZ = o.fMaxZ;
61 fStored = o.fStored;
62 fOutput = o.fOutput;
63
64 return *this;
65}
66
67//____________________________________________________________________
68Int_t
69AliSPDMCTrackDensity::GetDetectorId() const
70{
71 return AliTrackReference::kITS;
72}
73
74
75//____________________________________________________________________
76void
77AliSPDMCTrackDensity::BeginTrackRefs()
78{
79 fStored = 0;
80}
81
82//____________________________________________________________________
83Bool_t
84AliSPDMCTrackDensity::CheckTrackRef(AliTrackReference* ref) const
85{
86 // Get radius and z where the track reference was made
87 Double_t r = ref->R();
88 Double_t z = ref->Z();
89 if (r > fMaxR || r < fMinR) return false;
90 if (z > fMaxZ || z < fMinZ) return false;
91
92 return true;
93}
94//____________________________________________________________________
95AliTrackReference*
96AliSPDMCTrackDensity::ProcessRef(AliMCParticle* /*particle*/,
97 const AliMCParticle* /*mother*/,
98 AliTrackReference* ref)
99{
100 if (fStored) return 0;
101
102 return fStored = ref;
103}
104
105//____________________________________________________________________
106Double_t
107AliSPDMCTrackDensity::StoreParticle(AliMCParticle* particle,
108 const AliMCParticle* mother,
109 AliTrackReference* ref) const
110{
111 Double_t w = AliBaseMCTrackDensity::StoreParticle(particle, mother, ref);
112 Double_t r = ref->R();
113 Double_t x = ref->X();
114 Double_t y = ref->Y();
115 Double_t z = ref->Z();
116
117 Double_t zr = z-fVz;
118 Double_t th = TMath::ATan2(r,zr);
119 if (th < 0) th += 2*TMath::Pi();
120 Double_t et = -TMath::Log(TMath::Tan(th/2));
121 Double_t ph = TMath::ATan2(y,x);
122 if (ph < 0) ph += 2*TMath::Pi();
123 fOutput->Fill(et,ph,w);
124
125 return w;
126}
127
128
129//____________________________________________________________________
130Bool_t
131AliSPDMCTrackDensity::Calculate(const AliMCEvent& event,
132 Double_t vz,
133 TH2D& output,
134 TH2D* primary)
135{
136 //
137 // Filter the input kinematics and track references, using
138 // some of the ESD information
139 //
140 // Parameters:
141 // input Input ESD event
142 // event Input MC event
143 // vz Vertex position
144 // output Output ESD-like object
145 // primary Per-event histogram of primaries
146 //
147 // Return:
148 // True on succes, false otherwise
149 //
150 fOutput = &output;
151
152 return ProcessTracks(event, vz, primary);
153}
154#define PF(N,V,...) \
155 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
156
157#define PFV(N,VALUE) \
158 do { \
159 AliForwardUtil::PrintName(N); \
160 std::cout << (VALUE) << std::endl; } while(false)
161//____________________________________________________________________
162void
163AliSPDMCTrackDensity::Print(Option_t* option) const
164{
165 AliBaseMCTrackDensity::Print(option);
166 gROOT->IncreaseDirLevel();
167 PF("R range", "[%f,%f]", fMinR, fMaxR);
168 PF("Z range", "[%f,%f]", fMinZ, fMaxZ);
169 gROOT->DecreaseDirLevel();
170}
171
172//____________________________________________________________________
173//
174// EOF
175//