36{
38 const TH1 * refhist;
39
40 if (
object.
IsA()->InheritsFrom(
"TH1")) {
43 throw dqm_core::BadConfig(ERS_HERE, name, "dimension > 1");
44 }
45 } else {
46 throw dqm_core::BadConfig(ERS_HERE, name, "does not inherit from TH1");
47 }
48
56
58 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
61 }
62
63 if (firstbin>lastbin){
64 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
65 result->tags_[
"Range_is_not_correct "] = 1;
67 }
68
69 if (firstbin<0){
70 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
71 result->tags_[
"Range_is_not_correct "] = 2;
73 }
74
76 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
77 result->tags_[
"Range_is_not_correct "] = 3;
79 }
80
81 try {
82 refhist =
dynamic_cast<const TH1*
>(
config.getReference() );
83 }
84 catch ( dqm_core::Exception & ex ) {
85 throw dqm_core::BadRefHist(ERS_HERE,name," Could not retreive reference");
86 }
87
88 if (!refhist) {
89 throw dqm_core::BadRefHist(ERS_HERE, name, "Reference is not a histogram");
90 }
91
92 if (
histogram->GetDimension() != refhist->GetDimension() ) {
93 throw dqm_core::BadRefHist( ERS_HERE, name, "Dimension" );
94 }
95
96 if ((
histogram->GetNbinsX() != refhist->GetNbinsX()) || (
histogram->GetNbinsY() != refhist->GetNbinsY())) {
97 throw dqm_core::BadRefHist( ERS_HERE, name, "Non-matching number of bins of reference" );
98 }
99
100 std::map<std::string, double>
results;
101
104 double sumcontent = 0;
105 double CorrectedMean= 0;
106
107 for (
int i = firstbin;
i <= lastbin; ++
i) {
108
109 const double binContent =
histogram->GetBinContent(i);
110 const double binCenter =
histogram->GetXaxis()->GetBinCenter(i);
111
112 sum += binContent*binCenter;
113 sumcontent += binContent;
114 }
115
116
117 if (sumcontent==0){
118 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
119 result->tags_[
"Content_is_zero "] = 1;
121 }
122
124
125 if (correctusingbin1>0){
128 double correctionfactor=bin0/Nentries;
129 CorrectedMean=
mean-(
p0+
p1*correctionfactor);
130 }
131
133 results[
"Abs_Diff"] = std::fabs(
mean-expectedaverage);
134 if (correctusingbin1>0){
135 results[
"Corrected_Weighted_mean"]= CorrectedMean+expectedaverage;
136 results[
"Corrected_Abs_Diff"]=std::fabs(CorrectedMean);
137 }else{
138 results[
"Corrected_Weighted_mean"]=0;
139 results[
"Corrected_Abs_Diff"]=0;
140 }
141
143}
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
#define IsA
Declare the TObject style functions.