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"
32 ClassImp(AliAnalysisTaskHadEt)
36 //________________________________________________________________________
37 AliAnalysisTaskHadEt::AliAnalysisTaskHadEt(const char *name, Bool_t isMc, TString recoConfigFile, TString mcConfigFile) :
38 AliAnalysisTaskTransverseEnergy(name, isMc)
44 fMCConfigFile = mcConfigFile;
45 fRecoConfigFile = recoConfigFile;
47 if(fMCAnalysis) delete fMCAnalysis;
48 if(fRecAnalysis) delete fRecAnalysis;
50 if (fRecoConfigFile.Length()) {
51 cout<<"Rereading AliAnalysisHadEtReconstructed configuration file "<<fRecoConfigFile<<endl;
52 gROOT->LoadMacro(fRecoConfigFile);
53 fRecAnalysis = (AliAnalysisHadEtReconstructed *) gInterpreter->ProcessLine("ConfigHadEtReconstructed()");
56 if (fMCConfigFile.Length()) {
57 cout<<"Rereading AliAnalysisHadEtMonteCarlo configuration file "<<fMCConfigFile<<endl;
58 gROOT->LoadMacro(fMCConfigFile);
59 fMCAnalysis = (AliAnalysisHadEtMonteCarlo *) gInterpreter->ProcessLine("ConfigHadEtMonteCarlo()");
60 fMCAnalysis->SetHadEtReconstructed(fRecAnalysis);
63 // Define input and output slots here
64 // Input slot #0 works with a TChain
65 DefineInput(0, TChain::Class());
66 // Output slot #1 writes into a TH1 container
68 DefineOutput(1, TList::Class());
70 AliAnalysisTaskHadEt::~AliAnalysisTaskHadEt(){//Destructor
76 //________________________________________________________________________
77 void AliAnalysisTaskHadEt::UserCreateOutputObjects()
85 fOutputList = new TList;
86 fOutputList->SetOwner();
87 fMCAnalysis->SetHistoList(fOutputList);
88 fRecAnalysis->SetHistoList(fOutputList);
89 if(fIsSim) fMCAnalysis->CreateHistograms();
90 fRecAnalysis->CreateHistograms();
93 if(fRecAnalysis->DataSet() != fMCAnalysis->DataSet()){
94 cout<<"Warning: Reconstruction data set and Monte Carlo data set are not the same! Setting data set to "<<fRecAnalysis->DataSet()<<endl;
97 Bool_t selectPrimaries=kTRUE;
98 if(fEsdtrackCutsITSTPC) delete fEsdtrackCutsITSTPC;
99 if(fEsdtrackCutsITS) delete fEsdtrackCutsITS;
100 if(fEsdtrackCutsTPC) delete fEsdtrackCutsTPC;
101 //We do not use these because we are using the 2010 900 GeV data
102 // if(fRecAnalysis->DataSet()==2009){
103 // cout<<"Setting track cuts for the 2009 p+p collisions at 900 GeV"<<endl;
104 // fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selectPrimaries);
105 // fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
106 // fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
107 // fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
108 // //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
109 // fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
110 // fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
112 if(fRecAnalysis->DataSet()==2010 || fRecAnalysis->DataSet()==20111||fRecAnalysis->DataSet()==2009){
113 AliAnalysisTaskSE:: SelectCollisionCandidates(AliVEvent::kINT7 ) ;
114 if(fRecAnalysis->DataSet()==2010)cout<<"Setting track cuts for the 2010 p+p collisions at 7 TeV"<<endl;
116 if(fRecAnalysis->DataSet()==2009){cout<<"Setting track cuts for the 2010 p+p collisions at 900 GeV"<<endl;}
117 else{cout<<"Setting track cuts for the 2011 p+p collisions at 2.76 TeV"<<endl;}
119 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
120 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
121 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
122 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
123 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
124 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
125 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
126 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
128 if(fRecAnalysis->DataSet()==20100){
129 cout<<"Setting track cuts for the 2010 Pb+Pb collisions at 2.76 TeV"<<endl;
130 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
131 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
132 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
133 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
134 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
135 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
136 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
137 // fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
138 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
141 fOutputList->Add(fEsdtrackCutsITSTPC);
142 fOutputList->Add(fEsdtrackCutsTPC);
143 fOutputList->Add(fEsdtrackCutsITS);
144 if(fEsdtrackCutsITSTPC && fEsdtrackCutsTPC){
145 fRecAnalysis->SetITSTrackCuts( GetITSTrackCuts());
146 fMCAnalysis->SetITSTrackCuts( GetITSTrackCuts());
147 fRecAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
148 fMCAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
149 fRecAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
150 fMCAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
154 Printf("Error: no track cuts!");
158 //________________________________________________________________________
159 void AliAnalysisTaskHadEt::UserExec(Option_t *)
161 fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
163 Printf("ERROR: Could not retrieve event");
166 //cout<<"AliAnalysisTaskHadEt 165"<<endl;
168 Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber()); // Check if the physics selection is valid for this run
170 AliCentrality *cent = GetCentralityObject();
172 if(res == 0 && cent){
174 //cout<<"New Event"<<endl;
176 AliMCEvent* mcEvent = MCEvent();
177 Int_t eventtype = (Int_t) AliPWG0Helper::GetEventProcessType(mcEvent->Header());
178 fRecAnalysis->AnalyseEvent(fESDEvent,eventtype);
181 // Printf("ERROR: Could not retrieve MC event");
183 if (mcEvent && fESDEvent && fIsSim){
184 ((AliAnalysisHadEtMonteCarlo*)fMCAnalysis)->AnalyseEvent((AliVEvent*)mcEvent,(AliVEvent*)fESDEvent);
185 if(fMCAnalysis->Full()){
186 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPC() );
187 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceITS( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITS() );
188 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPCNoPID() );
189 fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITSNoPID() );
190 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPC() );
191 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceITS( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITS() );
192 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPCNoPID() );
193 fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITSNoPID() );
195 if(fMCAnalysis->EMCAL()){
196 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceTPC() );
197 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceITS( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceITS() );
198 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceTPCNoPID() );
199 fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceITSNoPID() );
200 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceTPC() );
201 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceITS( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceITS() );
202 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceTPCNoPID() );
203 fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceITSNoPID() );
205 if(fMCAnalysis->PHOS()){
206 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceTPC() );
207 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceITS( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceITS() );
208 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceTPCNoPID() );
209 fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceITSNoPID() );
210 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceTPC() );
211 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceITS( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceITS() );
212 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceTPCNoPID() );
213 fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceITSNoPID() );
215 if(fMCAnalysis->PiKP() && fMCAnalysis->Full()){
216 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceTPC(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPC());
217 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceITS(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITS());
218 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceTPCNoPID(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPCNoPID());
219 fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceITSNoPID(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITSNoPID());
223 //cout<<"End Event"<<endl<<endl;
225 PostData(1, fOutputList);
228 //________________________________________________________________________
229 void AliAnalysisTaskHadEt::Terminate(Option_t *)
231 // Draw result to the screen
232 // Called once at the end of the query
234 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
236 printf("ERROR: Output list not available\n");