55 #if !defined(__CINT__) || defined(__MAKECINT__) 
   56 #include "../tutorials/roostats/NuMuToNuE_Oscillation.h" 
   57 #include "../tutorials/roostats/NuMuToNuE_Oscillation.cxx"  
   59 #include "../tutorials/roostats/NuMuToNuE_Oscillation.cxx+"  
   63 using namespace RooFit;
 
   64 using namespace RooStats;
 
   66 void rs401d_FeldmanCousins(
bool doFeldmanCousins = 
false, 
bool doMCMC = 
true)
 
   93    RooRealVar E(
"E", 
"", 15, 10, 60, 
"GeV");
 
   94    RooRealVar L(
"L", 
"", .800, .600, 1.0, 
"km"); 
 
   95    RooRealVar deltaMSq(
"deltaMSq", 
"#Delta m^{2}", 40, 1, 300, 
"eV/c^{2}");
 
   96    RooRealVar sinSq2theta(
"sinSq2theta", 
"sin^{2}(2#theta)", .006, .0, .02);
 
  103    NuMuToNuE_Oscillation PnmuTone(
"PnmuTone", 
"P(#nu_{#mu} #rightarrow #nu_{e}", L, E, deltaMSq);
 
  106    RooAbsPdf *sigModel = PnmuTone.createProjection(L);
 
  118    RooRealVar EPrime(
"EPrime", 
"", 15, 10, 60, 
"GeV");
 
  119    RooRealVar LPrime(
"LPrime", 
"", .800, .600, 1.0, 
"km"); 
 
  120    NuMuToNuE_Oscillation PnmuTonePrime(
"PnmuTonePrime", 
"P(#nu_{#mu} #rightarrow #nu_{e}", LPrime, EPrime, deltaMSq);
 
  121    RooAbsReal *intProbToOscInExp = PnmuTonePrime.createIntegral(RooArgSet(EPrime, LPrime));
 
  130    RooConstVar maxEventsTot(
"maxEventsTot", 
"maximum number of sinal events", 50000);
 
  131    RooConstVar inverseArea(
"inverseArea", 
"1/(#Delta E #Delta L)",
 
  132                            1. / (EPrime.getMax() - EPrime.getMin()) / (LPrime.getMax() - LPrime.getMin()));
 
  135    RooProduct sigNorm(
"sigNorm", 
"", RooArgSet(maxEventsTot, *intProbToOscInExp, inverseArea, sinSq2theta));
 
  137    RooConstVar bkgNorm(
"bkgNorm", 
"normalization for background", 500);
 
  140    RooPolynomial bkgEShape(
"bkgEShape", 
"flat bkg shape", E);
 
  143    RooAddPdf model(
"model", 
"", RooArgList(*sigModel, bkgEShape), RooArgList(sigNorm, bkgNorm));
 
  150    RooMsgService::instance().setStreamStatus(0, kFALSE);
 
  151    RooMsgService::instance().setStreamStatus(1, kFALSE);
 
  152    RooMsgService::instance().setStreamStatus(2, kFALSE);
 
  156    Int_t nEventsData = bkgNorm.getVal() + sigNorm.getVal();
 
  157    cout << 
"generate toy data with nEvents = " << nEventsData << endl;
 
  160    RooRandom::randomGenerator()->SetSeed(3);
 
  162    RooDataSet *data = model.generate(RooArgSet(E), nEventsData);
 
  166    TCanvas *dataCanvas = 
new TCanvas(
"dataCanvas");
 
  167    dataCanvas->Divide(2, 2);
 
  171    TH1 *hh = PnmuTone.createHistogram(
"hh", E, Binning(40), YVar(L, Binning(40)), Scaling(kFALSE));
 
  172    hh->SetLineColor(kBlue);
 
  173    hh->SetTitle(
"True Signal Model");
 
  178    RooPlot *Eframe = E.frame();
 
  179    data->plotOn(Eframe);
 
  180    model.fitTo(*data, Extended());
 
  181    model.plotOn(Eframe);
 
  182    model.plotOn(Eframe, Components(*sigModel), LineColor(kRed));
 
  183    model.plotOn(Eframe, Components(bkgEShape), LineColor(kGreen));
 
  184    model.plotOn(Eframe);
 
  185    Eframe->SetTitle(
"toy data with best fit model (and sig+bkg components)");
 
  190    RooNLLVar nll(
"nll", 
"nll", model, *data, Extended());
 
  191    RooProfileLL pll(
"pll", 
"", nll, RooArgSet(deltaMSq, sinSq2theta));
 
  193    TH1 *hhh = pll.createHistogram(
"hhh", sinSq2theta, Binning(40), YVar(deltaMSq, Binning(40)), Scaling(kFALSE));
 
  194    hhh->SetLineColor(kBlue);
 
  195    hhh->SetTitle(
"Likelihood Function");
 
  198    dataCanvas->Update();
 
  203    RooArgSet parameters(deltaMSq, sinSq2theta);
 
  204    RooWorkspace *w = 
new RooWorkspace();
 
  206    ModelConfig modelConfig;
 
  207    modelConfig.SetWorkspace(*w);
 
  208    modelConfig.SetPdf(model);
 
  209    modelConfig.SetParametersOfInterest(parameters);
 
  211    RooStats::FeldmanCousins fc(*data, modelConfig);
 
  213    fc.UseAdaptiveSampling(
true);
 
  217    ConfInterval *interval = 0;
 
  218    if (doFeldmanCousins)
 
  219       interval = fc.GetInterval();
 
  223    RooStats::ProfileLikelihoodCalculator plc(*data, modelConfig);
 
  226    ConfInterval *plcInterval = plc.GetInterval();
 
  230    MCMCInterval *mcInt = NULL;
 
  234       RooMsgService::instance().setStreamStatus(0, kTRUE);
 
  235       RooMsgService::instance().setStreamStatus(1, kTRUE);
 
  237       TStopwatch mcmcWatch;
 
  240       RooArgList axisList(deltaMSq, sinSq2theta);
 
  241       MCMCCalculator mc(*data, modelConfig);
 
  242       mc.SetNumIters(5000);
 
  243       mc.SetNumBurnInSteps(100);
 
  246       mc.SetAxes(axisList); 
 
  248       mcInt = (MCMCInterval *)mc.GetInterval();
 
  259    if (doFeldmanCousins) {
 
  260       RooDataHist *parameterScan = (RooDataHist *)fc.GetPointsToScan();
 
  261       TH2F *hist = (TH2F *)parameterScan->createHistogram(
"sinSq2theta:deltaMSq", 30, 30);
 
  263       TH2F *forContour = (TH2F *)hist->Clone();
 
  268       for (Int_t i = 0; i < parameterScan->numEntries(); ++i) {
 
  270          tmpPoint = (RooArgSet *)parameterScan->get(i)->clone(
"temp");
 
  273             if (interval->IsInInterval(*tmpPoint)) {
 
  274                forContour->SetBinContent(
 
  275                   hist->FindBin(tmpPoint->getRealValue(
"sinSq2theta"), tmpPoint->getRealValue(
"deltaMSq")), 1);
 
  277                forContour->SetBinContent(
 
  278                   hist->FindBin(tmpPoint->getRealValue(
"sinSq2theta"), tmpPoint->getRealValue(
"deltaMSq")), 0);
 
  286          Double_t level = 0.5;
 
  287          forContour->SetContour(1, &level);
 
  288          forContour->SetLineWidth(2);
 
  289          forContour->SetLineColor(kRed);
 
  290          forContour->Draw(
"cont2,same");
 
  294    MCMCIntervalPlot *mcPlot = NULL;
 
  296       cout << 
"MCMC actual confidence level: " << mcInt->GetActualConfidenceLevel() << endl;
 
  297       mcPlot = 
new MCMCIntervalPlot(*mcInt);
 
  298       mcPlot->SetLineColor(kMagenta);
 
  301    dataCanvas->Update();
 
  303    LikelihoodIntervalPlot plotInt((LikelihoodInterval *)plcInterval);
 
  304    plotInt.SetTitle(
"90% Confidence Intervals");
 
  306       plotInt.Draw(
"same");
 
  309    dataCanvas->Update();