CMS 3D CMS Logo

LHECOMWeightProducer.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <memory>
3 
6 
10 
12 
16 
17 #include <sstream>
18 //class that reweights a pure parton level event from the originale COM energy to
19 //an energy that is < than original COM energy.
20 
21 //
22 // class declaration
23 //
25 public:
26  explicit LHECOMWeightProducer(const edm::ParameterSet&);
27  ~LHECOMWeightProducer() override;
28 
29 private:
30  void beginJob() override;
31  void beginRun(edm::Run const& run, const edm::EventSetup& es) override;
32  void produce(edm::Event&, const edm::EventSetup&) override;
33 
35  int _pdfset;
37  double _origECMS;
38  double _newECMS;
40 };
41 
43 namespace LHAPDF {
44  void initPDFSet(int nset, int setid, int member = 0);
45  int numberPDF(int nset);
46  void usePDFMember(int nset, int member);
47  double xfx(int nset, double x, double Q, int fl);
48  double getXmin(int nset, int member);
49  double getXmax(int nset, int member);
50  double getQ2min(int nset, int member);
51  double getQ2max(int nset, int member);
52  void extrapolate(bool extrapolate = true);
53 } // namespace LHAPDF
54 
57  : lheTag_(pset.getParameter<edm::InputTag>("lheSrc")), _newECMS(pset.getParameter<double>("NewECMS")) {
58  std::stringstream labelStr;
59  labelStr << "com"
60  << "To" << _newECMS;
61  _label = labelStr.str();
62  produces<GenEventInfoProduct>(_label);
63 }
64 
67 
70  using namespace edm;
72  run.getByLabel(lheTag_, lheRun);
73  //assumes the same pdf is used for both beams
74  _pdfset = lheRun->heprup().PDFSUP.first;
75  _pdfmember = lheRun->heprup().PDFGUP.first;
76  _origECMS = lheRun->heprup().EBMUP.first + lheRun->heprup().EBMUP.second;
77  edm::LogInfo("LHECOMWeightProducer") << "PDFSET: " << _pdfset << "; member: " << _pdfmember
78  << "; COM energy: " << _origECMS;
79  if (_newECMS > _origECMS)
80  throw cms::Exception("LHECOMWeightProducer") << "You cannot reweight COM energy to a higher than original energy ";
82 }
83 
86  //LHAPDF::initPDFSet(1,pdfSetName_);
87 }
88 
91  using namespace std;
92  bool verbose = false;
93 
94  if (iEvent.isRealData())
95  return;
96 
98  iEvent.getByLabel(lheTag_, lheevent);
99 
100  float Q = lheevent->hepeup().SCALUP;
101 
102  int id1 = lheevent->hepeup().IDUP[0];
103  double x1 = fabs(lheevent->hepeup().PUP[0][2] / (_origECMS / 2));
104  double x1prime = fabs(lheevent->hepeup().PUP[0][2] / (_newECMS / 2));
105 
106  int id2 = lheevent->hepeup().IDUP[1];
107  double x2 = fabs(lheevent->hepeup().PUP[1][2] / (_origECMS / 2));
108  double x2prime = fabs(lheevent->hepeup().PUP[1][2] / (_newECMS / 2));
109 
110  LogTrace("LHECOMWeightProducer") << "*******LHECOMWeightProducer*******\n"
111  << " Q : " << Q << "\n"
112  << " id1: " << id1 << "\n"
113  << " x1 : " << x1 << "\n"
114  << " x1': " << x1prime << "\n"
115  << " id2: " << id2 << "\n"
116  << " x2 : " << x2 << "\n"
117  << " x2': " << x2prime;
118  //gluon is 0 in the LHAPDF numbering
119  if (id1 == 21)
120  id1 = 0;
121  if (id2 == 21)
122  id2 = 0;
123 
124  // Put PDF weights in the event
125  if (verbose)
126  cout << " Set : " << _pdfset << " member : " << _pdfmember << endl;
127 
129  double oldpdf1 = LHAPDF::xfx(1, x1, Q, id1) / x1;
130  double oldpdf2 = LHAPDF::xfx(1, x2, Q, id2) / x2;
131  double newpdf1 = LHAPDF::xfx(1, x1prime, Q, id1) / x1prime;
132  double newpdf2 = LHAPDF::xfx(1, x2prime, Q, id2) / x2prime;
133  LogTrace("LHECOMWeightProducer") << " xfx1 : " << oldpdf1 << "\n"
134  << " xfx2 : " << oldpdf2 << "\n"
135  << " xfx1': " << newpdf1 << "\n"
136  << " xfx2': " << newpdf2 << "\n"
137  << " weight:" << (newpdf1 / oldpdf1) * (newpdf2 / oldpdf2);
138  double weight = (newpdf1 / oldpdf1) * (newpdf2 / oldpdf2);
139  std::vector<double> weights;
140  weights.push_back(weight);
141  std::unique_ptr<GenEventInfoProduct> info(new GenEventInfoProduct());
142  info->setWeights(weights);
143  iEvent.put(std::move(info), _label);
144 }
145 
GenEventInfoProduct
Definition: GenEventInfoProduct.h:17
LHECOMWeightProducer::_label
std::string _label
Definition: LHECOMWeightProducer.cc:39
LHECOMWeightProducer::_newECMS
double _newECMS
Definition: LHECOMWeightProducer.cc:38
LHECOMWeightProducer::~LHECOMWeightProducer
~LHECOMWeightProducer() override
Definition: LHECOMWeightProducer.cc:66
EDProducer.h
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
testProducerWithPsetDescEmpty_cfi.x2
x2
Definition: testProducerWithPsetDescEmpty_cfi.py:28
LHECOMWeightProducer::_pdfset
int _pdfset
Definition: LHECOMWeightProducer.cc:35
globals_cff.id1
id1
Definition: globals_cff.py:33
gather_cfg.cout
cout
Definition: gather_cfg.py:144
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
LHERunInfoProduct::heprup
const lhef::HEPRUP & heprup() const
Definition: LHERunInfoProduct.h:55
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:153
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
edm::Handle
Definition: AssociativeIterator.h:50
class-composition.Q
Q
Definition: class-composition.py:82
LHAPDF::initPDFSet
void initPDFSet(int nset, int setid, int member=0)
lhef::HEPRUP::EBMUP
std::pair< double, double > EBMUP
Definition: LesHouches.h:82
LHERunInfoProduct.h
MakerMacros.h
LHAPDF::usePDFMember
void usePDFMember(int nset, int member)
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
LHAPDF::getQ2max
double getQ2max(int nset, int member)
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
LHECOMWeightProducer::LHECOMWeightProducer
LHECOMWeightProducer(const edm::ParameterSet &)
Definition: LHECOMWeightProducer.cc:56
HLT_FULL_cff.weights
weights
Definition: HLT_FULL_cff.py:99170
LHECOMWeightProducer::_origECMS
double _origECMS
Definition: LHECOMWeightProducer.cc:37
Run.h
LHAPDF::extrapolate
void extrapolate(bool extrapolate=true)
verbose
static constexpr int verbose
Definition: HLTExoticaSubAnalysis.cc:25
LHAPDF::xfx
double xfx(int nset, double x, double Q, int fl)
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
LHAPDF::getXmin
double getXmin(int nset, int member)
lhef::HEPRUP::PDFGUP
std::pair< int, int > PDFGUP
Definition: LesHouches.h:88
edm::ParameterSet
Definition: ParameterSet.h:47
GenEventInfoProduct.h
Event.h
LHECOMWeightProducer
Definition: LHECOMWeightProducer.cc:24
iEvent
int iEvent
Definition: GenABIO.cc:224
LHECOMWeightProducer::_pdfmember
int _pdfmember
Definition: LHECOMWeightProducer.cc:36
LHECOMWeightProducer::lheTag_
edm::InputTag lheTag_
Definition: LHECOMWeightProducer.cc:34
LHAPDF::getQ2min
double getQ2min(int nset, int member)
edm::EventSetup
Definition: EventSetup.h:58
LHECOMWeightProducer::beginRun
void beginRun(edm::Run const &run, const edm::EventSetup &es) override
Definition: LHECOMWeightProducer.cc:69
LHEEventProduct::hepeup
const lhef::HEPEUP & hepeup() const
Definition: LHEEventProduct.h:46
LHEEventProduct.h
lhef::HEPRUP::PDFSUP
std::pair< int, int > PDFSUP
Definition: LesHouches.h:94
LHAPDF::getXmax
double getXmax(int nset, int member)
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
writedatasetfile.run
run
Definition: writedatasetfile.py:27
Frameworkfwd.h
lhef::HEPEUP::IDUP
std::vector< int > IDUP
Definition: LesHouches.h:223
LHECOMWeightProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: LHECOMWeightProducer.cc:90
Exception
Definition: hltDiff.cc:245
LHAPDF::numberPDF
int numberPDF(int nset)
edm::EDProducer
Definition: EDProducer.h:35
LHAPDF
Definition: LHECOMWeightProducer.cc:43
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
ParameterSet.h
globals_cff.id2
id2
Definition: globals_cff.py:34
edm::Event
Definition: Event.h:73
lhef::HEPEUP::PUP
std::vector< FiveVector > PUP
Definition: LesHouches.h:246
edm::InputTag
Definition: InputTag.h:15
weight
Definition: weight.py:1
lhef::HEPEUP::SCALUP
double SCALUP
Definition: LesHouches.h:208
LHECOMWeightProducer::beginJob
void beginJob() override
Definition: LHECOMWeightProducer.cc:85
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27