CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MCatNLOSource.cc
Go to the documentation of this file.
1 #include <algorithm>
2 #include <functional>
3 #include <iostream>
4 #include <sstream>
5 #include <string>
6 #include <memory>
7 
8 #include <boost/bind.hpp>
9 
17 
20 
22 
25 
28 
29 #include "MCatNLOSource.h"
30 
31 
32 // MC@NLO v3.4 LHE file rountines (mcatnlo_hwlhin.f)
33 extern "C" {
34  void mcatnloupinit_(int*, const char*, int);
35  void mcatnloupevnt_(int*, int*, int*);
36 }
37 
38 
39 using namespace lhef;
40 
42  const edm::InputSourceDescription &desc) :
43  ExternalInputSource(params, desc, false),
44  gen::Herwig6Instance(0),
45  skipEvents(params.getUntrackedParameter<unsigned int>("skipEvents", 0)),
46  nEvents(0),
47  processCode(params.getParameter<int>("processCode"))
48 {
49  std::vector<std::string> allFileNames = fileNames();
50 
51  // Only one filename
52  if (allFileNames.size() != 1)
53  throw cms::Exception("Generator|MCatNLOInterface")
54  << "MCatNLOSource needs exactly one file specified. " <<std::endl;
55 
56  fileName = allFileNames[0];
57 
58  // Strip the "file:" prefix
59  if (fileName.find("file:") != 0)
60  throw cms::Exception("Generator|MCatNLOInterface") << "MCatNLOSource only supports the file: scheme. "<<std::endl;
61  fileName.erase(0, 5);
62 
63  // open input file
64  reader.reset(new std::ifstream(fileName.c_str()));
65 
66  produces<LHEEventProduct>();
67  produces<LHERunInfoProduct, edm::InRun>();
68 }
69 
71 {
72 }
73 
75 {
76  reader.reset();
77 }
78 
80 {
81  return;
82 }
83 
84 template<typename T>
85 static std::string makeConfigLine(const char *var, T value)
86 {
87  std::ostringstream ss;
88  ss << var << " = " << value << "\n";
89  return ss.str();
90 }
91 
92 template<typename T>
93 static std::string makeConfigLine(const char *var, unsigned int index, T value)
94 {
95  std::ostringstream ss;
96  ss << var << "(" << index << ") = " << value << "\n";
97  return ss.str();
98 }
99 
101 {
102  InstanceWrapper wrapper(this);
103 
104  // call UPINIT privided by MC@NLO (v3.4)
105  mcatnloupinit_(&processCode, fileName.c_str(), fileName.length());
106 
107  // fill HEPRUP common block and store in edm::Run
108  lhef::HEPRUP heprup;
110 
111  // make sure we write a valid LHE header, Herwig6Hadronizer
112  // will interpret it correctly and set up LHAPDF
113  heprup.PDFGUP.first = 0;
114  heprup.PDFGUP.second = 0;
115 
116  std::auto_ptr<LHERunInfoProduct> runInfo(new LHERunInfoProduct(heprup));
117 
118  LHERunInfoProduct::Header hw6header("herwig6header");
119  hw6header.addLine("\n");
120  hw6header.addLine("# Herwig6 parameters\n");
121  hw6header.addLine(makeConfigLine("IPROC", processCode));
122  // add lines for parameter that have been touched by UPINIT
123  if(mcpars_.emmins)
124  hw6header.addLine(makeConfigLine("EMMIN", mcpars_.emmin));
125  if(mcpars_.emmaxs)
126  hw6header.addLine(makeConfigLine("EMMAX", mcpars_.emmax));
127  if(mcpars_.gammaxs)
128  hw6header.addLine(makeConfigLine("GAMMAX",mcpars_.gammax));
129  if(mcpars_.gamzs)
130  hw6header.addLine(makeConfigLine("GAMZ",mcpars_.gamz));
131  if(mcpars_.gamws)
132  hw6header.addLine(makeConfigLine("GAMW",mcpars_.gamw));
133  for(unsigned int i=0; i<1000; ++i) {
134  if(mcpars_.rmasss[i])
135  hw6header.addLine(makeConfigLine("RMASS",i+1,mcpars_.rmass[i]));
136  }
137 
138  // other needed MC@NLO defaults (from mcatnlo_hwdriver.f v3.4)
139  hw6header.addLine(makeConfigLine("SOFTME", false));
140  hw6header.addLine(makeConfigLine("NOWGT", false));
141  hw6header.addLine(makeConfigLine("NEGWTS", true));
142  if(abs(processCode)==1705 || abs(processCode)==11705)
143  hw6header.addLine(makeConfigLine("PSPLT",2,0.5));
144  double wgtmax_=1.000001;
145  hw6header.addLine(makeConfigLine("WGTMAX", wgtmax_));
146  hw6header.addLine(makeConfigLine("AVABW", wgtmax_));
147  hw6header.addLine(makeConfigLine("RLTIM",6, 1.0E-23));
148  hw6header.addLine(makeConfigLine("RLTIM",12, 1.0E-23));
149 
150 
151  runInfo->addHeader(hw6header);
152 
153  run.put(runInfo);
154 
155  return;
156 }
157 
159 {
160  InstanceWrapper wrapper(this);
161 
162  int lastEventDone=0;
163  int ihpro=0;
164  // skip events if asked to...
165 
166  while(skipEvents>0) {
167  skipEvents--;
168  mcatnloupevnt_(&processCode,&lastEventDone,&ihpro);
169  if(lastEventDone) return false;
170  }
171 
172  // call UPINIT privided by MC@NLO (v3.4)
173  mcatnloupevnt_(&processCode,&lastEventDone,&ihpro);
174 
175  if(lastEventDone) return false;
176 
177  // fill HEPRUP common block and store in edm::Run
178  lhef::HEPRUP heprup;
179  lhef::HEPEUP hepeup;
182  hepeup.IDPRUP = heprup.LPRUP[0];
183  std::auto_ptr<LHEEventProduct> lhEvent(new LHEEventProduct(hepeup));
184  lhEvent->addComment(makeConfigLine("#IHPRO", ihpro));
185  event.put(lhEvent);
186 
187  return true;
188 }
189 
190 bool MCatNLOSource::hwwarn(const std::string &fn, int code)
191 {
192  // dummy ignoring useless HERWIG warnings
193  return true;
194 }
195 
int i
Definition: DBlmapReader.cc:9
virtual ~MCatNLOSource()
virtual bool produce(edm::Event &event)
static std::string makeConfigLine(const char *var, T value)
struct MCPARS_ mcpars_
int emmaxs
Definition: MCatNLOSource.h:30
double rmass[1000]
Definition: MCatNLOSource.h:26
#define abs(x)
Definition: mlp_lapack.h:159
std::auto_ptr< std::ifstream > reader
Definition: MCatNLOSource.h:73
void mcatnloupinit_(int *, const char *, int)
int emmins
Definition: MCatNLOSource.h:29
double gammax
Definition: MCatNLOSource.h:25
double emmin
Definition: MCatNLOSource.h:23
#define DEFINE_FWK_INPUT_SOURCE(type)
static void readHEPRUP(HEPRUP *heprup)
int rmasss[1000]
Definition: MCatNLOSource.h:32
virtual void endJob()
void addLine(const std::string &line)
int gammaxs
Definition: MCatNLOSource.h:31
MCatNLOSource(const edm::ParameterSet &params, const edm::InputSourceDescription &desc)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
double gamz
Definition: MCatNLOSource.h:28
double emmax
Definition: MCatNLOSource.h:24
double gamw
Definition: MCatNLOSource.h:27
virtual bool hwwarn(const std::string &fn, int code)
std::string fileName
Name of the input file.
Definition: MCatNLOSource.h:60
boost::shared_ptr< lhef::LHERunInfo > runInfo
Definition: MCatNLOSource.h:75
unsigned int skipEvents
Number of events to skip.
Definition: MCatNLOSource.h:66
void put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Run.h:80
void mcatnloupevnt_(int *, int *, int *)
tuple skipEvents
Definition: gather_cfg.py:32
UInt_t nEvents
Definition: hcalCalib.cc:43
long double T
std::vector< std::string > const & fileNames() const
static void readHEPEUP(HEPEUP *hepeup)
virtual void beginRun(edm::Run &run)
Definition: Run.h:32
static HepMC::HEPEVT_Wrapper wrapper
std::vector< int > LPRUP
Definition: LesHouches.h:124