16 #include "AliTriggerAnalysis.h" 17 #include "AliPhysicsSelection.h" 19 #include "AliHeader.h" 20 #include "AliGenEventHeader.h" 21 #include "AliESDEvent.h" 22 #include "AliAODHandler.h" 23 #include "AliMultiplicity.h" 24 #include "AliInputEventHandler.h" 26 #include "AliMCEvent.h" 31 #include "AliMultiplicity.h" 35 #include <TDirectory.h> 57 DGUARD(fDebug, 3,
"Default CTOR of AliCentralMCCorrectionsTask");
77 DGUARD(fDebug, 3,
"Named CTOR of AliCentralMCCorrectionsTask: %s",name);
101 const AliMultiplicity* spdmult = esd.GetMultiplicity();
104 for(
Int_t j = 0; j< spdmult->GetNumberOfTracklets();j++)
105 vb.
fClusters->Fill(spdmult->GetEta(j),spdmult->GetPhi(j));
107 for(
Int_t j = 0; j< spdmult->GetNumberOfSingleClusters();j++) {
108 Double_t eta = -TMath::Log(TMath::Tan(spdmult->GetThetaSingle(j)/2.));
109 vb.
fClusters->Fill(eta, spdmult->GetPhiSingle(j));
150 std::cout <<
" # of phi bins: " <<
fNPhiBins <<
"\n" 152 <<
" Eta cut-off: " <<
fEtaCut <<
"\n" 155 gROOT->IncreaseDirLevel();
157 gROOT->DecreaseDirLevel();
177 fHits->SetTitle(
"Hits");
178 fHits->SetDirectory(0);
209 out->SetName(GetName());
213 TList* l =
static_cast<TList*
>(input->FindObject(GetName()));
215 AliError(Form(
"List %s not found in %s", GetName(), input->GetName()));
220 TH2D* hits =
static_cast<TH2D*
>(l->FindObject(
"hits"));
221 TH2D* clus =
static_cast<TH2D*
>(l->FindObject(
"clusters"));
222 TH2D* prim =
static_cast<TH2D*
>(l->FindObject(
"primary"));
223 if (!hits || !prim) {
224 AliError(Form(
"Missing histograms: %p, %p", hits, prim));
229 TH2D* secMapEff =
static_cast<TH2D*
>(clus->Clone(
"secMapEff"));
230 TH2D* secMapHit =
static_cast<TH2D*
>(hits->Clone(
"secMapHit"));
231 secMapEff->SetTitle(
"2^{nd} map from clusters");
232 secMapEff->SetDirectory(0);
233 secMapHit->SetTitle(
"2^{nd} map from MC hits");
234 secMapHit->SetDirectory(0);
237 secMapEff->Divide(prim);
238 secMapHit->Divide(prim);
242 "Acceptance correction for SPD (from 2^{nd} map)" ,
246 TH1D* accHit =
static_cast<TH1D*
>(accEff->Clone(
"accHit"));
247 accHit->SetTitle(
"Acceptance correction for SPD (from clusters)");
250 TH2* dia =
static_cast<TH2D*
>(clus->Clone(
"diagnostics"));
251 dia->SetTitle(
"Scaled cluster density");
254 Int_t nTotal = secMapHit->GetNbinsY();
255 Int_t nEta = secMapHit->GetNbinsX();
257 for(
Int_t xx = 1; xx <= nEta; xx++) {
258 Double_t eta = secMapHit->GetXaxis()->GetBinCenter(xx);
259 Bool_t ins = TMath::Abs(eta) <= etaCut;
263 for (
Int_t yy = 1; yy <= nTotal; yy++) {
265 mm = TMath::Max(mm, c);
272 for(
Int_t yy = 1; yy <=nTotal; yy++) {
274 secMapEff->SetBinContent(xx,yy,0.);
275 secMapEff->SetBinError(xx,yy,0.);
276 secMapHit->SetBinContent(xx,yy,0.);
277 secMapHit->SetBinError(xx,yy,0.);
278 dia->SetBinContent(xx,yy,0);
283 if(secMapEff->GetBinContent(xx,yy) > 0.9) {
288 secMapEff->SetBinContent(xx,yy,0.);
289 secMapEff->SetBinError(xx,yy,0.);
294 Double_t s = (mm < 1e-6) ? 0 : c / mm;
295 dia->SetBinContent(xx,yy,s);
300 secMapHit->SetBinContent(xx,yy,0);
301 secMapHit->SetBinError(xx,yy,0);
307 Double_t accXX = float(nOKHit) / nTotal;
308 if (accXX < 0.2) accXX = 0;
309 accHit->SetBinContent(xx, accXX);
313 accXX = float(nOKEff) / nTotal;
314 if (accXX < 0.2) accXX = 0;
315 accEff->SetBinContent(xx, accXX);
318 TH2D* secMap = (effectiveCorr ? secMapEff : secMapHit);
319 TH2D* secMapAlt = (effectiveCorr ? secMapHit : secMapEff);
320 TH1D* acc = (effectiveCorr ? accEff : accHit);
321 TH1D* accAlt = (effectiveCorr ? accHit : accEff);
322 out->Add(secMap->Clone(
"secMap"));
323 out->Add(secMapAlt->Clone());
324 out->Add(acc->Clone(
"acc"));
325 out->Add(accAlt->Clone());
326 out->Add(dia->Clone());
void Print(Option_t *option="") const
AliCentralCorrAcceptance * fAccCorr
void SetVertexAxis(const TAxis &axis)
AliBaseMCCorrectionsTask::VtxBin * CreateVtxBin(Double_t low, Double_t high)
Bool_t Calculate(const AliMCEvent &event, const TVector3 &ip, TH2D &output, TH2D *primary)
AliSPDMCTrackDensity fTrackDensity
virtual void CreateCorrections(TList *results)
TList * CreateOutputObjects(TList *list)
Various utilities used in PWGLF/FORWARD.
virtual TList * CreateOutputObjects(TList *list)
void SetVertexAxis(const TAxis &axis)
#define DGUARD(L, N, F,...)
void Terminate(const TList *i, TList *o, UShort_t iVz, Bool_t effective, Double_t etaCut, Double_t accCut, AliCentralCorrSecondaryMap *map, AliCentralCorrAcceptance *acorr)
AliCentralMCCorrectionsTask()
Bool_t SetCorrection(Double_t v, TH2D *h)
virtual Bool_t FinalizeVtxBin(AliBaseMCCorrectionsTask::VtxBin *bin, UShort_t iVz)
AliCentralCorrSecondaryMap * fSecCorr
Bool_t SetCorrection(Double_t v, TH1D *h)
void Print(Option_t *option="") const
void Print(Option_t *option="") const
Bool_t ProcessESD(const AliESDEvent &esd, const AliMCEvent &mc, AliBaseMCCorrectionsTask::VtxBin &bin, const TVector3 &ip)