]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muondep/AliAnalysisTriggerScalers.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWG / muondep / AliAnalysisTriggerScalers.h
CommitLineData
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
21class AliTriggerBCMask;
22class AliAnalysisTriggerScalerItem;
23class TGraph;
58b19963 24class AliTriggerConfiguration;
25class AliTriggerRunScalers;
26class AliLHCData;
27class AliTriggerScalersRecord;
2f331ac9 28
29class AliAnalysisTriggerScalers : public TObject
30{
31public:
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
fc38156b 69 void ShowPileUpFactors(const char* triggerClassName, Double_t purity=1.0);
70
58b19963 71 const std::vector<int>& GetRunList() const { return fRunList; }
72
73 Int_t GetTriggerInput(Int_t runNumber, const char* inputname);
74
75 AliAnalysisTriggerScalerItem* GetTriggerScaler(Int_t runNumber, const char* level, const char* triggerClassName);
76
77 TGraph* IntegratedLuminosityGraph(const char* triggerName, const char* triggerClassNameForPACEstimate="");
78
79 TGraph* IntegratedLuminosityGraph(Int_t runNumber, const char* triggerClassName, const char* triggerClassNameForPACEstimate="");
80
c665b011 81 void IntegratedLuminosity(const char* triggerList="",
e538121a 82 const char* lumiTrigger="C0TVX-B-NOPF-ALLNOTRD",
83 Double_t lumiCrossSection=0.755*2000,
c665b011 84 const char* csvOutputFile="",
e538121a 85 const char sep='\t',
86 const char* csUnit="ub");
2f331ac9 87
58b19963 88 TGraph* MakeGraph(const std::vector<int>& vx, const std::vector<int>& vex,
89 const std::vector<double>& vy, const std::vector<double>& vey);
90
81190958 91 static Double_t Mu(Double_t L0B, Double_t Nb);
92
fc38156b 93 Int_t NumberOfInteractingBunches(const AliLHCData& lhc, Int_t runNumber, Bool_t mainSat=kFALSE) const;
2f331ac9 94
58b19963 95 TGraph* PlotTrigger(const char* triggerClassName, const char* what);
96
2f331ac9 97 TGraph* PlotTriggerEvolution(const char* triggerClassName,
98 const char* what,
99 bool draw=kTRUE,
e538121a 100 double* mean=0x0,
101 bool removeZero=kFALSE);
58b19963 102
103 TGraph* PlotTriggerRatio(const char* triggerClassName1,
104 const char* what1,
105 const char* triggerClassName2,
106 const char* what2);
107
108 TGraph* PlotTriggerRatioEvolution(const char* triggerClassName1,
109 const char* what1,
110 const char* triggerClassName2,
111 const char* what2);
112
113 virtual void Print(Option_t* opt="") const;
2f331ac9 114
e538121a 115 void SetRunList(const std::vector<int>& runlist);
116 void SetRunList(const std::set<int>& runlist);
2f331ac9 117 void SetRunList(Int_t runNumber);
118 void SetRunList(const char* runlist);
58b19963 119
120 void ShouldCorrectForPileUp(Bool_t flag) { fShouldCorrectForPileUp = flag; }
121 Bool_t ShouldCorrectForPileUp() const { return fShouldCorrectForPileUp; }
2f331ac9 122
58b19963 123 /// static methods -----
c665b011 124
2f331ac9 125 static void ReadIntegers(const char* filename, std::vector<int>& integers, Bool_t resetVector=kTRUE);
58b19963 126
8ffd72d3 127 static void PrintIntegers(const std::vector<int>& integers, char sep = '\n',
2f331ac9 128 std::ostream& out = std::cout);
c665b011 129
e538121a 130
c665b011 131private:
e538121a 132
58b19963 133 Bool_t CheckRecord(const AliTriggerScalersRecord& record,
134 UInt_t index,
135 UInt_t refa,
136 UInt_t refb,
137 UInt_t timelapse) const;
2f331ac9 138
58b19963 139
2f331ac9 140private:
141 std::vector<int> fRunList; // input run list
2f331ac9 142 TString fOCDBPath; // OCDB path (default raw://)
58b19963 143 Bool_t fShouldCorrectForPileUp; // whether or not to correct scalers by pile-up
144 TString fCrossSectionUnit; // cross-section unit (UB = microbarns) by default
2f331ac9 145
58b19963 146 ClassDef(AliAnalysisTriggerScalers,3) // Utility class to play with scalers
2f331ac9 147};
148
149class AliAnalysisTriggerScalerItem : public TObject
150{
151public:
152 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)
153 : fRunNumber(runNumber),fLevel(level),fDipoleCurrent(dipoleCurrent), fTriggerClassName(triggerClassName), fValue(value), fNofRuns(1), fTriggerBCMask(mask), fDS(downscalingFactor), fDuration(duration)
154 {
155 }
156
157 AliAnalysisTriggerScalerItem(const char* triggerClassName, const char* level, ULong64_t value, AliTriggerBCMask* mask=0x0, Int_t downscalingFactor=1, time_t duration=0)
158 : fRunNumber(-1),fLevel(level),fDipoleCurrent("N/A"), fTriggerClassName(triggerClassName), fValue(value), fNofRuns(0), fTriggerBCMask(mask), fDS(downscalingFactor), fDuration(duration)
159 {
160 }
161
162 virtual Int_t Compare(const TObject* obj) const;
163
164 Int_t RunNumber() const { return fRunNumber; }
165
166 const char* TriggerClassName() const { return fTriggerClassName.Data(); }
167
168 const char* BCMaskName() const;
169
170 ULong64_t Value() const { return fValue; }
171
172 Double_t ValueCorrectedForDownscale() const { return fValue*DownscalingFactor(); }
173
174 Int_t DownscalingFactor() const { return fDS; }
175
176 Double_t Rate() const { return fDuration > 0 ? ValueCorrectedForDownscale() / fDuration : 0.0 ; }
177
178 void Increment(ULong64_t val) { fValue += val; ++fNofRuns; }
179
180 virtual void Print(Option_t* option = "") const;
181
182 const char* DipoleCurrent() const { return fDipoleCurrent; }
183
184 Int_t NofRuns() const { return fNofRuns; }
185
186 Bool_t IsDipoleON() const { return fDipoleCurrent.Contains("6000"); }
187
188 AliTriggerBCMask* BCMask() const { return fTriggerBCMask; }
189
190 const char* Level() const { return fLevel.Data(); }
191
192 time_t Duration() const { return fDuration; }
193
194private:
195 AliAnalysisTriggerScalerItem(const AliAnalysisTriggerScalerItem& rhs);
196 AliAnalysisTriggerScalerItem& operator=(const AliAnalysisTriggerScalerItem& rhs);
197
198private:
e538121a 199 Int_t fRunNumber; // run number for this scaler
200 TString fLevel; // L0, L1 or L2
201 TString fDipoleCurrent; // dipole current (A)
202 TString fTriggerClassName; // trigger class name for this scaler
203 ULong64_t fValue; // counter
204 Int_t fNofRuns; // number of runs corresponding to counter
205 AliTriggerBCMask* fTriggerBCMask; // pointer to BCMasks
206 Int_t fDS; // downscaling factor
207 time_t fDuration; // duration
208
209 ClassDef(AliAnalysisTriggerScalerItem,5) // class to hold information about one scaler for one trigger class
2f331ac9 210};
211
212#endif