00001 // -*- C++ -*- 00002 // 00003 // Hint.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_Hint_H 00010 #define ThePEG_Hint_H 00011 // This is the declaration of the Hint class. 00012 00013 #include "ThePEG/Config/ThePEG.h" 00014 #include "ThePEG/Utilities/ClassDescription.h" 00015 00016 namespace ThePEG { 00017 00048 class Hint: public Base { 00049 00050 public: 00051 00057 Hint() : theScale(Energy2()), theStopFlag(false) {} 00059 00060 public: 00061 00065 bool tagged() const { return !theTagged.empty(); } 00066 00073 tPVector tagged(const Step & s) const; 00074 00078 template <typename InputIterator> 00079 void tag(InputIterator first, InputIterator last) 00080 { 00081 theTagged.insert(theTagged.end(), first, last); 00082 } 00083 00087 void tag(tPPtr p) { if (p) theTagged.push_back(p); } 00088 00092 void stop(bool newStopFlag) 00093 { 00094 theStopFlag = newStopFlag; 00095 if ( theStopFlag ) theTagged.clear(); 00096 } 00097 00101 bool stop() const { return theStopFlag; } 00102 00106 void scale(const Scale & newScale) { theScale = newScale; } 00110 const Scale & scale() const { return theScale; } 00111 00115 static tHintPtr Default() { return tHintPtr(&theDefaultHint); } 00116 00117 public: 00118 00125 void persistentOutput(PersistentOStream & os) const; 00126 00132 void persistentInput(PersistentIStream & is, int version); 00134 00138 static void Init(); 00139 00140 private: 00141 00145 tPVector theTagged; 00146 00150 Scale theScale; 00151 00155 bool theStopFlag; 00156 00160 static Hint theDefaultHint; 00161 00162 private: 00163 00167 static ClassDescription<Hint> initHint; 00168 00172 Hint & operator=(const Hint & h); 00173 00174 }; 00175 00176 00183 template <> 00184 struct BaseClassTrait<Hint,1>: public ClassTraitsType { 00186 typedef Base NthBase; 00187 }; 00188 00193 template <> 00194 struct ClassTraits<Hint>: 00195 public ClassTraitsBase<Hint> { 00197 static string className() { return "ThePEG::Hint"; } 00198 }; 00199 00202 } 00203 00204 #endif /* ThePEG_Hint_H */