//Display the results of a fit in a LaTeX table using cout void ResultFormatter::ReviewOutput( FitResult * OutputData ) { ResultParameterSet * outputParameters = OutputData->GetResultParameterSet(); vector<string> allNames = outputParameters->GetAllNames(); vector<string>::iterator nameIterator; cout << endl << endl; cout << "--------------------------------------------------" <<endl; cout << "\nFit Review:\t\tStatus:\t" <<OutputData->GetFitStatus()<<"\t\tNLL:\t"<<setprecision(10)<<OutputData->GetMinimumValue()<<endl<<endl; //Ouput each parameter for( nameIterator = allNames.begin(); nameIterator != allNames.end(); ++nameIterator ) { ResultParameter * outputParameter = outputParameters->GetResultParameter( *nameIterator ); double fitValue = outputParameter->GetValue(); double fitError = outputParameter->GetError(); string unit = outputParameter->GetUnit(); string name = *nameIterator; cout << setw(25) << name << " : " << setw(13) << setprecision(5) << fitValue; if( outputParameter->GetAssym() ) { cout << " + " << setprecision(5) << setw(8) << outputParameter->GetErrHi() << " - " << setw(6) << outputParameter->GetErrLow() << endl; } else { cout << " ± " << setw(13) << setprecision(5) << fitError << endl; } } cout << endl; cout << "--------------------------------------------------" <<endl; cout << endl <<endl; }
void ResultFormatter::LatexMinimumFitResultTable( FitResult * OutputData, stringstream& latex ) { ResultFormatter::TableHeader( latex, 2 ); latex << "Parameter & Fit result and error \\\\ \\hline \\hline\n" << endl; ResultParameterSet * outputParameters = OutputData->GetResultParameterSet(); vector<string> allNames = outputParameters->GetAllNames(); for( vector<string>::iterator nameIterator = allNames.begin(); nameIterator != allNames.end(); ++nameIterator ) { ResultParameter * outputParameter = outputParameters->GetResultParameter( *nameIterator ); double fitValue = outputParameter->GetValue(); double fitError = outputParameter->GetError(); string unit = outputParameter->GetUnit(); string name = *nameIterator; latex << setw(20) << EdStyle::GetParamLatexName(name) << " & " << setw(12) << setprecision(3) << fitValue; if( outputParameter->GetAssym() ) { latex << " + " << outputParameter->GetErrHi() << " - " << outputParameter->GetErrLow() << " "; } else { latex << " \\pm " << setw(10) << fitError << " "; } latex << setw(15) << EdStyle::GetParamLatexUnit(unit) << "\\\\" << endl; } ResultFormatter::TableFooter( latex ); }
//Add a new fit result bool FitResultVector::AddFitResult( FitResult * NewResult, const bool with_clock ) { vector<double> newParameterValues, newParameterErrors, newParameterPulls, newParameterGenValues; vector<string>::iterator nameIterator; ResultParameterSet * newSet = NewResult->GetResultParameterSet(); //Check all expected parameters are found for ( nameIterator = allNames.begin(); nameIterator != allNames.end(); ++nameIterator ) { ResultParameter * newResult = newSet->GetResultParameter( *nameIterator ); if ( newResult->GetUnit() == "NameNotFoundError" ) { //If any parameter is not found, fail cerr << "Expected fitted parameter \"" << *nameIterator << "\" not found" << endl; return false; } else { //Retrieve the parameter information newParameterValues.push_back( newResult->GetValue() ); newParameterErrors.push_back( newResult->GetError() ); newParameterPulls.push_back( newResult->GetPull() ); newParameterGenValues.push_back( newResult->GetOriginalValue() ); } } //If you've got this far, all the parameters have been found, so add them to the record allResults.push_back(NewResult); for (unsigned int nameIndex = 0; nameIndex < allNames.size(); ++nameIndex ) { allValues[nameIndex].push_back( newParameterValues[nameIndex] ); allErrors[nameIndex].push_back( newParameterErrors[nameIndex] ); allPulls[nameIndex].push_back( newParameterPulls[nameIndex] ); allGenValues[nameIndex].push_back( newParameterGenValues[nameIndex] ); } if( with_clock && clock != NULL ) { //Store the duration #ifdef RAPIDFIT_USETGLTIMER double thisTime = gl_clock->End(); allGLTimes.push_back( thisTime ); #endif clock->Stop(); allRealTimes.push_back( clock->RealTime() ); allCPUTimes.push_back( clock->CpuTime() ); } return true; }
//Display the results of a fit in a LaTeX table using cout void ResultFormatter::LatexOutputFitResult( FitResult * OutputData ) { //............................................. // Standard table for MC toys with pulls cout << "Fit result for MC toys with pulls" << endl; cout << "\n\\begin{center}" << endl; cout << "Fit status: " << OutputData->GetFitStatus() << endl; cout << setprecision(8) << "Minimum function value: " << OutputData->GetMinimumValue() << endl; cout << "\\begin{tabular}{|c|c|c|} \n\\hline" << endl; cout << setw(20) << "Parameter"<< " & " << setw(25) << "Fit result and error" << setw(21) << " & " << setw(20) << "$\\sigma$ from input \\\\ \t\t\\hline \\hline\n" << endl; //Ouput each parameter ResultParameterSet * outputParameters = OutputData->GetResultParameterSet(); vector<string> allNames = outputParameters->GetAllNames(); vector<string>::iterator nameIterator; for ( nameIterator = allNames.begin(); nameIterator != allNames.end(); ++nameIterator ) { ResultParameter * outputParameter = outputParameters->GetResultParameter( *nameIterator ); double fitValue = outputParameter->GetValue(); // double minValue = outputParameter->GetMinimum(); // double inputValue = outputParameter->GetOriginalValue(); double fitError = outputParameter->GetError(); double sigmaFromInputValue = outputParameter->GetPull(); string unit = outputParameter->GetUnit(); //if (fitError > 0.0) sigmaFromInputValue = (fitValue - inputValue)/fitError; //boost::regex pattern ("_",boost::regex_constants::icase|boost::regex_constants::perl); //string replace ("\\_"); //string newName = boost::regex_replace (*nameIterator, pattern, replace); //string name = FindAndReplaceString( *nameIterator ); //string name = StringProcessing::ReplaceString( *nameIterator, "_", "\\_" ); string name = *nameIterator; cout << setw(20) << EdStyle::GetParamLatexName(name) << " & " << setw(12) << setprecision(5) << fitValue << " $\\pm$ " << setw(10) << fitError << " " << setw(15) << EdStyle::GetParamLatexUnit(unit) << " & " << setw(20) << setprecision(2) << sigmaFromInputValue << "\\\\" << endl; } cout << "\\hline \n\\end{tabular}" << endl; cout << "\\end{center}\n" << endl; //................................................. //longer table for MC pull fits with absolute offsets cout << endl ; cout << "Fit result - for MC toys with pulls and absolute offsets " << endl; cout << "\n\\begin{center}" << endl; cout << "Fit status: " << OutputData->GetFitStatus() << endl; cout << setprecision(8) << "Minimum function value: " << OutputData->GetMinimumValue() << endl; cout << "\\begin{tabular}{|c|c|c|c|} \n\\hline" << endl; cout << setw(20)<< "Parameter"<< " & " << setw(25) << "Fit result and error" << setw(21) << " & "<< setw(20) <<"$\\sigma$ from input" << " & " << setw(20) << "Abs from input \\\\ \t\t\\hline \\hline\n" << endl; //Ouput each parameter for ( nameIterator = allNames.begin(); nameIterator != allNames.end(); ++nameIterator ) { ResultParameter * outputParameter = outputParameters->GetResultParameter( *nameIterator ); double fitValue = outputParameter->GetValue(); // double minValue = outputParameter->GetMinimum(); double inputValue = outputParameter->GetOriginalValue(); double fitError = outputParameter->GetError(); double sigmaFromInputValue = outputParameter->GetPull(); string unit = outputParameter->GetUnit(); //if (fitError > 0.0) sigmaFromInputValue = (fitValue - inputValue)/fitError; //boost::regex pattern ("_",boost::regex_constants::icase|boost::regex_constants::perl); //string replace ("\\_"); //string newName = boost::regex_replace (*nameIterator, pattern, replace); //string name = FindAndReplaceString( *nameIterator ); //string name = StringProcessing::ReplaceString( *nameIterator, "_", "\\_" ); string name = *nameIterator; cout << setw(20) << EdStyle::GetParamLatexName(name) << " & " << setw(12) << setprecision(5) << fitValue << " $\\pm$ " << setw(10) << fitError << " " << setw(15) << EdStyle::GetParamLatexUnit(unit) << " & " << setw(20) << setprecision(2) << sigmaFromInputValue << " & " << setw(15) << setprecision(5) << fitValue-inputValue << "\\\\" << endl; } cout << "\\hline \n\\end{tabular}" << endl; cout << "\\end{center}\n" << endl; //........................................ //short table for data fits cout << endl ; cout << "\n\\begin{center}" << endl; cout << "Fit result - for Data fits" << endl; cout << "Fit status: " << OutputData->GetFitStatus() << endl; cout << setprecision(8) << "Minimum function value: " << OutputData->GetMinimumValue() << endl; cout << "\\begin{tabular}{|c|c|} \n\\hline" << endl; cout << setw(20) << "Parameter" << " & " << setw(21) << "Fit result and error" << setw(21) << " " << " \\\\ \\hline \\hline\n" << endl; //Will need to do some comparisons // double Rperp =0, Rzp =0, ePerp =0 , eZp=0; //Ouput each parameter for ( nameIterator = allNames.begin(); nameIterator != allNames.end(); ++nameIterator ) { ResultParameter * outputParameter = outputParameters->GetResultParameter( *nameIterator ); double fitValue = outputParameter->GetValue(); // double minValue = outputParameter->GetMinimum(); // double inputValue = outputParameter->GetOriginalValue(); double fitError = outputParameter->GetError(); // double sigmaFromInputValue = outputParameter->GetPull(); string unit = outputParameter->GetUnit(); //string name = StringProcessing::ReplaceString( *nameIterator, "_", "\\_" ); string name = *nameIterator; cout << setw(20) << EdStyle::GetParamLatexName(name) << " & " << setw(12) << setprecision(3) << fitValue << " $\\pm$ " << setw(10) << fitError << " " << setw(15) << EdStyle::GetParamLatexUnit(unit) << "\\\\" << endl; } cout << "\\hline \n\\end{tabular}" << endl; cout << "\\end{center}\n" << endl; }