Commit 7d7445eac7ed277c4de30963bdc1436a7d294871

Authored by Elena.Budnik
1 parent 21b939db

THEMIS remote center

CMakeLists.txt
... ... @@ -60,11 +60,7 @@ add_subdirectory(src/DECODERS/ascii2nc)
60 60 add_subdirectory(src/DECODERS/cdf2nc)
61 61 add_subdirectory(src/DECODERS/cdfnew2nc)
62 62 add_subdirectory(src/DECODERS/nc2nc)
63   -add_subdirectory(src/DECODERS/themis/esa2nc)
64   -add_subdirectory(src/DECODERS/themis/esafull2nc)
65   -add_subdirectory(src/DECODERS/themis/esamom2nc)
66   -add_subdirectory(src/DECODERS/themis/fgm2nc)
67   -add_subdirectory(src/DECODERS/themis/sst2nc)
  63 +add_subdirectory(src/DECODERS/themis)
68 64 add_subdirectory(src/DATA/TOOLS)
69 65 add_subdirectory(src/DDSERVICES/TOOLS)
70 66 add_subdirectory(tests)
... ...
src/CALLEXT/cdaweb_cfg.php deleted
... ... @@ -1,9 +0,0 @@
1   -<?php
2   - define("ftp_server", "cdaweb.gsfc.nasa.gov");
3   - define("ftp_user_name", "anonymous");
4   - define("ftp_user_pass", "budnik@irap.omp.eu");
5   - define("ftp_dir", "pub/software/cdawlib/0MASTERS/");
6   -
7   - define ("wsdlCDAWEB", "http://cdaweb.gsfc.nasa.gov/WS/jaxrpc?WSDL");
8   - define ("viewID" , "istp_public");
9   -?>
10 0 \ No newline at end of file
src/CALLEXT/createHeaderMAPSKP.php deleted
... ... @@ -1,84 +0,0 @@
1   -<?php
2   -/* $Id: createHeaderMAPSKP.php,v 1.5 2008/03/05 14:03:45 elena Exp $ */
3   -/**
4   -* \file createHeaderMAPSKP.php
5   -* \brief Function to create header.nc for MapsKP datasets which are not self-described
6   -* \todo Exclude absolute path for /usr/local/bin/ncgen
7   -*/
8   -
9   -function createHeaderMAPSKP($remSetID) {
10   -
11   - $url = "http://planetoweb.cesr.fr/mapskp-amda/MapskpService.php?";
12   - $passwd = "ftp://amda:dd;mapskp@";
13   -
14   - $args = array('service'=>'getInfoUrl',
15   - 'datasetId'=>$remSetID);
16   -
17   - $url .= http_build_query($args);
18   - $infoDom = new DOMDocument();
19   - $infoDom->load($url);
20   - $File = $infoDom->getElementsByTagName("infoUrl")->item(0)->nodeValue;
21   -
22   - $fileName_ = explode("ftp://",$File);
23   - $fileName = $fileName_[0].$passwd.$fileName_[1];
24   -
25   - $infoDom->load($fileName);
26   -
27   - $sampling = $infoDom->getElementsByTagName("TIME_RESOLUTION")->item(0)->nodeValue;
28   - $globalAttrs = ":minSampling = ".$sampling.";";
29   -
30   - $params = $infoDom->getElementsByTagName("PARAM_METADATA");
31   -
32   - $Dimensions = "Time = unlimited, TimeLength = 17 ";
33   - $charVariables = "char Time(Time,TimeLength), StartTime(TimeLength), StopTime(TimeLength);";
34   - $floatVariables = "float ";
35   -
36   - $Size = array();
37   - $addDim = true;
38   -
39   - for ($i = 0; $i < $params->length; $i++) {
40   -
41   - $Name = $params->item($i)->getElementsByTagName("PARAM_ID")->item(0)->nodeValue;
42   - $Size[$i] = $params->item($i)->getElementsByTagName("SIZES")->item(0)->nodeValue;
43   - $Type = $params->item($i)->getElementsByTagName("DATA_TYPE")->item(0)->nodeValue;
44   -
45   - if ($i > 0) $floatVariables .= ",";
46   -
47   - if ($Size[$i] != "1" ) {
48   - for ($j = 0; $j < $i+1; $j++)
49   - if ($Size[$i] == $Size[$j]) {
50   - if ($i != 0 && $j != $i) $addDim = false;
51   - break;
52   - }
53   - if ($addDim) $Dimensions .= ", Dim".$j." = ".$Size[$j];
54   - $floatVariables .= $Name."(Time, Dim".$j.")";
55   - $addDim = true;
56   - }
57   - else
58   - $floatVariables .= $Name."(Time)";
59   -//
60   - }
61   -
62   -// Create CDL ASCII file
63   - $cdl = fopen("header.cdl","w");
64   - fwrite($cdl, "netcdf header { \n \n dimensions: \n");
65   - fwrite($cdl,$Dimensions."; \n\n");
66   -
67   - fwrite($cdl, "variables: \n ");
68   - fwrite($cdl, $charVariables."\n");
69   - fwrite($cdl, $floatVariables."; \n \n");
70   - fwrite($cdl, $globalAttrs."\n");
71   - fwrite($cdl, "data: \n\n }");
72   - fclose($cdl);
73   -// transform to nc
74   - system("/usr/bin/ncgen -o header.nc header.cdl");
75   -// make constant Energy Tables in info.nc
76   -// For MIMI also ...
77   - if ($remSetID == "RPWS_KEY") {
78   - $StartTime = $infoDom->getElementsByTagName("START_DATE")->item(0)->nodeValue;
79   - $function = "make".$remSetID."info";
80   - include($function.".php");
81   - if ($OK = $function($StartTime)) system("join_nc ".strtolower($remSetID)."_constant.nc ".strtolower($remSetID)."_info.nc");
82   - }
83   - }
84   -?>
src/CALLEXT/getData.php
... ... @@ -70,9 +70,12 @@
70 70 // Add nc to Vi
71 71 $nc_prefix = strlen($id) > RemoteDataCenterClass::$MAX_VI_NAME_LENGTH ?
72 72 substr($id, 0, RemoteDataCenterClass::$MAX_VI_NAME_LENGTH - 1): $id;
  73 +
  74 + $nc_prefix = strpos($id, ":") !== false ?
  75 + substr($id,strpos($id, ":")+1) : $id;
73 76  
74 77 $baseMgr = new DDBaseMgr();
75   - $baseMgr->setViId($id);
  78 + // $baseMgr->setViId($id);
76 79 $baseMgr->setViInfo(strtolower($nc_prefix));
77 80 $baseMgr->setViDir($ViDir);
78 81 $baseMgr->addRemoteData($id, $ncFiles, $startIso, $stopIso);
... ...
src/CALLEXT/getDataMAPSKP.php deleted
... ... @@ -1,95 +0,0 @@
1   -<?php
2   -/**
3   -* @file getDataMAPSKP.php
4   -* @version $Id: getDataMAPSKP.php,v 1.6 2009/08/26 09:32:56 budnik Exp $
5   -* @brief DD_Server tools <br> Gets Data from MAPSKP
6   -*
7   -* Args: remDataSetID ddVIdir StartTime StopTime \n
8   -* Env Vars: $DDBASE $DDBASEBIN \n
9   -* Executables: ascii2nc(DECODERS) TimesUpdate TimesUpdateNoData clean
10   -*
11   -*
12   -* @todo General getData.php(dataBaseID)
13   -*/
14   - function name2DD($fileName) {
15   - $pairs = array(".tab" => ".nc","__" => "_");
16   - return strtr(strtolower($fileName),$pairs) ;
17   -}
18   -// Args
19   - $id = $argv[1];
20   - $ViDir = $argv[2];
21   - $Start = $argv[3];
22   - $Stop = $argv[4];
23   -
24   -// Env variables
25   - $DDBASEBIN = getenv("DDBASEBIN");
26   - $DDBASE = getenv("DDBASE");
27   - $MAX_NAME_LENGTH = 31;
28   - $MAX_VI_NAME_LENGTH = 16;
29   -
30   -// MAPSKP STUFF
31   - $passwd = "//amda:dd;mapskp@";
32   - $url = "http://planetoweb.cesr.fr/mapskp-amda/MapskpService.php?";
33   -
34   - $args = array('service'=>'getDataUrl',
35   - 'datasetId'=> $id,
36   - 'dateBegin'=> strtr($Start,".000Z","Z"),
37   - 'dateEnd'=> strtr($Stop,".000Z","Z"));
38   -
39   -// Open STDERR stream
40   - $STDERR = fopen("php://stderr","w");
41   -
42   -// Lock VI directory for Updating
43   -// Stamp -> this directory is being updated
44   - $LockName = $ViDir."/LOCK";
45   - touch($LockName);
46   -
47   -fprintf($STDERR,$ViDir." is LOCKED\n");
48   -
49   -// Send - Receive query
50   - $url .= http_build_query($args);
51   - $fileList = new DOMDocument();
52   - $fileList->load($url);
53   -
54   - $Files = $fileList->getElementsByTagName("url");
55   -
56   - fprintf($STDERR, "FILES RETURN ". $Files->length."\n");
57   -
58   -// Clean VI directory
59   - system("cd ".$ViDir."; ./clean");
60   -// If name is too long....
61   - $nc_prefix = strlen($id) > $MAX_VI_NAME_LENGTH ? substr(strtolower($id),0,15): strtolower($id);
62   -
63   - if ($Files->length > 0) {
64   - for ($i = 0; $i < $Files->length; $i++) {
65   -
66   - copy($ViDir."/header.nc","temp.nc");
67   - $fileName_ = explode("//",$Files->item($i)->nodeValue);
68   - $fileName = $fileName_[0].$passwd.$fileName_[1];
69   - $fileArr = split("/",$fileName);
70   -// Copy URL file to DD_Server dir
71   - $ok = copy($fileName, $fileArr[count($fileArr)-1]);
72   - if ($ok) {
73   -// Convert ascii TAB to nc using header.nc
74   - system($DDBASEBIN."/ascii2nc ".$fileArr[count($fileArr)-1]);
75   - fprintf($STDERR, "FILE $i TRANSLATED \n");
76   - unlink($fileArr[count($fileArr)-1]);
77   - $ncFile = name2DD($fileArr[count($fileArr)-1]);
78   -// Truncate file if it is too long
79   - $ncFileTrue = ($strLength = strlen($ncFile)) > $MAX_NAME_LENGTH ?
80   - $nc_prefix."_".time().$i.".nc" : $ncFile;
81   -// Move nc file to VIdir
82   - rename("temp.nc", $ViDir."/".$ncFileTrue);
83   -
84   -// Updates VI time info
85   - system("cd ".$ViDir."; ".$DDBASEBIN."/TimesUpdate -u ".strtolower($id)."_times.nc ".$ncFileTrue);
86   - }
87   - }
88   - fprintf($STDERR, "TIMES IS UPDATED \n");
89   - }
90   -
91   - system("cd ".$ViDir."; ".$DDBASEBIN."/TimesUpdateNoData ".strtolower($id)."_times.nc ".$argv[3]." ".$argv[4]);
92   -// Unlock VI dir
93   - unlink($LockName);
94   - fprintf($STDERR, "UNLOCK \n");
95   -?>
src/CALLEXT/getDataTHEMIS.php deleted
... ... @@ -1,152 +0,0 @@
1   -<?php
2   -/**
3   -* @file getDataTHEMIS.php
4   -* @version $Id: getDataTHEMIS.php,v 1.7 2010/01/11 18:16:46 budnik Exp $
5   -* @brief DD_Server tools <br> Gets Data from /THEMIS_B1 (NFS)
6   -*
7   -* @arg remDataSetID ddVIdir StartTime StopTime \n
8   -* Env Vars: $DDBASE $DDBASEBIN \n
9   -* Executables: [DataSet]2nc(DECODERS) TimesUpdate TimesUpdateNoData clean
10   -*
11   -*
12   -* @todo General getData.php(dataBaseID)
13   -*/
14   -
15   -
16   -
17   -// Open STDERR stream
18   - $STDERR = fopen("php://stderr","w");
19   -
20   -// Args
21   - $id = $argv[1];
22   -
23   - $ViDir = $argv[2];
24   - $Start = $argv[3];
25   - $Stop = $argv[4];
26   -// NFS direcory
27   - define('ThemisDir', '/THEMIS_B1/themisdata/');
28   - define('DataSetDir', ThemisDir.strtr($id,"_","/"));
29   -// Env variables
30   - define('DDBASEBIN', getenv("DDBASEBIN"));
31   - define('DDBASE', getenv("DDBASE"));
32   -
33   -
34   -
35   - $arr = explode("/", $ViDir);
36   - $instrument = $arr[5];
37   - $mission = $arr[4];
38   - $mode = strpos($arr[6],"_") === false ? $arr[6] : substr($arr[6],0,4);
39   -
40   -
41   - switch ($mode) {
42   - case "psif" :
43   - case "psef" :
44   - case "peif" :
45   - case "peef" :
46   - case "peim" :
47   - case "peem" :
48   - case "h" :
49   - case "l" :
50   - $realDir = DDBASE."/".$mission."/".$instrument."/".$arr[6]."/";
51   - system("cd $realDir ; ./clean");
52   - touch($realDir."/LOCK");
53   -fprintf($STDERR,$realDir." is LOCKED\n");
54   - break;
55   - case "peir" :
56   - case "peer" :
57   - case "peib" :
58   - case "peeb" :
59   - $dirAdd = array("/sp", "/mom");
60   - $fileAdd = array("s", "");
61   - $realDir = DDBASE."/".$mission."/".$instrument."/".$mode."/";
62   - for ($n = 0; $n < 2; $n++) {
63   - $theDir = $realDir.$dirAdd[$n];
64   - system("cd $theDir ; ./clean ");
65   - touch($theDir."/LOCK");
66   -fprintf($STDERR,$theDir." is LOCKED\n");
67   - }
68   - break;
69   - }
70   -
71   -
72   - switch ($mode) {
73   - case "peif" :
74   - case "peef" :
75   - $program = DDBASEBIN."/themis_esafull2nc ";
76   - break;
77   - case "peim" :
78   - case "peem" :
79   - $program = DDBASEBIN."/themis_esamom2nc ";
80   - break;
81   - case "peir" :
82   - case "peer" :
83   - case "peib" :
84   - case "peeb" :
85   - $program = DDBASEBIN."/themis_esa2nc ";
86   - break;
87   - case "psif" :
88   - case "psef" :
89   - $program = DDBASEBIN."/themis_sst2nc ";
90   - break;
91   - case "h" :
92   - case "l" :
93   - $program = DDBASEBIN."/themis_fgm2nc ";
94   - break;
95   - }
96   -// fprintf($STDERR, "REALDIR ".$realDir." \n");
97   -
98   -// Which files
99   - $currTime = strtotime($Start);
100   - $stopTime = strtotime($Stop);
101   -
102   - $currTime -= 3600.0;
103   -
104   - while ($currTime <= $stopTime) {
105   - $fileName = DataSetDir."/".date('Y', $currTime)."/".$id."_".date('Ymd', $currTime)."_v01.cdf";
106   -
107   - if (file_exists($fileName)) {
108   - system($program." ".$fileName." ".$mission." ".$mode);
109   - fprintf($STDERR, "FILE $fileName is TRANSLATED \n");
110   -
111   - }
112   - else {
113   - fprintf($STDERR,"NO SUCH FILE $fileName \n");
114   - }
115   - $currTime += 24*60*60;
116   - }
117   -
118   -
119   - switch ($mode) {
120   - case "psif" :
121   - case "psef" :
122   - case "peif" :
123   - case "peef" :
124   - case "peim" :
125   - case "peem" :
126   - system("mv ".$mode."[0-9]*.nc $realDir");
127   - system("cd $realDir ;".DDBASEBIN."/TimesUpdate -u ".$mode."_times.nc ".$mode."[0-9]*.nc; ".DDBASEBIN."/TimesUpdateNoData ".$mode."_times.nc ".$argv[3]." ".$argv[4]);
128   - unlink($realDir."/LOCK");
129   - break;
130   - case "peir" :
131   - case "peer" :
132   - case "peib" :
133   - case "peeb" :
134   - for ($n = 0; $n < 2; $n++) {
135   - $theDir = $realDir.$dirAdd[$n];
136   - system("mv ".$fileAdd[$n].$mode."[0-9]*.nc $theDir");
137   - system("cd $theDir ;".DDBASEBIN."/TimesUpdate -u ".$mode."_times.nc ".$fileAdd[$n].$mode."[0-9]*.nc; ".DDBASEBIN."/TimesUpdateNoData ".$mode."_times.nc ".$argv[3]." ".$argv[4]);
138   - unlink($theDir."/LOCK");
139   - }
140   - break;
141   - case "h" :
142   - case "l" :
143   - system("mv fgm".$mode."[0-9]*.nc $realDir");
144   - system("cd $realDir ;".DDBASEBIN."/TimesUpdate -u fgm".$mode."_times.nc fgm".$mode."[0-9]*.nc; ".DDBASEBIN."/TimesUpdateNoData fgm".$mode."_times.nc ".$argv[3]." ".$argv[4]);
145   - unlink($realDir."/LOCK");
146   - break;
147   - }
148   -
149   - fprintf($STDERR, "TIMES IS UPDATED \n");
150   -
151   - fprintf($STDERR, "UNLOCK \n");
152   -?>
src/CALLEXT/makeRPWS_KEYinfo.php deleted
... ... @@ -1,65 +0,0 @@
1   -<?php
2   -/* $Id: makeRPWS_KEYinfo.php,v 1.1 2008/03/05 14:04:22 elena Exp $ */
3   -/**
4   -* \file makeRPWS_KEYinfo.php
5   -* \brief Function to create energy info.nc for RPWS
6   -*
7   -*/
8   -
9   - function makeRPWS_KEYinfo($StartTime) {
10   -
11   - $OK = false;
12   - $E_PARAM = "ELECTRIC_SPECTRAL_DENSITIES";
13   - $M_PARAM = "MAGNETIC_SPECTRAL_DENSITIES";
14   - $OK = true;
15   - $url = "http://planetoweb.cesr.fr/mapskp-amda/MapskpService.php?";
16   - $passwd = "//amda:dd;mapskp@";
17   -
18   - $Stop = date("Y-m-d", strtotime("+10 days",strtotime($StartTime)));
19   -
20   - $args = array('service'=>'getDataUrl',
21   - 'datasetId'=> "RPWS_KEY",
22   - 'dateBegin'=> $StartTime."Z",
23   - 'dateEnd'=> $Stop."T00:00:00Z");
24   -
25   -
26   - $url .= http_build_query($args);
27   - $fileList = new DOMDocument();
28   - $fileList->load($url);
29   - $Files = $fileList->getElementsByTagName("url");
30   -
31   - if ($Files->length > 0) {
32   -
33   - $fileName_ = explode("//",$Files->item(0)->nodeValue);
34   - $fileName = $fileName_[0].$passwd.$fileName_[1];
35   - $fileArr = split("/",$fileName);
36   -// Copy URL file VI dir
37   - copy($fileName, $fileArr[count($fileArr)-1]);
38   - $file = fopen($fileArr[count($fileArr)-1], "r");
39   - $buffer = fgets($file);
40   - $arrFreq = explode(" ", $buffer);
41   - $Frequency_E = implode(",",array_slice($arrFreq,2,73));
42   -
43   - $Frequency_M = implode(",",array_slice($arrFreq,75,42));
44   -
45   - fclose($file);
46   - unlink($fileArr[count($fileArr)-1]);
47   -
48   -// Create CDL ASCII file
49   - $cdl = fopen("constant.cdl","w");
50   - fwrite($cdl, "netcdf header { \n \n dimensions: \n");
51   - fwrite($cdl," DIM_E = 73, DIM_M = 42; \n\n");
52   -
53   - fwrite($cdl, "variables: \n");
54   - fwrite($cdl, " float ".$E_PARAM."(DIM_E), ".$M_PARAM."(DIM_M); \n\n");
55   - fwrite($cdl, ":units = \"Hz\"; \n");
56   - fwrite($cdl, "data: \n".$E_PARAM." = ".trim($Frequency_E).";\n".$M_PARAM." = ".trim($Frequency_M).";\n }");
57   - fclose($cdl);
58   -// transform to nc
59   - system("/usr/bin/ncgen -o rpws_key_constant.nc constant.cdl");
60   - $OK = true;
61   - }
62   -
63   - return $OK;
64   - }
65   -?>
src/CALLEXT/mapskp_cfg.php deleted
... ... @@ -1,5 +0,0 @@
1   -<?php
2   -
3   - define("url","http://planetoweb2.cesr.fr/mapskp-amda/MapskpService.php?");
4   - define("passwd","ftp://amda:dd;mapskp@");
5   -?>
src/DATA/MANAGER/DDBaseMgr.php
... ... @@ -39,6 +39,11 @@ class DDBaseMgr
39 39 $this->ViDir = $ViDir;
40 40 }
41 41  
  42 + public function setRemoteViId($ViId)
  43 + {
  44 + $this->remoteViId = $ViId;
  45 + }
  46 +
42 47 public function setViId($ViId)
43 48 {
44 49 $this->ViId = $ViId;
... ... @@ -233,7 +238,7 @@ class DDBaseMgr
233 238 // fprintf($STDERR,$ViDir." is UNLOCKED\n");
234 239 }
235 240  
236   - public function addRemoteData($id, $ncFiles, $start, $stop)
  241 + public function addRemoteData($id, $ncFiles, $start, $stop, $notFirst = true)
237 242 {
238 243 $WORKING_DIR = getcwd();
239 244 chdir($this->ViDir);
... ... @@ -247,8 +252,9 @@ class DDBaseMgr
247 252 system("TimesUpdate -u ".$this->times." ".$ncFile);
248 253 }
249 254  
250   - system("TimesUpdateNoData ".$this->times." ".$start." ".$stop);
251   -
  255 + if ($notFirst)
  256 + system("TimesUpdateNoData ".$this->times." ".$start." ".$stop);
  257 +
252 258 chdir($WORKING_DIR);
253 259 }
254 260  
... ...
src/DECODERS/themis/CMakeLists.txt 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +
  2 +PROJECT(THEMIS)
  3 +
  4 +include_directories(
  5 + ${DDCLIENTINCLUDE_DIR}
  6 + ${NETCDFINCLUDE_DIR}
  7 + ${libcdf_INCLUDE_DIR}
  8 +)
  9 +
  10 +#Configuration de l'exécutable
  11 +
  12 +file( GLOB SOURCE_FILES ./*.c )
  13 +
  14 +foreach( sourcefile ${SOURCE_FILES} )
  15 + get_filename_component( source ${sourcefile} NAME)
  16 + string( REPLACE ".c" "" exefile ${source} )
  17 + add_executable( ${exefile} ${source} )
  18 + target_link_libraries( ${exefile} ${DDCLIENTLIBRARY} ${NETCDFLIBRARY} ${libcdf_LIBRARIES} )
  19 + install (TARGETS ${exefile} DESTINATION bin)
  20 +endforeach( sourcefile ${SOURCE_FILE} )
... ...
src/DECODERS/themis/esa2nc/CMakeLists.txt deleted
... ... @@ -1,26 +0,0 @@
1   -
2   -PROJECT(themis_esa2nc)
3   -
4   -include_directories(
5   - ${DDCLIENTINCLUDE_DIR}
6   - ${NETCDFINCLUDE_DIR}
7   - ${libcdf_INCLUDE_DIR}
8   -)
9   -
10   -#Configuration de l'exécutable
11   -file(
12   - GLOB_RECURSE
13   - source_files
14   - ./*
15   -)
16   -
17   -ADD_EXECUTABLE (themis_esa2nc ${source_files} )
18   -
19   -target_link_libraries(
20   - themis_esa2nc
21   - ${DDCLIENTLIBRARY}
22   - ${NETCDFLIBRARY}
23   - ${libcdf_LIBRARIES}
24   -)
25   -
26   -install (TARGETS themis_esa2nc DESTINATION bin)
src/DECODERS/themis/esa2nc/themis_esa2nc.c deleted
... ... @@ -1,551 +0,0 @@
1   -/**
2   -* @file themis_esa2nc.c
3   -* @brief Stand alone executable to tranform Themis (Burst & Reduced modes) CDF to DD netCDF
4   -* @version $Id: themis_esa2nc.c,v 1.5 2013/11/29 14:11:56 budnik Exp $
5   -*/
6   - /**************************************************************/
7   - /* THEMIS ESA ION AND ELECTRON Burst & Reduced CDF -> DD netCDF */
8   - /* */
9   - /* Energy in info file */
10   - /* New CDF with peib & peir and new params */
11   - /* 04.01.2008 - 2 files (sp & mom) for peir[b] & peer[b] modes */
12   - /**************************************************************/
13   -
14   -#include <stdio.h>
15   -#include <stdlib.h>
16   -#include <netcdf.h>
17   -#include <cdf.h>
18   -#include <DD.h>
19   -#include <string.h>
20   -#include <time.h>
21   -#include <math.h>
22   -
23   -#define TimeGap 3600.0
24   -#define Source "themis@cdpp2"
25   -#define MAX_FILE_NAME_LEN 250 // Max. file name length
26   -#define MAX_VARS 250 // Max # of VARS in CDF
27   -
28   -
29   -/*************************************
30   - Global variables and structures
31   -**************************************/
32   -long CDFDims, // Number of dimensions in a CDF file
33   - CDFVars, // Number of variables in a CDF file
34   - CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file
35   - CDFencoding, // Data encoding
36   - CDFmajority, // Variable majority
37   - CDFmaxRec, // max Record number
38   - CDFAttrs; // number of CDF Attributes
39   -
40   -
41   -struct cdfvar { // CDF variable structure
42   - char name[CDF_VAR_NAME_LEN+1];
43   - long num; //variable number
44   - long datatype;
45   - long numElem; // variable dimensionality
46   - long recVariance; // variable rec Variance
47   - long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes
48   -} cdfVar[MAX_VARS];
49   -
50   -char mode[4];
51   -int ncID, ncSpID;
52   -char ncFile[] = "peir000000000.nc";
53   -char ncSpFile[] = "speir000000000.nc";
54   -int TimeDimID, TimeLengthID, DataID, DataSpID, Data2ID;
55   -int TimeDimSpID, TimeLengthSpID, FluxDimID; // ID of netCDF dimensions
56   -int TimeDimVector[2], DataDimVector[2], Data2DimVector[2], FluxDimVector[2]; // netCDF Dim vectors
57   -int TimeDimSpVector[2], DataDimSpVector[2];
58   -size_t Start[2] = {0L,0L};
59   -size_t TimeCount[2] = {1L,TIMELENGTH};
60   -size_t Data1Count[2] = {1L,1L};
61   -size_t DataCount[2] = {1L,3L};
62   -size_t Data2Count[2] = {1L,6L};
63   -size_t FluxCount[2] = {1L,32L};
64   -
65   -CDFstatus cstatus; // CDF status code
66   -
67   -char Version[]="v01";
68   -char ThemisID[]="tha\0";
69   -char ThemisTime[]="tha_peif_time";
70   -char PAR0[]="tha_peif_delta_time";
71   -char PAR1[]="tha_peif_mode";
72   -char PAR2[]="tha_peif_density";
73   -char PAR3[]="tha_peif_velocity_gse";
74   -char PAR4[]="tha_peif_t3"; // Diagonilized Temperature
75   -char PAR5[]="tha_peif_en_eflux";
76   -char PAR6[]="tha_peif_en_eflux_yaxis";
77   -char PAR7[]="tha_peif_avgtemp"; // trace of t3 divided by 3
78   -char PAR8[]="tha_peif_vthermal";
79   -char PAR9[]="tha_peif_sc_pot";
80   -char PAR10[]="tha_peif_sc_current";
81   -char PAR11[]="tha_peif_magt3"; // Temperature in Mag Field frame
82   -char PAR12[]="tha_peif_ptens"; // Pressure Tensor DSL
83   -char PAR13[]="tha_peif_mftens"; // Momentum Flux Tensor DSL
84   -char PAR14[]="tha_peif_flux"; // particle flux
85   -char PAR15[]="tha_peif_symm"; // Direction of pressure tensor symmetry in DSL
86   -char PAR16[]="tha_peif_symm_ang"; // Angle between Direction of pressure tensor symmetry and B
87   -
88   -
89   -int StartTimeID, StopTimeID;
90   -int StartTimeSpID, StopTimeSpID;
91   -int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID; // 1D
92   -int MfTempID, TempID, ModeID, ModeSpID, VelID, Flux2ID, SymmID; // 2D -> 3
93   -int prTenID, mfTenID; // 2D -> 6
94   -int FluxID; // 2D -> 32
95   -int TimeID; // Time netCDF variable
96   -int TimeSpID;
97   -
98   -char StartT[TIMELENGTH]; // Start time from data
99   -char StopT[TIMELENGTH]; // Stop time from data
100   -/**************************
101   - Function prototypes
102   -**************************/
103   -void usage();
104   -void cdf_handle_error (CDFstatus);
105   -void nc_handle_error (int);
106   -void removeFilepath();
107   -void removeCDFext();
108   -void removeVers();
109   -void ncdefine();
110   -/*--------------------------------------------------------------------------*/
111   -void usage()
112   -{
113   - printf ("\nDescription:\n");
114   - printf (" This program converts a themis CDF file into a netCDF file.\n");
115   - printf ("\n");
116   - printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
117   - printf ("\n");
118   - printf ("Example: esa2nc testfile tha peif\n");
119   - printf ("\n");
120   - exit(1);
121   -}
122   -/*--------------------------------------------------------------------------
123   - * Handles a CDF error.
124   - *--------------------------------------------------------------------------*/
125   -void cdf_handle_error(CDFstatus status)
126   -{
127   -
128   - char message[CDF_STATUSTEXT_LEN+1];
129   -
130   - CDFerror (status, message); /* Get the appropriate message */
131   - fprintf (stderr, "CDF: %s\n", message);
132   -// exit(1);
133   -}
134   -/*--------------------------------------------------------------------------
135   - * Handles a netCDF error.
136   - *--------------------------------------------------------------------------*/
137   -void nc_handle_error(int status)
138   -{
139   - fprintf(stderr, "%s\n", nc_strerror(status));
140   - exit(1);
141   -}
142   -
143   -/*--------------------------------------------------------------------------
144   - * NetCDF File Definition *
145   - *--------------------------------------------------------------------------*/
146   - void ncdefine(double Time)
147   - {
148   - char *s;
149   - time_t p;
150   - int status;
151   - char *STime;
152   -
153   -/*********************** Create netCDF file *****************************/
154   - memcpy(&(ncFile[0]),&(mode[0]), 4);
155   - STime = Double2DD_Time(Time);
156   - memcpy(&(ncFile[4]),&(STime[2]), 9);
157   - if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
158   - nc_handle_error(status);
159   -/******************netCDF Dimensions *******************************/
160   - nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
161   - nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
162   - nc_def_dim (ncID, "Data",3L, &DataID);
163   - nc_def_dim (ncID, "Data2",6L, &Data2ID);
164   -
165   -/********************netCDF Variables ******************/
166   - TimeDimVector[0] = TimeDimID;
167   - DataDimVector[0] = TimeDimID;
168   - Data2DimVector[0] = TimeDimID;
169   - TimeDimVector[1] = TimeLengthID;
170   - DataDimVector[1] = DataID;
171   - Data2DimVector[1] = Data2ID;
172   -
173   -//
174   - nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
175   -
176   - nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
177   - nc_def_var (ncID, "Mode", NC_FLOAT, 2, DataDimVector, &ModeID);
178   -
179   - nc_def_var (ncID, "Density", NC_DOUBLE, 1, &TimeDimID, &DensID);
180   - nc_def_var (ncID, "AvTemp", NC_DOUBLE, 1, &TimeDimID, &AvTempID);
181   - nc_def_var (ncID, "Potential", NC_DOUBLE, 1, &TimeDimID, &PotID);
182   - nc_def_var (ncID, "Current", NC_DOUBLE, 1, &TimeDimID, &CurrID);
183   - nc_def_var (ncID, "SymAngle", NC_DOUBLE, 1, &TimeDimID, &SymAngID);
184   - nc_def_var (ncID, "V_thermal", NC_DOUBLE, 1, &TimeDimID, &ThVelID);
185   - nc_def_var (ncID, "Velocity", NC_DOUBLE, 2, DataDimVector, &VelID);
186   - nc_def_var (ncID, "Temperature", NC_DOUBLE, 2, DataDimVector, &TempID);
187   - nc_def_var (ncID, "B_Temperature", NC_DOUBLE, 2, DataDimVector, &MfTempID);
188   - nc_def_var (ncID, "Flux_tot", NC_DOUBLE, 2, DataDimVector, &Flux2ID);
189   - nc_def_var (ncID, "Symm", NC_DOUBLE, 2, DataDimVector, &SymmID);
190   - nc_def_var (ncID, "tensor_p", NC_DOUBLE, 2, Data2DimVector, &prTenID);
191   - nc_def_var (ncID, "tensor_mf", NC_DOUBLE, 2, Data2DimVector, &mfTenID);
192   -
193   - nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
194   - nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
195   -
196   -
197   -
198   -
199   - nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
200   - nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
201   - nc_put_att_text(ncID, DensID, "Units", 5, "cm^-3");
202   - nc_put_att_text(ncID, TempID, "Units", 2, "eV");
203   - nc_put_att_text(ncID, TempID, "Frame", 2, "FA");
204   - nc_put_att_text(ncID, TempID, "Order", 16, "perp1,perp2,para");
205   - nc_put_att_text(ncID, MfTempID, "Units", 2, "eV");
206   - nc_put_att_text(ncID, MfTempID, "Frame", 2, "FA");
207   - nc_put_att_text(ncID, MfTempID, "Order", 16, "perp1,perp2,para");
208   - nc_put_att_text(ncID, AvTempID, "Units", 2, "eV");
209   - nc_put_att_text(ncID, prTenID, "Units", 2, "eV");
210   - nc_put_att_text(ncID, prTenID, "Frame", 3, "DSL");
211   - nc_put_att_text(ncID, prTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
212   - nc_put_att_text(ncID, mfTenID, "Units", 2, "eV");
213   - nc_put_att_text(ncID, mfTenID, "Frame", 3, "DSL");
214   - nc_put_att_text(ncID, mfTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
215   - nc_put_att_text(ncID, Flux2ID, "Units", 9, "#/sec/cm2");
216   - nc_put_att_text(ncID, PotID, "Units", 1, "V");
217   - nc_put_att_text(ncID, SymmID, "Frame", 3, "DSL");
218   - nc_put_att_text(ncID, CurrID, "Units", 7, "Unknown");
219   - nc_put_att_text(ncID, SymAngID, "Units", 7, "degrees");
220   - nc_put_att_text(ncID, VelID, "Units", 4, "km/s");
221   - nc_put_att_text(ncID, ThVelID, "Units", 4, "km/s");
222   - nc_put_att_text(ncID, VelID, "Frame", 3, "GSE");
223   -
224   -
225   -
226   - time(&p);
227   - s = ctime(&p);
228   - nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
229   -
230   -
231   -
232   - memcpy(&(ncSpFile[1]),&(mode[0]), 4);
233   - STime = Double2DD_Time(Time);
234   - memcpy(&(ncSpFile[5]),&(STime[2]), 9);
235   - if ((status = nc_create(ncSpFile, NC_CLOBBER, &ncSpID)) != NC_NOERR)
236   - nc_handle_error(status);
237   -
238   - status = nc_def_dim (ncSpID, "Time", NC_UNLIMITED, &TimeDimSpID);
239   - status = nc_def_dim (ncSpID, "TimeLength", TIMELENGTH, &TimeLengthSpID);
240   - status = nc_def_dim (ncSpID, "Data",3L, &DataSpID);
241   - status = nc_def_dim (ncSpID, "Flux",32L, &FluxDimID);
242   -
243   - FluxDimVector[0] = TimeDimSpID;
244   - FluxDimVector[1] = FluxDimID;
245   -
246   -//ModeID, DensID, VelID, TempID;
247   -
248   - status = nc_def_var (ncSpID, "Time", NC_CHAR, 2, TimeDimVector, &TimeSpID);
249   - status = nc_def_var (ncSpID, "Mode", NC_FLOAT, 2, DataDimVector, &ModeSpID);
250   - status = nc_def_var (ncSpID, "Flux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
251   -
252   - status = nc_def_var (ncSpID, "StartTime", NC_CHAR, 1, &TimeLengthSpID, &StartTimeSpID);
253   - status = nc_def_var (ncSpID, "StopTime", NC_CHAR, 1, &TimeLengthSpID , &StopTimeSpID);
254   -
255   - status = nc_put_att_text(ncSpID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
256   - status = nc_put_att_text(ncSpID, NC_GLOBAL, "Created", 24, s);
257   -
258   - status = nc_enddef(ncID);
259   - status = nc_enddef(ncSpID);
260   -
261   - nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
262   - nc_put_vara_text(ncSpID, StartTimeSpID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
263   -
264   - }
265   -
266   - void put_double(RecStart, RecCount, ParCDF, ParNC) {
267   -
268   -
269   - long RecInt = 1;
270   - long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
271   -
272   - double *value;
273   -
274   - value = (double *)malloc(sizeof(double)*RecCount);
275   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
276   - zVAR_RECNUMBER_, RecStart ,
277   - zVAR_RECCOUNT_, RecCount,
278   - zVAR_RECINTERVAL_, RecInt,
279   - zVAR_DIMINDICES_, indices,
280   - zVAR_DIMCOUNTS_, counts,
281   - zVAR_DIMINTERVALS_, intervals,
282   - GET_, zVAR_HYPERDATA_, value, NULL_))
283   - != CDF_OK) cdf_handle_error(cstatus);
284   - nc_put_var_double(ncID, ParNC, value);
285   -
286   - free(value);
287   - }
288   -
289   - void put_double3(RecStart, RecCount, ParCDF, ParNC) {
290   -
291   - long RecInt = 1;
292   - long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
293   - double *value;
294   -
295   - value = (double *)malloc(sizeof(double)*RecCount*3);
296   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
297   - zVAR_RECNUMBER_, RecStart ,
298   - zVAR_RECCOUNT_, RecCount,
299   - zVAR_RECINTERVAL_, RecInt,
300   - zVAR_DIMINDICES_, indices,
301   - zVAR_DIMCOUNTS_, counts,
302   - zVAR_DIMINTERVALS_, intervals,
303   - GET_, zVAR_HYPERDATA_, value, NULL_))
304   - != CDF_OK) cdf_handle_error(cstatus);
305   - nc_put_var_double(ncID, ParNC, value);
306   -
307   - free(value);
308   - }
309   -
310   -void put_double6(RecStart, RecCount, ParCDF, ParNC) {
311   -
312   - long RecInt = 1;
313   - long indices[2] = {0,6}, intervals[1] = {1}, counts[1] = {6};
314   - double *value;
315   -
316   - value = (double *)malloc(sizeof(double)*RecCount*6);
317   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
318   - zVAR_RECNUMBER_, RecStart ,
319   - zVAR_RECCOUNT_, RecCount,
320   - zVAR_RECINTERVAL_, RecInt,
321   - zVAR_DIMINDICES_, indices,
322   - zVAR_DIMCOUNTS_, counts,
323   - zVAR_DIMINTERVALS_, intervals,
324   - GET_, zVAR_HYPERDATA_, value, NULL_))
325   - != CDF_OK) cdf_handle_error(cstatus);
326   - nc_put_var_double(ncID, ParNC, value);
327   -
328   - free(value);
329   - }
330   -
331   - void put_mode(RecStart, RecCount, ParCDF, ParNC, ParSpNC) {
332   -
333   - float *value;
334   - long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
335   - long RecInt = 1;
336   -
337   - value = (float *)malloc(sizeof(float) * RecCount *3);
338   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
339   - zVAR_RECNUMBER_, RecStart ,
340   - zVAR_RECCOUNT_, RecCount,
341   - zVAR_RECINTERVAL_, RecInt,
342   - zVAR_DIMINDICES_, indices,
343   - zVAR_DIMCOUNTS_, counts,
344   - zVAR_DIMINTERVALS_, intervals,
345   - GET_, zVAR_HYPERDATA_, value, NULL_))
346   - != CDF_OK) cdf_handle_error(cstatus);
347   - nc_put_var_float(ncID, ParNC, value);
348   - nc_put_var_float(ncSpID, ParSpNC, value);
349   - free(value);
350   - }
351   -
352   -void put_spectra(RecStart, RecCount, ParCDF, ParNC) {
353   -
354   - double *value;
355   - long indices[2] = {0,32}, intervals[1] = {1}, counts[1] = {32};
356   - long RecInt = 1;
357   -
358   - value = (double *)malloc(sizeof(double)*RecCount*32);
359   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
360   - zVAR_RECNUMBER_, RecStart ,
361   - zVAR_RECCOUNT_, RecCount,
362   - zVAR_RECINTERVAL_, RecInt,
363   - zVAR_DIMINDICES_, indices,
364   - zVAR_DIMCOUNTS_, counts,
365   - zVAR_DIMINTERVALS_, intervals,
366   - GET_, zVAR_HYPERDATA_, value, NULL_))
367   - != CDF_OK) cdf_handle_error(cstatus);
368   - nc_put_var_double(ncSpID, ParNC, value);
369   - free(value);
370   - }
371   -/*--------------------------------------------------------------------------*/
372   -int main(int argc, char *argv[])
373   -{
374   - long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
375   - long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
376   - long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
377   - double *value;
378   - float *value_f;
379   - size_t numElem;
380   - long dimN, varN, par0, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10, par11, par12, par13, par14, par15, par16;
381   -
382   - CDFid id;
383   - int i, j, status;
384   - char fileName[MAX_FILE_NAME_LEN];
385   - dd_tmstr_t *dtm;
386   - int First = 1;
387   - double par[3], parr[6], doubleVal, parD[32];
388   - float parF[32], par_f[3], parr_f[6], floatVal;
389   - double DayOld;
390   -
391   -
392   - char *UT;
393   - char data_set[8]="thx_pexx";
394   -/*-------------------------------- Arguments Decoding ----------------------------------------*/
395   - if (argc <= 3) usage(); // CDF input file name and THEMIS Number not specified
396   - else
397   - {
398   - strcpy(fileName, argv[1]);
399   - strncpy(ThemisID,argv[2],3);
400   - strncpy(mode,argv[3],4);
401   - }
402   -
403   -/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
404   -
405   - memcpy(&(data_set[2]),&(ThemisID[2]),1);
406   - memcpy(&(data_set[6]),&(mode[2]),2);
407   -
408   - memcpy(&(ThemisTime[0]),&(data_set[0]),8);
409   - memcpy(&(PAR0[0]),&(data_set[0]),8);
410   - memcpy(&(PAR1[0]),&(data_set[0]),8);
411   - memcpy(&(PAR2[0]),&(data_set[0]),8);
412   - memcpy(&(PAR3[0]),&(data_set[0]),8);
413   - memcpy(&(PAR4[0]),&(data_set[0]),8);
414   - memcpy(&(PAR5[0]),&(data_set[0]),8);
415   - memcpy(&(PAR6[0]),&(data_set[0]),8);
416   - memcpy(&(PAR7[0]),&(data_set[0]),8);
417   - memcpy(&(PAR8[0]),&(data_set[0]),8);
418   - memcpy(&(PAR9[0]),&(data_set[0]),8);
419   - memcpy(&(PAR10[0]),&(data_set[0]),8);
420   - memcpy(&(PAR11[0]),&(data_set[0]),8);
421   - memcpy(&(PAR12[0]),&(data_set[0]),8);
422   - memcpy(&(PAR13[0]),&(data_set[0]),8);
423   - memcpy(&(PAR14[0]),&(data_set[0]),8);
424   - memcpy(&(PAR15[0]),&(data_set[0]),8);
425   - memcpy(&(PAR16[0]),&(data_set[0]),8);
426   -
427   -/*********************** Open CDF file *****************************/
428   - if ((cstatus = CDFopen(fileName, &id)) != CDF_OK)
429   - cdf_handle_error(cstatus);
430   - printf(" THEMIS %s %s\n", ThemisID, mode);
431   -
432   -/*********** treat all vars as zVars with eliminated false dimensionality **********/
433   -
434   - if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
435   - cdf_handle_error (cstatus);
436   -
437   -/************************ Get CDF Data ************************************/
438   -
439   - cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
440   - cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
441   -
442   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);
443   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_);
444   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_);
445   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR3, &par3, NULL_);
446   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR4, &par4, NULL_);
447   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR5, &par5, NULL_);
448   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR6, &par6, NULL_);
449   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR7, &par7, NULL_);
450   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR8, &par8, NULL_);
451   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR9, &par9, NULL_);
452   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR10, &par10, NULL_);
453   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR11, &par11, NULL_);
454   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR12, &par12, NULL_);
455   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR13, &par13, NULL_);
456   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR14, &par14, NULL_);
457   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR15, &par15, NULL_);
458   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR16, &par16, NULL_);
459   -
460   - RecCount = (long)(MaxRec+1);
461   - printf(" Max Rec %d\n", MaxRec);
462   -
463   - if (MaxRec <= 0) exit(0);
464   -
465   - value = (double *)malloc(sizeof(double)* RecCount);
466   - if ((cstatus = CDFlib (SELECT_,
467   - zVAR_, varN,
468   - zVAR_RECNUMBER_, RecStart ,
469   - zVAR_RECCOUNT_, RecCount,
470   - zVAR_RECINTERVAL_, RecInt,
471   - zVAR_DIMINDICES_, indices,
472   - zVAR_DIMCOUNTS_, countsE,
473   - zVAR_DIMINTERVALS_, intervals,
474   - GET_, zVAR_HYPERDATA_, value, NULL_) )
475   - != CDF_OK) cdf_handle_error(cstatus);
476   -
477   - for (i = 0; i < RecCount; i++) {
478   -
479   -
480   - UT = Double2DD_Time(value[i]);
481   -
482   - if ((First == 0) && (value[i] - DayOld) > TimeGap) {
483   -
484   - printf("GAP %f\n",(value[i] - DayOld)/60.0);
485   - put_double(RecStart, (long)i - RecStart, par0, DeltaTID);
486   - put_mode(RecStart, (long)i - RecStart, par1, ModeID, ModeSpID);
487   - put_double(RecStart, (long)i - RecStart, par2, DensID);
488   - put_double3(RecStart, (long)i - RecStart, par3, VelID);
489   - put_double3(RecStart,(long)i - RecStart, par4, TempID);
490   - put_double3(RecStart, (long)i - RecStart, par11, MfTempID);
491   - put_double3(RecStart, (long)i - RecStart, par14, Flux2ID);
492   - put_double3(RecStart, (long)i - RecStart, par15, SymmID);
493   - put_double6(RecStart, (long)i - RecStart, par12, prTenID);
494   - put_double6(RecStart, (long)i - RecStart, par13, mfTenID);
495   - put_double(RecStart, (long)i - RecStart, par7, AvTempID);
496   - put_double(RecStart, (long)i - RecStart, par8, ThVelID);
497   - put_double(RecStart, (long)i - RecStart, par9, PotID);
498   - put_double(RecStart, (long)i - RecStart, par16, SymAngID);
499   - put_spectra(RecStart, (long)i - RecStart, par5, FluxID);
500   -
501   - nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));
502   - nc_put_vara_text(ncSpID,StopTimeSpID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));
503   -
504   - if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
505   - if ((status = nc_close(ncSpID)) != NC_NOERR) nc_handle_error(status);
506   - First = 1;
507   - RecStart = (long)i;
508   - UT = Double2DD_Time(value[i]);
509   - }
510   -
511   - dtm = ReadTime(UT);
512   - if (First == 1) {
513   - ncdefine(dtm->times);
514   -
515   - First = 0;
516   - Start[0] = 0;
517   -
518   - }
519   - nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
520   - nc_put_vara_text(ncSpID, TimeSpID, Start, TimeCount, UT);
521   - Start[0]++;
522   - DayOld = value[i];
523   -
524   - }
525   - free(value);
526   - nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT);
527   - nc_put_vara_text(ncSpID,StopTimeSpID, &Start[1], &TimeCount[1], UT);
528   -
529   -
530   - put_double(RecStart, RecCount - RecStart, par0, DeltaTID);
531   - put_mode(RecStart, RecCount - RecStart, par1, ModeID, ModeSpID);
532   - put_double(RecStart, RecCount - RecStart, par2, DensID);
533   - put_double3(RecStart, RecCount - RecStart, par3, VelID);
534   - put_double3(RecStart, RecCount - RecStart, par4, TempID);
535   - put_double3(RecStart, RecCount - RecStart, par11, MfTempID);
536   - put_double3(RecStart, RecCount - RecStart, par14, Flux2ID);
537   - put_double3(RecStart, RecCount - RecStart, par15, SymmID);
538   - put_double6(RecStart, RecCount - RecStart, par12, prTenID);
539   - put_double6(RecStart, RecCount - RecStart, par13, mfTenID);
540   - put_double(RecStart, RecCount - RecStart, par7, AvTempID);
541   - put_double(RecStart, RecCount - RecStart, par8, ThVelID);
542   - put_double(RecStart, RecCount - RecStart, par9, PotID);
543   - put_double(RecStart, RecCount - RecStart, par16, SymAngID);
544   - put_spectra(RecStart, RecCount - RecStart, par5, FluxID);
545   -
546   -/********************Close Files******************/
547   - if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
548   - cdf_handle_error (cstatus);
549   - if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
550   - if ((status = nc_close(ncSpID)) != NC_NOERR) nc_handle_error(status);
551   -}
src/DECODERS/themis/esafull2nc/CMakeLists.txt deleted
... ... @@ -1,26 +0,0 @@
1   -
2   -PROJECT(themis_esafull2nc)
3   -
4   -include_directories(
5   - ${DDCLIENTINCLUDE_DIR}
6   - ${NETCDFINCLUDE_DIR}
7   - ${libcdf_INCLUDE_DIR}
8   -)
9   -
10   -#Configuration de l'exécutable
11   -file(
12   - GLOB_RECURSE
13   - source_files
14   - ./*
15   -)
16   -
17   -ADD_EXECUTABLE (themis_esafull2nc ${source_files} )
18   -
19   -target_link_libraries(
20   - themis_esafull2nc
21   - ${DDCLIENTLIBRARY}
22   - ${NETCDFLIBRARY}
23   - ${libcdf_LIBRARIES}
24   -)
25   -
26   -install (TARGETS themis_esafull2nc DESTINATION bin)
src/DECODERS/themis/esamom2nc/CMakeLists.txt deleted
... ... @@ -1,26 +0,0 @@
1   -
2   -PROJECT(themis_esamom2nc)
3   -
4   -include_directories(
5   - ${DDCLIENTINCLUDE_DIR}
6   - ${NETCDFINCLUDE_DIR}
7   - ${libcdf_INCLUDE_DIR}
8   -)
9   -
10   -#Configuration de l'exécutable
11   -file(
12   - GLOB_RECURSE
13   - source_files
14   - ./*
15   -)
16   -
17   -ADD_EXECUTABLE (themis_esamom2nc ${source_files} )
18   -
19   -target_link_libraries(
20   - themis_esamom2nc
21   - ${DDCLIENTLIBRARY}
22   - ${NETCDFLIBRARY}
23   - ${libcdf_LIBRARIES}
24   -)
25   -
26   -install (TARGETS themis_esamom2nc DESTINATION bin)
src/DECODERS/themis/fgm2nc/CMakeLists.txt deleted
... ... @@ -1,26 +0,0 @@
1   -
2   -PROJECT(themis_fgm2nc)
3   -
4   -include_directories(
5   - ${DDCLIENTINCLUDE_DIR}
6   - ${NETCDFINCLUDE_DIR}
7   - ${libcdf_INCLUDE_DIR}
8   -)
9   -
10   -#Configuration de l'exécutable
11   -file(
12   - GLOB_RECURSE
13   - source_files
14   - ./*
15   -)
16   -
17   -ADD_EXECUTABLE (themis_fgm2nc ${source_files} )
18   -
19   -target_link_libraries(
20   - themis_fgm2nc
21   - ${DDCLIENTLIBRARY}
22   - ${NETCDFLIBRARY}
23   - ${libcdf_LIBRARIES}
24   -)
25   -
26   -install (TARGETS themis_fgm2nc DESTINATION bin)
src/DECODERS/themis/sst2nc/CMakeLists.txt deleted
... ... @@ -1,26 +0,0 @@
1   -
2   -PROJECT(themis_sst2nc)
3   -
4   -include_directories(
5   - ${DDCLIENTINCLUDE_DIR}
6   - ${NETCDFINCLUDE_DIR}
7   - ${libcdf_INCLUDE_DIR}
8   -)
9   -
10   -#Configuration de l'exécutable
11   -file(
12   - GLOB_RECURSE
13   - source_files
14   - ./*
15   -)
16   -
17   -ADD_EXECUTABLE (themis_sst2nc ${source_files} )
18   -
19   -target_link_libraries(
20   - themis_sst2nc
21   - ${DDCLIENTLIBRARY}
22   - ${NETCDFLIBRARY}
23   - ${libcdf_LIBRARIES}
24   -)
25   -
26   -install (TARGETS themis_sst2nc DESTINATION bin)
src/DECODERS/themis/esafull2nc/themis_esafull2nc.c renamed to src/DECODERS/themis/themis_esa2nc.c
... ... @@ -3,8 +3,8 @@
3 3 /* 04.01.2008 */
4 4 /* V 1.1 */
5 5 /* Energy in info file */
6   - /* New CDF with ALL modes and new params */
7   - /* 04.01.2008 - 2 files for peir & peer modes */
  6 + /* New CDF with ALL modes and new params */
  7 + /* 04.01.2008 - 2 files for peir & peer modes */
8 8 /**************************************************************/
9 9  
10 10 #include <stdio.h>
... ... @@ -45,7 +45,7 @@ struct cdfvar { // CDF variable structure
45 45  
46 46 char mode[4];
47 47 int ncID, ncSpID;
48   -char ncFile[] = "peif000000000.nc";
  48 +char ncFile[] = "peif_000000000.nc";
49 49 int TimeDimID, TimeLengthID, DataID, Data2ID, FluxDimID;;
50 50 int TimeDimVector[2], DataDimVector[2], Data2DimVector[2], FluxDimVector[2]; // netCDF Dim vectors
51 51 size_t Start[2] = {0L,0L};
... ... @@ -197,7 +197,7 @@ void removeCDFext (char *fileName)
197 197 /*********************** Create netCDF file *****************************/
198 198 memcpy(&(ncFile[0]),&(mode[0]), 4);
199 199 STime = Double2DD_Time(Time);
200   - memcpy(&(ncFile[4]),&(STime[2]), 9);
  200 + memcpy(&(ncFile[5]),&(STime[2]), 9);
201 201 if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
202 202 nc_handle_error(status);
203 203 /******************netCDF Dimensions *******************************/
... ... @@ -221,28 +221,25 @@ void removeCDFext (char *fileName)
221 221 //ModeID, DensID, VelID, TempID;
222 222 nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
223 223  
224   - nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
225   - nc_def_var (ncID, "Mode", NC_FLOAT, 2, DataDimVector, &ModeID);
226   - nc_def_var (ncID, "Density", NC_DOUBLE, 1, &TimeDimID, &DensID);
227   - nc_def_var (ncID, "AvTemp", NC_DOUBLE, 1, &TimeDimID, &AvTempID);
228   - nc_def_var (ncID, "Potential", NC_DOUBLE, 1, &TimeDimID, &PotID);
229   - nc_def_var (ncID, "Current", NC_DOUBLE, 1, &TimeDimID, &CurrID);
230   - nc_def_var (ncID, "SymAngle", NC_DOUBLE, 1, &TimeDimID, &SymAngID);
231   - nc_def_var (ncID, "V_thermal", NC_DOUBLE, 1, &TimeDimID, &ThVelID);
232   - nc_def_var (ncID, "Velocity", NC_DOUBLE, 2, DataDimVector, &VelID);
233   - nc_def_var (ncID, "Temperature", NC_DOUBLE, 2, DataDimVector, &TempID);
234   - nc_def_var (ncID, "B_Temperature", NC_DOUBLE, 2, DataDimVector, &MfTempID);
235   - nc_def_var (ncID, "Flux_tot", NC_DOUBLE, 2, DataDimVector, &Flux2ID);
236   - nc_def_var (ncID, "Symm", NC_DOUBLE, 2, DataDimVector, &SymmID);
237   - nc_def_var (ncID, "tensor_p", NC_DOUBLE, 2, Data2DimVector, &prTenID);
238   - nc_def_var (ncID, "tensor_mf", NC_DOUBLE, 2, Data2DimVector, &mfTenID);
239   - nc_def_var (ncID, "Flux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
240   - // nc_def_var (ncID, "Energy", NC_FLOAT, 2, FluxDimVector, &EnID);
  224 + nc_def_var (ncID, "delta_time", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
  225 + nc_def_var (ncID, "mode", NC_FLOAT, 2, DataDimVector, &ModeID);
  226 + nc_def_var (ncID, "density", NC_DOUBLE, 1, &TimeDimID, &DensID);
  227 + nc_def_var (ncID, "avgtemp", NC_DOUBLE, 1, &TimeDimID, &AvTempID);
  228 + nc_def_var (ncID, "sc_pot", NC_DOUBLE, 1, &TimeDimID, &PotID);
  229 + nc_def_var (ncID, "sc_current", NC_DOUBLE, 1, &TimeDimID, &CurrID);
  230 + nc_def_var (ncID, "symm_ang", NC_DOUBLE, 1, &TimeDimID, &SymAngID);
  231 + nc_def_var (ncID, "vthermal", NC_DOUBLE, 1, &TimeDimID, &ThVelID);
  232 + nc_def_var (ncID, "velocity_gse", NC_DOUBLE, 2, DataDimVector, &VelID);
  233 + nc_def_var (ncID, "t3", NC_DOUBLE, 2, DataDimVector, &TempID);
  234 + nc_def_var (ncID, "magt3", NC_DOUBLE, 2, DataDimVector, &MfTempID);
  235 + nc_def_var (ncID, "flux", NC_DOUBLE, 2, DataDimVector, &Flux2ID);
  236 + nc_def_var (ncID, "symm", NC_DOUBLE, 2, DataDimVector, &SymmID);
  237 + nc_def_var (ncID, "ptens", NC_DOUBLE, 2, Data2DimVector, &prTenID);
  238 + nc_def_var (ncID, "mftens", NC_DOUBLE, 2, Data2DimVector, &mfTenID);
  239 + nc_def_var (ncID, "en_eflux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
  240 + nc_def_var (ncID, "en_eflux_yaxis", NC_FLOAT, 2, FluxDimVector, &EnID);
241 241 nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
242 242 nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
243   -
244   -
245   -
246 243  
247 244 nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
248 245 nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
... ...
src/DECODERS/themis/esamom2nc/themis_esamom2nc.c renamed to src/DECODERS/themis/themis_esamom2nc.c
src/DECODERS/themis/fgm2nc/themis_fgm2nc.c renamed to src/DECODERS/themis/themis_fgm2nc.c
1   - /************************************************************/
2   - /* THEMIS FGM CDF -> DD netCDF */
3   -/* NaN -> -1.e31 */
4   - /* 12.10.2007 */
5   - /* V 1.0 */
6   - /***********************************************************/
  1 +/***********************************************************/
  2 +/* THEMIS FGM CDF -> DD netCDF */
  3 +/* NaN -> -1.e31 */
  4 +/* 12.10.2007 */
  5 +/* V 1.0 */
  6 +/***********************************************************/
7 7 #include <stdio.h>
8 8 #include <stdlib.h>
9 9 #include <netcdf.h>
... ... @@ -22,29 +22,29 @@
22 22 /*************************************
23 23 Global variables and structures
24 24 **************************************/
25   -long CDFDims, // Number of dimensions in a CDF file
26   - CDFVars, // Number of variables in a CDF file
27   - CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file
28   - CDFencoding, // Data encoding
29   - CDFmajority, // Variable majority
30   - CDFmaxRec, // max Record number
31   - CDFAttrs; // number of CDF Attributes
32   -
33   -
34   -struct cdfvar { // CDF variable structure
35   - char name[CDF_VAR_NAME_LEN+1];
36   - long num; //variable number
37   - long datatype;
38   - long numElem; // variable dimensionality
39   - long recVariance; // variable rec Variance
40   - long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes
  25 +long CDFDims, // Number of dimensions in a CDF file
  26 + CDFVars, // Number of variables in a CDF file
  27 + CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file
  28 + CDFencoding, // Data encoding
  29 + CDFmajority, // Variable majority
  30 + CDFmaxRec, // max Record number
  31 + CDFAttrs; // number of CDF Attributes
  32 +
  33 +
  34 +struct cdfvar { // CDF variable structure
  35 + char name[CDF_VAR_NAME_LEN+1];
  36 + long num; //variable number
  37 + long datatype;
  38 + long numElem; // variable dimensionality
  39 + long recVariance; // variable rec Variance
  40 + long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes
41 41 } cdfVar[MAX_VARS];
42 42  
43 43  
44 44 int ncID;
45   -char ncFile[] = "fgmh000000000.nc";
46   -int TimeDimID, TimeLengthID, DataID; // ID of netCDF dimensions
47   -int TimeDimVector[2], DataDimVector[2]; // netCDF Dim vectors
  45 +char ncFile[] = "high_000000000.nc";
  46 +int TimeDimID, TimeLengthID, DataID; // ID of netCDF dimensions
  47 +int TimeDimVector[2], DataDimVector[2]; // netCDF Dim vectors
48 48 size_t Start[2] = {0L,0L};
49 49 size_t TimeCount[2] = {1L,TIMELENGTH};
50 50 size_t DataCount[2] = {1L,3L};
... ... @@ -56,11 +56,11 @@ char PAR0[]=&quot;tha_fgh_gse&quot;;
56 56 float FillValue[3] = {-1.e31,-1.e31,-1.e31};
57 57  
58 58 int StartTimeID, StopTimeID;
59   -int FGMID; // Data netCDF Variables
60   -int TimeID; // Time netCDF variable
  59 +int FGMID; // Data netCDF Variables
  60 +int TimeID; // Time netCDF variable
61 61  
62   -char StartT[TIMELENGTH]; // Start time from data
63   -char StopT[TIMELENGTH]; // Stop time from data
  62 +char StartT[TIMELENGTH]; // Start time from data
  63 +char StopT[TIMELENGTH]; // Stop time from data
64 64 /**************************
65 65 Function prototypes
66 66 **************************/
... ... @@ -74,14 +74,14 @@ void removeVers();
74 74 /*--------------------------------------------------------------------------*/
75 75 void usage()
76 76 {
77   - printf ("\nDescription:\n");
78   - printf (" This program converts a themis CDF file into a netCDF file.\n");
79   - printf ("\n");
80   - printf ("Usage: fgm2nc <CDF file name> <ThemisID> <Resolution>\n");
81   - printf ("\n");
82   - printf ("Example: fgm2nc testfile tha h\n");
83   - printf ("\n");
84   - exit(1);
  77 + printf ("\nDescription:\n");
  78 + printf ("This program converts a themis CDF file into a netCDF file.\n");
  79 + printf ("\n");
  80 + printf ("Usage: fgm2nc <CDF file name> <ThemisID> <Resolution>\n");
  81 + printf ("\n");
  82 + printf ("Example: fgm2nc testfile tha h\n");
  83 + printf ("\n");
  84 + exit(1);
85 85 }
86 86 /*--------------------------------------------------------------------------
87 87 * Handles a CDF error.
... ... @@ -89,19 +89,19 @@ void usage()
89 89 void cdf_handle_error(CDFstatus status)
90 90 {
91 91  
92   - char message[CDF_STATUSTEXT_LEN+1];
  92 + char message[CDF_STATUSTEXT_LEN+1];
93 93  
94   - CDFerror (status, message); /* Get the appropriate message */
95   - fprintf (stderr, "%s\n", message);
96   - exit(1);
  94 + CDFerror (status, message); /* Get the appropriate message */
  95 + fprintf (stderr, "%s\n", message);
  96 + exit(1);
97 97 }
98 98 /*--------------------------------------------------------------------------
99 99 * Handles a netCDF error.
100 100 *--------------------------------------------------------------------------*/
101 101 void nc_handle_error(int status)
102 102 {
103   - fprintf(stderr, "%s\n", nc_strerror(status));
104   - exit(1);
  103 + fprintf(stderr, "%s\n", nc_strerror(status));
  104 + exit(1);
105 105 }
106 106 /*--------------------------------------------------------------------------
107 107 * Remove the filepath from a file name. *
... ... @@ -110,13 +110,13 @@ void nc_handle_error(int status)
110 110 *--------------------------------------------------------------------------*/
111 111 void removeFilepath (char *fileName)
112 112 {
113   - char *ptr;
  113 + char *ptr;
114 114  
115   - ptr = strrchr(fileName, '/'); // Unix file path separator
116   - if (ptr != NULL)
117   - {
118   - ptr++;
119   - strcpy(fileName, ptr);
  115 + ptr = strrchr(fileName, '/'); // Unix file path separator
  116 + if (ptr != NULL)
  117 + {
  118 + ptr++;
  119 + strcpy(fileName, ptr);
120 120 }
121 121 }
122 122 /*--------------------------------------------------------------------------
... ... @@ -124,228 +124,224 @@ void removeFilepath (char *fileName)
124 124 *--------------------------------------------------------------------------*/
125 125 void removeVers (char *fileName)
126 126 {
127   - char *ptr;
128   - char zero = '\0';
129   - int i;
  127 + char *ptr;
  128 + char zero = '\0';
  129 + int i;
130 130  
131   - for (i = 0; i < 9; i++)
132   - {
133   - ptr = strchr(fileName, '_');
134   - if (ptr != NULL)
135   - {
136   - ptr++;
137   - strcpy(fileName, ptr);
138   - }
139   - }
140   - ptr = strchr(fileName, '_'); //
141   -
142   - if (ptr != NULL)
143   - {
144   - ptr++;
145   - strncpy(Version, ptr, 2);
146   - }
147   - }
  131 + for (i = 0; i < 9; i++)
  132 + {
  133 + ptr = strchr(fileName, '_');
  134 + if (ptr != NULL)
  135 + {
  136 + ptr++;
  137 + strcpy(fileName, ptr);
  138 + }
  139 + }
  140 + ptr = strchr(fileName, '_'); //
  141 +
  142 + if (ptr != NULL)
  143 + {
  144 + ptr++;
  145 + strncpy(Version, ptr, 2);
  146 + }
  147 +}
148 148  
149   - /*--------------------------------------------------------------------------
150   - * Remove the CDF extention *
151   - *--------------------------------------------------------------------------*/
  149 +/*--------------------------------------------------------------------------
  150 +* Remove the CDF extention *
  151 +*--------------------------------------------------------------------------*/
152 152 void removeCDFext (char *fileName)
153 153 {
154   - char *ptr;
155   - char zero = '\0';
  154 + char *ptr;
  155 + char zero = '\0';
156 156  
157   - ptr = strchr(fileName, '.');
158   - if (ptr != NULL)
159   - strcpy(ptr, &zero);
  157 + ptr = strchr(fileName, '.');
  158 + if (ptr != NULL)
  159 + strcpy(ptr, &zero);
160 160 }
161 161 /*--------------------------------------------------------------------------
162 162 * NetCDF File Definition *
163 163 *--------------------------------------------------------------------------*/
164   - void ncdefine(double Time, char *Sampling)
165   - {
166   - char *s;
167   - time_t p;
168   - int status;
169   - char *STime;
  164 +void ncdefine(double Time, char *Sampling)
  165 +{
  166 + char *s;
  167 + time_t p;
  168 + int status;
  169 + char *STime;
170 170  
171 171 /*********************** Create netCDF file *****************************/
172   - STime = Double2DD_Time(Time);
173   -
174   - memcpy(&(ncFile[3]),&(Sampling[0]), 1);
175   - memcpy(&(ncFile[4]),&(STime[2]), 9);
176   - if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
177   - nc_handle_error(status);
  172 + STime = Double2DD_Time(Time);
  173 +
  174 + // memcpy(&(ncFile[3]),&(Sampling[0]), 1);
  175 + memcpy(&(ncFile[5]),&(STime[2]), 9);
  176 + if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
  177 + nc_handle_error(status);
178 178 /******************netCDF Dimensions *******************************/
179   - nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
180   - nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
181   - nc_def_dim (ncID, "Data",3L, &DataID);
  179 + nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
  180 + nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
  181 + nc_def_dim (ncID, "Data",3L, &DataID);
182 182  
183 183 /********************netCDF Variables ******************/
184   - TimeDimVector[0] = TimeDimID;
185   - DataDimVector[0] = TimeDimID;
186   - TimeDimVector[1] = TimeLengthID;
187   - DataDimVector[1] = DataID;
188   -
189   -//ModeID, DensID, VelID, TempID;
190   - nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
191   - nc_def_var (ncID, "B", NC_FLOAT, 2, DataDimVector, &FGMID);
192   - nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
193   - nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
194   -
195   - nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
196   - nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
197   - nc_put_att_text(ncID, NC_GLOBAL, "Resolution", 1, Sampling);
198   - // nc_put_att_text(ncID, NC_GLOBAL, "Version", 2, Version);
199   - nc_put_att_text(ncID, FGMID, "Units", 2, "nT");
200   - nc_put_att_text(ncID, FGMID, "Frame", 3, "GSE");
201   -
202   - time(&p);
203   - s = ctime(&p);
204   - nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
205   - nc_enddef(ncID);
206   - nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
207   -
208   - }
  184 + TimeDimVector[0] = TimeDimID;
  185 + DataDimVector[0] = TimeDimID;
  186 + TimeDimVector[1] = TimeLengthID;
  187 + DataDimVector[1] = DataID;
  188 +
  189 + nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
  190 + nc_def_var (ncID, "gse", NC_FLOAT, 2, DataDimVector, &FGMID);
  191 + nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
  192 + nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
  193 +
  194 + nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
  195 + nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
  196 + nc_put_att_text(ncID, NC_GLOBAL, "Resolution", 1, Sampling);
  197 + // nc_put_att_text(ncID, NC_GLOBAL, "Version", 2, Version);
  198 + nc_put_att_text(ncID, FGMID, "Units", 2, "nT");
  199 + nc_put_att_text(ncID, FGMID, "Frame", 3, "GSE");
  200 +
  201 + time(&p);
  202 + s = ctime(&p);
  203 + nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
  204 + nc_enddef(ncID);
  205 + nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
  206 +
  207 +}
209 208 /*--------------------------------------------------------------------------*/
210 209 int main(int argc, char *argv[])
211 210 {
212   - long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
213   - long indices[1] = {0}, counts[1] = {3}, intervals[1] = {1};
214   - long countsE[1] = {1}, indicesF[2]={0,3};
215   - double *value;
216   - size_t numElem;
217   - long dimN, varN, par0, par1;
218   - CDFstatus cstatus; // CDF status code
219   - CDFid id;
220   - int i, j, status;
221   - char fileName[MAX_FILE_NAME_LEN];
222   - char Sampling[1];
223   - dd_tmstr_t *dtm;
224   - int First = 1;
225   - float par[3];
226   - long DayOld;
227   -
228   - char *UT;
  211 + long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
  212 + long indices[1] = {0}, counts[1] = {3}, intervals[1] = {1};
  213 + long countsE[1] = {1}, indicesF[2]={0,3};
  214 + double *value;
  215 + size_t numElem;
  216 + long dimN, varN, par0, par1;
  217 + CDFstatus cstatus; // CDF status code
  218 + CDFid id;
  219 + int i, j, status;
  220 + char fileName[MAX_FILE_NAME_LEN];
  221 + char Sampling[1];
  222 + dd_tmstr_t *dtm;
  223 + int First = 1;
  224 + float par[3];
  225 + long DayOld;
  226 +
  227 + char *UT;
229 228 /*-------------------------------- Arguments Decoding ----------------------------------------*/
230   - if (argc <= 3) usage(); // CDF input file name and HEMIS Number not specified
231   - else
232   - {
233   - strcpy(fileName, argv[1]);
234   - strncpy(ThemisID, argv[2], 3);
235   - strncpy(Sampling, argv[3], 1);
236   - }
237   -
238   -
  229 + if (argc <= 3) usage(); // CDF input file name and HEMIS Number not specified
  230 + else
  231 + {
  232 + strcpy(fileName, argv[1]);
  233 + strncpy(ThemisID, argv[2], 3);
  234 + strncpy(Sampling, argv[3], 1);
  235 + }
  236 +
239 237 /*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
240 238  
241   - memcpy(&(ThemisTime[2]),&(ThemisID[2]),1);
242   - memcpy(&(PAR0[2]),&(ThemisID[2]),1);
243   - memcpy(&(ThemisTime[6]),&(Sampling[0]),1);
244   - memcpy(&(PAR0[6]),&(Sampling[0]),1);
  239 + memcpy(&(ThemisTime[2]),&(ThemisID[2]),1);
  240 + memcpy(&(PAR0[2]),&(ThemisID[2]),1);
  241 + memcpy(&(ThemisTime[6]),&(Sampling[0]),1);
  242 + memcpy(&(PAR0[6]),&(Sampling[0]),1);
245 243  
246 244 /*********************** Open CDF file *****************************/
247   - if ((cstatus = CDFopen(fileName, &id)) != CDF_OK)
248   - cdf_handle_error(cstatus);
249   - printf(" %s %s\n", argv[2],argv[3]);
  245 + if ((cstatus = CDFopen(fileName, &id)) != CDF_OK)
  246 + cdf_handle_error(cstatus);
  247 + printf(" %s %s\n", argv[2],argv[3]);
250 248  
251 249 /*********** treat all vars as zVars with eliminated false dimensionality **********/
252 250  
253   - if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
254   - cdf_handle_error (cstatus);
  251 + if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
  252 + cdf_handle_error (cstatus);
255 253  
256   - // Remove the file path (/home/data/mydata => mydata)
257   - removeFilepath(fileName);
258   - // Remove Version Number
259   - removeVers(fileName);
  254 + // Remove the file path (/home/data/mydata => mydata)
  255 + removeFilepath(fileName);
  256 + // Remove Version Number
  257 + removeVers(fileName);
260 258  
261   - // Remove .cdf extension
262   - removeCDFext(fileName);
  259 + // Remove .cdf extension
  260 + removeCDFext(fileName);
263 261  
264 262 /************************ Get CDF Data ************************************/
265 263  
266   - if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_)) != CDF_OK)
267   - cdf_handle_error(cstatus) ;
268   - if ((cstatus = CDFlib( SELECT_, zVAR_, varN,
269   - GET_, zVAR_MAXREC_, &MaxRec, NULL_)) != CDF_OK)
270   - cdf_handle_error(cstatus) ;
271   -
272   -
273   - if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_)) != CDF_OK)
274   - cdf_handle_error(cstatus) ;
275   -
276   - if ((cstatus = CDFlib( SELECT_, zVAR_, par0,
277   - GET_, zVAR_DIMSIZES_, CDFDimSizes, NULL_)) != CDF_OK)
278   - cdf_handle_error (cstatus) ;
279   -
280   -
281   - RecCount = (long)(MaxRec+1);
282   - printf(" Max Rec %d\n", MaxRec);
283   - if (MaxRec > 1) {
284   - value = (double *)malloc(sizeof(double)* RecCount);
285   - if ((cstatus = CDFlib (SELECT_,
286   - zVAR_, varN,
287   - zVAR_RECNUMBER_, RecStart ,
288   - zVAR_RECCOUNT_, RecCount,
289   - zVAR_RECINTERVAL_, RecInt,
290   - zVAR_DIMINDICES_, indices,
291   - zVAR_DIMCOUNTS_, countsE,
292   - zVAR_DIMINTERVALS_, intervals,
293   - GET_, zVAR_HYPERDATA_, value, NULL_) )
294   - != CDF_OK) cdf_handle_error (cstatus);
295   -
296   - for (i = 0; i < RecCount; i++)
297   - {
298   -
299   - UT = Double2DD_Time(value[i]);
300   - dtm = ReadTime(UT);
301   -
302   - if (i > 0 && (value[i]-value[i-1]) > TimeGap)
303   - {
304   - printf(" !!! Time GAP -> %f min\n", (value[i]-value[i-1])/60.0);
305   - nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
306   - if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
307   - }
308   -
309   - if (First == 1)
310   - {
311   - ncdefine(dtm->times, Sampling);
312   - First = 0;
313   - DayOld = dtm->day;
314   - }
315   - if (i > 0 && (value[i]-value[i-1]) > TimeGap)
316   - {
317   - ncdefine(dtm->times, Sampling);
318   - Start[0] = 0L;
319   - }
320   - nc_put_vara_text(ncID, TimeID, Start, TimeCount, Double2DD_Time(dtm->times));
321   -
322   -
323   - RecStart = (long)i;
324   -
325   - if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
326   - zVAR_RECNUMBER_, RecStart ,
327   - zVAR_RECCOUNT_, RecCountF,
328   - zVAR_RECINTERVAL_, RecInt,
329   - zVAR_DIMINDICES_, indicesF,
330   - zVAR_DIMCOUNTS_, counts,
331   - zVAR_DIMINTERVALS_, intervals,
332   - GET_, zVAR_HYPERDATA_, par, NULL_))
333   - != CDF_OK) cdf_handle_error(cstatus);
334   - if (!isnan(par[0]))
335   - nc_put_vara_float(ncID, FGMID, Start, DataCount, par);
336   - else nc_put_vara_float(ncID, FGMID, Start, DataCount, FillValue);
337   -
338   -
339   - Start[0]++;
340   - DayOld = dtm->day;
341   - }
342   - nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
343   - free(value);
  264 + if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_)) != CDF_OK)
  265 + cdf_handle_error(cstatus) ;
  266 + if ((cstatus = CDFlib( SELECT_, zVAR_, varN,
  267 + GET_, zVAR_MAXREC_, &MaxRec, NULL_)) != CDF_OK)
  268 + cdf_handle_error(cstatus) ;
344 269  
345   - if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
346   - }
  270 + if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_)) != CDF_OK)
  271 + cdf_handle_error(cstatus) ;
  272 +
  273 + if ((cstatus = CDFlib( SELECT_, zVAR_, par0,
  274 + GET_, zVAR_DIMSIZES_, CDFDimSizes, NULL_)) != CDF_OK)
  275 + cdf_handle_error (cstatus) ;
  276 +
  277 + RecCount = (long)(MaxRec+1);
  278 + printf(" Max Rec %d\n", MaxRec);
  279 + if (MaxRec > 1)
  280 + {
  281 + value = (double *)malloc(sizeof(double)* RecCount);
  282 + if ((cstatus = CDFlib (SELECT_,
  283 + zVAR_, varN,
  284 + zVAR_RECNUMBER_, RecStart ,
  285 + zVAR_RECCOUNT_, RecCount,
  286 + zVAR_RECINTERVAL_, RecInt,
  287 + zVAR_DIMINDICES_, indices,
  288 + zVAR_DIMCOUNTS_, countsE,
  289 + zVAR_DIMINTERVALS_, intervals,
  290 + GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK)
  291 + cdf_handle_error (cstatus);
  292 +
  293 + for (i = 0; i < RecCount; i++)
  294 + {
  295 + UT = Double2DD_Time(value[i]);
  296 + dtm = ReadTime(UT);
  297 +
  298 + if (i > 0 && (value[i]-value[i-1]) > TimeGap)
  299 + {
  300 + printf(" !!! Time GAP -> %f min\n", (value[i]-value[i-1])/60.0);
  301 + nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
  302 + if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
  303 + }
  304 +
  305 + if (First == 1)
  306 + {
  307 + ncdefine(dtm->times, Sampling);
  308 + First = 0;
  309 + DayOld = dtm->day;
  310 + }
  311 +
  312 + if (i > 0 && (value[i]-value[i-1]) > TimeGap)
  313 + {
  314 + ncdefine(dtm->times, Sampling);
  315 + Start[0] = 0L;
  316 + }
  317 + nc_put_vara_text(ncID, TimeID, Start, TimeCount, Double2DD_Time(dtm->times));
  318 +
  319 + RecStart = (long)i;
  320 +
  321 + if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
  322 + zVAR_RECNUMBER_, RecStart ,
  323 + zVAR_RECCOUNT_, RecCountF,
  324 + zVAR_RECINTERVAL_, RecInt,
  325 + zVAR_DIMINDICES_, indicesF,
  326 + zVAR_DIMCOUNTS_, counts,
  327 + zVAR_DIMINTERVALS_, intervals,
  328 + GET_, zVAR_HYPERDATA_, par, NULL_))
  329 + != CDF_OK) cdf_handle_error(cstatus);
  330 + if (!isnan(par[0]))
  331 + nc_put_vara_float(ncID, FGMID, Start, DataCount, par);
  332 + else
  333 + nc_put_vara_float(ncID, FGMID, Start, DataCount, FillValue);
  334 +
  335 + Start[0]++;
  336 + DayOld = dtm->day;
  337 + }
  338 + nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
  339 + free(value);
  340 +
  341 + if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
  342 + }
  343 +
347 344 /********************Close Files******************/
348   - if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
349   - cdf_handle_error (cstatus);
350   -
  345 + if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
  346 + cdf_handle_error (cstatus);
351 347 }
... ...
src/DECODERS/themis/sst2nc/themis_sst2nc.c renamed to src/DECODERS/themis/themis_sst2nc.c
1 1 /**************************************************************/
2   - /* THEMIS ESA ION AND ELECTRON MOMENTS CDF -> DD netCDF */
  2 + /* THEMIS SST CDF -> DD netCDF */
3 3 /* 04.01.2008 */
4 4 /* V 1.1 */
5 5 /* Energy in info file */
6   - /* New CDF with ALL modes and new params */
7   - /* 04.01.2008 - 2 files for peir & peer modes */
  6 + /* New CDF with ALL modes and new params */
8 7 /**************************************************************/
9 8  
10 9 #include <stdio.h>
... ... @@ -25,49 +24,49 @@
25 24 /*************************************
26 25 Global variables and structures
27 26 **************************************/
28   -long CDFDims, // Number of dimensions in a CDF file
29   - CDFVars, // Number of variables in a CDF file
30   - CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file
31   - CDFencoding, // Data encoding
32   - CDFmajority, // Variable majority
33   - CDFmaxRec, // max Record number
34   - CDFAttrs; // number of CDF Attributes
35   -
36   -
37   -struct cdfvar { // CDF variable structure
38   - char name[CDF_VAR_NAME_LEN+1];
39   - long num; //variable number
40   - long datatype;
41   - long numElem; // variable dimensionality
42   - long recVariance; // variable rec Variance
43   - long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes
  27 +long CDFDims, // Number of dimensions in a CDF file
  28 + CDFVars, // Number of variables in a CDF file
  29 + CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file
  30 + CDFencoding, // Data encoding
  31 + CDFmajority, // Variable majority
  32 + CDFmaxRec, // max Record number
  33 + CDFAttrs; // number of CDF Attributes
  34 +
  35 +
  36 +struct cdfvar { // CDF variable structure
  37 + char name[CDF_VAR_NAME_LEN+1];
  38 + long num; // Variable number
  39 + long datatype;
  40 + long numElem; // variable dimensionality
  41 + long recVariance; // variable rec Variance
  42 + long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes
44 43 } cdfVar[MAX_VARS];
45 44  
46 45 char mode[4];
47 46 int ncID;
48   -char ncFile[] = "psif000000000.nc";
  47 +char ncFile[] = "psif_000000000.nc";
49 48 int TimeDimID, TimeLengthID, FluxDimID;
50   -int TimeDimVector[2], FluxDimVector[2]; // netCDF Dim vectors
  49 +int TimeDimVector[2], FluxDimVector[2]; // netCDF Dim vectors
51 50  
52 51 size_t Start[2] = {0L,0L};
53 52 size_t TimeCount[2] = {1L,TIMELENGTH};
54 53 size_t FluxCount[2] = {1L,16L};
55 54  
56   -CDFstatus cstatus; // CDF status code
  55 +CDFstatus cstatus; // CDF status code
57 56  
58 57 char Version[]="v01";
59 58 char ThemisID[]="tha\0";
60   -char ThemisTime[]="tha_psif_en_eflux_time";
61   -char PAR0[]="tha_psif_en_eflux_delta_time";
62   -char PAR1[]="tha_psif_en_eflux_mode";
  59 +char ThemisTime[]="tha_psif_time";
  60 +char PAR0[]="tha_psif_delta_time";
  61 +char PAR1[]="tha_psif_density";
63 62 char PAR2[]="tha_psif_en_eflux";
64 63  
65 64 int StartTimeID, StopTimeID;
66 65 int StartTimeSpID, StopTimeSpID;
67 66 int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID; // 1D
68   -int MfTempID, TempID, ModeID, ModeSpID, VelID, Flux2ID, SymmID; // 2D -> 3
  67 +int MfTempID, TempID, ModeID, ModeSpID, VelID, Flux2ID, SymmID; // 2D -> 3
69 68 int prTenID, mfTenID; // 2D -> 6
70   -int FluxID; // 2D -> 32
  69 +int FluxID; // 2D -> 32
71 70 int TimeID; // Time netCDF variable
72 71 int TimeSpID;
73 72  
... ... @@ -86,14 +85,14 @@ void ncdefine();
86 85 /*--------------------------------------------------------------------------*/
87 86 void usage()
88 87 {
89   - printf ("\nDescription:\n");
90   - printf (" This program converts a themis CDF file into a netCDF file.\n");
91   - printf ("\n");
92   - printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
93   - printf ("\n");
94   - printf ("Example: esa2nc testfile tha peif\n");
95   - printf ("\n");
96   - exit(1);
  88 + printf ("\nDescription:\n");
  89 + printf ("This program converts a themis CDF file into a netCDF file.\n");
  90 + printf ("\n");
  91 + printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
  92 + printf ("\n");
  93 + printf ("Example: esa2nc testfile tha peif\n");
  94 + printf ("\n");
  95 + exit(1);
97 96 }
98 97 /*--------------------------------------------------------------------------
99 98 * Handles a CDF error.
... ... @@ -101,263 +100,256 @@ void usage()
101 100 void cdf_handle_error(CDFstatus status)
102 101 {
103 102  
104   - char message[CDF_STATUSTEXT_LEN+1];
  103 + char message[CDF_STATUSTEXT_LEN+1];
105 104  
106   - CDFerror (status, message); /* Get the appropriate message */
107   - fprintf (stderr, "CDF: %s\n", message);
108   -// exit(1);
  105 + CDFerror (status, message); /* Get the appropriate message */
  106 + fprintf (stderr, "CDF: %s\n", message);
  107 + // exit(1);
109 108 }
110 109 /*--------------------------------------------------------------------------
111 110 * Handles a netCDF error.
112 111 *--------------------------------------------------------------------------*/
113 112 void nc_handle_error(int status)
114 113 {
115   - fprintf(stderr, "%s\n", nc_strerror(status));
116   - exit(1);
  114 + fprintf(stderr, "%s\n", nc_strerror(status));
  115 + exit(1);
117 116 }
118 117  
119 118 /*--------------------------------------------------------------------------
120 119 * NetCDF File Definition *
121 120 *--------------------------------------------------------------------------*/
122   - void ncdefine(double Time)
123   - {
124   - char *s;
125   - time_t p;
126   - int status;
127   - char *STime;
  121 +void ncdefine(double Time)
  122 +{
  123 + char *s;
  124 + time_t p;
  125 + int status;
  126 + char *STime;
128 127  
129 128 /*********************** Create netCDF file *****************************/
130   - memcpy(&(ncFile[0]),&(mode[0]), 4);
131   - STime = Double2DD_Time(Time);
132   - memcpy(&(ncFile[4]),&(STime[2]), 9);
133   - if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
134   - nc_handle_error(status);
  129 + memcpy(&(ncFile[0]),&(mode[0]), 4);
  130 + STime = Double2DD_Time(Time);
  131 + memcpy(&(ncFile[5]),&(STime[2]), 9);
  132 + if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
  133 + nc_handle_error(status);
135 134 /******************netCDF Dimensions *******************************/
136   - nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
137   - nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
138   - nc_def_dim (ncID, "Flux", 16L, &FluxDimID);
  135 + nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
  136 + nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
  137 + nc_def_dim (ncID, "Flux", 16L, &FluxDimID);
139 138  
140 139 /********************netCDF Variables ******************/
141   - TimeDimVector[0] = TimeDimID;
142   - TimeDimVector[1] = TimeLengthID;
143   - FluxDimVector[0] = TimeDimID;
144   - FluxDimVector[1] = FluxDimID;
145   -//
146   - nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
  140 + TimeDimVector[0] = TimeDimID;
  141 + TimeDimVector[1] = TimeLengthID;
  142 + FluxDimVector[0] = TimeDimID;
  143 + FluxDimVector[1] = FluxDimID;
  144 +
  145 + nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
  146 +
  147 + nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
  148 + nc_def_var (ncID, "density", NC_DOUBLE, 1, &TimeDimID, &ModeID);
  149 + nc_def_var (ncID, "en_eflux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
  150 +
  151 + nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
  152 + nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
  153 +
  154 + nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
  155 + nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
  156 + nc_put_att_text(ncID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
  157 +
  158 + time(&p);
  159 + s = ctime(&p);
  160 + nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
  161 +
  162 + status = nc_enddef(ncID);
147 163  
148   - nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
149   - nc_def_var (ncID, "Mode", NC_FLOAT, 2, &TimeDimID, &ModeID);
150   - nc_def_var (ncID, "Flux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
151   -
152   - nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
153   - nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
154   -
155   -
156   -
157   -
158   - nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
159   - nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
160   - nc_put_att_text(ncID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
161   -
162   -
163   - time(&p);
164   - s = ctime(&p);
165   - nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
166   -
167   - status = nc_enddef(ncID);
168   -
169   -
170   - nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
171   -
172   -
173   - }
174   -
175   - void put_double(RecStart, RecCount, ParCDF, ParNC) {
176   -
  164 + nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
  165 +}
177 166  
178   - long RecInt = 1;
179   - long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
180   -
181   - double *value;
182   -
183   - value = (double *)malloc(sizeof(double)*RecCount);
184   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
185   - zVAR_RECNUMBER_, RecStart ,
186   - zVAR_RECCOUNT_, RecCount,
187   - zVAR_RECINTERVAL_, RecInt,
188   - zVAR_DIMINDICES_, indices,
189   - zVAR_DIMCOUNTS_, counts,
190   - zVAR_DIMINTERVALS_, intervals,
191   - GET_, zVAR_HYPERDATA_, value, NULL_))
192   - != CDF_OK) cdf_handle_error(cstatus);
193   - nc_put_var_double(ncID, ParNC, value);
194   -
195   - free(value);
196   - }
  167 +void put_double(RecStart, RecCount, ParCDF, ParNC)
  168 +{
  169 + long RecInt = 1;
  170 + long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
  171 +
  172 + double *value;
  173 +
  174 + value = (double *)malloc(sizeof(double)*RecCount);
  175 + if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
  176 + zVAR_RECNUMBER_, RecStart ,
  177 + zVAR_RECCOUNT_, RecCount,
  178 + zVAR_RECINTERVAL_, RecInt,
  179 + zVAR_DIMINDICES_, indices,
  180 + zVAR_DIMCOUNTS_, counts,
  181 + zVAR_DIMINTERVALS_, intervals,
  182 + GET_, zVAR_HYPERDATA_, value, NULL_))
  183 + != CDF_OK) cdf_handle_error(cstatus);
  184 + nc_put_var_double(ncID, ParNC, value);
  185 +
  186 + free(value);
  187 +}
197 188  
198 189  
199   - void put_mode(RecStart, RecCount, ParCDF, ParNC) {
200   -
201   - float *value;
202   - long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
203   - long RecInt = 1;
204   -
205   - value = (float *)malloc(sizeof(float) * RecCount *3);
206   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
207   - zVAR_RECNUMBER_, RecStart ,
208   - zVAR_RECCOUNT_, RecCount,
209   - zVAR_RECINTERVAL_, RecInt,
210   - zVAR_DIMINDICES_, indices,
211   - zVAR_DIMCOUNTS_, counts,
212   - zVAR_DIMINTERVALS_, intervals,
213   - GET_, zVAR_HYPERDATA_, value, NULL_))
214   - != CDF_OK) cdf_handle_error(cstatus);
215   - nc_put_var_float(ncID, ParNC, value);
  190 +void put_mode(RecStart, RecCount, ParCDF, ParNC)
  191 +{
  192 + float *value;
  193 + long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
  194 + long RecInt = 1;
  195 +
  196 + value = (float *)malloc(sizeof(float) * RecCount *3);
  197 + if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
  198 + zVAR_RECNUMBER_, RecStart ,
  199 + zVAR_RECCOUNT_, RecCount,
  200 + zVAR_RECINTERVAL_, RecInt,
  201 + zVAR_DIMINDICES_, indices,
  202 + zVAR_DIMCOUNTS_, counts,
  203 + zVAR_DIMINTERVALS_, intervals,
  204 + GET_, zVAR_HYPERDATA_, value, NULL_))
  205 + != CDF_OK) cdf_handle_error(cstatus);
  206 + nc_put_var_float(ncID, ParNC, value);
216 207  
217   - free(value);
218   - }
  208 + free(value);
  209 +}
219 210  
220   -void put_spectra(RecStart, RecCount, ParCDF, ParNC) {
221   -
222   - double *value;
223   - long indices[2] = {0,16}, intervals[1] = {1}, counts[1] = {16};
224   - long RecInt = 1;
225   -
226   - value = (double *)malloc(sizeof(double)*RecCount*16);
227   - if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
228   - zVAR_RECNUMBER_, RecStart ,
229   - zVAR_RECCOUNT_, RecCount,
230   - zVAR_RECINTERVAL_, RecInt,
231   - zVAR_DIMINDICES_, indices,
232   - zVAR_DIMCOUNTS_, counts,
233   - zVAR_DIMINTERVALS_, intervals,
234   - GET_, zVAR_HYPERDATA_, value, NULL_))
235   - != CDF_OK) cdf_handle_error(cstatus);
236   - nc_put_var_double(ncID, ParNC, value);
237   - free(value);
238   - }
  211 +void put_spectra(RecStart, RecCount, ParCDF, ParNC)
  212 +{
  213 + double *value;
  214 + long indices[2] = {0,16}, intervals[1] = {1}, counts[1] = {16};
  215 + long RecInt = 1;
  216 +
  217 + value = (double *)malloc(sizeof(double)*RecCount*16);
  218 + if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
  219 + zVAR_RECNUMBER_, RecStart ,
  220 + zVAR_RECCOUNT_, RecCount,
  221 + zVAR_RECINTERVAL_, RecInt,
  222 + zVAR_DIMINDICES_, indices,
  223 + zVAR_DIMCOUNTS_, counts,
  224 + zVAR_DIMINTERVALS_, intervals,
  225 + GET_, zVAR_HYPERDATA_, value, NULL_))
  226 + != CDF_OK) cdf_handle_error(cstatus);
  227 + nc_put_var_double(ncID, ParNC, value);
  228 + free(value);
  229 +}
  230 +
239 231 /*--------------------------------------------------------------------------*/
240 232 int main(int argc, char *argv[])
241 233 {
242   - long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
243   - long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
244   - long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
245   - double *value;
246   - float *value_f;
247   - size_t numElem;
248   - long dimN, varN, par0, par1, par2;
249   -
250   - CDFid id;
251   - int i, j, status;
252   - char fileName[MAX_FILE_NAME_LEN];
253   - dd_tmstr_t *dtm;
254   - int First = 1;
255   - double DayOld;
  234 + long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
  235 + long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
  236 + long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
  237 + double *value;
  238 + float *value_f;
  239 + size_t numElem;
  240 + long dimN, varN, par0, par1, par2;
  241 +
  242 + CDFid id;
  243 + int i, j, status;
  244 + char fileName[MAX_FILE_NAME_LEN];
  245 + dd_tmstr_t *dtm;
  246 + int First = 1;
  247 + double DayOld;
256 248  
257   -
258   - char *UT;
259   - char data_set[8]="thx_psxf";
  249 + char *UT;
  250 + char data_set[8]="thx_psxf";
260 251 /*-------------------------------- Arguments Decoding ----------------------------------------*/
261   - if (argc <= 3) usage(); // CDF input file name and THEMIS Number not specified
262   - else
263   - {
264   - strcpy(fileName, argv[1]);
265   - strncpy(ThemisID,argv[2],3);
266   - strncpy(mode,argv[3],4);
267   - }
  252 + if (argc <= 3) usage(); // CDF input file name and THEMIS Number not specified
  253 + else
  254 + {
  255 + strcpy(fileName, argv[1]);
  256 + strncpy(ThemisID,argv[2],3);
  257 + strncpy(mode,argv[3],4);
  258 + }
268 259  
269 260 /*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
270 261  
271   - memcpy(&(data_set[2]),&(ThemisID[2]),1);
272   - memcpy(&(data_set[6]),&(mode[2]),2);
  262 + memcpy(&(data_set[2]),&(ThemisID[2]),1);
  263 + memcpy(&(data_set[6]),&(mode[2]),2);
273 264  
274   - memcpy(&(ThemisTime[0]),&(data_set[0]),8);
275   - memcpy(&(PAR0[0]),&(data_set[0]),8);
276   - memcpy(&(PAR1[0]),&(data_set[0]),8);
277   - memcpy(&(PAR2[0]),&(data_set[0]),8);
  265 + memcpy(&(ThemisTime[0]),&(data_set[0]),8);
  266 + memcpy(&(PAR0[0]),&(data_set[0]),8);
  267 + memcpy(&(PAR1[0]),&(data_set[0]),8);
  268 + memcpy(&(PAR2[0]),&(data_set[0]),8);
278 269  
279   -
280 270 /*********************** Open CDF file *****************************/
281   - if ((cstatus = CDFopen(fileName, &id)) != CDF_OK)
282   - cdf_handle_error(cstatus);
283   - printf(" THEMIS %s %s\n", ThemisID, mode);
  271 + if ((cstatus = CDFopen(fileName, &id)) != CDF_OK)
  272 + cdf_handle_error(cstatus);
  273 + printf(" THEMIS %s %s\n", ThemisID, mode);
284 274  
285 275 /*********** treat all vars as zVars with eliminated false dimensionality **********/
286 276  
287   - if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
288   - cdf_handle_error (cstatus);
  277 + if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
  278 + cdf_handle_error (cstatus);
289 279  
290 280 /************************ Get CDF Data ************************************/
291 281  
292   - cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
293   - cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
294   -
295   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);
296   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_);
297   - cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_);
298   -
299   -
300   - RecCount = (long)(MaxRec+1);
301   - printf(" Max Rec %d\n", MaxRec);
302   -
303   - value = (double *)malloc(sizeof(double)* RecCount);
304   - if ((cstatus = CDFlib (SELECT_,
305   - zVAR_, varN,
306   - zVAR_RECNUMBER_, RecStart ,
307   - zVAR_RECCOUNT_, RecCount,
308   - zVAR_RECINTERVAL_, RecInt,
309   - zVAR_DIMINDICES_, indices,
310   - zVAR_DIMCOUNTS_, countsE,
311   - zVAR_DIMINTERVALS_, intervals,
312   - GET_, zVAR_HYPERDATA_, value, NULL_) )
313   - != CDF_OK) cdf_handle_error(cstatus);
314   -
315   - for (i = 0; i < RecCount; i++) {
316   -
317   -
318   - UT = Double2DD_Time(value[i]);
319   -
320   - if ((First == 0) && (value[i] - DayOld) > TimeGap) {
321   -
322   - printf("GAP %f\n",(value[i] - DayOld)/60.0);
323   - // put_double(RecStart, (long)i - RecStart, par0, DeltaTID);
324   - // put_mode(RecStart, (long)i - RecStart, par1, ModeID, ModeSpID);
325   - put_spectra(RecStart, (long)i - RecStart, par2, FluxID);
326   -
327   - nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));
328   -
329   - if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
330   -
331   - First = 1;
332   - RecStart = (long)i;
333   - UT = Double2DD_Time(value[i]);
334   - }
335   -
336   - dtm = ReadTime(UT);
337   - if (First == 1) {
338   - ncdefine(dtm->times);
339   -
340   - First = 0;
341   - Start[0] = 0;
342   -
343   - }
344   - nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
345   -
346   - Start[0]++;
347   - DayOld = value[i];
348   -
349   - }
350   - free(value);
351   - nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT);
352   -
353   -
354   - // put_double(RecStart, RecCount - RecStart, par0, DeltaTID);
355   - // put_mode(RecStart, RecCount - RecStart, par1, ModeID, ModeSpID);
356   - put_spectra(RecStart, RecCount - RecStart, par2, FluxID);
357   -
  282 + cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
  283 + cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
  284 +
  285 + cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);
  286 + cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_);
  287 + cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_);
  288 +
  289 +
  290 + RecCount = (long)(MaxRec+1);
  291 + printf(" Max Rec %d\n", MaxRec);
  292 + if (MaxRec > 1)
  293 + {
  294 + value = (double *)malloc(sizeof(double)* RecCount);
  295 + if ((cstatus = CDFlib (SELECT_,
  296 + zVAR_, varN,
  297 + zVAR_RECNUMBER_, RecStart ,
  298 + zVAR_RECCOUNT_, RecCount,
  299 + zVAR_RECINTERVAL_, RecInt,
  300 + zVAR_DIMINDICES_, indices,
  301 + zVAR_DIMCOUNTS_, countsE,
  302 + zVAR_DIMINTERVALS_, intervals,
  303 + GET_, zVAR_HYPERDATA_, value, NULL_) )
  304 + != CDF_OK) cdf_handle_error(cstatus);
  305 +
  306 + for (i = 0; i < RecCount; i++)
  307 + {
  308 + UT = Double2DD_Time(value[i]);
  309 +
  310 + if ((First == 0) && (value[i] - DayOld) > TimeGap)
  311 + {
  312 + printf("GAP %f\n",(value[i] - DayOld)/60.0);
  313 + // put_double(RecStart, (long)i - RecStart, par0, DeltaTID);
  314 + // put_mode(RecStart, (long)i - RecStart, par1, ModeID, ModeSpID);
  315 + put_spectra(RecStart, (long)i - RecStart, par2, FluxID);
  316 +
  317 + nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));
  318 +
  319 + if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
  320 +
  321 + First = 1;
  322 + RecStart = (long)i;
  323 + UT = Double2DD_Time(value[i]);
  324 + }
  325 +
  326 + dtm = ReadTime(UT);
  327 + if (First == 1) {
  328 + ncdefine(dtm->times);
  329 +
  330 + First = 0;
  331 + Start[0] = 0;
  332 + }
  333 +
  334 + nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
  335 +
  336 + Start[0]++;
  337 + DayOld = value[i];
  338 + }
  339 +
  340 + free(value);
  341 + nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT);
  342 +
  343 +
  344 + // put_double(RecStart, RecCount - RecStart, par0, DeltaTID);
  345 + // put_mode(RecStart, RecCount - RecStart, par1, ModeID, ModeSpID);
  346 + put_spectra(RecStart, RecCount - RecStart, par2, FluxID);
358 347 /********************Close Files******************/
359   - if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
360   - cdf_handle_error (cstatus);
361   - if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
362   -
  348 +
  349 + if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
  350 + }
  351 +
  352 + if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
  353 + cdf_handle_error (cstatus);
  354 +
363 355 }
... ...
src/REMOTEDATA/CDAWebConfigClass.php
... ... @@ -19,4 +19,5 @@ class CDAWebConfigClass
19 19 // Service to get SPASE description by SPASE ID (from $spaseRegistry)
20 20 public static $spaseResolver = "http://www.spase-group.org/registry/resolver?";
21 21 public static $format = "CDF";
22   -}
23 22 \ No newline at end of file
  23 +}
  24 +?>
... ...
src/REMOTEDATA/THEMIS.php 0 → 100644
... ... @@ -0,0 +1,213 @@
  1 +<?php
  2 +/**
  3 + * @class THEMIS
  4 + * @brief THEMIS
  5 + * @details
  6 + */
  7 +class THEMIS extends RemoteDataCenterClass
  8 +{
  9 + // /THEMIS_B1/themisdata
  10 +
  11 + protected $baseMgr;
  12 + protected $domTemplate;
  13 +
  14 +
  15 + public function init()
  16 + {
  17 + error_log("THEMIS Proxy creation on ".date("Y-m-d\TH:i:s").PHP_EOL,3,log);
  18 + error_log("THEMIS Proxy creation on ".date("Y-m-d\TH:i:s").PHP_EOL,3,err);
  19 +
  20 + }
  21 +
  22 + protected function getRemoteTree()
  23 + {
  24 + if (!file_exists(ThemisConfigClass::$TemplateXml)) {
  25 + error_log('Cannot find THEMIS tree template'.PHP_EOL,3,err);
  26 + exit('Cannot find THEMIS tree template');
  27 + }
  28 +
  29 + $this->domTemplate = new DomDocument("1.0");
  30 + if (!$this->domTemplate->load(ThemisConfigClass::$TemplateXml)) {
  31 + error_log('Cannot load THEMIS tree template'.PHP_EOL,3,err);
  32 + exit('Cannot load THEMIS tree template');
  33 + }
  34 + }
  35 +
  36 + /*
  37 + * create base.xml from themis template xml
  38 + */
  39 + protected function createMissionNodes()
  40 + {
  41 + $missionNodes = array();
  42 +
  43 + $this->baseMgr = new DDBaseMgr();
  44 + foreach (ThemisConfigClass::$themis as $suffix)
  45 + {
  46 + $mission = $this->domAmda->importNode($this->domTemplate->getElementsByTagName("mission")->item(0), true);
  47 + $template = $mission->getAttribute("name");
  48 + $mission->setAttribute('name', str_replace("XXX", $suffix, $template));
  49 + $mission->setAttribute('desc', str_replace("XXX", $suffix, $template));
  50 + $template = $mission->getAttribute("xml:id");
  51 + $mission->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
  52 + $instruments = $mission->getElementsByTagName("instrument");
  53 + foreach ($instruments as $instrument) {
  54 + $template = $instrument->getAttribute("xml:id");
  55 + $instrument->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
  56 + $datasets = $instrument->getElementsByTagName("dataset");
  57 + foreach ($datasets as $dataset) {
  58 + $template = $dataset->getAttribute("xml:id");
  59 + $dataset->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
  60 + $template = $dataset->getAttribute("rem_id");
  61 + $dataset->setAttribute('rem_id', str_replace("xxx", strtolower($suffix), $template));
  62 + $this->updateGlobalStartStop($dataset);
  63 + $this->createVi($dataset);
  64 +
  65 + $ncFiles = $this->getData($remSetID, $start, $stop);
  66 + $params = $dataset->getElementsByTagName("parameter");
  67 + foreach ($params as $param) {
  68 + $template = $param->getAttribute("xml:id");
  69 + $param->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
  70 + }
  71 + }
  72 + }
  73 + $missionNodes[] = $mission;
  74 + }
  75 + return $missionNodes;
  76 + }
  77 +
  78 + protected function updateGlobalStartStop($dataset)
  79 + {
  80 + $rem_id = $dataset->getAttribute('rem_id');
  81 + $ViId = strtr(substr($dataset->getAttribute('xml:id'),7),":","_");
  82 +
  83 + $dataset->setAttribute('dataStart',$this->getGlobalStart($rem_id));
  84 + $dataset->setAttribute('dataStop',$this->getGlobalStop($rem_id));
  85 + }
  86 +
  87 + protected function getGlobalStart($id)
  88 + {
  89 + $startTime = "1970-01-01T00:00:00.000Z";
  90 + $datasetDir = ThemisConfigClass::$NFS_DIR."/".strtr($id,"_" , "/" )."/".ThemisConfigClass::$START_YEAR;
  91 + if (is_dir($datasetDir)) {
  92 + $fileNames = glob($datasetDir."/".$id."*.".ThemisConfigClass::$format);
  93 + // Get Start Time from the First File Name
  94 + $pos = strpos($fileNames[0],$id) + strlen($id) + 1;
  95 + $firstTime = substr($fileNames[0], $pos, 8);
  96 + $startTime = substr($firstTime,0,4)."-".substr($firstTime,4,2)."-".substr($firstTime,6,2)."T00:00:00.000Z";
  97 + }
  98 +
  99 + return $startTime ;
  100 + }
  101 +
  102 + protected function getGlobalStop($id)
  103 + {
  104 + $stopTime = "1970-01-01T00:00:00.000Z";
  105 + $datasetDir = ThemisConfigClass::$NFS_DIR."/".strtr($id,"_" , "/" )."/".date('Y');
  106 + if (is_dir($datasetDir)) {
  107 + $fileNames = glob($datasetDir."/".$id."*.".ThemisConfigClass::$format);
  108 + // Get Stop Time from the Last File Name
  109 + $pos = strpos($fileNames[count($fileNames)-1],$id) + strlen($id) + 1;
  110 + $lastTime = substr($fileNames[count($fileNames)-1], $pos, 8);
  111 + $stopTime = substr($lastTime,0,4)."-".substr($lastTime,4,2)."-".substr($lastTime,6,2)."T23:59:59.000Z";
  112 + }
  113 +
  114 + return $stopTime ;
  115 + }
  116 +
  117 + protected function createVi($dataset)
  118 + {
  119 + $ViId = strtr(substr($dataset->getAttribute('xml:id'),7),":","_");
  120 + $globalStart = $dataset->getAttribute('dataStart');
  121 + $globalStop = $dataset->getAttribute('dataStop');
  122 + echo $globalStart." ".$globalStop.PHP_EOL;
  123 + if ($this->baseMgr->viExists($ViId, $this->baseID)) {
  124 + // error_log
  125 + // updateStartStop
  126 +
  127 + return;
  128 + }
  129 + $info = explode("_", $ViId);
  130 +
  131 + $this->baseMgr->setViId($ViId);
  132 + $rem_id = $dataset->getAttribute('rem_id').":".$info[2];
  133 + $this->baseMgr->setRemoteViId($rem_id);
  134 + $this->baseMgr->setViInfo($info[2]);
  135 + $this->baseMgr->setViParentsInfo($this->baseID, $info[0], $info[1]);
  136 +
  137 + $this->baseMgr->setViLocation($this->baseID."/".$info[0], $info[1]."/".$info[2]."/");
  138 + $min_sampling = $dataset->getAttribute('minSampling');
  139 + $max_sampling = $dataset->hasAttribute('maxSampling') ? $dataset->getAttribute('maxSampling') : 0 ;
  140 + $this->baseMgr->setViSampling($min_sampling, $max_sampling);
  141 + $this->baseMgr->globalStart = $globalStart;
  142 + $this->baseMgr->globalStop = $globalStop;
  143 +
  144 + $this->baseMgr->createVi();
  145 +
  146 + $ncFiles = array();
  147 + $start = $globalStart;
  148 +
  149 + while (count($ncFiles) == 0) {
  150 + // get the very first data file
  151 + $stop = $start;
  152 + $ncFiles = $this->getData($rem_id, $start, $stop);
  153 +
  154 + $newStart = strtotime($start);
  155 + $newStart += 24*60*60;
  156 + $start = date("Y-m-d\TH:i:s",$newStart);
  157 + }
  158 +
  159 + $this->baseMgr->addRemoteData($rem_id, $ncFiles, $globalStart, $globalStart, false);
  160 +
  161 + $this->baseMgr->updateRemoteStart();
  162 + }
  163 +
  164 + protected function setDataCenterAttributes(){
  165 + $this->dataCenter->setAttribute('xml:id', $this->baseID);
  166 + $this->dataCenter->setAttribute('name', $this->baseID."_iRAP");
  167 + }
  168 +
  169 + protected function makeArgumentsList(){}
  170 +
  171 + public function getData($remId, $start, $stop)
  172 + {
  173 + $info = explode(":", $remId);
  174 + $rem_id = $info[0];
  175 + $mode = $info[1];
  176 +
  177 + $info_1 = explode("_", $rem_id);
  178 + $mission = $info_1[0];
  179 +
  180 + $sourceDir = ThemisConfigClass::$NFS_DIR."/".strtr($rem_id,"_" , "/" );
  181 + // Which files
  182 + $currTime = strtotime($start);
  183 + $stopTime = strtotime($stop);
  184 +
  185 +// $currTime -= 3600.0;
  186 +
  187 + while ($currTime <= $stopTime ) {
  188 + $fileName = $sourceDir."/".date('Y', $currTime)."/".$rem_id."_".date('Ymd', $currTime)."_v01.cdf";
  189 + if (file_exists($fileName)) {
  190 + system(ThemisConfigClass::$program[$mode]." ".$fileName." ".$mission." ".$mode);
  191 + }
  192 + else {
  193 + // fprintf($STDERR,"NO SUCH FILE $fileName \n");
  194 + }
  195 + $currTime += 24*60*60;
  196 + }
  197 +
  198 + $files = glob($mode."*.nc");
  199 +
  200 + return $files;
  201 + }
  202 +
  203 + public function monitor()
  204 + {
  205 + // check if NFS connection ok
  206 + if (glob(ThemisConfigClass::$NFS_DIR . "/*"))
  207 + return true;
  208 +
  209 + return false;
  210 + }
  211 +}
  212 +?>
  213 +
... ...
src/REMOTEDATA/ThemisConfigClass.php 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +<?php
  2 +
  3 +/**
  4 + * @class ThemisConfigClass
  5 + * @brief Class that's contain all specific configuration of the IRAP Themis Mirror Site
  6 + * @details
  7 + */
  8 +
  9 +class ThemisConfigClass
  10 +{
  11 + // apus : sudo mount -t nfs rosina1.irap.omp.eu:/ROSINA_B1/themisdata /THEMIS_B1/themisdata -v -o nfsvers=3,vers=3
  12 +
  13 + public static $NFS_DIR = "/THEMIS_B1/themisdata";
  14 + public static $level = "l2";
  15 + public static $format = "cdf";
  16 + public static $themis = array('A'); //, 'B', 'C', 'D', 'E');
  17 + public static $TemplateXml = "ThemisTreeTemplate.xml";
  18 + public static $START_YEAR = "2007";
  19 + public static $program = array('peim' => 'themis_esamom2nc', 'peem' => 'themis_esamom2nc',
  20 + 'peif' => 'themis_esa2nc', 'peef' => 'themis_esa2nc',
  21 + 'peir' => 'themis_esa2nc', 'peer' => 'themis_esa2nc',
  22 + 'peib' => 'themis_esa2nc', 'peeb' => 'themis_esa2nc',
  23 + 'psif' => 'themis_sst2nc', 'psef' => 'themis_sst2nc',
  24 + 'high' => 'themis_fgm2nc', 'low' => 'themis_fgm2nc');
  25 +}
  26 +?>
... ...
src/REMOTEDATA/ThemisTreeTemplate.xml 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +<?xml version="1.0"?>
  2 +<dataCenter name="THEMIS" xml:id="THEMIS-IRAP" desc="Mirror IRAP Data Base">
  3 + <mission name="THEMIS-XXX" xml:id="THEMIS-xxx" desc="THEMIS-XXX">
  4 + <instrument name="ESA" xml:id="THEMIS-xxx-esa" desc="Electrostatic Analyser">
  5 + <dataset name="ion reduced" xml:id="THEMIS-thxxx:esa:peir" minSampling="3" rem_id="thxxx_l2_esa">
  6 + <parameter name="ion density" units="cm-3" xml:id="thxxx_peir_density"/>
  7 + <parameter name="ion v gse" units="km/s" size="3" labels="vx_gse,vy_gse,vz_gse" xml:id="thxxx_peir_velocity_gse"/>
  8 + <parameter name="ion temperature" units="eV" size="3" labels="t_para,t_perp1,t_perp2" xml:id="thxxx_peir_t3"/>
  9 + <parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peir_en_eflux"/>
  10 + <parameter name="sc_potential" units="V" xml:id="thxxx_peir_sc_pot"/>
  11 + </dataset>
  12 + <dataset name="electron reduced" xml:id="THEMIS-thxxx:esa:peer" minSampling="3" rem_id="thxxx_l2_esa">
  13 + <parameter name="elec density" units="cm-3" xml:id="thxxx_peer_density"/>
  14 + <parameter name="elec temperature" units="eV" size="3" labels="t_para,t_perp1,t_perp2" xml:id="thxxx_peer_t3"/>
  15 + <parameter name="elec eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peer_en_eflux"/>
  16 + </dataset>
  17 + <dataset name="ion full" xml:id="THEMIS-thxxx:esa:peif" minSampling="96.27" maxSampling="385.1" rem_id="thxxx_l2_esa">
  18 + <parameter name="ion density" units="cm-3" xml:id="thxxx_peif_density"/>
  19 + <parameter name="ion v gse" units="km/s" size="3" labels="vx_gse,vy_gse,vz_gse" xml:id="thxxx_peif_velocity_gse"/>
  20 + <parameter name="ion temperature" units="eV" size="3" labels="t_para,t_perp1,t_perp2" xml:id="thxxx_peif_t3"/>
  21 + <parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peif_en_eflux"/>
  22 + <parameter name="sc_potential" units="V" xml:id="thxxx_peif_sc_pot"/>
  23 + </dataset>
  24 + <dataset name="ion burst" xml:id="THEMIS-thxxx:esa:peib" minSampling="3" rem_id="thxxx_l2_esa">
  25 + <parameter name="ion density" units="cm-3" xml:id="thxxx_peib_density"/>
  26 + <parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peib_en_eflux"/>
  27 + </dataset>
  28 + <dataset name="elec burst" xml:id="THEMIS-thxxx:esa:peeb" minSampling="3" rem_id="thxxx_l2_esa">
  29 + <parameter name="elec density" units="cm-3" xml:id="thxxx_peeb_density"/>
  30 + <parameter name="elec eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peeb_en_eflux"/>
  31 + </dataset>
  32 + </instrument>
  33 + <instrument name="FGM" xml:id="THEMIS-xxx-fgm" desc="Fluxgate Magnetometer">
  34 + <dataset name="fgm high" xml:id="THEMIS-thxxx:fgm:high" minSampling="0.08" rem_id="thxxx_l2_fgm">
  35 + <parameter name="b gse" units="nT" size="3" labels="bx,by,bz" xml:id="thxxx_fgh_gse"/>
  36 + </dataset>
  37 + </instrument>
  38 + <instrument name="SST" xml:id="THEMIS-xxx-sst" desc="Solid State Telescope">
  39 + <dataset name="ions" xml:id="THEMIS-thxxx:sst:psif" minSampling="3" maxSampling="192" rem_id="thxxx_l2_sst">
  40 + <parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="16" xml:id="thxxx_psif_en_eflux"/>
  41 + </dataset>
  42 + <dataset name="electrons" xml:id="THEMIS-thxxx:sst:psef" minSampling="3" maxSampling="192" rem_id="thxxx_l2_sst">
  43 + <parameter name="elec eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="16" xml:id="thxxx_psef_en_eflux"/>
  44 + </dataset>
  45 + </instrument>
  46 + </mission>
  47 +</dataCenter>
... ...