Blame view

src/ExternLib/Maglib/Posmag.hh 8.41 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
76
77
                    double rrmag = std::sqrt(in[0]*in[0]+in[1]*in[1]+in[2]*in[2]);
                    double thetr = std::acos(in[3]/rrmag);
                    double phir = std::atan2(in[1] , in[0]);
d7cb2fe5   Hacene SI HADJ MOHAND   progress
78
                    /*
e88e22d1   Hacene SI HADJ MOHAND   in progress
79
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
                     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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
                    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
137
138
139
                    double xlamb =0.0;
                    double flg = 0.0;
                    double tgl = 1.0;
e88e22d1   Hacene SI HADJ MOHAND   in progress
140
                    int ifail=10;
76bbd488   Hacene SI HADJ MOHAND   cleaning
141
                    
afa22fae   Hacene SI HADJ MOHAND   presque
142
                    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
143
144
145
                            rrmag, thetr, phir,
                            _isatex, _magout,           
                            tgl, flg, xlamb,ifail);
e88e22d1   Hacene SI HADJ MOHAND   in progress
146
                    
37b19066   Hacene SI HADJ MOHAND   integration magli...
147
148
                    DataType tgl_res =  tgl;
                    DataType xlamb_res = (DataType) xlamb*180/ (2*std::asin(1.0));
d7cb2fe5   Hacene SI HADJ MOHAND   progress
149
                    DataType flg_res = (DataType) flg;
afa22fae   Hacene SI HADJ MOHAND   presque
150
                    _paramOutput->pushTime(crtTime);
37b19066   Hacene SI HADJ MOHAND   integration magli...
151
                    pushData(tgl_res, xlamb_res, flg_res);
0b31214e   Hacene SI HADJ MOHAND   Maglib
152
153
                }

d7cb2fe5   Hacene SI HADJ MOHAND   progress
154

0b31214e   Hacene SI HADJ MOHAND   Maglib
155
            }
d7cb2fe5   Hacene SI HADJ MOHAND   progress
156
            virtual void pushData(DataType tgl, DataType xlamb, DataType flg) = 0;
0b31214e   Hacene SI HADJ MOHAND   Maglib
157
158

        protected:
afa22fae   Hacene SI HADJ MOHAND   presque
159
160
            ParamDataSpec<std::vector<DataType> >& _paramInput;
            ParamDataSpec<DataType>* _paramOutput;
0b31214e   Hacene SI HADJ MOHAND   Maglib
161
162
            int _isatex;
            int _magout;
afa22fae   Hacene SI HADJ MOHAND   presque
163

d7cb2fe5   Hacene SI HADJ MOHAND   progress
164
        };
afa22fae   Hacene SI HADJ MOHAND   presque
165

d7cb2fe5   Hacene SI HADJ MOHAND   progress
166
167
168
        /**
         * Ecriture de temps geomagnetique local du satellite (heure fractionnée)
         */
6774d8ba   Hacene SI HADJ MOHAND   progressss
169
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
170
171
172
173
174
175
176
177
178
179
180
        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
181
        };
afa22fae   Hacene SI HADJ MOHAND   presque
182
183

        /**
6774d8ba   Hacene SI HADJ MOHAND   progressss
184
185
186
         * Ecriture de invariant latitude 
         */
        template<typename DataType>
afa22fae   Hacene SI HADJ MOHAND   presque
187
188
189
190
191
192
193
194
195
196
197
        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
198
        };
afa22fae   Hacene SI HADJ MOHAND   presque
199
200

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

0b31214e   Hacene SI HADJ MOHAND   Maglib
217
    }
afa22fae   Hacene SI HADJ MOHAND   presque
218

0b31214e   Hacene SI HADJ MOHAND   Maglib
219
220
221
222
}


#endif /* POSMAG_HH */