55execute(
const std::string& name,
const TObject&
data,
const dqm_core::AlgorithmConfig&
config )
57 dqm_core::Result::Status status(dqm_core::Result::Undefined);
60 const TH1*
h =
dynamic_cast<const TH1*
>( &
data );
62 throw dqm_core::BadConfig( ERS_HERE, name,
"Cannot cast data to type TH1" );
65 const TH1*
ref =
dynamic_cast<const TH1*
>(
config.getReference() );
67 throw dqm_core::BadConfig( ERS_HERE, name,
"Cannot obtain reference of type TH1" );
71 const double mean_data =
h->GetMean();
72 const double mean_ref =
ref->GetMean();
74 const double mean_data_err =
h->GetMeanError();
75 const double mean_ref_err =
ref->GetMeanError();
80 const double s = ( mean_data - mean_ref );
81 const double s2 = s*s;
82 const double e2 = mean_data_err*mean_data_err + mean_ref_err*mean_ref_err;
84 const double chi2 = s2/e2;
92 if(
chi2 < chi2_warn ) {
93 status = dqm_core::Result::Green;
95 else if(
chi2 < chi2_err ) {
96 status = dqm_core::Result::Yellow;
99 status = dqm_core::Result::Red;
103 return new dqm_core::Result( status );
134 std::map<std::string,double> grmap =
config.getGreenThresholds();
135 std::map<std::string,double>::const_iterator i = grmap.find( limitName );
136 if( i == grmap.end() ) {
137 throw dqm_core::BadConfig( ERS_HERE, std::move(limitName),
"Cannot find green threshold" );
148 std::map<std::string,double> rdmap =
config.getRedThresholds();
149 std::map<std::string,double>::const_iterator i = rdmap.find( limitName );
150 if( i == rdmap.end() ) {
151 throw dqm_core::BadConfig( ERS_HERE, std::move(limitName),
"Cannot find red threshold" );