LCOV - code coverage report
Current view: top level - msvis/MSVis - VisibilityIteratorImplAsync.cc (source / functions) Hit Total Coverage
Test: casa_coverage.info Lines: 0 343 0.0 %
Date: 2023-10-25 08:47:59 Functions: 0 59 0.0 %

          Line data    Source code
       1             : /*
       2             :  * VisibilityIteratorAsync.cc
       3             :  *
       4             :  *  Created on: Nov 2, 2010
       5             :  *      Author: jjacobs
       6             :  */
       7             : 
       8             : #include <msvis/MSVis/VisibilityIterator.h>
       9             : #include <msvis/MSVis/VisibilityIteratorImplAsync.h>
      10             : #include <msvis/MSVis/VisBufferAsync.h>
      11             : #include <msvis/MSVis/VisBufferAsyncWrapper.h>
      12             : #include <msvis/MSVis/VLAT.h>
      13             : #include <msvis/MSVis/AsynchronousInterface.h>
      14             : #include <stdcasa/UtilJ.h>
      15             : #include <casacore/casa/Utilities/GenSort.h>
      16             : 
      17             : #include <casacore/ms/MeasurementSets/MSColumns.h>
      18             : #include <casacore/casa/System/AipsrcValue.h>
      19             : 
      20             : #include <algorithm>
      21             : #include <cstdarg>
      22             : #include <ostream>
      23             : 
      24             : using namespace std;
      25             : 
      26             : using namespace casacore;
      27             : using namespace casa::utilj;
      28             : 
      29             : using namespace casacore;
      30             : using namespace casa::asyncio;
      31             : 
      32             : #define Log(level, ...) \
      33             :         {if (VlaData::loggingInitialized_p && level <= VlaData::logLevel_p) \
      34             :     Logger::get()->log (__VA_ARGS__);};
      35             : 
      36             : #define NotImplemented     Throw ("VisibilityIteratorReadImplAsync: Method not implemented!");
      37             : 
      38             : #define VIWIA_NotImplemented() \
      39             :         Throw ("ViWriteImplAsync --> Operation not permitted!\n" \
      40             :                "Modify VisBuffer, mark components as dirty and use VisibilityIterator::writeBack.");
      41             : 
      42             : #define ThrowIfNoVbaAttached() \
      43             :         ThrowIf (visBufferAsync_p == 0, "No VisBufferAsync attached to VI; try doing vi.origin() first.");
      44             : 
      45             : 
      46             : using namespace casacore;
      47             : namespace casa {
      48             : 
      49             : 
      50           0 : ViReadImplAsync::ViReadImplAsync (const Block<MeasurementSet> & mss,
      51             :                                   const PrefetchColumns & prefetchColumns,
      52             :                                   const Block<Int> & sortColumns,
      53             :                                   const Bool addDefaultSortCols,
      54             :                                   Double timeInterval,
      55           0 :                                   Bool writable)
      56             : : visBufferAsync_p (NULL),
      57             :   vlaData_p (NULL),
      58           0 :   vlat_p (NULL)
      59             : {
      60           0 :     construct (mss, prefetchColumns, sortColumns, addDefaultSortCols,
      61             :                timeInterval, writable);
      62           0 : }
      63             : 
      64           0 : ViReadImplAsync::ViReadImplAsync (const PrefetchColumns & prefetchColumns,
      65             :                                   const VisibilityIteratorReadImpl & other,
      66           0 :                                   Bool writable)
      67             : : visBufferAsync_p (NULL),
      68             :   vlaData_p (NULL),
      69           0 :   vlat_p (NULL)
      70             : {
      71           0 :     Block<MeasurementSet> mss (other.measurementSets_p.size());
      72             : 
      73           0 :     for (int i = 0; i < (Int) other.measurementSets_p.size(); i++){
      74           0 :         mss [i] = other.measurementSets_p [i];
      75             :     }
      76             : 
      77           0 :     construct (mss, prefetchColumns, other.sortColumns_p,
      78           0 :                other.addDefaultSort_p, other.timeInterval_p, writable);
      79             : 
      80           0 :     imwgt_p = other.imwgt_p;
      81             : 
      82             :     // Pass over to the VLAT some of the VI modifiers if they are
      83             :     // not at the default value.
      84             : 
      85           0 :     Bool needViReset = false;
      86             : 
      87           0 :     if (other.timeInterval_p != 0){
      88           0 :         setInterval (other.timeInterval_p);
      89           0 :         needViReset = true;
      90             :     }
      91             : 
      92           0 :     if (other.nRowBlocking_p != 0){
      93           0 :         setRowBlocking (other.nRowBlocking_p);
      94           0 :         needViReset = true;
      95             :     }
      96             : 
      97           0 :     if (other.msChannels_p.nGroups_p.nelements() != 0){
      98           0 :         selectChannel (other.msChannels_p.nGroups_p,
      99           0 :                        other.msChannels_p.start_p,
     100           0 :                        other.msChannels_p.width_p,
     101           0 :                        other.msChannels_p.inc_p,
     102           0 :                        other.msChannels_p.spw_p);
     103           0 :         needViReset = true;
     104             :     }
     105             : 
     106           0 :     if (needViReset){
     107           0 :         originChunks ();
     108             :     }
     109           0 : }
     110             : 
     111             : 
     112           0 : ViReadImplAsync::~ViReadImplAsync ()
     113             : {
     114           0 :     if (! vbaWrapperStack_p.empty()){
     115             :         VisBufferAsync * vba =
     116           0 :                 vbaWrapperStack_p.top()->releaseVba ();
     117           0 :         assert (vba == visBufferAsync_p);
     118             :         UnusedVariable (vba);
     119           0 :         vba = NULL; // prevent warning when in non425debug build
     120           0 :         delete visBufferAsync_p;
     121             :     }
     122           0 :     else if (visBufferAsync_p != NULL){
     123           0 :         delete visBufferAsync_p;
     124             :     }
     125             : 
     126           0 :     interface_p->terminate ();
     127           0 :     delete interface_p;
     128           0 : }
     129             : 
     130             : void
     131           0 : ViReadImplAsync::advance ()
     132             : {
     133             :     //readComplete (); // complete any pending read
     134             : 
     135           0 :     subchunk_p.incrementSubChunk ();
     136             : 
     137           0 :     fillVisBuffer ();
     138           0 : }
     139             : 
     140             : Bool
     141           0 : ViReadImplAsync::allBeamOffsetsZero () const
     142             : {
     143           0 :     ThrowIf (visBufferAsync_p == NULL, "No attached VisBufferAsync");
     144             : 
     145           0 :     return visBufferAsync_p -> getAllBeamOffsetsZero ();
     146             : }
     147             : 
     148             : const Vector<String> &
     149           0 : ViReadImplAsync::antennaMounts () const
     150             : {
     151           0 :     ThrowIf (visBufferAsync_p == NULL, "No attached VisBufferAsync");
     152             : 
     153           0 :     return visBufferAsync_p -> getAntennaMounts ();
     154             : }
     155             : 
     156             : 
     157             : void
     158           0 : ViReadImplAsync::attachVisBuffer (VisBuffer & vb0)
     159             : {
     160           0 :     VisBufferAsyncWrapper * vb = dynamic_cast<VisBufferAsyncWrapper *> (& vb0);
     161           0 :     ThrowIf (vb == NULL, "Attempt to attach other than VisBufferAsyncWrapper");
     162             : 
     163           0 :     if (! vbaWrapperStack_p.empty()){
     164           0 :         vbaWrapperStack_p.top () -> releaseVba ();
     165             :     }
     166             : 
     167           0 :     vbaWrapperStack_p.push (vb);
     168             : 
     169           0 :     if (visBufferAsync_p != NULL){
     170           0 :         vb->wrap (visBufferAsync_p);
     171             :     }
     172           0 : }
     173             : 
     174             : ViReadImplAsync::PrefetchColumns
     175           0 : ViReadImplAsync::augmentPrefetchColumns (const PrefetchColumns & prefetchColumnsBase)
     176             : {
     177             :     // Augment the list of prefetch columns with any that are implied
     178             :     // by the others.  N.B., be wary of reordering these.
     179             : 
     180           0 :     PrefetchColumns prefetchColumns = prefetchColumnsBase;
     181             : 
     182           0 :     if (contains (VisBufferComponents::Direction1, prefetchColumns)){
     183           0 :         prefetchColumns.insert (VisBufferComponents::AllBeamOffsetsZero);
     184           0 :         prefetchColumns.insert (VisBufferComponents::AntennaMounts);
     185           0 :         prefetchColumns.insert (VisBufferComponents::Feed1_pa);
     186           0 :         prefetchColumns.erase (VisBufferComponents::Direction1);
     187             :     }
     188             : 
     189           0 :     if (contains (VisBufferComponents::Direction2, prefetchColumns)){
     190           0 :         prefetchColumns.insert (VisBufferComponents::AllBeamOffsetsZero);
     191           0 :         prefetchColumns.insert (VisBufferComponents::AntennaMounts);
     192           0 :         prefetchColumns.insert (VisBufferComponents::Feed2_pa);
     193           0 :         prefetchColumns.erase (VisBufferComponents::Direction2);
     194             :     }
     195             : 
     196           0 :     if (contains (VisBufferComponents::Feed1_pa, prefetchColumns)){
     197           0 :         prefetchColumns.insert (VisBufferComponents::Ant1);
     198           0 :         prefetchColumns.insert (VisBufferComponents::Feed1);
     199           0 :         prefetchColumns.insert (VisBufferComponents::PhaseCenter);
     200           0 :         prefetchColumns.insert (VisBufferComponents::ReceptorAngles);
     201           0 :         prefetchColumns.insert (VisBufferComponents::Time);
     202           0 :         prefetchColumns.insert (VisBufferComponents::TimeInterval);
     203           0 :         prefetchColumns.erase (VisBufferComponents::Feed1_pa);
     204             :     }
     205             : 
     206           0 :     if (contains (VisBufferComponents::Feed2_pa, prefetchColumns)){
     207           0 :         prefetchColumns.insert (VisBufferComponents::Ant2);
     208           0 :         prefetchColumns.insert (VisBufferComponents::Feed2);
     209           0 :         prefetchColumns.insert (VisBufferComponents::PhaseCenter);
     210           0 :         prefetchColumns.insert (VisBufferComponents::ReceptorAngles);
     211           0 :         prefetchColumns.insert (VisBufferComponents::Time);
     212           0 :         prefetchColumns.insert (VisBufferComponents::TimeInterval);
     213           0 :         prefetchColumns.erase (VisBufferComponents::Feed2_pa);
     214             :     }
     215             : 
     216           0 :     return prefetchColumns;
     217             : }
     218             : 
     219             : const Cube<RigidVector<Double, 2> >&
     220           0 : ViReadImplAsync::getBeamOffsets () const
     221             : {
     222           0 :     ThrowIf (visBufferAsync_p == NULL, "No attached VisBufferAsync");
     223             : 
     224           0 :     return visBufferAsync_p -> getBeamOffsets ();
     225             : }
     226             : 
     227             : 
     228             : 
     229             : VisibilityIteratorReadImpl *
     230           0 : ViReadImplAsync::clone () const
     231             : {
     232           0 :     Throw ("ViReadImplAsync: cloning not permitted!!!");
     233             : }
     234             : 
     235             : void
     236           0 : ViReadImplAsync::construct(const Block<MeasurementSet> & mss,
     237             :                            const PrefetchColumns & prefetchColumns,
     238             :                            const Block<Int> & sortColumns,
     239             :                            const Bool addDefaultSortCols,
     240             :                            Double timeInterval,
     241             :                            Bool writable)
     242             : {
     243           0 :     AsynchronousInterface::initializeLogging();
     244             : 
     245           0 :     casa::async::Logger::get()->registerName ("Main");
     246             : 
     247           0 :     visBufferAsync_p = NULL;
     248             : 
     249           0 :     for (uint i = 0; i < mss.size(); i++){
     250           0 :         measurementSets_p.push_back (mss [i]);
     251             :     }
     252             : 
     253           0 :     msId_p = -1;
     254             : 
     255             :     // Create and initialize the Asynchronous Interface
     256             : 
     257           0 :     Int nReadAheadBuffers = getDefaultNBuffers ();
     258             : 
     259           0 :     interface_p = new AsynchronousInterface (nReadAheadBuffers);
     260           0 :     interface_p->initialize();
     261             : 
     262           0 :     vlaData_p = interface_p->getVlaData ();
     263           0 :     vlat_p = interface_p->getVlat ();
     264             : 
     265             :     // Augment the list of prefetch columns with any that are implied
     266             :     // by the others.  N.B., be wary of reordering these.
     267             : 
     268           0 :     prefetchColumns_p = augmentPrefetchColumns (prefetchColumns);
     269             : 
     270             :     // Get the VLAT going
     271             : 
     272           0 :     vlat_p->setPrefetchColumns (prefetchColumns_p);
     273             : 
     274             :     // If this is a writable VI then let the write implementation handle the
     275             :     // initialization of the VLAT.
     276             : 
     277           0 :     vlat_p->initialize (mss, sortColumns, addDefaultSortCols, timeInterval, writable);
     278           0 :     vlat_p->startThread ();
     279           0 : }
     280             : 
     281             : void
     282           0 : ViReadImplAsync::detachVisBuffer (VisBuffer & vb0)
     283             : {
     284           0 :     VisBufferAsyncWrapper * vb = dynamic_cast<VisBufferAsyncWrapper *> (& vb0);
     285             : 
     286           0 :     ThrowIf (vb == NULL, "Attempt to detach other than a VisBufferAsyncWrapper");
     287             : 
     288           0 :     if (vb == vbaWrapperStack_p.top()){
     289             : 
     290             :         // Get rid of the old buffer
     291             : 
     292           0 :         VisBufferAsync * vba = vb->releaseVba ();
     293           0 :         Assert (vba == visBufferAsync_p);
     294             :         UnusedVariable (vba); // prevent release build warning
     295             : 
     296           0 :         vbaWrapperStack_p.pop ();
     297             : 
     298             :         // If there is still a VB attached either fill it with the
     299             :         // current values for the VI position or clear it.
     300             : 
     301           0 :         if (! vbaWrapperStack_p.empty()){
     302             : 
     303           0 :             if (visBufferAsync_p != NULL){
     304           0 :                 vbaWrapperStack_p.top() -> wrap (visBufferAsync_p);
     305             :             }
     306             :         }
     307             : 
     308             :     } else {
     309           0 :         Throw ("ViReadImplAsync::detachVisBuffer: VisBufferAsync not attached ");
     310             :     }
     311           0 : }
     312             : 
     313             : void
     314           0 : ViReadImplAsync::dumpPrefetchColumns () const
     315             : {
     316           0 :     int i = 0;
     317           0 :     for (PrefetchColumns::const_iterator c = prefetchColumns_p.begin();
     318           0 :             c != prefetchColumns_p.end();
     319           0 :             c ++){
     320             : 
     321           0 :         cerr << PrefetchColumns::columnName (*c) << ", ";
     322           0 :         i ++;
     323           0 :         if (i == 10){
     324           0 :             cerr << endl;
     325           0 :             i = 0;
     326             :         }
     327             : 
     328             :     }
     329             : 
     330           0 :     if (i != 0)
     331           0 :         cerr << endl;
     332             : 
     333           0 : }
     334             : 
     335             : void
     336           0 : ViReadImplAsync::fillVisBuffer()
     337             : {
     338             :     // Get the next buffer from the lookahead buffer ring.
     339             :     // This could block if the next buffer is not ready.
     340             :     // Before doing the fill check to see that there's more data.
     341             : 
     342           0 :     if (more()){
     343             : 
     344           0 :         readComplete ();
     345             : 
     346           0 :         visBufferAsync_p = vlaData_p->readStart (subchunk_p);
     347             : 
     348           0 :         Assert (visBufferAsync_p != NULL);
     349             : 
     350           0 :         msId_p = visBufferAsync_p->msId ();
     351             : 
     352             :         // If a VisBufferAsync is attached, then copy the prefetched VisBuffer into it.
     353             : 
     354           0 :         if (! vbaWrapperStack_p.empty ()){
     355             : 
     356           0 :             vbaWrapperStack_p.top() -> wrap (visBufferAsync_p);
     357             :         }
     358             :     }
     359           0 : }
     360             : 
     361             : //Vector<MDirection>
     362             : //ViReadImplAsync::fillAzel(Double time) const
     363             : //{
     364             : //    NotImplemented;
     365             : //}
     366             : 
     367             : 
     368             : 
     369             : 
     370             : //void
     371             : //ViReadImplAsync::fillVisBuffer ()
     372             : //{
     373             : //    vlaDatum_p = impl_p->getVlaData()->getDatum (subchunk_p);
     374             : //
     375             : //    ThrowIf (datum == NULL, format("Failed to get datum for subchunk (%d, %d)", subchunk_p));
     376             : //
     377             : //    if (visBuffer_p != NULL){
     378             : //        visBuffer_p->setRealBuffer (vlaDatum_p->getVisBuffer());
     379             : //    }
     380             : //}
     381             : 
     382             : void
     383           0 : ViReadImplAsync::getChannelSelection(Block< Vector<Int> >& blockNGroup,
     384             :                                      Block< Vector<Int> >& blockStart,
     385             :                                      Block< Vector<Int> >& blockWidth,
     386             :                                      Block< Vector<Int> >& blockIncr,
     387             :                                      Block< Vector<Int> >& blockSpw){
     388             : 
     389           0 :     asyncio::ChannelSelection channelSelection = vlaData_p->getChannelSelection ();
     390           0 :     channelSelection.get (blockNGroup, blockStart, blockWidth, blockIncr, blockSpw);
     391           0 : }
     392             : 
     393             : int
     394           0 : ViReadImplAsync::getDefaultNBuffers ()
     395             : {
     396             :     int nBuffers;
     397           0 :     casacore::AipsrcValue<Int>::find (nBuffers, ROVisibilityIterator::getAsyncRcBase () + ".nBuffers", 2);
     398             : 
     399           0 :     return nBuffers;
     400             : }
     401             : 
     402             : MEpoch
     403           0 : ViReadImplAsync::getEpoch () const
     404             : {
     405           0 :     ThrowIf (visBufferAsync_p == NULL, "No attached VisBufferAsync");
     406             : 
     407           0 :     return visBufferAsync_p -> mEpoch_p;
     408             : }
     409             : 
     410             : //ViReadImplAsync::PrefetchColumns
     411             : //ViReadImplAsync::getPrefetchColumns () const
     412             : //{
     413             : //    return prefetchColumns_p;
     414             : //}
     415             : const MeasurementSet &
     416           0 : ViReadImplAsync::getMs() const
     417             : {
     418           0 :     ThrowIfNoVbaAttached ();
     419             : 
     420           0 :     return visBufferAsync_p->getMs ();
     421             : }
     422             : 
     423             : 
     424             : VisBuffer *
     425           0 : ViReadImplAsync::getVisBuffer ()
     426             : {
     427             :     // Returns the currently attached VisBufferAsync or NULL if none attached
     428             : 
     429           0 :     VisBuffer * vb = (! vbaWrapperStack_p.empty()) ? vbaWrapperStack_p.top() : NULL;
     430           0 :     return vb;
     431             : }
     432             : 
     433             : //void
     434             : //ViReadImplAsync::linkWithRovi (VisibilityIteratorReadImpl * rovi)
     435             : //{
     436             : //    linkedVisibilityIterator_p = rovi;
     437             : //}
     438             : 
     439             : 
     440             : Bool
     441           0 : ViReadImplAsync::more () const
     442             : {
     443             :     // Returns true if the lookahead data structure has the next subchunk.
     444             : 
     445           0 :     Bool b = vlaData_p->isValidSubChunk (subchunk_p);
     446             : 
     447           0 :     return b;
     448             : }
     449             : 
     450             : Bool
     451           0 : ViReadImplAsync::moreChunks () const
     452             : {
     453             :     // Returns true if the looahead data structure has the first subchunk of the
     454             :     // next chunk.
     455             : 
     456           0 :     Bool b = vlaData_p->isValidChunk (subchunk_p.chunk());
     457             : 
     458           0 :     return b;
     459             : }
     460             : 
     461             : const MSColumns &
     462           0 : ViReadImplAsync::msColumns() const
     463             : {
     464           0 :     ThrowIfNoVbaAttached ();
     465             : 
     466           0 :     return visBufferAsync_p->msColumns();
     467             : }
     468             : 
     469             : 
     470             : Int
     471           0 : ViReadImplAsync::msId() const
     472             : {
     473           0 :     ThrowIf (msId_p < 0, "MS ID value not currently known.");
     474             : 
     475           0 :     return msId_p;
     476             : }
     477             : 
     478             : 
     479             : ViReadImplAsync &
     480           0 : ViReadImplAsync::nextChunk ()
     481             : {
     482             :     // Terminates the current read and advances the state of this
     483             :     // object to expect to access the first subchunk of the next
     484             :     // chunk
     485             : 
     486           0 :     subchunk_p.incrementChunk ();
     487             : 
     488           0 :     if (moreChunks()){
     489             : 
     490           0 :         readComplete (); // complete any pending read
     491             : 
     492             :     }
     493             : 
     494           0 :     return * this;
     495             : }
     496             : 
     497             : Int
     498           0 : ViReadImplAsync::nRowChunk() const
     499             : {
     500           0 :     ThrowIfNoVbaAttached ();
     501             : 
     502           0 :     return visBufferAsync_p->nRowChunk ();
     503             : }
     504             : 
     505             : 
     506             : Int
     507           0 : ViReadImplAsync::numberSpw()
     508             : {
     509           0 :     ThrowIfNoVbaAttached ();
     510             : 
     511           0 :     return visBufferAsync_p->getNSpw ();
     512             : }
     513             : 
     514             : 
     515             : void
     516           0 : ViReadImplAsync::origin ()
     517             : {
     518             :     // Terminates the current read and
     519             : 
     520           0 :     readComplete (); // complete any pending read
     521             : 
     522           0 :     subchunk_p.resetSubChunk();
     523             : 
     524           0 :     fillVisBuffer ();
     525             : 
     526           0 :     updateMsd ();
     527           0 : }
     528             : 
     529             : void
     530           0 : ViReadImplAsync::originChunks ()
     531             : {
     532           0 :     readComplete (); // complete any pending read
     533             : 
     534           0 :     subchunk_p.resetToOrigin ();
     535             : 
     536           0 :     interface_p->requestViReset ();
     537           0 : }
     538             : 
     539             : void
     540           0 : ViReadImplAsync::readComplete()
     541             : {
     542           0 :     if (visBufferAsync_p != NULL){
     543             : 
     544             :         // A buffer in the buffer ring was in use: clean up
     545             : 
     546           0 :         if (! vbaWrapperStack_p.empty()){
     547             : 
     548             :             // Break connection between our VisBufferAsync and
     549             :             // the shared data
     550             : 
     551           0 :             vbaWrapperStack_p.top()->releaseVba ();
     552             :         }
     553             : 
     554             :         // Clear the pointer to the shared buffer to indicate
     555             :         // internally that the read is complete
     556             : 
     557           0 :         delete visBufferAsync_p;
     558           0 :         visBufferAsync_p = NULL;
     559             : 
     560             :         // Inform the buffer ring that the read is complete.
     561             : 
     562           0 :         vlaData_p->readComplete (subchunk_p);
     563             :     }
     564           0 : }
     565             : 
     566             : void
     567           0 : ViReadImplAsync::updateMsd ()
     568             : {
     569           0 :     ThrowIf (visBufferAsync_p == NULL, "No attached VisBufferAsync");
     570             : 
     571           0 :     msd_p.setAntennas (visBufferAsync_p->msColumns().antenna());
     572             : 
     573           0 :     MDirection phaseCenter = visBufferAsync_p -> getPhaseCenter();
     574           0 :     msd_p.setFieldCenter (phaseCenter);
     575           0 : }
     576             : 
     577             : 
     578             : const Cube<Double>&
     579           0 : ViReadImplAsync::receptorAngles() const
     580             : {
     581           0 :     ThrowIf (visBufferAsync_p == NULL, "No attached VisBufferAsync");
     582             : 
     583           0 :     return visBufferAsync_p -> getReceptorAngles ();
     584             : }
     585             : 
     586             : 
     587             : void
     588           0 : ViReadImplAsync::saveMss (const Block<MeasurementSet> & mss)
     589             : {
     590           0 :     measurementSets_p.clear();
     591           0 :     for (uint i = 0; i < mss.size(); i++){
     592           0 :         measurementSets_p.push_back (mss [i]);
     593             :     }
     594           0 : }
     595             : 
     596             : void
     597           0 : ViReadImplAsync::saveMss (const MeasurementSet & ms)
     598             : {
     599           0 :     measurementSets_p.clear();
     600           0 :     measurementSets_p.push_back (ms);
     601           0 : }
     602             : 
     603             : VisibilityIteratorReadImpl&
     604           0 : ViReadImplAsync::selectVelocity (Int nChan,
     605             :                                  const MVRadialVelocity& vStart,
     606             :                                  const MVRadialVelocity& vInc,
     607             :                                  MRadialVelocity::Types rvType,
     608             :                                  MDoppler::Types dType,
     609             :                                  Bool precise)
     610             : {
     611           0 :     SelectVelocityModifier * svm = new SelectVelocityModifier (nChan, vStart, vInc, rvType, dType, precise);
     612             : 
     613           0 :     interface_p->addModifier (svm); // ownership is transferred by this call
     614             : 
     615           0 :     originChunks ();
     616             : 
     617           0 :     return * this;
     618             : }
     619             : 
     620             : VisibilityIteratorReadImpl&
     621           0 : ViReadImplAsync::selectChannel(Int nGroup,
     622             :                                Int start,
     623             :                                Int width,
     624             :                                Int increment,
     625             :                                Int spectralWindow)
     626             : {
     627           0 :     SelectChannelModifier * scm = new SelectChannelModifier (nGroup, start, width, increment, spectralWindow);
     628             : 
     629           0 :     interface_p->addModifier (scm);
     630             :     // ownership is transferred by this call
     631             : 
     632           0 :     return * this;
     633             : }
     634             : 
     635             : VisibilityIteratorReadImpl&
     636           0 : ViReadImplAsync::selectChannel(const Block< Vector<Int> >& blockNGroup,
     637             :                                const Block< Vector<Int> >& blockStart,
     638             :                                const Block< Vector<Int> >& blockWidth,
     639             :                                const Block< Vector<Int> >& blockIncr,
     640             :                                const Block< Vector<Int> >& blockSpw)
     641             : {
     642             :     SelectChannelModifier * scm = new SelectChannelModifier (blockNGroup, blockStart, blockWidth,
     643           0 :                                                              blockIncr, blockSpw);
     644             : 
     645           0 :     interface_p->addModifier (scm);
     646             :     // ownership is transferred by this call
     647             : 
     648           0 :     msChannels_p.nGroups_p = blockNGroup;
     649           0 :     msChannels_p.start_p = blockStart;
     650           0 :     msChannels_p.width_p = blockWidth;
     651           0 :     msChannels_p.inc_p = blockIncr;
     652           0 :     msChannels_p.spw_p = blockSpw;
     653             : 
     654           0 :     return * this;
     655             : }
     656             : 
     657             : void
     658           0 : ViReadImplAsync::setInterval (Double timeInterval)
     659             : {
     660           0 :     SetIntervalModifier * sim = new SetIntervalModifier (timeInterval);
     661             : 
     662           0 :     interface_p->addModifier (sim);
     663           0 : }
     664             : 
     665             : 
     666             : void
     667           0 : ViReadImplAsync::setRowBlocking(Int nRow)
     668             : {
     669           0 :     SetRowBlockingModifier * srbm = new SetRowBlockingModifier (nRow);
     670             : 
     671           0 :     interface_p->addModifier (srbm);
     672           0 : }
     673             : 
     674             : //void
     675             : //ViReadImplAsync::startVlat ()
     676             : //{
     677             : //    vlat_p->startThread ();
     678             : //}
     679             : 
     680             : namespace asyncio {
     681             : 
     682             : PrefetchColumns
     683           0 : PrefetchColumns::operator+ (const PrefetchColumns & other)
     684             : {
     685             :     // Form and return the union
     686             : 
     687           0 :             PrefetchColumns result;
     688           0 :     result.insert (begin(), end());
     689             : 
     690           0 :     for (const_iterator o = other.begin(); o != other.end(); o++){
     691             : 
     692           0 :         result.insert (* o);
     693             :     }
     694             : 
     695           0 :     return result;
     696             : }
     697             : 
     698             : } // end namespace asyncio
     699             : 
     700             : //void
     701             : //ViReadImplAsync::setPrefetchColumns (const PrefetchColumns & columns) const
     702             : //{
     703             : //
     704             : //}
     705             : 
     706             : 
     707             : //VisibilityIteratorReadImpl&
     708             : //ViReadImplAsync::selectChannel(Int nGroup=1,
     709             : //                                        Int start=0,
     710             : //                                        Int width=0,
     711             : //                                        Int increment=1,
     712             : //                                        Int spectralWindow=-1)
     713             : //{
     714             : //    VisibilityIteratorReadImpl & rovi = VisibilityIterator::selectChannel (nGroup, start, width, increment, spectralWindow);
     715             : //
     716             : //    ThrowIf (visBuffer_p == NULL, "No VisBufferAsync attached");
     717             : //
     718             : //    visBuffer_p->setBlockSpw (blockSpw_p);
     719             : //
     720             : //    return rovi;
     721             : //}
     722             : 
     723             : //VisibilityIteratorReadImpl&
     724             : //ViReadImplAsync::selectChannel(Block< Vector<Int> >& blockNGroup,
     725             : //                                        Block< Vector<Int> >& blockStart,
     726             : //                                        Block< Vector<Int> >& blockWidth,
     727             : //                                        Block< Vector<Int> >& blockIncr,
     728             : //                                        Block< Vector<Int> >& blockSpw)
     729             : //{
     730             : //    VisibilityIteratorReadImpl & rovi = VisibilityIterator::selectChannel (blockNGroup, blockStart, blockWidth, blockIncr, blockSpw);
     731             : //
     732             : //    ThrowIf (visBuffer_p == NULL, "No VisBufferAsync attached");
     733             : //
     734             : //    visBuffer_p->setBlockSpw (blockSpw_p);
     735             : //
     736             : //    return rovi;
     737             : //}
     738             : 
     739           0 : ViWriteImplAsync::ViWriteImplAsync (VisibilityIterator * vi)
     740           0 : : VisibilityIteratorWriteImpl (vi)
     741             : {
     742           0 : }
     743             : 
     744             : //ViWriteImplAsync::ViWriteImplAsync (VisibilityIterator * vi)
     745             : // : VisibilityIteratorWriteImpl (vi)
     746             : //{
     747             : //}
     748             : 
     749           0 : ViWriteImplAsync::ViWriteImplAsync (const PrefetchColumns & /*prefetchColumns*/,
     750             :                                     const VisibilityIteratorWriteImpl & /*other*/,
     751           0 :                                     VisibilityIterator * vi)
     752           0 : : VisibilityIteratorWriteImpl (vi)
     753           0 : {}
     754             : 
     755             : 
     756           0 : ViWriteImplAsync::~ViWriteImplAsync ()
     757           0 : {}
     758             : 
     759             : VisibilityIteratorWriteImpl *
     760           0 : ViWriteImplAsync::clone () const
     761             : {
     762           0 :     Throw ("ViWriteImplAsync: cloning not permitted!!!");
     763             : }
     764             : 
     765             : ViReadImplAsync *
     766           0 : ViWriteImplAsync::getReadImpl()
     767             : {
     768           0 :     return dynamic_cast <ViReadImplAsync *> (VisibilityIteratorWriteImpl::getReadImpl());
     769             : }
     770             : 
     771             : void
     772           0 : ViWriteImplAsync::putModel(const RecordInterface& rec, Bool iscomponentlist, Bool incremental)
     773             : {
     774             : //visBufferAsync_p;
     775             :     //Throw ("ViWriteImplAsync::putModel not implemented!!!");
     776             : 
     777           0 :   Vector<Int> fields = getReadImpl()->msColumns().fieldId().getColumn();
     778           0 :   const Int option = Sort::HeapSort | Sort::NoDuplicates;
     779           0 :   const Sort::Order order = Sort::Ascending;
     780             : 
     781           0 :   Int nfields = GenSort<Int>::sort (fields, order, option);
     782             : 
     783             :   // Make sure  we have the right size
     784             : 
     785           0 :   fields.resize(nfields, true);
     786           0 :   Int msid = getReadImpl()->msId();
     787             : 
     788           0 :   Vector<Int> spws =  getReadImpl()->msChannels_p.spw_p[msid];
     789           0 :   Vector<Int> starts = getReadImpl()->msChannels_p.start_p[msid];
     790           0 :   Vector<Int> nchan = getReadImpl()->msChannels_p.width_p[msid];
     791           0 :   Vector<Int> incr = getReadImpl()->msChannels_p.inc_p[msid];
     792             : 
     793           0 :   CountedPtr<VisModelDataI> visModelData = VisModelDataI::create();
     794             : 
     795           0 :   visModelData->putModelI (getReadImpl()->getMs (), rec, fields, spws, starts, nchan, incr,
     796           0 :                            iscomponentlist, incremental);
     797             : 
     798           0 : }
     799             : 
     800             : 
     801             : 
     802             : void
     803           0 : ViWriteImplAsync::setFlag(const Matrix<Bool>& flag)
     804             : {
     805           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     806           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     807           0 :     SubChunkPair subchunk = getReadImpl()->getSubchunkId ();
     808             : 
     809           0 :     writeQueue.enqueue (createWriteData (subchunk, flag, & VisibilityIterator::setFlag));
     810           0 : }
     811             : 
     812             : void
     813           0 : ViWriteImplAsync::setFlag(const Cube<Bool>& flag)
     814             : {
     815           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     816           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     817             : 
     818           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     819             :                                          flag,
     820             :                                          & VisibilityIterator::setFlag));
     821           0 : }
     822             : 
     823             : void
     824           0 : ViWriteImplAsync::setFlagCategory (const Array<Bool> & flagCategory)
     825             : {
     826           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     827           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     828             : 
     829           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     830             :                                          flagCategory,
     831             :                                          & VisibilityIterator::setFlagCategory));
     832           0 : }
     833             : 
     834             : 
     835             : void
     836           0 : ViWriteImplAsync::setFlagRow(const Vector<Bool>& rowflags)
     837             : {
     838           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     839           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     840             : 
     841           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     842             :                                          rowflags,
     843             :                                          & VisibilityIterator::setFlagRow));
     844           0 : }
     845             : 
     846             : void
     847           0 : ViWriteImplAsync::setVis(const Matrix<CStokesVector>& vis, DataColumn whichOne)
     848             : {
     849           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     850           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     851             : 
     852           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     853             :                                          vis,
     854             :                                          whichOne,
     855             :                                          & VisibilityIterator::setVis));
     856           0 : }
     857             : 
     858             : void
     859           0 : ViWriteImplAsync::setVis(const Cube<Complex>& vis, DataColumn whichOne)
     860             : {
     861           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     862           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     863             : 
     864           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     865             :                                          vis,
     866             :                                          whichOne,
     867             :                                          & VisibilityIterator::setVis));
     868           0 : }
     869             : 
     870             : void
     871           0 : ViWriteImplAsync::setVisAndFlag(const Cube<Complex>& vis, const Cube<Bool>& flag,
     872             :                                 DataColumn whichOne)
     873             : {
     874           0 :     setVis (vis, whichOne);
     875           0 :     setFlag (flag);
     876           0 : }
     877             : 
     878             : void
     879           0 : ViWriteImplAsync::setWeight(const Vector<Float>& wt)
     880             : {
     881           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     882           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     883           0 :     SubChunkPair subchunk = getReadImpl()->getSubchunkId ();
     884             : 
     885           0 :     writeQueue.enqueue (createWriteData (subchunk, wt, & VisibilityIterator::setWeight));
     886           0 : }
     887             : 
     888             : void
     889           0 : ViWriteImplAsync::setWeightMat(const Matrix<Float>& wtmat)
     890             : {
     891           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     892           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     893             : 
     894           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     895             :                                          wtmat,
     896             :                                          & VisibilityIterator::setWeightMat));
     897           0 : }
     898             : 
     899             : void
     900           0 : ViWriteImplAsync::setWeightSpectrum(const Cube<Float>& wtsp)
     901             : {
     902           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     903           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     904             : 
     905           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     906             :                                          wtsp,
     907             :                                          & VisibilityIterator::setWeightSpectrum));
     908           0 : }
     909             : 
     910             : void
     911           0 : ViWriteImplAsync::setSigma(const Vector<Float>& sig)
     912             : {
     913           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     914           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     915             : 
     916           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     917             :                                          sig,
     918             :                                          & VisibilityIterator::setSigma));
     919           0 : }
     920             : 
     921             : void
     922           0 : ViWriteImplAsync::setSigmaMat(const Matrix<Float>& sigmat)
     923             : {
     924           0 :     AsynchronousInterface * interface = getReadImpl()->interface_p;
     925           0 :     WriteQueue & writeQueue = interface->getWriteQueue();
     926             : 
     927           0 :     writeQueue.enqueue (createWriteData (getReadImpl()->getSubchunkId (),
     928             :                                          sigmat,
     929             :                                          & VisibilityIterator::setSigmaMat));
     930           0 : }
     931             : 
     932             : using namespace casacore;
     933             : } // end namespace casa

Generated by: LCOV version 1.16