Commit f223812ea6c9e9df15f0ebf9823381b958849342

Authored by Elena.Budnik
1 parent f417c762

make orbits in km

Showing 1 changed file with 120 additions and 0 deletions   Show diff stats
php/makeOrbitsInKm.php 0 → 100644
... ... @@ -0,0 +1,120 @@
  1 +<?php
  2 +/*
  3 +* Executable to make dynamically internal ephemeris params in km
  4 +*
  5 +*/
  6 + $scale = array('AU'=>'ASTRONOMICAL_UNIT','Rme'=>'RADIUS_MERCURY','Rv'=>'RADIUS_VENUS','Re'=>'RADIUS_EARTH','Rma'=>'RADIUS_MARS','Rm'=>'RADIUS_MARS',
  7 + 'Rj'=>'RADIUS_JUPITER','Rs'=>'RADIUS_SATURN','Ru'=>'RADIUS_URANUS','Rn' =>'RADIUS_NEPTUNE',
  8 + 'Rga'=>'RADIUS_GANYMEDE','Rg'=>'RADIUS_GANYMEDE');
  9 +
  10 + $AMDA_IHM = getenv('AMDA_IHM');
  11 +
  12 + if (!isset($AMDA_IHM))
  13 + require_once __DIR__."/config.php";
  14 + else
  15 + require_once $AMDA_IHM."/php/config.php";
  16 +
  17 + if (!defined('orbitsXml'))
  18 + exit("orbitsXml is not defined in config.php".PHP_EOL);
  19 +
  20 + if (!file_exists(orbitsXml))
  21 + exit("No orbitsXml file".PHP_EOL);
  22 +
  23 + $amdaParamDir = DATAPATH."newKernelDDBase";
  24 +
  25 + $dom = new DomDocument("1.0");
  26 + $dom->load(orbitsXml);
  27 +
  28 + $orbits = $dom->getElementsByTagName("orbites");
  29 +
  30 + $domKm = new DomDocument("1.0");
  31 + $domKm->formatOutput = TRUE;
  32 + $domKm->preserveWhiteSpace = FALSE;
  33 +
  34 + $rootKm = $domKm->createElement('orbitesList');
  35 + $domKm->appendChild($rootKm);
  36 +
  37 + Header('Content-type: text/xml');
  38 +
  39 + foreach ($orbits as $orbit)
  40 + {
  41 + $id = $orbit->getAttribute('xml:id');
  42 + $units = $orbit->getAttribute('units');
  43 +
  44 + if ($units != 'km') // add orbital parameter in km
  45 + {
  46 + $param_file = $amdaParamDir."/".$id.".xml";
  47 + if (file_exists($param_file))
  48 + {
  49 + $paramXml = simplexml_load_file($param_file);
  50 + $process = $paramXml->process;
  51 +
  52 + if ($process == "")
  53 + {
  54 + $newProcess = '$'.$paramXml->get->vi['name'].'*'.$scale[$units];
  55 + }
  56 + else if (strpos($process, '/RADIUS') > 0)
  57 + {
  58 + $newProcess = substr($process,0,strpos($process, '/RADIUS'));
  59 + if ($newProcess == '$'.$paramXml->get->vi['name']) $newProcess = '';
  60 + }
  61 + else
  62 + {
  63 + $newProcess = $process."/".$scale[$units];
  64 + }
  65 +
  66 + $newId = $id."_km";
  67 + $new_param_file = $amdaParamDir."/".$newId.".xml";
  68 + $newXML = new SimpleXMLElement("<param></param>");
  69 + $newXML->addAttribute('xml:id', $newId);
  70 + $newInfo = $newXML->addChild('info');
  71 + $newInfo->addChild('name', $paramXml->info->name);
  72 + $newInfo->addChild('short_name', $paramXml->info->name);
  73 + $newInfo->addChild('components', $paramXml->info->components);
  74 + $newInfo->addChild('units', 'km');
  75 + $newInfo->addChild('coordinates_system', $paramXml->info->coordinates_system);
  76 + $newInfo->addChild('tensor_order', $paramXml->info->tensor_order);
  77 + $newInfo->addChild('si_conversion', 1.e3);
  78 + //TODO scale fill value
  79 + $newInfo->addChild('fill_value', $paramXml->info->fill_value);
  80 + $newInfo->addChild('ucd', $paramXml->info->ucd);
  81 + $newInfo->addChild('dataset_id', $paramXml->info->dataset_id);
  82 + $newGet = $newXML->addChild('get');
  83 + $newVi = $newXML->addChild('vi');
  84 + $newVi->addAttribute('name', $paramXml->get->vi['name']);
  85 + $newParam = $newVi->addChild('baseParam');
  86 + $newParam->addAttribute('name', $paramXml->get->vi->baseParam['name']);
  87 + $newXML->addChild('process',$newProcess);
  88 + $newXML->addChild('output');
  89 + $newXML->asXML($new_param_file);
  90 +
  91 + $newOrbit = $domKm->createElement('orbite');
  92 + $newOrbit->setAttribute('xml:id', $newId);
  93 + $newOrbit->setAttribute('coordinates_system', $paramXml->info->coordinates_system);
  94 + $newOrbit->setAttribute('units','km');
  95 + $newOrbit->setAttribute('mission', $orbit->getAttribute('mission'));
  96 + if ($orbit->hasAttribute('missionGroup'))
  97 + $newOrbit->setAttribute('missionGroup', $orbit->getAttribute('missionGroup'));
  98 + $newOrbit->setAttribute('dataset', $orbit->getAttribute('dataset'));
  99 + $newOrbit->setAttribute('target', $orbit->getAttribute('target'));
  100 + $rootKm->appendChild($newOrbit);
  101 + }
  102 + }
  103 + }
  104 +
  105 + $domKm->save(LocalData.'OrbitsInternal.xml');
  106 +
  107 + if (file_exists(LocalData.'OrbitsAll.xml'))
  108 + unlink(LocalData.'OrbitsAll.xml');
  109 +
  110 + // Merge internal orbits and open orbits
  111 + $orbitsInternal = $rootKm->getElementsByTagName('orbite');
  112 + foreach ($orbitsInternal as $orbitInternal)
  113 + {
  114 + $dom->documentElement->appendChild($dom->importNode($orbitInternal));
  115 + }
  116 +
  117 + $dom->save(LocalData.'OrbitsAll.xml');
  118 +?>
  119 +
  120 +
0 121 \ No newline at end of file
... ...