// $Id: $ // // Constantin's Task // // Author: C.Loizides #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "AliESDMuonTrack.h" #include "AliAODEvent.h" #include "AliAnalysisManager.h" #include "AliAnalysisUtils.h" #include "AliCentrality.h" #include "AliEMCALGeoParams.h" #include "AliEMCALGeometry.h" #include "AliESDEvent.h" #include "AliEmcalJet.h" #include "AliExternalTrackParam.h" #include "AliInputEventHandler.h" #include "AliLog.h" #include "AliPicoTrack.h" #include "AliTrackerBase.h" #include "AliVCluster.h" #include "AliVEventHandler.h" #include "AliVParticle.h" #include "AliVTrack.h" #include "AliAnalysisTaskCLQA.h" ClassImp(AliAnalysisTaskCLQA) //________________________________________________________________________ AliAnalysisTaskCLQA::AliAnalysisTaskCLQA() : AliAnalysisTaskEmcal("AliAnalysisTaskCLQA", kTRUE), fDo2013VertexCut(1), fDoTracking(1), fDoMuonTracking(0), fDoCumulants(0), fDoCumNtuple(0), fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15), fCumMbins(250), fCentCL1In(0), fCentV0AIn(0), fNtupCum(0), fNtupCumInfo(0), fNtupZdcInfo(0) { // Default constructor. for (Int_t i=0;i<1000;++i) fHists[i] = 0; } //________________________________________________________________________ AliAnalysisTaskCLQA::AliAnalysisTaskCLQA(const char *name) : AliAnalysisTaskEmcal(name, kTRUE), fDo2013VertexCut(1), fDoTracking(1), fDoMuonTracking(0), fDoCumulants(0), fDoCumNtuple(0), fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15), fCumMbins(250), fCentCL1In(0), fCentV0AIn(0), fNtupCum(0), fNtupCumInfo(0), fNtupZdcInfo(0) { // Standard constructor. for (Int_t i=0;i<1000;++i) fHists[i] = 0; } //________________________________________________________________________ AliAnalysisTaskCLQA::~AliAnalysisTaskCLQA() { // Destructor } //________________________________________________________________________ Bool_t AliAnalysisTaskCLQA::FillHistograms() { // Fill histograms. AliVEvent *event = InputEvent(); AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); UInt_t trig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected(); for (Int_t i=0;i<31;++i) { if (trig & (1<Fill(trig); } Double_t vz = event->GetPrimaryVertex()->GetZ(); fHists[1]->Fill(vz); Int_t run = event->GetRunNumber(); Int_t vzn = event->GetPrimaryVertex()->GetNContributors(); if ((vzn<1)&&(run>0)) return kTRUE; fHists[2]->Fill(vz); if (TMath::Abs(vz)>10) return kTRUE; if (fDo2013VertexCut) { if ((run>=188356&&run<=188366) || (run>=195344&&run<=197388)) { AliAnalysisUtils anau; if (anau.IsFirstEventInChunk(event)) return kFALSE; if (!anau.IsVertexSelected2013pA(event)) return kFALSE; } } // accepted events fHists[9]->Fill(1,run); AliCentrality *cent = InputEvent()->GetCentrality(); Double_t v0acent = cent->GetCentralityPercentile("V0A"); fHists[10]->Fill(v0acent); Double_t znacent = cent->GetCentralityPercentile("ZNA"); fHists[11]->Fill(znacent); if (fDoTracking) { const Int_t ntracks = fTracks->GetEntries(); if (fTracks) { for (Int_t i =0; i(fTracks->At(i)); if (!track) continue; if (track->Charge()==0) continue; Double_t phi = track->Phi(); Double_t eta = track->Eta(); Double_t pt = track->Pt(); fHists[20]->Fill(phi,eta); fHists[21]->Fill(phi,pt); fHists[22]->Fill(eta,pt); if (TMath::Abs(eta)<0.8) { fHists[23]->Fill(pt,v0acent); fHists[24]->Fill(pt,znacent); } AliPicoTrack *picot = dynamic_cast(track); if (picot) { Int_t ttype = picot->GetTrackType(); fHists[25+ttype]->Fill(phi,pt); if (picot->IsEMCAL()) { Double_t dphi = TVector2::Phi_mpi_pi(phi-picot->GetTrackPhiOnEMCal()); fHists[28]->Fill(dphi,pt); } } } } } if (fDoMuonTracking) { AliAODEvent *aod = dynamic_cast(InputEvent()); if (aod) { for (Int_t iMu = 0; iMuGetNumberOfTracks(); ++iMu) { AliAODTrack* muonTrack = aod->GetTrack(iMu); if (!muonTrack) continue; if (!muonTrack->IsMuonTrack()) continue; Double_t dThetaAbs = TMath::ATan(muonTrack->GetRAtAbsorberEnd()/505.)* TMath::RadToDeg(); if ((dThetaAbs<2.) || (dThetaAbs>10.)) continue; Double_t dEta = muonTrack->Eta(); if ((dEta<-4.) || (dEta>-2.5)) continue; if (0) { if (muonTrack->GetMatchTrigger()<0.5) continue; } Double_t ptMu = muonTrack->Pt(); Double_t etaMu = muonTrack->Eta(); Double_t phiMu = muonTrack->Phi(); fHists[50]->Fill(phiMu,etaMu); fHists[51]->Fill(phiMu,ptMu); fHists[52]->Fill(etaMu,ptMu); fHists[53]->Fill(ptMu,v0acent); fHists[54]->Fill(ptMu,znacent); } } else { AliESDEvent *esd = dynamic_cast(InputEvent()); if (esd) { for (Int_t iMu = 0; iMuGetNumberOfMuonTracks(); ++iMu) { AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iMu); if (!muonTrack) continue; if (!muonTrack->ContainTrackerData()) continue; Double_t thetaTrackAbsEnd = TMath::ATan(muonTrack->GetRAtAbsorberEnd()/505.) * TMath::RadToDeg(); if ((thetaTrackAbsEnd < 2.) || (thetaTrackAbsEnd > 10.)) continue; Double_t eta = muonTrack->Eta(); if ((eta < -4.) || (eta > -2.5)) return kFALSE; if (0) { if (!muonTrack->ContainTriggerData()) continue; if (muonTrack->GetMatchTrigger() < 0.5) continue; } } } } } return kTRUE; } //________________________________________________________________________ Bool_t AliAnalysisTaskCLQA::RetrieveEventObjects() { // Retrieve event objects. if (!AliAnalysisTaskEmcal::RetrieveEventObjects()) return kFALSE; return kTRUE; } //________________________________________________________________________ Bool_t AliAnalysisTaskCLQA::Run() { // Run various functions. RunCumulants(fCumMmin,fCumPtMin,fCumPtMax,fCumEtaMin,fCumEtaMax); return kTRUE; } //________________________________________________________________________ void AliAnalysisTaskCLQA::RunCumulants(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax) { // Run cumulant analysis. if (!fDoCumulants) return; if (!fTracks) return; Bool_t isMC = 0; TString tname(fTracks->GetName()); if (tname.Contains("mc")) isMC = 1; const Int_t ntracks = fTracks->GetEntries(); Int_t Mall=0,M=0,Mall2=0; Double_t ptmaxall=0,ptsumall=0,pt2sumall=0,ptsumall2=0; Double_t tsa00=0,tsa10=0,tsa11=0; Double_t Q2r=0,Q2i=0; Double_t Q3r=0,Q3i=0; Double_t Q4r=0,Q4i=0; Double_t Q6r=0,Q6i=0; Double_t mpt=0,mpt2=0,ptmaxq=0; Double_t ts00=0,ts10=0,ts11=0; Double_t v0ach=0, v0cch=0; Double_t cl1ch=0; for (Int_t i =0; i(fTracks->At(i)); if (!track) continue; if (track->Charge()==0) continue; Double_t eta = track->Eta(); if ((eta<5.1)&&(eta>2.8)) ++v0ach; else if ((eta>-3.7)&&(eta<-1.7)) ++v0cch; if (TMath::Abs(eta)<1.4) { ++cl1ch; } if ((etaetamax)) continue; Double_t pt = track->Pt(); if (pt>ptmaxall) ptmaxall = pt; if (pt>1) { ptsumall2 += pt; ++Mall2; } ptsumall +=pt; pt2sumall +=pt*pt; Double_t px = track->Px(); Double_t py = track->Py(); tsa00 += px*px/pt; tsa10 += px*py/pt; tsa11 += py*py/pt; ++Mall; if ((ptptmax)) continue; if (pt>ptmaxq) ptmaxq = pt; Double_t phi = track->Phi(); ++M; mpt += pt; mpt2 += pt*pt; ts00 += px*px/pt; ts10 += px*py/pt; ts11 += py*py/pt; Q2r += TMath::Cos(2*phi); Q2i += TMath::Sin(2*phi); Q3r += TMath::Cos(3*phi); Q3i += TMath::Sin(3*phi); Q4r += TMath::Cos(4*phi); Q4i += TMath::Sin(4*phi); Q6r += TMath::Cos(6*phi); Q6i += TMath::Sin(6*phi); } if (M<=1) return; Int_t pmult=0; Double_t v2g=0; Double_t v3g=0; for (Int_t i=0; i(fTracks->At(i)); if (!track1) continue; if (track1->Charge()==0) continue; Double_t eta1 = track1->Eta(); if ((eta1etamax)) continue; Double_t pt1 = track1->Pt(); if ((pt1ptmax)) continue; Double_t phi1 = track1->Phi(); for (Int_t j = i+1; j(fTracks->At(j)); if (!track2) continue; if (track2->Charge()==0) continue; Double_t eta2 = track2->Eta(); if ((eta2etamax)) continue; Double_t pt2 = track2->Pt(); if ((pt2ptmax)) continue; Double_t deta=TMath::Abs(eta2-eta1); if(deta<1) continue; Double_t dphi=TVector2::Phi_0_2pi(phi1-track2->Phi()); pmult++; v2g+=TMath::Cos(2*dphi); v3g+=TMath::Cos(3*dphi); } } if (pmult>0) { v2g/=pmult; v3g/=pmult; } std::complex q2(Q2r,Q2i); std::complex q3(Q3r,Q3i); std::complex q4(Q4r,Q4i); std::complex q6(Q6r,Q6i); Double_t Q22 = std::abs(q2)*std::abs(q2); Double_t Q32 = std::abs(q3)*std::abs(q3); Double_t Q42 = std::abs(q4)*std::abs(q4); Double_t Q62 = std::abs(q6)*std::abs(q6); Double_t Q32re = std::real(q6*std::conj(q3)*std::conj(q3)); Double_t Q42re = std::real(q4*std::conj(q2)*std::conj(q2)); Double_t Q6are = std::real(q4*q2*std::conj(q2)*std::conj(q2)*std::conj(q2)); Double_t Q6bre = std::real(q6*std::conj(q2)*std::conj(q2)*std::conj(q2)); Double_t Q6cre = std::real(q6*std::conj(q4)*std::conj(q2)); Double_t tsall = -1; Double_t tsax = (tsa00+tsa11)*(tsa00+tsa11)-4*(tsa00*tsa11-tsa10*tsa10); if (tsax>=0) { Double_t l1 = 0.5*(tsa00+tsa11+TMath::Sqrt(tsax))/ptsumall; Double_t l2 = 0.5*(tsa00+tsa11-TMath::Sqrt(tsax))/ptsumall; tsall = 2*l2/(l1+l2); } Double_t ts = -1; Double_t tsx = (ts00+ts11)*(ts00+ts11)-4*(ts00*ts11-ts10*ts10); if (tsx>=0) { Double_t l1 = 0.5*(ts00+ts11+TMath::Sqrt(tsx))/ptsumall; Double_t l2 = 0.5*(ts00+ts11-TMath::Sqrt(tsx))/ptsumall; ts = 2*l2/(l1+l2); } if (isMC) { fHists[106]->Fill(cl1ch); fHists[107]->Fill(v0ach); fHists[108]->Fill(v0cch); AliCentrality *cent = InputEvent()->GetCentrality(); if (fCentCL1In) { cent->SetCentralityCL1(100*fCentCL1In->GetBinContent(fCentCL1In->FindBin(cl1ch))); cent->SetQuality(0); } if (fCentV0AIn) { cent->SetCentralityV0A(100*fCentV0AIn->GetBinContent(fCentV0AIn->FindBin(v0ach))); cent->SetQuality(0); } } AliAnalysisUtils anau; AliVEvent *event = InputEvent(); AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager(); fNtupCumInfo->fTrig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected(); fNtupCumInfo->fRun = event->GetRunNumber(); fNtupCumInfo->fVz = event->GetPrimaryVertex()->GetZ(); fNtupCumInfo->fIsFEC = anau.IsFirstEventInChunk(event); fNtupCumInfo->fIsVSel = anau.IsVertexSelected2013pA(event); fNtupCumInfo->fIsP = event->IsPileupFromSPD(3/*minContributors*/, 0.8/*minZdist*/, 3./*nSigmaZdist*/, 2./*nSigmaDiamXY*/, 5./*nSigmaDiamZ*/); fNtupCumInfo->fMall = Mall; fNtupCumInfo->fMall2 = Mall2; fNtupCumInfo->fPtMaxall = ptmaxall; fNtupCumInfo->fMPtall = ptsumall/Mall; fNtupCumInfo->fMPt2all = pt2sumall/Mall; if (Mall2>0) fNtupCumInfo->fMPtall2 = ptsumall2/Mall2; else fNtupCumInfo->fMPtall2 = -1; fNtupCumInfo->fTSall = tsall; fNtupCumInfo->fM = M; fNtupCumInfo->fQ2abs = Q22; fNtupCumInfo->fQ4abs = Q42; fNtupCumInfo->fQ42re = Q42re; fNtupCumInfo->fCos2phi = Q2r; fNtupCumInfo->fSin2phi = Q2i; fNtupCumInfo->fPtMax = ptmaxq; fNtupCumInfo->fMPt = mpt/M; fNtupCumInfo->fMPt2 = mpt2/M; fNtupCumInfo->fTS = ts; if (isMC) { fNtupCumInfo->fMV0M = v0ach + v0cch; } else { AliVVZERO *vzero = InputEvent()->GetVZEROData(); fNtupCumInfo->fMV0M = vzero->GetMTotV0A()+vzero->GetMTotV0C(); } AliCentrality *cent = InputEvent()->GetCentrality(); fNtupCumInfo->fCl1 = cent->GetCentralityPercentile("CL1"); fNtupCumInfo->fV0M = cent->GetCentralityPercentile("V0M"); fNtupCumInfo->fV0MEq = cent->GetCentralityPercentile("V0MEq"); fNtupCumInfo->fV0A = cent->GetCentralityPercentile("V0A"); fNtupCumInfo->fV0AEq = cent->GetCentralityPercentile("V0AEq"); fNtupCumInfo->fZNA = cent->GetCentralityPercentile("ZNA"); AliVZDC *vZDC = InputEvent()->GetZDCData(); const Double_t *znaTowers = vZDC->GetZNATowerEnergy(); fNtupZdcInfo->fZna0 = znaTowers[0]; fNtupZdcInfo->fZna1 = znaTowers[1]; fNtupZdcInfo->fZna2 = znaTowers[2]; fNtupZdcInfo->fZna3 = znaTowers[3]; fNtupZdcInfo->fZna4 = znaTowers[4]; if (fDoCumNtuple && (M>=Mmin)) { fNtupCum->Fill(); } fHists[109]->Fill(fNtupCumInfo->fCl1); fHists[110]->Fill(fNtupCumInfo->fV0A); fHists[111]->Fill(fNtupCumInfo->fZNA); Bool_t fillCumHist = kTRUE; if (fillCumHist) { Int_t run = InputEvent()->GetRunNumber(); if (fDo2013VertexCut) { if ((run>=188356&&run<=188366) || (run>=195344&&run<=197388)) { if (anau.IsFirstEventInChunk(event)) fillCumHist = kFALSE; if (!anau.IsVertexSelected2013pA(event)) fillCumHist = kFALSE; } } Double_t vz = InputEvent()->GetPrimaryVertex()->GetZ(); if (TMath::Abs(vz)>10) fillCumHist = kFALSE; } if (fillCumHist) { AliVVZERO *vzero = InputEvent()->GetVZEROData(); Double_t v0a = vzero->GetMTotV0A(); Double_t v0c = vzero->GetMTotV0C(); Double_t v0m = vzero->GetMTotV0A()+vzero->GetMTotV0C(); fHists[112]->Fill(Mall); fHists[113]->Fill(M); fHists[117]->Fill(v0a,M); fHists[118]->Fill(v0c,M); fHists[119]->Fill(v0a+v0c,M); if (M>1) { fHists[114]->Fill(M,(Q22-M)/M/(M-1)); fHists[120]->Fill(M,(Q32-M)/M/(M-1)); fHists[122]->Fill(M,v2g); fHists[123]->Fill(M,v3g); } if (M>3) { Double_t qc4tmp = (Q22*Q22+Q42-2*Q42re-4*(M-2)*Q22+2*M*(M-3)); fHists[115]->Fill(M,qc4tmp/M/(M-1)/(M-2)/(M-3)); qc4tmp = (Q32*Q32+Q62-2*Q32re-4*(M-2)*Q32+2*M*(M-3)); fHists[121]->Fill(M,qc4tmp/M/(M-1)/(M-2)/(M-3)); } if (M>5) { Double_t qc6tmp = Q22*Q22*Q22 + 9*Q42*Q22 - 6*Q6are + 4*Q6bre - 12*Q6cre + 18*(M-4)*Q42re + 4*Q62 - 9*(M-4)*Q22*Q22 - 9*(M-4)*Q42 + 18*(M-2)*(M-5)*Q22 - 6*M*(M-4)*(M-5); fHists[116]->Fill(M,qc6tmp/M/(M-1)/(M-2)/(M-3)/(M-4)/(M-5)); } } if ((isMC) || ((TMath::Abs(fNtupCumInfo->fVz)<10) && !fNtupCumInfo->fIsFEC && fNtupCumInfo->fIsVSel)) { for (Int_t i =0; i(fTracks->At(i)); if (!track1) continue; Double_t phi1 = track1->Phi(); Double_t eta1 = track1->Eta(); Double_t pt1 = track1->Pt(); ((TH3*)fHists[103])->Fill(pt1,eta1,fNtupCumInfo->fCl1); ((TH3*)fHists[104])->Fill(pt1,eta1,fNtupCumInfo->fV0A); ((TH3*)fHists[105])->Fill(pt1,eta1,fNtupCumInfo->fZNA); if ((eta1etamax)) continue; if ((pt1ptmax)) continue; for (Int_t j =0; j(fTracks->At(j)); if (!track2) continue; Double_t eta2 = track2->Eta(); if ((eta2etamax)) continue; Double_t pt2 = track2->Pt(); if ((pt2ptmax)) continue; Double_t phi2 = track2->Phi(); Double_t deta = eta1-eta2; Double_t dphi = phi1-phi2; while (dphi<-TMath::Pi()) dphi+=TMath::TwoPi(); while (dphi>3*TMath::Pi()/2) dphi-=TMath::TwoPi(); ((TH3*)fHists[100])->Fill(dphi,deta,fNtupCumInfo->fCl1); ((TH3*)fHists[101])->Fill(dphi,deta,fNtupCumInfo->fV0A); ((TH3*)fHists[102])->Fill(dphi,deta,fNtupCumInfo->fZNA); } } } } //________________________________________________________________________ void AliAnalysisTaskCLQA::SetCumParams(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax) { // Set parameters for cumulants. fCumMmin = Mmin; fCumPtMin = ptmin; fCumPtMax = ptmax; fCumEtaMin = etamin; fCumEtaMax = etamax; } //________________________________________________________________________ void AliAnalysisTaskCLQA::UserCreateOutputObjects() { // Create histograms AliAnalysisTaskEmcal::UserCreateOutputObjects(); fHists[0] = new TH1D("fTrigBits",";bit",32,-0.5,31.5); fOutput->Add(fHists[0]); fHists[1] = new TH1D("fVertexZ",";vertex z (cm)",51,-25.5,25.5); fOutput->Add(fHists[1]); fHists[2] = new TH1D("fVertexZnc",";vertex z (cm)",51,-25.5,25.5); fOutput->Add(fHists[2]); fHists[9] = new TProfile("fAccepted","",1,0.5,1.5); fOutput->Add(fHists[9]); fHists[10] = new TH1D("fV0ACent",";percentile",20,0,100); fOutput->Add(fHists[10]); fHists[11] = new TH1D("fZNACent",";percentile",20,0,100); fOutput->Add(fHists[11]); if (fDoTracking) { fHists[20] = new TH2D("fPhiEtaTracks",";#phi;#eta",60,0,TMath::TwoPi(),20,-2,2); fHists[20]->Sumw2(); fOutput->Add(fHists[20]); fHists[21] = new TH2D("fPhiPtTracks",";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20); fHists[21]->Sumw2(); fOutput->Add(fHists[21]); fHists[22] = new TH2D("fEtaPtTracks",";#eta;p_{T} (GeV/c)",20,-2,2,40,0,20); fHists[22]->Sumw2(); fOutput->Add(fHists[22]); fHists[23] = new TH2D("fPtV0ATracks",";#p_{T} (GeV/c);percentile",100,0,20,20,0,100); fHists[23]->Sumw2(); fOutput->Add(fHists[23]); fHists[24] = new TH2D("fPtZNATracks",";#p_{T} (GeV/c);percentile",100,0,20,20,0,100); fHists[24]->Sumw2(); fOutput->Add(fHists[24]); fHists[25] = new TH2D("fPhiPtTracks_type0",";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20); fHists[25]->Sumw2(); fOutput->Add(fHists[25]); fHists[26] = new TH2D("fPhiPtTracks_type1",";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20); fHists[26]->Sumw2(); fOutput->Add(fHists[26]); fHists[27] = new TH2D("fPhiPtTracks_type2",";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20); fHists[27]->Sumw2(); fOutput->Add(fHists[27]); fHists[28] = new TH2D("fDPhiPtTracks",";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20); fHists[28]->Sumw2(); fOutput->Add(fHists[28]); } if (fDoMuonTracking) { fHists[50] = new TH2D("fPhiEtaMuonTracks",";#phi;#eta",60,0,TMath::TwoPi(),15,-4,-2.5); fHists[50]->Sumw2(); fOutput->Add(fHists[50]); fHists[51] = new TH2D("fPhiPtMuonTracks",";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),200,0,20); fHists[51]->Sumw2(); fOutput->Add(fHists[51]); fHists[52] = new TH2D("fEtaPtMuonTracks",";#eta;p_{T} (GeV/c)",15,-4,-2.5,200,0,20); fHists[52]->Sumw2(); fOutput->Add(fHists[52]); fHists[53] = new TH2D("fPtV0AMuonTracks",";#p_{T} (GeV/c);percentile",100,0,10,20,0,100); fHists[53]->Sumw2(); fOutput->Add(fHists[53]); fHists[54] = new TH2D("fPtZNAMuonTracks",";#p_{T} (GeV/c);percentile",100,0,10,20,0,100); fHists[54]->Sumw2(); fOutput->Add(fHists[54]); } if (fDoCumulants) { fHists[100] = new TH3D("fCumPhiEtaCl1",";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100); fOutput->Add(fHists[100]); fHists[101] = new TH3D("fCumPhiEtaV0A",";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100); fOutput->Add(fHists[101]); fHists[102] = new TH3D("fCumPhiEtaZNA",";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100); fOutput->Add(fHists[102]); fHists[103] = new TH3D("fCumPtEtaCl1",";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100); fOutput->Add(fHists[103]); fHists[104] = new TH3D("fCumPtEtaV0A",";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100); fOutput->Add(fHists[104]); fHists[105] = new TH3D("fCumPtEtaZNA",";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100); fOutput->Add(fHists[105]); fHists[106] = new TH1D("fCumCL1MC",";#tracks",fCumMbins,0,fCumMbins); fOutput->Add(fHists[106]); fHists[107] = new TH1D("fCumV0AMC",";#tracks",fCumMbins,0,fCumMbins); fOutput->Add(fHists[107]); fHists[108] = new TH1D("fCumV0CMC",";#tracks",fCumMbins,0,fCumMbins); fOutput->Add(fHists[108]); fHists[109] = new TH1D("fCumCl1Cent",";percentile",10,0,100); fOutput->Add(fHists[109]); fHists[110] = new TH1D("fCumV0ACent",";percentile",10,0,100); fOutput->Add(fHists[110]); fHists[111] = new TH1D("fCumZNACent",";percentile",10,0,100); fOutput->Add(fHists[111]); fHists[112] = new TH1D("fCumMall",";mult",fCumMbins,0,fCumMbins); fOutput->Add(fHists[112]); fHists[113] = new TH1D("fCumM",";mult",fCumMbins,0,fCumMbins); fOutput->Add(fHists[113]); fHists[114] = new TProfile("fCumQC2",";qc2",fCumMbins,0,fCumMbins); fOutput->Add(fHists[114]); fHists[115] = new TProfile("fCumQC4",";qc4",fCumMbins,0,fCumMbins); fOutput->Add(fHists[115]); fHists[116] = new TProfile("fCumQC6",";qc6",fCumMbins,0,fCumMbins); fOutput->Add(fHists[116]); Int_t v0bins=1000; if (fCumMbins>1000) v0bins=25000; fHists[117] = new TH2D("fCumV0ACentVsM",";v0a;M",v0bins,0,v0bins,fCumMbins,0,fCumMbins); fOutput->Add(fHists[117]); fHists[118] = new TH2D("fCumV0CCentVsM",";v0c;M",v0bins,0,v0bins,fCumMbins,0,fCumMbins); fOutput->Add(fHists[118]); fHists[119] = new TH2D("fCumV0MCentVsM",";v0m;M",v0bins,0,v0bins,fCumMbins,0,fCumMbins); fOutput->Add(fHists[119]); fHists[120] = new TProfile("fCum3QC2",";qc2",fCumMbins,0,fCumMbins); fOutput->Add(fHists[120]); fHists[121] = new TProfile("fCum3QC4",";qc4",fCumMbins,0,fCumMbins); fOutput->Add(fHists[121]); fHists[122] = new TProfile("fEtaGapV2",";M",fCumMbins,0,fCumMbins); fOutput->Add(fHists[122]); fHists[123] = new TProfile("fEtaGapV3",";M",fCumMbins,0,fCumMbins); fOutput->Add(fHists[123]); fNtupCum = new TTree("NtupCum", "Ntuple for cumulant analysis"); if (1) { fNtupCum->SetDirectory(0); } else { TFile *f = OpenFile(1); if (f) { f->SetCompressionLevel(2); fNtupCum->SetDirectory(f); fNtupCum->SetAutoFlush(-4*1024*1024); fNtupCum->SetAutoSave(0); } } fNtupCumInfo = new AliNtupCumInfo; fNtupCum->Branch("cumulants", &fNtupCumInfo, 32*1024, 99); fNtupZdcInfo = new AliNtupZdcInfo; fNtupCum->Branch("zdc", &fNtupZdcInfo, 32*1024, 99); if (fDoCumNtuple) fOutput->Add(fNtupCum); } PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram }