]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/UserTasks/AliAnalysisTaskJetProtonCorr.h
- Don't change binning of multiplicity, if not stored (in order to maintain jet code...
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskJetProtonCorr.h
index 02d24c739ced0764c2e28cb34de20054e40012ab..f1ab61550fcc2c9d3d2622ebc534c71bef83df63 100644 (file)
@@ -1,22 +1,26 @@
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
+#include "TF1.h"
 
 #include "AliLog.h"
 
+#include "AliVParticle.h"
 #include "AliAnalysisTaskSE.h"
+#include "AliESDtrackCuts.h"
 
 #define ID(x) x, #x
 #define LAB(x) x + 1, #x
 
 class TList;
 class TClonesArray;
-class AliVParticle;
+class AliOADBContainer;
+class AliTOFPIDParams;
 class AliVTrack;
 class AliPIDResponse;
 class AliEventPoolManager;
 class AliEventPool;
-class AliESDtrackCuts;
+class AliEventplane;
 
 class AliAnalysisTaskJetProtonCorr :
   public AliAnalysisTaskSE
@@ -31,8 +35,10 @@ public:
   virtual void   UserExec(Option_t *option);
   virtual void   Terminate(const Option_t *option);
 
+  void SetParamsTOF();
+
   // task configuration
-  void SetJetBranchName(const char* const branchName) { strncpy(fJetBranchName, branchName, fgkStringLength); }
+  void SetJetBranchName(const char* branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
   const char* GetJetBranchName() const { return fJetBranchName; }
 
   void SetPtThrPart(Float_t minPt, Float_t maxPt) { fTrgPartPtMin = minPt; fTrgPartPtMax = maxPt; }
@@ -45,6 +51,55 @@ public:
   Float_t GetPtMinAss() const { return fAssPartPtMin; }
   Float_t GetPtMaxAss() const { return fAssPartPtMax; }
 
+  void SetTwoTrackCut(Float_t cut) { fCutsTwoTrackEff = cut; }
+  Float_t GetTwoTrackCut() const { return fCutsTwoTrackEff; }
+
+  void SetTrackCutsAss(const AliESDtrackCuts &cuts) { *fCutsPrimAss = cuts; }
+  void SetTrackCutsTrg(const AliESDtrackCuts &cuts) { *fCutsPrimTrg = cuts; }
+  void SetTrackCutsTrgConstrain(const AliESDtrackCuts &cuts) { *fCutsPrimTrgConstrain = cuts; }
+
+  void SetTrgJetEtaMax(Float_t etamax) { fTrgJetEtaMax = etamax; }
+  Float_t GetTrgJetEtaMax() const { return fTrgJetEtaMax; }
+  void SetHadEtaMax(Float_t etamax) { fHadEtaMax = etamax; }
+  Float_t GetHadEtaMax() const { return fHadEtaMax; }
+
+  void SetUseEvplaneV0(Bool_t usev0 = kTRUE) { fUseEvplaneV0 = usev0; }
+  Bool_t GetUseEvplaneV0() const { return fUseEvplaneV0; }
+
+  void SetJetV2(Float_t v2Cent, Float_t v2Semi) {
+    fTrgJetPhiModCent->SetParameter(0, v2Cent);
+    fTrgJetPhiModSemi->SetParameter(0, v2Semi);
+  }
+  void SetHadV2(Float_t v2Cent, Float_t v2Semi) {
+    fTrgHadPhiModCent->SetParameter(0, v2Cent);
+    fTrgHadPhiModSemi->SetParameter(0, v2Semi);
+  }
+
+  void SetLeadingTrackPtMin(Float_t pt) { fTrgJetLeadTrkPtMin = pt; }
+  void SetLeadingTrackPtMax(Float_t pt) { fTrgJetLeadTrkPtMax = pt; }
+
+  void SetJetAreaMin(Float_t area) { fTrgJetAreaMin = area; }
+  Float_t GetJetAreaMin() const { return fTrgJetAreaMin; }
+
+  void SetRequirePID(Bool_t req = kTRUE) { fRequirePID = req; }
+  Bool_t GetRequirePID() const { return fRequirePID; }
+
+  void SetFilterMask(Int_t mask) { fAssFilterMask = mask; }
+  Int_t GetFilterMask() const { return fAssFilterMask; }
+
+  void SetErrorCount(Int_t cnt) { fErrorMsg = cnt; }
+  Int_t GetErrorCount() const { return fErrorMsg; }
+
+  void SetTrgAngleToEvPlane(Float_t angle) { fTrgAngleToEvPlane = angle; }
+  Float_t GetTrgAngleToEvPlane() const { return fTrgAngleToEvPlane; }
+
+  void SetToyMeanNoPart(Float_t mean) { fToyMeanNoPart = mean; }
+  Float_t GetToyMeanNoPart() const { return fToyMeanNoPart; }
+  void SetToyRadius(Float_t radius) { fToyRadius = radius; }
+  Float_t GetToyRadius() const { return fToyRadius; }
+  void SetToySmearPhi(Float_t sigma) { fToySmearPhi = sigma; }
+  Float_t GetToySmearPhi() const { return fToySmearPhi; }
+
   void PrintTask(Option_t *option, Int_t indent) const;
 
   static Double_t TOFsignal(Double_t *x, Double_t *par)
@@ -63,10 +118,13 @@ public:
   // histograms
   enum Hist_t {
       kHistStat = 0,
+      kHistVertexNctb,
+      kHistVertexZ,
       kHistCentrality,
       kHistCentralityUsed,
       kHistCentralityCheck,
       kHistCentralityCheckUsed,
+      kHistCentralityVsMult,
       kHistSignalTPC,
       kHistSignalTOF,
       kHistBetaTOF,
@@ -74,30 +132,30 @@ public:
       kHistDeltaTPCSemi,
       kHistDeltaTOF,
       kHistDeltaTOFSemi,
-      kHistExpSigmaTOFe,
-      kHistExpSigmaTOFmu,
-      kHistExpSigmaTOFpi,
-      kHistExpSigmaTOFk,
-      kHistExpSigmaTOFp,
-      kHistExpSigmaTOFd,
-      kHistExpSigmaTOFeSemi,
-      kHistExpSigmaTOFmuSemi,
-      kHistExpSigmaTOFpiSemi,
-      kHistExpSigmaTOFkSemi,
-      kHistExpSigmaTOFpSemi,
-      kHistExpSigmaTOFdSemi,
-      kHistCmpSigmaTOFe,
-      kHistCmpSigmaTOFmu,
-      kHistCmpSigmaTOFpi,
-      kHistCmpSigmaTOFk,
-      kHistCmpSigmaTOFp,
-      kHistCmpSigmaTOFd,
-      kHistCmpSigmaTOFeSemi,
-      kHistCmpSigmaTOFmuSemi,
-      kHistCmpSigmaTOFpiSemi,
-      kHistCmpSigmaTOFkSemi,
-      kHistCmpSigmaTOFpSemi,
-      kHistCmpSigmaTOFdSemi,
+      // kHistExpSigmaTOFe,
+      // kHistExpSigmaTOFmu,
+      // kHistExpSigmaTOFpi,
+      // kHistExpSigmaTOFk,
+      // kHistExpSigmaTOFp,
+      // kHistExpSigmaTOFd,
+      // kHistExpSigmaTOFeSemi,
+      // kHistExpSigmaTOFmuSemi,
+      // kHistExpSigmaTOFpiSemi,
+      // kHistExpSigmaTOFkSemi,
+      // kHistExpSigmaTOFpSemi,
+      // kHistExpSigmaTOFdSemi,
+      // kHistCmpSigmaTOFe,
+      // kHistCmpSigmaTOFmu,
+      // kHistCmpSigmaTOFpi,
+      // kHistCmpSigmaTOFk,
+      // kHistCmpSigmaTOFp,
+      // kHistCmpSigmaTOFd,
+      // kHistCmpSigmaTOFeSemi,
+      // kHistCmpSigmaTOFmuSemi,
+      // kHistCmpSigmaTOFpiSemi,
+      // kHistCmpSigmaTOFkSemi,
+      // kHistCmpSigmaTOFpSemi,
+      // kHistCmpSigmaTOFdSemi,
       kHistNsigmaTPCe,
       kHistNsigmaTPCmu,
       kHistNsigmaTPCpi,
@@ -112,13 +170,13 @@ public:
       kHistNsigmaTOFp,
       kHistNsigmaTOFd,
       kHistNsigmaTOFmismatch,
-      kHistNsigmaTOFmismatch2,
       kHistDeltaTOFe,
       kHistDeltaTOFmu,
       kHistDeltaTOFpi,
       kHistDeltaTOFk,
       kHistDeltaTOFp,
       kHistDeltaTOFd,
+
       kHistNsigmaTPCeSemi,
       kHistNsigmaTPCmuSemi,
       kHistNsigmaTPCpiSemi,
@@ -133,13 +191,13 @@ public:
       kHistNsigmaTOFpSemi,
       kHistNsigmaTOFdSemi,
       kHistNsigmaTOFmismatchSemi,
-      kHistNsigmaTOFmismatch2Semi,
       kHistDeltaTOFeSemi,
       kHistDeltaTOFmuSemi,
       kHistDeltaTOFpiSemi,
       kHistDeltaTOFkSemi,
       kHistDeltaTOFpSemi,
       kHistDeltaTOFdSemi,
+
       kHistNsigmaTPCTOF,
       kHistNsigmaTPCTOFPt,
       kHistNsigmaTPCTOFUsed,
@@ -148,17 +206,46 @@ public:
       kHistNsigmaTPCTOFUsedPt,
       kHistNsigmaTPCTOFUsedPtCentral,
       kHistNsigmaTPCTOFUsedPtSemiCentral,
+
+      kHistNsigmaTPCTOFUsedCentralMCe,
+      kHistNsigmaTPCTOFUsedCentralMCmu,
+      kHistNsigmaTPCTOFUsedCentralMCpi,
+      kHistNsigmaTPCTOFUsedCentralMCk,
+      kHistNsigmaTPCTOFUsedCentralMCp,
+      kHistNsigmaTPCTOFUsedCentralMCd,
+
+      kHistNsigmaTPCTOFUsedSemiCentralMCe,
+      kHistNsigmaTPCTOFUsedSemiCentralMCmu,
+      kHistNsigmaTPCTOFUsedSemiCentralMCpi,
+      kHistNsigmaTPCTOFUsedSemiCentralMCk,
+      kHistNsigmaTPCTOFUsedSemiCentralMCp,
+      kHistNsigmaTPCTOFUsedSemiCentralMCd,
+
       kHistEvPlane,
       kHistEvPlaneUsed,
       kHistEvPlaneCheck,
       kHistEvPlaneCheckUsed,
+      kHistEvPlane3,
       kHistEvPlaneCorr,
+      kHistEvPlaneCorrNoTrgJets,
+      kHistEvPlaneCorrNoTrgJetsTrgd,
       kHistJetPtCentral,
       kHistJetPtSemi,
       kHistEtaPhiTrgHad,
       kHistEtaPhiTrgJet,
       kHistEtaPhiAssHad,
       kHistEtaPhiAssProt,
+      kHistPhiTrgJetEvPlane,
+      kHistPhiTrgHadEvPlane,
+      kHistPhiRndTrgJetEvPlane,
+      kHistPhiRndTrgHadEvPlane,
+      kHistPhiAssHadEvPlane,
+      kHistPhiAssHadVsEvPlane,
+      kHistPhiAssProtEvPlane,
+      kHistPhiTrgJetEvPlane3,
+      kHistPhiTrgHadEvPlane3,
+      kHistPhiAssHadEvPlane3,
+      kHistPhiAssProtEvPlane3,
       kHistLast
   };
 
@@ -166,6 +253,7 @@ public:
   enum Stat_t {
       kStatSeen = 1,
       kStatTrg,
+      kStatVtx,
       kStatCent,
       kStatEvPlane,
       kStatPID,
@@ -189,25 +277,42 @@ public:
     kCorrHadProt,
     kCorrJetHad,
     kCorrJetProt,
+
+    kCorrRndHadHad,
+    kCorrRndHadProt,
+    kCorrRndJetHad,
+    kCorrRndJetProt,
+
+    kCorrRndHadExcHad,
+    kCorrRndHadExcProt,
+    kCorrRndJetExcHad,
+    kCorrRndJetExcProt,
+
     kCorrLast
   };
 
   enum Class_t {
     kClCentral = 0,
     kClSemiCentral,
-    kClDijet,
+    // kClDijet,
     kClLast
   };
 
   enum Trg_t {
     kTrgHad = 0,
     kTrgJet,
+    kTrgHadRnd,
+    kTrgJetRnd,
     kTrgLast
   };
 
   enum Ass_t {
-    kAssHad,
+    kAssHad = 0,
     kAssProt,
+    kAssHadJetExc,
+    kAssProtJetExc,
+    kAssHadHadExc,
+    kAssProtHadExc,
     kAssLast
   };
 
@@ -217,13 +322,69 @@ public:
     kEvLast
   };
 
+  class AliPartCorr : public AliVParticle {
+  public:
+    AliPartCorr(Float_t eta = 0., Float_t phi = 0., Float_t pt = 0., Float_t charge = 0) :
+      fPt(pt), fEta(eta), fPhi(phi), fCharge(charge) {}
+    AliPartCorr(const AliVParticle &rhs) :
+      fPt(rhs.Pt()), fEta(rhs.Eta()), fPhi(rhs.Phi()), fCharge(rhs.Charge()) {}
+    virtual ~AliPartCorr() {}
+    
+    // kinematics
+    virtual Double_t Px() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Py() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Pz() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Pt() const { return fPt; }
+    virtual Double_t P()  const { AliFatal("not implemented"); return 0; }
+    virtual Bool_t   PxPyPz(Double_t[3]) const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t Xv() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Yv() const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Zv() const { AliFatal("not implemented"); return 0; }
+    virtual Bool_t   XvYvZv(Double_t[3]) const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t OneOverPt()  const { AliFatal("not implemented"); return 0; }
+    virtual Double_t Phi()        const { return fPhi; }
+    virtual Double_t Theta()      const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t E()          const { AliFatal("not implemented"); return 0; }
+    virtual Double_t M()          const { AliFatal("not implemented"); return 0; }
+
+    virtual Double_t Eta()        const { return fEta; }
+    virtual Double_t Y()          const { AliFatal("not implemented"); return 0; }
+
+    virtual Short_t Charge()      const { return fCharge; }
+    virtual Int_t   GetLabel()    const { AliFatal("not implemented"); return 0; }
+
+    virtual Int_t   PdgCode()     const { AliFatal("not implemented"); return 0; }
+    virtual const Double_t *PID() const { AliFatal("not implemented"); return 0; }
+
+  protected:
+    Float_t fPt;
+    Float_t fEta;
+    Float_t fPhi;
+    Short_t fCharge;
+
+    ClassDef(AliPartCorr, 1);
+  };
+
   class AliHistCorr : public TNamed {
   public:
     AliHistCorr(TString name, TList *outputList = 0x0);
     ~AliHistCorr();
 
-    void Trigger(Float_t weight = 1.) { fHistStat->Fill(1., weight); }
+    void Trigger(Float_t phi, Float_t eta, Float_t weight = 1.) {
+      fHistStat->Fill(1., weight);
+      if (fHistCorrTrgEtaPhi)
+       fHistCorrTrgEtaPhi->Fill(phi, eta, weight);
+    }
+    void Ass(Float_t phi, Float_t eta, Float_t weight = 1.) {
+      if (fHistCorrAssEtaPhi)
+       fHistCorrAssEtaPhi->Fill(phi, eta, weight);
+    }
     void Fill(AliVParticle *trgPart, AliVParticle *assPart, Float_t weight = 1.);
+    void Fill(TLorentzVector *trgPart, AliVParticle *assPart, Float_t weight = 1.);
+    void Fill(TLorentzVector *trgPart, TLorentzVector *assPart, Float_t weight = 1.);
 
   protected:
     TList *fOutputList;
@@ -233,6 +394,13 @@ public:
     TH1F *fHistCorrPhi;
     TH2F *fHistCorrPhi2;
     TH2F *fHistCorrEtaPhi;
+    TH2F *fHistCorrAvgEtaPhi;
+    TH2F *fHistCorrTrgEtaPhi;
+    TH2F *fHistCorrAssEtaPhi;
+
+    const Float_t fHistDphiLo;
+    const Int_t   fHistDphiNbins;
+    const Int_t   fHistDetaNbins;
 
     AliHistCorr(const AliHistCorr &rhs);
     AliHistCorr& operator=(const AliHistCorr &rhs);
@@ -241,30 +409,42 @@ public:
   };
 
   AliHistCorr*& GetHistCorr(CorrType_t corr, Class_t cl, Ev_t ev) { return fHistCorr[kEvLast*(kClLast*corr + cl) + ev]; }
-  AliEventPoolManager*& GetPoolMgr(Trg_t trg, Ass_t ass) { return fPoolMgr[kTrgLast * ass + trg]; }
-  AliEventPool*& GetPool(Class_t cls, Trg_t trg, Ass_t ass) { return fPool[kClLast * (kTrgLast * ass + trg) + cls]; }
+  AliEventPoolManager*& GetPoolMgr(Ass_t ass) { return fPoolMgr[ass]; }
+  AliEventPool*& GetPool(Ass_t ass) { return fPool[ass]; }
 
 protected:
   AliMCEvent  *fMCEvent; //!
   AliESDEvent *fESDEvent; //!
   AliAODEvent *fAODEvent; //!
 
+  Int_t fRunNumber; //! current run number
+  AliOADBContainer *fOADBContainerTOF; //! container for OADB entry with TOF parameters
+  AliTOFPIDParams *fParamsTOF; //! TOF parametrization
+
+  AliEventplane *fEventplane; //! pointer to the event plane
+
   UInt_t fTriggerMask;         //! internal representation of trigger conditions
   UInt_t fClassMask;           //! internal representation of event classes
   Float_t fCentrality; //!
   Float_t fCentralityCheck; //!
   Float_t fZvtx; //!
   AliPIDResponse *fPIDResponse; //!
-  Float_t fEventPlane; //!
-  Float_t fEventPlaneCheck; //!
-  TObjArray *fPrimTrackArray; //!
+  Float_t fEventPlaneAngle; //!
+  Float_t fEventPlaneAngleCheck; //!
+  Float_t fEventPlaneAngle3; //!
+
+  TObjArray *fPrimTrackArrayAss; //!
+  TObjArray *fPrimTrackArrayTrg; //!
+  TClonesArray *fPrimConstrainedTrackArray; //!
   TClonesArray *fJetArray; //!
 
-  AliEventPoolManager *fPoolMgr[kTrgLast * kAssLast]; //!
-  AliEventPool *fPool[kClLast * kTrgLast * kAssLast]; //!
+  AliEventPoolManager *fPoolMgr[kAssProt + 1]; //!
+  AliEventPool *fPool[kAssProt + 1]; //!
 
   AliHistCorr **fHistCorr; //! [kCorrLast*kEvLast*kClLast]; //!
 
+  Int_t fErrorMsg; //! remaining number of error messages to be printed
+
   Bool_t DetectTriggers();
   void   MarkTrigger(Trigger_t trg) { fTriggerMask |= (1 << trg); }
   Bool_t IsTrigger(Trigger_t trg) const { return (fTriggerMask & (1 << trg)); }
@@ -277,26 +457,31 @@ protected:
   Bool_t CleanUpEvent();
 
   Float_t GetCentrality() const { return fCentrality; }
-  Float_t GetEventPlane() const { return fEventPlane; }
+  Float_t GetEventPlaneAngle() const { return fEventPlaneAngle; }
   AliPIDResponse* GetPID() const { return fPIDResponse; }
-  Bool_t IsCentral() { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
-  Bool_t IsSemiCentral() { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
+  Bool_t IsCentral() const { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
+  Bool_t IsSemiCentral() const { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
 
-  AliVTrack* GetLeadingTrack(AliAODJet *jet) const;
+  AliVTrack* GetLeadingTrack(const AliAODJet *jet) const;
 
   Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
                      Float_t phi2, Float_t pt2, Float_t charge2,
-                     Float_t radius, Float_t bSign);
+                     Float_t radius, Float_t bSign) const;
 
-  Bool_t AcceptTrigger(AliVTrack *trg);
-  Bool_t AcceptTrigger(AliAODJet *trg);
-  Bool_t AcceptAssoc(AliVTrack *trk);
-  Bool_t IsProton(AliVTrack *trk);
-  Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi);
-  Bool_t AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart);
+  Bool_t AcceptTrigger(const AliVTrack *trg);
+  Bool_t AcceptTrigger(const AliAODJet *trg);
+  Bool_t AcceptAssoc(const AliVTrack *trk) const;
+  Bool_t IsProton(const AliVTrack *trk) const;
+  Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi) const;
+  Bool_t AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const;
 
   TObjArray* CloneTracks(TObjArray *tracks) const;
 
+  Bool_t GenerateRandom(TCollection *trgJetArray, TCollection *trgHadArray,
+                       TCollection *assHadJetArray, TCollection *assProtJetArray,
+                       TCollection *assHadHadArray, TCollection *assProtHadArray,
+                       Float_t pFraction = .5);
+
   Bool_t Correlate(CorrType_t corr, Class_t cl, Ev_t ev,
                   TCollection *trgArray, TCollection *assArray, Float_t weight = 1.);
 
@@ -337,20 +522,38 @@ protected:
   static const Int_t fgkStringLength = 100; // max length for the jet branch name
   char fJetBranchName[fgkStringLength];     // jet branch name
 
-  Bool_t fUseStandardCuts;
+  const Bool_t fUseStandardCuts;
+  Bool_t fUseEvplaneV0;
 
-  AliESDtrackCuts *fCutsPrim;  // track cuts for primary particles
+  AliESDtrackCuts *fCutsPrimTrg;       // track cuts for primary particles (trigger)
+  AliESDtrackCuts *fCutsPrimTrgConstrain;      // track cuts for primary particles (trigger)
+  AliESDtrackCuts *fCutsPrimAss;       // track cuts for primary particles (associate)
   Float_t fCutsTwoTrackEff;
 
+  UInt_t  fAssFilterMask;
+  Bool_t  fRequirePID;
+  Float_t fTrgJetEtaMax;
+  Float_t fHadEtaMax;
   Float_t fTrgPartPtMin;
   Float_t fTrgPartPtMax;
   Float_t fTrgJetPtMin;
   Float_t fTrgJetPtMax;
   Float_t fTrgJetLeadTrkPtMin;
+  Float_t fTrgJetLeadTrkPtMax;
+  Float_t fTrgJetAreaMin;
   Float_t fAssPartPtMin;
   Float_t fAssPartPtMax;
   Float_t fTrgAngleToEvPlane;
 
+  Float_t fToyMeanNoPart;
+  Float_t fToyRadius;
+  Float_t fToySmearPhi;
+
+  TF1 *fTrgJetPhiModCent;
+  TF1 *fTrgJetPhiModSemi;
+  TF1 *fTrgHadPhiModCent;
+  TF1 *fTrgHadPhiModSemi;
+
   // not implemented
   AliAnalysisTaskJetProtonCorr(const AliAnalysisTaskJetProtonCorr &rhs);
   AliAnalysisTaskJetProtonCorr& operator=(const AliAnalysisTaskJetProtonCorr &rhs);