From 7deabbe729941d5af77cb93aa4c6a7ccf9dd91b3 Mon Sep 17 00:00:00 2001 From: prsnko Date: Tue, 15 Jul 2014 17:22:43 +0400 Subject: [PATCH] logic update and bug fix --- .../PHOS_Correlation/AliPHOSCorrelations.cxx | 904 ++++++++++-------- .../PHOS_Correlation/AliPHOSCorrelations.h | 145 +-- 2 files changed, 613 insertions(+), 436 deletions(-) diff --git a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx index 68cee78d987..bd18b709655 100644 --- a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx +++ b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.cxx @@ -13,10 +13,10 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -// Analysis task for identified PHOS cluster from pi0 and take korrelation betwen hadron-pi0 angel's. -// Authors: Daniil Ponomarenko (Daniil.Ponomarenko@cern.ch) -// Dmitry Blau -// 07-Feb-2014 +// Analysis task for identified PHOS cluster from pi0 and extracting pi0-hadron correlation. +// Authors: Daniil Ponomarenko +// Dmitry Blau +// 09-Jul-2014 #include #include "THashList.h" @@ -57,6 +57,7 @@ #include "AliAODCaloCluster.h" #include "AliCaloPhoton.h" #include "AliAODVertex.h" +#include "AliInputEventHandler.h" using std::cout; using std::endl; @@ -79,10 +80,12 @@ AliPHOSCorrelations::AliPHOSCorrelations() fCentNMixed(), fNEMRPBins(9), fAssocBins(), + fUseMEAlgoritmForReal(true), + fUseMEAlgoritmForMix(true), fCheckHibridGlobal(kOnlyHibridTracks), fPHOSEvent(false), + fMBEvent(false), fPeriod(kUndefinedPeriod), - fInternalTriggerSelection(kNoSelection), fMaxAbsVertexZ(10.), fManualV0EPCalc(false), fCentCutoffDown(0.), @@ -97,6 +100,7 @@ AliPHOSCorrelations::AliPHOSCorrelations() fEvent(0x0), fEventESD(0x0), fEventAOD(0x0), + fEventHandler(0), fESDtrackCuts(0x0), fRunNumber(-999), fInternalRunNumber(0), @@ -119,6 +123,85 @@ AliPHOSCorrelations::AliPHOSCorrelations() //Deafult constructor, no memory allocations here } +//_______________________________________________________________________________ +AliPHOSCorrelations::AliPHOSCorrelations(const char *name) +:AliAnalysisTaskSE(name), + fPHOSGeo(0x0), + fOutputContainer(0x0), + fMinClusterEnergy(0.3), + fMinBCDistance(0), + fMinNCells(3), + fMinM02(0.2), + fTOFCutEnabled(1), + fTOFCut(100.e-9), + fNVtxZBins(1), + fCentEdges(10), + fCentNMixed(), + fNEMRPBins(9), + fAssocBins(), + fUseMEAlgoritmForReal(true), + fUseMEAlgoritmForMix(true), + fCheckHibridGlobal(kOnlyHibridTracks), + fPHOSEvent(false), + fMBEvent(false), + fPeriod(kUndefinedPeriod), + fMaxAbsVertexZ(10.), + fManualV0EPCalc(false), + fCentCutoffDown(0.), + fCentCutoffUp(90), + fMassInvMean(0.135), + fMassInvSigma(0.05), + fSigmaWidth(0.), + fMassMeanP0(-20.9476), + fMassMeanP1(0.1300), + fMassSigmaP0(0.005), + fMassSigmaP1(-0.0001), + fEvent(0x0), + fEventESD(0x0), + fEventAOD(0x0), + fEventHandler(0), + fESDtrackCuts(0x0), + fRunNumber(-999), + fInternalRunNumber(0), + fMultV0(0x0), + fV0Cpol(0.),fV0Apol(0.), + fEPcalibFileName("$ALICE_ROOT/OADB/PHOS/PHOSflat.root"), + fVertexVector(), + fVtxBin(0), + fCentralityEstimator("V0M"), + fCentrality(0.), + fCentBin(0), + fHaveTPCRP(0), + fRP(0.), + fEMRPBin(0), + fCaloPhotonsPHOS(0x0), + fTracksTPC(0x0), + fCaloPhotonsPHOSLists(0x0), + fTracksTPCLists(0x0) +{ + // Constructor + // Output slots #0 write into a TH1 container + DefineOutput(1,THashList::Class()); + + const Int_t nPtAssoc=10 ; + Double_t ptAssocBins[nPtAssoc]={0.,0.5,1.0,1.5,2.0,3.,5.,7.,10.,16} ; + fAssocBins.Set(nPtAssoc,ptAssocBins) ; + + const int nbins = 9; + Double_t edges[nbins+1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80.}; + TArrayD centEdges(nbins+1, edges); + Int_t nMixed[nbins] = {4,4,6,10,20,30,50,100,100}; + //Int_t nMixed[nbins] = {100,100,100,100,100,100,100,100,100}; + TArrayI centNMixed(nbins, nMixed); + SetCentralityBinning(centEdges, centNMixed); + + fVertex[0]=0; fVertex[1]=0; fVertex[2]=0; + + SetGeometry(); + + ZeroingVariables(); +} + //_______________________________________________________________________________ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) :AliAnalysisTaskSE(name), @@ -135,10 +218,12 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fCentNMixed(), fNEMRPBins(9), fAssocBins(), + fUseMEAlgoritmForReal(true), + fUseMEAlgoritmForMix(true), fCheckHibridGlobal(kOnlyHibridTracks), fPHOSEvent(false), + fMBEvent(false), fPeriod(period), - fInternalTriggerSelection(kNoSelection), fMaxAbsVertexZ(10.), fManualV0EPCalc(false), fCentCutoffDown(0.), @@ -153,6 +238,7 @@ AliPHOSCorrelations::AliPHOSCorrelations(const char *name, Period period) fEvent(0x0), fEventESD(0x0), fEventAOD(0x0), + fEventHandler(0), fESDtrackCuts(0x0), fRunNumber(-999), fInternalRunNumber(0), @@ -244,15 +330,18 @@ void AliPHOSCorrelations::UserCreateOutputObjects() fOutputContainer = new THashList(); fOutputContainer->SetOwner(kTRUE); - //Event selection - fOutputContainer->Add(new TH1F("hTriggerPassedEvents","Event selection passed Cuts", 20, 0., 20.) ); - - fOutputContainer->Add(new TH1F("hTotSelEvents","Event selection", kTotalSelected+3, 0., double(kTotalSelected+3))) ; - + // Event selection + fOutputContainer->Add(new TH1F("hTriggerPassedEvents","Event selection passed Cuts", 20, 0., 20.) ); + // Analysis event's progress + fOutputContainer->Add(new TH1F("hTotSelEvents","Event selection", 15, 0., 15)) ; 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))) ; + // Centrality, Reaction plane selection + 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.)) ; + // Mass selection fOutputContainer->Add(new TH2F("massWindow","mean & sigma", 100,0.095,0.185,500,0.,0.05)); + fOutputContainer->Add(new TH1F("massWindowPass","Mass selection", 10, 0., 10.)) ; + // Cluster multiplisity fOutputContainer->Add(new TH2F("hCluEvsClu","ClusterMult vs E",200,0.,10.,100,0.,100.)) ; @@ -499,10 +588,10 @@ void AliPHOSCorrelations::SetHistPtAssoc(Int_t ptMult, Double_t ptMin, Double_t void AliPHOSCorrelations::SetHistPHOSClusterMap() { - for(int i = 0; i<3; i++) + for(int i = 0; i<5; i++) { // Cluster X/Z/E distribution. - fOutputContainer->Add(new TH3F(Form("QA_cluXZE_mod%i", i+1),Form("PHOS Clusters XZE distribution of module %i", i+1), 70, 0, 70, 60, 0, 60, 200, 0, 20 ) ); + fOutputContainer->Add(new TH3F(Form("QA_cluXZE_mod%i", i),Form("PHOS Clusters XZE distribution of module %i", i), 70, 0, 70, 60, 0, 60, 200, 0, 20 ) ); TH3F *h = static_cast(fOutputContainer->Last()) ; h->GetXaxis()->SetTitle("X"); h->GetYaxis()->SetTitle("Z"); @@ -514,7 +603,8 @@ void AliPHOSCorrelations::UserExec(Option_t *) { // Main loop, called for each event analyze ESD/AOD // Step 0: Event Objects - LogProgress(0); + + LogProgress(0); fEvent = InputEvent(); if( ! fEvent ) { @@ -522,14 +612,13 @@ void AliPHOSCorrelations::UserExec(Option_t *) PostData(1, fOutputContainer); return ; } + LogProgress(1); ZeroingVariables(); fEventESD = dynamic_cast(fEvent); fEventAOD = dynamic_cast(fEvent); - TestTrigger(); - // Step 1(done once): if( fRunNumber != fEvent->GetRunNumber() ) { @@ -538,15 +627,25 @@ void AliPHOSCorrelations::UserExec(Option_t *) //SetGeometry(); SetESDTrackCuts(); } - LogProgress(1); - if( RejectTriggerMaskSelection() ) + //Data + //get Event-Handler for the trigger information + fEventHandler= dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!fEventHandler) { + AliError("Could not get InputHandler"); PostData(1, fOutputContainer); return; // Reject! } - LogProgress(2); + LogProgress(2); + if( RejectTriggerMaskSelection() ) + { + PostData(1, fOutputContainer); + return; // Reject! + } + LogProgress(3); + // Step 2: Vertex // fVertex, fVertexVector, fVtxBin SetVertex(); @@ -555,7 +654,7 @@ void AliPHOSCorrelations::UserExec(Option_t *) PostData(1, fOutputContainer); return; // Reject! } - LogProgress(3); + LogProgress(4); // Step 3: Centrality // fCentrality, fCentBin @@ -565,54 +664,83 @@ void AliPHOSCorrelations::UserExec(Option_t *) PostData(1, fOutputContainer); return; // Reject! } + LogProgress(5); FillHistogram("hCentrality",fCentrality,fInternalRunNumber-0.5) ; - LogProgress(4); // Step 4: Reaction Plane // fHaveTPCRP, fRP, fRPV0A, fRPV0C, fRPBin EvalReactionPlane(); fEMRPBin = GetRPBin(); - LogProgress(5); // Step 5: Event Photons (PHOS Clusters) selectionMakeFlat SelectPhotonClusters(); if( ! fCaloPhotonsPHOS->GetEntriesFast() ) LogSelection(kHasPHOSClusters, fInternalRunNumber); - LogProgress(6); // Step 6: Event Associated particles (TPC Tracks) selection SelectAccosiatedTracks(); - if( ! fTracksTPC->GetEntriesFast() ) - LogSelection(kHasTPCTracks, fInternalRunNumber); + LogSelection(kHasTPCTracks, fInternalRunNumber); LogSelection(kTotalSelected, fInternalRunNumber); - LogProgress(7); - + // Step 7: Make TPC's mask + FillTrackEtaPhi(); - // Step 7: Consider pi0 (photon/cluster) pairs. - //ConsiderPi0s(); - ConsiderPi0sME(); - - // Step 8; Mixing - ConsiderPi0sMix(); + LogProgress(6); - //ConsiderTracksMix(); - ConsiderTracksMixME(); - LogProgress(8); + // Step 8: Start correlation analysis. + // Filling real histograms: + if (fUseMEAlgoritmForReal) // if true than use ME algoritm + { + LogProgress(7); + SelectTriggerPi0ME(); // Extract one most energetic pi0 candidate in this event. + if (fPHOSEvent) + { + ConsiderPi0sME(); // Consider the most energetic Pi0 in this event with all tracks of this event. + LogProgress(8); + } + } + else //using common algoritm + { + LogProgress(10); + if (fPHOSEvent) + { + ConsiderPi0s(); // Extract all pi0 candidates and compare them with all track of this event. + LogProgress(11); + } + } + // Filling mixing histograms: + if(fUseMEAlgoritmForMix) // if true than use ME algoritm + { + // Filling mixing histograms + if (fMBEvent) + { + if (!fUseMEAlgoritmForReal) SelectTriggerPi0ME(); // Extract one most energetic pi0 candidate in this event if it not done yet. - // Step 9: Make TPC's mask - FillTrackEtaPhi(); - LogProgress(9); + ConsiderPi0sMix(); // Make background for extracting pi0 mass. + ConsiderTracksMixME(); // Compare only one most energetic pi0 candidate with all tracks from previous MB events. - // Step 10: Update lists - UpdatePhotonLists(); - UpdateTrackLists(); - - LogProgress(10); + UpdatePhotonLists(); // Updating pull of photons. + UpdateTrackLists(); // Updating pull of tracks. + LogProgress(9); + } + } + else //using common algoritm + { + if (fMBEvent) + { + ConsiderPi0sMix(); // Make background for extracting pi0 mass. + ConsiderTracksMix(); // Compare all pi0 candidates in current event whit all tracks from previous MB events. + + UpdatePhotonLists(); + UpdateTrackLists(); + LogProgress(12); + } + } + LogProgress(13); // Post output data. PostData(1, fOutputContainer); } @@ -1143,41 +1271,71 @@ Int_t AliPHOSCorrelations::ConvertToInternalRunNumber(Int_t run){ //_______________________________________________________________________________ Bool_t AliPHOSCorrelations::RejectTriggerMaskSelection() { + // Analyse trigger event and reject it if it not intresting. const Bool_t REJECT = true; const Bool_t ACCEPT = false; - // No need to check trigger mask if no selection is done - if( kNoSelection == fInternalTriggerSelection ) - return ACCEPT; + if( fDebug >= 2 ) + AliInfo( Form("Event passed offline phos trigger test: %s ", fEvent->GetFiredTriggerClasses().Data() ) ); + + Int_t physSelMask = fEventHandler->IsEventSelected(); - Bool_t reject = REJECT; + Bool_t isAny = physSelMask & AliVEvent::kAny; - 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)); + Bool_t isPHI1 = physSelMask & AliVEvent::kPHI1; + Bool_t isPHI7 = physSelMask & AliVEvent::kPHI7; + Bool_t isPHI8 = physSelMask & AliVEvent::kPHI8; + Bool_t isCentral = physSelMask & AliVEvent::kCentral; + Bool_t isSemiCentral = physSelMask & AliVEvent::kSemiCentral; + Bool_t isPHOSPb = physSelMask & AliVEvent::kPHOSPb; + Bool_t isMB = physSelMask & AliVEvent::kMB; + Bool_t isINT7 = physSelMask & AliVEvent::kINT7; + Bool_t isAnyINT = physSelMask & AliVEvent::kAnyINT; - if( kCentralInclusive == fInternalTriggerSelection - && isCentral ) reject = ACCEPT; // accept event. - else if( kCentralExclusive == fInternalTriggerSelection - && isCentral && !isSemiCentral && !isMB ) reject = ACCEPT; // accept event. - else if( kSemiCentralInclusive == fInternalTriggerSelection - && isSemiCentral ) reject = ACCEPT; // accept event - else if( kSemiCentralExclusive == fInternalTriggerSelection - && isSemiCentral && !isCentral && !isMB ) reject = ACCEPT; // accept event. + // All input events + FillHistogram("hTriggerPassedEvents", 0); + //if ( !isAny ) cout<<"Strange event"<GetMomentum(lorentzMomentum, fVertex); clu->GetMomentum(lorentzMomentum, origo); - if(inPHOS>=fCaloPhotonsPHOS->GetSize()){ fCaloPhotonsPHOS->Expand(inPHOS+50) ; } @@ -1428,116 +1585,202 @@ void AliPHOSCorrelations::SelectAccosiatedTracks() iTracks++ ; } } +//_______________________________________________________________________________ +void AliPHOSCorrelations::SelectTriggerPi0ME() +{ + 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); + + //Now we choosing most energetic pi0. + 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); + } + } + } +} + //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderPi0s() { - // Must consider only PHOS events in real distribution. - //if (fPHOSEvent) + // Consider all photons from PHOS + const Int_t nPHOS=fCaloPhotonsPHOS->GetEntriesFast() ; + for(Int_t i1=0; i1 < nPHOS-1; i1++) { - 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(i1) ; - for (Int_t i2=i1+1; i2At(i2) ; - TLorentzVector p12 = *ph1 + *ph2; + AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i2) ; + TLorentzVector p12 = *ph1 + *ph2; - Double_t phiTrigger=p12.Phi() ; - Double_t etaTrigger=p12.Eta() ; + 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() ; + 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("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",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); + 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); + 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); - } + 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); + 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("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("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); - } + FillHistogram(Form("both%d_mpt",mod1),m, pt); + FillHistogram(Form("both%d_mpt_eff",mod1),m, pt, eff); } - } + } + } - if(!TestMass(m,pt)) continue; + if(!TestMass(m,pt)) continue; - FillHistogram("nTrigger_all", pt, eff); + FillHistogram("nTrigger_all", pt, eff); + if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + FillHistogram("nTrigger_cpv", pt, eff); + if ( ph1->IsDispOK() && ph2->IsDispOK() ) + { + FillHistogram("nTrigger_disp", pt, eff); if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram("nTrigger_cpv", pt, eff); - if ( ph1->IsDispOK() && ph2->IsDispOK() ) - { - FillHistogram("nTrigger_disp", pt, eff); - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - FillHistogram("nTrigger_both", pt, eff); - } + FillHistogram("nTrigger_both", pt, eff); + } - // Take track's angles and compare with cluster's angles. - for(Int_t i3=0; i3GetEntriesFast(); i3++){ - TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3); + // 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 phiAssoc = track->Phi(); + Double_t etaAssoc = track->Eta(); + Double_t ptAssoc = track->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 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 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); + 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 ( 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); } } } @@ -1547,72 +1790,66 @@ void AliPHOSCorrelations::ConsiderPi0s() //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderPi0sMix() { - // 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++) { - - 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++) { - 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; i2 < mixPHOS->GetEntriesFast(); i2++) { - 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() ) { - 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); + FillHistogram("mix_cpv_mpt",m, pt); + FillHistogram("mix_cpv_mpt_left",m, pt); + FillHistogram("mix_cpv_mpt_right",m, pt); - 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_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_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_disp_mpt",m, pt); - FillHistogram("mix_disp_mpt_left",m, pt); - FillHistogram("mix_disp_mpt_right",m, pt); + FillHistogram("mix_both_mpt",m, pt); + FillHistogram("mix_both_mpt_left",m, pt); + FillHistogram("mix_both_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); + 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 ( ph1->IsCPVOK() && ph2->IsCPVOK() ) + if (mod1 == mod2) // for each module { - 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); - } + FillHistogram(Form("mix_both%d_mpt",mod1),m, pt); + FillHistogram(Form("mix_both%d_mpt_eff",mod1),m, pt, eff); } } } @@ -1639,7 +1876,7 @@ void AliPHOSCorrelations::ConsiderTracksMix() Int_t mod2 = ph2->Module(); - if(!TestMass(m,pt)) continue; + if(!TestMass(m,pt)) continue; for(Int_t evi=0; eviGetEntries();evi++){ TClonesArray * mixTracks = static_cast(arrayList->At(evi)); @@ -1648,7 +1885,7 @@ void AliPHOSCorrelations::ConsiderTracksMix() Double_t phiAssoc = track->Phi(); Double_t etaAssoc = track->Eta(); - Double_t ptAssoc = track->Pt(); + Double_t ptAssoc = track->Pt(); Double_t ptAssocBin=GetAssocBin(ptAssoc) ; @@ -1656,11 +1893,11 @@ void AliPHOSCorrelations::ConsiderTracksMix() 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 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); + FillHistogram(Form("mix_all_ptphieta_ptAssoc_%3.1f_tpc%i",ptAssocBin, CheckTriggerEta(etaTrigger)), pt, dPhi, dEta, eff); if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) { @@ -1689,125 +1926,37 @@ void AliPHOSCorrelations::ConsiderTracksMix() //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderPi0sME() { - //Seek Most Energetic (ME) Pi0 and work whit it. - // Must consider only PHOS events in real distribution. - if (fPHOSEvent) + TString spid[4]={"all","cpv","disp","both"} ; + // Counting number of trigger particles. + for (int ipid = 0; ipid < 4; ipid++) { - 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 (fMEExists[ipid]) + FillHistogram(Form("nTrigger_%s", spid[ipid].Data()), GetMEPt(ipid), 1./GetEfficiency(GetMEPt(ipid))); + } - if ( ph1->IsCPVOK() && ph2->IsCPVOK() ) - { - FillHistogram("cpv_mpt",m, pt); - FillHistogram("cpv_mpt_left",m, pt); - FillHistogram("cpv_mpt_right",m, pt); + // Take track's angles and compare with trigger's angles. + for(Int_t i3=0; i3GetEntriesFast(); i3++){ + TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3); - FillHistogram("cpv_mpt_eff",m, pt, eff); - FillHistogram("cpv_mpt_left_eff",m, pt, eff); - FillHistogram("cpv_mpt_right_eff",m, pt, eff); - } + Double_t phiAssoc = track->Phi(); + Double_t etaAssoc = track->Eta(); + Double_t ptAssoc = track->Pt(); - if ( ph1->IsDispOK() && ph2->IsDispOK() ) - { - FillHistogram("disp_mpt",m, pt); - FillHistogram("disp_mpt_left",m, pt); - FillHistogram("disp_mpt_right",m, pt); + Double_t ptAssocBin=GetAssocBin(ptAssoc) ; + Double_t dPhi(0.), dEta(0.); - 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], 1./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 (GetMEExists(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]) ); - } - } - } - } + dPhi = GetMEPhi(ipid) - phiAssoc; + while (dPhi > 1.5*TMath::Pi()) dPhi-=2*TMath::Pi(); + while (dPhi < -.5*TMath::Pi()) dPhi+=2*TMath::Pi(); + dEta = GetMEEta(ipid) - etaAssoc; + FillHistogram(Form("%s_ptphieta_ptAssoc_%3.1f", spid[ipid].Data(), ptAssocBin), GetMEPt(ipid), dPhi, dEta, 1./GetEfficiency(GetMEPt(ipid)) ); + } + } + } } //_______________________________________________________________________________ void AliPHOSCorrelations::ConsiderTracksMixME() @@ -1827,20 +1976,23 @@ void AliPHOSCorrelations::ConsiderTracksMixME() Double_t ptAssocBin=GetAssocBin(ptAssoc) ; + Double_t ptTrigger (0.); + Double_t dPhi(0.), dEta(0.); for (int ipid = 0; ipid < 4; ipid++) { - if (fMEExists[ipid]) + if (GetMEExists(ipid)) { - dPhi = fMEPhi[ipid] - phiAssoc; + dPhi = GetMEPhi(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; + dEta = GetMEEta(ipid) - etaAssoc; + ptTrigger = GetMEPt(ipid); - 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])); + FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f", spid[ipid].Data(), ptAssocBin), ptTrigger, dPhi, dEta, 1./GetEfficiency(ptTrigger)); + FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f_mod%i", spid[ipid].Data(), ptAssocBin, GetMEModCase(ipid)), ptTrigger, dPhi, dEta, 1./GetEfficiency(ptTrigger)); + FillHistogram(Form("mix_%s_ptphieta_ptAssoc_%3.1f_tpc%i", spid[ipid].Data(), ptAssocBin, CheckTriggerEta(GetMEEta(ipid))), ptTrigger, dPhi, dEta, 1./GetEfficiency(ptTrigger)); } } } @@ -1878,7 +2030,7 @@ TList* AliPHOSCorrelations::GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt //_______________________________________________________________________________ Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt) const { - //Calculates bin + //Calculates bin of associated particle pt. for(Int_t i=1; ifAssocBins.At(i-1) && pt60) pFitPoint = &par5[0]; Double_t pFit[9]; - for (int i = 0; i < 10; ++i) + for (int i = 0; i < 9; ++i) { pFit[i] = *(pFitPoint+i); } @@ -2193,34 +2359,6 @@ Int_t AliPHOSCorrelations::GetModCase(Int_t &mod1, Int_t &mod2) const { return 1; } //_____________________________________________________________________________ -void AliPHOSCorrelations::TestTrigger(){ - FillHistogram("hTriggerPassedEvents", 0); // All events - if (fEvent->GetFiredTriggerClasses().Contains("PHI7") ) - FillHistogram("hTriggerPassedEvents", 1.); // 13 events - else - if (fEvent->GetFiredTriggerClasses().Contains("PHS") ) - FillHistogram("hTriggerPassedEvents", 2.); // 11h events - else - if (fEvent->GetFiredTriggerClasses().Contains("CSEMI") ) - FillHistogram("hTriggerPassedEvents", 3.); // 11h events - else - if (fEvent->GetFiredTriggerClasses().Contains("CCENT") ) - FillHistogram("hTriggerPassedEvents", 4.); // 11h events - else - FillHistogram("hTriggerPassedEvents", 10.); // other events - - if (fEvent->GetFiredTriggerClasses().Contains("PHI7") || fEvent->GetFiredTriggerClasses().Contains("PHS")) - fPHOSEvent = true; - - if (fEvent->GetFiredTriggerClasses().Contains("CSEMI") || fEvent->GetFiredTriggerClasses().Contains("CCENT")) - 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; @@ -2233,23 +2371,33 @@ void AliPHOSCorrelations::TestPi0ME(Int_t ipid, TLorentzVector p12, Int_t modCas 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; - } + if ( GetMEExists(ipid) ) + { + if ( pt>=GetMEPt(ipid) ) + { + SetMEPt(ipid,pt); + SetMEPhi(ipid, phiTrigger); + SetMEEta(ipid, etaTrigger); + SetMEModCase(ipid, modCase); + } + } + else + { + SetMEPt(ipid,pt); + SetMEPhi(ipid, phiTrigger); + SetMEEta(ipid, etaTrigger); + SetMEModCase(ipid, modCase); + SetMEExists(ipid); + } } //_____________________________________________________________________________ void AliPHOSCorrelations::ZeroingVariables(){ + // Set Phi, Eta, pT, modNumber andtrigger variable of moust energetic trigger particle to zero. for (int i = 0; i < 4; ++i) { + fMEExists[i] = false; 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 77ff5e9dd4c..02c99b7c9f0 100644 --- a/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h +++ b/PWGGA/PHOSTasks/PHOS_Correlation/AliPHOSCorrelations.h @@ -4,10 +4,10 @@ /* Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ -// Analysis task for identified PHOS cluster from pi0 and take korrelation betwen hadron-pi0 angel's. -/// Authors: Daniil Ponomarenko (Daniil.Ponomarenko@cern.ch) -// Dmitry Blau -// 07-Feb-2014 +// Analysis task for identified PHOS cluster from pi0 and extracting pi0-hadron correlation. +// Authors: Daniil Ponomarenko +// Dmitry Blau +// 09-Jul-2014 class TClonesArray; class AliStack ; @@ -24,6 +24,8 @@ class AliAODTrack ; class AliVCluster ; class AliAnalysisUtils; class AliEPFlattener; +class AliAODInputHandler; +class AliESDInputHandler; #include "TArrayD.h" @@ -33,14 +35,14 @@ class AliPHOSCorrelations : public AliAnalysisTaskSE { public: enum Period { kUndefinedPeriod, kLHC10h, kLHC11h, kLHC13 }; - enum EventSelection { kTotal, kInternalTriggerMaskSelection, kHasVertex, kHasAbsVertex, kHasCentrality, kCentUnderUpperBinUpperEdge, kHasPHOSClusters, kHasTPCTracks, kTotalSelected }; + enum EventSelection { kTotal, kEvent, kEventHandler, kTriggerMaskSelection, kHasVertex, kHasCentrality, kHasPHOSClusters, kHasTPCTracks, kPHOSEvent, kMBEvent, kTotalSelected, kHasAbsVertex }; enum HibridCheckVeriable { kOnlyHibridTracks, kWithOutHibridTracks, kAllTracks }; enum PID { kPidAll, kPidCPV, kPidDisp, kPidBoth}; - enum TriggerSelection { kNoSelection, kCentralInclusive, kCentralExclusive, kSemiCentralInclusive, kSemiCentralExclusive, kMBInclusive, kMBExclusive }; public: AliPHOSCorrelations(); + AliPHOSCorrelations(const char *name); AliPHOSCorrelations(const char *name, Period period ); virtual ~AliPHOSCorrelations(); @@ -49,8 +51,9 @@ public: // virtual void Terminate(Option_t *); void SetHibridGlobalCheking(Int_t hibridCheck = kAllTracks) {fCheckHibridGlobal = hibridCheck; } + void SetAnalysisAlgoritmForReal(TString algoritm = "ME") {algoritm.Contains("ME")?fUseMEAlgoritmForReal = true:fUseMEAlgoritmForReal = false;} + void SetAnalysisAlgoritmForMix(TString algoritm = "ME") {algoritm.Contains("ME")?fUseMEAlgoritmForMix = true:fUseMEAlgoritmForMix = false;} void SetCentralityBinning(const TArrayD& edges, const TArrayI& nMixed); - void SetInternalTriggerSelection(TriggerSelection selection) { fInternalTriggerSelection = selection; } 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; } @@ -70,16 +73,15 @@ protected: AliPHOSCorrelations& operator=(const AliPHOSCorrelations&); // not implemented // Histograms and trees. - 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 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 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, 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 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, 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, Double_t w) const ; //Fill 3D histogram witn name key - void FillTrackEtaPhi(); // Distribution by track's angles. void SetESDTrackCuts(); // AliESDtrack cuts ( for esd data ) @@ -87,16 +89,14 @@ protected: 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. + Double_t GetAssocBin(Double_t pt) const ; //Calculates bin of associated particle pt. + 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 TestTrigger(); - Bool_t RejectTriggerMaskSelection(); + Bool_t RejectTriggerMaskSelection(); // Select event trigger and reject. void SetVertex(); Bool_t RejectEventVertex(); @@ -104,37 +104,42 @@ protected: void SetCentrality(); // Find centrality of event. Bool_t RejectEventCentrality(); - Int_t GetCentralityBin(Float_t centralityV0M); UInt_t GetNumberOfCentralityBins() { return fCentEdges.GetSize()-1; } - void EvalReactionPlane(); // Find RP of event. - void EvalV0ReactionPlane(); // Find RP of event. - Int_t GetRPBin(); // Return RP (rad). + void EvalReactionPlane(); // Find RP of event. + void EvalV0ReactionPlane(); // Find RP of event. + Int_t GetRPBin(); // Return RP (rad). - Double_t ApplyFlattening(Double_t phi, Double_t c) ; //Apply centrality-dependent flattening. - 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. + Double_t ApplyFlattening(Double_t phi, Double_t c) ; // Apply centrality-dependent flattening. + 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 FillTrackEtaPhi(); // Distribution by track's angles. + + void SelectTriggerPi0ME(); //Select most energetic Pi0 in event. + + void ConsiderPi0s(); // Consider all Pi0 with all tracks in same event. + void ConsiderTracksMix(); // Consider all Pi0 in this event with tracks from MIXing pull. + + void ConsiderPi0sME(); // Consider the most energetic Pi0 in this event with all tracks of this event. + void ConsiderTracksMixME(); // Consider the most energetic Pi0 in this event with all tracks from MIXing pull. + 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); + void TestPi0ME(Int_t ipid, TLorentzVector p12, Int_t modCase); // Compare Pi0 particles and save most energetic. + Int_t CheckTriggerEta(Double_t eta); // Return 1 if eta>=0, else 2. TList* GetCaloPhotonsPHOSList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin); TList* GetTracksTPCList(UInt_t vtxBin, UInt_t centBin, UInt_t rpBin); - void UpdatePhotonLists(); - void UpdateTrackLists(); + void UpdatePhotonLists(); // Fill photons in MIXing pull. + void UpdateTrackLists(); // Fill Tracks in MIXing pull. void SetGeometry(); @@ -148,45 +153,65 @@ protected: // Set / Get parametrs void SetManualV0EPCalc(Bool_t manCalc = true) {fManualV0EPCalc = manCalc;} + void SetMEExists(const Int_t pid) {fMEExists[pid] = true;} + Bool_t GetMEExists(const Int_t pid) const {return fMEExists[pid];} + + void SetMEPhi(const Int_t pid, const Double_t phi) {fMEPhi[pid] = phi;} + Double_t GetMEPhi(const Int_t pid) const {return fMEPhi[pid];} + + void SetMEEta(const Int_t pid, const Double_t eta) {fMEEta[pid] = eta;} + Double_t GetMEEta(const Int_t pid) const {return fMEEta[pid];} + + void SetMEPt(const Int_t pid, const Double_t pT) {fMEPt[pid] = pT;} + Double_t GetMEPt(const Int_t pid) const {return fMEPt[pid];} + + void SetMEModCase(const Int_t pid, const Int_t modcase) {fMEModCase[pid] = modcase;} + Int_t GetMEModCase(const Int_t pid) const {return fMEModCase[pid];} + + AliAnalysisUtils* GetAnalysisUtils(); private: // Geometry AliPHOSGeometry* fPHOSGeo; - // Make output histograms / conteiners. + // Make output histograms/conteiners. TList * fOutputContainer; //final histogram / tree container // cluster cut variables: - Double_t fMinClusterEnergy; - Double_t fMinBCDistance; //distance to nearest bad channel - Int_t fMinNCells; - Double_t fMinM02; - Bool_t fTOFCutEnabled; - Double_t fTOFCut; + Double_t fMinClusterEnergy; // Min energy PHOS's cluster. + Double_t fMinBCDistance; // Min distance to nearest bad channel + Int_t fMinNCells; // Min count of Cells in cluster. + Double_t fMinM02; // Min size of M02 in claster. + Bool_t fTOFCutEnabled; // Use time of flight or not? + Double_t fTOFCut; // Max time of flight. // Binning, [vtx, centrality, reaction-plane] Int_t fNVtxZBins; TArrayD fCentEdges; // Centrality Bin Lower edges. TArrayI fCentNMixed; // Number of mixed events for each centrality bin. - UInt_t fNEMRPBins; // Binning of Reaction plane. + UInt_t fNEMRPBins; // Binning of Reaction plane. TArrayD fAssocBins; // Assoc Pt Bin Lower edges. // Control variables + Bool_t fUseMEAlgoritmForReal; // Use common or ME algoritm for analysis real events. + Bool_t fUseMEAlgoritmForMix; // Use common or ME algoritm for analysis mixed events. Int_t fCheckHibridGlobal; // For checking/dischecking/passingcheck: t->IsHybridGlobalConstrainedGlobal(); + + // Event selection Bool_t fPHOSEvent; // PHOS event trigger. + Bool_t fMBEvent; // MB event trigger. // Behavior / cuts Period fPeriod; - TriggerSelection fInternalTriggerSelection; - Float_t fMaxAbsVertexZ; // in cm. - Bool_t fManualV0EPCalc; + Float_t fMaxAbsVertexZ; // Maximum distence Z component of vertix in cm. + Bool_t fManualV0EPCalc; // Double_t fCentCutoffDown; // Ignore Centrality less %. (def = 0%) Double_t fCentCutoffUp; // Ignore Centrality over %. (def = 90%) - Double_t fMassInvMean ; // - Double_t fMassInvSigma ; // - Double_t fSigmaWidth; // 0 = wide + Double_t fMassInvMean ; // Mass Pi0. + Double_t fMassInvSigma ; // Mass width Pi0. + Double_t fSigmaWidth; // *N sigma. if 0 will use fMassInvMean+/-fMassInvSigma. Else will calculate using function. // Funktion of window mass parametrs: [mass, pt] Double_t fMassMeanP0; @@ -197,20 +222,21 @@ private: AliVEvent* fEvent; //! Current event AliESDEvent* fEventESD; //! Current event, if ESD. AliAODEvent* fEventAOD; //! Current event, if AOD. + AliInputEventHandler *fEventHandler; //! Event trigger bit. AliESDtrackCuts *fESDtrackCuts; // Track cut Int_t fRunNumber; //! run number - Int_t fInternalRunNumber ; //!Current internal run number + Int_t fInternalRunNumber ; //! Current internal run number - TProfile* fMultV0; // object containing VZERO calibration information - Float_t fV0Cpol,fV0Apol; // loaded by OADB + TProfile* fMultV0; // Object containing VZERO calibration information + Float_t fV0Cpol,fV0Apol; // oaded by OADB Float_t fMeanQ[9][2][2]; // and recentering Float_t fWidthQ[9][2][2]; // - TString fEPcalibFileName; + TString fEPcalibFileName; // - Double_t fVertex[3]; //! - TVector3 fVertexVector; //! - Int_t fVtxBin; //! + Double_t fVertex[3]; //! Event vertex. + TVector3 fVertexVector; //! The same. + Int_t fVtxBin; //! Vertex bin. TString fCentralityEstimator; //! Centrality estimator ("V0M", "ZNA") Float_t fCentrality ; //! Centrality of the current event @@ -220,9 +246,12 @@ 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]; + // ME Pi0 selection veriables. 1...4 = all...both pid. + Bool_t fMEExists[4]; // Does trigger Pi0 exists? + Double_t fMEPhi[4]; // Phi ME pi0. + Double_t fMEEta[4]; // Eta ME Pi0. + Double_t fMEPt[4]; // pT ME Pi0. + Int_t fMEModCase[4]; // Pair of modules where photons are observed. TClonesArray * fCaloPhotonsPHOS ; //! PHOS photons in current event TClonesArray * fTracksTPC ; //! TPC Tracks in current event -- 2.43.0