ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMCEventInfo.cc
Revision: 1.13
Committed: Fri Sep 25 08:42:50 2009 UTC (15 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a
Changes since 1.12: +2 -2 lines
Log Message:
Extended interface of BookDataBlock to contain event setup.

File Contents

# User Rev Content
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 }