LCOV - code coverage report
Current view: top level - air_casawvr/src - rtranfer.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 26 42 61.9 %
Date: 2024-11-06 17:42:47 Functions: 5 7 71.4 %

          Line data    Source code
       1             : /**
       2             :    \file rtranfer.cpp
       3             :    Bojan Nikolic <bn204@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk>
       4             :    
       5             :    Initial version February 2008
       6             :    Maintained by ESO since 2013.
       7             :    Renamed rtranfer.cc 2023
       8             : 
       9             :    Some code was previously in slice.hpp/slice.cpp 
      10             : 
      11             : */
      12             : 
      13             : #include "rtranfer.h"
      14             : 
      15             : #include "slice.h"
      16             : #include "basicphys.h"
      17             : #include "layers.h"
      18             : 
      19             : namespace LibAIR2 {
      20             :   
      21         162 :   RTResult::RTResult(const std::vector<double> &fp):
      22         162 :     I(fp.size(), 0.0),
      23         162 :     Tb(fp.size()),
      24         162 :     _f(fp),
      25         162 :     f(_f)    
      26             :   {
      27         162 :   }
      28             : 
      29    79505305 :   const std::vector<double> &  RTResult::UpdateTb()
      30             :   {
      31  3259717505 :     for (size_t i =0 ; i< f.size() ; ++i)
      32             :     {
      33  3180212200 :       Tb[i]  = I[i] / std::pow(f[i],2)  * CSquared_On_TwoK;  ;
      34             :     }
      35    79505305 :     return Tb;
      36             :   }  
      37             : 
      38             : 
      39         162 :   SliceResult::SliceResult( const Slice & p_slice,
      40         162 :                             const std::vector<double> & f ) :
      41             :     RTResult(f),
      42         162 :     tx(f.size()),
      43         162 :     slice(p_slice)
      44             :   {
      45             : 
      46         162 :   }
      47             : 
      48    79505305 :   void SliceResult::UpdateI(const SliceResult & bckg)
      49             :   {
      50             : 
      51    79505305 :     slice.ComputeTx( f, tx);
      52             :     
      53  3259717505 :     for (size_t i =0 ; i< f.size() ; ++i)
      54             :     {
      55  6360424400 :       I[i]  = tx[i] * bckg.I[i] + 
      56  3180212200 :         BPlanck(f[i], slice.getT())  * (1-tx[i]) ;
      57             :     }
      58    79505305 :   }
      59             : 
      60          81 :   void SliceResult::UpdateI(void)
      61             :   {
      62          81 :     slice.ComputeTx( f, tx);
      63             : 
      64        3321 :     for (size_t i =0 ; i< f.size() ; ++i)
      65             :     {
      66        3240 :       I[i]  = BPlanck(f[i], slice.getT())  * (1-tx[i]) ;
      67             :     }
      68             : 
      69          81 :   }
      70             : 
      71           0 :   LayerResult::LayerResult(const Layer & p_layer,
      72           0 :                            const std::vector<double> & f ):
      73             :     RTResult(f),
      74           0 :     layer(p_layer)
      75             :   {
      76           0 :   }
      77             : 
      78           0 :   void LayerResult::UpdateI(const SliceResult & bckg)
      79             :   {
      80             :     typedef std::shared_ptr<SliceResult> sr_p;
      81             : 
      82           0 :     sr_p current( new SliceResult(bckg));
      83           0 :     for ( Layer::sliceL_t::const_iterator slice = layer.getFar();
      84           0 :           slice != layer.getEnd();
      85           0 :           ++slice)
      86             :     {
      87           0 :       sr_p newslice( new SliceResult( **slice,
      88           0 :                                       f));
      89           0 :       newslice->UpdateI( *current);
      90           0 :       current=newslice;
      91           0 :     }
      92             :     
      93             :     // Copy result
      94           0 :     I=current->getI();
      95             :     
      96           0 :   }
      97             :   
      98             : }
      99             : 
     100             : 

Generated by: LCOV version 1.16