ATLAS Offline Software
Loading...
Searching...
No Matches
dqm_algorithms::ReferenceMasking Struct Reference

#include <ReferenceMasking.h>

Inheritance diagram for dqm_algorithms::ReferenceMasking:
Collaboration diagram for dqm_algorithms::ReferenceMasking:

Public Member Functions

 ReferenceMasking (const std::string &name)
ReferenceMaskingclone ()
void printDescription (std::ostream &out)
dqm_core::Result * execute (const std::string &, const TObject &, const dqm_core::AlgorithmConfig &)

Private Attributes

std::string m_name

Detailed Description

Definition at line 18 of file ReferenceMasking.h.

Constructor & Destructor Documentation

◆ ReferenceMasking()

dqm_algorithms::ReferenceMasking::ReferenceMasking ( const std::string & name)

Definition at line 21 of file ReferenceMasking.cxx.

21 : m_name(name)
22{
23 dqm_core::AlgorithmManager::instance().registerAlgorithm("ReferenceMasking_"+name,this);
24}

Member Function Documentation

◆ clone()

dqm_algorithms::ReferenceMasking * dqm_algorithms::ReferenceMasking::clone ( )

Definition at line 27 of file ReferenceMasking.cxx.

28{
29 return new ReferenceMasking(m_name);
30}
ReferenceMasking(const std::string &name)

◆ execute()

dqm_core::Result * dqm_algorithms::ReferenceMasking::execute ( const std::string & name,
const TObject & object,
const dqm_core::AlgorithmConfig & config )

Definition at line 33 of file ReferenceMasking.cxx.

34{
35 TH1 * histogram;
36
37 if( object.IsA()->InheritsFrom( "TH1" ) ) {
38 histogram = (TH1*)(object.Clone());
39 } else {
40 throw dqm_core::BadConfig( ERS_HERE, name, "does not inherit from TH1" );
41 }
42
43 const double minstat = dqm_algorithms::tools::GetFirstFromMap( "MinStat", config.getParameters(), -1);
44
45 if (histogram->GetEffectiveEntries() < minstat ) {
46 dqm_core::Result *result = new dqm_core::Result(dqm_core::Result::Undefined);
47 result->tags_["InsufficientEffectiveEntries"] = histogram->GetEffectiveEntries();
48 delete histogram;
49 return result;
50 }
51
52 double coeff = dqm_algorithms::tools::GetFirstFromMap("C",config.getParameters(), 0);
53
54 TH1* refhist;
55 try {
56 refhist = static_cast<TH1 *>( config.getReference() );
57 }
58 catch ( dqm_core::Exception & ex ) {
59 throw dqm_core::BadRefHist(ERS_HERE,name," Could not retreive reference");
60 }
61 if (histogram->GetDimension() != refhist->GetDimension() ) {
62 throw dqm_core::BadRefHist( ERS_HERE, "Dimension", name );
63 }
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 );
66 }
67 ERS_DEBUG(2,"Masking bins according to reference. Will set content to"<<coeff);
68
69 for ( Int_t binx=histogram->GetXaxis()->GetFirst() ; binx<=histogram->GetXaxis()->GetLast();++binx)
70 {
71 for ( Int_t biny=histogram->GetYaxis()->GetFirst() ; biny<=histogram->GetYaxis()->GetLast();++biny)
72 {
73 for ( Int_t binz=histogram->GetZaxis()->GetFirst() ; binz<=histogram->GetZaxis()->GetLast();++binz)
74 {
75 if ( refhist->GetBinContent(binx,biny,binz) != 0 )
76 {
77 ERS_DEBUG(3,"Found a bin in reference with entries !=0, set content of bin ("<<binx<<","<<biny<<","<<binz<<") with "<<coeff);
78 histogram->SetBinContent( binx , biny, binz , coeff );
79 }
80 }
81 }
82 }
83
84
85
86 //Now prepare to run the real algorithm...
87 ERS_DEBUG(2,"Running algorithm: "<<m_name);
88 dqm_core::Algorithm* subalgorithm;
89 try {
90 subalgorithm = dqm_core::AlgorithmManager::instance().getAlgorithm( m_name );
91 }
92 catch ( dqm_core::AlgorithmNotFound& ex )
93 {
94 ERS_DEBUG(2,"Cannot find algorithm:"+m_name);
95 throw dqm_core::BadConfig(ERS_HERE,name,"Cannot Find sub-algorithm:"+m_name);
96 }
97 dqm_core::Result* result = subalgorithm->execute( name , *histogram , config);
98 ERS_DEBUG(2,"Sub algorithm returns:"<<*result);
99 //Add modified histogram to result
100 TObject* robject = result->getObject();
101 if ( !robject ) //No object defined, add this
102 {
103 ERS_DEBUG(2,"Adding modified histogram in result");
104 result->object_.reset(histogram);
105 }
106 else //Transform the object_ in TObjArray (if needed) and add this result
107 {
108 ERS_DEBUG(2,"Result already have an associated TObject, appending modified histogram");
109 if ( robject->IsA()->InheritsFrom("TObjArray") ) //It is already an array add it...
110 {
111 static_cast<TObjArray*>(robject)->Add( histogram );
112 //Check in again
113 result->object_.reset( robject );
114 }
115 else
116 {
117 TObjArray* array = new TObjArray( 2 );
118 array->AddAt( robject , 0 );
119 array->AddAt( histogram , 1 );
120 //Check in again
121 result->object_.reset( array );
122 }
123 ERS_DEBUG(2,"Result now have a TObjArray of size:"<<static_cast<TObjArray*>(result->getObject())->GetEntries());
124 }
125 return result;
126}
std::string histogram
Definition chains.cxx:52
double GetFirstFromMap(const std::string &paramName, const std::map< std::string, double > &params)
#define IsA
Declare the TObject style functions.

◆ printDescription()

void dqm_algorithms::ReferenceMasking::printDescription ( std::ostream & out)

Definition at line 129 of file ReferenceMasking.cxx.

129 {
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;
133
134}

Member Data Documentation

◆ m_name

std::string dqm_algorithms::ReferenceMasking::m_name
private

Definition at line 26 of file ReferenceMasking.h.


The documentation for this struct was generated from the following files: