00001 // -*- C++ -*- 00002 // 00003 // AlphaSBase.h is a part of ThePEG - Toolkit for HEP Event Generation 00004 // Copyright (C) 1999-2007 Leif Lonnblad 00005 // 00006 // ThePEG is licenced under version 2 of the GPL, see COPYING for details. 00007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 00008 // 00009 #ifndef ThePEG_AlphaSBase_H 00010 #define ThePEG_AlphaSBase_H 00011 // This is the declaration of the AlphaSBase class. 00012 00013 #include "RunningCoupling.h" 00014 00015 namespace ThePEG { 00016 00028 class AlphaSBase: public RunningCoupling { 00029 00030 public: 00031 00039 virtual vector<Energy2> flavourThresholds() const = 0; 00040 00045 virtual vector<Energy> LambdaQCDs() const = 0; 00047 00054 unsigned int Nf(Energy2 scale) const { 00055 unsigned int i = 0; 00056 while ( i < theFlavourThresholds.size() && 00057 theFlavourThresholds[i] < scale ) ++i; 00058 return i; 00059 } 00060 00064 Energy LambdaQCD(unsigned int nflav) const { return theLambdaQCDs[nflav]; } 00065 00069 Energy LambdaQCD(Energy2 scale) const { return theLambdaQCDs[Nf(scale)]; } 00071 00072 public: 00073 00080 void persistentOutput(PersistentOStream & os) const; 00081 00087 void persistentInput(PersistentIStream & is, int version); 00089 00093 static void Init(); 00094 00095 protected: 00096 00099 00105 virtual void doinit(); 00106 00108 00109 private: 00110 00115 vector<Energy2> theFlavourThresholds; 00116 00122 vector<Energy> theLambdaQCDs; 00123 00124 private: 00125 00129 static AbstractClassDescription<AlphaSBase> initAlphaSBase; 00130 00134 AlphaSBase & operator=(const AlphaSBase &); 00135 00136 }; 00137 00142 template <> 00143 struct BaseClassTrait<AlphaSBase,1>: public ClassTraitsType { 00145 typedef RunningCoupling NthBase; 00146 }; 00147 00150 template <> 00151 struct ClassTraits<AlphaSBase>: public ClassTraitsBase<AlphaSBase> { 00153 static string className() { return "ThePEG::AlphaSBase"; } 00154 }; 00155 00158 } 00159 00160 #endif /* ThePEG_AlphaSBase_H */