Blame view

src/ExternLib/Maglib/Posmag.hh 9.13 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);
60e6caa8   Benjamin Renard   Fix maglib wrapping
75
                    double rrmag = std::sqrt(in[0]*in[0]+in[1]*in[1]+in[2]*in[2]);
c03f1231   Benjamin Renard   Fix bug in maglib...
76
                    double thetr = std::acos(in[2]/rrmag);
60e6caa8   Benjamin Renard   Fix maglib wrapping
77
                    double phir = std::atan2(in[1] , in[0]);
e959cf9c   Hacene SI HADJ MOHAND   extention librair...
78
79
                    
                    
d7cb2fe5   Hacene SI HADJ MOHAND   progress
80
                    /*
e88e22d1   Hacene SI HADJ MOHAND   in progress
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
113
                     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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
                    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
                     */

60e6caa8   Benjamin Renard   Fix maglib wrapping
139
140
141
                    double xlamb =0.0;
                    double flg = 0.0;
                    double tgl = 1.0;
e88e22d1   Hacene SI HADJ MOHAND   in progress
142
                    int ifail=10;
76bbd488   Hacene SI HADJ MOHAND   cleaning
143
                    
afa22fae   Hacene SI HADJ MOHAND   presque
144
                    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
145
146
147
                            rrmag, thetr, phir,
                            _isatex, _magout,           
                            tgl, flg, xlamb,ifail);
e88e22d1   Hacene SI HADJ MOHAND   in progress
148
                    
e959cf9c   Hacene SI HADJ MOHAND   extention librair...
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
                    
                    // test results shud be as 
                    /**
                    const double PI  =3.141592653589793238463;
                     rrmag = 7.0; thetr=30*PI/180.0; phir=25*PI/180;
                     maglib::maglibWarpper::getPosmag(2017,02,15,11,30,0,
                            rrmag, thetr, phir,
                            _isatex, _magout,           
                            tgl, flg, xlamb,ifail);
                     * expected results 
                     *      tgl     14.08
                             flg     18.76
                             xlamb     76.65
                             tglc     15.24
                    */
37b19066   Hacene SI HADJ MOHAND   integration magli...
164
165
                    DataType tgl_res =  tgl;
                    DataType xlamb_res = (DataType) xlamb*180/ (2*std::asin(1.0));
d7cb2fe5   Hacene SI HADJ MOHAND   progress
166
                    DataType flg_res = (DataType) flg;
afa22fae   Hacene SI HADJ MOHAND   presque
167
                    _paramOutput->pushTime(crtTime);
37b19066   Hacene SI HADJ MOHAND   integration magli...
168
                    pushData(tgl_res, xlamb_res, flg_res);
0b31214e   Hacene SI HADJ MOHAND   Maglib
169
170
                }

d7cb2fe5   Hacene SI HADJ MOHAND   progress
171

0b31214e   Hacene SI HADJ MOHAND   Maglib
172
            }
d7cb2fe5   Hacene SI HADJ MOHAND   progress
173
            virtual void pushData(DataType tgl, DataType xlamb, DataType flg) = 0;
0b31214e   Hacene SI HADJ MOHAND   Maglib
174
175

        protected:
afa22fae   Hacene SI HADJ MOHAND   presque
176
177
            ParamDataSpec<std::vector<DataType> >& _paramInput;
            ParamDataSpec<DataType>* _paramOutput;
0b31214e   Hacene SI HADJ MOHAND   Maglib
178
179
            int _isatex;
            int _magout;
afa22fae   Hacene SI HADJ MOHAND   presque
180

d7cb2fe5   Hacene SI HADJ MOHAND   progress
181
        };
afa22fae   Hacene SI HADJ MOHAND   presque
182

d7cb2fe5   Hacene SI HADJ MOHAND   progress
183
184
185
        /**
         * Ecriture de temps geomagnetique local du satellite (heure fractionnée)
         */
6774d8ba   Hacene SI HADJ MOHAND   progressss
186
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
187
188
189
190
191
192
193
194
195
196
197
        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
198
        };
afa22fae   Hacene SI HADJ MOHAND   presque
199
200

        /**
6774d8ba   Hacene SI HADJ MOHAND   progressss
201
202
203
         * Ecriture de invariant latitude 
         */
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
204
205
206
207
208
209
210
211
212
213
214
        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
215
        };
afa22fae   Hacene SI HADJ MOHAND   presque
216
217

        /**
6774d8ba   Hacene SI HADJ MOHAND   progressss
218
219
220
         * Ecriture du parametre L
         */
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
221
222
223
224
225
226
227
228
229
230
231
        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
232
        };
afa22fae   Hacene SI HADJ MOHAND   presque
233

0b31214e   Hacene SI HADJ MOHAND   Maglib
234
    }
afa22fae   Hacene SI HADJ MOHAND   presque
235

0b31214e   Hacene SI HADJ MOHAND   Maglib
236
237
238
239
}


#endif /* POSMAG_HH */