PWGJE
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskIDFragmentationFunction.h
index d2c56e7..1a656c1 100644 (file)
@@ -22,8 +22,10 @@ class TProfile;
 class THnSparse; 
 class TRandom3;
 class TArrayS;
+class AliAnalysisUtils;
 class AliAODTrack;
 class AliAODMCParticle;
+class AliAnalysisTaskPID;
 
 #include "AliAnalysisTaskSE.h"
 #include "AliPID.h"
@@ -223,10 +225,11 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   virtual void   SetIDFFMode(Int_t idff = 0)      {fIDFFMode = idff;}
   virtual void   SetEffMode(Int_t eff = 1)    {fEffMode = eff;}
   virtual void   SetJSMode(Int_t js = 1)      {fJSMode = js;}
+  virtual void   SetMCPtHardCut(Float_t ptHardCut)      { fMCPtHardCut = ptHardCut; }
 
   static  void   SetProperties(TH1* h,const char* x, const char* y);
   static  void   SetProperties(TH1* h,const char* x, const char* y,const char* z);
-  static  void   SetProperties(THnSparse* h,const Int_t dim, const char** labels);
+  static  void   SetProperties(THnSparse* h,Int_t dim, const char** labels);
 
   void   SetHighPtThreshold(Float_t pt = 5.) { fQATrackHighPtThreshold = pt; }
 
@@ -254,14 +257,15 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
     fQATrackNBinsPhi = nPhi; fQATrackPhiMin = phiMin; fQATrackPhiMax = phiMax; }
   
 
-
   Float_t  GetFFRadius() const { return fFFRadius; }
   Float_t  GetFFMinLTrackPt() const { return fFFMinLTrackPt; }
   Float_t  GetFFMaxTrackPt() const { return fFFMaxTrackPt; }
   Float_t  GetFFMinNTracks() const { return fFFMinnTracks; }
   Float_t  GetFFBckgRadius() const { return fFFBckgRadius; }
-  void    GetJetTracksTrackrefs(TList* l, const AliAODJet* j, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt);
-  void    GetJetTracksPointing(TList* in, TList* out, const AliAODJet* j, const Double_t r, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt);  
+  Float_t  GetMCPtHardCut() const  { return fMCPtHardCut; }
+  void    GetJetTracksTrackrefs(TList* l, const AliAODJet* j, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt);
+  void    GetJetTracksPointing(TList* in, TList* out, const AliAODJet* j, Double_t r, Double_t& sumPt, Double_t minPtL, Double_t maxPt,
+                                Bool_t& isBadPt);  
   void     GetTracksOutOfNJets(Int_t nCases, TList* in, TList* out, const TList* jets, Double_t& pt);
   void     GetTracksOutOfNJetsStat(Int_t nCases, TList* in, TList* out, const TList* jets, Double_t& pt, Double_t &normFactor);
   void     GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius, Double_t& sumPt);
@@ -270,23 +274,23 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   void     AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isRefGen,TH2F* fh2PtRecVsGen);
 
   void     FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, 
-                                      const TArrayI& indexAODTr, const TArrayS& isRefGen, const Bool_t scaleStrangeness = kFALSE);
+                                      const TArrayI& indexAODTr, const TArrayS& isRefGen, Bool_t scaleStrangeness = kFALSE);
 
 
   void     FillJetTrackHistosRec(AliFragFuncHistos* histRec,  AliAODJet* jet, 
                                 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
-                                const TArrayS& isRefGen, TList* jetTrackListTR = 0, const Bool_t scaleStrangeness = kFALSE,
+                                const TArrayS& isRefGen, TList* jetTrackListTR = 0, Bool_t scaleStrangeness = kFALSE,
                                 Bool_t fillJS = kFALSE, TProfile* hProNtracksLeadingJet = 0, TProfile** hProDelRPtSum = 0, TProfile* hProDelR80pcPt = 0);
 
 
-  Float_t  CalcJetArea(const Float_t etaJet, const Float_t rc) const;
+  Float_t  CalcJetArea(Float_t etaJet, Float_t rc) const;
   void     GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor);
   void     GetClusterTracksMedian(TList* outputlist, Double_t &normFactor);
 
   void     FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, 
                          AliFragFuncHistos* ffbckghistocuts,AliFragFuncQATrackHistos* qabckghistos,TH1F* fh1Mult = 0); 
  
-  Double_t GetMCStrangenessFactor(const Double_t pt) const;
+  Double_t GetMCStrangenessFactor(Double_t pt) const;
   Double_t GetMCStrangenessFactorCMS(AliAODMCParticle* daughter) const;
   
   Bool_t IsSecondaryWithStrangeMotherMC(AliAODMCParticle* part);
@@ -294,15 +298,18 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   void FillJetShape(AliAODJet* jet, TList* list,  TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt=0, Double_t dPhiUE=0, Double_t normUE = 0, Bool_t scaleStrangeness = kFALSE);
 
   const TString* GetNamesOfInclusivePIDtasks() const { return fNameInclusivePIDtask; };
-  void SetNamesOfInclusivePIDtasks(const Int_t numNames, TString* names);
+  void SetNamesOfInclusivePIDtasks(Int_t numNames, const TString* names);
   
   const TString* GetNamesOfJetPIDtasks() const { return fNameJetPIDtask; };
-  void SetNamesOfJetPIDtasks(const Int_t numNames, TString* names);
+  void SetNamesOfJetPIDtasks(Int_t numNames, const TString* names);
        
        
        Bool_t GetIsPP() const { return fIsPP; };
        void SetIsPP(Bool_t flag) { fIsPP = flag; };
   
+  Bool_t GetOnlyLeadingJets() const { return fOnlyLeadingJets; }
+  void SetOnlyLeadingJets(Bool_t onlyLeadingJets) { fOnlyLeadingJets = onlyLeadingJets; }
+  
   // Consts
   enum {kTrackUndef=0, kTrackAOD, kTrackAODQualityCuts, kTrackAODCuts, 
        kTrackAODExtra, kTrackAODExtraonly, kTrackAODExtraCuts, kTrackAODExtraonlyCuts, 
@@ -319,9 +326,9 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   Int_t          GetListOfJets(TList* list, Int_t type);
   Int_t   GetListOfBckgJets(TList *list, Int_t type);
 
-  AliESDEvent* fESD;      // ESD event
-  AliAODEvent* fAOD;      // AOD event
-  AliAODEvent* fAODJets;  // AOD event with jet branch (case we have AOD both in input and output)
+  AliESDEvent* fESD;      //! ESD event
+  AliAODEvent* fAOD;      //! AOD event
+  AliAODEvent* fAODJets;  //! AOD event with jet branch (case we have AOD both in input and output)
   AliAODExtension  *fAODExtension; //! where we take the jets from can be input or output AOD
   TString       fNonStdFile; // name of delta aod file to catch the extension
  
@@ -465,6 +472,7 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   TList        *fCommonHistList;         // List of common histos
   
   TH1F  *fh1EvtSelection;         //! event cuts 
+  TH1F  *fh1VtxSelection;         //! type of accepted vertices
   TH1F *fh1VertexNContributors;  //! NContributors to prim vertex
   TH1F *fh1VertexZ;              //! prim vertex z distribution
   TH1F *fh1EvtMult;              //! number of reconstructed tracks after cuts 
@@ -474,6 +482,8 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   TH1F*     fh1Trials;            //! sum of trials
   TH1F*     fh1PtHard;            //! pt hard of the event
   TH1F*     fh1PtHardTrials;      //! pt hard of the event
+  
+  TH1F*     fh1EvtsPtHardCut;     //! Number events before and after the cut on MC pT hard
 
   TH1F  *fh1nRecJetsCuts;         //! number of jets from reconstructed tracks per event 
   TH1F  *fh1nGenJets;             //! number of jets from generated tracks per event
@@ -484,7 +494,20 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   TH1F  *fh1nGenBckgJets;         //! number of jets from generated tracks per event
   TH2F  *fh2PtRecVsGenPrim;       //! association rec/gen MC: rec vs gen pt, primaries 
   TH2F  *fh2PtRecVsGenSec;        //! association rec/gen MC: rec vs gen pt, secondaries 
+  
+  TH2F  *fhDCA_XY;                //! DCA XY for all rec. particles
+  TH2F  *fhDCA_Z;                 //! DCA Z for all rec. particles
+  
+  TH2F  *fhJetPtRefMultEta5;      //! Jet pT vs. reference multiplicity (|eta|<0.5)
+  TH2F  *fhJetPtRefMultEta8;      //! Jet pT vs. reference multiplicity (|eta|<0.8)
+  TH2F  *fhJetPtMultPercent;      //! Jet pT vs. multiplicity percentile (usually V0M)
 
+  TH2F  *fhDCA_XY_prim_MCID[AliPID::kSPECIES];   //! DCA XY for all rec. prim. particles sorted by MC-ID
+  TH2F  *fhDCA_Z_prim_MCID[AliPID::kSPECIES];    //! DCA Z for all rec. prim. particles sorted by MC-ID
+  TH2F  *fhDCA_XY_sec_MCID[AliPID::kSPECIES];    //! DCA XY for all rec. sec. particles sorted by MC-ID
+  TH2F  *fhDCA_Z_sec_MCID[AliPID::kSPECIES];     //! DCA Z for all rec. sec. particles sorted by MC-ID
   // tracking efficiency / secondaries
   
   AliFragFuncQATrackHistos* fQATrackHistosRecEffGen;      //! tracking efficiency: generated primaries 
@@ -566,17 +589,22 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   TProfile* fProDelRPtSumRecSecSsc[5];      //! jet shape 
   
 
-  TRandom3*                   fRandom;          // TRandom3 for background estimation 
+  TRandom3* fRandom;                        //! TRandom3 for background estimation 
+  
+  Bool_t fOnlyLeadingJets;                  // Flag indicating whether some histos are filled with leading jets only or all jets
+  Float_t fMCPtHardCut;                     // Cut on MC pThard (smaller that threshold), if set to non-negative value
+  
+  AliAnalysisUtils *fAnaUtils;              //! Object to use analysis utils like pile-up rejection
   
   // PID framework
   Int_t fNumInclusivePIDtasks;              // Number of inclusive PID tasks used 
   Int_t fNumJetPIDtasks;                    // Number of jet PID tasks used
   
-  TString* fNameInclusivePIDtask;           // Names of the tasks for inclusive PID spectra
-  TString* fNameJetPIDtask;                 // Names of the tasks for jet PID spectra
+  TString* fNameInclusivePIDtask;           //[fNumInclusivePIDtasks] Names of the tasks for inclusive PID spectra
+  TString* fNameJetPIDtask;                 //[fNumJetPIDtasks] Names of the tasks for jet PID spectra
   
-  AliAnalysisTaskPID** fInclusivePIDtask;   // Pointer to tasks for inclusive PID spectra
-  AliAnalysisTaskPID** fJetPIDtask;         // Pointer to tasks for jet PID spectra
+  AliAnalysisTaskPID** fInclusivePIDtask;   //! Pointer to tasks for inclusive PID spectra
+  AliAnalysisTaskPID** fJetPIDtask;         //! Pointer to tasks for jet PID spectra
   
   Bool_t fUseInclusivePIDtask;              // Process inclusive PID spectra?
   Bool_t fUseJetPIDtask;                    // Process jet PID spectra?
@@ -586,17 +614,14 @@ class AliAnalysisTaskIDFragmentationFunction : public AliAnalysisTaskSE {
   AliFragFuncHistos* fIDFFHistosRecCuts[AliPID::kSPECIES];    //! Identified FF reconstructed tracks after cuts 
   AliFragFuncHistos* fIDFFHistosGen[AliPID::kSPECIES];    //! Identified FF generated tracks after cuts 
 
-  ClassDef(AliAnalysisTaskIDFragmentationFunction, 17);
+  ClassDef(AliAnalysisTaskIDFragmentationFunction, 21);
 };
 
 
-inline void AliAnalysisTaskIDFragmentationFunction::SetNamesOfInclusivePIDtasks(const Int_t numNames, TString* names)
+inline void AliAnalysisTaskIDFragmentationFunction::SetNamesOfInclusivePIDtasks(Int_t numNames, const TString* names)
 {
   delete [] fNameInclusivePIDtask;
   fNameInclusivePIDtask = 0x0;
-    
-  delete [] fInclusivePIDtask;
-  fInclusivePIDtask = 0x0;
   
   if (!names || numNames < 0) {
     fNumInclusivePIDtasks = 0;
@@ -607,22 +632,17 @@ inline void AliAnalysisTaskIDFragmentationFunction::SetNamesOfInclusivePIDtasks(
   
   if (numNames > 0) {
     fNameInclusivePIDtask = new TString[numNames];
-    fInclusivePIDtask = new AliAnalysisTaskPID*[numNames];
     
     for (Int_t i = 0; i < numNames; i++) {
       fNameInclusivePIDtask[i] = names[i];
-      fInclusivePIDtask[i] = 0x0;
     }
   }  
 }
 
-inline void AliAnalysisTaskIDFragmentationFunction::SetNamesOfJetPIDtasks(const Int_t numNames, TString* names)
+inline void AliAnalysisTaskIDFragmentationFunction::SetNamesOfJetPIDtasks(Int_t numNames, const TString* names)
 {
   delete [] fNameJetPIDtask;
   fNameJetPIDtask = 0x0;
-    
-  delete [] fJetPIDtask;
-  fJetPIDtask = 0x0;
   
   if (!names || numNames < 0) {
     fNumJetPIDtasks = 0;
@@ -633,11 +653,9 @@ inline void AliAnalysisTaskIDFragmentationFunction::SetNamesOfJetPIDtasks(const
   
   if (numNames > 0) {
     fNameJetPIDtask = new TString[numNames];
-    fJetPIDtask = new AliAnalysisTaskPID*[numNames];
     
     for (Int_t i = 0; i < numNames; i++) {
       fNameJetPIDtask[i] = names[i];
-      fJetPIDtask[i] = 0x0;
     }
   }  
 }