From 5c84cce2b18e58378730bdb52ca0cf14c35ea9c4 Mon Sep 17 00:00:00 2001 From: Paullo9 Date: Sun, 1 Nov 2026 16:53:44 +0100 Subject: [PATCH 1/2] fix: results and profile CSVs quote the reader note instead of an unvalidated clause TidyResultsCSV and ProfileCSV no longer test the source notes for the word "unvalidated" and append ", unvalidated (reader note)". When the source has reader notes, every validation sentence (header line and cell) is followed by "; reader note: " and the notes as the reader wrote them, joined by "; ". Each note passes CSVText.headerValue so a cell keeps one line, and blank notes are left out. Without notes the sentence stands alone. TidyResultsCSV.unvalidatedClause stays public, marked deprecated, and is no longer written by any writer, so consumers keep compiling. Comments in GeometricPhaseAnalysis now say what the result was tested against (planted displacement fields) instead of telling apps to show it as unvalidated. The tidy pins move in the next commit (the expected texts change). Done: CSV writers quote the reader notes; next: re-pin csv-tidy-pins.json. Co-Authored-By: Claude Opus 5.5 --- Sources/ImagoCore/ProfileCSV.swift | 8 +++--- Sources/ImagoCore/TidyResultsCSV.swift | 17 +++++++++--- .../ImagoFilters/GeometricPhaseAnalysis.swift | 8 +++--- Tests/ImagoCoreTests/CSVTextTests.swift | 27 +++++++++++++++++++ Tests/ImagoCoreTests/ProfileCSVTests.swift | 11 ++++---- .../Sources/consumer-check/main.swift | 2 +- 6 files changed, 54 insertions(+), 19 deletions(-) diff --git a/Sources/ImagoCore/ProfileCSV.swift b/Sources/ImagoCore/ProfileCSV.swift index 4cbd9f1..11d87ae 100644 --- a/Sources/ImagoCore/ProfileCSV.swift +++ b/Sources/ImagoCore/ProfileCSV.swift @@ -9,7 +9,7 @@ // axes' unit as the FILE states it (a Velox metre axis stays in metres), `px` when the image is not calibrated; `shown` // only adds a line saying what the app shows them in. HEADER values pass `CSVText.headerValue`, the column header // `CSVText.quoted`. The title, the validation sentence and the lineage sentence are the caller's (the kit authors no claim); -// when a note of the source says "unvalidated" (any case) `TidyResultsCSV.unvalidatedClause` follows the validation. +// when the source has reader notes, `; reader note: ` and the notes (joined by `; `) follow the validation. // // UTF-8, LF line ends, tested byte for byte. Same lines, in the same order, as macTEM's former app copy. // @@ -33,7 +33,7 @@ public nonisolated enum ProfileCSV { /// - appName: names the app in the `# shown in as:` line ("macTEM"). /// - start, end: the line's ends in image pixels (x column, y row, pixel centres at integers). /// - source: the file and its calibration as the file states them. - /// - validation: the validation sentence (the clause for an unvalidated source is added). + /// - validation: the validation sentence (the source's reader notes are quoted after it). /// - method: the `# method:` sentence; `method(width:)` for order 1, `reflect`, mean. /// - lineage: the `# lineage:` sentence. /// - shown: the unit and factor the app shows positions in when it differs from the file's; nil when the same. @@ -42,7 +42,6 @@ public nonisolated enum ProfileCSV { lineage: String = noLineage, shown: (unit: String, factor: Double)? = nil) -> String? { guard let length = profile.positions.last, !profile.samples.isEmpty else { return nil } let unit = CSVText.headerValue(profile.unit) - let unvalidated = source.notes.contains { $0.lowercased().contains("unvalidated") } let notes = source.notes.isEmpty ? "none" : source.notes.map(CSVText.headerValue).joined(separator: "; ") var header: [String] = [] @@ -65,8 +64,7 @@ public nonisolated enum ProfileCSV { } header.append("# method: \(CSVText.headerValue(method ?? Self.method(width: profile.width)))") header.append("# notes: \(notes)") - header.append("# validation: \(CSVText.headerValue(validation))" - + (unvalidated ? TidyResultsCSV.unvalidatedClause : "")) + header.append("# validation: \(CSVText.headerValue(validation + TidyResultsCSV.readerNoteClause(source.notes)))") header.append("# lineage: \(CSVText.headerValue(lineage))") header.append("# numbers: %.17g (exact round trip); nan where a NaN pixel enters a sample") header.append(CSVText.quoted("position (\(unit))") + ",value") diff --git a/Sources/ImagoCore/TidyResultsCSV.swift b/Sources/ImagoCore/TidyResultsCSV.swift index 50f0e13..2080846 100644 --- a/Sources/ImagoCore/TidyResultsCSV.swift +++ b/Sources/ImagoCore/TidyResultsCSV.swift @@ -9,8 +9,9 @@ // cell and its words in `text`. Text cells and header values go through `CSVText.quoted` and `CSVText.headerValue`. // // VALIDATION: the `validation` column holds the product's own sentence, and the header holds one `# validation ():` -// line for each product present, in the order `validations` lists them. When a note of the source says "unvalidated" (any -// case), `unvalidatedClause` follows every sentence. The kit authors no claim: the caller supplies the sentences. +// line for each product present, in the order `validations` lists them. When the source has reader notes, every sentence is +// followed by `; reader note: ` and the notes as the reader wrote them, joined by `; `, so the file states what the reader +// said about its own numbers. The kit authors no claim: the caller supplies the sentences, the reader the notes. // // Pure text: exact, tested byte for byte. UTF-8, LF line ends. // @@ -18,9 +19,17 @@ import Foundation public nonisolated enum TidyResultsCSV { - /// Added to every validation sentence when the source's notes say it is unvalidated. + /// No writer uses this any more: the CSVs quote the reader notes after each validation sentence instead. + @available(*, deprecated, message: "The CSV writers now quote the reader notes after each validation sentence; this clause is no longer written.") public static let unvalidatedClause = ", unvalidated (reader note)" + /// What follows every validation sentence: `; reader note: `, or nothing without a note. Each note + /// passes `CSVText.headerValue` (so a cell keeps one line), and blank notes are left out. + static func readerNoteClause(_ notes: [String]) -> String { + let said = notes.map(CSVText.headerValue).filter { !$0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } + return said.isEmpty ? "" : "; reader note: " + said.joined(separator: "; ") + } + public static let columns = ["group", "id", "label", "quantity", "value", "unit", "text", "validation", "lineage"] /// The file and its calibration as the file states them. @@ -103,7 +112,7 @@ public nonisolated enum TidyResultsCSV { lines.append("# session: \(CSVText.headerValue(session))") lines.append("# notes: \(notes)") lines.append(contentsOf: descriptionLines) - let flagged = source.notes.contains { $0.lowercased().contains("unvalidated") } ? unvalidatedClause : "" + let flagged = readerNoteClause(source.notes) let present = Set(rows.map(\.product)) var written = Set() for v in validations where present.contains(v.product) && written.insert(v.product).inserted { diff --git a/Sources/ImagoFilters/GeometricPhaseAnalysis.swift b/Sources/ImagoFilters/GeometricPhaseAnalysis.swift index 0131dc8..930cb7d 100644 --- a/Sources/ImagoFilters/GeometricPhaseAnalysis.swift +++ b/Sources/ImagoFilters/GeometricPhaseAnalysis.swift @@ -48,10 +48,10 @@ public nonisolated enum GeometricPhaseAnalysis { /// Full-size, row-major, `rows * columns` arrays. /// - /// `validation` is "none": the result agrees with planted fields (tools/gpa/planted.py) and has not been checked on a - /// dataset with truth, so an app must show it as unvalidated until one passes. + /// Tested against planted displacement fields (tools/gpa/planted.py); not yet checked on a recorded dataset with known + /// strain. An app that exports it names that method and reference. `validation` keeps the value "none" for that state. public nonisolated struct Result: Sendable { - /// The badge every result carries until a dataset with truth passes. + /// The value of `validation` while the only check is the planted fields. public static let validationNone = "none" public let validation: String = "none" public var rows: Int @@ -209,7 +209,7 @@ public nonisolated enum GeometricPhaseAnalysis { /// plane g_col > 0 (or g_col = 0 and g_row > 0), the stronger first. The spectrum is taken after the mean is removed and a /// Hann window applied; each peak is refined by a parabola through the log magnitudes of the three bins on each axis. /// Peaks within `minRadius` cycles per pixel of the origin are skipped; the second peak must be at least 3 bins from the - /// first with |sin angle| >= 0.2. Unvalidated beyond the planted images. + /// first with |sin angle| >= 0.2. Tested on the planted images only. public static func findReflections(_ image: [Double], rows: Int, columns: Int, minRadius: Double = 0.02) throws -> (g1: (row: Double, column: Double), g2: (row: Double, column: Double)) { typealias E = GeometricPhaseAnalysisError diff --git a/Tests/ImagoCoreTests/CSVTextTests.swift b/Tests/ImagoCoreTests/CSVTextTests.swift index 8836e13..f064332 100644 --- a/Tests/ImagoCoreTests/CSVTextTests.swift +++ b/Tests/ImagoCoreTests/CSVTextTests.swift @@ -94,6 +94,33 @@ private struct TidyPins: Decodable, Sendable { #expect(written >= 12) } + /// A source with reader notes: every validation sentence (header line and cell) is followed by the notes as the reader + /// wrote them, and nothing is called unvalidated. Without notes the sentence stands alone. + @Test func tidyQuotesTheReaderNoteAfterEachValidation() throws { + let row = TidyResultsCSV.Row(group: "g", id: "i", label: "l", product: "known", entries: [TidyResultsCSV.Entry("d", 1)]) + func text(_ notes: [String]) throws -> String { + let source = TidyResultsCSV.Source(software: "s", fileName: "f", object: "o", width: 1, height: 1, x: nil, y: nil, + notes: notes) + return try #require(try TidyResultsCSV.text([row], source: source, title: "t", session: "s", descriptionLines: [], + validations: [(product: "known", sentence: "closed form")], + lineageLine: "# lineage: none")) + } + let noted = try text(["scale from the tag", "UNVALIDATED"]) + let lines = noted.components(separatedBy: "\n") + #expect(lines.contains("# validation (known): closed form; reader note: scale from the tag; UNVALIDATED")) + #expect(lines.contains("g,i,l,d,1,,,closed form; reader note: scale from the tag; UNVALIDATED,")) + #expect(!noted.contains("unvalidated")) // the reader's own word is quoted, never a lower-case verdict + let plain = try text(["origin from the header"]) + #expect(plain.contains("closed form; reader note: origin from the header")) + #expect(!plain.lowercased().contains("unvalidated")) + let bare = try text([]) + #expect(bare.contains("# validation (known): closed form\n") && bare.hasSuffix("g,i,l,d,1,,,closed form,\n")) + // a cell keeps one line (the note passes headerValue) and a blank note adds nothing + let multi = try text(["cr\r\nlf", "", " "]) + #expect(multi.hasSuffix("g,i,l,d,1,,,closed form; reader note: cr lf,\n")) + #expect(try text(["", "\n"]) == bare.replacingOccurrences(of: "# notes: none", with: "# notes: ; ")) + } + @Test func tidyRefusesAProductWithoutASentenceAndWritesNothingForNoRow() throws { let source = TidyResultsCSV.Source(software: "s", fileName: "f", object: "o", width: 1, height: 1, x: nil, y: nil, notes: []) let row = TidyResultsCSV.Row(group: "g", id: "i", label: "l", product: "mystery", entries: []) diff --git a/Tests/ImagoCoreTests/ProfileCSVTests.swift b/Tests/ImagoCoreTests/ProfileCSVTests.swift index dc49a36..8f0d89a 100644 --- a/Tests/ImagoCoreTests/ProfileCSVTests.swift +++ b/Tests/ImagoCoreTests/ProfileCSVTests.swift @@ -1,5 +1,5 @@ // ProfileCSV: the whole text of a planted profile byte for byte (the lines and order macTEM's app copy wrote), the shown -// line, the unvalidated clause, header sanitising, nan, and an empty profile that is not a file. Text is tested exact. +// line, the reader note after the validation, header sanitising, nan, and an empty profile that is not a file. Text is tested exact. import Foundation import ImagoCore import Testing @@ -53,13 +53,14 @@ import Testing #expect(try planted() == expected) } - @Test func shownLineAndUnvalidatedClauseAndSanitising() throws { - let text = try #require(try planted(notes: ["scale UNVALIDATED\r\nnext"], fileName: "a\u{2028}b.dm4", + @Test func shownLineAndReaderNoteAndSanitising() throws { + let text = try #require(try planted(notes: ["scale from the tag\r\nnext", "second"], fileName: "a\u{2028}b.dm4", shown: (unit: "nm", factor: 1e9))) let lines = text.components(separatedBy: "\n") #expect(lines.contains("# shown in macTEM as: nm (x 1000000000.0)")) - #expect(lines.contains("# notes: scale UNVALIDATED next")) - #expect(lines.contains("# validation: " + validation + ", unvalidated (reader note)")) + #expect(lines.contains("# notes: scale from the tag next; second")) + #expect(lines.contains("# validation: " + validation + "; reader note: scale from the tag next; second")) + #expect(!text.lowercased().contains("unvalidated")) #expect(lines.contains("# file: a b.dm4")) let keys = lines.prefix { $0.hasPrefix("#") }.compactMap { $0.dropFirst(2).components(separatedBy: ": ").first } #expect(keys.contains("shown in macTEM as")) diff --git a/tools/consumer-check/Sources/consumer-check/main.swift b/tools/consumer-check/Sources/consumer-check/main.swift index fe808dc..e5328cc 100644 --- a/tools/consumer-check/Sources/consumer-check/main.swift +++ b/tools/consumer-check/Sources/consumer-check/main.swift @@ -402,7 +402,7 @@ check(foundSet == [[0, 0.125], [0.125, 0]], "public GPA finds the two reflection let gpa = try GeometricPhaseAnalysis.analyze(lattice, rows: 64, columns: 64, g1: (0, 0.125), g2: (0.125, 0)) let worst = (gpa.strainRR + gpa.strainCC + gpa.strainRC + gpa.rotation).map(abs).max() ?? .nan check(gpa.validation == GeometricPhaseAnalysis.Result.validationNone && worst < 1e-8, - "public GPA of a perfect lattice: zero strain and rotation, badged unvalidated (worst \(worst))") + "public GPA of a perfect lattice: zero strain and rotation, validation value none (worst \(worst))") do { _ = try GeometricPhaseAnalysis.analyze(lattice, rows: 64, columns: 64, g1: (0, 0.125), g2: (0, 0.25)); check(false, "collinear g") } catch let e as GeometricPhaseAnalysisError { check(e == .collinearReflections, "public GPA refuses collinear reflections") } catch { check(false, "collinear g: another error \(error)") } From 8822b066589647489bef696afdb1fa5238cae54e Mon Sep 17 00:00:00 2001 From: Paullo9 Date: Sun, 1 Nov 2026 16:53:48 +0100 Subject: [PATCH 2/2] test: re-pin csv-tidy-pins.json for the reader-note clause Reason: TidyResultsCSV now follows each validation sentence with "; reader note: " instead of ", unvalidated (reader note)". 13 of the 15 written cases have notes and change; the inputs are unchanged. The expected texts were transformed from the old pins by a script independent of the Swift writer: header validation lines pass headerValue, cells RFC 4180 quoting, as CSVText does. It checked that the file round-trips through json.dumps, that each product has exactly one header line and one cell per row line, and that the old clause is gone. The application harness that first wrote these pins (tools/csvexport/pins.py) is not re-run. Done: tidy pins match the new clause; next: none. Co-Authored-By: Claude Opus 5.5 --- Tests/ImagoCoreTests/Fixtures/csv-tidy-pins.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/ImagoCoreTests/Fixtures/csv-tidy-pins.json b/Tests/ImagoCoreTests/Fixtures/csv-tidy-pins.json index 4d1c759..a9c8851 100644 --- a/Tests/ImagoCoreTests/Fixtures/csv-tidy-pins.json +++ b/Tests/ImagoCoreTests/Fixtures/csv-tidy-pins.json @@ -1 +1 @@ -{"title": "macTEM results", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]], "descriptionLines": ["# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels", "# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels"], "lineageLine": "# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)", "cases": [{"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "with,comma.dm4", "object": "plain.dm4", "width": 3292, "height": 3397, "x": {"originBits": 1, "scaleBits": 13870170782931264748, "unit": "px"}, "y": {"originBits": 13858705342554176504, "scaleBits": 4477516673583951164, "unit": ""}, "notes": []}, "rows": [], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": null}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "", "object": "", "width": 1475, "height": 3863, "x": {"originBits": 13913614912728981959, "scaleBits": 4607182418800017408, "unit": "m"}, "y": {"originBits": 4473366651089836748, "scaleBits": 4503009890106136400, "unit": "mrad"}, "notes": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "spots", "id": "spots:0", "label": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "product": "spot", "entries": [{"name": "q", "valueBits": 4599301119452119040, "unit": "nm", "text": ""}, {"name": "d", "valueBits": 13824397457163940752, "unit": "\u00c5", "text": ""}, {"name": "length", "valueBits": 9223372036854775808, "unit": "px", "text": ""}, {"name": "length", "valueBits": 4483328836346772969, "unit": "um", "text": ""}, {"name": "x1", "valueBits": 4591870180066957722, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s0"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: \n# object: \n# image: 1475 x 3863 px\n# x scale: 1.0 m per px, origin -378306.9206919935 px\n# y scale: 1.1140418184552812e-07 mrad per px, origin 1.198547637139609e-09 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,q,0.3125,nm,,planted spots,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,d,-0.40821792564366266,\u00c5,,planted spots,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,length,-0,px,,planted spots,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,length,5.5841364548338526e-09,um,,planted spots,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,x1,0.10000000000000001,1/nm,,planted spots,s0\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "ctrl\u0001\u007f", "object": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "width": 3967, "height": 3913, "x": null, "y": {"originBits": 13897713229135952275, "scaleBits": 13729421787296120747, "unit": "1/m"}, "notes": ["line\nbreak"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "angle", "entries": [{"name": "d", "valueBits": 1, "unit": "", "text": ""}, {"name": "length", "valueBits": 13905323795505704733, "unit": "\u00b0", "text": ""}, {"name": "length", "valueBits": null, "unit": "um", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "distance", "entries": [{"name": "x1", "valueBits": 1, "unit": "1/m", "text": "cr\r\nlf"}, {"name": "q", "valueBits": 13829043358039307241, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": null, "unit": "nm", "text": ""}], "refusal": null, "lineage": "s1"}, {"group": "spots", "id": "spots:2", "label": "Row 2", "product": "spot", "entries": [], "refusal": null, "lineage": null}, {"group": "spots", "id": "spots:3", "label": "Row 3", "product": "spot", "entries": [{"name": "with,comma.dm4", "valueBits": 4648204705981854400, "unit": "um", "text": ""}], "refusal": "cr\r\nlf", "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "angle", "entries": [], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: ctrl \n# object: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# image: 3967 x 3913 px\n# x scale: none\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,d,4.9406564584124654e-324,,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:0,Row 0,length,-104997.09519141582,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:0,Row 0,length,,um,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:1,Row 1,x1,4.9406564584124654e-324,1/m,\"cr\r\nlf\",\"closed form, distance\",s1\nmarks,marks:1,Row 1,q,-0.8322344634831299,\u00b5m,,\"closed form, distance\",s1\nmarks,marks:1,Row 1,q,,nm,,\"closed form, distance\",s1\nspots,spots:3,Row 3,\"with,comma.dm4\",567.69410581103148,um,,planted spots,\nspots,spots:3,Row 3,outcome,,,\"cr\r\nlf\",planted spots,\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "cr\r\nlf", "object": "", "width": 3257, "height": 3496, "x": {"originBits": 13780468080851010131, "scaleBits": 4706805043041404373, "unit": "pm"}, "y": {"originBits": 13919869217332155888, "scaleBits": 4489806213533731600, "unit": "um"}, "notes": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [], "refusal": null, "lineage": "s0"}, {"group": "spots", "id": "spots:1", "label": "Row 1", "product": "spot", "entries": [{"name": "d", "valueBits": 4548605656248489097, "unit": "1/px", "text": ""}, {"name": "y1", "valueBits": null, "unit": "mrad", "text": ""}, {"name": "ctrl\u0001\u007f", "valueBits": null, "unit": "pm", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": null, "unit": "1/\u00c5", "text": ""}], "refusal": null, "lineage": "s1"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: cr lf\n# object: \n# image: 3257 x 3496 px\n# x scale: 4700414.89843889 pm per px, origin -0.0004586403062907574 px\n# y scale: 1.4433613971234772e-08 um per px, origin -960422.7245661598 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:1,Row 1,d,0.00012166417855581832,1/px,,planted spots,s1\nspots,spots:1,Row 1,y1,,mrad,,planted spots,s1\nspots,spots:1,Row 1,ctrl\u0001\u007f,,pm,,planted spots,s1\nspots,spots:1,Row 1,tab\tand\u0085nel\u2028sep\u2029,,1/\u00c5,,planted spots,s1\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "line\nbreak", "object": "line\nbreak", "width": 2638, "height": 2737, "x": {"originBits": 13887529869885230160, "scaleBits": 4623193449843880065, "unit": "\u00c5"}, "y": {"originBits": 9223372036854775808, "scaleBits": 4489794098957596209, "unit": "1/px"}, "notes": ["a \"quoted\" name", "plain.dm4", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "a \"quoted\" name", "product": "distance", "entries": [{"name": "plain.dm4", "valueBits": 13774550170479932637, "unit": "\u00b5m", "text": ""}, {"name": "length", "valueBits": 13860226465206106641, "unit": "\u00b0", "text": ""}], "refusal": "plain.dm4", "lineage": null}, {"group": "marks", "id": "marks:1", "label": "plain.dm4", "product": "angle", "entries": [{"name": "x1", "valueBits": 13795013905347428094, "unit": "1/nm", "text": ""}, {"name": "y1", "valueBits": 13916111843208673688, "unit": "1/\u00c5", "text": ""}, {"name": "length", "valueBits": 13944780179619938193, "unit": "px", "text": ""}, {"name": "y1", "valueBits": null, "unit": "", "text": "cr\r\nlf"}, {"name": "q", "valueBits": 13713189743075904339, "unit": "m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "distance", "entries": [{"name": "y1", "valueBits": 4689223108506201912, "unit": "um", "text": ""}, {"name": "length", "valueBits": 4599676419421066581, "unit": "1/nm", "text": ""}, {"name": "length", "valueBits": 4531709457107920541, "unit": "1/nm", "text": ""}, {"name": "d", "valueBits": null, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "distance", "entries": [{"name": "length", "valueBits": 13953064669076816644, "unit": "px", "text": ""}, {"name": "length", "valueBits": 13826891945726597913, "unit": "px", "text": ""}, {"name": "d", "valueBits": 13857999919115077096, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "profile", "entries": [{"name": "q", "valueBits": 9223372036854775808, "unit": "\u00b5m", "text": ""}, {"name": "y1", "valueBits": 13930396955387614310, "unit": "1/m", "text": ""}], "refusal": null, "lineage": "s4"}, {"group": "spots", "id": "spots:5", "label": "Row 5", "product": "spot", "entries": [{"name": "q", "valueBits": 4475985662216163534, "unit": "", "text": ""}, {"name": "x1", "valueBits": 4694075660488176028, "unit": "", "text": "line\nbreak"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4607182418800017408, "unit": "1/\u00c5", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:6", "label": "Row 6", "product": "distance", "entries": [{"name": "q", "valueBits": 4599676419421066581, "unit": "\u00b5m", "text": ""}, {"name": "y1", "valueBits": 4564205877686929647, "unit": "um", "text": ""}], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "distance", "entries": [{"name": "x1", "valueBits": 13731123496161135390, "unit": "\u00c5", "text": "line\nbreak"}, {"name": "d", "valueBits": 4535827082660111261, "unit": "\u00b0", "text": ""}, {"name": "d", "valueBits": 9221120237041090560, "unit": "1/m", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "x1", "valueBits": 4627674475121943007, "unit": "mrad", "text": ""}, {"name": "y1", "valueBits": null, "unit": "um", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:8", "label": "Row 8", "product": "distance", "entries": [{"name": "q", "valueBits": 9218868437227405312, "unit": "\u00b0", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4618981628002793772, "unit": "1/m", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "profile", "entries": [{"name": "y1", "valueBits": 4654998134299041448, "unit": "1/\u00c5", "text": ""}, {"name": "length", "valueBits": null, "unit": "\u00b0", "text": ""}, {"name": "y1", "valueBits": 13955696789406597625, "unit": "um", "text": ""}], "refusal": "plain.dm4", "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: line break\n# object: line break\n# image: 2638 x 2737 px\n# x scale: 12.441304500615162 \u00c5 per px, origin -6762.8373739003 px\n# y scale: 1.4413572086217786e-08 1/px per px, origin -0.0 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: a \"quoted\" name; plain.dm4; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance, unvalidated (reader note)\n# validation (angle): closed form, angle, with \"quotes\", and commas, unvalidated (reader note)\n# validation (profile): samples: scikit-image 0.26.0 (a line break), unvalidated (reader note)\n# validation (spot): planted spots, unvalidated (reader note)\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,\"a \"\"quoted\"\" name\",plain.dm4,-0.00019098518362296079,\u00b5m,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",length,-101.66461684180128,\u00b0,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",outcome,,,plain.dm4,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:1,plain.dm4,x1,-0.0043297365163394979,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:1,plain.dm4,y1,-523647.40337839117,1/\u00c5,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:1,plain.dm4,length,-45741594.644286282,px,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:1,plain.dm4,y1,,,\"cr\r\nlf\",\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:1,plain.dm4,q,-1.445262702763652e-08,m,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:2,Row 2,y1,318948.64752458362,um,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:2,Row 2,length,0.33333333333333331,1/nm,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:2,Row 2,length,9.4729312023645688e-06,1/nm,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:2,Row 2,d,,mrad,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:3,Row 3,length,-161427948.18849957,px,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:3,Row 3,length,-0.59337971497993458,px,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:3,Row 3,d,-70.023493825479477,1/nm,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:4,Row 4,q,-0,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",s4\nmarks,marks:4,Row 4,y1,-4905189.9072161671,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",s4\nspots,spots:5,Row 5,q,1.7401464440791555e-09,,,\"planted spots, unvalidated (reader note)\",\nspots,spots:5,Row 5,x1,678520.69571261434,,\"line\nbreak\",\"planted spots, unvalidated (reader note)\",\nspots,spots:5,Row 5,tab\tand\u0085nel\u2028sep\u2029,1,1/\u00c5,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"planted spots, unvalidated (reader note)\",\nmarks,marks:6,Row 6,q,0.33333333333333331,\u00b5m,,\"closed form, distance, unvalidated (reader note)\",s6\nmarks,marks:6,Row 6,y1,0.0014231356518555301,um,,\"closed form, distance, unvalidated (reader note)\",s6\nmarks,marks:7,Row 7,x1,-2.2910736583637679e-07,\u00c5,\"line\nbreak\",\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:7,Row 7,d,1.7638131370876023e-05,\u00b0,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:7,Row 7,d,nan,1/m,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:7,Row 7,x1,24.802408801655357,mrad,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:7,Row 7,y1,,um,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:8,Row 8,q,inf,\u00b0,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:8,Row 8,tab\tand\u0085nel\u2028sep\u2029,6.4798029834330855,1/m,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:9,Row 9,y1,1656.0349769610129,1/\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:9,Row 9,length,,\u00b0,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:9,Row 9,y1,-239871246.81983927,um,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:9,Row 9,outcome,,,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "tab\tand\u0085nel\u2028sep\u2029", "width": 329, "height": 2540, "x": {"originBits": 4733214722362243522, "scaleBits": 4688996572955498173, "unit": "um"}, "y": {"originBits": 4492615507406039200, "scaleBits": 4625985442531634717, "unit": "nm"}, "notes": ["cr\r\nlf", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "profile", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "tab\tand\u0085nel\u2028sep\u2029", "product": "angle", "entries": [{"name": "length", "valueBits": 4627713569321409041, "unit": "\u00b5m", "text": ""}], "refusal": null, "lineage": "s1"}, {"group": "marks", "id": "marks:2", "label": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "product": "angle", "entries": [{"name": "x1", "valueBits": 4594266199546686779, "unit": "", "text": "tab\tand\u0085nel\u2028sep\u2029"}], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: tab and nel sep \n# image: 329 x 2540 px\n# x scale: 305762.5430043748 um per px, origin 266394414.025343 px\n# y scale: 18.801759614127253 nm per px, origin 2.326124045316936e-08 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: cr lf; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (angle): closed form, angle, with \"quotes\", and commas, unvalidated (reader note)\n# validation (profile): samples: scikit-image 0.26.0 (a line break), unvalidated (reader note)\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:1,tab\tand\u0085nel\u2028sep\u2029,length,24.941299298860091,\u00b5m,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s1\nmarks,marks:2,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,x1,0.1415028998461397,,tab\tand\u0085nel\u2028sep\u2029,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "line\nbreak", "object": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "width": 2848, "height": 487, "x": {"originBits": 9094988921128908188, "scaleBits": 4566955931646088189, "unit": "\u00b5m"}, "y": {"originBits": 4693405095091938307, "scaleBits": 4626974620418983342, "unit": "m"}, "notes": ["line\nbreak", "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "ctrl\u0001\u007f", "valueBits": 13899264677658896016, "unit": "1/m", "text": ""}, {"name": "line\nbreak", "valueBits": 4627422942934720745, "unit": "nm", "text": ""}], "refusal": "line\nbreak", "lineage": "s0"}, {"group": "spots", "id": "spots:1", "label": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "product": "spot", "entries": [{"name": "d", "valueBits": 4544421176114877060, "unit": "\u00c5", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "angle", "entries": [{"name": "x1", "valueBits": 4548762547616847017, "unit": "nm", "text": ""}], "refusal": "tab\tand\u0085nel\u2028sep\u2029", "lineage": "s2"}, {"group": "spots", "id": "spots:3", "label": "Row 3", "product": "spot", "entries": [{"name": "d", "valueBits": 4656924824258413962, "unit": "px", "text": ""}, {"name": "y1", "valueBits": 4591870180066957722, "unit": "\u00c5", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "x1", "valueBits": 13756186716558330874, "unit": "nm", "text": ""}, {"name": "length", "valueBits": null, "unit": "nm", "text": ""}], "refusal": null, "lineage": "s3"}, {"group": "spots", "id": "spots:4", "label": "Row 4", "product": "spot", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "profile", "entries": [{"name": "q", "valueBits": 13724446403347412190, "unit": "\u00c5", "text": ""}, {"name": "d", "valueBits": 4481655518048654467, "unit": "\u00b0", "text": "plain.dm4"}, {"name": "x1", "valueBits": 4635548367274239060, "unit": "nm", "text": ""}], "refusal": null, "lineage": "s5"}, {"group": "spots", "id": "spots:6", "label": "line\nbreak", "product": "spot", "entries": [{"name": "y1", "valueBits": 4591870180066957722, "unit": "\u00b0", "text": ""}, {"name": "length", "valueBits": 13714694092415811649, "unit": "pm", "text": "a \"quoted\" name"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "distance", "entries": [{"name": "x1", "valueBits": 4544657646880243314, "unit": "1/m", "text": ""}, {"name": "cr\r\nlf", "valueBits": 0, "unit": "\u00b5m", "text": ""}], "refusal": null, "lineage": "s7"}, {"group": "spots", "id": "spots:8", "label": "plain.dm4", "product": "spot", "entries": [], "refusal": null, "lineage": "s8"}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "profile", "entries": [{"name": "x1", "valueBits": 13755636121888493211, "unit": "m", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}, {"name": "y1", "valueBits": 9218868437227405312, "unit": "1/m", "text": ""}], "refusal": null, "lineage": "s9"}, {"group": "marks", "id": "marks:10", "label": "Row 10", "product": "profile", "entries": [{"name": "q", "valueBits": null, "unit": "m", "text": ""}, {"name": "y1", "valueBits": 4595304287322729717, "unit": "\u00c5", "text": "plain.dm4"}], "refusal": "plain.dm4", "lineage": "s10"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: line break\n# object: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# image: 2848 x 487 px\n# x scale: 0.002085792094499882 \u00b5m per px, origin 1e+300 px\n# y scale: 22.316025425277694 m per px, origin 600456.609303594 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# validation (profile): samples: scikit-image 0.26.0 (a line break)\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,ctrl\u0001\u007f,-41180.662962985341,1/m,,\"closed form, distance\",s0\nmarks,marks:0,Row 0,\"line\nbreak\",23.908786959452218,nm,,\"closed form, distance\",s0\nmarks,marks:0,Row 0,outcome,,,\"line\nbreak\",\"closed form, distance\",s0\nspots,spots:1,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,d,6.4953897911010762e-05,\u00c5,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,planted spots,\nmarks,marks:2,Row 2,x1,0.00012551059367208364,nm,,\"closed form, angle, with \"\"quotes\"\", and commas\",s2\nmarks,marks:2,Row 2,outcome,,,tab\tand\u0085nel\u2028sep\u2029,\"closed form, angle, with \"\"quotes\"\", and commas\",s2\nspots,spots:3,Row 3,d,2140.2271089262258,px,,planted spots,s3\nspots,spots:3,Row 3,y1,0.10000000000000001,\u00c5,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,planted spots,s3\nspots,spots:3,Row 3,x1,-1.1345251107469288e-05,nm,,planted spots,s3\nspots,spots:3,Row 3,length,,nm,,planted spots,s3\nmarks,marks:5,Row 5,q,-8.5787740113915406e-08,\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s5\nmarks,marks:5,Row 5,d,4.2000000000000004e-09,\u00b0,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s5\nmarks,marks:5,Row 5,x1,83.104372626069846,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s5\nspots,spots:6,\"line\nbreak\",y1,0.10000000000000001,\u00b0,,planted spots,\nspots,spots:6,\"line\nbreak\",length,-1.898156729533847e-08,pm,\"a \"\"quoted\"\" name\",planted spots,\nmarks,marks:7,Row 7,x1,6.8158674380253294e-05,1/m,,\"closed form, distance\",s7\nmarks,marks:7,Row 7,\"cr\r\nlf\",0,\u00b5m,,\"closed form, distance\",s7\nmarks,marks:9,Row 9,x1,-1.041250745559908e-05,m,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s9\nmarks,marks:9,Row 9,y1,inf,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s9\nmarks,marks:10,Row 10,q,,m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s10\nmarks,marks:10,Row 10,y1,0.17031562360975952,\u00c5,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s10\nmarks,marks:10,Row 10,outcome,,,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s10\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "", "width": 910, "height": 1419, "x": {"originBits": 13939271429612581697, "scaleBits": 4651884496712404771, "unit": "mrad"}, "y": {"originBits": 13927674916981875189, "scaleBits": 4602828426748479482, "unit": ""}, "notes": ["unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "product": "profile", "entries": [{"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": 13707402285593838754, "unit": "1/m", "text": "with,comma.dm4"}], "refusal": "a \"quoted\" name", "lineage": "s0"}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "profile", "entries": [{"name": "x1", "valueBits": 4686930667810644973, "unit": "pm", "text": ""}, {"name": "x1", "valueBits": 13937898216714893226, "unit": "1/\u00c5", "text": ""}, {"name": "d", "valueBits": 13799987676986128638, "unit": "mrad", "text": ""}, {"name": "length", "valueBits": null, "unit": "pm", "text": "line\nbreak"}, {"name": "length", "valueBits": 13706814433979599228, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "distance", "entries": [{"name": "d", "valueBits": 1, "unit": "px", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "", "product": "angle", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "distance", "entries": [{"name": "d", "valueBits": 13752438795419786546, "unit": "1/px", "text": ""}, {"name": "y1", "valueBits": 4503599627370496, "unit": "um", "text": ""}, {"name": "q", "valueBits": 4531405976752577453, "unit": "", "text": ""}], "refusal": null, "lineage": null}, {"group": "spots", "id": "spots:5", "label": "Row 5", "product": "spot", "entries": [{"name": "d", "valueBits": 13784015260297682662, "unit": "1/m", "text": ""}, {"name": "length", "valueBits": null, "unit": "1/nm", "text": ""}, {"name": "q", "valueBits": 4706777625615432035, "unit": "1/nm", "text": ""}, {"name": "x1", "valueBits": null, "unit": "1/\u00c5", "text": ""}, {"name": "x1", "valueBits": 13896895092319333450, "unit": "\u00b5m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:6", "label": "", "product": "distance", "entries": [], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "angle", "entries": [{"name": "cr\r\nlf", "valueBits": 13814709189024989846, "unit": "pm", "text": ""}, {"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": 13731727638777578127, "unit": "mrad", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4503599627370496, "unit": "m", "text": ""}, {"name": "y1", "valueBits": 4607182418800017408, "unit": "pm", "text": "line\nbreak"}], "refusal": null, "lineage": "s7"}, {"group": "marks", "id": "marks:8", "label": "Row 8", "product": "profile", "entries": [{"name": "x1", "valueBits": 4496913323142142806, "unit": "1/nm", "text": "plain.dm4"}, {"name": "d", "valueBits": 0, "unit": "", "text": "line\nbreak"}, {"name": "d", "valueBits": 13772526766370006611, "unit": "1/nm", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13706032018372591170, "unit": "", "text": ""}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 4675187467474216093, "unit": "\u00c5", "text": ""}], "refusal": "tab\tand\u0085nel\u2028sep\u2029", "lineage": null}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "distance", "entries": [{"name": "q", "valueBits": 4479262106998068594, "unit": "nm", "text": ""}, {"name": "y1", "valueBits": null, "unit": "pm", "text": ""}, {"name": "x1", "valueBits": 13766977064932706772, "unit": "1/\u00c5", "text": ""}], "refusal": null, "lineage": "s9"}, {"group": "marks", "id": "marks:10", "label": "with,comma.dm4", "product": "profile", "entries": [{"name": "d", "valueBits": 4481655518048654467, "unit": "1/m", "text": ""}, {"name": "x1", "valueBits": 4580222137614393999, "unit": "m", "text": "cr\r\nlf"}, {"name": "d", "valueBits": 13953756616497539962, "unit": "1/m", "text": ""}, {"name": "x1", "valueBits": 4591870180066957722, "unit": "px", "text": ""}, {"name": "plain.dm4", "valueBits": 4616940889931460258, "unit": "1/\u00c5", "text": "cr\r\nlf"}], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: \n# image: 910 x 1419 px\n# x scale: 986.0378774446184 mrad per px, origin -19126320.36308599 px\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance, unvalidated (reader note)\n# validation (angle): closed form, angle, with \"quotes\", and commas, unvalidated (reader note)\n# validation (profile): samples: scikit-image 0.26.0 (a line break), unvalidated (reader note)\n# validation (spot): planted spots, unvalidated (reader note)\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,-6.1643311871405604e-09,1/m,\"with,comma.dm4\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",s0\nmarks,marks:0,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,outcome,,,\"a \"\"quoted\"\" name\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",s0\nmarks,marks:1,Row 1,x1,223827.51842668597,pm,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,Row 1,x1,-15393959.838802177,1/\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,Row 1,d,-0.0094750914584804634,mrad,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,Row 1,length,,pm,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,Row 1,length,-5.6780717287836231e-09,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:2,Row 2,d,4.9406564584124654e-324,px,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:4,Row 4,d,-6.3127101313017489e-06,1/px,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:4,Row 4,y1,2.2250738585072014e-308,um,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:4,Row 4,q,8.9588154827244924e-06,,,\"closed form, distance, unvalidated (reader note)\",\nspots,spots:5,Row 5,d,-0.0008135853288093436,1/m,,\"planted spots, unvalidated (reader note)\",\nspots,spots:5,Row 5,length,,1/nm,,\"planted spots, unvalidated (reader note)\",\nspots,spots:5,Row 5,q,4674880.4306930033,1/nm,,\"planted spots, unvalidated (reader note)\",\nspots,spots:5,Row 5,x1,,1/\u00c5,,\"planted spots, unvalidated (reader note)\",\nspots,spots:5,Row 5,x1,-28353.830234568835,\u00b5m,,\"planted spots, unvalidated (reader note)\",\nmarks,marks:7,Row 7,\"cr\r\nlf\",-0.092602751953345525,pm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s7\nmarks,marks:7,Row 7,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,-2.5177919638165456e-07,mrad,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s7\nmarks,marks:7,Row 7,tab\tand\u0085nel\u2028sep\u2029,2.2250738585072014e-308,m,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s7\nmarks,marks:7,Row 7,y1,1,pm,\"line\nbreak\",\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s7\nmarks,marks:8,Row 8,x1,4.5160717344485185e-08,1/nm,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:8,Row 8,d,0,,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:8,Row 8,d,-0.0001361407053280134,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:8,Row 8,tab\tand\u0085nel\u2028sep\u2029,-5.0308727077076487e-09,,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:8,Row 8,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,36049.851703950415,\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:8,Row 8,outcome,,,tab\tand\u0085nel\u2028sep\u2029,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:9,Row 9,q,2.9727535397735533e-09,nm,,\"closed form, distance, unvalidated (reader note)\",s9\nmarks,marks:9,Row 9,y1,,pm,,\"closed form, distance, unvalidated (reader note)\",s9\nmarks,marks:9,Row 9,x1,-5.7464092863463275e-05,1/\u00c5,,\"closed form, distance, unvalidated (reader note)\",s9\nmarks,marks:10,\"with,comma.dm4\",d,4.2000000000000004e-09,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:10,\"with,comma.dm4\",x1,0.015837734616726492,m,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:10,\"with,comma.dm4\",d,-182049588.29623014,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:10,\"with,comma.dm4\",x1,0.10000000000000001,px,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:10,\"with,comma.dm4\",plain.dm4,4.6672634682142036,1/\u00c5,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "plain.dm4", "width": 2799, "height": 1249, "x": null, "y": {"originBits": 13878327386041867107, "scaleBits": 4569159823982421619, "unit": "\u00b5m"}, "notes": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "q", "valueBits": 4698258651021440620, "unit": "px", "text": ""}, {"name": "y1", "valueBits": 4552837924389239702, "unit": "nm", "text": ""}, {"name": "d", "valueBits": 13906730063199098112, "unit": "1/\u00c5", "text": ""}], "refusal": "cr\r\nlf", "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "distance", "entries": [{"name": "ctrl\u0001\u007f", "valueBits": 13923237704797373710, "unit": "mrad", "text": ""}, {"name": "length", "valueBits": 4495730509863128555, "unit": "", "text": ""}, {"name": "q", "valueBits": 4653547639462653641, "unit": "m", "text": ""}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 13762340425605183628, "unit": "1/px", "text": "with,comma.dm4"}, {"name": "q", "valueBits": 4715802419409686539, "unit": "m", "text": "cr\r\nlf"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "angle", "entries": [], "refusal": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "lineage": "s2"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: plain.dm4\n# image: 2799 x 1249 px\n# x scale: none\n# y scale: 0.0030415780380906253 \u00b5m per px, origin -1646.3067688026574 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,q,1282393.769683267,px,,\"closed form, distance\",\nmarks,marks:0,Row 0,y1,0.00023597390243021145,nm,,\"closed form, distance\",\nmarks,marks:0,Row 0,d,-125460.98345406726,1/\u00c5,,\"closed form, distance\",\nmarks,marks:0,Row 0,outcome,,,\"cr\r\nlf\",\"closed form, distance\",\nmarks,marks:1,Row 1,ctrl\u0001\u007f,-1656556.5537989768,mrad,,\"closed form, distance\",\nmarks,marks:1,Row 1,length,3.7333515643118278e-08,,,\"closed form, distance\",\nmarks,marks:1,Row 1,q,1326.2306348000877,m,,\"closed form, distance\",\nmarks,marks:1,Row 1,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,-2.8281290394443134e-05,1/px,\"with,comma.dm4\",\"closed form, distance\",\nmarks,marks:1,Row 1,q,18765066.490127604,m,\"cr\r\nlf\",\"closed form, distance\",\nmarks,marks:2,Row 2,outcome,,,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas\",s2\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "a \"quoted\" name", "width": 4321, "height": 4044, "x": null, "y": {"originBits": 13827916316030007121, "scaleBits": 4472687804347289890, "unit": "m"}, "notes": []}, "rows": [{"group": "spots", "id": "spots:0", "label": "plain.dm4", "product": "spot", "entries": [{"name": "length", "valueBits": 13713048628770387100, "unit": "\u00c5", "text": "tab\tand\u0085nel\u2028sep\u2029"}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 13872739135681905619, "unit": "\u00b0", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13767518513773221047, "unit": "1/m", "text": "with,comma.dm4"}], "refusal": "plain.dm4", "lineage": "s0"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: a \"quoted\" name\n# image: 4321 x 4044 px\n# x scale: none\n# y scale: 1.0581654210572247e-09 m per px, origin -0.7071076646386506 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: none\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:0,plain.dm4,length,-1.421917299228103e-08,\u00c5,tab\tand\u0085nel\u2028sep\u2029,planted spots,s0\nspots,spots:0,plain.dm4,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,-699.84287258062466,\u00b0,,planted spots,s0\nspots,spots:0,plain.dm4,tab\tand\u0085nel\u2028sep\u2029,-6.1231029591618229e-05,1/m,\"with,comma.dm4\",planted spots,s0\nspots,spots:0,plain.dm4,outcome,,,plain.dm4,planted spots,s0\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "tab\tand\u0085nel\u2028sep\u2029", "object": "line\nbreak", "width": 4022, "height": 4288, "x": {"originBits": 4622387742981077499, "scaleBits": 4665786069382933428, "unit": "mrad"}, "y": {"originBits": 4471667097093851367, "scaleBits": 4585660602377988037, "unit": "m"}, "notes": ["plain.dm4", "a \"quoted\" name", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "angle", "entries": [{"name": "ctrl\u0001\u007f", "valueBits": 4712514385883057960, "unit": "1/nm", "text": ""}, {"name": "with,comma.dm4", "valueBits": 4532063228917357415, "unit": "nm", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}, {"name": "y1", "valueBits": 4706781487404986202, "unit": "1/\u00c5", "text": ""}, {"name": "y1", "valueBits": 4637962547667661208, "unit": "\u00b0", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "profile", "entries": [{"name": "length", "valueBits": 13868492340321869005, "unit": "", "text": ""}, {"name": "x1", "valueBits": null, "unit": "\u00b0", "text": ""}], "refusal": "line\nbreak", "lineage": null}, {"group": "marks", "id": "marks:2", "label": "tab\tand\u0085nel\u2028sep\u2029", "product": "angle", "entries": [{"name": "d", "valueBits": null, "unit": "px", "text": ""}, {"name": "length", "valueBits": null, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s2"}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "angle", "entries": [{"name": "length", "valueBits": 4477328231536385628, "unit": "px", "text": ""}, {"name": "x1", "valueBits": 13815109636984193599, "unit": "1/nm", "text": ""}, {"name": "d", "valueBits": 4578816606122446751, "unit": "pm", "text": ""}, {"name": "y1", "valueBits": 4670528935035588089, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s3"}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "angle", "entries": [{"name": "q", "valueBits": 4577783349497978547, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "profile", "entries": [{"name": "q", "valueBits": 9094988921128908188, "unit": "1/px", "text": "a \"quoted\" name"}, {"name": "q", "valueBits": 13943581525254951929, "unit": "px", "text": ""}, {"name": "length", "valueBits": 18442240474082181120, "unit": "um", "text": "with,comma.dm4"}, {"name": "length", "valueBits": null, "unit": "px", "text": ""}], "refusal": "", "lineage": null}, {"group": "marks", "id": "marks:6", "label": "tab\tand\u0085nel\u2028sep\u2029", "product": "profile", "entries": [], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "angle", "entries": [{"name": "q", "valueBits": 4503599627370496, "unit": "1/m", "text": ""}, {"name": "length", "valueBits": null, "unit": "1/px", "text": ""}, {"name": "length", "valueBits": 4503599627370496, "unit": "\u00b0", "text": ""}], "refusal": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "lineage": null}, {"group": "spots", "id": "spots:8", "label": "a \"quoted\" name", "product": "spot", "entries": [{"name": "length", "valueBits": 13860466753531480608, "unit": "\u00b5m", "text": ""}, {"name": "length", "valueBits": 4498817307550165169, "unit": "1/m", "text": ""}], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: tab and nel sep \n# object: line break\n# image: 4022 x 4288 px\n# x scale: 8295.419419428195 mrad per px, origin 11.010081604324105 px\n# y scale: 0.03816239922816992 m per px, origin 8.892053414442771e-10 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: plain.dm4; a \"quoted\" name; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (angle): closed form, angle, with \"quotes\", and commas, unvalidated (reader note)\n# validation (profile): samples: scikit-image 0.26.0 (a line break), unvalidated (reader note)\n# validation (spot): planted spots, unvalidated (reader note)\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,ctrl\u0001\u007f,11646701.546180323,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:0,Row 0,\"with,comma.dm4\",1.0072243959170173e-05,nm,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:0,Row 0,y1,4678477.0024832133,1/\u00c5,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:0,Row 0,y1,117.41193945328121,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:1,Row 1,length,-364.5190688236151,,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,Row 1,x1,,\u00b0,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,Row 1,outcome,,,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:2,tab\tand\u0085nel\u2028sep\u2029,d,,px,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s2\nmarks,marks:2,tab\tand\u0085nel\u2028sep\u2029,length,,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s2\nmarks,marks:3,Row 3,length,2.1729213952754607e-09,px,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s3\nmarks,marks:3,Row 3,x1,-0.098160083759247549,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s3\nmarks,marks:3,Row 3,d,0.013293158833057648,pm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s3\nmarks,marks:3,Row 3,y1,17461.283568097253,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s3\nmarks,marks:4,Row 4,q,0.011500744309884103,mrad,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:5,Row 5,q,1.0000000000000001e+300,1/px,\"a \"\"quoted\"\" name\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:5,Row 5,q,-36810923.690101571,px,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:5,Row 5,length,-inf,um,\"with,comma.dm4\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:5,Row 5,length,,px,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:5,Row 5,outcome,,,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:7,Row 7,q,2.2250738585072014e-308,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:7,Row 7,length,,1/px,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:7,Row 7,length,2.2250738585072014e-308,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:7,Row 7,outcome,,,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nspots,spots:8,\"a \"\"quoted\"\" name\",length,-105.07931932344991,\u00b5m,,\"planted spots, unvalidated (reader note)\",\nspots,spots:8,\"a \"\"quoted\"\" name\",length,5.7760229255840001e-08,1/m,,\"planted spots, unvalidated (reader note)\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "a \"quoted\" name", "object": "with,comma.dm4", "width": 1937, "height": 3332, "x": {"originBits": 4599301119452119040, "scaleBits": 4708482899504606632, "unit": "pm"}, "y": {"originBits": 13820873553073559553, "scaleBits": 13734379852007545584, "unit": "1/m"}, "notes": ["line\nbreak", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "spots", "id": "spots:0", "label": "a \"quoted\" name", "product": "spot", "entries": [{"name": "d", "valueBits": 13750840328995598716, "unit": "\u00c5", "text": ""}, {"name": "d", "valueBits": 13777033932816668022, "unit": "pm", "text": ""}, {"name": "d", "valueBits": 4671815843786748063, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 4701993795547575684, "unit": "\u00b0", "text": ""}], "refusal": null, "lineage": "s0"}, {"group": "marks", "id": "marks:1", "label": "with,comma.dm4", "product": "distance", "entries": [{"name": "q", "valueBits": 4607182418800017408, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 4492893784155978568, "unit": "px", "text": ""}, {"name": "d", "valueBits": 9094988921128908188, "unit": "pm", "text": ""}], "refusal": null, "lineage": "s1"}, {"group": "marks", "id": "marks:2", "label": "cr\r\nlf", "product": "profile", "entries": [], "refusal": null, "lineage": "s2"}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "angle", "entries": [{"name": "q", "valueBits": 13877243066636823743, "unit": "nm", "text": ""}, {"name": "x1", "valueBits": 9221120237041090560, "unit": "um", "text": ""}, {"name": "d", "valueBits": 4664715983565399051, "unit": "m", "text": ""}, {"name": "length", "valueBits": 13710551404614712704, "unit": "m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "profile", "entries": [{"name": "length", "valueBits": null, "unit": "m", "text": "tab\tand\u0085nel\u2028sep\u2029"}, {"name": "length", "valueBits": 13878147258217294727, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "profile", "entries": [{"name": "q", "valueBits": 13881814520230399776, "unit": "1/nm", "text": ""}], "refusal": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "lineage": null}, {"group": "spots", "id": "spots:6", "label": "Row 6", "product": "spot", "entries": [{"name": "y1", "valueBits": 13885304839262439097, "unit": "\u00c5", "text": "tab\tand\u0085nel\u2028sep\u2029"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:7", "label": "plain.dm4", "product": "profile", "entries": [], "refusal": null, "lineage": "s7"}, {"group": "spots", "id": "spots:8", "label": "Row 8", "product": "spot", "entries": [{"name": "length", "valueBits": 13741269126295199618, "unit": "\u00b0", "text": ""}, {"name": "d", "valueBits": 4562413828067657735, "unit": "\u00b0", "text": ""}, {"name": "y1", "valueBits": null, "unit": "1/px", "text": ""}], "refusal": null, "lineage": "s8"}, {"group": "spots", "id": "spots:9", "label": "line\nbreak", "product": "spot", "entries": [{"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13712758342483462014, "unit": "1/nm", "text": ""}, {"name": "length", "valueBits": 4590870268292438764, "unit": "1/\u00c5", "text": ""}, {"name": "d", "valueBits": null, "unit": "\u00c5", "text": ""}, {"name": "", "valueBits": 18442240474082181120, "unit": "1/nm", "text": ""}, {"name": "a \"quoted\" name", "valueBits": 4464202966429764446, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s9"}, {"group": "marks", "id": "marks:10", "label": "Row 10", "product": "distance", "entries": [{"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13804372741335276636, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 13847048932401686532, "unit": "1/m", "text": "tab\tand\u0085nel\u2028sep\u2029"}], "refusal": "line\nbreak", "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: a \"quoted\" name\n# object: with,comma.dm4\n# image: 1937 x 3332 px\n# x scale: 6263040.499583639 pm per px, origin 0.3125 px\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# validation (profile): samples: scikit-image 0.26.0 (a line break)\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:0,\"a \"\"quoted\"\" name\",d,-4.9587564049348886e-06,\u00c5,,planted spots,s0\nspots,spots:0,\"a \"\"quoted\"\" name\",d,-0.00027247476831723046,pm,,planted spots,s0\nspots,spots:0,\"a \"\"quoted\"\" name\",d,22143.030331478101,\u00c5,,planted spots,s0\nspots,spots:0,\"a \"\"quoted\"\" name\",x1,2206947.7476870436,\u00b0,,planted spots,s0\nmarks,marks:1,\"with,comma.dm4\",q,1,\u00c5,,\"closed form, distance\",s1\nmarks,marks:1,\"with,comma.dm4\",x1,2.4181980983065808e-08,px,,\"closed form, distance\",s1\nmarks,marks:1,\"with,comma.dm4\",d,1.0000000000000001e+300,pm,,\"closed form, distance\",s1\nmarks,marks:3,Row 3,q,-1399.7610803235291,nm,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:3,Row 3,x1,nan,um,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:3,Row 3,d,7270.4723282242294,m,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:3,Row 3,length,-1.0087862178735102e-08,m,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:4,Row 4,length,,m,tab\tand\u0085nel\u2028sep\u2029,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:4,Row 4,length,-1605.3504432800416,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:5,Row 5,q,-2830.3785720261658,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:5,Row 5,outcome,,,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nspots,spots:6,Row 6,y1,-4739.1838111893094,\u00c5,tab\tand\u0085nel\u2028sep\u2029,planted spots,\nspots,spots:8,Row 8,length,-1.1202567260243806e-06,\u00b0,,planted spots,s8\nspots,spots:8,Row 8,d,0.0010345468337722445,\u00b0,,planted spots,s8\nspots,spots:8,Row 8,y1,,1/px,,planted spots,s8\nspots,spots:9,\"line\nbreak\",tab\tand\u0085nel\u2028sep\u2029,-1.3738934615012157e-08,1/nm,,planted spots,s9\nspots,spots:9,\"line\nbreak\",length,0.086123436566690692,1/\u00c5,,planted spots,s9\nspots,spots:9,\"line\nbreak\",d,,\u00c5,,planted spots,s9\nspots,spots:9,\"line\nbreak\",,-inf,1/nm,,planted spots,s9\nspots,spots:9,\"line\nbreak\",\"a \"\"quoted\"\" name\",2.9154680344505464e-10,1/nm,,planted spots,s9\nmarks,marks:10,Row 10,tab\tand\u0085nel\u2028sep\u2029,-0.018538931057232907,\u00c5,,\"closed form, distance\",\nmarks,marks:10,Row 10,x1,-13.300076581672336,1/m,tab\tand\u0085nel\u2028sep\u2029,\"closed form, distance\",\nmarks,marks:10,Row 10,outcome,,,\"line\nbreak\",\"closed form, distance\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "plain.dm4", "object": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "width": 3175, "height": 1507, "x": {"originBits": 4564072149230898742, "scaleBits": 18442240474082181120, "unit": "1/px"}, "y": {"originBits": 4517534489384998224, "scaleBits": 4534330381925285134, "unit": "\u00b0"}, "notes": ["ctrl\u0001\u007f"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "a \"quoted\" name", "product": "profile", "entries": [{"name": "d", "valueBits": 13788960302083299679, "unit": "pm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "x1", "valueBits": null, "unit": "nm", "text": ""}, {"name": "y1", "valueBits": 13868280523672788959, "unit": "", "text": ""}], "refusal": "cr\r\nlf", "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "profile", "entries": [{"name": "x1", "valueBits": 13835101845110007055, "unit": "mrad", "text": "ctrl\u0001\u007f"}, {"name": "y1", "valueBits": 4520981519797565687, "unit": "nm", "text": ""}, {"name": "d", "valueBits": 13958001656394434442, "unit": "m", "text": ""}, {"name": "x1", "valueBits": 4628804002521660242, "unit": "\u00b0", "text": ""}, {"name": "with,comma.dm4", "valueBits": 4720375607279395191, "unit": "pm", "text": ""}], "refusal": null, "lineage": "s1"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: plain.dm4\n# object: \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# image: 3175 x 1507 px\n# x scale: none\n# y scale: 1.3912950547533109e-05 \u00b0 per px, origin 1.043473177618954e-06 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: ctrl \n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (profile): samples: scikit-image 0.26.0 (a line break)\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,\"a \"\"quoted\"\" name\",d,-0.0017228931670182008,pm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",x1,,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",y1,-352.47868631826526,,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",outcome,,,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:1,Row 1,x1,-2.0194465900464205,mrad,ctrl\u0001\u007f,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s1\nmarks,marks:1,Row 1,y1,1.7734102600270102e-06,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s1\nmarks,marks:1,Row 1,d,-348687815.7042166,m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s1\nmarks,marks:1,Row 1,x1,28.815296245210739,\u00b0,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s1\nmarks,marks:1,Row 1,\"with,comma.dm4\",38048605.788393907,pm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s1\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "with,comma.dm4", "object": "", "width": 2204, "height": 3216, "x": null, "y": null, "notes": []}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "", "valueBits": 9218868437227405312, "unit": "\u00c5", "text": "plain.dm4"}, {"name": "d", "valueBits": 4519750708393315343, "unit": "um", "text": "plain.dm4"}, {"name": "x1", "valueBits": 9094988921128908188, "unit": "m", "text": ""}, {"name": "d", "valueBits": null, "unit": "1/nm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "d", "valueBits": 4624647330814193712, "unit": "m", "text": ""}], "refusal": "line\nbreak", "lineage": null}, {"group": "spots", "id": "spots:1", "label": "", "product": "spot", "entries": [{"name": "x1", "valueBits": 4472025763905106995, "unit": "\u00b5m", "text": ""}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 13885181326027375618, "unit": "\u00c5", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "ctrl\u0001\u007f", "product": "profile", "entries": [{"name": "with,comma.dm4", "valueBits": 4655389807796348227, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": 13746740667196769651, "unit": "1/\u00c5", "text": ""}, {"name": "d", "valueBits": 4503599627370496, "unit": "px", "text": ""}, {"name": "y1", "valueBits": 13858482950755477474, "unit": "\u00b0", "text": "cr\r\nlf"}], "refusal": "", "lineage": "s2"}, {"group": "marks", "id": "marks:3", "label": "a \"quoted\" name", "product": "profile", "entries": [{"name": "y1", "valueBits": 13702613689369222191, "unit": "\u00b5m", "text": ""}, {"name": "y1", "valueBits": 4644416338303402541, "unit": "1/nm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "length", "valueBits": null, "unit": "\u00b5m", "text": ""}, {"name": "d", "valueBits": 13888089197808298654, "unit": "1/nm", "text": ""}, {"name": "y1", "valueBits": null, "unit": "nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "angle", "entries": [{"name": "length", "valueBits": 4689161414649891002, "unit": "", "text": "line\nbreak"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4567463708465204087, "unit": "1/px", "text": ""}, {"name": "x1", "valueBits": 4505477255873279829, "unit": "m", "text": ""}], "refusal": "a \"quoted\" name", "lineage": "s4"}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "distance", "entries": [{"name": "q", "valueBits": null, "unit": "pm", "text": ""}], "refusal": null, "lineage": "s5"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: with,comma.dm4\n# object: \n# image: 2204 x 3216 px\n# x scale: none\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: none\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# validation (profile): samples: scikit-image 0.26.0 (a line break)\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,,inf,\u00c5,plain.dm4,\"closed form, distance\",\nmarks,marks:0,Row 0,d,1.5127758072129169e-06,um,plain.dm4,\"closed form, distance\",\nmarks,marks:0,Row 0,x1,1.0000000000000001e+300,m,,\"closed form, distance\",\nmarks,marks:0,Row 0,d,,1/nm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, distance\",\nmarks,marks:0,Row 0,d,15.023915905905682,m,,\"closed form, distance\",\nmarks,marks:0,Row 0,outcome,,,\"line\nbreak\",\"closed form, distance\",\nspots,spots:1,,x1,9.2629062052388604e-10,\u00b5m,,planted spots,\nspots,spots:1,,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,-4626.849178300241,\u00c5,,planted spots,\nmarks,marks:2,ctrl\u0001\u007f,\"with,comma.dm4\",1745.0912196173601,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,q,-2.6504525271759196e-06,1/\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,d,2.2250738585072014e-308,px,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,y1,-76.887786290054947,\u00b0,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,outcome,,,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:3,\"a \"\"quoted\"\" name\",y1,-2.9642937636275151e-09,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",y1,324.50328216052986,1/nm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",length,,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",d,-7271.5431564847513,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",y1,,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:4,Row 4,length,315357.59245599399,,\"line\nbreak\",\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:4,Row 4,tab\tand\u0085nel\u2028sep\u2029,0.0023060051866691761,1/px,,\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:4,Row 4,x1,1.6890970219333331e-07,m,,\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:4,Row 4,outcome,,,\"a \"\"quoted\"\" name\",\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:5,Row 5,q,,pm,,\"closed form, distance\",s5\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "a \"quoted\" name", "object": "cr\r\nlf", "width": 3633, "height": 492, "x": {"originBits": 1, "scaleBits": 4565391011431829520, "unit": ""}, "y": {"originBits": 18442240474082181120, "scaleBits": 4494912805295691196, "unit": "mrad"}, "notes": ["line\nbreak", "a \"quoted\" name", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "plain.dm4", "valueBits": 4599676419421066581, "unit": "1/px", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}], "refusal": null, "lineage": "s0"}, {"group": "marks", "id": "marks:1", "label": "cr\r\nlf", "product": "profile", "entries": [{"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 4600440827185714087, "unit": "", "text": ""}, {"name": "y1", "valueBits": 4599676419421066581, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 13922752582581519016, "unit": "1/nm", "text": ""}, {"name": "x1", "valueBits": 4542376496944881337, "unit": "nm", "text": ""}], "refusal": "line\nbreak", "lineage": null}, {"group": "marks", "id": "marks:2", "label": "plain.dm4", "product": "angle", "entries": [{"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4716100326944077707, "unit": "1/m", "text": ""}, {"name": "plain.dm4", "valueBits": 4602956645919518238, "unit": "\u00b5m", "text": "with,comma.dm4"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13894098520672327435, "unit": "1/m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "distance", "entries": [], "refusal": null, "lineage": null}, {"group": "spots", "id": "spots:4", "label": "Row 4", "product": "spot", "entries": [{"name": "d", "valueBits": 4599301119452119040, "unit": "1/\u00c5", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13920274554551134522, "unit": "mrad", "text": "plain.dm4"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "cr\r\nlf", "product": "angle", "entries": [{"name": "x1", "valueBits": 13854653094341320253, "unit": "px", "text": ""}, {"name": "q", "valueBits": 13845406178800793815, "unit": "pm", "text": ""}], "refusal": "line\nbreak", "lineage": "s5"}, {"group": "spots", "id": "spots:6", "label": "Row 6", "product": "spot", "entries": [{"name": "d", "valueBits": 13922338291686794802, "unit": "px", "text": "cr\r\nlf"}], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "", "product": "angle", "entries": [{"name": "length", "valueBits": 4607182418800017408, "unit": "\u00b0", "text": "a \"quoted\" name"}], "refusal": null, "lineage": "s7"}, {"group": "marks", "id": "marks:8", "label": "Row 8", "product": "distance", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "distance", "entries": [{"name": "x1", "valueBits": 4481169670300308210, "unit": "1/nm", "text": ""}, {"name": "y1", "valueBits": 13833255714213234846, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": 4588268010473567497, "unit": "\u00b5m", "text": ""}], "refusal": "ctrl\u0001\u007f", "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: a \"quoted\" name\n# object: cr lf\n# image: 3633 x 492 px\n# x scale: none\n# y scale: 3.192240072327633e-08 mrad per px, origin -inf px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; a \"quoted\" name; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance, unvalidated (reader note)\n# validation (angle): closed form, angle, with \"quotes\", and commas, unvalidated (reader note)\n# validation (profile): samples: scikit-image 0.26.0 (a line break), unvalidated (reader note)\n# validation (spot): planted spots, unvalidated (reader note)\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,plain.dm4,0.33333333333333331,1/px,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, distance, unvalidated (reader note)\",s0\nmarks,marks:1,\"cr\r\nlf\",\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,0.37576648835902876,,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,\"cr\r\nlf\",y1,0.33333333333333331,\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,\"cr\r\nlf\",x1,-1543605.2360307369,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,\"cr\r\nlf\",x1,4.913924209209775e-05,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:1,\"cr\r\nlf\",outcome,,,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak), unvalidated (reader note)\",\nmarks,marks:2,plain.dm4,tab\tand\u0085nel\u2028sep\u2029,19874858.537833732,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:2,plain.dm4,plain.dm4,0.53084496512332513,\u00b5m,\"with,comma.dm4\",\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nmarks,marks:2,plain.dm4,tab\tand\u0085nel\u2028sep\u2029,-18179.961850247386,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",\nspots,spots:4,Row 4,d,0.3125,1/\u00c5,,\"planted spots, unvalidated (reader note)\",\nspots,spots:4,Row 4,tab\tand\u0085nel\u2028sep\u2029,-1007610.1873619922,mrad,plain.dm4,\"planted spots, unvalidated (reader note)\",\nmarks,marks:5,\"cr\r\nlf\",x1,-43.231126604191083,px,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s5\nmarks,marks:5,\"cr\r\nlf\",q,-10.381959987277169,pm,,\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s5\nmarks,marks:5,\"cr\r\nlf\",outcome,,,\"line\nbreak\",\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s5\nspots,spots:6,Row 6,d,-1447145.6203521607,px,\"cr\r\nlf\",\"planted spots, unvalidated (reader note)\",s6\nmarks,marks:7,,length,1,\u00b0,\"a \"\"quoted\"\" name\",\"closed form, angle, with \"\"quotes\"\", and commas, unvalidated (reader note)\",s7\nmarks,marks:9,Row 9,x1,3.7981161619154343e-09,1/nm,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:9,Row 9,y1,-1.5997998894095313,\u00b5m,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:9,Row 9,q,0.056254927367584591,\u00b5m,,\"closed form, distance, unvalidated (reader note)\",\nmarks,marks:9,Row 9,outcome,,,ctrl\u0001\u007f,\"closed form, distance, unvalidated (reader note)\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "line\nbreak", "width": 4186, "height": 226, "x": {"originBits": 13800402163161698558, "scaleBits": 13891842672194665007, "unit": "mrad"}, "y": null, "notes": ["line\nbreak", "with,comma.dm4"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "plain.dm4", "product": "angle", "entries": [{"name": "length", "valueBits": 4515818319382903633, "unit": "1/m", "text": ""}, {"name": "y1", "valueBits": 4509932439664621551, "unit": "", "text": ""}, {"name": "y1", "valueBits": null, "unit": "m", "text": ""}, {"name": "q", "valueBits": 4607182418800017408, "unit": "\u00b0", "text": ""}, {"name": "plain.dm4", "valueBits": 4481444424763163179, "unit": "nm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "angle", "entries": [{"name": "x1", "valueBits": 13917796670170040488, "unit": "\u00b0", "text": ""}, {"name": "cr\r\nlf", "valueBits": 13871023655354027383, "unit": "", "text": ""}], "refusal": "a \"quoted\" name", "lineage": null}, {"group": "spots", "id": "spots:2", "label": "Row 2", "product": "spot", "entries": [{"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": 9218868437227405312, "unit": "\u00c5", "text": "with,comma.dm4"}, {"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": null, "unit": "1/\u00c5", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13907323769373138249, "unit": "\u00b0", "text": ""}, {"name": "q", "valueBits": 13946825794198143337, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "cr\r\nlf", "product": "distance", "entries": [{"name": "q", "valueBits": null, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": null, "unit": "", "text": ""}, {"name": "y1", "valueBits": 4513953284673711124, "unit": "1/m", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4678729314985035566, "unit": "", "text": ""}, {"name": "q", "valueBits": 9223372036854775808, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "profile", "entries": [], "refusal": null, "lineage": "s4"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: line break\n# image: 4186 x 226 px\n# x scale: none\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; with,comma.dm4\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# validation (profile): samples: scikit-image 0.26.0 (a line break)\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,plain.dm4,length,8.1686718015465193e-07,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:0,plain.dm4,y1,3.3525629136883954e-07,,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:0,plain.dm4,y1,,m,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:0,plain.dm4,q,1,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:0,plain.dm4,plain.dm4,4.0253877268014856e-09,nm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:1,Row 1,x1,-719146.47968699504,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:1,Row 1,\"cr\r\nlf\",-508.40766946525349,,,\"closed form, angle, with \"\"quotes\"\", and commas\",\nmarks,marks:1,Row 1,outcome,,,\"a \"\"quoted\"\" name\",\"closed form, angle, with \"\"quotes\"\", and commas\",\nspots,spots:2,Row 2,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,inf,\u00c5,\"with,comma.dm4\",planted spots,\nspots,spots:2,Row 2,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,,1/\u00c5,,planted spots,\nspots,spots:2,Row 2,tab\tand\u0085nel\u2028sep\u2029,-137129.0907385147,\u00b0,,planted spots,\nspots,spots:2,Row 2,q,-60982610.929446049,mrad,,planted spots,\nmarks,marks:3,\"cr\r\nlf\",q,,\u00b5m,,\"closed form, distance\",\nmarks,marks:3,\"cr\r\nlf\",q,,,,\"closed form, distance\",\nmarks,marks:3,\"cr\r\nlf\",y1,6.193989493472897e-07,1/m,,\"closed form, distance\",\nmarks,marks:3,\"cr\r\nlf\",tab\tand\u0085nel\u2028sep\u2029,61820.184068573973,,,\"closed form, distance\",\nmarks,marks:3,\"cr\r\nlf\",q,-0,mrad,,\"closed form, distance\",\n"}]} \ No newline at end of file +{"title": "macTEM results", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]], "descriptionLines": ["# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels", "# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels"], "lineageLine": "# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)", "cases": [{"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "with,comma.dm4", "object": "plain.dm4", "width": 3292, "height": 3397, "x": {"originBits": 1, "scaleBits": 13870170782931264748, "unit": "px"}, "y": {"originBits": 13858705342554176504, "scaleBits": 4477516673583951164, "unit": ""}, "notes": []}, "rows": [], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": null}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "", "object": "", "width": 1475, "height": 3863, "x": {"originBits": 13913614912728981959, "scaleBits": 4607182418800017408, "unit": "m"}, "y": {"originBits": 4473366651089836748, "scaleBits": 4503009890106136400, "unit": "mrad"}, "notes": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "spots", "id": "spots:0", "label": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "product": "spot", "entries": [{"name": "q", "valueBits": 4599301119452119040, "unit": "nm", "text": ""}, {"name": "d", "valueBits": 13824397457163940752, "unit": "\u00c5", "text": ""}, {"name": "length", "valueBits": 9223372036854775808, "unit": "px", "text": ""}, {"name": "length", "valueBits": 4483328836346772969, "unit": "um", "text": ""}, {"name": "x1", "valueBits": 4591870180066957722, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s0"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: \n# object: \n# image: 1475 x 3863 px\n# x scale: 1.0 m per px, origin -378306.9206919935 px\n# y scale: 1.1140418184552812e-07 mrad per px, origin 1.198547637139609e-09 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (spot): planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,q,0.3125,nm,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,d,-0.40821792564366266,\u00c5,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,length,-0,px,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,length,5.5841364548338526e-09,um,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,x1,0.10000000000000001,1/nm,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "ctrl\u0001\u007f", "object": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "width": 3967, "height": 3913, "x": null, "y": {"originBits": 13897713229135952275, "scaleBits": 13729421787296120747, "unit": "1/m"}, "notes": ["line\nbreak"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "angle", "entries": [{"name": "d", "valueBits": 1, "unit": "", "text": ""}, {"name": "length", "valueBits": 13905323795505704733, "unit": "\u00b0", "text": ""}, {"name": "length", "valueBits": null, "unit": "um", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "distance", "entries": [{"name": "x1", "valueBits": 1, "unit": "1/m", "text": "cr\r\nlf"}, {"name": "q", "valueBits": 13829043358039307241, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": null, "unit": "nm", "text": ""}], "refusal": null, "lineage": "s1"}, {"group": "spots", "id": "spots:2", "label": "Row 2", "product": "spot", "entries": [], "refusal": null, "lineage": null}, {"group": "spots", "id": "spots:3", "label": "Row 3", "product": "spot", "entries": [{"name": "with,comma.dm4", "valueBits": 4648204705981854400, "unit": "um", "text": ""}], "refusal": "cr\r\nlf", "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "angle", "entries": [], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: ctrl \n# object: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# image: 3967 x 3913 px\n# x scale: none\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: line break\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: line break\n# validation (spot): planted spots; reader note: line break\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,d,4.9406564584124654e-324,,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break\",\nmarks,marks:0,Row 0,length,-104997.09519141582,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break\",\nmarks,marks:0,Row 0,length,,um,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break\",\nmarks,marks:1,Row 1,x1,4.9406564584124654e-324,1/m,\"cr\r\nlf\",\"closed form, distance; reader note: line break\",s1\nmarks,marks:1,Row 1,q,-0.8322344634831299,\u00b5m,,\"closed form, distance; reader note: line break\",s1\nmarks,marks:1,Row 1,q,,nm,,\"closed form, distance; reader note: line break\",s1\nspots,spots:3,Row 3,\"with,comma.dm4\",567.69410581103148,um,,planted spots; reader note: line break,\nspots,spots:3,Row 3,outcome,,,\"cr\r\nlf\",planted spots; reader note: line break,\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "cr\r\nlf", "object": "", "width": 3257, "height": 3496, "x": {"originBits": 13780468080851010131, "scaleBits": 4706805043041404373, "unit": "pm"}, "y": {"originBits": 13919869217332155888, "scaleBits": 4489806213533731600, "unit": "um"}, "notes": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [], "refusal": null, "lineage": "s0"}, {"group": "spots", "id": "spots:1", "label": "Row 1", "product": "spot", "entries": [{"name": "d", "valueBits": 4548605656248489097, "unit": "1/px", "text": ""}, {"name": "y1", "valueBits": null, "unit": "mrad", "text": ""}, {"name": "ctrl\u0001\u007f", "valueBits": null, "unit": "pm", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": null, "unit": "1/\u00c5", "text": ""}], "refusal": null, "lineage": "s1"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: cr lf\n# object: \n# image: 3257 x 3496 px\n# x scale: 4700414.89843889 pm per px, origin -0.0004586403062907574 px\n# y scale: 1.4433613971234772e-08 um per px, origin -960422.7245661598 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# validation (spot): planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:1,Row 1,d,0.00012166417855581832,1/px,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s1\nspots,spots:1,Row 1,y1,,mrad,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s1\nspots,spots:1,Row 1,ctrl\u0001\u007f,,pm,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s1\nspots,spots:1,Row 1,tab\tand\u0085nel\u2028sep\u2029,,1/\u00c5,,planted spots; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s1\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "line\nbreak", "object": "line\nbreak", "width": 2638, "height": 2737, "x": {"originBits": 13887529869885230160, "scaleBits": 4623193449843880065, "unit": "\u00c5"}, "y": {"originBits": 9223372036854775808, "scaleBits": 4489794098957596209, "unit": "1/px"}, "notes": ["a \"quoted\" name", "plain.dm4", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "a \"quoted\" name", "product": "distance", "entries": [{"name": "plain.dm4", "valueBits": 13774550170479932637, "unit": "\u00b5m", "text": ""}, {"name": "length", "valueBits": 13860226465206106641, "unit": "\u00b0", "text": ""}], "refusal": "plain.dm4", "lineage": null}, {"group": "marks", "id": "marks:1", "label": "plain.dm4", "product": "angle", "entries": [{"name": "x1", "valueBits": 13795013905347428094, "unit": "1/nm", "text": ""}, {"name": "y1", "valueBits": 13916111843208673688, "unit": "1/\u00c5", "text": ""}, {"name": "length", "valueBits": 13944780179619938193, "unit": "px", "text": ""}, {"name": "y1", "valueBits": null, "unit": "", "text": "cr\r\nlf"}, {"name": "q", "valueBits": 13713189743075904339, "unit": "m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "distance", "entries": [{"name": "y1", "valueBits": 4689223108506201912, "unit": "um", "text": ""}, {"name": "length", "valueBits": 4599676419421066581, "unit": "1/nm", "text": ""}, {"name": "length", "valueBits": 4531709457107920541, "unit": "1/nm", "text": ""}, {"name": "d", "valueBits": null, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "distance", "entries": [{"name": "length", "valueBits": 13953064669076816644, "unit": "px", "text": ""}, {"name": "length", "valueBits": 13826891945726597913, "unit": "px", "text": ""}, {"name": "d", "valueBits": 13857999919115077096, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "profile", "entries": [{"name": "q", "valueBits": 9223372036854775808, "unit": "\u00b5m", "text": ""}, {"name": "y1", "valueBits": 13930396955387614310, "unit": "1/m", "text": ""}], "refusal": null, "lineage": "s4"}, {"group": "spots", "id": "spots:5", "label": "Row 5", "product": "spot", "entries": [{"name": "q", "valueBits": 4475985662216163534, "unit": "", "text": ""}, {"name": "x1", "valueBits": 4694075660488176028, "unit": "", "text": "line\nbreak"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4607182418800017408, "unit": "1/\u00c5", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:6", "label": "Row 6", "product": "distance", "entries": [{"name": "q", "valueBits": 4599676419421066581, "unit": "\u00b5m", "text": ""}, {"name": "y1", "valueBits": 4564205877686929647, "unit": "um", "text": ""}], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "distance", "entries": [{"name": "x1", "valueBits": 13731123496161135390, "unit": "\u00c5", "text": "line\nbreak"}, {"name": "d", "valueBits": 4535827082660111261, "unit": "\u00b0", "text": ""}, {"name": "d", "valueBits": 9221120237041090560, "unit": "1/m", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "x1", "valueBits": 4627674475121943007, "unit": "mrad", "text": ""}, {"name": "y1", "valueBits": null, "unit": "um", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:8", "label": "Row 8", "product": "distance", "entries": [{"name": "q", "valueBits": 9218868437227405312, "unit": "\u00b0", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4618981628002793772, "unit": "1/m", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "profile", "entries": [{"name": "y1", "valueBits": 4654998134299041448, "unit": "1/\u00c5", "text": ""}, {"name": "length", "valueBits": null, "unit": "\u00b0", "text": ""}, {"name": "y1", "valueBits": 13955696789406597625, "unit": "um", "text": ""}], "refusal": "plain.dm4", "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: line break\n# object: line break\n# image: 2638 x 2737 px\n# x scale: 12.441304500615162 \u00c5 per px, origin -6762.8373739003 px\n# y scale: 1.4413572086217786e-08 1/px per px, origin -0.0 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: a \"quoted\" name; plain.dm4; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: a \"quoted\" name; plain.dm4; unvalidated\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: a \"quoted\" name; plain.dm4; unvalidated\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: a \"quoted\" name; plain.dm4; unvalidated\n# validation (spot): planted spots; reader note: a \"quoted\" name; plain.dm4; unvalidated\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,\"a \"\"quoted\"\" name\",plain.dm4,-0.00019098518362296079,\u00b5m,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",length,-101.66461684180128,\u00b0,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:0,\"a \"\"quoted\"\" name\",outcome,,,plain.dm4,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:1,plain.dm4,x1,-0.0043297365163394979,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:1,plain.dm4,y1,-523647.40337839117,1/\u00c5,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:1,plain.dm4,length,-45741594.644286282,px,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:1,plain.dm4,y1,,,\"cr\r\nlf\",\"closed form, angle, with \"\"quotes\"\", and commas; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:1,plain.dm4,q,-1.445262702763652e-08,m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:2,Row 2,y1,318948.64752458362,um,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:2,Row 2,length,0.33333333333333331,1/nm,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:2,Row 2,length,9.4729312023645688e-06,1/nm,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:2,Row 2,d,,mrad,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:3,Row 3,length,-161427948.18849957,px,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:3,Row 3,length,-0.59337971497993458,px,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:3,Row 3,d,-70.023493825479477,1/nm,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:4,Row 4,q,-0,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",s4\nmarks,marks:4,Row 4,y1,-4905189.9072161671,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",s4\nspots,spots:5,Row 5,q,1.7401464440791555e-09,,,\"planted spots; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nspots,spots:5,Row 5,x1,678520.69571261434,,\"line\nbreak\",\"planted spots; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nspots,spots:5,Row 5,tab\tand\u0085nel\u2028sep\u2029,1,1/\u00c5,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"planted spots; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:6,Row 6,q,0.33333333333333331,\u00b5m,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",s6\nmarks,marks:6,Row 6,y1,0.0014231356518555301,um,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",s6\nmarks,marks:7,Row 7,x1,-2.2910736583637679e-07,\u00c5,\"line\nbreak\",\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:7,Row 7,d,1.7638131370876023e-05,\u00b0,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:7,Row 7,d,nan,1/m,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:7,Row 7,x1,24.802408801655357,mrad,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:7,Row 7,y1,,um,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:8,Row 8,q,inf,\u00b0,,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:8,Row 8,tab\tand\u0085nel\u2028sep\u2029,6.4798029834330855,1/m,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, distance; reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:9,Row 9,y1,1656.0349769610129,1/\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:9,Row 9,length,,\u00b0,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:9,Row 9,y1,-239871246.81983927,um,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\nmarks,marks:9,Row 9,outcome,,,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: a \"\"quoted\"\" name; plain.dm4; unvalidated\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "tab\tand\u0085nel\u2028sep\u2029", "width": 329, "height": 2540, "x": {"originBits": 4733214722362243522, "scaleBits": 4688996572955498173, "unit": "um"}, "y": {"originBits": 4492615507406039200, "scaleBits": 4625985442531634717, "unit": "nm"}, "notes": ["cr\r\nlf", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "profile", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "tab\tand\u0085nel\u2028sep\u2029", "product": "angle", "entries": [{"name": "length", "valueBits": 4627713569321409041, "unit": "\u00b5m", "text": ""}], "refusal": null, "lineage": "s1"}, {"group": "marks", "id": "marks:2", "label": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "product": "angle", "entries": [{"name": "x1", "valueBits": 4594266199546686779, "unit": "", "text": "tab\tand\u0085nel\u2028sep\u2029"}], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: tab and nel sep \n# image: 329 x 2540 px\n# x scale: 305762.5430043748 um per px, origin 266394414.025343 px\n# y scale: 18.801759614127253 nm per px, origin 2.326124045316936e-08 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: cr lf; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: cr lf; unvalidated\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: cr lf; unvalidated\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:1,tab\tand\u0085nel\u2028sep\u2029,length,24.941299298860091,\u00b5m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: cr lf; unvalidated\",s1\nmarks,marks:2,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,x1,0.1415028998461397,,tab\tand\u0085nel\u2028sep\u2029,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: cr lf; unvalidated\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "line\nbreak", "object": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "width": 2848, "height": 487, "x": {"originBits": 9094988921128908188, "scaleBits": 4566955931646088189, "unit": "\u00b5m"}, "y": {"originBits": 4693405095091938307, "scaleBits": 4626974620418983342, "unit": "m"}, "notes": ["line\nbreak", "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "ctrl\u0001\u007f", "valueBits": 13899264677658896016, "unit": "1/m", "text": ""}, {"name": "line\nbreak", "valueBits": 4627422942934720745, "unit": "nm", "text": ""}], "refusal": "line\nbreak", "lineage": "s0"}, {"group": "spots", "id": "spots:1", "label": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "product": "spot", "entries": [{"name": "d", "valueBits": 4544421176114877060, "unit": "\u00c5", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "angle", "entries": [{"name": "x1", "valueBits": 4548762547616847017, "unit": "nm", "text": ""}], "refusal": "tab\tand\u0085nel\u2028sep\u2029", "lineage": "s2"}, {"group": "spots", "id": "spots:3", "label": "Row 3", "product": "spot", "entries": [{"name": "d", "valueBits": 4656924824258413962, "unit": "px", "text": ""}, {"name": "y1", "valueBits": 4591870180066957722, "unit": "\u00c5", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "x1", "valueBits": 13756186716558330874, "unit": "nm", "text": ""}, {"name": "length", "valueBits": null, "unit": "nm", "text": ""}], "refusal": null, "lineage": "s3"}, {"group": "spots", "id": "spots:4", "label": "Row 4", "product": "spot", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "profile", "entries": [{"name": "q", "valueBits": 13724446403347412190, "unit": "\u00c5", "text": ""}, {"name": "d", "valueBits": 4481655518048654467, "unit": "\u00b0", "text": "plain.dm4"}, {"name": "x1", "valueBits": 4635548367274239060, "unit": "nm", "text": ""}], "refusal": null, "lineage": "s5"}, {"group": "spots", "id": "spots:6", "label": "line\nbreak", "product": "spot", "entries": [{"name": "y1", "valueBits": 4591870180066957722, "unit": "\u00b0", "text": ""}, {"name": "length", "valueBits": 13714694092415811649, "unit": "pm", "text": "a \"quoted\" name"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "distance", "entries": [{"name": "x1", "valueBits": 4544657646880243314, "unit": "1/m", "text": ""}, {"name": "cr\r\nlf", "valueBits": 0, "unit": "\u00b5m", "text": ""}], "refusal": null, "lineage": "s7"}, {"group": "spots", "id": "spots:8", "label": "plain.dm4", "product": "spot", "entries": [], "refusal": null, "lineage": "s8"}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "profile", "entries": [{"name": "x1", "valueBits": 13755636121888493211, "unit": "m", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}, {"name": "y1", "valueBits": 9218868437227405312, "unit": "1/m", "text": ""}], "refusal": null, "lineage": "s9"}, {"group": "marks", "id": "marks:10", "label": "Row 10", "product": "profile", "entries": [{"name": "q", "valueBits": null, "unit": "m", "text": ""}, {"name": "y1", "valueBits": 4595304287322729717, "unit": "\u00c5", "text": "plain.dm4"}], "refusal": "plain.dm4", "lineage": "s10"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: line break\n# object: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# image: 2848 x 487 px\n# x scale: 0.002085792094499882 \u00b5m per px, origin 1e+300 px\n# y scale: 22.316025425277694 m per px, origin 600456.609303594 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# validation (spot): planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,ctrl\u0001\u007f,-41180.662962985341,1/m,,\"closed form, distance; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s0\nmarks,marks:0,Row 0,\"line\nbreak\",23.908786959452218,nm,,\"closed form, distance; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s0\nmarks,marks:0,Row 0,outcome,,,\"line\nbreak\",\"closed form, distance; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s0\nspots,spots:1,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,d,6.4953897911010762e-05,\u00c5,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\nmarks,marks:2,Row 2,x1,0.00012551059367208364,nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s2\nmarks,marks:2,Row 2,outcome,,,tab\tand\u0085nel\u2028sep\u2029,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s2\nspots,spots:3,Row 3,d,2140.2271089262258,px,,planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,s3\nspots,spots:3,Row 3,y1,0.10000000000000001,\u00c5,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,s3\nspots,spots:3,Row 3,x1,-1.1345251107469288e-05,nm,,planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,s3\nspots,spots:3,Row 3,length,,nm,,planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,s3\nmarks,marks:5,Row 5,q,-8.5787740113915406e-08,\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s5\nmarks,marks:5,Row 5,d,4.2000000000000004e-09,\u00b0,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s5\nmarks,marks:5,Row 5,x1,83.104372626069846,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s5\nspots,spots:6,\"line\nbreak\",y1,0.10000000000000001,\u00b0,,planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\nspots,spots:6,\"line\nbreak\",length,-1.898156729533847e-08,pm,\"a \"\"quoted\"\" name\",planted spots; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\nmarks,marks:7,Row 7,x1,6.8158674380253294e-05,1/m,,\"closed form, distance; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s7\nmarks,marks:7,Row 7,\"cr\r\nlf\",0,\u00b5m,,\"closed form, distance; reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s7\nmarks,marks:9,Row 9,x1,-1.041250745559908e-05,m,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s9\nmarks,marks:9,Row 9,y1,inf,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s9\nmarks,marks:10,Row 10,q,,m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s10\nmarks,marks:10,Row 10,y1,0.17031562360975952,\u00c5,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s10\nmarks,marks:10,Row 10,outcome,,,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\",s10\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "", "width": 910, "height": 1419, "x": {"originBits": 13939271429612581697, "scaleBits": 4651884496712404771, "unit": "mrad"}, "y": {"originBits": 13927674916981875189, "scaleBits": 4602828426748479482, "unit": ""}, "notes": ["unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "product": "profile", "entries": [{"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": 13707402285593838754, "unit": "1/m", "text": "with,comma.dm4"}], "refusal": "a \"quoted\" name", "lineage": "s0"}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "profile", "entries": [{"name": "x1", "valueBits": 4686930667810644973, "unit": "pm", "text": ""}, {"name": "x1", "valueBits": 13937898216714893226, "unit": "1/\u00c5", "text": ""}, {"name": "d", "valueBits": 13799987676986128638, "unit": "mrad", "text": ""}, {"name": "length", "valueBits": null, "unit": "pm", "text": "line\nbreak"}, {"name": "length", "valueBits": 13706814433979599228, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "distance", "entries": [{"name": "d", "valueBits": 1, "unit": "px", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "", "product": "angle", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "distance", "entries": [{"name": "d", "valueBits": 13752438795419786546, "unit": "1/px", "text": ""}, {"name": "y1", "valueBits": 4503599627370496, "unit": "um", "text": ""}, {"name": "q", "valueBits": 4531405976752577453, "unit": "", "text": ""}], "refusal": null, "lineage": null}, {"group": "spots", "id": "spots:5", "label": "Row 5", "product": "spot", "entries": [{"name": "d", "valueBits": 13784015260297682662, "unit": "1/m", "text": ""}, {"name": "length", "valueBits": null, "unit": "1/nm", "text": ""}, {"name": "q", "valueBits": 4706777625615432035, "unit": "1/nm", "text": ""}, {"name": "x1", "valueBits": null, "unit": "1/\u00c5", "text": ""}, {"name": "x1", "valueBits": 13896895092319333450, "unit": "\u00b5m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:6", "label": "", "product": "distance", "entries": [], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "angle", "entries": [{"name": "cr\r\nlf", "valueBits": 13814709189024989846, "unit": "pm", "text": ""}, {"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": 13731727638777578127, "unit": "mrad", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4503599627370496, "unit": "m", "text": ""}, {"name": "y1", "valueBits": 4607182418800017408, "unit": "pm", "text": "line\nbreak"}], "refusal": null, "lineage": "s7"}, {"group": "marks", "id": "marks:8", "label": "Row 8", "product": "profile", "entries": [{"name": "x1", "valueBits": 4496913323142142806, "unit": "1/nm", "text": "plain.dm4"}, {"name": "d", "valueBits": 0, "unit": "", "text": "line\nbreak"}, {"name": "d", "valueBits": 13772526766370006611, "unit": "1/nm", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13706032018372591170, "unit": "", "text": ""}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 4675187467474216093, "unit": "\u00c5", "text": ""}], "refusal": "tab\tand\u0085nel\u2028sep\u2029", "lineage": null}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "distance", "entries": [{"name": "q", "valueBits": 4479262106998068594, "unit": "nm", "text": ""}, {"name": "y1", "valueBits": null, "unit": "pm", "text": ""}, {"name": "x1", "valueBits": 13766977064932706772, "unit": "1/\u00c5", "text": ""}], "refusal": null, "lineage": "s9"}, {"group": "marks", "id": "marks:10", "label": "with,comma.dm4", "product": "profile", "entries": [{"name": "d", "valueBits": 4481655518048654467, "unit": "1/m", "text": ""}, {"name": "x1", "valueBits": 4580222137614393999, "unit": "m", "text": "cr\r\nlf"}, {"name": "d", "valueBits": 13953756616497539962, "unit": "1/m", "text": ""}, {"name": "x1", "valueBits": 4591870180066957722, "unit": "px", "text": ""}, {"name": "plain.dm4", "valueBits": 4616940889931460258, "unit": "1/\u00c5", "text": "cr\r\nlf"}], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: \n# image: 910 x 1419 px\n# x scale: 986.0378774446184 mrad per px, origin -19126320.36308599 px\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: unvalidated\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: unvalidated\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: unvalidated\n# validation (spot): planted spots; reader note: unvalidated\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,-6.1643311871405604e-09,1/m,\"with,comma.dm4\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",s0\nmarks,marks:0,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,outcome,,,\"a \"\"quoted\"\" name\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",s0\nmarks,marks:1,Row 1,x1,223827.51842668597,pm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:1,Row 1,x1,-15393959.838802177,1/\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:1,Row 1,d,-0.0094750914584804634,mrad,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:1,Row 1,length,,pm,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:1,Row 1,length,-5.6780717287836231e-09,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:2,Row 2,d,4.9406564584124654e-324,px,,\"closed form, distance; reader note: unvalidated\",\nmarks,marks:4,Row 4,d,-6.3127101313017489e-06,1/px,,\"closed form, distance; reader note: unvalidated\",\nmarks,marks:4,Row 4,y1,2.2250738585072014e-308,um,,\"closed form, distance; reader note: unvalidated\",\nmarks,marks:4,Row 4,q,8.9588154827244924e-06,,,\"closed form, distance; reader note: unvalidated\",\nspots,spots:5,Row 5,d,-0.0008135853288093436,1/m,,planted spots; reader note: unvalidated,\nspots,spots:5,Row 5,length,,1/nm,,planted spots; reader note: unvalidated,\nspots,spots:5,Row 5,q,4674880.4306930033,1/nm,,planted spots; reader note: unvalidated,\nspots,spots:5,Row 5,x1,,1/\u00c5,,planted spots; reader note: unvalidated,\nspots,spots:5,Row 5,x1,-28353.830234568835,\u00b5m,,planted spots; reader note: unvalidated,\nmarks,marks:7,Row 7,\"cr\r\nlf\",-0.092602751953345525,pm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: unvalidated\",s7\nmarks,marks:7,Row 7,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,-2.5177919638165456e-07,mrad,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: unvalidated\",s7\nmarks,marks:7,Row 7,tab\tand\u0085nel\u2028sep\u2029,2.2250738585072014e-308,m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: unvalidated\",s7\nmarks,marks:7,Row 7,y1,1,pm,\"line\nbreak\",\"closed form, angle, with \"\"quotes\"\", and commas; reader note: unvalidated\",s7\nmarks,marks:8,Row 8,x1,4.5160717344485185e-08,1/nm,plain.dm4,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:8,Row 8,d,0,,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:8,Row 8,d,-0.0001361407053280134,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:8,Row 8,tab\tand\u0085nel\u2028sep\u2029,-5.0308727077076487e-09,,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:8,Row 8,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,36049.851703950415,\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:8,Row 8,outcome,,,tab\tand\u0085nel\u2028sep\u2029,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:9,Row 9,q,2.9727535397735533e-09,nm,,\"closed form, distance; reader note: unvalidated\",s9\nmarks,marks:9,Row 9,y1,,pm,,\"closed form, distance; reader note: unvalidated\",s9\nmarks,marks:9,Row 9,x1,-5.7464092863463275e-05,1/\u00c5,,\"closed form, distance; reader note: unvalidated\",s9\nmarks,marks:10,\"with,comma.dm4\",d,4.2000000000000004e-09,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:10,\"with,comma.dm4\",x1,0.015837734616726492,m,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:10,\"with,comma.dm4\",d,-182049588.29623014,1/m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:10,\"with,comma.dm4\",x1,0.10000000000000001,px,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\nmarks,marks:10,\"with,comma.dm4\",plain.dm4,4.6672634682142036,1/\u00c5,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: unvalidated\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "plain.dm4", "width": 2799, "height": 1249, "x": null, "y": {"originBits": 13878327386041867107, "scaleBits": 4569159823982421619, "unit": "\u00b5m"}, "notes": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "q", "valueBits": 4698258651021440620, "unit": "px", "text": ""}, {"name": "y1", "valueBits": 4552837924389239702, "unit": "nm", "text": ""}, {"name": "d", "valueBits": 13906730063199098112, "unit": "1/\u00c5", "text": ""}], "refusal": "cr\r\nlf", "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "distance", "entries": [{"name": "ctrl\u0001\u007f", "valueBits": 13923237704797373710, "unit": "mrad", "text": ""}, {"name": "length", "valueBits": 4495730509863128555, "unit": "", "text": ""}, {"name": "q", "valueBits": 4653547639462653641, "unit": "m", "text": ""}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 13762340425605183628, "unit": "1/px", "text": "with,comma.dm4"}, {"name": "q", "valueBits": 4715802419409686539, "unit": "m", "text": "cr\r\nlf"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "Row 2", "product": "angle", "entries": [], "refusal": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "lineage": "s2"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: plain.dm4\n# image: 2799 x 1249 px\n# x scale: none\n# y scale: 0.0030415780380906253 \u00b5m per px, origin -1646.3067688026574 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,q,1282393.769683267,px,,\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:0,Row 0,y1,0.00023597390243021145,nm,,\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:0,Row 0,d,-125460.98345406726,1/\u00c5,,\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:0,Row 0,outcome,,,\"cr\r\nlf\",\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:1,Row 1,ctrl\u0001\u007f,-1656556.5537989768,mrad,,\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:1,Row 1,length,3.7333515643118278e-08,,,\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:1,Row 1,q,1326.2306348000877,m,,\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:1,Row 1,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,-2.8281290394443134e-05,1/px,\"with,comma.dm4\",\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:1,Row 1,q,18765066.490127604,m,\"cr\r\nlf\",\"closed form, distance; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:2,Row 2,outcome,,,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",s2\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "a \"quoted\" name", "width": 4321, "height": 4044, "x": null, "y": {"originBits": 13827916316030007121, "scaleBits": 4472687804347289890, "unit": "m"}, "notes": []}, "rows": [{"group": "spots", "id": "spots:0", "label": "plain.dm4", "product": "spot", "entries": [{"name": "length", "valueBits": 13713048628770387100, "unit": "\u00c5", "text": "tab\tand\u0085nel\u2028sep\u2029"}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 13872739135681905619, "unit": "\u00b0", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13767518513773221047, "unit": "1/m", "text": "with,comma.dm4"}], "refusal": "plain.dm4", "lineage": "s0"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: a \"quoted\" name\n# image: 4321 x 4044 px\n# x scale: none\n# y scale: 1.0581654210572247e-09 m per px, origin -0.7071076646386506 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: none\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:0,plain.dm4,length,-1.421917299228103e-08,\u00c5,tab\tand\u0085nel\u2028sep\u2029,planted spots,s0\nspots,spots:0,plain.dm4,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,-699.84287258062466,\u00b0,,planted spots,s0\nspots,spots:0,plain.dm4,tab\tand\u0085nel\u2028sep\u2029,-6.1231029591618229e-05,1/m,\"with,comma.dm4\",planted spots,s0\nspots,spots:0,plain.dm4,outcome,,,plain.dm4,planted spots,s0\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "tab\tand\u0085nel\u2028sep\u2029", "object": "line\nbreak", "width": 4022, "height": 4288, "x": {"originBits": 4622387742981077499, "scaleBits": 4665786069382933428, "unit": "mrad"}, "y": {"originBits": 4471667097093851367, "scaleBits": 4585660602377988037, "unit": "m"}, "notes": ["plain.dm4", "a \"quoted\" name", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "angle", "entries": [{"name": "ctrl\u0001\u007f", "valueBits": 4712514385883057960, "unit": "1/nm", "text": ""}, {"name": "with,comma.dm4", "valueBits": 4532063228917357415, "unit": "nm", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}, {"name": "y1", "valueBits": 4706781487404986202, "unit": "1/\u00c5", "text": ""}, {"name": "y1", "valueBits": 4637962547667661208, "unit": "\u00b0", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "profile", "entries": [{"name": "length", "valueBits": 13868492340321869005, "unit": "", "text": ""}, {"name": "x1", "valueBits": null, "unit": "\u00b0", "text": ""}], "refusal": "line\nbreak", "lineage": null}, {"group": "marks", "id": "marks:2", "label": "tab\tand\u0085nel\u2028sep\u2029", "product": "angle", "entries": [{"name": "d", "valueBits": null, "unit": "px", "text": ""}, {"name": "length", "valueBits": null, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s2"}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "angle", "entries": [{"name": "length", "valueBits": 4477328231536385628, "unit": "px", "text": ""}, {"name": "x1", "valueBits": 13815109636984193599, "unit": "1/nm", "text": ""}, {"name": "d", "valueBits": 4578816606122446751, "unit": "pm", "text": ""}, {"name": "y1", "valueBits": 4670528935035588089, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s3"}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "angle", "entries": [{"name": "q", "valueBits": 4577783349497978547, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "profile", "entries": [{"name": "q", "valueBits": 9094988921128908188, "unit": "1/px", "text": "a \"quoted\" name"}, {"name": "q", "valueBits": 13943581525254951929, "unit": "px", "text": ""}, {"name": "length", "valueBits": 18442240474082181120, "unit": "um", "text": "with,comma.dm4"}, {"name": "length", "valueBits": null, "unit": "px", "text": ""}], "refusal": "", "lineage": null}, {"group": "marks", "id": "marks:6", "label": "tab\tand\u0085nel\u2028sep\u2029", "product": "profile", "entries": [], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "Row 7", "product": "angle", "entries": [{"name": "q", "valueBits": 4503599627370496, "unit": "1/m", "text": ""}, {"name": "length", "valueBits": null, "unit": "1/px", "text": ""}, {"name": "length", "valueBits": 4503599627370496, "unit": "\u00b0", "text": ""}], "refusal": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "lineage": null}, {"group": "spots", "id": "spots:8", "label": "a \"quoted\" name", "product": "spot", "entries": [{"name": "length", "valueBits": 13860466753531480608, "unit": "\u00b5m", "text": ""}, {"name": "length", "valueBits": 4498817307550165169, "unit": "1/m", "text": ""}], "refusal": null, "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: tab and nel sep \n# object: line break\n# image: 4022 x 4288 px\n# x scale: 8295.419419428195 mrad per px, origin 11.010081604324105 px\n# y scale: 0.03816239922816992 m per px, origin 8.892053414442771e-10 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: plain.dm4; a \"quoted\" name; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: plain.dm4; a \"quoted\" name; unvalidated\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: plain.dm4; a \"quoted\" name; unvalidated\n# validation (spot): planted spots; reader note: plain.dm4; a \"quoted\" name; unvalidated\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,ctrl\u0001\u007f,11646701.546180323,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:0,Row 0,\"with,comma.dm4\",1.0072243959170173e-05,nm,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:0,Row 0,y1,4678477.0024832133,1/\u00c5,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:0,Row 0,y1,117.41193945328121,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,Row 1,length,-364.5190688236151,,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,Row 1,x1,,\u00b0,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,Row 1,outcome,,,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:2,tab\tand\u0085nel\u2028sep\u2029,d,,px,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",s2\nmarks,marks:2,tab\tand\u0085nel\u2028sep\u2029,length,,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",s2\nmarks,marks:3,Row 3,length,2.1729213952754607e-09,px,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",s3\nmarks,marks:3,Row 3,x1,-0.098160083759247549,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",s3\nmarks,marks:3,Row 3,d,0.013293158833057648,pm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",s3\nmarks,marks:3,Row 3,y1,17461.283568097253,1/nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",s3\nmarks,marks:4,Row 4,q,0.011500744309884103,mrad,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:5,Row 5,q,1.0000000000000001e+300,1/px,\"a \"\"quoted\"\" name\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:5,Row 5,q,-36810923.690101571,px,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:5,Row 5,length,-inf,um,\"with,comma.dm4\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:5,Row 5,length,,px,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:5,Row 5,outcome,,,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:7,Row 7,q,2.2250738585072014e-308,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:7,Row 7,length,,1/px,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:7,Row 7,length,2.2250738585072014e-308,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:7,Row 7,outcome,,,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nspots,spots:8,\"a \"\"quoted\"\" name\",length,-105.07931932344991,\u00b5m,,\"planted spots; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\nspots,spots:8,\"a \"\"quoted\"\" name\",length,5.7760229255840001e-08,1/m,,\"planted spots; reader note: plain.dm4; a \"\"quoted\"\" name; unvalidated\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "a \"quoted\" name", "object": "with,comma.dm4", "width": 1937, "height": 3332, "x": {"originBits": 4599301119452119040, "scaleBits": 4708482899504606632, "unit": "pm"}, "y": {"originBits": 13820873553073559553, "scaleBits": 13734379852007545584, "unit": "1/m"}, "notes": ["line\nbreak", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]}, "rows": [{"group": "spots", "id": "spots:0", "label": "a \"quoted\" name", "product": "spot", "entries": [{"name": "d", "valueBits": 13750840328995598716, "unit": "\u00c5", "text": ""}, {"name": "d", "valueBits": 13777033932816668022, "unit": "pm", "text": ""}, {"name": "d", "valueBits": 4671815843786748063, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 4701993795547575684, "unit": "\u00b0", "text": ""}], "refusal": null, "lineage": "s0"}, {"group": "marks", "id": "marks:1", "label": "with,comma.dm4", "product": "distance", "entries": [{"name": "q", "valueBits": 4607182418800017408, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 4492893784155978568, "unit": "px", "text": ""}, {"name": "d", "valueBits": 9094988921128908188, "unit": "pm", "text": ""}], "refusal": null, "lineage": "s1"}, {"group": "marks", "id": "marks:2", "label": "cr\r\nlf", "product": "profile", "entries": [], "refusal": null, "lineage": "s2"}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "angle", "entries": [{"name": "q", "valueBits": 13877243066636823743, "unit": "nm", "text": ""}, {"name": "x1", "valueBits": 9221120237041090560, "unit": "um", "text": ""}, {"name": "d", "valueBits": 4664715983565399051, "unit": "m", "text": ""}, {"name": "length", "valueBits": 13710551404614712704, "unit": "m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "profile", "entries": [{"name": "length", "valueBits": null, "unit": "m", "text": "tab\tand\u0085nel\u2028sep\u2029"}, {"name": "length", "valueBits": 13878147258217294727, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "profile", "entries": [{"name": "q", "valueBits": 13881814520230399776, "unit": "1/nm", "text": ""}], "refusal": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "lineage": null}, {"group": "spots", "id": "spots:6", "label": "Row 6", "product": "spot", "entries": [{"name": "y1", "valueBits": 13885304839262439097, "unit": "\u00c5", "text": "tab\tand\u0085nel\u2028sep\u2029"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:7", "label": "plain.dm4", "product": "profile", "entries": [], "refusal": null, "lineage": "s7"}, {"group": "spots", "id": "spots:8", "label": "Row 8", "product": "spot", "entries": [{"name": "length", "valueBits": 13741269126295199618, "unit": "\u00b0", "text": ""}, {"name": "d", "valueBits": 4562413828067657735, "unit": "\u00b0", "text": ""}, {"name": "y1", "valueBits": null, "unit": "1/px", "text": ""}], "refusal": null, "lineage": "s8"}, {"group": "spots", "id": "spots:9", "label": "line\nbreak", "product": "spot", "entries": [{"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13712758342483462014, "unit": "1/nm", "text": ""}, {"name": "length", "valueBits": 4590870268292438764, "unit": "1/\u00c5", "text": ""}, {"name": "d", "valueBits": null, "unit": "\u00c5", "text": ""}, {"name": "", "valueBits": 18442240474082181120, "unit": "1/nm", "text": ""}, {"name": "a \"quoted\" name", "valueBits": 4464202966429764446, "unit": "1/nm", "text": ""}], "refusal": null, "lineage": "s9"}, {"group": "marks", "id": "marks:10", "label": "Row 10", "product": "distance", "entries": [{"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13804372741335276636, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 13847048932401686532, "unit": "1/m", "text": "tab\tand\u0085nel\u2028sep\u2029"}], "refusal": "line\nbreak", "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: a \"quoted\" name\n# object: with,comma.dm4\n# image: 1937 x 3332 px\n# x scale: 6263040.499583639 pm per px, origin 0.3125 px\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# validation (spot): planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nspots,spots:0,\"a \"\"quoted\"\" name\",d,-4.9587564049348886e-06,\u00c5,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\"a \"\"quoted\"\" name\",d,-0.00027247476831723046,pm,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\"a \"\"quoted\"\" name\",d,22143.030331478101,\u00c5,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nspots,spots:0,\"a \"\"quoted\"\" name\",x1,2206947.7476870436,\u00b0,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s0\nmarks,marks:1,\"with,comma.dm4\",q,1,\u00c5,,\"closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",s1\nmarks,marks:1,\"with,comma.dm4\",x1,2.4181980983065808e-08,px,,\"closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",s1\nmarks,marks:1,\"with,comma.dm4\",d,1.0000000000000001e+300,pm,,\"closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",s1\nmarks,marks:3,Row 3,q,-1399.7610803235291,nm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:3,Row 3,x1,nan,um,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:3,Row 3,d,7270.4723282242294,m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:3,Row 3,length,-1.0087862178735102e-08,m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:4,Row 4,length,,m,tab\tand\u0085nel\u2028sep\u2029,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:4,Row 4,length,-1605.3504432800416,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:5,Row 5,q,-2830.3785720261658,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:5,Row 5,outcome,,,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nspots,spots:6,Row 6,y1,-4739.1838111893094,\u00c5,tab\tand\u0085nel\u2028sep\u2029,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\nspots,spots:8,Row 8,length,-1.1202567260243806e-06,\u00b0,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s8\nspots,spots:8,Row 8,d,0.0010345468337722445,\u00b0,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s8\nspots,spots:8,Row 8,y1,,1/px,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s8\nspots,spots:9,\"line\nbreak\",tab\tand\u0085nel\u2028sep\u2029,-1.3738934615012157e-08,1/nm,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s9\nspots,spots:9,\"line\nbreak\",length,0.086123436566690692,1/\u00c5,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s9\nspots,spots:9,\"line\nbreak\",d,,\u00c5,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s9\nspots,spots:9,\"line\nbreak\",,-inf,1/nm,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s9\nspots,spots:9,\"line\nbreak\",\"a \"\"quoted\"\" name\",2.9154680344505464e-10,1/nm,,planted spots; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,s9\nmarks,marks:10,Row 10,tab\tand\u0085nel\u2028sep\u2029,-0.018538931057232907,\u00c5,,\"closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:10,Row 10,x1,-13.300076581672336,1/m,tab\tand\u0085nel\u2028sep\u2029,\"closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\nmarks,marks:10,Row 10,outcome,,,\"line\nbreak\",\"closed form, distance; reader note: line break; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "plain.dm4", "object": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "width": 3175, "height": 1507, "x": {"originBits": 4564072149230898742, "scaleBits": 18442240474082181120, "unit": "1/px"}, "y": {"originBits": 4517534489384998224, "scaleBits": 4534330381925285134, "unit": "\u00b0"}, "notes": ["ctrl\u0001\u007f"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "a \"quoted\" name", "product": "profile", "entries": [{"name": "d", "valueBits": 13788960302083299679, "unit": "pm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "x1", "valueBits": null, "unit": "nm", "text": ""}, {"name": "y1", "valueBits": 13868280523672788959, "unit": "", "text": ""}], "refusal": "cr\r\nlf", "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "profile", "entries": [{"name": "x1", "valueBits": 13835101845110007055, "unit": "mrad", "text": "ctrl\u0001\u007f"}, {"name": "y1", "valueBits": 4520981519797565687, "unit": "nm", "text": ""}, {"name": "d", "valueBits": 13958001656394434442, "unit": "m", "text": ""}, {"name": "x1", "valueBits": 4628804002521660242, "unit": "\u00b0", "text": ""}, {"name": "with,comma.dm4", "valueBits": 4720375607279395191, "unit": "pm", "text": ""}], "refusal": null, "lineage": "s1"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: plain.dm4\n# object: \u00c5ngstr\u00f6m \u00b5m \u00e9\u0301\n# image: 3175 x 1507 px\n# x scale: none\n# y scale: 1.3912950547533109e-05 \u00b0 per px, origin 1.043473177618954e-06 px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: ctrl \n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: ctrl \n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,\"a \"\"quoted\"\" name\",d,-0.0017228931670182008,pm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",\nmarks,marks:0,\"a \"\"quoted\"\" name\",x1,,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",\nmarks,marks:0,\"a \"\"quoted\"\" name\",y1,-352.47868631826526,,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",\nmarks,marks:0,\"a \"\"quoted\"\" name\",outcome,,,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",\nmarks,marks:1,Row 1,x1,-2.0194465900464205,mrad,ctrl\u0001\u007f,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",s1\nmarks,marks:1,Row 1,y1,1.7734102600270102e-06,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",s1\nmarks,marks:1,Row 1,d,-348687815.7042166,m,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",s1\nmarks,marks:1,Row 1,x1,28.815296245210739,\u00b0,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",s1\nmarks,marks:1,Row 1,\"with,comma.dm4\",38048605.788393907,pm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: ctrl \",s1\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "with,comma.dm4", "object": "", "width": 2204, "height": 3216, "x": null, "y": null, "notes": []}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "", "valueBits": 9218868437227405312, "unit": "\u00c5", "text": "plain.dm4"}, {"name": "d", "valueBits": 4519750708393315343, "unit": "um", "text": "plain.dm4"}, {"name": "x1", "valueBits": 9094988921128908188, "unit": "m", "text": ""}, {"name": "d", "valueBits": null, "unit": "1/nm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "d", "valueBits": 4624647330814193712, "unit": "m", "text": ""}], "refusal": "line\nbreak", "lineage": null}, {"group": "spots", "id": "spots:1", "label": "", "product": "spot", "entries": [{"name": "x1", "valueBits": 4472025763905106995, "unit": "\u00b5m", "text": ""}, {"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 13885181326027375618, "unit": "\u00c5", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:2", "label": "ctrl\u0001\u007f", "product": "profile", "entries": [{"name": "with,comma.dm4", "valueBits": 4655389807796348227, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": 13746740667196769651, "unit": "1/\u00c5", "text": ""}, {"name": "d", "valueBits": 4503599627370496, "unit": "px", "text": ""}, {"name": "y1", "valueBits": 13858482950755477474, "unit": "\u00b0", "text": "cr\r\nlf"}], "refusal": "", "lineage": "s2"}, {"group": "marks", "id": "marks:3", "label": "a \"quoted\" name", "product": "profile", "entries": [{"name": "y1", "valueBits": 13702613689369222191, "unit": "\u00b5m", "text": ""}, {"name": "y1", "valueBits": 4644416338303402541, "unit": "1/nm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, {"name": "length", "valueBits": null, "unit": "\u00b5m", "text": ""}, {"name": "d", "valueBits": 13888089197808298654, "unit": "1/nm", "text": ""}, {"name": "y1", "valueBits": null, "unit": "nm", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "angle", "entries": [{"name": "length", "valueBits": 4689161414649891002, "unit": "", "text": "line\nbreak"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4567463708465204087, "unit": "1/px", "text": ""}, {"name": "x1", "valueBits": 4505477255873279829, "unit": "m", "text": ""}], "refusal": "a \"quoted\" name", "lineage": "s4"}, {"group": "marks", "id": "marks:5", "label": "Row 5", "product": "distance", "entries": [{"name": "q", "valueBits": null, "unit": "pm", "text": ""}], "refusal": null, "lineage": "s5"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: with,comma.dm4\n# object: \n# image: 2204 x 3216 px\n# x scale: none\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: none\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance\n# validation (angle): closed form, angle, with \"quotes\", and commas\n# validation (profile): samples: scikit-image 0.26.0 (a line break)\n# validation (spot): planted spots\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,,inf,\u00c5,plain.dm4,\"closed form, distance\",\nmarks,marks:0,Row 0,d,1.5127758072129169e-06,um,plain.dm4,\"closed form, distance\",\nmarks,marks:0,Row 0,x1,1.0000000000000001e+300,m,,\"closed form, distance\",\nmarks,marks:0,Row 0,d,,1/nm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, distance\",\nmarks,marks:0,Row 0,d,15.023915905905682,m,,\"closed form, distance\",\nmarks,marks:0,Row 0,outcome,,,\"line\nbreak\",\"closed form, distance\",\nspots,spots:1,,x1,9.2629062052388604e-10,\u00b5m,,planted spots,\nspots,spots:1,,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,-4626.849178300241,\u00c5,,planted spots,\nmarks,marks:2,ctrl\u0001\u007f,\"with,comma.dm4\",1745.0912196173601,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,q,-2.6504525271759196e-06,1/\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,d,2.2250738585072014e-308,px,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,y1,-76.887786290054947,\u00b0,\"cr\r\nlf\",\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:2,ctrl\u0001\u007f,outcome,,,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",s2\nmarks,marks:3,\"a \"\"quoted\"\" name\",y1,-2.9642937636275151e-09,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",y1,324.50328216052986,1/nm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",length,,\u00b5m,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",d,-7271.5431564847513,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:3,\"a \"\"quoted\"\" name\",y1,,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak)\",\nmarks,marks:4,Row 4,length,315357.59245599399,,\"line\nbreak\",\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:4,Row 4,tab\tand\u0085nel\u2028sep\u2029,0.0023060051866691761,1/px,,\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:4,Row 4,x1,1.6890970219333331e-07,m,,\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:4,Row 4,outcome,,,\"a \"\"quoted\"\" name\",\"closed form, angle, with \"\"quotes\"\", and commas\",s4\nmarks,marks:5,Row 5,q,,pm,,\"closed form, distance\",s5\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "a \"quoted\" name", "object": "cr\r\nlf", "width": 3633, "height": 492, "x": {"originBits": 1, "scaleBits": 4565391011431829520, "unit": ""}, "y": {"originBits": 18442240474082181120, "scaleBits": 4494912805295691196, "unit": "mrad"}, "notes": ["line\nbreak", "a \"quoted\" name", "unvalidated"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "Row 0", "product": "distance", "entries": [{"name": "plain.dm4", "valueBits": 4599676419421066581, "unit": "1/px", "text": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301"}], "refusal": null, "lineage": "s0"}, {"group": "marks", "id": "marks:1", "label": "cr\r\nlf", "product": "profile", "entries": [{"name": "\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301", "valueBits": 4600440827185714087, "unit": "", "text": ""}, {"name": "y1", "valueBits": 4599676419421066581, "unit": "\u00c5", "text": ""}, {"name": "x1", "valueBits": 13922752582581519016, "unit": "1/nm", "text": ""}, {"name": "x1", "valueBits": 4542376496944881337, "unit": "nm", "text": ""}], "refusal": "line\nbreak", "lineage": null}, {"group": "marks", "id": "marks:2", "label": "plain.dm4", "product": "angle", "entries": [{"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4716100326944077707, "unit": "1/m", "text": ""}, {"name": "plain.dm4", "valueBits": 4602956645919518238, "unit": "\u00b5m", "text": "with,comma.dm4"}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13894098520672327435, "unit": "1/m", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "Row 3", "product": "distance", "entries": [], "refusal": null, "lineage": null}, {"group": "spots", "id": "spots:4", "label": "Row 4", "product": "spot", "entries": [{"name": "d", "valueBits": 4599301119452119040, "unit": "1/\u00c5", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13920274554551134522, "unit": "mrad", "text": "plain.dm4"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:5", "label": "cr\r\nlf", "product": "angle", "entries": [{"name": "x1", "valueBits": 13854653094341320253, "unit": "px", "text": ""}, {"name": "q", "valueBits": 13845406178800793815, "unit": "pm", "text": ""}], "refusal": "line\nbreak", "lineage": "s5"}, {"group": "spots", "id": "spots:6", "label": "Row 6", "product": "spot", "entries": [{"name": "d", "valueBits": 13922338291686794802, "unit": "px", "text": "cr\r\nlf"}], "refusal": null, "lineage": "s6"}, {"group": "marks", "id": "marks:7", "label": "", "product": "angle", "entries": [{"name": "length", "valueBits": 4607182418800017408, "unit": "\u00b0", "text": "a \"quoted\" name"}], "refusal": null, "lineage": "s7"}, {"group": "marks", "id": "marks:8", "label": "Row 8", "product": "distance", "entries": [], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:9", "label": "Row 9", "product": "distance", "entries": [{"name": "x1", "valueBits": 4481169670300308210, "unit": "1/nm", "text": ""}, {"name": "y1", "valueBits": 13833255714213234846, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": 4588268010473567497, "unit": "\u00b5m", "text": ""}], "refusal": "ctrl\u0001\u007f", "lineage": null}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: a \"quoted\" name\n# object: cr lf\n# image: 3633 x 492 px\n# x scale: none\n# y scale: 3.192240072327633e-08 mrad per px, origin -inf px\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; a \"quoted\" name; unvalidated\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: line break; a \"quoted\" name; unvalidated\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: line break; a \"quoted\" name; unvalidated\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: line break; a \"quoted\" name; unvalidated\n# validation (spot): planted spots; reader note: line break; a \"quoted\" name; unvalidated\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,Row 0,plain.dm4,0.33333333333333331,1/px,\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,\"closed form, distance; reader note: line break; a \"\"quoted\"\" name; unvalidated\",s0\nmarks,marks:1,\"cr\r\nlf\",\u00c5ngstr\u00f6m \u00b5m \u00e9\u0301,0.37576648835902876,,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,\"cr\r\nlf\",y1,0.33333333333333331,\u00c5,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,\"cr\r\nlf\",x1,-1543605.2360307369,1/nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,\"cr\r\nlf\",x1,4.913924209209775e-05,nm,,\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:1,\"cr\r\nlf\",outcome,,,\"line\nbreak\",\"samples: scikit-image 0.26.0 (a line\nbreak); reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:2,plain.dm4,tab\tand\u0085nel\u2028sep\u2029,19874858.537833732,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:2,plain.dm4,plain.dm4,0.53084496512332513,\u00b5m,\"with,comma.dm4\",\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:2,plain.dm4,tab\tand\u0085nel\u2028sep\u2029,-18179.961850247386,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nspots,spots:4,Row 4,d,0.3125,1/\u00c5,,\"planted spots; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nspots,spots:4,Row 4,tab\tand\u0085nel\u2028sep\u2029,-1007610.1873619922,mrad,plain.dm4,\"planted spots; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:5,\"cr\r\nlf\",x1,-43.231126604191083,px,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",s5\nmarks,marks:5,\"cr\r\nlf\",q,-10.381959987277169,pm,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",s5\nmarks,marks:5,\"cr\r\nlf\",outcome,,,\"line\nbreak\",\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",s5\nspots,spots:6,Row 6,d,-1447145.6203521607,px,\"cr\r\nlf\",\"planted spots; reader note: line break; a \"\"quoted\"\" name; unvalidated\",s6\nmarks,marks:7,,length,1,\u00b0,\"a \"\"quoted\"\" name\",\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; a \"\"quoted\"\" name; unvalidated\",s7\nmarks,marks:9,Row 9,x1,3.7981161619154343e-09,1/nm,,\"closed form, distance; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:9,Row 9,y1,-1.5997998894095313,\u00b5m,,\"closed form, distance; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:9,Row 9,q,0.056254927367584591,\u00b5m,,\"closed form, distance; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\nmarks,marks:9,Row 9,outcome,,,ctrl\u0001\u007f,\"closed form, distance; reader note: line break; a \"\"quoted\"\" name; unvalidated\",\n"}, {"input": {"source": {"software": "Tool 0.1.0 (1)", "fileName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "object": "line\nbreak", "width": 4186, "height": 226, "x": {"originBits": 13800402163161698558, "scaleBits": 13891842672194665007, "unit": "mrad"}, "y": null, "notes": ["line\nbreak", "with,comma.dm4"]}, "rows": [{"group": "marks", "id": "marks:0", "label": "plain.dm4", "product": "angle", "entries": [{"name": "length", "valueBits": 4515818319382903633, "unit": "1/m", "text": ""}, {"name": "y1", "valueBits": 4509932439664621551, "unit": "", "text": ""}, {"name": "y1", "valueBits": null, "unit": "m", "text": ""}, {"name": "q", "valueBits": 4607182418800017408, "unit": "\u00b0", "text": ""}, {"name": "plain.dm4", "valueBits": 4481444424763163179, "unit": "nm", "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:1", "label": "Row 1", "product": "angle", "entries": [{"name": "x1", "valueBits": 13917796670170040488, "unit": "\u00b0", "text": ""}, {"name": "cr\r\nlf", "valueBits": 13871023655354027383, "unit": "", "text": ""}], "refusal": "a \"quoted\" name", "lineage": null}, {"group": "spots", "id": "spots:2", "label": "Row 2", "product": "spot", "entries": [{"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": 9218868437227405312, "unit": "\u00c5", "text": "with,comma.dm4"}, {"name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "valueBits": null, "unit": "1/\u00c5", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 13907323769373138249, "unit": "\u00b0", "text": ""}, {"name": "q", "valueBits": 13946825794198143337, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:3", "label": "cr\r\nlf", "product": "distance", "entries": [{"name": "q", "valueBits": null, "unit": "\u00b5m", "text": ""}, {"name": "q", "valueBits": null, "unit": "", "text": ""}, {"name": "y1", "valueBits": 4513953284673711124, "unit": "1/m", "text": ""}, {"name": "tab\tand\u0085nel\u2028sep\u2029", "valueBits": 4678729314985035566, "unit": "", "text": ""}, {"name": "q", "valueBits": 9223372036854775808, "unit": "mrad", "text": ""}], "refusal": null, "lineage": null}, {"group": "marks", "id": "marks:4", "label": "Row 4", "product": "profile", "entries": [], "refusal": null, "lineage": "s4"}], "session": "Saved at 14:03, in \"x.json\"\nnext line", "validations": [["distance", "closed form, distance"], ["angle", "closed form, angle, with \"quotes\", and commas"], ["profile", "samples: scikit-image 0.26.0 (a line\nbreak)"], ["spot", "planted spots"]]}, "expected": "# macTEM results\n# software: Tool 0.1.0 (1)\n# file: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# object: line break\n# image: 4186 x 226 px\n# x scale: none\n# y scale: none\n# session: Saved at 14:03, in \"x.json\" next line\n# notes: line break; with,comma.dm4\n# points: x1, y1, x2, y2, ... are image pixels (x column, y row, pixel centres at integers); an angle's vertex is point 2; click and centroid are bins of the centred spectrum; region is in image pixels\n# units: lengths in the file's unit as the file states it (a Velox metre axis stays in metres), px for pixels\n# validation (distance): closed form, distance; reader note: line break; with,comma.dm4\n# validation (angle): closed form, angle, with \"quotes\", and commas; reader note: line break; with,comma.dm4\n# validation (profile): samples: scikit-image 0.26.0 (a line break); reader note: line break; with,comma.dm4\n# validation (spot): planted spots; reader note: line break; with,comma.dm4\n# lineage: a mark's node id in the session record once saved, empty before and for FFT spots (not recorded)\n# numbers: %.17g (exact round trip); nan where the owner holds NaN; value empty where a line is words only\ngroup,id,label,quantity,value,unit,text,validation,lineage\nmarks,marks:0,plain.dm4,length,8.1686718015465193e-07,1/m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:0,plain.dm4,y1,3.3525629136883954e-07,,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:0,plain.dm4,y1,,m,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:0,plain.dm4,q,1,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:0,plain.dm4,plain.dm4,4.0253877268014856e-09,nm,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:1,Row 1,x1,-719146.47968699504,\u00b0,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:1,Row 1,\"cr\r\nlf\",-508.40766946525349,,,\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nmarks,marks:1,Row 1,outcome,,,\"a \"\"quoted\"\" name\",\"closed form, angle, with \"\"quotes\"\", and commas; reader note: line break; with,comma.dm4\",\nspots,spots:2,Row 2,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,inf,\u00c5,\"with,comma.dm4\",\"planted spots; reader note: line break; with,comma.dm4\",\nspots,spots:2,Row 2,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,,1/\u00c5,,\"planted spots; reader note: line break; with,comma.dm4\",\nspots,spots:2,Row 2,tab\tand\u0085nel\u2028sep\u2029,-137129.0907385147,\u00b0,,\"planted spots; reader note: line break; with,comma.dm4\",\nspots,spots:2,Row 2,q,-60982610.929446049,mrad,,\"planted spots; reader note: line break; with,comma.dm4\",\nmarks,marks:3,\"cr\r\nlf\",q,,\u00b5m,,\"closed form, distance; reader note: line break; with,comma.dm4\",\nmarks,marks:3,\"cr\r\nlf\",q,,,,\"closed form, distance; reader note: line break; with,comma.dm4\",\nmarks,marks:3,\"cr\r\nlf\",y1,6.193989493472897e-07,1/m,,\"closed form, distance; reader note: line break; with,comma.dm4\",\nmarks,marks:3,\"cr\r\nlf\",tab\tand\u0085nel\u2028sep\u2029,61820.184068573973,,,\"closed form, distance; reader note: line break; with,comma.dm4\",\nmarks,marks:3,\"cr\r\nlf\",q,-0,mrad,,\"closed form, distance; reader note: line break; with,comma.dm4\",\n"}]} \ No newline at end of file