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