1 |
loizides |
1.13 |
// $Id: FillerMCEventInfo.cc,v 1.12 2009/08/11 15:28:55 loizides Exp $
|
2 |
loizides |
1.1 |
|
3 |
|
|
#include "MitProd/TreeFiller/interface/FillerMCEventInfo.h"
|
4 |
bendavid |
1.7 |
#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
|
5 |
loizides |
1.12 |
#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
|
6 |
loizides |
1.1 |
#include "MitAna/DataTree/interface/Names.h"
|
7 |
|
|
#include "MitAna/DataTree/interface/MCEventInfo.h"
|
8 |
loizides |
1.6 |
#include "MitProd/ObjectService/interface/ObjectService.h"
|
9 |
phedex |
1.8 |
#include "DataFormats/HepMCCandidate/interface/FlavorHistory.h"
|
10 |
|
|
#include "DataFormats/HepMCCandidate/interface/FlavorHistoryEvent.h"
|
11 |
|
|
#include "PhysicsTools/HepMCCandAlgos/interface/FlavorHistoryProducer.h"
|
12 |
loizides |
1.1 |
|
13 |
|
|
using namespace std;
|
14 |
|
|
using namespace edm;
|
15 |
|
|
using namespace mithep;
|
16 |
|
|
|
17 |
|
|
//--------------------------------------------------------------------------------------------------
|
18 |
loizides |
1.3 |
FillerMCEventInfo::FillerMCEventInfo(const ParameterSet &cfg, const char *name, bool active) :
|
19 |
loizides |
1.1 |
BaseFiller(cfg,"MCEventInfo",active),
|
20 |
loizides |
1.12 |
evtName_(Conf().getUntrackedParameter<string>("evtName",Names::gkMCEvtInfoBrn)),
|
21 |
|
|
genHepMCEvName_(Conf().getUntrackedParameter<string>("genHepMCEventEdmName","generator")),
|
22 |
|
|
genEvtInfoName_(Conf().getUntrackedParameter<string>("genEvtInfoEdmName","generator")),
|
23 |
sixie |
1.9 |
flavorHistoryActive_(Conf().getUntrackedParameter<bool>("flavorHistoryActive",false)),
|
24 |
loizides |
1.12 |
flavorHistName_(Conf().getUntrackedParameter<string>("flavorHistEdmName","flavorHistoryFilter")),
|
25 |
loizides |
1.1 |
eventInfo_(new MCEventInfo())
|
26 |
|
|
{
|
27 |
|
|
// Constructor.
|
28 |
|
|
}
|
29 |
|
|
|
30 |
|
|
//--------------------------------------------------------------------------------------------------
|
31 |
|
|
FillerMCEventInfo::~FillerMCEventInfo()
|
32 |
|
|
{
|
33 |
|
|
// Destructor.
|
34 |
|
|
|
35 |
|
|
delete eventInfo_;
|
36 |
|
|
}
|
37 |
|
|
|
38 |
|
|
//--------------------------------------------------------------------------------------------------
|
39 |
loizides |
1.13 |
void FillerMCEventInfo::BookDataBlock(TreeWriter &tws, const edm::EventSetup &es)
|
40 |
loizides |
1.1 |
{
|
41 |
|
|
// Create run info tre and book our branches.
|
42 |
|
|
|
43 |
loizides |
1.2 |
tws.AddBranch(evtName_,&eventInfo_);
|
44 |
|
|
OS()->add<mithep::MCEventInfo>(eventInfo_,evtName_);
|
45 |
loizides |
1.1 |
}
|
46 |
|
|
|
47 |
|
|
//--------------------------------------------------------------------------------------------------
|
48 |
|
|
void FillerMCEventInfo::FillDataBlock(const edm::Event &event,
|
49 |
|
|
const edm::EventSetup &setup)
|
50 |
|
|
{
|
51 |
|
|
// Fill our data structures.
|
52 |
|
|
|
53 |
loizides |
1.3 |
if (event.isRealData()) {
|
54 |
|
|
PrintErrorAndExit("Expected monte-carlo record, but did not get it. Aborting.");
|
55 |
|
|
}
|
56 |
loizides |
1.12 |
|
57 |
|
|
Handle<GenEventInfoProduct> hEvtInfo;
|
58 |
loizides |
1.3 |
|
59 |
loizides |
1.12 |
if (genEvtInfoName_.empty() || !GetProductSafe(genEvtInfoName_, hEvtInfo, event)) {
|
60 |
loizides |
1.4 |
|
61 |
loizides |
1.12 |
// fall back to hepmc if requested
|
62 |
|
|
if (!genHepMCEvName_.empty()) {
|
63 |
|
|
Handle<edm::HepMCProduct> hHepMCProduct;
|
64 |
|
|
GetProduct(genHepMCEvName_, hHepMCProduct, event);
|
65 |
|
|
|
66 |
|
|
const HepMC::GenEvent *genEvt = hHepMCProduct->GetEvent();
|
67 |
|
|
eventInfo_->SetScale(genEvt->event_scale());
|
68 |
|
|
eventInfo_->SetProcessId(genEvt->signal_process_id());
|
69 |
|
|
HepMC::WeightContainer wc = genEvt->weights();
|
70 |
|
|
Double_t weight = 0;
|
71 |
|
|
for (int i = 0; i< wc.size(); ++i)
|
72 |
|
|
weight *= wc[i];
|
73 |
|
|
eventInfo_->SetWeight(weight);
|
74 |
|
|
const HepMC::PdfInfo *genPdfInfo = genEvt->pdf_info();
|
75 |
|
|
eventInfo_->SetId1(genPdfInfo->id1());
|
76 |
|
|
eventInfo_->SetId2(genPdfInfo->id2());
|
77 |
|
|
eventInfo_->SetPdf1(genPdfInfo->pdf1());
|
78 |
|
|
eventInfo_->SetPdf2(genPdfInfo->pdf2());
|
79 |
|
|
eventInfo_->SetScalePdf(genPdfInfo->scalePDF());
|
80 |
|
|
eventInfo_->SetX1(genPdfInfo->x1());
|
81 |
|
|
eventInfo_->SetX2(genPdfInfo->x2());
|
82 |
loizides |
1.5 |
}
|
83 |
|
|
|
84 |
loizides |
1.12 |
} else {
|
85 |
loizides |
1.5 |
|
86 |
loizides |
1.12 |
// use event info product
|
87 |
|
|
eventInfo_->SetScale(hEvtInfo->qScale());
|
88 |
|
|
eventInfo_->SetProcessId(hEvtInfo->signalProcessID());
|
89 |
|
|
eventInfo_->SetWeight(hEvtInfo->weight());
|
90 |
|
|
if (hEvtInfo->hasPDF()) {
|
91 |
|
|
const gen::PdfInfo *pdf = hEvtInfo->pdf();
|
92 |
|
|
eventInfo_->SetId1(pdf->id.first);
|
93 |
|
|
eventInfo_->SetId2(pdf->id.second);
|
94 |
|
|
eventInfo_->SetPdf1(pdf->xPDF.first);
|
95 |
|
|
eventInfo_->SetPdf2(pdf->xPDF.second);
|
96 |
|
|
eventInfo_->SetScalePdf(pdf->scalePDF);
|
97 |
|
|
eventInfo_->SetX1(pdf->x.first);
|
98 |
|
|
eventInfo_->SetX2(pdf->x.second);
|
99 |
loizides |
1.5 |
}
|
100 |
loizides |
1.4 |
}
|
101 |
phedex |
1.8 |
|
102 |
loizides |
1.12 |
// fill flavor history path if requested
|
103 |
sixie |
1.9 |
if (flavorHistoryActive_) {
|
104 |
loizides |
1.12 |
Handle<unsigned int> flavorHistoryPath;
|
105 |
|
|
GetProduct(flavorHistName_, flavorHistoryPath, event);
|
106 |
sixie |
1.9 |
eventInfo_->SetFlavorHistoryPath(*flavorHistoryPath);
|
107 |
|
|
}
|
108 |
loizides |
1.1 |
}
|