* about the suitability of this software for any purpose. It is *\r
* provided "as is" without express or implied warranty. *\r
**************************************************************************/\r
+ // last change: 2011-04-04 by M.Knichel\r
\r
#include "AliESDtrackCuts.h" \r
#include "AlidNdPtEventCuts.h"\r
AlidNdPt::AlidNdPt(): TNamed()\r
, fdNdPtEventCuts(0)\r
, fdNdPtAcceptanceCuts(0)\r
+, fdNdPtRecAcceptanceCuts(0)\r
, fEsdTrackCuts(0)\r
, fUseMCInfo(kFALSE)\r
, fAnalysisMode(AlidNdPtHelper::kTPC) \r
AlidNdPt::AlidNdPt(Char_t* name, Char_t* title): TNamed(name,title)\r
, fdNdPtEventCuts(0)\r
, fdNdPtAcceptanceCuts(0)\r
+, fdNdPtRecAcceptanceCuts(0)\r
, fEsdTrackCuts(0)\r
, fUseMCInfo(kFALSE)\r
, fAnalysisMode(AlidNdPtHelper::kTPC) \r
AlidNdPt::AlidNdPt(const AlidNdPt&): TNamed()\r
, fdNdPtEventCuts(0)\r
, fdNdPtAcceptanceCuts(0)\r
+, fdNdPtRecAcceptanceCuts(0)\r
, fEsdTrackCuts(0)\r
, fUseMCInfo(kFALSE)\r
, fAnalysisMode(AlidNdPtHelper::kTPC) \r
// destructor\r
if(fdNdPtEventCuts) delete fdNdPtEventCuts; fdNdPtEventCuts=NULL; \r
if(fdNdPtAcceptanceCuts) delete fdNdPtAcceptanceCuts; fdNdPtAcceptanceCuts=NULL;\r
+ if(fdNdPtRecAcceptanceCuts) delete fdNdPtRecAcceptanceCuts; fdNdPtRecAcceptanceCuts=NULL; \r
if(fEsdTrackCuts) delete fEsdTrackCuts; fEsdTrackCuts=NULL;\r
if(fPhysicsSelection) delete fPhysicsSelection; fPhysicsSelection=NULL;\r
if(fdNdPtBackgroundCuts) delete fdNdPtBackgroundCuts; fdNdPtBackgroundCuts=NULL;\r
// Abstract class for dNdPt analysis. All dNdPt components should derive from it.
//
// Author: J.Otwinowski 03/11/2008
+// last change: 2011-04-04 by M.Knichel
//------------------------------------------------------------------------------
class AliESDEvent;
//
void SetEventCuts(AlidNdPtEventCuts* const cuts) { fdNdPtEventCuts = cuts; }
void SetAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts) { fdNdPtAcceptanceCuts = cuts; }
+ void SetRecAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts) { fdNdPtRecAcceptanceCuts = cuts; }
void SetTrackCuts(AliESDtrackCuts* const cuts) { fEsdTrackCuts = cuts; }
void SetUseMCInfo(const Bool_t info) { fUseMCInfo = info; }
void SetAnalysisMode(const AlidNdPtHelper::AnalysisMode mode) { fAnalysisMode = mode; }
AlidNdPtEventCuts* GetEventCuts() const { return fdNdPtEventCuts; }
AlidNdPtAcceptanceCuts* GetAcceptanceCuts() const { return fdNdPtAcceptanceCuts; }
+ AlidNdPtAcceptanceCuts* GetRecAcceptanceCuts() const { return fdNdPtRecAcceptanceCuts; }
AliESDtrackCuts* GetTrackCuts() const { return fEsdTrackCuts; }
Bool_t IsUseMCInfo() const { return fUseMCInfo; }
AlidNdPtHelper::AnalysisMode GetAnalysisMode() const { return fAnalysisMode; }
AlidNdPt& operator=(const AlidNdPt&); // not implemented
AlidNdPtEventCuts *fdNdPtEventCuts; // event cuts
- AlidNdPtAcceptanceCuts *fdNdPtAcceptanceCuts; // acceptance cuts
+ AlidNdPtAcceptanceCuts *fdNdPtAcceptanceCuts; // acceptance cuts
+ AlidNdPtAcceptanceCuts *fdNdPtRecAcceptanceCuts; // additional recontruction acceptance cuts (not used for MC truth)
AliESDtrackCuts *fEsdTrackCuts; // esd track cuts
Bool_t fUseMCInfo; // use MC information
AliPhysicsSelection* fPhysicsSelection; // physics trigger selection class
AlidNdPtBackgroundCuts *fdNdPtBackgroundCuts; // background cuts (cosmics and splitted tracks)
- ClassDef(AlidNdPt,1);
+ ClassDef(AlidNdPt,2);
};
#endif
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+// last change: 2011-04-04 by M.Knichel
#include <iostream>
#include <TList.h>
, fMaxPhi(0)
, fMinPt(0)
, fMaxPt(0)
+, fExcludeMinEta(0)
+, fExcludeMaxEta(0)
+, fExcludeMinPhi(0)
+, fExcludeMaxPhi(0)
+, fCheckRange(kFALSE)
, fMaxDCAr(0)
, fMaxDCAz(0)
{
if(phi > fMaxPhi) return kFALSE;
if(pt < fMinPt) return kFALSE;
if(pt > fMaxPt) return kFALSE;
+
+ if (fCheckRange) {
+ if ((eta > fExcludeMinEta) && (eta < fExcludeMaxEta) && (phi > fExcludeMinPhi) && (phi < fExcludeMaxPhi)) { return kFALSE; }
+ }
return kTRUE;
}
// Class to keep selection cuts for MC tracks. \r
// \r
// Author: J.Otwinowski 03/11/2008 \r
+// last change: 2011-04-04 by M.Knichel\r
//------------------------------------------------------------------------------\r
\r
class TParticle;\r
virtual ~AlidNdPtAcceptanceCuts(); \r
\r
// setters \r
- void SetEtaRange(const Float_t min=0., const Float_t max=1e99) { fMinEta=min; fMaxEta=max; }\r
- void SetPhiRange(const Float_t min=0., const Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;}\r
- void SetPtRange(const Float_t min=0., const Float_t max=1e99) { fMinPt=min; fMaxPt=max;}\r
+ void SetEtaRange(const Float_t min=-1e99, const Float_t max=1e99) { fMinEta=min; fMaxEta=max; }\r
+ void SetPhiRange(const Float_t min=-1e99, const Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;}\r
+ void SetPtRange(const Float_t min=-1e99, const Float_t max=1e99) { fMinPt=min; fMaxPt=max;}\r
+ void SetExcludeEtaPhiRange(const Float_t etaMin, const Float_t etaMax, const Float_t phiMin, const Float_t phiMax)\r
+ { fExcludeMinEta = etaMin; fExcludeMaxEta = etaMax; fExcludeMinPhi = phiMin; fExcludeMaxPhi = phiMax; fCheckRange=kTRUE; }\r
\r
void SetMaxDCAr(const Float_t max=1e99) { fMaxDCAr=max;}\r
void SetMaxDCAz(const Float_t max=1e99) { fMaxDCAz=max;}\r
Float_t GetMaxPhi() const {return fMaxPhi;}\r
Float_t GetMinPt() const {return fMinPt;}\r
Float_t GetMaxPt() const {return fMaxPt;}\r
+ \r
+ Bool_t GetCheckRange() const { return fCheckRange; }\r
+ Float_t GetExcludeMinEta() const { return fExcludeMinEta; }\r
+ Float_t GetExcludeMaxEta() const { return fExcludeMaxEta; }\r
+ Float_t GetExcludeMinPhi() const { return fExcludeMinPhi; }\r
+ Float_t GetExcludeMaxPhi() const { return fExcludeMaxPhi; } \r
\r
Float_t GetMaxDCAr() const {return fMaxDCAr;}\r
Float_t GetMaxDCAz() const {return fMaxDCAz;}\r
Float_t fMaxPhi; // max azimuthal angle (rad)\r
Float_t fMinPt; // min pt\r
Float_t fMaxPt; // max pt\r
+ \r
+ Float_t fExcludeMinEta;\r
+ Float_t fExcludeMaxEta;\r
+ Float_t fExcludeMinPhi;\r
+ Float_t fExcludeMaxPhi;\r
+ Bool_t fCheckRange;\r
\r
// max DCAr and DCAz with respect\r
// to nominal vertex position\r
AlidNdPtAcceptanceCuts(const AlidNdPtAcceptanceCuts&); // not implemented\r
AlidNdPtAcceptanceCuts& operator=(const AlidNdPtAcceptanceCuts&); // not implemented\r
\r
- ClassDef(AlidNdPtAcceptanceCuts, 1)\r
+ ClassDef(AlidNdPtAcceptanceCuts, 2)\r
};\r
\r
#endif // \r
// - control histograms\r
//\r
// Author: J.Otwinowski 04/11/2008 \r
+// last change: 2011-04-04 by M.Knichel\r
//------------------------------------------------------------------------------\r
\r
#include "TH1.h"\r
fRecTrackHist(0),\r
\r
// Candle event histogram\r
- fRecCandleEventMatrix(0)\r
+ fRecCandleEventMatrix(0),\r
+ \r
+ fMultNbins(0),\r
+ fPtNbins(0),\r
+ fPtCorrNbins(0),\r
+ fEtaNbins(0),\r
+ fZvNbins(0),\r
+ fBinsMult(0),\r
+ fBinsPt(0),\r
+ fBinsPtCorr(0),\r
+ fBinsEta(0),\r
+ fBinsZv(0),\r
+\r
+ fIsInit(kFALSE) \r
+ \r
{\r
// default constructor\r
for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
fRecTrackHist1[i]=0; \r
fRecTrackMultHist1[i]=0; \r
}\r
- Init();\r
+ //Init();\r
}\r
\r
//_____________________________________________________________________________\r
fRecTrackHist(0),\r
\r
// Candle event histogram\r
- fRecCandleEventMatrix(0)\r
+ fRecCandleEventMatrix(0),\r
+ \r
+ fMultNbins(0),\r
+ fPtNbins(0),\r
+ fPtCorrNbins(0),\r
+ fEtaNbins(0),\r
+ fZvNbins(0),\r
+ fBinsMult(0),\r
+ fBinsPt(0),\r
+ fBinsPtCorr(0),\r
+ fBinsEta(0),\r
+ fBinsZv(0),\r
+\r
+ fIsInit(kFALSE) \r
+ \r
{\r
//\r
// constructor\r
fRecTrackMultHist1[i]=0; \r
}\r
\r
- Init();\r
+ //Init();\r
}\r
\r
//_____________________________________________________________________________\r
\r
//_____________________________________________________________________________\r
void AlidNdPtAnalysis::Init(){\r
- //\r
- // Init histograms\r
- //\r
-\r
- const Int_t multNbins = 27;\r
- const Int_t ptNbinsTrackEventCorr = 36;\r
- const Int_t ptNbins = 68;\r
- const Int_t etaNbins = 30;\r
- const Int_t zvNbins = 12;\r
+ \r
+ Int_t multNbins = 27;\r
+ Int_t ptNbinsTrackEventCorr = 36;\r
+ Int_t ptNbins = 68;\r
+ Int_t etaNbins = 30;\r
+ Int_t zvNbins = 12;\r
\r
- Double_t binsMult[multNbins+1] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,\r
+ Double_t binsMultDefault[28] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,\r
9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,\r
19.5,20.5, 21.5, 22.5, 23.5, 24.5, 29.5, 149.5};\r
\r
- Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0};\r
+ Double_t binsPtTrackEventCorrDefault[37] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0};\r
\r
- Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};\r
+ Double_t binsPtDefault[69] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};\r
\r
- Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
+ Double_t binsEtaDefault[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
\r
- Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
- //Double_t binsMult[multNbins+1] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,12.,14.,16.,18.,20.,30.,40.,50.,70.,90.,110.,150.};\r
+ Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
+ \r
+ Double_t* binsMult = binsMultDefault;\r
+ Double_t* binsPtTrackEventCorr = binsPtTrackEventCorrDefault;\r
+ Double_t* binsPt = binsPtDefault;\r
+ Double_t* binsEta = binsEtaDefault;\r
+ Double_t* binsZv = binsZvDefault; \r
+\r
+ if (fMultNbins > 0) { multNbins = fMultNbins; binsMult = fBinsMult; }\r
+ if (fPtNbins > 0) { ptNbins = fPtNbins; binsPt = fBinsPt; }\r
+ if (fPtCorrNbins > 0) { ptNbinsTrackEventCorr = fPtCorrNbins; binsPtTrackEventCorr = fBinsPtCorr; }\r
+ if (fEtaNbins > 0) { etaNbins = fEtaNbins; binsEta = fBinsEta; }\r
+ if (fZvNbins > 0) { zvNbins = fZvNbins; binsZv = fBinsZv; } \r
\r
//Int_t binsTrackMatrix[3]={zvNbins,ptNbins,etaNbins};\r
Int_t binsTrackEventCorrMatrix[3]={zvNbins,ptNbinsTrackEventCorr,etaNbins};\r
\r
// init folder\r
fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");\r
+ \r
+ // set init flag\r
+ fIsInit = kTRUE;\r
}\r
\r
//_____________________________________________________________________________\r
void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)\r
{\r
+ // init if not done already\r
+ if (!fIsInit) { Init(); }\r
+ \r
//\r
// Process real and/or simulated events\r
//\r
//_____________________________________________________________________________\r
Long64_t AlidNdPtAnalysis::Merge(TCollection* const list) \r
{\r
+ // init if not done already\r
+ if (!fIsInit) { Init(); }\r
+ \r
// Merge list of objects (needed by PROOF)\r
\r
if (!list)\r
//_____________________________________________________________________________\r
void AlidNdPtAnalysis::Analyse() \r
{\r
+ // init if not done already\r
+ if (!fIsInit) { Init(); }\r
+ \r
// Analyse histograms\r
//\r
TH1::AddDirectory(kFALSE);\r
// AlidNdPtAnalysis class used for dNdPt analysis.
//
// Author: J.Otwinowski 04/11/2008
+// last change: 2011-04-04 by M.Knichel
//------------------------------------------------------------------------------
class iostream;
// Create folder for analysed histograms
TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
+ // Set binning for Histograms (if not set default binning is used)
+ void SetBinsMult(Int_t nbins, Double_t* edges) { fMultNbins = nbins; fBinsMult = edges; }
+ void SetBinsPt(Int_t nbins, Double_t* edges) { fPtNbins = nbins; fBinsPt = edges; }
+ void SetBinsPtCorr(Int_t nbins, Double_t* edges) { fPtCorrNbins = nbins; fBinsPtCorr = edges; }
+ void SetBinsEta(Int_t nbins, Double_t* edges) { fEtaNbins = nbins; fBinsEta = edges; }
+ void SetBinsZv(Int_t nbins, Double_t* edges) { fZvNbins = nbins; fBinsZv = edges; }
+
+
// Fill histograms
void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj);
void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj);
//
THnSparseF *fRecCandleEventMatrix; //-> Zv:multMB
+ //binning for THNsparse
+ Int_t fMultNbins;
+ Int_t fPtNbins;
+ Int_t fPtCorrNbins;
+ Int_t fEtaNbins;
+ Int_t fZvNbins;
+ Double_t* fBinsMult;
+ Double_t* fBinsPt;
+ Double_t* fBinsPtCorr;
+ Double_t* fBinsEta;
+ Double_t* fBinsZv;
+
+ Bool_t fIsInit;
+
AlidNdPtAnalysis(const AlidNdPtAnalysis&); // not implemented
AlidNdPtAnalysis& operator=(const AlidNdPtAnalysis&); // not implemented
- ClassDef(AlidNdPtAnalysis,4);
+ ClassDef(AlidNdPtAnalysis,5);
};
#endif
// - control histograms
//
// Author: J.Otwinowski 04/11/2008
-// changed by M.L.Knichel 2011-03-08
+// last change: 2011-04-04 by M.Knichel
//------------------------------------------------------------------------------
#include "TH1.h"
fTriggerAnalysis(0),
- fCentralityEstimator(0)
+ fCentralityEstimator(0),
+
+ fMultNbins(0),
+ fPtNbins(0),
+ fPtCorrNbins(0),
+ fEtaNbins(0),
+ fZvNbins(0),
+ fCentralityNbins(0),
+ fBinsMult(0),
+ fBinsPt(0),
+ fBinsPtCorr(0),
+ fBinsEta(0),
+ fBinsZv(0),
+ fBinsCentrality(0),
+
+ fIsInit(kFALSE)
{
// default constructor
for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
fRecTrackHist2[i]=0;
fRecTrackMultHist1[i]=0;
}
- Init();
+ //Init();
+ SetCentralityEstimator();
}
//_____________________________________________________________________________
fTriggerAnalysis(0),
- fCentralityEstimator(0)
+ fCentralityEstimator(0),
+
+ fMultNbins(0),
+ fPtNbins(0),
+ fPtCorrNbins(0),
+ fEtaNbins(0),
+ fZvNbins(0),
+ fCentralityNbins(0),
+ fBinsMult(0),
+ fBinsPt(0),
+ fBinsPtCorr(0),
+ fBinsEta(0),
+ fBinsZv(0),
+ fBinsCentrality(0),
+
+ fIsInit(kFALSE)
+
{
//
// constructor
fRecTrackMultHist1[i]=0;
}
- Init();
+ // Init();
+ SetCentralityEstimator();
}
//_____________________________________________________________________________
}
//_____________________________________________________________________________
-void AlidNdPtAnalysisPbPb::Init(){
-
- // init centraliy (default: VZERO mult)
- fCentralityEstimator = "V0M";
-
- //
- // Init histograms
- //
-
- //const Int_t multNbins = 47;
- const Int_t multNbins = 1;
- //const Int_t ptNbinsTrackEventCorr = 37;
- const Int_t ptNbinsTrackEventCorr = 68;
- const Int_t ptNbins = 68;
- const Int_t etaNbins = 30;
- const Int_t zvNbins = 12;
- const Int_t centralityBins = 3;
-/*
- Double_t binsMult[multNbins+1] = {
+void AlidNdPtAnalysisPbPb::Init() {
+
+ Int_t multNbins = 47;
+ Int_t ptNbinsTrackEventCorr = 37;
+ Int_t ptNbins = 68;
+ Int_t etaNbins = 30;
+ Int_t zvNbins = 12;
+ Int_t centralityBins = 11;
+
+ Double_t binsMultDefault[48] = {
-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5,
200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5,
3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 }; // forPbPb
-*/
- Double_t binsMult[multNbins+1] = {-0.5, 10000.5 }; // forPbPb
-
-
-
- // Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,20.0,50.0};
-
- Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {
+ Double_t binsPtTrackEventCorrDefault[38] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,20.0,50.0};
+ Double_t binsPtDefault[69] = {
0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
- Double_t binsPt[ptNbins+1] = {
- 0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
- 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
- 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9,
- 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8,
- 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0,
- 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
- 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
-
- Double_t binsEta[etaNbins+1] = {
+ Double_t binsEtaDefault[31] = {
-1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6,
-0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4,
0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4,
1.5};
- Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
+ Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
+
+ Double_t binsCentralityDefault[12] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.};
- //Double_t binsCentrality[centralityBins+1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.};
- Double_t binsCentrality[centralityBins+1] = {0., 5., 70., 80.};
+ Double_t* binsMult = binsMultDefault;
+ Double_t* binsPtTrackEventCorr = binsPtTrackEventCorrDefault;
+ Double_t* binsPt = binsPtDefault;
+ Double_t* binsEta = binsEtaDefault;
+ Double_t* binsZv = binsZvDefault;
+ Double_t* binsCentrality = binsCentralityDefault;
+
+ if (fMultNbins > 0) { multNbins = fMultNbins; binsMult = fBinsMult; }
+ if (fPtNbins > 0) { ptNbins = fPtNbins; binsPt = fBinsPt; }
+ if (fPtCorrNbins > 0) { ptNbinsTrackEventCorr = fPtCorrNbins; binsPtTrackEventCorr = fBinsPtCorr; }
+ if (fEtaNbins > 0) { etaNbins = fEtaNbins; binsEta = fBinsEta; }
+ if (fZvNbins > 0) { zvNbins = fZvNbins; binsZv = fBinsZv; }
+ if (fCentralityNbins > 0) { centralityBins = fCentralityNbins; binsCentrality = fBinsCentrality; }
Int_t binsTrackEventCorrMatrix[4]={zvNbins,ptNbinsTrackEventCorr,etaNbins,centralityBins};
Int_t binsTrackEvent[4]={zvNbins,ptNbins,etaNbins,centralityBins};
// init trigger analysis (for zdc cut)
fTriggerAnalysis = new AliTriggerAnalysis;
+
+ // set init flag
+ fIsInit = kTRUE;
}
//_____________________________________________________________________________
void AlidNdPtAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
{
+ // init if not done already
+ if (!fIsInit) { Init(); }
//
// Process real and/or simulated events
//
// get selection cuts
AlidNdPtEventCuts *evtCuts = GetEventCuts();
AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
+ AlidNdPtAcceptanceCuts *recCuts = GetRecAcceptanceCuts();
AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
if(!evtCuts || !accCuts || !esdTrackCuts) {
AliDebug(AliLog::kError, "cuts not available");
return;
}
+ if (0 == recCuts) { recCuts = accCuts;}
// trigger selection
Bool_t isEventTriggered = kTRUE;
FillHistograms(track,stack,AlidNdPtHelper::kAllTracks,centralityF);
labelsAll[multAll] = TMath::Abs(track->GetLabel());
- multAll++;
-
- if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) {
+ multAll++;
+ if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && recCuts->AcceptTrack(track)) {
fRecTrackHist2[AlidNdPtHelper::kRecTracks]->Fill(values);
FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,centralityF);
{
// Merge list of objects (needed by PROOF)
+ // init if not done already
+ if (!fIsInit) { Init(); }
+
if (!list)
return 0;
//_____________________________________________________________________________
void AlidNdPtAnalysisPbPb::Analyse()
{
+
+ // init if not done already
+ if (!fIsInit) { Init(); }
+
// Analyse histograms
//
TH1::AddDirectory(kFALSE);
// AlidNdPtAnalysisPbPb class used for dNdPt analysis.in PbPb collision
//
// Author: J.Otwinowski 04/11/2008
-// changed by M.L.Knichel 2011-03-08
+// last change: 2011-04-04 by M.Knichel
//------------------------------------------------------------------------------
class iostream;
// Create folder for analysed histograms
TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
+
+ // Set binning for Histograms (if not set default binning is used)
+ void SetBinsMult(Int_t nbins, Double_t* edges) { fMultNbins = nbins; fBinsMult = edges; }
+ void SetBinsPt(Int_t nbins, Double_t* edges) { fPtNbins = nbins; fBinsPt = edges; }
+ void SetBinsPtCorr(Int_t nbins, Double_t* edges) { fPtCorrNbins = nbins; fBinsPtCorr = edges; }
+ void SetBinsEta(Int_t nbins, Double_t* edges) { fEtaNbins = nbins; fBinsEta = edges; }
+ void SetBinsZv(Int_t nbins, Double_t* edges) { fZvNbins = nbins; fBinsZv = edges; }
+ void SetBinsCentrality(Int_t nbins, Double_t* edges) { fCentralityNbins = nbins; fBinsCentrality = edges; }
// Fill histograms
void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF);
THnSparseF *fRecTrackHist3; //-> nclust:chi2:Pt:Eta:Phi:centrality
AliTriggerAnalysis *fTriggerAnalysis; //! trigger analysis object;
+ TString fCentralityEstimator; // use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"
+
+ //binning for THNsparse
+ Int_t fMultNbins;
+ Int_t fPtNbins;
+ Int_t fPtCorrNbins;
+ Int_t fEtaNbins;
+ Int_t fZvNbins;
+ Int_t fCentralityNbins;
+ Double_t* fBinsMult;
+ Double_t* fBinsPt;
+ Double_t* fBinsPtCorr;
+ Double_t* fBinsEta;
+ Double_t* fBinsZv;
+ Double_t* fBinsCentrality;
+
+ Bool_t fIsInit;
+
AlidNdPtAnalysisPbPb(const AlidNdPtAnalysisPbPb&); // not implemented
- AlidNdPtAnalysisPbPb& operator=(const AlidNdPtAnalysisPbPb&); // not implemented
-
- TString fCentralityEstimator; // use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"
+ AlidNdPtAnalysisPbPb& operator=(const AlidNdPtAnalysisPbPb&); // not implemented
- ClassDef(AlidNdPtAnalysisPbPb,5);
+ ClassDef(AlidNdPtAnalysisPbPb,6);
};
#endif
{
track = AlidNdPtHelper::GetTrackSPDvtx(esdEvent,iTrack,kFALSE);
}
- else if(analysisMode == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || analysisMode == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || kITSStandAloneTrackSPDvtx || kITSStandAloneTPCTrackSPDvtx)
+ else if(analysisMode == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || analysisMode == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || analysisMode == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || analysisMode ==AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx)
{
track = AlidNdPtHelper::GetTrackTrackSPDvtx(esdEvent,iTrack,kFALSE);
}
// this macro creates the track and event cuts used in this analysis
+// last modified: 2011-03-28
+// m.l.knichel@gsi.de
+// added cut modes 200,201: replacing TPCNcluster cut
+
+
AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, Bool_t hists = kTRUE)
{
AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
TString tag = "TPC-only tracking";
}
+
+
// TPC-only (no pt cut, no eta cut)
if (cutMode == 24)
TString tag = "TPC-only tracking";
}
+
+ // TPC-only (no pt cut, no eta cut) updated 2011
+ if (cutMode == 201)
+ {
+ // beta cuts (still under investigation)
+ //minNClustersTPC = 50;
+ Float_t minNCrossedRowsTPC = 120;
+ Float_t minRatioCrossedRowsOverFindableClustersTPC = 0.8;
+ Float_t maxFractionSharedTPCCluster = 0.4;
+ maxChi2PerClusterTPC = 4.0;
+ maxDCAtoVertexXY = 2.4; // cm
+ maxDCAtoVertexZ = 3.2; // cm
+ minPt=0.0;
+ maxPt=1.e10;
+
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ esdTrackCuts->SetRequireTPCRefit(kFALSE);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+ //esdTrackCuts->SetMinNClustersTPC(minNClustersTPC);
+
+ esdTrackCuts->SetMinNCrossedRowsTPC(minNCrossedRowsTPC);
+ esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(minRatioCrossedRowsOverFindableClustersTPC);
+ esdTrackCuts->SetMaxChi2PerClusterTPC(maxChi2PerClusterTPC);
+ esdTrackCuts->SetMaxFractionSharedTPCClusters(maxFractionSharedTPCCluster);
+
+ esdTrackCuts->SetMaxDCAToVertexXY(maxDCAtoVertexXY);
+ esdTrackCuts->SetMaxDCAToVertexZ(maxDCAtoVertexZ);
+ esdTrackCuts->SetDCAToVertex2D(kTRUE);
+ esdTrackCuts->SetPtRange(minPt,maxPt);
+
+ TString tag = "TPC-only tracking (2011)";
+ }
+
//
// systematic errors DCA cut studies
{
Int_t minclsTPC=70;
Double_t maxchi2perTPCcl=4.;
+ Double_t maxdcazITSTPC=1.e9;
//
// TPC
//
esdTrackCuts->SetDCAToVertex2D(kFALSE);
esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ esdTrackCuts->SetMaxDCAToVertexZ(maxdcazITSTPC);
// DCArphi parametrization (LHC10c pass2)
// 7*(0.0026+0.0050/pt^1.01)
TString tag = "TPC+ITS combine tracking + DCAr(pt) (2010)";
}
+ // TPC+ITS combine tracking + DCAr(pt) (2011)
+ if (cutMode == 200)
+ {
+ //Int_t minclsTPC=70;
+ Float_t minNCrossedRowsTPC = 120;
+ Float_t minRatioCrossedRowsOverFindableClustersTPC = 0.8;
+ Float_t maxFractionSharedTPCCluster = 0.4;
+ Double_t maxchi2perTPCcl=4.;
+ Double_t maxdcazITSTPC=2.0;
+
+ //
+ // TPC
+ //
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+
+ //esdTrackCuts->SetMinNClustersTPC(minclsTPC);
+ esdTrackCuts->SetMinNCrossedRowsTPC(minNCrossedRowsTPC);
+ esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(minRatioCrossedRowsOverFindableClustersTPC);
+ esdTrackCuts->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
+ esdTrackCuts->SetMaxFractionSharedTPCClusters(maxFractionSharedTPCCluster);
+ //
+ // ITS
+ //
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+ //
+ // primary selection
+ //
+ esdTrackCuts->SetDCAToVertex2D(kFALSE);
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ esdTrackCuts->SetMaxDCAToVertexZ(maxdcazITSTPC);
+
+ // DCArphi parametrization (LHC10c pass2)
+ // 7*(0.0026+0.0050/pt^1.01)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+
+ TString tag = "TPC+ITS combine tracking + DCAr(pt) (2011)";
+ }
+
// TPC-tracks + SPD point + ITS refit + DCAr(pt) 4-sigma
if (cutMode == 75)
{