Skip to content
Snippets Groups Projects
Select Git revision
  • b5ba5c688d2fe9ec7896c6aadde3988855aab10b
  • master default protected
  • L2SS-1914-fix_job_dispatch
  • TMSS-3170
  • TMSS-3167
  • TMSS-3161
  • TMSS-3158-Front-End-Only-Allow-Changing-Again
  • TMSS-3133
  • TMSS-3319-Fix-Templates
  • test-fix-deploy
  • TMSS-3134
  • TMSS-2872
  • defer-state
  • add-custom-monitoring-points
  • TMSS-3101-Front-End-Only
  • TMSS-984-choices
  • SDC-1400-Front-End-Only
  • TMSS-3079-PII
  • TMSS-2936
  • check-for-max-244-subbands
  • TMSS-2927---Front-End-Only-PXII
  • Before-Remove-TMSS
  • LOFAR-Release-4_4_318 protected
  • LOFAR-Release-4_4_317 protected
  • LOFAR-Release-4_4_316 protected
  • LOFAR-Release-4_4_315 protected
  • LOFAR-Release-4_4_314 protected
  • LOFAR-Release-4_4_313 protected
  • LOFAR-Release-4_4_312 protected
  • LOFAR-Release-4_4_311 protected
  • LOFAR-Release-4_4_310 protected
  • LOFAR-Release-4_4_309 protected
  • LOFAR-Release-4_4_308 protected
  • LOFAR-Release-4_4_307 protected
  • LOFAR-Release-4_4_306 protected
  • LOFAR-Release-4_4_304 protected
  • LOFAR-Release-4_4_303 protected
  • LOFAR-Release-4_4_302 protected
  • LOFAR-Release-4_4_301 protected
  • LOFAR-Release-4_4_300 protected
  • LOFAR-Release-4_4_299 protected
41 results

raestimatorservice

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ITRFDirection.cc 3.55 KiB
    // ITRFDirection.cc: Functor that maps time to an ITRF direction.
    //
    // Copyright (C) 2013
    // ASTRON (Netherlands Institute for Radio Astronomy)
    // P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
    //
    // This file is part of the LOFAR software suite.
    // The LOFAR software suite is free software: you can redistribute it and/or
    // modify it under the terms of the GNU General Public License as published
    // by the Free Software Foundation, either version 3 of the License, or
    // (at your option) any later version.
    //
    // The LOFAR software suite is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License along
    // with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
    //
    // $Id$
    
    #include "ITRFDirection.h"
    
    #include <casacore/measures/Measures/MPosition.h>
    #include <casacore/measures/Measures/MDirection.h>
    #include <casacore/measures/Measures/MEpoch.h>
    
    namespace everybeam {
    
    // ITRF position of CS002LBA, just to use a fixed reference
    const vector3r_t ITRFDirection::itsLOFARPosition = {
        {826577.022720000, 461022.995082000, 5064892.814}};
    
    // TODO: initialize converter with a time (and fixed position) and convert
    // specific directions. Needed for wslean as well as for the makeeverybeam
    // executable.
    
    ITRFDirection::ITRFDirection(const vector3r_t &position,
                                 const vector2r_t &direction) {
      casacore::MVPosition mvPosition(position[0], position[1], position[2]);
      casacore::MPosition mPosition(mvPosition, casacore::MPosition::ITRF);
      itsFrame = casacore::MeasFrame(casacore::MEpoch(), mPosition);
    
      // Order of angles seems to be longitude (along the equator), lattitude
      // (towards the pole).
      casacore::MVDirection mvDirection(direction[0], direction[1]);
      casacore::MDirection mDirection(mvDirection, casacore::MDirection::J2000);
      itsConverter = casacore::MDirection::Convert(
          mDirection,
          casacore::MDirection::Ref(casacore::MDirection::ITRF, itsFrame));
    }
    
    ITRFDirection::ITRFDirection(const vector2r_t &direction)
        : ITRFDirection(itsLOFARPosition, direction) {
      // create ITRF Direction from fixed stationposition
    }
    
    ITRFDirection::ITRFDirection(const vector3r_t &position,
                                 const vector3r_t &direction) {
      casacore::MVPosition mvPosition(position[0], position[1], position[2]);
      casacore::MPosition mPosition(mvPosition, casacore::MPosition::ITRF);
      itsFrame = casacore::MeasFrame(casacore::MEpoch(), mPosition);
    
      casacore::MVDirection mvDirection(direction[0], direction[1], direction[2]);
      casacore::MDirection mDirection(mvDirection, casacore::MDirection::J2000);
      itsConverter = casacore::MDirection::Convert(
          mDirection,
          casacore::MDirection::Ref(casacore::MDirection::ITRF, itsFrame));
    }
    
    ITRFDirection::ITRFDirection(const vector3r_t &direction)
        : ITRFDirection(itsLOFARPosition, direction)
    
    {
      // create ITRF Direction from fixed stationposition
    }
    
    vector3r_t ITRFDirection::at(real_t time) const {
      std::lock_guard<std::mutex> lock(itsMutex);
    
      // Cannot use MeasFrame::resetEpoch(Double), because that assumes the
      // argument is UTC in (fractional) days (MJD).
      itsFrame.resetEpoch(casacore::Quantity(time, "s"));
    
      const casacore::MDirection &mITRF = itsConverter();
      const casacore::MVDirection &mvITRF = mITRF.getValue();
    
      vector3r_t itrf = {{mvITRF(0), mvITRF(1), mvITRF(2)}};
      return itrf;
    }
    
    }  // namespace everybeam