LCOV - code coverage report
Current view: top level - bnmin1/src - robustline.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 0 52 0.0 %
Date: 2024-11-06 17:42:47 Functions: 0 6 0.0 %

          Line data    Source code
       1             : /**
       2             :    Bojan Nikolic <bojan@bnikolic.co.uk>, <b.nikolic@mrao.cam.ac.uk>
       3             :    Initial version 2008
       4             : 
       5             :    \file robustline.cxx
       6             :    Renamed to robustline.cc 2023
       7             : 
       8             : */
       9             : 
      10             : #include "robustline.h"
      11             : 
      12             : #include <cmath>
      13             : #include <iostream>
      14             : 
      15             : namespace Minim {
      16             : 
      17           0 :   RobustLineObsMod::RobustLineObsMod(const std::vector<double> &xobs,
      18           0 :                                      const std::vector<double> &yobs):
      19           0 :     nobs(xobs.size()),
      20           0 :     xobs(xobs),
      21           0 :     yobs(yobs),
      22           0 :     ysigma(xobs.size(),1.0)
      23             :   {
      24           0 :     a=1;
      25           0 :     b=0;
      26           0 :   }
      27             : 
      28           0 :   void RobustLineObsMod::residuals(std::vector<double> &res) const
      29             :   {
      30           0 :     res.resize(nobs);
      31           0 :     for(size_t i =0; i<nobs; ++i)
      32             :     {
      33           0 :       res[i]=(yobs[i]-xobs[i]*a-b)/ysigma[i];
      34             :     }
      35           0 :   }
      36             : 
      37           0 :   void RobustLineObsMod::dres_da(std::vector<double> &res) const
      38             :   {
      39           0 :     res.resize(nobs);
      40           0 :     for(size_t i =0; i<nobs; ++i)
      41             :     {
      42           0 :       res[i]= (-1.0 * xobs[i]/ysigma[i]);
      43             :     }
      44           0 :   }
      45             : 
      46           0 :   void RobustLineObsMod::dres_db(std::vector<double> &res) const
      47             :   {
      48           0 :     res.resize(nobs);
      49           0 :     for(size_t i =0; i<nobs; ++i)
      50             :     {
      51           0 :       res[i]= (-1.0/ysigma[i]) ;
      52             :     }
      53           0 :   }
      54             : 
      55           0 :   double RobustLineObsMod::lLikely(void) const
      56             :   {
      57           0 :     std::vector<double> res;
      58           0 :     residuals(res);
      59             : 
      60           0 :     double tot=0;
      61           0 :     for(size_t i=0; i<nobs; ++i)
      62             :     {
      63           0 :       if (fabs(res[i])  < ysigma[i])
      64             :       {
      65           0 :         tot += pow(res[i],2);
      66             :       }
      67             :       else
      68             :       {
      69           0 :         tot+=fabs(res[i]);
      70             :       }
      71             :     }
      72           0 :     return tot;
      73           0 :   }
      74             : 
      75           0 :   void RobustLineObsMod::lGrd(std::vector< double > &out) const
      76             :   {
      77           0 :     out.resize(2);
      78           0 :     out[0]=out[1]=0;
      79             : 
      80           0 :     std::vector<double> res;
      81           0 :     residuals(res);
      82             : 
      83           0 :     std::vector<double> da,db;
      84           0 :     dres_da(da);
      85           0 :     dres_db(db);    
      86             : 
      87           0 :     for(size_t i=0; i<nobs; ++i)
      88             :     {
      89           0 :       if(fabs(res[i]) < ysigma[i])
      90             :       {
      91           0 :         out[0]+= -2 * res[i] * xobs[i]/ pow(ysigma[i],2);
      92           0 :         out[1]+= -2 * res[i] / pow(ysigma[i],2);
      93             :       }
      94           0 :       else if(res[i]>0)
      95             :       {
      96           0 :         out[0] += da[i];
      97           0 :         out[1] += db[i];
      98             :       }
      99             :       else
     100             :       {
     101           0 :         out[0] -= da[i];
     102           0 :         out[1] -= db[i];
     103             :       }
     104             :     }
     105           0 :   }
     106             : 
     107             : }

Generated by: LCOV version 1.16