fast pQCD calculations for hadron-induced processes
fastNLOCoefficients.h
1 #ifndef __fastNLOCoefficients__
2 #define __fastNLOCoefficients__
3 
4 #include <string>
5 #include <fstream>
6 #include <sstream>
7 #include <math.h>
8 #include <vector>
9 #include <iostream>
10 
11 #include "fastNLOConstants.h"
12 
13 
15 
16  friend class fastNLOTable;
17  friend class fastNLOCreate;
18 
19 public:
21  fastNLOCoefficients(int NObsBin, int iLOord);
22  int Read(std::istream *table);
23  int Write(std::ostream *table, int option = 0);
24  int Copy(fastNLOCoefficients* other);
25 
26  void StripWhitespace(std::string& s) const;
27 
28  // template<typename T> void ResizeFlexibleVector(std::vector<T>* v, std::vector<T>* nom);
29  // void ResizeFlexibleVector(std::vector<double >* v, std::vector<double >*nom ){ v->resize(nom->size());};
30 
31  void ResizeTable( std::vector<double >* v, int dim0 );
32  void ResizeTable( std::vector<std::vector<double > >* v, int dim0 , int dim1 );
33  void ResizeTable( std::vector<std::vector<double > >* v, int dim0 , int* dim1GetNxmaxFromDimI );
34  void ResizeTable( std::vector<std::vector<std::vector<double > > >* v, int dim0 , int* dim1GetNxmaxFromDimI, int dim2 );
35  void ResizeTable( std::vector<std::vector<std::vector<double > > >* v, int dim0 , int dim1, int dim2 );
36  void ResizeTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, int dim0 , int dim1, int dim2, int dim3 );
37  void ResizeTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, int dim0 , int dim1, int* dim2GetNxmaxFromDimI, int dim3 );
38  void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4 );
39  void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, int dim0 , int dim1, int dim2, int* dim3GetNxmaxFromDimI, int dim4 );
40  void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, int dim0 , int* dim1GetNxmaxFromDimI, int dim2, int dim3, int dim4 );
41  void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5 );
42  void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5, int dim6 );
43  void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int* dim5GetNxmaxFromDimI , int dim6 );
44 
45 
46  template<typename T> int ReadTable( std::vector<T>* v, std::istream *table );
47  int ReadTable( std::vector<double>* v, std::istream *table );
48 
49  template<typename T> int ReadFlexibleVector(std::vector<T>* v, std::istream* table, bool nProcLast=false);
50  int ReadFlexibleVector( std::vector<double >* v, std::istream *table , bool nProcLast = false );
51 
52  int WriteTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, std::ostream *table , bool DivByNevt=false , int Nevt=1 );
53  int WriteTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 );
54  int WriteTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 );
55  int WriteTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 );
56  int WriteTable( std::vector<std::vector<std::vector<double > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 );
57  int WriteTable( std::vector<std::vector<double > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 );
58  int WriteTable( std::vector<double >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 );
59 
60  int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, std::ostream *table , bool DivByNevt=false , int Nevt=1 , bool nProcLast = false );
61  int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false );
62  int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false );
63  int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false );
64  int WriteFlexibleTable( std::vector<std::vector<std::vector<double > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false );
65  int WriteFlexibleTable( std::vector<std::vector<double > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false );
66  int WriteFlexibleTable( std::vector<double >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false );
67 
68  void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* vSum, std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* vAdd, double w1 = 0, double w2 = 0 );
69  void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* vSum, std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* vAdd, double w1 = 1, double w2 = 1 );
70  void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* vSum, std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* vAdd, double w1 = 1, double w2 = 1 );
71  void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<double > > > >* vSum, std::vector<std::vector<std::vector<std::vector<double > > > >* vAdd, double w1 = 1, double w2 = 1 );
72  void AddTableToAnotherTable( std::vector<std::vector<std::vector<double > > >* vSum, std::vector<std::vector<std::vector<double > > >* vAdd, double w1 = 1, double w2 = 1 );
73  void AddTableToAnotherTable( std::vector<std::vector<double > >* vSum, std::vector<std::vector<double > >* vAdd, double w1 = 1, double w2 = 1 );
74  void AddTableToAnotherTable( std::vector<double >* vSum, std::vector<double >* vAdd, double w1 = 1, double w2 = 1 );
75 
76  void Print() const;
77 
78  int GetIRef() const {return IRef;}
79  int GetIDataFlag() const {return IDataFlag;}
80  int GetIAddMultFlag() const {return IAddMultFlag;}
81  int GetIContrFlag1() const {return IContrFlag1;}
82  int GetIContrFlag2() const {return IContrFlag2;}
83  int GetNScaleDep() const {return NScaleDep;}
84  int GetNpow() const {return Npow;}
85  long long int GetNevt() const {return Nevt;}
86  int GetNxmax(int Obsbin) const ;
87  int GetXIndex(int Obsbin,int x1bin,int x2bin =0) const ;
88 
89  void SetNlojetDefaults();
90  void SetIXsectUnits(int n){IXsectUnits = n;}
91  void SetIDataFlag(int n){IDataFlag = n;}
92  void SetIAddMultFlag(int n){IAddMultFlag = n;}
93  void SetIContrFlag1(int n){IContrFlag1 = n;}
94  void SetIContrFlag2(int n){IContrFlag2 = n;}
95  void SetNScaleDep(int n){NScaleDep = n;}
96  void SetNlojetDescr(){
97  CodeDescript.push_back("NLOJet++_4.1.3");
98  CodeDescript.push_back("Z. Nagy, Phys. Rev. Lett. 88, 122003 (2002),");
99  CodeDescript.push_back("Z. Nagy, Phys. Rev. D68, 094002 (2003).");
100  }
101 
102  void Add(fastNLOCoefficients* other);
103  bool IsLO() const {return IContrFlag1==1 && IContrFlag2==1;}
104  bool IsNLO() const {return IContrFlag1==1 && IContrFlag2==2;}
105  bool IsReference() const {return IRef>0;};
106  int GetTotalScalevars() const ;
107  int GetTotalScalenodes() const ;
108 
109  static const int DividebyNevt = 1; // shitty definition of a global constant
110 
111 private:
112  int GetScaledimfromvar(int scalevar) const;
113 
114 
115 protected:
116 
117  //fastNLOScenario *fScen;
118  int fNObsBins; // obtained from Scenario
119  int fILOord; // obtained from Scenario
120 
121  int IXsectUnits;
122  int IDataFlag;
123  int IAddMultFlag;
124  int IContrFlag1;
125  int IContrFlag2;
126  int NScaleDep;
127  // obsolete int NContrDescr;
128  std::vector < std::string > CtrbDescript;
129  // obsolete int NCodeDescr;
130  std::vector < std::string > CodeDescript;
131  int Nuncorrel;
132  std::vector < std::string > UncDescr;
133  int Ncorrel;
134  std::vector < std::string > CorDescr;
135  std::vector < double > Xcenter;
136  std::vector < double > Value;
137  std::vector < std::vector < double > > UncorLo;
138  std::vector < std::vector < double > > UncorHi;
139  std::vector < std::vector < double > > CorrLo;
140  std::vector < std::vector < double > > CorrHi;
141  int NErrMatrix;
142  std::vector < std::vector < double > > matrixelement;
143  std::vector < double > fact;
144  int IRef;
145  int IScaleDep;
146  unsigned long long int Nevt;
147  int Npow;
148  int NPDF;
149  std::vector < int > NPDFPDG;
150  int NPDFDim;
151  int NFragFunc;
152  std::vector < int > NFFPDG;
153  int NFFDim;
154  int NSubproc;
155  int IPDFdef1;
156  int IPDFdef2;
157  int IPDFdef3;
158  // Missing: linear PDF combinations for IPDFdef1=0
159  //std::vector < int > Nxtot1;
160  std::vector < double > Hxlim1;
161  std::vector < std::vector < double > > XNode1;
162  //std::vector < int > Nxtot2;
163  std::vector < double > Hxlim2;
164  std::vector < std::vector < double > > XNode2;
165  std::vector < int > Nztot;
166  std::vector < double > Hzlim;
167  std::vector < std::vector < double > > ZNode;
168  int NScales;
169  int NScaleDim;
170  std::vector < int > Iscale;
171  // obsolete std::vector < int > NscaleDescript;
172  std::vector < std::vector < std::string > > ScaleDescript;
173 
174 
175  // ------------------------ not flexible scale --------------------------- //
176  std::vector < int > Nscalevar;
177  std::vector < int > Nscalenode;
178  std::vector < std::vector < double > > ScaleFac;
179  std::vector < std::vector < std::vector < std::vector < double > > > > ScaleNode;
180  //std::vector < std::vector < std::vector < std::vector < double > > > > HScaleNode;
181  std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTilde;
182 
183  // --------------------------- flexible scale --------------------------- //
184  // ---- members to write to disc ---- //
185  // SigmaTilde [NObsBins] ['n' x-nodes] [n s1-Nodes] [n s2-Nodes] [nsubproc]
186  std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTildeMuIndep;
187  std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTildeMuFDep;
188  std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTildeMuRDep;
189  // SigmaRef [NObsBins] [nsubproc]
190  std::vector < std::vector < double > > SigmaRefMixed;
191  std::vector < std::vector < double > > SigmaRef_s1;
192  std::vector < std::vector < double > > SigmaRef_s2;
193  int NscalenodeScale1;
194  int NscalenodeScale2;
195  // ScaleNodeXY [ObsBin] [NscalenodeScaleX]
196  std::vector < std::vector < double > > ScaleNode1;
197  std::vector < std::vector < double > > ScaleNode2;
198  // std::vector < std::vector < double > > HScaleNode1;
199  // std::vector < std::vector < double > > HScaleNode2;
200 
201 };
202 
203 
204 template<typename T>
205 int fastNLOCoefficients::ReadFlexibleVector(std::vector<T>* v, std::istream* table, bool nProcLast){
206  int nn = 0;
207  int size = 0;
208  *table >> size; nn++;
209  v->resize(size);
210  for(unsigned int i0=0;i0<v->size();i0++){
211  nn += ReadFlexibleVector(&(v->at(i0)),table,nProcLast);
212  }
213  return nn;
214 };
215 
216 
217 // template<typename T>
218 // void fastNLOCoefficients::ResizeFlexibleVector(std::vector<T>* v, std::vector<T>* nom){
219 // v->resize(nom->size());
220 // for ( unsigned int i = 0 ; i<v->size() ; i++ ){
221 // ResizeFlexibleVector(&((*v)[i]),&((*nom)[i]));
222 // }
223 // };
224 
225 template<typename T> int fastNLOCoefficients::ReadTable( std::vector<T>* v, std::istream *table ){
226  int nn = 0;
227  for(unsigned int i0=0;i0<v->size();i0++){
228  nn+= ReadTable(&(*v)[i0],table);
229  }
230  return nn;
231 };
232 
233 #endif
int GetNxmax(const std::vector< double > *xGrid1, const std::vector< double > *xGrid2)
get maximum x-index
Definition: fastNLOCreate.cc:2676
Definition: fastNLOCreate.h:22
Definition: fastNLOCoefficients.h:14
virtual void ReadTable()
Definition: fastNLOTable.cc:74
int Read(std::istream *table)
Definition: fastNLOCoefficients.cc:20
void WriteTable()
Write fastNLO table to disk.
Definition: fastNLOCreate.cc:2911
int Write(std::ostream *table, int option=0)
Definition: fastNLOCoefficients.cc:369
Definition: fastNLOTable.h:20
int GetXIndex(const int &Obsbin, const int &x1bin, const int &x2bin) const
get x-index in case of two hadrons.
Definition: fastNLOCreate.cc:2655