LCOV - code coverage report
Current view: top level - calanalysis/CalAnalysis/test - tCalStats0.cc (source / functions) Hit Total Coverage
Test: ctest_coverage.info Lines: 54 54 100.0 %
Date: 2023-11-02 14:27:30 Functions: 2 2 100.0 %

          Line data    Source code
       1             : 
       2             : // -----------------------------------------------------------------------------
       3             : 
       4             : #include <cstdlib>
       5             : 
       6             : #include <math.h>
       7             : double rgauss( void );
       8             : 
       9             : #include <calanalysis/CalAnalysis/CalStats.h>
      10             : 
      11             : using namespace casacore;
      12             : using namespace casa;
      13             : 
      14             : // -----------------------------------------------------------------------------
      15             : 
      16           1 : int main( void ) {
      17             : 
      18             :   // Initialize the shape of the input cubes
      19             : 
      20           1 :   uInt uiNumPol = 2;
      21           1 :   uInt uiNumFreq = 64;
      22           1 :   uInt uiNumTime = 100;
      23             : 
      24           2 :   IPosition oShape( 3, uiNumPol, uiNumFreq, uiNumTime );
      25             : 
      26             : 
      27             :   // Initialize the input data cube (constant across frequency axis)
      28             : 
      29           2 :   Cube<Double> oData( oShape );
      30             : 
      31           3 :   for ( uInt p=0; p<uiNumPol; p++ ) {
      32         202 :     for ( uInt t=0; t<uiNumTime; t++ ) {
      33         200 :       Double dData = 10.0 * ( ((Double) rand())/((Double) RAND_MAX) - 0.5);
      34       13000 :       for ( uInt f=0; f<uiNumFreq; f++ ) {
      35       12800 :         oData.operator()(p,f,t) = dData + 0.1*rgauss();
      36             :       }
      37             :     }
      38             :   }
      39             : 
      40             : 
      41             :   // Initialize the input data error cube
      42             : 
      43           2 :   Cube<Double> oDataErr( oShape );
      44             : 
      45           3 :   for ( uInt p=0; p<uiNumPol; p++ ) {
      46         202 :     for ( uInt t=0; t<uiNumTime; t++ ) {
      47         200 :       Double dDataErr = 0.1;
      48       13000 :       for ( uInt f=0; f<uiNumFreq; f++ ) {
      49       12800 :         oDataErr.operator()(p,f,t) = dDataErr;
      50             :       }
      51             :     }
      52             :   }
      53             : 
      54             : 
      55             :   // Initialize the input flag cube
      56             : 
      57           2 :   Cube<Bool> oFlag( oShape, false );
      58             : 
      59             : 
      60             :   // Initialize the polarization (feed) abscissa
      61             : 
      62           2 :   Vector<String> oFeed( uiNumPol );
      63           1 :   oFeed[0] = "R";
      64           1 :   oFeed[1] = "L";
      65             : 
      66             : 
      67             :   // Initialize the frequency abscissa
      68             : 
      69           2 :   Vector<Double> oFreq( uiNumFreq );
      70          65 :   for ( uInt f=0; f<uiNumFreq; f++ ) oFreq[f] = f*2.0E+06 + 10.0E+09;
      71             : 
      72             : 
      73             :   // Initialize the time abscissa
      74             : 
      75           2 :   Vector<Double> oTime( uiNumTime );
      76         101 :   for ( uInt t=0; t<uiNumTime; t++ ) oTime[t] = (Double) t;
      77             : 
      78             : 
      79             :   // Initialize the user-supplied iteration axis (the polarization axis is
      80             :   // always an iteration axis, by default)
      81             : 
      82           1 :   CalStats::AXIS eAxis = CalStats::TIME;
      83             : 
      84             : 
      85             :   // Create a CalStatsReal object and get the data iterated along the
      86             :   // polarization and time axes
      87             : 
      88           2 :   CalStats oCS( oData, oDataErr, oFlag, oFeed, oFreq, oTime, eAxis );
      89             : 
      90             :   CalStats::ARG<CalStats::NONE> oArg;
      91             :   Matrix<CalStats::OUT<CalStats::NONE> >
      92           1 :       oMatrix( oCS.stats<CalStats::NONE>( oArg ) );
      93             : 
      94             : 
      95             :   // Write the data for each polarization and time axis
      96             : 
      97           3 :   for ( uInt p=0; p<uiNumPol; p++ ) {
      98         202 :     for ( uInt t=0; t<uiNumTime; t++ ) {
      99         200 :       cout << endl << flush;
     100         200 :       cout << p << ' ' << t << endl << flush;
     101         200 :       cout << oMatrix(p,t).oAxes.eAxisIterFeedID << ' '
     102         200 :            << oMatrix(p,t).oAxes.eAxisIterUserID << ' '
     103         200 :            << oMatrix(p,t).oAxes.eAxisNonIterID << ' '
     104         200 :            << endl << flush;
     105         200 :       cout << oMatrix(p,t).oAxes.sFeed << ' '
     106         200 :            << oMatrix(p,t).oAxes.dAxisIterUser << endl << flush;
     107         200 :       cout << oMatrix(p,t).oData.oAbs << endl << flush;
     108         200 :       cout << oMatrix(p,t).oData.oFlag << endl << flush;
     109             :     }
     110             :   }
     111             : 
     112             : 
     113             :   // Return 0
     114             : 
     115           1 :   return( 0 );
     116             : 
     117             : }
     118             : 
     119             : // -----------------------------------------------------------------------------
     120             : 
     121       12800 : double rgauss( void ) {
     122             : 
     123             :   static int iset=0;
     124             :   static double gset;
     125             :   double fac,r,v1,v2;
     126             : 
     127       12800 :   if ( iset == 0 ) {
     128        1806 :     do {
     129        8206 :       v1 = 2.0 * (((double) rand())/((double) RAND_MAX) - 0.5);
     130        8206 :       v2 = 2.0 * (((double) rand())/((double) RAND_MAX) - 0.5);
     131        8206 :       r = v1*v1 + v2*v2;
     132        8206 :     } while ( r >= 1.0 || r == 0.0 );
     133        6400 :     fac = sqrt( -2.0*log(r)/r );
     134        6400 :     gset = v1*fac;
     135        6400 :     iset = 1;
     136        6400 :     return( v2*fac );
     137             :   } else {
     138        6400 :     iset = 0;
     139        6400 :     return( gset );
     140             :   }
     141             : 
     142             : }

Generated by: LCOV version 1.16