1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies
4 // - reconstruction and MC output
7 //*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
8 //_________________________________________________________________________
9 //Necessary to read config macros
12 #include <TInterpreter.h>
18 #include "THnSparse.h"
20 #include "AliESDEvent.h"
21 #include "AliMCEvent.h"
22 #include "AliESDtrackCuts.h"
24 #include "AliAnalysisTaskTotEt.h"
25 #include "AliAnalysisEtReconstructedPhos.h"
26 #include "AliAnalysisEtReconstructedEmcal.h"
27 #include "AliAnalysisEtMonteCarloPhos.h"
28 #include "AliAnalysisEtMonteCarloEmcal.h"
29 #include "AliAnalysisEmEtMonteCarlo.h"
30 #include "AliAnalysisEmEtReconstructed.h"
33 #include <AliCentrality.h>
37 ClassImp(AliAnalysisTaskTotEt)
39 //________________________________________________________________________
40 AliAnalysisTaskTotEt::AliAnalysisTaskTotEt(const char *name, Bool_t isMc) :
41 AliAnalysisTaskTransverseEnergy(name, isMc)
44 // ,fSparseHistRecVsMc(0)
48 // select if we should use EMCal or PHOS class
49 // PHOS by default, EMCal if name string contains EMC
52 if (t.Contains("EMC")) {
53 if (t.Contains("Detail")) {
55 cout<<"Rereading AliAnalysisEtMonteCarlo configuration file..."<<endl;
56 gROOT->LoadMacro(fMCConfigFile);
57 fMCAnalysis = (AliAnalysisEmEtMonteCarlo *) gInterpreter->ProcessLine("ConfigEtMonteCarlo(true,true)");
59 cout << "Instantiating AliAnalysisEmEtMonteCarlo class..."<< endl;
61 else if (fMCConfigFile.Length()) {
62 cout<<"Rereading AliAnalysisEtMonteCarloEmcal configuration file..."<<endl;
63 gROOT->LoadMacro(fMCConfigFile);
64 fMCAnalysis = (AliAnalysisEtMonteCarloEmcal *) gInterpreter->ProcessLine("ConfigEtMonteCarlo()");
67 if (t.Contains("Detail")) {
68 cout<<"Rereading AliAnalysisEmEtReconstructed configuration file..."<<endl;
69 gROOT->LoadMacro(fRecoConfigFile);
70 fRecAnalysis = (AliAnalysisEmEtReconstructed *) gInterpreter->ProcessLine("ConfigEtReconstructed(true,true)");
73 else if (fRecoConfigFile.Length()) {
74 cout<<"Rereading AliAnalysisEtReconstructedEmcal configuration file..."<<endl;
75 gROOT->LoadMacro(fRecoConfigFile);
76 fRecAnalysis = (AliAnalysisEtReconstructedEmcal *) gInterpreter->ProcessLine("ConfigEtReconstructed()");
80 if (fMCConfigFile.Length()) {
81 cout<<"Rereading AliAnalysisEtMonteCarloPhos configuration file..."<<endl;
82 gROOT->LoadMacro(fMCConfigFile);
84 fMCAnalysis = (AliAnalysisEtMonteCarloPhos *) gInterpreter->ProcessLine("ConfigEtMonteCarlo(false)");
85 cout << fMCAnalysis << endl;
88 if (fRecoConfigFile.Length()) {
89 cout<<"Rereading AliAnalysisEtReconstructedPhos configuration file..."<<endl;
90 gROOT->LoadMacro(fRecoConfigFile);
91 fRecAnalysis = (AliAnalysisEtReconstructedPhos *) gInterpreter->ProcessLine("ConfigEtReconstructed(false)");
94 // Define input and output slots here
95 // Input slot #0 works with a TChain
96 DefineInput(0, TChain::Class());
97 // Output slot #1 writes into a TH1 container
99 DefineOutput(1, TList::Class());
102 AliAnalysisTaskTotEt::~AliAnalysisTaskTotEt() {//Destructor
103 // fOutputList->Clear();
106 //delete fSparseHistRecVsMc;
107 //delete fSparseRecVsMc;
110 //________________________________________________________________________
111 void AliAnalysisTaskTotEt::UserCreateOutputObjects()
116 fMCAnalysis->CreateHistograms();
117 fRecAnalysis->CreateHistograms();
118 fOutputList = new TList;
119 fOutputList->SetOwner();
120 fRecAnalysis->FillOutputList(fOutputList);
122 fMCAnalysis->FillOutputList(fOutputList);
123 fHistEtRecvsEtMC = new TH2F("fHistEtRecvsEtMC", "Reconstructed E_{T} vs MC E_{T}", 1000, 0.000, 100, 1000, 0.0001, 100);
124 fHistEtRecOverEtMC = new TH2F("fHistEtRecOverEtMC", "Reconstructed E_{T} over MC E_{T} vs centrality", 1000, 0.00, 2.0, 11, -0.5, 10.5);
125 fHistDiffEtRecEtMCOverEtMC = new TH2F("fHistDiffEtRecEtMCOverEtMC", "fHistDiffEtRecEtMCOverEtMC", 10000, 0.0, 1000, 1000, -5, 5);
126 fOutputList->Add(fHistEtRecvsEtMC);
127 fOutputList->Add(fHistEtRecOverEtMC);
128 fOutputList->Add(fHistDiffEtRecEtMCOverEtMC);
130 Bool_t selectPrimaries=kTRUE;
131 if(fRecAnalysis->DataSet()==2010 || fRecAnalysis->DataSet()==20111||fRecAnalysis->DataSet()==2009){
132 if(fRecAnalysis->DataSet()==2010)cout<<"Setting track cuts for the 2010 p+p collisions at 7 TeV"<<endl;
134 if(fRecAnalysis->DataSet()==2009){cout<<"Setting track cuts for the 2010 p+p collisions at 900 GeV"<<endl;}
135 else{cout<<"Setting track cuts for the 2011 p+p collisions at 2.76 TeV"<<endl;}
137 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
138 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
139 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
140 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
141 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
142 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
143 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
144 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
146 if(fRecAnalysis->DataSet()==20100){
147 cout<<"Setting track cuts for the 2010 Pb+Pb collisions at 2.76 TeV"<<endl;
148 //cout<<"Warning: Have not set 2010 track cuts yet!!"<<endl;
149 fEsdtrackCutsITSTPC = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
150 fEsdtrackCutsITSTPC->SetName("fEsdTrackCuts");
151 fEsdtrackCutsTPC = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
152 fEsdtrackCutsTPC->SetName("fEsdTrackCutsTPCOnly");
153 //ITS stand alone cuts - similar to 2009 cuts but with only ITS hits required
154 fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
155 // fEsdtrackCutsITS = AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
156 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
160 fOutputList->Add(fEsdtrackCutsITSTPC);
161 fOutputList->Add(fEsdtrackCutsTPC);
162 fOutputList->Add(fEsdtrackCutsITS);
163 if (fEsdtrackCutsITSTPC && fEsdtrackCutsTPC) {
164 fRecAnalysis->SetITSTrackCuts( GetITSTrackCuts());
166 fMCAnalysis->SetITSTrackCuts( GetITSTrackCuts());
167 fRecAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
169 fMCAnalysis->SetTPCITSTrackCuts( GetTPCITSTrackCuts());
170 fRecAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
172 fMCAnalysis->SetTPCOnlyTrackCuts( GetTPCOnlyTrackCuts());
176 Printf("Error: no track cuts!");
181 //________________________________________________________________________
182 void AliAnalysisTaskTotEt::UserExec(Option_t *)
185 fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
188 Printf("ERROR: Could not retrieve event");
192 //Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber());
194 AliCentrality *cent = GetCentralityObject();
196 //if (res == 0 && cent)
198 if (IsPhysicsSelected())
200 fRecAnalysis->SetCentralityObject(cent);
201 fRecAnalysis->AnalyseEvent(fESDEvent);
203 AliMCEvent* mcEvent = MCEvent();
206 fMCAnalysis->SetCentralityObject(cent);
207 fMCAnalysis->AnalyseEvent(mcEvent, fESDEvent);
208 //fMCAnalysis->AnalyseEvent(mcEvent);
212 fHistEtRecvsEtMC->Fill(fRecAnalysis->GetTotNeutralEtAcc(), fMCAnalysis->GetTotNeutralEtAcc());
213 if(fMCAnalysis->GetTotNeutralEtAcc()) fHistEtRecOverEtMC->Fill(fRecAnalysis->GetTotNeutralEt()/fMCAnalysis->GetTotNeutralEtAcc(), cent->GetCentralityClass10("V0M"));
214 if(fMCAnalysis->GetTotNeutralEtAcc()) fHistDiffEtRecEtMCOverEtMC->Fill(fMCAnalysis->GetTotNeutralEt(), (fRecAnalysis->GetTotNeutralEt()-fMCAnalysis->GetTotNeutralEt())/fMCAnalysis->GetTotNeutralEt());
219 PostData(1, fOutputList);
222 //________________________________________________________________________
223 void AliAnalysisTaskTotEt::Terminate(Option_t *)
225 // Draw result to the screen
226 // Called once at the end of the query
228 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
230 printf("ERROR: Output list not available\n");