Commit 7d7445eac7ed277c4de30963bdc1436a7d294871
1 parent
21b939db
Exists in
master
and in
9 other branches
THEMIS remote center
Showing
24 changed files
with
825 additions
and
1619 deletions
Show diff stats
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
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 | |
... | ... |
... | ... | @@ -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[]="tha_fgh_gse"; |
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 | +?> | |
... | ... |
... | ... | @@ -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 | + | |
... | ... |
... | ... | @@ -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 | +?> | |
... | ... |
... | ... | @@ -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> | |
... | ... |