Line data Source code
1 : /** 2 : \file dipmodel_iface.cpp 3 : 4 : Bojan Nikolic <b.nikolic@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk> 5 : 6 : Renamed dipmodel_iface.cc 2023 7 : 8 : */ 9 : 10 : #include "dipmodel_iface.h" 11 : 12 : #include <cmath> 13 : 14 : namespace LibAIR2 { 15 : 16 81 : PPDipModel::PPDipModel(WVRAtmoQuantModel * am): 17 81 : _n(0), 18 81 : _za(0), 19 81 : _nam(NULL), 20 81 : _am(am) 21 : { 22 81 : std::vector< Minim::DParamCtr > pars; 23 81 : am->AddParams(pars); 24 486 : for( size_t i =0 ; i < pars.size() ; ++i) 25 405 : if(pars[i].name == "n") 26 81 : _nam=pars[i].p; 27 81 : } 28 : 29 81 : PPDipModel::~PPDipModel() 30 : { 31 81 : } 32 : 33 78697505 : void PPDipModel::setPars(void) const 34 : { 35 78697505 : *_nam = ( _n / cos(_za) ); 36 78697505 : } 37 : 38 81 : void PPDipModel::setZA(double za) 39 : { 40 81 : _za=za; 41 81 : } 42 : 43 0 : double PPDipModel::eval(size_t ch) const 44 : { 45 0 : setPars(); 46 0 : return _am->eval(ch); 47 : } 48 : 49 77889705 : void PPDipModel::eval(std::vector<double> & res) const 50 : { 51 77889705 : setPars(); 52 77889705 : _am->eval(res); 53 77889705 : } 54 : 55 0 : double PPDipModel::dTdc (size_t ch) const 56 : { 57 0 : setPars(); 58 0 : return _am->dTdc(ch); 59 : } 60 : 61 0 : double PPDipModel::dTdL_ND (size_t ch) const 62 : { 63 0 : setPars(); 64 0 : return _am->dTdL_ND(ch); 65 : } 66 : 67 807800 : void PPDipModel::dTdL_ND (std::vector<double> & res) const 68 : { 69 807800 : setPars(); 70 807800 : _am->dTdL_ND(res); 71 807800 : } 72 : 73 : 74 162 : void PPDipModel::AddParams ( std::vector< Minim::DParamCtr > &pars ) 75 : { 76 162 : _am->AddParams(pars); 77 : // Swap the pointer in the column density parameter of the model 78 : // to be to our variable _n; We will update the model depending on 79 : // _za; 80 972 : for( size_t i =0 ; i < pars.size() ; ++i) 81 810 : if(pars[i].name == "n") 82 162 : pars[i].p= &_n; 83 162 : } 84 : 85 : } 86 : 87 : 88 :