X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWG3%2FvertexingHF%2FAliAnalysisTaskSECharmFraction.h;h=4f7ade69f455df666149d9786ec885ea5c61210e;hb=40bce8523a7d8eef78bc9186bbbdf209d0fc0907;hp=adca2df0d00f72392cb2e64f8d026ed4c2061545;hpb=624c07abdd4ebdaa022793b3559362c3148087fe;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.h b/PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.h index adca2df0d00..4f7ade69f45 100644 --- a/PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.h +++ b/PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.h @@ -8,6 +8,8 @@ // Class AliAnalysisTaskSECharmFraction // AliAnalysisTask for the extraction of the fraction of prompt charm // using the charm hadron impact parameter to the primary vertex +// +// // Author: Andrea Rossi andrea.rossi@ts.infn.it //************************************************************************* @@ -18,97 +20,120 @@ class AliAODMCHeader; class AliAODRecoDecayHF2Prong; class AliAODRecoDecayHF; class AliAODMCParticle; +class AliAnalysisVertexingHF; +class AliRDHFCutsD0toKpi; #include "AliAnalysisTaskSE.h" class AliAnalysisTaskSECharmFraction : public AliAnalysisTaskSE { public: AliAnalysisTaskSECharmFraction(); AliAnalysisTaskSECharmFraction(const char *name); - AliAnalysisTaskSECharmFraction(const char *name,Int_t nptbins,Double_t *ptbins); - + AliAnalysisTaskSECharmFraction(const char *name,AliRDHFCutsD0toKpi *cutsA,AliRDHFCutsD0toKpi *cutsB); + virtual ~AliAnalysisTaskSECharmFraction(); + // Implementation of interface methods virtual void UserCreateOutputObjects(); virtual void Init(); virtual void LocalInit() {Init();} virtual void UserExec(Option_t *option); virtual void Terminate(Option_t *option); - - void SetNPtBins(Int_t nbins,Double_t *ptbins){if(fptbins!=0x0)delete fptbins;fnbins=nbins;fptbins=ptbins;} - void SetSignalInvMassCut(Double_t signalInvMassCut=0.027){fsignalInvMassCut=signalInvMassCut;} - void SetLargeInvMassCut(Double_t largeInvMassCut=2.){flargeInvMassCut=largeInvMassCut;} - void SetSideBandInvMassCut(Double_t sidebandInvMassCut=0.054){ - // default value ~ 3x2 times inv mass resol. - //a factor 2 is applied w.r.t. 3sigma, - //should be safe enough to exclude most of the reflections + void SetReadMC(Bool_t readMC=kTRUE){fReadMC=readMC;} + void SetUsePID(Bool_t pid){fusePID=pid;} + void SetAnalyzeLikeSign(Bool_t likesign=kFALSE){fLikeSign=likesign;} + void SetNMaxTrForVtx(const Int_t ntrMaxforVtx){fNtrMaxforVtx=ntrMaxforVtx;} + Int_t GetNMaxTrForVtx(){return fNtrMaxforVtx;} + void SetPtBins(Int_t nbins,const Float_t *ptbins); + void SetSignalInvMassCut(const Double_t signalInvMassCut=0.027){fsignalInvMassCut=signalInvMassCut;} + void SetLargeInvMassCut(const Double_t largeInvMassCut=2.){flargeInvMassCut=largeInvMassCut;} + void SetSideBandInvMassCut(const Double_t sidebandInvMassCut=0.054){// default value ~ 2x3 times inv mass resol.: a factor 2 is applied w.r.t. 3sigma, should be safe enough to exclude most of the reflections fsidebandInvMassCut=sidebandInvMassCut; } - void SetSideBandInvMassWindow(Double_t sidebandInvMassWindow=0.066){//~ 6 times inv. mass resol. + void SetSideBandInvMassWindow(const Double_t sidebandInvMassWindow=0.108){//~ 6 times inv. mass resol. fsidebandInvMassWindow=sidebandInvMassWindow; - } - - void SetStandardMassSelection(){ - SetSignalInvMassCut(); - SetLargeInvMassCut(); - SetSideBandInvMassCut(); - SetSideBandInvMassWindow(); - return; - } + } + void SetAcceptanceCut(const Double_t eta=0.8,const Double_t nITSpoints=5.,const Double_t nSPDpoints=2.){fAcceptanceCuts[0]=eta;fAcceptanceCuts[1]=nITSpoints;fAcceptanceCuts[2]=nSPDpoints;} + void SetStandardMassSelection(); Int_t SetStandardCuts(Double_t pt,Double_t invMassCut); + Int_t SetStandardCuts(Float_t *&ptbinlimits); void CheckInvMassD0(AliAODRecoDecayHF2Prong *d,Double_t &invMassD0,Double_t &invMassD0bar,Bool_t &isPeakD0,Bool_t &isPeakD0bar,Bool_t &isSideBandD0,Bool_t &isSideBandD0bar); - AliAODRecoDecayHF *GetD0toKPiSignalType(AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx); - AliAODRecoDecayHF* ConstructFakeTrueSecVtx(AliAODMCParticle *b1, AliAODMCParticle *b2, AliAODMCParticle *mum,Double_t *primaryVtxTrue); - void SetUseMC(Bool_t useMC){ fUseMC=useMC;} - //################# - /* ######### THE FOLLOWING IS FOR FURTHER IMPLEMENATION ############ - Int_t GetPtBin(Double_t pt)const; - void SetD0Cuts(Int_t ptbin,Double_t &*d0cutsLoose,Double_t &*d0cutsTight); - - // void InvMassSelection(); - - void SetCheckMC(Bool_t checkMC){fcheckMC=checkMC;} - void SetCheckMC_D0(Bool_t check_D0){fcheckMCD0=check_D0;} - void SetCheckMC_2prongs(Bool_t check2prongs){fcheckMC2prongs=check2prongs;} - void SetCheckMC_prompt(Bool_t checkprompt){fcheckMCprompt=checkprompt;} - void SetCheckMC_fromB(Bool_t checkfromB){fcheckMCfromB=checkfromB;} - void SetCheckMC_fromDstar(Bool_t skipD0star){fSkipD0star=skipD0star;} - void SetUseCuts(Bool_t usecuts){fD0usecuts=usecuts;} - void SetSideBands(Double_t sideband){fSideBands=sideband;} - void SetStudyPureBackground(Bool_t back){fStudyPureBackground=back;} + AliAODRecoDecayHF *GetD0toKPiSignalType(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx); + AliAODRecoDecayHF* ConstructFakeTrueSecVtx(const AliAODMCParticle *b1,const AliAODMCParticle *b2,const AliAODMCParticle *mum,Double_t *primaryVtxTrue); + void SetUseMC(Bool_t useMC){fUseMC=useMC;} + Bool_t SpecialSelD0(AliAODRecoDecayHF2Prong *d,Int_t &nusedforVtx); + AliAODVertex* GetPrimaryVtxSkipped(AliAODEvent *aodev,AliAODRecoDecayHF2Prong *d); + + /* ######### THE FOLLOWING IS FOR FURTHER IMPLEMENATION ############ + Int_t GetPtBin(Double_t pt)const; + void SetD0Cuts(Int_t ptbin,Double_t &*d0cutsLoose,Double_t &*d0cutsTight); + + // void InvMassSelection(); + + void SetCheckMC(Bool_t checkMC){fcheckMC=checkMC;} + void SetCheckMC_D0(Bool_t check_D0){fcheckMCD0=check_D0;} + void SetCheckMC_2prongs(Bool_t check2prongs){fcheckMC2prongs=check2prongs;} + void SetCheckMC_prompt(Bool_t checkprompt){fcheckMCprompt=checkprompt;} + void SetCheckMC_fromB(Bool_t checkfromB){fcheckMCfromB=checkfromB;} + void SetCheckMC_fromDstar(Bool_t skipD0star){fSkipD0star=skipD0star;} + void SetUseCuts(Bool_t usecuts){fD0usecuts=usecuts;} + void SetSideBands(Double_t sideband){fSideBands=sideband;} + void SetStudyPureBackground(Bool_t back){fStudyPureBackground=back;} */ - + AliRDHFCutsD0toKpi* GetLooseCut(){ + return fCutsLoose; + } + AliRDHFCutsD0toKpi* GetTightCut(){ + return fCutsTight; + } + /* void SetCutFunction(Int_t (*setcuts)(AliAnalysisTaskSECharmFraction*,Double_t,Double_t)){ + fSetCuts=setcuts; + fStandCuts=kFALSE; + } + */ + // Int_t SetCuts(AliAnalysisTaskSECharmFraction *alchfr,Double_t pt,Double_t invMassCut); + private: Bool_t FillHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Int_t okD0,Int_t okD0bar,Double_t invMassD0,Double_t invMassD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBand,Double_t massmumtrue,AliAODRecoDecayHF *aodDMC,Double_t *vtxTrue); - - AliAnalysisVertexingHF *fVHFloose; // Vertexer heavy flavour - AliAnalysisVertexingHF *fVHFtight; // Vertexer heavy flavour + void FillHistoMCproperties(TClonesArray *arrayMC); + + AliRDHFCutsD0toKpi *fCutsLoose; // Loose cuts object + AliRDHFCutsD0toKpi *fCutsTight; // Vertexer heavy flavour + Bool_t fReadMC; // Flag To switch on/off access to MC + Bool_t fLikeSign; // Flag to analyse Like Sign array + Bool_t fusePID; // Flag to use PID Double_t fmD0PDG; // MC D0 mass Int_t fnbins; // Number of pt bins - Double_t *fptbins; //[fnbins] ptbins + Float_t *fptbins; //[fnbins] ptbins + Int_t fNtrMaxforVtx; // N Max acceptable tracks used for vertex (0,1,2) + Double_t fptAll; //!Sum of pt of the reco tracks + Double_t fptAllSq; //!Sum of the square of the pt of the reco tracks + Double_t fptMax[3]; //!Three largest track pt in the event + Double_t fAcceptanceCuts[3]; // array with acceptance cuts Double_t fsignalInvMassCut; // invariant mass cut to define signal region Double_t flargeInvMassCut; // invariant mass cut to accept all inv mass window Double_t fsidebandInvMassCut; // invariant mass cut to define side band region lower limit Double_t fsidebandInvMassWindow; // invariant mass cut to define side band region width Bool_t fUseMC; // flag to use or not MC info - TH1F *fNentries; //! histo for #AOD analysed, container 1 - TH1F *fSignalType; //! histo for the type of MC signal , container 2 - TH1F *fSignalTypeLsCuts; //! histo for the type of MC signal with loose cuts , container 3 - TH1F *fSignalTypeTghCuts; //! histo for the type of MC signal with tight cuts, container 4 - TList *flist_NoCuts_Signal; //! TList for signal (D prompt) with nocuts, container 5 - TList *flist_NoCuts_Back; //! TList for backgrnd with nocuts, container 6 - TList *flist_NoCuts_FromB; //! TList for D from B with nocuts, container 7 - TList *flist_NoCuts_FromDstar; //! TList for Dstar with nocuts, container 8 - TList *flist_NoCuts_Other; //! TList for others with nocuts, container 9 - TList *flist_LsCuts_Signal; //! TList for signal (D prompt) with loose cuts, container 10 - TList *flist_LsCuts_Back; //! TList for backgrnd with loose cuts, container 11 - TList *flist_LsCuts_FromB; //! TList for D from B with loose cuts, container 12 - TList *flist_LsCuts_FromDstar; //! TList for Dstar with loose cuts, container 13 - TList *flist_LsCuts_Other; //! TList for others with loose cuts, container 14 - TList *flist_TghCuts_Signal; //! TList for signal (D prompt) with tight cuts, container 15 - TList *flist_TghCuts_Back; //! TList for backgrnd with tight cuts, container 16 - TList *flist_TghCuts_FromB; //! TList for D from B with tight cuts, container 17 - TList *flist_TghCuts_FromDstar; //! TList for Dstar with tight cuts, container 18 - TList *flist_TghCuts_Other; //! TList for others with tight cuts, container 19 + TH1F *fNentries; //!histo for #AOD analysed, container 1 + TH1F *fSignalType; //!histo for the type of MC signal , container 2 + TH1F *fSignalTypeLsCuts; //!histo for the type of MC signal with loose cuts , container 3 + TH1F *fSignalTypeTghCuts; //!histo for the type of MC signal with tight cuts, container 4 + TList *flistMCproperties; //!TLists for MC properties of D0 w.r.t. B mesons and c quarks cntainer 5 + TList *flistNoCutsSignal; //!TList for signal (D prompt) with nocuts, container 6 + TList *flistNoCutsBack; //!TList for background with nocuts, container 7 + TList *flistNoCutsFromB; //!TList for D from B or D from Dstar from Bwith nocuts, container 8 + TList *flistNoCutsFromDstar; //!TList for D from Dstar with nocuts, container 9 + TList *flistNoCutsOther; //!TList for others with nocuts, container 10 + TList *flistLsCutsSignal; //!TList for signal (D prompt) with loose cuts, container 11 + TList *flistLsCutsBack; //!TList for background with loose cuts, container 12 + TList *flistLsCutsFromB; //!TList for D from B or D from Dstar from B with loose cuts, container 13 + TList *flistLsCutsFromDstar; //!TList for D from Dstar with loose cuts, container 14 + TList *flistLsCutsOther; //!TList for others with loose cuts, container 15 + TList *flistTghCutsSignal; //!TList for signal (D prompt) with tight cuts, container 16 + TList *flistTghCutsBack; //!TList for backgrnd with tight cuts, container 17 + TList *flistTghCutsFromB; //!TList for D from B or D from Dstar from Bwith tight cuts, container 18 + TList *flistTghCutsFromDstar; //!TList for D from Dstar Dstar with tight cuts, container 19 + TList *flistTghCutsOther; //!TList for others with tight cuts, container 20 /* Bool_t fD0usecuts; // Switch on the use of the cuts TO BE IMPLEMENTED Bool_t fcheckMC; // Switch on MC check: minimum check is same mother TO BE IMPLEMENTED Bool_t fcheckMCD0; // check the mother is a D0 TO BE IMPLEMENTED