]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/hfe/AliHFEsecVtx.h
Package update (Markus)
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEsecVtx.h
index 50a26e960bf288058dc6ec9a4f8d585ea050c1c2..0772917ba30c83f8b64af0ed555d7b65a6ac57e4 100644 (file)
 //#include <TObject.h>
 #endif
 
+#ifndef ROOT_THnSparse
+#include <THnSparse.h>
+#endif
+
 class TH1F;
 class TH2F;
 class TString;
 class AliESDEvent;
+class AliAODEvent;
+class AliVTrack;
 class AliESDtrack;
+class AliAODTrack;
 class AliStack;
+class AliHFEpairs;
+class AliHFEsecVtxs;
 
 //________________________________________________________________
 class AliHFEsecVtx : public TObject {
@@ -41,197 +50,96 @@ class AliHFEsecVtx : public TObject {
                 AliHFEsecVtx &operator=(const AliHFEsecVtx &); // assignment operator
                 virtual ~AliHFEsecVtx();
 
-                void CreateHistograms(TString hnopt="");
+                void CreateHistograms(TList *qaList);
+
+                Bool_t HasMCData() const { return TestBit(kHasMCData); };
+                Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
+                Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
+
+                           void SetHasMCData(Bool_t hasMCdata = kTRUE) { SetBit(kHasMCData,hasMCdata); };
+                void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
+                void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
+                void SetEvent(AliESDEvent* const ESD){fESD1=ESD;};    // set ESD pointer
+                void SetEventAOD(AliAODEvent* const AOD){fAOD1=AOD;}; // set ESD pointer
+                void SetStack(AliStack* const stack){fStack=stack;};  // set stack pointer
+                void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;} // set mcarray pointer
+                void SetUseMCPID(Bool_t usemcpid){fUseMCPID=usemcpid;};
 
-                void SetEvent(AliESDEvent* const ESD){fESD1=ESD;}; // set ESD pointer
-                void SetStack(AliStack* const stack){fStack=stack;} // set stack pointer
-                void InitAnaPair(); // initialize default parameters 
-                void AnaPair(AliESDtrack* ESDtrack1, AliESDtrack* ESDtrack2, Int_t index2); // do e-h analysis
-                void RunSECVTX(AliESDtrack *track); // run secondary vertexing algorithm
 
                 Int_t GetMCPID(AliESDtrack *track); // return MC pid
-                Int_t PairOrigin(AliESDtrack* track1, AliESDtrack* track2); // return pair origin as a pdg code
-                Int_t PairCode(AliESDtrack* track1,AliESDtrack* track2); // return corresponding pair code to pdg code
+                           Int_t GetMCPDG(AliVTrack *track);   // return MC pid
+                Int_t GetPairOriginESD(AliESDtrack* track1, AliESDtrack* track2); // return pair origin as a pdg code
+                Int_t GetPairOriginAOD(AliAODTrack* track1, AliAODTrack* track2); // return pair origin as a pdg code
+                Int_t GetPairCode(const AliVTrack* const track1, const AliVTrack* const track2); // return corresponding pair code to pdg code
                 Int_t GetElectronSource(Int_t mclabel); // return origin of the electron
+                Int_t GetPDG(AliVTrack *track);     // return pdg 
+                           void GetESDPID(AliESDtrack *track, Int_t &recpid, Double_t &recprob); //return esd pid likelihood
+                void GetPrimaryCondition();
 
-                Bool_t SingleTrackCut(AliESDtrack* track1) const; // single track cut
+                TClonesArray *HFEpairs();
+                TClonesArray *HFEsecvtxs();
 
-        protected:
+                void AddHFEpairToArray(const AliHFEpairs* const pair);
+                void AddHFEsecvtxToArray(const AliHFEsecVtxs* const secvtx);
 
-                void Init();
-                void FindSECVTXCandid4Tracks(AliESDtrack* track1); // find secondary vertex for 4 tracks
-                void FindSECVTXCandid3Tracks(AliESDtrack* track1); // find secondary vertex for 3 tracks        
-                void FindSECVTXCandid2Tracks(AliESDtrack* track1); // find secondary vertex for 2 tracks
-                void CalcSECVTXProperty(AliESDtrack* track1, AliESDtrack* track2, AliESDtrack* track3); // calculated distinctive variables
-                void ApplyPairTagCut(); // apply strict tagging condition for 1 pair secondary vertex
-                void ApplyVtxTagCut(Double_t chi2, Int_t id1, Int_t id2); // apply tagging condition for 3 track secondary vertex
-                void ResetTagVar(); // reset tagging variables
+                void InitHFEpairs();
+                void InitHFEsecvtxs();
 
-                Bool_t ApplyPairTagCut(Int_t id); // apply strict tagging condition for 1 pair secondary vertex
-                Bool_t ApplyTagCut(Double_t chi2); // apply tagging condition
+                void DeleteHFEpairs();
+                void DeleteHFEsecvtxs();
+
+                Bool_t SingleTrackCut(AliESDtrack* track1) const; // single track cut
+                void PairAnalysis(AliVTrack* ESDtrack1, AliVTrack* ESDtrack2, Int_t index2); // do e-h analysis
+                void RunSECVTX(AliVTrack *track); // run secondary vertexing algorithm
 
+                void MakeContainer(); // make containers
 
-                Double_t GetSecVtxChi2(AliESDtrack* track1, AliESDtrack* track2, AliESDtrack* track3, AliESDtrack* track4); // get secondary vertex chi2 for 4 tracks
-                Double_t GetSecVtxChi2(AliESDtrack* track1, AliESDtrack* track2, AliESDtrack* track3); // get secondary vertex chi2 for 3 tracks
-                Double_t GetSecVtxChi2(AliESDtrack* track1, AliESDtrack* track2); // get secondary vertex chi2 for 2 tracks
+        protected:
+                void Init();
+                void FindSECVTXCandid(AliVTrack *track);
+                void CalcSECVTXProperty(AliVTrack* track1, AliVTrack* track2, AliVTrack* track3); // calculated distinctive variables
 
 
         private:
+                enum{
+                  kHasMCData = BIT(15),     // bitset for mc data usage
+                  kAODanalysis = BIT(16)    // bitset for aod analysis
+                };
+                enum {kAll, kDirectCharm, kDirectBeauty, kBeautyCharm, kGamma, kPi0, kElse, kBeautyGamma, kBeautyPi0, kBeautyElse}; // electron origin 
+                enum {kCharm=4, kBeauty=5}; // quark flavor
 
                 AliESDEvent* fESD1; // ESD pointer             
-                AliStack* fStack; // stack pointer              
+                AliAODEvent* fAOD1; // AOD pointer             
+                AliStack* fStack;   // stack pointer              
 
-                Int_t fParentSelect[2][7]; // heavy hadron species
-                Int_t fNparents; // number of heavy hadrons to be considered
+                Bool_t fUseMCPID;   // if use MC pid 
 
                 TString fkSourceLabel[10]; // electron source label
 
-                enum {kAll, kDirectCharm, kDirectBeauty, kBeautyCharm, kGamma, kPi0, kElse, kBeautyGamma, kBeautyPi0, kBeautyElse};
-                enum {kCharm=4, kBeauty=5};
-
-                struct AliHistspair{
-                        TH2F *fInvMass; // histogram to store pair invariant mass
-                        TH2F *fInvMassCut1; // histogram to store pair invariant mass after cut1
-                        TH2F *fInvMassCut2; // histogram to store pair invariant mass after cut2
-                        TH1F *fKFChi2; // histogram to store pair vertex chi2
-                       TH1F *fOpenAngle; // histogram to store pair opening angle
-                        TH1F *fCosOpenAngle; // histogram to store cosine of the pair opening angle
-                        TH2F *fSignedLxy; // histogram to store signed Lxy
-                        TH1F *fKFIP; // histogram to store pair impact parameter
-                        TH1F *fIPMax; // histogram to store larger impact parameter among pair tracks
-
-                       AliHistspair()
-                       : fInvMass()
-                       , fInvMassCut1()
-                       , fInvMassCut2()
-                       , fKFChi2()
-                       , fOpenAngle()
-                       , fCosOpenAngle()
-                       , fSignedLxy()
-                       , fKFIP()
-                       , fIPMax()
-                       {
-                         // define constructor
-                       }
-                       AliHistspair(const AliHistspair & p)
-                       : fInvMass(p.fInvMass)
-                       , fInvMassCut1(p.fInvMassCut1)
-                       , fInvMassCut2(p.fInvMassCut2)
-                       , fKFChi2(p.fKFChi2)
-                       , fOpenAngle(p.fOpenAngle)
-                       , fCosOpenAngle(p.fCosOpenAngle)
-                       , fSignedLxy(p.fSignedLxy)
-                       , fKFIP(p.fKFIP)
-                       , fIPMax(p.fIPMax)
-                       {
-                         // copy constructor
-                       }
-                       AliHistspair &operator=(const AliHistspair &)
-                       {
-                         // assignment operator, not yet implemented
-                         return *this;
-                       }
-                };
-
-                struct AliHiststag{
-                        TH1F *fPtBeautyElec; // histogram for electrons of single track cut passed 
-                        TH1F *fPtTaggedElec; // histogram for total b tagged electrons
-                        TH1F *fPtRightTaggedElec; // histogram for right b tagged electrons
-                        TH1F *fPtWrongTaggedElec; // histogram for wrong b tagged electrons
-                        TH1F *fInvmassBeautyElecSecVtx;  // histogram for right-tagged b invariant mass
-                        TH1F *fInvmassNotBeautyElecSecVtx; // histogram for mis-tagged b invariant mass
-                        TH1F *fSignedLxyBeautyElecSecVtx; // histogram for right-tagged b signed Lxy
-                        TH1F *fSignedLxyNotBeautyElecSecVtx; // histogram for mis-tagged b signed Lxy
-                        TH1F *fDistTwoVtxBeautyElecSecVtx; // histogram for right-tagged b two vertex distance
-                        TH1F *fDistTwoVtxNotBeautyElecSecVtx; // histogram for mis-tagged b two vertex distance
-                        TH1F *fCosPhiBeautyElecSecVtx; // histogram for right-tagged b cos of opening angle
-                        TH1F *fCosPhiNotBeautyElecSecVtx; // histogram for mis-tagged b cos of opening angle
-                        TH1F *fChi2BeautyElecSecVtx; // histogram for right-tagged b chi2 of secondary vertex 
-                        TH1F *fChi2NotBeautyElecSecVtx; // histogram for mis-tagged b chi2 of secondary vertex
-                        TH1F *fInvmassBeautyElec2trkVtx; // histogram for right-tagged b invariant mass of two track vertex
-                        TH1F *fInvmassNotBeautyElec2trkVtx; // histogram for mis-tagged b invariant mass of two track vertex
-                        TH1F *fSignedLxyBeautyElec2trkVtx; // histogram for right-tagged b signed Lxy of two track vertex
-                        TH1F *fSignedLxyNotBeautyElec2trkVtx; // histogram for mis-tagged b signed Lxy of two track vertex
-                        TH1F *fChi2BeautyElec2trkVtx; // histogram for right-tagged b chi2 of two track vertex
-                        TH1F *fChi2NotBeautyElec2trkVtx; // histogram for mis-tagged b chi2 of two track vertex
-
-                       AliHiststag()
-                       : fPtBeautyElec()
-                       , fPtTaggedElec()
-                       , fPtRightTaggedElec()
-                       , fPtWrongTaggedElec()
-                       , fInvmassBeautyElecSecVtx()
-                       , fInvmassNotBeautyElecSecVtx()
-                       , fSignedLxyBeautyElecSecVtx()
-                       , fSignedLxyNotBeautyElecSecVtx()
-                       , fDistTwoVtxBeautyElecSecVtx()
-                       , fDistTwoVtxNotBeautyElecSecVtx()
-                       , fCosPhiBeautyElecSecVtx()
-                       , fCosPhiNotBeautyElecSecVtx()
-                       , fChi2BeautyElecSecVtx()
-                       , fChi2NotBeautyElecSecVtx()
-                       , fInvmassBeautyElec2trkVtx()
-                       , fInvmassNotBeautyElec2trkVtx()
-                       , fSignedLxyBeautyElec2trkVtx()
-                       , fSignedLxyNotBeautyElec2trkVtx()
-                       , fChi2BeautyElec2trkVtx()
-                       , fChi2NotBeautyElec2trkVtx()
-                       {
-                         // define constructor
-                       }
-                       AliHiststag(const AliHiststag & p)
-                       : fPtBeautyElec(p.fPtBeautyElec)
-                       , fPtTaggedElec(p.fPtTaggedElec)
-                       , fPtRightTaggedElec(p.fPtRightTaggedElec)
-                       , fPtWrongTaggedElec(p.fPtWrongTaggedElec)
-                       , fInvmassBeautyElecSecVtx(p.fInvmassBeautyElecSecVtx)
-                       , fInvmassNotBeautyElecSecVtx(p.fInvmassNotBeautyElecSecVtx)
-                       , fSignedLxyBeautyElecSecVtx(p.fSignedLxyBeautyElecSecVtx)
-                       , fSignedLxyNotBeautyElecSecVtx(p.fSignedLxyNotBeautyElecSecVtx)
-                       , fDistTwoVtxBeautyElecSecVtx(p.fDistTwoVtxBeautyElecSecVtx)
-                       , fDistTwoVtxNotBeautyElecSecVtx(p.fDistTwoVtxNotBeautyElecSecVtx)
-                       , fCosPhiBeautyElecSecVtx(p.fCosPhiBeautyElecSecVtx)
-                       , fCosPhiNotBeautyElecSecVtx(p.fCosPhiNotBeautyElecSecVtx)
-                       , fChi2BeautyElecSecVtx(p.fChi2BeautyElecSecVtx)
-                       , fChi2NotBeautyElecSecVtx(p.fChi2NotBeautyElecSecVtx)
-                       , fInvmassBeautyElec2trkVtx(p.fInvmassBeautyElec2trkVtx)
-                       , fInvmassNotBeautyElec2trkVtx(p.fInvmassNotBeautyElec2trkVtx)
-                       , fSignedLxyBeautyElec2trkVtx(p.fSignedLxyBeautyElec2trkVtx)
-                       , fSignedLxyNotBeautyElec2trkVtx(p.fSignedLxyNotBeautyElec2trkVtx)
-                       , fChi2BeautyElec2trkVtx(p.fChi2BeautyElec2trkVtx)
-                       , fChi2NotBeautyElec2trkVtx(p.fChi2NotBeautyElec2trkVtx)
-                       {
-                         // copy constructor
-                       }
-                       AliHiststag &operator=(const AliHiststag &)
-                       {
-                         // assignment operator, not yet implemented
-                         return *this;
-                       }
-                };
-
-                AliHistspair fHistPair[10]; // struct of above given histogram for different electron sources
-                AliHiststag fHistTagged; // struct of above given histogram
+                Int_t fNparents;           // number of heavy hadrons to be considered
+                Int_t fParentSelect[2][7]; // heavy hadron species
 
-                Int_t fPairTagged; // number of tagged e-h pairs
-                Int_t fpairedTrackID[20]; // paird hadron track track 
-                Double_t fpairedChi2[20]; // pair chi2
-                Double_t fpairedInvMass[20]; // pair invariant mass
-                Double_t fpairedSignedLxy[20]; // pair signed Lxy
+                Int_t fNoOfHFEpairs;       // number of e-h pairs  
+                Int_t fNoOfHFEsecvtxs;     // number of secondary vertexes
 
-                Int_t fid[4][3]; // index to store sorting result
-                Int_t fia[4][3][2]; // index to store sorting result
+                TClonesArray *fHFEpairs;   //! Array of pair 
+                TClonesArray *fHFEsecvtxs; //! Array of secondary vertexes 
+                TClonesArray *fMCArray;    //! mc array pointer
 
-                Double_t fdistTwoSecVtx; // distance between two pair vertex
-                Double_t fcosPhi; // cos of opening angle of two pair vertex
-                Double_t fsignedLxy; // signed Lxy of secondary vertex
-                Double_t finvmass; // invariant mass of secondary vertex
-                Double_t finvmassSigma; // invariant mass sigma of secondary vertex
+                           Double_t fPVx;          // primary vertex copy x 
+                           Double_t fPVy;          // primary vertex copy y
+                Double_t fCosPhi;       // cos of opening angle of two pair vertex
+                Double_t fSignedLxy;    // signed Lxy of secondary vertex
+                Double_t fKFchi2;       // chi2 of secondary vertex
+                Double_t fInvmass;      // invariant mass of secondary vertex
+                Double_t fInvmassSigma; // invariant mass sigma of secondary vertex
+                Double_t fKFip;         // impact parameter of secondary vertex track
 
-                Bool_t fBTagged; // if b tagged, set true
-                Bool_t fBElec; // if set true for b electron, set true
+                THnSparseF *fPairQA;    // qa histos for pair analysis 
+                THnSparseF *fSecvtxQA;  // qa histos for secvtx
+                TList *fSecVtxList;     // list for secondary vertexing outputs
 
-        ClassDef(AliHFEsecVtx,0);
+      ClassDef(AliHFEsecVtx,0);
 };
 
 #endif