1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies; charged hadrons
4 // - reconstruction and MC output
7 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
8 //University of Tennessee at Knoxville
9 //_________________________________________________________________________
10 //Necessary to read config macros
13 #include <TInterpreter.h>
19 #include "AliESDEvent.h"
20 #include "AliMCEvent.h"
21 #include "AliESDtrackCuts.h"
23 #include "AliAnalysisTaskHadEt.h"
24 #include "AliAnalysisHadEtReconstructed.h"
25 #include "AliAnalysisHadEtMonteCarlo.h"
26 #include "AliPWG0Helper.h"
27 #include "AliTriggerAnalysis.h"
28 #include "AliAnalysisManager.h"
29 #include "AliPIDResponse.h"
30 #include "AliTPCPIDResponse.h"
31 #include "AliInputEventHandler.h"
38 ClassImp(AliAnalysisTaskHadEt)
42 //________________________________________________________________________
43 AliAnalysisTaskHadEt::AliAnalysisTaskHadEt(const char *name, Bool_t isMc, TString recoConfigFile, TString mcConfigFile) :
44 AliAnalysisTaskTransverseEnergy(name, isMc)
54 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
56 AliFatal("Analysis manager needed");
60 AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
62 AliFatal("Input handler needed");
65 inputHandler->SetNeedField();
68 fPIDResponse=inputHandler->GetPIDResponse();
69 if (!fPIDResponse) AliError("PIDResponse object was not created");
70 else{cout<<"PIDResponse was created!"<<endl;}
73 fMCConfigFile = mcConfigFile;
74 fRecoConfigFile = recoConfigFile;
76 if(fMCAnalysis) delete fMCAnalysis;
77 if(fRecAnalysis) delete fRecAnalysis;
79 if (fRecoConfigFile.Length()) {
80 cout<<"Rereading AliAnalysisHadEtReconstructed configuration file "<<fRecoConfigFile<<endl;
81 gROOT->LoadMacro(fRecoConfigFile);
82 fRecAnalysis = (AliAnalysisHadEtReconstructed *) gInterpreter->ProcessLine("ConfigHadEtReconstructed()");
85 if (fMCConfigFile.Length()) {
86 cout<<"Rereading AliAnalysisHadEtMonteCarlo configuration file "<<fMCConfigFile<<endl;
87 gROOT->LoadMacro(fMCConfigFile);
88 fMCAnalysis = (AliAnalysisHadEtMonteCarlo *) gInterpreter->ProcessLine("ConfigHadEtMonteCarlo()");
89 fMCAnalysis->SetHadEtReconstructed(fRecAnalysis);
92 // Define input and output slots here
93 // Input slot #0 works with a TChain
94 DefineInput(0, TChain::Class());
95 // Output slot #1 writes into a TH1 container
97 DefineOutput(1, TList::Class());
99 AliAnalysisTaskHadEt::~AliAnalysisTaskHadEt(){//Destructor
106 //________________________________________________________________________
107 void AliAnalysisTaskHadEt::UserCreateOutputObjects()
115 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
117 AliFatal("Analysis manager needed");
121 AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
123 AliFatal("Input handler needed");
127 //pid response object
128 fPIDResponse=inputHandler->GetPIDResponse();
129 if (!fPIDResponse) AliError("PIDResponse object was not created");
130 else{cout<<"PIDResponse was created!"<<endl;}
133 fOutputList = new TList;
134 fOutputList->SetOwner();
135 fMCAnalysis->SetHistoList(fOutputList);
136 fRecAnalysis->SetHistoList(fOutputList);
137 if(fIsSim) fMCAnalysis->CreateHistograms();
138 fRecAnalysis->CreateHistograms();
141 if(fRecAnalysis->DataSet() != fMCAnalysis->DataSet()){
142 cout<<"Warning: Reconstruction data set and Monte Carlo data set are not the same! Setting data set to "<<fRecAnalysis->DataSet()<<endl;
145 Bool_t selectPrimaries=kTRUE;
146 if(fEsdtrackCutsITSTPC) delete fEsdtrackCutsITSTPC;
147 if(fEsdtrackCutsITS) delete fEsdtrackCutsITS;
148 if(fEsdtrackCutsTPC) delete fEsdtrackCutsTPC;
149 //We do not use these because we are using the 2010 900 GeV data
150 // if(fRecAnalysis->DataSet()==2009){
151 // cout<<"Setting track cuts for the 2009 p+p collisions at 900 GeV"<<endl;
152 // fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selectPrimaries);
153 // fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
154 // fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
155 // fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
156 // //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
157 // fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
158 // fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
160 if(fRecAnalysis->DataSet()==2010 || fRecAnalysis->DataSet()==20111||fRecAnalysis->DataSet()==2009 || fRecAnalysis->DataSet()==2012 || fRecAnalysis->DataSet()==2013){
161 // AliAnalysisTaskSE:: SelectCollisionCandidates(AliVEvent::kINT7 ) ;
162 if(fRecAnalysis->DataSet()==2010)cout<<"Setting track cuts for the 2010 p+p collisions at 7 TeV"<<endl;
164 if(fRecAnalysis->DataSet()==2012)cout<<"Setting track cuts for the 2012 p+p collisions at 8 TeV"<<endl;
166 if(fRecAnalysis->DataSet()==2013)cout<<"Setting track cuts for the 2013 p+Pb collisions at 5 TeV"<<endl;
168 if(fRecAnalysis->DataSet()==2009){cout<<"Setting track cuts for the 2010 p+p collisions at 900 GeV"<<endl;}
169 else{cout<<"Setting track cuts for the 2011 p+p collisions at 2.76 TeV"<<endl;}
173 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
174 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
175 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
176 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
177 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
178 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
179 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
180 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
182 if(fRecAnalysis->DataSet()==20100){
183 cout<<"Setting track cuts for the 2010 Pb+Pb collisions at 2.76 TeV"<<endl;
184 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
185 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
186 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
187 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
188 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
189 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
190 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
191 // fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
192 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
195 fOutputList->Add(fEsdtrackCutsITSTPC);
196 fOutputList->Add(fEsdtrackCutsTPC);
197 fOutputList->Add(fEsdtrackCutsITS);
198 if(fEsdtrackCutsITSTPC && fEsdtrackCutsTPC){
199 fRecAnalysis->SetITSTrackCuts( GetITSTrackCuts());
200 fMCAnalysis->SetITSTrackCuts( GetITSTrackCuts());
201 fRecAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
202 fMCAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
203 fRecAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
204 fMCAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
208 Printf("Error: no track cuts!");
213 PostData(1, fOutputList);
216 //________________________________________________________________________
217 void AliAnalysisTaskHadEt::UserExec(Option_t *)
219 fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
221 Printf("ERROR: Could not retrieve event");
224 //cout<<"AliAnalysisTaskHadEt 165"<<endl;
226 //Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber()); // Check if the physics selection is valid for this run
228 //AliCentrality *cent = GetCentralityObject();
230 //if(res == 0 && cent){
232 AliTriggerAnalysis *fTriggerAnalysis = new AliTriggerAnalysis();
234 kIsOfflineV0AND = fTriggerAnalysis->IsOfflineTriggerFired(fESDEvent, AliTriggerAnalysis::kV0AND);
235 kIsOfflineMB = fTriggerAnalysis->IsOfflineTriggerFired(fESDEvent, AliTriggerAnalysis::kMB1);
236 fRecAnalysis->SetIsOfflineV0AND(kIsOfflineV0AND);
237 fMCAnalysis->SetIsOfflineV0AND(kIsOfflineV0AND);
238 fMCAnalysis->SetIsOfflineMB(kIsOfflineMB);
240 Int_t eventtype = AliPWG0Helper::kInvalidProcess;
241 if(fIsSim && fRecAnalysis->DataSet()!=20100) eventtype = (Int_t) AliPWG0Helper::GetEventProcessType(MCEvent()->Header());
242 //only do the analysis if it meets the offline trigger cut
243 if(kIsOfflineV0AND) fRecAnalysis->AnalyseEvent(fESDEvent,eventtype);
244 //else{cout<<"Not analyzing this event! Does not meet trigger condition!"<<endl;}
246 AliMCEvent* mcEvent = MCEvent();
248 AliFatal("ERROR: MC Event does not exist");
252 ((AliAnalysisHadEtMonteCarlo*)fMCAnalysis)->AnalyseEvent((AliVEvent*)mcEvent,(AliVEvent*)fESDEvent);
254 if( fRecAnalysis->DataSet()==20100 || AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kND || fRecAnalysis->DataSet()==2013){//either non-diffractive or Pb+Pb or p+Pb
255 if(fMCAnalysis->Full()){
256 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPC() );
257 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceITS( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITS() );
258 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPCNoPID() );
259 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITSNoPID() );
260 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPC() );
261 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceITS( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITS() );
262 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPCNoPID() );
263 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITSNoPID() );
265 fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPC() );
266 fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceITS( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITS() );
267 fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPCNoPID() );
268 fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITSNoPID() );
269 fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPC() );
270 fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceITS( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITS() );
271 fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPCNoPID() );
272 fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITSNoPID() );
274 fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPC() );
275 fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceITS( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITS() );
276 fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPCNoPID() );
277 fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITSNoPID() );//Had
279 fMCAnalysis->FillSimRawEtVsRecoRawEtFullAcceptanceTPC( fRecAnalysis->GetRawEtFullAcceptanceTPC() );
280 fMCAnalysis->FillSimRawEtVsRecoRawEtFullAcceptanceITS( fRecAnalysis->GetRawEtFullAcceptanceITS() );
281 fMCAnalysis->FillSimRawEtVsRecoRawEtFullAcceptanceTPCNoPID( fRecAnalysis->GetRawEtFullAcceptanceTPCNoPID() );
282 fMCAnalysis->FillSimRawEtVsRecoRawEtFullAcceptanceITSNoPID( fRecAnalysis->GetRawEtFullAcceptanceITSNoPID() );//Had
285 if(fMCAnalysis->EMCAL()){
286 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceTPC() );
287 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceITS( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceITS() );
288 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceTPCNoPID() );
289 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceITSNoPID() );
290 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceTPC() );
291 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceITS( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceITS() );
292 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceTPCNoPID() );
293 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceITSNoPID() );
295 if(fMCAnalysis->PHOS()){
296 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceTPC() );
297 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceITS( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceITS() );
298 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceTPCNoPID() );
299 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceITSNoPID() );
300 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceTPC() );
301 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceITS( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceITS() );
302 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceTPCNoPID() );
303 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceITSNoPID() );
305 if(fMCAnalysis->PiKP() && fMCAnalysis->Full()){
306 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceTPC(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPC());
307 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceITS(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITS());
308 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceTPCNoPID(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPCNoPID());
309 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceITSNoPID(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITSNoPID());
314 delete fTriggerAnalysis;
316 //cout<<"End Event"<<endl<<endl;
318 PostData(1, fOutputList);
321 //________________________________________________________________________
322 void AliAnalysisTaskHadEt::Terminate(Option_t *)
324 // Draw result to the screen
325 // Called once at the end of the query
327 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
329 printf("ERROR: Output list not available\n");