LCOV - code coverage report
Current view: top level - air_casawvr/src/apps - segmentation.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 0 50 0.0 %
Date: 2024-10-12 00:35:29 Functions: 0 4 0.0 %

          Line data    Source code
       1             : /**
       2             :    Bojan Nikolic <b.nikolic@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk>
       3             :    Initial version March 2010.
       4             :    Maintained by ESO since 2013.
       5             : 
       6             :    This file is part of LibAIR and is licensed under GNU Public
       7             :    License Version 2
       8             : 
       9             :    \file segmentation.cpp
      10             :    Renamed segmentation.cc 2023
      11             : 
      12             : */
      13             : 
      14             : #include "segmentation.h"
      15             : 
      16             : namespace LibAIR2 {
      17             : 
      18           0 :   void fieldSegments(const std::vector<double> &time,
      19             :                      const std::vector<int> &fieldID,
      20             :                      std::vector<std::pair<double, double> > &res)
      21             :   {
      22           0 :     res.clear();
      23           0 :     std::pair<double, double> cp;
      24           0 :     cp.first=time[0];
      25           0 :     int cf=fieldID[0];
      26           0 :     for(size_t i=1; i<fieldID.size(); ++i)
      27             :     {
      28           0 :       if (fieldID[i]!=cf)
      29             :       {
      30           0 :         cp.second=time[i-1];
      31           0 :         res.push_back(cp);
      32           0 :         cp.first=time[i];
      33           0 :         cf=fieldID[i];
      34             :       }
      35             :     }
      36           0 :     cp.second=time[fieldID.size()-1];
      37           0 :     res.push_back(cp);
      38           0 :   }
      39             : 
      40           0 :   bool areTied(const std::vector<std::set<size_t> > &tied,
      41             :                size_t i,
      42             :                size_t j)
      43             :   {
      44           0 :     for(size_t k=0; k<tied.size(); ++k)
      45             :     {
      46           0 :       if (tied[k].count(i) && tied[k].count(j))
      47             :       {
      48             :         // i and j are in the same set, therefore not a transition
      49           0 :         return true;
      50             :       }
      51             :     }
      52           0 :     return false;
      53             :   }
      54           0 :   void fieldSegmentsTied(const std::vector<double> &time,
      55             :                          const std::vector<int> &fieldID,
      56             :                          const std::vector<std::set<size_t> > &tied,
      57             :                          std::vector<std::pair<double, double> > &res)
      58             :   {
      59           0 :     res.clear();
      60           0 :     std::pair<double, double> cp;
      61           0 :     cp.first=time[0];
      62           0 :     int cf=fieldID[0];
      63           0 :     for(size_t i=1; i<fieldID.size(); ++i)
      64             :     {
      65           0 :       if (fieldID[i]!=cf)
      66             :       {
      67           0 :         if (not areTied(tied, fieldID[i], cf))
      68             :         {
      69           0 :           cp.second=time[i-1];
      70           0 :           res.push_back(cp);
      71           0 :           cp.first=time[i];
      72             :         }
      73           0 :         cf=fieldID[i];
      74             :       }
      75             :     }
      76           0 :     cp.second=time[fieldID.size()-1];
      77           0 :     res.push_back(cp);
      78           0 :   }
      79             : 
      80           0 :   void fieldTimes(const std::vector<double> &time,
      81             :                   const std::vector<int> &fieldID,
      82             :                   const std::vector<size_t> &spw,
      83             :                   const std::set<size_t>  &fieldselect,
      84             :                   size_t spwselect,
      85             :                   std::vector<std::pair<double, double> > &res)
      86             :   {
      87           0 :     res.resize(0);
      88           0 :     size_t b=0;
      89           0 :     size_t l=0;
      90           0 :     bool infield=false;
      91           0 :     for (size_t i=0; i<time.size(); ++i)
      92             :     {
      93             :       // Skip all rows which are not in our SPW
      94           0 :       if (spw[i] !=spwselect)
      95           0 :         continue;
      96             : 
      97           0 :       if ( (not infield) && fieldselect.count(fieldID[i]))
      98             :       {
      99           0 :         infield=true;
     100           0 :         b=i;
     101             :       }
     102             :       
     103           0 :       if (infield && ( (not fieldselect.count(fieldID[i]))  || (i==time.size()-1)))
     104             :       {
     105           0 :         infield=false;
     106           0 :         res.push_back(std::pair<double, double>(time[b], time[l]));
     107             :       }
     108             :       // Keep the time of last iteration
     109           0 :       l=i;
     110             :     }
     111           0 :   }
     112             : 
     113             : }

Generated by: LCOV version 1.16