* 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 <Daniil.Ponomarenko@cern.ch>
+// Dmitry Blau <Dmitry.Blau@cern.ch>
+// 09-Jul-2014
#include <Riostream.h>
#include "THashList.h"
#include "AliAODCaloCluster.h"
#include "AliCaloPhoton.h"
#include "AliAODVertex.h"
+#include "AliInputEventHandler.h"
using std::cout;
using std::endl;
fCentNMixed(),
fNEMRPBins(9),
fAssocBins(),
+ fUseMEAlgoritmForReal(true),
+ fUseMEAlgoritmForMix(true),
fCheckHibridGlobal(kOnlyHibridTracks),
fPHOSEvent(false),
+ fMBEvent(false),
fPeriod(kUndefinedPeriod),
- fInternalTriggerSelection(kNoSelection),
fMaxAbsVertexZ(10.),
fManualV0EPCalc(false),
fCentCutoffDown(0.),
fEvent(0x0),
fEventESD(0x0),
fEventAOD(0x0),
+ fEventHandler(0),
fESDtrackCuts(0x0),
fRunNumber(-999),
fInternalRunNumber(0),
//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),
fCentNMixed(),
fNEMRPBins(9),
fAssocBins(),
+ fUseMEAlgoritmForReal(true),
+ fUseMEAlgoritmForMix(true),
fCheckHibridGlobal(kOnlyHibridTracks),
fPHOSEvent(false),
+ fMBEvent(false),
fPeriod(period),
- fInternalTriggerSelection(kNoSelection),
fMaxAbsVertexZ(10.),
fManualV0EPCalc(false),
fCentCutoffDown(0.),
fEvent(0x0),
fEventESD(0x0),
fEventAOD(0x0),
+ fEventHandler(0),
fESDtrackCuts(0x0),
fRunNumber(-999),
fInternalRunNumber(0),
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.)) ;
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<TH3F*>(fOutputContainer->Last()) ;
h->GetXaxis()->SetTitle("X");
h->GetYaxis()->SetTitle("Z");
{
// Main loop, called for each event analyze ESD/AOD
// Step 0: Event Objects
- LogProgress(0);
+
+ LogProgress(0);
fEvent = InputEvent();
if( ! fEvent )
{
PostData(1, fOutputContainer);
return ;
}
+ LogProgress(1);
ZeroingVariables();
fEventESD = dynamic_cast<AliESDEvent*>(fEvent);
fEventAOD = dynamic_cast<AliAODEvent*>(fEvent);
- TestTrigger();
-
// Step 1(done once):
if( fRunNumber != fEvent->GetRunNumber() )
{
//SetGeometry();
SetESDTrackCuts();
}
- LogProgress(1);
- if( RejectTriggerMaskSelection() )
+ //Data
+ //get Event-Handler for the trigger information
+ fEventHandler= dynamic_cast<AliInputEventHandler*> (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();
PostData(1, fOutputContainer);
return; // Reject!
}
- LogProgress(3);
+ LogProgress(4);
// Step 3: Centrality
// fCentrality, fCentBin
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);
}
//_______________________________________________________________________________
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"<<endl; // We loose some events O_o
+ if ( isAny ) FillHistogram("hTriggerPassedEvents", 1.);
- else if( kMBInclusive == fInternalTriggerSelection
- && isMB ) reject = ACCEPT; // accept event.
- else if( kMBExclusive == fInternalTriggerSelection
- && isMB && !isCentral && !isSemiCentral ) reject = ACCEPT; // accept event.
+ // PHOS events.
+ if ( isPHI1 ) FillHistogram("hTriggerPassedEvents", 2.);
+ if ( isPHI7 ) FillHistogram("hTriggerPassedEvents", 3.);
+ if (isPHI8) FillHistogram("hTriggerPassedEvents", 4.);
+ if ( isCentral ) FillHistogram("hTriggerPassedEvents", 5.);
+ if (isSemiCentral) FillHistogram("hTriggerPassedEvents", 6.);
+ if (isPHOSPb) FillHistogram("hTriggerPassedEvents", 7.);
- if( REJECT == reject )
- return REJECT;
- else {
- LogSelection(kInternalTriggerMaskSelection, fInternalRunNumber);
- return ACCEPT;
+ // MB events.
+ if ( isMB ) FillHistogram("hTriggerPassedEvents", 8.);
+ if ( isINT7 ) FillHistogram("hTriggerPassedEvents", 9.);
+ if ( isAnyINT ) FillHistogram("hTriggerPassedEvents", 10.);
+
+
+ Bool_t isTriggerEvent = isPHI1 || isPHI7 || isPHI8 || isCentral || isSemiCentral || isPHOSPb;
+ // PHOS trigger events.
+ if ( isTriggerEvent )
+ {
+ FillHistogram("hTriggerPassedEvents", 16.);
+ fPHOSEvent = true;
+ fMBEvent = false;
+ return ACCEPT;
+ }
+
+ // MB events without trigger PHOS events.
+ //if ( (isMB || isINT7 || isAnyINT) && !isTriggerEvent ) //Less enteries in PbPb.
+ if ( !isTriggerEvent )
+ {
+ FillHistogram("hTriggerPassedEvents", 17.);
+ fPHOSEvent = false;
+ fMBEvent = true;
+ return ACCEPT;
}
+
+ // other events
+ FillHistogram("hTriggerPassedEvents", 18.);
+ return REJECT;
}
//_______________________________________________________________________________
void AliPHOSCorrelations::SetVertex()
//clu->GetMomentum(lorentzMomentum, fVertex);
clu->GetMomentum(lorentzMomentum, origo);
-
if(inPHOS>=fCaloPhotonsPHOS->GetSize()){
fCaloPhotonsPHOS->Expand(inPHOS+50) ;
}
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; i2<nPHOS; 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() ;
+ 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; i2<nPHOS; i2++)
{
- AliCaloPhoton * ph1=(AliCaloPhoton*)fCaloPhotonsPHOS->At(i1) ;
- for (Int_t i2=i1+1; i2<nPHOS; i2++)
- {
- AliCaloPhoton * ph2=(AliCaloPhoton*)fCaloPhotonsPHOS->At(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; i3<fTracksTPC->GetEntriesFast(); i3++){
- TLorentzVector * track = (TLorentzVector*)fTracksTPC->At(i3);
+ // Take track's angles and compare with cluster's angles.
+ for(Int_t i3=0; i3<fTracksTPC->GetEntriesFast(); 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);
}
}
}
//_______________________________________________________________________________
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; evi<arrayList->GetEntries();evi++)
{
-
- TList * arrayList = GetCaloPhotonsPHOSList(fVtxBin, fCentBin, fEMRPBin);
- for(Int_t evi=0; evi<arrayList->GetEntries();evi++)
+ TClonesArray * mixPHOS = static_cast<TClonesArray*>(arrayList->At(evi));
+ for (Int_t i1=0; i1 < fCaloPhotonsPHOS->GetEntriesFast(); i1++)
{
- TClonesArray * mixPHOS = static_cast<TClonesArray*>(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; i2<mixPHOS->GetEntriesFast(); 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);
}
}
}
Int_t mod2 = ph2->Module();
- if(!TestMass(m,pt)) continue;
+ if(!TestMass(m,pt)) continue;
for(Int_t evi=0; evi<arrayList->GetEntries();evi++){
TClonesArray * mixTracks = static_cast<TClonesArray*>(arrayList->At(evi));
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) ;
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() )
{
//_______________________________________________________________________________
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; i2<nPHOS; 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() ;
- 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; i3<fTracksTPC->GetEntriesFast(); 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; i3<fTracksTPC->GetEntriesFast(); 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()
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));
}
}
}
//_______________________________________________________________________________
Double_t AliPHOSCorrelations::GetAssocBin(Double_t pt) const
{
- //Calculates bin
+ //Calculates bin of associated particle pt.
for(Int_t i=1; i<fAssocBins.GetSize(); i++){
if(pt>fAssocBins.At(i-1) && pt<fAssocBins.At(i))
return fAssocBins.At(i) ;
if (!fSigmaWidth) // Default big window
{
FillHistogram("massWindow", fMassInvMean, fMassInvSigma);
- return (fMassInvMean-fMassInvSigma<m && m<fMassInvMean+fMassInvSigma) ;
+ if(fMassInvMean-fMassInvSigma<m && m<fMassInvMean+fMassInvSigma)
+ {
+ FillHistogram("massWindowPass", 1);
+ return true;
+ }
+ else
+ {
+ FillHistogram("massWindowPass", 2);
+ return false;
+ }
}
else // Parametrization
{
FillHistogram("massWindow", MassMeanFunktion(pt), MassSigmaFunktion(pt)*fSigmaWidth);
- /*cout <<"MinMass: " << MassMeanFunktion(pt)-MassSigmaFunktion(pt)*fSigmaWidth
- <<" m: "<<m
- <<" pt: "<<pt
- <<" MaxMass "<< MassMeanFunktion(pt)+MassSigmaFunktion(pt)*fSigmaWidth<<endl;*/
- return ( MassMeanFunktion(pt)-MassSigmaFunktion(pt)*fSigmaWidth<m && m<MassMeanFunktion(pt)+MassSigmaFunktion(pt)*fSigmaWidth );
+ if ( MassMeanFunktion(pt)-MassSigmaFunktion(pt)*fSigmaWidth<m && m<MassMeanFunktion(pt)+MassSigmaFunktion(pt)*fSigmaWidth )
+ {
+ FillHistogram("massWindowPass", 3);
+ return true;
+ }
+ else
+ {
+ FillHistogram("massWindowPass", 4);
+ return false;
+ }
}
}
//_______________________________________________________________________________
Double_t AliPHOSCorrelations::MassSigmaFunktion(Double_t &pt) const
{
// Parametrization sigma of mass window
- //TODO:: Kill falling at large pT.
+ //TODO:: Fix falling at large pT.
return ( fabs(fMassSigmaP0 + fMassSigmaP1*pt) );
}
//_____________________________________________________________________________
if (fCentrality>60) 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);
}
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;
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;
-
}
}
/* 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 <Daniil.Ponomarenko@cern.ch>
+// Dmitry Blau <Dmitry.Blau@cern.ch>
+// 09-Jul-2014
class TClonesArray;
class AliStack ;
class AliVCluster ;
class AliAnalysisUtils;
class AliEPFlattener;
+class AliAODInputHandler;
+class AliESDInputHandler;
#include "TArrayD.h"
{
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();
// 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; }
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 )
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();
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();
// 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;
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
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