/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /* * File: Posmag.hh * Author: hacene * * Created on July 21, 2020, 3:42 PM */ #ifndef POSMAG_HH #define POSMAG_HH #include "MaglibWarpper.hh" #include "Parameter.hh" #include "ParamData.hh" #include "DataTypeMath.hh" #include "Operation.hh" #include "SpiceKernelMgr.hh" #include namespace AMDA { namespace Parameters { template class Posmag : public Operation { public: /** * @brief Constructor. * @details Create the ParamData type of the input ParamData. */ Posmag(Process& pProcess, ParamDataSpec >¶mInput, int isatex, int magout) : Operation(pProcess), _paramInput(paramInput), _paramOutput(new TOutputParamData()), _isatex(isatex), _magout(magout) { _paramDataOutput = _paramOutput; }; /** * @brief Constructor. * @details Create the ParamData type of the input ParamData. */ Posmag(Process& pProcess, ParamDataSpec >¶mInput) : Operation(pProcess), _paramInput(paramInput), _paramOutput(new TOutputParamData()), _isatex(0), _magout(2) { _paramDataOutput = _paramOutput; } virtual ~Posmag() { } /** * @overload Operation::write(ParamDataIndexInfo &pParamDataIndexInfo) */ void write(ParamDataIndexInfo &pParamDataIndexInfo) { for (unsigned int _index = pParamDataIndexInfo._startIndex; _index < pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess; ++_index) { vector in = _paramInput.getDataList()[_index]; double crtTime = _paramInput.getTime(_index); ime_t timestamp = crtTime; struct tm *tmp; tmp = gmtime(×tamp); float i_rrmag = in[0]; float i_thetr = in[1]; float i_phir = in[2]; /* PAR xgsm (O) : coordonnee solaire magnetospherique en x (rayons terrestres) PAR ygsm (O) : coordonnee solaire magnetospherique en y (rayons terrestres) PAR zgsm (O) : coordonnee solaire magnetospherique en z (rayons terrestres) PAR xgse (O) : coordonnee solaire ecliptique en x (rayons terrestres) PAR ygse (O) : coordonnee solaire ecliptique en y (rayons terrestres) PAR zgse (O) : coordonnee solaire ecliptique en z (rayons terrestres) PAR tgl (O) : temps geomagnetique local du satellite : (heures fractionnaires) PAR flg (O) : parametre L de Galperin PAR xlamb (O) : latitude invariante (radians) PAR tglc (O) : temps geomagnetique local du point conjugue : (heures fractionnaires) PAR hsl (O) : hauteur de l'ombre (kilometres) PAR clatgm (O) : latitude geomagnetique (radians) PAR clongm (O) : longitude geomagnetique (radians) PAR iposmg (O) : tableau (dim=15) des indicateurs de positions PAR ier (O) : code de retour */ float xgsm, ygsm, zgsm, xgse, ygse, zgse, tgl, flg, xlambr, tglc, hsl, fclatgmr, clongmr, tgl, flg, xlambr, tglc, hsl, clatgmr, clongmr, xlamb, clatgm, clongm; int ifail; int iposmg[15]; /** static void getPosmag(int iyear, int imonth, int iday, int ihour, int imin, int isec, float* rrmag, float* thetr, float* phir, int* isatex, int* magout, float* xgsm, float* ygsm, float* zgsm, float* xgse, float* ygse, float* zgse, float* tgl, float* flg, float* xlambr, float* tglc, float* hsl, float* clatgmr, float* clongmr, float * iposmg[15], int* ifai) */ maglib::maglibWarpper::getPosmag(1900 + tmp->tm_year, 1 + tmp->tm_yday, tmp->tm_hour, tmp->tm_min, tmp->tm_sec, i_rrmag, i_thetr, i_phir, _isatex, _magout, xgsm, ygsm, zgsm, xgse, ygse, zgse, tgl, flg, xlambr, tglc, hsl, fclatgmr, clongmr, iposmg, ifail); DataType tgl_res = (DataType) tgl; DataType xlamb_res = (DataType) xlamb; DataType flg_res = (DataType) flg; _paramOutput->pushTime(crtTime); pushData(tgl_res, xlamb_res, flg_res); } } virtual void pushData(DataType tgl, DataType xlamb, DataType flg) = 0; protected: int _isatex; int _magout; private: ParamDataSpec >& _paramInput; ParamDataSpec* _paramOutput; }; /** * Ecriture de temps geomagnetique local du satellite (heure fractionnée) */ template class MLT : public Posmag{ MLT(Process& pProcess, ParamDataSpec >& paramInput, int isatex, int magout): Posmag :: Posmag(pProcess, paramInput, isatex, magout){ } void pushData(DataType tgl, DataType /*xlamb*/, DataType /*flg*/){ Posmag :: } }; } } #endif /* POSMAG_HH */