-#include "TH2.h"
-#include "TObjArray.h"
+/// \ingroup "PWG3muon"
+/// \class AliAnalysisTaskSingleMu
+/// \brief Analysis task for single muons in the spectrometer
+///
+// Author Diego Stocco
+#ifndef ALIANALYSISTASKSINGLEMU_H
+#define ALIANALYSISTASKSINGLEMU_H
-#include "AliAODEvent.h"
-#include "AliAODVertex.h"
-#include "AliAODTrack.h"
+#include "AliAnalysisTaskSE.h"
-class AliAnalysisTaskSingleMu : public AliAnalysisTask {
+class TList;
+class AliMCParticle;
+class TTree;
+class TMap;
+class TObjArray;
+//class TAxis;
+class AliCFManager;
+
+class AliAnalysisTaskSingleMu : public AliAnalysisTaskSE {
public:
- AliAnalysisTaskSingleMu(const char *name = "AliAnalysisTaskSingleMu");
- virtual ~AliAnalysisTaskSingleMu() {}
+ AliAnalysisTaskSingleMu(const char *name = "AliAnalysisTaskSingleMu", Int_t fillTreeScaleDown = 0, Bool_t keepAll = kFALSE);
+ virtual ~AliAnalysisTaskSingleMu();
- virtual void ConnectInputData(Option_t *);
- virtual void CreateOutputObjects();
- virtual void Exec(Option_t *option);
- virtual void Terminate(Option_t *);
+ virtual void UserCreateOutputObjects();
+ virtual void UserExec(Option_t *option);
+ virtual void Terminate(Option_t *option);
+ virtual void NotifyRun();
+ virtual void FinishTaskOutput();
+
+ void SetTriggerClasses(TString triggerClasses =
+ "CINT1-B-NOPF CINT1-AC-NOPF CINT1-E-NOPF CMUS1-B-NOPF CMUS1-AC-NOPF CMUS1-E-NOPF CINT1B-ABCE-NOPF CINT1A-ABCE-NOPF CINT1C-ABCE-NOPF CMUS1B-ABCE-NOPF CMUS1A-ABCE-NOPF CMUS1C-ABCE-NOPF CINT5-B-NOPF CINT5-AC-NOPF CINT5-E-NOPF CMUS5-B-NOPF CMUS5-AC-NOPF CMUS5-E-NOPF CINT5B-ABCE-NOPF CINT5A-ABCE-NOPF CINT5C-ABCE-NOPF CMUS5B-ABCE-NOPF CMUS5A-ABCE-NOPF CMUS5C-ABCE-NOPF");
-protected:
- Bool_t MuonPassesCuts(AliAODTrack &muonTrack,
- TLorentzVector &lorVec,
- Int_t &trigMatch);
+ /// Get CORRFW manager
+ AliCFManager * GetCFManager() const { return fCFManager; }
+
+ enum {
+ kHvarPt, ///< Pt at vertex
+ // kHvarY, ///< Rapidity
+ kHvarEta, ///< Pseudo-Rapidity
+ kHvarPhi, ///< Phi
+ kHvarDCA, ///< DCA
+ kHvarVz, ///< Z vertex position
+ kHvarThetaZones, ///< Theta at absorber end (4 zones)
+ kHvarCharge, ///< Particle charge
+ kHvarMatchTrig, ///< Matching trigger
+ kHvarTrigClass, ///< Trigger classes
+ kHvarIsGoodVtx, ///< IP vertex correctly reconstructed
+ kHvarMotherType, ///< Mother type (MC only)
+ kHvarCentrality, ///< Centrality class
+ kNvars ///< THnSparse dimensions
+ };
- const AliAODVertex* GetVertex();
- void ResetHistos();
+ enum {
+ kStepReconstructed, ///< Reconstructed tracks
+ //kStepAcceptance, ///< Track in acceptance
+ kStepGeneratedMC, ///< Generated tracks (MC)
+ //kStepAcceptanceMC, ///< Track in acceptance (MC)
+ kNsteps ///< Number of steps
+ };
+
+ private:
-private:
AliAnalysisTaskSingleMu(const AliAnalysisTaskSingleMu&);
AliAnalysisTaskSingleMu& operator=(const AliAnalysisTaskSingleMu&);
- AliAODEvent *fAOD; //!< ESDevent object
- static const Int_t fgkNhistos = 1;
- static const Int_t fgkNTrigCuts = 4;
+ enum {
+ kHistoNeventsPerTrig, ///< Number of events per trigger
+ kHistoMuonMultiplicity, ///< Number of muons per event
+ kHistoEventVz, ///< Vertex z distribution for all events
+ kHistoNeventsPerRun, ///< Number of triggers per run (for check)
+ kHistoNmuonsPerRun, ///< Number of muons per run (for check)
+ kNsummaryHistos ///< Number of summary histograms
+ };
+
+ 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 MC
+ enum {
+ kHistoCheckVzMC, ///< Check vertex distribution for all vertex
+ kHistoCheckVzHasVtxMC, ///< Check vertex distribution for reco vertex
+ kHistoCheckVzNoPileupMC, ///< Check vertex distribution for non-pileup vtx
+ kNsummaryHistosMC ///< Summary histograms for MC
+ };
+
+ enum {
+ kHistoPtResolutionMC, ///< Pt resolution
+ kNhistoTypesMC ///< Number of MC histograms
+ };
+
+ 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
+ };
+
+ // Tree
+ enum {
+ kVarPx, ///< Px at vertex
+ kVarPy, ///< Py at vertex
+ kVarPz, ///< Pz at vertex
+ kVarPt, ///< Pt at vertex
+ kVarPxAtDCA, ///< Px at DCA
+ kVarPyAtDCA, ///< Py at DCA
+ kVarPzAtDCA, ///< Pz at DCA
+ kVarPtAtDCA, ///< Pt at DCA
+ kVarPxUncorrected, ///< Px at first chamber
+ kVarPyUncorrected, ///< Py at first chamber
+ kVarPzUncorrected, ///< Pz at first chamber
+ kVarPtUncorrected, ///< Pt at first chamber
+ kVarXUncorrected, ///< X at first chamber
+ kVarYUncorrected, ///< Y at at first chamber
+ kVarZUncorrected, ///< Z at at first chamber
+ kVarXatDCA, ///< X position at DCA
+ kVarYatDCA, ///< Y position at DCA
+ kVarDCA, ///< DCA
+ kVarEta, ///< Eta
+ kVarRapidity, ///< Rapidity
+ kVarCharge, ///< Charge
+ kVarRAtAbsEnd, ///< R at absorber end
+ // Global event info
+ kVarIPVx, ///< IP x position
+ kVarIPVy, ///< IP y position
+ kVarIPVz, ///< IP z position
+ kVarCentrality, ///< Event centrality
+ kNvarFloat
+ };
+
+ enum {
+ kVarMatchTrig, ///< Match trigger
+ kVarIsMuon, ///< Is muon
+ kVarIsGhost, ///< Is Ghost (trigger track not matching tracker)
+ kVarLocalCircuit, ///< Fired local circuit
+ // Global event info
+ kVarPassPhysicsSelection, ///< Pass physics selection (Requires ESD)
+ kVarNVtxContrib, ///< Vertex contributors
+ kVarNspdTracklets, ///< SPD tracklets
+ kVarIsPileup, ///< Pileup vertices
+ kNvarInt
+ };
+
+ enum {
+ // Global event info
+ kVarTrigMask, ///< Fires triggers mask
+ kNvarChar
+ };
- enum
- {
- kNoMatchTrig,
- kAllPtTrig,
- kLowPtTrig,
- kHighPtTrig
+ // Event ID
+ enum {
+ // Global event info
+ kVarBunchCrossNumber, ///< Bunch crossing number
+ kVarOrbitNumber, ///< Orbit number
+ kVarPeriodNumber, ///< Period number
+ kVarRunNumber, ///< Run number
+ kNvarUInt
};
+
+ // Tree MC
+ enum {
+ kVarPxMC, ///< Px from Kine
+ kVarPyMC, ///< Py from Kine
+ kVarPzMC, ///< Pz from Kine
+ kVarPtMC, ///< Pt from Kine
+ kVarEtaMC, ///< Eta from Kine
+ kVarRapidityMC, ///< Rapidity from Kine
+ kVarVxMC, ///< Particle production x vertex from Kine
+ kVarVyMC, ///< Particle production y vertex from Kine
+ kVarVzMC, ///< Particle production z vertex from Kine
+ kVarMotherPxMC, ///< Mother px from Kine
+ kVarMotherPyMC, ///< Mother py from Kine
+ kVarMotherPzMC, ///< Mother pz from Kine
+ kVarMotherEtaMC, ///< Mother eta from Kine
+ kVarMotherRapidityMC, ///< Mother rapidity from Kine
+ kVarMotherVxMC, ///< Mother production x vertex from Kine
+ kVarMotherVyMC, ///< Mother production y vertex from Kine
+ kVarMotherVzMC, ///< Mother production z vertex from Kine
+ // Global event info
+ kVarIPVxMC, ///< IP x position
+ kVarIPVyMC, ///< IP y position
+ kVarIPVzMC, ///< IP z position
+ kNvarFloatMC
+ };
+
+ enum {
+ kVarPdg, ///< PDG
+ kVarMotherPdg, ///< Mother PDG
+ kVarMotherType, ///< Mother type
+ kNvarIntMC
+ };
+
+ Int_t GetHistoIndex(Int_t histoTypeIndex, Int_t trigIndex = -1, Int_t srcIndex = -1);
+ Float_t GetBinThetaAbsEnd(Float_t RAtAbsEnd, Bool_t isTheta = kFALSE);
+ Float_t GetBinTrigClass(const Char_t* trigClass);
+
+ 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* mcParticle);
+
+ void Reset(Bool_t keepGlobal = kTRUE);
- TString trigName[fgkNTrigCuts]; //!< trigger cut names
+ void SetAxisLabel(TAxis* axis);
- TObjArray * fOutputContainer; //!< output data container
+ Int_t fFillTreeScaleDown; ///< Ntuple must be filled each fFillTreeScaleDown events
+ Bool_t fKeepAll; ///< Flag indicating to keep all info in tree
+ Int_t fkNvtxContribCut; ///< Number of cuts in vertex contributors
+ TObjArray* fTriggerClasses; ///< full trigger class name
+ AliCFManager* fCFManager; //!< Pointer to the CF manager
+ TList* fHistoList; //!< List of histograms for data
+ TList* fHistoListMC; //!< List of histograms for MC
+ TList* fHistoListQA; //!< List of QA histos
+ TTree* fTreeSingleMu; //!< Optional output Tree
+ Float_t* fVarFloat; //!< Reconstructed parameters float
+ Int_t* fVarInt; //!< Reconstructed parameters int
+ Char_t** fVarChar; //!< Reconstructed parameters string
+ UInt_t* fVarUInt; //!< Reconstructed parameters Uint
+ Float_t* fVarFloatMC; //!< MC parameters float
+ Int_t* fVarIntMC; //!< MC parameters int
+ TMap* fAuxObjects; //!< Map of vertex distribution per run
+ TString fDebugString; //!< Debug string
- TH2F *fVzVsPt[fgkNTrigCuts]; //!< Single muon spectrum
-
- ClassDef(AliAnalysisTaskSingleMu, 0); // Single muon analysis
+ ClassDef(AliAnalysisTaskSingleMu, 2); // Single muon analysis
};
+#endif