forked from cms-sw/cmssw
-
Notifications
You must be signed in to change notification settings - Fork 0
/
HepMCFilterDriver.cc
97 lines (75 loc) · 2.6 KB
/
HepMCFilterDriver.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "GeneratorInterface/Core/interface/HepMCFilterDriver.h"
#include "GeneratorInterface/Core/interface/GenericDauHepMCFilter.h"
#include "GeneratorInterface/Core/interface/PartonShowerBsHepMCFilter.h"
#include "GeneratorInterface/Core/interface/EmbeddingHepMCFilter.h"
#include "GeneratorInterface/Core/interface/PythiaHepMCFilterGammaGamma.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
HepMCFilterDriver::HepMCFilterDriver(const edm::ParameterSet& pset) :
filter_(nullptr),
numEventsPassPos_(0),
numEventsPassNeg_(0),
numEventsTotalPos_(0),
numEventsTotalNeg_(0),
sumpass_w_(0.),
sumpass_w2_(0.),
sumtotal_w_(0.),
sumtotal_w2_(0.)
{
std::string filterName = pset.getParameter<std::string>("filterName");
edm::ParameterSet filterParameters = pset.getParameter<edm::ParameterSet>("filterParameters");
if (filterName=="GenericDauHepMCFilter") {
filter_ = new GenericDauHepMCFilter(filterParameters);
}
else if (filterName=="PartonShowerBsHepMCFilter") {
filter_ = new PartonShowerBsHepMCFilter(filterParameters);
}
else if (filterName=="EmbeddingHepMCFilter") {
filter_ = new EmbeddingHepMCFilter(filterParameters);
}
else if (filterName=="PythiaHepMCFilterGammaGamma") {
filter_ = new PythiaHepMCFilterGammaGamma(filterParameters);
}
else {
throw edm::Exception(edm::errors::Configuration,"HepMCFilterDriver") << "Invalid HepMCFilter name:" << filterName;
}
}
HepMCFilterDriver::~HepMCFilterDriver()
{
if (filter_) delete filter_;
}
bool HepMCFilterDriver::filter(const HepMC::GenEvent* evt, double weight)
{
if(weight>0)
numEventsTotalPos_++;
else
numEventsTotalNeg_++;
sumtotal_w_ += weight;
sumtotal_w2_ += weight*weight;
bool accepted = filter_->filter(evt);
if (accepted) {
if(weight>0)
numEventsPassPos_++;
else
numEventsPassNeg_++;
sumpass_w_ += weight;
sumpass_w2_ += weight*weight;
}
return accepted;
}
void HepMCFilterDriver::statistics() const
{
unsigned int ntried_ = numEventsTotalPos_ + numEventsTotalNeg_;
unsigned int naccepted_ = numEventsPassPos_ + numEventsPassNeg_;
printf("ntried = %i, naccepted = %i, efficiency = %5f\n",ntried_,naccepted_,(double)naccepted_/(double)ntried_);
printf("weighttried = %5f, weightaccepted = %5f, efficiency = %5f\n",sumtotal_w_,sumpass_w_,sumpass_w_/sumtotal_w_);
}
void HepMCFilterDriver::resetStatistics() {
numEventsPassPos_ = 0;
numEventsPassNeg_ = 0;
numEventsTotalPos_ = 0;
numEventsTotalNeg_ = 0;
sumpass_w_ = 0;
sumpass_w2_ = 0;
sumtotal_w_ = 0;
sumtotal_w2_ = 0;
}