]>
Commit | Line | Data |
---|---|---|
2f331ac9 | 1 | #ifndef ALIANALYSISTRIGGERSCALERS_H |
2 | #define ALIANALYSISTRIGGERSCALERS_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | // $Id$ | |
8 | ||
9 | #ifndef ROOT_TString | |
10 | # include "TString.h" | |
11 | #endif | |
12 | #ifndef ROOT_TObject | |
13 | # include "TObject.h" | |
14 | #endif | |
15 | #include "Riostream.h" | |
16 | ||
17 | #include <vector> | |
e538121a | 18 | #include <set> |
19 | #include <map> | |
2f331ac9 | 20 | |
21 | class AliTriggerBCMask; | |
22 | class AliAnalysisTriggerScalerItem; | |
23 | class TGraph; | |
58b19963 | 24 | class AliTriggerConfiguration; |
25 | class AliTriggerRunScalers; | |
26 | class AliLHCData; | |
27 | class AliTriggerScalersRecord; | |
2f331ac9 | 28 | |
29 | class AliAnalysisTriggerScalers : public TObject | |
30 | { | |
31 | public: | |
58b19963 | 32 | |
33 | AliAnalysisTriggerScalers(const std::vector<int>& runs, const char* source="raw://"); | |
34 | AliAnalysisTriggerScalers(const std::set<int>& runs, const char* source="raw://"); | |
35 | AliAnalysisTriggerScalers(Int_t runNumber, const char* source="raw://"); | |
36 | AliAnalysisTriggerScalers(const char* runlist, const char* source="raw://"); | |
37 | ||
2f331ac9 | 38 | virtual ~AliAnalysisTriggerScalers(); |
39 | ||
58b19963 | 40 | void CrossSectionUnit(const char* unit="ub") { fCrossSectionUnit=unit; fCrossSectionUnit.ToUpper(); } |
41 | TString CrossSectionUnit() const { return fCrossSectionUnit; } | |
42 | ||
81190958 | 43 | void DrawFills(Double_t ymin, Double_t ymax, Int_t color=5); |
44 | void DrawFill(Int_t run1, Int_t run2, double ymin, double ymax, const char* label,Int_t color=5); | |
45 | ||
46 | void DrawPeriods(Double_t ymin, Double_t ymax, Int_t color=5); | |
58b19963 | 47 | |
48 | void GetCTPObjects(Int_t runNumber, AliTriggerConfiguration*& tc, AliTriggerRunScalers*& trs, AliLHCData*& lhc) const; | |
2f331ac9 | 49 | |
c665b011 | 50 | Int_t GetFillNumberFromRunNumber(Int_t runNumber); |
58b19963 | 51 | |
52 | void GetFillBoundaries(std::map<int, std::pair<int,int> >& fills); | |
c665b011 | 53 | |
58b19963 | 54 | TString GetLHCPeriodFromRunNumber(Int_t runNumber) const; |
55 | ||
56 | void GetLHCPeriodBoundaries(std::map<std::string, std::pair<int,int> >& periods); | |
57 | ||
58 | void GetLuminosityTriggerAndCrossSection(Int_t runNumber, | |
59 | TString& lumiTriggerClassName, | |
60 | Double_t& lumiTriggerCrossSection, | |
61 | Double_t& lumiTriggerCrossSectionError) const; | |
62 | ||
63 | TObject* GetOCDBObject(const char* path, Int_t runNumber) const; | |
64 | ||
65 | Float_t GetPauseAndConfigCorrection(Int_t runNumber, const char* triggerClassName); | |
2f331ac9 | 66 | |
81190958 | 67 | void GetPileUpFactor(Int_t runNumber, const char* triggerClassName, Double_t purity, Double_t& value, Double_t& error); |
68 | ||
58b19963 | 69 | const std::vector<int>& GetRunList() const { return fRunList; } |
70 | ||
71 | Int_t GetTriggerInput(Int_t runNumber, const char* inputname); | |
72 | ||
73 | AliAnalysisTriggerScalerItem* GetTriggerScaler(Int_t runNumber, const char* level, const char* triggerClassName); | |
74 | ||
75 | TGraph* IntegratedLuminosityGraph(const char* triggerName, const char* triggerClassNameForPACEstimate=""); | |
76 | ||
77 | TGraph* IntegratedLuminosityGraph(Int_t runNumber, const char* triggerClassName, const char* triggerClassNameForPACEstimate=""); | |
78 | ||
c665b011 | 79 | void IntegratedLuminosity(const char* triggerList="", |
e538121a | 80 | const char* lumiTrigger="C0TVX-B-NOPF-ALLNOTRD", |
81 | Double_t lumiCrossSection=0.755*2000, | |
c665b011 | 82 | const char* csvOutputFile="", |
e538121a | 83 | const char sep='\t', |
84 | const char* csUnit="ub"); | |
2f331ac9 | 85 | |
58b19963 | 86 | TGraph* MakeGraph(const std::vector<int>& vx, const std::vector<int>& vex, |
87 | const std::vector<double>& vy, const std::vector<double>& vey); | |
88 | ||
81190958 | 89 | static Double_t Mu(Double_t L0B, Double_t Nb); |
90 | ||
91 | Int_t NumberOfInteractingBunches(const AliLHCData& lhc, Int_t runNumber) const; | |
2f331ac9 | 92 | |
58b19963 | 93 | TGraph* PlotTrigger(const char* triggerClassName, const char* what); |
94 | ||
2f331ac9 | 95 | TGraph* PlotTriggerEvolution(const char* triggerClassName, |
96 | const char* what, | |
97 | bool draw=kTRUE, | |
e538121a | 98 | double* mean=0x0, |
99 | bool removeZero=kFALSE); | |
58b19963 | 100 | |
101 | TGraph* PlotTriggerRatio(const char* triggerClassName1, | |
102 | const char* what1, | |
103 | const char* triggerClassName2, | |
104 | const char* what2); | |
105 | ||
106 | TGraph* PlotTriggerRatioEvolution(const char* triggerClassName1, | |
107 | const char* what1, | |
108 | const char* triggerClassName2, | |
109 | const char* what2); | |
110 | ||
111 | virtual void Print(Option_t* opt="") const; | |
2f331ac9 | 112 | |
e538121a | 113 | void SetRunList(const std::vector<int>& runlist); |
114 | void SetRunList(const std::set<int>& runlist); | |
2f331ac9 | 115 | void SetRunList(Int_t runNumber); |
116 | void SetRunList(const char* runlist); | |
58b19963 | 117 | |
118 | void ShouldCorrectForPileUp(Bool_t flag) { fShouldCorrectForPileUp = flag; } | |
119 | Bool_t ShouldCorrectForPileUp() const { return fShouldCorrectForPileUp; } | |
2f331ac9 | 120 | |
58b19963 | 121 | /// static methods ----- |
c665b011 | 122 | |
2f331ac9 | 123 | static void ReadIntegers(const char* filename, std::vector<int>& integers, Bool_t resetVector=kTRUE); |
58b19963 | 124 | |
c665b011 | 125 | static void PrintIntegers(const std::vector<int>& integers, const char sep = '\n', |
2f331ac9 | 126 | std::ostream& out = std::cout); |
c665b011 | 127 | |
e538121a | 128 | |
c665b011 | 129 | private: |
e538121a | 130 | |
58b19963 | 131 | Bool_t CheckRecord(const AliTriggerScalersRecord& record, |
132 | UInt_t index, | |
133 | UInt_t refa, | |
134 | UInt_t refb, | |
135 | UInt_t timelapse) const; | |
2f331ac9 | 136 | |
58b19963 | 137 | |
2f331ac9 | 138 | private: |
139 | std::vector<int> fRunList; // input run list | |
2f331ac9 | 140 | TString fOCDBPath; // OCDB path (default raw://) |
58b19963 | 141 | Bool_t fShouldCorrectForPileUp; // whether or not to correct scalers by pile-up |
142 | TString fCrossSectionUnit; // cross-section unit (UB = microbarns) by default | |
2f331ac9 | 143 | |
58b19963 | 144 | ClassDef(AliAnalysisTriggerScalers,3) // Utility class to play with scalers |
2f331ac9 | 145 | }; |
146 | ||
147 | class AliAnalysisTriggerScalerItem : public TObject | |
148 | { | |
149 | public: | |
150 | AliAnalysisTriggerScalerItem(Int_t runNumber, const char* level, const char* dipoleCurrent, const char* triggerClassName, ULong64_t value, AliTriggerBCMask* mask=0x0, Int_t downscalingFactor=1, time_t duration=0) | |
151 | : fRunNumber(runNumber),fLevel(level),fDipoleCurrent(dipoleCurrent), fTriggerClassName(triggerClassName), fValue(value), fNofRuns(1), fTriggerBCMask(mask), fDS(downscalingFactor), fDuration(duration) | |
152 | { | |
153 | } | |
154 | ||
155 | AliAnalysisTriggerScalerItem(const char* triggerClassName, const char* level, ULong64_t value, AliTriggerBCMask* mask=0x0, Int_t downscalingFactor=1, time_t duration=0) | |
156 | : fRunNumber(-1),fLevel(level),fDipoleCurrent("N/A"), fTriggerClassName(triggerClassName), fValue(value), fNofRuns(0), fTriggerBCMask(mask), fDS(downscalingFactor), fDuration(duration) | |
157 | { | |
158 | } | |
159 | ||
160 | virtual Int_t Compare(const TObject* obj) const; | |
161 | ||
162 | Int_t RunNumber() const { return fRunNumber; } | |
163 | ||
164 | const char* TriggerClassName() const { return fTriggerClassName.Data(); } | |
165 | ||
166 | const char* BCMaskName() const; | |
167 | ||
168 | ULong64_t Value() const { return fValue; } | |
169 | ||
170 | Double_t ValueCorrectedForDownscale() const { return fValue*DownscalingFactor(); } | |
171 | ||
172 | Int_t DownscalingFactor() const { return fDS; } | |
173 | ||
174 | Double_t Rate() const { return fDuration > 0 ? ValueCorrectedForDownscale() / fDuration : 0.0 ; } | |
175 | ||
176 | void Increment(ULong64_t val) { fValue += val; ++fNofRuns; } | |
177 | ||
178 | virtual void Print(Option_t* option = "") const; | |
179 | ||
180 | const char* DipoleCurrent() const { return fDipoleCurrent; } | |
181 | ||
182 | Int_t NofRuns() const { return fNofRuns; } | |
183 | ||
184 | Bool_t IsDipoleON() const { return fDipoleCurrent.Contains("6000"); } | |
185 | ||
186 | AliTriggerBCMask* BCMask() const { return fTriggerBCMask; } | |
187 | ||
188 | const char* Level() const { return fLevel.Data(); } | |
189 | ||
190 | time_t Duration() const { return fDuration; } | |
191 | ||
192 | private: | |
193 | AliAnalysisTriggerScalerItem(const AliAnalysisTriggerScalerItem& rhs); | |
194 | AliAnalysisTriggerScalerItem& operator=(const AliAnalysisTriggerScalerItem& rhs); | |
195 | ||
196 | private: | |
e538121a | 197 | Int_t fRunNumber; // run number for this scaler |
198 | TString fLevel; // L0, L1 or L2 | |
199 | TString fDipoleCurrent; // dipole current (A) | |
200 | TString fTriggerClassName; // trigger class name for this scaler | |
201 | ULong64_t fValue; // counter | |
202 | Int_t fNofRuns; // number of runs corresponding to counter | |
203 | AliTriggerBCMask* fTriggerBCMask; // pointer to BCMasks | |
204 | Int_t fDS; // downscaling factor | |
205 | time_t fDuration; // duration | |
206 | ||
207 | ClassDef(AliAnalysisTriggerScalerItem,5) // class to hold information about one scaler for one trigger class | |
2f331ac9 | 208 | }; |
209 | ||
210 | #endif |