LCOV - code coverage report
Current view: top level - bnmin1/src - priors.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 36 52 69.2 %
Date: 2024-12-11 20:54:31 Functions: 9 16 56.2 %

          Line data    Source code
       1             : /**
       2             :    Bojan Nikolic <bojan@bnikolic.co.uk>, <b.nikolic@mrao.cam.ac.uk>
       3             : 
       4             :    \file priors.cxx
       5             :    Renamed to priors.cc 2023
       6             : 
       7             : */
       8             : 
       9             : #include "priors.h"
      10             : 
      11             : #include "paramalgo.h"
      12             : #include <cmath>
      13             : 
      14             : namespace Minim {
      15             : 
      16             :   const double PriorNLikelihood::lkl_h=1e9;
      17          81 :   PriorNLikelihood::PriorNLikelihood(MLikelihood * mod):
      18          81 :     _mod(mod)
      19             :   {
      20          81 :   }
      21             : 
      22          81 :   PriorNLikelihood::~PriorNLikelihood()
      23             :   {
      24          81 :   }
      25             : 
      26         162 :   void  PriorNLikelihood::AddParams (std::vector< Minim::DParamCtr > &pars)
      27             :   {
      28         162 :     _mod->AddParams(pars);
      29         162 :   }
      30             : 
      31          81 :   IndependentPriors::IndependentPriors(MLikelihood * mod):
      32          81 :     PriorNLikelihood(mod)    
      33             :   {
      34          81 :     AddParams(_mpars);
      35          81 :   }
      36             : 
      37          81 :   IndependentPriors::~IndependentPriors(void)
      38             :   {
      39          81 :   }
      40             : 
      41         243 :   void IndependentPriors::AddPrior( const std::string & pname,
      42             :                                     double low,
      43             :                                     double high)
      44             :   {
      45             :     fprior_t pr;
      46             :     
      47         243 :     DParamCtr * par=findName(_mpars,pname);
      48         243 :     if (par == NULL)
      49           0 :       throw ParamError(pname+" not found");
      50         243 :     pr.p=par->p;
      51         243 :     pr.pmin=low;
      52         243 :     pr.pmax=high;
      53         243 :     priorlist.push_back(pr);
      54         243 :   }
      55             : 
      56    77873505 :   double IndependentFlatPriors::pprob(void) const
      57             :   {
      58    77873505 :     double lpriorprop = 0 ;
      59    77873505 :     for (priorlist_t::const_iterator i = pbegin();
      60   311494020 :          i != pend();
      61   233620515 :          ++i)
      62             :     {
      63   233620515 :       const double p = * (i->p);
      64   233620515 :       if (p < i->pmin or p > i->pmax)
      65     2856434 :         lpriorprop += lkl_h;
      66             :     }
      67    77873505 :     return lpriorprop;
      68             :   }
      69             : 
      70          81 :   IndependentFlatPriors::IndependentFlatPriors(MLikelihood * mod):
      71          81 :     IndependentPriors(mod)
      72             :   {
      73          81 :   }
      74             :   
      75          81 :   IndependentFlatPriors::~IndependentFlatPriors(void)
      76             :   {
      77          81 :   }
      78             : 
      79           0 :   LogFlatPriors::LogFlatPriors(MLikelihood * mod):
      80           0 :     IndependentPriors(mod)
      81             :   {
      82           0 :   }
      83             :   
      84           0 :   LogFlatPriors::~LogFlatPriors(void)
      85             :   {
      86           0 :   }
      87             : 
      88           0 :   double LogFlatPriors::pprob(void) const
      89             :   {
      90           0 :     double lpriorprop = 0 ;
      91           0 :     for (priorlist_t::const_iterator i = pbegin();
      92           0 :          i != pend();
      93           0 :          ++i)
      94             :     {
      95           0 :       const double p = * (i->p);
      96           0 :       if (p < i->pmin or p > i->pmax)
      97             :       {
      98           0 :         lpriorprop += lkl_h;
      99             :       }
     100             :       else
     101             :       {
     102           0 :         lpriorprop += std::log(p);
     103             :       }
     104             :     }
     105           0 :     return lpriorprop;
     106             :   }
     107             : 
     108             : 
     109             : }
     110             : 

Generated by: LCOV version 1.16