108 TFile* outFile = NULL;
109 FILE* tableFile=NULL;
113 std::cout <<
"Making Model and Measurements (Fast) for measurement: " << measurement.
GetName() << std::endl;
117 std::cout <<
"using lumi = " << measurement.
GetLumi() <<
" and lumiError = " << lumiError
118 <<
" including bins between " << measurement.
GetBinLow() <<
" and " << measurement.
GetBinHigh() << std::endl;
119 std::cout <<
"fixing the following parameters:" << std::endl;
122 std::cout <<
" " << *itr << std::endl;
125 std::string rowTitle = measurement.
GetName();
127 std::vector<RooWorkspace*> channel_workspaces;
128 std::vector<std::string> channel_names;
137 size_t pos = prefix.rfind(
"/");
138 if (pos != std::string::npos) {
139 std::string outputDir = prefix.substr(0,pos);
140 std::cout <<
"Checking if output directory : " << outputDir <<
" - exists" << std::endl;
142 std::cout <<
"Output directory : " << outputDir <<
" - does not exist, try to create" << std::endl;
145 std::string fullOutputDir = std::string(
gSystem->
pwd()) + std::string(
"/") + outputDir;
146 std::cout <<
"Error: Failed to make output directory: " << fullOutputDir << std::endl;
154 std::cout <<
"Creating the output file: " << outputFileName << std::endl;
155 outFile =
new TFile(outputFileName.c_str(),
"recreate");
160 std::cout <<
"Creating the table file: " << tableFileName << std::endl;
161 tableFile = fopen( tableFileName.c_str(),
"a");
163 std::cout <<
"Creating the HistoToWorkspaceFactoryFast factory" << std::endl;
168 std::cout <<
"Setting preprocess functions" << std::endl;
172 fprintf(tableFile,
" %s &", rowTitle.c_str() );
175 for(
unsigned int chanItr = 0; chanItr < measurement.
GetChannels().size(); ++chanItr ) {
179 std::cout <<
"MakeModelAndMeasurementsFast: Channel: " << channel.
GetName()
180 <<
" has uninitialized histogram pointers" << std::endl;
185 std::string ch_name = channel.
GetName();
186 std::cout <<
"Starting to process channel: " << ch_name << std::endl;
187 channel_names.push_back(ch_name);
189 channel_workspaces.push_back(ws_single);
193 + ch_name +
"_" + rowTitle +
"_model.root";
201 std::cout <<
"Opening File to hold channel: " << ChannelFileName << std::endl;
203 std::cout <<
"About to write channel measurement to file" << std::endl;
205 std::cout <<
"Successfully wrote channel to file" << std::endl;
214 std::cout <<
"Can't do fit for: " << measurement.
GetName()
215 <<
", no parameter of interest" << std::endl;
217 if(ws_single->
data(
"obsData")) {
219 ch_name,
"obsData", outFile, tableFile);
222 ch_name,
"asimovData", outFile, tableFile);
227 fprintf(tableFile,
" & " );
240 HistoToWorkspaceFactoryFast::ConfigureWorkspaceForMeasurement(
"simPdf",
ws, measurement );
246 + rowTitle +
"_model.root";
247 std::cout <<
"Writing combined workspace to file: " << CombinedFileName << std::endl;
248 ws->writeToFile( CombinedFileName.c_str() );
249 std::cout <<
"Writing combined measurement to file: " << CombinedFileName << std::endl;
251 if( combFile == NULL ) {
252 std::cout <<
"Error: Failed to open file " << CombinedFileName << std::endl;
261 std::cout <<
"Can't do fit for: " << measurement.
GetName()
262 <<
", no parameter of interest" << std::endl;
265 if(
ws->data(
"obsData")){
267 "obsData", outFile, tableFile);
271 "asimovData", outFile, tableFile);
276 fprintf(tableFile,
" \\\\ \n");
285 if( tableFile ) fclose(tableFile);
286 if(outFile) outFile->
Close();
297 const std::string& FileNamePrefix,
299 std::string data_name,
300 TFile* outFile, FILE* tableFile ) {
302 if( outFile == NULL ) {
303 std::cout <<
"Error: Output File in FitModelAndPlot is NULL" << std::endl;
307 if( tableFile == NULL ) {
308 std::cout <<
"Error: tableFile in FitModelAndPlot is NULL" << std::endl;
312 if( combined == NULL ) {
313 std::cout <<
"Error: Supplied workspace in FitModelAndPlot is NULL" << std::endl;
318 if(!combined_config){
319 std::cout <<
"Error: no ModelConfig found in Measurement: "
320 << MeasurementName << std::endl;
326 std::cout <<
"Error: Failed to get dataset: " << data_name
327 <<
" in measurement: " << MeasurementName << std::endl;
333 std::cout <<
"Not Fitting Model for measurement: " << MeasurementName
334 <<
", no poi found" << std::endl;
341 std::cout <<
"Error: Failed to find pdf in ModelConfig: " << combined_config->
GetName()
352 combined->
saveSnapshot(
"InitialValues", PoiPlusNuisance);
356 std::cout <<
"\n\n---------------" << std::endl;
357 std::cout <<
"---------------- Doing "<< channel <<
" Fit" << std::endl;
358 std::cout <<
"---------------\n\n" << std::endl;
364 std::cout <<
"WARNING: No POIs found in measurement: " << MeasurementName << std::endl;
372 while( (poi_obj=params_itr->
Next()) ) {
375 std::cout <<
"printing results for " << poi->
GetName()
376 <<
" at " << poi->
getVal()<<
" high "
391 if( profile==NULL ) {
392 std::cout <<
"Error: Failed to make ProfileLikelihood for: " << poi->
GetName()
393 <<
" using model: " << model->
GetName()
394 <<
" and data: " << simData->
GetName()
400 if( frame == NULL ) {
401 std::cout <<
"Error: Failed to create RooPlot frame for: " << poi->
GetName() << std::endl;
407 TCanvas* ProfileLikelihoodCanvas =
new TCanvas( channel.c_str(),
"",800,600);
413 std::string ProfilePlotName = FileNamePrefix+
"_"+channel+
"_"+MeasurementName+
"_profileLR.eps";
414 ProfileLikelihoodCanvas->
SaveAs( ProfilePlotName.c_str() );
415 delete ProfileLikelihoodCanvas;
424 if( channel_dir == NULL ) {
425 std::cout <<
"Error: Failed to make channel directory: " << channel << std::endl;
429 if( summary_dir == NULL ) {
430 std::cout <<
"Error: Failed to make Summary directory for channel: "
431 << channel << std::endl;
444 for(
int i=0; i<curve_N; i++){
448 y_arr_nll[i]=nll->
getVal();
454 g->SetName( (FileNamePrefix +
"_nll").c_str() );
468 std::cout <<
"In Fit Model" << std::endl;
470 if(!combined_config){
471 std::cout <<
"no model config " <<
"ModelConfig" <<
" exiting" << std::endl;
477 std::cout <<
"no data " << data_name <<
" exiting" << std::endl;
483 std::cout <<
"no poi " << data_name <<
" exiting" << std::endl;
R__EXTERN TStyle * gStyle
R__EXTERN TSystem * gSystem
RooAbsArg * first() const
TIterator * createIterator(Bool_t dir=kIterForward) const R__SUGGEST_ALTERNATIVE("begin()
TIterator-style iteration over contained elements.
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual RooAbsReal * createNLL(RooAbsData &data, const RooLinkedList &cmdList)
Construct representation of -log(L) of PDFwith given dataset.
virtual RooFitResult * fitTo(RooAbsData &data, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Fit PDF to given dataset.
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
virtual Double_t getMax(const char *name=0) const
Get maximum of currently defined range.
RooPlot * frame(const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create a new RooPlot on the heap with a drawing frame initialized for this object,...
virtual Double_t getMin(const char *name=0) const
Get miniminum of currently defined range.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg(), const RooCmdArg &arg10=RooCmdArg()) const
Plot (project) PDF on specified frame.
virtual RooAbsReal * createProfile(const RooArgSet ¶msOfInterest)
Create a RooProfileLL object that eliminates all nuisance parameters in the present function.
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
A RooCurve is a one-dimensional graphical representation of a real-valued function.
A RooPlot is a plot frame and a container for graphics objects within that frame.
void addObject(TObject *obj, Option_t *drawOptions="", Bool_t invisible=kFALSE)
Add a generic object to this plot.
void SetTitle(const char *name)
Set the title of the RooPlot to 'title'.
virtual void SetMinimum(Double_t minimum=-1111)
Set minimum value of Y axis.
RooAbsRealLValue * getPlotVar() const
virtual void SetMaximum(Double_t maximum=-1111)
Set maximum value of Y axis.
RooCurve * getCurve(const char *name=0) const
Return a RooCurve pointer of the named object in this plot, or zero if the named object does not exis...
virtual void Draw(Option_t *options=0)
Draw this plot and all of the elements it contains.
RooRealVar represents a fundamental (non-derived) real valued object.
Double_t getErrorHi() const
Double_t getErrorLo() const
virtual void setVal(Double_t value)
Set value of variable to 'value'.
This class encapsulates all information for the statistical interpretation of one experiment.
std::string GetName()
get name of channel
RooWorkspace * MakeSingleChannelModel(Measurement &measurement, Channel &channel)
void SetFunctionsToPreprocess(std::vector< std::string > lines)
RooWorkspace * MakeCombinedModel(std::vector< std::string >, std::vector< RooWorkspace * >)
The RooStats::HistFactory::Measurement class can be used to construct a model by combining multiple R...
void writeToFile(TFile *file)
A measurement, once fully configured, can be saved into a ROOT file.
double GetLumiRelErr()
retrieve relative uncertainty on luminosity
std::vector< std::string > & GetConstantParams()
get vector of all constant parameters
std::vector< RooStats::HistFactory::Channel > & GetChannels()
std::string GetOutputFilePrefix()
retrieve prefix for output files
double GetLumi()
retrieve integrated luminosity
std::string GetPOI(unsigned int i=0)
get name of PoI at given index
std::vector< std::string > GetPreprocessFunctions()
Returns a list of defined preprocess function expressions.
ModelConfig is a simple class that holds configuration information specifying how a model should be u...
const RooArgSet * GetParametersOfInterest() const
get RooArgSet containing the parameter of interest (return NULL if not existing)
const RooArgSet * GetNuisanceParameters() const
get RooArgSet containing the nuisance parameters (return NULL if not existing)
RooAbsPdf * GetPdf() const
get model PDF (return NULL if pdf has not been specified or does not exist)
The RooWorkspace is a persistable container for RooFit projects.
RooAbsData * data(const char *name) const
Retrieve dataset (binned or unbinned) with given name. A null pointer is returned if not found.
Bool_t writeToFile(const char *fileName, Bool_t recreate=kTRUE)
Save this current workspace into given file.
Bool_t saveSnapshot(const char *name, const char *paramNames)
Save snapshot of values and attributes (including "Constant") of parameters 'params' If importValues ...
Bool_t loadSnapshot(const char *name)
Load the values and attributes of the parameters in the snapshot saved with the given name.
RooRealVar * var(const char *name) const
Retrieve real-valued variable (RooRealVar) with given name. A null pointer is returned if not found.
TObject * obj(const char *name) const
Return any type of object (RooAbsArg, RooAbsData or generic object) with given name)
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
Describe directory structure in memory.
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
virtual void Close(Option_t *option="")
Close a file.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseGeneralPurpose, Int_t netopt=0)
Create / open a file.
A Graph is a graphics object made of two arrays X and Y with npoints each.
Iterator abstract base class.
virtual TObject * Next()=0
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
virtual void SaveAs(const char *filename="", Option_t *option="") const
Save Pad contents in a file in one of various formats.
void SetPadBorderMode(Int_t mode=1)
void SetCanvasBorderMode(Int_t mode=1)
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
virtual int MakeDirectory(const char *name)
Make a directory.
RooWorkspace * MakeModelAndMeasurementFast(RooStats::HistFactory::Measurement &measurement)
Template specialisation used in RooAbsArg:
RooCmdArg PrintLevel(Int_t code)
RooCmdArg LineColor(Color_t color)
RooCmdArg LineStyle(Style_t style)
RooCmdArg Minos(Bool_t flag=kTRUE)
void FitModel(RooWorkspace *, std::string data_name="obsData")
void FormatFrameForLikelihood(RooPlot *frame, std::string xTitle=std::string("#sigma / #sigma_{SM}"), std::string yTitle=std::string("-log likelihood"))
void FitModelAndPlot(const std::string &measurementName, const std::string &fileNamePrefix, RooWorkspace *, std::string, std::string, TFile *, FILE *)