]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/totEt/AliAnalysisTaskTotEt.cxx
Adding functions to create histograms to make Marcelos code work
[u/mrichter/AliRoot.git] / PWG4 / 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)
8//_________________________________________________________________________
964c8159 9//Necessary to read config macros
10#include <TROOT.h>
11#include <TSystem.h>
12#include <TInterpreter.h>
cf6522d1 13
2fbf38ac 14#include "TChain.h"
cf6522d1 15#include "TList.h"
2fbf38ac 16#include "TH2F.h"
a403aff5 17#include "THnSparse.h"
2fbf38ac 18
19#include "AliESDEvent.h"
2fbf38ac 20#include "AliMCEvent.h"
b5821c13 21#include "AliESDtrackCuts.h"
cf6522d1 22
2fbf38ac 23#include "AliAnalysisTaskTotEt.h"
24#include "AliAnalysisEtReconstructedPhos.h"
25#include "AliAnalysisEtReconstructedEmcal.h"
26#include "AliAnalysisEtMonteCarloPhos.h"
27#include "AliAnalysisEtMonteCarloEmcal.h"
28
29#include <iostream>
a403aff5 30#include <AliCentrality.h>
2fbf38ac 31
32using namespace std;
33
34ClassImp(AliAnalysisTaskTotEt)
35
36//________________________________________________________________________
d3d7bfe9 37AliAnalysisTaskTotEt::AliAnalysisTaskTotEt(const char *name, Bool_t isMc) :
38 AliAnalysisTaskTransverseEnergy(name, isMc)
2fbf38ac 39 ,fRecAnalysis(0)
40 ,fMCAnalysis(0)
a403aff5 41 ,fSparseHistRecVsMc(0)
42 ,fSparseRecVsMc(0)
2fbf38ac 43{
44 // Constructor
45
46 // select if we should use EMCal or PHOS class
47 // PHOS by default, EMCal if name string contains EMC
48 TString t(name);
49 t.ToUpper();
50 if (t.Contains("EMC")) {
d3d7bfe9 51 if (fMCConfigFile.Length()) {
52 cout<<"Rereading AliAnalysisEtMonteCarloEmcal configuration file..."<<endl;
53 gROOT->LoadMacro(fMCConfigFile);
54 fMCAnalysis = (AliAnalysisEtMonteCarloEmcal *) gInterpreter->ProcessLine("ConfigEtMonteCarlo()");
55 }
56
57 if (fRecoConfigFile.Length()) {
58 cout<<"Rereading AliAnalysisEtReconstructedEmcal configuration file..."<<endl;
59 gROOT->LoadMacro(fRecoConfigFile);
60 fRecAnalysis = (AliAnalysisEtReconstructedEmcal *) gInterpreter->ProcessLine("ConfigEtReconstructed()");
61 }
2fbf38ac 62 }
d3d7bfe9 63 else {
64 if (fMCConfigFile.Length()) {
65 cout<<"Rereading AliAnalysisEtMonteCarloPhos configuration file..."<<endl;
66 gROOT->LoadMacro(fMCConfigFile);
a403aff5 67
68 fMCAnalysis = (AliAnalysisEtMonteCarloPhos *) gInterpreter->ProcessLine("ConfigEtMonteCarlo(false)");
69 cout << fMCAnalysis << endl;
d3d7bfe9 70 }
71
72 if (fRecoConfigFile.Length()) {
73 cout<<"Rereading AliAnalysisEtReconstructedPhos configuration file..."<<endl;
74 gROOT->LoadMacro(fRecoConfigFile);
a403aff5 75 fRecAnalysis = (AliAnalysisEtReconstructedPhos *) gInterpreter->ProcessLine("ConfigEtReconstructed(false)");
d3d7bfe9 76 }
2fbf38ac 77 }
2fbf38ac 78 // Define input and output slots here
79 // Input slot #0 works with a TChain
80 DefineInput(0, TChain::Class());
81 // Output slot #1 writes into a TH1 container
82
83 DefineOutput(1, TList::Class());
84
85}
d3d7bfe9 86AliAnalysisTaskTotEt::~AliAnalysisTaskTotEt() {//Destructor
a403aff5 87// fOutputList->Clear();
d3d7bfe9 88 delete fRecAnalysis;
89 delete fMCAnalysis;
951efd81 90}
2fbf38ac 91
92//________________________________________________________________________
93void AliAnalysisTaskTotEt::UserCreateOutputObjects()
94{
95 // Create histograms
96 // Called once
97 fMCAnalysis->CreateHistograms();
98 fRecAnalysis->CreateHistograms();
99 fOutputList = new TList;
951efd81 100 fOutputList->SetOwner();
2fbf38ac 101 fRecAnalysis->FillOutputList(fOutputList);
102 fMCAnalysis->FillOutputList(fOutputList);
a403aff5 103 fHistEtRecvsEtMC = new TH2F("fHistEtRecvsEtMC", "Reconstructed E_{T} vs MC E_{T}", 1000, 0.000, 100, 1000, 0.0001, 100);
104 fHistEtRecOverEtMC = new TH2F("fHistEtRecOverEtMC", "Reconstructed E_{T} over MC E_{T} vs centrality", 1000, 0.00, 2.0, 11, -0.5, 10.5);
105 fHistDiffEtRecEtMCOverEtMC = new TH2F("fHistDiffEtRecEtMCOverEtMC", "fHistDiffEtRecEtMCOverEtMC", 10000, 0.0, 1000, 1000, -5, 5);
2fbf38ac 106 fOutputList->Add(fHistEtRecvsEtMC);
a403aff5 107 fOutputList->Add(fHistEtRecOverEtMC);
108 fOutputList->Add(fHistDiffEtRecEtMCOverEtMC);
b5821c13 109
d3d7bfe9 110 Bool_t selectPrimaries=kTRUE;
111 if (fRecAnalysis->DataSet()==2009) {
112 cout<<"Setting track cuts for the 2009 p+p collisions at 900 GeV"<<endl;
113 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selectPrimaries);
114 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
115 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
116 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
117 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
118 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
119 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
120 }
121 if (fRecAnalysis->DataSet()==2010) {
0651f6b4 122 cout<<"Setting track cuts for the 2010 p+p collisions at 7 GeV"<<endl;
123 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
d3d7bfe9 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
0651f6b4 129 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
d3d7bfe9 130 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
131 }
132
133 fOutputList->Add(fEsdtrackCutsITSTPC);
134 fOutputList->Add(fEsdtrackCutsTPC);
135 fOutputList->Add(fEsdtrackCutsITS);
136 if (fEsdtrackCutsITSTPC && fEsdtrackCutsTPC) {
137 fRecAnalysis->SetITSTrackCuts( GetITSTrackCuts());
138 fMCAnalysis->SetITSTrackCuts( GetITSTrackCuts());
139 fRecAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
140 fMCAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
141 fRecAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
142 fMCAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
143 //add ITS stuff!
144 }
145 else {
146 Printf("Error: no track cuts!");
147 }
b5821c13 148
2fbf38ac 149}
150
151//________________________________________________________________________
152void AliAnalysisTaskTotEt::UserExec(Option_t *)
cf6522d1 153{ // execute method
d3d7bfe9 154
155 fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
156 if (!fESDEvent)
157 {
2fbf38ac 158 Printf("ERROR: Could not retrieve event");
159 return;
160 }
161
d3d7bfe9 162 Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber());
163
b6dd6ad2 164 AliCentrality *cent = GetCentralityObject();
2fbf38ac 165
d3d7bfe9 166 if (res == 0 && cent)
2fbf38ac 167 {
d3d7bfe9 168 if (IsPhysicsSelected())
169 {
170 fRecAnalysis->SetCentralityObject(cent);
171 fRecAnalysis->AnalyseEvent(fESDEvent);
172
173 AliMCEvent* mcEvent = MCEvent();
174 if (mcEvent)
175 {
a403aff5 176 fMCAnalysis->SetCentralityObject(cent);
0651f6b4 177 fMCAnalysis->AnalyseEvent(mcEvent, fESDEvent);
178 //fMCAnalysis->AnalyseEvent(mcEvent);
d3d7bfe9 179 }
a403aff5 180 if(fMCAnalysis)
181 {
182 fHistEtRecvsEtMC->Fill(fRecAnalysis->GetTotNeutralEtAcc(), fMCAnalysis->GetTotNeutralEtAcc());
183 if(fMCAnalysis->GetTotNeutralEtAcc()) fHistEtRecOverEtMC->Fill(fRecAnalysis->GetTotNeutralEt()/fMCAnalysis->GetTotNeutralEtAcc(), cent->GetCentralityClass10("V0M"));
184 if(fMCAnalysis->GetTotNeutralEtAcc()) fHistDiffEtRecEtMCOverEtMC->Fill(fMCAnalysis->GetTotNeutralEt(), (fRecAnalysis->GetTotNeutralEt()-fMCAnalysis->GetTotNeutralEt())/fMCAnalysis->GetTotNeutralEt());
185 }
d3d7bfe9 186 }
2fbf38ac 187 }
d3d7bfe9 188 // Post output data.
2fbf38ac 189 PostData(1, fOutputList);
2fbf38ac 190}
191
192//________________________________________________________________________
193void AliAnalysisTaskTotEt::Terminate(Option_t *)
194{
195 // Draw result to the screen
196 // Called once at the end of the query
197
198 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
199 if (!fOutputList) {
200 printf("ERROR: Output list not available\n");
201 return;
202 }
203}
204
205
206