From 88d2a9e579a10f5c7f63551958ed26875ff8617b Mon Sep 17 00:00:00 2001 From: al-niessner <1130658+al-niessner@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:14:09 -0700 Subject: [PATCH] 427: spaces in directory names (#746) * try making a test first * try it this way * try it this way * try quotes - this is becomming untestable via standard tools * shrink the data size * try url encoding it * update cucumber to change %20 back to space * code changes to not do url.getPath() directly --------- Co-authored-by: Al Niessner --- .../nasa/pds/tools/label/LabelValidator.java | 8 +- .../gov/nasa/pds/tools/util/DocumentUtil.java | 7 +- .../nasa/pds/tools/util/FileSizesUtil.java | 5 +- .../java/gov/nasa/pds/tools/util/PDFUtil.java | 2 - .../java/gov/nasa/pds/tools/util/Utility.java | 2 +- .../gov/nasa/pds/tools/util/VersionInfo.java | 3 +- .../pds/tools/validate/AggregateManager.java | 7 +- .../pds/tools/validate/TargetExaminer.java | 18 +- .../tools/validate/content/AudioVideo.java | 3 +- .../rule/pds4/FindUnreferencedFiles.java | 3 +- .../nasa/pds/validate/ValidateLauncher.java | 5 +- .../pds/web/ui/utils/DataSetValidator.java | 7 +- src/test/java/cucumber/StepDefs.java | 2 +- src/test/resources/features/developer.feature | 2 + .../rs_20160518_014000_udsc64_l3_e_v10.tab | 2 + .../rs_20160518_014000_udsc64_l3_e_v10.xml | 373 ++++++++++++++++++ 16 files changed, 412 insertions(+), 37 deletions(-) create mode 100644 src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.tab create mode 100644 src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.xml diff --git a/src/main/java/gov/nasa/pds/tools/label/LabelValidator.java b/src/main/java/gov/nasa/pds/tools/label/LabelValidator.java index 08d932df0..22f81135c 100644 --- a/src/main/java/gov/nasa/pds/tools/label/LabelValidator.java +++ b/src/main/java/gov/nasa/pds/tools/label/LabelValidator.java @@ -19,7 +19,6 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -48,6 +47,7 @@ import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Attr; @@ -396,8 +396,7 @@ private void checkSchemaSchematronVersions(ProblemHandler handler, URL url) { for (String schema : specifiedSchema) { try { URL schemaURL = new URL(schema); - String schemaName = - Paths.get(schemaURL.getPath()).getFileName().toString().toLowerCase(); + String schemaName = schemaURL.getFile().toLowerCase(); if (schemaName.endsWith(".xsd")) { schemaName = schemaName.substring(0, schemaName.length() - 4); schemas.add(schemaName); @@ -412,8 +411,7 @@ private void checkSchemaSchematronVersions(ProblemHandler handler, URL url) { String modelHREF = part.substring(part.indexOf('"') + 1, part.lastIndexOf('"')); try { URL schematronURL = new URL(modelHREF); - String schematronName = - Paths.get(schematronURL.getPath()).getFileName().toString().toLowerCase(); + String schematronName = schematronURL.getFile().toLowerCase(); if (schematronName.endsWith(".sch")) { schematronName = schematronName.substring(0, schematronName.length() - 4); schematrons.add(schematronName); diff --git a/src/main/java/gov/nasa/pds/tools/util/DocumentUtil.java b/src/main/java/gov/nasa/pds/tools/util/DocumentUtil.java index 2fa7173a4..ad8c68f79 100644 --- a/src/main/java/gov/nasa/pds/tools/util/DocumentUtil.java +++ b/src/main/java/gov/nasa/pds/tools/util/DocumentUtil.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.net.URL; import java.util.ArrayList; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -174,11 +175,11 @@ public String readFile(URL fileUrl) { // // Using alternative method to get the parent. String parent = ""; - if (fileUrl.getPath().lastIndexOf("/") < 0) { - LOG.error("The path does not contain a file separator {}", fileUrl.getPath()); + if (FileUtils.toFile(fileUrl).getPath().lastIndexOf("/") < 0) { + LOG.error("The path does not contain a file separator {}", FileUtils.toFile(fileUrl).getPath()); return (null); } - parent = fileUrl.getPath().substring(0, fileUrl.getPath().lastIndexOf("/")); + parent = FileUtils.toFile(fileUrl).getPath().substring(0, FileUtils.toFile(fileUrl).getPath().lastIndexOf("/")); LOG.debug("readFile:fileUrl,parent,FilenameUtils.getName(fileUrl) {},{},{}", fileUrl, parent, FilenameUtils.getName(fileUrl.toString())); diff --git a/src/main/java/gov/nasa/pds/tools/util/FileSizesUtil.java b/src/main/java/gov/nasa/pds/tools/util/FileSizesUtil.java index 0ecad5929..7ff770be9 100644 --- a/src/main/java/gov/nasa/pds/tools/util/FileSizesUtil.java +++ b/src/main/java/gov/nasa/pds/tools/util/FileSizesUtil.java @@ -6,6 +6,7 @@ import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,10 +34,10 @@ public static long getExternalFilesize(URL url) throws Exception { if (url.getProtocol().equals("file")) { long fileSize = -1; LOG.debug("getExternalFilesize:url,fileSize {},{}", url, fileSize); - LOG.debug("getExternalFilesize:afor:path [{}]", url.getPath()); + LOG.debug("getExternalFilesize:afor:path [{}]", FileUtils.toFile(url).getPath()); // For some strange reason, the File class does not handle well with the "%20" // in the name. It needs to be an actual space. - String actualPath = URLDecoder.decode(url.getPath(), "UTF-8"); // Use the URLDecoder.decode() + String actualPath = URLDecoder.decode(FileUtils.toFile(url).getPath(), "UTF-8"); // Use the URLDecoder.decode() // to convert // from %20 to " ". LOG.debug("getExternalFilesize:after:path [{}]", actualPath); diff --git a/src/main/java/gov/nasa/pds/tools/util/PDFUtil.java b/src/main/java/gov/nasa/pds/tools/util/PDFUtil.java index 466bfb9bb..5e3a1d361 100644 --- a/src/main/java/gov/nasa/pds/tools/util/PDFUtil.java +++ b/src/main/java/gov/nasa/pds/tools/util/PDFUtil.java @@ -62,8 +62,6 @@ private synchronized void writeErrorToFile(String baseDir, String pdfFullName, V FileWriter myWriter = null; try { myWriter = new FileWriter(this.externalErrorFilename); - // myWriter.write("Error messages for PDF file " + uri.getPath() + " using - // flavor " + this.parserFlavor + "\n") ; myWriter.write("PDF_FILE " + pdfFullName + " PARSER_FLAVOR " + this.parserFlavor + "\n"); String headerMessage = "getRuleId, getStatus, getMessage, getLocation"; myWriter.write(headerMessage + "\n"); diff --git a/src/main/java/gov/nasa/pds/tools/util/Utility.java b/src/main/java/gov/nasa/pds/tools/util/Utility.java index 2e44cab30..fb15fa1ab 100644 --- a/src/main/java/gov/nasa/pds/tools/util/Utility.java +++ b/src/main/java/gov/nasa/pds/tools/util/Utility.java @@ -313,7 +313,7 @@ public static TargetType getTargetType(URL source, URL label) { } if (label != null && -1 < extIndex - && label.getPath().toLowerCase().endsWith(source.getPath().substring(extIndex).toLowerCase())) { + && FileUtils.toFile(label).getPath().toLowerCase().endsWith(FileUtils.toFile(source).getPath().substring(extIndex).toLowerCase())) { if (TargetExaminer.isTargetBundleType (source, true)) { return TargetType.BUNDLE; } diff --git a/src/main/java/gov/nasa/pds/tools/util/VersionInfo.java b/src/main/java/gov/nasa/pds/tools/util/VersionInfo.java index 177ba6672..c31b12971 100644 --- a/src/main/java/gov/nasa/pds/tools/util/VersionInfo.java +++ b/src/main/java/gov/nasa/pds/tools/util/VersionInfo.java @@ -30,6 +30,7 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import org.apache.commons.io.FileUtils; /** * This class provides the means to retrieve underlying supported versions of standards. @@ -224,7 +225,7 @@ public static String[] getResourceListing(String path) throws URISyntaxException if (dirURL.getProtocol().equals("jar")) { /* A JAR path */ - String jarPath = dirURL.getPath().substring(5, dirURL.getPath().indexOf("!")); // strip out + String jarPath = FileUtils.toFile(dirURL).getPath().substring(5, FileUtils.toFile(dirURL).getPath().indexOf("!")); // strip out // only the JAR // file JarFile jar = new JarFile(URLDecoder.decode(jarPath, "UTF-8")); diff --git a/src/main/java/gov/nasa/pds/tools/validate/AggregateManager.java b/src/main/java/gov/nasa/pds/tools/validate/AggregateManager.java index f19bcaa67..d8bbf8293 100644 --- a/src/main/java/gov/nasa/pds/tools/validate/AggregateManager.java +++ b/src/main/java/gov/nasa/pds/tools/validate/AggregateManager.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import gov.nasa.pds.tools.label.ExceptionType; @@ -600,7 +601,7 @@ public static ArrayList findOtherBundleFiles(URL url, String labelExtens try { // Get the parent directory of url and crawl for files that starts with 'bundle' - String dirName = (new File(url.getPath())).getParent(); + String dirName = FileUtils.toFile(url).getParent(); LOG.debug("findOtherBundleFiles:dirName {}", dirName); Crawler crawler = CrawlerFactory.newInstance(new File(dirName).toURI().toURL()); @@ -696,7 +697,7 @@ public static ArrayList findOtherCollectionFiles(List targetList for (Target crawlTarget : targetList) { urlCrawl = crawlTarget.getUrl(); // Get the parent directory of url and crawl for files that starts with 'bundle' - String dirName = (new File(urlCrawl.getPath())).getParent(); + String dirName = FileUtils.toFile(urlCrawl).getParent(); LOG.debug("findOtherCollectionFiles:dirName,crawledDirectory.size {},{}", dirName, crawledDirectory.size()); @@ -828,7 +829,7 @@ public static void makeException(URL url, String location, String labelFileExten String parentToLocation = null; try { // The new location (as a directory) will be applicable later on. - parentToLocation = (new File(url.getPath())).getParent() + File.separator; + parentToLocation = FileUtils.toFile(url).getParent() + File.separator; m_location = "file:" + parentToLocation; LOG.debug("m_location {}", m_location); } catch (Exception e) { diff --git a/src/main/java/gov/nasa/pds/tools/validate/TargetExaminer.java b/src/main/java/gov/nasa/pds/tools/validate/TargetExaminer.java index 27b21d0f7..62e11b1ea 100644 --- a/src/main/java/gov/nasa/pds/tools/validate/TargetExaminer.java +++ b/src/main/java/gov/nasa/pds/tools/validate/TargetExaminer.java @@ -13,11 +13,11 @@ // $Id$ package gov.nasa.pds.tools.validate; -import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.xml.transform.sax.SAXSource; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.InputSource; @@ -56,16 +56,16 @@ public static boolean isTargetBundleType(URL url, boolean ignoreErrors) { boolean targetIsBundleFlag = false; // Do a sanity check if the file or directory exist. - if (!(new File(url.getPath()).exists())) { - LOG.error("Provided url does not exist: {}", url); + if (!FileUtils.toFile(url).exists()) { + LOG.error("Provided file does not exist: {}", FileUtils.toFile(url)); return (targetIsBundleFlag); } - if ((new File(url.getPath()).isFile()) && (TargetExaminer.tagMatches(url, PRODUCT_NAME_TAG, ignoreErrors))) { + if (FileUtils.toFile(url).isFile() && TargetExaminer.tagMatches(url, PRODUCT_NAME_TAG, ignoreErrors)) { targetIsBundleFlag = true; } LOG.debug("isTargetBundleType:url,(new File(url.getPath()).isFile() {},{}", url, - (new File(url.getPath()).isFile())); + FileUtils.toFile(url).isFile()); LOG.debug("isTargetBundleType:url,PRODUCT_NAME_TAG,targetIsBundleFlag {},{},{}", url, PRODUCT_NAME_TAG, targetIsBundleFlag); @@ -85,16 +85,16 @@ public static boolean isTargetCollectionType(URL url, boolean ignoreErrors) { boolean targetIsCollectionFlag = false; // Do a sanity check if the file or directory exist. - if (!(new File(url.getPath()).exists())) { - LOG.error("Provided url does not exist: {}", url); + if (!FileUtils.toFile(url).exists()) { + LOG.error("Provided file does not exist: {}", FileUtils.toFile(url)); return (targetIsCollectionFlag); } - if ((new File(url.getPath()).isFile()) && (TargetExaminer.tagMatches(url, PRODUCT_NAME_TAG, ignoreErrors))) { + if (FileUtils.toFile(url).isFile() && TargetExaminer.tagMatches(url, PRODUCT_NAME_TAG, ignoreErrors)) { targetIsCollectionFlag = true; } LOG.debug("isTargetCollectionType:url,(new File(url.getPath()).isFile() {},{}", url, - (new File(url.getPath()).isFile())); + FileUtils.toFile(url).isFile()); LOG.debug("isTargetCollectionType:url,PRODUCT_NAME_TAG,targetIsCollectionFlag {},{},{}", url, PRODUCT_NAME_TAG, targetIsCollectionFlag); diff --git a/src/main/java/gov/nasa/pds/tools/validate/content/AudioVideo.java b/src/main/java/gov/nasa/pds/tools/validate/content/AudioVideo.java index b0ec27b10..28c912682 100644 --- a/src/main/java/gov/nasa/pds/tools/validate/content/AudioVideo.java +++ b/src/main/java/gov/nasa/pds/tools/validate/content/AudioVideo.java @@ -7,6 +7,7 @@ import gov.nasa.pds.tools.validate.ValidationProblem; import gov.nasa.pds.tools.validate.ValidationTarget; import java.net.URL; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.mp4parser.IsoFile; import org.mp4parser.boxes.iso14496.part12.MovieBox; @@ -24,7 +25,7 @@ public AudioVideo (ProblemListener listener, ValidationTarget target, URL urlRef public void checkMetadata (boolean audio, boolean video) { try { boolean a = false,v = false; - IsoFile content = new IsoFile(this.urlRef.getPath()); + IsoFile content = new IsoFile(FileUtils.toFile(this.urlRef).getPath()); MovieBox movie = content.getMovieBox(); if (movie == null) { this.listener.addProblem(new ValidationProblem( diff --git a/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FindUnreferencedFiles.java b/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FindUnreferencedFiles.java index 97e1205ae..fc61cfe67 100644 --- a/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FindUnreferencedFiles.java +++ b/src/main/java/gov/nasa/pds/tools/validate/rule/pds4/FindUnreferencedFiles.java @@ -21,6 +21,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import gov.nasa.pds.tools.validate.SkippedItems; @@ -69,7 +70,7 @@ private HashSet buildReferencedFromSkipped() { } private String extractPath(URL url) { - Path fullpath = Paths.get(url.getPath()); + Path fullpath = FileUtils.toFile(url).toPath(); return fullpath.getParent().toString(); } diff --git a/src/main/java/gov/nasa/pds/validate/ValidateLauncher.java b/src/main/java/gov/nasa/pds/validate/ValidateLauncher.java index d1258884c..f4fbb64a7 100644 --- a/src/main/java/gov/nasa/pds/validate/ValidateLauncher.java +++ b/src/main/java/gov/nasa/pds/validate/ValidateLauncher.java @@ -69,6 +69,7 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.io.FileUtils; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; @@ -1559,8 +1560,8 @@ private void printWarningCollocatedData(ArrayList alternateReferentialPaths try { LOG.debug( "printWarningCollocatedData:url.getPath(),(new File(url.getPath()).exists() {},{}", - url.getPath(), (new File(url.getPath()).exists())); - if (new File(url.getPath()).exists()) { + url.getPath(), FileUtils.toFile(url).exists()); + if (FileUtils.toFile(url).exists()) { ValidationProblem p1 = new ValidationProblem( new ProblemDefinition(ExceptionType.WARNING, ProblemType.GENERAL_INFO, "This data should be collocated with the other bundle data"), diff --git a/src/main/java/gov/nasa/pds/web/ui/utils/DataSetValidator.java b/src/main/java/gov/nasa/pds/web/ui/utils/DataSetValidator.java index 2f2f6ff05..fd94776a8 100644 --- a/src/main/java/gov/nasa/pds/web/ui/utils/DataSetValidator.java +++ b/src/main/java/gov/nasa/pds/web/ui/utils/DataSetValidator.java @@ -7,7 +7,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.UnsupportedEncodingException; -import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Date; @@ -970,11 +969,7 @@ protected static synchronized void initMasterDictionary() { if (masterDictionary == null) { File dataDictionaryFile; URL dictionaryURL = DataSetValidator.class.getResource("/masterdd.full"); //$NON-NLS-1$ - try { - dataDictionaryFile = new File(dictionaryURL.toURI()); - } catch (URISyntaxException e) { - dataDictionaryFile = new File(dictionaryURL.getPath()); - } + dataDictionaryFile = org.apache.commons.io.FileUtils.toFile(dictionaryURL); try { masterDictionary = DictionaryParser.parse(dataDictionaryFile); diff --git a/src/test/java/cucumber/StepDefs.java b/src/test/java/cucumber/StepDefs.java index c23c44e78..562e684d2 100644 --- a/src/test/java/cucumber/StepDefs.java +++ b/src/test/java/cucumber/StepDefs.java @@ -176,7 +176,7 @@ private String[] resolveArgumentStrings() { // Replace every occurence of "{resourceDir}" with actual value. resolvedToken = temp.replace("{reportDir}", this.reportDir); resolvedToken = resolvedToken.replace("{resourceDir}", this.resourceDir); - + resolvedToken = resolvedToken.replace("%20", " "); args[argIndex++] = resolvedToken; } diff --git a/src/test/resources/features/developer.feature b/src/test/resources/features/developer.feature index 87617b76a..d7694243a 100644 --- a/src/test/resources/features/developer.feature +++ b/src/test/resources/features/developer.feature @@ -449,6 +449,8 @@ Scenario Outline: Execute validate command for tests below. |"NASA-PDS/validate#429 VALID" | "github429" | 0 | "0 warning messages expected" | "totalWarnings" | "src/test/resources" | "target/test" | "-R pds4.label -r {reportDir}/report_github429_label_valid.json -s json -t {resourceDir}/github429/EPPS_EDR_SIS.xml" | "report_github429_label_valid.json" | +# Validate#427 +|"NASA-PDS/validate#427 Success with spaces in directory" | "github427" | 0 | "0 errors expected" | "totalErrors" | "src/test/resources" | "target/test" | "-r {reportDir}/report_github427.json -s json --skip-context-validation -t {resourceDir}/github427/dir%20with%20spaces/rs_20160518_014000_udsc64_l3_e_v10.xml" | "report_github427.json" | # https://github.com/nasa-pds/validate/issues/424 Validate does not allow SIP tab file to have lines of differing lengths # The checking should NOT be done based on the file extension but based on the table type. The Table_Delimited can have variable length records. diff --git a/src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.tab b/src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.tab new file mode 100644 index 000000000..9488d6b28 --- /dev/null +++ b/src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.tab @@ -0,0 +1,2 @@ +00001 2016-05-18T02:24:21.556 516810329.741615 15307.329725 15297.461237 8410932000.000000 6092.292 -0.9999E+01 90245.596477 -9999999.999999 1.0010332740 1033.274000 -9999999.999999 -0.9999E+01 -99999999.999999 6098.587 -0.9999E+01 22.87 -6.25 + diff --git a/src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.xml b/src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.xml new file mode 100644 index 000000000..31495cfcb --- /dev/null +++ b/src/test/resources/github427/dir with spaces/rs_20160518_014000_udsc64_l3_e_v10.xml @@ -0,0 +1,373 @@ + + + + + + + urn:jaxa:darts:vco_rs:data_derived:rs_20160518_014000_udsc64_l3_e + 1.0 + Venus Climate Orbiter Akatsuki Radio Science Derived Data Product rs_20160518_014000_udsc64_l3_e_v10 + 1.19.0.0 + Product_Observational + + + + 2016-05-18T02:24:21.556Z + 2016-05-18T02:28:27.082Z + + + Science + Derived + This file contains derived data from the Radio Science experiment of the Venus Climate Orbiter Akatsuki. Observation was conducted properly. + + Microwave + Radio + Atmosphere + Atmospheres + Meteorology + + + + Venus Climate Orbiter Akatsuki Mission + Mission + + urn:jaxa:darts:context:investigation:mission.vco + data_to_investigation + + + + + Venus Climate Orbiter Akatsuki + Host + + urn:jaxa:darts:context:instrument_host:spacecraft.vco + is_instrument_host + + + + Radio Science Subsystem for Venus Climate Orbiter Akatsuki + Instrument + + urn:jaxa:darts:context:instrument:vco.rss + is_instrument + + + + The Usuda Deep Space Center 64-meter Station + Telescope + + + + Venus + Planet + + urn:nasa:pds:context:target:planet.venus + data_to_target + + + + + + 16 + 2016-05-18T01:48:32Z + 4.2 + 121.85 + 9726.52 + 168.44 + 0.918 + 220.1 + 158.57 + 192670.47 + + + + + + Primary Science Phase + VCO Akatsuki Radio Science Level 3 + + 16 + 16 + + + + + + + urn:jaxa:darts:vco_rs:data_raw:rs_20160518_014000_udsc64_l1_rhcp::1.0 + data_to_raw_source_product + + + urn:jaxa:darts:vco_rs:data_calibrated:rs_20160518_014000_udsc64_l2::1.0 + data_to_calibrated_source_product + + + + + rs_20160518_014000_udsc64_l3_e_v10.tab + 2022-11-25T07:45:40Z + 308 + + + Venus Climate Orbiter Akatsuki Radio Science (RS) Level 3 data, refractivity, bending angle, and impact parameter profile + 0 + 1 + + This is a refractivity, bending angle and, impact parameter profiles derived from Venus Climate Orbiter Akatsuki radio occultation data. + The raw data were processed to level 2 and converted to bending angles and impact parameters. + These results were then inverted to refractive index and refractivity via an Abel transform. + + Carriage-Return Line-Feed + + 19 + 0 + 306 + + Sample Number + 1 + 1 + ASCII_NonNegative_Integer + 5 + %05d + The number of this row in the table, starting from 1 in the first row. + + 00001 + + + + UTC Time + 2 + 8 + ASCII_Date_Time_YMD + 23 + The receiver date and time of this measurement in UTC. + + + Ephemeris Seconds + 3 + 33 + ASCII_Real + 16 + %16.6f + s + Seconds from 12h 1 January 2000 TDB (2000-01-01T12:00:00 TDB) corresponding to "UTC Time" (field_number 2); includes leap seconds, if any. + + + Residual Calibrated X-Band Frequency Shift + 4 + 51 + ASCII_Real + 16 + %16.6f + Hz + Observed sky frequency minus predicted frequency both taken from level 2 data product averaged for new sampling time. + + -999999.999999 + + + + Residual Calibrated X-Band Frequency Shift after Baseline Fit + 5 + 69 + ASCII_Real + 16 + %16.6f + Hz + Value of "Residual Calibrated X-Band Frequency Shift" (field_number 4) after subtraction of a polynomial to correct for non-atmospheric effects. + + -999999.999999 + + + + Reconstructed Transmit Frequency + 6 + 87 + ASCII_Real + 19 + %19.6f + Hz + Reconstructed transmitted frequency of the spacecraft. + + 0.0 + + + + Radius + 7 + 108 + ASCII_Real + 12 + %12.3f + km + Closest approach of the bended ray to the planet. The value gives the distance between the bended ray and the center of the planet. + + 0.0 + + + + Sigma Radius + 8 + 122 + ASCII_Real + 13 + %13.4e + km + One standard deviation uncertainty in "Radius" (field_number 7). + + -0.9999E+01 + 0.0 + + + + Bending Angle + 9 + 135 + ASCII_Real + 15 + %15.6f + rad + 10e-6 + Total bending angle measured as the angle between the ray asymptotes of the radio ray link. + + + Sigma Bending Angle + 10 + 152 + ASCII_Real + 15 + %15.6f + rad + 10e-6 + One standard deviation uncertainty in "Bending Angle" (field_number 9). + + -9999999.999999 + 0.0 + + + + Refractive Index + 11 + 169 + ASCII_Real + 20 + %20.10f + none + Refractive index of the atmosphere. + + + Refractivity + 12 + 191 + ASCII_Real + 15 + %15.6f + none + Refractivity of the atmosphere. + + + Sigma Refractivity + 13 + 208 + ASCII_Real + 15 + %15.6f + none + One standard deviation uncertainty in "Refractivity" (field_number 12). + + -9999999.999999 + 0.0 + + + + Signal Level + 14 + 225 + ASCII_Real + 11 + %11.4e + none + Signal level in arbitrary linear unit with the effect of inaccurate antenna pointing corrected (relative unit). + + -0.9999E+01 + + + + Differential Doppler + 15 + 238 + ASCII_Real + 18 + %18.6f + Hz + Contribution of dispersive media to the received signal frequency calculated from two coherent bands. + + -99999999.999999 + + + + Impact Parameter + 16 + 258 + ASCII_Real + 12 + %12.3f + km + Distance of the ray asymptotes to the planet. The value is defined as the distance between the ray asymptote and the center of planet. + + 0.0 + + + + Sigma Impact Parameter + 17 + 272 + ASCII_Real + 11 + %11.4e + km + One standard deviation uncertainty in "Impact Parameter" (field_number 16). + + -0.9999E+01 + 0.0 + + + + Longitude + 18 + 285 + ASCII_Real + 9 + %9.2f + deg + East longitude of measurement in body fixed coordinates. + + 360.0 + 0.0 + + + + Latitude + 19 + 296 + ASCII_Real + 9 + %9.2f + deg + North latitude of measurement in body fixed coordinates. + + 90.0 + -90.0 + + + + + +