diff --git a/src/classes/PFunction.cpp b/src/classes/PFunction.cpp index 51de6fbb..43b9b6c5 100644 --- a/src/classes/PFunction.cpp +++ b/src/classes/PFunction.cpp @@ -492,6 +492,7 @@ Double_t PFunction::EvalNode(PFuncTreeNode &node) if (denominator == 0.0) { cerr << endl << "**PANIC ERROR**: PFunction::EvalNode: division by 0.0"; cerr << endl << "**PANIC ERROR**: PFunction::EvalNode: requested operation: " << EvalNode(node.children[0]) << "/" << EvalNode(node.children[1]); + cerr << endl << ">> " << fFuncString.Data() << endl; cerr << endl; assert(0); } diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index ac5e5ab5..35c4e4ad 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -5328,9 +5328,9 @@ void PMusrCanvas::SaveDataAscii() fout << dumpVector[j].dataErr[i] << ", "; } else { if (dumpVector[j].dataErr.size() > 0) - fout << ", , , "; + fout << " , , , "; else - fout << ", , "; + fout << " , , "; } } // write theory @@ -5339,7 +5339,7 @@ void PMusrCanvas::SaveDataAscii() fout << dumpVector[j].theoryX[i] << ", "; fout << dumpVector[j].theory[i] << ", "; } else { - fout << ", , "; + fout << " , , "; } } // write last theory entry @@ -5347,7 +5347,7 @@ void PMusrCanvas::SaveDataAscii() fout << dumpVector[dumpVector.size()-1].theoryX[i] << ", "; fout << dumpVector[dumpVector.size()-1].theory[i]; } else { - fout << ", "; + fout << " , "; } fout << endl; } diff --git a/src/classes/PRunMuMinus.cpp b/src/classes/PRunMuMinus.cpp index 0523bf67..4e4f95fa 100644 --- a/src/classes/PRunMuMinus.cpp +++ b/src/classes/PRunMuMinus.cpp @@ -211,7 +211,7 @@ Double_t PRunMuMinus::CalcChiSquareExpected(const std::vector& par) // CalcMaxLikelihood //-------------------------------------------------------------------------- /** - *

Calculate log max-likelihood. + *

Calculate log max-likelihood. See http://pdg.lbl.gov/index.html * * return: * - log max-likelihood value @@ -258,13 +258,14 @@ Double_t PRunMuMinus::CalcMaxLikelihood(const std::vector& par) time = fData.GetDataTimeStart() + (Double_t)i*fData.GetDataTimeStep(); // calculate theory for the given parameter set theo = fTheory->Func(time, par, fFuncValues); - // check if data value is not too small - if (fData.GetValue()->at(i) > 1.0e-9) - data = fData.GetValue()->at(i); - else - data = 1.0e-9; - // add maximum log likelihood contribution of bin i - mllh -= data*TMath::Log(theo) - theo - TMath::LnGamma(data+1); + + data = fData.GetValue()->at(i); + + if (data > 1.0e-9) { + mllh += (theo-data) + data*log(data/theo); + } else { + mllh += (theo-data); + } } return mllh; diff --git a/src/classes/PRunNonMusr.cpp b/src/classes/PRunNonMusr.cpp index 18ca884c..2814ec11 100644 --- a/src/classes/PRunNonMusr.cpp +++ b/src/classes/PRunNonMusr.cpp @@ -144,7 +144,7 @@ Double_t PRunNonMusr::CalcChiSquareExpected(const std::vector& par) */ Double_t PRunNonMusr::CalcMaxLikelihood(const std::vector& par) { - cout << endl << "PRunSingleHisto::CalcMaxLikelihood(): not implemented yet ..." << endl; + cout << endl << "PRunNonMusr::CalcMaxLikelihood(): not implemented yet ..." << endl; return 1.0; } diff --git a/src/classes/PRunSingleHisto.cpp b/src/classes/PRunSingleHisto.cpp index 3a6f11c4..7dc81d05 100644 --- a/src/classes/PRunSingleHisto.cpp +++ b/src/classes/PRunSingleHisto.cpp @@ -296,7 +296,7 @@ Double_t PRunSingleHisto::CalcChiSquareExpected(const std::vector& par // CalcMaxLikelihood (public) //-------------------------------------------------------------------------- /** - *

Calculate log maximum-likelihood. + *

Calculate log maximum-likelihood. See http://pdg.lbl.gov/index.html * * return: * - log maximum-likelihood value @@ -381,13 +381,14 @@ Double_t PRunSingleHisto::CalcMaxLikelihood(const std::vector& par) // calculate theory for the given parameter set theo = N0*TMath::Exp(-time/tau)*(1+fTheory->Func(time, par, fFuncValues))+bkg; theo *= normalizer; - // check if data value is not too small - if (fData.GetValue()->at(i) > 1.0e-9) - data = normalizer*fData.GetValue()->at(i); - else - data = 1.0e-9; - // add maximum log likelihood contribution of bin i - mllh -= data*TMath::Log(theo) - theo - TMath::LnGamma(data+1); + + data = normalizer*fData.GetValue()->at(i); + + if (data > 1.0e-9) { + mllh += (theo-data) + data*log(data/theo); + } else { + mllh += (theo-data); + } } return mllh;