WarpTwin
Documentation for WarpTwin models and classes.
Loading...
Searching...
No Matches
EarthObservationModel.h
/******************************************************************************
* Copyright (c) ATTX INC 2025. All Rights Reserved.
*
* This software and associated documentation (the "Software") are the 
* proprietary and confidential information of ATTX, INC. The Software is 
* furnished under a license agreement between ATTX and the user organization 
* and may be used or copied only in accordance with the terms of the agreement.
* Refer to 'license/attx_license.adoc' for standard license terms.
*
* EXPORT CONTROL NOTICE: THIS SOFTWARE MAY INCLUDE CONTENT CONTROLLED UNDER THE
* INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) OR THE EXPORT ADMINISTRATION 
* REGULATIONS (EAR99). No part of the Software may be used, reproduced, or 
* transmitted in any form or by any means, for any purpose, without the express 
* written permission of ATTX, INC.
******************************************************************************/
/*
Flat plate drag model header file

Author: Alex Reynolds
*/
/*
Metadata for MS GUI:
imdata = {"exclude" : True}
*/

#ifndef MODELS_SENSORS_EARTH_OBSERVATION_MODEL_H
#define MODELS_SENSORS_EARTH_OBSERVATION_MODEL_H

#include "simulation/Model.h" 
#include "models/states/GroundStationModel.h"

namespace warptwin {

    /**
     * @brief   Simple Earth Observation Model
     * 
     * This model defines a simple Earth Observation configuration with revisit 
     * counts, range, and observation times.
    */
    MODEL(EarthObservationModel)
    public:
        // Model params
        //         NAME                     TYPE                    DEFAULT VALUE
        START_PARAMS
            /** The maximum angle off nadir the spacecraft is allowed to look for a valid pass, in radians */
            SIGNAL(off_nadir_mask_rad,      double,                 1.0)
            /** The frame of the spacecraft object that the ground station will sense*/
            SIGNAL(spacecraft_frame,        Frame*,                nullptr)
            /** The planet rotating frame to which the ground station is attached. Note that
             *  the planet rotating frame must be a child of the associated planet inertial
             *  frame, which is also used in this model. */
            SIGNAL(planet_rotating_frame,   Frame*,                nullptr)
            /** This is the detic latitude of the target site, in radians */
            SIGNAL(target_lat_rad,          double,                 0.0)
            /** The longitude of the target site, in radians */
            SIGNAL(target_lon_rad,          double,                 0.0)
        END_PARAMS

        // Model inputs
        //         NAME                     TYPE                    DEFAULT VALUE
        START_INPUTS

        END_INPUTS

        // Model outputs
        //         NAME                     TYPE                    DEFAULT VALUE
        START_OUTPUTS
            /** The total amount of time, in seconds, that the site has been observable */
            SIGNAL(obs_time_s,              double,                 0.0)
            /** The total number of visits by the spacecraft to the site */
            SIGNAL(total_visits,            int,                    0)
            /** This is the range of the spacecraft to the target */
            SIGNAL(range,                   double,                 0.0)
            /** This is the range rate of the spacecraft wrt the target*/
            SIGNAL(range_rate,              double,                 0.0)
            /** This is the look angle of the spacecraft wrt the target site, in radians */
            SIGNAL(look_angle,              double,                 0.0)
            /** This flag indicates whether the targeted ground site is visible or not. 1 = visible */
            SIGNAL(visible,                 bool,                   true)
        END_OUTPUTS

    protected:
        int16 start() override;
        int16 execute() override; 

        GroundStationModel _gs;

        bool _seen_last_step;
    };

}

#endif