1 |
// $Id: FillerMCEventInfo.cc,v 1.5 2009/03/22 10:00:29 loizides Exp $
|
2 |
|
3 |
#include "MitProd/TreeFiller/interface/FillerMCEventInfo.h"
|
4 |
#include "FWCore/MessageLogger/interface/MessageLogger.h"
|
5 |
#include "DataFormats/Common/interface/Handle.h"
|
6 |
#include "DataFormats/HepMCCandidate/interface/PdfInfo.h"
|
7 |
#include "SimDataFormats/HepMCProduct/interface/HepMCProduct.h"
|
8 |
#include "MitAna/DataTree/interface/Names.h"
|
9 |
#include "MitAna/DataTree/interface/MCEventInfo.h"
|
10 |
#include "MitProd/ObjectService/interface/ObjectService.h"
|
11 |
|
12 |
using namespace std;
|
13 |
using namespace edm;
|
14 |
using namespace mithep;
|
15 |
|
16 |
//--------------------------------------------------------------------------------------------------
|
17 |
FillerMCEventInfo::FillerMCEventInfo(const ParameterSet &cfg, const char *name, bool active) :
|
18 |
BaseFiller(cfg,"MCEventInfo",active),
|
19 |
evtName_(Conf().getUntrackedParameter<string>("evtName",Names::gkMCEvtInfoBrn)),
|
20 |
genHepMCEvName_(Conf().getUntrackedParameter<string>("genHepMCEventEdmName","source")),
|
21 |
genEvWeightName_(Conf().getUntrackedParameter<string>("genEventWeightEdmName","genEventWeight")),
|
22 |
genEvScaleName_(Conf().getUntrackedParameter<string>("genEventScaleEdmName","genEventScale")),
|
23 |
genEvProcIdName_(Conf().getUntrackedParameter<string>("genEventProcIdEdmName","genEventProcID")),
|
24 |
genPdfInfoName_(Conf().getUntrackedParameter<string>("genPdfInfoEdmName","genEventPdfInfo")),
|
25 |
eventInfo_(new MCEventInfo())
|
26 |
{
|
27 |
// Constructor.
|
28 |
}
|
29 |
|
30 |
//--------------------------------------------------------------------------------------------------
|
31 |
FillerMCEventInfo::~FillerMCEventInfo()
|
32 |
{
|
33 |
// Destructor.
|
34 |
|
35 |
delete eventInfo_;
|
36 |
}
|
37 |
|
38 |
//--------------------------------------------------------------------------------------------------
|
39 |
void FillerMCEventInfo::BookDataBlock(TreeWriter &tws)
|
40 |
{
|
41 |
// Create run info tre and book our branches.
|
42 |
|
43 |
tws.AddBranch(evtName_,&eventInfo_);
|
44 |
OS()->add<mithep::MCEventInfo>(eventInfo_,evtName_);
|
45 |
}
|
46 |
|
47 |
//--------------------------------------------------------------------------------------------------
|
48 |
void FillerMCEventInfo::FillDataBlock(const edm::Event &event,
|
49 |
const edm::EventSetup &setup)
|
50 |
{
|
51 |
// Fill our data structures.
|
52 |
|
53 |
if (event.isRealData()) {
|
54 |
PrintErrorAndExit("Expected monte-carlo record, but did not get it. Aborting.");
|
55 |
}
|
56 |
|
57 |
Handle<edm::HepMCProduct> hHepMCProduct;
|
58 |
if (genHepMCEvName_.empty() || !GetProductSafe(genHepMCEvName_, hHepMCProduct, event)) {
|
59 |
|
60 |
if (!genEvWeightName_.empty()) {
|
61 |
Handle<double> genEventWeight;
|
62 |
GetProduct(genEvWeightName_, genEventWeight, event);
|
63 |
eventInfo_->SetWeight(*genEventWeight);
|
64 |
}
|
65 |
|
66 |
if (!genEvScaleName_.empty()) {
|
67 |
Handle<double> genEventScale;
|
68 |
GetProduct(genEvScaleName_, genEventScale, event);
|
69 |
eventInfo_->SetScale(*genEventScale);
|
70 |
}
|
71 |
|
72 |
if (!genEvProcIdName_.empty()) {
|
73 |
Handle<int> genEventProcId;
|
74 |
GetProduct(genEvProcIdName_, genEventProcId, event);
|
75 |
eventInfo_->SetProcessId(*genEventProcId);
|
76 |
}
|
77 |
|
78 |
if (!genPdfInfoName_.empty()) {
|
79 |
Handle<reco::PdfInfo> genPdfInfo;
|
80 |
GetProduct(genPdfInfoName_, genPdfInfo, event);
|
81 |
eventInfo_->SetId1(genPdfInfo->id1);
|
82 |
eventInfo_->SetId2(genPdfInfo->id2);
|
83 |
eventInfo_->SetPdf1(genPdfInfo->pdf1);
|
84 |
eventInfo_->SetPdf2(genPdfInfo->pdf2);
|
85 |
eventInfo_->SetScalePdf(genPdfInfo->scalePDF);
|
86 |
eventInfo_->SetX1(genPdfInfo->pdf1);
|
87 |
eventInfo_->SetX2(genPdfInfo->pdf2);
|
88 |
}
|
89 |
} else {
|
90 |
const HepMC::GenEvent *genEvt = hHepMCProduct->GetEvent();
|
91 |
eventInfo_->SetScale(genEvt->event_scale());
|
92 |
eventInfo_->SetProcessId(genEvt->signal_process_id());
|
93 |
HepMC::WeightContainer wc = genEvt->weights();
|
94 |
if (wc.size() > 0)
|
95 |
eventInfo_->SetWeight(wc[0]);
|
96 |
const HepMC::PdfInfo *genPdfInfo = genEvt->pdf_info();
|
97 |
eventInfo_->SetId1(genPdfInfo->id1());
|
98 |
eventInfo_->SetId2(genPdfInfo->id2());
|
99 |
eventInfo_->SetPdf1(genPdfInfo->pdf1());
|
100 |
eventInfo_->SetPdf2(genPdfInfo->pdf2());
|
101 |
eventInfo_->SetScalePdf(genPdfInfo->scalePDF());
|
102 |
eventInfo_->SetX1(genPdfInfo->pdf1());
|
103 |
eventInfo_->SetX2(genPdfInfo->pdf2());
|
104 |
}
|
105 |
}
|