44 const TObject&
object,
45 const dqm_core::AlgorithmConfig&
config )
49 if(
object.
IsA()->InheritsFrom(
"TH1" ) ) {
52 throw dqm_core::BadConfig( ERS_HERE, name,
"dimension > 2 " );
55 throw dqm_core::BadConfig( ERS_HERE, name,
"does not inherit from TH1" );
67 if (greaterthan && lessthan) {
68 ERS_INFO(
"Both GreaterThan and LessThan parameters set: Will check for for both");
73 if (
histogram->GetEntries() < minstat ) {
74 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
87 catch( dqm_core::Exception & ex ) {
88 throw dqm_core::BadConfig( ERS_HERE, name, ex.what(), ex );
97 }
else if (
histogram->InheritsFrom(
"TH1")) {
100 throw dqm_core::BadConfig( ERS_HERE, name,
"does not inherit from TH1" );
103 resulthisto->Reset();
108 for (
int i = range[0]; i <= range[1]; ++i ) {
109 for (
int j = range[2]; j <= range[3]; ++j ) {
110 if (
histogram->GetBinContent(i,j) == ignoreval)
continue;
111 if (
histogram->GetBinError(i,j) == 0 )
continue;
113 sume += 1./std::pow(
histogram->GetBinError(i,j),2);
121 dqm_core::Result *
result =
new dqm_core::Result(dqm_core::Result::Undefined);
122 result->tags_[
"SumErrors"] = sume;
127 dqm_core::Result*
result =
new dqm_core::Result();
128 result->tags_[
"Average"] = avg;
130 for (
int k = range[0]; k <= range[1]; ++k ) {
131 for (
int l = range[2]; l <= range[3]; ++l ) {
132 double inputcont =
histogram->GetBinContent(k,l);
133 double inputerr =
histogram->GetBinError(k,l);
134 double diff=inputcont - avg;
136 if(avg!=0) reldiff=
diff/avg;
137 else if(
diff==0) reldiff=0;
138 if (inputcont == ignoreval)
continue;
140 double sigma=
diff/inputerr;
141 if (greaterthan &&
diff < 0. )
continue;
142 if (lessthan &&
diff > 0. )
continue;
144 if ( (std::abs(sigma) > bin_threshold) && (std::abs(
diff) > maxdiffabs) && (std::abs(reldiff) > maxdiffrel) ) {
145 resulthisto->SetBinContent(k,l,inputcont);
147 if (publish &&
count < maxpublish){
157 result->object_ = boost::shared_ptr<TObject>(resulthisto);
159 ERS_DEBUG(1,
"Number of bins " << bin_threshold <<
" Sigma away from average of "<< avg <<
" is " <<
count);
160 ERS_DEBUG(1,
"Green threshold: "<< gthreshold <<
" bin(s); Red threshold : " << rthreshold <<
" bin(s) ");
164 if (
count <= gthreshold ) {
165 result->status_ = dqm_core::Result::Green;
166 }
else if (
count < rthreshold ) {
167 result->status_ = dqm_core::Result::Yellow;
169 result->status_ = dqm_core::Result::Red;
static dqm_algorithms::BinContentComp myInstance
void diff(const Jet &rJet1, const Jet &rJet2, std::map< std::string, double > varDiff)
Difference between jets - Non-Class function required by trigger.