19 errorProb_ = ERROR_PROB_THRESHOLD;
20 warningProb_ = WARNING_PROB_THRESHOLD;
21 setAlgoName(
"NO_ALGORITHM");
23 message_ =
"NO_MESSAGE";
29 raiseDQMError(
"QCriterion",
"virtual runTest method called" );
52 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
53 << me-> getFullname() <<
"\n";
60 nbins = me->
getTH1F()->GetXaxis()->GetNbins();
61 nbinsref = me->
getRefTH1F()->GetXaxis()->GetNbins();
64 if (nbins != nbinsref)
return -1;
69 nbins = me->
getTH1S()->GetXaxis()->GetNbins();
70 nbinsref = me->
getRefTH1S()->GetXaxis()->GetNbins();
73 if (nbins != nbinsref)
return -1;
78 nbins = me->
getTH1D()->GetXaxis()->GetNbins();
79 nbinsref = me->
getRefTH1D()->GetXaxis()->GetNbins();
82 if (nbins != nbinsref)
return -1;
87 nbins = me->
getTH2F()->GetXaxis()->GetNbins() *
88 me->
getTH2F()->GetYaxis()->GetNbins();
89 nbinsref = me->
getRefTH2F()->GetXaxis()->GetNbins() *
93 if (nbins != nbinsref)
return -1;
99 nbins = me->
getTH2S()->GetXaxis()->GetNbins() *
100 me->
getTH2S()->GetYaxis()->GetNbins();
101 nbinsref = me->
getRefTH2S()->GetXaxis()->GetNbins() *
105 if (nbins != nbinsref)
return -1;
111 nbins = me->
getTH2D()->GetXaxis()->GetNbins() *
112 me->
getTH2D()->GetYaxis()->GetNbins();
113 nbinsref = me->
getRefTH2D()->GetXaxis()->GetNbins() *
117 if (nbins != nbinsref)
return -1;
123 nbins = me->
getTH3F()->GetXaxis()->GetNbins() *
124 me->
getTH3F()->GetYaxis()->GetNbins() *
125 me->
getTH3F()->GetZaxis()->GetNbins();
126 nbinsref = me->
getRefTH3F()->GetXaxis()->GetNbins() *
131 if (nbins != nbinsref)
return -1;
138 <<
" ME does not contain TH1F/TH1S/TH1D/TH2F/TH2S/TH2D/TH3F, exiting\n";
145 bool failure =
false;
149 if (contents != ref_->GetBinContent(
bin))
153 badChannels_.push_back(chan);
156 if (failure)
return 0;
173 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
174 << me-> getFullname() <<
"\n";
203 <<
" ME does not contain TH1F/TH1S/TH1D/TProfile, exiting\n";
208 int ncx1 = h->GetXaxis()->GetNbins();
209 int ncx2 = ref_->GetXaxis()->GetNbins();
214 <<
" different number of channels! ("
215 << ncx1 <<
", " << ncx2 <<
"), exiting\n";
221 Ndof_ = 0; chi2_ = -1.; ncx1 = ncx2 = -1;
223 int i, i_start, i_end;
224 double chi2 = 0.;
int ndof = 0;
int constraint = 0;
229 i_start = h->GetXaxis()->GetFirst();
230 i_end = h->GetXaxis()->GetLast();
232 ndof = i_end-i_start+1-constraint;
235 double sum1=0, sum2=0;
236 for (i=i_start; i<=i_end; i++)
238 sum1 += h->GetBinContent(i);
239 sum2 += ref_->GetBinContent(i);
247 <<
" Test Histogram " << h->GetName()
248 <<
" is empty, exiting\n";
255 <<
" Ref Histogram " << ref_->GetName()
256 <<
" is empty, exiting\n";
260 double bin1, bin2, err1, err2,
temp;
261 for (i=i_start; i<=i_end; i++)
263 bin1 = h->GetBinContent(i)/sum1;
264 bin2 = ref_->GetBinContent(i)/sum2;
265 if (bin1 ==0 && bin2==0)
272 err1=h->GetBinError(i); err2=ref_->GetBinError(i);
273 if (err1 == 0 && err2 == 0)
277 <<
" bins with non-zero content and zero error, exiting\n";
280 err1*=err1 ; err2*=err2;
281 err1/=sum1*sum1 ; err2/=sum2*sum2;
282 chi2 +=temp*temp/(err1+err2);
285 chi2_ = chi2; Ndof_ = ndof;
286 return TMath::Prob(0.5*chi2,
int(0.5*ndof));
295 const double difprec = 1
e-5;
305 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
306 << me-> getFullname() <<
"\n";
335 <<
" ME does not contain TH1F/TH1S/TH1D/TProfile, exiting\n";
340 int ncx1 = h->GetXaxis()->GetNbins();
341 int ncx2 = ref_->GetXaxis()->GetNbins();
346 <<
" different number of channels! ("
347 << ncx1 <<
", " << ncx2 <<
"), exiting\n";
351 double diff1 = TMath::Abs(h->GetXaxis()->GetXmin() - ref_->GetXaxis()->GetXmin());
352 double diff2 = TMath::Abs(h->GetXaxis()->GetXmax() - ref_->GetXaxis()->GetXmax());
353 if (diff1 > difprec || diff2 > difprec)
357 <<
" histograms with different binning, exiting\n";
362 Bool_t afunc1 = kFALSE; Bool_t afunc2 = kFALSE;
363 double sum1 = 0, sum2 = 0;
364 double ew1, ew2, w1 = 0,
w2 = 0;
366 for (bin=1;bin<=ncx1;bin++)
368 sum1 += h->GetBinContent(bin);
369 sum2 += ref_->GetBinContent(bin);
370 ew1 = h->GetBinError(bin);
371 ew2 = ref_->GetBinError(bin);
380 <<
" Test Histogram: " << h->GetName()
381 <<
": integral is zero, exiting\n";
388 <<
" Ref Histogram: " << ref_->GetName()
389 <<
": integral is zero, exiting\n";
393 double tsum1 = sum1;
double tsum2 = sum2;
394 tsum1 += h->GetBinContent(0);
395 tsum2 += ref_->GetBinContent(0);
396 tsum1 += h->GetBinContent(ncx1+1);
397 tsum2 += ref_->GetBinContent(ncx1+1);
402 double ne1 = h->GetEntries();
403 double ne2 = ref_->GetEntries();
405 double difsum1 = (ne1-tsum1)/tsum1;
407 if (difsum1 > difprec &&
int(ne1) != ncx1)
409 if (h->GetSumw2N() == 0)
413 <<
" Weighted events and no Sumw2 for "
414 << h->GetName() <<
"\n";
418 esum1 = sum1*sum1/w1;
422 double difsum2 = (ne2-tsum2)/tsum2;
424 if (difsum2 > difprec &&
int(ne2) != ncx1)
426 if (ref_->GetSumw2N() == 0)
430 <<
" Weighted events and no Sumw2 for "
431 << ref_->GetName() <<
"\n";
435 esum2 = sum2*sum2/
w2;
439 double s1 = 1/tsum1;
double s2 = 1/tsum2;
441 double dfmax =0, rsum1 = 0, rsum2 = 0;
446 for ( bin=first; bin<=
last; bin++)
448 rsum1 += s1*h->GetBinContent(bin);
449 rsum2 += s2*ref_->GetBinContent(bin);
450 dfmax =
TMath::Max(dfmax,TMath::Abs(rsum1-rsum2));
455 if (afunc1) z = dfmax*TMath::Sqrt(esum2);
456 else if (afunc2) z = dfmax*TMath::Sqrt(esum1);
457 else z = dfmax*TMath::Sqrt(esum1*esum2/(esum1+esum2));
460 if (TMath::Abs(rsum1-1) > 0.002)
463 <<
" Numerical problems with histogram "
464 << h->GetName() <<
"\n";
465 if (TMath::Abs(rsum2-1) > 0.002)
468 <<
" Numerical problems with histogram "
469 << ref_->GetName() <<
"\n";
471 return TMath::KolmogorovProb(z);
479 badChannels_.clear();
488 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
489 << me-> getFullname() <<
"\n";
507 if (verbose_>0)
std::cout <<
"QTest:ContentsXRange"
509 <<
" does not contain TH1F/TH1S/TH1D, exiting\n";
513 if (!rangeInitialized_)
516 setAllowedXRange(h->GetXaxis()->GetXmin(), h->GetXaxis()->GetXmax());
520 int ncx = h->GetXaxis()->GetNbins();
530 for (bin = first; bin <=
last; ++
bin)
532 double contents = h->GetBinContent(bin);
533 double x = h->GetBinCenter(bin);
535 if (x < xmin_ || x > xmax_)fail +=
contents;
538 if (sum==0)
return 1;
540 return (sum - fail)/sum;
549 badChannels_.clear();
558 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
559 << me-> getFullname() <<
"\n";
578 <<
" does not contain TH1F/TH1S/TH1D, exiting\n";
582 if (!rangeInitialized_ || !h->GetXaxis())
return 1;
583 int ncx = h->GetXaxis()->GetNbins();
594 for (bin = first; bin <=
last; ++
bin)
596 double contents = h->GetBinContent(bin);
597 bool failure =
false;
598 failure = (contents < ymin_ || contents > ymax_);
601 DQMChannel chan(bin, 0, 0, contents, h->GetBinError(bin));
602 badChannels_.push_back(chan);
607 return 1.*(ncx -
fail)/ncx;
611 for (bin = first; bin <=
last; ++
bin)
613 double contents = h->GetBinContent(bin);
614 bool failure =
false;
615 if (contents) failure = (contents < ymin_ || contents > ymax_);
619 return 1.*(ncx -
fail)/ncx;
628 badChannels_.clear();
637 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
638 << me-> getFullname() <<
"\n";
674 <<
" does not contain TH1F/TH1S/TH1D/TH2F/TH2S/TH2D, exiting\n";
683 if (!rangeInitialized_ || !h1->GetXaxis() )
685 int ncx = h1->GetXaxis()->GetNbins();
691 for (bin = first; bin <=
last; ++
bin)
693 double contents = h1->GetBinContent(bin);
694 bool failure =
false;
695 failure = contents <= ymin_;
698 DQMChannel chan(bin, 0, 0, contents, h1->GetBinError(bin));
699 badChannels_.push_back(chan);
704 return 1.*(ncx -
fail)/ncx;
711 int ncx = h2->GetXaxis()->GetNbins();
712 int ncy = h2->GetYaxis()->GetNbins();
715 for (
int cx = 1; cx <= ncx; ++cx)
717 for (
int cy = 1; cy <= ncy; ++cy)
719 double contents = h2->GetBinContent(h2->GetBin(cx, cy));
720 bool failure =
false;
721 failure = contents <= ymin_;
724 DQMChannel chan(cx, cy, 0, contents, h2->GetBinError(h2->GetBin(cx, cy)));
725 badChannels_.push_back(chan);
731 return 1.*(ncx*ncy -
fail) / (ncx*ncy);
737 <<
" TH1/TH2F are NULL, exiting\n";
749 badChannels_.clear();
757 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
758 << me-> getFullname() <<
"\n";
764 nbins = me->
getTH1F()->GetXaxis()->GetNbins();
770 nbins = me->
getTH1S()->GetXaxis()->GetNbins();
776 nbins = me->
getTH1D()->GetXaxis()->GetNbins();
782 nbins = me->
getTH2F()->GetXaxis()->GetNbins() *
783 me->
getTH2F()->GetYaxis()->GetNbins();
789 nbins = me->
getTH2S()->GetXaxis()->GetNbins() *
790 me->
getTH2S()->GetYaxis()->GetNbins();
796 nbins = me->
getTH2D()->GetXaxis()->GetNbins() *
797 me->
getTH2D()->GetYaxis()->GetNbins();
805 <<
" does not contain TH1F/TH1S/TH1D or TH2F/TH2S/TH2D, exiting\n";
811 if ( !rangeInitialized_ || !h->GetXaxis() )
821 for (bin = first; bin <=
last; ++
bin)
823 double contents = h->GetBinContent(bin);
824 double average = getAverage(bin, h);
825 bool failure =
false;
827 failure = (((contents-
average)/TMath::Abs(average)) > tolerance_);
832 DQMChannel chan(bin, 0, 0, contents, h->GetBinError(bin));
833 badChannels_.push_back(chan);
838 return 1.*(nbins -
fail)/nbins;
848 int ncx = h->GetXaxis()->GetNbins();
849 double sum = 0;
int bin_low, bin_hi;
850 for (
unsigned i = 1;
i <= numNeighbors_; ++
i)
853 bin_low = bin-
i; bin_hi = bin+
i;
856 while (bin_low < first)
857 bin_low = ncx + bin_low;
859 bin_hi = bin_hi - ncx;
860 sum += h->GetBinContent(bin_low) + h->GetBinContent(bin_hi);
863 return sum/(numNeighbors_ * 2);
874 badChannels_.clear();
882 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
883 << me-> getFullname() <<
"\n";
893 ncx = me->
getTH2F()->GetXaxis()->GetNbins();
894 ncy = me->
getTH2F()->GetYaxis()->GetNbins();
900 ncx = me->
getTH2S()->GetXaxis()->GetNbins();
901 ncy = me->
getTH2S()->GetYaxis()->GetNbins();
907 ncx = me->
getTH2D()->GetXaxis()->GetNbins();
908 ncy = me->
getTH2D()->GetYaxis()->GetNbins();
928 std::cout <<
"QTest:ContentsWithinExpected"
929 <<
" ME does not contain TH2F/TH2S/TH2D/TPROFILE/TPROFILE2D, exiting\n";
937 if (checkMeanTolerance_)
940 for (
int cx = 1; cx <= ncx; ++cx)
942 for (
int cy = 1; cy <= ncy; ++cy)
946 sum += h->GetBinContent(h->GetBin(cx, cy));
951 sum += h->GetBinContent(h->GetBin(cx, cy));
956 sum += h->GetBinContent(h->GetBin(cx, cy));
961 if (me->
getTProfile()->GetBinEntries(h->GetBin(cx)) >= minEntries_/(ncx))
963 sum += h->GetBinContent(h->GetBin(cx));
969 if (me->
getTProfile2D()->GetBinEntries(h->GetBin(cx, cy)) >= minEntries_/(ncx*ncy))
971 sum += h->GetBinContent(h->GetBin(cx, cy));
985 for (
int cx = 1; cx <= ncx; ++cx)
987 for (
int cy = 1; cy <= ncy; ++cy)
989 bool failMean =
false;
990 bool failRMS =
false;
991 bool failMeanTolerance =
false;
994 me->
getTProfile()->GetBinEntries(h->GetBin(cx)) < minEntries_/(ncx))
998 me->
getTProfile2D()->GetBinEntries(h->GetBin(cx, cy)) < minEntries_/(ncx*ncy))
1003 double mean = h->GetBinContent(h->GetBin(cx, cy));
1004 failMean = (mean < minMean_ || mean > maxMean_);
1009 double rms = h->GetBinError(h->GetBin(cx, cy));
1010 failRMS = (rms < minRMS_ || rms > maxRMS_);
1013 if (checkMeanTolerance_)
1015 double mean = h->GetBinContent(h->GetBin(cx, cy));
1016 failMeanTolerance = (TMath::Abs(mean - average) > toleranceMean_*TMath::Abs(average));
1019 if (failMean || failRMS || failMeanTolerance)
1025 h->GetBinContent(h->GetBin(cx, cy)),
1026 h->GetBinError(h->GetBin(cx, cy)));
1027 badChannels_.push_back(chan);
1032 h->GetBinContent(h->GetBin(cx, cy)),
1033 h->GetBinError(h->GetBin(cx, cy)));
1034 badChannels_.push_back(chan);
1039 h->GetBinContent(h->GetBin(cx, cy)),
1040 h->GetBinError(h->GetBin(cx, cy)));
1041 badChannels_.push_back(chan);
1047 h->GetBinError(h->GetBin(cx)));
1048 badChannels_.push_back(chan);
1053 h->GetBinContent(h->GetBin(cx, cy)),
1054 h->GetBinError(h->GetBin(cx, cy)));
1055 badChannels_.push_back(chan);
1061 return 1.*(ncx*ncy -
fail)/(ncx*ncy);
1068 ncx = me->
getTH2F()->GetXaxis()->GetNbins();
1069 ncy = me->
getTH2F()->GetYaxis()->GetNbins();
1074 ncx = me->
getTH2S()->GetXaxis()->GetNbins();
1075 ncy = me->
getTH2S()->GetYaxis()->GetNbins();
1080 ncx = me->
getTH2D()->GetXaxis()->GetNbins();
1081 ncy = me->
getTH2D()->GetYaxis()->GetNbins();
1087 std::cout <<
"QTest:ContentsWithinExpected AS"
1088 <<
" ME does not contain TH2F/TH2S/TH2D, exiting\n";
1094 for (
int cx = 1; cx <= ncx; ++cx)
1096 for (
int cy = 1; cy <= ncy; ++cy)
1098 bool failure =
false;
1099 double Content = h->GetBinContent(h->GetBin(cx, cy));
1101 failure = (Content < minMean_ || Content > maxMean_);
1106 return 1.*(ncx*ncy-
fail)/(ncx*ncy);
1115 std::cout <<
"QTest:ContentsWitinExpected"
1116 <<
" Illogical range: (" << xmin <<
", " << xmax <<
"\n";
1127 std::cout <<
"QTest:ContentsWitinExpected"
1128 <<
" Illogical range: (" << xmin <<
", " << xmax <<
"\n";
1156 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
1157 << me-> getFullname() <<
"\n";
1159 if (minEntries_ != 0 && me->
getEntries() < minEntries_)
return -1;
1177 <<
" does not contain TH1F/TH1S/TH1D, exiting\n";
1183 double mean = h->GetMean();
1184 if (mean <= xmax_ && mean >= xmin_)
1193 double chi = (h->GetMean() - expMean_)/sigma_;
1194 return TMath::Prob(chi*chi, 1);
1200 <<
" Error, sigma_ is zero, exiting\n";
1206 if (h->GetRMS() != 0.)
1208 double chi = (h->GetMean() - expMean_)/h->GetRMS();
1209 return TMath::Prob(chi*chi, 1);
1215 <<
" Error, RMS is zero, exiting\n";
1222 <<
" Error, neither Range, nor Sigma, nor RMS, exiting\n";
1229 useSigma_ = useRMS_ =
false;
1230 xmin_ = xmin; xmax_ = xmax;
1234 <<
" Illogical range: (" << xmin_ <<
", " << xmax_ <<
"\n";
1239 useRMS_ = useRange_ =
false;
1240 sigma_ = expectedSigma;
1244 <<
" Expected sigma = " << sigma_ <<
"\n";
1250 useSigma_ = useRange_ =
false;
1265 int32_t
nbins=0, failed=0;
1266 badChannels_.clear();
1275 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
1276 << me-> getFullname() <<
"\n";
1277 std::cout <<
"\tMin = " << _min <<
"; Max = " << _max <<
"\n";
1278 std::cout <<
"\tMinMedian = " << _minMed <<
"; MaxMedian = " << _maxMed <<
"\n";
1279 std::cout <<
"\tUseEmptyBins = " << (_emptyBins?
"Yes":
"No" )<<
"\n";
1289 std::cout <<
"QTest:ContentsWithinExpected"
1290 <<
" ME does not contain TPROFILE2D, exiting\n";
1294 nBinsX = h->GetNbinsX();
1295 nBinsY = h->GetNbinsY();
1300 for (
int binX = 1; binX <= nBinsX; binX++ ){
1303 for (
int binY = 1; binY <= nBinsY; binY++){
1304 int bin = h->GetBin(binX, binY);
1305 double content = (double)h->GetBinContent(bin);
1306 if ( content == 0 && !_emptyBins)
1308 binValues.push_back(content);
1311 if (binValues.empty())
1313 nbins+=binValues.size();
1316 if(binValues.size()>0){
1317 int medPos = (int)binValues.size()/2;
1318 nth_element(binValues.begin(),binValues.begin()+medPos,binValues.end());
1319 median = *(binValues.begin()+medPos);
1325 std::cout <<
"QTest: Median is 0; the fixed cuts: [" << _minMed <<
"; " << _maxMed <<
"] are used\n";
1327 for(
int binY = 1; binY <= nBinsY; binY++){
1328 int bin = h->GetBin(binX, binY);
1329 double content = (double)h->GetBinContent(bin);
1333 if (content > _maxMed || content < _minMed){
1334 DQMChannel chan(binX,binY, 0, content, h->GetBinError(bin));
1335 badChannels_.push_back(chan);
1343 if (median*entries < _statCut )
1347 if(median > _maxMed || median < _minMed){
1348 for(
int binY = 1; binY <= nBinsY; binY++){
1349 int bin = h->GetBin(binX, binY);
1350 double content = (double)h->GetBinContent(bin);
1354 DQMChannel chan(binX,binY, 0, content/median, h->GetBinError(bin));
1355 badChannels_.push_back(chan);
1362 float minCut = median*_min;
1363 float maxCut = median*_max;
1364 for(
int binY = 1; binY <= nBinsY; binY++){
1365 int bin = h->GetBin(binX, binY);
1366 double content = (double)h->GetBinContent(bin);
1370 if (content > maxCut || content < minCut){
1371 DQMChannel chan(binX,binY, 0, content/median, h->GetBinError(bin));
1372 badChannels_.push_back(chan);
1380 std::cout <<
"QTest:CompareToMedian: Histogram is empty" << std::endl;
1383 return 1 - (float)failed/nbins;
1403 std::cout <<
"QTest:" << getAlgoName() <<
"::runTest called on "
1404 << me-> getFullname() <<
"\n";
1405 std::cout <<
"\tMin = " << _min <<
"; Max = " << _max <<
"\n";
1418 std::cout <<
"QTest:ContentsWithinExpected"
1419 <<
" ME does not contain TH1F or TH2F, exiting\n";
1429 lastBinX = h1->FindLastBinAbove(_average,1);
1430 lastBinVal = h1->GetBinContent(lastBinX);
1431 if (h1->GetEntries() == 0 || lastBinVal < 0)
return 1;
1433 else if (h2 !=
NULL)
1436 lastBinX = h2->FindLastBinAbove(_average,1);
1437 lastBinY = h2->FindLastBinAbove(_average,2);
1438 if ( h2->GetEntries() == 0 || lastBinX < 0 || lastBinY < 0 )
return 1;
1439 lastBinVal = h2->GetBinContent(h2->GetBin(lastBinX,lastBinY));
1441 if (verbose_ > 0)
std::cout <<
"QTest:"<< getAlgoName() <<
" Histogram does not exist" << std::endl;
1444 if (verbose_ > 0)
std::cout <<
"Min and Max values " << _min <<
" " << _max <<
" Av value " << _average <<
" lastBinX " << lastBinX<<
" lastBinY " << lastBinY <<
" lastBinVal " << lastBinVal << std::endl;
1445 if (lastBinVal > _min && lastBinVal <= _max)
TH1F * getRefTH1F(void) const
TH2S * getTH2S(void) const
TH1S * getTH1S(void) const
double getAverage(int bin, const TH1 *h) const
float runTest(const MonitorElement *me)
float runTest(const MonitorElement *me)
common ppss p3p6s2 common epss epspn46 common const1 w2
TProfile2D * getTProfile2D(void) const
float runTest(const MonitorElement *me)
TH3F * getTH3F(void) const
TH1D * getTH1D(void) const
void setRMSRange(double xmin, double xmax)
set expected value for mean
void useSigma(double expectedSigma)
TH2D * getTH2D(void) const
double getEntries(void) const
get # of entries
TH3F * getRefTH3F(void) const
float runTest(const MonitorElement *me)
float runTest(const MonitorElement *me)
TH2F * getRefTH2F(void) const
static const int DID_NOT_RUN
static const float ERROR_PROB_THRESHOLD
Kind kind(void) const
Get the type of the monitor element.
float runTest(const MonitorElement *me)
const std::string getFullname(void) const
get full name of ME including Pathname
TH2D * getRefTH2D(void) const
void useRange(double xmin, double xmax)
TObject * getRootObject(void) const
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
float runTest(const MonitorElement *me)
virtual float runTest(const MonitorElement *me)
TH1F * getTH1F(void) const
TProfile * getRefTProfile(void) const
void init(void)
initialize values
void setMeanRange(double xmin, double xmax)
set expected value for mean
float runTest(const MonitorElement *me)
TProfile * getTProfile(void) const
TH2S * getRefTH2S(void) const
float runTest(const MonitorElement *me)
TH2F * getTH2F(void) const
void reset(double vett[256])
TObject * getRefRootObject(void) const
TH1S * getRefTH1S(void) const
float runTest(const MonitorElement *me)
static const float WARNING_PROB_THRESHOLD
default "probability" values for setting warnings & errors when running tests
TH1D * getRefTH1D(void) const
void raiseDQMError(const char *context, const char *fmt,...)