]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muondep/AliAnalysisTriggerScalers.h
move track selection differences from AOD and ESD to corresponding reader
[u/mrichter/AliRoot.git] / PWG / muondep / AliAnalysisTriggerScalers.h
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>
18 #include <set>
19 #include <map>
20
21 class AliTriggerBCMask;
22 class AliAnalysisTriggerScalerItem;
23 class TGraph;
24 class AliTriggerConfiguration;
25 class AliTriggerRunScalers;
26 class AliLHCData;
27 class AliTriggerScalersRecord;
28
29 class AliAnalysisTriggerScalers : public TObject
30 {
31 public:
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   
38   virtual ~AliAnalysisTriggerScalers();
39   
40   void CrossSectionUnit(const char* unit="ub") { fCrossSectionUnit=unit; fCrossSectionUnit.ToUpper(); }
41   TString CrossSectionUnit() const { return fCrossSectionUnit; }
42   
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);
47
48   void GetCTPObjects(Int_t runNumber, AliTriggerConfiguration*& tc, AliTriggerRunScalers*& trs, AliLHCData*& lhc) const;
49
50   Int_t GetFillNumberFromRunNumber(Int_t runNumber);
51   
52   void GetFillBoundaries(std::map<int, std::pair<int,int> >& fills);
53
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);
66
67   void GetPileUpFactor(Int_t runNumber, const char* triggerClassName, Double_t purity, Double_t& value, Double_t& error);
68   
69   void ShowPileUpFactors(const char* triggerClassName, Double_t purity=1.0);
70   
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   
81   void IntegratedLuminosity(const char* triggerList="",
82                             const char* lumiTrigger="C0TVX-B-NOPF-ALLNOTRD",
83                             Double_t lumiCrossSection=0.755*2000,
84                             const char* csvOutputFile="",
85                             const char sep='\t',
86                             const char* csUnit="ub");
87
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
91   static Double_t Mu(Double_t L0B, Double_t Nb);
92
93   Int_t NumberOfInteractingBunches(const AliLHCData& lhc, Int_t runNumber, Bool_t mainSat=kFALSE) const;
94
95   TGraph* PlotTrigger(const char* triggerClassName, const char* what);
96   
97   TGraph* PlotTriggerEvolution(const char* triggerClassName,
98                                const char* what,
99                                bool draw=kTRUE,
100                                double* mean=0x0,
101                                bool removeZero=kFALSE);
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;
114
115   void SetRunList(const std::vector<int>& runlist);
116   void SetRunList(const std::set<int>& runlist);
117   void SetRunList(Int_t runNumber);
118   void SetRunList(const char* runlist);
119   
120   void ShouldCorrectForPileUp(Bool_t flag) { fShouldCorrectForPileUp = flag; }
121   Bool_t ShouldCorrectForPileUp() const { return fShouldCorrectForPileUp; }
122
123   /// static methods -----
124   
125   static void ReadIntegers(const char* filename, std::vector<int>& integers, Bool_t resetVector=kTRUE);
126   
127   static void PrintIntegers(const std::vector<int>& integers, char sep = '\n',
128                             std::ostream& out = std::cout);
129   
130   
131 private:
132
133   Bool_t CheckRecord(const AliTriggerScalersRecord& record,
134                                                 UInt_t index,
135                                                 UInt_t refa,
136                                                 UInt_t refb,
137                      UInt_t timelapse) const;
138
139   
140 private:
141   std::vector<int> fRunList; // input run list
142   TString fOCDBPath; // OCDB path (default raw://)
143   Bool_t fShouldCorrectForPileUp; // whether or not to correct scalers by pile-up
144   TString fCrossSectionUnit; // cross-section unit (UB = microbarns) by default
145   
146   ClassDef(AliAnalysisTriggerScalers,3) // Utility class to play with scalers
147 };
148
149 class AliAnalysisTriggerScalerItem : public TObject
150 {
151 public:
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   
194 private:
195   AliAnalysisTriggerScalerItem(const AliAnalysisTriggerScalerItem& rhs);
196   AliAnalysisTriggerScalerItem& operator=(const AliAnalysisTriggerScalerItem& rhs);
197   
198 private:
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
210 };
211
212 #endif