![]() |
![]() |
#include <GeneratorInterface/TopRexInterface/interface/ToprexSource.h>
Public Member Functions | |
ToprexSource (const ParameterSet &, const InputSourceDescription &) | |
Constructor. | |
virtual | ~ToprexSource () |
Destructor. | |
Private Member Functions | |
bool | call_pygive (const std::string &iParm) |
Interface to the PYGIVE/TXGIVE pythia routine, with add'l protections. | |
bool | call_txgive (const std::string &iParm) |
bool | call_txgive_init () |
void | clear () |
virtual bool | produce (Event &e) |
Private Attributes | |
HepMC::GenEvent * | evt |
CLHEP::HepRandomEngine * | fRandomEngine |
CLHEP::RandFlat * | fRandomGenerator |
unsigned int | maxEventsToPrint_ |
Events to print if verbosity. | |
bool | pythiaHepMCVerbosity_ |
HepMC verbosity flag. | |
unsigned int | pythiaPylistVerbosity_ |
Pythia PYLIST Verbosity flag. |
Definition at line 34 of file ToprexSource.h.
ToprexSource::ToprexSource | ( | const ParameterSet & | pset, | |
const InputSourceDescription & | desc | |||
) |
Constructor.
Definition at line 49 of file ToprexSource.cc.
References call_pygive(), call_toprex(), call_txgive(), call_txgive_init(), edm::errors::Configuration, GenMuonPlsPt100GeV_cfg::cout, lat::endl(), fRandomEngine, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), i, maxEventsToPrint_, pars, pythiaHepMCVerbosity_, pythiaPylistVerbosity_, and randomEngine.
00050 : 00051 GeneratedInputSource(pset, desc), evt(0), 00052 pythiaPylistVerbosity_ (pset.getUntrackedParameter<int>("pythiaPylistVerbosity",0)), 00053 pythiaHepMCVerbosity_ (pset.getUntrackedParameter<bool>("pythiaHepMCVerbosity",false)), 00054 maxEventsToPrint_ (pset.getUntrackedParameter<int>("maxEventsToPrint",1)) 00055 00056 { 00057 00058 cout << "ToprexSource: initializing TopReX " << endl; 00059 00060 00061 00062 // PYLIST Verbosity Level 00063 // Valid PYLIST arguments are: 1, 2, 3, 5, 7, 11, 12, 13 00064 pythiaPylistVerbosity_ = pset.getUntrackedParameter<int>("pythiaPylistVerbosity",0); 00065 cout << "Pythia PYLIST verbosity level = " << pythiaPylistVerbosity_ << endl; 00066 00067 // HepMC event verbosity Level 00068 pythiaHepMCVerbosity_ = pset.getUntrackedParameter<bool>("pythiaHepMCVerbosity",false); 00069 cout << "Pythia HepMC verbosity = " << pythiaHepMCVerbosity_ << endl; 00070 00071 //Max number of events printed on verbosity level 00072 maxEventsToPrint_ = pset.getUntrackedParameter<int>("maxEventsToPrint",0); 00073 cout << "Number of events to be printed = " << maxEventsToPrint_ << endl; 00074 00076 // Set PYTHIA parameters in a single ParameterSet 00077 { 00078 ParameterSet pythia_params = 00079 pset.getParameter<ParameterSet>("PythiaParameters") ; 00080 00081 // The parameter sets to be read (default, min bias, user ...) in the 00082 // proper order. 00083 vector<string> setNames = 00084 pythia_params.getParameter<vector<string> >("parameterSets"); 00085 00086 // Loop over the sets 00087 for ( unsigned i=0; i<setNames.size(); ++i ) { 00088 00089 string mySet = setNames[i]; 00090 00091 // Read the PYTHIA parameters for each set of parameters 00092 vector<string> pars = 00093 pythia_params.getParameter<vector<string> >(mySet); 00094 00095 if (mySet != "CSAParameters"){ 00096 cout << "----------------------------------------------" << endl; 00097 cout << "Read PYTHIA parameter set " << mySet << endl; 00098 cout << "----------------------------------------------" << endl; 00099 00100 // Loop over all parameters and stop in case of mistake 00101 for( vector<string>::const_iterator 00102 itPar = pars.begin(); itPar != pars.end(); ++itPar ) { 00103 static string sRandomValueSetting("MRPY(1)"); 00104 if( 0 == itPar->compare(0,sRandomValueSetting.size(),sRandomValueSetting) ) { 00105 throw edm::Exception(edm::errors::Configuration,"PythiaError") 00106 <<" attempted to set random number using pythia command 'MRPY(1)' this is not allowed.\n Please use the RandomNumberGeneratorService to set the random number seed."; 00107 } 00108 if( ! call_pygive(*itPar) ) { 00109 throw edm::Exception(edm::errors::Configuration,"PythiaError") 00110 <<" pythia did not accept the following \""<<*itPar<<"\""; 00111 } 00112 } 00113 }else if(mySet == "CSAParameters"){ 00114 00115 // Read CSA parameter 00116 00117 pars = pythia_params.getParameter<vector<string> >("CSAParameters"); 00118 00119 cout << "----------------------------------------------" << endl; 00120 cout << "Reading CSA parameter settings. " << endl; 00121 cout << "----------------------------------------------" << endl; 00122 00123 call_txgive_init(); 00124 00125 00126 // Loop over all parameters and stop in case of a mistake 00127 for (vector<string>::const_iterator 00128 itPar = pars.begin(); itPar != pars.end(); ++itPar) { 00129 call_txgive(*itPar); 00130 00131 } 00132 00133 } 00134 } 00135 00136 } 00137 00138 00139 // Read the TopReX parameters 00140 00141 00142 //In the future, we will get the random number seed on each event and tell 00143 // pythia to use that new seed 00144 cout << "----------------------------------------------" << endl; 00145 cout << "Setting Pythia random number seed " << endl; 00146 cout << "----------------------------------------------" << endl; 00147 edm::Service<RandomNumberGenerator> rng; 00148 randomEngine = fRandomEngine = &(rng->getEngine()); 00149 uint32_t seed = rng->mySeed(); 00150 ostringstream sRandomSet; 00151 sRandomSet <<"MRPY(1)="<<seed; 00152 call_pygive(sRandomSet.str()); 00153 00154 // srs insertion 00155 // cout << "TopReX start called OK" << endl; 00156 call_toprex( "USER", "p", "p", 14000. ); 00157 // cout << "TopReX was called OK" << endl; 00158 call_pyinit( "USER", "p", "p", 14000. ); 00159 // 00160 // call_pretauola(-1); // TAUOLA initialization 00161 cout << endl; // Stetically add for the output 00162 00163 produces<HepMCProduct>(); 00164 cout << "ToprexSource: starting event generation ... " << endl; 00165 }
ToprexSource::~ToprexSource | ( | ) | [virtual] |
Destructor.
Definition at line 168 of file ToprexSource.cc.
References clear(), GenMuonPlsPt100GeV_cfg::cout, and lat::endl().
00168 { 00169 cout << "ToprexSource: event generation done. " << endl; 00170 call_pystat(1); 00171 // call_pretauola(1); // output from TAUOLA 00172 clear(); 00173 }
bool ToprexSource::call_pygive | ( | const std::string & | iParm | ) | [private] |
Interface to the PYGIVE/TXGIVE pythia routine, with add'l protections.
Definition at line 230 of file ToprexSource.cc.
References pydat1, and PYGIVE.
Referenced by ToprexSource().
00231 { 00232 int numWarn = pydat1.mstu[26]; //# warnings 00233 int numErr = pydat1.mstu[22];// # errors 00234 //call the fortran routine pygive with a fortran string 00235 PYGIVE( iParm.c_str(), iParm.length() ); 00236 //if an error or warning happens it is problem 00237 return pydat1.mstu[26] == numWarn && pydat1.mstu[22] == numErr; 00238 }
bool ToprexSource::call_txgive | ( | const std::string & | iParm | ) | [private] |
Definition at line 242 of file ToprexSource.cc.
References TXGIVE.
Referenced by ToprexSource().
00243 { 00244 TXGIVE( iParm.c_str(), iParm.length() ); 00245 return 1; 00246 }
bool ToprexSource::call_txgive_init | ( | ) | [private] |
Definition at line 249 of file ToprexSource.cc.
References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), and TXGIVE_INIT.
Referenced by ToprexSource().
00250 { 00251 TXGIVE_INIT(); 00252 cout << " Setting CSA defaults. " << endl; 00253 return 1; 00254 }
Implements edm::ConfigurableInputSource.
Definition at line 178 of file ToprexSource.cc.
References call_findjets(), call_pylist(), conv, GenMuonPlsPt100GeV_cfg::cout, lat::endl(), edm::ConfigurableInputSource::event(), evt, maxEventsToPrint_, edm::ConfigurableInputSource::numberEventsInRun(), edm::Event::put(), pypars, pythiaHepMCVerbosity_, pythiaPylistVerbosity_, and edm::InputSource::remainingEvents().
00178 { 00179 00180 auto_ptr<HepMCProduct> bare_product(new HepMCProduct()); 00181 // 00182 00183 call_pyevnt(); // generate one event with Pythia 00184 00185 // call_pretauola(0); // tau-lepton decays with TAUOLA 00186 00187 call_findjets(); // find jets 00188 call_pyhepc( 1 ); 00189 00190 HepMC::GenEvent* evt = conv.read_next_event(); 00191 evt->set_signal_process_id(pypars.msti[0]); 00192 evt->set_event_scale(pypars.pari[16]); 00193 evt->set_event_number(numberEventsInRun() - remainingEvents() - 1); 00194 00195 // Nest (*evt); 00196 00197 00198 00199 00200 //******** Verbosity ******** 00201 00202 if(event() <= maxEventsToPrint_ && 00203 (pythiaPylistVerbosity_ || pythiaHepMCVerbosity_)) { 00204 00205 // Prints PYLIST info 00206 if(pythiaPylistVerbosity_) { 00207 call_pylist(pythiaPylistVerbosity_); 00208 } 00209 00210 // Prints HepMC event 00211 if(pythiaHepMCVerbosity_) { 00212 cout << "Event process = " << pypars.msti[0] << endl 00213 << "----------------------" << endl; 00214 // evt->print(); 00215 } 00216 } 00217 00218 00219 //evt = reader_->fillCurrentEventData(); 00220 //******** 00221 00222 if(evt) bare_product->addHepMCData(evt ); 00223 00224 e.put(bare_product); 00225 00226 return true; 00227 }
HepMC::GenEvent* edm::ToprexSource::evt [private] |
CLHEP::HepRandomEngine* edm::ToprexSource::fRandomEngine [private] |
CLHEP::RandFlat* edm::ToprexSource::fRandomGenerator [private] |
Definition at line 76 of file ToprexSource.h.
unsigned int edm::ToprexSource::maxEventsToPrint_ [private] |
Events to print if verbosity.
Definition at line 65 of file ToprexSource.h.
Referenced by produce(), and ToprexSource().
bool edm::ToprexSource::pythiaHepMCVerbosity_ [private] |
HepMC verbosity flag.
Definition at line 63 of file ToprexSource.h.
Referenced by produce(), and ToprexSource().
unsigned int edm::ToprexSource::pythiaPylistVerbosity_ [private] |
Pythia PYLIST Verbosity flag.
Definition at line 61 of file ToprexSource.h.
Referenced by produce(), and ToprexSource().