00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "RooGlobalFunc.h"
00016 #include "RooStats/ConfInterval.h"
00017 #include "RooStats/PointSetInterval.h"
00018 #include "RooStats/ConfidenceBelt.h"
00019 #include "RooStats/FeldmanCousins.h"
00020 #include "RooStats/ModelConfig.h"
00021
00022 #include "RooWorkspace.h"
00023 #include "RooDataSet.h"
00024 #include "RooRealVar.h"
00025 #include "RooConstVar.h"
00026 #include "RooAddition.h"
00027
00028 #include "RooDataHist.h"
00029
00030 #include "RooPoisson.h"
00031 #include "RooPlot.h"
00032
00033 #include "TCanvas.h"
00034 #include "TTree.h"
00035 #include "TH1F.h"
00036 #include "TMarker.h"
00037 #include "TStopwatch.h"
00038
00039 #include <iostream>
00040
00041
00042 using namespace RooFit ;
00043 using namespace RooStats ;
00044
00045
00046 void rs401c_FeldmanCousins()
00047 {
00048
00049 TStopwatch t;
00050 t.Start();
00051
00052
00053 RooRealVar x("x","", 1,0,50);
00054 RooRealVar mu("mu","", 2.5,0, 15);
00055 RooConstVar b("b","", 3.);
00056 RooAddition mean("mean","",RooArgList(mu,b));
00057 RooPoisson pois("pois", "", x, mean);
00058 RooArgSet parameters(mu);
00059
00060
00061 RooDataSet* data = pois.generate(RooArgSet(x), 1);
00062 data->Print("v");
00063
00064 TCanvas* dataCanvas = new TCanvas("dataCanvas");
00065 RooPlot* frame = x.frame();
00066 data->plotOn(frame);
00067 frame->Draw();
00068 dataCanvas->Update();
00069
00070 RooWorkspace* w = new RooWorkspace();
00071 ModelConfig modelConfig("poissonProblem",w);
00072 modelConfig.SetPdf(pois);
00073 modelConfig.SetParametersOfInterest(parameters);
00074 modelConfig.SetObservables(RooArgSet(x));
00075 w->Print();
00076
00077
00078 RooStats::FeldmanCousins fc(*data,modelConfig);
00079 fc.SetTestSize(.05);
00080 fc.UseAdaptiveSampling(true);
00081 fc.FluctuateNumDataEntries(false);
00082 fc.SetNBins(100);
00083
00084
00085 PointSetInterval* interval = (PointSetInterval*)fc.GetInterval();
00086
00087
00088 TCanvas* intervalCanvas = new TCanvas("intervalCanvas");
00089
00090 std::cout << "is this point in the interval? " <<
00091 interval->IsInInterval(parameters) << std::endl;
00092
00093 std::cout << "interval is ["<<
00094 interval->LowerLimit(mu) << ", " <<
00095 interval->UpperLimit(mu) << "]" << endl;
00096
00097
00098
00099
00100
00101
00102
00103
00104 RooDataHist* parameterScan = (RooDataHist*) fc.GetPointsToScan();
00105 TH1F* hist = (TH1F*) parameterScan->createHistogram("mu",30);
00106 hist->Draw();
00107
00108
00109 RooArgSet* tmpPoint;
00110
00111 for(Int_t i=0; i<parameterScan->numEntries(); ++i){
00112
00113
00114 tmpPoint = (RooArgSet*) parameterScan->get(i)->clone("temp");
00115
00116 TMarker* mark = new TMarker(tmpPoint->getRealValue("mu"), 1, 25);
00117 if (interval->IsInInterval( *tmpPoint ) )
00118 mark->SetMarkerColor(kBlue);
00119 else
00120 mark->SetMarkerColor(kRed);
00121
00122 mark->Draw("s");
00123
00124
00125 }
00126 t.Stop();
00127 t.Print();
00128
00129
00130 }