LCOV - code coverage report
Current view: top level - air_casawvr/src - model_iface.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 26 80 32.5 %
Date: 2024-12-11 20:54:31 Functions: 6 18 33.3 %

          Line data    Source code
       1             : /**
       2             :    \file model_iface.cpp
       3             :    Renamed model_iface.cc 2023
       4             :    
       5             :    Bojan Nikolic <b.nikolic@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk>
       6             :    
       7             : */
       8             : 
       9             : #include "model_iface.h"
      10             : 
      11             : #include <stdio.h>
      12             : 
      13             : #include <bnmin1/src/minim.h>
      14             : 
      15             : #include "models_basic.h"
      16             : #include "radiometermeasure.h"
      17             : #include "slice.h"
      18             : #include "columns.h"
      19             : #include "lineparams.h"
      20             : #include "basicphys.h"
      21             : #include "partitionsum.h"
      22             : #include "partitionsum_testdata.h"
      23             : #include "rtranfer.h"
      24             : #include "layers.h"
      25             :  
      26             : namespace LibAIR2 {
      27             : 
      28         243 :   WVRAtmoQuants::~WVRAtmoQuants(void)
      29             :   {
      30         243 :   }
      31             : 
      32             :   std::array<double, 4>
      33           0 :   WVRAtmoQuantModel::evalFn(double x, const std::string &pname)
      34             :   {
      35             :     std::array<double, 4> res;
      36           0 :     Minim::ModelDesc md(*this);
      37           0 :     double oldval=*md[pname]->p;
      38           0 :     *md[pname]->p=x;
      39           0 :     std::vector<double> Tb(4);
      40           0 :     eval(Tb);
      41           0 :     for(size_t i=0; i<4; ++i)
      42           0 :       res[i]=Tb[i];
      43           0 :     *md[pname]->p=oldval;
      44           0 :     return res;
      45           0 :   }
      46             : 
      47          81 :   CouplingModel::CouplingModel(WVRAtmoQuantModel * am):
      48          81 :     coupling(1.0),
      49          81 :     TTerm(1.0),
      50          81 :     _am(am)
      51             :   {
      52          81 :   }
      53             : 
      54          81 :   void CouplingModel::setSpill(double c, double T)
      55             :   {
      56          81 :     coupling=c;
      57          81 :     TTerm=T;
      58          81 :   }
      59             : 
      60           0 :   double CouplingModel::eval(size_t ch) const 
      61             :   {
      62           0 :     const double TSky=_am->eval(ch);
      63           0 :     return coupling*TSky + (1-coupling)* TTerm;
      64             :   }
      65             : 
      66    77889705 :   void CouplingModel::eval(std::vector<double> & res) const 
      67             :   {
      68    77889705 :     _am->eval(res);
      69   389448525 :     for (size_t i =0 ; i < res.size() ; ++i)
      70   311558820 :       res[i]= coupling * res[i] + (1-coupling)* TTerm;
      71    77889705 :   }
      72             : 
      73           0 :   double CouplingModel::dTdc (size_t ch) const
      74             :   {
      75           0 :     return coupling*_am->dTdc(ch); 
      76             :   }
      77             : 
      78           0 :   double CouplingModel::dTdL_ND (size_t ch) const
      79             :   {
      80           0 :     return coupling*_am->dTdL_ND(ch);
      81             :   }
      82             :   
      83      807800 :   void CouplingModel::dTdL_ND (std::vector<double> & res) const
      84             :   {
      85      807800 :     _am->dTdL_ND(res);
      86             : 
      87     4039000 :     for( double &x: res)
      88             :     {
      89     3231200 :       x*= coupling;
      90             :     }
      91             :       
      92      807800 :   }
      93             :   
      94         243 :   void   CouplingModel::AddParams ( std::vector< Minim::DParamCtr > &pars )
      95             :   {
      96         243 :     _am->AddParams(pars);
      97             : 
      98         243 :     pars.push_back(Minim::DParamCtr ( &coupling ,      
      99             :                                       "coupling", 
     100             :                                       true     ,                       
     101             :                                       "Coupling to sky"
     102             :                                       ));
     103             : 
     104         243 :     pars.push_back(Minim::DParamCtr ( &TTerm ,      
     105             :                                       "TTerm", 
     106             :                                       false,                       
     107             :                                       "Termination temperature"
     108             :                                       ));
     109         243 :   }
     110             : 
     111           0 :   AbsCalModel::AbsCalModel(WVRAtmoQuantModel * am,
     112           0 :                            size_t nchan):
     113           0 :     zero(nchan, 0.0),
     114           0 :     scale(nchan, 1.0),
     115           0 :     _am(am)
     116             :   {
     117           0 :   }
     118             : 
     119           0 :   double AbsCalModel::eval(size_t ch) const 
     120             :   {
     121           0 :     const double TSky=_am->eval(ch);
     122           0 :     return zero[ch]+scale[ch]*TSky;
     123             :   }
     124             : 
     125           0 :   void AbsCalModel::eval(std::vector<double> & res) const 
     126             :   {
     127           0 :     _am->eval(res);
     128           0 :     for (size_t i =0 ; i < res.size() ; ++i)
     129           0 :       res[i]= scale[i] * res[i] + zero[i];
     130           0 :   }
     131             : 
     132           0 :   double AbsCalModel::dTdc (size_t ch) const
     133             :   {
     134           0 :     return scale[ch]*_am->dTdc(ch); 
     135             :   }
     136             : 
     137           0 :   double AbsCalModel::dTdL_ND (size_t ch) const
     138             :   {
     139           0 :     return scale[ch]*_am->dTdL_ND(ch);
     140             :   }
     141             :   
     142           0 :   void AbsCalModel::dTdL_ND (std::vector<double> & res) const
     143             :   {
     144           0 :     _am->dTdL_ND(res);
     145           0 :     for(size_t i=0; i<res.size(); ++i)
     146           0 :       res[i]=scale[i]*res[i];
     147           0 :   }
     148             : 
     149           0 :   void AbsCalModel::AddParams(std::vector<Minim::DParamCtr> &pars)
     150             :   {
     151           0 :     _am->AddParams(pars);
     152             :     char tstr[20];
     153             :     
     154           0 :     for(size_t i=0; i<zero.size(); ++i)
     155             :     {
     156           0 :       sprintf(tstr, "%i", (i+1));
     157           0 :       std::string mychan(tstr);
     158           0 :       pars.push_back(Minim::DParamCtr(&zero[i],      
     159           0 :                                       std::string("abszero")+mychan, 
     160             :                                       true,                       
     161           0 :                                       std::string("Absolute calibration zero of channel ")+mychan
     162             :                                       ));
     163             : 
     164           0 :       pars.push_back(Minim::DParamCtr(&scale[i],      
     165           0 :                                       std::string("absscale")+mychan,
     166             :                                       true,                       
     167           0 :                                       std::string("Absolute calibration scaling of channel ")+mychan
     168             :                                       ));
     169           0 :     }
     170           0 :   }
     171             : 
     172             : 
     173             : 
     174             : }
     175             : 
     176             : 
     177             :    

Generated by: LCOV version 1.16