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>
17 #include "THnSparse.h"
19 #include "AliESDEvent.h"
20 #include "AliMCEvent.h"
21 #include "AliESDtrackCuts.h"
23 #include "AliAnalysisTaskTotEt.h"
24 #include "AliAnalysisEtReconstructedPhos.h"
25 #include "AliAnalysisEtReconstructedEmcal.h"
26 #include "AliAnalysisEtMonteCarloPhos.h"
27 #include "AliAnalysisEtMonteCarloEmcal.h"
30 #include <AliCentrality.h>
34 ClassImp(AliAnalysisTaskTotEt)
36 //________________________________________________________________________
37 AliAnalysisTaskTotEt::AliAnalysisTaskTotEt(const char *name, Bool_t isMc) :
38 AliAnalysisTaskTransverseEnergy(name, isMc)
41 ,fSparseHistRecVsMc(0)
46 // select if we should use EMCal or PHOS class
47 // PHOS by default, EMCal if name string contains EMC
50 if (t.Contains("EMC")) {
51 if (fMCConfigFile.Length()) {
52 cout<<"Rereading AliAnalysisEtMonteCarloEmcal configuration file..."<<endl;
53 gROOT->LoadMacro(fMCConfigFile);
54 fMCAnalysis = (AliAnalysisEtMonteCarloEmcal *) gInterpreter->ProcessLine("ConfigEtMonteCarlo()");
57 if (fRecoConfigFile.Length()) {
58 cout<<"Rereading AliAnalysisEtReconstructedEmcal configuration file..."<<endl;
59 gROOT->LoadMacro(fRecoConfigFile);
60 fRecAnalysis = (AliAnalysisEtReconstructedEmcal *) gInterpreter->ProcessLine("ConfigEtReconstructed()");
64 if (fMCConfigFile.Length()) {
65 cout<<"Rereading AliAnalysisEtMonteCarloPhos configuration file..."<<endl;
66 gROOT->LoadMacro(fMCConfigFile);
68 fMCAnalysis = (AliAnalysisEtMonteCarloPhos *) gInterpreter->ProcessLine("ConfigEtMonteCarlo(false)");
69 cout << fMCAnalysis << endl;
72 if (fRecoConfigFile.Length()) {
73 cout<<"Rereading AliAnalysisEtReconstructedPhos configuration file..."<<endl;
74 gROOT->LoadMacro(fRecoConfigFile);
75 fRecAnalysis = (AliAnalysisEtReconstructedPhos *) gInterpreter->ProcessLine("ConfigEtReconstructed(false)");
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
83 DefineOutput(1, TList::Class());
86 AliAnalysisTaskTotEt::~AliAnalysisTaskTotEt() {//Destructor
87 // fOutputList->Clear();
92 //________________________________________________________________________
93 void AliAnalysisTaskTotEt::UserCreateOutputObjects()
97 fMCAnalysis->CreateHistograms();
98 fRecAnalysis->CreateHistograms();
99 fOutputList = new TList;
100 fOutputList->SetOwner();
101 fRecAnalysis->FillOutputList(fOutputList);
102 fMCAnalysis->FillOutputList(fOutputList);
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);
106 fOutputList->Add(fHistEtRecvsEtMC);
107 fOutputList->Add(fHistEtRecOverEtMC);
108 fOutputList->Add(fHistDiffEtRecEtMCOverEtMC);
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");
121 if (fRecAnalysis->DataSet()==2010) {
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;
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::GetStandardITSPureSATrackCuts2010(kTRUE,kFALSE);//we do want primaries but we do not want to require PID info
130 fEsdtrackCutsITS->SetName("fEsdTrackCutsITS");
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());
146 Printf("Error: no track cuts!");
151 //________________________________________________________________________
152 void AliAnalysisTaskTotEt::UserExec(Option_t *)
155 fESDEvent = dynamic_cast<AliESDEvent*>(InputEvent());
158 Printf("ERROR: Could not retrieve event");
162 Int_t res = CheckPhysicsSelection(fESDEvent->GetRunNumber());
164 AliCentrality *cent = GetCentralityObject();
166 if (res == 0 && cent)
168 if (IsPhysicsSelected())
170 fRecAnalysis->SetCentralityObject(cent);
171 fRecAnalysis->AnalyseEvent(fESDEvent);
173 AliMCEvent* mcEvent = MCEvent();
176 fMCAnalysis->SetCentralityObject(cent);
177 fMCAnalysis->AnalyseEvent(mcEvent, fESDEvent);
178 //fMCAnalysis->AnalyseEvent(mcEvent);
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());
189 PostData(1, fOutputList);
192 //________________________________________________________________________
193 void AliAnalysisTaskTotEt::Terminate(Option_t *)
195 // Draw result to the screen
196 // Called once at the end of the query
198 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
200 printf("ERROR: Output list not available\n");