]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/totEt/AliAnalysisTaskHadEt.cxx
Fixing issues with the reconstruction efficiency, adding histograms to do a simultane...
[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 #include "AliTriggerAnalysis.h"
28
29 #include <iostream>
30 #include "AliLog.h"
31
32 using namespace std;
33
34 ClassImp(AliAnalysisTaskHadEt)
35
36
37
38 //________________________________________________________________________
39   AliAnalysisTaskHadEt::AliAnalysisTaskHadEt(const char *name, Bool_t isMc, TString recoConfigFile, TString mcConfigFile) :
40         AliAnalysisTaskTransverseEnergy(name, isMc)
41         ,fRecAnalysis(0)
42         ,fMCAnalysis(0)
43         ,fIsSim(isMc)
44         ,kIsOfflineV0AND(0)
45         ,kIsOfflineMB(0)
46 {
47     // Constructor
48   fMCConfigFile = mcConfigFile;
49   fRecoConfigFile = recoConfigFile;
50
51   if(fMCAnalysis) delete fMCAnalysis;
52   if(fRecAnalysis) delete fRecAnalysis;
53
54   if (fRecoConfigFile.Length()) {
55     cout<<"Rereading AliAnalysisHadEtReconstructed configuration file "<<fRecoConfigFile<<endl;
56     gROOT->LoadMacro(fRecoConfigFile);
57     fRecAnalysis = (AliAnalysisHadEtReconstructed *) gInterpreter->ProcessLine("ConfigHadEtReconstructed()");
58   }
59
60   if (fMCConfigFile.Length()) {
61     cout<<"Rereading AliAnalysisHadEtMonteCarlo configuration file "<<fMCConfigFile<<endl;
62     gROOT->LoadMacro(fMCConfigFile);
63     fMCAnalysis = (AliAnalysisHadEtMonteCarlo *) gInterpreter->ProcessLine("ConfigHadEtMonteCarlo()");
64     fMCAnalysis->SetHadEtReconstructed(fRecAnalysis);
65   }
66
67     // Define input and output slots here
68     // Input slot #0 works with a TChain
69     DefineInput(0, TChain::Class());
70     // Output slot #1 writes into a TH1 container
71
72     DefineOutput(1, TList::Class());
73 }
74 AliAnalysisTaskHadEt::~AliAnalysisTaskHadEt(){//Destructor
75   delete fRecAnalysis;
76   delete fMCAnalysis;
77 }
78
79
80 //________________________________________________________________________
81 void AliAnalysisTaskHadEt::UserCreateOutputObjects()
82 {
83     // Create histograms
84
85     // Called once
86
87
88
89   fOutputList = new TList;
90   fOutputList->SetOwner();
91   fMCAnalysis->SetHistoList(fOutputList);
92   fRecAnalysis->SetHistoList(fOutputList);
93   if(fIsSim) fMCAnalysis->CreateHistograms();
94   fRecAnalysis->CreateHistograms();
95
96
97   if(fRecAnalysis->DataSet() != fMCAnalysis->DataSet()){
98     cout<<"Warning: Reconstruction data set and Monte Carlo data set are not the same!  Setting data set to "<<fRecAnalysis->DataSet()<<endl;
99   }
100
101   Bool_t selectPrimaries=kTRUE;
102   if(fEsdtrackCutsITSTPC) delete fEsdtrackCutsITSTPC;
103   if(fEsdtrackCutsITS) delete fEsdtrackCutsITS;
104   if(fEsdtrackCutsTPC) delete fEsdtrackCutsTPC;
105   //We do not use these because we are using the 2010 900 GeV data
106 //   if(fRecAnalysis->DataSet()==2009){
107 //     cout<<"Setting track cuts for the 2009 p+p collisions at 900 GeV"<<endl;
108 //     fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selectPrimaries);
109 //     fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
110 //     fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
111 //     fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
112 //     //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
113 //     fEsdtrackCutsITS =  AliESDtrackCuts::GetStandardITSPureSATrackCuts2009(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
114 //     fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
115 //   }
116   if(fRecAnalysis->DataSet()==2010 || fRecAnalysis->DataSet()==20111||fRecAnalysis->DataSet()==2009){
117     // AliAnalysisTaskSE::      SelectCollisionCandidates(AliVEvent::kINT7 ) ;
118     if(fRecAnalysis->DataSet()==2010)cout<<"Setting track cuts for the 2010 p+p collisions at 7 TeV"<<endl;
119     else{
120       if(fRecAnalysis->DataSet()==2009){cout<<"Setting track cuts for the 2010 p+p collisions at 900 GeV"<<endl;}
121       else{cout<<"Setting track cuts for the 2011 p+p collisions at 2.76 TeV"<<endl;}
122     }
123     //cout<<"Warning:  Have not set 2010 track cuts yet!!"<<endl;
124     fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
125     fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
126     fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
127     fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
128     //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
129     fEsdtrackCutsITS =  AliESDtrackCuts::GetStandardITSSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
130     fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
131   }
132   if(fRecAnalysis->DataSet()==20100){
133     cout<<"Setting track cuts for the 2010 Pb+Pb collisions at 2.76 TeV"<<endl;
134     //cout<<"Warning:  Have not set 2010 track cuts yet!!"<<endl;
135     fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
136     fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
137     fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
138     fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
139     //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
140     fEsdtrackCutsITS =  AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
141     // fEsdtrackCutsITS =  AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
142    fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
143   }
144
145   fOutputList->Add(fEsdtrackCutsITSTPC);
146   fOutputList->Add(fEsdtrackCutsTPC);
147   fOutputList->Add(fEsdtrackCutsITS);
148   if(fEsdtrackCutsITSTPC && fEsdtrackCutsTPC){
149     fRecAnalysis->SetITSTrackCuts( GetITSTrackCuts());
150     fMCAnalysis->SetITSTrackCuts( GetITSTrackCuts());
151     fRecAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
152     fMCAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
153     fRecAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
154     fMCAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
155     //add ITS stuff!
156   }
157   else{
158     Printf("Error: no track cuts!");
159   }
160
161  PostData(1, fOutputList);
162 }
163
164 //________________________________________________________________________
165 void AliAnalysisTaskHadEt::UserExec(Option_t *)
166 { // execute method
167   fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
168 if (!fESDEvent) {
169   Printf("ERROR: Could not retrieve event");
170   return;
171  }
172 //cout<<"AliAnalysisTaskHadEt 165"<<endl;
173
174 //Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber()); // Check if the physics selection is valid for this run
175
176 //AliCentrality *cent = GetCentralityObject();
177
178 //if(res == 0 && cent){
179 //if(cent){
180  AliTriggerAnalysis *fTriggerAnalysis = new AliTriggerAnalysis();
181
182   kIsOfflineV0AND = fTriggerAnalysis->IsOfflineTriggerFired(fESDEvent, AliTriggerAnalysis::kV0AND);  
183   kIsOfflineMB = fTriggerAnalysis->IsOfflineTriggerFired(fESDEvent, AliTriggerAnalysis::kMB1);  
184   fRecAnalysis->SetIsOfflineV0AND(kIsOfflineV0AND);
185   fMCAnalysis->SetIsOfflineV0AND(kIsOfflineV0AND);
186   fMCAnalysis->SetIsOfflineMB(kIsOfflineMB);
187
188   Int_t eventtype =     AliPWG0Helper::kInvalidProcess;
189   if(fIsSim && fRecAnalysis->DataSet()!=20100) eventtype = (Int_t) AliPWG0Helper::GetEventProcessType(MCEvent()->Header());
190   fRecAnalysis->AnalyseEvent(fESDEvent,eventtype);
191   if(fIsSim){
192     AliMCEvent* mcEvent = MCEvent();
193     if(!mcEvent){  
194       AliFatal("ERROR: MC Event does not exist");
195       return;
196     }
197     if (fESDEvent){
198       ((AliAnalysisHadEtMonteCarlo*)fMCAnalysis)->AnalyseEvent((AliVEvent*)mcEvent,(AliVEvent*)fESDEvent);
199
200     if( fRecAnalysis->DataSet()==20100 || AliPWG0Helper::GetEventProcessType(mcEvent->Header()) == AliPWG0Helper::kND){//either non-diffractive or Pb+Pb
201       if(fMCAnalysis->Full()){
202         fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPC() );
203         fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceITS( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITS() );
204         fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPCNoPID() );
205         fMCAnalysis->FillSimTotEtMinusRecoTotEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITSNoPID() );
206         fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPC() );
207         fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceITS( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITS() );
208         fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPCNoPID() );
209         fMCAnalysis->FillSimHadEtMinusRecoHadEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITSNoPID() );
210
211         fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPC() );
212         fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceITS( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITS() );
213         fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceTPCNoPID() );
214         fMCAnalysis->FillSimTotEtVsRecoTotEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtFullAcceptanceITSNoPID() );
215         fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPC() );
216         fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceITS( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITS() );
217         fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceTPCNoPID() );
218         fMCAnalysis->FillSimHadEtVsRecoHadEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtFullAcceptanceITSNoPID() );
219
220         fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceTPC( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPC() );
221         fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceITS( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITS() );
222         fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPCNoPID() );
223         fMCAnalysis->FillSimPiKPEtVsRecoPiKPEtFullAcceptanceITSNoPID( fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITSNoPID() );//Had
224       }
225       if(fMCAnalysis->EMCAL()){
226         fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceTPC() );
227         fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceITS( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceITS() );
228         fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceTPCNoPID() );
229         fMCAnalysis->FillSimTotEtMinusRecoTotEtEMCALAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtEMCALAcceptanceITSNoPID() );
230         fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceTPC() );
231         fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceITS( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceITS() );
232         fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceTPCNoPID() );
233         fMCAnalysis->FillSimHadEtMinusRecoHadEtEMCALAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtEMCALAcceptanceITSNoPID() );
234       }
235       if(fMCAnalysis->PHOS()){
236         fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceTPC( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceTPC() );
237         fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceITS( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceITS() );
238         fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceTPCNoPID() );
239         fMCAnalysis->FillSimTotEtMinusRecoTotEtPHOSAcceptanceITSNoPID( fRecAnalysis->GetCorrectedTotEtPHOSAcceptanceITSNoPID() );
240         fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceTPC( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceTPC() );
241         fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceITS( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceITS() );
242         fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceTPCNoPID( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceTPCNoPID() );
243         fMCAnalysis->FillSimHadEtMinusRecoHadEtPHOSAcceptanceITSNoPID( fRecAnalysis->GetCorrectedHadEtPHOSAcceptanceITSNoPID() );
244       }
245       if(fMCAnalysis->PiKP() && fMCAnalysis->Full()){
246         fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceTPC(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPC());
247         fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceITS(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITS());
248         fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceTPCNoPID(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceTPCNoPID());
249         fMCAnalysis->FillSimPiKPMinusRecoPiKPFullAcceptanceITSNoPID(fRecAnalysis->GetCorrectedPiKPEtFullAcceptanceITSNoPID());
250       }
251     }
252   }
253   }
254   delete fTriggerAnalysis;
255   //}
256 //cout<<"End Event"<<endl<<endl;
257 // Post output data.
258  PostData(1, fOutputList);
259 }
260
261 //________________________________________________________________________
262 void AliAnalysisTaskHadEt::Terminate(Option_t *)
263 {
264     // Draw result to the screen
265     // Called once at the end of the query
266
267     fOutputList = dynamic_cast<TList*> (GetOutputData(1));
268     if (!fOutputList) {
269         printf("ERROR: Output list not available\n");
270         return;
271     }
272 }
273
274