Lines getting the matched track moved to a method in AliCalorimeterUtils. Lines copie...
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemtoUser / AliFemtoCutMonitorParticleEtCorr.cxx
CommitLineData
95150c4b 1////////////////////////////////////////////////////////////////////////////////
2// //
3// AliFemtoCutMonitorParticleEtCorr - the cut monitor for particles //
4// which saves particles' et histogram and makes the bin-by-bin correlation //
5// //
6// Author: Adam.Kisiel@cern.ch //
7// //
8////////////////////////////////////////////////////////////////////////////////
9#include "AliFemtoCutMonitorParticleEtCorr.h"
10#include "AliFemtoModelHiddenInfo.h"
11#include <TH1D.h>
12#include <TH2D.h>
13#include <TList.h>
14#include <TMath.h>
15
16AliFemtoCutMonitorParticleEtCorr::AliFemtoCutMonitorParticleEtCorr():
17 AliFemtoCutMonitor(),
18 fPhiBins(60),
19 fPtPerPhi(0),
20 fPtCovPerPhi(0),
21 fPtMultPerPhi(0),
22 fNEventsProcessed(0)
23{
24 // Default constructor
0002d348 25 for (int ib=0; ib<200; ib++) {
26 fPtSumEvent[ib] = 0;
27 fMultSumEvent[ib] = 0;
28 }
95150c4b 29}
30
31AliFemtoCutMonitorParticleEtCorr::AliFemtoCutMonitorParticleEtCorr(const char *aName, int aPhiBins):
32 AliFemtoCutMonitor(),
33 fPhiBins(aPhiBins),
34 fPtPerPhi(0),
35 fPtCovPerPhi(0),
36 fPtMultPerPhi(0),
37 fNEventsProcessed(0)
38{
39 // Normal constructor
40 char name[200];
41 snprintf(name, 200, "EtCorrAvgPt%s", aName);
42 fPtPerPhi = new TH1D(name, "Average Pt Per Phi", aPhiBins, -0.5, aPhiBins-0.5);
43 snprintf(name, 200, "EtCorrMult%s", aName);
44 fPtMultPerPhi = new TH2D(name, "Multiplicity Per Phi", aPhiBins, -0.5, aPhiBins-0.5, aPhiBins, -0.5, aPhiBins-0.5);
45 snprintf(name, 200, "EtCorrAvgPtCov%s", aName);
46 fPtCovPerPhi = new TH2D(name, "Covariance of Average Pt Per Phi", aPhiBins, -0.5, aPhiBins-0.5, aPhiBins, -0.5, aPhiBins-0.5);
47
48 fPtPerPhi->Sumw2();
49 fPtCovPerPhi->Sumw2();
50 fPtMultPerPhi->Sumw2();
51 fPhiBins = aPhiBins;
0002d348 52
53 for (int ib=0; ib<200; ib++) {
54 fPtSumEvent[ib] = 0;
55 fMultSumEvent[ib] = 0;
56 }
57
95150c4b 58}
59
60AliFemtoCutMonitorParticleEtCorr::AliFemtoCutMonitorParticleEtCorr(const AliFemtoCutMonitorParticleEtCorr &aCut):
61 AliFemtoCutMonitor(),
62 fPhiBins(0),
63 fPtPerPhi(0),
64 fPtCovPerPhi(0),
65 fPtMultPerPhi(0),
66 fNEventsProcessed(0)
67{
68 // copy constructor
69 if (fPtCovPerPhi) delete fPtCovPerPhi;
70 fPtCovPerPhi = new TH2D(*aCut.fPtCovPerPhi);
71 if (fPtPerPhi) delete fPtPerPhi;
72 fPtPerPhi = new TH1D(*aCut.fPtPerPhi);
73 if (fPtMultPerPhi) delete fPtMultPerPhi;
74 fPtMultPerPhi = new TH2D(*aCut.fPtMultPerPhi);
75 fPhiBins = aCut.fPhiBins;
76 fNEventsProcessed = aCut.fNEventsProcessed;
0002d348 77
78 for (int ib=0; ib<200; ib++) {
79 fPtSumEvent[ib] = 0;
80 fMultSumEvent[ib] = 0;
81 }
95150c4b 82}
83
84AliFemtoCutMonitorParticleEtCorr::~AliFemtoCutMonitorParticleEtCorr()
85{
86 // Destructor
87 delete fPtPerPhi;
88 delete fPtMultPerPhi;
89 delete fPtCovPerPhi;
90}
91
92AliFemtoCutMonitorParticleEtCorr& AliFemtoCutMonitorParticleEtCorr::operator=(const AliFemtoCutMonitorParticleEtCorr& aCut)
93{
94 // assignment operator
95 if (this == &aCut)
96 return *this;
97
98 if (fPtCovPerPhi) delete fPtCovPerPhi;
99 fPtCovPerPhi = new TH2D(*aCut.fPtCovPerPhi);
100 if (fPtPerPhi) delete fPtPerPhi;
101 fPtPerPhi = new TH1D(*aCut.fPtPerPhi);
102 if (fPtMultPerPhi) delete fPtMultPerPhi;
103 fPtMultPerPhi = new TH2D(*aCut.fPtMultPerPhi);
104 fPhiBins = aCut.fPhiBins;
105 fNEventsProcessed = aCut.fNEventsProcessed;
106
107 return *this;
108}
109
110AliFemtoString AliFemtoCutMonitorParticleEtCorr::Report(){
111 // Prepare report from the execution
112 string stemp = "*** AliFemtoCutMonitorParticleEtCorr report";
113 AliFemtoString returnThis = stemp;
114 return returnThis;
115}
116
117void AliFemtoCutMonitorParticleEtCorr::Fill(const AliFemtoTrack* aTrack)
118{
119 // Fill in the monitor histograms with the values from the current track
120 // float tEnergy = ::sqrt(aTrack->P().mag2()+fMass*fMass);
121 // float tRapidity = 0.5*::log((tEnergy+aTrack->P().z())/(tEnergy-aTrack->P().z()));
122 float tPt = ::sqrt((aTrack->P().x())*(aTrack->P().x())+(aTrack->P().y())*(aTrack->P().y()));
123 // float tEta = -TMath::Log(TMath::Tan(aTrack->P().theta()/2.0));
f6944668 124 float tPhi = aTrack->P().Phi();
95150c4b 125 Double_t tPiTwo = TMath::Pi()*2;
126
127 while (tPhi > tPiTwo) tPhi -= tPiTwo;
128 while (tPhi < 0) tPhi += tPiTwo;
129
130 int nbin = (int) floor(tPhi * fPhiBins / tPiTwo);
131 fPtSumEvent[nbin] += tPt;
132 fMultSumEvent[nbin] += 1;
133}
134
135void AliFemtoCutMonitorParticleEtCorr::Write()
136{
137 // Write out the relevant histograms
138 fPtPerPhi->Write();
139 fPtCovPerPhi->Write();
140 fPtMultPerPhi->Write();
141}
142
143TList *AliFemtoCutMonitorParticleEtCorr::GetOutputList()
144{
145 TList *tOutputList = new TList();
146 tOutputList->Add(fPtPerPhi);
147 tOutputList->Add(fPtCovPerPhi);
148 tOutputList->Add(fPtMultPerPhi);
149
150 return tOutputList;
151}
152
153void AliFemtoCutMonitorParticleEtCorr::EventBegin(const AliFemtoEvent* aEvent)
154{
3ccc556f 155 if (aEvent)
156 for (int iter=0; iter<fPhiBins; iter++) {
157 fPtSumEvent[iter] = 0;
158 fMultSumEvent[iter] = 0;
159 }
95150c4b 160}
161
162void AliFemtoCutMonitorParticleEtCorr::EventEnd(const AliFemtoEvent* aEvent)
163{
3ccc556f 164 if (aEvent) {
165 for (int ispt=0; ispt<fPhiBins; ispt++) {
166 fPtPerPhi->Fill(ispt, fPtSumEvent[ispt]);
167 for (int ispt2=0; ispt2<fPhiBins; ispt2++) {
168 fPtCovPerPhi->Fill(ispt, ispt2, fPtSumEvent[ispt]*fPtSumEvent[ispt2]);
169 fPtMultPerPhi->Fill(ispt, ispt2, fMultSumEvent[ispt]*fMultSumEvent[ispt2]);
170 }
95150c4b 171 }
3ccc556f 172 fNEventsProcessed++;
95150c4b 173 }
95150c4b 174}
175