LCOV - code coverage report
Current view: top level - air_casawvr/src/apps - almaabs_i.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 54 54 100.0 %
Date: 2024-12-11 20:54:31 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /**
       2             :    Bojan Nikolic <b.nikolic@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk>
       3             :    Initial version November 2009
       4             :    Maintained by ESO since 2013.
       5             : 
       6             :    \file almaabs_i.cpp
       7             :    Renamed almaabs_i.cc 2023
       8             :    
       9             : */
      10             : #include <iostream>
      11             : 
      12             : #include "almaabs_i.h"
      13             : 
      14             : #include "../model_make.h"
      15             : #include "../dtdltools.h"
      16             : #include "bnmin1/src/nestedinitial.h"
      17             : 
      18             : 
      19             : namespace LibAIR2 {
      20             : 
      21             :   const double iALMAAbsRetLL::thermNoise=1.0;
      22             :   const size_t iALMAAbsRet::n_ss=200;
      23             : 
      24          81 :   iALMAAbsRetLL::iALMAAbsRetLL(const std::vector<double> &TObs,
      25             :                                double el,
      26          81 :                                const ALMAWVRCharacter &WVRChar):
      27          81 :     cm(new CouplingModel(mkSingleLayerWater(WVRChar,
      28             :                                             PartTable,
      29          81 :                                             AirCont))),
      30          81 :     m(cm),
      31          81 :     ll(new AbsNormMeasure(m))
      32             :   {
      33          81 :     cm->setSpill(0.98, 275);
      34             :     
      35          81 :     m.setZA(0.5 * M_PI -el);
      36          81 :     ll->obs=TObs;
      37         162 :     ll->thermNoise=std::vector<double>(TObs.size(),
      38          81 :                                        thermNoise);
      39             : 
      40          81 :   }
      41             : 
      42          81 :   iALMAAbsRet::iALMAAbsRet(const std::vector<double> &TObs,
      43             :                            double el,
      44             :                            const ALMAWVRCharacter &WVRChar,
      45          81 :                            unsigned rseed):
      46          81 :     ls(TObs, 
      47             :        el, 
      48             :        WVRChar),
      49          81 :     pll(ls.ll),
      50          81 :     rseed(rseed),
      51         162 :     evidence()
      52             :   {
      53          81 :     pll.AddPrior("n", 0, 10);
      54          81 :     pll.AddPrior("T", 250, 295);
      55          81 :     pll.AddPrior("P", 300, 550);
      56          81 :   }
      57             : 
      58          81 :   bool iALMAAbsRet::sample(void)
      59             :   {
      60             :     // Create starting set
      61          81 :     std::list<Minim::MCPoint> ss;
      62          81 :     startSetDirect(pll,
      63             :                    n_ss,
      64             :                    ss,
      65             :                    rseed);
      66             : 
      67             :     // Create the nested sampler
      68          81 :     ns.reset(new Minim::NestedS(pll));
      69          81 :     (*ns)["coupling"]->dofit=false;
      70          81 :     ns->reset(ss);
      71             : 
      72             :     // So far not obvious it is necessary to enable this
      73             :     //ns->InitalS(new Minim::InitialRandom(n_ss));
      74             : 
      75          81 :     evidence=ns->sample(10000);
      76          81 :     post=ns->g_post();
      77             : 
      78          81 :     if (post.size() < 10000 )
      79             :     {
      80           4 :       std::cout<<"Terminated after "<<post.size()<<std::endl;
      81             :     }
      82          81 :     if(evidence == 0.){
      83           4 :       return false;
      84             :     }
      85          77 :     return true;
      86             : 
      87          81 :   }
      88             : 
      89          77 :   void iALMAAbsRet::g_Pars(ALMAResBase &res)
      90             :   {
      91          77 :     res.ev=evidence;
      92             : 
      93         154 :     std::vector<double> m1(3), m2(3);
      94          77 :     moment1(post,
      95             :             evidence,
      96             :             m1);
      97             : 
      98          77 :     moment2(post,
      99             :             m1,
     100             :             evidence,
     101             :             m2);
     102             : 
     103          77 :     res.c=m1[0];
     104          77 :     res.c_err=std::pow(m2[0], 0.5);
     105          77 :   }
     106             : 
     107          77 :   void iALMAAbsRet::g_Coeffs(ALMAResBase &r)
     108             :   {
     109          77 :     r.ev=evidence;
     110          77 :     dTdLMom1(post,
     111          77 :              *ns,
     112             :              ls.m,
     113             :              evidence,
     114             :              1e-10,
     115          77 :              r.dTdL);
     116             : 
     117          77 :     dTdLMom2(post,
     118          77 :              *ns,
     119             :              ls.m,
     120          77 :              r.dTdL,
     121             :              evidence,
     122             :              1e-10,
     123          77 :              r.dTdL_err);
     124          77 :   }
     125             : 
     126             : 
     127             : }
     128             : 
     129             : 
     130             : 

Generated by: LCOV version 1.16