From 400672496068037ee3d5b358ffc5bfd550be86cb Mon Sep 17 00:00:00 2001 From: Benjamin Renard <benjamin.renard@akka.eu> Date: Tue, 28 Feb 2023 13:47:08 +0000 Subject: [PATCH] Update EPN/TAP granules generation --- update_amda/makeEPNTAPGranules.php | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 85 insertions(+), 8 deletions(-) diff --git a/update_amda/makeEPNTAPGranules.php b/update_amda/makeEPNTAPGranules.php index 7a145ce..69385d3 100644 --- a/update_amda/makeEPNTAPGranules.php +++ b/update_amda/makeEPNTAPGranules.php @@ -2,6 +2,8 @@ //error_reporting(E_ERROR); +date_default_timezone_set("UTC"); + $localparams_tree = getenv('LocalData')."/LocalParams.xml"; $output_file = getenv('EPNTAPData')."/amda-granules.csv"; $ddservice_wsdl = getenv('DD_WSDL'); @@ -54,7 +56,7 @@ $mapping = array( 'modification_date' => '@@modification_date@@', 'release_date' => '@@release_date@@', 'service_title' => 'AMDADB', - 'access_url' => '@@amda_rest_api_entry_point@@getGranule.php?obs_id=@@dataset_id@@&start=@@granule_start_time_timestamp@@&stop=@@granule_stop_time_timestamp@@&format=CDF', + 'access_url' => '@@amda_rest_api_entry_point@@getGranule.php?obs_id=@@dataset_id@@&start=@@granule_start_time_timestamp@@&stop=@@granule_stop_time_timestamp@@', 'access_format' => 'application/x-cdf-istp', 'target_region' => '@@target_region@@', 'publisher' => 'CDPP', @@ -94,14 +96,61 @@ function parseProcessingLevel($info) { return '3'; } -function spaseToEpnTapMeasurementType($measurement_type) { - return $measurement_type; +function getEpnTapMeasurementType($measurement_type, $UCDs) { + $generic_ucd = ''; + switch ($measurement_type) { + case 'ThermalPlasma': + $generic_ucd = 'phys.flux'; + break; + case 'IonComposition': + case 'NeutralGas': + $generic_ucd = 'phys.composition'; + break; + case 'EnergeticParticles': + $generic_ucd = 'phys.particle'; + break; + case 'Waves': + case 'Waves.Passive': + $generic_ucd = 'em.pw'; + break; + case 'Ephemeris': + $generic_ucd = 'pos.ephem'; + break; + case 'ElectricField': + $generic_ucd = 'phys.electField'; + break; + case 'MagneticField': + $generic_ucd = 'phys.magField'; + break; + case 'Spectrum': + $generic_ucd = 'spect'; + break; + case 'InstrumentStatus': + $generic_ucd = 'instr'; + break; + case 'Irradiance': + $generic_ucd = 'phot.flux'; + break; + case 'Radiance': + $generic_ucd = 'phot.radiance'; + break; + default: + echo "[WARNING] UCD - Unknown measurement type: ".$measurement_type.PHP_EOL; + break; + } + if (!empty($generic_ucd) && !in_array($generic_ucd, $UCDs)) + array_unshift($UCDs, $generic_ucd); + return implode(';', $UCDs); } function timestampToJulianDay($timestamp) { return intval($timestamp) / 86400 + 2440587.5; } +function timestampToISO($timestamp) { + return date("Y-m-d\TH:i:s\Z", $timestamp); +} + function getTargetClass($spaseRegion) { $parts = explode(".", $spaseRegion); if (count($parts) < 1) { @@ -143,6 +192,7 @@ function getTargetName($targetClass, $spaseRegion, $missionName, $dataset_id) { } switch ($targetClass) { case "planet": + case "satellite": if ((count($parts) > 1) && !in_array($parts[1], array("Magnetosheath", "Magnetosphere", "NearSurface", "Surface"))) { return $parts[1]; } @@ -232,6 +282,8 @@ foreach ($dataset_nodes as $dataset_node) { $dataset_place_holders = array(); //Dataset id $datasetId = $dataset_node->getAttribute("xml:id"); + //if ($datasetId != 'psp-het-1hr') + // continue; if (empty($datasetId)) { echo "[WARNING] Cannot retrieve dataset id".PHP_EOL; continue; @@ -255,11 +307,27 @@ foreach ($dataset_nodes as $dataset_node) { continue; } + $UCDs = array(); + $parameter_nodes = $dataset_node->getElementsByTagName("parameter"); + foreach ($parameter_nodes as $parameter_node) { + $ucd = trim($parameter_node->getAttribute('ucd')); + if (empty($ucd)) + continue; + $ucd_list = explode(';', $ucd); + foreach ($ucd_list as $u) { + $u = trim($u); + if (empty($u)) + continue; + if (!in_array($u, $UCDs)) + $UCDs[] = $u; + } + } + $dataset_place_holders['min_sampling'] = parseSampling($dataset_node->getAttribute("sampling")); $dataset_place_holders['max_sampling'] = parseSampling($dataset_node->getAttribute("maxSampling")); $dataset_place_holders['spase_resource_id'] = $dataset_node->getAttribute("spaseId"); $dataset_place_holders['spase_measurement_type'] = $dataset_node->getAttribute("measurement_type"); - $dataset_place_holders['measurement_type'] = spaseToEpnTapMeasurementType($dataset_place_holders['spase_measurement_type']); + $dataset_place_holders['measurement_type'] = getEpnTapMeasurementType($dataset_place_holders['spase_measurement_type'], $UCDs); $dataset_place_holders['processing_level'] = parseProcessingLevel($dataset_node->getAttribute("xml:id")); $target = $dataset_node->getAttribute("target"); @@ -315,8 +383,11 @@ foreach ($dataset_nodes as $dataset_node) { if (!empty($observatory_node)) { $mission_name = $observatory_node->getAttribute('name'); } - $dataset_place_holders['mission_name'] = $mission_name; - $dataset_place_holders['instrument_name'] = $instrument_name; + $dataset_place_holders['mission_name'] = utf8_encode($mission_name); + $dataset_place_holders['instrument_name'] = preg_replace('/[^:\/\(\) \w-]/', ' ', $instrument_name); + if ($dataset_place_holders['instrument_name'] != $instrument_name) { + echo "=================> ".$dataset_place_holders['instrument_name'].PHP_EOL; + } if (!empty($dataset_group_node)) { if ($dataset_place_holders['processing_level'] == 'L2') { $dataset_place_holders['processing_level'] = parseProcessingLevel($dataset_group_node->getAttribute("xml:id")); @@ -324,7 +395,13 @@ foreach ($dataset_nodes as $dataset_node) { } try { - $vi = str_replace("-","_",$datasetId); + $prior_id = trim($dataset_node->getAttribute('PriorID')); + if (!empty($prior_id)) { + $vi = str_replace("-","_",$prior_id); + } + else { + $vi = str_replace("-","_",$datasetId); + } $res = $client->getGranules($vi); } catch (SoapFault $exception) { @@ -347,7 +424,7 @@ foreach ($dataset_nodes as $dataset_node) { $granule_place_holders['granule_index'] = str_replace(".nc", "", $granule_info[2]); $granule_place_holders['granule_start_time'] = timestampToJulianDay($granule_info[0]); $granule_place_holders['granule_stop_time'] = timestampToJulianDay($granule_info[1]); - $granule_place_holders['modification_date'] = timestampToJulianDay($granule_info[3]); + $granule_place_holders['modification_date'] = timestampToISO($granule_info[3]); $granule_place_holders['granule_start_time_timestamp'] = $granule_info[0]; $granule_place_holders['granule_stop_time_timestamp'] = $granule_info[1]; $granule_place_holders['creation_date'] = $granule_place_holders['modification_date']; -- libgit2 0.21.2