// @(#)root/roostats:\$Id\$
// Author: Kyle Cranmer   28/07/2008

/*************************************************************************
*                                                                       *
* For the licensing terms see \$ROOTSYS/LICENSE.                         *
* For the list of contributors see \$ROOTSYS/README/CREDITS.             *
*************************************************************************/

//_________________________________________________
/*
BEGIN_HTML
<p>
ProfileLikelihoodCalculator is a concrete implementation of CombinedCalculator
(the interface class for a tools which can produce both RooStats HypoTestResults and ConfIntervals).
The tool uses the profile likelihood ratio as a test statistic, and assumes that Wilks' theorem is valid.
Wilks' theorem states that -2* log (profile likelihood ratio) is asymptotically distributed as a chi^2 distribution
with N-dof, where N is the number of degrees of freedom.  Thus, p-values can be constructed and the profile likelihood ratio
can be used to construct a LikelihoodInterval.
(In the future, this class could be extended to use toy Monte Carlo to calibrate the distribution of the test statistic).
</p>
<p> Usage: It uses the interface of the CombinedCalculator, so that it can be configured by specifying:
<ul>
<li>a model common model (eg. a family of specific models which includes both the null and alternate),</li>
<li>a data set, </li>
<li>a set of parameters of interest. The nuisance parameters will be all other parameters of the model </li>
<li>a set of parameters of which specify the null hypothesis (including values and const/non-const status)  </li>
</ul>
The interface allows one to pass the model, data, and parameters either directly or via a ModelConfig class.
The alternate hypothesis leaves the parameter free to take any value other than those specified by the null hypotesis. There is therefore no need to
specify the alternate parameters.
</p>
<p>
After configuring the calculator, one only needs to ask GetHypoTest() (which will return a HypoTestResult pointer) or GetInterval() (which will return an ConfInterval pointer).
</p>
<p>
The concrete implementations of this interface should deal with the details of how the nuisance parameters are
dealt with (eg. integration vs. profiling) and which test-statistic is used (perhaps this should be added to the interface).
</p>
<p>
The motivation for this interface is that we hope to be able to specify the problem in a common way for several concrete calculators.
</p>
END_HTML
*/
//

#ifndef RooStats_ProfileLikelihoodCalculator
#include "RooStats/ProfileLikelihoodCalculator.h"
#endif

#ifndef RooStats_RooStatsUtils
#include "RooStats/RooStatsUtils.h"
#endif

#include "RooStats/LikelihoodInterval.h"
#include "RooStats/HypoTestResult.h"

#include "RooFitResult.h"
#include "RooRealVar.h"
#include "RooProfileLL.h"
#include "RooNLLVar.h"
#include "RooGlobalFunc.h"
#include "RooMsgService.h"

#include "Math/MinimizerOptions.h"
#include "RooMinimizer.h"
//#include "RooProdPdf.h"

using namespace std;

ClassImp(RooStats::ProfileLikelihoodCalculator) ;

using namespace RooFit;
using namespace RooStats;

//_______________________________________________________
ProfileLikelihoodCalculator::ProfileLikelihoodCalculator() :
CombinedCalculator(), fFitResult(0), fGlobalFitDone(false)
{
// default constructor
}

ProfileLikelihoodCalculator::ProfileLikelihoodCalculator(RooAbsData& data, RooAbsPdf& pdf, const RooArgSet& paramsOfInterest,
Double_t size, const RooArgSet* nullParams ) :
CombinedCalculator(data,pdf, paramsOfInterest, size, nullParams ),
fFitResult(0), fGlobalFitDone(false)
{
// constructor from pdf and parameters
// the pdf must contain eventually the nuisance parameters
}

ProfileLikelihoodCalculator::ProfileLikelihoodCalculator(RooAbsData& data,  ModelConfig& model, Double_t size) :
CombinedCalculator(data, model, size),
fFitResult(0), fGlobalFitDone(false)
{
// construct from a ModelConfig. Assume data model.GetPdf() will provide full description of model including
// constraint term on the nuisances parameters
assert(model.GetPdf() );
}

//_______________________________________________________
ProfileLikelihoodCalculator::~ProfileLikelihoodCalculator(){
// destructor
// cannot delete prod pdf because it will delete all the composing pdf's
//    if (fOwnPdf) delete fPdf;
//    fPdf = 0;
if (fFitResult) delete fFitResult;
}

void ProfileLikelihoodCalculator::DoReset() const {
// reset and clear fit result
// to be called when a new model or data are set in the calculator
if (fFitResult) delete fFitResult;
fFitResult = 0;
}

RooAbsReal *  ProfileLikelihoodCalculator::DoGlobalFit() const {
// perform a global fit of the likelihood letting with all parameter of interest and
// nuisance parameters
// keep the list of fitted parameters

DoReset();
RooAbsPdf * pdf = GetPdf();
RooAbsData* data = GetData();
if (!data || !pdf ) return 0;

// get all non-const parameters
RooArgSet* constrainedParams = pdf->getParameters(*data);
if (!constrainedParams) return 0;
RemoveConstantParameters(constrainedParams);

RooAbsReal * nll = pdf->createNLL(*data, CloneData(true), Constrain(*constrainedParams),ConditionalObservables(fConditionalObs), Offset(RooStats::IsNLLOffset() ) );

// check if global fit has been already done
if (fFitResult && fGlobalFitDone) {
delete constrainedParams;
return nll;
}

// calculate MLE
oocoutP((TObject*)0,Minimization) << "ProfileLikelihoodCalcultor::DoGLobalFit - find MLE " << std::endl;

if (fFitResult) delete fFitResult;
fFitResult = DoMinimizeNLL(nll);

// print fit result
if (fFitResult) {
fFitResult->printStream( oocoutI((TObject*)0,Minimization), fFitResult->defaultPrintContents(0), fFitResult->defaultPrintStyle(0) );

if (fFitResult->status() != 0)
oocoutW((TObject*)0,Minimization) << "ProfileLikelihoodCalcultor::DoGlobalFit -  Global fit failed - status = " << fFitResult->status() << std::endl;
else
fGlobalFitDone = true;
}

delete constrainedParams;
return nll;
}

RooFitResult * ProfileLikelihoodCalculator::DoMinimizeNLL(RooAbsReal * nll)  {
// Minimizer the given NLL using the default options

const char * minimType = ROOT::Math::MinimizerOptions::DefaultMinimizerType().c_str();
const char * minimAlgo = ROOT::Math::MinimizerOptions::DefaultMinimizerAlgo().c_str();
int strategy = ROOT::Math::MinimizerOptions::DefaultStrategy();
int level = ROOT::Math::MinimizerOptions::DefaultPrintLevel() -1;// RooFit level starts from  -1
int tolerance = ROOT::Math::MinimizerOptions::DefaultTolerance();
oocoutP((TObject*)0,Minimization) << "ProfileLikelihoodCalcultor::DoMinimizeNLL - using " << minimType << " / " << minimAlgo << " with strategy " << strategy << std::endl;
// do global fit and store fit result for further use

RooMinimizer minim(*nll);
minim.setStrategy(strategy);
minim.setEps(tolerance);
minim.setPrintLevel(level);
minim.optimizeConst(2); // to optimize likelihood calculations

int status = -1;
for (int tries = 1, maxtries = 4; tries <= maxtries; ++tries) {
status = minim.minimize(minimType,minimAlgo);
if (status%1000 == 0) {  // ignore erros from Improve
break;
} else if (tries < maxtries) {
cout << "    ----> Doing a re-scan first" << endl;
minim.minimize(minimType,"Scan");
if (tries == 2) {
if (strategy == 0 ) {
cout << "    ----> trying with strategy = 1" << endl;;
minim.setStrategy(1);
}
else
tries++; // skip this trial if stratehy is already 1
}
if (tries == 3) {
cout << "    ----> trying with improve" << endl;;
minimType = "Minuit";
}
}
}

RooFitResult * result = minim.save();

return result;
}

//_______________________________________________________
LikelihoodInterval* ProfileLikelihoodCalculator::GetInterval() const {
// Main interface to get a RooStats::ConfInterval.
// It constructs a profile likelihood ratio and uses that to construct a RooStats::LikelihoodInterval.

//    RooAbsPdf* pdf   = fWS->pdf(fPdfName);
//    RooAbsData* data = fWS->data(fDataName);
RooAbsPdf * pdf = GetPdf();
RooAbsData* data = GetData();
if (!data || !pdf || fPOI.getSize() == 0) return 0;

RooArgSet* constrainedParams = pdf->getParameters(*data);
RemoveConstantParameters(constrainedParams);

/*
RooNLLVar* nll = new RooNLLVar("nll","",*pdf,*data, Extended(),Constrain(*constrainedParams));
RooProfileLL* profile = new RooProfileLL("pll","",*nll, *fPOI);
profile->addOwnedComponents(*nll) ;  // to avoid memory leak
*/

// do a global fit cloning the data
RooAbsReal * nll = DoGlobalFit();
if (!nll) return 0;

if (!fFitResult)   {
delete nll;
return 0;
}

RooAbsReal* profile = nll->createProfile(fPOI);
profile->addOwnedComponents(*nll) ;  // to avoid memory leak

// t.b.f. " RooProfileLL should keep and provide possibility to query on global minimum
// set POI to fit value (this will speed up profileLL calculation of global minimum)
const RooArgList & fitParams = fFitResult->floatParsFinal();
for (int i = 0; i < fitParams.getSize(); ++i) {
RooRealVar & fitPar =  (RooRealVar &) fitParams[i];
RooRealVar * par = (RooRealVar*) fPOI.find( fitPar.GetName() );
if (par) {
par->setVal( fitPar.getVal() );
par->setError( fitPar.getError() );
}
}

// do this so profile will cache inside the absolute minimum and
// minimum values of nuisance parameters
// (no need to this here)
// profile->getVal();
//RooMsgService::instance().setGlobalKillBelow(RooFit::DEBUG) ;
//  profile->Print();

TString name = TString("LikelihoodInterval_");// + TString(GetName() );

// make a list of fPOI with fit result values and pass to LikelihoodInterval class
// bestPOI is a cloned list of POI only with their best fit values
TIter iter = fPOI.createIterator();
RooArgSet fitParSet(fitParams);
RooArgSet * bestPOI = new RooArgSet();
while (RooAbsArg * arg =  (RooAbsArg*) iter.Next() ) {
RooAbsArg * p  =  fitParSet.find( arg->GetName() );
}
// fPOI contains the paramter of interest of the PL object
// and bestPOI contains a snapshot with the best fit values
LikelihoodInterval* interval = new LikelihoodInterval(name, profile, &fPOI, bestPOI);
interval->SetConfidenceLevel(1.-fSize);
delete constrainedParams;
return interval;
}

//_______________________________________________________
HypoTestResult* ProfileLikelihoodCalculator::GetHypoTest() const {
// Main interface to get a HypoTestResult.
// It does two fits:
// the first lets the null parameters float, so it's a maximum likelihood estimate
// the second is to the null (fixing null parameters to their specified values): eg. a conditional maximum likelihood
// the ratio of the likelihood at the conditional MLE to the MLE is the profile likelihood ratio.
// Wilks' theorem is used to get p-values

//    RooAbsPdf* pdf   = fWS->pdf(fPdfName);
//    RooAbsData* data = fWS->data(fDataName);
RooAbsPdf * pdf = GetPdf();
RooAbsData* data = GetData();

if (!data || !pdf) return 0;

if (fNullParams.getSize() == 0) return 0;

// make a clone and ordered list since a vector will be associated to keep parameter values
// clone the list since first fit will changes the fNullParams values
RooArgList poiList;
poiList.addClone(fNullParams); // make a clone list

// do a global fit
RooAbsReal * nll = DoGlobalFit();
if (!nll) return 0;

if (!fFitResult) {
delete nll;
return 0;
}

RooArgSet* constrainedParams = pdf->getParameters(*data);
RemoveConstantParameters(constrainedParams);

Double_t nLLatMLE = fFitResult->minNll();
// in case of using offset need to save offset value
Double_t nlloffset = (RooStats::IsNLLOffset() ) ? nll->getVal() - nLLatMLE : 0;

// set POI to given values, set constant, calculate conditional MLE
std::vector<double> oldValues(poiList.getSize() );
for (unsigned int i = 0; i < oldValues.size(); ++i) {
RooRealVar * mytarget = (RooRealVar*) constrainedParams->find(poiList[i].GetName());
if (mytarget) {
oldValues[i] = mytarget->getVal();
mytarget->setVal( ( (RooRealVar&) poiList[i] ).getVal() );
mytarget->setConstant(kTRUE);
}
}

// perform the fit only if nuisance parameters are available
// get nuisance parameters
// nuisance parameters are the non const parameters from the likelihood parameters
RooArgSet nuisParams(*constrainedParams);

// need to remove the parameter of interest
RemoveConstantParameters(&nuisParams);

// check there are variable parameter in order to do a fit
bool existVarParams = false;
TIter it = nuisParams.createIterator();
RooRealVar * myarg = 0;
while ((myarg = (RooRealVar *)it.Next())) {
if ( !myarg->isConstant() ) {
existVarParams = true;
break;
}
}

Double_t nLLatCondMLE = nLLatMLE;
if (existVarParams) {
oocoutP((TObject*)0,Minimization) << "ProfileLikelihoodCalcultor::GetHypoTest - do conditional fit " << std::endl;

RooFitResult * fit2 = DoMinimizeNLL(nll);

// print fit result
if (fit2) {
nLLatCondMLE = fit2->minNll();
fit2->printStream( oocoutI((TObject*)0,Minimization), fit2->defaultPrintContents(0), fit2->defaultPrintStyle(0) );

if (fit2->status() != 0)
oocoutW((TObject*)0,Minimization) << "ProfileLikelihoodCalcultor::GetHypotest -  Conditional fit failed - status = " << fit2->status() << std::endl;
}

}
else {
// get just the likelihood value (no need to do a fit since the likelihood is a constant function)
nLLatCondMLE = nll->getVal();
// this value contains the offset
if (RooStats::IsNLLOffset() ) nLLatCondMLE -= nlloffset;
}

// Use Wilks' theorem to translate -2 log lambda into a signifcance/p-value
Double_t deltaNLL = std::max( nLLatCondMLE-nLLatMLE, 0.);

// get number of free parameter of interest
RemoveConstantParameters(poiList);
int ndf = poiList.getSize();

Double_t pvalue = ROOT::Math::chisquared_cdf_c( 2* deltaNLL, ndf);

// in case of one dimenension (1 poi) do the one-sided p-value (need to divide by 2)
if (ndf == 1) pvalue = 0.5 * pvalue;

TString name = TString("ProfileLRHypoTestResult_");// + TString(GetName() );
HypoTestResult* htr = new HypoTestResult(name, pvalue, 0 );

// restore previous value of poi
for (unsigned int i = 0; i < oldValues.size(); ++i) {
RooRealVar * mytarget = (RooRealVar*) constrainedParams->find(poiList[i].GetName());
if (mytarget) {
mytarget->setVal(oldValues[i] );
mytarget->setConstant(false);
}
}

delete constrainedParams;
delete nll;
return htr;

}

ProfileLikelihoodCalculator.cxx:1
ProfileLikelihoodCalculator.cxx:2
ProfileLikelihoodCalculator.cxx:3
ProfileLikelihoodCalculator.cxx:4
ProfileLikelihoodCalculator.cxx:5
ProfileLikelihoodCalculator.cxx:6
ProfileLikelihoodCalculator.cxx:7
ProfileLikelihoodCalculator.cxx:8
ProfileLikelihoodCalculator.cxx:9
ProfileLikelihoodCalculator.cxx:10
ProfileLikelihoodCalculator.cxx:11
ProfileLikelihoodCalculator.cxx:12
ProfileLikelihoodCalculator.cxx:13
ProfileLikelihoodCalculator.cxx:14
ProfileLikelihoodCalculator.cxx:15
ProfileLikelihoodCalculator.cxx:16
ProfileLikelihoodCalculator.cxx:17
ProfileLikelihoodCalculator.cxx:18
ProfileLikelihoodCalculator.cxx:19
ProfileLikelihoodCalculator.cxx:20
ProfileLikelihoodCalculator.cxx:21
ProfileLikelihoodCalculator.cxx:22
ProfileLikelihoodCalculator.cxx:23
ProfileLikelihoodCalculator.cxx:24
ProfileLikelihoodCalculator.cxx:25
ProfileLikelihoodCalculator.cxx:26
ProfileLikelihoodCalculator.cxx:27
ProfileLikelihoodCalculator.cxx:28
ProfileLikelihoodCalculator.cxx:29
ProfileLikelihoodCalculator.cxx:30
ProfileLikelihoodCalculator.cxx:31
ProfileLikelihoodCalculator.cxx:32
ProfileLikelihoodCalculator.cxx:33
ProfileLikelihoodCalculator.cxx:34
ProfileLikelihoodCalculator.cxx:35
ProfileLikelihoodCalculator.cxx:36
ProfileLikelihoodCalculator.cxx:37
ProfileLikelihoodCalculator.cxx:38
ProfileLikelihoodCalculator.cxx:39
ProfileLikelihoodCalculator.cxx:40
ProfileLikelihoodCalculator.cxx:41
ProfileLikelihoodCalculator.cxx:42
ProfileLikelihoodCalculator.cxx:43
ProfileLikelihoodCalculator.cxx:44
ProfileLikelihoodCalculator.cxx:45
ProfileLikelihoodCalculator.cxx:46
ProfileLikelihoodCalculator.cxx:47
ProfileLikelihoodCalculator.cxx:48
ProfileLikelihoodCalculator.cxx:49
ProfileLikelihoodCalculator.cxx:50
ProfileLikelihoodCalculator.cxx:51
ProfileLikelihoodCalculator.cxx:52
ProfileLikelihoodCalculator.cxx:53
ProfileLikelihoodCalculator.cxx:54
ProfileLikelihoodCalculator.cxx:55
ProfileLikelihoodCalculator.cxx:56
ProfileLikelihoodCalculator.cxx:57
ProfileLikelihoodCalculator.cxx:58
ProfileLikelihoodCalculator.cxx:59
ProfileLikelihoodCalculator.cxx:60
ProfileLikelihoodCalculator.cxx:61
ProfileLikelihoodCalculator.cxx:62
ProfileLikelihoodCalculator.cxx:63
ProfileLikelihoodCalculator.cxx:64
ProfileLikelihoodCalculator.cxx:65
ProfileLikelihoodCalculator.cxx:66
ProfileLikelihoodCalculator.cxx:67
ProfileLikelihoodCalculator.cxx:68
ProfileLikelihoodCalculator.cxx:69
ProfileLikelihoodCalculator.cxx:70
ProfileLikelihoodCalculator.cxx:71
ProfileLikelihoodCalculator.cxx:72
ProfileLikelihoodCalculator.cxx:73
ProfileLikelihoodCalculator.cxx:74
ProfileLikelihoodCalculator.cxx:75
ProfileLikelihoodCalculator.cxx:76
ProfileLikelihoodCalculator.cxx:77
ProfileLikelihoodCalculator.cxx:78
ProfileLikelihoodCalculator.cxx:79
ProfileLikelihoodCalculator.cxx:80
ProfileLikelihoodCalculator.cxx:81
ProfileLikelihoodCalculator.cxx:82
ProfileLikelihoodCalculator.cxx:83
ProfileLikelihoodCalculator.cxx:84
ProfileLikelihoodCalculator.cxx:85
ProfileLikelihoodCalculator.cxx:86
ProfileLikelihoodCalculator.cxx:87
ProfileLikelihoodCalculator.cxx:88
ProfileLikelihoodCalculator.cxx:89
ProfileLikelihoodCalculator.cxx:90
ProfileLikelihoodCalculator.cxx:91
ProfileLikelihoodCalculator.cxx:92
ProfileLikelihoodCalculator.cxx:93
ProfileLikelihoodCalculator.cxx:94
ProfileLikelihoodCalculator.cxx:95
ProfileLikelihoodCalculator.cxx:96
ProfileLikelihoodCalculator.cxx:97
ProfileLikelihoodCalculator.cxx:98
ProfileLikelihoodCalculator.cxx:99
ProfileLikelihoodCalculator.cxx:100
ProfileLikelihoodCalculator.cxx:101
ProfileLikelihoodCalculator.cxx:102
ProfileLikelihoodCalculator.cxx:103
ProfileLikelihoodCalculator.cxx:104
ProfileLikelihoodCalculator.cxx:105
ProfileLikelihoodCalculator.cxx:106
ProfileLikelihoodCalculator.cxx:107
ProfileLikelihoodCalculator.cxx:108
ProfileLikelihoodCalculator.cxx:109
ProfileLikelihoodCalculator.cxx:110
ProfileLikelihoodCalculator.cxx:111
ProfileLikelihoodCalculator.cxx:112
ProfileLikelihoodCalculator.cxx:113
ProfileLikelihoodCalculator.cxx:114
ProfileLikelihoodCalculator.cxx:115
ProfileLikelihoodCalculator.cxx:116
ProfileLikelihoodCalculator.cxx:117
ProfileLikelihoodCalculator.cxx:118
ProfileLikelihoodCalculator.cxx:119
ProfileLikelihoodCalculator.cxx:120
ProfileLikelihoodCalculator.cxx:121
ProfileLikelihoodCalculator.cxx:122
ProfileLikelihoodCalculator.cxx:123
ProfileLikelihoodCalculator.cxx:124
ProfileLikelihoodCalculator.cxx:125
ProfileLikelihoodCalculator.cxx:126
ProfileLikelihoodCalculator.cxx:127
ProfileLikelihoodCalculator.cxx:128
ProfileLikelihoodCalculator.cxx:129
ProfileLikelihoodCalculator.cxx:130
ProfileLikelihoodCalculator.cxx:131
ProfileLikelihoodCalculator.cxx:132
ProfileLikelihoodCalculator.cxx:133
ProfileLikelihoodCalculator.cxx:134
ProfileLikelihoodCalculator.cxx:135
ProfileLikelihoodCalculator.cxx:136
ProfileLikelihoodCalculator.cxx:137
ProfileLikelihoodCalculator.cxx:138
ProfileLikelihoodCalculator.cxx:139
ProfileLikelihoodCalculator.cxx:140
ProfileLikelihoodCalculator.cxx:141
ProfileLikelihoodCalculator.cxx:142
ProfileLikelihoodCalculator.cxx:143
ProfileLikelihoodCalculator.cxx:144
ProfileLikelihoodCalculator.cxx:145
ProfileLikelihoodCalculator.cxx:146
ProfileLikelihoodCalculator.cxx:147
ProfileLikelihoodCalculator.cxx:148
ProfileLikelihoodCalculator.cxx:149
ProfileLikelihoodCalculator.cxx:150
ProfileLikelihoodCalculator.cxx:151
ProfileLikelihoodCalculator.cxx:152
ProfileLikelihoodCalculator.cxx:153
ProfileLikelihoodCalculator.cxx:154
ProfileLikelihoodCalculator.cxx:155
ProfileLikelihoodCalculator.cxx:156
ProfileLikelihoodCalculator.cxx:157
ProfileLikelihoodCalculator.cxx:158
ProfileLikelihoodCalculator.cxx:159
ProfileLikelihoodCalculator.cxx:160
ProfileLikelihoodCalculator.cxx:161
ProfileLikelihoodCalculator.cxx:162
ProfileLikelihoodCalculator.cxx:163
ProfileLikelihoodCalculator.cxx:164
ProfileLikelihoodCalculator.cxx:165
ProfileLikelihoodCalculator.cxx:166
ProfileLikelihoodCalculator.cxx:167
ProfileLikelihoodCalculator.cxx:168
ProfileLikelihoodCalculator.cxx:169
ProfileLikelihoodCalculator.cxx:170
ProfileLikelihoodCalculator.cxx:171
ProfileLikelihoodCalculator.cxx:172
ProfileLikelihoodCalculator.cxx:173
ProfileLikelihoodCalculator.cxx:174
ProfileLikelihoodCalculator.cxx:175
ProfileLikelihoodCalculator.cxx:176
ProfileLikelihoodCalculator.cxx:177
ProfileLikelihoodCalculator.cxx:178
ProfileLikelihoodCalculator.cxx:179
ProfileLikelihoodCalculator.cxx:180
ProfileLikelihoodCalculator.cxx:181
ProfileLikelihoodCalculator.cxx:182
ProfileLikelihoodCalculator.cxx:183
ProfileLikelihoodCalculator.cxx:184
ProfileLikelihoodCalculator.cxx:185
ProfileLikelihoodCalculator.cxx:186
ProfileLikelihoodCalculator.cxx:187
ProfileLikelihoodCalculator.cxx:188
ProfileLikelihoodCalculator.cxx:189
ProfileLikelihoodCalculator.cxx:190
ProfileLikelihoodCalculator.cxx:191
ProfileLikelihoodCalculator.cxx:192
ProfileLikelihoodCalculator.cxx:193
ProfileLikelihoodCalculator.cxx:194
ProfileLikelihoodCalculator.cxx:195
ProfileLikelihoodCalculator.cxx:196
ProfileLikelihoodCalculator.cxx:197
ProfileLikelihoodCalculator.cxx:198
ProfileLikelihoodCalculator.cxx:199
ProfileLikelihoodCalculator.cxx:200
ProfileLikelihoodCalculator.cxx:201
ProfileLikelihoodCalculator.cxx:202
ProfileLikelihoodCalculator.cxx:203
ProfileLikelihoodCalculator.cxx:204
ProfileLikelihoodCalculator.cxx:205
ProfileLikelihoodCalculator.cxx:206
ProfileLikelihoodCalculator.cxx:207
ProfileLikelihoodCalculator.cxx:208
ProfileLikelihoodCalculator.cxx:209
ProfileLikelihoodCalculator.cxx:210
ProfileLikelihoodCalculator.cxx:211
ProfileLikelihoodCalculator.cxx:212
ProfileLikelihoodCalculator.cxx:213
ProfileLikelihoodCalculator.cxx:214
ProfileLikelihoodCalculator.cxx:215
ProfileLikelihoodCalculator.cxx:216
ProfileLikelihoodCalculator.cxx:217
ProfileLikelihoodCalculator.cxx:218
ProfileLikelihoodCalculator.cxx:219
ProfileLikelihoodCalculator.cxx:220
ProfileLikelihoodCalculator.cxx:221
ProfileLikelihoodCalculator.cxx:222
ProfileLikelihoodCalculator.cxx:223
ProfileLikelihoodCalculator.cxx:224
ProfileLikelihoodCalculator.cxx:225
ProfileLikelihoodCalculator.cxx:226
ProfileLikelihoodCalculator.cxx:227
ProfileLikelihoodCalculator.cxx:228
ProfileLikelihoodCalculator.cxx:229
ProfileLikelihoodCalculator.cxx:230
ProfileLikelihoodCalculator.cxx:231
ProfileLikelihoodCalculator.cxx:232
ProfileLikelihoodCalculator.cxx:233
ProfileLikelihoodCalculator.cxx:234
ProfileLikelihoodCalculator.cxx:235
ProfileLikelihoodCalculator.cxx:236
ProfileLikelihoodCalculator.cxx:237
ProfileLikelihoodCalculator.cxx:238
ProfileLikelihoodCalculator.cxx:239
ProfileLikelihoodCalculator.cxx:240
ProfileLikelihoodCalculator.cxx:241
ProfileLikelihoodCalculator.cxx:242
ProfileLikelihoodCalculator.cxx:243
ProfileLikelihoodCalculator.cxx:244
ProfileLikelihoodCalculator.cxx:245
ProfileLikelihoodCalculator.cxx:246
ProfileLikelihoodCalculator.cxx:247
ProfileLikelihoodCalculator.cxx:248
ProfileLikelihoodCalculator.cxx:249
ProfileLikelihoodCalculator.cxx:250
ProfileLikelihoodCalculator.cxx:251
ProfileLikelihoodCalculator.cxx:252
ProfileLikelihoodCalculator.cxx:253
ProfileLikelihoodCalculator.cxx:254
ProfileLikelihoodCalculator.cxx:255
ProfileLikelihoodCalculator.cxx:256
ProfileLikelihoodCalculator.cxx:257
ProfileLikelihoodCalculator.cxx:258
ProfileLikelihoodCalculator.cxx:259
ProfileLikelihoodCalculator.cxx:260
ProfileLikelihoodCalculator.cxx:261
ProfileLikelihoodCalculator.cxx:262
ProfileLikelihoodCalculator.cxx:263
ProfileLikelihoodCalculator.cxx:264
ProfileLikelihoodCalculator.cxx:265
ProfileLikelihoodCalculator.cxx:266
ProfileLikelihoodCalculator.cxx:267
ProfileLikelihoodCalculator.cxx:268
ProfileLikelihoodCalculator.cxx:269
ProfileLikelihoodCalculator.cxx:270
ProfileLikelihoodCalculator.cxx:271
ProfileLikelihoodCalculator.cxx:272
ProfileLikelihoodCalculator.cxx:273
ProfileLikelihoodCalculator.cxx:274
ProfileLikelihoodCalculator.cxx:275
ProfileLikelihoodCalculator.cxx:276
ProfileLikelihoodCalculator.cxx:277
ProfileLikelihoodCalculator.cxx:278
ProfileLikelihoodCalculator.cxx:279
ProfileLikelihoodCalculator.cxx:280
ProfileLikelihoodCalculator.cxx:281
ProfileLikelihoodCalculator.cxx:282
ProfileLikelihoodCalculator.cxx:283
ProfileLikelihoodCalculator.cxx:284
ProfileLikelihoodCalculator.cxx:285
ProfileLikelihoodCalculator.cxx:286
ProfileLikelihoodCalculator.cxx:287
ProfileLikelihoodCalculator.cxx:288
ProfileLikelihoodCalculator.cxx:289
ProfileLikelihoodCalculator.cxx:290
ProfileLikelihoodCalculator.cxx:291
ProfileLikelihoodCalculator.cxx:292
ProfileLikelihoodCalculator.cxx:293
ProfileLikelihoodCalculator.cxx:294
ProfileLikelihoodCalculator.cxx:295
ProfileLikelihoodCalculator.cxx:296
ProfileLikelihoodCalculator.cxx:297
ProfileLikelihoodCalculator.cxx:298
ProfileLikelihoodCalculator.cxx:299
ProfileLikelihoodCalculator.cxx:300
ProfileLikelihoodCalculator.cxx:301
ProfileLikelihoodCalculator.cxx:302
ProfileLikelihoodCalculator.cxx:303
ProfileLikelihoodCalculator.cxx:304
ProfileLikelihoodCalculator.cxx:305
ProfileLikelihoodCalculator.cxx:306
ProfileLikelihoodCalculator.cxx:307
ProfileLikelihoodCalculator.cxx:308
ProfileLikelihoodCalculator.cxx:309
ProfileLikelihoodCalculator.cxx:310
ProfileLikelihoodCalculator.cxx:311
ProfileLikelihoodCalculator.cxx:312
ProfileLikelihoodCalculator.cxx:313
ProfileLikelihoodCalculator.cxx:314
ProfileLikelihoodCalculator.cxx:315
ProfileLikelihoodCalculator.cxx:316
ProfileLikelihoodCalculator.cxx:317
ProfileLikelihoodCalculator.cxx:318
ProfileLikelihoodCalculator.cxx:319
ProfileLikelihoodCalculator.cxx:320
ProfileLikelihoodCalculator.cxx:321
ProfileLikelihoodCalculator.cxx:322
ProfileLikelihoodCalculator.cxx:323
ProfileLikelihoodCalculator.cxx:324
ProfileLikelihoodCalculator.cxx:325
ProfileLikelihoodCalculator.cxx:326
ProfileLikelihoodCalculator.cxx:327
ProfileLikelihoodCalculator.cxx:328
ProfileLikelihoodCalculator.cxx:329
ProfileLikelihoodCalculator.cxx:330
ProfileLikelihoodCalculator.cxx:331
ProfileLikelihoodCalculator.cxx:332
ProfileLikelihoodCalculator.cxx:333
ProfileLikelihoodCalculator.cxx:334
ProfileLikelihoodCalculator.cxx:335
ProfileLikelihoodCalculator.cxx:336
ProfileLikelihoodCalculator.cxx:337
ProfileLikelihoodCalculator.cxx:338
ProfileLikelihoodCalculator.cxx:339
ProfileLikelihoodCalculator.cxx:340
ProfileLikelihoodCalculator.cxx:341
ProfileLikelihoodCalculator.cxx:342
ProfileLikelihoodCalculator.cxx:343
ProfileLikelihoodCalculator.cxx:344
ProfileLikelihoodCalculator.cxx:345
ProfileLikelihoodCalculator.cxx:346
ProfileLikelihoodCalculator.cxx:347
ProfileLikelihoodCalculator.cxx:348
ProfileLikelihoodCalculator.cxx:349
ProfileLikelihoodCalculator.cxx:350
ProfileLikelihoodCalculator.cxx:351
ProfileLikelihoodCalculator.cxx:352
ProfileLikelihoodCalculator.cxx:353
ProfileLikelihoodCalculator.cxx:354
ProfileLikelihoodCalculator.cxx:355
ProfileLikelihoodCalculator.cxx:356
ProfileLikelihoodCalculator.cxx:357
ProfileLikelihoodCalculator.cxx:358
ProfileLikelihoodCalculator.cxx:359
ProfileLikelihoodCalculator.cxx:360
ProfileLikelihoodCalculator.cxx:361
ProfileLikelihoodCalculator.cxx:362
ProfileLikelihoodCalculator.cxx:363
ProfileLikelihoodCalculator.cxx:364
ProfileLikelihoodCalculator.cxx:365
ProfileLikelihoodCalculator.cxx:366
ProfileLikelihoodCalculator.cxx:367
ProfileLikelihoodCalculator.cxx:368
ProfileLikelihoodCalculator.cxx:369
ProfileLikelihoodCalculator.cxx:370
ProfileLikelihoodCalculator.cxx:371
ProfileLikelihoodCalculator.cxx:372
ProfileLikelihoodCalculator.cxx:373
ProfileLikelihoodCalculator.cxx:374
ProfileLikelihoodCalculator.cxx:375
ProfileLikelihoodCalculator.cxx:376
ProfileLikelihoodCalculator.cxx:377
ProfileLikelihoodCalculator.cxx:378
ProfileLikelihoodCalculator.cxx:379
ProfileLikelihoodCalculator.cxx:380
ProfileLikelihoodCalculator.cxx:381
ProfileLikelihoodCalculator.cxx:382
ProfileLikelihoodCalculator.cxx:383
ProfileLikelihoodCalculator.cxx:384
ProfileLikelihoodCalculator.cxx:385
ProfileLikelihoodCalculator.cxx:386
ProfileLikelihoodCalculator.cxx:387
ProfileLikelihoodCalculator.cxx:388
ProfileLikelihoodCalculator.cxx:389
ProfileLikelihoodCalculator.cxx:390
ProfileLikelihoodCalculator.cxx:391
ProfileLikelihoodCalculator.cxx:392
ProfileLikelihoodCalculator.cxx:393
ProfileLikelihoodCalculator.cxx:394
ProfileLikelihoodCalculator.cxx:395
ProfileLikelihoodCalculator.cxx:396
ProfileLikelihoodCalculator.cxx:397
ProfileLikelihoodCalculator.cxx:398
ProfileLikelihoodCalculator.cxx:399
ProfileLikelihoodCalculator.cxx:400
ProfileLikelihoodCalculator.cxx:401
ProfileLikelihoodCalculator.cxx:402
ProfileLikelihoodCalculator.cxx:403
ProfileLikelihoodCalculator.cxx:404
ProfileLikelihoodCalculator.cxx:405
ProfileLikelihoodCalculator.cxx:406
ProfileLikelihoodCalculator.cxx:407
ProfileLikelihoodCalculator.cxx:408
ProfileLikelihoodCalculator.cxx:409