@@ -37,6 +37,8 @@ void METTesterPostProcessor::dqmEndJob(DQMStore::IBooker &ibook_, DQMStore::IGet
3737 }
3838}
3939
40+ bool METTesterPostProcessor::mCheckHisto (MElem *h) { return h && h->getRootObject (); }
41+
4042void METTesterPostProcessor::mFillAggrHistograms (std::string metdir, DQMStore::IGetter &iget) {
4143 for (std::string bt : {" MET" , " Phi" }) { // loop over bin types
4244 for (unsigned idx = 0 ; idx < mNBins [bt]; ++idx) {
@@ -46,12 +48,27 @@ void METTesterPostProcessor::mFillAggrHistograms(std::string metdir, DQMStore::I
4648 mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], idx) = iget.get (metdir + " /METDiff_GenMETTrue_" + bt + edges);
4749 mArrayIdx <MElem *>(mMETRatio_GenMETTrue [bt], idx) = iget.get (metdir + " /METRatio_GenMETTrue_" + bt + edges);
4850 mArrayIdx <MElem *>(mMETDeltaPhi_GenMETTrue [bt], idx) = iget.get (metdir + " /METDeltaPhi_GenMETTrue_" + bt + edges);
51+
52+ // check one object, if it exists, then the remaining ME's exists too
53+ // for genmet none of these ME's are filled
54+ if (mCheckHisto (mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], 0 ))) {
55+ // log histograms with zero entries
56+ if (mArrayIdx <MElem *>(mMET [bt], idx)->getEntries () < mEpsilonDouble ||
57+ mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], idx)->getEntries () < mEpsilonDouble ||
58+ mArrayIdx <MElem *>(mMETRatio_GenMETTrue [bt], idx)->getEntries () < mEpsilonDouble ||
59+ mArrayIdx <MElem *>(mMETDeltaPhi_GenMETTrue [bt], idx)->getEntries () < mEpsilonDouble ) {
60+ LogDebug (" METTesterPostProcessor" )
61+ << " At least one of the " << bt + edges << " histograms has zero entries:\n "
62+ << " MET: " << mArrayIdx <MElem *>(mMET [bt], idx)->getEntries () << " \n "
63+ << " METDiff: " << mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], idx)->getEntries () << " \n "
64+ << " METRatio: " << mArrayIdx <MElem *>(mMETRatio_GenMETTrue [bt], idx)->getEntries () << " \n "
65+ << " METDeltaPhi: " << mArrayIdx <MElem *>(mMETDeltaPhi_GenMETTrue [bt], idx)->getEntries ();
66+ }
67+ }
4968 }
5069
51- // check one object, if it exists, then the remaining ME's exists too
52- // for genmet none of these ME's are filled
53- if (mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], 0 ) &&
54- mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], 0 )->getRootObject ()) {
70+ if (mCheckHisto (mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], 0 ))) {
71+ // compute and store MET quantities
5572 for (unsigned idx = 0 ; idx < mNBins [bt]; ++idx) {
5673 mMETDiffAggr [bt]->setBinContent (idx + 1 , mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], idx)->getMean ());
5774 mMETDiffAggr [bt]->setBinError (idx + 1 , mArrayIdx <MElem *>(mMETDiff_GenMETTrue [bt], idx)->getRMS ());
@@ -67,11 +84,13 @@ void METTesterPostProcessor::mFillAggrHistograms(std::string metdir, DQMStore::I
6784 mMETResolAggr [bt]->setBinContent (idx + 1 , metRMS);
6885 mMETResolAggr [bt]->setBinError (idx + 1 , resolError);
6986
70- float significance = metMean / metRMS;
87+ float significance = metRMS < mEpsilonFloat ? 0 .f : metMean / metRMS;
88+ float significance_error = metRMS < mEpsilonFloat || metMean < mEpsilonFloat
89+ ? 0 .f
90+ : significance * std::sqrt ((metRMS * metRMS / (metMean * metMean)) +
91+ (resolError * resolError / (metRMS * metRMS)));
7192 mMETSignAggr [bt]->setBinContent (idx + 1 , significance);
72- mMETSignAggr [bt]->setBinError (idx + 1 ,
73- significance * std::sqrt ((metRMS * metRMS / (metMean * metMean)) +
74- (resolError * resolError / (metRMS * metRMS))));
93+ mMETSignAggr [bt]->setBinError (idx + 1 , significance_error);
7594 }
7695 }
7796 }
0 commit comments