]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/totEt/AliAnalysisTaskTotEt.cxx
Changing cluster E cut to cluster ET cut and changing name of function for correcting...
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisTaskTotEt.cxx
CommitLineData
cf6522d1 1//_________________________________________________________________________
2// Utility Class for transverse energy studies
3// Task for analysis
4// - reconstruction and MC output
5// implementation file
6//
7//*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
ee1083d5 8 //_________________________________________________________________________
9 //Necessary to read config macros
964c8159 10#include <TROOT.h>
11#include <TSystem.h>
12#include <TInterpreter.h>
cf6522d1 13
2fbf38ac 14#include "TChain.h"
cf6522d1 15#include "TList.h"
1815c8d7 16#include "TFile.h"
2fbf38ac 17#include "TH2F.h"
a403aff5 18#include "THnSparse.h"
2fbf38ac 19
20#include "AliESDEvent.h"
2fbf38ac 21#include "AliMCEvent.h"
b5821c13 22#include "AliESDtrackCuts.h"
cf6522d1 23
2fbf38ac 24#include "AliAnalysisTaskTotEt.h"
25#include "AliAnalysisEtReconstructedPhos.h"
26#include "AliAnalysisEtReconstructedEmcal.h"
27#include "AliAnalysisEtMonteCarloPhos.h"
28#include "AliAnalysisEtMonteCarloEmcal.h"
1815c8d7 29#include "AliAnalysisEmEtMonteCarlo.h"
30#include "AliAnalysisEmEtReconstructed.h"
2fbf38ac 31
32#include <iostream>
a403aff5 33#include <AliCentrality.h>
2fbf38ac 34
ee1083d5 35 using namespace std;
2fbf38ac 36
37ClassImp(AliAnalysisTaskTotEt)
38
39//________________________________________________________________________
ee1083d5 40 AliAnalysisTaskTotEt::AliAnalysisTaskTotEt(const char *name, Bool_t isMc) :
41 AliAnalysisTaskTransverseEnergy(name, isMc)
42 ,fRecAnalysis(0)
43 ,fMCAnalysis(0)
01b73fb0 44 // ,fSparseHistRecVsMc(0)
45 //,fSparseRecVsMc(0)
2fbf38ac 46{
ee1083d5 47 // Constructor
ee1083d5 48 // select if we should use EMCal or PHOS class
49 // PHOS by default, EMCal if name string contains EMC
50 TString t(name);
c31562f7 51 gROOT->LoadMacro(fMCConfigFile);
52 gROOT->LoadMacro(fRecoConfigFile);
53 //There is a weird problem where the name reverts to a default using the plugin
54 //these lines solve it - there is a function written into ConfigEtMonteCarlo.C which solves this
55 Bool_t isEMCal = t.Contains("EMC");
56 if (!(t.Contains("EMC")) && !(t.Contains("PHOS"))) {//the name does not contain either EMCal or PHOS
57 cout<<"Default arguments called. Reading config file."<<endl;
58 isEMCal = (Bool_t) gInterpreter->ProcessLine("GetIsEMCAL()");
59 isMc = (Bool_t) gInterpreter->ProcessLine("GetIsMC()");
60
61 }
62 //cout<<__FILE__<<" My name is "<<name<<endl;
ee1083d5 63 //t.ToUpper();
c31562f7 64 if (isEMCal) {
ee1083d5 65 if (t.Contains("Detail")) {
66
67 cout<<"Rereading AliAnalysisEtMonteCarlo configuration file..."<<endl;
ee1083d5 68 fMCAnalysis = (AliAnalysisEmEtMonteCarlo *) gInterpreter->ProcessLine("ConfigEtMonteCarlo(true,true)");
1815c8d7 69
ee1083d5 70 cout << "Instantiating AliAnalysisEmEtMonteCarlo class..."<< endl;
71 }
72 else if (fMCConfigFile.Length()) {
73 cout<<"Rereading AliAnalysisEtMonteCarloEmcal configuration file..."<<endl;
ee1083d5 74 fMCAnalysis = (AliAnalysisEtMonteCarloEmcal *) gInterpreter->ProcessLine("ConfigEtMonteCarlo()");
75 }
1815c8d7 76
ee1083d5 77 if (t.Contains("Detail")) {
78 cout<<"Rereading AliAnalysisEmEtReconstructed configuration file..."<<endl;
ee1083d5 79 fRecAnalysis = (AliAnalysisEmEtReconstructed *) gInterpreter->ProcessLine("ConfigEtReconstructed(true,true)");
80
81 }
82 else if (fRecoConfigFile.Length()) {
83 cout<<"Rereading AliAnalysisEtReconstructedEmcal configuration file..."<<endl;
ee1083d5 84 fRecAnalysis = (AliAnalysisEtReconstructedEmcal *) gInterpreter->ProcessLine("ConfigEtReconstructed()");
2fbf38ac 85 }
ee1083d5 86 }
87 else {
88 if (fMCConfigFile.Length()) {
89 cout<<"Rereading AliAnalysisEtMonteCarloPhos configuration file..."<<endl;
1815c8d7 90
ee1083d5 91 fMCAnalysis = (AliAnalysisEtMonteCarloPhos *) gInterpreter->ProcessLine("ConfigEtMonteCarlo(false)");
92 cout << fMCAnalysis << endl;
93 }
1815c8d7 94
ee1083d5 95 if (fRecoConfigFile.Length()) {
96 cout<<"Rereading AliAnalysisEtReconstructedPhos configuration file..."<<endl;
ee1083d5 97 fRecAnalysis = (AliAnalysisEtReconstructedPhos *) gInterpreter->ProcessLine("ConfigEtReconstructed(false)");
2fbf38ac 98 }
ee1083d5 99 }
100 // Define input and output slots here
101 // Input slot #0 works with a TChain
102 DefineInput(0, TChain::Class());
103 // Output slot #1 writes into a TH1 container
1815c8d7 104
ee1083d5 105 DefineOutput(1, TList::Class());
1815c8d7 106
2fbf38ac 107}
d3d7bfe9 108AliAnalysisTaskTotEt::~AliAnalysisTaskTotEt() {//Destructor
ee1083d5 109 // fOutputList->Clear();
110 delete fRecAnalysis;
111 delete fMCAnalysis;
01b73fb0 112 //delete fSparseHistRecVsMc;
113 //delete fSparseRecVsMc;
951efd81 114}
2fbf38ac 115
116//________________________________________________________________________
117void AliAnalysisTaskTotEt::UserCreateOutputObjects()
118{
ee1083d5 119 // Create histograms
120 // Called once
121 if (fMCAnalysis)
122 fMCAnalysis->CreateHistograms();
123 fRecAnalysis->CreateHistograms();
124 fOutputList = new TList;
125 fOutputList->SetOwner();
126 fRecAnalysis->FillOutputList(fOutputList);
127 if (fMCAnalysis)
128 fMCAnalysis->FillOutputList(fOutputList);
129 fHistEtRecvsEtMC = new TH2F("fHistEtRecvsEtMC", "Reconstructed E_{T} vs MC E_{T}", 1000, 0.000, 100, 1000, 0.0001, 100);
130 fHistEtRecOverEtMC = new TH2F("fHistEtRecOverEtMC", "Reconstructed E_{T} over MC E_{T} vs centrality", 1000, 0.00, 2.0, 11, -0.5, 10.5);
131 fHistDiffEtRecEtMCOverEtMC = new TH2F("fHistDiffEtRecEtMCOverEtMC", "fHistDiffEtRecEtMCOverEtMC", 10000, 0.0, 1000, 1000, -5, 5);
132 fOutputList->Add(fHistEtRecvsEtMC);
133 fOutputList->Add(fHistEtRecOverEtMC);
134 fOutputList->Add(fHistDiffEtRecEtMCOverEtMC);
135
136 Bool_t selectPrimaries=kTRUE;
137 if(fRecAnalysis->DataSet()==2010 || fRecAnalysis->DataSet()==20111||fRecAnalysis->DataSet()==2009){
138 if(fRecAnalysis->DataSet()==2010)cout<<"Setting track cuts for the 2010 p+p collisions at 7 TeV"<<endl;
139 else{
140 if(fRecAnalysis->DataSet()==2009){cout<<"Setting track cuts for the 2010 p+p collisions at 900 GeV"<<endl;}
141 else{cout<<"Setting track cuts for the 2011 p+p collisions at 2.76 TeV"<<endl;}
d3d7bfe9 142 }
ee1083d5 143 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
144 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
145 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
146 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
147 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
148 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
149 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
150 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
151 }
152 if(fRecAnalysis->DataSet()==20100){
153 cout<<"Setting track cuts for the 2010 Pb+Pb collisions at 2.76 TeV"<<endl;
154 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
155 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
156 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
157 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
158 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
159 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
160 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
161 // fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
162 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
163 }
1815c8d7 164
ee1083d5 165
166 fOutputList->Add(fEsdtrackCutsITSTPC);
167 fOutputList->Add(fEsdtrackCutsTPC);
168 fOutputList->Add(fEsdtrackCutsITS);
169 if (fEsdtrackCutsITSTPC && fEsdtrackCutsTPC) {
170 fRecAnalysis->SetITSTrackCuts( GetITSTrackCuts());
171 if (fMCAnalysis)
172 fMCAnalysis->SetITSTrackCuts( GetITSTrackCuts());
173 fRecAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
174 if (fMCAnalysis)
175 fMCAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
176 fRecAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
177 if (fMCAnalysis)
178 fMCAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
179 //add ITS stuff!
180 }
181 else {
182 Printf("Error: no track cuts!");
183 }
1cc04082 184 PostData(1, fOutputList);
01b73fb0 185
2fbf38ac 186}
187
188//________________________________________________________________________
189void AliAnalysisTaskTotEt::UserExec(Option_t *)
cf6522d1 190{ // execute method
1815c8d7 191
ee1083d5 192 fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
193 if (!fESDEvent)
d3d7bfe9 194 {
ee1083d5 195 Printf("ERROR: Could not retrieve event");
196 return;
2fbf38ac 197 }
1815c8d7 198
ee1083d5 199 //Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber());
1815c8d7 200
ee1083d5 201 AliCentrality *cent = GetCentralityObject();
1815c8d7 202
ee1083d5 203 //if (res == 0 && cent)
204 //{
e50ad0d0 205 fRecAnalysis->SetCentralityObject(cent);
206 fRecAnalysis->AnalyseEvent(fESDEvent);
1815c8d7 207
e50ad0d0 208 AliMCEvent* mcEvent = MCEvent();
209 if (mcEvent)
210 {
211 fMCAnalysis->SetCentralityObject(cent);
212 fMCAnalysis->AnalyseEvent(mcEvent, fESDEvent);
213 //fMCAnalysis->AnalyseEvent(mcEvent);
214 }
215 if(fMCAnalysis)
216 {
f61cec2f 217 fHistEtRecvsEtMC->Fill(fRecAnalysis->GetTotNeutralEt(), fMCAnalysis->GetTotNeutralEt());
218 if(fMCAnalysis->GetTotNeutralEt()) fHistEtRecOverEtMC->Fill(fRecAnalysis->GetTotNeutralEt()/fMCAnalysis->GetTotNeutralEt(), cent->GetCentralityClass10("V0M"));
219 if(fMCAnalysis->GetTotNeutralEt()) fHistDiffEtRecEtMCOverEtMC->Fill(fMCAnalysis->GetTotNeutralEt(), (fRecAnalysis->GetTotNeutralEt()-fMCAnalysis->GetTotNeutralEt())/fMCAnalysis->GetTotNeutralEt());
ee1083d5 220 }
221 //}
222 // Post output data.
223 PostData(1, fOutputList);
2fbf38ac 224}
225
226//________________________________________________________________________
227void AliAnalysisTaskTotEt::Terminate(Option_t *)
228{
ee1083d5 229 // Draw result to the screen
230 // Called once at the end of the query
1815c8d7 231
ee1083d5 232 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
233 if (!fOutputList) {
234 printf("ERROR: Output list not available\n");
235 return;
236 }
2fbf38ac 237}
238
239
240