fast pQCD calculations for hadron-induced processes
fastNLOTable.h
1 // Daniel Britzger
2 // DESY, 08.08.2013
3 #ifndef __fastNLOTable__
4 #define __fastNLOTable__
5 #include <fstream>
6 #include <istream>
7 #include <string>
8 #include <vector>
9 #include "speaker.h"
10 
11 #include "fastNLOCoeffBase.h"
12 #include "fastNLOCoeffAddFix.h"
13 #include "fastNLOCoeffAddFlex.h"
14 #include "fastNLOCoeffData.h"
15 #include "fastNLOCoeffMult.h"
16 #include "fastNLOConstants.h"
17 
18 
19 
20 class fastNLOTable {
21 
22  public:
23  fastNLOTable();
24  fastNLOTable(std::string filename);
25  virtual ~fastNLOTable();
26  fastNLOTable(const fastNLOTable&);
27 
28  virtual void ReadTable();
29  virtual void WriteTable();
30  virtual void WriteTable(std::string filename);
31  bool IsCompatible(const fastNLOTable& other) const;
32  bool IsCompatibleScenario(const fastNLOTable& other) const;
33  bool IsCatenable(const fastNLOTable& other) const;
34  bool IsCatenableScenario(const fastNLOTable& other) const;
35 
36  // --- function previously included in fastNLOBase
37  // header
38  void PrintHeader(int iprint) const;
39  bool IsCompatibleHeader(const fastNLOTable& other) const;
40  bool IsCatenableHeader(const fastNLOTable& other) const;
41 
42  // getter/setters
43  std::string GetFilename() const {return ffilename;}
44  void SetFilename(std::string name){ffilename=name;}
45 
46  int GetItabversion() const {return Itabversion;}
47  void SetItabversion(int version){Itabversion = version;}
48 
49  std::string GetScenName() const {return ScenName;}
50  void SetScenName(std::string name){ScenName = name;}
51 
52  int GetNmult() const;
53  int GetNcontrib() const;
54  int GetNdata() const;
55 
56  int GetOutputPrecision() const {return fPrecision;}
57  void SetOutputPrecision(int precision) {fPrecision = precision;}
58 
62 
64  unsigned int GetNumDiffBin() const {return NDim;}
65 
67 
69  double GetObsBinLoBound(unsigned int iObs, unsigned int iDim) const;
71  double GetObsBinUpBound(unsigned int iObs, unsigned int iDim) const;
73  std::vector < double > GetObsBinsLoBounds(unsigned int iDim) const;
75  std::vector < double > GetObsBinsUpBounds(unsigned int iDim) const;
77  double GetObsBinsLoBoundsMin(unsigned int iDim) const;
79  double GetObsBinsUpBoundsMax(unsigned int iDim) const;
81  std::vector < std::pair < double, double > > GetObsBinsBounds(unsigned int iDim) const;
83  int GetObsBinNumber(const std::vector < double >& vobs) const ;
85  int GetObsBinNumber(double var0) const ;
87  int GetObsBinNumber(double var0, double var1) const ;
89  int GetObsBinNumber(double var0, double var1, double var2) const ;
90 
92 
94  std::vector < std::pair < double, double > > GetDim0BinBounds() const;
96  std::vector < std::pair < double, double > > GetDim1BinBounds(unsigned int iDim0Bin) const;
98  std::vector < std::pair < double, double > > GetDim2BinBounds(unsigned int iDim0Bin, unsigned int iDim1Bin) const;
100  std::vector < std::pair < double, double > > GetObsBinDimBounds(unsigned int iObs) const;
102  std::pair < double, double > GetObsBinDimBounds(unsigned int iObs, unsigned int iDim) const;
104  unsigned int GetIDim0Bin(unsigned int iObs) const;
106  unsigned int GetIDim1Bin(unsigned int iObs) const;
108  unsigned int GetIDim2Bin(unsigned int iObs) const;
110  unsigned int GetNDim0Bins() const;
112  unsigned int GetNDim1Bins(unsigned int iDim0Bin) const;
114  unsigned int GetNDim2Bins(unsigned int iDim0Bin, unsigned int iDim1Bin) const;
116  int GetODim0Bin(double var0) const;
118  int GetODim1Bin(double var0, double var1) const;
120  int GetODim2Bin(double var0, double var1, double var2) const;
121  // DO NOT USE! DOES NOT WORK!
122  // unsigned int GetIDimBin(unsigned int iObs, unsigned int iDim) const;
123  // std::vector < std::pair < double, double > > GetBinBoundaries(int iDim0Bin, int iDim1Bin = -1, int iDim2Bin = -1);
124 
128 
130  int GetIDiffBin(int bin) const {return IDiffBin[bin];}
132  double GetBinSize(int bin) const {return BinSize[bin];};
134  std::vector < std::string > GetDimLabels() const {return DimLabel;};
136  std::string GetDimLabel(int iDim) const {return DimLabel[iDim];};
137 
141 
146  int GetINormFlag() const {return INormFlag;};
148  bool IsNorm() const {return INormFlag == 0 ? false : true;}
150  std::string GetDenomTable() const {return DenomTable;}
151 
155 
157  std::vector <std::string> GetScDescr() const;
158  void SetScDescr(std::vector <std::string> ScDescr);
159 
161  int GetIpublunits() const {return Ipublunits;}
162  void SetIpublunits(int unit){Ipublunits = unit;}
163 
165  double GetEcms() const {return Ecms;}
166  void SetEcms(double E) {Ecms = E;}
167 
169  int GetLoOrder() const {return ILOord;}
170  void SetLoOrder(int LOOrd);
171 
173  unsigned int GetNObsBin() const {return NObsBin;}
174  void SetNObsBin(int NObs);
175 
177  std::vector < std::vector <std::pair<double,double> > > GetBins() const {return Bin;};
178  void SetBins(std::vector < std::vector <std::pair<double,double> > >);
179 
181  std::vector < double > GetBinSize() const {return BinSize;};
182  void SetBinSize(std::vector < double >);
183 
184  // Erase observable bin; iObsIdx is the C++ array index to be removed and
185  // not the observable bin no. running from 1 to NObsBin
186  void EraseBinFromTable(unsigned int iObsIdx);
187  template<typename T> void EraseBin(std::vector<T>& v, unsigned int idx);
188 
189  // Multiply observable bin; iObsIdx is the C++ array index to be multiplied and
190  // not the observable bin no. running from 1 to NObsBin
191  void MultiplyBinInTable(unsigned int iObsIdx, double fact);
192  void MultiplyBinSize(unsigned int iObsIdx, double fact);
193  template<typename T> void MultiplyBin(std::vector<T>& v, unsigned int idx, double fact);
194 
195  void CatBinToTable(const fastNLOTable& other, unsigned int iObsIdx, unsigned int table_count);
196  void CatBin(const fastNLOTable& other, unsigned int iObsIdx, unsigned int table_count);
197 
200  std::string GetRivetId() const;
202  std::string GetXSDescr() const;
203  void SetDimLabel(std::string label, unsigned int iDim, bool IsDiff = true);
204  void SetNumDiffBin(int iDiff) {NDim=iDiff; DimLabel.resize(NDim); IDiffBin.resize(NDim);}
205 
206  //void Cat(const fastNLOCoeffBase& other);
207 
208 
212 
214  void PrintTableInfo(const int iprint = 0) const; // DEPRECATED, use PrintContributionSummary instead
215  void PrintContributionSummary(int iprint) const;
217  void PrintFastNLOTableConstants(const int iprint = 0) const; // DEPRECATED, use PrintContributionSummary instead
218  void PrintScenario(int iprint) const;
219  virtual void Print(int iprint) const;
220 
224  void MergeTable(const fastNLOTable& rhs, fastNLO::EMerge option=fastNLO::kMerge );
225  void MergeTables(const std::vector<fastNLOTable*>& tables, fastNLO::EMerge option=fastNLO::kMerge, double cutRMS=0 );
226  void AddTable(const fastNLOTable& rhs, fastNLO::EMerge option=fastNLO::kMerge);
227 
229  //int WriteCoeffTable(int no);
230  //int WriteCoeffTable(int no,ofstream* outstream );
231  //int WriteCoeffTableDividebyN(int no);
232  void DeleteAllCoeffTable();
233  //int CreateCoeffBase(int no);
234  int CreateCoeffTable(int no,fastNLOCoeffBase *newcoeff);
235  void CatenateTable(const fastNLOTable& other);
236  fastNLOCoeffBase* GetCoeffTable(int no) const;
240  fastNLOCoeffAddBase* GetReferenceTable(fastNLO::ESMOrder eOrder) const;
241 
242 
243 
244 private:
245  bool cmp(const double x1, const double x2) const;
246  bool cmp(const std::vector<double>& x1, const std::vector<double >& x2) const;
247  bool cmp(const std::vector<std::vector<double> >& x1,const std::vector<std::vector<double > >& x2) const;
248  bool cmp(const std::vector<std::vector<std::pair<double,double> > >& x1,const std::vector<std::vector<std::pair<double,double> > >& x2) const;
249 
250 protected:
251  // --- functions previously included in fastNLOBase
252  void PrintWelcomeMessage();
253  std::ostream* OpenFileWrite(bool compress=false);
254  std::istream* OpenFileRead();
255  //std::ofstream *OpenFileRewrite();
256  void WriteHeader(std::ostream& table);
257  int ReadHeader(std::istream& table);
258  void CloseFileWrite(std::ostream& table);
259  void CloseFileRead(std::istream& table);
260  //void CloseStream();
261 
262  std::string ffilename;
263  int fPrecision;
264  int Itabversion;
265  std::string ScenName;
266 
267  PrimalScream logger;
268  static bool fWelcomeOnce;
269  // ---- fastNLOBase end
270 
271 
272  void WriteScenario(std::ostream& table);
273  void ReadScenario(std::istream& table);
274  void ReadCoeffTables(std::istream& table, int nCoeff);
275  fastNLOCoeffBase* ReadRestOfCoeffTable(const fastNLOCoeffBase& cB, std::istream& table);
276 
277  std::vector < fastNLOCoeffBase* > fCoeff;
278  //fastNLOCoeffData* fData;
279 
280  double Ecms;
281  int ILOord;
282  int Ipublunits;
283  std::vector <std::string> ScDescript;
284 
285  // Unsigned int
286  unsigned int NObsBin;
287  unsigned int NDim;
288 
289  std::vector <std::string> DimLabel;
290  std::vector <int> IDiffBin;
291  // Every bin has a lower and upper bin boundary and belongs to a 'dimension'. In a point-wise differential measurement, the upper bin boundary is equal to the lower one.
292  std::vector < std::vector <std::pair<double,double> > > Bin;
293  std::vector <double> BinSize;
294 
295  // Contributions for normalization
296  int INormFlag;
297  std::string DenomTable;
298  std::vector <int> IDivLoPointer;
299  std::vector <int> IDivUpPointer;
300 
301 };
302 #endif
bool IsCatenableHeader(const fastNLOTable &other) const
Compare header with header of another table.
Definition: fastNLOTable.cc:2392
void DeleteAllCoeffTable()
Handle coefficient tables.
Definition: fastNLOTable.cc:65
unsigned int GetIDim2Bin(unsigned int iObs) const
Return bin no. in 3rd dim. for obs. bin iObs.
Definition: fastNLOTable.cc:1416
void AddTable(const fastNLOTable &rhs, fastNLO::EMerge option=fastNLO::kMerge)
&#39;merge&#39;
Definition: fastNLOTable.cc:844
int GetINormFlag() const
Definition: fastNLOTable.h:146
void MergeTables(const std::vector< fastNLOTable *> &tables, fastNLO::EMerge option=fastNLO::kMerge, double cutRMS=0)
&#39;merge&#39; (also supports &#39;median&#39; and &#39;mean&#39;)
Definition: fastNLOTable.cc:558
unsigned int GetNumDiffBin() const
Get dimensionality of calculation: single-, double-, or triple-differential.
Definition: fastNLOTable.h:64
int ReadHeader(std::istream &table)
read header of table (BlockA1)
Definition: fastNLOTable.cc:93
void PrintTableInfo(const int iprint=0) const
Print basic info about fastNLO table and its contributions.
Definition: fastNLOTable.cc:1916
int GetIDiffBin(int bin) const
Get if dimension is &#39;truly differential&#39; or bin-integrated (divided by bin width or not) ...
Definition: fastNLOTable.h:130
bool IsCompatibleHeader(const fastNLOTable &other) const
Compare header with header of another table.
Definition: fastNLOTable.cc:2367
double GetBinSize(int bin) const
Get BinSize for bin = BinSizeDim1 < * BinSizeDim2 >
Definition: fastNLOTable.h:132
Definition: speaker.h:96
std::vector< std::pair< double, double > > GetObsBinDimBounds(unsigned int iObs) const
Return std::vector of pairs with lower and upper bin bounds for all dimensions for a given obs...
Definition: fastNLOTable.cc:1312
std::string GetDimLabel(int iDim) const
Get dimension label for dimension iDim.
Definition: fastNLOTable.h:136
int GetLoOrder() const
get/set power of alpha_s for LO process
Definition: fastNLOTable.h:169
unsigned int GetNDim1Bins(unsigned int iDim0Bin) const
Return no. of bins in 2nd dimension for given bin in 1st dim.
Definition: fastNLOTable.cc:1477
std::istream * OpenFileRead()
open std::ifstream for reading table
Definition: fastNLOTable.cc:2304
std::vector< std::pair< double, double > > GetDim1BinBounds(unsigned int iDim0Bin) const
Return std::vector of pairs with unique bin bounds of 2nd dim. for &#39;iDim0Bin&#39; of 1st dim...
Definition: fastNLOTable.cc:1271
unsigned int GetNDim0Bins() const
Return no. of bins in 1st dimension.
Definition: fastNLOTable.cc:1467
void ReadCoeffTables(std::istream &table, int nCoeff)
Definition: fastNLOTable.cc:129
void MergeTable(const fastNLOTable &rhs, fastNLO::EMerge option=fastNLO::kMerge)
&#39;merge&#39;
Definition: fastNLOTable.cc:820
int GetIpublunits() const
get/set cross section units of published results (pb = 12, fb = 15, ...)
Definition: fastNLOTable.h:161
std::string GetDenomTable() const
Get filename of normalization table for INormFlag<0.
Definition: fastNLOTable.h:150
int GetObsBinNumber(const std::vector< double > &vobs) const
Return observable bin no. for std::vector of values obs0=var0,obs1=var1,...; -1 if outside range...
std::vector< double > GetObsBinsLoBounds(unsigned int iDim) const
Return std::vector of lower bin bounds in dim. iDim for all obs. bins.
Definition: fastNLOTable.cc:1177
std::vector< std::vector< std::pair< double, double > > > GetBins() const
get/set Bin vector
Definition: fastNLOTable.h:177
Definition: fastNLOCoeffBase.h:15
Definition: fastNLOCoeffData.h:8
double GetObsBinUpBound(unsigned int iObs, unsigned int iDim) const
Return upper bin bound for obs. bin iObs in dim. iDim.
Definition: fastNLOTable.cc:1162
void PrintHeader(int iprint) const
Print header variables (BlockA1) to screen.
Definition: fastNLOTable.cc:2420
std::ostream * OpenFileWrite(bool compress=false)
open std::ofstream for writing tables to ffilename
Definition: fastNLOTable.cc:2336
virtual void ReadTable()
Definition: fastNLOTable.cc:74
std::vector< double > GetObsBinsUpBounds(unsigned int iDim) const
Return std::vector of upper bin bounds in dim. iDim for all obs. bins.
Definition: fastNLOTable.cc:1193
void PrintWelcomeMessage()
Say hello to fastNLO user.
Definition: fastNLOTable.cc:2440
unsigned int GetNDim2Bins(unsigned int iDim0Bin, unsigned int iDim1Bin) const
Return no. of bins in 3rd dimension for given bins in 1st and 2nd dim.
Definition: fastNLOTable.cc:1499
fastNLOCoeffAddBase * GetReferenceTable(fastNLO::ESMOrder eOrder) const
Returns pointer to reference table if available, else returns NULL pointer.
Definition: fastNLOTable.cc:1122
bool IsNorm() const
Get normalization logical (def=false)
Definition: fastNLOTable.h:148
unsigned int GetIDim1Bin(unsigned int iObs) const
Return bin no. in 2nd dim. for obs. bin iObs.
Definition: fastNLOTable.cc:1374
std::vector< std::pair< double, double > > GetDim0BinBounds() const
Getters for multidimensional binning, here called DimBins.
Definition: fastNLOTable.cc:1261
int GetODim2Bin(double var0, double var1, double var2) const
Return bin no. in 3rd dim. for obs0=var0,obs1=var1,obs2=var2; -1 if outside range.
Definition: fastNLOTable.cc:1562
int GetODim0Bin(double var0) const
Return bin no. in 1st dim. for obs0=var0; -1 if outside range.
Definition: fastNLOTable.cc:1523
std::vector< std::pair< double, double > > GetDim2BinBounds(unsigned int iDim0Bin, unsigned int iDim1Bin) const
Return std::vector of pairs with unique bin bounds of 3rd dim. for &#39;iDim0Bin&#39; and &#39;iDim1Bin&#39; of 1st t...
Definition: fastNLOTable.cc:1291
virtual void WriteTable()
Definition: fastNLOTable.cc:178
void CloseFileWrite(std::ostream &table)
Definition: fastNLOTable.cc:2357
double GetObsBinsLoBoundsMin(unsigned int iDim) const
Return minimum value of all lower bin bounds for dim. iDim.
Definition: fastNLOTable.cc:1209
double GetObsBinLoBound(unsigned int iObs, unsigned int iDim) const
Getters for linear array of observable bins "ObsBin" running from 0->(NObsBin-1)
Definition: fastNLOTable.cc:1147
unsigned int GetIDim0Bin(unsigned int iObs) const
Return bin no. in 1st dim. for obs. bin iObs.
Definition: fastNLOTable.cc:1344
std::vector< std::string > GetDimLabels() const
Get vector of dimensions labels.
Definition: fastNLOTable.h:134
void PrintFastNLOTableConstants(const int iprint=0) const
Print (technical) constants of fastNLO table (use iprint) for level of details.
Definition: fastNLOTable.cc:1909
double GetEcms() const
get/set center-of-mass energy in units of GeV
Definition: fastNLOTable.h:165
double GetObsBinsUpBoundsMax(unsigned int iDim) const
Return maximum value of all upper bin bounds for dim. iDim.
Definition: fastNLOTable.cc:1227
std::vector< std::string > GetScDescr() const
get/set scenario description
Definition: fastNLOTable.cc:1679
Definition: fastNLOCoeffAddBase.h:57
std::vector< std::pair< double, double > > GetObsBinsBounds(unsigned int iDim) const
Return std::vector of pairs with lower and upper bin bounds in dim. iDim for all obs. bins.
Definition: fastNLOTable.cc:1245
void CloseFileRead(std::istream &table)
Definition: fastNLOTable.cc:2328
Definition: fastNLOTable.h:20
fastNLOCoeffData * GetDataTable() const
Returns pointer to data table if available, else returns NULL pointer.
Definition: fastNLOTable.cc:1110
unsigned int GetNObsBin() const
get/set no. of observable bins
Definition: fastNLOTable.h:173
int GetODim1Bin(double var0, double var1) const
Return bin no. in 2nd dim. for obs0=var0,obs1=var1; -1 if outside range.
Definition: fastNLOTable.cc:1542
void SetDimLabel(std::string label, unsigned int iDim, bool IsDiff=true)
Definition: fastNLOTable.cc:1036
std::string GetXSDescr() const
Get cross section from analysis description.
Definition: fastNLOTable.cc:1669
std::vector< double > GetBinSize() const
get/set BinSize vector
Definition: fastNLOTable.h:181
void WriteHeader(std::ostream &table)
write (or cout) hader using std::ostream
Definition: fastNLOTable.cc:217
std::string GetRivetId() const
Definition: fastNLOTable.cc:1654