129 execute(
const std::string& name,
const TObject&
data,
const dqm_core::AlgorithmConfig&
config)
132 dqm_core::Result*
result =
new dqm_core::Result();
133 result->status_ = dqm_core::Result::Undefined;
138 if (!
data.IsA()->InheritsFrom(
"TH1")) {
139 throw dqm_core::BadConfig(ERS_HERE, name,
"does not inherit from TH1");
141 const TH1*
h =
static_cast<const TH1*
>(&
data);
142 if (
h->GetDimension() > 2) {
143 throw dqm_core::BadConfig(ERS_HERE, name,
"dimension > 2 ");
158 if (
h->GetDimension() == 1) {
162 std::vector<bool> Mask;
166 double h_entries =
h->GetEntries();
171 double bincon =
h->GetBinContent(
bin + 1);
172 double ebincon =
h->GetBinError(
bin + 1);
176 bool do_printbin =
false;
182 ) do_printbin =
true;
187 ) do_printbin = ! do_printbin;
193 double binvalX =
h->GetXaxis()->GetBinCenter(
bin + 1);
194 std::string binname = Form(
"%s_Bin(%u | %.*e)", name.c_str(),
bin, 2, binvalX);
195 std::string sigbinname = Form(
"%s_EBin(%u | %.*e)", name.c_str(),
bin, 2, binvalX);
201 result->tags_[binname.c_str()] = (bincon / h_entries);
202 if (Error ==1 )
result->tags_[sigbinname.c_str()] = ebincon ;
204 result->tags_[binname.c_str()] = bincon;
205 if (Error ==1 )
result->tags_[sigbinname.c_str()] = ebincon ;
216 if (
h->GetDimension() == 2) {
221 std::vector< std::vector<bool> > Mask;
225 double h_entries =
h->GetEntries();
229 for (
int binX = 0; binX <
m_NbinsX; binX++) {
230 for (
int binY = 0; binY <
m_NbinsY; binY++) {
231 double bincon =
h->GetBinContent(binX + 1, binY + 1);
232 double ebincon =
h->GetBinError(binX + 1, binY + 1);
233 if( !Mask[binX][binY] ) {
234 bool do_printbin =
false;
240 ) do_printbin =
true;
245 ) do_printbin = ! do_printbin;
250 double binvalX =
h->GetXaxis()->GetBinCenter(binX + 1);
251 double binvalY =
h->GetYaxis()->GetBinCenter(binY + 1);
252 std::string binname = Form(
"%s_Bin((%u,%u) | %.*e,%.*e)", name.c_str(), binX, binY, 2, binvalX, 2, binvalY);
253 std::string sigbinname = Form(
"%s_EBin((%u,%u) | %.*e,%.*e)", name.c_str(), binX, binY, 2, binvalX, 2, binvalY);
255 result->tags_[binname.c_str()] = (bincon / h_entries);
256 result->tags_[sigbinname.c_str()] = ebincon;
259 result->tags_[binname.c_str()] = bincon;
260 result->tags_[sigbinname.c_str()] = ebincon;
271 std::string pub_excess = Form(
"%s_PROBLEM_Publishable_UnPrinted",name.c_str());
335 std::map<std::string, double>::const_iterator mask_map_bin;
338 bool default_Mask =
true;
341 mask_map_bin = params.find(
"UnMask_All");
342 if ( mask_map_bin != params.end() ) {
343 if(mask_map_bin->second > 0.5) {
345 default_Mask =
false;
348 std::vector<bool> Mask(
m_NbinsX, default_Mask);
352 std::string mask_bin = Form(
"Mask_%d",
bin + 1);
353 mask_map_bin = params.find(mask_bin.c_str());
354 if ( mask_map_bin != params.end() ) {
355 if(mask_map_bin->second > 0.5) Mask[
bin] =
true;
356 else Mask[
bin] =
false;
365 std::map<std::string, double>::const_iterator mask_map_bin;
368 bool default_Mask =
true;
371 mask_map_bin = params.find(
"UnMask_All");
372 if ( mask_map_bin != params.end() ) {
373 if(mask_map_bin->second > 0.5) {
375 default_Mask =
false;
378 std::vector< std::vector<bool> > Mask(
m_NbinsX, std::vector<bool>(
m_NbinsY, default_Mask));
381 for (
int binX = 0; binX <
m_NbinsX; binX++ ) {
382 for (
int binY = 0; binY <
m_NbinsY; binY++ ) {
383 std::string mask_bin = Form(
"Mask_%d_%d", binX + 1, binY + 1);
384 mask_map_bin = params.find(mask_bin.c_str());
385 if ( mask_map_bin != params.end() ) {
386 if(mask_map_bin->second > 0.5) Mask[binX][binY] =
true;
387 else Mask[binX][binY] =
false;