#include "RooDataHist.h"
#include "RooDataSet.h"
#include "RooGlobalFunc.h"
#include "RooNLLVar.h"
#include "RooRealVar.h"
#include "RooTreeData.h"
#include "RooStats/HybridResult.h"
#include "RooStats/HybridPlot.h"
ClassImp(RooStats::HybridResult)
using namespace RooStats;
HybridResult::HybridResult( const char *name, const char *title,
std::vector<double>& testStat_sb_vals,
std::vector<double>& testStat_b_vals) :
HypoTestResult(name,title,0,0),
fTestStat_data(-999.),
fComputationsNulDoneFlag(false),
fComputationsAltDoneFlag(false)
{
int vector_size_sb = testStat_sb_vals.size();
assert(vector_size_sb>0);
int vector_size_b = testStat_b_vals.size();
assert(vector_size_b>0);
fTestStat_sb.reserve(vector_size_sb);
for (int i=0;i<vector_size_sb;++i)
fTestStat_sb.push_back(testStat_sb_vals[i]);
fTestStat_b.reserve(vector_size_b);
for (int i=0;i<vector_size_b;++i)
fTestStat_b.push_back(testStat_b_vals[i]);
}
HybridResult::HybridResult( const char *name, const char *title) :
HypoTestResult(name,title,0,0),
fTestStat_data(-999.),
fComputationsNulDoneFlag(false),
fComputationsAltDoneFlag(false)
{
}
HybridResult::HybridResult( ) :
HypoTestResult("HybridResult_DefaultName","HybridResult",0,0),
fTestStat_data(-999.),
fComputationsNulDoneFlag(false),
fComputationsAltDoneFlag(false)
{
}
HybridResult::~HybridResult()
{
fTestStat_sb.clear();
fTestStat_b.clear();
}
void HybridResult::SetDataTestStatistics(double testStat_data_val)
{
fComputationsAltDoneFlag = false;
fComputationsNulDoneFlag = false;
fTestStat_data = testStat_data_val;
return;
}
double HybridResult::NullPValue() const
{
if (fComputationsNulDoneFlag==false) {
int nToys = fTestStat_b.size();
if (nToys==0) {
std::cout << "Error: no toy data present. Returning -1.\n";
return -1;
}
double larger_than_measured=0;
for (int iToy=0;iToy<nToys;++iToy)
if ( fTestStat_b[iToy] > fTestStat_data ) ++larger_than_measured;
if (larger_than_measured==0) std::cout << "Warning: CLb = 0 ... maybe more toys are needed!\n";
fComputationsNulDoneFlag = true;
fNullPValue = 1-larger_than_measured/nToys;
}
return fNullPValue;
}
double HybridResult::AlternatePValue() const
{
if (fComputationsAltDoneFlag==false) {
int nToys = fTestStat_b.size();
if (nToys==0) {
std::cout << "Error: no toy data present. Returning -1.\n";
return -1;
}
double larger_than_measured=0;
for (int iToy=0;iToy<nToys;++iToy)
if ( fTestStat_sb[iToy] > fTestStat_data ) ++larger_than_measured;
if (larger_than_measured==0) std::cout << "Warning: CLsb = 0 ... maybe more toys are needed!\n";
fComputationsAltDoneFlag = true;
fAlternatePValue = larger_than_measured/nToys;
}
return fAlternatePValue;
}
void HybridResult::Add(HybridResult* other)
{
int other_size_sb = other->GetTestStat_sb().size();
for (int i=0;i<other_size_sb;++i)
fTestStat_sb.push_back(other->GetTestStat_sb()[i]);
int other_size_b = other->GetTestStat_b().size();
for (int i=0;i<other_size_b;++i)
fTestStat_b.push_back(other->GetTestStat_b()[i]);
if (fTestStat_data==-999.)
fTestStat_data = other->GetTestStat_data();
fComputationsAltDoneFlag = false;
fComputationsNulDoneFlag = false;
return;
}
HybridPlot* HybridResult::GetPlot(const char* name,const char* title, int n_bins)
{
TString plot_name;
if ( TString(name)=="" ) {
plot_name += GetName();
plot_name += "_plot";
} else plot_name = name;
TString plot_title;
if ( TString(title)=="" ) {
plot_title += GetTitle();
plot_title += "_plot (";
plot_title += fTestStat_b.size();
plot_title += " toys)";
} else plot_title = title;
HybridPlot* plot = new HybridPlot( plot_name.Data(),
plot_title.Data(),
fTestStat_sb,
fTestStat_b,
fTestStat_data,
n_bins,
true );
return plot;
}
void HybridResult::PrintMore(const char* )
{
std::cout << "\nResults " << GetName() << ":\n"
<< " - Number of S+B toys: " << fTestStat_b.size() << std::endl
<< " - Number of B toys: " << fTestStat_sb.size() << std::endl
<< " - test statistics evaluated on data: " << fTestStat_data << std::endl
<< " - CL_b " << CLb() << std::endl
<< " - CL_s+b " << CLsplusb() << std::endl
<< " - CL_s " << CLs() << std::endl;
return;
}
Last change: Tue Nov 25 08:47:42 2008
Last generated: 2008-11-25 08:47
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.