diff --git a/CMakeLists.txt b/CMakeLists.txt
index 200c68b..f4413ae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,11 +60,7 @@ add_subdirectory(src/DECODERS/ascii2nc)
 add_subdirectory(src/DECODERS/cdf2nc)
 add_subdirectory(src/DECODERS/cdfnew2nc)
 add_subdirectory(src/DECODERS/nc2nc)
-add_subdirectory(src/DECODERS/themis/esa2nc)
-add_subdirectory(src/DECODERS/themis/esafull2nc)
-add_subdirectory(src/DECODERS/themis/esamom2nc)
-add_subdirectory(src/DECODERS/themis/fgm2nc)
-add_subdirectory(src/DECODERS/themis/sst2nc)
+add_subdirectory(src/DECODERS/themis)
 add_subdirectory(src/DATA/TOOLS)
 add_subdirectory(src/DDSERVICES/TOOLS)
 add_subdirectory(tests)
diff --git a/src/CALLEXT/cdaweb_cfg.php b/src/CALLEXT/cdaweb_cfg.php
deleted file mode 100644
index 4eb728a..0000000
--- a/src/CALLEXT/cdaweb_cfg.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php    
-	      define("ftp_server", "cdaweb.gsfc.nasa.gov");
-	      define("ftp_user_name", "anonymous");
-	      define("ftp_user_pass", "budnik@irap.omp.eu");
-	      define("ftp_dir", "pub/software/cdawlib/0MASTERS/");
-
-	      define ("wsdlCDAWEB", "http://cdaweb.gsfc.nasa.gov/WS/jaxrpc?WSDL");
-	      define ("viewID" , "istp_public");	      	      
-?>
\ No newline at end of file
diff --git a/src/CALLEXT/createHeaderMAPSKP.php b/src/CALLEXT/createHeaderMAPSKP.php
deleted file mode 100644
index 2a07084..0000000
--- a/src/CALLEXT/createHeaderMAPSKP.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/* $Id: createHeaderMAPSKP.php,v 1.5 2008/03/05 14:03:45 elena Exp $ */
-/**
-*  \file createHeaderMAPSKP.php
-*  \brief Function to create header.nc for MapsKP datasets which are not self-described
-*  \todo Exclude absolute path for /usr/local/bin/ncgen
-*/
-
-function createHeaderMAPSKP($remSetID) {
-  
-   $url = "http://planetoweb.cesr.fr/mapskp-amda/MapskpService.php?";
-   $passwd = "ftp://amda:dd;mapskp@";
-  
-   $args = array('service'=>'getInfoUrl',
-                'datasetId'=>$remSetID);                                  
-               
-   $url  .= http_build_query($args);
-   $infoDom = new DOMDocument();
-   $infoDom->load($url);
-   $File = $infoDom->getElementsByTagName("infoUrl")->item(0)->nodeValue;
-
-   $fileName_ = explode("ftp://",$File);
-   $fileName = $fileName_[0].$passwd.$fileName_[1];
-
-   $infoDom->load($fileName);
-
-     $sampling =  $infoDom->getElementsByTagName("TIME_RESOLUTION")->item(0)->nodeValue;
-     $globalAttrs = ":minSampling = ".$sampling.";";
-
-     $params = $infoDom->getElementsByTagName("PARAM_METADATA");
- 
-     $Dimensions = "Time = unlimited, TimeLength = 17 ";
-     $charVariables = "char Time(Time,TimeLength), StartTime(TimeLength), StopTime(TimeLength);";
-     $floatVariables = "float ";
-
-     $Size = array();
-     $addDim = true;
-
-     for ($i = 0; $i < $params->length; $i++) {
-
-       $Name = $params->item($i)->getElementsByTagName("PARAM_ID")->item(0)->nodeValue;
-       $Size[$i] = $params->item($i)->getElementsByTagName("SIZES")->item(0)->nodeValue;
-       $Type = $params->item($i)->getElementsByTagName("DATA_TYPE")->item(0)->nodeValue;
-
-       if ($i > 0) $floatVariables .= ",";
-
-       if ($Size[$i] != "1" ) {
-           for ($j = 0; $j < $i+1; $j++)  
-              if ($Size[$i] == $Size[$j]) {
-                  if ($i != 0 && $j != $i) $addDim = false;
-                  break;
-               }
-           if ($addDim) $Dimensions .= ", Dim".$j." = ".$Size[$j];
-           $floatVariables .= $Name."(Time, Dim".$j.")"; 
-           $addDim = true;
-        }
-       else 
-          $floatVariables .= $Name."(Time)";
-//      
-     }
-
-// Create CDL ASCII file
-    $cdl = fopen("header.cdl","w");
-     fwrite($cdl, "netcdf header { \n \n dimensions:  \n");
-     fwrite($cdl,$Dimensions."; \n\n");
-
-     fwrite($cdl, "variables:  \n ");
-     fwrite($cdl, $charVariables."\n");
-     fwrite($cdl, $floatVariables."; \n \n");
-     fwrite($cdl, $globalAttrs."\n");
-     fwrite($cdl, "data: \n\n }");
-    fclose($cdl);
-// transform to nc
-    system("/usr/bin/ncgen -o header.nc header.cdl");
-//  make constant Energy Tables in info.nc
-// For MIMI also ...    
-    if ($remSetID == "RPWS_KEY") {
-        $StartTime =  $infoDom->getElementsByTagName("START_DATE")->item(0)->nodeValue;
-        $function = "make".$remSetID."info";
-        include($function.".php");
-        if ($OK = $function($StartTime)) system("join_nc ".strtolower($remSetID)."_constant.nc ".strtolower($remSetID)."_info.nc");
-    }
- }
-?>
diff --git a/src/CALLEXT/getData.php b/src/CALLEXT/getData.php
index c54a7ab..5db670c 100644
--- a/src/CALLEXT/getData.php
+++ b/src/CALLEXT/getData.php
@@ -70,9 +70,12 @@
 	// Add nc to Vi
 	$nc_prefix = strlen($id) > RemoteDataCenterClass::$MAX_VI_NAME_LENGTH ? 
 					substr($id, 0, RemoteDataCenterClass::$MAX_VI_NAME_LENGTH - 1): $id;
+					
+	$nc_prefix = strpos($id, ":") !== false ?
+					 substr($id,strpos($id, ":")+1) : $id;
 	
 	$baseMgr = new DDBaseMgr();
-	$baseMgr->setViId($id);
+	// $baseMgr->setViId($id);
 	$baseMgr->setViInfo(strtolower($nc_prefix));
 	$baseMgr->setViDir($ViDir);
 	$baseMgr->addRemoteData($id, $ncFiles, $startIso, $stopIso);
diff --git a/src/CALLEXT/getDataMAPSKP.php b/src/CALLEXT/getDataMAPSKP.php
deleted file mode 100644
index 9bd02cb..0000000
--- a/src/CALLEXT/getDataMAPSKP.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
-*  @file  getDataMAPSKP.php 
-*  @version $Id: getDataMAPSKP.php,v 1.6 2009/08/26 09:32:56 budnik Exp $
-*  @brief DD_Server tools <br> Gets Data from MAPSKP
-* 
-*   Args:  remDataSetID  ddVIdir StartTime StopTime \n
-*   Env Vars:  $DDBASE $DDBASEBIN \n
-*   Executables: ascii2nc(DECODERS) TimesUpdate TimesUpdateNoData clean
-*
-*
-*  @todo  General getData.php(dataBaseID)
-*/
-  function name2DD($fileName) {  
-   $pairs = array(".tab" => ".nc","__" => "_");   
-  return strtr(strtolower($fileName),$pairs) ;
-}
-//  Args
-  $id    =  $argv[1];
-  $ViDir  = $argv[2];
-  $Start =  $argv[3];
-  $Stop  =  $argv[4];
-
-// Env variables
-  $DDBASEBIN = getenv("DDBASEBIN");
-  $DDBASE = getenv("DDBASE");
-  $MAX_NAME_LENGTH = 31;
-  $MAX_VI_NAME_LENGTH = 16;
-
-//  MAPSKP STUFF
-   $passwd = "//amda:dd;mapskp@";   
-   $url = "http://planetoweb.cesr.fr/mapskp-amda/MapskpService.php?";
-
-   $args = array('service'=>'getDataUrl',
-                 'datasetId'=> $id,                  
-                 'dateBegin'=> strtr($Start,".000Z","Z"),
-                 'dateEnd'=> strtr($Stop,".000Z","Z"));
-
-// Open STDERR stream
-               $STDERR = fopen("php://stderr","w");
-
-//  Lock VI directory for Updating
-//  Stamp -> this directory is being updated
-    $LockName = $ViDir."/LOCK";
-    touch($LockName);
-  
-fprintf($STDERR,$ViDir." is LOCKED\n");    
-    
-// Send - Receive query              
-    $url  .= http_build_query($args); 
-    $fileList = new DOMDocument();
-    $fileList->load($url);
-
-    $Files = $fileList->getElementsByTagName("url");
-
-                fprintf($STDERR,  "FILES RETURN ". $Files->length."\n");
-    
-// Clean VI directory 
-    system("cd ".$ViDir."; ./clean"); 
-// If name is too long....        
-     $nc_prefix = strlen($id) > $MAX_VI_NAME_LENGTH ? substr(strtolower($id),0,15): strtolower($id);
-           
-    if ($Files->length  > 0) {            
-       for ($i = 0; $i < $Files->length; $i++) {
-
-          copy($ViDir."/header.nc","temp.nc");
-          $fileName_ = explode("//",$Files->item($i)->nodeValue);
-          $fileName = $fileName_[0].$passwd.$fileName_[1];        
-          $fileArr = split("/",$fileName); 
-// Copy URL file to DD_Server dir
-          $ok =  copy($fileName, $fileArr[count($fileArr)-1]);
-          if ($ok)  {
-// Convert ascii TAB to nc using header.nc
-            system($DDBASEBIN."/ascii2nc ".$fileArr[count($fileArr)-1]); 
-                fprintf($STDERR, "FILE $i TRANSLATED  \n");
-            unlink($fileArr[count($fileArr)-1]);
-            $ncFile = name2DD($fileArr[count($fileArr)-1]);  
-// Truncate file if it is too long  
-            $ncFileTrue = ($strLength = strlen($ncFile)) > $MAX_NAME_LENGTH ?   
-                                            $nc_prefix."_".time().$i.".nc" : $ncFile;
-// Move nc file to VIdir                        
-             rename("temp.nc", $ViDir."/".$ncFileTrue); 
-
-// Updates VI time info 
-             system("cd ".$ViDir."; ".$DDBASEBIN."/TimesUpdate -u ".strtolower($id)."_times.nc ".$ncFileTrue);
-          }
-       } 
-           fprintf($STDERR, "TIMES IS UPDATED \n");
-    }
-
-        system("cd ".$ViDir."; ".$DDBASEBIN."/TimesUpdateNoData ".strtolower($id)."_times.nc ".$argv[3]." ".$argv[4]);
-// Unlock VI dir
-      unlink($LockName);
-      fprintf($STDERR, "UNLOCK \n");
-?>
diff --git a/src/CALLEXT/getDataTHEMIS.php b/src/CALLEXT/getDataTHEMIS.php
deleted file mode 100644
index 4caed41..0000000
--- a/src/CALLEXT/getDataTHEMIS.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-/**
-*  @file  getDataTHEMIS.php 
-*  @version $Id: getDataTHEMIS.php,v 1.7 2010/01/11 18:16:46 budnik Exp $
-*  @brief DD_Server tools <br> Gets Data from  /THEMIS_B1  (NFS)
-* 
-*   @arg   remDataSetID  ddVIdir StartTime StopTime \n
-*   Env Vars:  $DDBASE $DDBASEBIN \n
-*   Executables: [DataSet]2nc(DECODERS) TimesUpdate TimesUpdateNoData clean
-*
-*
-*  @todo  General getData.php(dataBaseID) 
-*/
-
-  
-   
-// Open STDERR stream
-  $STDERR = fopen("php://stderr","w");
- 
-//  Args
-   $id    =  $argv[1];  
-  
-   $ViDir  = $argv[2];
-   $Start =  $argv[3];  
-   $Stop  =  $argv[4];  
-//  NFS direcory  
-   define('ThemisDir', '/THEMIS_B1/themisdata/');
-   define('DataSetDir', ThemisDir.strtr($id,"_","/"));
-// Env variables
-   define('DDBASEBIN', getenv("DDBASEBIN"));
-   define('DDBASE', getenv("DDBASE"));
-
-  
-
-   $arr = explode("/", $ViDir);
-   $instrument = $arr[5];
-   $mission = $arr[4];
-   $mode = strpos($arr[6],"_") === false ? $arr[6] : substr($arr[6],0,4);
-   
-   
-   switch ($mode) {
-      case "psif" :
-      case "psef" :
-      case "peif" : 
-      case "peef" :  
-      case "peim" :
-      case "peem" :
-      case "h"    :
-      case "l"    : 
-                   $realDir =  DDBASE."/".$mission."/".$instrument."/".$arr[6]."/";
-                   system("cd  $realDir ; ./clean");
-                   touch($realDir."/LOCK");
-fprintf($STDERR,$realDir." is LOCKED\n");                        
-                   break; 
-      case "peir" :
-      case "peer" :
-      case "peib" :
-      case "peeb" :                   
-                  $dirAdd = array("/sp", "/mom");
-                  $fileAdd = array("s", "");
-                  $realDir =   DDBASE."/".$mission."/".$instrument."/".$mode."/";
-                  for ($n = 0; $n < 2; $n++) {  
-                       $theDir =  $realDir.$dirAdd[$n];                                        
-                       system("cd  $theDir ; ./clean ");
-                       touch($theDir."/LOCK");
-fprintf($STDERR,$theDir." is LOCKED\n");                           
-                  }
-                  break;                   
-            }
-   
-
-    switch ($mode) {
-      case "peif" : 
-      case "peef" :  
-                   $program = DDBASEBIN."/themis_esafull2nc ";
-                   break;
-      case "peim" :
-      case "peem" : 
-                   $program = DDBASEBIN."/themis_esamom2nc ";
-                   break;
-      case "peir" :
-      case "peer" :
-      case "peib" :
-      case "peeb" : 
-                   $program = DDBASEBIN."/themis_esa2nc ";  
-                   break; 
-      case "psif" : 
-      case "psef" :  
-                   $program = DDBASEBIN."/themis_sst2nc ";
-                   break;
-      case "h"   : 
-      case "l"   :
-                   $program = DDBASEBIN."/themis_fgm2nc ";  
-                   break;    
-      }
-//   fprintf($STDERR, "REALDIR ".$realDir." \n");
- 
-// Which files 
-    $currTime = strtotime($Start);
-    $stopTime = strtotime($Stop);
-
-    $currTime -= 3600.0;
-
-    while ($currTime <= $stopTime) {
-        $fileName = DataSetDir."/".date('Y', $currTime)."/".$id."_".date('Ymd', $currTime)."_v01.cdf";
- 
-        if (file_exists($fileName)) {             
-            system($program." ".$fileName." ".$mission." ".$mode);
-            fprintf($STDERR, "FILE  $fileName is TRANSLATED  \n");
-          
-        }
-        else {
-            fprintf($STDERR,"NO SUCH FILE  $fileName \n");
-        }
-        $currTime += 24*60*60;
-   }        
- 
-
-     switch ($mode) {
-                case "psif" : 
-                case "psef" : 
-                case "peif" : 
-                case "peef" :  
-                case "peim" :
-                case "peem" : 
-                            system("mv ".$mode."[0-9]*.nc $realDir");
-                            system("cd  $realDir ;".DDBASEBIN."/TimesUpdate -u ".$mode."_times.nc ".$mode."[0-9]*.nc; ".DDBASEBIN."/TimesUpdateNoData ".$mode."_times.nc ".$argv[3]." ".$argv[4]); 
-                            unlink($realDir."/LOCK");
-                            break; 
-                case "peir" :
-                case "peer" :
-                case "peib" :
-                case "peeb" :                   
-                             for ($n = 0; $n < 2; $n++) {  
-                                 $theDir =  $realDir.$dirAdd[$n];                                                                
-                                 system("mv ".$fileAdd[$n].$mode."[0-9]*.nc  $theDir");
-                                 system("cd  $theDir ;".DDBASEBIN."/TimesUpdate -u ".$mode."_times.nc ".$fileAdd[$n].$mode."[0-9]*.nc; ".DDBASEBIN."/TimesUpdateNoData ".$mode."_times.nc ".$argv[3]." ".$argv[4]);                    
-                                 unlink($theDir."/LOCK");
-                               }  
-                             break; 
-                  case "h" :
-                  case "l" : 
-                            system("mv fgm".$mode."[0-9]*.nc $realDir");
-                            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]); 
-                            unlink($realDir."/LOCK");
-                            break;  
-                        } 
- 
- fprintf($STDERR, "TIMES IS UPDATED \n");
-
- fprintf($STDERR, "UNLOCK \n");
-?>
diff --git a/src/CALLEXT/makeRPWS_KEYinfo.php b/src/CALLEXT/makeRPWS_KEYinfo.php
deleted file mode 100644
index 2046031..0000000
--- a/src/CALLEXT/makeRPWS_KEYinfo.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/* $Id: makeRPWS_KEYinfo.php,v 1.1 2008/03/05 14:04:22 elena Exp $ */
-/**
-*  \file makeRPWS_KEYinfo.php
-*  \brief Function to create energy info.nc for RPWS 
-*   
-*/
-
- function makeRPWS_KEYinfo($StartTime) {
- 
-   $OK = false;
-   $E_PARAM = "ELECTRIC_SPECTRAL_DENSITIES";
-   $M_PARAM = "MAGNETIC_SPECTRAL_DENSITIES";
-   $OK = true;
-   $url = "http://planetoweb.cesr.fr/mapskp-amda/MapskpService.php?";
-   $passwd = "//amda:dd;mapskp@";
-  
-   $Stop = date("Y-m-d", strtotime("+10 days",strtotime($StartTime)));
-  
-   $args = array('service'=>'getDataUrl',
-                 'datasetId'=> "RPWS_KEY",                  
-                 'dateBegin'=> $StartTime."Z",
-                 'dateEnd'=>   $Stop."T00:00:00Z");
-                            
-               
-   $url  .= http_build_query($args);
-   $fileList = new DOMDocument();
-    $fileList->load($url);
-    $Files = $fileList->getElementsByTagName("url");
-                   
-    if ($Files->length > 0) {
-
-          $fileName_ = explode("//",$Files->item(0)->nodeValue);
-          $fileName = $fileName_[0].$passwd.$fileName_[1];        
-          $fileArr = split("/",$fileName); 
-// Copy URL file VI dir
-            copy($fileName, $fileArr[count($fileArr)-1]);
-            $file = fopen($fileArr[count($fileArr)-1], "r");
-            $buffer = fgets($file);
-            $arrFreq = explode(" ", $buffer);
-            $Frequency_E = implode(",",array_slice($arrFreq,2,73));
-
-            $Frequency_M = implode(",",array_slice($arrFreq,75,42));
-
-            fclose($file);
-            unlink($fileArr[count($fileArr)-1]);
- 
-// Create CDL ASCII file
-     $cdl = fopen("constant.cdl","w");
-     fwrite($cdl, "netcdf header { \n \n dimensions:  \n");
-     fwrite($cdl," DIM_E = 73, DIM_M = 42; \n\n");
-
-     fwrite($cdl, "variables:  \n");
-     fwrite($cdl, " float ".$E_PARAM."(DIM_E), ".$M_PARAM."(DIM_M); \n\n");  
-     fwrite($cdl, ":units = \"Hz\"; \n");  
-     fwrite($cdl, "data: \n".$E_PARAM." = ".trim($Frequency_E).";\n".$M_PARAM." = ".trim($Frequency_M).";\n }");
-    fclose($cdl);
-// transform to nc
-    system("/usr/bin/ncgen -o rpws_key_constant.nc constant.cdl");
-     $OK = true;
-    }
-
- return $OK;
- }
-?>
diff --git a/src/CALLEXT/mapskp_cfg.php b/src/CALLEXT/mapskp_cfg.php
deleted file mode 100644
index 3d8e05f..0000000
--- a/src/CALLEXT/mapskp_cfg.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-      define("url","http://planetoweb2.cesr.fr/mapskp-amda/MapskpService.php?");
-      define("passwd","ftp://amda:dd;mapskp@");
-?>
diff --git a/src/DATA/MANAGER/DDBaseMgr.php b/src/DATA/MANAGER/DDBaseMgr.php
index 0829d88..aa83d73 100644
--- a/src/DATA/MANAGER/DDBaseMgr.php
+++ b/src/DATA/MANAGER/DDBaseMgr.php
@@ -39,6 +39,11 @@ class DDBaseMgr
 		$this->ViDir = $ViDir;
 	}
 	
+	public function setRemoteViId($ViId)
+	{
+		$this->remoteViId = $ViId;
+	}
+	
 	public function setViId($ViId)
 	{
 		$this->ViId = $ViId;
@@ -233,7 +238,7 @@ class DDBaseMgr
 		//	fprintf($STDERR,$ViDir." is UNLOCKED\n");
 	}
 	
-	public function addRemoteData($id, $ncFiles, $start, $stop)
+	public function addRemoteData($id, $ncFiles, $start, $stop, $notFirst = true)
 	{
 		$WORKING_DIR = getcwd();
 		chdir($this->ViDir);
@@ -247,8 +252,9 @@ class DDBaseMgr
 			system("TimesUpdate -u ".$this->times." ".$ncFile);
 		}
 		
-		system("TimesUpdateNoData ".$this->times." ".$start." ".$stop);
-
+		if ($notFirst)
+				system("TimesUpdateNoData ".$this->times." ".$start." ".$stop);
+		
 		chdir($WORKING_DIR);
 	}
 	
diff --git a/src/DECODERS/themis/CMakeLists.txt b/src/DECODERS/themis/CMakeLists.txt
new file mode 100644
index 0000000..b6ef0ea
--- /dev/null
+++ b/src/DECODERS/themis/CMakeLists.txt
@@ -0,0 +1,20 @@
+
+PROJECT(THEMIS)
+
+include_directories(
+  ${DDCLIENTINCLUDE_DIR}
+  ${NETCDFINCLUDE_DIR}
+  ${libcdf_INCLUDE_DIR}
+)
+
+#Configuration de l'exécutable
+
+file( GLOB SOURCE_FILES ./*.c )
+
+foreach( sourcefile ${SOURCE_FILES} )
+    get_filename_component( source ${sourcefile} NAME)
+    string( REPLACE ".c" "" exefile ${source} )
+    add_executable( ${exefile} ${source} )
+    target_link_libraries( ${exefile} ${DDCLIENTLIBRARY} ${NETCDFLIBRARY} ${libcdf_LIBRARIES} )
+    install (TARGETS ${exefile} DESTINATION bin)
+endforeach( sourcefile ${SOURCE_FILE} ) 
diff --git a/src/DECODERS/themis/esa2nc/CMakeLists.txt b/src/DECODERS/themis/esa2nc/CMakeLists.txt
deleted file mode 100644
index f7c789c..0000000
--- a/src/DECODERS/themis/esa2nc/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-PROJECT(themis_esa2nc)
-
-include_directories(
-  ${DDCLIENTINCLUDE_DIR}
-  ${NETCDFINCLUDE_DIR}
-  ${libcdf_INCLUDE_DIR}
-)
-
-#Configuration de l'exécutable
-file(
-        GLOB_RECURSE
-        source_files
-        ./*
-)
-  
-ADD_EXECUTABLE (themis_esa2nc ${source_files} )
-
-target_link_libraries(
-  themis_esa2nc
-  ${DDCLIENTLIBRARY}
-  ${NETCDFLIBRARY}
-  ${libcdf_LIBRARIES}
-)
-
-install (TARGETS themis_esa2nc DESTINATION bin)
diff --git a/src/DECODERS/themis/esa2nc/themis_esa2nc.c b/src/DECODERS/themis/esa2nc/themis_esa2nc.c
deleted file mode 100644
index a1ea6d3..0000000
--- a/src/DECODERS/themis/esa2nc/themis_esa2nc.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/**
-*  @file themis_esa2nc.c
-*  @brief Stand alone executable to tranform Themis (Burst & Reduced modes) CDF to DD netCDF
-*  @version $Id: themis_esa2nc.c,v 1.5 2013/11/29 14:11:56 budnik Exp $
-*/
- /**************************************************************/
- /*  THEMIS ESA ION AND ELECTRON Burst & Reduced CDF -> DD netCDF      */
- /*                                                                    */
- /*                    Energy in  info  file                           */
- /*    New CDF with peib & peir and new params                         */
- /*    04.01.2008 - 2 files (sp & mom) for peir[b] & peer[b] modes    */
- /**************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <netcdf.h>
-#include <cdf.h>
-#include <DD.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-
-#define TimeGap  3600.0
-#define Source "themis@cdpp2"
-#define MAX_FILE_NAME_LEN  250                   // Max. file name length
-#define MAX_VARS           250                   // Max # of VARS in CDF
-
-
-/*************************************
-   Global variables and structures
-**************************************/
-long   CDFDims,                                         // Number of dimensions in a CDF file
-       CDFVars,                                            // Number of variables in a CDF file
-       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
-       CDFencoding,                                    // Data encoding
-       CDFmajority,                                      // Variable majority
-       CDFmaxRec,                                     // max Record number
-       CDFAttrs;                                          // number of CDF Attributes
-
-
-struct cdfvar {                              // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                     // variable dimensionality
-     long recVariance;                 // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
-} cdfVar[MAX_VARS];
-
-char mode[4];
-int  ncID, ncSpID;
-char ncFile[] = "peir000000000.nc";
-char ncSpFile[] = "speir000000000.nc";
-int TimeDimID, TimeLengthID, DataID, DataSpID, Data2ID;
-int TimeDimSpID, TimeLengthSpID, FluxDimID;                 // ID of netCDF dimensions
-int TimeDimVector[2], DataDimVector[2],  Data2DimVector[2], FluxDimVector[2];      // netCDF Dim vectors
-int TimeDimSpVector[2], DataDimSpVector[2]; 
-size_t Start[2] = {0L,0L};
-size_t TimeCount[2] = {1L,TIMELENGTH};
-size_t Data1Count[2] = {1L,1L};
-size_t DataCount[2] = {1L,3L};
-size_t Data2Count[2] = {1L,6L};
-size_t FluxCount[2] = {1L,32L};
-
-CDFstatus   cstatus;           // CDF status code
-
-char Version[]="v01";
-char ThemisID[]="tha\0";
-char ThemisTime[]="tha_peif_time";
-char PAR0[]="tha_peif_delta_time";
-char PAR1[]="tha_peif_mode";
-char PAR2[]="tha_peif_density";
-char PAR3[]="tha_peif_velocity_gse";
-char PAR4[]="tha_peif_t3";  // Diagonilized Temperature
-char PAR5[]="tha_peif_en_eflux";
-char PAR6[]="tha_peif_en_eflux_yaxis";
-char PAR7[]="tha_peif_avgtemp"; // trace of t3 divided by 3
-char PAR8[]="tha_peif_vthermal";
-char PAR9[]="tha_peif_sc_pot";
-char PAR10[]="tha_peif_sc_current";
-char PAR11[]="tha_peif_magt3"; // Temperature in Mag Field frame
-char PAR12[]="tha_peif_ptens"; // Pressure Tensor DSL
-char PAR13[]="tha_peif_mftens"; // Momentum Flux Tensor DSL
-char PAR14[]="tha_peif_flux"; // particle flux
-char PAR15[]="tha_peif_symm"; // Direction of pressure tensor symmetry in DSL
-char PAR16[]="tha_peif_symm_ang"; // Angle between Direction of pressure tensor symmetry  and B
-
-
-int StartTimeID, StopTimeID;
-int StartTimeSpID, StopTimeSpID;
-int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID;                   // 1D
-int MfTempID, TempID, ModeID, ModeSpID, VelID, Flux2ID, SymmID;                               // 2D -> 3
-int prTenID, mfTenID;                                                               // 2D -> 6
-int FluxID;                                                                   // 2D -> 32
-int TimeID;                                                                         // Time netCDF variable
-int TimeSpID; 
-  
-char StartT[TIMELENGTH]; // Start time from  data
-char StopT[TIMELENGTH];  // Stop time from  data
-/**************************
-   Function prototypes
-**************************/
-void usage();
-void cdf_handle_error (CDFstatus);
-void nc_handle_error (int);
-void removeFilepath();
-void removeCDFext();
-void removeVers();
-void ncdefine();
-/*--------------------------------------------------------------------------*/
-void usage()
-{
-   printf ("\nDescription:\n");
-   printf ("    This program converts a themis CDF file into a netCDF file.\n");
-   printf ("\n");
-   printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
-   printf ("\n");
-   printf ("Example: esa2nc testfile tha peif\n");
-   printf ("\n");
-   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a CDF error.
- *--------------------------------------------------------------------------*/
-void cdf_handle_error(CDFstatus status)
-{
-
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "CDF: %s\n", message);
-//   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a netCDF error.
- *--------------------------------------------------------------------------*/
-void nc_handle_error(int status)
-{
-  fprintf(stderr, "%s\n", nc_strerror(status));
-  exit(1);
-}
-
-/*--------------------------------------------------------------------------
- *  NetCDF File Definition  *
- *--------------------------------------------------------------------------*/
- void ncdefine(double Time)
- {
-    char *s;
-    time_t p;
-    int status;
-    char *STime;
-
-/*********************** Create netCDF file *****************************/
-      memcpy(&(ncFile[0]),&(mode[0]), 4);
-      STime = Double2DD_Time(Time);
-      memcpy(&(ncFile[4]),&(STime[2]), 9);
-      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
-                                                      nc_handle_error(status);
-/******************netCDF Dimensions *******************************/
-        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
-        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
-        nc_def_dim (ncID, "Data",3L, &DataID); 
-        nc_def_dim (ncID, "Data2",6L, &Data2ID);
-
-/********************netCDF Variables ******************/
-       TimeDimVector[0] = TimeDimID;       
-       DataDimVector[0] = TimeDimID;
-       Data2DimVector[0] = TimeDimID;
-       TimeDimVector[1] = TimeLengthID;
-       DataDimVector[1] = DataID;  
-       Data2DimVector[1] = Data2ID;
-
-//
-       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
-      
-       nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
-       nc_def_var (ncID, "Mode", NC_FLOAT, 2, DataDimVector, &ModeID);
-      
-       nc_def_var (ncID, "Density", NC_DOUBLE, 1, &TimeDimID, &DensID);
-       nc_def_var (ncID, "AvTemp", NC_DOUBLE, 1, &TimeDimID, &AvTempID);
-       nc_def_var (ncID, "Potential", NC_DOUBLE, 1, &TimeDimID, &PotID);
-       nc_def_var (ncID, "Current", NC_DOUBLE, 1, &TimeDimID, &CurrID);
-       nc_def_var (ncID, "SymAngle", NC_DOUBLE, 1, &TimeDimID, &SymAngID);
-       nc_def_var (ncID, "V_thermal", NC_DOUBLE, 1, &TimeDimID, &ThVelID);
-       nc_def_var (ncID, "Velocity", NC_DOUBLE, 2, DataDimVector, &VelID);
-       nc_def_var (ncID, "Temperature", NC_DOUBLE, 2, DataDimVector, &TempID);
-       nc_def_var (ncID, "B_Temperature", NC_DOUBLE, 2, DataDimVector, &MfTempID);
-       nc_def_var (ncID, "Flux_tot", NC_DOUBLE, 2, DataDimVector, &Flux2ID);
-       nc_def_var (ncID, "Symm", NC_DOUBLE, 2, DataDimVector, &SymmID);  
-       nc_def_var (ncID, "tensor_p", NC_DOUBLE, 2, Data2DimVector, &prTenID);
-       nc_def_var (ncID, "tensor_mf", NC_DOUBLE, 2, Data2DimVector, &mfTenID);
-  
-       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
-       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
-     
-
-       
-
-       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
-       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
-       nc_put_att_text(ncID, DensID, "Units", 5, "cm^-3");
-       nc_put_att_text(ncID, TempID, "Units", 2, "eV"); 
-       nc_put_att_text(ncID, TempID, "Frame", 2, "FA"); 
-       nc_put_att_text(ncID, TempID, "Order", 16, "perp1,perp2,para");
-       nc_put_att_text(ncID, MfTempID, "Units", 2, "eV");
-       nc_put_att_text(ncID, MfTempID, "Frame", 2, "FA");
-       nc_put_att_text(ncID, MfTempID, "Order", 16, "perp1,perp2,para");
-       nc_put_att_text(ncID, AvTempID, "Units", 2, "eV");  
-       nc_put_att_text(ncID, prTenID, "Units", 2, "eV");
-       nc_put_att_text(ncID, prTenID, "Frame", 3, "DSL");
-       nc_put_att_text(ncID, prTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
-       nc_put_att_text(ncID, mfTenID, "Units", 2, "eV");
-       nc_put_att_text(ncID, mfTenID, "Frame", 3, "DSL");
-       nc_put_att_text(ncID, mfTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
-       nc_put_att_text(ncID, Flux2ID, "Units", 9, "#/sec/cm2");
-       nc_put_att_text(ncID, PotID, "Units", 1, "V");
-       nc_put_att_text(ncID, SymmID, "Frame", 3, "DSL");
-       nc_put_att_text(ncID, CurrID, "Units", 7, "Unknown");
-       nc_put_att_text(ncID, SymAngID, "Units", 7, "degrees");
-       nc_put_att_text(ncID, VelID, "Units", 4, "km/s");
-       nc_put_att_text(ncID, ThVelID, "Units", 4, "km/s");
-       nc_put_att_text(ncID, VelID, "Frame", 3, "GSE");
-      
-      
- 
-       time(&p);
-       s = ctime(&p);
-       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
-         
-       
-
-       memcpy(&(ncSpFile[1]),&(mode[0]), 4);
-       STime = Double2DD_Time(Time);
-       memcpy(&(ncSpFile[5]),&(STime[2]), 9);
-       if ((status = nc_create(ncSpFile, NC_CLOBBER, &ncSpID)) != NC_NOERR)
-                                                      nc_handle_error(status);
-
-        status = nc_def_dim (ncSpID, "Time", NC_UNLIMITED, &TimeDimSpID);
-        status = nc_def_dim (ncSpID, "TimeLength", TIMELENGTH, &TimeLengthSpID);
-        status = nc_def_dim (ncSpID, "Data",3L, &DataSpID);
-        status = nc_def_dim (ncSpID, "Flux",32L, &FluxDimID);
-
-       FluxDimVector[0] = TimeDimSpID;  
-       FluxDimVector[1] = FluxDimID;
-
-//ModeID, DensID, VelID, TempID;
-     
-        status =  nc_def_var (ncSpID, "Time", NC_CHAR, 2, TimeDimVector, &TimeSpID);
-        status =  nc_def_var (ncSpID, "Mode", NC_FLOAT, 2, DataDimVector, &ModeSpID);
-        status =  nc_def_var (ncSpID, "Flux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
- 
-        status =  nc_def_var (ncSpID, "StartTime", NC_CHAR, 1, &TimeLengthSpID, &StartTimeSpID);
-        status = nc_def_var (ncSpID, "StopTime", NC_CHAR, 1, &TimeLengthSpID , &StopTimeSpID);
-  
-        status = nc_put_att_text(ncSpID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
-        status = nc_put_att_text(ncSpID, NC_GLOBAL, "Created", 24, s);
-         
-        status = nc_enddef(ncID); 
-        status = nc_enddef(ncSpID);
-
-         nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
-         nc_put_vara_text(ncSpID, StartTimeSpID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
-  
- }
-
- void put_double(RecStart, RecCount, ParCDF, ParNC) {
-
-
-    long RecInt = 1;
-    long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
-    
-    double *value;
-
-    value = (double *)malloc(sizeof(double)*RecCount);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-      nc_put_var_double(ncID, ParNC, value);
-
-    free(value);
- }
-
- void put_double3(RecStart, RecCount, ParCDF, ParNC) {
-    
-    long RecInt = 1;
-    long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
-    double *value;
-
-    value = (double *)malloc(sizeof(double)*RecCount*3);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-    nc_put_var_double(ncID, ParNC, value);
-
-    free(value);
-  }
-
-void put_double6(RecStart, RecCount, ParCDF, ParNC) {
-    
-    long RecInt = 1;
-    long indices[2] = {0,6}, intervals[1] = {1}, counts[1] = {6};
-    double *value;
-
-    value = (double *)malloc(sizeof(double)*RecCount*6);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-    nc_put_var_double(ncID, ParNC, value);
-
-    free(value);
-  }
-
- void put_mode(RecStart, RecCount, ParCDF, ParNC, ParSpNC) {
-  
-    float *value;
-    long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
-    long RecInt = 1;
-
-    value = (float *)malloc(sizeof(float) * RecCount *3);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-        nc_put_var_float(ncID, ParNC, value);
-        nc_put_var_float(ncSpID, ParSpNC, value);
-    free(value);
- }
-
-void put_spectra(RecStart, RecCount, ParCDF, ParNC) {
-  
-    double *value;
-    long indices[2] = {0,32}, intervals[1] = {1}, counts[1] = {32};
-    long RecInt = 1;
-
-    value = (double *)malloc(sizeof(double)*RecCount*32);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);      
-        nc_put_var_double(ncSpID, ParNC, value);
-    free(value);
- }
-/*--------------------------------------------------------------------------*/
-int main(int argc, char *argv[])
-{
-    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
-    long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
-    long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
-    double *value;
-    float *value_f;
-    size_t numElem;
-    long dimN, varN, par0, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10, par11, par12, par13, par14, par15, par16;
-    
-    CDFid id;
-    int i, j, status;
-    char  fileName[MAX_FILE_NAME_LEN];
-    dd_tmstr_t *dtm;
-    int First = 1;
-    double par[3], parr[6], doubleVal, parD[32];
-    float parF[32], par_f[3], parr_f[6], floatVal;
-    double DayOld;
-  
-
-    char *UT;
-    char data_set[8]="thx_pexx";
-/*-------------------------------- Arguments Decoding ----------------------------------------*/
-     if (argc <= 3) usage();       // CDF input file name and THEMIS Number not specified
-     else
-     {
-           strcpy(fileName, argv[1]);
-           strncpy(ThemisID,argv[2],3);
-           strncpy(mode,argv[3],4);
-      }
-      
-/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
-         
-        memcpy(&(data_set[2]),&(ThemisID[2]),1);
-        memcpy(&(data_set[6]),&(mode[2]),2);
-
-        memcpy(&(ThemisTime[0]),&(data_set[0]),8);
-        memcpy(&(PAR0[0]),&(data_set[0]),8); 
-        memcpy(&(PAR1[0]),&(data_set[0]),8); 
-        memcpy(&(PAR2[0]),&(data_set[0]),8); 
-        memcpy(&(PAR3[0]),&(data_set[0]),8); 
-        memcpy(&(PAR4[0]),&(data_set[0]),8); 
-        memcpy(&(PAR5[0]),&(data_set[0]),8); 
-        memcpy(&(PAR6[0]),&(data_set[0]),8); 
-        memcpy(&(PAR7[0]),&(data_set[0]),8);
-        memcpy(&(PAR8[0]),&(data_set[0]),8);
-        memcpy(&(PAR9[0]),&(data_set[0]),8);
-        memcpy(&(PAR10[0]),&(data_set[0]),8); 
-        memcpy(&(PAR11[0]),&(data_set[0]),8);
-        memcpy(&(PAR12[0]),&(data_set[0]),8);
-        memcpy(&(PAR13[0]),&(data_set[0]),8);
-        memcpy(&(PAR14[0]),&(data_set[0]),8);
-        memcpy(&(PAR15[0]),&(data_set[0]),8);
-        memcpy(&(PAR16[0]),&(data_set[0]),8);
- 
-/*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                      cdf_handle_error(cstatus);
-     printf(" THEMIS  %s %s\n", ThemisID, mode);
-
-/*********** treat all vars as zVars with eliminated false dimensionality **********/
-    
-     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-
-/************************ Get CDF Data  ************************************/
-
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
-   cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
- 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR3, &par3, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR4, &par4, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR5, &par5, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR6, &par6, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR7, &par7, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR8, &par8, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR9, &par9, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR10, &par10, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR11, &par11, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR12, &par12, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR13, &par13, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR14, &par14, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR15, &par15, NULL_);   
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR16, &par16, NULL_);
-
-      RecCount = (long)(MaxRec+1);
-      printf(" Max Rec %d\n", MaxRec);
-      
-       if (MaxRec <= 0) exit(0);
-
-       value = (double *)malloc(sizeof(double)* RecCount);
-       if ((cstatus = CDFlib (SELECT_,
-		     zVAR_, varN,
-		     zVAR_RECNUMBER_, RecStart ,
-		     zVAR_RECCOUNT_, RecCount,
-		     zVAR_RECINTERVAL_, RecInt,
-		     zVAR_DIMINDICES_, indices,
-		     zVAR_DIMCOUNTS_, countsE,
-	             zVAR_DIMINTERVALS_, intervals,
-                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
-                                             != CDF_OK) cdf_handle_error(cstatus);
-
-         for (i = 0; i < RecCount; i++) {
-
-                      
-                    UT = Double2DD_Time(value[i]); 
-
-                    if ((First == 0) && (value[i] - DayOld) > TimeGap) {
- 
-                        printf("GAP %f\n",(value[i] - DayOld)/60.0);                                              
-                        put_double(RecStart, (long)i - RecStart, par0, DeltaTID);
-                        put_mode(RecStart, (long)i - RecStart, par1, ModeID, ModeSpID);
-                        put_double(RecStart, (long)i - RecStart, par2, DensID);
-                        put_double3(RecStart, (long)i - RecStart, par3, VelID);
-                        put_double3(RecStart,(long)i - RecStart, par4, TempID);
-                        put_double3(RecStart, (long)i - RecStart, par11, MfTempID);
-                        put_double3(RecStart, (long)i - RecStart, par14, Flux2ID);
-                        put_double3(RecStart, (long)i - RecStart, par15, SymmID);
-                        put_double6(RecStart, (long)i - RecStart, par12, prTenID);
-                        put_double6(RecStart, (long)i - RecStart, par13, mfTenID);
-                        put_double(RecStart, (long)i - RecStart, par7, AvTempID);
-                        put_double(RecStart, (long)i - RecStart, par8, ThVelID);
-                        put_double(RecStart, (long)i - RecStart, par9, PotID);
-                        put_double(RecStart, (long)i - RecStart, par16, SymAngID);
-                        put_spectra(RecStart, (long)i - RecStart, par5, FluxID);
-
-                        nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld)); 
-                        nc_put_vara_text(ncSpID,StopTimeSpID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));
-
-                        if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
-                        if ((status = nc_close(ncSpID)) != NC_NOERR) nc_handle_error(status);
-                        First = 1;
-                        RecStart = (long)i;
-                        UT = Double2DD_Time(value[i]);
-                    }
-                    
-                    dtm =  ReadTime(UT); 
-                    if (First == 1) { 
-                       ncdefine(dtm->times);
-
-                       First = 0;
-                       Start[0] = 0;
-                    
-                     }   
-                    nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
-                    nc_put_vara_text(ncSpID, TimeSpID, Start, TimeCount, UT);
-                    Start[0]++;
-                    DayOld = value[i];
-
-         }
-         free(value);
-         nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
-         nc_put_vara_text(ncSpID,StopTimeSpID, &Start[1], &TimeCount[1], UT);
-    
-         
-         put_double(RecStart, RecCount - RecStart, par0, DeltaTID);
-         put_mode(RecStart, RecCount - RecStart, par1, ModeID, ModeSpID);
-         put_double(RecStart, RecCount - RecStart, par2, DensID);
-         put_double3(RecStart, RecCount - RecStart, par3, VelID);
-         put_double3(RecStart, RecCount - RecStart, par4, TempID);
-         put_double3(RecStart, RecCount - RecStart, par11, MfTempID);
-         put_double3(RecStart, RecCount - RecStart, par14, Flux2ID);
-         put_double3(RecStart, RecCount - RecStart, par15, SymmID);
-         put_double6(RecStart, RecCount - RecStart, par12, prTenID);
-         put_double6(RecStart, RecCount - RecStart, par13, mfTenID);  
-         put_double(RecStart, RecCount - RecStart, par7, AvTempID);
-         put_double(RecStart, RecCount - RecStart, par8, ThVelID);
-         put_double(RecStart, RecCount - RecStart, par9, PotID);
-         put_double(RecStart, RecCount - RecStart, par16, SymAngID);
-         put_spectra(RecStart, RecCount - RecStart, par5, FluxID);
- 
-/********************Close Files******************/
-       if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                            cdf_handle_error (cstatus);
-       if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
-       if ((status = nc_close(ncSpID)) != NC_NOERR) nc_handle_error(status);
-}
diff --git a/src/DECODERS/themis/esafull2nc/CMakeLists.txt b/src/DECODERS/themis/esafull2nc/CMakeLists.txt
deleted file mode 100644
index 44424a2..0000000
--- a/src/DECODERS/themis/esafull2nc/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-PROJECT(themis_esafull2nc)
-
-include_directories(
-  ${DDCLIENTINCLUDE_DIR}
-  ${NETCDFINCLUDE_DIR}
-  ${libcdf_INCLUDE_DIR}
-)
-
-#Configuration de l'exécutable
-file(
-        GLOB_RECURSE
-        source_files
-        ./*
-)
-  
-ADD_EXECUTABLE (themis_esafull2nc ${source_files} )
-
-target_link_libraries(
-  themis_esafull2nc
-  ${DDCLIENTLIBRARY}
-  ${NETCDFLIBRARY}
-  ${libcdf_LIBRARIES}
-)
-
-install (TARGETS themis_esafull2nc DESTINATION bin)
diff --git a/src/DECODERS/themis/esafull2nc/themis_esafull2nc.c b/src/DECODERS/themis/esafull2nc/themis_esafull2nc.c
deleted file mode 100644
index 904ae49..0000000
--- a/src/DECODERS/themis/esafull2nc/themis_esafull2nc.c
+++ /dev/null
@@ -1,659 +0,0 @@
- /**************************************************************/
- /*  THEMIS ESA ION AND ELECTRON MOMENTS CDF -> DD netCDF      */
- /*                         04.01.2008                         */
- /*                           V 1.1                            */
- /*                    Energy in  info  file                   */
- /*   New CDF with ALL modes and new params                     */
- /*    04.01.2008 - 2 files for peir & peer modes               */
- /**************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <netcdf.h>
-#include <cdf.h>
-#include <DD.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-
-#define TimeGap  1800000.0
-#define Source "themis@cdpp2"
-#define MAX_FILE_NAME_LEN  250                   // Max. file name length
-#define MAX_VARS           250                   // Max # of VARS in CDF
-
-
-/*************************************
-   Global variables and structures
-**************************************/
-long   CDFDims,                                         // Number of dimensions in a CDF file
-       CDFVars,                                            // Number of variables in a CDF file
-       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
-       CDFencoding,                                    // Data encoding
-       CDFmajority,                                      // Variable majority
-       CDFmaxRec,                                     // max Record number
-       CDFAttrs;                                          // number of CDF Attributes
-
-
-struct cdfvar {                              // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                     // variable dimensionality
-     long recVariance;                 // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
-} cdfVar[MAX_VARS];
-
-char mode[4];
-int  ncID, ncSpID;
-char ncFile[] = "peif000000000.nc";
-int TimeDimID, TimeLengthID, DataID, Data2ID, FluxDimID;;
-int TimeDimVector[2], DataDimVector[2],  Data2DimVector[2], FluxDimVector[2];      // netCDF Dim vectors
-size_t Start[2] = {0L,0L};
-size_t TimeCount[2] = {1L,TIMELENGTH};
-size_t Data1Count[2] = {1L,1L};
-size_t DataCount[2] = {1L,3L};
-size_t Data2Count[2] = {1L,6L};
-size_t FluxCount[2] = {1L,32L};
-
-char Version[]="v01";
-char ThemisID[]="tha\0";
-char ThemisTime[]="tha_peif_time";
-char PAR0[]="tha_peif_delta_time";
-char PAR1[]="tha_peif_mode";
-char PAR2[]="tha_peif_density";
-char PAR3[]="tha_peif_velocity_gse";
-char PAR4[]="tha_peif_t3";  // Diagonilized Temperature
-char PAR5[]="tha_peif_en_eflux";
-char PAR6[]="tha_peif_en_eflux_yaxis";
-char PAR7[]="tha_peif_avgtemp"; // trace of t3 divided by 3
-char PAR8[]="tha_peif_vthermal";
-char PAR9[]="tha_peif_sc_pot";
-char PAR10[]="tha_peif_sc_current";
-char PAR11[]="tha_peif_magt3"; // Temperature in Mag Field frame
-char PAR12[]="tha_peif_ptens"; // Pressure Tensor DSL
-char PAR13[]="tha_peif_mftens"; // Momentum Flux Tensor DSL
-char PAR14[]="tha_peif_flux"; // particle flux
-char PAR15[]="tha_peif_symm"; // Direction of pressure tensor symmetry in DSL
-char PAR16[]="tha_peif_symm_ang"; // Angle between Direction of pressure tensor symmetry  and B
-
-
-int StartTimeID, StopTimeID;
-int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID;                   // 1D
-int MfTempID, TempID, ModeID, VelID, Flux2ID, SymmID;                               // 2D -> 3
-int prTenID, mfTenID;                                                               // 2D -> 6
-int EnID, FluxID;                                                                   // 2D -> 32
-int TimeID;                                                                         // Time netCDF variable
- 
-  
-char StartT[TIMELENGTH]; // Start time from  data
-char StopT[TIMELENGTH];  // Stop time from  data
-/**************************
-   Function prototypes
-**************************/
-void usage();
-void cdf_handle_error (CDFstatus);
-void nc_handle_error (int);
-void removeFilepath();
-void removeCDFext();
-void removeVers();
-void ncdefine();
-/*--------------------------------------------------------------------------*/
-void usage()
-{
-   printf ("\nDescription:\n");
-   printf ("    This program converts a themis CDF file into a netCDF file.\n");
-   printf ("\n");
-   printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
-   printf ("\n");
-   printf ("Example: esa2nc testfile tha peif\n");
-   printf ("\n");
-   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a CDF error.
- *--------------------------------------------------------------------------*/
-void cdf_handle_error(CDFstatus status)
-{
-
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "CDF: %s\n", message);
-//   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a netCDF error.
- *--------------------------------------------------------------------------*/
-void nc_handle_error(int status)
-{
-  fprintf(stderr, "%s\n", nc_strerror(status));
-  exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Remove the filepath from a file name. *
- *  Example:
- *      /home/data/mydata.txt => mydata.txt
- *--------------------------------------------------------------------------*/
-void removeFilepath (char *fileName)
-{
-    char *ptr;
-
-    ptr = strrchr(fileName, '/');        // Unix file path separator
-    if (ptr != NULL)
-    {
-        ptr++;
-        strcpy(fileName, ptr);
-    }
-}
-/*--------------------------------------------------------------------------
- *  Decode CDF File Name *
- *--------------------------------------------------------------------------*/
-void removeVers (char *fileName)
-{
-    char *ptr;
-    char zero = '\0';
-    int i;
-  
- for (i = 0; i < 9; i++)
-  {
-     ptr = strchr(fileName, '_');
-      if (ptr != NULL)
-     {
-        ptr++;
-        strcpy(fileName, ptr);
-      }
-    }
-     ptr = strchr(fileName, '_');        //
-  
-     if (ptr != NULL)
-    {
-        ptr++;
-         strncpy(Version, ptr, 2);
-    }
- }
-
- /*--------------------------------------------------------------------------
- *  Remove the CDF extention *
- *--------------------------------------------------------------------------*/
-void removeCDFext (char *fileName)
-{
-    char *ptr;
-    char zero = '\0';
-
-    ptr = strchr(fileName, '.');
-    if (ptr != NULL)
-       strcpy(ptr, &zero);
-}
-/*--------------------------------------------------------------------------
- *  NetCDF File Definition  *
- *--------------------------------------------------------------------------*/
- void ncdefine(double Time)
- {
-    char *s;
-    time_t p;
-    int status;
-    char *STime;
-
-/*********************** Create netCDF file *****************************/
-      memcpy(&(ncFile[0]),&(mode[0]), 4);
-      STime = Double2DD_Time(Time);
-      memcpy(&(ncFile[4]),&(STime[2]), 9);
-      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
-                                                      nc_handle_error(status);
-/******************netCDF Dimensions *******************************/
-        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
-        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
-        nc_def_dim (ncID, "Data",3L, &DataID); 
-        nc_def_dim (ncID, "Data2",6L, &Data2ID);
-
-        nc_def_dim (ncID, "Flux",32L, &FluxDimID);
-
-/********************netCDF Variables ******************/
-       TimeDimVector[0] = TimeDimID;
-       DataDimVector[0] = TimeDimID;
-       Data2DimVector[0] = TimeDimID;
-       TimeDimVector[1] = TimeLengthID;
-       DataDimVector[1] = DataID;
-       FluxDimVector[0] = TimeDimID;
-       FluxDimVector[1] = FluxDimID;
-       Data2DimVector[1] = Data2ID;
-
-//ModeID, DensID, VelID, TempID;
-       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
-      
-       nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
-       nc_def_var (ncID, "Mode", NC_FLOAT, 2, DataDimVector, &ModeID);
-       nc_def_var (ncID, "Density", NC_DOUBLE, 1, &TimeDimID, &DensID);
-       nc_def_var (ncID, "AvTemp", NC_DOUBLE, 1, &TimeDimID, &AvTempID);
-       nc_def_var (ncID, "Potential", NC_DOUBLE, 1, &TimeDimID, &PotID);
-       nc_def_var (ncID, "Current", NC_DOUBLE, 1, &TimeDimID, &CurrID);
-       nc_def_var (ncID, "SymAngle", NC_DOUBLE, 1, &TimeDimID, &SymAngID);
-       nc_def_var (ncID, "V_thermal", NC_DOUBLE, 1, &TimeDimID, &ThVelID);
-       nc_def_var (ncID, "Velocity", NC_DOUBLE, 2, DataDimVector, &VelID);
-       nc_def_var (ncID, "Temperature", NC_DOUBLE, 2, DataDimVector, &TempID);
-       nc_def_var (ncID, "B_Temperature", NC_DOUBLE, 2, DataDimVector, &MfTempID);
-       nc_def_var (ncID, "Flux_tot", NC_DOUBLE, 2, DataDimVector, &Flux2ID);
-       nc_def_var (ncID, "Symm", NC_DOUBLE, 2, DataDimVector, &SymmID);  
-       nc_def_var (ncID, "tensor_p", NC_DOUBLE, 2, Data2DimVector, &prTenID);
-       nc_def_var (ncID, "tensor_mf", NC_DOUBLE, 2, Data2DimVector, &mfTenID);
-       nc_def_var (ncID, "Flux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
- //      nc_def_var (ncID, "Energy", NC_FLOAT, 2, FluxDimVector, &EnID);
-       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
-       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
-    
-
-       
-
-       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
-       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
-       nc_put_att_text(ncID, DensID, "Units", 5, "cm^-3");
-       nc_put_att_text(ncID, TempID, "Units", 2, "eV"); 
-       nc_put_att_text(ncID, TempID, "Frame", 2, "FA"); 
-       nc_put_att_text(ncID, TempID, "Order", 16, "perp1,perp2,para");
-       nc_put_att_text(ncID, MfTempID, "Units", 2, "eV");
-       nc_put_att_text(ncID, MfTempID, "Frame", 2, "FA");
-       nc_put_att_text(ncID, MfTempID, "Order", 16, "perp1,perp2,para");
-       nc_put_att_text(ncID, AvTempID, "Units", 2, "eV");  
-       nc_put_att_text(ncID, prTenID, "Units", 2, "eV");
-       nc_put_att_text(ncID, prTenID, "Frame", 3, "DSL");
-       nc_put_att_text(ncID, prTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
-       nc_put_att_text(ncID, mfTenID, "Units", 2, "eV");
-       nc_put_att_text(ncID, mfTenID, "Frame", 3, "DSL");
-       nc_put_att_text(ncID, mfTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
-       nc_put_att_text(ncID, Flux2ID, "Units", 9, "#/sec/cm2");
-       nc_put_att_text(ncID, PotID, "Units", 1, "V");
-       nc_put_att_text(ncID, SymmID, "Frame", 3, "DSL");
-       nc_put_att_text(ncID, CurrID, "Units", 7, "Unknown");
-       nc_put_att_text(ncID, SymAngID, "Units", 7, "degrees");
-       nc_put_att_text(ncID, VelID, "Units", 4, "km/s");
-       nc_put_att_text(ncID, ThVelID, "Units", 4, "km/s");
-       nc_put_att_text(ncID, VelID, "Frame", 3, "GSE");
-       nc_put_att_text(ncID, EnID, "Units", 2, "eV");
-       nc_put_att_text(ncID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
-
-       time(&p);
-       s = ctime(&p);
-       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
-       
-       nc_enddef(ncID);
-      
-       nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
-       
- }
-/*--------------------------------------------------------------------------*/
-int main(int argc, char *argv[])
-{
-    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
-    long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
-    long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
-    double *value;
-    float *value_f;
-    size_t numElem;
-    long dimN, varN, par0, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10, par11, par12, par13, par14, par15, par16;
-    CDFstatus   cstatus;           // CDF status code
-    CDFid id;
-    int i, j, status;
-    char  fileName[MAX_FILE_NAME_LEN];
-    dd_tmstr_t *dtm;
-    int First = 1;
-    double par[3], parr[6], doubleVal, parD[32];
-    float parF[32], par_f[3], parr_f[6], floatVal;
-    long DayOld;
-  
-
-    char *UT;
-    char data_set[8]="thx_pexx";
-/*-------------------------------- Arguments Decoding ----------------------------------------*/
-     if (argc <= 3) usage();       // CDF input file name and THEMIS Number not specified
-     else
-     {
-           strcpy(fileName, argv[1]);
-           strncpy(ThemisID,argv[2],3);
-           strncpy(mode,argv[3],4);
-      }
-      
-/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
-         
-        memcpy(&(data_set[2]),&(ThemisID[2]),1);
-        memcpy(&(data_set[6]),&(mode[2]),2);
-
-        memcpy(&(ThemisTime[0]),&(data_set[0]),8);
-        memcpy(&(PAR0[0]),&(data_set[0]),8); 
-        memcpy(&(PAR1[0]),&(data_set[0]),8); 
-        memcpy(&(PAR2[0]),&(data_set[0]),8); 
-        memcpy(&(PAR3[0]),&(data_set[0]),8); 
-        memcpy(&(PAR4[0]),&(data_set[0]),8); 
-        memcpy(&(PAR5[0]),&(data_set[0]),8); 
-        memcpy(&(PAR6[0]),&(data_set[0]),8); 
-        memcpy(&(PAR7[0]),&(data_set[0]),8);
-        memcpy(&(PAR8[0]),&(data_set[0]),8);
-        memcpy(&(PAR9[0]),&(data_set[0]),8);
-        memcpy(&(PAR10[0]),&(data_set[0]),8); 
-        memcpy(&(PAR11[0]),&(data_set[0]),8);
-        memcpy(&(PAR12[0]),&(data_set[0]),8);
-        memcpy(&(PAR13[0]),&(data_set[0]),8);
-        memcpy(&(PAR14[0]),&(data_set[0]),8);
-        memcpy(&(PAR15[0]),&(data_set[0]),8);
-        memcpy(&(PAR16[0]),&(data_set[0]),8);
- 
-/*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                      cdf_handle_error(cstatus);
-     printf(" THEMIS  %s %s\n", ThemisID, mode);
-
-/*********** treat all vars as zVars with eliminated false dimensionality **********/
-    
-     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-
-     // Remove the file path (/home/data/mydata => mydata)
-      removeFilepath(fileName);
-     // Remove Version Number
-      removeVers(fileName);
-
-     // Remove .cdf   extension
-     removeCDFext(fileName);
-
-/************************ Get CDF Data  ************************************/
-
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
-   cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
- 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR3, &par3, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR4, &par4, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR5, &par5, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR6, &par6, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR7, &par7, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR8, &par8, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR9, &par9, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR10, &par10, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR11, &par11, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR12, &par12, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR13, &par13, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR14, &par14, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR15, &par15, NULL_);   
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR16, &par16, NULL_);
-
-      RecCount = (long)(MaxRec+1);
-      printf(" Max Rec %d\n", MaxRec);
-      
-       value = (double *)malloc(sizeof(double)* RecCount);
-       if ((cstatus = CDFlib (SELECT_,
-		     zVAR_, varN,
-		     zVAR_RECNUMBER_, RecStart ,
-		     zVAR_RECCOUNT_, RecCount,
-		     zVAR_RECINTERVAL_, RecInt,
-		     zVAR_DIMINDICES_, indices,
-		     zVAR_DIMCOUNTS_, countsE,
-	             zVAR_DIMINTERVALS_, intervals,
-                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
-                                             != CDF_OK) cdf_handle_error(cstatus);
-
-         for (i = 0; i < RecCount; i++) {
-                    UT = Double2DD_Time(value[i]); 
-                    dtm =  ReadTime(UT); 
-                    if (First == 1) {
-                       ncdefine(dtm->times);
-                       First = 0;
-                     }   
-                    nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
-                   
-                    Start[0]++;
-
-         }
-         nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
-       
-         Start[0] = 0L;
-// deltaT
-        if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-        nc_put_var_double(ncID, DeltaTID, value);
-
-
-       free(value);
-       value_f = (float *)malloc(sizeof(float)* RecCount * 3);
-
-
-// Mode
-       if ((cstatus = CDFlib (SELECT_, zVAR_, par1,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value_f, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-        nc_put_var_float(ncID, ModeID, value_f);
-        free(value_f);
-
-       value = (double *)malloc(sizeof(double)* RecCount * 3);
- // peif_velocity_gse
-              if ((cstatus = CDFlib (SELECT_, zVAR_, par3,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-
-            nc_put_var_double(ncID, VelID, value);
-
-// temperature
-         if ((cstatus = CDFlib (SELECT_, zVAR_, par4,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-          nc_put_var_double(ncID, TempID,value);
-
-// temperature regard to B-field
-          if ((cstatus = CDFlib (SELECT_, zVAR_, par11,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
- 
-           nc_put_var_double(ncID, MfTempID,  value);
-
-// Flux total
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par14,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                         
-            nc_put_var_double(ncID, Flux2ID, value);
-              
-
-// symmetry
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par15,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, SymmID, value);
-           
-            free(value);
-            value = (double *)malloc(sizeof(double)* RecCount * 6);  
-
-//
-             if ((cstatus = CDFlib (SELECT_, zVAR_, par12,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF2,
-                                zVAR_DIMCOUNTS_, counts2,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-            
-              
-               nc_put_var_double(ncID, prTenID, value);
-
-// Pressure Tensor with regard to B-field              
-              if ((cstatus = CDFlib (SELECT_, zVAR_, par13,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF2,
-                                zVAR_DIMCOUNTS_, counts2,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                        
-              nc_put_var_double(ncID, mfTenID, value);
-              free(value);
-              value = (double *)malloc(sizeof(double)* RecCount); 
-
-// Density  
-             if ((cstatus = CDFlib (SELECT_, zVAR_, par2,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                         
-               nc_put_var_double(ncID, DensID, value);
-// Average Temperature           
-             if ((cstatus = CDFlib (SELECT_, zVAR_, par7,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-            
-             
-               nc_put_var_double(ncID, AvTempID, value); 
-// Thermal Velocity   
-              if ((cstatus = CDFlib (SELECT_, zVAR_, par8,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK) cdf_handle_error(cstatus); 
-                          
-       
-               nc_put_var_double(ncID, ThVelID, value);
-// Potential         
-            if ((cstatus = CDFlib (SELECT_, zVAR_, par9,
-                                zVAR_RECNUMBER_, RecStart,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                       
-               nc_put_var_double(ncID, PotID, value);
-// Current              
-   /*            if ((cstatus = CDFlib (SELECT_, zVAR_, par10,
-                                zVAR_RECNUMBER_, RecStart,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-         
-              
-               nc_put_var_double(ncID, CurrID, value);              
-    */    
-// Symmery Angle with B
-               if ((cstatus = CDFlib (SELECT_, zVAR_, par16,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                      
-                
-                nc_put_var_double(ncID, SymAngID, value);
-  
-               free(value);
-               value = (double *)malloc(sizeof(double)* RecCount *32); 
-
-               if ((cstatus = CDFlib (SELECT_, zVAR_, par5,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesFlux,
-                                zVAR_DIMCOUNTS_, countsFlux,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-          
-                   
-                  nc_put_var_double(ncID, FluxID, value);
-             
- /*
-            if ((cstatus = CDFlib (SELECT_, zVAR_, par6,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCountF,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesFlux,
-                                zVAR_DIMCOUNTS_, countsFlux,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, parF, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
- */ 
-  /*        if (!isnan(parF[0]))
-             nc_put_vara_float(ncID, EnID, Start, FluxCount, parF);
-          else nc_put_vara_float(ncID, EnID, Start, FluxCount, FillValueF);
-  */   //   for (j = 0; j < 32; i++) printf(" %f ", parF[j]);
-	 
- 
-      // }
- 
-       
-      free(value);
-/********************Close Files******************/
-       if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                            cdf_handle_error (cstatus);
-       if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
-       
-}
diff --git a/src/DECODERS/themis/esamom2nc/CMakeLists.txt b/src/DECODERS/themis/esamom2nc/CMakeLists.txt
deleted file mode 100644
index 8a96509..0000000
--- a/src/DECODERS/themis/esamom2nc/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-PROJECT(themis_esamom2nc)
-
-include_directories(
-  ${DDCLIENTINCLUDE_DIR}
-  ${NETCDFINCLUDE_DIR}
-  ${libcdf_INCLUDE_DIR}
-)
-
-#Configuration de l'exécutable
-file(
-        GLOB_RECURSE
-        source_files
-        ./*
-)
-  
-ADD_EXECUTABLE (themis_esamom2nc ${source_files} )
-
-target_link_libraries(
-  themis_esamom2nc
-  ${DDCLIENTLIBRARY}
-  ${NETCDFLIBRARY}
-  ${libcdf_LIBRARIES}
-)
-
-install (TARGETS themis_esamom2nc DESTINATION bin)
diff --git a/src/DECODERS/themis/esamom2nc/themis_esamom2nc.c b/src/DECODERS/themis/esamom2nc/themis_esamom2nc.c
deleted file mode 100644
index 4c7b6bc..0000000
--- a/src/DECODERS/themis/esamom2nc/themis_esamom2nc.c
+++ /dev/null
@@ -1,456 +0,0 @@
- /**************************************************************/
- /*  THEMIS ESA ION AND ELECTRON MOMENTS CDF -> DD netCDF      */
- /*                         04.01.2008                         */
- /*                           V 1.1                            */
- /*                                                            */
- /*   New CDF with ALL modes and new params                    */
- /*                   */
- /**************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <netcdf.h>
-#include <cdf.h>
-#include <DD.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-
-#define TimeGap  1800000.0
-#define Source "themis@cdpp2"
-#define MAX_FILE_NAME_LEN  250                   // Max. file name length
-#define MAX_VARS           250                   // Max # of VARS in CDF
-
-
-/*************************************
-   Global variables and structures
-**************************************/
-long   CDFDims,                                         // Number of dimensions in a CDF file
-       CDFVars,                                            // Number of variables in a CDF file
-       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
-       CDFencoding,                                    // Data encoding
-       CDFmajority,                                      // Variable majority
-       CDFmaxRec,                                     // max Record number
-       CDFAttrs;                                          // number of CDF Attributes
-
-
-struct cdfvar {                              // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                     // variable dimensionality
-     long recVariance;                 // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
-} cdfVar[MAX_VARS];
-
-char mode[4];
-int  ncID;
-char ncFile[] = "peim000000000.nc";
-int TimeDimID, TimeLengthID, DataID, Data2ID;
-int TimeDimVector[2], DataDimVector[2],  Data2DimVector[2];      // netCDF Dim vectors
-size_t Start[2] = {0L,0L};
-size_t TimeCount[2] = {1L,TIMELENGTH};
-size_t Data1Count[2] = {1L,1L};
-size_t DataCount[2] = {1L,3L};
-size_t Data2Count[2] = {1L,6L};
-
-char Version[]="v01";
-char ThemisID[]="tha\0";
-char ThemisTime[]="tha_peim_time";
-char PAR0[]="tha_peim_density";
-char PAR1[]="tha_peim_ptot";
-char PAR2[]="tha_peim_flux";
-char PAR3[]="tha_peim_mftens"; // Momentum Flux Tensor DSL
-char PAR4[]="tha_peim_eflux"; 
-char PAR5[]="tha_peim_velocity_gse";
-char PAR6[]="tha_peim_ptens"; // Pressure Tensor DSL 
-char PAR7[]="tha_peim_mag";
-char PAR8[]="tha_peim_velocity_mag";
-char PAR9[]="tha_peim_t3_mag";  // Diagonilized Temperature
-char PAR10[]="tha_peim_ptens_mag"; // 
-
-
-int StartTimeID, StopTimeID;
-int DeltaTID, DensID, PtotID;                    // 1D
-int FluxID, EfluxID, VelID, MagID, VelMagID, TempMagID;       // 2D -> 3
-int MfTensID, PtensID, PtensMagID ;                                                        // 2D -> 6
- 
-int TimeID;                                                                         // Time netCDF variable
- 
-  
-char StartT[TIMELENGTH]; // Start time from  data
-char StopT[TIMELENGTH];  // Stop time from  data
-/**************************
-   Function prototypes
-**************************/
-void usage();
-void cdf_handle_error (CDFstatus);
-void nc_handle_error (int);
-void ncdefine();
-/*--------------------------------------------------------------------------*/
-void usage()
-{
-   printf ("\nDescription:\n");
-   printf ("    This program converts a themis CDF file into a netCDF file.\n");
-   printf ("\n");
-   printf ("Usage: esa2nc <CDF file name> <ThemisID>\n");
-   printf ("\n");
-   printf ("Example: esa2nc testfile tha\n");
-   printf ("\n");
-   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a CDF error.
- *--------------------------------------------------------------------------*/
-void cdf_handle_error(CDFstatus status)
-{
-
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "CDF: %s\n", message);
-//   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a netCDF error.
- *--------------------------------------------------------------------------*/
-void nc_handle_error(int status)
-{
-  fprintf(stderr, "%s\n", nc_strerror(status));
-  exit(1);
-}
- 
- 
-/*--------------------------------------------------------------------------
- *  NetCDF File Definition  *
- *--------------------------------------------------------------------------*/
- void ncdefine(double Time)
- {
-    char *s;
-    time_t p;
-    int status;
-    char *STime;
-
-/*********************** Create netCDF file *****************************/     
-      memcpy(&(ncFile[0]),&(mode[0]),4);
-      STime = Double2DD_Time(Time);
-      memcpy(&(ncFile[4]),&(STime[2]), 9);
-      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
-                                                      nc_handle_error(status);
-/******************netCDF Dimensions *******************************/
-        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
-        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
-        nc_def_dim (ncID, "Data",3L, &DataID); 
-        nc_def_dim (ncID, "Data2",6L, &Data2ID);
-  
-/********************netCDF Variables ******************/
-       TimeDimVector[0] = TimeDimID;
-       DataDimVector[0] = TimeDimID;
-       Data2DimVector[0] = TimeDimID;
-       TimeDimVector[1] = TimeLengthID;
-       DataDimVector[1] = DataID;
-       
-       Data2DimVector[1] = Data2ID;
-
-//ModeID, DensID, VelID, TempID;
-       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
-       nc_def_var (ncID, "Density", NC_DOUBLE, 1, &TimeDimID, &DensID);
-       nc_def_var (ncID, "Ptot", NC_DOUBLE, 1, &TimeDimID, &PtotID);
-       nc_def_var (ncID, "Flux", NC_DOUBLE, 2, DataDimVector, &FluxID);
-       nc_def_var (ncID, "MfTens", NC_DOUBLE, 2, Data2DimVector, &MfTensID);
-       nc_def_var (ncID, "Eflux", NC_DOUBLE, 2, DataDimVector, &EfluxID);
-       nc_def_var (ncID, "Velocity", NC_DOUBLE, 2, DataDimVector, &VelID);
-       nc_def_var (ncID, "Ptens", NC_DOUBLE, 2, Data2DimVector, &PtensID);
-       nc_def_var (ncID, "Mag", NC_DOUBLE, 2, DataDimVector, &MagID); 
-       nc_def_var (ncID, "VelocityMag", NC_DOUBLE, 2, DataDimVector, &VelMagID);
-       nc_def_var (ncID, "TempMag", NC_DOUBLE, 2, DataDimVector, &TempMagID);
-       nc_def_var (ncID, "PtensMag", NC_DOUBLE, 2, Data2DimVector, &PtensMagID);
-     
-       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
-       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
- 
-
-       
-
-       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
-       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
-       nc_put_att_text(ncID, DensID, "Units", 5, "cm^-3");
-       
-       
-       time(&p);
-       s = ctime(&p);
-       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
-        
-       nc_enddef(ncID);
-        
-       nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
-        ;
- }
-/*--------------------------------------------------------------------------*/
-int main(int argc, char *argv[])
-{
-    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
-    long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, intervals[1] = {1};
-    long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6};
-    double *value;
-    float *value_f;
-    size_t numElem;
-    long dimN, varN, par0, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10;
-    CDFstatus   cstatus;           // CDF status code
-    CDFid id;
-    int i, j, status;
-    char  fileName[MAX_FILE_NAME_LEN];
-    dd_tmstr_t *dtm;
-    int First = 1;
-
-    char *UT;
-    char data_set[8]="thx_peim";
-/*-------------------------------- Arguments Decoding ----------------------------------------*/
-     if (argc <= 2) usage();       // CDF input file name and THEMIS Number not specified
-     else
-     {
-           strcpy(fileName, argv[1]);
-           strncpy(ThemisID,argv[2],3);
-           strncpy(mode,argv[3],4); 
-      }
-      
-/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
-        memcpy(&(data_set[2]),&(ThemisID[2]),1); 
-        memcpy(&(data_set[6]),&(mode[2]),2);
-      
-        memcpy(&(ThemisTime[0]),&(data_set[0]),8);
-        memcpy(&(PAR0[0]),&(data_set[0]),8); 
-        memcpy(&(PAR1[0]),&(data_set[0]),8); 
-        memcpy(&(PAR2[0]),&(data_set[0]),8); 
-        memcpy(&(PAR3[0]),&(data_set[0]),8); 
-        memcpy(&(PAR4[0]),&(data_set[0]),8); 
-        memcpy(&(PAR5[0]),&(data_set[0]),8); 
-        memcpy(&(PAR6[0]),&(data_set[0]),8); 
-        memcpy(&(PAR7[0]),&(data_set[0]),8);
-        memcpy(&(PAR8[0]),&(data_set[0]),8);
-        memcpy(&(PAR9[0]),&(data_set[0]),8);
-        memcpy(&(PAR10[0]),&(data_set[0]),8); 
-    
-/*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                      cdf_handle_error(cstatus);
-     printf(" THEMIS  %s \n", ThemisID);
-
-/*********** treat all vars as zVars with eliminated false dimensionality **********/
-    
-     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
- 
-
-/************************ Get CDF Data  ************************************/
-
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
-   cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
- 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR3, &par3, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR4, &par4, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR5, &par5, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR6, &par6, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR7, &par7, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR8, &par8, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR9, &par9, NULL_);
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR10, &par10, NULL_);
- 
-
-      RecCount = (long)(MaxRec+1);
-      printf(" Max Rec %d\n", MaxRec);
-    if (  RecCount > 0) {
-       value = (double *)malloc(sizeof(double)* RecCount);
-       if ((cstatus = CDFlib (SELECT_,
-		     zVAR_, varN,
-		     zVAR_RECNUMBER_, RecStart ,
-		     zVAR_RECCOUNT_, RecCount,
-		     zVAR_RECINTERVAL_, RecInt,
-		     zVAR_DIMINDICES_, indices,
-		     zVAR_DIMCOUNTS_, countsE,
-	             zVAR_DIMINTERVALS_, intervals,
-                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
-                                             != CDF_OK) cdf_handle_error(cstatus);
-
-         for (i = 0; i < RecCount; i++) {
-                    UT = Double2DD_Time(value[i]); 
-                    dtm =  ReadTime(UT); 
-                    if (First == 1) {
-                       ncdefine(dtm->times);
-                       First = 0;
-                     }   
-                    nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
-                    
-                    Start[0]++;
-
-         }
-         nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
-          
-  
-// Density        
-            if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
-                                zVAR_RECNUMBER_, RecStart,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                       
-               nc_put_var_double(ncID, DensID, value);
-// Ion Total Pressure
-             if ((cstatus = CDFlib (SELECT_, zVAR_, par1,
-                                zVAR_RECNUMBER_, RecStart,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, countsE,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-                       
-               nc_put_var_double(ncID, PtotID, value); 
-            
-             free(value); 
-             value = (double *)malloc(sizeof(double)* RecCount * 3);
- // flux
-              if ((cstatus = CDFlib (SELECT_, zVAR_, par2,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-
-            nc_put_var_double(ncID, FluxID, value);
-
-// Energy Flux
-         if ((cstatus = CDFlib (SELECT_, zVAR_, par4,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-          nc_put_var_double(ncID, EfluxID,value);
-
-// Velocity GSE
-          if ((cstatus = CDFlib (SELECT_, zVAR_, par5,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
- 
-           nc_put_var_double(ncID, VelID,  value);
-  
-// Magnetic Field Vector DSL
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par7,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, MagID, value);
-           
-// Velocity Mag
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par8,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, VelMagID, value);
-
- // Temperature Mag
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par9,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, TempMagID, value);
-         
-            free(value);
-            value = (double *)malloc(sizeof(double)* RecCount * 6);
-  
-// Momentum Flux Tensor
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par3,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF2,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, MfTensID, value);
-
-// Pressure Tensor
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par6,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF2,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, PtensID, value);
-
-// Pressure Tensor Mag
-           if ((cstatus = CDFlib (SELECT_, zVAR_, par10,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indicesF2,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-              
-                        
-            nc_put_var_double(ncID, PtensMagID, value);
-
-
-
-         free(value);
-/********************Close Files******************/
-    if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
-  }
-       if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                            cdf_handle_error (cstatus);
-
-       
-       
-}
diff --git a/src/DECODERS/themis/fgm2nc/CMakeLists.txt b/src/DECODERS/themis/fgm2nc/CMakeLists.txt
deleted file mode 100644
index 3acec22..0000000
--- a/src/DECODERS/themis/fgm2nc/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-PROJECT(themis_fgm2nc)
-
-include_directories(
-  ${DDCLIENTINCLUDE_DIR}
-  ${NETCDFINCLUDE_DIR}
-  ${libcdf_INCLUDE_DIR}
-)
-
-#Configuration de l'exécutable
-file(
-        GLOB_RECURSE
-        source_files
-        ./*
-)
-  
-ADD_EXECUTABLE (themis_fgm2nc ${source_files} )
-
-target_link_libraries(
-  themis_fgm2nc
-  ${DDCLIENTLIBRARY}
-  ${NETCDFLIBRARY}
-  ${libcdf_LIBRARIES}
-)
-
-install (TARGETS themis_fgm2nc DESTINATION bin)
diff --git a/src/DECODERS/themis/fgm2nc/themis_fgm2nc.c b/src/DECODERS/themis/fgm2nc/themis_fgm2nc.c
deleted file mode 100644
index ef853fb..0000000
--- a/src/DECODERS/themis/fgm2nc/themis_fgm2nc.c
+++ /dev/null
@@ -1,351 +0,0 @@
- /************************************************************/
- /*               THEMIS FGM CDF -> DD netCDF               */
-/*                            NaN -> -1.e31                  */
- /*                           12.10.2007                    */
- /*                             V 1.0                       */
- /***********************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <netcdf.h>
-#include <cdf.h>
-#include <DD.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-
-#define TimeGap  1800000.0
-#define Source "themis@cdpp2"
-#define MAX_FILE_NAME_LEN  250                   // Max. file name length
-#define MAX_VARS           250                   // Max # of VARS in CDF
-
-
-/*************************************
-   Global variables and structures
-**************************************/
-long   CDFDims,                                         // Number of dimensions in a CDF file
-       CDFVars,                                            // Number of variables in a CDF file
-       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
-       CDFencoding,                                    // Data encoding
-       CDFmajority,                                      // Variable majority
-       CDFmaxRec,                                     // max Record number
-       CDFAttrs;                                          // number of CDF Attributes
-
-
-struct cdfvar {                               // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                            // variable dimensionality
-     long recVariance;                        // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];         // # of data values in dimSizes
-} cdfVar[MAX_VARS];
-
-
-int  ncID;
-char ncFile[] = "fgmh000000000.nc";
-int TimeDimID, TimeLengthID, DataID;         // ID of netCDF dimensions
-int TimeDimVector[2], DataDimVector[2];      // netCDF Dim vectors
-size_t Start[2] = {0L,0L};
-size_t TimeCount[2] = {1L,TIMELENGTH};
-size_t DataCount[2] = {1L,3L};
-
-char Version[]="v01";
-char ThemisID[]="tha\0";
-char ThemisTime[]="tha_fgh_time";
-char PAR0[]="tha_fgh_gse";
-float FillValue[3] = {-1.e31,-1.e31,-1.e31};  
-
-int StartTimeID, StopTimeID;
-int FGMID;                         // Data netCDF Variables
-int TimeID;                                                           // Time netCDF variable
-
-char StartT[TIMELENGTH]; // Start time from  data
-char StopT[TIMELENGTH];  // Stop time from  data
-/**************************
-   Function prototypes
-**************************/
-void usage();
-void cdf_handle_error (CDFstatus);
-void nc_handle_error (int);
-void removeFilepath();
-void removeCDFext();
-void removeVers();
-
-/*--------------------------------------------------------------------------*/
-void usage()
-{
-   printf ("\nDescription:\n");
-   printf ("    This program converts a themis CDF file into a netCDF file.\n");
-   printf ("\n");
-   printf ("Usage: fgm2nc <CDF file name> <ThemisID> <Resolution>\n");
-   printf ("\n");
-   printf ("Example: fgm2nc testfile tha h\n");
-   printf ("\n");
-   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a CDF error.
- *--------------------------------------------------------------------------*/
-void cdf_handle_error(CDFstatus status)
-{
-
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "%s\n", message);
-   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a netCDF error.
- *--------------------------------------------------------------------------*/
-void nc_handle_error(int status)
-{
-  fprintf(stderr, "%s\n", nc_strerror(status));
-  exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Remove the filepath from a file name. *
- *  Example:
- *      /home/data/mydata.txt => mydata.txt
- *--------------------------------------------------------------------------*/
-void removeFilepath (char *fileName)
-{
-    char *ptr;
-
-    ptr = strrchr(fileName, '/');        // Unix file path separator
-    if (ptr != NULL)
-    {
-        ptr++;
-        strcpy(fileName, ptr);
-    }
-}
-/*--------------------------------------------------------------------------
- *  Decode CDF File Name *
- *--------------------------------------------------------------------------*/
-void removeVers (char *fileName)
-{
-    char *ptr;
-    char zero = '\0';
-    int i;
-  
- for (i = 0; i < 9; i++)
-  {
-     ptr = strchr(fileName, '_');
-      if (ptr != NULL)
-     {
-        ptr++;
-        strcpy(fileName, ptr);
-      }
-    }
-     ptr = strchr(fileName, '_');        //
-  
-     if (ptr != NULL)
-    {
-        ptr++;
-         strncpy(Version, ptr, 2);
-    }
- }
-
- /*--------------------------------------------------------------------------
- *  Remove the CDF extention *
- *--------------------------------------------------------------------------*/
-void removeCDFext (char *fileName)
-{
-    char *ptr;
-    char zero = '\0';
-
-    ptr = strchr(fileName, '.');
-    if (ptr != NULL)
-       strcpy(ptr, &zero);
-}
-/*--------------------------------------------------------------------------
- *  NetCDF File Definition  *
- *--------------------------------------------------------------------------*/
- void ncdefine(double Time, char *Sampling)
- {
-    char *s;
-    time_t p;
-    int status;
-    char *STime;
-
-/*********************** Create netCDF file *****************************/
-      STime = Double2DD_Time(Time);
-      
-      memcpy(&(ncFile[3]),&(Sampling[0]), 1);
-      memcpy(&(ncFile[4]),&(STime[2]), 9);
-      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
-                                                      nc_handle_error(status);
-/******************netCDF Dimensions *******************************/
-        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
-        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
-        nc_def_dim (ncID, "Data",3L, &DataID);
-
-/********************netCDF Variables ******************/
-       TimeDimVector[0] = TimeDimID;
-       DataDimVector[0] = TimeDimID;
-       TimeDimVector[1] = TimeLengthID;
-       DataDimVector[1] = DataID;
-
-//ModeID, DensID, VelID, TempID;
-       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);      
-       nc_def_var (ncID, "B", NC_FLOAT, 2, DataDimVector, &FGMID);
-       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
-       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
-
-       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
-       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
-       nc_put_att_text(ncID, NC_GLOBAL, "Resolution", 1, Sampling);
-   //  nc_put_att_text(ncID, NC_GLOBAL, "Version", 2, Version);
-       nc_put_att_text(ncID, FGMID, "Units", 2, "nT");     
-       nc_put_att_text(ncID, FGMID, "Frame", 3, "GSE");
-
-       time(&p);
-       s = ctime(&p);
-       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
-       nc_enddef(ncID);
-       nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
-
- }
-/*--------------------------------------------------------------------------*/
-int main(int argc, char *argv[])
-{
-    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
-    long indices[1] = {0}, counts[1] = {3}, intervals[1] = {1};
-    long countsE[1] = {1}, indicesF[2]={0,3};
-    double *value;
-    size_t numElem;
-    long dimN, varN, par0, par1;
-    CDFstatus   cstatus;           // CDF status code
-    CDFid id;
-    int i, j, status;
-    char fileName[MAX_FILE_NAME_LEN];
-    char Sampling[1];
-    dd_tmstr_t *dtm;
-    int First = 1;
-    float par[3];
-    long DayOld;
-
-    char *UT;
-/*-------------------------------- Arguments Decoding ----------------------------------------*/
-     if (argc <= 3) usage();       // CDF input file name and HEMIS Number not specified
-     else
-     {
-           strcpy(fileName, argv[1]);
-           strncpy(ThemisID, argv[2], 3);
-           strncpy(Sampling, argv[3], 1);
-      }
-     
-  
-/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
-	       
-        memcpy(&(ThemisTime[2]),&(ThemisID[2]),1);
-        memcpy(&(PAR0[2]),&(ThemisID[2]),1);
-        memcpy(&(ThemisTime[6]),&(Sampling[0]),1);
-        memcpy(&(PAR0[6]),&(Sampling[0]),1);
-       
-/*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                      cdf_handle_error(cstatus);
-     printf(" %s %s\n", argv[2],argv[3]);
-
-/*********** treat all vars as zVars with eliminated false dimensionality **********/
-    
-     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-
-     // Remove the file path (/home/data/mydata => mydata)
-      removeFilepath(fileName);
-     // Remove Version Number
-      removeVers(fileName);
-
-     // Remove .cdf   extension
-     removeCDFext(fileName);
-
-/************************ Get CDF Data  ************************************/
-
-   if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_)) != CDF_OK)
-                                                    cdf_handle_error(cstatus) ;
-   if ((cstatus = CDFlib( SELECT_, zVAR_, varN,
-                                    GET_, zVAR_MAXREC_, &MaxRec, NULL_)) != CDF_OK)
-                                                          cdf_handle_error(cstatus) ;
-
-  
-   if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_)) != CDF_OK)
-                                                    cdf_handle_error(cstatus) ;
-     
-   if ((cstatus = CDFlib( SELECT_, zVAR_, par0,
-                                 GET_, zVAR_DIMSIZES_, CDFDimSizes, NULL_)) != CDF_OK)
-                                                       cdf_handle_error (cstatus) ;
-
-
-      RecCount = (long)(MaxRec+1);
-      printf(" Max Rec %d\n", MaxRec);
-      if (MaxRec > 1) {
-       value = (double *)malloc(sizeof(double)* RecCount);
-       if ((cstatus = CDFlib (SELECT_,
-		     zVAR_, varN,
-		     zVAR_RECNUMBER_, RecStart ,
-		     zVAR_RECCOUNT_, RecCount,
-		     zVAR_RECINTERVAL_, RecInt,
-		     zVAR_DIMINDICES_, indices,
-		     zVAR_DIMCOUNTS_, countsE,
-	             zVAR_DIMINTERVALS_, intervals,
-                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
-                                             != CDF_OK)  cdf_handle_error (cstatus);
-
-        for (i = 0; i < RecCount; i++)
-          {
-           
-              UT = Double2DD_Time(value[i]);
-              dtm =  ReadTime(UT);
-     
-              if (i > 0 && (value[i]-value[i-1])  >  TimeGap)
-	        {
-                    printf(" !!! Time GAP -> %f min\n", (value[i]-value[i-1])/60.0);
-	            nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
-	            if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
-	      }
-
-              if (First == 1)
-                {
-                       ncdefine(dtm->times, Sampling);
-                       First = 0;
-                       DayOld = dtm->day;
-                 }
-              if (i > 0 && (value[i]-value[i-1])  >  TimeGap)
-	        {
-	           ncdefine(dtm->times, Sampling);
-	           Start[0] = 0L;
-	         }
-                   nc_put_vara_text(ncID, TimeID, Start, TimeCount, Double2DD_Time(dtm->times));
-
-
-	RecStart = (long)i;
-     
-	if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
-	                        zVAR_RECNUMBER_, RecStart ,
-	                        zVAR_RECCOUNT_, RecCountF,
-		                zVAR_RECINTERVAL_, RecInt,
-		                zVAR_DIMINDICES_, indicesF,
-	                        zVAR_DIMCOUNTS_, counts,
-	                        zVAR_DIMINTERVALS_, intervals,
-	                        GET_, zVAR_HYPERDATA_, par, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-        if (!isnan(par[0]))          
-           nc_put_vara_float(ncID, FGMID, Start, DataCount, par);
-        else nc_put_vara_float(ncID, FGMID, Start, DataCount, FillValue);
-
-          
-	 Start[0]++;
-        DayOld = dtm->day;
-       }
-      nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
-      free(value);
- 
-     if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
-   }
-/********************Close Files******************/
-     if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                            cdf_handle_error (cstatus);
-     
-}
diff --git a/src/DECODERS/themis/sst2nc/CMakeLists.txt b/src/DECODERS/themis/sst2nc/CMakeLists.txt
deleted file mode 100644
index 6ff47d1..0000000
--- a/src/DECODERS/themis/sst2nc/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-PROJECT(themis_sst2nc)
-
-include_directories(
-  ${DDCLIENTINCLUDE_DIR}
-  ${NETCDFINCLUDE_DIR}
-  ${libcdf_INCLUDE_DIR}
-)
-
-#Configuration de l'exécutable
-file(
-        GLOB_RECURSE
-        source_files
-        ./*
-)
-  
-ADD_EXECUTABLE (themis_sst2nc ${source_files} )
-
-target_link_libraries(
-  themis_sst2nc
-  ${DDCLIENTLIBRARY}
-  ${NETCDFLIBRARY}
-  ${libcdf_LIBRARIES}
-)
-
-install (TARGETS themis_sst2nc DESTINATION bin)
diff --git a/src/DECODERS/themis/sst2nc/themis_sst2nc.c b/src/DECODERS/themis/sst2nc/themis_sst2nc.c
deleted file mode 100644
index 8555b3b..0000000
--- a/src/DECODERS/themis/sst2nc/themis_sst2nc.c
+++ /dev/null
@@ -1,363 +0,0 @@
- /**************************************************************/
- /*  THEMIS ESA ION AND ELECTRON MOMENTS CDF -> DD netCDF      */
- /*                         04.01.2008                         */
- /*                           V 1.1                            */
- /*                    Energy in  info  file                   */
- /*   New CDF with ALL modes and new params                     */
- /*    04.01.2008 - 2 files for peir & peer modes               */
- /**************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <netcdf.h>
-#include <cdf.h>
-#include <DD.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-
-#define TimeGap  3600.0
-#define Source "themis@cdpp2"
-#define MAX_FILE_NAME_LEN  250                   // Max. file name length
-#define MAX_VARS           250                   // Max # of VARS in CDF
-
-
-/*************************************
-   Global variables and structures
-**************************************/
-long   CDFDims,                                         // Number of dimensions in a CDF file
-       CDFVars,                                            // Number of variables in a CDF file
-       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
-       CDFencoding,                                    // Data encoding
-       CDFmajority,                                      // Variable majority
-       CDFmaxRec,                                     // max Record number
-       CDFAttrs;                                          // number of CDF Attributes
-
-
-struct cdfvar {                              // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                     // variable dimensionality
-     long recVariance;                 // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
-} cdfVar[MAX_VARS];
-
-char mode[4];
-int  ncID;
-char ncFile[] = "psif000000000.nc";
-int TimeDimID, TimeLengthID, FluxDimID;
-int TimeDimVector[2], FluxDimVector[2];      // netCDF Dim vectors
-
-size_t Start[2] = {0L,0L};
-size_t TimeCount[2] = {1L,TIMELENGTH};
-size_t FluxCount[2] = {1L,16L};
-
-CDFstatus   cstatus;           // CDF status code
-
-char Version[]="v01";
-char ThemisID[]="tha\0";
-char ThemisTime[]="tha_psif_en_eflux_time";
-char PAR0[]="tha_psif_en_eflux_delta_time";
-char PAR1[]="tha_psif_en_eflux_mode";
-char PAR2[]="tha_psif_en_eflux";
-
-int StartTimeID, StopTimeID;
-int StartTimeSpID, StopTimeSpID;
-int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID;                   // 1D
-int MfTempID, TempID, ModeID, ModeSpID, VelID, Flux2ID, SymmID;                               // 2D -> 3
-int prTenID, mfTenID;                                                               // 2D -> 6
-int FluxID;                                                                   // 2D -> 32
-int TimeID;                                                                         // Time netCDF variable
-int TimeSpID; 
-  
-char StartT[TIMELENGTH]; // Start time from  data
-char StopT[TIMELENGTH];  // Stop time from  data
-/**************************
-   Function prototypes
-**************************/
-void usage();
-void cdf_handle_error (CDFstatus);
-void nc_handle_error (int);
-void removeFilepath();
-void removeCDFext();
-void removeVers();
-void ncdefine();
-/*--------------------------------------------------------------------------*/
-void usage()
-{
-   printf ("\nDescription:\n");
-   printf ("    This program converts a themis CDF file into a netCDF file.\n");
-   printf ("\n");
-   printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
-   printf ("\n");
-   printf ("Example: esa2nc testfile tha peif\n");
-   printf ("\n");
-   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a CDF error.
- *--------------------------------------------------------------------------*/
-void cdf_handle_error(CDFstatus status)
-{
-
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "CDF: %s\n", message);
-//   exit(1);
-}
-/*--------------------------------------------------------------------------
- *  Handles a netCDF error.
- *--------------------------------------------------------------------------*/
-void nc_handle_error(int status)
-{
-  fprintf(stderr, "%s\n", nc_strerror(status));
-  exit(1);
-}
-
-/*--------------------------------------------------------------------------
- *  NetCDF File Definition  *
- *--------------------------------------------------------------------------*/
- void ncdefine(double Time)
- {
-    char *s;
-    time_t p;
-    int status;
-    char *STime;
-
-/*********************** Create netCDF file *****************************/
-      memcpy(&(ncFile[0]),&(mode[0]), 4);
-      STime = Double2DD_Time(Time);
-      memcpy(&(ncFile[4]),&(STime[2]), 9);
-      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
-                                                      nc_handle_error(status);
-/******************netCDF Dimensions *******************************/
-        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
-        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
-        nc_def_dim (ncID, "Flux", 16L, &FluxDimID);
-
-/********************netCDF Variables ******************/
-       TimeDimVector[0] = TimeDimID;          
-       TimeDimVector[1] = TimeLengthID;
-       FluxDimVector[0] = TimeDimID;  
-       FluxDimVector[1] = FluxDimID;
-//
-       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
-      
-       nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
-       nc_def_var (ncID, "Mode", NC_FLOAT, 2, &TimeDimID, &ModeID);
-       nc_def_var (ncID, "Flux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
-  
-       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
-       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
-     
-
-       
-
-       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
-       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
-       nc_put_att_text(ncID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
-      
-      
-       time(&p);
-       s = ctime(&p);
-       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
-                  
-      status = nc_enddef(ncID); 
-      
-
-      nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
-        
-  
- }
-
- void put_double(RecStart, RecCount, ParCDF, ParNC) {
-
-
-    long RecInt = 1;
-    long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
-    
-    double *value;
-
-    value = (double *)malloc(sizeof(double)*RecCount);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-      nc_put_var_double(ncID, ParNC, value);
-
-    free(value);
- }
-
- 
- void put_mode(RecStart, RecCount, ParCDF, ParNC) {
-  
-    float *value;
-    long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
-    long RecInt = 1;
-
-    value = (float *)malloc(sizeof(float) * RecCount *3);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);
-        nc_put_var_float(ncID, ParNC, value);
-       
-    free(value);
- }
-
-void put_spectra(RecStart, RecCount, ParCDF, ParNC) {
-  
-    double *value;
-    long indices[2] = {0,16}, intervals[1] = {1}, counts[1] = {16};
-    long RecInt = 1;
-
-    value = (double *)malloc(sizeof(double)*RecCount*16);
-    if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
-                                zVAR_RECNUMBER_, RecStart ,
-                                zVAR_RECCOUNT_, RecCount,
-                                zVAR_RECINTERVAL_, RecInt,
-                                zVAR_DIMINDICES_, indices,
-                                zVAR_DIMCOUNTS_, counts,
-                                zVAR_DIMINTERVALS_, intervals,
-                                GET_, zVAR_HYPERDATA_, value, NULL_))
-                                              != CDF_OK)  cdf_handle_error(cstatus);      
-        nc_put_var_double(ncID, ParNC, value);
-    free(value);
- }
-/*--------------------------------------------------------------------------*/
-int main(int argc, char *argv[])
-{
-    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
-    long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
-    long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
-    double *value;
-    float *value_f;
-    size_t numElem;
-    long dimN, varN, par0, par1, par2;
-    
-    CDFid id;
-    int i, j, status;
-    char  fileName[MAX_FILE_NAME_LEN];
-    dd_tmstr_t *dtm;
-    int First = 1;
-    double DayOld;
-  
-
-    char *UT;
-    char data_set[8]="thx_psxf";
-/*-------------------------------- Arguments Decoding ----------------------------------------*/
-     if (argc <= 3) usage();       // CDF input file name and THEMIS Number not specified
-     else
-     {
-           strcpy(fileName, argv[1]);
-           strncpy(ThemisID,argv[2],3);
-           strncpy(mode,argv[3],4);
-      }
-      
-/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
-         
-        memcpy(&(data_set[2]),&(ThemisID[2]),1);
-        memcpy(&(data_set[6]),&(mode[2]),2);
-
-        memcpy(&(ThemisTime[0]),&(data_set[0]),8);
-        memcpy(&(PAR0[0]),&(data_set[0]),8); 
-        memcpy(&(PAR1[0]),&(data_set[0]),8); 
-        memcpy(&(PAR2[0]),&(data_set[0]),8); 
-
- 
-/*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                      cdf_handle_error(cstatus);
-     printf(" THEMIS  %s %s\n", ThemisID, mode);
-
-/*********** treat all vars as zVars with eliminated false dimensionality **********/
-    
-     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-
-/************************ Get CDF Data  ************************************/
-
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
-   cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
- 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
-   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
-
-
-      RecCount = (long)(MaxRec+1);
-      printf(" Max Rec %d\n", MaxRec);
-      
-       value = (double *)malloc(sizeof(double)* RecCount);
-       if ((cstatus = CDFlib (SELECT_,
-		     zVAR_, varN,
-		     zVAR_RECNUMBER_, RecStart ,
-		     zVAR_RECCOUNT_, RecCount,
-		     zVAR_RECINTERVAL_, RecInt,
-		     zVAR_DIMINDICES_, indices,
-		     zVAR_DIMCOUNTS_, countsE,
-	             zVAR_DIMINTERVALS_, intervals,
-                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
-                                             != CDF_OK) cdf_handle_error(cstatus);
-
-         for (i = 0; i < RecCount; i++) {
-
-                      
-                    UT = Double2DD_Time(value[i]); 
-
-                    if ((First == 0) && (value[i] - DayOld) > TimeGap) {
- 
-                        printf("GAP %f\n",(value[i] - DayOld)/60.0);                                              
-         //               put_double(RecStart, (long)i - RecStart, par0, DeltaTID);
-        //                put_mode(RecStart, (long)i - RecStart, par1, ModeID, ModeSpID);
-                        put_spectra(RecStart, (long)i - RecStart, par2, FluxID);
-
-                        nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));                        
-
-                        if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
-                     
-                        First = 1;
-                        RecStart = (long)i;
-                        UT = Double2DD_Time(value[i]);
-                    }
-                    
-                    dtm =  ReadTime(UT); 
-                    if (First == 1) { 
-                       ncdefine(dtm->times);
-
-                       First = 0;
-                       Start[0] = 0;
-                    
-                     }   
-                    nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
-                   
-                    Start[0]++;
-                    DayOld = value[i];
-
-         }
-         free(value);
-         nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
-       
-         
-   //      put_double(RecStart, RecCount - RecStart, par0, DeltaTID);
-   //      put_mode(RecStart, RecCount - RecStart, par1, ModeID, ModeSpID);
-         put_spectra(RecStart, RecCount - RecStart, par2, FluxID);
- 
-/********************Close Files******************/
-       if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                            cdf_handle_error (cstatus);
-       if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
-    
-}
diff --git a/src/DECODERS/themis/themis_esa2nc.c b/src/DECODERS/themis/themis_esa2nc.c
new file mode 100644
index 0000000..0ff25d0
--- /dev/null
+++ b/src/DECODERS/themis/themis_esa2nc.c
@@ -0,0 +1,656 @@
+ /**************************************************************/
+ /*  THEMIS ESA ION AND ELECTRON MOMENTS CDF -> DD netCDF      */
+ /*                         04.01.2008                         */
+ /*                           V 1.1                            */
+ /*                    Energy in  info  file                   */
+ /*   New CDF with ALL modes and new params                    */
+ /*    04.01.2008 - 2 files for peir & peer modes              */
+ /**************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <netcdf.h>
+#include <cdf.h>
+#include <DD.h>
+#include <string.h>
+#include <time.h>
+#include <math.h>
+
+#define TimeGap  1800000.0
+#define Source "themis@cdpp2"
+#define MAX_FILE_NAME_LEN  250                   // Max. file name length
+#define MAX_VARS           250                   // Max # of VARS in CDF
+
+
+/*************************************
+   Global variables and structures
+**************************************/
+long   CDFDims,                                         // Number of dimensions in a CDF file
+       CDFVars,                                            // Number of variables in a CDF file
+       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
+       CDFencoding,                                    // Data encoding
+       CDFmajority,                                      // Variable majority
+       CDFmaxRec,                                     // max Record number
+       CDFAttrs;                                          // number of CDF Attributes
+
+
+struct cdfvar {                              // CDF variable structure
+     char name[CDF_VAR_NAME_LEN+1];
+     long num;                                //variable number
+     long datatype;
+     long numElem;                     // variable dimensionality
+     long recVariance;                 // variable rec Variance
+     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
+} cdfVar[MAX_VARS];
+
+char mode[4];
+int  ncID, ncSpID;
+char ncFile[] = "peif_000000000.nc";
+int TimeDimID, TimeLengthID, DataID, Data2ID, FluxDimID;;
+int TimeDimVector[2], DataDimVector[2],  Data2DimVector[2], FluxDimVector[2];      // netCDF Dim vectors
+size_t Start[2] = {0L,0L};
+size_t TimeCount[2] = {1L,TIMELENGTH};
+size_t Data1Count[2] = {1L,1L};
+size_t DataCount[2] = {1L,3L};
+size_t Data2Count[2] = {1L,6L};
+size_t FluxCount[2] = {1L,32L};
+
+char Version[]="v01";
+char ThemisID[]="tha\0";
+char ThemisTime[]="tha_peif_time";
+char PAR0[]="tha_peif_delta_time";
+char PAR1[]="tha_peif_mode";
+char PAR2[]="tha_peif_density";
+char PAR3[]="tha_peif_velocity_gse";
+char PAR4[]="tha_peif_t3";  // Diagonilized Temperature
+char PAR5[]="tha_peif_en_eflux";
+char PAR6[]="tha_peif_en_eflux_yaxis";
+char PAR7[]="tha_peif_avgtemp"; // trace of t3 divided by 3
+char PAR8[]="tha_peif_vthermal";
+char PAR9[]="tha_peif_sc_pot";
+char PAR10[]="tha_peif_sc_current";
+char PAR11[]="tha_peif_magt3"; // Temperature in Mag Field frame
+char PAR12[]="tha_peif_ptens"; // Pressure Tensor DSL
+char PAR13[]="tha_peif_mftens"; // Momentum Flux Tensor DSL
+char PAR14[]="tha_peif_flux"; // particle flux
+char PAR15[]="tha_peif_symm"; // Direction of pressure tensor symmetry in DSL
+char PAR16[]="tha_peif_symm_ang"; // Angle between Direction of pressure tensor symmetry  and B
+
+
+int StartTimeID, StopTimeID;
+int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID;                   // 1D
+int MfTempID, TempID, ModeID, VelID, Flux2ID, SymmID;                               // 2D -> 3
+int prTenID, mfTenID;                                                               // 2D -> 6
+int EnID, FluxID;                                                                   // 2D -> 32
+int TimeID;                                                                         // Time netCDF variable
+ 
+  
+char StartT[TIMELENGTH]; // Start time from  data
+char StopT[TIMELENGTH];  // Stop time from  data
+/**************************
+   Function prototypes
+**************************/
+void usage();
+void cdf_handle_error (CDFstatus);
+void nc_handle_error (int);
+void removeFilepath();
+void removeCDFext();
+void removeVers();
+void ncdefine();
+/*--------------------------------------------------------------------------*/
+void usage()
+{
+   printf ("\nDescription:\n");
+   printf ("    This program converts a themis CDF file into a netCDF file.\n");
+   printf ("\n");
+   printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
+   printf ("\n");
+   printf ("Example: esa2nc testfile tha peif\n");
+   printf ("\n");
+   exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a CDF error.
+ *--------------------------------------------------------------------------*/
+void cdf_handle_error(CDFstatus status)
+{
+
+  char  message[CDF_STATUSTEXT_LEN+1];
+
+   CDFerror (status, message);              /* Get the appropriate message */
+   fprintf  (stderr, "CDF: %s\n", message);
+//   exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a netCDF error.
+ *--------------------------------------------------------------------------*/
+void nc_handle_error(int status)
+{
+  fprintf(stderr, "%s\n", nc_strerror(status));
+  exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Remove the filepath from a file name. *
+ *  Example:
+ *      /home/data/mydata.txt => mydata.txt
+ *--------------------------------------------------------------------------*/
+void removeFilepath (char *fileName)
+{
+    char *ptr;
+
+    ptr = strrchr(fileName, '/');        // Unix file path separator
+    if (ptr != NULL)
+    {
+        ptr++;
+        strcpy(fileName, ptr);
+    }
+}
+/*--------------------------------------------------------------------------
+ *  Decode CDF File Name *
+ *--------------------------------------------------------------------------*/
+void removeVers (char *fileName)
+{
+    char *ptr;
+    char zero = '\0';
+    int i;
+  
+ for (i = 0; i < 9; i++)
+  {
+     ptr = strchr(fileName, '_');
+      if (ptr != NULL)
+     {
+        ptr++;
+        strcpy(fileName, ptr);
+      }
+    }
+     ptr = strchr(fileName, '_');        //
+  
+     if (ptr != NULL)
+    {
+        ptr++;
+         strncpy(Version, ptr, 2);
+    }
+ }
+
+ /*--------------------------------------------------------------------------
+ *  Remove the CDF extention *
+ *--------------------------------------------------------------------------*/
+void removeCDFext (char *fileName)
+{
+    char *ptr;
+    char zero = '\0';
+
+    ptr = strchr(fileName, '.');
+    if (ptr != NULL)
+       strcpy(ptr, &zero);
+}
+/*--------------------------------------------------------------------------
+ *  NetCDF File Definition  *
+ *--------------------------------------------------------------------------*/
+ void ncdefine(double Time)
+ {
+    char *s;
+    time_t p;
+    int status;
+    char *STime;
+
+/*********************** Create netCDF file *****************************/
+      memcpy(&(ncFile[0]),&(mode[0]), 4);
+      STime = Double2DD_Time(Time);
+      memcpy(&(ncFile[5]),&(STime[2]), 9);
+      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
+                                                      nc_handle_error(status);
+/******************netCDF Dimensions *******************************/
+        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
+        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
+        nc_def_dim (ncID, "Data",3L, &DataID); 
+        nc_def_dim (ncID, "Data2",6L, &Data2ID);
+
+        nc_def_dim (ncID, "Flux",32L, &FluxDimID);
+
+/********************netCDF Variables ******************/
+       TimeDimVector[0] = TimeDimID;
+       DataDimVector[0] = TimeDimID;
+       Data2DimVector[0] = TimeDimID;
+       TimeDimVector[1] = TimeLengthID;
+       DataDimVector[1] = DataID;
+       FluxDimVector[0] = TimeDimID;
+       FluxDimVector[1] = FluxDimID;
+       Data2DimVector[1] = Data2ID;
+
+//ModeID, DensID, VelID, TempID;
+       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
+      
+       nc_def_var (ncID, "delta_time", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
+       nc_def_var (ncID, "mode", NC_FLOAT, 2, DataDimVector, &ModeID);
+       nc_def_var (ncID, "density", NC_DOUBLE, 1, &TimeDimID, &DensID);
+       nc_def_var (ncID, "avgtemp", NC_DOUBLE, 1, &TimeDimID, &AvTempID);
+       nc_def_var (ncID, "sc_pot", NC_DOUBLE, 1, &TimeDimID, &PotID);
+       nc_def_var (ncID, "sc_current", NC_DOUBLE, 1, &TimeDimID, &CurrID);
+       nc_def_var (ncID, "symm_ang", NC_DOUBLE, 1, &TimeDimID, &SymAngID);
+       nc_def_var (ncID, "vthermal", NC_DOUBLE, 1, &TimeDimID, &ThVelID);
+       nc_def_var (ncID, "velocity_gse", NC_DOUBLE, 2, DataDimVector, &VelID);
+       nc_def_var (ncID, "t3", NC_DOUBLE, 2, DataDimVector, &TempID);
+       nc_def_var (ncID, "magt3", NC_DOUBLE, 2, DataDimVector, &MfTempID);
+       nc_def_var (ncID, "flux", NC_DOUBLE, 2, DataDimVector, &Flux2ID);
+       nc_def_var (ncID, "symm", NC_DOUBLE, 2, DataDimVector, &SymmID);  
+       nc_def_var (ncID, "ptens", NC_DOUBLE, 2, Data2DimVector, &prTenID);
+       nc_def_var (ncID, "mftens", NC_DOUBLE, 2, Data2DimVector, &mfTenID);
+       nc_def_var (ncID, "en_eflux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
+       nc_def_var (ncID, "en_eflux_yaxis", NC_FLOAT, 2, FluxDimVector, &EnID);
+       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
+       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
+
+       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
+       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
+       nc_put_att_text(ncID, DensID, "Units", 5, "cm^-3");
+       nc_put_att_text(ncID, TempID, "Units", 2, "eV"); 
+       nc_put_att_text(ncID, TempID, "Frame", 2, "FA"); 
+       nc_put_att_text(ncID, TempID, "Order", 16, "perp1,perp2,para");
+       nc_put_att_text(ncID, MfTempID, "Units", 2, "eV");
+       nc_put_att_text(ncID, MfTempID, "Frame", 2, "FA");
+       nc_put_att_text(ncID, MfTempID, "Order", 16, "perp1,perp2,para");
+       nc_put_att_text(ncID, AvTempID, "Units", 2, "eV");  
+       nc_put_att_text(ncID, prTenID, "Units", 2, "eV");
+       nc_put_att_text(ncID, prTenID, "Frame", 3, "DSL");
+       nc_put_att_text(ncID, prTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
+       nc_put_att_text(ncID, mfTenID, "Units", 2, "eV");
+       nc_put_att_text(ncID, mfTenID, "Frame", 3, "DSL");
+       nc_put_att_text(ncID, mfTenID, "Order", 17, "xx,xy,xz,yy,zz,yz");
+       nc_put_att_text(ncID, Flux2ID, "Units", 9, "#/sec/cm2");
+       nc_put_att_text(ncID, PotID, "Units", 1, "V");
+       nc_put_att_text(ncID, SymmID, "Frame", 3, "DSL");
+       nc_put_att_text(ncID, CurrID, "Units", 7, "Unknown");
+       nc_put_att_text(ncID, SymAngID, "Units", 7, "degrees");
+       nc_put_att_text(ncID, VelID, "Units", 4, "km/s");
+       nc_put_att_text(ncID, ThVelID, "Units", 4, "km/s");
+       nc_put_att_text(ncID, VelID, "Frame", 3, "GSE");
+       nc_put_att_text(ncID, EnID, "Units", 2, "eV");
+       nc_put_att_text(ncID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
+
+       time(&p);
+       s = ctime(&p);
+       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
+       
+       nc_enddef(ncID);
+      
+       nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
+       
+ }
+/*--------------------------------------------------------------------------*/
+int main(int argc, char *argv[])
+{
+    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
+    long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
+    long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
+    double *value;
+    float *value_f;
+    size_t numElem;
+    long dimN, varN, par0, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10, par11, par12, par13, par14, par15, par16;
+    CDFstatus   cstatus;           // CDF status code
+    CDFid id;
+    int i, j, status;
+    char  fileName[MAX_FILE_NAME_LEN];
+    dd_tmstr_t *dtm;
+    int First = 1;
+    double par[3], parr[6], doubleVal, parD[32];
+    float parF[32], par_f[3], parr_f[6], floatVal;
+    long DayOld;
+  
+
+    char *UT;
+    char data_set[8]="thx_pexx";
+/*-------------------------------- Arguments Decoding ----------------------------------------*/
+     if (argc <= 3) usage();       // CDF input file name and THEMIS Number not specified
+     else
+     {
+           strcpy(fileName, argv[1]);
+           strncpy(ThemisID,argv[2],3);
+           strncpy(mode,argv[3],4);
+      }
+      
+/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
+         
+        memcpy(&(data_set[2]),&(ThemisID[2]),1);
+        memcpy(&(data_set[6]),&(mode[2]),2);
+
+        memcpy(&(ThemisTime[0]),&(data_set[0]),8);
+        memcpy(&(PAR0[0]),&(data_set[0]),8); 
+        memcpy(&(PAR1[0]),&(data_set[0]),8); 
+        memcpy(&(PAR2[0]),&(data_set[0]),8); 
+        memcpy(&(PAR3[0]),&(data_set[0]),8); 
+        memcpy(&(PAR4[0]),&(data_set[0]),8); 
+        memcpy(&(PAR5[0]),&(data_set[0]),8); 
+        memcpy(&(PAR6[0]),&(data_set[0]),8); 
+        memcpy(&(PAR7[0]),&(data_set[0]),8);
+        memcpy(&(PAR8[0]),&(data_set[0]),8);
+        memcpy(&(PAR9[0]),&(data_set[0]),8);
+        memcpy(&(PAR10[0]),&(data_set[0]),8); 
+        memcpy(&(PAR11[0]),&(data_set[0]),8);
+        memcpy(&(PAR12[0]),&(data_set[0]),8);
+        memcpy(&(PAR13[0]),&(data_set[0]),8);
+        memcpy(&(PAR14[0]),&(data_set[0]),8);
+        memcpy(&(PAR15[0]),&(data_set[0]),8);
+        memcpy(&(PAR16[0]),&(data_set[0]),8);
+ 
+/*********************** Open CDF file *****************************/
+     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
+                                      cdf_handle_error(cstatus);
+     printf(" THEMIS  %s %s\n", ThemisID, mode);
+
+/*********** treat all vars as zVars with eliminated false dimensionality **********/
+    
+     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
+                                                   cdf_handle_error (cstatus);
+
+     // Remove the file path (/home/data/mydata => mydata)
+      removeFilepath(fileName);
+     // Remove Version Number
+      removeVers(fileName);
+
+     // Remove .cdf   extension
+     removeCDFext(fileName);
+
+/************************ Get CDF Data  ************************************/
+
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
+   cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
+ 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR3, &par3, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR4, &par4, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR5, &par5, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR6, &par6, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR7, &par7, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR8, &par8, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR9, &par9, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR10, &par10, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR11, &par11, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR12, &par12, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR13, &par13, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR14, &par14, NULL_); 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR15, &par15, NULL_);   
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR16, &par16, NULL_);
+
+      RecCount = (long)(MaxRec+1);
+      printf(" Max Rec %d\n", MaxRec);
+      
+       value = (double *)malloc(sizeof(double)* RecCount);
+       if ((cstatus = CDFlib (SELECT_,
+		     zVAR_, varN,
+		     zVAR_RECNUMBER_, RecStart ,
+		     zVAR_RECCOUNT_, RecCount,
+		     zVAR_RECINTERVAL_, RecInt,
+		     zVAR_DIMINDICES_, indices,
+		     zVAR_DIMCOUNTS_, countsE,
+	             zVAR_DIMINTERVALS_, intervals,
+                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
+                                             != CDF_OK) cdf_handle_error(cstatus);
+
+         for (i = 0; i < RecCount; i++) {
+                    UT = Double2DD_Time(value[i]); 
+                    dtm =  ReadTime(UT); 
+                    if (First == 1) {
+                       ncdefine(dtm->times);
+                       First = 0;
+                     }   
+                    nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
+                   
+                    Start[0]++;
+
+         }
+         nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
+       
+         Start[0] = 0L;
+// deltaT
+        if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+        nc_put_var_double(ncID, DeltaTID, value);
+
+
+       free(value);
+       value_f = (float *)malloc(sizeof(float)* RecCount * 3);
+
+
+// Mode
+       if ((cstatus = CDFlib (SELECT_, zVAR_, par1,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value_f, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+        nc_put_var_float(ncID, ModeID, value_f);
+        free(value_f);
+
+       value = (double *)malloc(sizeof(double)* RecCount * 3);
+ // peif_velocity_gse
+              if ((cstatus = CDFlib (SELECT_, zVAR_, par3,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+
+            nc_put_var_double(ncID, VelID, value);
+
+// temperature
+         if ((cstatus = CDFlib (SELECT_, zVAR_, par4,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+          nc_put_var_double(ncID, TempID,value);
+
+// temperature regard to B-field
+          if ((cstatus = CDFlib (SELECT_, zVAR_, par11,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+ 
+           nc_put_var_double(ncID, MfTempID,  value);
+
+// Flux total
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par14,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                         
+            nc_put_var_double(ncID, Flux2ID, value);
+              
+
+// symmetry
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par15,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, SymmID, value);
+           
+            free(value);
+            value = (double *)malloc(sizeof(double)* RecCount * 6);  
+
+//
+             if ((cstatus = CDFlib (SELECT_, zVAR_, par12,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF2,
+                                zVAR_DIMCOUNTS_, counts2,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+            
+              
+               nc_put_var_double(ncID, prTenID, value);
+
+// Pressure Tensor with regard to B-field              
+              if ((cstatus = CDFlib (SELECT_, zVAR_, par13,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF2,
+                                zVAR_DIMCOUNTS_, counts2,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                        
+              nc_put_var_double(ncID, mfTenID, value);
+              free(value);
+              value = (double *)malloc(sizeof(double)* RecCount); 
+
+// Density  
+             if ((cstatus = CDFlib (SELECT_, zVAR_, par2,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                         
+               nc_put_var_double(ncID, DensID, value);
+// Average Temperature           
+             if ((cstatus = CDFlib (SELECT_, zVAR_, par7,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+            
+             
+               nc_put_var_double(ncID, AvTempID, value); 
+// Thermal Velocity   
+              if ((cstatus = CDFlib (SELECT_, zVAR_, par8,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK) cdf_handle_error(cstatus); 
+                          
+       
+               nc_put_var_double(ncID, ThVelID, value);
+// Potential         
+            if ((cstatus = CDFlib (SELECT_, zVAR_, par9,
+                                zVAR_RECNUMBER_, RecStart,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                       
+               nc_put_var_double(ncID, PotID, value);
+// Current              
+   /*            if ((cstatus = CDFlib (SELECT_, zVAR_, par10,
+                                zVAR_RECNUMBER_, RecStart,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+         
+              
+               nc_put_var_double(ncID, CurrID, value);              
+    */    
+// Symmery Angle with B
+               if ((cstatus = CDFlib (SELECT_, zVAR_, par16,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                      
+                
+                nc_put_var_double(ncID, SymAngID, value);
+  
+               free(value);
+               value = (double *)malloc(sizeof(double)* RecCount *32); 
+
+               if ((cstatus = CDFlib (SELECT_, zVAR_, par5,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesFlux,
+                                zVAR_DIMCOUNTS_, countsFlux,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+          
+                   
+                  nc_put_var_double(ncID, FluxID, value);
+             
+ /*
+            if ((cstatus = CDFlib (SELECT_, zVAR_, par6,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCountF,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesFlux,
+                                zVAR_DIMCOUNTS_, countsFlux,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, parF, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+ */ 
+  /*        if (!isnan(parF[0]))
+             nc_put_vara_float(ncID, EnID, Start, FluxCount, parF);
+          else nc_put_vara_float(ncID, EnID, Start, FluxCount, FillValueF);
+  */   //   for (j = 0; j < 32; i++) printf(" %f ", parF[j]);
+	 
+ 
+      // }
+ 
+       
+      free(value);
+/********************Close Files******************/
+       if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
+                            cdf_handle_error (cstatus);
+       if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
+       
+}
diff --git a/src/DECODERS/themis/themis_esamom2nc.c b/src/DECODERS/themis/themis_esamom2nc.c
new file mode 100644
index 0000000..4c7b6bc
--- /dev/null
+++ b/src/DECODERS/themis/themis_esamom2nc.c
@@ -0,0 +1,456 @@
+ /**************************************************************/
+ /*  THEMIS ESA ION AND ELECTRON MOMENTS CDF -> DD netCDF      */
+ /*                         04.01.2008                         */
+ /*                           V 1.1                            */
+ /*                                                            */
+ /*   New CDF with ALL modes and new params                    */
+ /*                   */
+ /**************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <netcdf.h>
+#include <cdf.h>
+#include <DD.h>
+#include <string.h>
+#include <time.h>
+#include <math.h>
+
+#define TimeGap  1800000.0
+#define Source "themis@cdpp2"
+#define MAX_FILE_NAME_LEN  250                   // Max. file name length
+#define MAX_VARS           250                   // Max # of VARS in CDF
+
+
+/*************************************
+   Global variables and structures
+**************************************/
+long   CDFDims,                                         // Number of dimensions in a CDF file
+       CDFVars,                                            // Number of variables in a CDF file
+       CDFDimSizes[CDF_MAX_DIMS],      // Dimension Sizes in a CDF file
+       CDFencoding,                                    // Data encoding
+       CDFmajority,                                      // Variable majority
+       CDFmaxRec,                                     // max Record number
+       CDFAttrs;                                          // number of CDF Attributes
+
+
+struct cdfvar {                              // CDF variable structure
+     char name[CDF_VAR_NAME_LEN+1];
+     long num;                                //variable number
+     long datatype;
+     long numElem;                     // variable dimensionality
+     long recVariance;                 // variable rec Variance
+     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
+} cdfVar[MAX_VARS];
+
+char mode[4];
+int  ncID;
+char ncFile[] = "peim000000000.nc";
+int TimeDimID, TimeLengthID, DataID, Data2ID;
+int TimeDimVector[2], DataDimVector[2],  Data2DimVector[2];      // netCDF Dim vectors
+size_t Start[2] = {0L,0L};
+size_t TimeCount[2] = {1L,TIMELENGTH};
+size_t Data1Count[2] = {1L,1L};
+size_t DataCount[2] = {1L,3L};
+size_t Data2Count[2] = {1L,6L};
+
+char Version[]="v01";
+char ThemisID[]="tha\0";
+char ThemisTime[]="tha_peim_time";
+char PAR0[]="tha_peim_density";
+char PAR1[]="tha_peim_ptot";
+char PAR2[]="tha_peim_flux";
+char PAR3[]="tha_peim_mftens"; // Momentum Flux Tensor DSL
+char PAR4[]="tha_peim_eflux"; 
+char PAR5[]="tha_peim_velocity_gse";
+char PAR6[]="tha_peim_ptens"; // Pressure Tensor DSL 
+char PAR7[]="tha_peim_mag";
+char PAR8[]="tha_peim_velocity_mag";
+char PAR9[]="tha_peim_t3_mag";  // Diagonilized Temperature
+char PAR10[]="tha_peim_ptens_mag"; // 
+
+
+int StartTimeID, StopTimeID;
+int DeltaTID, DensID, PtotID;                    // 1D
+int FluxID, EfluxID, VelID, MagID, VelMagID, TempMagID;       // 2D -> 3
+int MfTensID, PtensID, PtensMagID ;                                                        // 2D -> 6
+ 
+int TimeID;                                                                         // Time netCDF variable
+ 
+  
+char StartT[TIMELENGTH]; // Start time from  data
+char StopT[TIMELENGTH];  // Stop time from  data
+/**************************
+   Function prototypes
+**************************/
+void usage();
+void cdf_handle_error (CDFstatus);
+void nc_handle_error (int);
+void ncdefine();
+/*--------------------------------------------------------------------------*/
+void usage()
+{
+   printf ("\nDescription:\n");
+   printf ("    This program converts a themis CDF file into a netCDF file.\n");
+   printf ("\n");
+   printf ("Usage: esa2nc <CDF file name> <ThemisID>\n");
+   printf ("\n");
+   printf ("Example: esa2nc testfile tha\n");
+   printf ("\n");
+   exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a CDF error.
+ *--------------------------------------------------------------------------*/
+void cdf_handle_error(CDFstatus status)
+{
+
+  char  message[CDF_STATUSTEXT_LEN+1];
+
+   CDFerror (status, message);              /* Get the appropriate message */
+   fprintf  (stderr, "CDF: %s\n", message);
+//   exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a netCDF error.
+ *--------------------------------------------------------------------------*/
+void nc_handle_error(int status)
+{
+  fprintf(stderr, "%s\n", nc_strerror(status));
+  exit(1);
+}
+ 
+ 
+/*--------------------------------------------------------------------------
+ *  NetCDF File Definition  *
+ *--------------------------------------------------------------------------*/
+ void ncdefine(double Time)
+ {
+    char *s;
+    time_t p;
+    int status;
+    char *STime;
+
+/*********************** Create netCDF file *****************************/     
+      memcpy(&(ncFile[0]),&(mode[0]),4);
+      STime = Double2DD_Time(Time);
+      memcpy(&(ncFile[4]),&(STime[2]), 9);
+      if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
+                                                      nc_handle_error(status);
+/******************netCDF Dimensions *******************************/
+        nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
+        nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
+        nc_def_dim (ncID, "Data",3L, &DataID); 
+        nc_def_dim (ncID, "Data2",6L, &Data2ID);
+  
+/********************netCDF Variables ******************/
+       TimeDimVector[0] = TimeDimID;
+       DataDimVector[0] = TimeDimID;
+       Data2DimVector[0] = TimeDimID;
+       TimeDimVector[1] = TimeLengthID;
+       DataDimVector[1] = DataID;
+       
+       Data2DimVector[1] = Data2ID;
+
+//ModeID, DensID, VelID, TempID;
+       nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
+       nc_def_var (ncID, "Density", NC_DOUBLE, 1, &TimeDimID, &DensID);
+       nc_def_var (ncID, "Ptot", NC_DOUBLE, 1, &TimeDimID, &PtotID);
+       nc_def_var (ncID, "Flux", NC_DOUBLE, 2, DataDimVector, &FluxID);
+       nc_def_var (ncID, "MfTens", NC_DOUBLE, 2, Data2DimVector, &MfTensID);
+       nc_def_var (ncID, "Eflux", NC_DOUBLE, 2, DataDimVector, &EfluxID);
+       nc_def_var (ncID, "Velocity", NC_DOUBLE, 2, DataDimVector, &VelID);
+       nc_def_var (ncID, "Ptens", NC_DOUBLE, 2, Data2DimVector, &PtensID);
+       nc_def_var (ncID, "Mag", NC_DOUBLE, 2, DataDimVector, &MagID); 
+       nc_def_var (ncID, "VelocityMag", NC_DOUBLE, 2, DataDimVector, &VelMagID);
+       nc_def_var (ncID, "TempMag", NC_DOUBLE, 2, DataDimVector, &TempMagID);
+       nc_def_var (ncID, "PtensMag", NC_DOUBLE, 2, Data2DimVector, &PtensMagID);
+     
+       nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
+       nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
+ 
+
+       
+
+       nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
+       nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
+       nc_put_att_text(ncID, DensID, "Units", 5, "cm^-3");
+       
+       
+       time(&p);
+       s = ctime(&p);
+       nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
+        
+       nc_enddef(ncID);
+        
+       nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
+        ;
+ }
+/*--------------------------------------------------------------------------*/
+int main(int argc, char *argv[])
+{
+    long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
+    long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, intervals[1] = {1};
+    long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6};
+    double *value;
+    float *value_f;
+    size_t numElem;
+    long dimN, varN, par0, par1, par2, par3, par4, par5, par6, par7, par8, par9, par10;
+    CDFstatus   cstatus;           // CDF status code
+    CDFid id;
+    int i, j, status;
+    char  fileName[MAX_FILE_NAME_LEN];
+    dd_tmstr_t *dtm;
+    int First = 1;
+
+    char *UT;
+    char data_set[8]="thx_peim";
+/*-------------------------------- Arguments Decoding ----------------------------------------*/
+     if (argc <= 2) usage();       // CDF input file name and THEMIS Number not specified
+     else
+     {
+           strcpy(fileName, argv[1]);
+           strncpy(ThemisID,argv[2],3);
+           strncpy(mode,argv[3],4); 
+      }
+      
+/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
+        memcpy(&(data_set[2]),&(ThemisID[2]),1); 
+        memcpy(&(data_set[6]),&(mode[2]),2);
+      
+        memcpy(&(ThemisTime[0]),&(data_set[0]),8);
+        memcpy(&(PAR0[0]),&(data_set[0]),8); 
+        memcpy(&(PAR1[0]),&(data_set[0]),8); 
+        memcpy(&(PAR2[0]),&(data_set[0]),8); 
+        memcpy(&(PAR3[0]),&(data_set[0]),8); 
+        memcpy(&(PAR4[0]),&(data_set[0]),8); 
+        memcpy(&(PAR5[0]),&(data_set[0]),8); 
+        memcpy(&(PAR6[0]),&(data_set[0]),8); 
+        memcpy(&(PAR7[0]),&(data_set[0]),8);
+        memcpy(&(PAR8[0]),&(data_set[0]),8);
+        memcpy(&(PAR9[0]),&(data_set[0]),8);
+        memcpy(&(PAR10[0]),&(data_set[0]),8); 
+    
+/*********************** Open CDF file *****************************/
+     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
+                                      cdf_handle_error(cstatus);
+     printf(" THEMIS  %s \n", ThemisID);
+
+/*********** treat all vars as zVars with eliminated false dimensionality **********/
+    
+     if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
+                                                   cdf_handle_error (cstatus);
+ 
+
+/************************ Get CDF Data  ************************************/
+
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
+   cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
+ 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR3, &par3, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR4, &par4, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR5, &par5, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR6, &par6, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR7, &par7, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR8, &par8, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR9, &par9, NULL_);
+   cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR10, &par10, NULL_);
+ 
+
+      RecCount = (long)(MaxRec+1);
+      printf(" Max Rec %d\n", MaxRec);
+    if (  RecCount > 0) {
+       value = (double *)malloc(sizeof(double)* RecCount);
+       if ((cstatus = CDFlib (SELECT_,
+		     zVAR_, varN,
+		     zVAR_RECNUMBER_, RecStart ,
+		     zVAR_RECCOUNT_, RecCount,
+		     zVAR_RECINTERVAL_, RecInt,
+		     zVAR_DIMINDICES_, indices,
+		     zVAR_DIMCOUNTS_, countsE,
+	             zVAR_DIMINTERVALS_, intervals,
+                     GET_, zVAR_HYPERDATA_, value,  NULL_) )
+                                             != CDF_OK) cdf_handle_error(cstatus);
+
+         for (i = 0; i < RecCount; i++) {
+                    UT = Double2DD_Time(value[i]); 
+                    dtm =  ReadTime(UT); 
+                    if (First == 1) {
+                       ncdefine(dtm->times);
+                       First = 0;
+                     }   
+                    nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
+                    
+                    Start[0]++;
+
+         }
+         nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
+          
+  
+// Density        
+            if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
+                                zVAR_RECNUMBER_, RecStart,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                       
+               nc_put_var_double(ncID, DensID, value);
+// Ion Total Pressure
+             if ((cstatus = CDFlib (SELECT_, zVAR_, par1,
+                                zVAR_RECNUMBER_, RecStart,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indices,
+                                zVAR_DIMCOUNTS_, countsE,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+                       
+               nc_put_var_double(ncID, PtotID, value); 
+            
+             free(value); 
+             value = (double *)malloc(sizeof(double)* RecCount * 3);
+ // flux
+              if ((cstatus = CDFlib (SELECT_, zVAR_, par2,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+
+            nc_put_var_double(ncID, FluxID, value);
+
+// Energy Flux
+         if ((cstatus = CDFlib (SELECT_, zVAR_, par4,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+          nc_put_var_double(ncID, EfluxID,value);
+
+// Velocity GSE
+          if ((cstatus = CDFlib (SELECT_, zVAR_, par5,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+ 
+           nc_put_var_double(ncID, VelID,  value);
+  
+// Magnetic Field Vector DSL
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par7,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, MagID, value);
+           
+// Velocity Mag
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par8,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, VelMagID, value);
+
+ // Temperature Mag
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par9,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, TempMagID, value);
+         
+            free(value);
+            value = (double *)malloc(sizeof(double)* RecCount * 6);
+  
+// Momentum Flux Tensor
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par3,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF2,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, MfTensID, value);
+
+// Pressure Tensor
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par6,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF2,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, PtensID, value);
+
+// Pressure Tensor Mag
+           if ((cstatus = CDFlib (SELECT_, zVAR_, par10,
+                                zVAR_RECNUMBER_, RecStart ,
+                                zVAR_RECCOUNT_, RecCount,
+                                zVAR_RECINTERVAL_, RecInt,
+                                zVAR_DIMINDICES_, indicesF2,
+                                zVAR_DIMCOUNTS_, counts,
+                                zVAR_DIMINTERVALS_, intervals,
+                                GET_, zVAR_HYPERDATA_, value, NULL_))
+                                              != CDF_OK)  cdf_handle_error(cstatus);
+              
+                        
+            nc_put_var_double(ncID, PtensMagID, value);
+
+
+
+         free(value);
+/********************Close Files******************/
+    if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
+  }
+       if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
+                            cdf_handle_error (cstatus);
+
+       
+       
+}
diff --git a/src/DECODERS/themis/themis_fgm2nc.c b/src/DECODERS/themis/themis_fgm2nc.c
new file mode 100644
index 0000000..04aa971
--- /dev/null
+++ b/src/DECODERS/themis/themis_fgm2nc.c
@@ -0,0 +1,347 @@
+/***********************************************************/
+/*               THEMIS FGM CDF -> DD netCDF               */
+/*                            NaN -> -1.e31                */
+/*                           12.10.2007                    */
+/*                             V 1.0                       */
+/***********************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <netcdf.h>
+#include <cdf.h>
+#include <DD.h>
+#include <string.h>
+#include <time.h>
+#include <math.h>
+
+#define TimeGap  1800000.0
+#define Source "themis@cdpp2"
+#define MAX_FILE_NAME_LEN  250                   // Max. file name length
+#define MAX_VARS           250                   // Max # of VARS in CDF
+
+
+/*************************************
+   Global variables and structures
+**************************************/
+long  CDFDims,                                  // Number of dimensions in a CDF file
+		CDFVars,                                  // Number of variables in a CDF file
+		CDFDimSizes[CDF_MAX_DIMS],                // Dimension Sizes in a CDF file
+		CDFencoding,                              // Data encoding
+		CDFmajority,                              // Variable majority
+		CDFmaxRec,                                // max Record number
+		CDFAttrs;                                 // number of CDF Attributes
+
+
+struct cdfvar {                                 // CDF variable structure
+		char name[CDF_VAR_NAME_LEN+1];
+		long num;                                 //variable number
+		long datatype;
+		long numElem;                             // variable dimensionality
+		long recVariance;                         // variable rec Variance
+		long dimVariances[CDF_MAX_DIMS];          // # of data values in dimSizes
+} cdfVar[MAX_VARS];
+
+
+int  ncID;
+char ncFile[] = "high_000000000.nc";
+int TimeDimID, TimeLengthID, DataID;            // ID of netCDF dimensions
+int TimeDimVector[2], DataDimVector[2];         // netCDF Dim vectors
+size_t Start[2] = {0L,0L};
+size_t TimeCount[2] = {1L,TIMELENGTH};
+size_t DataCount[2] = {1L,3L};
+
+char Version[]="v01";
+char ThemisID[]="tha\0";
+char ThemisTime[]="tha_fgh_time";
+char PAR0[]="tha_fgh_gse";
+float FillValue[3] = {-1.e31,-1.e31,-1.e31};  
+
+int StartTimeID, StopTimeID;
+int FGMID;                                      // Data netCDF Variables
+int TimeID;                                     // Time netCDF variable
+
+char StartT[TIMELENGTH];                        // Start time from  data
+char StopT[TIMELENGTH];                         // Stop time from  data
+/**************************
+   Function prototypes
+**************************/
+void usage();
+void cdf_handle_error (CDFstatus);
+void nc_handle_error (int);
+void removeFilepath();
+void removeCDFext();
+void removeVers();
+
+/*--------------------------------------------------------------------------*/
+void usage()
+{
+	printf ("\nDescription:\n");
+	printf ("This program converts a themis CDF file into a netCDF file.\n");
+	printf ("\n");
+	printf ("Usage: fgm2nc <CDF file name> <ThemisID> <Resolution>\n");
+	printf ("\n");
+	printf ("Example: fgm2nc testfile tha h\n");
+	printf ("\n");
+	exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a CDF error.
+ *--------------------------------------------------------------------------*/
+void cdf_handle_error(CDFstatus status)
+{
+
+	char  message[CDF_STATUSTEXT_LEN+1];
+
+	CDFerror (status, message);              /* Get the appropriate message */
+	fprintf  (stderr, "%s\n", message);
+	exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a netCDF error.
+ *--------------------------------------------------------------------------*/
+void nc_handle_error(int status)
+{
+	fprintf(stderr, "%s\n", nc_strerror(status));
+	exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Remove the filepath from a file name. *
+ *  Example:
+ *      /home/data/mydata.txt => mydata.txt
+ *--------------------------------------------------------------------------*/
+void removeFilepath (char *fileName)
+{
+	char *ptr;
+
+	ptr = strrchr(fileName, '/');        // Unix file path separator
+	if (ptr != NULL)
+	{
+		ptr++;
+		strcpy(fileName, ptr);
+    }
+}
+/*--------------------------------------------------------------------------
+ *  Decode CDF File Name *
+ *--------------------------------------------------------------------------*/
+void removeVers (char *fileName)
+{
+	char *ptr;
+	char zero = '\0';
+	int i;
+  
+	for (i = 0; i < 9; i++)
+	{
+		ptr = strchr(fileName, '_');
+		if (ptr != NULL)
+		{
+			ptr++;
+			strcpy(fileName, ptr);
+		}
+	}
+	ptr = strchr(fileName, '_');        //
+
+	if (ptr != NULL)
+	{
+		ptr++;
+		strncpy(Version, ptr, 2);
+	}
+}
+
+/*--------------------------------------------------------------------------
+*  Remove the CDF extention *
+*--------------------------------------------------------------------------*/
+void removeCDFext (char *fileName)
+{
+	char *ptr;
+	char zero = '\0';
+
+	ptr = strchr(fileName, '.');
+	if (ptr != NULL)
+				strcpy(ptr, &zero);
+}
+/*--------------------------------------------------------------------------
+ *  NetCDF File Definition  *
+ *--------------------------------------------------------------------------*/
+void ncdefine(double Time, char *Sampling)
+{
+	char *s;
+	time_t p;
+	int status;
+	char *STime;
+
+/*********************** Create netCDF file *****************************/
+	STime = Double2DD_Time(Time);
+	
+	// memcpy(&(ncFile[3]),&(Sampling[0]), 1);
+	memcpy(&(ncFile[5]),&(STime[2]), 9);
+	if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
+																	nc_handle_error(status);
+/******************netCDF Dimensions *******************************/
+	nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
+	nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
+	nc_def_dim (ncID, "Data",3L, &DataID);
+
+/********************netCDF Variables ******************/
+	TimeDimVector[0] = TimeDimID;
+	DataDimVector[0] = TimeDimID;
+	TimeDimVector[1] = TimeLengthID;
+	DataDimVector[1] = DataID;
+
+	nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);      
+	nc_def_var (ncID, "gse", NC_FLOAT, 2, DataDimVector, &FGMID);
+	nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
+	nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
+
+	nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
+	nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
+	nc_put_att_text(ncID, NC_GLOBAL, "Resolution", 1, Sampling);
+	//  nc_put_att_text(ncID, NC_GLOBAL, "Version", 2, Version);
+	nc_put_att_text(ncID, FGMID, "Units", 2, "nT");     
+	nc_put_att_text(ncID, FGMID, "Frame", 3, "GSE");
+
+	time(&p);
+	s = ctime(&p);
+	nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s);
+	nc_enddef(ncID);
+	nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));
+
+}
+/*--------------------------------------------------------------------------*/
+int main(int argc, char *argv[])
+{
+	long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
+	long indices[1] = {0}, counts[1] = {3}, intervals[1] = {1};
+	long countsE[1] = {1}, indicesF[2]={0,3};
+	double *value;
+	size_t numElem;
+	long dimN, varN, par0, par1;
+	CDFstatus   cstatus;           // CDF status code
+	CDFid id;
+	int i, j, status;
+	char fileName[MAX_FILE_NAME_LEN];
+	char Sampling[1];
+	dd_tmstr_t *dtm;
+	int First = 1;
+	float par[3];
+	long DayOld;
+
+	char *UT;
+/*-------------------------------- Arguments Decoding ----------------------------------------*/
+	if (argc <= 3) usage();       // CDF input file name and HEMIS Number not specified
+	else
+	{
+			strcpy(fileName, argv[1]);
+			strncpy(ThemisID, argv[2], 3);
+			strncpy(Sampling, argv[3], 1);
+	}
+      
+/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
+	       
+	memcpy(&(ThemisTime[2]),&(ThemisID[2]),1);
+	memcpy(&(PAR0[2]),&(ThemisID[2]),1);
+	memcpy(&(ThemisTime[6]),&(Sampling[0]),1);
+	memcpy(&(PAR0[6]),&(Sampling[0]),1);
+       
+/*********************** Open CDF file *****************************/
+	if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
+												cdf_handle_error(cstatus);
+	printf(" %s %s\n", argv[2],argv[3]);
+
+/*********** treat all vars as zVars with eliminated false dimensionality **********/
+    
+	if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
+																cdf_handle_error (cstatus);
+
+	// Remove the file path (/home/data/mydata => mydata)
+	removeFilepath(fileName);
+	// Remove Version Number
+	removeVers(fileName);
+
+	// Remove .cdf   extension
+	removeCDFext(fileName);
+
+/************************ Get CDF Data  ************************************/
+
+	if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_)) != CDF_OK)
+																		cdf_handle_error(cstatus) ;
+	if ((cstatus = CDFlib( SELECT_, zVAR_, varN,
+												GET_, zVAR_MAXREC_, &MaxRec, NULL_)) != CDF_OK)
+																				cdf_handle_error(cstatus) ;
+ 
+	if ((cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_)) != CDF_OK)
+																		cdf_handle_error(cstatus) ;
+		
+	if ((cstatus = CDFlib( SELECT_, zVAR_, par0,
+											GET_, zVAR_DIMSIZES_, CDFDimSizes, NULL_)) != CDF_OK)
+																			cdf_handle_error (cstatus) ;
+
+	RecCount = (long)(MaxRec+1);
+	printf(" Max Rec %d\n", MaxRec);
+	if (MaxRec > 1)
+	{
+		value = (double *)malloc(sizeof(double)* RecCount);
+		if ((cstatus = CDFlib (SELECT_,
+			zVAR_, varN,
+			zVAR_RECNUMBER_, RecStart ,
+			zVAR_RECCOUNT_, RecCount,
+			zVAR_RECINTERVAL_, RecInt,
+			zVAR_DIMINDICES_, indices,
+			zVAR_DIMCOUNTS_, countsE,
+			zVAR_DIMINTERVALS_, intervals,
+			GET_, zVAR_HYPERDATA_, value,  NULL_)) != CDF_OK)  
+														cdf_handle_error (cstatus);
+
+		for (i = 0; i < RecCount; i++)
+		{           
+			UT = Double2DD_Time(value[i]);
+			dtm =  ReadTime(UT);
+
+			if (i > 0 && (value[i]-value[i-1])  >  TimeGap)
+			{
+				printf(" !!! Time GAP -> %f min\n", (value[i]-value[i-1])/60.0);
+				nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
+				if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
+			}
+
+			if (First == 1)
+			{
+				ncdefine(dtm->times, Sampling);
+				First = 0;
+				DayOld = dtm->day;
+			}
+			
+			if (i > 0 && (value[i]-value[i-1])  >  TimeGap)
+			{
+				ncdefine(dtm->times, Sampling);
+				Start[0] = 0L;
+			}
+			nc_put_vara_text(ncID, TimeID, Start, TimeCount, Double2DD_Time(dtm->times));
+
+			RecStart = (long)i;
+			
+			if ((cstatus = CDFlib (SELECT_, zVAR_, par0,
+											zVAR_RECNUMBER_, RecStart ,
+											zVAR_RECCOUNT_, RecCountF,
+											zVAR_RECINTERVAL_, RecInt,
+											zVAR_DIMINDICES_, indicesF,
+											zVAR_DIMCOUNTS_, counts,
+											zVAR_DIMINTERVALS_, intervals,
+											GET_, zVAR_HYPERDATA_, par, NULL_))
+																		!= CDF_OK)  cdf_handle_error(cstatus);
+			if (!isnan(par[0]))          
+				nc_put_vara_float(ncID, FGMID, Start, DataCount, par);
+			else 
+				nc_put_vara_float(ncID, FGMID, Start, DataCount, FillValue);
+
+			Start[0]++;
+			DayOld = dtm->day;
+		}
+		nc_put_vara_text(ncID,StopTimeID,&Start[1],&TimeCount[1], Double2DD_Time(dtm->times));
+		free(value);
+
+		if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);
+	}
+   
+/********************Close Files******************/
+	if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
+						cdf_handle_error (cstatus);    
+}
diff --git a/src/DECODERS/themis/themis_sst2nc.c b/src/DECODERS/themis/themis_sst2nc.c
new file mode 100644
index 0000000..cbc5e4c
--- /dev/null
+++ b/src/DECODERS/themis/themis_sst2nc.c
@@ -0,0 +1,355 @@
+ /**************************************************************/
+ /*                   THEMIS SST CDF -> DD netCDF             */
+ /*                         04.01.2008                         */
+ /*                           V 1.1                            */
+ /*                    Energy in  info  file                   */
+ /*   New CDF with ALL modes and new params                    */
+ /**************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <netcdf.h>
+#include <cdf.h>
+#include <DD.h>
+#include <string.h>
+#include <time.h>
+#include <math.h>
+
+#define TimeGap  3600.0
+#define Source "themis@cdpp2"
+#define MAX_FILE_NAME_LEN  250                   // Max. file name length
+#define MAX_VARS           250                   // Max # of VARS in CDF
+
+
+/*************************************
+   Global variables and structures
+**************************************/
+long  CDFDims,                                   // Number of dimensions in a CDF file
+		CDFVars,                                   // Number of variables in a CDF file
+		CDFDimSizes[CDF_MAX_DIMS],                 // Dimension Sizes in a CDF file
+		CDFencoding,                               // Data encoding
+		CDFmajority,                               // Variable majority
+		CDFmaxRec,                                 // max Record number
+		CDFAttrs;                                  // number of CDF Attributes
+
+
+struct cdfvar {                                  // CDF variable structure
+		char name[CDF_VAR_NAME_LEN+1];
+		long num;                                  // Variable number
+		long datatype;
+		long numElem;                              // variable dimensionality
+		long recVariance;                          // variable rec Variance
+		long dimVariances[CDF_MAX_DIMS];           // # of data values in dimSizes
+} cdfVar[MAX_VARS];
+
+char mode[4];
+int  ncID;
+char ncFile[] = "psif_000000000.nc";
+int TimeDimID, TimeLengthID, FluxDimID;
+int TimeDimVector[2], FluxDimVector[2];          // netCDF Dim vectors
+
+size_t Start[2] = {0L,0L};
+size_t TimeCount[2] = {1L,TIMELENGTH};
+size_t FluxCount[2] = {1L,16L};
+
+CDFstatus   cstatus;                            // CDF status code
+
+char Version[]="v01";
+char ThemisID[]="tha\0";
+char ThemisTime[]="tha_psif_time";
+char PAR0[]="tha_psif_delta_time";
+char PAR1[]="tha_psif_density";
+char PAR2[]="tha_psif_en_eflux";
+
+int StartTimeID, StopTimeID;
+int StartTimeSpID, StopTimeSpID;
+int DeltaTID, DensID, AvTempID, ThVelID, PotID, CurrID, SymAngID;                   // 1D
+int MfTempID, TempID, ModeID, ModeSpID, VelID, Flux2ID, SymmID;                     // 2D -> 3
+int prTenID, mfTenID;                                                               // 2D -> 6
+int FluxID;                                                                         // 2D -> 32
+int TimeID;                                                                         // Time netCDF variable
+int TimeSpID; 
+  
+char StartT[TIMELENGTH]; // Start time from  data
+char StopT[TIMELENGTH];  // Stop time from  data
+/**************************
+   Function prototypes
+**************************/
+void usage();
+void cdf_handle_error (CDFstatus);
+void nc_handle_error (int);
+void removeFilepath();
+void removeCDFext();
+void removeVers();
+void ncdefine();
+/*--------------------------------------------------------------------------*/
+void usage()
+{
+	printf ("\nDescription:\n");
+	printf ("This program converts a themis CDF file into a netCDF file.\n");
+	printf ("\n");
+	printf ("Usage: esa2nc <CDF file name> <ThemisID> <mode>\n");
+	printf ("\n");
+	printf ("Example: esa2nc testfile tha peif\n");
+	printf ("\n");
+	exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a CDF error.
+ *--------------------------------------------------------------------------*/
+void cdf_handle_error(CDFstatus status)
+{
+
+	char  message[CDF_STATUSTEXT_LEN+1];
+
+	CDFerror (status, message);              /* Get the appropriate message */
+	fprintf  (stderr, "CDF: %s\n", message);
+	// exit(1);
+}
+/*--------------------------------------------------------------------------
+ *  Handles a netCDF error.
+ *--------------------------------------------------------------------------*/
+void nc_handle_error(int status)
+{
+	fprintf(stderr, "%s\n", nc_strerror(status));
+	exit(1);
+}
+
+/*--------------------------------------------------------------------------
+ *  NetCDF File Definition  *
+ *--------------------------------------------------------------------------*/
+void ncdefine(double Time)
+{
+	char *s;
+	time_t p;
+	int status;
+	char *STime;
+
+/*********************** Create netCDF file *****************************/
+	memcpy(&(ncFile[0]),&(mode[0]), 4);
+	STime = Double2DD_Time(Time);
+	memcpy(&(ncFile[5]),&(STime[2]), 9);
+	if ((status = nc_create(ncFile, NC_CLOBBER, &ncID)) != NC_NOERR)
+																	nc_handle_error(status);
+/******************netCDF Dimensions *******************************/
+	nc_def_dim (ncID, "Time", NC_UNLIMITED, &TimeDimID);
+	nc_def_dim (ncID, "TimeLength", TIMELENGTH, &TimeLengthID);
+	nc_def_dim (ncID, "Flux", 16L, &FluxDimID);
+
+/********************netCDF Variables ******************/
+	TimeDimVector[0] = TimeDimID;          
+	TimeDimVector[1] = TimeLengthID;
+	FluxDimVector[0] = TimeDimID;  
+	FluxDimVector[1] = FluxDimID;
+	
+	nc_def_var (ncID, "Time", NC_CHAR, 2, TimeDimVector, &TimeID);
+
+	nc_def_var (ncID, "DeltaT", NC_DOUBLE, 1, &TimeDimID, &DeltaTID);
+	nc_def_var (ncID, "density", NC_DOUBLE, 1, &TimeDimID, &ModeID);
+	nc_def_var (ncID, "en_eflux", NC_DOUBLE, 2, FluxDimVector, &FluxID);
+
+	nc_def_var (ncID, "StartTime",NC_CHAR, 1, &TimeLengthID, &StartTimeID);
+	nc_def_var (ncID, "StopTime",NC_CHAR, 1, &TimeLengthID , &StopTimeID);
+           
+	nc_put_att_text(ncID, NC_GLOBAL, "Themis", 3, ThemisID);
+	nc_put_att_text(ncID, NC_GLOBAL, "Source", 12, Source);
+	nc_put_att_text(ncID, FluxID, "Units", 17, "eV/(cm^2-s-sr-eV)");
+            
+	time(&p);
+	s = ctime(&p);
+	nc_put_att_text(ncID, NC_GLOBAL, "Created", 24, s); 
+				
+	status = nc_enddef(ncID); 
+      
+	nc_put_vara_text(ncID, StartTimeID, &(Start[1]), &(TimeCount[1]), Double2DD_Time(Time));          
+}
+
+void put_double(RecStart, RecCount, ParCDF, ParNC) 
+{
+	long RecInt = 1;
+	long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
+	
+	double *value;
+
+	value = (double *)malloc(sizeof(double)*RecCount);
+	if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
+										zVAR_RECNUMBER_, RecStart ,
+										zVAR_RECCOUNT_, RecCount,
+										zVAR_RECINTERVAL_, RecInt,
+										zVAR_DIMINDICES_, indices,
+										zVAR_DIMCOUNTS_, counts,
+										zVAR_DIMINTERVALS_, intervals,
+										GET_, zVAR_HYPERDATA_, value, NULL_))
+															!= CDF_OK)  cdf_handle_error(cstatus);
+	nc_put_var_double(ncID, ParNC, value);
+
+	free(value);
+}
+
+ 
+void put_mode(RecStart, RecCount, ParCDF, ParNC) 
+{  
+	float *value;
+	long indices[2] = {0,3}, intervals[1] = {1}, counts[1] = {3};
+	long RecInt = 1;
+
+	value = (float *)malloc(sizeof(float) * RecCount *3);
+	if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
+										zVAR_RECNUMBER_, RecStart ,
+										zVAR_RECCOUNT_, RecCount,
+										zVAR_RECINTERVAL_, RecInt,
+										zVAR_DIMINDICES_, indices,
+										zVAR_DIMCOUNTS_, counts,
+										zVAR_DIMINTERVALS_, intervals,
+										GET_, zVAR_HYPERDATA_, value, NULL_))
+															!= CDF_OK)  cdf_handle_error(cstatus);
+	nc_put_var_float(ncID, ParNC, value);
+       
+   free(value);
+}
+
+void put_spectra(RecStart, RecCount, ParCDF, ParNC) 
+{
+	double *value;
+	long indices[2] = {0,16}, intervals[1] = {1}, counts[1] = {16};
+	long RecInt = 1;
+
+	value = (double *)malloc(sizeof(double)*RecCount*16);
+	if ((cstatus = CDFlib (SELECT_, zVAR_, ParCDF,
+										zVAR_RECNUMBER_, RecStart ,
+										zVAR_RECCOUNT_, RecCount,
+										zVAR_RECINTERVAL_, RecInt,
+										zVAR_DIMINDICES_, indices,
+										zVAR_DIMCOUNTS_, counts,
+										zVAR_DIMINTERVALS_, intervals,
+										GET_, zVAR_HYPERDATA_, value, NULL_))
+															!= CDF_OK)  cdf_handle_error(cstatus);      
+	nc_put_var_double(ncID, ParNC, value);
+	free(value);
+}
+ 
+/*--------------------------------------------------------------------------*/
+int main(int argc, char *argv[])
+{
+	long RecStart = 0, RecCount, RecCountF = 1, RecInt = 1, MaxRec;
+	long indices[1] = {0}, counts[1] = {3}, counts2[1] = {6}, countsFlux[1] = {32}, intervals[1] = {1};
+	long countsE[1] = {1}, indicesF[2]={0,3}, indicesF2[2]={0,6}, indicesFlux[2] = {0, 32};
+	double *value;
+	float *value_f;
+	size_t numElem;
+	long dimN, varN, par0, par1, par2;
+	
+	CDFid id;
+	int i, j, status;
+	char  fileName[MAX_FILE_NAME_LEN];
+	dd_tmstr_t *dtm;
+	int First = 1;
+	double DayOld;
+  
+	char *UT;
+	char data_set[8]="thx_psxf";
+/*-------------------------------- Arguments Decoding ----------------------------------------*/
+	if (argc <= 3) usage();       // CDF input file name and THEMIS Number not specified
+	else
+	{
+			strcpy(fileName, argv[1]);
+			strncpy(ThemisID,argv[2],3);
+			strncpy(mode,argv[3],4);
+	}
+      
+/*------------------------------------------ CDF Variables Names Updated according to THEMIS Number -------------*/
+         
+	memcpy(&(data_set[2]),&(ThemisID[2]),1);
+	memcpy(&(data_set[6]),&(mode[2]),2);
+
+	memcpy(&(ThemisTime[0]),&(data_set[0]),8);
+	memcpy(&(PAR0[0]),&(data_set[0]),8); 
+	memcpy(&(PAR1[0]),&(data_set[0]),8); 
+	memcpy(&(PAR2[0]),&(data_set[0]),8); 
+
+/*********************** Open CDF file *****************************/
+	if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
+												cdf_handle_error(cstatus);
+	printf(" THEMIS  %s %s\n", ThemisID, mode);
+
+/*********** treat all vars as zVars with eliminated false dimensionality **********/
+    
+	if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
+																cdf_handle_error (cstatus);
+
+/************************ Get CDF Data  ************************************/
+
+	cstatus = CDFlib(GET_, zVAR_NUMBER_, ThemisTime, &varN, NULL_);
+	cstatus = CDFlib( SELECT_, zVAR_, varN, GET_, zVAR_MAXREC_, &MaxRec, NULL_);
+
+	cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR0, &par0, NULL_);    
+	cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR1, &par1, NULL_); 
+	cstatus = CDFlib(GET_, zVAR_NUMBER_, PAR2, &par2, NULL_); 
+
+
+	RecCount = (long)(MaxRec+1);
+	printf(" Max Rec %d\n", MaxRec);
+   if (MaxRec > 1)
+	{   
+		value = (double *)malloc(sizeof(double)* RecCount);
+		if ((cstatus = CDFlib (SELECT_,
+			zVAR_, varN,
+			zVAR_RECNUMBER_, RecStart ,
+			zVAR_RECCOUNT_, RecCount,
+			zVAR_RECINTERVAL_, RecInt,
+			zVAR_DIMINDICES_, indices,
+			zVAR_DIMCOUNTS_, countsE,
+					zVAR_DIMINTERVALS_, intervals,
+						GET_, zVAR_HYPERDATA_, value,  NULL_) )
+														!= CDF_OK) cdf_handle_error(cstatus);
+
+		for (i = 0; i < RecCount; i++) 
+		{                      
+			UT = Double2DD_Time(value[i]); 
+
+			if ((First == 0) && (value[i] - DayOld) > TimeGap) 
+			{
+				printf("GAP %f\n",(value[i] - DayOld)/60.0);                                              
+	//        put_double(RecStart, (long)i - RecStart, par0, DeltaTID);
+	//               put_mode(RecStart, (long)i - RecStart, par1, ModeID, ModeSpID);
+				put_spectra(RecStart, (long)i - RecStart, par2, FluxID);
+
+				nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], Double2DD_Time(DayOld));                        
+
+				if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status); 
+								
+				First = 1;
+				RecStart = (long)i;
+				UT = Double2DD_Time(value[i]);
+			}
+							
+			dtm =  ReadTime(UT); 
+			if (First == 1) { 
+				ncdefine(dtm->times);
+
+				First = 0;
+				Start[0] = 0;	
+			}  
+			
+			nc_put_vara_text(ncID, TimeID, Start, TimeCount, UT);
+			
+			Start[0]++;
+			DayOld = value[i];
+		}
+	 
+		free(value);
+		nc_put_vara_text(ncID,StopTimeID, &Start[1], &TimeCount[1], UT); 
+			
+				
+		//      put_double(RecStart, RecCount - RecStart, par0, DeltaTID);
+		//      put_mode(RecStart, RecCount - RecStart, par1, ModeID, ModeSpID);
+		put_spectra(RecStart, RecCount - RecStart, par2, FluxID);
+/********************Close Files******************/
+		
+		if ((status = nc_close(ncID)) != NC_NOERR) nc_handle_error(status);     
+	}
+	
+	if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
+									cdf_handle_error (cstatus);
+		
+}
diff --git a/src/REMOTEDATA/CDAWebConfigClass.php b/src/REMOTEDATA/CDAWebConfigClass.php
index 868ffe7..60bb7ff 100644
--- a/src/REMOTEDATA/CDAWebConfigClass.php
+++ b/src/REMOTEDATA/CDAWebConfigClass.php
@@ -19,4 +19,5 @@ class CDAWebConfigClass
 	// Service to get SPASE description by SPASE ID (from $spaseRegistry)
 	public static $spaseResolver = "http://www.spase-group.org/registry/resolver?";		
 	public static $format = "CDF";
-}
\ No newline at end of file
+}
+?>
diff --git a/src/REMOTEDATA/THEMIS.php b/src/REMOTEDATA/THEMIS.php
new file mode 100644
index 0000000..b220cff
--- /dev/null
+++ b/src/REMOTEDATA/THEMIS.php
@@ -0,0 +1,213 @@
+<?php
+/**
+ * @class THEMIS 
+ * @brief THEMIS
+ * @details
+ */
+class THEMIS extends RemoteDataCenterClass
+{
+	// /THEMIS_B1/themisdata
+   
+   protected $baseMgr;
+	protected $domTemplate;
+	 
+	
+	public function init() 	
+	{			
+		error_log("THEMIS Proxy creation on ".date("Y-m-d\TH:i:s").PHP_EOL,3,log);
+		error_log("THEMIS Proxy creation on ".date("Y-m-d\TH:i:s").PHP_EOL,3,err);
+
+	} 
+	
+	protected function getRemoteTree()	
+	{
+		if (!file_exists(ThemisConfigClass::$TemplateXml)) {
+			error_log('Cannot find THEMIS tree template'.PHP_EOL,3,err); 
+			exit('Cannot find THEMIS tree template');
+		}
+		
+		$this->domTemplate = new DomDocument("1.0");
+		if (!$this->domTemplate->load(ThemisConfigClass::$TemplateXml)) {
+			error_log('Cannot load THEMIS tree template'.PHP_EOL,3,err); 
+			exit('Cannot load THEMIS tree template');
+		}
+	}
+	
+	/* 
+	*   create base.xml from themis template xml
+	*/
+	protected function createMissionNodes()
+	{
+		$missionNodes = array();
+			
+		$this->baseMgr = new DDBaseMgr();
+		foreach (ThemisConfigClass::$themis as $suffix)
+		{
+			$mission = $this->domAmda->importNode($this->domTemplate->getElementsByTagName("mission")->item(0), true); 
+			$template = $mission->getAttribute("name");
+			$mission->setAttribute('name', str_replace("XXX", $suffix, $template));
+			$mission->setAttribute('desc', str_replace("XXX", $suffix, $template));
+			$template = $mission->getAttribute("xml:id");
+			$mission->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
+			$instruments = $mission->getElementsByTagName("instrument");
+			foreach ($instruments as $instrument) {
+				$template  = $instrument->getAttribute("xml:id");
+				$instrument->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
+				$datasets = $instrument->getElementsByTagName("dataset");
+				foreach ($datasets as $dataset) {
+					$template  = $dataset->getAttribute("xml:id");
+					$dataset->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
+					$template = $dataset->getAttribute("rem_id");
+					$dataset->setAttribute('rem_id', str_replace("xxx", strtolower($suffix), $template));
+					$this->updateGlobalStartStop($dataset);
+					$this->createVi($dataset);
+					
+					$ncFiles = $this->getData($remSetID, $start, $stop);
+					$params = $dataset->getElementsByTagName("parameter");
+					foreach ($params as $param) {
+						$template = $param->getAttribute("xml:id");
+						$param->setAttribute('xml:id', str_replace("xxx", strtolower($suffix), $template));
+					}
+				}
+			}
+			$missionNodes[] = $mission;
+		}
+		return $missionNodes;
+	}
+	
+	protected function updateGlobalStartStop($dataset)
+	{
+		$rem_id = $dataset->getAttribute('rem_id');
+		$ViId = strtr(substr($dataset->getAttribute('xml:id'),7),":","_");
+
+		$dataset->setAttribute('dataStart',$this->getGlobalStart($rem_id));
+		$dataset->setAttribute('dataStop',$this->getGlobalStop($rem_id));
+	}
+   
+	protected function getGlobalStart($id)
+	{
+		$startTime = "1970-01-01T00:00:00.000Z";
+		$datasetDir = ThemisConfigClass::$NFS_DIR."/".strtr($id,"_" , "/" )."/".ThemisConfigClass::$START_YEAR;
+		if (is_dir($datasetDir)) {
+			$fileNames = glob($datasetDir."/".$id."*.".ThemisConfigClass::$format);
+			//  Get Start  Time  from the First File Name 
+			$pos = strpos($fileNames[0],$id) + strlen($id) + 1;
+			$firstTime =  substr($fileNames[0], $pos, 8); 
+			$startTime = substr($firstTime,0,4)."-".substr($firstTime,4,2)."-".substr($firstTime,6,2)."T00:00:00.000Z";
+		}
+	  
+		return $startTime ;   
+	}
+	
+	protected function getGlobalStop($id)
+	{
+		$stopTime = "1970-01-01T00:00:00.000Z";
+		$datasetDir = ThemisConfigClass::$NFS_DIR."/".strtr($id,"_" , "/" )."/".date('Y');
+		if (is_dir($datasetDir)) {
+			$fileNames = glob($datasetDir."/".$id."*.".ThemisConfigClass::$format);
+			//  Get Stop  Time  from the Last File Name
+			$pos = strpos($fileNames[count($fileNames)-1],$id) + strlen($id) + 1;
+			$lastTime =  substr($fileNames[count($fileNames)-1], $pos, 8);
+			$stopTime = substr($lastTime,0,4)."-".substr($lastTime,4,2)."-".substr($lastTime,6,2)."T23:59:59.000Z";
+		}
+	  
+		return $stopTime ;   
+	}
+  
+	protected function createVi($dataset)
+	{
+		$ViId = strtr(substr($dataset->getAttribute('xml:id'),7),":","_");
+		$globalStart = $dataset->getAttribute('dataStart');
+		$globalStop = $dataset->getAttribute('dataStop');
+		echo $globalStart." ".$globalStop.PHP_EOL;
+		if ($this->baseMgr->viExists($ViId, $this->baseID)) {	
+		   // error_log
+		   // updateStartStop
+		 
+			return;
+		}
+		$info = explode("_", $ViId);
+
+		$this->baseMgr->setViId($ViId);
+		$rem_id = $dataset->getAttribute('rem_id').":".$info[2];
+		$this->baseMgr->setRemoteViId($rem_id);
+		$this->baseMgr->setViInfo($info[2]);
+		$this->baseMgr->setViParentsInfo($this->baseID, $info[0], $info[1]);
+ 
+		$this->baseMgr->setViLocation($this->baseID."/".$info[0], $info[1]."/".$info[2]."/");
+		$min_sampling = $dataset->getAttribute('minSampling');
+		$max_sampling = $dataset->hasAttribute('maxSampling') ? $dataset->getAttribute('maxSampling') : 0 ; 
+		$this->baseMgr->setViSampling($min_sampling, $max_sampling);
+		$this->baseMgr->globalStart = $globalStart;
+		$this->baseMgr->globalStop = $globalStop;
+		
+		$this->baseMgr->createVi();
+		
+		$ncFiles = array();
+		$start = $globalStart;
+
+		while (count($ncFiles) == 0) {
+			// get the very first data file
+			$stop = $start;
+			$ncFiles = $this->getData($rem_id, $start, $stop);
+			
+			$newStart = strtotime($start);
+			$newStart += 24*60*60;
+			$start = date("Y-m-d\TH:i:s",$newStart);
+		}
+		
+		$this->baseMgr->addRemoteData($rem_id, $ncFiles, $globalStart, $globalStart, false);
+		
+		$this->baseMgr->updateRemoteStart();
+	}
+      
+	protected function setDataCenterAttributes(){	
+		$this->dataCenter->setAttribute('xml:id', $this->baseID);
+		$this->dataCenter->setAttribute('name', $this->baseID."_iRAP");		
+	}
+	
+	protected function makeArgumentsList(){}
+	
+	public function getData($remId, $start, $stop)
+	{
+		$info = explode(":", $remId);
+		$rem_id = $info[0];
+		$mode = $info[1];
+		
+		$info_1 =  explode("_", $rem_id);
+		$mission = $info_1[0];
+		
+		$sourceDir = ThemisConfigClass::$NFS_DIR."/".strtr($rem_id,"_" , "/" );
+		// Which files 
+		$currTime = strtotime($start);
+		$stopTime = strtotime($stop);
+
+// 		$currTime -= 3600.0;
+		
+		while ($currTime <= $stopTime ) {
+			$fileName = $sourceDir."/".date('Y', $currTime)."/".$rem_id."_".date('Ymd', $currTime)."_v01.cdf";
+			if (file_exists($fileName)) {             
+					system(ThemisConfigClass::$program[$mode]." ".$fileName." ".$mission." ".$mode); 
+			}
+			else {
+					// fprintf($STDERR,"NO SUCH FILE  $fileName \n");
+			}
+			$currTime += 24*60*60;
+		}  
+		
+		$files = glob($mode."*.nc");
+	 
+		return $files;
+	}
+	
+	public function monitor()
+	{
+		// check if NFS connection ok
+		if (glob(ThemisConfigClass::$NFS_DIR . "/*"))
+					return true;
+			 
+		return false;
+	}
+} 
+?>
+
diff --git a/src/REMOTEDATA/ThemisConfigClass.php b/src/REMOTEDATA/ThemisConfigClass.php
new file mode 100644
index 0000000..c3aa5e8
--- /dev/null
+++ b/src/REMOTEDATA/ThemisConfigClass.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @class ThemisConfigClass
+ * @brief Class that's contain all specific configuration of the IRAP Themis Mirror Site
+ * @details
+ */
+ 
+class ThemisConfigClass
+{
+   // apus : sudo mount -t nfs  rosina1.irap.omp.eu:/ROSINA_B1/themisdata /THEMIS_B1/themisdata -v -o nfsvers=3,vers=3
+
+	public static $NFS_DIR = "/THEMIS_B1/themisdata";
+	public static $level = "l2"; 
+	public static $format = "cdf";
+	public static $themis = array('A'); //, 'B', 'C', 'D', 'E');
+	public static $TemplateXml = "ThemisTreeTemplate.xml";
+	public static $START_YEAR = "2007";
+	public static $program = array('peim' => 'themis_esamom2nc', 'peem' => 'themis_esamom2nc',
+											 'peif' => 'themis_esa2nc', 'peef' => 'themis_esa2nc',
+											 'peir' => 'themis_esa2nc', 'peer' => 'themis_esa2nc', 
+											 'peib' => 'themis_esa2nc', 'peeb' => 'themis_esa2nc',
+											 'psif' => 'themis_sst2nc', 'psef' => 'themis_sst2nc',
+											 'high' => 'themis_fgm2nc', 'low' => 'themis_fgm2nc');
+}
+?>
diff --git a/src/REMOTEDATA/ThemisTreeTemplate.xml b/src/REMOTEDATA/ThemisTreeTemplate.xml
new file mode 100644
index 0000000..1a61f91
--- /dev/null
+++ b/src/REMOTEDATA/ThemisTreeTemplate.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<dataCenter name="THEMIS" xml:id="THEMIS-IRAP" desc="Mirror IRAP Data Base">
+	<mission name="THEMIS-XXX" xml:id="THEMIS-xxx" desc="THEMIS-XXX">
+		<instrument name="ESA" xml:id="THEMIS-xxx-esa" desc="Electrostatic Analyser">
+			<dataset name="ion reduced" xml:id="THEMIS-thxxx:esa:peir" minSampling="3" rem_id="thxxx_l2_esa">
+				<parameter name="ion density" units="cm-3" xml:id="thxxx_peir_density"/>
+				<parameter name="ion v gse" units="km/s" size="3" labels="vx_gse,vy_gse,vz_gse" xml:id="thxxx_peir_velocity_gse"/>
+				<parameter name="ion temperature" units="eV" size="3" labels="t_para,t_perp1,t_perp2" xml:id="thxxx_peir_t3"/>
+				<parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peir_en_eflux"/>
+				<parameter name="sc_potential" units="V" xml:id="thxxx_peir_sc_pot"/>
+			</dataset>
+			<dataset name="electron reduced" xml:id="THEMIS-thxxx:esa:peer" minSampling="3" rem_id="thxxx_l2_esa">
+				<parameter name="elec density" units="cm-3" xml:id="thxxx_peer_density"/>     
+				<parameter name="elec temperature" units="eV" size="3" labels="t_para,t_perp1,t_perp2" xml:id="thxxx_peer_t3"/>
+				<parameter name="elec eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peer_en_eflux"/>
+			</dataset>
+			<dataset name="ion full" xml:id="THEMIS-thxxx:esa:peif" minSampling="96.27" maxSampling="385.1" rem_id="thxxx_l2_esa">
+				<parameter name="ion density" units="cm-3" xml:id="thxxx_peif_density"/>
+				<parameter name="ion v gse" units="km/s" size="3" labels="vx_gse,vy_gse,vz_gse" xml:id="thxxx_peif_velocity_gse"/>
+				<parameter name="ion temperature" units="eV" size="3" labels="t_para,t_perp1,t_perp2" xml:id="thxxx_peif_t3"/>
+				<parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peif_en_eflux"/>
+				<parameter name="sc_potential" units="V" xml:id="thxxx_peif_sc_pot"/>
+			</dataset>
+			<dataset name="ion burst" xml:id="THEMIS-thxxx:esa:peib" minSampling="3" rem_id="thxxx_l2_esa">
+				<parameter name="ion density" units="cm-3" xml:id="thxxx_peib_density"/>
+				<parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peib_en_eflux"/>
+			</dataset> 
+			<dataset name="elec burst" xml:id="THEMIS-thxxx:esa:peeb" minSampling="3" rem_id="thxxx_l2_esa">
+				<parameter name="elec density" units="cm-3" xml:id="thxxx_peeb_density"/>
+				<parameter name="elec eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="32" xml:id="thxxx_peeb_en_eflux"/> 
+			</dataset>      
+		</instrument>
+		<instrument name="FGM" xml:id="THEMIS-xxx-fgm" desc="Fluxgate Magnetometer">
+			 <dataset name="fgm high" xml:id="THEMIS-thxxx:fgm:high" minSampling="0.08" rem_id="thxxx_l2_fgm">
+				<parameter name="b gse" units="nT" size="3" labels="bx,by,bz" xml:id="thxxx_fgh_gse"/>
+			</dataset> 
+		</instrument>
+		<instrument name="SST" xml:id="THEMIS-xxx-sst" desc="Solid State Telescope">
+			<dataset name="ions" xml:id="THEMIS-thxxx:sst:psif" minSampling="3" maxSampling="192" rem_id="thxxx_l2_sst">
+				<parameter name="ion eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="16" xml:id="thxxx_psif_en_eflux"/>
+			</dataset>
+			<dataset name="electrons" xml:id="THEMIS-thxxx:sst:psef" minSampling="3" maxSampling="192" rem_id="thxxx_l2_sst">
+				<parameter name="elec eflux" display_type="spectrogram" units="eV/(cm^2-s-sr-eV)" size="16" xml:id="thxxx_psef_en_eflux"/>
+			</dataset>
+		</instrument>
+	</mission>      
+</dataCenter>
--
libgit2 0.21.2