Blame view

src/ExternLib/Maglib/Posmag.hh 8.96 KB
0b31214e   Hacene SI HADJ MOHAND   Maglib
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * 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"
0b31214e   Hacene SI HADJ MOHAND   Maglib
22
23
24
25
26
#include <vector>

namespace AMDA {
    namespace Parameters {

afa22fae   Hacene SI HADJ MOHAND   presque
27
28
        using namespace std;

0b31214e   Hacene SI HADJ MOHAND   Maglib
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
        template<typename DataType, class TOutputParamData>
        class Posmag : public Operation {
        public:

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
            Posmag(Process& pProcess, ParamDataSpec<vector<DataType> >&paramInput, 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<vector<DataType> >&paramInput) :
            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) {

e7ad78e9   Hacene SI HADJ MOHAND   rrmag non transmis
70
                    vector<DataType> in = _paramInput.get(_index);
0b31214e   Hacene SI HADJ MOHAND   Maglib
71
                    double crtTime = _paramInput.getTime(_index);
afa22fae   Hacene SI HADJ MOHAND   presque
72
                    time_t timestamp = crtTime;
0b31214e   Hacene SI HADJ MOHAND   Maglib
73
74
                    struct tm *tmp;
                    tmp = gmtime(&timestamp);
e7ad78e9   Hacene SI HADJ MOHAND   rrmag non transmis
75
76
77
                    float rrmag = std::sqrt(in[0]*in[0]+in[1]*in[1]+in[2]*in[2]);
                    float thetr = std::acos(in[3]/rrmag);
                    float phir = std::atan2(in[1] , in[0]);
e88e22d1   Hacene SI HADJ MOHAND   in progress
78
                    
d7cb2fe5   Hacene SI HADJ MOHAND   progress
79
                    /*
e88e22d1   Hacene SI HADJ MOHAND   in progress
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
                     PAR magout (I) : type de champ magnetique externe

                    PAR isatex (I) : type de satellite

                    PAR year   (I) : annee fractionnaire >= 2005

                    PAR rre    (I) : distance radiale geocentrique (rayons terrestres)
                    PAR thetr  (I) : colatitude geocentrique (radians)
                    PAR phir   (I) : longitude geocentrique (radians)

                    PAR alfag  (I) : ascension droite de Greenwich (radians)
                    PAR alfas  (I) : ascension droite du soleil (radians)
                    PAR deltas (I) : declinaison du soleil (radians)

                    PAR tilt   (I) : angle de tilt (radians)

                    PAR rgsm   (I) : matrice de passage du repere geographique au
                    PAR            : repere solaire magnetique

                    PAR rggsm  (I) : matrice de passage du repere geographique au
                    PAR            : repere solaire magnetospherique
                    PAR rgsmg  (I) : matrice de passage du repere magnetospherique
                    PAR            : au repere geographique

                    PAR rgdip  (I) : matrice (3,3) de passage du repere geographique
                    PAR            : au repere dipolaire

                    PAR rgse   (I) : matrice de passage du repere geographique
                    PAR            : au repere solaire ecliptique

                    PAR tetdip (I) : colatitude geocentrique du dipole (radians)
                     
                    PAR phidip (I) : longitude geocentrique du dipole (radians)
d7cb2fe5   Hacene SI HADJ MOHAND   progress
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
                    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
                     */

e7ad78e9   Hacene SI HADJ MOHAND   rrmag non transmis
138
139
140
                    float xlamb =0.0;
                    float flg = 0.0;
                    float tgl = 1.0;
e88e22d1   Hacene SI HADJ MOHAND   in progress
141
                    int ifail=10;
d7cb2fe5   Hacene SI HADJ MOHAND   progress
142
143

                    /**
afa22fae   Hacene SI HADJ MOHAND   presque
144
145
146
147
148
149
                                     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) 
d7cb2fe5   Hacene SI HADJ MOHAND   progress
150
                     */
e88e22d1   Hacene SI HADJ MOHAND   in progress
151
                   
afa22fae   Hacene SI HADJ MOHAND   presque
152
                    maglib::maglibWarpper::getPosmag(1900 + tmp->tm_year, 1 + tmp->tm_mon, tmp->tm_mday, tmp->tm_hour, tmp->tm_min, tmp->tm_sec,
e7ad78e9   Hacene SI HADJ MOHAND   rrmag non transmis
153
154
155
                            rrmag, thetr, phir,
                            _isatex, _magout,           
                            tgl, flg, xlamb,ifail);
e88e22d1   Hacene SI HADJ MOHAND   in progress
156
                    
e88e22d1   Hacene SI HADJ MOHAND   in progress
157
                    DataType tgl_res =  tgl;
d7cb2fe5   Hacene SI HADJ MOHAND   progress
158
159
                    DataType xlamb_res = (DataType) xlamb;
                    DataType flg_res = (DataType) flg;
afa22fae   Hacene SI HADJ MOHAND   presque
160
                    _paramOutput->pushTime(crtTime);
d7cb2fe5   Hacene SI HADJ MOHAND   progress
161
                    pushData(tgl_res, xlamb_res, flg_res);
0b31214e   Hacene SI HADJ MOHAND   Maglib
162
163
                }

d7cb2fe5   Hacene SI HADJ MOHAND   progress
164

0b31214e   Hacene SI HADJ MOHAND   Maglib
165
            }
d7cb2fe5   Hacene SI HADJ MOHAND   progress
166
            virtual void pushData(DataType tgl, DataType xlamb, DataType flg) = 0;
0b31214e   Hacene SI HADJ MOHAND   Maglib
167
168

        protected:
afa22fae   Hacene SI HADJ MOHAND   presque
169
170
            ParamDataSpec<std::vector<DataType> >& _paramInput;
            ParamDataSpec<DataType>* _paramOutput;
0b31214e   Hacene SI HADJ MOHAND   Maglib
171
172
            int _isatex;
            int _magout;
afa22fae   Hacene SI HADJ MOHAND   presque
173

d7cb2fe5   Hacene SI HADJ MOHAND   progress
174
        };
afa22fae   Hacene SI HADJ MOHAND   presque
175

d7cb2fe5   Hacene SI HADJ MOHAND   progress
176
177
178
        /**
         * Ecriture de temps geomagnetique local du satellite (heure fractionnée)
         */
6774d8ba   Hacene SI HADJ MOHAND   progressss
179
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
180
181
182
183
184
185
186
187
188
189
190
        class MLT : public Posmag<DataType, ParamDataSpec < DataType > > {
        public:

            MLT(Process& pProcess, ParamDataSpec<vector<DataType> >& paramInput, int isatex, int magout) :
            Posmag<DataType, ParamDataSpec < DataType > > ::Posmag(pProcess, paramInput, isatex, magout) {
            }

            void pushData(DataType tgl, DataType /*xlamb*/, DataType /*flg*/) {

                Posmag<DataType, ParamDataSpec < DataType > > ::_paramOutput->getDataList().push_back(tgl);
            }
6774d8ba   Hacene SI HADJ MOHAND   progressss
191
        };
afa22fae   Hacene SI HADJ MOHAND   presque
192
193

        /**
6774d8ba   Hacene SI HADJ MOHAND   progressss
194
195
196
         * Ecriture de invariant latitude 
         */
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
197
198
199
200
201
202
203
204
205
206
207
        class InvLat : public Posmag<DataType, ParamDataSpec < DataType > > {
        public:

            InvLat(Process& pProcess, ParamDataSpec<vector<DataType> >& paramInput, int isatex, int magout) :
            Posmag<DataType, ParamDataSpec < DataType > > ::Posmag(pProcess, paramInput, isatex, magout) {
            }

            void pushData(DataType /*tgl*/, DataType xlamb, DataType /*flg*/) {

                Posmag<DataType, ParamDataSpec < DataType > > ::_paramOutput->getDataList().push_back(xlamb);
            }
6774d8ba   Hacene SI HADJ MOHAND   progressss
208
        };
afa22fae   Hacene SI HADJ MOHAND   presque
209
210

        /**
6774d8ba   Hacene SI HADJ MOHAND   progressss
211
212
213
         * Ecriture du parametre L
         */
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
214
215
216
217
218
219
220
221
222
223
224
        class Lparam : public Posmag<DataType, ParamDataSpec < DataType > > {
        public:

            Lparam(Process& pProcess, ParamDataSpec<vector<DataType> >& paramInput, int isatex, int magout) :
            Posmag<DataType, ParamDataSpec < DataType > > ::Posmag(pProcess, paramInput, isatex, magout) {
            }

            void pushData(DataType /*tgl*/, DataType /*xlamb*/, DataType flg) {

                Posmag<DataType, ParamDataSpec < DataType > > ::_paramOutput->getDataList().push_back(flg);
            }
0b31214e   Hacene SI HADJ MOHAND   Maglib
225
        };
afa22fae   Hacene SI HADJ MOHAND   presque
226

0b31214e   Hacene SI HADJ MOHAND   Maglib
227
    }
afa22fae   Hacene SI HADJ MOHAND   presque
228

0b31214e   Hacene SI HADJ MOHAND   Maglib
229
230
231
232
}


#endif /* POSMAG_HH */