Line data Source code
1 : /** 2 : \file partitionsum.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 partitionsum.cc 2023 8 : 9 : */ 10 : 11 : #include "partitionsum.h" 12 : 13 : namespace LibAIR2 { 14 : 15 0 : PartitionTable::PartitionTable(casacore::Matrix<double>* raw): 16 0 : raw(raw) 17 : { 18 0 : } 19 : 20 0 : size_t PartitionTable::findrow(double T) const 21 : { 22 0 : const size_t nrows= raw->shape()[0]; 23 : 24 0 : size_t rlow = 0; 25 0 : size_t rhigh= nrows; 26 : 27 0 : while ( rhigh > rlow+1 ) 28 : { 29 0 : size_t rmid = (rlow+rhigh)/2; 30 : 31 0 : if ( (*raw)(rmid,0) > T ) 32 0 : rhigh=rmid; 33 : else 34 0 : rlow=rmid; 35 : 36 : } ; 37 0 : return rlow; 38 : 39 : } 40 : 41 0 : double PartitionTable::eval(double T, size_t i) const 42 : { 43 0 : const size_t rlow = findrow(T); 44 0 : const double delta = ( (*raw)(rlow+1, 0) - T) / ( (*raw)(rlow+1, 0) - (*raw)(rlow, 0) ); 45 : 46 0 : return delta* (*raw)(rlow, i) + (1.0-delta)* (*raw)(rlow+1, i); 47 : 48 : } 49 : 50 : 51 : 52 : } 53 : 54 :