9 jetMatchEffStat_(0,0,0,0,0.,0.,0.,0.),
10 totalEffStat_(0,0,0,0,0.,0.,0.,0.)
48 if (!genLumiInfo.
isValid())
return;
52 std::vector<GenLumiInfoProduct::ProcessInfo> theProcesses = genLumiInfo->getProcessInfos();
53 unsigned int theProcesses_size = theProcesses.size();
58 if(theProcesses_size!=1){
59 edm::LogError(
"GenXSecAnalyzer::endLuminosityBlock") <<
"Pure parton shower has thisProcessInfos size!=1";
62 if(theProcesses[0].lheXSec().
value()<1
e-6){
63 edm::LogError(
"GenXSecAnalyzer::endLuminosityBlock") <<
"cross section value = " << theProcesses[0].lheXSec().value();
69 for(
unsigned int ip=0; ip < theProcesses_size; ip++)
73 double passw = temp_killed.
sum();
74 double passw2 = temp_killed.
sum2();
75 double totalw = temp_selected.
sum();
76 double totalw2 = temp_selected.
sum2();
78 theProcesses[ip].nPassPos(),
79 theProcesses[ip].nPassNeg(),
80 theProcesses[ip].nTotalPos(),
81 theProcesses[ip].nTotalNeg(),
95 else if(!
products_[
i].samePhysics(*genLumiInfo))
97 edm::LogError(
"GenXSecAnalyzer::endLuminosityBlock") <<
"Merging samples that come from different physics processes";
122 sigSum += proc.
tried().
sum() * hepxsec_value;
125 double sigAve = totalN>1
e-6? sigSum/totalN: 0;
131 double sum_numerator = 0;
132 double sum_denominator = 0;
136 double sigSelSum = 0.0;
138 double sigBrSum = 0.0;
139 double err2Sum = 0.0;
140 double errBr2Sum = 0.0;
142 unsigned int vectorSize =
products_[
i].getProcessInfos().size();
143 for(
unsigned int ip=0; ip < vectorSize; ip++){
151 double sigma2Sum, sigma2Err;
152 sigma2Sum = hepxsec_value * hepxsec_value;
153 sigma2Err = hepxsec_error * hepxsec_error;
155 double sigmaAvg = hepxsec_value;
162 fracAcc = ntotal > 1
e-6? npass/ntotal: -1;
169 if(fracAcc<1
e-6)
continue;
173 double sigmaFin = sigmaAvg * fracAcc * fracBr;
174 double sigmaFinBr = sigmaFin * fracBr;
183 double effp = ntotal_pos > 1
e-6?
184 (double)proc.
nPassPos()/ntotal_pos:0;
185 double effp_err2 = ntotal_pos > 1
e-6?
186 (1-effp)*effp/ntotal_pos: 0;
189 double effn = ntotal_neg > 1
e-6?
190 (double)proc.
nPassNeg()/ntotal_neg:0;
191 double effn_err2 = ntotal_neg > 1
e-6?
192 (1-effn)*effn/ntotal_neg: 0;
194 efferr2 = ntotal > 0 ?
195 (ntotal_pos*ntotal_pos*effp_err2 +
196 ntotal_neg*ntotal_neg*effn_err2)/ntotal/ntotal:0;
206 double numerator = (passw2*failw*failw + failw2*passw*passw);
208 efferr2 = denominator>1
e-6?
209 numerator/denominator:0;
213 double delta2Veto = efferr2/fracAcc/fracAcc;
214 double delta2Sum = delta2Veto
215 + sigma2Err / sigma2Sum;
216 relErr = (delta2Sum > 0.0 ?
219 double deltaFin = sigmaFin * relErr;
220 double deltaFinBr = sigmaFinBr * relErr;
222 sigSelSum += sigmaAvg;
224 sigBrSum += sigmaFinBr;
225 err2Sum += deltaFin * deltaFin;
226 errBr2Sum += deltaFinBr * deltaFinBr;
233 sum_denominator += (dN> 1
e-6)? 1/dN/dN: 0;
234 sum_numerator += (dN> 1
e-6)? sigBrSum/dN/dN: 0;
238 double final_value = sum_denominator > 0? sum_numerator/sum_denominator : 0;
239 double final_error = sum_denominator > 0? 1/
sqrt(sum_denominator) : -1;
250 <<
"------------------------------------" <<
"\n"
251 <<
"GenXsecAnalyzer:" <<
"\n"
252 <<
"------------------------------------";
255 edm::LogPrint(
"GenXSecAnalyzer") <<
"------------------------------------" <<
"\n"
256 <<
"Cross-section summary not available" <<
"\n"
257 <<
"------------------------------------";
270 edm::LogPrint(
"GenXSecAnalyzer") <<
"------------------------------------" <<
"\n"
271 <<
"Overall cross-section summary:" <<
"\n"
272 <<
"------------------------------------";
274 edm::LogPrint(
"GenXSecAnalyzer") <<
"jet matching efficiency = " <<
277 << std::setprecision(6) << jetmatching_eff_total <<
" +- " << jetmatching_err_total <<
"\n";
279 edm::LogPrint(
"GenXSecAnalyzer") <<
"Before filter: cross section = " << std::setprecision(6) <<
xsec_.
value() <<
" +- " << std::setprecision(6) <<
xsec_.
error() <<
" pb";
281 edm::LogPrint(
"GenXSecAnalyzer") <<
"Filter efficiency = " << std::setprecision(6)
282 << filterOnly_eff <<
" +- " << filterOnly_err;
285 double xsec_after =
xsec_.
value()*filterOnly_eff ;
287 filterOnly_err*filterOnly_err/filterOnly_eff/filterOnly_eff);
289 edm::LogPrint(
"GenXSecAnalyzer") <<
"After filter: cross section = "
290 << std::setprecision(6) << xsec_after
292 << std::setprecision(6) << error_after
unsigned int nTotalNeg() const
std::vector< GenLumiInfoProduct > products_
virtual void endJob() override
GenFilterInfo totalEffStat_
virtual void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
virtual void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
TrainProcessor *const proc
double filterEfficiency(int idwtup=+3) const
edm::EDGetTokenT< GenLumiInfoProduct > genLumiInfoToken_
unsigned int nPassPos() const
GenFilterInfo jetMatchEffStat_
GenLumiInfoProduct::XSec xsec_
unsigned int nPassNeg() const
bool mergeProduct(GenFilterInfo const &other)
double sumPassWeights() const
FinalStat acceptedBr() const
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
virtual void beginJob() override
double filterEfficiencyError(int idwtup=+3) const
FinalStat selected() const
edm::EDGetTokenT< GenFilterInfo > genFilterInfoToken_
GenXSecAnalyzer(const edm::ParameterSet &)
unsigned int nTotalPos() const
double sumWeights() const
FinalStat accepted() const
Power< A, B >::type pow(const A &a, const B &b)