13 #include <TObjArray.h>
14 #include <dqm_core/AlgorithmManager.h>
37 if(
object.
IsA()->InheritsFrom(
"TH1" ) ) {
40 throw dqm_core::BadConfig( ERS_HERE,
name,
"does not inherit from TH1" );
45 if (
histogram->GetEffectiveEntries() < minstat ) {
47 result->tags_[
"InsufficientEffectiveEntries"] =
histogram->GetEffectiveEntries();
56 refhist =
static_cast<TH1 *
>(
config.getReference() );
58 catch ( dqm_core::Exception & ex ) {
59 throw dqm_core::BadRefHist(ERS_HERE,
name,
" Could not retreive reference");
61 if (
histogram->GetDimension() != refhist->GetDimension() ) {
62 throw dqm_core::BadRefHist( ERS_HERE,
"Dimension",
name );
64 if ((
histogram->GetNbinsX() != refhist->GetNbinsX()) || (
histogram->GetNbinsY() != refhist->GetNbinsY()) || refhist->GetNbinsZ() !=
histogram->GetNbinsZ() ) {
65 throw dqm_core::BadRefHist( ERS_HERE,
"number of bins",
name );
67 ERS_DEBUG(2,
"Masking bins according to reference. Will set content to"<<
coeff);
69 for ( Int_t binx=
histogram->GetXaxis()->GetFirst() ; binx<=histogram->GetXaxis()->GetLast();++binx)
71 for ( Int_t biny=
histogram->GetYaxis()->GetFirst() ; biny<=histogram->GetYaxis()->GetLast();++biny)
73 for ( Int_t binz=
histogram->GetZaxis()->GetFirst() ; binz<=histogram->GetZaxis()->GetLast();++binz)
75 if ( refhist->GetBinContent(binx,biny,binz) != 0 )
77 ERS_DEBUG(3,
"Found a bin in reference with entries !=0, set content of bin ("<<binx<<
","<<biny<<
","<<binz<<
") with "<<
coeff);
87 ERS_DEBUG(2,
"Running algorithm: "<<m_name);
88 dqm_core::Algorithm* subalgorithm;
92 catch ( dqm_core::AlgorithmNotFound& ex )
94 ERS_DEBUG(2,
"Cannot find algorithm:"+m_name);
95 throw dqm_core::BadConfig(ERS_HERE,
name,
"Cannot Find sub-algorithm:"+m_name);
98 ERS_DEBUG(2,
"Sub algorithm returns:"<<*
result);
100 TObject* robject =
result->getObject();
103 ERS_DEBUG(2,
"Adding modified histogram in result");
108 ERS_DEBUG(2,
"Result already have an associated TObject, appending modified histogram");
109 if ( robject->IsA()->InheritsFrom(
"TObjArray") )
111 static_cast<TObjArray*
>(robject)->Add(
histogram );
113 result->object_.reset( robject );
117 TObjArray*
array =
new TObjArray( 2 );
118 array->AddAt( robject , 0 );
123 ERS_DEBUG(2,
"Result now have a TObjArray of size:"<<
static_cast<TObjArray*
>(
result->getObject())->GetEntries());
130 out<<
"ReferenceMasking_"+m_name+
" : Performst the "+m_name+
" algorithm after using the reference histogram to mask bins. I.e. Perform TH1::SetBinContent(bin,c) for all bins of reference with entries!=0. c (default 0) can be set via configuration. Adds to the output TObject list the modified input histogram."<<std::endl;
131 out<<
"Optional Parameter : MinStat : Minimum histogram statistics needed to perform Algorithm"<<std::endl;
132 out<<
"Optional Parameter : C : The value of the content of the masked bin. Default c=0"<<std::endl;