139 execute(
const std::string& name,
const TObject&
data,
const dqm_core::AlgorithmConfig& config)
142 dqm_core::Result* result =
new dqm_core::Result();
143 result->status_ = dqm_core::Result::Undefined;
148 if (!
data.IsA()->InheritsFrom(
"TH1")) {
149 throw dqm_core::BadConfig(ERS_HERE, name,
"does not inherit from TH1");
151 const TH1*
h =
static_cast<const TH1*
>(&
data);
152 if (
h->GetDimension() > 2) {
153 throw dqm_core::BadConfig(ERS_HERE, name,
"dimension > 2 ");
168 if (
h->GetDimension() == 1) {
172 std::vector<bool> Mask;
176 double h_entries =
h->GetEntries();
181 double bincon =
h->GetBinContent(
bin + 1);
182 double ebincon =
h->GetBinError(
bin + 1);
186 bool do_printbin =
false;
192 ) do_printbin =
true;
197 ) do_printbin = ! do_printbin;
203 double binvalX =
h->GetXaxis()->GetBinCenter(
bin + 1);
204 std::string binname = Form(
"%s_Bin(%u | %.*e)", name.c_str(),
bin, 2, binvalX);
205 std::string sigbinname = Form(
"%s_EBin(%u | %.*e)", name.c_str(),
bin, 2, binvalX);
211 result->tags_[binname.c_str()] = (bincon / h_entries);
212 if (Error ==1 ) result->tags_[sigbinname.c_str()] = ebincon ;
214 result->tags_[binname.c_str()] = bincon;
215 if (Error ==1 ) result->tags_[sigbinname.c_str()] = ebincon ;
226 if (
h->GetDimension() == 2) {
231 std::vector< std::vector<bool> > Mask;
235 double h_entries =
h->GetEntries();
239 for (
int binX = 0; binX <
m_NbinsX; binX++) {
240 for (
int binY = 0; binY <
m_NbinsY; binY++) {
241 double bincon =
h->GetBinContent(binX + 1, binY + 1);
242 double ebincon =
h->GetBinError(binX + 1, binY + 1);
243 if( !Mask[binX][binY] ) {
244 bool do_printbin =
false;
250 ) do_printbin =
true;
255 ) do_printbin = ! do_printbin;
260 double binvalX =
h->GetXaxis()->GetBinCenter(binX + 1);
261 double binvalY =
h->GetYaxis()->GetBinCenter(binY + 1);
262 std::string binname = Form(
"%s_Bin((%u,%u) | %.*e,%.*e)", name.c_str(), binX, binY, 2, binvalX, 2, binvalY);
263 std::string sigbinname = Form(
"%s_EBin((%u,%u) | %.*e,%.*e)", name.c_str(), binX, binY, 2, binvalX, 2, binvalY);
265 result->tags_[binname.c_str()] = (bincon / h_entries);
266 result->tags_[sigbinname.c_str()] = ebincon;
269 result->tags_[binname.c_str()] = bincon;
270 result->tags_[sigbinname.c_str()] = ebincon;
281 std::string pub_excess = Form(
"%s_PROBLEM_Publishable_UnPrinted",name.c_str());
282 result->tags_[pub_excess.c_str()] = Npublished -
m_UnMask_All;
345 std::map<std::string, double>::const_iterator mask_map_bin;
348 bool default_Mask =
true;
351 mask_map_bin = params.find(unmaskAllStr);
352 if ( mask_map_bin != params.end() ) {
353 if(mask_map_bin->second > 0.5) {
355 default_Mask =
false;
358 std::vector<bool> Mask(
m_NbinsX, default_Mask);
362 std::string mask_bin = Form(
"Mask_%d",
bin + 1);
363 mask_map_bin = params.find(mask_bin.c_str());
364 if ( mask_map_bin != params.end() ) {
365 if(mask_map_bin->second > 0.5) Mask[
bin] =
true;
366 else Mask[
bin] =
false;
375 std::map<std::string, double>::const_iterator mask_map_bin;
378 bool default_Mask =
true;
381 mask_map_bin = params.find(unmaskAllStr);
382 if ( mask_map_bin != params.end() ) {
383 if(mask_map_bin->second > 0.5) {
385 default_Mask =
false;
388 std::vector< std::vector<bool> > Mask(
m_NbinsX, std::vector<bool>(
m_NbinsY, default_Mask));
391 for (
int binX = 0; binX <
m_NbinsX; binX++ ) {
392 for (
int binY = 0; binY <
m_NbinsY; binY++ ) {
393 std::string mask_bin = Form(
"Mask_%d_%d", binX + 1, binY + 1);
394 mask_map_bin = params.find(mask_bin.c_str());
395 if ( mask_map_bin != params.end() ) {
396 if(mask_map_bin->second > 0.5) Mask[binX][binY] =
true;
397 else Mask[binX][binY] =
false;