]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskJetMatching.h
index 554dee2840d3c3af19dddf5c01de873f3646923e..217ff35637775181236f72e562b62e5ddb5a04f1 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef AliAnalysisTaskJetMatching_H
 #define AliAnalysisTaskJetMatching_H
 
+//#define DEBUGTASK
+
 #include <AliAnalysisTaskEmcalJet.h>
 #include <AliEmcalJet.h>
 #include <AliVTrack.h>
@@ -9,8 +11,9 @@
 #include <TRandom3.h>
 
 class TF1;
-class THF1;
-class THF2;
+class TH1F;
+class TH2F;
+class TH3F;
 class TProfile;
 class AliRhoParameter;
 class AliLocalRhoParameter;
@@ -20,8 +23,7 @@ class AliAnalysisTaskJetMatching : public AliAnalysisTaskEmcalJet
 {
     public:
         // enumerators
-        enum matchingSceme      {kGeoEtaPhi, kGeoR, kGeoEtaPhiArea, kGeoRArea, kDeepMatching};
-        enum duplicateRecovery  {kDoNothing, kTraceDuplicates, kRemoveDuplicates}; 
+        enum matchingSceme      {kGeoEtaPhi, kGeoR, kDiJet};
         enum sourceBKG          {kNoSourceBKG, kSourceRho, kSourceLocalRho};
         enum targetBKG          {kNoTargetBKG, kTargetRho, kTargetLocalRho};
         // constructors, destructor
@@ -30,9 +32,12 @@ class AliAnalysisTaskJetMatching : public AliAnalysisTaskEmcalJet
         virtual                 ~AliAnalysisTaskJetMatching();
         // setting up the task and technical aspects
         void                    ExecOnce();
+        virtual Bool_t          Notify();
         virtual void            UserCreateOutputObjects();
         TH1F*                   BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Bool_t append = kTRUE);
         TH2F*                   BookTH2F(const char* name, const char* x, const char* y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Bool_t append = kTRUE);
+        TH3F*                   BookTH3F(const char* name, const char* x, const char* y, const char* z, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t binsz, Double_t minz, Double_t maxz, Bool_t append = kTRUE);
+
         virtual Bool_t          Run();
         /* inline */    Double_t PhaseShift(Double_t x) const {  
             while (x>=TMath::TwoPi())x-=TMath::TwoPi();
@@ -47,80 +52,87 @@ class AliAnalysisTaskJetMatching : public AliAnalysisTaskEmcalJet
             }
             return x; }
         /* inline */    Bool_t CompareTracks(AliVParticle* a, AliVParticle* b) const {
-//            printf("dEta %.2f \t dPhi %.2f \n", a->Eta()-b->Eta(), a->Phi()-b->Phi());
             return (TMath::AreEqualAbs(a->Pt(), b->Pt(), 1e-2) && TMath::AreEqualAbs(a->Eta(), b->Eta(), 1e-2) && TMath::AreEqualAbs(a->Phi(), b->Phi(), 1e-2)) ? kTRUE : kFALSE; }
+        /* inline */    Double_t GetR(AliVParticle* a, AliVParticle* b) const {
+               if(!(a&&b)) return 999;
+               Double_t phiA(a->Phi()), phiB(b->Phi()), etaA(a->Eta()), etaB(b->Eta());
+               if(TMath::Abs(phiA-phiB) > TMath::Abs(phiA-phiB + TMath::TwoPi())) phiA+=TMath::TwoPi();
+               if(TMath::Abs(phiA-phiB) > TMath::Abs(phiA-phiB - TMath::TwoPi())) phiA-=TMath::TwoPi();
+               return TMath::Sqrt(TMath::Abs((etaA-etaB)*(etaA-etaB)+(phiA-phiB)*(phiA-phiB))); }
 
         // setters - setup how to run
-        void                    SetDebugMode(Int_t d)                           {fDebug = d;}
         void                    SetMatchingScheme(matchingSceme m)              {fMatchingScheme = m;}
-        void                    SetDuplicateRecoveryScheme(duplicateRecovery d) {fDuplicateJetRecoveryMode = d;}
+        void                    SetMatchConstituents(Bool_t m)                  {fMatchConstituents = m;}
+        void                    SetMinFracRecoveredConstituents(Float_t f)      {fMinFracRecoveredConstituents = f;}
+        void                    SetMinFracRecoveredConstituentPt(Float_t f)     {fMinFracRecoveredConstituentPt = f;}
         void                    SetUseEmcalBaseJetCuts(Bool_t b)                {fUseEmcalBaseJetCuts = b;}
+        void                    SetGetBijection(Bool_t b)                       {fGetBijection = b;}
         void                    SetSourceBKG(sourceBKG b)                       {fSourceBKG = b;}
         void                    SetTargetBKG(targetBKG b)                       {fTargetBKG = b;}
         void                    SetSourceJetsName(const char* n)                {fSourceJetsName = n;}
         void                    SetTargetJetsName(const char* n)                {fTargetJetsName = n; }
         void                    SetMatchedJetsName(const char* n)               {fMatchedJetsName = n;}
+        void                    SetSourceLocalRhoName(const char* n)            {fSourceRhoName = n;}
+        void                    SetTargetLocalRhoName(const char* n)            {fTargetRhoName = n;}
+        void                    SetSourceRadius(Float_t r)                      {fSourceRadius = r;}
+        void                    SetTargetRadius(Float_t r)                      {fTargetRadius = r;}
         void                    SetMatchEta(Float_t f)                          {fMatchEta = f;}
         void                    SetMatchPhi(Float_t f)                          {fMatchPhi = f;}
         void                    SetMatchR(Float_t f)                            {fMatchR = f;}
-        void                    SetMatchRelArea(Float_t f)                      {fMatchArea = f;}
-        void                    SetMaxRelEnergyDiff(Float_t f)                  {fMaxRelEnergyDiff = f;}
-        void                    SetMaxAbsEnergyDiff(Float_t f)                  {fMaxAbsEnergyDiff = f;}
+        void                    SetDoDetectorResponse(Bool_t d)                 {fDoDetectorResponse = d;}
         // methods
-        void                    DoGeometricMatchingEtaPhi(Bool_t pairCuts = kFALSE);
-        void                    DoGeometricMatchingR(Bool_t pairCuts = kFALSE);
-        void                    DoDeepMatching();
-        void                    DuplicateJetRecovery();
+        void                    DoGeometricMatchingEtaPhi();
+        void                    DoGeometricMatchingR();
+        void                    DoDiJetMatching();
+        void                    DoConstituentMatching();
+        void                    GetBijection();
         void                    PostMatchedJets();
         // fill histogrmas
         void                    FillAnalysisSummaryHistogram() const;
-        void                    FillMatchedJetHistograms() const;
+        void                    FillMatchedJetHistograms();
         // setters - analysis details
         /* inline */    Bool_t PassesCuts(const AliVTrack* track) const {
-            if(!track) return kFALSE;
-            return (track->Pt() < fTrackPtCut || track->Eta() < fTrackMinEta || track->Eta() > fTrackMaxEta || track->Phi() < fTrackMinPhi || track->Phi() > fTrackMaxPhi) ? kFALSE : kTRUE; }
-        /* inline */    Bool_t PassesCuts(AliEmcalJet* jet) const {
-            if(!jet) return kFALSE;
-            return (fUseEmcalBaseJetCuts) ? AliAnalysisTaskEmcalJet::AcceptJet(jet) : kTRUE; }
-        /* inline */    Bool_t PassesCuts(AliEmcalJet* a, AliEmcalJet* b) const {
-            if (fMatchArea > 0) { return (TMath::Abs(a->Area()/b->Area()) < fMatchArea) ? kTRUE : kFALSE; }
-            if (fMaxRelEnergyDiff > 0) { return (TMath::Abs(a->E()/b->E()) > fMaxRelEnergyDiff) ? kTRUE : kFALSE; }
-            if (fMaxAbsEnergyDiff > 0) { return (TMath::Abs(a->E()-b->E()) > fMaxAbsEnergyDiff) ? kTRUE : kFALSE; }
-            return kTRUE; }
+            return (!track || TMath::Abs(track->Eta()) > 0.9 || track->Phi() < 0 || track->Phi() > TMath::TwoPi()) ? kFALSE : kTRUE; }
+        /* inline */    Bool_t PassesCuts(AliEmcalJet* jet, Int_t c)  { if(!fUseEmcalBaseJetCuts) return (jet) ? kTRUE : kFALSE; 
+            else return AcceptJet(jet, c);}
         /* inline */    void ClearMatchedJetsCache() {
             for (Int_t i(0); i < fNoMatchedJets; i++) {
                 fMatchedJetContainer[i][0] = 0x0; fMatchedJetContainer[i][1] = 0x0; }
             fNoMatchedJets = 0;
         }
+        AliEmcalJet*            GetLeadingJet(TClonesArray* source, Int_t &leadingJetIndex, Double_t etaMin = -.7, Double_t etaMax = .7);
+        AliEmcalJet*            GetSubLeadingJet(TClonesArray* source, Int_t leadingJetIndex, Int_t &subLeadingJetIndex);
         void                    PrintInfo() const;
         virtual void            Terminate(Option_t* option);
 
     private: 
-        Int_t                   fDebug;                 // debug level (0 none, 1 fcn calls, 2 verbose)
         TClonesArray*           fSourceJets;            //! array with source jets
         TString                 fSourceJetsName;        // name of array with source jets
         TClonesArray*           fTargetJets;            //! array with target jets
         TString                 fTargetJetsName;        // name of array with target jets
         TClonesArray*           fMatchedJets;           //! final list of matched jets which is added to event
         TString                 fMatchedJetsName;       // name of list of matched jets
+        AliLocalRhoParameter*   fSourceRho;             //! source rho
+        TString                 fSourceRhoName;         // source rho  name
+        AliLocalRhoParameter*   fTargetRho;             //! target rho
+        TString                 fTargetRhoName;         // target rho name
         Bool_t                  fUseScaledRho;          // use scaled rho
+        Float_t                 fSourceRadius;          // source radius 
+        Float_t                 fTargetRadius;          // target radius
         matchingSceme           fMatchingScheme;        // select your favorite matching algorithm
-        duplicateRecovery       fDuplicateJetRecoveryMode;      // what to do with duplicate matches
         Bool_t                  fUseEmcalBaseJetCuts;   // use the emcal jet base class for jet cuts
         sourceBKG               fSourceBKG;             // subtracted background of source jets
         targetBKG               fTargetBKG;             // subtracted background of target jets
-        // additional jet cuts (most are inherited)
-        Float_t                 fLocalJetMinEta;        // local eta cut for jets
-        Float_t                 fLocalJetMaxEta;        // local eta cut for jets
-        Float_t                 fLocalJetMinPhi;        // local phi cut for jets
-        Float_t                 fLocalJetMaxPhi;        // local phi cut for jets
         // transient object pointers
         TList*                  fOutputList;            //! output list
         TH1F*                   fHistUnsortedCorrelation;       //! dphi correlation of unsorted jets
         TH1F*                   fHistMatchedCorrelation;        //! dphi correlation of matched jets
         TH1F*                   fHistSourceJetPt;       //! pt of source jets
+        TH1F*                   fHistMatchedSourceJetPt;//! pt of matched source jets
         TH1F*                   fHistTargetJetPt;       //! pt of target jets
         TH1F*                   fHistMatchedJetPt;      //! pt of matched jets
+        TH2F*                   fHistSourceMatchedJetPt;//! pt or source vs matched jets
+        TH2F*                   fHistDetectorResponseProb;      //! det prob
         TH1F*                   fHistNoConstSourceJet;  //! number of constituents of source jet
         TH1F*                   fHistNoConstTargetJet;  //! number of constituents of target jet
         TH1F*                   fHistNoConstMatchJet;   //! number of constituents of matched jets
@@ -128,23 +140,34 @@ class AliAnalysisTaskJetMatching : public AliAnalysisTaskEmcalJet
         TProfile*               fProfFracPtJets;        //! sum pt fraction for matched jets
         TProfile*               fProfFracNoMatched;     //! no of constituents fraction found / jet
         TProfile*               fProfFracNoJets;        //! no of consstituents fraction jet / jet
+        TH3F*                   fHistDiJet;             //! matched dijet eta, phi
+        TH3F*                   fHistDiJetLeadingJet;   //! leading jet (for dijet) eta, phi
+        TH2F*                   fHistDiJetDPhi;         //! dijet dphi
+        TH2F*                   fHistDiJetDPt;          //! dijet dpt
         TH1F*                   fHistAnalysisSummary;   //! flags
         TProfile*               fProfQAMatched;         //! QA spreads of matched jets
         TProfile*               fProfQA;                //! QA spreads of source and target jets
         Int_t                   fNoMatchedJets;         //! number of matched jets
-        AliEmcalJet*            fMatchedJetContainer[100][2];   //! pointers to matched jets
+        AliEmcalJet*            fMatchedJetContainer[200][2];   //! pointers to matched jets
         // geometric matching parameters
         Float_t                 fMatchEta;              // max eta distance between centers of matched jets
         Float_t                 fMatchPhi;              // max phi distance between centers of matched jets
         Float_t                 fMatchR;                // max distance between matched jets
-        Float_t                 fMatchArea;             // max relative area mismatch between matched jets
-        Float_t                 fMaxRelEnergyDiff;      // max relative energy difference between matched jets
-        Float_t                 fMaxAbsEnergyDiff;      // max absolute energy difference between matched jets
+        Bool_t                  fDoDetectorResponse;    // get detector response matrix (not normalized)
+        Bool_t                  fMatchConstituents;     // match constituents
+        Float_t                 fMinFracRecoveredConstituents;  // minimium fraction of constituents that needs to be found
+        Float_t                 fMinFracRecoveredConstituentPt; // minimium fraction of constituent pt that needs to be recovered
+        Bool_t                  fGetBijection;          // get bijection of source and matched jets
+        // pythia ntrials xsec bookkeeping
+        TH1F*                   fh1Trials;              //! sum of trails (in Notify)
+        TH1F*                   fh1AvgTrials;           //! average sum of trials (in Run)
+        TProfile*               fh1Xsec;                //! pythia cross section and trials
+        Float_t                 fAvgTrials;             // average number of trails per event
 
         AliAnalysisTaskJetMatching(const AliAnalysisTaskJetMatching&);                  // not implemented
         AliAnalysisTaskJetMatching& operator=(const AliAnalysisTaskJetMatching&);       // not implemented
 
-        ClassDef(AliAnalysisTaskJetMatching, 2);
+        ClassDef(AliAnalysisTaskJetMatching, 6);
 };
 
 #endif