///////////////// // CPP HEADERS // ///////////////// #include #include #include //////////// /// DDLIB // //////////// #include "DD.h" #define NAN (0.0/0.0) //////////////// // NAMESPACES // /////////////// using namespace std; int main (int argc, char const *argv[]) throw(std::string) { if (argc != 5) { cout << "[ERROR] Usage : ./get_DSCOVR (plasma filename) (mag filename) (ddStart) (ddInterval)" << endl; exit(EXIT_FAILURE); } string dataFilename = argv[1]; string dataFilename1 = argv[2]; string ddStart = argv[3]; string ddInterval = argv[4]; string plasmaVi = "dsc_fc_1m"; string timeParameter = "Time"; string DensParameter = "proton_density"; string TempParameter = "proton_temperature"; string VNormParameter = "vp_gse"; string magVi = "dsc_mag_1m"; string magParameter = "b_gse"; ofstream plasmaFile(dataFilename.c_str(), ios::out); ofstream magFile(dataFilename1.c_str(), ios::out); int id_sw = DD_SetVariable( const_cast( plasmaVi.c_str() ) ); int id_mag = DD_SetVariable( const_cast( magVi.c_str() ) ); char *st = const_cast( ddStart.c_str() ); int error = DD_SetTime(id_sw, st); if (error < 0) { std::string ddSetTimeErr = "[ERROR] Bad time pointer init in DD_SetTime SW -> err value : " + error; printf(" bad time pointer plasma %d %d\n", id_sw, error); throw ddSetTimeErr; } error = DD_SetTime(id_mag, st); if (error < 0) { std::string ddSetTimeErr = "[ERROR] Bad time pointer init in DD_SetTime Mag -> err value : " + error; printf(" bad time pointer mag %d\n", error); throw ddSetTimeErr; } // GET DATA char *params[4]; params[0] = const_cast( timeParameter.c_str() ); params[1] = const_cast( DensParameter.c_str() ); params[2] = const_cast( TempParameter.c_str() ); params[3] = const_cast( VNormParameter.c_str() ); char *params_mag[2]; params_mag[0] = const_cast( timeParameter.c_str() ); params_mag[1] = const_cast( magParameter.c_str() ); char *timeIntervall = const_cast( ddInterval.c_str() ); DD_data_t *data; int status = 0; plasmaFile << "Time,Density,Temperature,Vx,Vy,Vz" << endl; do { status = DD_GetMultiData(id_sw, 4, static_cast(params), timeIntervall, &data, 1); if (status < 0) { std::string ddGetDataErr = "[ERROR] Failed to get SW data -> status : " + status; throw std::string(ddGetDataErr); } for (int j = 0; j < data->VarNumber; ++j) { float density = *(static_cast(data[1].Variables[j])); if (density < -1000.) density = NAN; float temperature = *(static_cast(data[2].Variables[j])); if (temperature < -1000.) temperature = NAN; float vx = static_cast(data[3].Variables[j])[0]; float vy = static_cast(data[3].Variables[j])[1]; float vz = static_cast(data[3].Variables[j])[2]; if (vx < -9000.) { vx = NAN; vy = NAN; vz = NAN; } plasmaFile << static_cast(data[0].Variables[j]) << "," << density << "," << temperature << "," << vx << "," << vy << "," << vz << endl; } } while (status == MOREDATA); DD_Close(id_sw); status = 0; magFile << "Time,Bx,By,Bz" << endl; do { status = DD_GetMultiData(id_mag, 2, static_cast(params_mag), timeIntervall, &data, 1); if (status < 0) { std::string ddGetDataErr = "[ERROR] Failed to get MAG data -> status : " + status; throw std::string(ddGetDataErr); } for (int j = 0; j < data->VarNumber; ++j) { float bx = static_cast(data[1].Variables[j])[0]; float by = static_cast(data[1].Variables[j])[1]; float bz = static_cast(data[1].Variables[j])[2]; if (bx < -9000.) { bx = NAN; by = NAN; bz = NAN; } magFile << static_cast(data[0].Variables[j]) << "," << bx << "," << by << "," << bz << endl; } } while (status == MOREDATA); DD_Close(id_mag); plasmaFile.close(); magFile.close(); return 0; }