-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * *
- * Author: The ALICE Off-line Project. *
- * Contributors are mentioned in the code where appropriate. *
- * *
- * Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes hereby granted *
- * without fee, provided that the above copyright notice appears in all *
- * copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
- * about the suitability of this software for any purpose. It is *
- * provided "as is" without express or implied warranty. *
- **************************************************************************/
-/* $Id: AliAnaParticleIsolation.cxx 28688 2008-09-11 15:04:07Z gconesab $ */
-
-//_________________________________________________________________________
-// Class for analysis of particle isolation
-// Input is selected particles put in AOD branch (AliAODPWG4ParticleCorrelation)
-//
-// Class created from old AliPHOSGammaJet
-// (see AliRoot versions previous Release 4-09)
-//
-// -- Author: Gustavo Conesa (LNF-INFN)
-
-//-Yaxian Mao (add the possibility for different IC method with different pt range, 01/10/2010)
-//////////////////////////////////////////////////////////////////////////////
-
-
-// --- ROOT system ---
-#include <TClonesArray.h>
-#include <TList.h>
-#include <TObjString.h>
-#include <TH2F.h>
-//#include <Riostream.h>
-#include <TClass.h>
-
-// --- Analysis system ---
-#include "AliAnaParticleIsolation.h"
-#include "AliCaloTrackReader.h"
-#include "AliIsolationCut.h"
-#include "AliNeutralMesonSelection.h"
-#include "AliAODPWG4ParticleCorrelation.h"
-#include "AliMCAnalysisUtils.h"
-#include "AliVTrack.h"
-#include "AliVCluster.h"
-
-ClassImp(AliAnaParticleIsolation)
-
-//____________________________________________________________________________
- AliAnaParticleIsolation::AliAnaParticleIsolation() :
- AliAnaPartCorrBaseClass(), fCalorimeter(""),
- fReMakeIC(0), fMakeSeveralIC(0), fMakeInvMass(0),
- fhPtIso(0),fhPhiIso(0),fhEtaIso(0), fhConeSumPt(0), fhPtInCone(0),
- fhFRConeSumPt(0), fhPtInFRCone(0),
- //Several IC
- fNCones(0),fNPtThresFrac(0), fConeSizes(), fPtThresholds(), fPtFractions(),
- //MC
- fhPtIsoPrompt(0),fhPhiIsoPrompt(0),fhEtaIsoPrompt(0),
- fhPtThresIsolatedPrompt(), fhPtFracIsolatedPrompt(), fhPtSumIsolatedPrompt(),
- fhPtIsoFragmentation(0),fhPhiIsoFragmentation(0),fhEtaIsoFragmentation(0),
- fhPtThresIsolatedFragmentation(), fhPtFracIsolatedFragmentation(), fhPtSumIsolatedFragmentation(),
- fhPtIsoPi0Decay(0),fhPhiIsoPi0Decay(0),fhEtaIsoPi0Decay(0),
- fhPtThresIsolatedPi0Decay(), fhPtFracIsolatedPi0Decay(), fhPtSumIsolatedPi0Decay(),
- fhPtIsoOtherDecay(0),fhPhiIsoOtherDecay(0),fhEtaIsoOtherDecay(0),
- fhPtThresIsolatedOtherDecay(), fhPtFracIsolatedOtherDecay(), fhPtSumIsolatedOtherDecay(),
- fhPtIsoConversion(0),fhPhiIsoConversion(0),fhEtaIsoConversion(0),
- fhPtThresIsolatedConversion(), fhPtFracIsolatedConversion(), fhPtSumIsolatedConversion(),
- fhPtIsoUnknown(0),fhPhiIsoUnknown(0),fhEtaIsoUnknown(0),
- fhPtThresIsolatedUnknown(), fhPtFracIsolatedUnknown(), fhPtSumIsolatedUnknown(),
- //Histograms settings
- fHistoNPtSumBins(0), fHistoPtSumMax(0.), fHistoPtSumMin(0.),
- fHistoNPtInConeBins(0), fHistoPtInConeMax(0.), fHistoPtInConeMin(0.)
-{
- //default ctor
-
- //Initialize parameters
- InitParameters();
-
- for(Int_t i = 0; i < 5 ; i++){
- fConeSizes[i] = 0 ;
- fhPtSumIsolated[i] = 0 ;
-
- fhPtSumIsolatedPrompt[i] = 0 ;
- fhPtSumIsolatedFragmentation[i] = 0 ;
- fhPtSumIsolatedPi0Decay[i] = 0 ;
- fhPtSumIsolatedOtherDecay[i] = 0 ;
- fhPtSumIsolatedConversion[i] = 0 ;
- fhPtSumIsolatedUnknown[i] = 0 ;
-
- for(Int_t j = 0; j < 5 ; j++){
- fhPtThresIsolated[i][j] = 0 ;
- fhPtFracIsolated[i][j] = 0 ;
-
- fhPtThresIsolatedPrompt[i][j] = 0 ;
- fhPtThresIsolatedFragmentation[i][j] = 0 ;
- fhPtThresIsolatedPi0Decay[i][j] = 0 ;
- fhPtThresIsolatedOtherDecay[i][j] = 0 ;
- fhPtThresIsolatedConversion[i][j] = 0 ;
- fhPtThresIsolatedUnknown[i][j] = 0 ;
-
- fhPtFracIsolatedPrompt[i][j] = 0 ;
- fhPtFracIsolatedFragmentation[i][j] = 0 ;
- fhPtFracIsolatedPi0Decay[i][j] = 0 ;
- fhPtFracIsolatedOtherDecay[i][j] = 0 ;
- fhPtFracIsolatedConversion[i][j] = 0 ;
- fhPtFracIsolatedUnknown[i][j] = 0 ;
-
- }
- }
-
- for(Int_t i = 0; i < 5 ; i++){
- fPtFractions[i]= 0 ;
- fPtThresholds[i]= 0 ;
- }
-
-
-}
-
-//____________________________________________________________________________
-AliAnaParticleIsolation::~AliAnaParticleIsolation()
-{
- //dtor
- //do not delete histograms
-
- //delete [] fConeSizes ;
- //delete [] fPtThresholds ;
- //delete [] fPtFractions ;
-
-}
-
-//_________________________________________________________________________
-Bool_t AliAnaParticleIsolation::CheckInvMass(const Int_t iaod, const AliAODPWG4Particle * part1)
-{
- // Search if there is a companion decay photon to the candidate
- // and discard it in such case
- // Use it only if isolation candidates are photons
- // Make sure that no selection on photon pt is done in the input aod photon list.
- TLorentzVector mom1 = *(part1->Momentum());
- TLorentzVector mom2 ;
- for(Int_t jaod = 0; jaod < GetInputAODBranch()->GetEntriesFast(); jaod++){
- if(iaod == jaod) continue ;
- AliAODPWG4ParticleCorrelation * part2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(jaod));
- mom2 = *(part2->Momentum());
- //Select good pair (good phi, pt cuts, aperture and invariant mass)
- if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)){
- if(GetDebug() > 1)printf("AliAnaParticleIsolation::CheckInvMass() - Selected gamma pair: pt %f, phi %f, eta%f\n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta());
- return kTRUE ;
- }
- }//loop
-
- return kFALSE;
-}
-
-//________________________________________________________________________
-TObjString * AliAnaParticleIsolation::GetAnalysisCuts()
-{
- //Save parameters used for analysis
- TString parList ; //this will be list of parameters used for this analysis.
- const Int_t buffersize = 255;
- char onePar[buffersize] ;
-
- snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
- parList+=onePar ;
- snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
- parList+=onePar ;
- snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
- parList+=onePar ;
- snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
- parList+=onePar ;
- snprintf(onePar, buffersize,"fMakeInvMass=%d (Flag for rejection of candidates with a pi0 inv mass pair) \n",fMakeInvMass) ;
- parList+=onePar ;
-
- if(fMakeSeveralIC){
- snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;
- parList+=onePar ;
- snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;
- parList+=onePar ;
-
- for(Int_t icone = 0; icone < fNCones ; icone++){
- snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
- parList+=onePar ;
- }
- for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++){
- snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
- parList+=onePar ;
- }
- for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++){
- snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
- parList+=onePar ;
- }
- }
-
- //Get parameters set in base class.
- parList += GetBaseParametersList() ;
-
- //Get parameters set in IC class.
- if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;
-
- return new TObjString(parList) ;
-
-}
-
-//________________________________________________________________________
-TList * AliAnaParticleIsolation::GetCreateOutputObjects()
-{
- // Create histograms to be saved in output file and
- // store them in outputContainer
- TList * outputContainer = new TList() ;
- outputContainer->SetName("IsolatedParticleHistos") ;
-
- Int_t nptbins = GetHistoPtBins();
- Int_t nphibins = GetHistoPhiBins();
- Int_t netabins = GetHistoEtaBins();
- Float_t ptmax = GetHistoPtMax();
- Float_t phimax = GetHistoPhiMax();
- Float_t etamax = GetHistoEtaMax();
- Float_t ptmin = GetHistoPtMin();
- Float_t phimin = GetHistoPhiMin();
- Float_t etamin = GetHistoEtaMin();
-
- Int_t nptsumbins = fHistoNPtSumBins;
- Float_t ptsummax = fHistoPtSumMax;
- Float_t ptsummin = fHistoPtSumMin;
- Int_t nptinconebins = fHistoNPtInConeBins;
- Float_t ptinconemax = fHistoPtInConeMax;
- Float_t ptinconemin = fHistoPtInConeMin;
-
- if(!fMakeSeveralIC){
-
- fhConeSumPt = new TH2F
- ("hConePtSum","#Sigma p_{T} in isolation cone ",nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhConeSumPt->SetYTitle("#Sigma p_{T}");
- fhConeSumPt->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhConeSumPt) ;
-
- fhPtInCone = new TH2F
- ("hPtInCone","p_{T} in isolation cone ",nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
- fhPtInCone->SetYTitle("p_{T in cone} (GeV/c)");
- fhPtInCone->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtInCone) ;
-
- fhFRConeSumPt = new TH2F
- ("hFRConePtSum","#Sigma p_{T} in the froward region isolation cone ",nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhFRConeSumPt->SetYTitle("#Sigma p_{T}");
- fhFRConeSumPt->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhFRConeSumPt) ;
-
- fhPtInFRCone = new TH2F
- ("hPtInFRCone","p_{T} in froward region isolation cone ",nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
- fhPtInFRCone->SetYTitle("p_{T in cone} (GeV/c)");
- fhPtInFRCone->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtInFRCone) ;
-
- fhPtIso = new TH1F("hPt","Isolated Number of particles",nptbins,ptmin,ptmax);
- fhPtIso->SetYTitle("N");
- fhPtIso->SetXTitle("p_{T}(GeV/c)");
- outputContainer->Add(fhPtIso) ;
-
- fhPhiIso = new TH2F
- ("hPhi","Isolated Number of particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIso->SetYTitle("#phi");
- fhPhiIso->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPhiIso) ;
-
- fhEtaIso = new TH2F
- ("hEta","Isolated Number of particles",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIso->SetYTitle("#eta");
- fhEtaIso->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhEtaIso) ;
-
- if(IsDataMC()){
-
- fhPtIsoPrompt = new TH1F("hPtMCPrompt","Isolated Number of #gamma prompt",nptbins,ptmin,ptmax);
- fhPtIsoPrompt->SetYTitle("N");
- fhPtIsoPrompt->SetXTitle("p_{T #gamma}(GeV/c)");
- outputContainer->Add(fhPtIsoPrompt) ;
-
- fhPhiIsoPrompt = new TH2F
- ("hPhiMCPrompt","Isolated Number of #gamma prompt",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIsoPrompt->SetYTitle("#phi");
- fhPhiIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhPhiIsoPrompt) ;
-
- fhEtaIsoPrompt = new TH2F
- ("hEtaMCPrompt","Isolated Number of #gamma prompt ",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIsoPrompt->SetYTitle("#eta");
- fhEtaIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhEtaIsoPrompt) ;
-
- fhPtIsoFragmentation = new TH1F("hPtMCFragmentation","Isolated Number of #gamma",nptbins,ptmin,ptmax);
- fhPtIsoFragmentation->SetYTitle("N");
- fhPtIsoFragmentation->SetXTitle("p_{T #gamma}(GeV/c)");
- outputContainer->Add(fhPtIsoFragmentation) ;
-
- fhPhiIsoFragmentation = new TH2F
- ("hPhiMCFragmentation","Isolated Number of #gamma fragmentation",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIsoFragmentation->SetYTitle("#phi");
- fhPhiIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhPhiIsoFragmentation) ;
-
- fhEtaIsoFragmentation = new TH2F
- ("hEtaMCFragmentation","Isolated Number of #gamma fragmentation",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIsoFragmentation->SetYTitle("#eta");
- fhEtaIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhEtaIsoFragmentation) ;
-
- fhPtIsoPi0Decay = new TH1F("hPtMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax);
- fhPtIsoPi0Decay->SetYTitle("N");
- fhPtIsoPi0Decay->SetXTitle("p_{T #gamma}(GeV/c)");
- outputContainer->Add(fhPtIsoPi0Decay) ;
-
- fhPhiIsoPi0Decay = new TH2F
- ("hPhiMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIsoPi0Decay->SetYTitle("#phi");
- fhPhiIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhPhiIsoPi0Decay) ;
-
- fhEtaIsoPi0Decay = new TH2F
- ("hEtaMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIsoPi0Decay->SetYTitle("#eta");
- fhEtaIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhEtaIsoPi0Decay) ;
-
- fhPtIsoOtherDecay = new TH1F("hPtMCOtherDecay","Isolated Number of #gamma from non #pi^{0} decay",nptbins,ptmin,ptmax);
- fhPtIsoOtherDecay->SetYTitle("N");
- fhPtIsoOtherDecay->SetXTitle("p_{T #gamma}(GeV/c)");
- outputContainer->Add(fhPtIsoOtherDecay) ;
-
- fhPhiIsoOtherDecay = new TH2F
- ("hPhiMCOtherDecay","Isolated Number of #gamma from non #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIsoOtherDecay->SetYTitle("#phi");
- fhPhiIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhPhiIsoOtherDecay) ;
-
- fhEtaIsoOtherDecay = new TH2F
- ("hEtaMCOtherDecay","Isolated Number of #gamma non #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIsoOtherDecay->SetYTitle("#eta");
- fhEtaIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhEtaIsoOtherDecay) ;
-
- fhPtIsoConversion = new TH1F("hPtMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax);
- fhPtIsoConversion->SetYTitle("N");
- fhPtIsoConversion->SetXTitle("p_{T #gamma}(GeV/c)");
- outputContainer->Add(fhPtIsoConversion) ;
-
- fhPhiIsoConversion = new TH2F
- ("hPhiMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIsoConversion->SetYTitle("#phi");
- fhPhiIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhPhiIsoConversion) ;
-
- fhEtaIsoConversion = new TH2F
- ("hEtaMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIsoConversion->SetYTitle("#eta");
- fhEtaIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)");
- outputContainer->Add(fhEtaIsoConversion) ;
-
- fhPtIsoUnknown = new TH1F("hPtMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax);
- fhPtIsoUnknown->SetYTitle("N");
- fhPtIsoUnknown->SetXTitle("p_{T}(GeV/c)");
- outputContainer->Add(fhPtIsoUnknown) ;
-
- fhPhiIsoUnknown = new TH2F
- ("hPhiMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhPhiIsoUnknown->SetYTitle("#phi");
- fhPhiIsoUnknown->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPhiIsoUnknown) ;
-
- fhEtaIsoUnknown = new TH2F
- ("hEtaMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax,netabins,etamin,etamax);
- fhEtaIsoUnknown->SetYTitle("#eta");
- fhEtaIsoUnknown->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhEtaIsoUnknown) ;
- }//Histos with MC
-
- }
-
- if(fMakeSeveralIC){
- const Int_t buffersize = 255;
- char name[buffersize];
- char title[buffersize];
- for(Int_t icone = 0; icone<fNCones; icone++){
- snprintf(name, buffersize,"hPtSum_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolated[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolated[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolated[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolated[icone]) ;
-
- if(IsDataMC()){
- snprintf(name, buffersize,"hPtSumPrompt_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate Prompt cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolatedPrompt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolatedPrompt[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolatedPrompt[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolatedPrompt[icone]) ;
-
- snprintf(name, buffersize,"hPtSumFragmentation_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate Fragmentation cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolatedFragmentation[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolatedFragmentation[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolatedFragmentation[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolatedFragmentation[icone]) ;
-
- snprintf(name, buffersize,"hPtSumPi0Decay_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate Pi0Decay cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolatedPi0Decay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolatedPi0Decay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolatedPi0Decay[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolatedPi0Decay[icone]) ;
-
- snprintf(name, buffersize,"hPtSumOtherDecay_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate OtherDecay cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolatedOtherDecay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolatedOtherDecay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolatedOtherDecay[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolatedOtherDecay[icone]) ;
-
- snprintf(name, buffersize,"hPtSumConversion_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate Conversion cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolatedConversion[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolatedConversion[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolatedConversion[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolatedConversion[icone]) ;
-
- snprintf(name, buffersize,"hPtSumUnknown_Cone_%d",icone);
- snprintf(title, buffersize,"Candidate Unknown cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
- fhPtSumIsolatedUnknown[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
- fhPtSumIsolatedUnknown[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
- fhPtSumIsolatedUnknown[icone]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtSumIsolatedUnknown[icone]) ;
-
- }//Histos with MC
-
- for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++){
- snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
-
- if(IsDataMC()){
- snprintf(name, buffersize,"hPtThresMCPrompt_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolatedPrompt[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFracMCPrompt_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolatedPrompt[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtThresMCFragmentation_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolatedFragmentation[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFracMCFragmentation_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolatedFragmentation[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtThresMCPi0Decay_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolatedPi0Decay[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFracMCPi0Decay_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolatedPi0Decay[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtThresMCOtherDecay_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolatedOtherDecay[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFracMCOtherDecay_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolatedOtherDecay[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtThresMCConversion_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolatedConversion[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFracMCConversion_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolatedConversion[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtThresMCUnknown_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtThresIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtThresIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtThresIsolatedUnknown[icone][ipt]) ;
-
- snprintf(name, buffersize,"hPtFracMCUnknown_Cone_%d_Pt%d",icone,ipt);
- snprintf(title, buffersize,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
- fhPtFracIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
- fhPtFracIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
- outputContainer->Add(fhPtFracIsolatedUnknown[icone][ipt]) ;
-
- }//Histos with MC
-
- }//icone loop
- }//ipt loop
- }
-
- //Keep neutral meson selection histograms if requiered
- //Setting done in AliNeutralMesonSelection
- if(fMakeInvMass && GetNeutralMesonSelection()){
- TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ;
- if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept())
- for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) outputContainer->Add(nmsHistos->At(i)) ;
- delete nmsHistos;
- }
-
- return outputContainer ;
-
-}
-
-//__________________________________________________________________
-void AliAnaParticleIsolation::MakeAnalysisFillAOD()
-{
- //Do analysis and fill aods
- //Search for the isolated photon in fCalorimeter with pt > GetMinPt()
-
- if(!GetInputAODBranch()){
- printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
- abort();
- }
-
- if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation")){
- printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());
- abort();
- }
-
- Int_t n = 0, nfrac = 0;
- Bool_t isolated = kFALSE ;
- Float_t coneptsum = 0 ;
- TObjArray * pl = 0x0; ;
-
- //Select the calorimeter for candidate isolation with neutral particles
- if(fCalorimeter == "PHOS")
- pl = GetPHOSClusters();
- else if (fCalorimeter == "EMCAL")
- pl = GetEMCALClusters();
-
- //Loop on AOD branch, filled previously in AliAnaPhoton
- TLorentzVector mom ;
- Int_t naod = GetInputAODBranch()->GetEntriesFast();
- if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
- for(Int_t iaod = 0; iaod < naod; iaod++){
- AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
-
- //If too small or too large pt, skip
- if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ;
-
- //check if it is low pt trigger particle, then adjust the isolation method
- if(aodinput->Pt() < GetIsolationCut()->GetPtThreshold() || aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold())
- continue ; //trigger should not from underlying event
- // if(GetIsolationCut()->GetICMethod()!=AliIsolationCut::kPtThresIC && aodinput->Pt()!=0.){
-// //low pt trigger use pt threshold IC instead of other method
-// if (aodinput->Pt()*(GetIsolationCut()->GetPtFraction())<GetIsolationCut()->GetPtThreshold() || aodinput->Pt()*(GetIsolationCut()->GetPtFraction())<GetIsolationCut()->GetSumPtThreshold()) {
-// // printf("change the IC method to PtThresIC\n") ;
-// GetIsolationCut()->SetICMethod(AliIsolationCut::kPtThresIC);
-// }
-// }
-
- //Check invariant mass, if pi0, skip.
- Bool_t decay = kFALSE ;
- if(fMakeInvMass) decay = CheckInvMass(iaod,aodinput);
- if(decay) continue ;
-
- //After cuts, study isolation
- n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0;
- GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,GetReader(), kTRUE, aodinput, GetAODObjArrayName(), n,nfrac,coneptsum, isolated);
- aodinput->SetIsolated(isolated);
- if(GetDebug() > 1 && isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",iaod);
-
- }//loop
-
- if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
-
-}
-
-//__________________________________________________________________
-void AliAnaParticleIsolation::MakeAnalysisFillHistograms()
-{
- //Do analysis and fill histograms
- Int_t n = 0, nfrac = 0;
- Bool_t isolated = kFALSE ;
- Float_t coneptsum = 0 ;
- //Loop on stored AOD
- Int_t naod = GetInputAODBranch()->GetEntriesFast();
- if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
-
- //Get vertex for photon momentum calculation
- Double_t vertex[]={0,0,0} ; //vertex ;
- //Double_t vertex2[]={0,0,0} ; //vertex ;
- if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {
- GetReader()->GetVertex(vertex);
- //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2);
- }
-
- for(Int_t iaod = 0; iaod < naod ; iaod++){
- AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
-
- Bool_t isolation = aod->IsIsolated();
- Float_t ptcluster = aod->Pt();
- Float_t phicluster = aod->Phi();
- Float_t etacluster = aod->Eta();
- // Float_t phiForward = aod->Phi()+TMath::PiOver2() ;
- Float_t conesize = GetIsolationCut()->GetConeSize();
-
- //Recover reference arrays with clusters and tracks
- TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
- TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
- //If too small or too large pt, skip
- if(aod->Pt() < GetMinPt() || aod->Pt() > GetMaxPt() ) continue ;
-
- if(fMakeSeveralIC) {
- //Analysis of multiple IC at same time
- MakeSeveralICAnalysis(aod);
- continue;
- }
- else if(fReMakeIC){
- //In case a more strict IC is needed in the produced AOD
- n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0;
- GetIsolationCut()->MakeIsolationCut(reftracks, refclusters, GetReader(), kFALSE, aod, "", n,nfrac,coneptsum, isolated);
- fhConeSumPt->Fill(ptcluster,coneptsum);
- if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Energy Sum in Isolation Cone %2.2f\n", coneptsum);
- }
-
- //Fill pt distribution of particles in cone
- //Tracks
- coneptsum = 0;
- Double_t sumptFR = 0. ;
- TObjArray * trackList = GetCTSTracks() ;
- for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++){
- AliVTrack* track = (AliVTrack *) trackList->At(itrack);
- //fill the histograms at forward range
- if(!track){
- printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
- continue;
- }
- Double_t dPhi = phicluster - track->Phi() + TMath::PiOver2();
- Double_t dEta = etacluster - track->Eta();
- Double_t arg = dPhi*dPhi + dEta*dEta;
- if(TMath::Sqrt(arg) < conesize){
- fhPtInFRCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
- sumptFR+=track->Pt();
- }
- dPhi = phicluster - track->Phi() - TMath::PiOver2();
- arg = dPhi*dPhi + dEta*dEta;
- if(TMath::Sqrt(arg) < conesize){
- fhPtInFRCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
- sumptFR+=track->Pt();
- }
- }
- fhFRConeSumPt->Fill(ptcluster,sumptFR);
- if(reftracks){
- for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++){
- AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
- fhPtInCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
- coneptsum+=track->Pt();
- }
- }
-
- //CaloClusters
- if(refclusters){
- TLorentzVector mom ;
- for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++){
- AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
- Int_t input = 0;
- // if (fCalorimeter == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= icalo) input = 1 ;
- // else if(fCalorimeter == "PHOS" && GetReader()->GetPHOSClustersNormalInputEntries() <= icalo) input = 1;
-
- //Get Momentum vector,
- if (input == 0) calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
- // else if(input == 1) calo->GetMomentum(mom,vertex2);//Assume that come from vertex in straight line
-
- fhPtInCone->Fill(ptcluster, mom.Pt());
- coneptsum+=mom.Pt();
- }
- }
-
- if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsum);
-
- if(!fReMakeIC) fhConeSumPt->Fill(ptcluster,coneptsum);
-
- if(isolation){
-
- if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED, fill histograms\n", iaod);
-
- fhPtIso ->Fill(ptcluster);
- fhPhiIso ->Fill(ptcluster,phicluster);
- fhEtaIso ->Fill(ptcluster,etacluster);
-
- if(IsDataMC()){
- Int_t tag =aod->GetTag();
-
- if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)){
- fhPtIsoPrompt ->Fill(ptcluster);
- fhPhiIsoPrompt ->Fill(ptcluster,phicluster);
- fhEtaIsoPrompt ->Fill(ptcluster,etacluster);
- }
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation))
- {
- fhPtIsoFragmentation ->Fill(ptcluster);
- fhPhiIsoFragmentation ->Fill(ptcluster,phicluster);
- fhEtaIsoFragmentation ->Fill(ptcluster,etacluster);
- }
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
- {
- fhPtIsoPi0Decay ->Fill(ptcluster);
- fhPhiIsoPi0Decay ->Fill(ptcluster,phicluster);
- fhEtaIsoPi0Decay ->Fill(ptcluster,etacluster);
- }
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))
- {
- fhPtIsoOtherDecay ->Fill(ptcluster);
- fhPhiIsoOtherDecay ->Fill(ptcluster,phicluster);
- fhEtaIsoOtherDecay ->Fill(ptcluster,etacluster);
- }
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))
- {
- fhPtIsoConversion ->Fill(ptcluster);
- fhPhiIsoConversion ->Fill(ptcluster,phicluster);
- fhEtaIsoConversion ->Fill(ptcluster,etacluster);
- }
- else
- {
- fhPtIsoUnknown ->Fill(ptcluster);
- fhPhiIsoUnknown ->Fill(ptcluster,phicluster);
- fhEtaIsoUnknown ->Fill(ptcluster,etacluster);
- }
- }//Histograms with MC
-
- }//Isolated histograms
-
- }// aod loop
-
-}
-
-//____________________________________________________________________________
-void AliAnaParticleIsolation::InitParameters()
-{
-
- //Initialize the parameters of the analysis.
- SetInputAODName("PWG4Particle");
- SetAODObjArrayName("IsolationCone");
- AddToHistogramsName("AnaIsolation_");
-
- fCalorimeter = "PHOS" ;
- fReMakeIC = kFALSE ;
- fMakeSeveralIC = kFALSE ;
- fMakeInvMass = kFALSE ;
-
- //----------- Several IC-----------------
- fNCones = 5 ;
- fNPtThresFrac = 5 ;
- fConeSizes[0] = 0.1; fConeSizes[1] = 0.2; fConeSizes[2] = 0.3; fConeSizes[3] = 0.4; fConeSizes[4] = 0.5;
- fPtThresholds[0] = 1.; fPtThresholds[1] = 2.; fPtThresholds[2] = 3.; fPtThresholds[3] = 4.; fPtThresholds[4] = 5.;
- fPtFractions[0] = 0.05; fPtFractions[1] = 0.075; fPtFractions[2] = 0.1; fPtFractions[3] = 1.25; fPtFractions[4] = 1.5;
-
-//------------- Histograms settings -------
- fHistoNPtSumBins = 100 ;
- fHistoPtSumMax = 50 ;
- fHistoPtSumMin = 0. ;
-
- fHistoNPtInConeBins = 100 ;
- fHistoPtInConeMax = 50 ;
- fHistoPtInConeMin = 0. ;
-
-}
-
-//__________________________________________________________________
-void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph)
-{
- //Isolation Cut Analysis for both methods and different pt cuts and cones
- Float_t ptC = ph->Pt();
- Int_t tag = ph->GetTag();
-
- //Keep original setting used when filling AODs, reset at end of analysis
- Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
- Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
- Float_t rorg = GetIsolationCut()->GetConeSize();
-
- Float_t coneptsum = 0 ;
- Int_t n[10][10];//[fNCones][fNPtThresFrac];
- Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];
- Bool_t isolated = kFALSE;
-
- //Loop on cone sizes
- for(Int_t icone = 0; icone<fNCones; icone++){
- GetIsolationCut()->SetConeSize(fConeSizes[icone]);
- coneptsum = 0 ;
-
- //Loop on ptthresholds
- for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++){
- n[icone][ipt]=0;
- nfrac[icone][ipt]=0;
- GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
- GetIsolationCut()->MakeIsolationCut(ph->GetObjArray(GetAODObjArrayName()+"Tracks"),
- ph->GetObjArray(GetAODObjArrayName()+"Clusters"),
- GetReader(), kFALSE, ph, "",n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
-
- //Normal ptThreshold cut
- if(n[icone][ipt] == 0) {
- fhPtThresIsolated[icone][ipt]->Fill(ptC);
- if(IsDataMC()){
- if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)) fhPtThresIsolatedPrompt[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) fhPtThresIsolatedConversion[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtThresIsolatedFragmentation[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay)) fhPtThresIsolatedPi0Decay[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay)) fhPtThresIsolatedOtherDecay[icone][ipt]->Fill(ptC) ;
- else fhPtThresIsolatedUnknown[icone][ipt]->Fill(ptC) ;
- }
- }
-
- //Pt threshold on pt cand/ pt in cone fraction
- if(nfrac[icone][ipt] == 0) {
- fhPtFracIsolated[icone][ipt]->Fill(ptC);
- if(IsDataMC()){
- if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)) fhPtFracIsolatedPrompt[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) fhPtFracIsolatedConversion[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtFracIsolatedFragmentation[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay)) fhPtFracIsolatedPi0Decay[icone][ipt]->Fill(ptC) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay)) fhPtFracIsolatedOtherDecay[icone][ipt]->Fill(ptC) ;
- else fhPtFracIsolatedUnknown[icone][ipt]->Fill(ptC) ;
- }
- }
- }//pt thresh loop
-
- //Sum in cone histograms
- fhPtSumIsolated[icone]->Fill(ptC,coneptsum) ;
- if(IsDataMC()){
- if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)) fhPtSumIsolatedPrompt[icone]->Fill(ptC,coneptsum) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) fhPtSumIsolatedConversion[icone]->Fill(ptC,coneptsum) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtSumIsolatedFragmentation[icone]->Fill(ptC,coneptsum) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay)) fhPtSumIsolatedPi0Decay[icone]->Fill(ptC,coneptsum) ;
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay)) fhPtSumIsolatedOtherDecay[icone]->Fill(ptC,coneptsum) ;
- else fhPtSumIsolatedUnknown[icone]->Fill(ptC,coneptsum) ;
- }
-
- }//cone size loop
-
- //Reset original parameters for AOD analysis
- GetIsolationCut()->SetPtThreshold(ptthresorg);
- GetIsolationCut()->SetPtFraction(ptfracorg);
- GetIsolationCut()->SetConeSize(rorg);
-
-}
-
-//__________________________________________________________________
-void AliAnaParticleIsolation::Print(const Option_t * opt) const
-{
-
- //Print some relevant parameters set for the analysis
- if(! opt)
- return;
-
- printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
- AliAnaPartCorrBaseClass::Print(" ");
-
- printf("ReMake Isolation = %d \n", fReMakeIC) ;
- printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;
- printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;
-
- if(fMakeSeveralIC){
- printf("N Cone Sizes = %d\n", fNCones) ;
- printf("Cone Sizes = \n") ;
- for(Int_t i = 0; i < fNCones; i++)
- printf(" %1.2f;", fConeSizes[i]) ;
- printf(" \n") ;
-
- printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;
- printf(" pT thresholds = \n") ;
- for(Int_t i = 0; i < fNPtThresFrac; i++)
- printf(" %2.2f;", fPtThresholds[i]) ;
-
- printf(" \n") ;
-
- printf(" pT fractions = \n") ;
- for(Int_t i = 0; i < fNPtThresFrac; i++)
- printf(" %2.2f;", fPtFractions[i]) ;
-
- }
-
- printf("Histograms: %3.1f < pT sum < %3.1f, Nbin = %d\n", fHistoPtSumMin, fHistoPtSumMax, fHistoNPtSumBins);
- printf("Histograms: %3.1f < pT in cone < %3.1f, Nbin = %d\n", fHistoPtInConeMin, fHistoPtInConeMax, fHistoNPtInConeBins);
-
- printf(" \n") ;
-
-}
-
+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ * *\r
+ * Author: The ALICE Off-line Project. *\r
+ * Contributors are mentioned in the code where appropriate. *\r
+ * *\r
+ * Permission to use, copy, modify and distribute this software and its *\r
+ * documentation strictly for non-commercial purposes hereby granted *\r
+ * without fee, provided that the above copyright notice appears in all *\r
+ * copies and that both the copyright notice and this permission notice *\r
+ * appear in the supporting documentation. The authors make no claims *\r
+ * about the suitability of this software for any purpose. It is *\r
+ * provided "as is" without express or implied warranty. *\r
+ **************************************************************************/\r
+/* $Id: AliAnaParticleIsolation.cxx 28688 2008-09-11 15:04:07Z gconesab $ */\r
+\r
+//_________________________________________________________________________\r
+// Class for analysis of particle isolation\r
+// Input is selected particles put in AOD branch (AliAODPWG4ParticleCorrelation)\r
+//\r
+// Class created from old AliPHOSGammaJet \r
+// (see AliRoot versions previous Release 4-09)\r
+//\r
+// -- Author: Gustavo Conesa (LNF-INFN) \r
+\r
+//-Yaxian Mao (add the possibility for different IC method with different pt range, 01/10/2010)\r
+//////////////////////////////////////////////////////////////////////////////\r
+ \r
+ \r
+// --- ROOT system --- \r
+#include <TClonesArray.h>\r
+#include <TList.h>\r
+#include <TObjString.h>\r
+#include <TH2F.h>\r
+//#include <Riostream.h>\r
+#include <TClass.h>\r
+\r
+// --- Analysis system --- \r
+#include "AliAnaParticleIsolation.h" \r
+#include "AliCaloTrackReader.h"\r
+#include "AliIsolationCut.h"\r
+#include "AliNeutralMesonSelection.h"\r
+#include "AliAODPWG4ParticleCorrelation.h"\r
+#include "AliMCAnalysisUtils.h"\r
+#include "AliVTrack.h"\r
+#include "AliVCluster.h"\r
+\r
+ClassImp(AliAnaParticleIsolation)\r
+ \r
+//____________________________________________________________________________\r
+ AliAnaParticleIsolation::AliAnaParticleIsolation() : \r
+ AliAnaPartCorrBaseClass(), fCalorimeter(""), \r
+ fReMakeIC(0), fMakeSeveralIC(0), fMakeInvMass(0),\r
+ fhPtIso(0),fhPhiIso(0),fhEtaIso(0), fhPtNoIso(0),fhPtInvMassDecayIso(0),fhPtInvMassDecayNoIso(0), fhConeSumPt(0), fhPtInCone(0),\r
+ fhFRConeSumPt(0), fhPtInFRCone(0),\r
+ //Several IC\r
+ fNCones(0),fNPtThresFrac(0), fConeSizes(), fPtThresholds(), fPtFractions(), \r
+ //MC\r
+ fhPtIsoPrompt(0),fhPhiIsoPrompt(0),fhEtaIsoPrompt(0), \r
+ fhPtThresIsolatedPrompt(), fhPtFracIsolatedPrompt(), fhPtSumIsolatedPrompt(),\r
+ fhPtIsoFragmentation(0),fhPhiIsoFragmentation(0),fhEtaIsoFragmentation(0), \r
+ fhPtThresIsolatedFragmentation(), fhPtFracIsolatedFragmentation(), fhPtSumIsolatedFragmentation(),\r
+ fhPtIsoPi0Decay(0),fhPhiIsoPi0Decay(0),fhEtaIsoPi0Decay(0),\r
+ fhPtThresIsolatedPi0Decay(), fhPtFracIsolatedPi0Decay(), fhPtSumIsolatedPi0Decay(),\r
+ fhPtIsoOtherDecay(0),fhPhiIsoOtherDecay(0),fhEtaIsoOtherDecay(0), \r
+ fhPtThresIsolatedOtherDecay(), fhPtFracIsolatedOtherDecay(), fhPtSumIsolatedOtherDecay(),\r
+ fhPtIsoConversion(0),fhPhiIsoConversion(0),fhEtaIsoConversion(0), \r
+ fhPtThresIsolatedConversion(), fhPtFracIsolatedConversion(), fhPtSumIsolatedConversion(),\r
+ fhPtIsoUnknown(0),fhPhiIsoUnknown(0),fhEtaIsoUnknown(0), \r
+ fhPtThresIsolatedUnknown(), fhPtFracIsolatedUnknown(), fhPtSumIsolatedUnknown(),\r
+ fhPtNoIsoPi0Decay(0),fhPtNoIsoPrompt(0),fhPtIsoMCPhoton(0),fhPtNoIsoMCPhoton(0),\r
+ //Histograms settings\r
+ fHistoNPtSumBins(0), fHistoPtSumMax(0.), fHistoPtSumMin(0.),\r
+ fHistoNPtInConeBins(0), fHistoPtInConeMax(0.), fHistoPtInConeMin(0.)\r
+{\r
+ //default ctor\r
+ \r
+ //Initialize parameters\r
+ InitParameters();\r
+ \r
+ for(Int_t i = 0; i < 5 ; i++){ \r
+ fConeSizes[i] = 0 ; \r
+ fhPtSumIsolated[i] = 0 ; \r
+ \r
+ fhPtSumIsolatedPrompt[i] = 0 ; \r
+ fhPtSumIsolatedFragmentation[i] = 0 ; \r
+ fhPtSumIsolatedPi0Decay[i] = 0 ; \r
+ fhPtSumIsolatedOtherDecay[i] = 0 ; \r
+ fhPtSumIsolatedConversion[i] = 0 ; \r
+ fhPtSumIsolatedUnknown[i] = 0 ; \r
+ \r
+ for(Int_t j = 0; j < 5 ; j++){ \r
+ fhPtThresIsolated[i][j] = 0 ; \r
+ fhPtFracIsolated[i][j] = 0 ; \r
+ \r
+ fhPtThresIsolatedPrompt[i][j] = 0 ; \r
+ fhPtThresIsolatedFragmentation[i][j] = 0 ; \r
+ fhPtThresIsolatedPi0Decay[i][j] = 0 ; \r
+ fhPtThresIsolatedOtherDecay[i][j] = 0 ; \r
+ fhPtThresIsolatedConversion[i][j] = 0 ; \r
+ fhPtThresIsolatedUnknown[i][j] = 0 ; \r
+ \r
+ fhPtFracIsolatedPrompt[i][j] = 0 ; \r
+ fhPtFracIsolatedFragmentation[i][j] = 0 ; \r
+ fhPtFracIsolatedPi0Decay[i][j] = 0 ; \r
+ fhPtFracIsolatedOtherDecay[i][j] = 0 ; \r
+ fhPtFracIsolatedConversion[i][j] = 0 ;\r
+ fhPtFracIsolatedUnknown[i][j] = 0 ; \r
+ \r
+ } \r
+ } \r
+ \r
+ for(Int_t i = 0; i < 5 ; i++){ \r
+ fPtFractions[i]= 0 ; \r
+ fPtThresholds[i]= 0 ; \r
+ } \r
+\r
+\r
+}\r
+\r
+//____________________________________________________________________________\r
+AliAnaParticleIsolation::~AliAnaParticleIsolation() \r
+{\r
+ //dtor\r
+ //do not delete histograms\r
+ \r
+ //delete [] fConeSizes ; \r
+ //delete [] fPtThresholds ; \r
+ //delete [] fPtFractions ; \r
+\r
+}\r
+\r
+//_________________________________________________________________________\r
+Bool_t AliAnaParticleIsolation::CheckInvMass(const Int_t iaod, const AliAODPWG4Particle * part1)\r
+{\r
+ // Search if there is a companion decay photon to the candidate \r
+ // and discard it in such case\r
+ // Use it only if isolation candidates are photons\r
+ // Make sure that no selection on photon pt is done in the input aod photon list.\r
+ TLorentzVector mom1 = *(part1->Momentum());\r
+ TLorentzVector mom2 ;\r
+ for(Int_t jaod = 0; jaod < GetInputAODBranch()->GetEntriesFast(); jaod++){\r
+ if(iaod == jaod) continue ;\r
+ AliAODPWG4ParticleCorrelation * part2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(jaod));\r
+ mom2 = *(part2->Momentum());\r
+ //Select good pair (good phi, pt cuts, aperture and invariant mass)\r
+ if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)){\r
+ if(GetDebug() > 1)printf("AliAnaParticleIsolation::CheckInvMass() - Selected gamma pair: pt %f, phi %f, eta%f\n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta());\r
+ return kTRUE ;\r
+ }\r
+ }//loop\r
+ \r
+ return kFALSE;\r
+}\r
+\r
+//________________________________________________________________________\r
+TObjString * AliAnaParticleIsolation::GetAnalysisCuts()\r
+{ \r
+ //Save parameters used for analysis\r
+ TString parList ; //this will be list of parameters used for this analysis.\r
+ const Int_t buffersize = 255;\r
+ char onePar[buffersize] ;\r
+ \r
+ snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;\r
+ parList+=onePar ; \r
+ snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;\r
+ parList+=onePar ;\r
+ snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;\r
+ parList+=onePar ;\r
+ snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;\r
+ parList+=onePar ;\r
+ snprintf(onePar, buffersize,"fMakeInvMass=%d (Flag for rejection of candidates with a pi0 inv mass pair) \n",fMakeInvMass) ;\r
+ parList+=onePar ;\r
+ \r
+ if(fMakeSeveralIC){\r
+ snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ;\r
+ parList+=onePar ;\r
+ snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ;\r
+ parList+=onePar ;\r
+ \r
+ for(Int_t icone = 0; icone < fNCones ; icone++){\r
+ snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;\r
+ parList+=onePar ; \r
+ }\r
+ for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++){\r
+ snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;\r
+ parList+=onePar ; \r
+ }\r
+ for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++){\r
+ snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;\r
+ parList+=onePar ; \r
+ } \r
+ }\r
+ \r
+ //Get parameters set in base class.\r
+ parList += GetBaseParametersList() ;\r
+ \r
+ //Get parameters set in IC class.\r
+ if(!fMakeSeveralIC)parList += GetIsolationCut()->GetICParametersList() ;\r
+ \r
+ return new TObjString(parList) ;\r
+ \r
+}\r
+\r
+//________________________________________________________________________\r
+TList * AliAnaParticleIsolation::GetCreateOutputObjects()\r
+{ \r
+ // Create histograms to be saved in output file and \r
+ // store them in outputContainer\r
+ TList * outputContainer = new TList() ; \r
+ outputContainer->SetName("IsolatedParticleHistos") ; \r
+ \r
+ Int_t nptbins = GetHistoPtBins();\r
+ Int_t nphibins = GetHistoPhiBins();\r
+ Int_t netabins = GetHistoEtaBins();\r
+ Float_t ptmax = GetHistoPtMax();\r
+ Float_t phimax = GetHistoPhiMax();\r
+ Float_t etamax = GetHistoEtaMax();\r
+ Float_t ptmin = GetHistoPtMin();\r
+ Float_t phimin = GetHistoPhiMin();\r
+ Float_t etamin = GetHistoEtaMin(); \r
+ \r
+ Int_t nptsumbins = fHistoNPtSumBins;\r
+ Float_t ptsummax = fHistoPtSumMax;\r
+ Float_t ptsummin = fHistoPtSumMin; \r
+ Int_t nptinconebins = fHistoNPtInConeBins;\r
+ Float_t ptinconemax = fHistoPtInConeMax;\r
+ Float_t ptinconemin = fHistoPtInConeMin;\r
+ \r
+ if(!fMakeSeveralIC){\r
+ \r
+ fhConeSumPt = new TH2F\r
+ ("hConePtSum","#Sigma p_{T} in isolation cone ",nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhConeSumPt->SetYTitle("#Sigma p_{T}");\r
+ fhConeSumPt->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhConeSumPt) ;\r
+ \r
+ fhPtInCone = new TH2F\r
+ ("hPtInCone","p_{T} in isolation cone ",nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);\r
+ fhPtInCone->SetYTitle("p_{T in cone} (GeV/c)");\r
+ fhPtInCone->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtInCone) ;\r
+ \r
+ fhFRConeSumPt = new TH2F\r
+ ("hFRConePtSum","#Sigma p_{T} in the froward region isolation cone ",nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhFRConeSumPt->SetYTitle("#Sigma p_{T}");\r
+ fhFRConeSumPt->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhFRConeSumPt) ;\r
+ \r
+ fhPtInFRCone = new TH2F\r
+ ("hPtInFRCone","p_{T} in froward region isolation cone ",nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);\r
+ fhPtInFRCone->SetYTitle("p_{T in cone} (GeV/c)");\r
+ fhPtInFRCone->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtInFRCone) ; \r
+ \r
+ fhPtIso = new TH1F("hPt","Isolated Number of particles",nptbins,ptmin,ptmax); \r
+ fhPtIso->SetYTitle("N");\r
+ fhPtIso->SetXTitle("p_{T}(GeV/c)");\r
+ outputContainer->Add(fhPtIso) ; \r
+ \r
+ fhPhiIso = new TH2F\r
+ ("hPhi","Isolated Number of particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIso->SetYTitle("#phi");\r
+ fhPhiIso->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPhiIso) ; \r
+ \r
+ fhEtaIso = new TH2F\r
+ ("hEta","Isolated Number of particles",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIso->SetYTitle("#eta");\r
+ fhEtaIso->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhEtaIso) ;\r
+\r
+ fhPtNoIso = new TH1F("hPtNoIso","Number of not isolated leading particles",nptbins,ptmin,ptmax); \r
+ fhPtNoIso->SetYTitle("N");\r
+ fhPtNoIso->SetXTitle("p_{T}(GeV/c)");\r
+ outputContainer->Add(fhPtNoIso) ;\r
+\r
+ fhPtInvMassDecayIso = new TH1F("hPtInvMassDecayIso","Number of isolated pi0 decay particles",nptbins,ptmin,ptmax); \r
+ fhPtNoIso->SetYTitle("N");\r
+ fhPtNoIso->SetXTitle("p_{T}(GeV/c)");\r
+ outputContainer->Add(fhPtInvMassDecayIso) ;\r
+\r
+ fhPtInvMassDecayNoIso = new TH1F("hPtInvMassDecayNoIso","Number of not isolated leading pi0 decay particles",nptbins,ptmin,ptmax); \r
+ fhPtNoIso->SetYTitle("N");\r
+ fhPtNoIso->SetXTitle("p_{T}(GeV/c)");\r
+ outputContainer->Add(fhPtInvMassDecayNoIso) ;\r
+ \r
+ if(IsDataMC()){\r
+ \r
+ fhPtIsoPrompt = new TH1F("hPtMCPrompt","Isolated Number of #gamma prompt",nptbins,ptmin,ptmax); \r
+ fhPtIsoPrompt->SetYTitle("N");\r
+ fhPtIsoPrompt->SetXTitle("p_{T #gamma}(GeV/c)");\r
+ outputContainer->Add(fhPtIsoPrompt) ; \r
+ \r
+ fhPhiIsoPrompt = new TH2F\r
+ ("hPhiMCPrompt","Isolated Number of #gamma prompt",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIsoPrompt->SetYTitle("#phi");\r
+ fhPhiIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhPhiIsoPrompt) ; \r
+ \r
+ fhEtaIsoPrompt = new TH2F\r
+ ("hEtaMCPrompt","Isolated Number of #gamma prompt ",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIsoPrompt->SetYTitle("#eta");\r
+ fhEtaIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhEtaIsoPrompt) ;\r
+ \r
+ fhPtIsoFragmentation = new TH1F("hPtMCFragmentation","Isolated Number of #gamma",nptbins,ptmin,ptmax); \r
+ fhPtIsoFragmentation->SetYTitle("N");\r
+ fhPtIsoFragmentation->SetXTitle("p_{T #gamma}(GeV/c)");\r
+ outputContainer->Add(fhPtIsoFragmentation) ; \r
+ \r
+ fhPhiIsoFragmentation = new TH2F\r
+ ("hPhiMCFragmentation","Isolated Number of #gamma fragmentation",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIsoFragmentation->SetYTitle("#phi");\r
+ fhPhiIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhPhiIsoFragmentation) ; \r
+ \r
+ fhEtaIsoFragmentation = new TH2F\r
+ ("hEtaMCFragmentation","Isolated Number of #gamma fragmentation",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIsoFragmentation->SetYTitle("#eta");\r
+ fhEtaIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhEtaIsoFragmentation) ;\r
+ \r
+ fhPtIsoPi0Decay = new TH1F("hPtMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax); \r
+ fhPtIsoPi0Decay->SetYTitle("N");\r
+ fhPtIsoPi0Decay->SetXTitle("p_{T #gamma}(GeV/c)");\r
+ outputContainer->Add(fhPtIsoPi0Decay) ; \r
+ \r
+ fhPhiIsoPi0Decay = new TH2F\r
+ ("hPhiMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIsoPi0Decay->SetYTitle("#phi");\r
+ fhPhiIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhPhiIsoPi0Decay) ; \r
+ \r
+ fhEtaIsoPi0Decay = new TH2F\r
+ ("hEtaMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIsoPi0Decay->SetYTitle("#eta");\r
+ fhEtaIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhEtaIsoPi0Decay) ;\r
+ \r
+ fhPtIsoOtherDecay = new TH1F("hPtMCOtherDecay","Isolated Number of #gamma from non #pi^{0} decay",nptbins,ptmin,ptmax); \r
+ fhPtIsoOtherDecay->SetYTitle("N");\r
+ fhPtIsoOtherDecay->SetXTitle("p_{T #gamma}(GeV/c)");\r
+ outputContainer->Add(fhPtIsoOtherDecay) ; \r
+ \r
+ fhPhiIsoOtherDecay = new TH2F\r
+ ("hPhiMCOtherDecay","Isolated Number of #gamma from non #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIsoOtherDecay->SetYTitle("#phi");\r
+ fhPhiIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhPhiIsoOtherDecay) ; \r
+ \r
+ fhEtaIsoOtherDecay = new TH2F\r
+ ("hEtaMCOtherDecay","Isolated Number of #gamma non #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIsoOtherDecay->SetYTitle("#eta");\r
+ fhEtaIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhEtaIsoOtherDecay) ;\r
+ \r
+ fhPtIsoConversion = new TH1F("hPtMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax); \r
+ fhPtIsoConversion->SetYTitle("N");\r
+ fhPtIsoConversion->SetXTitle("p_{T #gamma}(GeV/c)");\r
+ outputContainer->Add(fhPtIsoConversion) ; \r
+ \r
+ fhPhiIsoConversion = new TH2F\r
+ ("hPhiMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIsoConversion->SetYTitle("#phi");\r
+ fhPhiIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhPhiIsoConversion) ; \r
+ \r
+ fhEtaIsoConversion = new TH2F\r
+ ("hEtaMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIsoConversion->SetYTitle("#eta");\r
+ fhEtaIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)");\r
+ outputContainer->Add(fhEtaIsoConversion) ;\r
+ \r
+ fhPtIsoUnknown = new TH1F("hPtMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax); \r
+ fhPtIsoUnknown->SetYTitle("N");\r
+ fhPtIsoUnknown->SetXTitle("p_{T}(GeV/c)");\r
+ outputContainer->Add(fhPtIsoUnknown) ; \r
+ \r
+ fhPhiIsoUnknown = new TH2F\r
+ ("hPhiMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax); \r
+ fhPhiIsoUnknown->SetYTitle("#phi");\r
+ fhPhiIsoUnknown->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPhiIsoUnknown) ; \r
+ \r
+ fhEtaIsoUnknown = new TH2F\r
+ ("hEtaMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax,netabins,etamin,etamax); \r
+ fhEtaIsoUnknown->SetYTitle("#eta");\r
+ fhEtaIsoUnknown->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhEtaIsoUnknown) ;\r
+\r
+ fhPtNoIsoPi0Decay = new TH1F\r
+ ("hPtNoIsoPi0Decay","Number of not isolated leading #gamma from Pi0 decay",nptbins,ptmin,ptmax); \r
+ fhPtNoIsoPi0Decay->SetYTitle("N");\r
+ fhPtNoIsoPi0Decay->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtNoIsoPi0Decay) ;\r
+\r
+ fhPtNoIsoPrompt = new TH1F\r
+ ("hPtNoIsoPrompt","Number of not isolated leading prompt #gamma",nptbins,ptmin,ptmax); \r
+ fhPtNoIsoPrompt->SetYTitle("N");\r
+ fhPtNoIsoPrompt->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtNoIsoPrompt) ;\r
+\r
+ fhPtIsoMCPhoton = new TH1F\r
+ ("hPtIsoMCPhoton","Number of isolated leading #gamma",nptbins,ptmin,ptmax); \r
+ fhPtIsoMCPhoton->SetYTitle("N");\r
+ fhPtIsoMCPhoton->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtIsoMCPhoton) ;\r
+\r
+ fhPtNoIsoMCPhoton = new TH1F\r
+ ("hPtNoIsoMCPhoton","Number of not isolated leading #gamma",nptbins,ptmin,ptmax); \r
+ fhPtNoIsoMCPhoton->SetYTitle("N");\r
+ fhPtNoIsoMCPhoton->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtNoIsoMCPhoton) ;\r
+ }//Histos with MC\r
+ \r
+ }\r
+ \r
+ if(fMakeSeveralIC){\r
+ const Int_t buffersize = 255;\r
+ char name[buffersize];\r
+ char title[buffersize];\r
+ for(Int_t icone = 0; icone<fNCones; icone++){\r
+ snprintf(name, buffersize,"hPtSum_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolated[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolated[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolated[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolated[icone]) ; \r
+ \r
+ if(IsDataMC()){\r
+ snprintf(name, buffersize,"hPtSumPrompt_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate Prompt cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolatedPrompt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolatedPrompt[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolatedPrompt[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolatedPrompt[icone]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtSumFragmentation_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate Fragmentation cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolatedFragmentation[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolatedFragmentation[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolatedFragmentation[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolatedFragmentation[icone]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtSumPi0Decay_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate Pi0Decay cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolatedPi0Decay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolatedPi0Decay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolatedPi0Decay[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolatedPi0Decay[icone]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtSumOtherDecay_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate OtherDecay cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolatedOtherDecay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolatedOtherDecay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolatedOtherDecay[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolatedOtherDecay[icone]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtSumConversion_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate Conversion cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolatedConversion[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolatedConversion[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolatedConversion[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolatedConversion[icone]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtSumUnknown_Cone_%d",icone);\r
+ snprintf(title, buffersize,"Candidate Unknown cone sum p_{T} for cone size %d vs candidate p_{T}",icone);\r
+ fhPtSumIsolatedUnknown[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);\r
+ fhPtSumIsolatedUnknown[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");\r
+ fhPtSumIsolatedUnknown[icone]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtSumIsolatedUnknown[icone]) ; \r
+ \r
+ }//Histos with MC\r
+ \r
+ for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++){ \r
+ snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolated[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolated[icone][ipt]) ; \r
+ \r
+ if(IsDataMC()){\r
+ snprintf(name, buffersize,"hPtThresMCPrompt_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolatedPrompt[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFracMCPrompt_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolatedPrompt[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtThresMCFragmentation_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolatedFragmentation[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFracMCFragmentation_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolatedFragmentation[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtThresMCPi0Decay_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolatedPi0Decay[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFracMCPi0Decay_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolatedPi0Decay[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtThresMCOtherDecay_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolatedOtherDecay[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFracMCOtherDecay_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolatedOtherDecay[icone][ipt]) ;\r
+ \r
+ snprintf(name, buffersize,"hPtThresMCConversion_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolatedConversion[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFracMCConversion_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolatedConversion[icone][ipt]) ;\r
+ \r
+ snprintf(name, buffersize,"hPtThresMCUnknown_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtThresIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtThresIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtThresIsolatedUnknown[icone][ipt]) ; \r
+ \r
+ snprintf(name, buffersize,"hPtFracMCUnknown_Cone_%d_Pt%d",icone,ipt);\r
+ snprintf(title, buffersize,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);\r
+ fhPtFracIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);\r
+ fhPtFracIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)");\r
+ outputContainer->Add(fhPtFracIsolatedUnknown[icone][ipt]) ; \r
+ \r
+ }//Histos with MC\r
+ \r
+ }//icone loop\r
+ }//ipt loop\r
+ }\r
+ \r
+ //Keep neutral meson selection histograms if requiered\r
+ //Setting done in AliNeutralMesonSelection\r
+ if(fMakeInvMass && GetNeutralMesonSelection()){\r
+ TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ;\r
+ if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept())\r
+ for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) outputContainer->Add(nmsHistos->At(i)) ;\r
+ delete nmsHistos;\r
+ }\r
+ \r
+ return outputContainer ;\r
+ \r
+}\r
+\r
+//__________________________________________________________________\r
+void AliAnaParticleIsolation::MakeAnalysisFillAOD() \r
+{\r
+ //Do analysis and fill aods\r
+ //Search for the isolated photon in fCalorimeter with pt > GetMinPt()\r
+ \r
+ if(!GetInputAODBranch()){\r
+ printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());\r
+ abort();\r
+ }\r
+ \r
+ if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation")){\r
+ printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());\r
+ abort();\r
+ }\r
+ \r
+ Int_t n = 0, nfrac = 0;\r
+ Bool_t isolated = kFALSE ;\r
+ Bool_t leading = kTRUE ;\r
+ Bool_t decay = kFALSE;\r
+ Float_t coneptsum = 0 ;\r
+ TObjArray * pl = 0x0; ; \r
+ \r
+ //Select the calorimeter for candidate isolation with neutral particles\r
+ if(fCalorimeter == "PHOS")\r
+ pl = GetPHOSClusters();\r
+ else if (fCalorimeter == "EMCAL")\r
+ pl = GetEMCALClusters();\r
+ \r
+ //Loop on AOD branch, filled previously in AliAnaPhoton\r
+ TLorentzVector mom ;\r
+ Int_t naod = GetInputAODBranch()->GetEntriesFast();\r
+ if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);\r
+ for(Int_t iaod = 0; iaod < naod; iaod++){\r
+ AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));\r
+ \r
+ //If too small or too large pt, skip\r
+ if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ; \r
+ \r
+ //check if it is low pt trigger particle, then adjust the isolation method\r
+ if(aodinput->Pt() < GetIsolationCut()->GetPtThreshold() || aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold()) \r
+ continue ; //trigger should not from underlying event\r
+ // if(GetIsolationCut()->GetICMethod()!=AliIsolationCut::kPtThresIC && aodinput->Pt()!=0.){ \r
+// //low pt trigger use pt threshold IC instead of other method\r
+// if (aodinput->Pt()*(GetIsolationCut()->GetPtFraction())<GetIsolationCut()->GetPtThreshold() || aodinput->Pt()*(GetIsolationCut()->GetPtFraction())<GetIsolationCut()->GetSumPtThreshold()) {\r
+// // printf("change the IC method to PtThresIC\n") ;\r
+// GetIsolationCut()->SetICMethod(AliIsolationCut::kPtThresIC); \r
+// }\r
+// }\r
+ \r
+ //Check invariant mass, if pi0, tag decay.\r
+ if(fMakeInvMass) decay = CheckInvMass(iaod,aodinput);\r
+\r
+ //After cuts, study isolation\r
+ n=0; nfrac = 0; isolated = kFALSE; leading = kTRUE; coneptsum = 0;\r
+ GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,GetReader(), kTRUE, aodinput, GetAODObjArrayName(), n,nfrac,coneptsum, isolated, leading);\r
+ aodinput->SetIsolated(isolated);\r
+ aodinput->SetLeadingParticle(leading);\r
+ aodinput->SetTagged(decay);\r
+ if(GetDebug() > 1 && isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",iaod); \r
+ \r
+ }//loop\r
+ \r
+ if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n"); \r
+ \r
+}\r
+\r
+//__________________________________________________________________\r
+void AliAnaParticleIsolation::MakeAnalysisFillHistograms() \r
+{\r
+ //Do analysis and fill histograms\r
+ Int_t n = 0, nfrac = 0;\r
+ Bool_t isolated = kFALSE ;\r
+ Bool_t leading = kTRUE ;\r
+ Float_t coneptsum = 0 ;\r
+ //Loop on stored AOD \r
+ Int_t naod = GetInputAODBranch()->GetEntriesFast();\r
+ if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);\r
+ \r
+ //Get vertex for photon momentum calculation\r
+ Double_t vertex[]={0,0,0} ; //vertex ;\r
+ //Double_t vertex2[]={0,0,0} ; //vertex ;\r
+ if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
+ GetReader()->GetVertex(vertex);\r
+ //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2);\r
+ } \r
+ \r
+ for(Int_t iaod = 0; iaod < naod ; iaod++){\r
+ AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));\r
+ \r
+ Bool_t isolation = aod->IsIsolated(); \r
+ Bool_t lead = aod->IsLeadingParticle();\r
+ Bool_t dec = aod->IsTagged();\r
+ Float_t ptcluster = aod->Pt();\r
+ Float_t phicluster = aod->Phi();\r
+ Float_t etacluster = aod->Eta();\r
+ // Float_t phiForward = aod->Phi()+TMath::PiOver2() ;\r
+ Float_t conesize = GetIsolationCut()->GetConeSize();\r
+ \r
+ //Recover reference arrays with clusters and tracks\r
+ TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");\r
+ TObjArray * reftracks = aod->GetObjArray(GetAODObjArrayName()+"Tracks");\r
+ //If too small or too large pt, skip\r
+ if(aod->Pt() < GetMinPt() || aod->Pt() > GetMaxPt() ) continue ; \r
+ \r
+ if(fMakeSeveralIC) {\r
+ //Analysis of multiple IC at same time\r
+ MakeSeveralICAnalysis(aod);\r
+ continue;\r
+ }\r
+ else if(fReMakeIC){\r
+ //In case a more strict IC is needed in the produced AOD\r
+ n=0; nfrac = 0; isolated = kFALSE; leading = kTRUE; coneptsum = 0;\r
+ GetIsolationCut()->MakeIsolationCut(reftracks, refclusters, GetReader(), kFALSE, aod, "", n,nfrac,coneptsum, isolated, leading);\r
+ fhConeSumPt->Fill(ptcluster,coneptsum); \r
+ if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Energy Sum in Isolation Cone %2.2f\n", coneptsum); \r
+ }\r
+ \r
+ //Fill pt distribution of particles in cone\r
+ //Tracks\r
+ coneptsum = 0;\r
+ Double_t sumptFR = 0. ;\r
+ TObjArray * trackList = GetCTSTracks() ;\r
+ for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++){\r
+ AliVTrack* track = (AliVTrack *) trackList->At(itrack);\r
+ //fill the histograms at forward range\r
+ if(!track){\r
+ printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");\r
+ continue;\r
+ }\r
+ Double_t dPhi = phicluster - track->Phi() + TMath::PiOver2();\r
+ Double_t dEta = etacluster - track->Eta();\r
+ Double_t arg = dPhi*dPhi + dEta*dEta;\r
+ if(TMath::Sqrt(arg) < conesize){\r
+ fhPtInFRCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));\r
+ sumptFR+=track->Pt();\r
+ } \r
+ dPhi = phicluster - track->Phi() - TMath::PiOver2();\r
+ arg = dPhi*dPhi + dEta*dEta;\r
+ if(TMath::Sqrt(arg) < conesize){\r
+ fhPtInFRCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));\r
+ sumptFR+=track->Pt();\r
+ } \r
+ }\r
+ fhFRConeSumPt->Fill(ptcluster,sumptFR);\r
+ if(reftracks){ \r
+ for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++){\r
+ AliVTrack* track = (AliVTrack *) reftracks->At(itrack);\r
+ fhPtInCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));\r
+ coneptsum+=track->Pt();\r
+ }\r
+ }\r
+\r
+ //CaloClusters\r
+ if(refclusters){ \r
+ TLorentzVector mom ;\r
+ for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++){\r
+ AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);\r
+ Int_t input = 0;\r
+ // if (fCalorimeter == "EMCAL" && GetReader()->GetEMCALClustersNormalInputEntries() <= icalo) input = 1 ;\r
+ // else if(fCalorimeter == "PHOS" && GetReader()->GetPHOSClustersNormalInputEntries() <= icalo) input = 1;\r
+ \r
+ //Get Momentum vector, \r
+ if (input == 0) calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line\r
+ // else if(input == 1) calo->GetMomentum(mom,vertex2);//Assume that come from vertex in straight line \r
+ \r
+ fhPtInCone->Fill(ptcluster, mom.Pt());\r
+ coneptsum+=mom.Pt();\r
+ }\r
+ }\r
+ \r
+ if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsum);\r
+ \r
+ if(!fReMakeIC) fhConeSumPt->Fill(ptcluster,coneptsum);\r
+ \r
+ if(isolation && lead){ \r
+ \r
+ if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED, fill histograms\n", iaod);\r
+ \r
+ fhPtIso ->Fill(ptcluster);\r
+ fhPhiIso ->Fill(ptcluster,phicluster);\r
+ fhEtaIso ->Fill(ptcluster,etacluster);\r
+ if (dec) fhPtInvMassDecayIso->Fill(ptcluster);\r
+ \r
+ if(IsDataMC()){\r
+ Int_t tag =aod->GetTag();\r
+ \r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)){\r
+ fhPtIsoPrompt ->Fill(ptcluster);\r
+ fhPhiIsoPrompt ->Fill(ptcluster,phicluster);\r
+ fhEtaIsoPrompt ->Fill(ptcluster,etacluster);\r
+ }\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation))\r
+ {\r
+ fhPtIsoFragmentation ->Fill(ptcluster);\r
+ fhPhiIsoFragmentation ->Fill(ptcluster,phicluster);\r
+ fhEtaIsoFragmentation ->Fill(ptcluster,etacluster);\r
+ }\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))\r
+ {\r
+ fhPtIsoPi0Decay ->Fill(ptcluster);\r
+ fhPhiIsoPi0Decay ->Fill(ptcluster,phicluster);\r
+ fhEtaIsoPi0Decay ->Fill(ptcluster,etacluster);\r
+ }\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))\r
+ {\r
+ fhPtIsoOtherDecay ->Fill(ptcluster);\r
+ fhPhiIsoOtherDecay ->Fill(ptcluster,phicluster);\r
+ fhEtaIsoOtherDecay ->Fill(ptcluster,etacluster);\r
+ }\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))\r
+ {\r
+ fhPtIsoConversion ->Fill(ptcluster);\r
+ fhPhiIsoConversion ->Fill(ptcluster,phicluster);\r
+ fhEtaIsoConversion ->Fill(ptcluster,etacluster);\r
+ }\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))\r
+ {\r
+ fhPtIsoMCPhoton ->Fill(ptcluster);\r
+ }\r
+ \r
+ else\r
+ {\r
+ fhPtIsoUnknown ->Fill(ptcluster);\r
+ fhPhiIsoUnknown ->Fill(ptcluster,phicluster);\r
+ fhEtaIsoUnknown ->Fill(ptcluster,etacluster);\r
+ }\r
+ }//Histograms with MC\r
+ \r
+ }//Isolated histograms\r
+\r
+ if(!isolation && lead)\r
+ {\r
+ fhPtNoIso ->Fill(ptcluster);\r
+ if (dec) fhPtInvMassDecayNoIso->Fill(ptcluster);\r
+\r
+ if(IsDataMC()){\r
+ Int_t tag =aod->GetTag();\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))\r
+ {\r
+ fhPtNoIsoPi0Decay->Fill(ptcluster);\r
+ }\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt))\r
+ {\r
+ fhPtNoIsoPrompt->Fill(ptcluster);\r
+ }\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))\r
+ {\r
+ fhPtNoIsoMCPhoton->Fill(ptcluster);\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+ }// aod loop\r
+ \r
+}\r
+\r
+//____________________________________________________________________________\r
+void AliAnaParticleIsolation::InitParameters()\r
+{\r
+ \r
+ //Initialize the parameters of the analysis.\r
+ SetInputAODName("PWG4Particle");\r
+ SetAODObjArrayName("IsolationCone"); \r
+ AddToHistogramsName("AnaIsolation_");\r
+\r
+ fCalorimeter = "PHOS" ;\r
+ fReMakeIC = kFALSE ;\r
+ fMakeSeveralIC = kFALSE ;\r
+ fMakeInvMass = kFALSE ;\r
+ \r
+ //----------- Several IC-----------------\r
+ fNCones = 5 ; \r
+ fNPtThresFrac = 5 ; \r
+ fConeSizes[0] = 0.1; fConeSizes[1] = 0.2; fConeSizes[2] = 0.3; fConeSizes[3] = 0.4; fConeSizes[4] = 0.5;\r
+ fPtThresholds[0] = 1.; fPtThresholds[1] = 2.; fPtThresholds[2] = 3.; fPtThresholds[3] = 4.; fPtThresholds[4] = 5.; \r
+ fPtFractions[0] = 0.05; fPtFractions[1] = 0.075; fPtFractions[2] = 0.1; fPtFractions[3] = 1.25; fPtFractions[4] = 1.5; \r
+\r
+//------------- Histograms settings -------\r
+ fHistoNPtSumBins = 100 ;\r
+ fHistoPtSumMax = 50 ;\r
+ fHistoPtSumMin = 0. ;\r
+\r
+ fHistoNPtInConeBins = 100 ;\r
+ fHistoPtInConeMax = 50 ;\r
+ fHistoPtInConeMin = 0. ;\r
+\r
+}\r
+\r
+//__________________________________________________________________\r
+void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph) \r
+{\r
+ //Isolation Cut Analysis for both methods and different pt cuts and cones\r
+ Float_t ptC = ph->Pt(); \r
+ Int_t tag = ph->GetTag();\r
+ \r
+ //Keep original setting used when filling AODs, reset at end of analysis \r
+ Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();\r
+ Float_t ptfracorg = GetIsolationCut()->GetPtFraction();\r
+ Float_t rorg = GetIsolationCut()->GetConeSize();\r
+ \r
+ Float_t coneptsum = 0 ; \r
+ Int_t n[10][10];//[fNCones][fNPtThresFrac];\r
+ Int_t nfrac[10][10];//[fNCones][fNPtThresFrac];\r
+ Bool_t isolated = kFALSE;\r
+ Bool_t leading = kTRUE;\r
+\r
+ //Loop on cone sizes\r
+ for(Int_t icone = 0; icone<fNCones; icone++){\r
+ GetIsolationCut()->SetConeSize(fConeSizes[icone]);\r
+ coneptsum = 0 ;\r
+\r
+ //Loop on ptthresholds\r
+ for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++){\r
+ n[icone][ipt]=0;\r
+ nfrac[icone][ipt]=0;\r
+ GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);\r
+ GetIsolationCut()->MakeIsolationCut(ph->GetObjArray(GetAODObjArrayName()+"Tracks"), \r
+ ph->GetObjArray(GetAODObjArrayName()+"Clusters"),\r
+ GetReader(), kFALSE, ph, "",n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated, leading);\r
+\r
+ //Normal ptThreshold cut\r
+ if(n[icone][ipt] == 0) {\r
+ fhPtThresIsolated[icone][ipt]->Fill(ptC);\r
+ if(IsDataMC()){\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)) fhPtThresIsolatedPrompt[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) fhPtThresIsolatedConversion[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtThresIsolatedFragmentation[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay)) fhPtThresIsolatedPi0Decay[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay)) fhPtThresIsolatedOtherDecay[icone][ipt]->Fill(ptC) ;\r
+ else fhPtThresIsolatedUnknown[icone][ipt]->Fill(ptC) ;\r
+ }\r
+ }\r
+ \r
+ //Pt threshold on pt cand/ pt in cone fraction\r
+ if(nfrac[icone][ipt] == 0) {\r
+ fhPtFracIsolated[icone][ipt]->Fill(ptC);\r
+ if(IsDataMC()){\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)) fhPtFracIsolatedPrompt[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) fhPtFracIsolatedConversion[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtFracIsolatedFragmentation[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay)) fhPtFracIsolatedPi0Decay[icone][ipt]->Fill(ptC) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay)) fhPtFracIsolatedOtherDecay[icone][ipt]->Fill(ptC) ;\r
+ else fhPtFracIsolatedUnknown[icone][ipt]->Fill(ptC) ;\r
+ }\r
+ }\r
+ }//pt thresh loop\r
+ \r
+ //Sum in cone histograms\r
+ fhPtSumIsolated[icone]->Fill(ptC,coneptsum) ;\r
+ if(IsDataMC()){\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt)) fhPtSumIsolatedPrompt[icone]->Fill(ptC,coneptsum) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) fhPtSumIsolatedConversion[icone]->Fill(ptC,coneptsum) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtSumIsolatedFragmentation[icone]->Fill(ptC,coneptsum) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay)) fhPtSumIsolatedPi0Decay[icone]->Fill(ptC,coneptsum) ;\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay)) fhPtSumIsolatedOtherDecay[icone]->Fill(ptC,coneptsum) ;\r
+ else fhPtSumIsolatedUnknown[icone]->Fill(ptC,coneptsum) ;\r
+ }\r
+ \r
+ }//cone size loop\r
+ \r
+ //Reset original parameters for AOD analysis\r
+ GetIsolationCut()->SetPtThreshold(ptthresorg);\r
+ GetIsolationCut()->SetPtFraction(ptfracorg);\r
+ GetIsolationCut()->SetConeSize(rorg);\r
+ \r
+}\r
+\r
+//__________________________________________________________________\r
+void AliAnaParticleIsolation::Print(const Option_t * opt) const\r
+{\r
+ \r
+ //Print some relevant parameters set for the analysis\r
+ if(! opt)\r
+ return;\r
+ \r
+ printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;\r
+ AliAnaPartCorrBaseClass::Print(" ");\r
+ \r
+ printf("ReMake Isolation = %d \n", fReMakeIC) ;\r
+ printf("Make Several Isolation = %d \n", fMakeSeveralIC) ;\r
+ printf("Calorimeter for isolation = %s \n", fCalorimeter.Data()) ;\r
+ \r
+ if(fMakeSeveralIC){\r
+ printf("N Cone Sizes = %d\n", fNCones) ; \r
+ printf("Cone Sizes = \n") ;\r
+ for(Int_t i = 0; i < fNCones; i++)\r
+ printf(" %1.2f;", fConeSizes[i]) ;\r
+ printf(" \n") ;\r
+ \r
+ printf("N pT thresholds/fractions = %d\n", fNPtThresFrac) ;\r
+ printf(" pT thresholds = \n") ;\r
+ for(Int_t i = 0; i < fNPtThresFrac; i++)\r
+ printf(" %2.2f;", fPtThresholds[i]) ;\r
+ \r
+ printf(" \n") ;\r
+ \r
+ printf(" pT fractions = \n") ;\r
+ for(Int_t i = 0; i < fNPtThresFrac; i++)\r
+ printf(" %2.2f;", fPtFractions[i]) ;\r
+ \r
+ } \r
+ \r
+ printf("Histograms: %3.1f < pT sum < %3.1f, Nbin = %d\n", fHistoPtSumMin, fHistoPtSumMax, fHistoNPtSumBins);\r
+ printf("Histograms: %3.1f < pT in cone < %3.1f, Nbin = %d\n", fHistoPtInConeMin, fHistoPtInConeMax, fHistoNPtInConeBins);\r
+ \r
+ printf(" \n") ;\r
+ \r
+} \r
+\r