]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STARLIGHT/starlight/include/.svn/text-base/inputParameters.h.svn-base
STARLIGHT code and interface
[u/mrichter/AliRoot.git] / STARLIGHT / starlight / include / .svn / text-base / inputParameters.h.svn-base
diff --git a/STARLIGHT/starlight/include/.svn/text-base/inputParameters.h.svn-base b/STARLIGHT/starlight/include/.svn/text-base/inputParameters.h.svn-base
new file mode 100644 (file)
index 0000000..e599eac
--- /dev/null
@@ -0,0 +1,409 @@
+///////////////////////////////////////////////////////////////////////////
+//
+//    Copyright 2010
+//
+//    This file is part of starlight.
+//
+//    starlight is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    starlight is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with starlight. If not, see <http://www.gnu.org/licenses/>.
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// File and Version Information:
+// $Rev::                             $: revision of last commit
+// $Author::                          $: author of last commit
+// $Date::                            $: date of last commit
+//
+// Description:
+//
+//
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+#ifndef INPUTPARAMETERS_H
+#define INPUTPARAMETERS_H
+
+
+#include "starlightconstants.h"
+#include "inputParser.h"
+#include "singleton.h"
+#include <string>
+#include <ostream>
+#include <vector>
+#include <sstream>
+
+class parameterbase;
+
+
+class parameterlist
+{
+public:
+
+    parameterlist() : _parameters(0) {}
+
+    void add(parameterbase* p) {
+        _parameters.push_back(p);
+    }
+
+    // Returns a string with a key of the current state of the parameter list
+    // only
+    inline std::string validationKey();
+    
+
+private:
+
+    std::vector<parameterbase*> _parameters;
+
+};
+
+// Base class for parameters, needed to keep a list of parameters
+class parameterbase
+{
+public:
+
+    // Add this to parameter list
+    parameterbase()
+    {
+        _parameters.add(this);
+    }
+    virtual std::string validationkey() = 0;
+
+    template<typename T>
+    std::string toString(T v)
+    {
+        std::stringstream s;
+        s << v;
+        return s.str();
+    }
+    inline friend std::ostream& operator<<(std::ostream& os, const parameterbase& par);
+    // List of all parameters
+    static parameterlist _parameters;
+
+
+   
+};
+// Need to init the static variable
+// parameterlist parameterbase::_parameters;
+
+
+// The actual parameter class
+// validate parameter specifies if the parameter should be a part of the validity check of the current parameters
+template<typename T, bool validate>
+class parameter : public parameterbase
+{
+public:
+
+    // Constructor
+    parameter(const std::string &name, T value, bool required = true) :parameterbase(),_name(name), _value(value), _validate(validate), _required(required) {}
+
+//     T operator()() const {
+//         return _value;
+//     }
+
+    parameter &operator=(T v) { _value = v; return *this;}
+    T* ptr() const {
+        return const_cast<T*>(&_value);
+    }
+    
+    T value() const { return _value; }
+    
+    std::string name() const { return _name;}
+    
+    bool required() const { return _required; }
+    
+    void setValue(T v) { _value = v; }
+    
+    void setName(std::string name) { _name = name; }
+    
+    void setRequired(bool r) { _required = r; }
+    
+    // Validation key for this parameter
+    std::string validationkey()
+    {
+        return (_validate ? _name + ":" + toString(_value) + "-" : std::string(""));
+    }
+
+    template<typename S, bool v>
+    inline friend std::ostream& operator<<(std::ostream& os, const parameter<S,v>& par);
+
+
+
+private:
+    std::string _name;
+
+    T _value; // Value
+    bool _validate; // true if a change in the parameter invalidates x-sec tables
+    bool _required; // true if this is required option.
+
+    parameter();
+};
+
+template<typename S, bool v>
+std::ostream& operator<<(std::ostream& os, const parameter<S,v>& par)
+{
+    os << par._value;
+    return os;
+}
+
+std::ostream& operator<<(std::ostream& os, const parameterbase& par)
+{
+    os << par._parameters.validationKey(); 
+    return os;
+}
+std::string parameterlist::validationKey()
+{
+    std::stringstream s;
+    for(unsigned int i = 0; i < _parameters.size(); ++i)
+    {
+        s << _parameters[i]->validationkey(); // Will print names and values of validation parameters
+    }
+    return s.str();
+}
+
+class inputParameters {
+
+private:
+       // inputParameters is now a singleton
+       friend class Singleton<inputParameters>;
+       inputParameters();
+public:
+
+       ~inputParameters();
+
+       bool init();
+       bool configureFromFile(const std::string &configFileName = "./config/slight.in");
+
+       unsigned int beam1Z                () const { return _beam1Z.value();                 }  ///< returns atomic number of beam particle 1
+       unsigned int beam1A                () const { return _beam1A.value();                 }  ///< returns atomic mass number of beam particle 1
+       unsigned int beam2Z                () const { return _beam2Z.value();                 }  ///< returns atomic number of beam particle 2
+       unsigned int beam2A                () const { return _beam2A.value();                 }  ///< returns atomic mass number of beam particle 2
+       double       beamLorentzGamma      () const { return _beamLorentzGamma;       }  ///< returns Lorentz gamma factor of both beams in beam CMS frame
+       double       beam1LorentzGamma     () const { return _beam1LorentzGamma.value();      }  ///< returns Lorentz gamma factor of beam 1 in collider frame
+       double       beam2LorentzGamma     () const { return _beam2LorentzGamma.value();      }  ///< returns Lorentz gamma factor of beam 2 in collider frame
+       double       maxW                  () const { return _maxW.value();                   }  ///< returns maximum mass W of produced hadronic system [GeV/c^2]
+       double       minW                  () const { return _minW.value();                   }  ///< returns minimum mass W of produced hadronic system [GeV/c^2]
+       unsigned int nmbWBins              () const { return _nmbWBins.value();               }  ///< returns number of W bins in lookup table
+       double       maxRapidity           () const { return _maxRapidity.value();            }  ///< returns maximum absolute value of rapidity
+       unsigned int nmbRapidityBins       () const { return _nmbRapidityBins.value();        }  ///< returns number of rapidity bins in lookup table
+       bool         ptCutEnabled          () const { return _ptCutEnabled.value();           }  ///< returns cut in pt
+       double       ptCutMin              () const { return _ptCutMin.value();               }  ///< returns minimum pt
+       double       ptCutMax              () const { return _ptCutMax.value();               }  ///< returns maximum pt
+       bool         etaCutEnabled         () const { return _etaCutEnabled.value();          }  ///< returns cut in eta
+       double       etaCutMin             () const { return _etaCutMin.value();              }  ///< returns minimum eta
+       double       etaCutMax             () const { return _etaCutMax.value();              }  ///< returns maximum eta
+       int          productionMode        () const { return _productionMode.value();         }  ///< returns production mode
+       unsigned int nmbEvents             () const { return _nmbEventsTot.value();           }  ///< returns total number of events to generate
+       int          prodParticleId        () const { return _prodParticleId.value();         }  ///< returns PDG particle ID of produced particle
+       int          randomSeed            () const { return _randomSeed.value();             }  ///< returns seed for random number generator
+       int          outputFormat          () const { return _outputFormat.value();           }  ///< returns output format
+       int          beamBreakupMode       () const { return _beamBreakupMode.value();        }  ///< returns breakup mode for beam particles
+       bool         interferenceEnabled   () const { return _interferenceEnabled.value();    }  ///< returns whether interference is taken into account
+       double       interferenceStrength  () const { return _interferenceStrength.value();   }  ///< returns percentage of interference
+       bool         coherentProduction    () const { return _coherentProduction.value();     }  ///< returns whether production is coherent or incoherent
+       double       incoherentFactor      () const { return _incoherentFactor.value();       }  ///< returns incoherent contribution in vector meson production
+       double       deuteronSlopePar      () const { return _deuteronSlopePar.value();       }  ///< returns slope parameter for deuteron form factor [(GeV/c)^{-2}]
+       double       maxPtInterference     () const { return _maxPtInterference.value();      }  ///< returns maximum p_T for interference calculation [GeV/c]
+       int          nmbPtBinsInterference () const { return _nmbPtBinsInterference.value();  }  ///< returns number of p_T bins for interference calculation
+       double       ptBinWidthInterference() const { return _ptBinWidthInterference.value(); }  ///< returns width of p_T bins for interference calculation [GeV/c]
+       double       minGammaEnergy        () const { return _minGammaEnergy.value();         }  ///< returns minimum gamma energy in case of photo nuclear processes [GeV]
+       double       maxGammaEnergy        () const { return _maxGammaEnergy.value();         }  ///< returns maximum gamma energy in case of photo nuclear processes [GeV]
+       std::string  pythiaParams          () const { return _pythiaParams.value();           }  ///< returns parameters to be passed to pythia
+       bool         pythiaFullEventRecord () const { return _pythiaFullEventRecord.value();  }  ///< returns if the full pythia event record should be printed
+       int          xsecCalcMethod        () const { return _xsecCalcMethod.value();         }  ///< returns the method used for the x-sec calculation
+       int          nThreads              () const { return _nThreads.value();               }  ///< returns the number of threads in case method 1 is used for the x-sec calc
+       unsigned int nBinsQKniehl          () const { return _nBinsQKniehl.value();           }  ///< Number of bins in Q used for the transformation to the impact paramter space of the Kniehl function
+        unsigned int nBinsEKniehl          () const { return _nBinsEKniehl.value();           }  ///< Number of bins in photon energy used for the Kniehl function
+        unsigned int nBinsBKniehl          () const { return _nBinsBKniehl.value();           }  ///< Number of bins in impact parameter used for the Kniehl function
+        double       qMaxKniehl            () const { return _qMaxKniehl.value();             }  ///< Max value of Q used for the Kniehl funcion
+        double       eGammaMinKniehl       () const { return _eGammaMinKniehl.value();        }  ///< Min value of gamma energy used for the Kniehl funcion
+        double       eGammaMaxKniehl       () const { return _eGammaMaxKniehl.value();        }  ///< Max value of gamma energy used for the Kniehl funcion
+        double       bMinKniehl            () const { return _bMinKniehl.value();             }  ///< Min value of impact parameter used for the Kniehl funcion
+        double       bMaxKniehl            () const { return _bMaxKniehl.value();             }  ///< Max value of impact parameter used for the Kniehl funcion
+        
+       starlightConstants::particleTypeEnum    prodParticleType     () const { return _particleType;    }  ///< returns type of produced particle
+       starlightConstants::decayTypeEnum       prodParticleDecayType() const { return _decayType;       }  ///< returns decay type of produced particle
+       starlightConstants::interactionTypeEnum interactionType      () const { return _interactionType; }  ///< returns interaction type
+       // double vmPhotonCoupling();
+       // double slopeParameter();
+       double protonEnergy                () const { return _protonEnergy.value(); }
+
+       void setBeam1Z                (unsigned int v)  {  _beam1Z = v;                 }  ///< returns atomic number of beam particle 1
+       void setBeam1A                (unsigned int v)  {  _beam1A = v;                 }  ///< returns atomic mass number of beam particle 1
+       void setBeam2Z                (unsigned int v)  {  _beam2Z = v;                 }  ///< returns atomic number of beam particle 2
+       void setBeam2A                (unsigned int v)  {  _beam2A = v;                 }  ///< returns atomic mass number of beam particle 2
+       void setBeamLorentzGamma      (double v)  {  _beamLorentzGamma = v;       }  ///< returns Lorentz gamma factor of both beams in beam CMS frame
+       void setBeam1LorentzGamma     (double v)  {  _beam1LorentzGamma = v;      }  ///< returns Lorentz gamma factor of beam 1 in collider frame
+       void setBeam2LorentzGamma     (double v)  {  _beam2LorentzGamma = v;      }  ///< returns Lorentz gamma factor of beam 2 in collider frame
+       void setMaxW                  (double v)  {  _maxW = v;                   }  ///< returns maximum mass W of produced hadronic system [GeV/c^2]
+       void setMinW                  (double v)  {  _minW = v;                   }  ///< returns minimum mass W of produced hadronic system [GeV/c^2]
+       void setNmbWBins              (unsigned int v)  {  _nmbWBins = v;               }  ///< returns number of W bins in lookup table
+       void setMaxRapidity           (double v)  {  _maxRapidity = v;            }  ///< returns maximum absolute value of rapidity
+       void setNmbRapidityBins       (unsigned int v)  {  _nmbRapidityBins = v;        }  ///< returns number of rapidity bins in lookup table
+       void setPtCutEnabled          (bool v)  {  _ptCutEnabled = v;           }  ///< returns cut in pt
+       void setPtCutMin              (double v)  {  _ptCutMin = v;               }  ///< returns minimum pt
+       void setPtCutMax              (double v)  {  _ptCutMax = v;               }  ///< returns maximum pt
+       void setEtaCutEnabled         (bool v)  {  _etaCutEnabled = v;          }  ///< returns cut in eta
+       void setEtaCutMin             (double v)  {  _etaCutMin = v;              }  ///< returns minimum eta
+       void setEtaCutMax             (double v)  {  _etaCutMax = v;              }  ///< returns maximum eta
+       void setProductionMode        (int v)  {  _productionMode = v;         }  ///< returns production mode
+       void setNmbEvents             (unsigned int v)  {  _nmbEventsTot = v;           }  ///< returns total number of events to generate
+       void setProdParticleId        (int v)  {  _prodParticleId = v;         }  ///< returns PDG particle ID of produced particle
+       void setRandomSeed            (int v)  {  _randomSeed = v;             }  ///< returns seed for random number generator
+       void setOutputFormat          (int v)  {  _outputFormat = v;           }  ///< returns output format
+       void setBeamBreakupMode       (int v)  {  _beamBreakupMode = v;        }  ///< returns breakup mode for beam particles
+       void setInterferenceEnabled   (bool v)  {  _interferenceEnabled = v;    }  ///< returns whether interference is taken into account
+       void setInterferenceStrength  (double v)  {  _interferenceStrength = v;   }  ///< returns percentage of interference
+       void setCoherentProduction    (bool v)  {  _coherentProduction = v;     }  ///< returns whether production is coherent or incoherent
+       void setIncoherentFactor      (double v)  {  _incoherentFactor = v;       }  ///< returns incoherent contribution in vector meson production
+       void setDeuteronSlopePar      (double v)  {  _deuteronSlopePar = v;       }  ///< returns slope parameter for deuteron form factor [(GeV/c)^{-2}]
+       void setMaxPtInterference     (double v)  {  _maxPtInterference = v;      }  ///< returns maximum p_T for voiderference calculation [GeV/c]
+       void setNmbPtBinsInterference (int v)  {  _nmbPtBinsInterference = v;  }  ///< returns number of p_T bins for interference calculation
+       void setPtBinWidthInterference(double v)  {  _ptBinWidthInterference = v; }  ///< returns width of p_T bins for voiderference calculation [GeV/c]
+       void setMinGammaEnergy        (double v)  {  _minGammaEnergy = v;         }  ///< returns minimum gamma energy in case of photo nuclear processes [GeV]
+       void setMaxGammaEnergy        (double v)  {  _maxGammaEnergy = v;         }  ///< returns maximum gamma energy in case of photo nuclear processes [GeV]
+       void setPythiaParams          (std::string v)  {  _pythiaParams = v;           }  ///< returns parameters to be passed to pythia
+       void setPythiaFullEventRecord (bool v)  {  _pythiaFullEventRecord = v;  }  ///< returns if the full pythia event record should be prvoided
+       void setXsecCalcMethod        (int v)  {  _xsecCalcMethod = v;         }  ///< returns the method used for the x-sec calculation
+       void setNThreads              (int v)  {  _nThreads = v;               }  ///< returns the number of threads in case method 1 is used for the x-sec calc
+       void setNBinsQKniehl          (unsigned int v)  {  _nBinsQKniehl = v;           }  ///< Number of bins in Q used for the transformation to the impact paramter space of the Kniehl function
+        void setNBinsEKniehl          (unsigned int v)  {  _nBinsEKniehl = v;           }  ///< Number of bins in photon energy used for the Kniehl function
+        void setNBinsBKniehl          (unsigned int v)  {  _nBinsBKniehl = v;           }  ///< Number of bins in impact parameter used for the Kniehl function
+        void setQMaxKniehl            (double v)  {  _qMaxKniehl = v;             }  ///< Max value of Q used for the Kniehl funcion
+        void setEGammaMinKniehl       (double v)  {  _eGammaMinKniehl = v;        }  ///< Min value of gamma energy used for the Kniehl funcion
+        void setEGammaMaxKniehl       (double v)  {  _eGammaMaxKniehl = v;        }  ///< Max value of gamma energy used for the Kniehl funcion
+        void setBMinKniehl            (double v)  {  _bMinKniehl = v;             }  ///< Min value of impact parameter used for the Kniehl funcion
+        void setBMaxKniehl            (double v)  {  _bMaxKniehl = v;             }  ///< Max value of impact parameter used for the Kniehl funcion
+        
+       void setProdParticleType      (starlightConstants::particleTypeEnum v)   { _particleType = v;    }  ///< returns type of produced particle
+       void setProdParticleDecayType (starlightConstants::decayTypeEnum v)        { _decayType = v;       }  ///< returns decay type of produced particle
+       void setInteractionType       (starlightConstants::interactionTypeEnum v)  { _interactionType = v; }  ///< returns interaction type
+        
+       // double vmPhotonCoupling();
+       // double slopeParameter();
+       void setProtonEnergy        (double v)  { _protonEnergy = v; }
+       
+       template<typename T>
+       inline bool setParameter(std::string expression);
+       
+       std::ostream& print(std::ostream& out) const;  ///< prints parameter summary
+       std::ostream& write(std::ostream& out) const;  ///< writes parameters back to an ostream
+       
+       std::string parameterValueKey() const; ///< Generates key for the current parameters
+
+  
+private:
+
+    
+// To indicate if the crossection table should be re-calculated if parameter changes
+#define VALIDITY_CHECK true
+#define NO_VALIDITY_CHECK false
+       
+       std::string _configFileName;  ///< path to configuration file (default = ./config/slight.in)
+
+       // config file parameters
+       parameter<unsigned int,VALIDITY_CHECK>     _beam1Z;                  ///< atomic number of beam particle 1
+       parameter<unsigned int,VALIDITY_CHECK>     _beam1A;                  ///< atomic mass number of beam particle 1
+       parameter<unsigned int,VALIDITY_CHECK>     _beam2Z;                  ///< atomic number of beam particle 2
+       parameter<unsigned int,VALIDITY_CHECK>     _beam2A;                  ///< atomic mass number of beam particle 2
+       parameter<double, VALIDITY_CHECK>          _beam1LorentzGamma;       ///< Lorentz gamma factor of beam 1 in collider frame
+       parameter<double, VALIDITY_CHECK>          _beam2LorentzGamma;       ///< Lorentz gamma factor of beam 2 in collider frame
+       parameter<double, VALIDITY_CHECK>          _maxW;                    ///< maximum mass W of produced hadronic system [GeV/c^2]
+       parameter<double, VALIDITY_CHECK>          _minW;                    ///< minimum mass W of produced hadronic system; if set to -1 default value is taken [GeV/c^2]
+       parameter<unsigned int, VALIDITY_CHECK>    _nmbWBins;                ///< number of W bins in lookup table
+       parameter<double, VALIDITY_CHECK>          _maxRapidity;             ///< maximum absolute value of rapidity
+       parameter<unsigned int, VALIDITY_CHECK>    _nmbRapidityBins;         ///< number of rapidity bins in lookup table
+       parameter<bool, VALIDITY_CHECK>            _ptCutEnabled;            ///< en/disables cut in pt
+       parameter<double, VALIDITY_CHECK>          _ptCutMin;                ///< minimum pt, if cut is enabled
+       parameter<double, VALIDITY_CHECK>          _ptCutMax;                ///< maximum pt, if cut is enabled
+       parameter<bool, VALIDITY_CHECK>            _etaCutEnabled;           ///< en/disables cut in eta
+       parameter<double, VALIDITY_CHECK>          _etaCutMin;               ///< minimum eta, if cut is enabled
+       parameter<double, VALIDITY_CHECK>          _etaCutMax;               ///< maximum eta, if cut is enabled
+       parameter<unsigned int, VALIDITY_CHECK>    _productionMode;          ///< \brief production mode
+                                                                            ///<
+                                                                            ///< 1 = photon-photon fusion,
+                                                                            ///< 2 = narrow vector meson resonance in photon-Pomeron fusion,
+                                                                            ///< 3 = Breit-Wigner vector meson resonance in photon-Pomeron fusion
+       parameter<unsigned int, VALIDITY_CHECK>    _nmbEventsTot;            ///< total number of events to generate
+       parameter<unsigned int, VALIDITY_CHECK>    _prodParticleId;          ///< PDG particle ID of produced particle
+       parameter<unsigned int, VALIDITY_CHECK>    _randomSeed;              ///< seed for random number generator
+       parameter<unsigned int, NO_VALIDITY_CHECK> _outputFormat;            ///< \brief output format
+                                                                            ///<
+                                                                            ///< 1 = ASCII
+                                                                            ///< 2 = GSTARtext,
+                                                                            ///< 3 = PAW ntuple (not working)
+       parameter<unsigned int, VALIDITY_CHECK>    _beamBreakupMode;         ///< \brief breakup mode for beam particles
+                                                                            ///<
+                                                                            ///< 1 = hard sphere nuclei (b > 2R),
+                                                                            ///< 2 = both nuclei break up (XnXn),
+                                                                            ///< 3 = a single neutron from each nucleus (1n1n),
+                                                                            ///< 4 = neither nucleon breaks up (with b > 2R),
+                                                                            ///< 5 = no hadronic break up (similar to option 1, but with the actual hadronic interaction)
+       parameter<bool, VALIDITY_CHECK>            _interferenceEnabled;     ///< if VALIDITY_CHECK, interference is taken into account
+       parameter<double, VALIDITY_CHECK>          _interferenceStrength;    ///< percentage of interference: from 0 = none to 1 = full
+       parameter<bool, VALIDITY_CHECK>            _coherentProduction;      ///< if VALIDITY_CHECK, production is coherent, else incoherent
+       parameter<double, VALIDITY_CHECK>          _incoherentFactor;        ///< allows to scale the incoherent contribution in vector meson production
+       parameter<double, VALIDITY_CHECK>          _deuteronSlopePar;        ///< slope parameter for deuteron form factor [(GeV/c)^{-2}]
+       parameter<double, VALIDITY_CHECK>          _maxPtInterference;       ///< maximum p_T for interference calculation [GeV/c]
+       parameter<unsigned int, VALIDITY_CHECK>    _nmbPtBinsInterference;   ///< number of p_T bins for interference calculation
+       parameter<double, VALIDITY_CHECK>          _ptBinWidthInterference;  ///< width of p_T bins for interference calculation [GeV/c]
+       parameter<double, VALIDITY_CHECK>          _protonEnergy;
+       parameter<double, VALIDITY_CHECK>          _minGammaEnergy;          ///< minimum gamma energy in case of photo nuclear processes [GeV]
+       parameter<double, VALIDITY_CHECK>          _maxGammaEnergy;          ///< maximum gamma energy in case of photo nuclear processes [GeV]
+       parameter<std::string,NO_VALIDITY_CHECK>   _pythiaParams;            ///< semi-colon separated parameters to pass to pythia, e.g. "mstj(1)=0;paru(13)=0.1" 
+       parameter<bool, NO_VALIDITY_CHECK>         _pythiaFullEventRecord;   ///< if the full pythia event record should be in the outputu
+       parameter<unsigned int, VALIDITY_CHECK>    _xsecCalcMethod;          ///< Select x-sec calc method. (0 is standard starlight method, 1 must be used for assym. collisions (e.g. p-A), but is slow)
+       parameter<unsigned int, NO_VALIDITY_CHECK> _nThreads;                ///< Number of threads used in the case of using method 1 for calculating the x-sections
+        parameter<unsigned int, VALIDITY_CHECK>    _nBinsQKniehl;            ///< Number of bins in Q used for the transformation to the impact paramter space of the Kniehl function
+        parameter<unsigned int, VALIDITY_CHECK>    _nBinsEKniehl;            ///< Number of bins in photon energy used for the Kniehl function
+        parameter<unsigned int, VALIDITY_CHECK>    _nBinsBKniehl;            ///< Number of bins in impact parameter used for the Kniehl function
+        parameter<double, VALIDITY_CHECK>          _qMaxKniehl;              ///< Max value of Q used for the Kniehl funcion
+        parameter<double, VALIDITY_CHECK>          _eGammaMinKniehl;         ///< Min value of gamma energy used for the Kniehl funcion
+        parameter<double, VALIDITY_CHECK>          _eGammaMaxKniehl;         ///< Max value of gamma energy used for the Kniehl funcion
+        parameter<double, VALIDITY_CHECK>          _bMinKniehl;              ///< Min value of impact parameter used for the Kniehl funcion
+        parameter<double, VALIDITY_CHECK>          _bMaxKniehl;              ///< Max value of impact parameter used for the Kniehl funcion
+        
+       
+       starlightConstants::particleTypeEnum       _particleType;
+       starlightConstants::decayTypeEnum          _decayType;
+       starlightConstants::interactionTypeEnum    _interactionType;
+
+       double                         _beamLorentzGamma;                    ///< Lorentz gamma factor of the beams in CMS frame, not an input parameter
+       
+       inputParser _ip;
+       
+};
+
+#define inputParametersInstance Singleton<inputParameters>::instance()
+
+template<typename T>
+inline 
+bool inputParameters::setParameter(std::string expression)
+{
+   
+    return _ip.parseString(expression);
+   
+   
+}
+
+inline
+std::ostream&
+operator <<(std::ostream&          out,
+            const inputParameters& par)
+{
+       return par.print(out);
+}
+
+#endif  // INPUTPARAMETERS_H