1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
18 // AliAnalysisTaskVZEROEqFactorTask.cxx, February 12th 2014
19 // --- David Dobrigkeit Chinellato
21 // This task is meant to set correct VZERO equalization factors in AliESDRun
22 // so that AliCentrality makes use of the correct values. NB This task has to
23 // be executed prior to AliCentrality for this to work properly! It is meant
24 // to be used as a Tender.
26 // Comments, Suggestions, Bug reports: Please send them to:
27 // --- daviddc@ifi.unicamp.br
29 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
35 //class AliMCEventHandler;
44 #include <Riostream.h>
50 #include "THnSparse.h"
57 #include "AliAnalysisTaskSE.h"
58 #include "AliESDEvent.h"
59 #include "AliAODEvent.h"
60 #include "AliV0vertexer.h"
61 #include "AliCascadeVertexer.h"
62 #include "AliESDpid.h"
63 #include "AliESDRun.h"
64 #include "AliESDtrack.h"
65 #include "AliESDtrackCuts.h"
66 #include "AliInputEventHandler.h"
67 #include "AliAnalysisManager.h"
68 #include "AliMCEventHandler.h"
69 #include "AliMCEvent.h"
72 #include "AliCFContainer.h"
73 #include "AliMultiplicity.h"
74 #include "AliAODMCParticle.h"
75 #include "AliESDcascade.h"
76 #include "AliAODcascade.h"
77 #include "AliESDUtils.h"
78 #include "AliGenEventHeader.h"
80 #include "AliAnalysisUtils.h"
81 #include "AliAnalysisTaskVZEROEqFactorTask.h"
82 #include "AliCDBManager.h"
83 #include "AliCDBStorage.h"
84 #include "AliCDBEntry.h"
86 #include "AliVZEROCalibData.h"
91 ClassImp(AliAnalysisTaskVZEROEqFactorTask)
93 AliAnalysisTaskVZEROEqFactorTask::AliAnalysisTaskVZEROEqFactorTask()
94 : AliAnalysisTaskSE(), fListHist(0), fEqFactors(0), fCalibData(0), fRunNumber(0), fHistEventCounter(0), fisAOD(kFALSE)
95 //------------------------------------------------
101 AliAnalysisTaskVZEROEqFactorTask::AliAnalysisTaskVZEROEqFactorTask(const char *name)
102 : AliAnalysisTaskSE(name), fListHist(0), fEqFactors(0), fCalibData(0), fRunNumber(0), fHistEventCounter(0), fisAOD(kFALSE)
105 DefineOutput(1, TList::Class());
109 AliAnalysisTaskVZEROEqFactorTask::~AliAnalysisTaskVZEROEqFactorTask()
111 //------------------------------------------------
113 //------------------------------------------------
121 //________________________________________________________________________
122 void AliAnalysisTaskVZEROEqFactorTask::UserCreateOutputObjects()
124 //------------------------------------------------
125 // Output: Empty at the moment
126 //------------------------------------------------
128 fListHist = new TList();
129 fListHist->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
131 if(! fHistEventCounter ) {
132 //Histogram Output: Event-by-Event
133 // --- Single "Events Processed" Counter at this stage
134 fHistEventCounter = new TH1D( "fHistEventCounter", ";Evt. Sel. Step;Count",4,0,4);
135 fHistEventCounter->GetXaxis()->SetBinLabel(1, "Processed");
136 fHistEventCounter->GetXaxis()->SetBinLabel(2, "Has ESD");
137 fHistEventCounter->GetXaxis()->SetBinLabel(3, "Has ESDRun");
138 fHistEventCounter->GetXaxis()->SetBinLabel(4, "Rewrote EqFactors");
139 fListHist->Add(fHistEventCounter);
143 PostData(1, fListHist);
144 }// end UserCreateOutputObjects
147 //________________________________________________________________________
148 void AliAnalysisTaskVZEROEqFactorTask::UserExec(Option_t *)
151 // Called for each event
153 AliESDEvent *lESDevent = 0x0;
154 AliAODEvent *lAODevent = 0x0;
155 // Connect to the InputEvent
156 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
158 // Appropriate for ESD analysis!
159 //Count Processed Events
160 fHistEventCounter->Fill(0.5);
163 lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
165 AliError("AOD event not available \n");
169 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
171 AliError("ESD event not available \n");
175 fHistEventCounter->Fill(1.5);
178 //Acquire ESDRun object - Will be needed to invoke AliESDEvent::SetVZEROEqFactors
180 // const AliESDRun *lESDRun;
182 runNumber = lAODevent->GetRunNumber();
184 // lESDRun = lESDevent->GetESDRun();
186 // AliError("ERROR: lESDRun not available, won't be able to write Equalization Factors! Exiting. \n");
189 runNumber = lESDevent->GetRunNumber();
191 fHistEventCounter->Fill(2.5);
193 //CDB Processing only necessary if Run Number changed! Check for change (no need to redo this every event)
194 if( runNumber != fRunNumber ){
195 AliWarning("Run Changed! Reloading CDB values!");
196 //Load CDB Entries - Mirroring AliVZEROReconstructor
197 AliCDBManager *cdbmanager = AliCDBManager::Instance();
198 cdbmanager->SetDefaultStorage("raw://");
199 cdbmanager->SetRun(runNumber);
200 if(!cdbmanager) AliFatal("No CDB Manager !");
201 AliCDBEntry *entry7 = cdbmanager->Get("VZERO/Calib/EqualizationFactors");
202 if (!entry7) AliFatal("VZERO equalization factors are not found in OCDB !");
203 fEqFactors = (TH1F*)entry7->GetObject();
205 //Load Calibration object fCalibData
206 fCalibData = GetCalibData(); // Mirror AliVZEROReconstructor Functionality
207 fRunNumber = runNumber; //New Run
209 if(!fCalibData) AliFatal("No VZERO CalibData Object found!");
213 Float_t factorSum = 0;
214 for(Int_t i = 0; i < 64; ++i) {
215 factors[i] = fEqFactors->GetBinContent(i+1)*fCalibData->GetMIPperADC(i);
216 factorSum += factors[i];
218 for(Int_t i = 0; i < 64; ++i) {
219 factors[i] *= (64./factorSum);
222 // Set the equalized factors
224 lAODevent->SetVZEROEqFactors(factors);
226 lESDevent->SetVZEROEqFactors(factors);
228 fHistEventCounter->Fill(3.5);
231 PostData(1, fListHist);
234 //________________________________________________________________________
235 void AliAnalysisTaskVZEROEqFactorTask::Terminate(Option_t *)
237 // Draw result to the screen
238 // Called once at the end of the query
240 TList *cRetrievedList = 0x0;
241 cRetrievedList = (TList*)GetOutputData(1);
243 Printf("ERROR - AliAnalysisTaskVZEROEqFactorTask : ouput data container list not available\n");
247 fHistEventCounter = dynamic_cast<TH1D*> ( cRetrievedList->FindObject("fHistEventCounter") );
248 if (!fHistEventCounter) {
249 Printf("ERROR - AliAnalysisTaskVZEROEqFactorTask : fHistEventCounter not available");
253 TCanvas *canCheck = new TCanvas("AliAnalysisTaskVZEROEqFactorTask","V0 Multiplicity",10,10,510,510);
254 canCheck->cd(1)->SetLogy();
256 fHistEventCounter->SetMarkerStyle(22);
257 fHistEventCounter->DrawCopy("E");
260 //_____________________________________________________________________________
261 AliVZEROCalibData* AliAnalysisTaskVZEROEqFactorTask::GetCalibData() const
263 // Gets calibration object for VZERO set
265 AliCDBManager *man = AliCDBManager::Instance();
266 AliCDBEntry *entry=0;
267 entry = man->Get("VZERO/Calib/Data");
268 AliVZEROCalibData *calibdata = 0;
269 if (entry) calibdata = (AliVZEROCalibData*) entry->GetObject();
270 if (!calibdata) AliFatal("No calibration data from calibration database !");