]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/totEt/AliAnalysisHadEtMonteCarlo.cxx
Updated for changes
[u/mrichter/AliRoot.git] / PWG4 / totEt / AliAnalysisHadEtMonteCarlo.cxx
CommitLineData
cf6522d1 1//_________________________________________________________________________
2// Utility Class for transverse energy studies, charged hadrons
3// Base class for MC analysis
4// - MC output
5// implementation file
6//
7//Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
641e1e0c 8//University of Tennessee at Knoxville
cf6522d1 9//_________________________________________________________________________
641e1e0c 10#include "AliAnalysisHadEtMonteCarlo.h"
11#include "AliAnalysisEtCuts.h"
12
13#include "AliStack.h"
14#include "AliMCEvent.h"
15#include "AliESDEvent.h"
16#include "AliESDtrackCuts.h"
17#include "AliESDpid.h"
4b40b2b1 18#include "AliPID.h"
19#include "AliESDtrack.h"
20#include "AliVParticle.h"
21#include "AliAnalysisTask.h"
22#include "AliAnalysisManager.h"
23#include "AliAnalysisHadEtReconstructed.h"
24#include "AliAnalysisEtCuts.h"
641e1e0c 25#include <iostream>
4b40b2b1 26#include "TRandom.h"
7d2d1773 27#include "AliAnalysisEtCommon.h"
16abb579 28
641e1e0c 29using namespace std;
30
16abb579 31ClassImp(AliAnalysisHadEtMonteCarlo);
32
4b40b2b1 33
0e866ddc 34Int_t AliAnalysisHadEtMonteCarlo::fgNumSmearWidths = 4;
35Float_t AliAnalysisHadEtMonteCarlo::fgSmearWidths[4] = {0.005,0.006,0.007,0.008};
4b40b2b1 36
d6214a64 37AliAnalysisHadEtMonteCarlo::AliAnalysisHadEtMonteCarlo():AliAnalysisHadEt()
0e866ddc 38 ,fSimPiKPEt(0)
4b40b2b1 39 ,fSimHadEt(0)
40 ,fSimTotEt(0)
7d2d1773 41 ,fInvestigateSmearing(0)
42 ,fInvestigateFull(0)
43 ,fInvestigateEMCal(0)
44 ,fInvestigatePHOS(0)
45 ,fInvestigatePiKP(0)
46 ,fRequireITSHits(0)
0e866ddc 47 ,fPtSmearer(0)
d6214a64 48{
4b40b2b1 49}
50AliAnalysisHadEtMonteCarlo::~AliAnalysisHadEtMonteCarlo(){//destructor
0e866ddc 51 if(fPtSmearer) delete fPtSmearer;
d6214a64 52}
4b40b2b1 53
54void AliAnalysisHadEtMonteCarlo::ResetEventValues(){//resetting event variables
d6214a64 55 AliAnalysisHadEt::ResetEventValues();
56 fSimHadEt=0.0;
57 fSimTotEt=0.0;
0e866ddc 58 fSimPiKPEt=0.0;
d6214a64 59}
cf6522d1 60Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev,AliVEvent* ev2)
61{ // analyse MC and real event info
641e1e0c 62 FillHisto1D("NEvents",0.5,1);
63
64 AnalyseEvent(ev);
65 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
66 AliESDEvent *realEvent = dynamic_cast<AliESDEvent*>(ev2);
67 AliStack *stack = mcEvent->Stack();
68
69 //for PID
cf6522d1 70 AliESDpid *pID = new AliESDpid();
641e1e0c 71
641e1e0c 72 //=============================================
73
74 //Roughly following $ALICE_ROOT/PWG0/dNdEta/AlidNdEtaCorrectionTask
75
76 //=============================================TPC&&ITS=============================================
cf6522d1 77 TString *strTPC = new TString("TPC");
78 TString *strITS = new TString("ITS");
79 TString *strTPCITS = new TString("TPCITS");
7d2d1773 80 Int_t lastcutset = 1;
81 if(fRequireITSHits) lastcutset = 2;
82 for(Int_t cutset=0;cutset<=lastcutset;cutset++){
cf6522d1 83 TString *cutName;
641e1e0c 84 TObjArray* list;
85 switch(cutset){
86 case 0:
cf6522d1 87 cutName = strTPC;
88 list = fEsdtrackCutsTPC->GetAcceptedTracks(realEvent);
641e1e0c 89 break;
90 case 1:
cf6522d1 91 cutName = strITS;
92 list = fEsdtrackCutsITS->GetAcceptedTracks(realEvent);
641e1e0c 93 break;
94 case 2:
cf6522d1 95 cutName = strTPCITS;
96 list = fEsdtrackCutsITSTPC->GetAcceptedTracks(realEvent);
641e1e0c 97 break;
98 default:
99 cerr<<"Error: cannot fill histograms!"<<endl;
100 return -1;
101 }
102 Int_t nGoodTracks = list->GetEntries();
103 for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
104 {
105 AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
106 if (!track)
107 {
108 Printf("ERROR: Could not get track %d", iTrack);
109 continue;
110 }
111 else{
641e1e0c 112 Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
7d2d1773 113 pID->MakeTPCPID(track);
114 pID->MakeITSPID(track);
641e1e0c 115 if(cutset!=1){
cf6522d1 116 nSigmaPion = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kPion));
117 nSigmaProton = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kProton));
118 nSigmaKaon = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kKaon));
119 nSigmaElectron = TMath::Abs(pID->NumberOfSigmasTPC(track,AliPID::kElectron));
641e1e0c 120 }
121 else{
cf6522d1 122 nSigmaPion = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kPion));
123 nSigmaProton = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kProton));
124 nSigmaKaon = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kKaon));
125 nSigmaElectron = TMath::Abs(pID->NumberOfSigmasITS(track,AliPID::kElectron));
641e1e0c 126 }
cf6522d1 127 bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
128 bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
129 bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
130 bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
641e1e0c 131
cf6522d1 132 bool unidentified = (!isProton && !isKaon && !isElectron);
641e1e0c 133 Float_t dEdx = track->GetTPCsignal();
134 if(cutset==1) dEdx = track->GetITSsignal();
135
cf6522d1 136 FillHisto2D(Form("dEdxAll%s",cutName->Data()),track->P(),dEdx,1.0);
641e1e0c 137
138 UInt_t label = (UInt_t)TMath::Abs(track->GetLabel());
139 TParticle *simPart = stack->Particle(label);
140 if(!simPart) {
141 Printf("no MC particle\n");
142 continue;
143 }
144 else{//analysis
145 if(stack->IsPhysicalPrimary(label)){
0e866ddc 146 if (TMath::Abs(simPart->Eta()) < fCuts->GetCommonEtaCut()){
641e1e0c 147 Int_t pdgCode = simPart->GetPDG(0)->PdgCode();
148 Int_t mypid = 0;
7d2d1773 149 if(pdgCode==AliAnalysisHadEt::fgPiPlusCode) mypid = 1;
4b40b2b1 150 if(pdgCode==fgProtonCode) mypid = 2;
151 if(pdgCode==fgKPlusCode) mypid = 3;
152 if(pdgCode==fgEPlusCode) mypid = 4;
153 if(pdgCode==fgPiMinusCode) mypid = 1;
154 if(pdgCode==fgAntiProtonCode) mypid = 2;
155 if(pdgCode==fgKMinusCode) mypid = 3;
156 if(pdgCode==fgEMinusCode) mypid = 4;
641e1e0c 157 bool filled = false;
158 //============Charged hadrons===================================
159 //identified...
cf6522d1 160 if(isPion){
4b40b2b1 161 if(pdgCode!=fgPiPlusCode && pdgCode!=fgPiMinusCode){
cf6522d1 162 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),1,mypid,1);
641e1e0c 163 //if(mypid==0)cerr<<"I was misidentified! I'm not a pion! I am a "<<simPart->GetName()<<endl;
164 }
165 float myEt = Et(simPart);
cf6522d1 166 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
167 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
168 FillHisto2D(Form("dEdxPion%s",cutName->Data()),track->P(),dEdx,1.0);
641e1e0c 169 }
cf6522d1 170 if(isProton){
4b40b2b1 171 if(pdgCode!=fgProtonCode && pdgCode!=fgAntiProtonCode){
cf6522d1 172 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),2,mypid,1);
641e1e0c 173 }
174 float myEt = Et(simPart);
cf6522d1 175 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
176 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),track->Pt(),track->Eta(),myEt);}
177 FillHisto2D(Form("dEdxProton%s",cutName->Data()),track->P(),dEdx,1.0);
641e1e0c 178 }
cf6522d1 179 if(isKaon){
4b40b2b1 180 if(pdgCode!=fgKMinusCode && pdgCode!=fgKPlusCode){
cf6522d1 181 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),3,mypid,1);
641e1e0c 182 }
183 float myEt = Et(simPart);
cf6522d1 184 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
185 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
186 FillHisto2D(Form("dEdxKaon%s",cutName->Data()),track->P(),dEdx,1.0);
641e1e0c 187 }
cf6522d1 188 if(isElectron){
4b40b2b1 189 if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
cf6522d1 190 FillHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),4,mypid,1);
641e1e0c 191 }
192 float myEt = Et(simPart);
cf6522d1 193 if(track->Charge()>0){ FillHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
194 else{ FillHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),track->Pt(),track->Eta(),myEt);}
195 FillHisto2D(Form("dEdxElectron%s",cutName->Data()),track->P(),dEdx,1.0);
641e1e0c 196 }
cf6522d1 197 if(unidentified){
4b40b2b1 198 if(pdgCode!=fgEMinusCode && pdgCode!=fgEPlusCode){
199 float myEtPi = Et(simPart,fgPionMass);
641e1e0c 200 float myEt = Et(simPart);
cf6522d1 201 FillHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
202 FillHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),myEt);
203 FillHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),track->Pt(),track->Eta(),1.0);
641e1e0c 204 }
cf6522d1 205 FillHisto2D(Form("dEdxUnidentified%s",cutName->Data()),track->P(),dEdx,1.0);
cf6522d1 206 FillHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),mypid,1);
641e1e0c 207 }
208 //...simulated
7d2d1773 209 if(pdgCode == fgPiPlusCode){
641e1e0c 210 float myEt = Et(simPart);
cf6522d1 211 FillHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
212 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
213 FillHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
214 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
215 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
641e1e0c 216 filled = true;
217 }
4b40b2b1 218 if(pdgCode == fgPiMinusCode){
641e1e0c 219 float myEt = Et(simPart);
cf6522d1 220 FillHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
221 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
222 FillHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
223 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
224 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
641e1e0c 225 filled = true;
226 }
4b40b2b1 227 if(pdgCode == fgKPlusCode){
641e1e0c 228 float myEt = Et(simPart);
4b40b2b1 229 float myEtPi = Et(simPart,fgPionMass);
cf6522d1 230 FillHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
231 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
232 FillHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
233 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
234 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
235 FillHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
641e1e0c 236 filled = true;
237 }
4b40b2b1 238 if(pdgCode == fgKMinusCode){
641e1e0c 239 float myEt = Et(simPart);
4b40b2b1 240 float myEtPi = Et(simPart,fgPionMass);
cf6522d1 241 FillHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
242 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
243 FillHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
244 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
245 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
246 FillHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
641e1e0c 247 filled = true;
248 }
4b40b2b1 249 if(pdgCode == fgProtonCode){
641e1e0c 250 float myEt = Et(simPart);
4b40b2b1 251 float myEtPi = Et(simPart,fgPionMass);
cf6522d1 252 FillHisto2D(Form("EtReconstructed%sProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
253 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
254 FillHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
255 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
256 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
257 FillHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
641e1e0c 258 filled = true;
259 }
4b40b2b1 260 if(pdgCode == fgAntiProtonCode){
641e1e0c 261 float myEt = Et(simPart);
4b40b2b1 262 float myEtPi = Et(simPart,fgPionMass);
cf6522d1 263 FillHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
264 FillHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
265 FillHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
266 FillHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
267 FillHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
268 FillHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),simPart->Pt(),simPart->Eta(),myEtPi);
641e1e0c 269 filled = true;
270 }
4b40b2b1 271 if(pdgCode == fgEPlusCode){
641e1e0c 272 float myEt = Et(simPart);
cf6522d1 273 FillHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
274 if(!isElectron || unidentified){
4b40b2b1 275 float myEtPi = Et(simPart,fgPionMass);
cf6522d1 276 FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
641e1e0c 277 }
278 filled = true;
279 }
4b40b2b1 280 if(pdgCode == fgEMinusCode){
cf6522d1 281 if(!isElectron || unidentified){
4b40b2b1 282 float myEtPi = Et(simPart,fgPionMass);
cf6522d1 283 FillHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),track->Pt(),track->Eta(),myEtPi);
641e1e0c 284 }
285 float myEt = Et(simPart);
cf6522d1 286 FillHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),simPart->Pt(),simPart->Eta(),myEt);
641e1e0c 287 filled = true;
288 }
641e1e0c 289 }
290
291 }
292 else{//not a primary - we're after V0 daughters!
0e866ddc 293 if (TMath::Abs(simPart->Eta()) < fCuts->GetCommonEtaCut()){
294 TParticle *mom = stack->Particle(simPart->GetFirstMother());
295 if(mom){
296 TParticlePDG *pc = mom->GetPDG(0);
297 if(pc){
298 Int_t pdgCode = mom->GetPDG(0)->PdgCode();
299 if(pdgCode == fgLambdaCode){
300 float myEt = Et(simPart);
301 FillHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
0f97be4c 302 Float_t weight = LambdaWeight(mom->Pt());
303 FillHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
0e866ddc 304 }
305 if(pdgCode == fgAntiLambdaCode){
306 float myEt = Et(simPart);
307 FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
0f97be4c 308 Float_t weight = AntiLambdaWeight(mom->Pt());
309 FillHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
0e866ddc 310 }
311 if(pdgCode == fgK0SCode){
312 float myEt = Et(simPart);
313 FillHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
0f97be4c 314 Float_t weight = K0Weight(mom->Pt());
315 FillHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),track->Pt(),track->Eta(),myEt*weight);
0e866ddc 316 }
317 if(pdgCode == fgXiCode){
318 float myEt = Et(simPart);
319 FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
320 }
321 if(pdgCode == fgAntiXiCode){
322 float myEt = Et(simPart);
323 FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
324 }
325 if(pdgCode == fgOmegaCode){
326 float myEt = Et(simPart);
327 FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
328 }
329 if(pdgCode == fgXiCode){
330 float myEt = Et(simPart);
331 FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
332 }
641e1e0c 333
0e866ddc 334 if(mom->GetFirstMother()>0){
335 TParticle *grandma = stack->Particle(mom->GetFirstMother());
336 if(grandma){
337 Int_t pdgCodeMom = mom->GetPDG(0)->PdgCode();
338 if(pdgCodeMom==fgPiPlusCode || pdgCodeMom==fgPiMinusCode || pdgCodeMom==fgProtonCode ||pdgCodeMom==fgAntiProtonCode || pdgCodeMom==fgKPlusCode || pdgCode==fgKMinusCode){
0e866ddc 339 Int_t pdgCodeGrandma = grandma->GetPDG(0)->PdgCode();
641e1e0c 340
0e866ddc 341 if(pdgCodeGrandma == fgXiCode){
342 float myEt = Et(simPart);
343 FillHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
344 }
345 if(pdgCodeGrandma == fgAntiXiCode){
346 float myEt = Et(simPart);
347 FillHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
348 }
349 if(pdgCodeGrandma == fgOmegaCode){
350 float myEt = Et(simPart);
351 FillHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
352 }
353 if(pdgCodeGrandma == fgXiCode){
354 float myEt = Et(simPart);
355 FillHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),track->Pt(),track->Eta(),myEt);
356 }
641e1e0c 357
0e866ddc 358 }
641e1e0c 359 }
360 }
361 }
362 }
363 }
364 }
365 }
366
367 }
368 }
369 delete list;
370 }
464aa50c 371 delete pID;
372 delete strTPC;
373 delete strITS;
374 delete strTPCITS;
641e1e0c 375 //delete AliESDpid;
376 return 1;
377}
378Int_t AliAnalysisHadEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
cf6522d1 379{ // analyse MC event
641e1e0c 380 ResetEventValues();
381
382 // Get us an mc event
383 AliMCEvent *mcEvent = dynamic_cast<AliMCEvent*>(ev);
384
385 // Let's play with the stack!
386 AliStack *stack = mcEvent->Stack();
387
388 Int_t nPrim = stack->GetNtrack();
389
0e866ddc 390 Float_t fSimPiKPEtPtSmeared = 0;
391 Float_t fSimPiKPEtEfficiencySmeared = 0;
392 Float_t fSimPiKPEtPtCutSmearedTPC = 0;
393 Float_t fSimPiKPEtPtCutSmearedITS = 0;
394 Float_t fSimPiKPEtPIDSmeared = 0;
395 Float_t fSimPiKPEtPIDSmearedNoID = 0;
641e1e0c 396 //=================Tracks which may or may not have been reconstructed=================
397
398 for (Int_t iPart = 0; iPart < nPrim; iPart++)
399 {
400
401 TParticle *part = stack->Particle(iPart);
402
403 if (!part)
404 {
405 Printf("ERROR: Could not get particle %d", iPart);
406 continue;
407 }
408
964c8159 409 //TParticlePDG *pc = part->GetPDG(0);
641e1e0c 410
411 // Check if it is a primary particle
f427cbed 412 if (stack->IsPhysicalPrimary(iPart)){//primaries
641e1e0c 413
4998becf 414 if (TMath::Abs(part->Eta()) < fCuts->GetCommonEtaCut()) {
641e1e0c 415
416 Int_t pdgCode = part->GetPDG(0)->PdgCode();
641e1e0c 417 bool filled = false;
0e866ddc 418 //Investigating smearing...
419 //Numbers are realistic correction factors from previous studies
7d2d1773 420 if(fInvestigateSmearing){
421 if(pdgCode==fgPiPlusCode ||pdgCode==fgPiMinusCode ||pdgCode==fgKPlusCode ||pdgCode==fgKMinusCode ||pdgCode==fgProtonCode ||pdgCode==fgAntiProtonCode){
422 //To investigate Smearing...
423 Float_t myet = Et(part);
424 fSimPiKPEt += myet;
425 Float_t theta = part->Theta();
426 Short_t charge = 1;
427 Float_t momentum = part->P();
428 //pt smearing
429 Float_t pSmeared = momentum * fPtSmearer->Gaus(1,0.005);//Gaussian centered around 1
430 fSimPiKPEtPtSmeared += Et(pSmeared,theta,pdgCode,charge);
431 //Efficiency smearing
432 float efficiency = 2.26545*TMath::Exp(-TMath::Power(9.99977e-01/part->Pt(),7.85488e-02));//simple rough efficiency from fitting curve
433 if(fPtSmearer->Binomial(1,efficiency) ==1){
434 fSimPiKPEtEfficiencySmeared += (1.0/efficiency)*myet;
435 }
436 //pT cut smeared
437 if(part->Pt()>0.10){fSimPiKPEtPtCutSmearedITS +=1.00645645*myet;}
438 if(part->Pt()>0.15){fSimPiKPEtPtCutSmearedTPC +=1.02000723*myet;}
439 //PID smearing
440 fSimPiKPEtPIDSmearedNoID += 1.02679314*Et(momentum,theta,fgPiPlusCode,charge);
441 if(part->P()<1.0){//then the particle would have been ID'd
442 fSimPiKPEtPIDSmeared += 1.0085942*myet;
443 }
444 else{//Then it would have been assumed to be a pion
445 fSimPiKPEtPIDSmeared += 1.0085942*Et(momentum,theta,fgPiPlusCode,charge);
446 }
0e866ddc 447 }
448 }
449
641e1e0c 450 //============Charged hadrons===================================
4b40b2b1 451 if(pdgCode == fgPiPlusCode){
641e1e0c 452 float myEt = Et(part);
0e866ddc 453
d6214a64 454 fSimHadEt += myEt;
455 fSimTotEt += myEt;
0e866ddc 456
641e1e0c 457 FillHisto2D("EtSimulatedPiPlus",part->Pt(),part->Eta(),myEt);
458 FillHisto2D("EtNSimulatedPiPlus",part->Pt(),part->Eta(),1.0);
459 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
460 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
461 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
462 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
0e866ddc 463 Short_t charge = 1;
464 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
465 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
466 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
467 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
468 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
469 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
641e1e0c 470 filled = true;
471 }
4b40b2b1 472 if(pdgCode == fgPiMinusCode){
641e1e0c 473 float myEt = Et(part);
d6214a64 474 fSimHadEt += myEt;
475 fSimTotEt += myEt;
641e1e0c 476 FillHisto2D("EtSimulatedPiMinus",part->Pt(),part->Eta(),myEt);
477 FillHisto2D("EtNSimulatedPiMinus",part->Pt(),part->Eta(),1.0);
478 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
479 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
480 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEt);
481 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
0e866ddc 482 Short_t charge = -1;
483 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
484 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
485 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
486 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
487 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
488 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
641e1e0c 489 filled = true;
490 }
4b40b2b1 491 if(pdgCode == fgKPlusCode){
641e1e0c 492 float myEt = Et(part);
4b40b2b1 493 float myEtPi = Et(part,fgPionMass);
d6214a64 494 fSimHadEt += myEt;
495 fSimTotEt += myEt;
641e1e0c 496 FillHisto2D("EtSimulatedKPlus",part->Pt(),part->Eta(),myEt);
497 FillHisto2D("EtNSimulatedKPlus",part->Pt(),part->Eta(),1.0);
498 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
499 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
500 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
501 FillHisto2D("EtSimulatedKPlusAssumingPion",part->Pt(),part->Eta(),myEtPi);
502 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
0e866ddc 503 Short_t charge = 1;
504 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
505 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
506 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
507 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
508 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
509 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
641e1e0c 510 filled = true;
511 }
4b40b2b1 512 if(pdgCode == fgKMinusCode){
641e1e0c 513 float myEt = Et(part);
4b40b2b1 514 float myEtPi = Et(part,fgPionMass);
d6214a64 515 fSimHadEt += myEt;
516 fSimTotEt += myEt;
641e1e0c 517 FillHisto2D("EtSimulatedKMinus",part->Pt(),part->Eta(),myEt);
518 FillHisto2D("EtNSimulatedKMinus",part->Pt(),part->Eta(),1.0);
519 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
520 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
521 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
522 FillHisto2D("EtSimulatedKMinusAssumingPion",part->Pt(),part->Eta(),myEtPi);
523 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
0e866ddc 524 Short_t charge = -1;
525 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
526 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
527 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
528 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
529 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
530 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
641e1e0c 531 filled = true;
532 }
4b40b2b1 533 if(pdgCode == fgProtonCode){
641e1e0c 534 float myEt = Et(part);
4b40b2b1 535 float myEtPi = Et(part,fgPionMass);
d6214a64 536 fSimHadEt += myEt;
537 fSimTotEt += myEt;
641e1e0c 538 FillHisto2D("EtSimulatedProton",part->Pt(),part->Eta(),myEt);
539 FillHisto2D("EtNSimulatedProton",part->Pt(),part->Eta(),1.0);
540 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
541 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
542 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
543 FillHisto2D("EtSimulatedProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
544 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
0e866ddc 545 Short_t charge = 1;
546 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
547 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
548 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
549 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
550 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
551 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
641e1e0c 552 filled = true;
553 }
4b40b2b1 554 if(pdgCode == fgAntiProtonCode){
641e1e0c 555 float myEt = Et(part);
4b40b2b1 556 float myEtPi = Et(part,fgPionMass);
d6214a64 557 fSimHadEt += myEt;
558 fSimTotEt += myEt;
641e1e0c 559 FillHisto2D("EtSimulatedAntiProton",part->Pt(),part->Eta(),myEt);
560 FillHisto2D("EtNSimulatedAntiProton",part->Pt(),part->Eta(),1.0);
561 FillHisto2D("EtSimulatedChargedHadron",part->Pt(),part->Eta(),myEt);
562 FillHisto2D("EtNSimulatedChargedHadron",part->Pt(),part->Eta(),1.0);
563 FillHisto2D("EtSimulatedChargedHadronAssumingPion",part->Pt(),part->Eta(),myEtPi);
564 FillHisto2D("EtSimulatedAntiProtonAssumingPion",part->Pt(),part->Eta(),myEtPi);
565 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
0e866ddc 566 Short_t charge = -1;
567 Float_t myEtLow = Et(0.0,part->Theta(),pdgCode,charge);
568 Float_t myEtITS = Et(0.10/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
569 Float_t myEtTPC = Et(0.15/TMath::Sin(part->Theta()),part->Theta(),pdgCode,charge);
570 FillHisto2D("EtSimulatedChargedHadronAssumingNoPt",part->Pt(),part->Eta(),myEtLow);
571 FillHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut",part->Pt(),part->Eta(),myEtTPC);
572 FillHisto2D("EtSimulatedChargedHadronAssumingPtITSCut",part->Pt(),part->Eta(),myEtITS);
641e1e0c 573 filled = true;
574 }
575 //============Other hadrons===================================
576
4b40b2b1 577 if(pdgCode == fgNeutronCode){
641e1e0c 578 float myEt = Et(part);
d6214a64 579 fSimHadEt += myEt;
580 fSimTotEt += myEt;
641e1e0c 581 FillHisto2D("EtSimulatedNeutron",part->Pt(),part->Eta(),myEt);
582 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
583 filled = true;
584 }
4b40b2b1 585 if(pdgCode == fgAntiNeutronCode){
641e1e0c 586 float myEt = Et(part);
d6214a64 587 fSimHadEt += myEt;
588 fSimTotEt += myEt;
641e1e0c 589 FillHisto2D("EtSimulatedAntiNeutron",part->Pt(),part->Eta(),myEt);
590 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
591 filled = true;
592 }
4b40b2b1 593 if(pdgCode == fgLambdaCode){
641e1e0c 594 float myEt = Et(part);
d6214a64 595 fSimHadEt += myEt;
596 fSimTotEt += myEt;
641e1e0c 597 //cout<<"I am a simulated lambda! pt "<<part->Pt()<<" eta "<<part->Eta()<<endl;
598 FillHisto2D("EtSimulatedLambda",part->Pt(),part->Eta(),myEt);
599 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
964c8159 600 Float_t weight = LambdaWeight(part->Pt());
601 FillHisto2D("EtSimulatedLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
641e1e0c 602 Int_t ndaughters = part->GetNDaughters();
603 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
604 Int_t daughterindex = part->GetDaughter(idaughter);
605 if(daughterindex<0 || daughterindex>1e5) continue;
606 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
607 if(daughter){
608 if(daughter->GetPDG(0)){
609 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 610 if(daughtercode==fgPiMinusCode || daughtercode==fgProtonCode){
641e1e0c 611 myEt = Et(daughter);
612 FillHisto2D("EtSimulatedLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
964c8159 613 FillHisto2D("EtSimulatedLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
641e1e0c 614 //cout<<"Lambda daughter is a "<<daughter->GetName()<<endl;
615 }
616 }
617 else{
618 //cout<<"Lambda daughter is a "<<daughter->GetName()<<endl;
619 }
620 }
621 }
622 filled = true;
623 }
4b40b2b1 624 if(pdgCode == fgAntiLambdaCode){
641e1e0c 625 float myEt = Et(part);
d6214a64 626 fSimHadEt += myEt;
627 fSimTotEt += myEt;
641e1e0c 628 FillHisto2D("EtSimulatedAntiLambda",part->Pt(),part->Eta(),myEt);
629 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
964c8159 630 Float_t weight = AntiLambdaWeight(part->Pt());
631 FillHisto2D("EtSimulatedAntiLambdaReweighted",part->Pt(),part->Eta(),myEt*weight);
641e1e0c 632 Int_t ndaughters = part->GetNDaughters();
633 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
634 Int_t daughterindex = part->GetDaughter(idaughter);
635 if(daughterindex<0 || daughterindex>1e5) continue;
636 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
637 if(daughter){
638 if(daughter->GetPDG(0)){
639 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 640 if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode){
641e1e0c 641 myEt = Et(daughter);
642 FillHisto2D("EtSimulatedAntiLambdaDaughters",daughter->Pt(),daughter->Eta(),myEt);
964c8159 643 FillHisto2D("EtSimulatedAntiLambdaDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
641e1e0c 644 //cout<<"AntiLambda daughter is a "<<daughter->GetName()<<endl;
645 }
646 }
647 else{
648 //cout<<"AntiLambda daughter is a "<<daughter->GetName()<<endl;
649 }
650 }
651 }
652 filled = true;
653 }
4b40b2b1 654 if(pdgCode == fgK0SCode){
641e1e0c 655 float myEt = Et(part);
d6214a64 656 fSimHadEt += myEt;
657 fSimTotEt += myEt;
641e1e0c 658 FillHisto2D("EtSimulatedK0S",part->Pt(),part->Eta(),myEt);
659 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
964c8159 660 Float_t weight = K0Weight(part->Pt());
661 FillHisto2D("EtSimulatedK0SReweighted",part->Pt(),part->Eta(),myEt*weight);
641e1e0c 662 Int_t ndaughters = part->GetNDaughters();
663 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
664 Int_t daughterindex = part->GetDaughter(idaughter);
665 if(daughterindex<0 || daughterindex>1e5) continue;
666 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
667 if(daughter){
668 if(daughter->GetPDG(0)){
669
670 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 671 if(daughtercode==fgPiMinusCode || daughtercode==fgPiPlusCode){
641e1e0c 672 myEt = Et(daughter);
673 FillHisto2D("EtSimulatedK0SDaughters",daughter->Pt(),daughter->Eta(),myEt);
964c8159 674 FillHisto2D("EtSimulatedK0SDaughtersReweighted",daughter->Pt(),daughter->Eta(),myEt*weight);
641e1e0c 675 //cout<<"K0S daughter is a "<<daughter->GetName()<<endl;
676 }
677 }
678 else{
679 //cout<<"K0S daughter is a "<<daughter->GetName()<<endl;
680 }
681 }
682 }
683 filled = true;
684 }
4b40b2b1 685 if(pdgCode == fgK0LCode){
641e1e0c 686 float myEt = Et(part);
d6214a64 687 fSimHadEt += myEt;
688 fSimTotEt += myEt;
641e1e0c 689 FillHisto2D("EtSimulatedK0L",part->Pt(),part->Eta(),myEt);
690 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
964c8159 691 Float_t weight = K0Weight(part->Pt());
692 FillHisto2D("EtSimulatedK0LReweighted",part->Pt(),part->Eta(),myEt*weight);
641e1e0c 693 filled = true;
694 }
4b40b2b1 695 if(pdgCode == fgOmegaCode){
641e1e0c 696 float myEt = Et(part);
d6214a64 697 fSimHadEt += myEt;
698 fSimTotEt += myEt;
641e1e0c 699 FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
700 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
701 Int_t ndaughters = part->GetNDaughters();
702 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
703 Int_t daughterindex = part->GetDaughter(idaughter);
704 if(daughterindex<0 || daughterindex>1e5) continue;
705 TParticle *daughter = stack->Particle(daughterindex);
706 if(daughter){
707 if(daughter->GetPDG(0)){
708
709 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 710 if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgKMinusCode){
641e1e0c 711 myEt = Et(daughter);
712 FillHisto2D("EtSimulatedOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
713 //cout<<"Omega daughter is a "<<daughter->GetName()<<endl;
714 }
715 }
716 else{
717 //cout<<"Omega daughter is a "<<daughter->GetName()<<endl;
718 }
719 }
720 }
721 filled = true;
722 }
4b40b2b1 723 if(pdgCode == fgAntiOmegaCode){
641e1e0c 724 float myEt = Et(part);
d6214a64 725 fSimHadEt += myEt;
726 fSimTotEt += myEt;
641e1e0c 727 FillHisto2D("EtSimulatedOmega",part->Pt(),part->Eta(),myEt);
728 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
729 Int_t ndaughters = part->GetNDaughters();
730 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
731 Int_t daughterindex = part->GetDaughter(idaughter);
732 if(daughterindex<0 || daughterindex>1e5) continue;
733 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
734 if(daughter){
735 if(daughter->GetPDG(0)){
736 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 737 if(daughtercode==fgPiMinusCode || daughtercode==fgAntiProtonCode || daughtercode==fgKPlusCode){
641e1e0c 738 myEt = Et(daughter);
739 FillHisto2D("EtSimulatedAntiOmegaDaughters",daughter->Pt(),daughter->Eta(),myEt);
740 //cout<<"AntiOmega daughter is a "<<daughter->GetName()<<endl;
741 }
742 }
743 else{
744 //cout<<"AntiOmega daughter is a "<<daughter->GetName()<<endl;
745 }
746 }
747 }
748 filled = true;
749 }
750 //There are two codes for Sigmas
4b40b2b1 751 if(pdgCode == fgSigmaCode || pdgCode == -3222){
641e1e0c 752 float myEt = Et(part);
d6214a64 753 fSimHadEt += myEt;
754 fSimTotEt += myEt;
641e1e0c 755 FillHisto2D("EtSimulatedSigma",part->Pt(),part->Eta(),myEt);
756 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
757 filled = true;
758 }
4b40b2b1 759 if(pdgCode == fgAntiSigmaCode || pdgCode == 3222){
641e1e0c 760 float myEt = Et(part);
d6214a64 761 fSimHadEt += myEt;
762 fSimTotEt += myEt;
641e1e0c 763 FillHisto2D("EtSimulatedAntiSigma",part->Pt(),part->Eta(),myEt);
764 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
765 filled = true;
766 }
4b40b2b1 767 if(pdgCode == fgXiCode){
641e1e0c 768 float myEt = Et(part);
d6214a64 769 fSimHadEt += myEt;
770 fSimTotEt += myEt;
641e1e0c 771 FillHisto2D("EtSimulatedXi",part->Pt(),part->Eta(),myEt);
772 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
773 Int_t ndaughters = part->GetNDaughters();
774 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
775 Int_t daughterindex = part->GetDaughter(idaughter);
776 if(daughterindex<0 || daughterindex>1e5 || daughterindex>1e5) continue;
777 //cerr<<"Daughter index "<<daughterindex<<" npart "<<nPrim<<endl;
778 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
779 if(daughter){
780 if(daughter->GetPDG(0)){
781
782 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 783 if(daughtercode==fgPiPlusCode || daughtercode==fgProtonCode || daughtercode==fgPiMinusCode){
641e1e0c 784 myEt = Et(daughter);
785 FillHisto2D("EtSimulatedXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
786 //cout<<"Xi daughter is a "<<daughter->GetName()<<endl;
787 }
788 }
789 else{
790 //cout<<"Xi daughter is a "<<daughter->GetName()<<endl;
791 }
792 }
793 }
794 filled = true;
795 }
4b40b2b1 796 if(pdgCode == fgAntiXiCode){
641e1e0c 797 float myEt = Et(part);
d6214a64 798 fSimHadEt += myEt;
799 fSimTotEt += myEt;
641e1e0c 800 FillHisto2D("EtSimulatedAntiXi",part->Pt(),part->Eta(),myEt);
801 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
802 Int_t ndaughters = part->GetNDaughters();
803 for(Int_t idaughter = 0;idaughter<ndaughters;idaughter++){
804 Int_t daughterindex = part->GetDaughter(idaughter);
805 if(daughterindex<0 || daughterindex>1e5) continue;
806 TParticle *daughter = stack->ParticleFromTreeK(daughterindex);
807 if(daughter){
808 if(daughter->GetPDG(0)){
809 Int_t daughtercode = daughter->GetPDG(0)->PdgCode();
4b40b2b1 810 if(daughtercode==fgPiPlusCode || daughtercode==fgAntiProtonCode || daughtercode==fgPiMinusCode){
641e1e0c 811 myEt = Et(daughter);
812 FillHisto2D("EtSimulatedAntiXiDaughters",daughter->Pt(),daughter->Eta(),myEt);
813 //cout<<"AntiXi daughter is a "<<daughter->GetName()<<endl;
814 }
815 }
816 else{
817 //cout<<"AntiXi daughter is a "<<daughter->GetName()<<endl;
818 }
819 }
820 }
821 filled = true;
822 }
4b40b2b1 823 if(pdgCode == fgXi0Code){
641e1e0c 824 float myEt = Et(part);
d6214a64 825 fSimHadEt += myEt;
826 fSimTotEt += myEt;
641e1e0c 827 FillHisto2D("EtSimulatedXi0",part->Pt(),part->Eta(),myEt);
828 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
829 filled = true;
830 }
4b40b2b1 831 if(pdgCode == fgAntiXi0Code){
641e1e0c 832 float myEt = Et(part);
d6214a64 833 fSimHadEt += myEt;
834 fSimTotEt += myEt;
641e1e0c 835 FillHisto2D("EtSimulatedAntiXi0",part->Pt(),part->Eta(),myEt);
836 FillHisto2D("EtSimulatedAllHadron",part->Pt(),part->Eta(),myEt);
837 filled = true;
838 }
839 //============electrons===================================
840
4b40b2b1 841 if(pdgCode == fgEPlusCode){
641e1e0c 842 float myEt = Et(part);
d6214a64 843 fSimTotEt += myEt;
641e1e0c 844 FillHisto2D("EtSimulatedEPlus",part->Pt(),part->Eta(),myEt);
845 filled = true;
846 }
4b40b2b1 847 if(pdgCode == fgEMinusCode){
641e1e0c 848 float myEt = Et(part);
d6214a64 849 fSimTotEt += myEt;
641e1e0c 850 FillHisto2D("EtSimulatedEMinus",part->Pt(),part->Eta(),myEt);
851 filled = true;
852 }
f427cbed 853 //============neutrals===================================
4b40b2b1 854 if(pdgCode == fgGammaCode){
b64de20c 855 TParticle *mom = stack->Particle(part->GetFirstMother());
856 Int_t pdgCodeMom = mom->GetPDG(0)->PdgCode();
857 //cout<<"I am a gamma and my mom is "<<mom->GetName()<<endl;
4e0c0fe1 858 //We want to separate the gammas by pi0, eta, omega0 but we don't want to double count energy so we get the et from the gamma daughter
4b40b2b1 859 if(pdgCodeMom == fgEtaCode){
4e0c0fe1 860 float myEt = Et(part);
861 fSimTotEt += myEt;
b64de20c 862 FillHisto2D("EtSimulatedEta",mom->Pt(),mom->Eta(),myEt);
863 filled = true;
864 }
4b40b2b1 865 if(pdgCodeMom == fgPi0Code){
4e0c0fe1 866 float myEt = Et(part);
867 fSimTotEt += myEt;
b64de20c 868 FillHisto2D("EtSimulatedPi0",mom->Pt(),mom->Eta(),myEt);
869 filled = true;
870 }
4b40b2b1 871 if(pdgCodeMom == fgOmega0Code){
4e0c0fe1 872 float myEt = Et(part);
873 fSimTotEt += myEt;
b64de20c 874 FillHisto2D("EtSimulatedOmega0",mom->Pt(),mom->Eta(),myEt);
875 filled = true;
876 }
877 if(!filled){
878 float myEt = Et(part);
4e0c0fe1 879 fSimTotEt += myEt;
b64de20c 880 FillHisto2D("EtSimulatedGamma",part->Pt(),part->Eta(),myEt);
881 filled = true;
882 }
f427cbed 883 }
4b40b2b1 884 if(pdgCode == fgEtaCode){
f427cbed 885 float myEt = Et(part);
d6214a64 886 fSimTotEt += myEt;
f427cbed 887 FillHisto2D("EtSimulatedEta",part->Pt(),part->Eta(),myEt);
888 filled = true;
889 }
4b40b2b1 890 if(pdgCode == fgPi0Code){
f427cbed 891 float myEt = Et(part);
d6214a64 892 fSimTotEt += myEt;
f427cbed 893 FillHisto2D("EtSimulatedPi0",part->Pt(),part->Eta(),myEt);
894 filled = true;
895 }
4b40b2b1 896 if(pdgCode == fgOmega0Code){
b64de20c 897 float myEt = Et(part);
d6214a64 898 fSimTotEt += myEt;
b64de20c 899 FillHisto2D("EtSimulatedOmega0",part->Pt(),part->Eta(),myEt);
900 filled = true;
901 }
641e1e0c 902 if(!filled){
f427cbed 903 //if( strcmp(pc->ParticleClass(),"Baryon")==0 || strcmp(pc->ParticleClass(),"Meson")==0 ){
964c8159 904 //cout<<"Did not find a place for "<<part->GetName()<<" "<<pdgCode<<" which is a "<<pc->ParticleClass()<<endl;
f427cbed 905 //}
641e1e0c 906 }
907 }
908 }
909 }
910
0e866ddc 911 if(fSimTotEt>0.0)FillHisto1D("SimTotEt",fSimTotEt,1.0);
912 if(fSimHadEt>0.0)FillHisto1D("SimHadEt",fSimHadEt,1.0);
913 if(fSimPiKPEt>0.0)FillHisto1D("SimPiKPEt",fSimPiKPEt,1.0);
914
7d2d1773 915 if(fInvestigateSmearing){
916 //Smearing histograms
917 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtSmeared)/fSimPiKPEt,1.0);
918 FillHisto1D("SimPiKPEtPtSmeared",fSimPiKPEtPtSmeared,1.0);
919 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimEfficiencySmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtEfficiencySmeared)/fSimPiKPEt,1.0);
920 FillHisto1D("SimPiKPEtEfficiencySmeared",fSimPiKPEtEfficiencySmeared,1.0);
921 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedTPC",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedTPC)/fSimPiKPEt,1.0);
922 FillHisto1D("SimPiKPEtPtCutSmearedTPC",fSimPiKPEtPtCutSmearedTPC,1.0);
923 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPtCutSmearedITS",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPtCutSmearedITS)/fSimPiKPEt,1.0);
924 FillHisto1D("SimPiKPEtPtCutSmearedITS",fSimPiKPEtPtCutSmearedTPC,1.0);
925 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmeared",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmeared)/fSimPiKPEt,1.0);
926 FillHisto1D("SimPiKPEtPIDSmeared",fSimPiKPEtPIDSmeared,1.0);
927 if(fSimPiKPEt>0.0) FillHisto2D("SimPiKPEtMinusSimPIDSmearedNoID",fSimPiKPEt,(fSimPiKPEt-fSimPiKPEtPIDSmearedNoID)/fSimPiKPEt,1.0);
928 FillHisto1D("SimPiKPEtPIDSmearedNoID",fSimPiKPEtPIDSmearedNoID,1.0);
929 }
641e1e0c 930 return 1;
931
932}
933
934void AliAnalysisHadEtMonteCarlo::Init()
cf6522d1 935{ // Init
641e1e0c 936 AliAnalysisHadEt::Init();
0e866ddc 937 if(!fPtSmearer) fPtSmearer = new TRandom();
641e1e0c 938}
939void AliAnalysisHadEtMonteCarlo::CreateHistograms(){
940 //for simulated Et only (no reconstruction)
941 CreateEtaPtHisto2D(TString("EtSimulatedPiPlus"),TString("Simulated E_{T} from #pi^{+}"));
942 CreateEtaPtHisto2D("EtSimulatedPiMinus","Simulated E_{T} from #pi^{-}");
943 CreateEtaPtHisto2D("EtSimulatedKPlus","Simulated E_{T} from K^{+}");
944 CreateEtaPtHisto2D("EtSimulatedKMinus","Simulated E_{T} from K^{-}");
945 CreateEtaPtHisto2D("EtSimulatedProton","Simulated E_{T} from p");
946 CreateEtaPtHisto2D("EtSimulatedAntiProton","Simulated E_{T} from #bar{p}");
947 CreateEtaPtHisto2D("EtSimulatedChargedHadron","Simulated E_{T} from charged hadrons");
948 CreateEtaPtHisto2D(TString("EtNSimulatedPiPlus"),TString("Number of Simulated #pi^{+}"));
949 CreateEtaPtHisto2D("EtNSimulatedPiMinus","Number of simulated #pi^{-}");
950 CreateEtaPtHisto2D("EtNSimulatedKPlus","Number of simulated K^{+}");
951 CreateEtaPtHisto2D("EtNSimulatedKMinus","Number of simulated K^{-}");
952 CreateEtaPtHisto2D("EtNSimulatedProton","Number of simulated p");
953 CreateEtaPtHisto2D("EtNSimulatedAntiProton","Number of simulated #bar{p}");
954 CreateEtaPtHisto2D("EtNSimulatedChargedHadron","Number of simulated charged hadrons");
0e866ddc 955 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingNoPt","Simulated E_{T} from charged hadrons assuming p_{T}=0");
956 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtTPCCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.15");
957 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPtITSCut","Simulated E_{T} from charged hadrons assuming p_{T}=0.10");
641e1e0c 958
959 CreateEtaPtHisto2D("EtSimulatedChargedHadronAssumingPion","Simulated E_{T} from charged hadrons assuming they are all pions");
960 CreateEtaPtHisto2D("EtSimulatedKPlusAssumingPion","Simulated E_{T} from K^{+} assuming #pi mass");
961 CreateEtaPtHisto2D("EtSimulatedKMinusAssumingPion","Simulated E_{T} from K^{-} assuming #pi mass");
962 CreateEtaPtHisto2D("EtSimulatedProtonAssumingPion","Simulated E_{T} from p assuming #pi mass");
963 CreateEtaPtHisto2D("EtSimulatedAntiProtonAssumingPion","Simulated E_{T} from #bar{p} assuming #pi mass");
964
965 CreateEtaPtHisto2D("EtSimulatedLambda","Simulated E_{T} from #Lambda");
966 CreateEtaPtHisto2D("EtSimulatedAntiLambda","Simulated E_{T} from #bar{#Lambda}");
967 CreateEtaPtHisto2D("EtSimulatedK0S","Simulated E_{T} from K^{0}_{S}");
968 CreateEtaPtHisto2D("EtSimulatedK0L","Simulated E_{T} from K^{0}_{L}");
964c8159 969 CreateEtaPtHisto2D("EtSimulatedLambdaReweighted","Simulated E_{T} from #Lambda");
970 CreateEtaPtHisto2D("EtSimulatedAntiLambdaReweighted","Simulated E_{T} from #bar{#Lambda}");
971 CreateEtaPtHisto2D("EtSimulatedK0SReweighted","Simulated E_{T} from K^{0}_{S}");
972 CreateEtaPtHisto2D("EtSimulatedK0LReweighted","Simulated E_{T} from K^{0}_{L}");
641e1e0c 973 CreateEtaPtHisto2D("EtSimulatedNeutron","Simulated E_{T} from neutrons");
974 CreateEtaPtHisto2D("EtSimulatedAntiNeutron","Simulated E_{T} from #bar{n}");
975 CreateEtaPtHisto2D("EtSimulatedEPlus","Simulated E_{T} from e^{+}");
976 CreateEtaPtHisto2D("EtSimulatedEMinus","Simulated E_{T} from e^{-}");
977 CreateEtaPtHisto2D("EtSimulatedOmega","Simulated E_{T} from #Omega^{-}");
978 CreateEtaPtHisto2D("EtSimulatedAntiOmega","Simulated E_{T} from #Omega^{+}");
979 CreateEtaPtHisto2D("EtSimulatedXi","Simulated E_{T} from #Xi^{-}");
980 CreateEtaPtHisto2D("EtSimulatedAntiXi","Simulated E_{T} from #Xi^{+}");
981 CreateEtaPtHisto2D("EtSimulatedSigma","Simulated E_{T} from #Xi^{-}");
982 CreateEtaPtHisto2D("EtSimulatedAntiSigma","Simulated E_{T} from #Xi^{+}");
983 CreateEtaPtHisto2D("EtSimulatedXi0","Simulated E_{T} from #Xi^{0}");
984 CreateEtaPtHisto2D("EtSimulatedAntiXi0","Simulated E_{T} from #Xi^{0}");
985 CreateEtaPtHisto2D("EtSimulatedAllHadron","Simulated E_{T} from all hadrons");
986
987
988 CreateEtaPtHisto2D("EtSimulatedLambdaDaughters","Simulated E_{T} from #Lambda Daughters");
989 CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughters","Simulated E_{T} from #bar{#Lambda} Daughters");
990 CreateEtaPtHisto2D("EtSimulatedK0SDaughters","Simulated E_{T} from K^{0}_{S} Daughters");
964c8159 991 CreateEtaPtHisto2D("EtSimulatedLambdaDaughtersReweighted","Simulated E_{T} from #Lambda Daughters");
992 CreateEtaPtHisto2D("EtSimulatedAntiLambdaDaughtersReweighted","Simulated E_{T} from #bar{#Lambda} Daughters");
993 CreateEtaPtHisto2D("EtSimulatedK0SDaughtersReweighted","Simulated E_{T} from K^{0}_{S} Daughters");
641e1e0c 994 CreateEtaPtHisto2D("EtSimulatedOmegaDaughters","Simulated E_{T} from #Omega^{-} Daughters");
995 CreateEtaPtHisto2D("EtSimulatedAntiOmegaDaughters","Simulated E_{T} from #Omega^{+} Daughters");
996 CreateEtaPtHisto2D("EtSimulatedXiDaughters","Simulated E_{T} from #Xi^{-} Daughters");
997 CreateEtaPtHisto2D("EtSimulatedAntiXiDaughters","Simulated E_{T} from #Xi^{+} Daughters");
998
f427cbed 999
1000 CreateEtaPtHisto2D("EtSimulatedGamma","Simulated E_{T} from #gamma");
1001 CreateEtaPtHisto2D("EtSimulatedEta","Simulated E_{T} from #eta");
1002 CreateEtaPtHisto2D("EtSimulatedPi0","Simulated E_{T} from #pi^{0}");
b64de20c 1003 CreateEtaPtHisto2D("EtSimulatedOmega0","Simulated E_{T} from #omega");
f427cbed 1004
cf6522d1 1005 TString *strTPC = new TString("TPC");
1006 TString *strITS = new TString("ITS");
1007 TString *strTPCITS = new TString("TPCITS");
7d2d1773 1008 Int_t lastcutset = 1;
1009 if(fRequireITSHits) lastcutset = 2;
1010 for(Int_t i=0;i<=lastcutset;i++){
cf6522d1 1011 TString *cutName;
641e1e0c 1012 Float_t maxPtdEdx = 10;
1013 Float_t mindEdx = 35;
1014 Float_t maxdEdx = 150.0;
1015 switch(i){
1016 case 0:
cf6522d1 1017 cutName = strTPC;
641e1e0c 1018 break;
1019 case 1:
cf6522d1 1020 cutName = strITS;
641e1e0c 1021 maxPtdEdx = 5;
1022 maxdEdx = 500.0;
1023 break;
1024 case 2:
cf6522d1 1025 cutName = strTPCITS;
641e1e0c 1026 break;
1027 default:
1028 cerr<<"Error: cannot make histograms!"<<endl;
1029 return;
1030 }
1031
cf6522d1 1032 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiPlus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{+}");
1033 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedPiMinus",cutName->Data()),"Reconstructed E_{T} from identified #pi^{-}");
1034 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKPlus",cutName->Data()),"Reconstructed E_{T} from identified K^{+}");
1035 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEMinus",cutName->Data()),"Reconstructed E_{T} from identified e^{-}");
1036 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedEPlus",cutName->Data()),"Reconstructed E_{T} from identified e^{+}");
1037 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedKMinus",cutName->Data()),"Reconstructed E_{T} from identified K^{-}");
1038 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedProton",cutName->Data()),"Reconstructed E_{T} from identified p");
1039 CreateEtaPtHisto2D(Form("EtReconstructed%sIdentifiedAntiProton",cutName->Data()),"Reconstructed E_{T} from identified #bar{p}");
1040 CreateEtaPtHisto2D(Form("EtNReconstructed%sUnidentified",cutName->Data()),"Number of Reconstructed unidentified particles");
1041 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentifiedAssumingPion",cutName->Data()),"Reconstructed E_{T} from unidentified particles assuming pion mass");
1042 CreateEtaPtHisto2D(Form("EtReconstructed%sUnidentified",cutName->Data()),"Reconstructed E_{T} from unidentified particles using real mass");
1043 CreateEtaPtHisto2D(Form("EtReconstructed%sMisidentifiedElectrons",cutName->Data()),"Reconstructed E_{T} from misidentified electrons");
1044
1045
1046 CreateEtaPtHisto2D(Form("EtReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
1047 CreateEtaPtHisto2D(Form("EtReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
1048 CreateEtaPtHisto2D(Form("EtReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
1049 CreateEtaPtHisto2D(Form("EtReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
1050 CreateEtaPtHisto2D(Form("EtReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
1051 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1052 CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
1053 CreateEtaPtHisto2D(Form("EtNReconstructed%sPiPlus",cutName->Data()),"Reconstructed E_{T} from #pi^{+}");
1054 CreateEtaPtHisto2D(Form("EtNReconstructed%sPiMinus",cutName->Data()),"Reconstructed E_{T} from #pi^{-}");
1055 CreateEtaPtHisto2D(Form("EtNReconstructed%sKPlus",cutName->Data()),"Reconstructed E_{T} from K^{+}");
1056 CreateEtaPtHisto2D(Form("EtNReconstructed%sKMinus",cutName->Data()),"Reconstructed E_{T} from K^{-}");
1057 CreateEtaPtHisto2D(Form("EtNReconstructed%sProton",cutName->Data()),"Reconstructed E_{T} from p");
1058 CreateEtaPtHisto2D(Form("EtNReconstructed%sAntiProton",cutName->Data()),"Reconstructed E_{T} from #bar{p}");
1059 CreateEtaPtHisto2D(Form("EtNReconstructed%sChargedHadron",cutName->Data()),"Reconstructed E_{T} from charged hadrons");
1060
1061 CreateEtaPtHisto2D(Form("EtReconstructed%sChargedHadronAssumingPion",cutName->Data()),"Reconstructed E_{T} from charged hadrons assuming they are all pions");
1062 CreateEtaPtHisto2D(Form("EtReconstructed%sKPlusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{+} assuming #pi mass");
1063 CreateEtaPtHisto2D(Form("EtReconstructed%sKMinusAssumingPion",cutName->Data()),"Reconstructed E_{T} from K^{-} assuming #pi mass");
1064 CreateEtaPtHisto2D(Form("EtReconstructed%sProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from p assuming #pi mass");
1065 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiProtonAssumingPion",cutName->Data()),"Reconstructed E_{T} from #bar{p} assuming #pi mass");
1066
1067 CreateEtaPtHisto2D(Form("EtReconstructed%sEPlus",cutName->Data()),"Reconstructed E_{T} from e^{+}");
1068 CreateEtaPtHisto2D(Form("EtReconstructed%sEMinus",cutName->Data()),"Reconstructed E_{T} from e^{-}");
1069
1070
1071
1072 CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
1073 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughters",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
1074 CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughters",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
0f97be4c 1075 CreateEtaPtHisto2D(Form("EtReconstructed%sLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #Lambda Daughters");
1076 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiLambdaDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from #bar{#Lambda} Daughters");
1077 CreateEtaPtHisto2D(Form("EtReconstructed%sK0SDaughtersReweighted",cutName->Data()),"Reconstructed E_{T} from K^{0}_{S} Daughters");
cf6522d1 1078 CreateEtaPtHisto2D(Form("EtReconstructed%sOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{-} Daughters");
1079 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiOmegaDaughters",cutName->Data()),"Reconstructed E_{T} from #Omega^{+} Daughters");
1080 CreateEtaPtHisto2D(Form("EtReconstructed%sXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{-} Daughters");
1081 CreateEtaPtHisto2D(Form("EtReconstructed%sAntiXiDaughters",cutName->Data()),"Reconstructed E_{T} from #Xi^{+} Daughters");
1082
1083 CreateIntHisto1D(Form("UnidentifiedPIDs%s",cutName->Data()),"PIDs of unidentified particles", "PID", "Number of particles",9, -4,4);
1084 CreateHisto2D(Form("MisidentifiedPIDs%s",cutName->Data()),"PIDs of misidentified particles", "PID real","PID identified",5, -.5,4.5,5, -.5,4.5);
1085 CreateHisto2D(Form("dEdxAll%s",cutName->Data()),"dE/dx for all particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1086 CreateHisto2D(Form("dEdxPion%s",cutName->Data()),"dE/dx for #pi^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1087 CreateHisto2D(Form("dEdxKaon%s",cutName->Data()),"dE/dx for K^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1088 CreateHisto2D(Form("dEdxProton%s",cutName->Data()),"dE/dx for p(#bar{p})","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1089 CreateHisto2D(Form("dEdxElectron%s",cutName->Data()),"dE/dx for e^{#pm}","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
1090 CreateHisto2D(Form("dEdxUnidentified%s",cutName->Data()),"dE/dx for unidentified particles","momentum (GeV/c)","dE/dx",400,0.0,maxPtdEdx,200,mindEdx,maxdEdx);
641e1e0c 1091 }
464aa50c 1092 delete strTPC;
1093 delete strITS;
1094 delete strTPCITS;
4e0c0fe1 1095
1096 Float_t minEt = 0.0;
1097 Float_t maxEt = 100.0;
4b40b2b1 1098 Int_t nbinsEt = 100;
4e0c0fe1 1099 char histoname[200];
1100 char histotitle[200];
1101 char xtitle[50];
1102 char ytitle[50];
464aa50c 1103 TString *sTPC = new TString("TPC");
1104 TString *sITS = new TString("ITS");
1105 TString *sTPCpt = new TString("0.15");
1106 TString *sITSpt = new TString("0.10");
1107 TString *sPID = new TString("");
1108 TString *sNoPID = new TString("NoPID");
1109 TString *sNoPIDString = new TString(", No PID");
1110 TString *sHadEt = new TString("HadEt");
1111 TString *sTotEt = new TString("TotEt");
1112 TString *sTotEtString = new TString("total E_{T}");
1113 TString *sHadEtString = new TString("hadronic E_{T}");
1114 TString *sFull = new TString("Full");
1115 TString *sEMCAL = new TString("EMCAL");
1116 TString *sPHOS = new TString("PHOS");
4b40b2b1 1117 float etDiff = 1.5;
7d2d1773 1118
1119 for(int tpc = 0;tpc<lastcutset;tpc++){
4b40b2b1 1120 TString *detector;
1121 TString *ptstring;
1122 if(tpc==1) {detector = sTPC; ptstring = sTPCpt;}
1123 else{detector = sITS; ptstring = sITSpt;}
4e0c0fe1 1124 for(int hadet = 0;hadet<2;hadet++){
4b40b2b1 1125 TString *et;
1126 TString *etstring;
1127 if(hadet==1) {et = sHadEt; etstring = sHadEtString;}
1128 else{et = sTotEt; etstring = sTotEtString;}
7d2d1773 1129 for(int type = 0;type<3;type++){
1130 if(type==0 && !fInvestigateFull) continue;
1131 if(type==1 && !fInvestigateEMCal) continue;
1132 if(type==2 && !fInvestigatePHOS) continue;
4b40b2b1 1133 TString *acceptance;
1134 switch(type){
1135 case 0:
1136 acceptance = sFull;
7d2d1773 1137 etDiff = 1.5;
4b40b2b1 1138 break;
1139 case 1:
1140 acceptance = sEMCAL;
7d2d1773 1141 etDiff = 5;
4b40b2b1 1142 break;
1143 case 2:
1144 acceptance = sPHOS;
7d2d1773 1145 etDiff = 5;
4b40b2b1 1146 break;
1147 default:
1148 acceptance = sFull;
1149 }
4e0c0fe1 1150 for(int pid = 0;pid<2;pid++){
4e0c0fe1 1151 TString *partid;
4e0c0fe1 1152 TString *partidstring;
464aa50c 1153 if(pid==1){partid = sPID; partidstring = sPID;}
1154 else{partid = sNoPID; partidstring = sNoPIDString;}
4e0c0fe1 1155 sprintf(histoname,"Sim%sMinusReco%s%sAcceptance%s%s",et->Data(),et->Data(),acceptance->Data(),detector->Data(),partid->Data());
1156 sprintf(histotitle,"(Simulated %s - reconstructed %s)/(Simulated %s) with %s acceptance for p_{T}>%s GeV/c%s",etstring->Data(),etstring->Data(),etstring->Data(),acceptance->Data(),ptstring->Data(),partidstring->Data());
1157 sprintf(ytitle,"(Simulated %s - reconstructed %s)/(Simulated %s)",etstring->Data(),etstring->Data(),etstring->Data());
1158 sprintf(xtitle,"Simulated %s",etstring->Data());
4b40b2b1 1159 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
7d2d1773 1160 if(hadet==0 && type==0 && fInvestigatePiKP){//we only want to do this once... not the most elegant way of coding but hey...
0e866ddc 1161 sprintf(histoname,"SimPiKPMinusRecoPiKP%sAcceptance%s%s",acceptance->Data(),detector->Data(),partid->Data());
1162 sprintf(histotitle,"(Sim PiKP - reco PiKP)/(Sim PiKP) with %s acceptance for p_{T}>%s GeV/c%s",acceptance->Data(),ptstring->Data(),partidstring->Data());
1163 sprintf(ytitle,"(Sim PiKP - reco PiKP)/(Sim PiKP)");
1164 sprintf(xtitle,"Simulated E_{T}^{#pi,K,p}");
1165 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
0e866ddc 1166 }
4e0c0fe1 1167 }
1168 }
1169 }
1170 }
7d2d1773 1171 CreateHisto1D("SimPiKPEt","Simulated #pi,K,p E_{T}","Simulated #pi,K,p E_{T}","Number of events",nbinsEt,minEt,maxEt);
0e866ddc 1172 CreateHisto1D("SimTotEt","Simulated Total E_{T}","Simulated Total E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1173 CreateHisto1D("SimHadEt","Simulated Hadronic E_{T}","Simulated Hadronic E_{T}","Number of events",nbinsEt*4,minEt,maxEt);
1174
1175 etDiff = 0.15;
1176
7d2d1773 1177 if(fInvestigateSmearing){
1178
1179 //======================================================================
1180
1181 sprintf(histoname,"SimPiKPEtMinusSimPtSmeared");
1182 sprintf(histotitle,"Simulated (true-smeared)/true for 0.5 percent momentum smearing");
1183 sprintf(ytitle,"(true-smeared)/true");
1184 sprintf(xtitle,"true p, K, p E_{T}");
1185 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff/10.0,etDiff/10.0);
1186 sprintf(histoname,"SimPiKPEtPtSmeared");
1187 sprintf(histotitle,"Simulated E_{T} for 0.5 percent momentum smearing");
1188 sprintf(ytitle,"Number of events");
1189 sprintf(xtitle,"p, K, p E_{T}");
1190 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1191
1192 //======================================================================
1193
1194 sprintf(histoname,"SimPiKPEtMinusSimEfficiencySmeared");
1195 sprintf(histotitle,"Simulated (true-smeared)/true for efficiency smearing");
1196 sprintf(ytitle,"(true-smeared)/true");
1197 sprintf(xtitle,"true p, K, p E_{T}");
1198 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff*5,etDiff*5);
1199 sprintf(histoname,"SimPiKPEtEfficiencySmeared");
1200 sprintf(histotitle,"Simulated E_{T} for efficiency smearing");
1201 sprintf(ytitle,"Number of events");
1202 sprintf(xtitle,"p, K, p E_{T}");
1203 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1204
1205 //======================================================================
1206
1207 sprintf(histoname,"SimPiKPEtMinusSimPtCutSmearedTPC");
1208 sprintf(histotitle,"Simulated (true-smeared)/true for p_{T}>0.15 GeV/c smearing");
1209 sprintf(ytitle,"(true-smeared)/true");
1210 sprintf(xtitle,"true p, K, p E_{T}");
1211 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1212 sprintf(histoname,"SimPiKPEtPtCutSmearedTPC");
1213 sprintf(histotitle,"Simulated E_{T} for p_{T}>0.15 GeV/c smearing");
1214 sprintf(ytitle,"Number of events");
1215 sprintf(xtitle,"p, K, p E_{T}");
1216 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1217
1218
1219 //======================================================================
1220
1221 sprintf(histoname,"SimPiKPEtMinusSimPtCutSmearedITS");
1222 sprintf(histotitle,"Simulated (true-smeared)/true for p_{T}>0.10 GeV/c smearing");
1223 sprintf(ytitle,"(true-smeared)/true");
1224 sprintf(xtitle,"true p, K, p E_{T}");
1225 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1226 sprintf(histoname,"SimPiKPEtPtCutSmearedITS");
1227 sprintf(histotitle,"Simulated E_{T} for p_{T}>0.10 GeV/c smearing");
1228 sprintf(ytitle,"Number of events");
1229 sprintf(xtitle,"p, K, p E_{T}");
1230 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1231
1232 //======================================================================
1233
1234 sprintf(histoname,"SimPiKPEtMinusSimPIDSmeared");
1235 sprintf(histotitle,"Simulated (true-smeared)/true for PID smearing");
1236 sprintf(ytitle,"(true-smeared)/true");
1237 sprintf(xtitle,"true p, K, p E_{T}");
1238 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1239 sprintf(histoname,"SimPiKPEtPIDSmeared");
1240 sprintf(histotitle,"Simulated E_{T} for PID smearing");
1241 sprintf(ytitle,"Number of events");
1242 sprintf(xtitle,"p, K, p E_{T}");
1243 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1244
1245 //======================================================================
1246
1247 sprintf(histoname,"SimPiKPEtMinusSimPIDSmearedNoID");
1248 sprintf(histotitle,"Simulated (true-smeared)/true for PID smearing No ID");
1249 sprintf(ytitle,"(true-smeared)/true");
1250 sprintf(xtitle,"true p, K, p E_{T}");
1251 CreateHisto2D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt,nbinsEt,-etDiff,etDiff);
1252 sprintf(histoname,"SimPiKPEtPIDSmearedNoID");
1253 sprintf(histotitle,"Simulated E_{T} for PID smearing No ID");
1254 sprintf(ytitle,"Number of events");
1255 sprintf(xtitle,"p, K, p E_{T}");
1256 CreateHisto1D(histoname,histotitle,xtitle,ytitle,nbinsEt,minEt,maxEt);
1257 }
464aa50c 1258 delete sTPC;
1259 delete sITS;
1260 delete sTPCpt;
1261 delete sITSpt;
1262 delete sPID;
1263 delete sNoPID;
1264 delete sNoPIDString;
1265 delete sHadEt;
1266 delete sTotEt;
1267 delete sTotEtString;
1268 delete sHadEtString;
1269 delete sFull;
1270 delete sEMCAL;
1271 delete sPHOS;
641e1e0c 1272 CreateIntHisto1D("NEvents","Number of events","number of events","Number of events",1,0,1);
1273
641e1e0c 1274}
1275