From 9aed5fcd6b6e3837c469356bdcad0a77a3dd3644 Mon Sep 17 00:00:00 2001 From: prsnko Date: Wed, 11 Jun 2014 09:52:27 +0400 Subject: [PATCH] Update from Daniil --- .../PHOS_Correlation/AddTaskPi0Correlations.C | 14 +- .../PHOS_Correlation/AliPHOSCorrelations.cxx | 1068 +++++++++++++---- .../PHOS_Correlation/AliPHOSCorrelations.h | 45 +- 3 files changed, 851 insertions(+), 276 deletions(-) diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C b/PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C index d7b73762bca..d3b1a38d477 100644 --- a/PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C +++ b/PWGGA/PHOSTasks/PHOS_Correlation/AddTaskPi0Correlations.C @@ -1,12 +1,12 @@ AliPHOSCorrelations* AddTaskPi0Correlations ( const char* name = "Pi0Corr", - const char* options = "11h", - UInt_t offlineTriggerMask = AliVEvent::kCentral, - AliPHOSCorrelations::TriggerSelection internalTriggerSelection = AliPHOSCorrelations::kNoSelection, - Double_t sigmaWidth = 3., - Int_t downCentLimit = 0, - Int_t upCentLimit = 90 ) + const char* options = "11h", + UInt_t offlineTriggerMask = AliVEvent::kCentral, + AliPHOSCorrelations::TriggerSelection internalTriggerSelection = AliPHOSCorrelations::kNoSelection, + Double_t sigmaWidth = 3., + Int_t downCentLimit = 0, + Int_t upCentLimit = 90 ) { - //Author: Ponomarenko Daniil + //Author: Ponomarenko Daniil (Daniil.Ponomarenko@cern.ch) /* $Id$ */ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx index 39c73d29ac8..3d3ecf427b2 100644 --- a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx +++ b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx @@ -66,7 +66,7 @@ ClassImp(AliPHOSCorrelations) //_______________________________________________________________________________ AliPHOSCorrelations::AliPHOSCorrelations() :AliAnalysisTaskSE(), - fPHOSGeo(0x0), + fPHOSGeo(0x0), fOutputContainer(0x0), fMinClusterEnergy(0.3), fMinBCDistance(0), @@ -80,6 +80,7 @@ AliPHOSCorrelations::AliPHOSCorrelations() fNEMRPBins(9), fAssocBins(), fCheckHibridGlobal(kOnlyHibridTracks), + fPHOSEvent(false), fPeriod(kUndefinedPeriod), fInternalTriggerSelection(kNoSelection), fMaxAbsVertexZ(10.), @@ -87,8 +88,12 @@ AliPHOSCorrelations::AliPHOSCorrelations() fCentCutoffDown(0.), fCentCutoffUp(90), fMassInvMean(0.135), - fMassInvSigma(0.01), + fMassInvSigma(0.05), fSigmaWidth(0.), + fMassMeanP0(-20.9476), + fMassMeanP1(0.1300), + fMassSigmaP0(0.005), + fMassSigmaP1(-0.0001), fEvent(0x0), fEventESD(0x0), fEventAOD(0x0), @@ -99,7 +104,7 @@ AliPHOSCorrelations::AliPHOSCorrelations() fV0Cpol(0.),fV0Apol(0.), fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"), fVertexVector(), - fVtxBin(0), + fVtxBin(0), fCentralityEstimator("V0M"), fCentrality(0.), fCentBin(0), @@ -109,7 +114,7 @@ AliPHOSCorrelations::AliPHOSCorrelations() fCaloPhotonsPHOS(0x0), fTracksTPC(0x0), fCaloPhotonsPHOSLists(0x0), - fTracksTPCLists(0x0) + fTracksTPCLists(0x0) { //Deafult constructor, no memory allocations here } @@ -117,7 +122,7 @@ AliPHOSCorrelations::AliPHOSCorrelations() //_______________________________________________________________________________ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) :AliAnalysisTaskSE(name), - fPHOSGeo(0x0), + fPHOSGeo(0x0), fOutputContainer(0x0), fMinClusterEnergy(0.3), fMinBCDistance(0), @@ -131,6 +136,7 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fNEMRPBins(9), fAssocBins(), fCheckHibridGlobal(kOnlyHibridTracks), + fPHOSEvent(false), fPeriod(period), fInternalTriggerSelection(kNoSelection), fMaxAbsVertexZ(10.), @@ -138,8 +144,12 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fCentCutoffDown(0.), fCentCutoffUp(90), fMassInvMean(0.135), - fMassInvSigma(0.01), + fMassInvSigma(0.05), fSigmaWidth(0.), + fMassMeanP0(-20.9476), + fMassMeanP1(0.1300), + fMassSigmaP0(0.005), + fMassSigmaP1(-0.0001), fEvent(0x0), fEventESD(0x0), fEventAOD(0x0), @@ -150,7 +160,7 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fV0Cpol(0.),fV0Apol(0.), fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"), fVertexVector(), - fVtxBin(0), + fVtxBin(0), fCentralityEstimator("V0M"), fCentrality(0.), fCentBin(0), @@ -160,7 +170,7 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fCaloPhotonsPHOS(0x0), fTracksTPC(0x0), fCaloPhotonsPHOSLists(0x0), - fTracksTPCLists(0x0) + fTracksTPCLists(0x0) { // Constructor // Output slots #0 write into a TH1 container @@ -180,7 +190,9 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fVertex[0]=0; fVertex[1]=0; fVertex[2]=0; - fPHOSGeo = AliPHOSGeometry::GetInstance("IHEP"); + SetGeometry(); + + ZeroingVariables(); } //_______________________________________________________________________________ AliPHOSCorrelations::~AliPHOSCorrelations() @@ -223,6 +235,9 @@ void AliPHOSCorrelations::UserCreateOutputObjects() // Create histograms // Called once const Int_t nRuns=200 ; + const Int_t ptMult = 200; + const Double_t ptMin = 0.; + const Double_t ptMax = 20.; // Create histograms if(fOutputContainer != NULL) { delete fOutputContainer; } @@ -237,14 +252,16 @@ void AliPHOSCorrelations::UserCreateOutputObjects() fOutputContainer->Add(new TH2F("hSelEvents","Event selection", kTotalSelected+1, 0., double(kTotalSelected+1), nRuns,0.,float(nRuns))) ; fOutputContainer->Add(new TH2F("hCentrality","Event centrality", 100,0.,100.,nRuns,0.,float(nRuns))) ; fOutputContainer->Add(new TH2F("phiRPflat","RP distribution with TPC flat", 100, 0., 2.*TMath::Pi(),20,0.,100.)) ; - fOutputContainer->Add(new TH2F("massWindow","mean & sigma", 100,0.1,0.18,100,0.,0.5)); + fOutputContainer->Add(new TH2F("massWindow","mean & sigma", 100,0.095,0.185,500,0.,0.05)); + fOutputContainer->Add(new TH2F("hCluEvsClu","ClusterMult vs E",200,0.,10.,100,0.,100.)) ; // Set hists, with track's and cluster's angle distributions. + SetHistPtNumTrigger(ptMult, ptMin, ptMax); SetHistEtaPhi(); SetHistPHOSClusterMap(); - SetHistCutDistribution(); - SetHistPtAssoc(); + SetHistMass(ptMult, ptMin, ptMax); + SetHistPtAssoc(ptMult, ptMin, ptMax); // Setup photon lists Int_t kapacity = fNVtxZBins * GetNumberOfCentralityBins() * fNEMRPBins; @@ -257,6 +274,18 @@ void AliPHOSCorrelations::UserCreateOutputObjects() PostData(1, fOutputContainer); } //_______________________________________________________________________________ +void AliPHOSCorrelations::SetHistPtNumTrigger(Int_t ptMult, Double_t ptMin, Double_t ptMax) +{ + TString spid[4]={"all","cpv","disp","both"} ; + for(Int_t ipid=0; ipid<4; ipid++) + { + fOutputContainer->Add(new TH2F(Form("nTrigger_%s", spid[ipid].Data()), Form("Num of trigger particle %s", spid[ipid].Data()), ptMult+300, ptMin, ptMax, 10000, 0, 1 ) ); + TH2F *h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Pt [GEV]"); + h->GetYaxis()->SetTitle("#varepsilon"); // 1/efficiensy + } +} +//_______________________________________________________________________________ void AliPHOSCorrelations::SetHistEtaPhi() { // Set hists, with track's and cluster's angle distributions. @@ -282,74 +311,126 @@ void AliPHOSCorrelations::SetHistEtaPhi() h->GetYaxis()->SetTitle("#eta"); } //_______________________________________________________________________________ -void AliPHOSCorrelations::SetHistCutDistribution() +void AliPHOSCorrelations::SetHistMass(Int_t ptMult, Double_t ptMin, Double_t ptMax) { // Set other histograms. // cout<<"\nSetting output SetHist_CutDistribution..."; - - Int_t PtMult = 100; - Double_t PtMin = 0.; - Double_t PtMax = 20.; + Double_t massMin = fMassInvMean-fMassInvSigma; Double_t massMax = fMassInvMean+fMassInvSigma; + TString spid[4]={"all","cpv","disp","both"} ; - // Real ++++++++++++++++++++++++++++++ + TH2F * h; - fOutputContainer->Add(new TH2F("all_mpt"," Only standard cut's ", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - TH2F * h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + for(Int_t ipid=0; ipid<4; ipid++) + { + // Real ++++++++++++++++++++++++++++++ - fOutputContainer->Add(new TH2F("cpv_mpt"," CPV cut ", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + fOutputContainer->Add(new TH2F(Form("%s_mpt",spid[ipid].Data() )," real ", 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); - fOutputContainer->Add(new TH2F("disp_mpt"," Disp cut ", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + // MIX +++++++++++++++++++++++++ - fOutputContainer->Add(new TH2F("both_mpt"," Both cuts (CPV + Disp) ", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + fOutputContainer->Add(new TH2F(Form("mix_%s_mpt",spid[ipid].Data() )," mix ", 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + // Real ++++++++++++++++++++++++++++++ - // MIX +++++++++++++++++++++++++ + fOutputContainer->Add(new TH2F(Form("%s_mpt_left",spid[ipid].Data() )," real ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); - fOutputContainer->Add(new TH2F("mix_all_mpt"," Only standard cut's (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + fOutputContainer->Add(new TH2F(Form("%s_mpt_right",spid[ipid].Data() )," real ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); - fOutputContainer->Add(new TH2F("mix_cpv_mpt"," CPV cut (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + // MIX +++++++++++++++++++++++++ - fOutputContainer->Add(new TH2F("mix_disp_mpt"," Disp cut (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_left",spid[ipid].Data() )," mix ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); - fOutputContainer->Add(new TH2F("mix_both_mpt"," Both cuts (CPV + Disp) (mix)", 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->Last()) ; - h->GetXaxis()->SetTitle("Mass [GeV]"); - h->GetYaxis()->SetTitle("Pt [GEV]"); + fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_right",spid[ipid].Data() )," mix ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + } + + // Calibration PHOS Module Pi0peak {REAL} + for(Int_t mod=1; mod<4; mod++){ + fOutputContainer->Add(new TH2F(Form("both%d_mpt",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + + // Calibration PHOS Module Pi0peak {MIX} + fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + + } + + // For efficiensy. + for(Int_t ipid=0; ipid<4; ipid++) + { + // Real ++++++++++++++++++++++++++++++ + fOutputContainer->Add(new TH2F(Form("%s_mpt_eff",spid[ipid].Data() )," real ", 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); - // Calibration Pi0peak {REAL} + // MIX +++++++++++++++++++++++++ + + fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_eff",spid[ipid].Data() )," mix ", 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + + // Real ++++++++++++++++++++++++++++++ + + fOutputContainer->Add(new TH2F(Form("%s_mpt_left_eff",spid[ipid].Data() )," real ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + + fOutputContainer->Add(new TH2F(Form("%s_mpt_right_eff",spid[ipid].Data() )," real ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + + // MIX +++++++++++++++++++++++++ + + fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_left_eff",spid[ipid].Data() )," mix ", 100, 0.05, 0.1, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + + fOutputContainer->Add(new TH2F(Form("mix_%s_mpt_right_eff",spid[ipid].Data() )," mix ", 100, 0.2, 0.4, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Mass [GeV]"); + h->GetYaxis()->SetTitle("Pt [GEV]"); + } + + // Calibration PHOS Module Pi0peak {REAL} for(Int_t mod=1; mod<4; mod++){ - fOutputContainer->Add(new TH2F(Form("both%d_mpt",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, PtMult, PtMin, PtMax ) ); + fOutputContainer->Add(new TH2F(Form("both%d_mpt_eff",mod),Form("Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) ); h = static_cast(fOutputContainer->Last()) ; h->GetXaxis()->SetTitle("Mass [GeV]"); h->GetYaxis()->SetTitle("Pt [GEV]"); - // Calibration Pi0peak {MIX} - fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, PtMult, PtMin, PtMax ) ); - h = static_cast(fOutputContainer->FindObject("mix_both1_mpt")) ; + // Calibration PHOS Module Pi0peak {MIX} + fOutputContainer->Add(new TH2F(Form("mix_both%d_mpt_eff",mod),Form(" Both cuts (CPV + Disp) mod[%d]",mod), 100, massMin, massMax, ptMult, ptMin, ptMax ) ); + h = static_cast(fOutputContainer->Last()) ; h->GetXaxis()->SetTitle("Mass [GeV]"); h->GetYaxis()->SetTitle("Pt [GEV]"); @@ -358,7 +439,7 @@ void AliPHOSCorrelations::SetHistCutDistribution() // cout<<" OK!"<Add(new TH3F(Form("%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)), Form("%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)), - PtTrigMult, PtTrigMin, PtTrigMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) ); + ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) ); TH3F * h = static_cast(fOutputContainer->Last()) ; h->GetXaxis()->SetTitle("Pt_{triger} [GEV]"); h->GetYaxis()->SetTitle("#phi [rad]"); @@ -386,12 +465,34 @@ void AliPHOSCorrelations::SetHistPtAssoc() fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)), Form("Mixed %s_ptphieta_ptAssoc_%3.1f",spid[ipid].Data(),fAssocBins.At(i+1)), - PtTrigMult, PtTrigMin, PtTrigMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) ); + ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) ); h = static_cast(fOutputContainer->Last()) ; h->GetXaxis()->SetTitle("Pt_{triger} [GEV]"); h->GetYaxis()->SetTitle("#phi [rad]"); h->GetZaxis()->SetTitle("#eta"); + + for(Int_t m=0; m<6; m++) + { + fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f_mod%i",spid[ipid].Data(),fAssocBins.At(i+1), PhotonsInMod[m]), + Form("Mixed %s_ptphieta_ptAssoc_%3.1f_mod%i",spid[ipid].Data(),fAssocBins.At(i+1), PhotonsInMod[m]), + ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Pt_{triger} [GEV]"); + h->GetYaxis()->SetTitle("#phi [rad]"); + h->GetZaxis()->SetTitle("#eta"); + } + + for(Int_t itpc=1; itpc<3; itpc++) + { + fOutputContainer->Add(new TH3F(Form("mix_%s_ptphieta_ptAssoc_%3.1f_tpc%i",spid[ipid].Data(),fAssocBins.At(i+1), itpc), + Form("Mixed %s_ptphieta_ptAssoc_%3.1f_tpc%i",spid[ipid].Data(),fAssocBins.At(i+1), itpc), + ptMult, ptMin, ptMax, PhiMult, PhiMin, PhiMax, EtaMult, EtaMin, EtaMax ) ); + h = static_cast(fOutputContainer->Last()) ; + h->GetXaxis()->SetTitle("Pt_{triger} [GEV]"); + h->GetYaxis()->SetTitle("#phi [rad]"); + h->GetZaxis()->SetTitle("#eta"); + } } } } @@ -421,36 +522,20 @@ void AliPHOSCorrelations::UserExec(Option_t *) PostData(1, fOutputContainer); return ; } - + + ZeroingVariables(); + fEventESD = dynamic_cast(fEvent); fEventAOD = dynamic_cast(fEvent); - { - FillHistogram("hTriggerPassedEvents", 0); - - Bool_t isMB = (fEvent->GetTriggerMask() & (ULong64_t(1)<<1)); - Bool_t isCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<4)); - Bool_t isSemiCentral = (fEvent->GetTriggerMask() & (ULong64_t(1)<<7)); - - if (isMB) FillHistogram("hTriggerPassedEvents", 2.); - if (isCentral) FillHistogram("hTriggerPassedEvents", 3.); - if (isSemiCentral) FillHistogram("hTriggerPassedEvents", 4.); - } - - // For first event from data only: - if( fRunNumber<0) - { - if (fDebug >= 1) cout<<"Mean: "<< fMassInvMean << " Sigma: "<< fMassInvSigma - <<" Sigma Width: " <GetRunNumber() ) { fRunNumber = fEvent->GetRunNumber(); fInternalRunNumber = ConvertToInternalRunNumber(fRunNumber); + //SetGeometry(); SetESDTrackCuts(); } LogProgress(1); @@ -491,7 +576,8 @@ void AliPHOSCorrelations::UserExec(Option_t *) // Step 5: Event Photons (PHOS Clusters) selectionMakeFlat SelectPhotonClusters(); - if( ! fCaloPhotonsPHOS->GetEntriesFast() ) LogSelection(kHasPHOSClusters, fInternalRunNumber); + if( ! fCaloPhotonsPHOS->GetEntriesFast() ) + LogSelection(kHasPHOSClusters, fInternalRunNumber); LogProgress(6); // Step 6: Event Associated particles (TPC Tracks) selection @@ -503,13 +589,13 @@ void AliPHOSCorrelations::UserExec(Option_t *) LogProgress(7); // Step 7: Consider pi0 (photon/cluster) pairs. - ConsiderPi0s(); + //ConsiderPi0s(); + ConsiderPi0sME(); // Step 8; Mixing ConsiderPi0sMix(); - ConsiderTracksMix(); - //this->ConsiderPi0sTracksMix(); // Read how make mix events! + //ConsiderTracksMixME(); LogProgress(8); // Step 9: Make TPC's mask @@ -1100,7 +1186,7 @@ void AliPHOSCorrelations::SetVertex() } else { -// AliError("Event has 0x0 Primary Vertex, defaulting to origo"); + //AliError("Event has 0x0 Primary Vertex, defaulting to origo"); fVertex[0] = 0; fVertex[1] = 0; fVertex[2] = 0; @@ -1238,18 +1324,28 @@ void AliPHOSCorrelations::SelectPhotonClusters() // clear (or create) array for holding events photons/clusters if(fCaloPhotonsPHOS) fCaloPhotonsPHOS->Clear(); - else{ + else + { fCaloPhotonsPHOS = new TClonesArray("AliCaloPhoton",200); + fCaloPhotonsPHOS->SetOwner(); } - Int_t nclu = fEvent->GetNumberOfCaloClusters() ; Int_t inPHOS=0 ; - for (Int_t i=0; iGetCaloCluster(i); - if ( !clu->IsPHOS() ) continue ; - if( clu->E()< fMinClusterEnergy) continue; // reject cluster + for (Int_t i=0; iGetNumberOfCaloClusters(); i++) + { + AliVCluster *clu = fEvent->GetCaloCluster(i); + if (!clu->IsPHOS() || clu->E()< fMinClusterEnergy) continue; // reject cluster + Float_t position[3]; + clu->GetPosition(position); + TVector3 global(position) ; + Int_t relId[4] ; + fPHOSGeo->GlobalPos2RelId(global,relId) ; + Int_t modPHOS = relId[0] ; + Int_t cellXPHOS = relId[2]; + Int_t cellZPHOS = relId[3] ; + Double_t distBC=clu->GetDistanceToBadChannel(); if(distBC fTOFCut ) continue ; } TLorentzVector lorentzMomentum; - Double_t ecore = clu->GetMCEnergyFraction(); + Double_t ecore = clu->GetCoreEnergy(); + //Double_t ecore = clu->E(); - clu->GetMomentum(lorentzMomentum, fVertex); - lorentzMomentum*=ecore/lorentzMomentum.E() ; + FillHistogram("hCluEvsClu", clu->E(), clu->GetNCells()) ; + + Double_t origo[3] = {0,0,0}; // don't rely on event vertex, assume (0,0,0) ? + //clu->GetMomentum(lorentzMomentum, fVertex); + clu->GetMomentum(lorentzMomentum, origo); + if(inPHOS>=fCaloPhotonsPHOS->GetSize()){ fCaloPhotonsPHOS->Expand(inPHOS+50) ; @@ -1275,23 +1376,17 @@ void AliPHOSCorrelations::SelectPhotonClusters() inPHOS++ ; ph->SetCluster(clu); - Float_t cellId=clu->GetCellAbsId(0) ; - Int_t mod = (Int_t)TMath:: Ceil(cellId/(56*64) ) ; - ph->SetModule(mod) ; + /*Float_t cellId=clu->GetCellAbsId(0) ; + Int_t mod = (Int_t)TMath:: Ceil(cellId/(56*64) ) ; */ + ph->SetModule(modPHOS) ; + + lorentzMomentum*=ecore/lorentzMomentum.E() ; - ph->SetNCells(clu->GetNCells()); + //ph->SetNCells(clu->GetNCells()); + ph->SetMomV2(&lorentzMomentum) ; ph->SetDispBit(clu->GetDispersion()<2.5) ; ph->SetCPVBit(clu->GetEmcCpvDistance()>2.) ; - Float_t position[3]; - clu->GetPosition(position); - TVector3 global(position) ; - Int_t relId[4] ; - fPHOSGeo->GlobalPos2RelId(global,relId) ; - Int_t modPHOS = relId[0] ; - Int_t cellXPHOS = relId[2]; - Int_t cellZPHOS = relId[3] ; - FillHistogram(Form("QA_cluXZE_mod%i", modPHOS), cellXPHOS, cellZPHOS, lorentzMomentum.E() ) ; } } @@ -1331,149 +1426,422 @@ void AliPHOSCorrelations::SelectAccosiatedTracks() //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderPi0s() { + // Must consider only PHOS events in real distribution. + if (fPHOSEvent) + { + const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ; + for(Int_t i1=0; i1 < nPHOS-1; i1++) + { + AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; + for (Int_t i2=i1+1; i2At(i2) ; + TLorentzVector p12 = *ph1 + *ph2; + + Double_t phiTrigger=p12.Phi() ; + Double_t etaTrigger=p12.Eta() ; + + Double_t m=p12.M() ; + Double_t pt=p12.Pt() ; + Double_t eff = 1./GetEfficiency(pt); + int mod1 = ph1->Module() ; + int mod2 = ph2->Module() ; + + FillHistogram("clu_phieta",phiTrigger,etaTrigger); + FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta()); + FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta()); + + + FillHistogram("all_mpt",m, pt); + FillHistogram("all_mpt_left",m, pt); + FillHistogram("all_mpt_right",m, pt); + + FillHistogram("all_mpt_eff",m, pt, eff); + FillHistogram("all_mpt_left_eff",m, pt, eff); + FillHistogram("all_mpt_right_eff",m, pt, eff); + + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram("cpv_mpt",m, pt); + FillHistogram("cpv_mpt_left",m, pt); + FillHistogram("cpv_mpt_right",m, pt); + + FillHistogram("cpv_mpt_eff",m, pt, eff); + FillHistogram("cpv_mpt_left_eff",m, pt, eff); + FillHistogram("cpv_mpt_right_eff",m, pt, eff); + } - const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ; - for(Int_t i1=0; i1 < nPHOS-1; i1++){ - AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; - for (Int_t i2=i1+1; i2At(i2) ; - TLorentzVector p12 = *ph1 + *ph2; + if ( ph1->IsDispOK() && ph2->IsDispOK() ) + { + FillHistogram("disp_mpt",m, pt); + FillHistogram("disp_mpt_left",m, pt); + FillHistogram("disp_mpt_right",m, pt); + + FillHistogram("disp_mpt_eff",m, pt, eff); + FillHistogram("disp_mpt_left_eff",m, pt, eff); + FillHistogram("disp_mpt_right_eff",m, pt, eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram("both_mpt",m, pt); + FillHistogram("both_mpt_left",m, pt); + FillHistogram("both_mpt_right",m, pt); + + FillHistogram("both_mpt_eff",m, pt, eff); + FillHistogram("both_mpt_left_eff",m, pt, eff); + FillHistogram("both_mpt_right_eff",m, pt, eff); + if(mod1 == mod2) // for each module + { + FillHistogram(Form("both%d_mpt",mod1),m, pt); + FillHistogram(Form("both%d_mpt_eff",mod1),m, pt, eff); + } + } + } - Double_t phiTrigger=p12.Phi() ; - Double_t etaTrigger=p12.Eta() ; + if(!TestMass(m,pt)) continue; - Double_t m=p12.M() ; - Double_t pt=p12.Pt() ; - int mod1 = ph1->Module() ; - int mod2 = ph2->Module() ; - + FillHistogram("nTrigger_all", pt, 1./eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + FillHistogram("nTrigger_cpv", pt, 1./eff); + if ( ph1->IsDispOK() && ph2->IsDispOK() ) + { + FillHistogram("nTrigger_disp", pt, 1./eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + FillHistogram("nTrigger_both", pt, 1./eff); + } - FillHistogram("clu_phieta",phiTrigger,etaTrigger); - FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta()); - FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta()); + // Take track's angles and compare with cluster's angles. + for(Int_t i3=0; i3GetEntriesFast(); i3++){ + TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3); + Double_t phiAssoc = track->Phi(); + Double_t etaAssoc = track->Eta(); + Double_t ptAssoc = track->Pt(); - FillHistogram("all_mpt",m, pt); - - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram("cpv_mpt",m, pt); - - if ( ph1->IsDispOK() && ph2->IsDispOK() ){ - FillHistogram("disp_mpt",m, pt); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) { - FillHistogram("both_mpt",m, pt); - if(mod1 == mod2) FillHistogram(Form("both%d_mpt",mod1),m, pt); - } + Double_t dPhi = phiTrigger - phiAssoc; + while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); + while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); + + Double_t dEta = etaTrigger - etaAssoc; + + Double_t ptAssocBin=GetAssocBin(ptAssoc) ; + FillHistogram(Form("all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + FillHistogram(Form("cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + + if ( ph1->IsDispOK() && ph2->IsDispOK() ){ + FillHistogram(Form("disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + FillHistogram(Form("both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + } + } + } + } } - - if(!TestMass(m,pt)) continue; - - // Take track's angles and compare with cluster's angles. - for(Int_t i3=0; i3GetEntriesFast(); i3++){ - TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3); - - Double_t phiAssoc = track->Phi(); - Double_t etaAssoc = track->Eta(); - Double_t ptAssoc = track->Pt(); - - Double_t dPhi = phiAssoc - phiTrigger; - while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); - while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); - - Double_t dEta = etaAssoc - etaTrigger; - - Double_t ptAssocBin=GetAssocBin(ptAssoc) ; - FillHistogram(Form("all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram(Form("cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - - if ( ph1->IsDispOK() && ph2->IsDispOK() ){ - FillHistogram(Form("disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram(Form("both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - } - } - } - } } //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderPi0sMix() { - TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin); - for(Int_t evi=0; eviGetEntries();evi++){ - TClonesArray * mixPHOS = static_cast(arrayList->At(evi)); - for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++){ - AliCaloPhoton * ph1 = (AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; - for(Int_t i2=0; i2GetEntriesFast(); i2++){ - AliCaloPhoton * ph2 = (AliCaloPhoton*)mixPHOS->At(i2) ; - TLorentzVector p12 = *ph1 + *ph2; - Double_t m=p12.M() ; - Double_t pt=p12.Pt() ; - int mod1 = ph1->Module() ; - int mod2 = ph2->Module() ; - - FillHistogram("mix_all_mpt", m, pt); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram("mix_cpv_mpt",m, pt); - if ( ph1->IsDispOK() && ph2->IsDispOK() ){ - FillHistogram("mix_disp_mpt",m, pt); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ){ - FillHistogram("mix_both_mpt",m, pt); - if (mod1 == mod2) FillHistogram(Form("mix_both%d_mpt",mod1),m, pt); - } - } + // We must consider only PHOS events in real distribution. + //UInt_t currentOfflineTriggerMask = GetCollisionCandidates(); + if (fPHOSEvent) + { + + TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin); + for(Int_t evi=0; eviGetEntries();evi++) + { + TClonesArray * mixPHOS = static_cast(arrayList->At(evi)); + for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++) + { + AliCaloPhoton * ph1 = (AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; + for(Int_t i2=0; i2GetEntriesFast(); i2++) + { + AliCaloPhoton * ph2 = (AliCaloPhoton*)mixPHOS->At(i2) ; + TLorentzVector p12 = *ph1 + *ph2; + Double_t m=p12.M() ; + Double_t pt=p12.Pt() ; + Double_t eff = 1./GetEfficiency(pt); + + int mod1 = ph1->Module() ; + int mod2 = ph2->Module() ; + + FillHistogram("mix_all_mpt", m, pt); + FillHistogram("mix_all_mpt_left",m, pt); + FillHistogram("mix_all_mpt_right",m, pt); + + FillHistogram("mix_all_mpt_eff", m, pt, eff); + FillHistogram("mix_all_mpt_left_eff",m, pt, eff); + FillHistogram("mix_all_mpt_right_eff",m, pt, eff); + + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram("mix_cpv_mpt",m, pt); + FillHistogram("mix_cpv_mpt_left",m, pt); + FillHistogram("mix_cpv_mpt_right",m, pt); + + FillHistogram("mix_cpv_mpt_eff",m, pt, eff); + FillHistogram("mix_cpv_mpt_left_eff",m, pt, eff); + FillHistogram("mix_cpv_mpt_right_eff",m, pt, eff); + } + if ( ph1->IsDispOK() && ph2->IsDispOK() ) + { + FillHistogram("mix_disp_mpt",m, pt); + FillHistogram("mix_disp_mpt_left",m, pt); + FillHistogram("mix_disp_mpt_right",m, pt); + + FillHistogram("mix_disp_mpt_eff",m, pt, eff); + FillHistogram("mix_disp_mpt_left_eff",m, pt, eff); + FillHistogram("mix_disp_mpt_right_eff",m, pt, eff); + + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram("mix_both_mpt",m, pt); + FillHistogram("mix_both_mpt_left",m, pt); + FillHistogram("mix_both_mpt_right",m, pt); + + FillHistogram("mix_both_mpt_eff",m, pt, eff); + FillHistogram("mix_both_mpt_left_eff",m, pt, eff); + FillHistogram("mix_both_mpt_right_eff",m, pt, eff); + + if (mod1 == mod2) // for each module + { + FillHistogram(Form("mix_both%d_mpt",mod1),m, pt); + FillHistogram(Form("mix_both%d_mpt_eff",mod1),m, pt, eff); + } + } + } + } + } + } } - } - } } //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderTracksMix() { - TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin); - for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++) { - AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; - for (Int_t i2=0; i2GetEntriesFast(); i2++){ - AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ; - TLorentzVector p12 = *ph1 + *ph2; - Double_t phiTrigger=p12.Phi() ; - Double_t etaTrigger=p12.Eta() ; - - Double_t m=p12.M() ; - Double_t pt=p12.Pt() ; - - if(!TestMass(m,pt)) continue; - for(Int_t evi=0; eviGetEntries();evi++){ - TClonesArray * mixTracks = static_cast(arrayList->At(evi)); - for(Int_t i3=0; i3GetEntriesFast(); i3++){ - TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3); - - Double_t phiAssoc = track->Phi(); - Double_t etaAssoc = track->Eta(); - Double_t ptAssoc = track->Pt(); - - Double_t ptAssocBin=GetAssocBin(ptAssoc) ; - - Double_t dPhi = phiAssoc - phiTrigger; - while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); - while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); + TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin); + for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++) { + AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; + for (Int_t i2=0; i2GetEntriesFast(); i2++){ + AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ; + TLorentzVector p12 = *ph1 + *ph2; + Double_t phiTrigger=p12.Phi() ; + Double_t etaTrigger=p12.Eta() ; - Double_t dEta = etaAssoc - etaTrigger; - - FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - - if ( ph1->IsDispOK() && ph2->IsDispOK() ){ - FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta); - } + Double_t m=p12.M() ; + Double_t pt=p12.Pt() ; + Double_t eff = 1./GetEfficiency(pt); + Int_t mod1 = ph1->Module(); + Int_t mod2 = ph2->Module(); + + + if(!TestMass(m,pt)) continue; + + for(Int_t evi=0; eviGetEntries();evi++){ + TClonesArray * mixTracks = static_cast(arrayList->At(evi)); + for(Int_t i3=0; i3GetEntriesFast(); i3++){ + TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3); + + Double_t phiAssoc = track->Phi(); + Double_t etaAssoc = track->Eta(); + Double_t ptAssoc = track->Pt(); + + Double_t ptAssocBin=GetAssocBin(ptAssoc) ; + + Double_t dPhi = phiTrigger - phiAssoc; + while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); + while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); + + Double_t dEta = etaTrigger - etaAssoc; + + FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff); + + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_cpv_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff); + } + + if ( ph1->IsDispOK() && ph2->IsDispOK() ) { + FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_disp_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f",ptAssocBin), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f_mod%i",ptAssocBin, GetModCase(mod1, mod2)), pt, dPhi, dEta, eff); + FillHistogram(Form("mix_both_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff); + } + } + } + } + } } - } - } - } } + +//_______________________________________________________________________________ +void AliPHOSCorrelations::ConsiderPi0sME() +{ + //Seek Most Energetic (ME) Pi0 and work whit it. + // Must consider only PHOS events in real distribution. + if (fPHOSEvent) + { + const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ; + for(Int_t i1=0; i1 < nPHOS-1; i1++) + { + AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ; + for (Int_t i2=i1+1; i2At(i2) ; + TLorentzVector p12 = *ph1 + *ph2; + + Double_t phiTrigger=p12.Phi() ; + Double_t etaTrigger=p12.Eta() ; + + Double_t m=p12.M() ; + Double_t pt=p12.Pt() ; + Double_t eff = 1./GetEfficiency(pt); + int mod1 = ph1->Module() ; + int mod2 = ph2->Module() ; + + FillHistogram("clu_phieta",phiTrigger,etaTrigger); + FillHistogram("clusingle_phieta",ph1->Phi(), ph1->Eta()); + FillHistogram("clusingle_phieta",ph2->Phi(), ph2->Eta()); + + + FillHistogram("all_mpt",m, pt); + FillHistogram("all_mpt_left",m, pt); + FillHistogram("all_mpt_right",m, pt); + + FillHistogram("all_mpt_eff",m, pt, eff); + FillHistogram("all_mpt_left_eff",m, pt, eff); + FillHistogram("all_mpt_right_eff",m, pt, eff); + + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram("cpv_mpt",m, pt); + FillHistogram("cpv_mpt_left",m, pt); + FillHistogram("cpv_mpt_right",m, pt); + + FillHistogram("cpv_mpt_eff",m, pt, eff); + FillHistogram("cpv_mpt_left_eff",m, pt, eff); + FillHistogram("cpv_mpt_right_eff",m, pt, eff); + } + + if ( ph1->IsDispOK() && ph2->IsDispOK() ) + { + FillHistogram("disp_mpt",m, pt); + FillHistogram("disp_mpt_left",m, pt); + FillHistogram("disp_mpt_right",m, pt); + + FillHistogram("disp_mpt_eff",m, pt, eff); + FillHistogram("disp_mpt_left_eff",m, pt, eff); + FillHistogram("disp_mpt_right_eff",m, pt, eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + { + FillHistogram("both_mpt",m, pt); + FillHistogram("both_mpt_left",m, pt); + FillHistogram("both_mpt_right",m, pt); + + FillHistogram("both_mpt_eff",m, pt, eff); + FillHistogram("both_mpt_left_eff",m, pt, eff); + FillHistogram("both_mpt_right_eff",m, pt, eff); + if(mod1 == mod2) // for each module + { + FillHistogram(Form("both%d_mpt",mod1),m, pt); + FillHistogram(Form("both%d_mpt_eff",mod1),m, pt, eff); + } + } + } + + if(!TestMass(m,pt)) continue; + + Int_t modCase = GetModCase(mod1, mod2); + + TestPi0ME(kPidAll, p12, modCase); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + TestPi0ME(kPidCPV, p12, modCase); + if ( ph1->IsDispOK() && ph2->IsDispOK() ) + { + TestPi0ME(kPidDisp, p12, modCase); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + TestPi0ME(kPidBoth, p12, modCase); + } + } + } + + TString spid[4]={"all","cpv","disp","both"} ; + for (int ipid = 0; ipid < 4; ipid++) + { + if (fMEExists[ipid]) + FillHistogram(Form("nTrigger_%s", spid[ipid].Data()), fMEPt[ipid], GetEfficiency(fMEPt[ipid])); + } + + // Take track's angles and compare with cluster's angles. + for(Int_t i3=0; i3GetEntriesFast(); i3++){ + TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3); + + Double_t phiAssoc = track->Phi(); + Double_t etaAssoc = track->Eta(); + Double_t ptAssoc = track->Pt(); + + Double_t ptAssocBin=GetAssocBin(ptAssoc) ; + Double_t dPhi(0.), dEta(0.); + + for (int ipid = 0; ipid < 4; ipid++) + { + if (fMEExists[ipid]) + { + dPhi = fMEPhi[ipid] - phiAssoc; + while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); + while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); + dEta = fMEEta[ipid] - etaAssoc; + FillHistogram(Form("%s_ptphieta_ptAssoc_%3.1f", spid[ipid].Data(), ptAssocBin), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid]) ); + } + } + } + } +} +//_______________________________________________________________________________ +void AliPHOSCorrelations::ConsiderTracksMixME() +{ + TString spid[4]={"all","cpv","disp","both"} ; + + TList * arrayList = GetTracksTPCList(fVtxBin, fCentBin, fEMRPBin); + + for(Int_t evi=0; eviGetEntries();evi++){ + TClonesArray * mixTracks = static_cast(arrayList->At(evi)); + for(Int_t i3=0; i3GetEntriesFast(); i3++){ + TLorentzVector * track = (TLorentzVector*)mixTracks->At(i3); + + Double_t phiAssoc = track->Phi(); + Double_t etaAssoc = track->Eta(); + Double_t ptAssoc = track->Pt(); + + Double_t ptAssocBin=GetAssocBin(ptAssoc) ; + + Double_t dPhi(0.), dEta(0.); + + for (int ipid = 0; ipid < 4; ipid++) + { + if (fMEExists[ipid]) + { + dPhi = fMEPhi[ipid] - phiAssoc; + while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); + while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); + dEta = fMEEta[ipid] - etaAssoc; + + FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f", spid[ipid].Data(), ptAssocBin), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid])); + FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f_mod%i", spid[ipid].Data(), ptAssocBin, fMEModCase[ipid]), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid])); + FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f_tpc%i", spid[ipid].Data(), ptAssocBin, CheckTriggerEta(fMEEta[ipid])), fMEPt[ipid], dPhi, dEta, 1./GetEfficiency(fMEPt[ipid])); + } + } + } + } +} + //_______________________________________________________________________________ TList* AliPHOSCorrelations::GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin){ @@ -1503,7 +1871,8 @@ TList* AliPHOSCorrelations::GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt } } //_______________________________________________________________________________ -Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt){ +Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt) const +{ //Calculates bin for(Int_t i=1; ifAssocBins.At(i-1) && ptPt(); - if(pt<0.5 || pt>10.) return kFALSE ; + if(pt<0.5 || pt>20.) return kFALSE ; if(fabs( t->Eta() )>0.8) return kFALSE; if(!fESDtrackCuts->AcceptTrack(t)) return kFALSE ; return kTRUE ; @@ -1580,7 +1949,7 @@ Bool_t AliPHOSCorrelations::SelectAODTrack(AliAODTrack * t) const // Estimate if this track can be used for the RP calculation. If all right - return "TRUE" { Float_t pt=t->Pt(); - if(pt<0.5 || pt>10.) return kFALSE ; + if(pt<0.5 || pt>20.) return kFALSE ; if(fabs( t->Eta() )>0.8) return kFALSE; if(fCheckHibridGlobal == kOnlyHibridTracks) { @@ -1596,12 +1965,6 @@ Bool_t AliPHOSCorrelations::SelectAODTrack(AliAODTrack * t) const return kTRUE ; } -//_______________________________________________________________________________ -void AliPHOSCorrelations::SetPeriod(Period period) -{ - fPeriod = period; -} - //_______________________________________________________________________________ void AliPHOSCorrelations::LogProgress(int step) // Fill "step by step" hist @@ -1617,18 +1980,40 @@ void AliPHOSCorrelations::LogSelection(int step, int internalRunNumber) //FillHistogram("hTotSelEvents", step+0.5); } //_______________________________________________________________________________ -Bool_t AliPHOSCorrelations::TestMass(Double_t m, Double_t /*pt*/) +Bool_t AliPHOSCorrelations::TestMass(Double_t m, Double_t pt) { //Check if mair in pi0 peak window //To make pT-dependent - if (fSigmaWidth == 0.) + if (!fSigmaWidth) // Default big window + { + FillHistogram("massWindow", fMassInvMean, fMassInvSigma); return (fMassInvMean-fMassInvSigma(fOutputContainer->FindObject(key)) ; if(hist) @@ -1636,32 +2021,46 @@ void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x)const else AliError(Form("can not find histogram (of instance TH1) <%s> ",key)) ; } -//_______________________________________________________________________________ -void AliPHOSCorrelations::FillHistogram(const char * key, Double_t x, Double_t y) const -{ - //Fills 2D histograms with key +//_____________________________________________________________________________ +void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x,Double_t y)const{ + //FillHistogram + TH1 * th1 = dynamic_cast (fOutputContainer->FindObject(key)); + if(th1) + th1->Fill(x, y) ; + else + AliError(Form("can not find histogram (of instance TH1) <%s> ",key)) ; +} + +//_____________________________________________________________________________ +void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z) const{ + //Fills 1D histograms with key TObject * obj = fOutputContainer->FindObject(key); - + TH2 * th2 = dynamic_cast (obj); if(th2) { - th2->Fill(x, y) ; + th2->Fill(x, y, z) ; return; } + TH3 * th3 = dynamic_cast (obj); + if(th3) { + th3->Fill(x, y, z) ; + return; + } + AliError(Form("can not find histogram (of instance TH2) <%s> ",key)) ; } -//_______________________________________________________________________________ -void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const -{ - //Fills 3D histograms with key +//_____________________________________________________________________________ +void AliPHOSCorrelations::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z, Double_t w) const{ + //Fills 1D histograms with key TObject * obj = fOutputContainer->FindObject(key); - + TH3 * th3 = dynamic_cast (obj); if(th3) { - th3->Fill(x, y, z) ; + th3->Fill(x, y, z, w) ; return; } - + AliError(Form("can not find histogram (of instance TH3) <%s> ",key)) ; } //_____________________________________________________________________________ @@ -1688,4 +2087,151 @@ void AliPHOSCorrelations::SetGeometry() } } } - +//_____________________________________________________________________________ +Double_t AliPHOSCorrelations::GetEfficiency(Double_t x) const { + //Efficiency for Both2core only! + + Double_t e =1.; + // From 0 to 5 - 11h for different centrality. + /*0: 0-5% + 1: 5-10% + 2: 10-20% + 3: 20-40% + 4: 40-60% + 5: 60-80% + 6: 0-20% + 7: 0-10%*/ + Double_t par0[9] = {-798863, 339.714, 6407.1, -457.778, 1283.65, -117.075, -19.3764, 0, 0}; + Double_t par1[9] = {-799344, -1852.1, 3326.29, -384.229, 504.046, 562.608, 130.518, 0, 0}; + Double_t par2[9] = {-858904, -1923.28, 5350.74, -568.946, 945.497, 419.647, 101.911, 0, 0}; + Double_t par3[9] = {-795652, -1495.97, 2926.46, -357.804, 478.961, 551.127, 128.86, 0, 0}; + Double_t par4[9] = {-891951, 279626, -123110, -5464.75, 27470.8, 283264, 15355.1, 192762, 44828.6}; + Double_t par5[9] = {-1.1094e+06, -986.915, 2127.71, -268.908, 375.594, 380.791, 89.4053, 0, 0}; + // Double_t par6[7] = {4.86106e+09, 4.47013e+08, -1.48079e+09, 1.47233e+08, -2.62356e+08, -1.00639e+08, -2.45629e+07, 0, 0}; + // Double_t par7[7] = {-1.36243e+06, -26011.1, 135838, -12161.3, 24956.8, 4985.4, 1285.57, 0, 0}; + + // 8 for pPb13 and 0-100% + Double_t par8[9] = {6.87095e+06, 8.36553e+06, -3.29572e+06, 2.18688e+06, -739490, 521666, 106661, 0, 0}; + + + Double_t* pFitPoint; + + if(fPeriod == kLHC11h) + { + if(x<1.) x = 1.; + + if (fCentrality<=5) pFitPoint = &par0[0]; + if (fCentrality>5 && fCentrality<=10) pFitPoint = &par1[0]; + if (fCentrality>10 && fCentrality<=20) pFitPoint = &par2[0]; + if (fCentrality>20 && fCentrality<=40) pFitPoint = &par3[0]; + if (fCentrality>40 && fCentrality<=60) pFitPoint = &par4[0]; + if (fCentrality>60) pFitPoint = &par5[0]; + + Double_t pFit[9]; + for (int i = 0; i < 10; ++i) + { + pFit[i] = *(pFitPoint+i); + } + + if (fCentrality>40 && fCentrality<=60) + e = TMath::Exp(-(((((1.+(pFit[1]*x))+(pFit[2]*(x*x)))+(pFit[5]*(x*(x*x))))+(pFit[7]*(x*(x*(x*x)))))/((((pFit[3]*x)+(pFit[4]*(x*x)))+(pFit[6]*(x*(x*x))))+(pFit[8]*(x*(x*(x*x))))))) ; + else + e = TMath::Exp(-((((1.+(pFit[1]*x))+(pFit[2]*(x*x)))+(pFit[5]*(x*(x*x))))/(((pFit[3]*x)+(pFit[4]*(x*x)))+(pFit[6]*(x*(x*x)))))) ; + } + else + if( fPeriod == kLHC13 ) + { + pFitPoint = &par8[0]; + Double_t pFit[9]; + for( int i = 0; i < 10; i++ ) + { + pFit[i] = *(pFitPoint+i); + } + + e = TMath::Exp(-((((pFit[0]+(pFit[1]*x))+(pFit[2]*(x*x)))+(pFit[5]*(x*(x*x))))/(((1.+(pFit[3]*x))+(pFit[4]*(x*x)))+(pFit[6]*(x*(x*x)))))) ; + } + else + { + // No case + AliWarning(Form("No efficiensy choise.")); + e = 1.; + } + + return e; +} +//_____________________________________________________________________________ +Int_t AliPHOSCorrelations::GetModCase(Int_t &mod1, Int_t &mod2) const { + + // Return modules pair namber. + if(mod1 == mod2) + { + if(mod1 == 1) return 1; + if(mod1 == 2) return 2; + if(mod1 == 3) return 3; + } + else + { + if(mod1 == 1 || mod2 == 1) + if(mod1 == 2 || mod2 == 2) + return 12; + + if(mod1 == 1 || mod2 == 1) + if(mod1 == 3 || mod2 == 3) + return 13; + if(mod1 == 2 || mod2 == 2) + if(mod1 == 3 || mod2 == 3) + return 23; + } + + AliError(Form("No choise for mod1 = %i, mod2 = %i", mod1, mod2)); + return 1; +} +//_____________________________________________________________________________ +void AliPHOSCorrelations::TestTrigger(){ + FillHistogram("hTriggerPassedEvents", 0); // All events + if (fEvent->GetFiredTriggerClasses().Contains("PHI7") ) + FillHistogram("hTriggerPassedEvents", 1.); // 13 events + if (fEvent->GetFiredTriggerClasses().Contains("PHS") ) + FillHistogram("hTriggerPassedEvents", 2.); // 11h events + + if (fEvent->GetFiredTriggerClasses().Contains("PHI7") || fEvent->GetFiredTriggerClasses().Contains("PHS")) + fPHOSEvent = true; + + if( fDebug >= 2 ) + AliInfo( Form("Event passed offline phos trigger test: %s ", fEvent->GetFiredTriggerClasses().Data() ) ); + + //fPHOSEvent = true; +} +//_____________________________________________________________________________ +Int_t AliPHOSCorrelations::CheckTriggerEta(Double_t eta){ + if (eta>=0.) + return 1; + return 2; +} +//_____________________________________________________________________________ +void AliPHOSCorrelations::TestPi0ME(Int_t ipid, TLorentzVector p12, Int_t modCase) +{ + Double_t phiTrigger=p12.Phi() ; + Double_t etaTrigger=p12.Eta() ; + Double_t pt=p12.Pt() ; + + if (pt >= fMEPt[ipid]) + { + fMEPt[ipid] = pt; + fMEPhi[ipid] = phiTrigger; + fMEEta[ipid] = etaTrigger; + fMEModCase[ipid] = modCase; + fMEExists[ipid] = true; + } +} +//_____________________________________________________________________________ +void AliPHOSCorrelations::ZeroingVariables(){ + for (int i = 0; i < 4; ++i) + { + fMEPhi[i] = fMEEta[i] = fMEPt[i] = -99; + fMEModCase[i] = 1; + fMEExists[i] = false; + + } +} + diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h index 590c06b911a..77ff5e9dd4c 100644 --- a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h +++ b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h @@ -35,6 +35,7 @@ public: enum Period { kUndefinedPeriod, kLHC10h, kLHC11h, kLHC13 }; enum EventSelection { kTotal, kInternalTriggerMaskSelection, kHasVertex, kHasAbsVertex, kHasCentrality, kCentUnderUpperBinUpperEdge, kHasPHOSClusters, kHasTPCTracks, kTotalSelected }; enum HibridCheckVeriable { kOnlyHibridTracks, kWithOutHibridTracks, kAllTracks }; + enum PID { kPidAll, kPidCPV, kPidDisp, kPidBoth}; enum TriggerSelection { kNoSelection, kCentralInclusive, kCentralExclusive, kSemiCentralInclusive, kSemiCentralExclusive, kMBInclusive, kMBExclusive }; @@ -53,7 +54,9 @@ public: void EnableTOFCut(Bool_t enable = kTRUE, Double_t TOFCut = 100.e-9){fTOFCutEnabled=enable; fTOFCut=TOFCut;} void SetMassWindow(Double_t massMean = 0.135, Double_t massSigma = 0.01) { fMassInvMean = massMean; fMassInvSigma = massSigma; } void SetSigmaWidth(Double_t sigmaWidth= 0) { fSigmaWidth = sigmaWidth; } - void SetPeriod(Period period); + void SetMassMeanParametrs(Double_t p0 = -20.9476, Double_t p1 = 0.1300) {fMassMeanP0 = p0; fMassMeanP1 = p1;} // from mass fit + void SetMassSigmaParametrs(Double_t p0 = 0.005, Double_t p1 = -0.0001) {fMassSigmaP0 = p0; fMassSigmaP1 = p1;} // from mass fit + void SetPeriod(Period period) { fPeriod = period; } void SetCentralityBorders (double down = 0., double up = 90.) ; void SetPtAssocBins(TArrayD * arr){fAssocBins.Set(arr->GetSize(), arr->GetArray()) ;} @@ -67,23 +70,32 @@ protected: AliPHOSCorrelations& operator=(const AliPHOSCorrelations&); // not implemented // Histograms and trees. - void SetHistPtAssoc(); // Set massive of histograms (1-5). - void SetHistCutDistribution(); // Set other histograms. + void SetHistPtNumTrigger(Int_t ptMult, Double_t ptMin, Double_t ptMax); // Set massive of histograms (1-5). + void SetHistPtAssoc(Int_t ptMult, Double_t ptMin, Double_t ptMax); // Set massive of histograms (1-5). + void SetHistMass(Int_t ptMult, Double_t ptMin, Double_t ptMax); // Set other histograms. void SetHistEtaPhi(); // Set hists, with track's and cluster's angle distributions. - void FillTrackEtaPhi(); // Distribution by track's angles. void SetHistPHOSClusterMap(); // XZE distribution in PHOS. - void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key. + void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key. + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t w) const ; //Fill 3D histogram witn name key + void FillTrackEtaPhi(); // Distribution by track's angles. void SetESDTrackCuts(); // AliESDtrack cuts ( for esd data ) Bool_t TestMass(Double_t m, Double_t pt) ; - Double_t GetAssocBin(Double_t pt) ; + Double_t MassMeanFunktion(Double_t &pt) const ; + Double_t MassSigmaFunktion(Double_t &pt) const ; + + Double_t GetAssocBin(Double_t pt) const ; + + Double_t GetEfficiency(Double_t pt) const ; // Return Pi0 efficiency for current pT. + + Int_t GetModCase(Int_t &mod1, Int_t &mod2) const; // Produce part of module neme for pTetaPhi histogram in mixed events. Int_t ConvertToInternalRunNumber(Int_t run); - void FillTriggerProgress(); + void TestTrigger(); Bool_t RejectTriggerMaskSelection(); void SetVertex(); @@ -104,13 +116,19 @@ protected: Double_t ApplyFlatteningV0A(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening. Double_t ApplyFlatteningV0C(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening. + void ZeroingVariables(); virtual void SelectPhotonClusters(); void SelectAccosiatedTracks(); void ConsiderPi0s(); + void ConsiderPi0sME(); void ConsiderPi0sMix(); // MIX for catch Mass void ConsiderTracksMix(); // MIX for catch Yeild + void ConsiderTracksMixME(); + + void TestPi0ME(Int_t ipid, TLorentzVector p12, Int_t modCase); + Int_t CheckTriggerEta(Double_t eta); TList* GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin); TList* GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin); @@ -155,6 +173,7 @@ private: // Control variables Int_t fCheckHibridGlobal; // For checking/dischecking/passingcheck: t->IsHybridGlobalConstrainedGlobal(); + Bool_t fPHOSEvent; // PHOS event trigger. // Behavior / cuts Period fPeriod; @@ -169,6 +188,12 @@ private: Double_t fMassInvSigma ; // Double_t fSigmaWidth; // 0 = wide + // Funktion of window mass parametrs: [mass, pt] + Double_t fMassMeanP0; + Double_t fMassMeanP1; + Double_t fMassSigmaP0; + Double_t fMassSigmaP1; + AliVEvent* fEvent; //! Current event AliESDEvent* fEventESD; //! Current event, if ESD. AliAODEvent* fEventAOD; //! Current event, if AOD. @@ -195,6 +220,10 @@ private: Float_t fRP ; //! Reaction plane calculated with full TPC Int_t fEMRPBin; //! Event Mixing Reaction Plane Bin + Double_t fMEPhi[4], fMEEta[4], fMEPt[4]; + Bool_t fMEExists[4]; + Int_t fMEModCase[4]; + TClonesArray * fCaloPhotonsPHOS ; //! PHOS photons in current event TClonesArray * fTracksTPC ; //! TPC Tracks in current event -- 2.39.3