// AliRoot includes
#include <AliAnalysisTaskSE.h>
#include <AliAODEvent.h>
-#include <AliCFContainer.h>
#include "AliFlowBayesianPID.h"
#include "AliFlowVZEROResults.h"
+#include "AliFlowVZEROQA.h"
class TH2F;
+class AliESDtrackCuts;
+class TProfile2D;
class AliAnalysisTaskVnV0 : public AliAnalysisTaskSE {
public:
virtual void SetVtxCut(Double_t vtxCut){fVtxCut = vtxCut;}
virtual void SetEtaCut(Double_t etaCut){fEtaCut = etaCut;}
virtual void SetMinPt(Double_t value) {fMinPt = value;}
+ virtual void SetMinDistV0(Double_t value){fMinDistV0=value;}
+ virtual void SetMaxDistV0(Double_t value){fMaxDistV0=value;}
virtual void SetV2(Bool_t val){fV2 = val;};
virtual void SetV3(Bool_t val){fV3 = val;};
void OpenInfoCalbration(Int_t run);
+ void SetFillDCAinfo(Bool_t flag=kTRUE){fFillDCA = flag;};
+
+ void SetModulationDEDx(Bool_t flag=kTRUE){fModulationDEDx=flag;};
+
+ void SetAfter2011(Bool_t stat=kTRUE){fIsAfter2011=stat;};
+ Bool_t GetAfter2011() const {return fIsAfter2011;};
+
+ void SetTPCclusterN(Int_t ncl){fNcluster=ncl;};
+ static Bool_t IsPsiComputed(){return fgIsPsiComputed;};
+ static Float_t GetPsi2V0A(){return fgPsi2v0a;};
+ static Float_t GetPsi2V0C(){return fgPsi2v0c;};
+ static Float_t GetPsi2TPC(){return fgPsi2tpc;};
+ static Float_t GetPsi3V0A(){return fgPsi3v0a;};
+ static Float_t GetPsi3V0C(){return fgPsi3v0c;};
+ static Float_t GetPsi3TPC(){return fgPsi3tpc;};
+ static Float_t GetPsi2V0AMC(){return fgPsi2v0aMC;};
+ static Float_t GetPsi2V0CMC(){return fgPsi2v0cMC;};
+ static Float_t GetPsi2TPCMC(){return fgPsi2tpcMC;};
+ static Float_t GetPsi3V0AMC(){return fgPsi3v0aMC;};
+ static Float_t GetPsi3V0CMC(){return fgPsi3v0cMC;};
+ static Float_t GetPsi3TPCMC(){return fgPsi3tpcMC;};
+
private:
- AliAnalysisTaskVnV0(const AliAnalysisTaskVnV0 &old);
- AliAnalysisTaskVnV0& operator=(const AliAnalysisTaskVnV0 &source);
+ AliAnalysisTaskVnV0(const AliAnalysisTaskVnV0 &old);
+ AliAnalysisTaskVnV0& operator=(const AliAnalysisTaskVnV0 &source);
+
+ Int_t PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAOD,Int_t specie);
+
+ static Bool_t fgIsPsiComputed; // flag which return if event was processed
+ static Float_t fgPsi2v0a,fgPsi2v0c,fgPsi2tpc; // current Psi2
+ static Float_t fgPsi3v0a,fgPsi3v0c,fgPsi3tpc; // current Psi3
+ static Float_t fgPsi2v0aMC,fgPsi2v0cMC,fgPsi2tpcMC; // current Psi2
+ static Float_t fgPsi3v0aMC,fgPsi3v0cMC,fgPsi3tpcMC; // current Psi3
virtual Float_t GetVertex(AliAODEvent* aod) const;
virtual void Analyze(AliAODEvent* aodEvent, Float_t v0Centr);
+ virtual void SelectK0s();
+
+ Double_t fVtxCut; // Vtx cut on z position in cm
+ Double_t fEtaCut; // Eta cut used to select particles
+ Double_t fMinPt; // Min pt - for histogram limits
+ Double_t fMinDistV0; // Minimal distance for V0s
+ Double_t fMaxDistV0; // Maximal distance for V0s
- AliAODEvent* fAOD; //! AOD object
+ Bool_t fV2; // switch to set the armonics
+ Bool_t fV3; // switch to set the armonics
+ Bool_t fIsMC; // if MC
+ Bool_t fQAsw; // if QA
+ Bool_t fIsAfter2011; // switch for 2011 and later runs
- static const Int_t nCentrBin = 9; // # cenrality bins
+ static const Int_t nCentrBin = 9; //! # cenrality bins
//
// Cuts and options
//
- Double_t fVtxCut; // Vtx cut on z position in cm
- Double_t fEtaCut; // Eta cut used to select particles
- Double_t fMinPt; // Min pt - for histogram limits
- Int_t fRun; // current run checked to load VZERO calibrations
+ Int_t fRun; //! current run checked to load VZERO calibrations
- TList *fList,*fList2,*fList3,*fList4; // List for output objects
+ Int_t fNcluster; // Numer of TPC cluster required
+ TList *fList; //! List for output objects
+ TList *fList2; //! List for output objects
+ TList *fList3; //! List for output objects
+ TList *fList4; //! List for output objects
//
// Output objects
- TProfile *fMultV0; // object containing VZERO calibration information
- Float_t fV0Cpol,fV0Apol; // loaded by OADB
- Float_t fMeanQ[nCentrBin][2][2]; // and recentering
- Float_t fWidthQ[nCentrBin][2][2]; // ...
- Float_t fMeanQv3[nCentrBin][2][2]; // also for v3
- Float_t fWidthQv3[nCentrBin][2][2]; // ...
-
- TProfile *fHResTPCv0A2,*fHResTPCv0C2,*fHResv0Cv0A2; // TProfile for subevent resolution (output)
- TProfile *fHResTPCv0A3,*fHResTPCv0C3,*fHResv0Cv0A3; // also for v3
-
- TH2F *fPhiRPv0A,*fPhiRPv0C; // EP distribution vs. centrality (v2)
- TH2F *fPhiRPv0Av3,*fPhiRPv0Cv3; // EP distribution vs. centrality (v3)
-
- AliCFContainer *fPhiTracks; // phi distribution of particles (if needed)
-
-
- AliCFContainer *fQA,*fQA2; // QA container (v2)
- AliCFContainer *fQAv3,*fQA2v3; // QA container (v3)
-
- AliFlowBayesianPID *fPID; // PID class for the Bayesian probabilities
+ TProfile *fMultV0; //! object containing VZERO calibration information
+ Float_t fV0Cpol; //! loaded by OADB
+ Float_t fV0Apol; //! loaded by OADB
+ Float_t fMeanQ[nCentrBin][2][2]; //! and recentering
+ Float_t fWidthQ[nCentrBin][2][2]; //! ...
+ Float_t fMeanQv3[nCentrBin][2][2]; //! also for v3
+ Float_t fWidthQv3[nCentrBin][2][2]; //! ...
+
+ TProfile *fHResTPCv0A2; //! TProfile for subevent resolution (output)
+ TProfile *fHResTPCv0C2; //! TProfile for subevent resolution (output)
+ TProfile *fHResv0Cv0A2; //! TProfile for subevent resolution (output)
+ TProfile *fHResTPCv0A3; //! also for v3
+ TProfile *fHResTPCv0C3; //! also for v3
+ TProfile *fHResv0Cv0A3; //! also for v3
+
+ TH2F *fPhiRPv0A; //! EP distribution vs. centrality (v2)
+ TH2F *fPhiRPv0C; //! EP distribution vs. centrality (v2)
+ TH2F *fPhiRPv0Av3; //! EP distribution vs. centrality (v3)
+ TH2F *fPhiRPv0Cv3; //! EP distribution vs. centrality (v3)
+
+ AliFlowVZEROQA *fQA; //! QA histos (v2)
+ AliFlowVZEROQA *fQA2; //! QA histos (v2)
+ AliFlowVZEROQA *fQAv3; //! QA histos (v3)
+ AliFlowVZEROQA *fQA2v3; //! QA histos (v3)
+
+ AliFlowBayesianPID *fPID; //! PID class for the Bayesian probabilities
- TTree *fTree; // tree to debug EP (if needed)
-
- Float_t fCentrality; // current centrality for the tree
- Float_t evPlAngV0ACor2,evPlAngV0CCor2,evPlAng2; // subevent EPs (v2)
- Float_t evPlAngV0ACor3,evPlAngV0CCor3,evPlAng3; // subevent EPs (v3)
-
- Bool_t fV2,fV3; // swith to set the armonics
-
- AliFlowVZEROResults *fContAllChargesV0A,*fContAllChargesV0C,*fContAllChargesV0Av3,*fContAllChargesV0Cv3,*fContAllChargesMC,*fContAllChargesMCv3;
-
- Bool_t fIsMC; // if MC
- Bool_t fQAsw; // if QA
-
- ClassDef(AliAnalysisTaskVnV0, 2); //Analysis task v2 and v3 analysis on AOD
+ TTree *fTree; //! tree to debug EP (if needed)
+
+ Float_t fCentrality; //! current centrality for the tree
+ Float_t evPlAngV0ACor2; //! subevent EPs (v2)
+ Float_t evPlAngV0CCor2; //! subevent EPs (v2)
+ Float_t evPlAng2; //! subevent EPs (v2)
+ Float_t evPlAngV0ACor3; //! subevent EPs (v3)
+ Float_t evPlAngV0CCor3; //! subevent EPs (v3)
+ Float_t evPlAng3; //! subevent EPs (v3)
+
+ AliFlowVZEROResults *fContAllChargesV0A; //! results
+ AliFlowVZEROResults *fContAllChargesV0C; //! results
+ AliFlowVZEROResults *fContAllChargesV0Av3; //! results
+ AliFlowVZEROResults *fContAllChargesV0Cv3; //! results
+ AliFlowVZEROResults *fContAllChargesMC; //! results
+
+ // MC
+ TProfile *fHResMA2; //! TProfile for subevent resolution (output)
+ TProfile *fHResMC2; //! TProfile for subevent resolution (output)
+ TProfile *fHResAC2; //! TProfile for subevent resolution (output)
+ TProfile *fHResMA3; //! also for v3
+ TProfile *fHResMC3; //! also for v3
+ TProfile *fHResAC3; //! also for v3
+
+ AliFlowVZEROResults *fContAllChargesMCA; //! results
+ AliFlowVZEROResults *fContAllChargesMCC; //! results
+ AliFlowVZEROResults *fContAllChargesMCAv3; //! results
+ AliFlowVZEROResults *fContAllChargesMCCv3; //! results
+
+ Bool_t fFillDCA; // require to fill also DCA info
+ TH2D *fHdcaPt[nCentrBin][7]; //! DCA distribution (for MC primary)
+ TH2D *fHdcaPtSec[nCentrBin][7]; //! DCA distribution (for MC secondary, not used for data)
+ AliFlowVZEROResults *fContQApid; //! QA pid object
+
+ Bool_t fModulationDEDx; //add a modulation on the dE/dx response w.r.t. EP (kFALSE default)
+
+ Float_t fZvtx; //! primary vertex z coordinate
+ Int_t fNK0s; //! number of K0s in my private selection
+ Float_t fPhiK0s[1000]; //! phi of K0s in my private selection
+ Float_t fPtK0s[1000];//! pt of K0s in my private selection
+ Int_t fNpiPos; //! number of positive pions for K0s selection
+ Int_t fNpiNeg; //! number of negative pions for K0s selection
+ Int_t fIPiPos[1000]; //! position in the AOD stack of positive pions for K0s
+ Int_t fIPiNeg[1000]; //! position in the AOD stack of negative pions for K0s
+
+ TH2D *fHKsPhi; //! Ks phi distribution
+ TH2D *fHKsPhiEP; //! EP distribution
+ TH2D *fHK0sMass; //! K0s mass vs. pt (private selection)
+ TH2D *fHK0sMass2; //! K0s mass vs. pt (standard selection)
+ TH2D *fHK0vsLambda; //! K0s vs lambda mass (in private K0s selection)
+ TProfile2D *fHctauPtEP; //! ctau vs DeltaPhi,pt
+ TH2F *fHctauAt1EP; //! ctau vs. DeltaPhi at 1 GeV/c
+
+ AliESDtrackCuts *fCutsDaughter; // daughter cut for K0s standard selection
+ ClassDef(AliAnalysisTaskVnV0, 8); //Analysis task v2 and v3 analysis on AOD
};
#endif