]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/AliRsnMiniAnalysisTask.h
Removed obsolete classes + added cut set for kstar analysis
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnMiniAnalysisTask.h
CommitLineData
03d23846 1#ifndef ALIRSNMINIANALYSISTASK_H
2#define ALIRSNMINIANALYSISTASK_H
3
4//
5// Analysis task for 'mini' sub-package
6// Contains all definitions needed for running an analysis:
7// -- global event cut
8// -- a list of track cuts (any number)
9// -- definitions of output histograms
10// -- values to be computed.
11//
12
03d23846 13#include <TString.h>
14#include <TClonesArray.h>
15
6aaeb33c 16#include "AliAnalysisTaskSE.h"
17
03d23846 18#include "AliRsnEvent.h"
19#include "AliRsnMiniValue.h"
20#include "AliRsnMiniOutput.h"
21
22class TList;
6aaeb33c 23
03d23846 24class AliTriggerAnalysis;
25class AliRsnMiniEvent;
26class AliRsnCutSet;
27
28class AliRsnMiniAnalysisTask : public AliAnalysisTaskSE {
29
30public:
31
32 AliRsnMiniAnalysisTask();
c80938f5 33 AliRsnMiniAnalysisTask(const char *name, Bool_t isMC = kFALSE);
03d23846 34 AliRsnMiniAnalysisTask(const AliRsnMiniAnalysisTask &copy);
61f275d1 35 AliRsnMiniAnalysisTask &operator=(const AliRsnMiniAnalysisTask &copy);
03d23846 36 virtual ~AliRsnMiniAnalysisTask();
37
61f275d1 38 void UseMC(Bool_t yn = kTRUE) {fUseMC = yn;}
c80938f5 39 void UseCentrality(const char *type) {fUseCentrality = kTRUE; fCentralityType = type; fCentralityType.ToUpper();}
1cdc3671 40 void SetUseCentralityPatch(Bool_t isAOD049) {fUseAOD049CentralityPatch = isAOD049;}
c80938f5 41 void UseMultiplicity(const char *type) {fUseCentrality = kFALSE; fCentralityType = type; fCentralityType.ToUpper();}
caef2e3c 42 void UseContinuousMix() {fContinuousMix = kTRUE;}
43 void UseBinnedMix() {fContinuousMix = kFALSE;}
03d23846 44 void SetNMix(Int_t nmix) {fNMix = nmix;}
45 void SetMaxDiffMult (Double_t val) {fMaxDiffMult = val;}
46 void SetMaxDiffVz (Double_t val) {fMaxDiffVz = val;}
47 void SetMaxDiffAngle(Double_t val) {fMaxDiffAngle = val;}
48 void SetEventCuts(AliRsnCutSet *cuts) {fEventCuts = cuts;}
61f275d1 49 void SetMixPrintRefresh(Int_t n) {fMixPrintRefresh = n;}
03d23846 50 Int_t AddTrackCuts(AliRsnCutSet *cuts);
6aaeb33c 51 TClonesArray *Outputs() {return &fHistograms;}
52 TClonesArray *Values() {return &fValues;}
61f275d1 53
6aaeb33c 54 virtual void UserCreateOutputObjects();
61f275d1 55 virtual void UserExec(Option_t *);
56 virtual void Terminate(Option_t *);
6aaeb33c 57 virtual void FinishTaskOutput();
61f275d1 58
03d23846 59 Int_t ValueID(AliRsnMiniValue::EType type, Bool_t useMC = kFALSE);
61f275d1 60 Int_t CreateValue(AliRsnMiniValue::EType type, Bool_t useMC = kFALSE);
03d23846 61 AliRsnMiniOutput *CreateOutput(const char *name, AliRsnMiniOutput::EOutputType type, AliRsnMiniOutput::EComputation src);
62 AliRsnMiniOutput *CreateOutput(const char *name, const char *outType, const char *compType);
61f275d1 63
03d23846 64private:
65
03d23846 66 Char_t CheckCurrentEvent();
45aa62b9 67 void FillMiniEvent(Char_t evType);
3dced4f8 68 Double_t ComputeAngle();
03d23846 69 Double_t ComputeCentrality(Bool_t isESD);
1cdc3671 70 Double_t ApplyCentralityPatchAOD049();
03d23846 71 void FillTrueMotherESD(AliRsnMiniEvent *event);
72 void FillTrueMotherAOD(AliRsnMiniEvent *event);
73 void StoreTrueMother(AliRsnMiniPair *pair, AliRsnMiniEvent *event);
caef2e3c 74 Bool_t EventsMatch(AliRsnMiniEvent *event1, AliRsnMiniEvent *event2);
03d23846 75
c80938f5 76 Bool_t fUseMC; // use or not MC info
03d23846 77 Int_t fEvNum; //! absolute event counter
78 Bool_t fUseCentrality; // if true, use centrality for event, otherwise use multiplicity
79 TString fCentralityType; // definition used to choose what centrality or multiplicity to use
1cdc3671 80 Bool_t fUseAOD049CentralityPatch; //flag to enable AOD049 centrality patch
61f275d1 81
caef2e3c 82 Bool_t fContinuousMix; // mixing --> technique chosen (continuous or binned)
03d23846 83 Int_t fNMix; // mixing --> required number of mixes
84 Double_t fMaxDiffMult; // mixing --> max difference in multiplicity
85 Double_t fMaxDiffVz; // mixing --> max difference in Vz of prim vert
86 Double_t fMaxDiffAngle; // mixing --> max difference in reaction plane angle
61f275d1 87
03d23846 88 TList *fOutput; // output list
89 TClonesArray fHistograms; // list of histogram definitions
90 TClonesArray fValues; // list of values to be computed
91 TH1F *fHEventStat; // histogram of event statistics
955ca046 92 TH1F *fHAEventsVsMulti; // histogram of event statistics
61f275d1 93
03d23846 94 AliRsnCutSet *fEventCuts; // cuts on events
95 TObjArray fTrackCuts; // list of single track cuts
96 AliRsnEvent fRsnEvent; //! interface object to the event
c80938f5 97 TTree *fEvBuffer; //! mini-event buffer
03d23846 98 AliTriggerAnalysis *fTriggerAna; //! trigger analysis
c80938f5 99 AliESDtrackCuts *fESDtrackCuts; //! quality cut for ESD tracks
6aaeb33c 100 AliRsnMiniEvent *fMiniEvent; //! mini-event cursor
caef2e3c 101 Bool_t fBigOutput; // flag if open file for output list
61f275d1 102 Int_t fMixPrintRefresh; // how often info in mixing part is printed
03d23846 103
955ca046 104 ClassDef(AliRsnMiniAnalysisTask, 5); // AliRsnMiniAnalysisTask
03d23846 105};
106
107inline Int_t AliRsnMiniAnalysisTask::CreateValue(AliRsnMiniValue::EType type, Bool_t useMC)
108{
109//
110// Create a new value in the task,
111// and returns its ID, which is needed for setting up histograms.
112// If that value was already initialized, returns its ID and does not recreate it.
113//
114
115 Int_t valID = ValueID(type, useMC);
116 if (valID >= 0 && valID < fValues.GetEntries()) {
117 AliInfo(Form("Value '%s' is already created in slot #%d", AliRsnMiniValue::ValueName(type, useMC), valID));
118 } else {
119 valID = fValues.GetEntries();
120 AliInfo(Form("Creating value '%s' in slot #%d", AliRsnMiniValue::ValueName(type, useMC), valID));
121 new (fValues[valID]) AliRsnMiniValue(type, useMC);
122 }
61f275d1 123
03d23846 124 return valID;
125}
126
127inline Int_t AliRsnMiniAnalysisTask::ValueID(AliRsnMiniValue::EType type, Bool_t useMC)
128{
129//
130// Searches if a value computation is initialized
131//
132
133 const char *name = AliRsnMiniValue::ValueName(type, useMC);
134 TObject *obj = fValues.FindObject(name);
61f275d1 135 if (obj)
136 return fValues.IndexOf(obj);
03d23846 137 else
138 return -1;
139}
140
61f275d1 141inline AliRsnMiniOutput *AliRsnMiniAnalysisTask::CreateOutput
03d23846 142(const char *name, AliRsnMiniOutput::EOutputType type, AliRsnMiniOutput::EComputation src)
143{
144//
145// Create a new histogram definition in the task,
146// which is then returned to the user for its configuration
147//
148
61f275d1 149 Int_t n = fHistograms.GetEntries();
03d23846 150 AliRsnMiniOutput *newDef = new (fHistograms[n]) AliRsnMiniOutput(name, type, src);
61f275d1 151
03d23846 152 return newDef;
153}
154
61f275d1 155inline AliRsnMiniOutput *AliRsnMiniAnalysisTask::CreateOutput
03d23846 156(const char *name, const char *outType, const char *compType)
157{
158//
159// Create a new histogram definition in the task,
160// which is then returned to the user for its configuration
161//
162
61f275d1 163 Int_t n = fHistograms.GetEntries();
03d23846 164 AliRsnMiniOutput *newDef = new (fHistograms[n]) AliRsnMiniOutput(name, outType, compType);
61f275d1 165
03d23846 166 return newDef;
167}
168#endif