43{
44
46
47 if (
object.
IsA()->InheritsFrom(
"TH1")){
48
50
52 throw dqm_core::BadConfig( ERS_HERE, name, "dimension > 3 " );
53 }
54 } else {
55 throw dqm_core::BadConfig( ERS_HERE, name, "does not inherit from TH1" );
56 }
57
59 ERS_DEBUG(1,
"Histogram " <<
histogram->GetName()<<
" is Empty");
60 return new dqm_core::Result(dqm_core::Result::Red);
61 }
62
68
69 double gthreshold;
70 double rthreshold;
71
72 try {
75 }
76 catch( dqm_core::Exception & ex ) {
77 throw dqm_core::BadConfig( ERS_HERE, name, ex.what(), ex );
78 }
79
81
83
84 dqm_core::Result*
result =
new dqm_core::Result();
85
86
87 std::vector<double> binvals,binerrs;
88 std::vector<double> refvals,referrs;
89 double small_num = 1.e-05;
90
91
92 bool even_nbins = ((
range[1] -
range[0] + 1) % 2 == 0) ?
true : false;
93 int range_comp = (
range[1] -
range[0] + 1) / 2;
94
95 int start_bin_low =
range[1] - range_comp;
96 int start_bin_high =
range[0] + range_comp;
97
98
99 if (!even_nbins){
100
101 double xbin0 =
histogram->GetBinCenter(start_bin_low);
102
103 double bin0 =
histogram->GetBinContent(start_bin_low);
106
107 double binerr0 =
histogram->GetBinError(start_bin_low);
108 double binerr1 =
histogram->GetBinError(start_bin_low + 1);
109 double binerr2 =
histogram->GetBinError(start_bin_low - 1);
110
112 double errmean_bins = std::sqrt(std::pow(binerr1,2.)+std::pow(binerr2,2.)/2.);
113
114 double diff = std::abs(bin0 - mean_bins);
115 double differr = std::sqrt(std::pow(binerr0,2.)+std::pow(errmean_bins,2));
117
118 if ((!ignorezero) || (bin0 != 0 && mean_bins != 0)){
119
120 binvals.push_back(bin0);
121 binerrs.push_back(binerr0);
122
123 refvals.push_back(mean_bins);
124 referrs.push_back(errmean_bins);
125
127
128
129 if (sigma > bin_threshold && (std::abs(
diff) > mindiffabs)) {
130
132
133 if (publish &&
count <= maxpublish) {
134
135 std::ostringstream
os;
136 os <<
"Sigma(" << xbin0 <<
")(" << bin0 <<
"," << mean_bins <<
")";
137 std::string badbins =
os.str();
139 ERS_DEBUG(1,"x bin" << start_bin_low << " value " << bin0 << " sigma difference " << sigma);
140
141 }
142 }
143 }
144 }
145
146
147 for (
int i = 0;
i < range_comp; ++
i){
148
149 double binhigh =
histogram->GetBinContent(start_bin_high+i);
150 double binlow =
histogram->GetBinContent(start_bin_low-i);
151
152 double xbinhigh =
histogram->GetBinCenter(start_bin_high+i);
153
154 double binerrhigh =
histogram->GetBinError(start_bin_high+i);
155 double binerrlow =
histogram->GetBinError(start_bin_low-i);
156
157 double diff = std::abs(binlow - binhigh);
158 double differr = std::sqrt(std::pow(binerrlow,2.)+std::pow(binerrhigh,2));
159
160 if ((!ignorezero) || (binlow != 0 && binhigh != 0)){
161
162 binvals.push_back(binhigh);
163 binerrs.push_back(binerrlow);
164 refvals.push_back(binlow);
165 referrs.push_back(binerrlow);
166
168 if (differr > small_num)
sigma =
diff/differr;
169
170 if (sigma > bin_threshold && (std::abs(
diff) > mindiffabs)) {
171
173 if (publish &&
count <= maxpublish){
174
175 std::ostringstream
os;
176 os <<
"Sigma(" << xbinhigh <<
")" <<
"(" << binlow <<
"," << binhigh <<
")";
177 std::string badbins =
os.str();
179 ERS_DEBUG(1,"x bin " << start_bin_high+i << " value " << binhigh);
180 ERS_DEBUG(1,"x bin " << start_bin_low-i << " value " << binlow << " sigma difference " << sigma);
181 }
182 }
183 }
184 }
185
187
188 ERS_DEBUG(1,
"Number of bins " << bin_threshold <<
" Sigma away from reference bin is " <<
count);
189 ERS_DEBUG(1, "Green threshold: "<< gthreshold << " bin(s); Red threshold : " << rthreshold << " bin(s) ");
191 result->tags_[
"SigmaChisq"] = chisq_prob.second;
192
193
194
195 double sigma_check = std::abs(chisq_prob.second);
196 if ( sigma_check <= gthreshold ) {
197 result->status_ = dqm_core::Result::Green;
198 } else if ( sigma_check < rthreshold ) {
199 result->status_ = dqm_core::Result::Yellow;
200 } else {
201 result->status_ = dqm_core::Result::Red;
202 }
204
205}
void diff(const Jet &rJet1, const Jet &rJet2, std::map< std::string, double > varDiff)
Difference between jets - Non-Class function required by trigger.
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
setBGCode setTAP setLVL2ErrorBits bool
#define IsA
Declare the TObject style functions.