X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGHF%2FvertexingHF%2FAliAnalysisTaskCombinHF.h;h=86ce37c8c1aef1e9ea44cfd533687369318992b6;hb=f78c506b5a881040c01a0e6b568553abf59e5df5;hp=f1150e73e2b5c25f24689da3412076aaf836b43e;hpb=388ea1bdbc4f534d14bcc0f9bc708243dbf2cbf1;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGHF/vertexingHF/AliAnalysisTaskCombinHF.h b/PWGHF/vertexingHF/AliAnalysisTaskCombinHF.h index f1150e73e2b..86ce37c8c1a 100644 --- a/PWGHF/vertexingHF/AliAnalysisTaskCombinHF.h +++ b/PWGHF/vertexingHF/AliAnalysisTaskCombinHF.h @@ -4,7 +4,7 @@ /* Copyright(c) 1998-2018, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ -/* $Id: $ */ +/* $Id: $ */ //************************************************************************* // Class AliAnalysisTaskCombinHF @@ -23,19 +23,32 @@ class AliAnalysisTaskCombinHF : public AliAnalysisTaskSE { - public: - +public: + AliAnalysisTaskCombinHF(); AliAnalysisTaskCombinHF(Int_t meson, AliRDHFCuts* analysiscuts); virtual ~AliAnalysisTaskCombinHF(); - + virtual void UserCreateOutputObjects(); virtual void Init(){}; virtual void LocalInit() {Init();} virtual void UserExec(Option_t *option); virtual void Terminate(Option_t *option); - + virtual void FinishTaskOutput(); + void SetReadMC(Bool_t read){fReadMC=read;} + + void SetEventMixingOn(){fDoEventMixing=kTRUE;} + void SetEventMixingOff(){fDoEventMixing=kFALSE;} + void SetMinNumberOfEventsForMixing(Int_t minn){fMinNumberOfEventsForMixing=minn;} + + void ConfigureZVertPools(Int_t nPools, Double_t* zVertLimits); + void ConfigureMultiplicityPools(Int_t nPools, Double_t* multLimits); + void SelectPromptD(){fPromptFeeddown=kPrompt;} + void SelectFeeddownD(){fPromptFeeddown=kFeeddown;} + void SelectPromptAndFeeddownD(){fPromptFeeddown=kBoth;} + void SetGoUpToQuark(Bool_t opt){fGoUpToQuark=opt;} + void SetKeepNegIDtracks(Bool_t nid){fKeepNegID=nid;}//set it to kTRUE only if you know what you are doing void SetTrackCuts(AliESDtrackCuts* cuts){ if(fTrackCutsAll) delete fTrackCutsAll; fTrackCutsAll=new AliESDtrackCuts(*cuts); @@ -55,32 +68,64 @@ class AliAnalysisTaskCombinHF : public AliAnalysisTaskSE void SetRDHFCuts(AliRDHFCuts* cuts){ fAnalysisCuts=cuts; } - void SetFilterMask(UInt_t mask=16){fFilterMask=mask;} + void SetFilterMask(UInt_t mask=16){fFilterMask=mask;} void SetAnalysisLevel(Int_t level){fFullAnalysis=level;} void ConfigureRotation(Int_t n, Double_t phimin, Double_t phimax){ fNRotations=n; fMinAngleForRot=phimin; fMaxAngleForRot=phimax; } + void SetMassWindow(Double_t minMass, Double_t maxMass){fMinMass=minMass; fMaxMass=maxMass;} + void SetMaxPt(Double_t maxPt){fMaxPt=maxPt;} + void SetPtBinWidth(Double_t binw){fPtBinWidth=binw;} + void SetEtaAccCut(Double_t etacut){fEtaAccCut=etacut;} + void SetPtAccCut(Double_t ptcut){fPtAccCut=ptcut;} + + void SetPIDstrategy(Int_t strat){fPIDstrategy=strat;} + void SetMaxPforIDPion(Double_t maxpIdPion){fmaxPforIDPion=maxpIdPion;} + void SetMaxPforIDKaon(Double_t maxpIdKaon){fmaxPforIDKaon=maxpIdKaon;} + void SetPIDselCaseZero(Int_t strat){fPIDselCaseZero=strat;} + void SetBayesThres(Double_t thresKaon, Double_t thresPion){ + fBayesThresKaon=thresKaon; + fBayesThresPion=thresPion; + } + Bool_t IsTrackSelected(AliAODTrack* track); Bool_t IsKaon(AliAODTrack* track); Bool_t IsPion(AliAODTrack* track); Bool_t SelectAODTrack(AliAODTrack *track, AliESDtrackCuts *cuts); + Bool_t FillHistos(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau, TClonesArray *arrayMC, Int_t* dgLabels); void FillLSHistos(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau, Int_t charge); + void FillMEHistos(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau); + void FillGenHistos(TClonesArray* arrayMC); + Bool_t CheckAcceptance(TClonesArray* arrayMC, Int_t nProng, Int_t *labDau); + Int_t GetPoolIndex(Double_t zvert, Double_t mult); + void ResetPool(Int_t poolIndex); + void DoMixing(Int_t poolIndex); enum EMesonSpecies {kDzero, kDplus, kDstar, kDs}; - - private: - + enum EPrompFd {kNone,kPrompt,kFeeddown,kBoth}; + enum EPIDstrategy {knSigma, kBayesianMaxProb, kBayesianThres}; + +private: + AliAnalysisTaskCombinHF(const AliAnalysisTaskCombinHF &source); - AliAnalysisTaskCombinHF& operator=(const AliAnalysisTaskCombinHF& source); - + AliAnalysisTaskCombinHF& operator=(const AliAnalysisTaskCombinHF& source); + TList *fOutput; //! list send on output slot 0 - TH1F *fHistNEvents; //!hist. for No. of events - - TH1F *fHistTrackStatus; //!hist. of status of tracks - TH3F *fMassVsPtVsY; //! hist. of Y vs. Pt vs. Mass (all cand) + TH1F *fHistNEvents; //!hist. for No. of events + TH1F *fHistTrackStatus; //!hist. of status of tracks + TH1F *fHistCheckOrigin; //!hist. of origin (c/b) of D meson + TH1F *fHistCheckOriginSel; //!hist. of origin (c/b) of D meson + TH1F *fHistCheckDecChan; //!hist. of decay channel of D meson + TH1F *fHistCheckDecChanAcc; //!hist. of decay channel of D meson in acc. + TH2F *fPtVsYGen; //! hist. of Y vs. Pt generated (all D) + TH2F *fPtVsYGenLargeAcc; //! hist. of Y vs. Pt generated (|y|<0.9) + TH2F *fPtVsYGenLimAcc; //! hist. of Y vs. Pt generated (|y|<0.5) + TH2F *fPtVsYGenAcc; //! hist. of Y vs. Pt generated (D in acc) + TH2F *fPtVsYReco; //! hist. of Y vs. Pt generated (Reco D) + TH3F *fMassVsPtVsY; //! hist. of Y vs. Pt vs. Mass (all cand) TH3F *fMassVsPtVsYRot; //! hist. of Y vs. Pt vs. Mass (rotations) TH3F *fMassVsPtVsYLSpp; //! hist. of Y vs. Pt vs. Mass (like sign ++) TH3F *fMassVsPtVsYLSmm; //! hist. of Y vs. Pt vs. Mass (like sign --) @@ -91,28 +136,59 @@ class AliAnalysisTaskCombinHF : public AliAnalysisTaskSE TH1F *fNormRotated; //! hist. rotated/selected D+ TH1F *fDeltaMass; //! hist. mass difference after rotations THnSparse *fDeltaMassFullAnalysis; //! hist. mass difference after rotations with more details - + TH3F *fMassVsPtVsYME; //! hist. of Y vs. Pt vs. Mass (mixedevents) + TH2F* fEventsPerPool; //! hist with number of events per pool UInt_t fFilterMask; // FilterMask AliESDtrackCuts* fTrackCutsAll; // track selection AliESDtrackCuts* fTrackCutsPion; // pion track selection AliESDtrackCuts* fTrackCutsKaon; // kaon track selection AliAODPidHF* fPidHF; // PID configuration AliRDHFCuts *fAnalysisCuts; // Cuts for candidates + Double_t fMinMass; // minimum value of invariant mass Double_t fMaxMass; // maximum value of invariant mass - + Double_t fMaxPt; // maximum pT value for inv. mass histograms + Double_t fPtBinWidth; // width of pt bin (GeV/c) + Double_t fEtaAccCut; // eta limits for acceptance step + Double_t fPtAccCut; // pt limits for acceptance step + Int_t fNRotations; // number of rotations Double_t fMinAngleForRot; // minimum angle for track rotation Double_t fMaxAngleForRot; // maximum angle for track rotation Double_t fMinAngleForRot3; // minimum angle for track rotation (3rd prong) Double_t fMaxAngleForRot3; // maximum angle for track rotation (3rd prong) - + AliNormalizationCounter *fCounter;//!Counter for normalization + Int_t fMeson; // mesonSpecies (see enum) - Bool_t fReadMC; // flag for access to MC - Int_t fFullAnalysis; // flag to set analysis level (0 is the fastest) - - ClassDef(AliAnalysisTaskCombinHF,1); // D+ task from AOD tracks + Bool_t fReadMC; // flag for access to MC + Int_t fPromptFeeddown; // flag to select prompt (1), feeddown (2) or all (3) + Bool_t fGoUpToQuark; // flag for definition of c,b origin + Int_t fFullAnalysis; // flag to set analysis level (0 is the fastest) + + Int_t fPIDstrategy; // knSigma, kBayesianMaxProb, kBayesianThres + Double_t fmaxPforIDPion; // flag for upper p limit for id band for pion + Double_t fmaxPforIDKaon; // flag for upper p limit for id band for kaon + Bool_t fKeepNegID; // flag to keep also track with negative ID (default kFALSE, change it only if you know what you are doing) + Int_t fPIDselCaseZero; // flag to change PID strategy + Double_t fBayesThresKaon; // threshold for kaon identification via Bayesian PID + Double_t fBayesThresPion; // threshold for pion identification via Bayesian PID + + Bool_t fDoEventMixing; // flag for event mixing + Int_t fMinNumberOfEventsForMixing; // maximum number of events to be used in event mixing + Int_t fNzVertPools; // number of pools in z vertex for event mixing + Int_t fNzVertPoolsLimSize; // number of pools in z vertex for event mixing +1 + Double_t* fzVertPoolLims; //[fNzVertPoolsLimSize] limits of the pools in zVertex + Int_t fNMultPools; // number of pools in multiplicity for event mixing + Int_t fNMultPoolsLimSize; // number of pools in multiplicity for event mixing +1 + Double_t* fMultPoolLims; //[fNMultPoolsLimSize] limits of the pools in multiplicity + + TTree** fEventBuffer; //! structure for event mixing + Double_t fVtxZ; // zVertex + Double_t fMultiplicity; // multiplicity + TObjArray* fKaonTracks; // array of kaon-compatible tracks (TLorentzVectors) + TObjArray* fPionTracks; // array of pion-compatible tracks (TLorentzVectors) + ClassDef(AliAnalysisTaskCombinHF,8); // D0D+ task from AOD tracks }; #endif