50 if(
object.
IsA()->InheritsFrom(
"TH1" )) {
53 throw dqm_core::BadConfig( ERS_HERE,
name,
"dimension > 2 " );
56 throw dqm_core::BadConfig( ERS_HERE,
name,
"does not inherit from TH1");
61 refhist =
static_cast<TH1*
>(
config.getReference() );
63 catch (dqm_core::BadConfig &ex ) {
68 catch( dqm_core::Exception & ex ) {
69 throw dqm_core::BadConfig( ERS_HERE,
name, ex.what(), ex );
76 catch( dqm_core::Exception & ex ) {
77 throw dqm_core::BadConfig( ERS_HERE,
name, ex.what(), ex );
81 if (
histogram->GetDimension() != refhist->GetDimension() ) {
82 throw dqm_core::BadRefHist( ERS_HERE,
name,
"Dimension" );
85 if ((
histogram->GetNbinsX() != refhist->GetNbinsX()) || (
histogram->GetNbinsY() != refhist->GetNbinsY())) {
86 throw dqm_core::BadRefHist( ERS_HERE,
"number of bins",
name );
98 const TProfile2D* profile2D(
nullptr);
100 if(minBinEntries > 0) {
102 else if (
object.InheritsFrom(
"TProfile2D")) profile2D =
dynamic_cast<const TProfile2D*
>(&
object);
118 if (greaterthan && lessthan) {
119 ERS_INFO(
"Both GreaterThan and LessThan parameters set: Will check for for both");
124 double bin_threshold;
132 catch( dqm_core::Exception & ex ) {
133 throw dqm_core::BadConfig( ERS_HERE,
name, ex.what(), ex );
144 TH1* resulthisto =
nullptr;
145 if (publishHistogram) {
148 }
else if (
histogram->InheritsFrom(
"TH1")) {
151 throw dqm_core::BadConfig( ERS_HERE,
name,
"does not inherit from TH1" );
154 resulthisto->Reset();
157 if (refhist && normref) {
159 refhist->Scale(
ratio);
164 for (
int j =
range[2]; j <=
range[3]; ++j ) {
165 if (minBinEntries > 0) {
168 if (
profile->GetBinEntries(
bin) < minBinEntries) {
172 }
else if (profile2D) {
173 if (profile2D->GetBinEntries(
bin) < minBinEntries) {
183 refcont = refhist->GetBinContent(
i,j);
190 if (increferr && refhist ) {
191 double referr = refhist->GetBinError(
i,j);
201 double inputcont =
histogram->GetBinContent(
i,j);
202 double diff=inputcont - refcont;
207 if (ignorezero && refcont==0)
continue;
208 if (ignorezero && !refhist && inputcont==0)
continue;
209 if (ignoreInputZero && inputcont==0)
continue;
213 if (greaterthan &&
diff < 0. )
continue;
214 if (lessthan &&
diff > 0. )
continue;
216 if ( (std::abs(
sigma) > bin_threshold) && (std::abs(
diff) > maxdiffabs) && (std::abs(
reldiff) > maxdiffrel) ){
217 if (resulthisto) resulthisto->SetBinContent(
i,j,inputcont);
219 if (publish &&
count<maxpublish){
227 if (
value == -99999) {
228 ERS_DEBUG(1,
"Number of bins " << bin_threshold <<
" Sigma away from reference is " <<
count);
230 ERS_DEBUG(1,
"Number of bins " << bin_threshold <<
" Sigma away from "<<
value<<
" is " <<
count);
233 ERS_DEBUG(1,
"Green threshold: "<< gthreshold <<
" bin(s); Red threshold : " << rthreshold <<
" bin(s) ");
237 result->tags_[
"NSkippedBins"] = nSkippedBins;
238 if (resulthisto)
result->object_ = (boost::shared_ptr<TObject>)(TObject*)(resulthisto);
240 if (gthreshold > rthreshold) {
241 if (
count >= gthreshold ) {
243 }
else if (
count > rthreshold ) {
244 result->status_ = dqm_core::Result::Yellow;
249 if (
count <= gthreshold ) {
251 }
else if (
count < rthreshold ) {
252 result->status_ = dqm_core::Result::Yellow;