Update of Single Muon analysis to be included in the official ESD->AOD analysis train...
[u/mrichter/AliRoot.git] / PWG3 / muon / AliAnalysisTaskSingleMu.h
index d1c66df..a3baf70 100644 (file)
@@ -1,51 +1,79 @@
-#include "TH2.h"
-#include "TObjArray.h"
+/// \ingroup "PWG3muon"
+/// \class AliAnalysisTaskSingleMu
+/// \brief Analysis task for single muons in the spectrometer
+///
+//  Author Diego Stocco
 
-#include "AliAODEvent.h"
-#include "AliAODVertex.h"
-#include "AliAODTrack.h"
+class TList;
+class AliMCParticle;
+class AluMCEvent;
 
-class AliAnalysisTaskSingleMu : public AliAnalysisTask {
+class AliAnalysisTaskSingleMu : public AliAnalysisTaskSE {
  public:
   AliAnalysisTaskSingleMu(const char *name = "AliAnalysisTaskSingleMu");
-  virtual ~AliAnalysisTaskSingleMu() {}
-  
-  virtual void   ConnectInputData(Option_t *);
-  virtual void   CreateOutputObjects();
-  virtual void   Exec(Option_t *option);
-  virtual void   Terminate(Option_t *);
-
-protected:
-  Bool_t MuonPassesCuts(AliAODTrack &muonTrack,
-                       TLorentzVector &lorVec,
-                       Int_t &trigMatch);
-
-  const AliAODVertex* GetVertex();
-  void ResetHistos();
+  virtual ~AliAnalysisTaskSingleMu();
 
-private:
   AliAnalysisTaskSingleMu(const AliAnalysisTaskSingleMu&);
   AliAnalysisTaskSingleMu& operator=(const AliAnalysisTaskSingleMu&);
+  
+  virtual void   UserCreateOutputObjects();
+  virtual void   UserExec(Option_t *option);
+  virtual void   Terminate(Option_t *option);
+  
+ private:
+
+  void SetFlagsFromHandler ();
 
-  AliAODEvent *fAOD; //!< ESDevent object
+  enum {
+    kNoMatchTrig,  // No match with trigger
+    kAllPtTrig,    // Match All Pt
+    kLowPtTrig,    // Match Low Pt
+    kHighPtTrig,   // Match High Pt
+    kNtrigCuts     // Total number of trigger types
+  };
+  
+  // Histograms for data
+  enum {
+    // 1D histos
+    kHistoPt,        ///< Pt distribution
+    kHistoDCA,       ///< DCA distribution
+    kHistoVz,        ///< Interaction vertex distribution
+    kHistoEta,       ///< Eta distribution
+    kHistoRapidity,  ///< Rapidity distribution
+    // 2D histos
+    kHistoPtDCA,     ///< DCA vs Pt distribution
+    kHistoPtVz,      ///< Interaction vertex vs Pt distribution
+    kHistoPtRapidity ///< Rapidity vs Pt distribution
+  };
 
-  static const Int_t fgkNhistos = 1;
-  static const Int_t fgkNTrigCuts = 4;
+  // Histograms for MC
+  enum {
+    kHistoPtResolution, ///< Pt resolution
+    kHistoPtDCAType,    ///< DCA vs Pt distribution
+    kHistoPtVzType      ///< Interaction vertex vs Pt distribution
+  };
 
-  enum
-  {
-    kNoMatchTrig,
-    kAllPtTrig,
-    kLowPtTrig,
-    kHighPtTrig
+  enum {
+    kCharmMu,       ///< Mu from charm
+    kBeautyMu,      ///< Mu from beauty
+    kPrimaryMu,     ///< Primary mu
+    kSecondaryMu,   ///< Secondary mu
+    kRecoHadron,    ///< Reconstructed hadron
+    kUnknownPart,   ///< Particle that fails matching kine
+    kNtrackSources  ///< Total number of track sources
   };
 
-  TString trigName[fgkNTrigCuts]; //!< trigger cut names 
+  Int_t GetHistoIndex(Int_t histoTypeIndex, Int_t trigIndex, Int_t srcIndex = -1);
+
+  void FillTriggerHistos(Int_t histoIndex, Int_t matchTrig, Int_t motherType,
+                        Float_t var1, Float_t var2 = 0. , Float_t var3 = 0.);
+  
+  Int_t RecoTrackMother(AliMCParticle* mcTrack, AliMCEvent* mcEvent);
 
-  TObjArray * fOutputContainer; //!< output data container
+  Bool_t fUseMC;  //!< Flag indicating that Monte Carlo information is available
+  TList* fHistoList;   //!< List of histograms for data
+  TList* fHistoListMC; //!< List of histograms for MC
 
-  TH2F *fVzVsPt[fgkNTrigCuts]; //!< Single muon spectrum
-     
-  ClassDef(AliAnalysisTaskSingleMu, 0); // Single muon analysis
+  ClassDef(AliAnalysisTaskSingleMu, 1); // Single muon analysis
 };