]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/muon/AliAnalysisTaskMuMu.h
Split the TaskMuMu into more manageable sub-analysis (Laurent)
[u/mrichter/AliRoot.git] / PWG / muon / AliAnalysisTaskMuMu.h
index 861b276011effe68bd92fe15fed710c7f9230d5a..a42100ebdd0ad4fed759ce84a3e90171a4cf10c0 100644 (file)
@@ -1,24 +1,34 @@
 #ifndef ALIANALYSISTASKMUMU_H
 #define ALIANALYSISTASKMUMU_H
 
-//
-// AliAnalysisTaskMuMu : base class for mu pairs analysis 
-// Contains common things for ESD-based and AOD-based analysis
-//
-// author: L. Aphecetche (Subatech)
-//
+/**
+ * \defgroup pwg-muon-mumu pwg-muon-mumu
+ *
+ * \brief Small sub-framework to analyse muon pairs and more...
+ *
+ * Started as a simple invariant mass analysis and grew into a bit more general thing...
+ *
+ * Can now compute the charged particle multiplicy (from SPD tracklets only) in order
+ * to be able to correlate it with e.g. J/psi or single mu.
+ */
+
+/**
+ * \ingroup pwg-muon-mumu
+ *
+ * \class AliAnalysisTaskMuMu 
+ *
+ * \brief Steering class for mu pairs analysis (and more...)
+ *
+ * This class acts as a small sub-framework to steer various sub-analysis which 
+ * share the same MergeableCollection and the same CounterCollection.
+ *
+ *  \author: L. Aphecetche (Subatech)
+ */
 
 #ifndef ALIANALYSISTASKSE_H
 #  include "AliAnalysisTaskSE.h"
 #endif
 
-#include <set>
-#include <vector>
-
-#ifndef ROOT_TArrayI
-#  include "TArrayI.h"
-#endif
-
 #ifndef ROOT_TMath
 #  include "TMath.h"
 #endif
 class AliAnalysisMuMuBinning;
 class AliCounterCollection;
 class AliMergeableCollection;
-class AliMuonTrackCuts;
-class AliMuonEventCuts;
 class AliVParticle;
-class TArrayF;
 class TList;
 class TObjArray;
+class AliAnalysisMuMuBase;
+class AliAnalysisMuMuCutRegistry;
 
 class AliAnalysisTaskMuMu : public AliAnalysisTaskSE
 {
 public:
-  
-  enum ETrackCut
-  {
-    kAll=BIT(0),
-    kPt1=BIT(1),
-    kRabs=BIT(2),
-    kMatched=BIT(3),
-    kMatchedLow=BIT(4),
-    kMatchedHigh=BIT(5),
-    kEta=BIT(6),
-    kChi2=BIT(7),
-    kDCA=BIT(8),
-    kPairRapidity=BIT(9),
-    kBelowPt=BIT(10),
-    kPt1dot2=BIT(11),
-    kPt1dot5=BIT(12),
-    kPt2=BIT(13),
-    kDeg23=BIT(14),
-    kDeg310=BIT(15),
-    kP10=BIT(16),
-    kChi2MatchTrigger=BIT(17)
-  };
-  
-  enum EEventCut
-  {
-    kEventAll=BIT(0),
-    kEventPS=BIT(1),
-    kEventTVX=BIT(2),
-    kEventV0AND=BIT(3),
-    kEventV0UP=BIT(4),
-    kEventZSPD=BIT(5),
-    kEventZ7=BIT(7),    
-    kEventNOTZEROPILEUP=BIT(8),
-    kEventOFFLINEMUL1=BIT(9),
-    kEventZ10=BIT(10),
-    kEventOFFLINEMUL2=BIT(11),
-    kEventSD2=BIT(16),
-    kEventMSL=BIT(17),
-    kEventREJECTED=BIT(18),
-    kEventPSTS=BIT(19)
-  };
-  
   AliAnalysisTaskMuMu();
-  AliAnalysisTaskMuMu(Bool_t fromESD, TList* triggerClassesToConsider, const char* beamYear=0x0, TArrayF* centralities=0x0);
-  AliAnalysisTaskMuMu(Bool_t fromESD, const char* beamYear, TArrayF* centralities=0x0);
   virtual ~AliAnalysisTaskMuMu();
 
-  void AddBin(const char* particle, const char* type,
-              Double_t xmin, Double_t xmax,
-              Double_t ymin,
-              Double_t ymax,
-              const char* flavour="");
-
-  void AddBin(const char* particle, const char* type,
-              Double_t xmin, Double_t xmax,
-              const char* flavour="") { AddBin(particle,type,xmin,xmax,TMath::Limits<Double_t>::Max(),TMath::Limits<Double_t>::Max(),flavour); }
-  
-  void CreateMesh(const char* particle, const char* type1, const char* type2, const char* flavour="", Bool_t remove12=kFALSE);
-  
-  virtual void AddEventCut(const char* cutName, UInt_t mask);
-  
-  virtual void AddPairCut(const char* cutName, UInt_t maskForOneOrBothTrack, UInt_t maskForTrackPair=0);
+  AliAnalysisMuMuCutRegistry* CutRegistry() const;
   
-  virtual void AddSingleCut(const char* cutName, UInt_t mask);
+  AliAnalysisMuMuBinning* Binning() const;
+
+  void AdoptSubAnalysis(AliAnalysisMuMuBase* analysis);
   
   virtual void DisableHistograms(const char* pattern="*");
-  
-  AliMuonEventCuts* EventCuts() const;
+
+  void SetBeamYear(const char* beamYear) { fBeamYear = beamYear; }
   
   virtual void FinishTaskOutput();
   
-  Bool_t IsPP() const;
-
-  Bool_t IsHistogrammingDisabled() const;
-
-  virtual Bool_t IsHistogramDisabled(const char* hname) const;
-
   virtual void NotifyRun();
   
   virtual void Print(Option_t* opt="") const;
   
-  virtual void ShouldSeparatePlusAndMinus(Bool_t value) { fShouldSeparatePlusAndMinus = value; }
-  
-  virtual Bool_t ShouldSeparatePlusAndMinus() const { return fShouldSeparatePlusAndMinus; }
-  
   virtual void Terminate(Option_t *);
   
-  void UseBackgroundTriggers(Bool_t value=kTRUE) { fUseBackgroundTriggers = value; }
-
   void UserCreateOutputObjects();
 
   virtual void UserExec(Option_t* opt);
   
-  AliMuonTrackCuts* MuonTrackCuts();
-  
-  void SetMuonTrackCuts(const AliMuonTrackCuts& trackCuts);
-  
-  class PairCut : public TObject {
-  public:
-    PairCut(const char* name="", UInt_t maskForOneOrBothTrack=0, UInt_t maskForTrackPair=0)
-    : TObject(), fName("p"),fMaskForOneOrBothTrack(maskForOneOrBothTrack),fMaskForTrackPair(maskForTrackPair)
-    {
-      fName += name;
-    }
-    const char* GetName() const { return fName.Data(); }
-    UInt_t MaskForOneOrBothTrack() const { return fMaskForOneOrBothTrack; }
-    UInt_t MaskForTrackPair() const { return fMaskForTrackPair; }
-    void Print(Option_t* opt="") const;
-    
-  private:
-    TString fName; // name of the cut
-    UInt_t fMaskForOneOrBothTrack; // mask for the cut that at least of the two tracks should match
-    UInt_t fMaskForTrackPair; // mask for the cut both tracks should match
-    
-    ClassDef(AliAnalysisTaskMuMu::PairCut,1); // a simple wrapper for two masks
-  };
-  
-  
 private:
-
-  virtual void FillHistos(const char* physics, const char* triggerClassName, const char* centrality);
-
-  void FillHistosForTrack(const char* physics, const char* triggerClassName, const char* centrality, const AliVParticle& track, Int_t trackIndex);
-
-  void FillHistogramCollection(const char* physics, const char* triggerClassName);
   
-  void FillEventHistos(const char* physics, const char* triggerClassName,
-                       const char* centrality);
-  
-  void Fill(const char* eventtype, TObjString* tname, const char* centrality, float fcent);
-
-  void FillMC();
-
-  void AssertHistogramCollection(const char* physics, const char* triggerClassName);
-
-  void BeautifyHistos();
-
-  void CreateMinvHistograms(const char* physics, const char* triggerClassName);
-
-   void CreateHisto(TObjArray* array,
-                   const char* physics,
-                   const char* triggerClassName,
-                   const char* hname, const char* htitle, 
-                   Int_t nbinsx, Double_t xmin, Double_t xmax,
-                   Int_t nbinsy, Double_t ymin, Double_t ymax) const;
-  
-  void CreateEventHisto(const char* physics,
+  void CreateTrackHisto(const char* eventSelection,
                         const char* triggerClassName,
-                        const char* hname, const char* htitle, 
+                        const char* hname, const char* htitle,
                         Int_t nbinsx, Double_t xmin, Double_t xmax,
-                        Int_t nbinsy=0, Double_t ymin=0.0, Double_t ymax=0.0) const;
+                        Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0,
+                        Bool_t separatePlusAndMinus=kFALSE) const;
   
-  void CreateSingleHisto(const char* physics,
-                         const char* triggerClassName,
-                         const char* hname, const char* htitle, 
-                         Int_t nbinsx, Double_t xmin, Double_t xmax,
-                         Int_t nbinsy=0, Double_t ymin=0.0, Double_t ymax=0.0,
-                         Bool_t separatePlusAndMinus=kFALSE) const;
-
-  void CreatePairHisto(const char* physics,
+  void CreatePairHisto(const char* eventSelection,
                        const char* triggerClassName,
-                       const char* hname, const char* htitle, 
+                       const char* hname, const char* htitle,
                        Int_t nbinsx, Double_t xmin, Double_t xmax,
-                       Int_t nbinsy=0, Double_t ymin=0.0, Double_t ymax=0.0) const;
+                       Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0) const;
   
-   void DefineCentralityClasses(TArrayF* centralities);
-  
-  UInt_t GetTriggerInputBitMaskFromInputName(const char* inputName) const;
-
-  TH1* Histo(const char* physics, const char* histoname);
-  
-  TH1* Histo(const char* physics, const char* triggerClassName, const char* histoname);
-  
-  TH1* Histo(const char* physics, const char* triggerClassName, const char* what, const char* histoname);
-
-  TH1* Histo(const char* physics, const char* triggerClassName, const char* cent, const char* what, const char* histoname);
+  const char* DefaultCentralityName() const;
 
-  Double_t MuonMass2() const;
+  AliVEvent* Event() const;
   
-  const char* DefaultCentralityName() const;
+  void FillHistos(const char* eventSelection, const char* triggerClassName, const char* centrality);
   
-  const char* CentralityName(Double_t centrality) const;
+  void Fill(const char* eventSelection, const char* triggerClassName);
   
-  Bool_t HasMC() const { return fHasMC; }
+  void FillMC();
   
-  void ComputeTrackMask(const AliVParticle& track, Int_t trackIndex);
-
-  UInt_t GetEventMask() const;
+  void GetSelectedTrigClassesInEvent(const AliVEvent* event, TObjArray& array);
 
-  void GetPairMask(const AliVParticle& t1, const AliVParticle& t2,
-                   Int_t trackIndex1, Int_t trackIndex2,
-                   UInt_t& mask1, UInt_t& mask2,
-                   UInt_t& mask12) const;
+  Bool_t IsHistogrammingDisabled() const;
   
-  UInt_t GetTrackMask(Int_t trackIndex) const;
+  virtual Bool_t IsHistogramDisabled(const char* hname) const;
   
-  Double_t GetTrackTheta(const AliVParticle& particle) const;
+  Bool_t IsPP() const;
   
-  Bool_t PairRapidityCut(const AliVParticle& t1, const AliVParticle& t2) const;
-
-  /* methods prefixed with EA should really not exist at all. They are there
-   only because the some of our base interfaces are shamelessly incomplete or
-   inadequate...
-   */
+private:
   
-  void EAComputeTrackMasks();
-
-  Int_t EAGetNumberOfMuonTracks() const;
-
-  Int_t EAGetNumberOfSelectMuonTracks() const;
-
-  Double_t EAGetTrackDCA(const AliVParticle& particle) const;
-
-  Bool_t EAGetTZEROFlags(Bool_t& backgroundFlag, Bool_t& pileupFlag, Bool_t& satelliteFlag) const;
-
-  Bool_t AtLeastOneMuonTrigger(const TString& firedTriggerClasses) const;
-
-  Bool_t AtLeastOneEmcalTrigger(const TString& firedTriggerClasses) const;
-
-  Bool_t AtLeastOneMBTrigger(const TString& firedTriggerClasses) const;
-
-  Bool_t TriggerSBACECondition(const TString& triggerName) const;
+  AliAnalysisTaskMuMu(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
+  AliAnalysisTaskMuMu& operator=(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
 
-  void DefineDefaultBinning();
-  
-  AliVEvent* Event() const;
-  
 private:
   
   AliMergeableCollection* fHistogramCollection; //! collection of histograms
   AliCounterCollection* fEventCounters; //! event counters
-  
-  AliMuonTrackCuts* fMuonTrackCuts; //! common cuts for muon tracks (from Diego)
-  TArrayI fPrecomputedTrackMasks; //! track masks
+  mutable AliAnalysisMuMuBinning* fBinning; // binning for particles
 
-  Bool_t fIsFromESD; // whether we read from ESD or AOD
-  Bool_t fShouldSeparatePlusAndMinus; // whether or not to histogram mu+ and mu- separately
-  TString fBeamYear; // beam and year
-  
-  TObjArray* fSingleTrackCutNames; // cut on single tracks (array of TObjString)
-  TObjArray* fPairTrackCutNames; // cut on track pairs (array of TObjString)
-  TObjArray* fCentralityNames; // names to create histograms
-  TObjArray* fEventCutNames; // cut at event level (array of TObjString)
-  
-  Bool_t fUseBackgroundTriggers; // whether or not we should use the ACE triggers
-  
-  std::map<std::string,int> fTriggerInputBitMap; // map of L0 input name to bit
-  
-  AliAnalysisMuMuBinning* fBinning; // binning for particles
+  mutable AliAnalysisMuMuCutRegistry* fCutRegistry; // cuts (owner)
   
-  TList* fHistogramToDisable; // list of regexp of histo name to disable
-
-  TObjArray* fBinArray; //!  cache for the bins
-  Bool_t fHasMC; //! current event has MC information
+  TString fBeamYear; // beam and year
   
-  mutable AliMuonEventCuts* fEventCuts; // common cuts for muon events (from Diego)
+  TList* fHistogramToDisable; // list of regexp of histo name(s) to disable
   
-  AliAnalysisTaskMuMu(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
-  AliAnalysisTaskMuMu& operator=(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
+  TObjArray* fSubAnalysisVector; // list of companion analysis
   
-  ClassDef(AliAnalysisTaskMuMu,24) // a class to analyse muon pairs (and single also ;-) )
+  ClassDef(AliAnalysisTaskMuMu,26) // a class to analyse muon pairs (and single also ;-) )
 };
 
 #endif