1 #ifndef ALIANALYSISTASKMUMU_H
2 #define ALIANALYSISTASKMUMU_H
5 // AliAnalysisTaskMuMu : base class for mu pairs analysis
6 // Contains common things for ESD-based and AOD-based analysis
8 // author: L. Aphecetche (Subatech)
11 #ifndef ALIANALYSISTASKSE_H
12 # include "AliAnalysisTaskSE.h"
26 class AliAnalysisMuMuBinning;
27 class AliCounterCollection;
28 class AliMergeableCollection;
29 class AliMuonTrackCuts;
30 class AliMuonEventCuts;
36 class AliAnalysisTaskMuMu : public AliAnalysisTaskSE
59 kChi2MatchTrigger=BIT(17)
71 kEventNOTZEROPILEUP=BIT(8),
72 kEventOFFLINEMUL1=BIT(9),
74 kEventOFFLINEMUL2=BIT(11),
77 kEventREJECTED=BIT(18),
81 AliAnalysisTaskMuMu();
82 AliAnalysisTaskMuMu(Bool_t fromESD, TList* triggerClassesToConsider, const char* beamYear=0x0, TArrayF* centralities=0x0);
83 AliAnalysisTaskMuMu(Bool_t fromESD, const char* beamYear, TArrayF* centralities=0x0);
84 virtual ~AliAnalysisTaskMuMu();
86 void AddBin(const char* particle, const char* type,
87 Double_t xmin, Double_t xmax,
90 const char* flavour="");
92 void AddBin(const char* particle, const char* type,
93 Double_t xmin, Double_t xmax,
94 const char* flavour="") { AddBin(particle,type,xmin,xmax,TMath::Limits<Double_t>::Max(),TMath::Limits<Double_t>::Max(),flavour); }
96 void CreateMesh(const char* particle, const char* type1, const char* type2, const char* flavour="", Bool_t remove12=kFALSE);
98 virtual void AddEventCut(const char* cutName, UInt_t mask);
100 virtual void AddPairCut(const char* cutName, UInt_t maskForOneOrBothTrack, UInt_t maskForTrackPair=0);
102 virtual void AddSingleCut(const char* cutName, UInt_t mask);
104 virtual void DisableHistograms(const char* pattern="*");
106 AliMuonEventCuts* EventCuts() const;
108 virtual void FinishTaskOutput();
112 Bool_t IsHistogrammingDisabled() const;
114 virtual Bool_t IsHistogramDisabled(const char* hname) const;
116 virtual void NotifyRun();
118 virtual void Print(Option_t* opt="") const;
120 virtual void ShouldSeparatePlusAndMinus(Bool_t value) { fShouldSeparatePlusAndMinus = value; }
122 virtual Bool_t ShouldSeparatePlusAndMinus() const { return fShouldSeparatePlusAndMinus; }
124 virtual void Terminate(Option_t *);
126 void UseBackgroundTriggers(Bool_t value=kTRUE) { fUseBackgroundTriggers = value; }
128 void UserCreateOutputObjects();
130 virtual void UserExec(Option_t* opt);
132 AliMuonTrackCuts* MuonTrackCuts();
134 void SetMuonTrackCuts(const AliMuonTrackCuts& trackCuts);
136 class PairCut : public TObject {
138 PairCut(const char* name="", UInt_t maskForOneOrBothTrack=0, UInt_t maskForTrackPair=0)
139 : TObject(), fName("p"),fMaskForOneOrBothTrack(maskForOneOrBothTrack),fMaskForTrackPair(maskForTrackPair)
143 const char* GetName() const { return fName.Data(); }
144 UInt_t MaskForOneOrBothTrack() const { return fMaskForOneOrBothTrack; }
145 UInt_t MaskForTrackPair() const { return fMaskForTrackPair; }
146 void Print(Option_t* opt="") const;
149 TString fName; // name of the cut
150 UInt_t fMaskForOneOrBothTrack; // mask for the cut that at least of the two tracks should match
151 UInt_t fMaskForTrackPair; // mask for the cut both tracks should match
153 ClassDef(AliAnalysisTaskMuMu::PairCut,1); // a simple wrapper for two masks
159 virtual void FillHistos(const char* physics, const char* triggerClassName, const char* centrality);
161 void FillHistosForTrack(const char* physics, const char* triggerClassName, const char* centrality, const AliVParticle& track, Int_t trackIndex);
163 void FillHistogramCollection(const char* physics, const char* triggerClassName);
165 void FillEventHistos(const char* physics, const char* triggerClassName,
166 const char* centrality);
168 void Fill(const char* eventtype, TObjString* tname, const char* centrality, float fcent);
172 void AssertHistogramCollection(const char* physics, const char* triggerClassName);
174 void BeautifyHistos();
176 void CreateMinvHistograms(const char* physics, const char* triggerClassName);
178 void CreateHisto(TObjArray* array,
180 const char* triggerClassName,
181 const char* hname, const char* htitle,
182 Int_t nbinsx, Double_t xmin, Double_t xmax,
183 Int_t nbinsy, Double_t ymin, Double_t ymax) const;
185 void CreateEventHisto(const char* physics,
186 const char* triggerClassName,
187 const char* hname, const char* htitle,
188 Int_t nbinsx, Double_t xmin, Double_t xmax,
189 Int_t nbinsy=0, Double_t ymin=0.0, Double_t ymax=0.0) const;
191 void CreateSingleHisto(const char* physics,
192 const char* triggerClassName,
193 const char* hname, const char* htitle,
194 Int_t nbinsx, Double_t xmin, Double_t xmax,
195 Int_t nbinsy=0, Double_t ymin=0.0, Double_t ymax=0.0,
196 Bool_t separatePlusAndMinus=kFALSE) const;
198 void CreatePairHisto(const char* physics,
199 const char* triggerClassName,
200 const char* hname, const char* htitle,
201 Int_t nbinsx, Double_t xmin, Double_t xmax,
202 Int_t nbinsy=0, Double_t ymin=0.0, Double_t ymax=0.0) const;
204 void DefineCentralityClasses(TArrayF* centralities);
206 UInt_t GetTriggerInputBitMaskFromInputName(const char* inputName) const;
208 TH1* Histo(const char* physics, const char* histoname);
210 TH1* Histo(const char* physics, const char* triggerClassName, const char* histoname);
212 TH1* Histo(const char* physics, const char* triggerClassName, const char* what, const char* histoname);
214 TH1* Histo(const char* physics, const char* triggerClassName, const char* cent, const char* what, const char* histoname);
216 Double_t MuonMass2() const;
218 const char* DefaultCentralityName() const;
220 const char* CentralityName(Double_t centrality) const;
222 Bool_t HasMC() const { return fHasMC; }
224 void ComputeTrackMask(const AliVParticle& track, Int_t trackIndex);
226 UInt_t GetEventMask() const;
228 void GetPairMask(const AliVParticle& t1, const AliVParticle& t2,
229 Int_t trackIndex1, Int_t trackIndex2,
230 UInt_t& mask1, UInt_t& mask2,
231 UInt_t& mask12) const;
233 UInt_t GetTrackMask(Int_t trackIndex) const;
235 Double_t GetTrackTheta(const AliVParticle& particle) const;
237 Bool_t PairRapidityCut(const AliVParticle& t1, const AliVParticle& t2) const;
239 /* methods prefixed with EA should really not exist at all. They are there
240 only because the some of our base interfaces are shamelessly incomplete or
244 void EAComputeTrackMasks();
246 Int_t EAGetNumberOfMuonTracks() const;
248 Int_t EAGetNumberOfSelectMuonTracks() const;
250 Double_t EAGetTrackDCA(const AliVParticle& particle) const;
252 Bool_t EAGetTZEROFlags(Bool_t& backgroundFlag, Bool_t& pileupFlag, Bool_t& satelliteFlag) const;
254 Bool_t AtLeastOneMuonTrigger(const TString& firedTriggerClasses) const;
256 Bool_t AtLeastOneEmcalTrigger(const TString& firedTriggerClasses) const;
258 Bool_t AtLeastOneMBTrigger(const TString& firedTriggerClasses) const;
260 Bool_t TriggerSBACECondition(const TString& triggerName) const;
262 void DefineDefaultBinning();
264 AliVEvent* Event() const;
268 AliMergeableCollection* fHistogramCollection; //! collection of histograms
269 AliCounterCollection* fEventCounters; //! event counters
271 AliMuonTrackCuts* fMuonTrackCuts; //! common cuts for muon tracks (from Diego)
272 TArrayI fPrecomputedTrackMasks; //! track masks
274 Bool_t fIsFromESD; // whether we read from ESD or AOD
275 Bool_t fShouldSeparatePlusAndMinus; // whether or not to histogram mu+ and mu- separately
276 TString fBeamYear; // beam and year
278 TObjArray* fSingleTrackCutNames; // cut on single tracks (array of TObjString)
279 TObjArray* fPairTrackCutNames; // cut on track pairs (array of TObjString)
280 TObjArray* fCentralityNames; // names to create histograms
281 TObjArray* fEventCutNames; // cut at event level (array of TObjString)
283 Bool_t fUseBackgroundTriggers; // whether or not we should use the ACE triggers
285 std::map<std::string,int> fTriggerInputBitMap; // map of L0 input name to bit
287 AliAnalysisMuMuBinning* fBinning; // binning for particles
289 TList* fHistogramToDisable; // list of regexp of histo name to disable
291 TObjArray* fBinArray; //! cache for the bins
292 Bool_t fHasMC; //! current event has MC information
294 mutable AliMuonEventCuts* fEventCuts; // common cuts for muon events (from Diego)
296 AliAnalysisTaskMuMu(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
297 AliAnalysisTaskMuMu& operator=(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
299 ClassDef(AliAnalysisTaskMuMu,24) // a class to analyse muon pairs (and single also ;-) )