get_OMNI_1H.cpp
2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
70
71
72
73
74
75
76
77
78
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
/////////////////
// CPP HEADERS //
/////////////////
#include <iostream>
#include <fstream>
#include <stdlib.h>
////////////
/// DDLIB //
////////////
#include "DD.h"
////////////////
// NAMESPACES //
///////////////
using namespace std;
int main(int argc, char const *argv[])
{
if (argc != 4)
{
cout << "[ERROR] Usage : ./get_OMNI_1H (data filename) (ddStart) (ddInterval)" << endl;
exit(EXIT_FAILURE);
}
string dataFilename = argv[1];
string ddStart = argv[2];
string ddInterval = argv[3];
string plasmaVi = "omni_hour_all";
string timeParameter = "Time";
string DensParameter = "N";
string TempParameter = "T";
string VNormParameter = "V";
string VLonParameter = "Vlon";
string VLatParameter = "Vlat";
string magParameter = "B";
ofstream plasmaFile(dataFilename.c_str(), ios::out);
int id = DD_SetVariable( const_cast<char*>( plasmaVi.c_str() ) );
char *st = const_cast<char*>( ddStart.c_str() );
int error = DD_SetTime(id, st);
if (error < 0)
{
std::string ddSetTimeErr = "[ERROR] Bad time pointer init in DD_SetTime -> err value : " + error;
throw std::string(ddSetTimeErr);
}
// GET DATA
char *params[7];
params[0] = const_cast<char*>( timeParameter.c_str() );
params[1] = const_cast<char*>( DensParameter.c_str() );
params[2] = const_cast<char*>( TempParameter.c_str() );
params[3] = const_cast<char*>( VNormParameter.c_str() );
params[4] = const_cast<char*>( VLonParameter.c_str() );
params[5] = const_cast<char*>( VLatParameter.c_str() );
params[6] = const_cast<char*>( magParameter.c_str() );
char *timeIntervall = const_cast<char*>( ddInterval.c_str() );
DD_data_t *data;
int status = 0;
plasmaFile << "Time,Density,Temperature,V,Vlon,Vlat,Bx,By,Bz" << endl;
do {
status = DD_GetMultiData(id, 7, static_cast<char**>(params), timeIntervall, &data, 1);
if (status < 0)
{
std::string ddGetDataErr = "[ERROR] Failed to get data -> status : " + status;
throw std::string(ddGetDataErr);
}
for (int j = 0; j < data->VarNumber; ++j)
{
plasmaFile << static_cast<char*>(data[0].Variables[j]) << ","
<< *(static_cast<float*>(data[1].Variables[j])) << ","
<< *(static_cast<float*>(data[2].Variables[j])) << ","
<< *(static_cast<float*>(data[3].Variables[j])) << ","
<< *(static_cast<float*>(data[4].Variables[j])) << ","
<< *(static_cast<float*>(data[5].Variables[j])) << ","
<< static_cast<float*>(data[6].Variables[j])[0] << ","
<< static_cast<float*>(data[6].Variables[j])[1] << ","
<< static_cast<float*>(data[6].Variables[j])[2] << endl;
}
} while (status == MOREDATA);
DD_Close(id);
plasmaFile.close();
return 0;
}