58 {
59
60 dqm_core::Result*
result =
new dqm_core::Result();
61 result->status_ = dqm_core::Result::Undefined;
63
64 if(
object.
IsA()->InheritsFrom(
"TH2" ) ) {
67 throw dqm_core::BadConfig( ERS_HERE, name, "dimension > 2 " );
68 }
69 } else {
70 throw dqm_core::BadConfig( ERS_HERE, name, "does not inherit from TH2" );
71 }
72
74 int Xbins =
histogram->GetXaxis()->GetNbins();
75 int Ybins =
histogram->GetYaxis()->GetNbins();
76
77 double mean_global =
histogram->GetMean(1);
78
79 float Meanlow;
80 float Meanhigh;
81 float redMean;
82 if (Xbins > 100) {
86 } else if (Xbins < 15) {
90 } else {
94 }
95
96 std::vector<float> MeanX(Ybins, 0.0);
97
98 bool redflag = false;
99 bool yellowflag = false;
100 bool greenflag = false;
101 int Passed=0;
102 for (
int i = 1;
i <= Ybins;
i++) {
103 MeanX[
i]=h2->GetBinContent(i);
104 if (MeanX[i]==0) {
105 Passed = Passed +1;
106 continue;
107 }
108 if (MeanX[i] > Meanlow && MeanX[i] < Meanhigh) Passed = Passed +1;
109 if (abs(MeanX[i]-mean_global) > abs(redMean-mean_global)) redflag=true;
110 }
111 double gthreshold;
112 double rthreshold;
113 try {
116 }
117 catch ( dqm_core::Exception & ex ) {
118 throw dqm_core::BadConfig( ERS_HERE, name, ex.what(), ex );
119 }
120 if (Passed >= (Ybins-gthreshold) && not redflag) greenflag=true;
121 else if (Passed >= (Ybins-rthreshold) && not redflag) yellowflag=true;
122 else redflag=true;
123 if ( greenflag ) {
124 result->status_ = dqm_core::Result::Green;
125 } else if ( yellowflag ) {
126 result->status_ = dqm_core::Result::Yellow;
127 } else {
128 result->status_ = dqm_core::Result::Red;
129 }
130 result->tags_[
"Xbins"] = Xbins;
131 result->tags_[
"Passed"] = Passed;
132 result->tags_[
"MeanGlobal"] = mean_global;
134 }
TProfile(*args, **kwargs)
#define IsA
Declare the TObject style functions.