]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/totEt/AliAnalysisTaskHadEt.cxx
Transition PWG4/JetTasks -> PWGJE and PWG4/totET -> PWGLF/totET
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisTaskHadEt.cxx
1 //_________________________________________________________________________
2 //  Utility Class for transverse energy studies; charged hadrons
3 //  Task for analysis
4 //  - reconstruction and MC output
5 // implementation file
6 //
7 //Created by Christine Nattrass, Rebecca Scott, Irakli Martashvili
8 //University of Tennessee at Knoxville
9 //_________________________________________________________________________
10 //Necessary to read config macros
11 #include <TROOT.h>
12 #include <TSystem.h>
13 #include <TInterpreter.h>
14
15 #include "TChain.h"
16 #include "TList.h"
17 #include "TH2F.h"
18
19 #include "AliESDEvent.h"
20 #include "AliMCEvent.h"
21 #include "AliESDtrackCuts.h"
22
23 #include "AliAnalysisTaskHadEt.h"
24 #include "AliAnalysisHadEtReconstructed.h"
25 #include "AliAnalysisHadEtMonteCarlo.h"
26 #include "AliPWG0Helper.h"
27
28 #include <iostream>
29
30 using namespace std;
31
32 ClassImp(AliAnalysisTaskHadEt)
33
34
35
36 //________________________________________________________________________
37   AliAnalysisTaskHadEt::AliAnalysisTaskHadEt(const char *name, Bool_t isMc, TString recoConfigFile, TString mcConfigFile) :
38         AliAnalysisTaskTransverseEnergy(name, isMc)
39         ,fRecAnalysis(0)
40         ,fMCAnalysis(0)
41         ,fIsSim(isMc)
42 {
43     // Constructor
44   fMCConfigFile = mcConfigFile;
45   fRecoConfigFile = recoConfigFile;
46
47   if(fMCAnalysis) delete fMCAnalysis;
48   if(fRecAnalysis) delete fRecAnalysis;
49
50   if (fRecoConfigFile.Length()) {
51     cout<<"Rereading AliAnalysisHadEtReconstructed configuration file "<<fRecoConfigFile<<endl;
52     gROOT->LoadMacro(fRecoConfigFile);
53     fRecAnalysis = (AliAnalysisHadEtReconstructed *) gInterpreter->ProcessLine("ConfigHadEtReconstructed()");
54   }
55
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);
61   }
62
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
67
68     DefineOutput(1, TList::Class());
69 }
70 AliAnalysisTaskHadEt::~AliAnalysisTaskHadEt(){//Destructor
71   delete fRecAnalysis;
72   delete fMCAnalysis;
73 }
74
75
76 //________________________________________________________________________
77 void AliAnalysisTaskHadEt::UserCreateOutputObjects()
78 {
79     // Create histograms
80
81     // Called once
82
83
84
85   fOutputList = new TList;
86   fOutputList->SetOwner();
87   fMCAnalysis->SetHistoList(fOutputList);
88   fRecAnalysis->SetHistoList(fOutputList);
89   if(fIsSim) fMCAnalysis->CreateHistograms();
90   fRecAnalysis->CreateHistograms();
91
92
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;
95   }
96
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");
111 //   }
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;
115     else{
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;}
118     }
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");
127   }
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");
139   }
140
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());
151     //add ITS stuff!
152   }
153   else{
154     Printf("Error: no track cuts!");
155   }
156 }
157
158 //________________________________________________________________________
159 void AliAnalysisTaskHadEt::UserExec(Option_t *)
160 { // execute method
161   fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
162 if (!fESDEvent) {
163   Printf("ERROR: Could not retrieve event");
164   return;
165  }
166 //cout<<"AliAnalysisTaskHadEt 165"<<endl;
167
168 Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber()); // Check if the physics selection is valid for this run
169
170 AliCentrality *cent = GetCentralityObject();
171
172 if(res == 0 && cent){
173   
174   //cout<<"New Event"<<endl;  
175
176   AliMCEvent* mcEvent = MCEvent();
177   Int_t eventtype = (Int_t) AliPWG0Helper::GetEventProcessType(mcEvent->Header());
178   fRecAnalysis->AnalyseEvent(fESDEvent,eventtype);
179
180 // if (!mcEvent) {
181 //   Printf("ERROR: Could not retrieve MC event");
182 //  }
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() );
194       }
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() );
204       }
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() );
214       }
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());
220       }
221     }
222   }
223 //cout<<"End Event"<<endl<<endl;
224 // Post output data.
225 PostData(1, fOutputList);
226 }
227
228 //________________________________________________________________________
229 void AliAnalysisTaskHadEt::Terminate(Option_t *)
230 {
231     // Draw result to the screen
232     // Called once at the end of the query
233
234     fOutputList = dynamic_cast<TList*> (GetOutputData(1));
235     if (!fOutputList) {
236         printf("ERROR: Output list not available\n");
237         return;
238     }
239 }
240
241