// @(#)root/roostats:$Id$ // Author: Kyle Cranmer, George Lewis /************************************************************************* * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ //_________________________________________________ /* BEGIN_HTML

END_HTML */ // #include "RooStats/HistFactory/Systematics.h" #include "RooStats/HistFactory/HistFactoryException.h" // Constraints std::string RooStats::HistFactory::Constraint::Name( Constraint::Type type ) { if( type == Constraint::Gaussian ) return "Gaussian"; if( type == Constraint::Poisson ) return "Poisson"; return ""; } RooStats::HistFactory::Constraint::Type RooStats::HistFactory::Constraint::GetType( const std::string& Name ) { if( Name == "" ) { std::cout << "Error: Given empty name for ConstraintType" << std::endl; throw hf_exc(); } else if ( Name == "Gaussian" || Name == "Gauss" ) { return Constraint::Gaussian; } else if ( Name == "Poisson" || Name == "Pois" ) { return Constraint::Poisson; } else { std::cout << "Error: Unknown name given for Constraint Type: " << Name << std::endl; throw hf_exc(); } } // Norm Factor RooStats::HistFactory::NormFactor::NormFactor() : fName(""), fVal(1.0), fLow(1.0), fHigh(1.0), fConst(true) {;} void RooStats::HistFactory::NormFactor::Print( std::ostream& stream ) { stream << "\t \t Name: " << fName << "\t Val: " << fVal << "\t Low: " << fLow << "\t High: " << fHigh << "\t Const: " << fConst << std::endl; } void RooStats::HistFactory::NormFactor::PrintXML( std::ostream& xml ) { xml << " " << std::endl; } // Overall Sys void RooStats::HistFactory::OverallSys::Print( std::ostream& stream ) { stream << "\t \t Name: " << fName << "\t Low: " << fLow << "\t High: " << fHigh << std::endl; } void RooStats::HistFactory::OverallSys::PrintXML( std::ostream& xml ) { xml << " " << std::endl; } // HistoSys TH1* RooStats::HistFactory::HistoSys::GetHistoLow() { TH1* histo_low = (TH1*) fhLow.GetObject(); return histo_low; } TH1* RooStats::HistFactory::HistoSys::GetHistoHigh() { TH1* histo_high = (TH1*) fhHigh.GetObject(); return histo_high; } void RooStats::HistFactory::HistoSys::Print( std::ostream& stream ) { stream << "\t \t Name: " << fName << "\t InputFileLow: " << fInputFileLow << "\t HistoNameLow: " << fHistoNameLow << "\t HistoPathLow: " << fHistoPathLow << "\t InputFileHigh: " << fInputFileHigh << "\t HistoNameHigh: " << fHistoNameHigh << "\t HistoPathHigh: " << fHistoPathHigh << std::endl; } void RooStats::HistFactory::HistoSys::PrintXML( std::ostream& xml ) { xml << " " << std::endl; } void RooStats::HistFactory::HistoSys::writeToFile( const std::string& FileName, const std::string& DirName ) { // This saves the histograms to a file and // changes the name of the local file and histograms TH1* histLow = GetHistoLow(); if( histLow==NULL ) { std::cout << "Error: Cannot write " << GetName() << " to file: " << FileName << " HistoLow is NULL" << std::endl; throw hf_exc(); } histLow->Write(); fInputFileLow = FileName; fHistoPathLow = DirName; fHistoNameLow = histLow->GetName(); TH1* histHigh = GetHistoHigh(); if( histHigh==NULL ) { std::cout << "Error: Cannot write " << GetName() << " to file: " << FileName << " HistoHigh is NULL" << std::endl; throw hf_exc(); } histHigh->Write(); fInputFileHigh = FileName; fHistoPathHigh = DirName; fHistoNameHigh = histHigh->GetName(); return; } // Shape Sys TH1* RooStats::HistFactory::ShapeSys::GetErrorHist() { TH1* error_hist = (TH1*) fhError.GetObject(); return error_hist; } void RooStats::HistFactory::ShapeSys::Print( std::ostream& stream ) { stream << "\t \t Name: " << fName << "\t InputFile: " << fInputFile << "\t HistoName: " << fHistoName << "\t HistoPath: " << fHistoPath << std::endl; } void RooStats::HistFactory::ShapeSys::PrintXML( std::ostream& xml ) { xml << " " << std::endl; } void RooStats::HistFactory::ShapeSys::writeToFile( const std::string& FileName, const std::string& DirName ) { TH1* histError = GetErrorHist(); if( histError==NULL ) { std::cout << "Error: Cannot write " << GetName() << " to file: " << FileName << " ErrorHist is NULL" << std::endl; throw hf_exc(); } histError->Write(); fInputFile = FileName; fHistoPath = DirName; fHistoName = histError->GetName(); return; } // HistoFactor void RooStats::HistFactory::HistoFactor::Print( std::ostream& stream ) { stream << "\t \t Name: " << fName << "\t InputFileLow: " << fInputFileLow << "\t HistoNameLow: " << fHistoNameLow << "\t HistoPathLow: " << fHistoPathLow << "\t InputFileHigh: " << fInputFileHigh << "\t HistoNameHigh: " << fHistoNameHigh << "\t HistoPathHigh: " << fHistoPathHigh << std::endl; } TH1* RooStats::HistFactory::HistoFactor::GetHistoLow() { TH1* histo_low = (TH1*) fhLow.GetObject(); return histo_low; } TH1* RooStats::HistFactory::HistoFactor::GetHistoHigh() { TH1* histo_high = (TH1*) fhHigh.GetObject(); return histo_high; } void RooStats::HistFactory::HistoFactor::writeToFile( const std::string& FileName, const std::string& DirName ) { // This saves the histograms to a file and // changes the name of the local file and histograms TH1* histLow = GetHistoLow(); if( histLow==NULL ) { std::cout << "Error: Cannot write " << GetName() << " to file: " << FileName << " HistoLow is NULL" << std::endl; throw hf_exc(); } histLow->Write(); fInputFileLow = FileName; fHistoPathLow = DirName; fHistoNameLow = histLow->GetName(); TH1* histHigh = GetHistoHigh(); if( histHigh==NULL ) { std::cout << "Error: Cannot write " << GetName() << " to file: " << FileName << " HistoHigh is NULL" << std::endl; throw hf_exc(); } histHigh->Write(); fInputFileHigh = FileName; fHistoPathHigh = DirName; fHistoNameHigh = histHigh->GetName(); return; } void RooStats::HistFactory::HistoFactor::PrintXML( std::ostream& xml ) { xml << " " << std::endl; } // Shape Factor RooStats::HistFactory::ShapeFactor::ShapeFactor() : fConstant(false), fHasInitialShape(false), fhInitialShape(NULL) {;} void RooStats::HistFactory::ShapeFactor::Print( std::ostream& stream ) { stream << "\t \t Name: " << fName << std::endl; if( fHistoName != "" ) { stream << "\t \t " << " Shape Hist Name: " << fHistoName << " Shape Hist Path Name: " << fHistoPath << " Shape Hist FileName: " << fInputFile << std::endl; } if( fConstant ) { stream << "\t \t ( Constant ): " << std::endl; } } void RooStats::HistFactory::ShapeFactor::writeToFile( const std::string& FileName, const std::string& DirName ) { if( HasInitialShape() ) { TH1* histInitialShape = GetInitialShape(); if( histInitialShape==NULL ) { std::cout << "Error: Cannot write " << GetName() << " to file: " << FileName << " InitialShape is NULL" << std::endl; throw hf_exc(); } histInitialShape->Write(); fInputFile = FileName; fHistoPath = DirName; fHistoName = histInitialShape->GetName(); } return; } void RooStats::HistFactory::ShapeFactor::PrintXML( std::ostream& xml ) { xml << " " << std::endl; } // Stat Error Config void RooStats::HistFactory::StatErrorConfig::Print( std::ostream& stream ) { stream << "\t \t RelErrorThreshold: " << fRelErrorThreshold << "\t ConstraintType: " << Constraint::Name( fConstraintType ) << std::endl; } void RooStats::HistFactory::StatErrorConfig::PrintXML( std::ostream& xml ) { xml << " " << std::endl << std::endl; } // Stat Error TH1* RooStats::HistFactory::StatError::GetErrorHist() { return (TH1*) fhError.GetObject(); } void RooStats::HistFactory::StatError::Print( std::ostream& stream ) { stream << "\t \t Activate: " << fActivate << "\t InputFile: " << fInputFile << "\t HistoName: " << fHistoName << "\t histoPath: " << fHistoPath << std::endl; } void RooStats::HistFactory::StatError::PrintXML( std::ostream& xml ) { if( GetActivate() ) { xml << " " << std::endl; } } void RooStats::HistFactory::StatError::writeToFile( const std::string& OutputFileName, const std::string& DirName ) { if( fUseHisto ) { std::string statErrorHistName = "statisticalErrors"; TH1* hStatError = GetErrorHist(); if( hStatError == NULL ) { std::cout << "Error: Stat Error error hist is NULL" << std::endl; throw hf_exc(); } hStatError->Write(statErrorHistName.c_str()); fInputFile = OutputFileName; fHistoName = statErrorHistName; fHistoPath = DirName; } return; }