diff --git a/Sources/SpectroEDX/Fit/SumEscapeFit.swift b/Sources/SpectroEDX/Fit/SumEscapeFit.swift index c02f6e0..87adc58 100644 --- a/Sources/SpectroEDX/Fit/SumEscapeFit.swift +++ b/Sources/SpectroEDX/Fit/SumEscapeFit.swift @@ -111,6 +111,12 @@ public nonisolated struct SumEscapeResult: Sendable { public var escapeFraction: Double? public var escapeFractionSigma: Double? public var escapePeaks: [EscapeComponent] + /// The fitted sum and escape peaks together, counts per channel of `fit.channels` (c S(A) + f E(A) at the reported areas): what + /// the model explains beyond the line and continuum columns. The element proposer takes it as a fixed part of its model, so a + /// peak this model covers is not proposed as an element. All zeros when the model is off. It is the exact sum term at the + /// reported areas; `fit.model` holds its linearisation at the previous iterate, which differs by c times the squared area step + /// (nothing at convergence; the warnings say when the alternation did not converge). + public var componentCounts: [Double] public var iterations: Int public var converged: Bool /// The parameters of the model as run, one sentence each. @@ -136,7 +142,8 @@ public nonisolated enum EDSSumEscapeFit { if model.isOff { return SumEscapeResult(fit: baseline, baseline: baseline, sumCoefficient: nil, sumCoefficientSigma: nil, sumCoefficientAtBound: false, sumPeaks: [], escapeFraction: nil, escapeFractionSigma: nil, - escapePeaks: [], iterations: 0, converged: true, + escapePeaks: [], componentCounts: [Double](repeating: 0, count: baseline.channels.count), + iterations: 0, converged: true, parameters: ["sum and escape model: off (the default fit)"], validation: validation) } @@ -285,6 +292,9 @@ public nonisolated enum EDSSumEscapeFit { } var escComponents: [EscapeComponent] = [] for gi in 0.. Double? { @@ -331,7 +341,7 @@ public nonisolated enum EDSSumEscapeFit { return SumEscapeResult(fit: fit, baseline: baseline, sumCoefficient: model.sumPeaks ? c : nil, sumCoefficientSigma: cSigma, sumCoefficientAtBound: cAtBound, sumPeaks: sumComponents, escapeFraction: model.commonEscapeFraction ? f : nil, escapeFractionSigma: fSigma, - escapePeaks: escComponents, iterations: iterations, converged: converged, + escapePeaks: escComponents, componentCounts: componentCounts, iterations: iterations, converged: converged, parameters: params, validation: validation) } } diff --git a/Sources/SpectroEDX/Proposer/ElementProposer.swift b/Sources/SpectroEDX/Proposer/ElementProposer.swift index 38b29a4..7cd72b0 100644 --- a/Sources/SpectroEDX/Proposer/ElementProposer.swift +++ b/Sources/SpectroEDX/Proposer/ElementProposer.swift @@ -236,12 +236,15 @@ public nonisolated struct ElementProposer: Sendable { /// strong line's shape error dragged the continuum beside it (data over model 3.1 in 1 to 2.5 keV beside a planted Al 6 eV narrower than the /// model) and the hump it left became an element (Os M). The pass's `result` is returned in counts (its model and residual unscaled). private static func fitPass(groups: [FitLineGroup], data: [Double], settings s: FitSettings, axis: EnergyAxis, - channels: Range, dropped: [String], relative: Double, widths: [Int], weighted: Bool = true) throws -> Pass { + channels: Range, dropped: [String], relative: Double, widths: [Int], weighted: Bool = true, + explained: [Double]? = nil) throws -> Pass { let model = EDSLineModel(groups: groups, resolutionMnKaEV: s.resolutionMnKaEV, beamEnergy: s.beamEnergy, escapePeaks: s.escapePeaks, droppedLines: dropped, lineTail: s.lineTail) try EDSFit.validate(s.referenceShapes, axis: axis, model: model) var design = LinearDesign.build(model: model, axis: axis, channels: channels, background: s.background, shapes: s.referenceShapes, counts: data) + // Counts the caller's model already explains (the sum and escape peaks of a sum/escape fit): a fixed part of the model. + if let explained { for (k, ch) in channels.enumerated() { design.offset[k] += explained[ch] } } let y = channels.map { data[$0] } var prefix = [Double](repeating: 0, count: y.count + 1) for i in y.indices { prefix[i + 1] = prefix[i] + y[i] } @@ -273,13 +276,14 @@ public nonisolated struct ElementProposer: Sendable { /// `fitPass` for every job, concurrently; the results are in job order. private static func fitPasses(jobs: [[FitLineGroup]], data: [Double], settings s: FitSettings, axis: EnergyAxis, - channels: Range, dropped: [String], relative: Double, widths: [Int]) -> [Result] { + channels: Range, dropped: [String], relative: Double, widths: [Int], + explained: [Double]?) -> [Result] { var out = [Result?](repeating: nil, count: jobs.count) out.withUnsafeMutableBufferPointer { buf in let box = ResultBox(buffer: buf) DispatchQueue.concurrentPerform(iterations: jobs.count) { i in box.buffer[i] = Result { try fitPass(groups: jobs[i], data: data, settings: s, axis: axis, channels: channels, - dropped: dropped, relative: relative, widths: widths) } + dropped: dropped, relative: relative, widths: widths, explained: explained) } } } return out.map { $0! } @@ -319,11 +323,16 @@ public nonisolated struct ElementProposer: Sendable { /// its own `ProposerError.cancelled`; nothing partial is returned. /// - progress: monotone in 0...1, ends at 1. The number of fits is not known in advance, so it is fits done over fits done plus the /// fits the current step still has planned, clamped never to fall. + /// - explained: counts per channel of `axis` that the caller's model already explains beyond line and continuum columns (the sum + /// and escape peaks of `EDSSumEscapeFit`, `SumEscapeResult.componentCounts`). They are a fixed part of every fit here, so a peak + /// they cover leaves no residual and is never proposed as an element. nil (the default) runs the proposer as before, bit for bit. public func propose(counts: [Double], axis: EnergyAxis, settings: FitSettings, holeCounts: [Double]? = nil, + explained: [Double]? = nil, cancelled: @Sendable () -> Bool = SpectroCancellation.task, progress: (@Sendable (Double) -> Void)? = nil) throws -> ProposalResult { - guard counts.count == axis.size, holeCounts.map({ $0.count == axis.size }) ?? true else { throw ProposerError.lengthMismatch } + guard counts.count == axis.size, holeCounts.map({ $0.count == axis.size }) ?? true, + explained.map({ $0.count == axis.size }) ?? true else { throw ProposerError.lengthMismatch } var s = settings s.method = .leastSquares let channels = axis.fitChannels(from: s.fitFrom, to: s.fitTo) @@ -379,7 +388,8 @@ public nonisolated struct ElementProposer: Sendable { func runAll(_ jobs: [[FitLineGroup]], on data: [Double]) throws -> [Result] { if cancelled() { throw ProposerError.cancelled } fitsPlanned = max(fitsPlanned, jobs.count) - let out = Self.fitPasses(jobs: jobs, data: data, settings: s, axis: axis, channels: channels, dropped: dropped, relative: t.relativeModelTerm, widths: widths) + let out = Self.fitPasses(jobs: jobs, data: data, settings: s, axis: axis, channels: channels, dropped: dropped, relative: t.relativeModelTerm, widths: widths, + explained: explained) fitsDone += jobs.count; tick() return out } @@ -600,7 +610,7 @@ public nonisolated struct ElementProposer: Sendable { // shape is off, and the statistic's weights spare that misfit). σ₀ and L_D are that fit's own null variance. Pruned, rejected and withheld // candidates keep the numbers of the fit that decided them (they are not in the final model). let report = try Self.fitPass(groups: model, data: counts, settings: s, axis: axis, channels: channels, dropped: dropped, - relative: t.relativeModelTerm, widths: widths, weighted: false) + relative: t.relativeModelTerm, widths: widths, weighted: false, explained: explained) fitsDone += 1 // Candidates: the found elements from the final fit, then the pruned, then the rest that were tested. let finalParents = parents(report) diff --git a/Sources/SpectroEDX/Quant/FitRange.swift b/Sources/SpectroEDX/Quant/FitRange.swift index edf8b3f..55f878c 100644 --- a/Sources/SpectroEDX/Quant/FitRange.swift +++ b/Sources/SpectroEDX/Quant/FitRange.swift @@ -169,6 +169,7 @@ public nonisolated enum FitRangeSensitivityCheck { var refit = input refit.method.fitToKeV = to refit.refinement = q.refinement + refit.sumEscape = PooledQuantifier.sameSumEscape(as: q) // the reported fit's sum-peak decision, not a new one let after: PooledQuantification do { after = try PooledQuantifier.run(refit, tables: nil, cancelled: cancelled, progress: progress.map { p in { @Sendable f in p(f * 0.95) } }) } catch let c as SpectroCancelled { throw c } diff --git a/Sources/SpectroEDX/Quant/PooledQuantification.swift b/Sources/SpectroEDX/Quant/PooledQuantification.swift index b743bbc..e99cf35 100644 --- a/Sources/SpectroEDX/Quant/PooledQuantification.swift +++ b/Sources/SpectroEDX/Quant/PooledQuantification.swift @@ -14,6 +14,10 @@ // is then computed WITHOUT the correction and the result says so; it never pretends. // // DEVIATIONS (named): +// * Sum peaks (`FitPolicy.sumPeaks`, default `.whenSignificant`): exSpy fits one Gaussian per line and no sum peaks. The fit +// tests the strongest line's self pair and, when its pile-up coefficient is 3 sigma above 0, keeps the sum peaks of the four +// strongest lines (`EDSSumEscapeFit`, unvalidated); otherwise it is the exSpy-equivalent fit bit for bit. `.off` always is. +// The axis refinement runs without them. The footer names the decision with its number. // * Absorption is iterated to 1e-7 % (eXSpy stops at 0.5 %): the sigma terms are finite differences of // the composition, and a loop that stops at 0.5 % would put steps into them. // * The absorption "model spread" is |at%(geometric-mean transmission) - at%(weighted-mean transmission)|. The @@ -86,8 +90,9 @@ public nonisolated struct PooledQuantificationInput: Sendable { /// The choices the library made about the fit and the step to composition (`QuantificationPolicy.default` is what it has always /// done). A non-default policy is named in the result's footer. It is not part of `method`, whose hash it leaves alone. public var policy: QuantificationPolicy - /// The optional sum-peak and common-escape-fraction components of the fit (0.10.0; nil, the default, runs the fit as it always ran). - /// Unvalidated (no Python reference); named in the footer when on. + /// The sum-peak and common-escape-fraction components of the fit, chosen by the caller (0.10.0). nil, the default, leaves the + /// choice to `policy.fit.sumPeaks` (sum peaks kept when the data support them); a model runs as given, and `SumEscapeModel()` + /// (both off) is the default fit as it ran before sum peaks were the default. Unvalidated (no Python reference); named in the footer. public var sumEscape: SumEscapeModel? = nil public init(counts: [UInt64], axis: EnergyAxis, method: QuantificationMethod, metadata: SpectrumImageMetadata, @@ -162,6 +167,9 @@ public nonisolated struct PooledQuantification: Sendable { public var footerLines: [String] /// The settings the reported fit ran with (axis, width, range, continuum, estimator): the unlisted-line check proposes on them. package var fitSettings: FitSettings + /// The sum and escape peaks the reported fit modelled (`SumEscapeResult.componentCounts` on the full axis, 0 outside the fitted + /// channels); nil when the sum/escape model is off. The unlisted-line check hands it to the proposer as explained counts. + package var sumEscapeCounts: [Double]? = nil /// The fitted range as run and where its upper end came from (WP3c; the footer's "fit range" line). package var fitRange: FitRangeChoice /// WP3c: what one extra fit to the axis end does to each quantified net, when the axis runs past the default range; @@ -174,6 +182,9 @@ public nonisolated struct PooledQuantification: Sendable { /// A2: a caveat on the at% rows ("assumes the listed elements only; unlisted: Cu (net 139 411) ..."), set by the unlisted-line /// check; "unlisted-line check running" while it runs; nil when the check found nothing. Never blanks a number. public var abundanceCaveat: String? = nil + /// The sum-peak (and escape) model the reported fit ran with; nil for the fit without sum peaks (one Gaussian per line). + /// Set by the caller's `PooledQuantificationInput.sumEscape`, or by `FitPolicy.sumPeaks` when the caller passes none. + public var appliedSumEscape: SumEscapeModel? = nil /// The detector Si dead layer of the continuum as run (typed or fitted), micrometres; nil when the term is off /// (`FitPolicy.continuumDeadLayer`). validation: "none". public var continuumDeadLayerMicrons: Double? = nil @@ -309,19 +320,85 @@ public nonisolated enum PooledQuantifier { try SpectroCancellation.check(cancelled) progress?(0.85) var sumEscapeLines: [String] = [] + var applied: SumEscapeModel? + var keptSumEscape: SumEscapeResult? do { - if let model = input.sumEscape, !model.isOff { - let r = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: fitSettings, model: model, + if let model = input.sumEscape { + // The caller chose the model: it runs as asked (an `isOff` model is the default fit). + if !model.isOff { + let r = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: fitSettings, model: model, escapeRatioWarning: policy.fit.escapeRatioWarning) - fit = r.fit; sumEscapeLines = r.parameters + fit = r.fit; sumEscapeLines = r.parameters; applied = model; keptSumEscape = r + } else { + fit = try EDSFit.run(counts: counts, axis: axis, settings: fitSettings, escapeRatioWarning: policy.fit.escapeRatioWarning) + } } else { - fit = try EDSFit.run(counts: counts, axis: axis, settings: fitSettings, escapeRatioWarning: policy.fit.escapeRatioWarning) + switch policy.fit.sumPeaks { + case .off: + fit = try EDSFit.run(counts: counts, axis: axis, settings: fitSettings, escapeRatioWarning: policy.fit.escapeRatioWarning) + case .always: + let model = SumEscapeModel(sumPeaks: true) + let r = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: fitSettings, model: model, + escapeRatioWarning: policy.fit.escapeRatioWarning) + fit = r.fit; applied = model; sumEscapeLines = r.parameters; keptSumEscape = r + case .whenSignificant: + // The test: the self pair of the strongest line alone (Al K-alpha + Al K-alpha in an Al alloy), the largest sum + // peak and the one least likely to sit on an unlisted line. The full model's cross pairs can absorb the misfit of an + // unlisted line at E_i + E_j (Ni K-alpha + O K-alpha on Cu K-alpha, measured on a synthetic spectrum with no pile-up), + // so they are not the test. + let probe = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: fitSettings, + model: SumEscapeModel(sumPeaks: true, parentCount: 1), + escapeRatioWarning: policy.fit.escapeRatioWarning) + let misfit = method.estimator == .poissonMaximumLikelihood ? probe.fit.reducedDeviance : probe.fit.pearsonReducedChiSquared + let z = SumPeakRule.significance(probe, misfit: misfit) + let pair = probe.sumPeaks.first?.label ?? "no self pair in the fitted range" + var kept = false + if probe.converged && z >= policy.fit.sumPeakSignificance { + let model = SumEscapeModel(sumPeaks: true) + let r = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: fitSettings, model: model, + escapeRatioWarning: policy.fit.escapeRatioWarning) + if r.converged { + fit = r.fit; applied = model; kept = true; keptSumEscape = r + sumEscapeLines = [String(format: "sum peaks kept: %@ alone is c / \u{03C3}_c = %.1f \u{2265} %g above 0 (\u{03C3}_c scaled by \u{221A}max(misfit, 1))", + pair, z, policy.fit.sumPeakSignificance)] + r.parameters + // A real line under the self pair is read as pile-up and never named by the unlisted-line check: say which. + if let e = probe.sumPeaks.first?.energyKeV { + let near = SumPeakRule.coincidentLines(energy: e, resolutionMnKaEV: fitSettings.resolutionMnKaEV, listed: active) + if !near.isEmpty { + let names = near.prefix(4).map { String(format: "%@ %.3f keV", $0.id, $0.energy) }.joined(separator: ", ") + let caveat = String(format: "the %@ sum peak (%.3f keV) lies within one FWHM of %@: a real line there is read as pile-up; list the element to test it", + pair, e, names) + sumEscapeLines.insert(caveat, at: 1) + warnings.append(caveat) + } + } + } else { + fit = probe.baseline + sumEscapeLines = ["sum peaks tested, not kept: the full sum-peak model did not converge; the default fit (one Gaussian per line, no sum peaks)"] + } + } else { + fit = probe.baseline + } + if !kept && sumEscapeLines.isEmpty { + // Not supported by the data: the default fit (the baseline of the same settings, bit for bit). + sumEscapeLines = [String(format: "sum peaks tested, not kept: %@ alone is c / \u{03C3}_c = %@ (needs %g)%@; the default fit (one Gaussian per line, no sum peaks)", + pair, z.isFinite ? String(format: "%.1f", z) : "n/a", policy.fit.sumPeakSignificance, + probe.converged ? "" : ", the alternation did not converge")] + } + } } } catch { let why = (error as? LocalizedError)?.errorDescription ?? "\(error)" throw QuantificationRefusal("The fit could not run: \(why).") } + // The sum and escape peaks the kept model explains, on the full axis (0 outside the fitted channels). + var sumEscapeCounts: [Double]? + if let r = keptSumEscape { + var full = [Double](repeating: 0, count: axis.size) + for (k, ch) in r.fit.channels.enumerated() where k < r.componentCounts.count { full[ch] = r.componentCounts[k] } + sumEscapeCounts = full + } // The fit appends the weak-line bias note to every continuum fit; it is a statement about a weak line beside Al K-alpha // (measured at Mg K-alpha on synthetic data), so it is kept only when that situation is in this result. warnings += fit.warnings.filter { $0 != ContinuumForm.weakLineBiasNote } @@ -452,10 +529,18 @@ public nonisolated enum PooledQuantifier { plotModel: plotModel, plotBackground: plotBackground, kSet: kSet, abundanceRefusal: abundanceRefusal, absorption: absorption, warnings: warnings, qualityLabel: qualityLabel, quality: quality, footerLines: footer, fitSettings: fitSettings, fitRange: fitRange) + result.sumEscapeCounts = sumEscapeCounts + result.appliedSumEscape = applied result.continuumDeadLayerMicrons = deadLayerMicrons return result } + /// The model a refit of the same quantification must run with so that it repeats this result's sum-peak decision instead of + /// taking it again on other data (the unlisted-line and fit-range checks): the applied model, or an off model (the default fit). + package static func sameSumEscape(as q: PooledQuantification) -> SumEscapeModel { + q.appliedSumEscape ?? SumEscapeModel() + } + /// What every shown sigma covers (WP3b F3 wording): the fit's counting statistics, not the choice of model. /// R7 (wp3e item 2): "\u{03C7}\u{00B2}\u{1D63} 54.8 (Pearson)" / "reduced deviance 1.02". Three significant figures at most; no /// threshold: the expectation of 1 is a property of the statistic, not a measured cliff. diff --git a/Sources/SpectroEDX/Quant/ProposalAxisRefinement.swift b/Sources/SpectroEDX/Quant/ProposalAxisRefinement.swift index ba76f12..1657b4b 100644 --- a/Sources/SpectroEDX/Quant/ProposalAxisRefinement.swift +++ b/Sources/SpectroEDX/Quant/ProposalAxisRefinement.swift @@ -73,7 +73,9 @@ extension ElementProposer { m.elements = (listed + anchors.filter { !listed.contains($0) }).map { QuantificationMethod.ElementState(symbol: $0, role: .quantify, isManual: false) } m.beamEnergyKeV = beamEnergy let input = PooledQuantificationInput(counts: spectrum, axis: fileAxis, method: m, metadata: metadata, regionName: regionName, pixelCount: 1, - resolutionMnKaEV: resolutionMnKaEV) + resolutionMnKaEV: resolutionMnKaEV, + sumEscape: SumEscapeModel()) // only the refinement is read: no sum-peak fits + // (the refinement itself runs without them) let fit: PooledQuantification do { fit = try PooledQuantifier.run(input, tables: tables, cancelled: cancelled) } catch let c as SpectroCancelled { throw c } diff --git a/Sources/SpectroEDX/Quant/QuantificationPolicy.swift b/Sources/SpectroEDX/Quant/QuantificationPolicy.swift index 8989e9f..2c7af23 100644 --- a/Sources/SpectroEDX/Quant/QuantificationPolicy.swift +++ b/Sources/SpectroEDX/Quant/QuantificationPolicy.swift @@ -94,20 +94,60 @@ public nonisolated struct FitPolicy: Sendable, Equatable, Codable { public var escapeRatioWarning: Double /// The energy-axis refinement on the pooled spectrum: which of offset, gain and width, the cap, the tolerance and the width bounds. public var axisRefinement: AxisRefinementSettings + /// Sum (pile-up) peaks of the four strongest alpha lines in the pooled fit (`EDSSumEscapeFit`), when the caller passes no + /// `PooledQuantificationInput.sumEscape`. Default `.whenSignificant`: kept when the strongest line's self pair is + /// `sumPeakSignificance` sigma above 0. `.off` is the fit before sum peaks were the default (one Gaussian per line, no sum peaks, + /// exSpy's model): its numbers are bit for bit the old ones; as a non-default policy it adds the footer line + /// `policy (non-default): fit.sumPeaks = off`. + public var sumPeaks: SumPeakRule + /// The c / sigma_c a pile-up coefficient needs under `.whenSignificant`, sigma_c scaled by the square root of the self-pair fit's + /// reduced chi2 (or deviance) when that is above 1. Default 3: a stated choice, not a measured false-keep rate (c is clipped at 0, + /// and the rate holds only for a model that fits; a real line under the self pair is read as pile-up whatever the level). + public var sumPeakSignificance: Double public init(fitFromKeV: Double = 0.2, defaultUpperLimitKeV: Double = 20, continuumOrders: [Int] = [9, 5], continuumEdges: [Double] = [FitPolicy.alKEdgeKeV], continuumNonNegative: Bool = true, continuumEfficiency: DetectorLayers? = nil, escapePeaks: Bool = true, maximumPolynomialOrder: Int = 8, irls: IRLSSettings = IRLSSettings(), escapeRatioWarning: Double = 0.05, axisRefinement: AxisRefinementSettings = AxisRefinementSettings(), - lineTail: LineTail? = nil, continuumDeadLayer: ContinuumDeadLayer? = nil) { + lineTail: LineTail? = nil, sumPeaks: SumPeakRule = .whenSignificant, sumPeakSignificance: Double = 3, + continuumDeadLayer: ContinuumDeadLayer? = nil) { self.continuumDeadLayer = continuumDeadLayer self.fitFromKeV = fitFromKeV; self.defaultUpperLimitKeV = defaultUpperLimitKeV self.continuumOrders = continuumOrders; self.continuumEdges = continuumEdges self.continuumNonNegative = continuumNonNegative; self.continuumEfficiency = continuumEfficiency self.escapePeaks = escapePeaks; self.maximumPolynomialOrder = maximumPolynomialOrder self.irls = irls; self.escapeRatioWarning = escapeRatioWarning; self.axisRefinement = axisRefinement - self.lineTail = lineTail + self.lineTail = lineTail; self.sumPeaks = sumPeaks; self.sumPeakSignificance = sumPeakSignificance + } + + /// The fit before sum peaks were the default (one Gaussian per line, no sum peaks): exSpy's line model. + public static let exspyEquivalent = FitPolicy(sumPeaks: .off) + + private enum CodingKeys: String, CodingKey { + case fitFromKeV, defaultUpperLimitKeV, continuumOrders, continuumEdges, continuumNonNegative, continuumEfficiency, escapePeaks, + lineTail, maximumPolynomialOrder, irls, escapeRatioWarning, axisRefinement, sumPeaks, sumPeakSignificance, continuumDeadLayer + } + + /// A policy stored before sum peaks were the default has no `sumPeaks`: it reads `.off`, the fit it was stored with (and gets the + /// non-default footer line). Every other field is required, as before. + public init(from decoder: any Decoder) throws { + let c = try decoder.container(keyedBy: CodingKeys.self) + self.init(fitFromKeV: try c.decode(Double.self, forKey: .fitFromKeV), + defaultUpperLimitKeV: try c.decode(Double.self, forKey: .defaultUpperLimitKeV), + continuumOrders: try c.decode([Int].self, forKey: .continuumOrders), + continuumEdges: try c.decode([Double].self, forKey: .continuumEdges), + continuumNonNegative: try c.decode(Bool.self, forKey: .continuumNonNegative), + continuumEfficiency: try c.decodeIfPresent(DetectorLayers.self, forKey: .continuumEfficiency), + escapePeaks: try c.decode(Bool.self, forKey: .escapePeaks), + maximumPolynomialOrder: try c.decode(Int.self, forKey: .maximumPolynomialOrder), + irls: try c.decode(IRLSSettings.self, forKey: .irls), + escapeRatioWarning: try c.decode(Double.self, forKey: .escapeRatioWarning), + axisRefinement: try c.decode(AxisRefinementSettings.self, forKey: .axisRefinement), + lineTail: try c.decodeIfPresent(LineTail.self, forKey: .lineTail), + sumPeaks: try c.decodeIfPresent(SumPeakRule.self, forKey: .sumPeaks) ?? .off, + sumPeakSignificance: try c.decodeIfPresent(Double.self, forKey: .sumPeakSignificance) ?? 3, + continuumDeadLayer: try c.decodeIfPresent(ContinuumDeadLayer.self, forKey: .continuumDeadLayer)) } /// The Al K absorption edge, keV (X-ray Data Booklet, Table 1-1): the default continuum split. @@ -132,6 +172,7 @@ public nonisolated struct FitPolicy: Sendable, Equatable, Codable { } if maximumPolynomialOrder < 0 { return "The largest polynomial order must be 0 or more." } if !(escapeRatioWarning.isFinite && escapeRatioWarning > 0) { return "The escape-ratio warning level must be positive." } + if !(sumPeakSignificance.isFinite && sumPeakSignificance >= 0) { return "The sum-peak significance level must be a number of 0 or more." } if irls.maxIterations < 1 || !(irls.tolerance > 0) || !(irls.muFloor > 0) { return "The Poisson iteration needs a cap of 1 or more, a positive tolerance and a positive floor." } if axisRefinement.maxIterations < 1 || !(axisRefinement.tolerance > 0) || !(axisRefinement.minimumResolutionEV < axisRefinement.maximumResolutionEV) { @@ -182,6 +223,53 @@ public nonisolated struct AbundancePolicy: Sendable, Equatable, Codable { } } +/// Whether the pooled fit models sum (pile-up) peaks (`FitPolicy.sumPeaks`). +/// +/// Why it is the default: on the public synthetic AlMgSi demo (planted truth: the simulation recipe of `sim_edx.py` v2.0, not a +/// measurement) the fit without sum peaks read noise-free Si K-alpha 15-18 % low on the Al-rich map and fixture pools (57 % on +/// the highest-rate pool, 8 % on the precipitate pool) and held a planted Cu K-alpha at 0 at high rate, because the Al+Al sum peak +/// (2.97 keV) and its neighbours pull the continuum above the Al K edge. With sum peaks the same pools read Si within 4 % (8 % at the +/// highest rate) and recover the Cu (`DemoEDXPoolTests`). On the Poisson counts of every demo pool the self pair passes the test +/// (`DemoEDXPoolTests.reducedChiSquareOnThePoissonCounts` pins it); on the one noise-free spectrum without pile-up tested +/// (`eds-unlisted-sim.json`) the default keeps the fit without sum peaks bit for bit. +/// What it cannot tell apart: a real line under the self pair (Ar K-alpha 2.957 or Ag L-alpha 2.984 keV under Al+Al 2.973 keV) is +/// read as pile-up; the footer and the warnings name the alpha lines within one FWHM of it when the sum peaks are kept. +/// The Al K-alpha tail is NOT part of this rule: fitted together with the sum peaks on the demo's Poisson pools (256 to 2 897 +/// pixels) it read 0 to a third of the planted fraction and left Mg K-alpha up to 25 % low on the map pools, so it is a detector +/// calibration (`FitPolicy.lineTail`, measured once with `TailEstimate` on a high-count spectrum). +public nonisolated enum SumPeakRule: String, Sendable, Codable, CaseIterable { + /// No sum peaks: one Gaussian per line, the fit as it ran before (exSpy's line model). + case off + /// Test the sum peak of the strongest line with itself (Al K-alpha + Al K-alpha in an Al alloy) alone; when its pile-up coefficient + /// is `FitPolicy.sumPeakSignificance` sigma above 0 (`significance(_:misfit:)`), fit and keep the sum peaks of the four strongest lines; otherwise the default + /// fit, bit for bit. Either way the footer says which, with the number. The self pair is the test because the cross pairs can + /// absorb an unlisted line at E_i + E_j: on a synthetic spectrum with no pile-up and Cu, Ga and Ge left out of the list, the + /// four-parent model kept c at 48 sigma (Ni K-alpha + O K-alpha on Cu K-alpha) while the Si self pair read 0. + case whenSignificant + /// Fit and keep the sum peaks whatever the data say. + case always + + /// c / (sigma_c sqrt(max(misfit, 1))) of a sum-peak fit: NaN when no pair lies in the fitted range (nothing was tested) or there + /// is no sigma, 0 when c is held at 0. sigma_c is counting statistics (Var(data) = model); `misfit` (the fit's reduced chi2 or + /// deviance) scales it, so a misfit near E_i + E_j does not pass as pile-up on a fit that is far from chi2_red = 1. + package static func significance(_ r: SumEscapeResult, misfit: Double) -> Double { + guard let c = r.sumCoefficient, !r.sumPeaks.isEmpty else { return .nan } + if r.sumCoefficientAtBound || c == 0 { return 0 } + guard let s = r.sumCoefficientSigma, s > 0, s.isFinite else { return .nan } + let scale = misfit.isFinite ? max(misfit, 1).squareRoot() : 1 + return c / (s * scale) + } + + /// The alpha lines of elements not in `listed` that lie within one FWHM of `energy`: a real line there is read as the sum peak. + package static func coincidentLines(energy: Double, resolutionMnKaEV: Double, listed: [String]) -> [XRayLine] { + let w = XRayLines.fwhm(resolutionMnKaEV: resolutionMnKaEV, atEnergy: energy) ?? 0.13 + return XRayLines.all.filter { + ["Ka", "La", "Ma"].contains($0.name) && !XRayLines.notRealLines.contains($0.element) && !listed.contains($0.element) + && abs($0.energy - energy) <= w + }.sorted { abs($0.energy - energy) < abs($1.energy - energy) } + } +} + /// Fewer than two lines above Cliff-Lorimer's intensity floor. public nonisolated enum SingleLineRule: String, Sendable, Codable { /// Refuse the at% (a 100 % for one element is a property of dose and the floor, not of the specimen). diff --git a/Sources/SpectroEDX/Quant/UnlistedLineCheck.swift b/Sources/SpectroEDX/Quant/UnlistedLineCheck.swift index 31bf367..1c5b413 100644 --- a/Sources/SpectroEDX/Quant/UnlistedLineCheck.swift +++ b/Sources/SpectroEDX/Quant/UnlistedLineCheck.swift @@ -171,7 +171,10 @@ public nonisolated enum UnlistedLineChecker { proposer: ElementProposer = ElementProposer(), cancelled: @Sendable () -> Bool = SpectroCancellation.task, progress: (@Sendable (Double) -> Void)? = nil) throws -> ProposalResult { - try proposer.propose(counts: counts, axis: q.usedAxis, settings: proposerSettings(q), cancelled: cancelled, progress: progress) + // The sum and escape peaks the reported fit modelled are explained counts for the proposer: a peak they cover is not an + // unlisted element (nil when the sum/escape model is off: the proposer runs as it always ran). + try proposer.propose(counts: counts, axis: q.usedAxis, settings: proposerSettings(q), explained: q.sumEscapeCounts, + cancelled: cancelled, progress: progress) } /// "Al_Ka" -> "Al K\u{03B1}", "Lu_Ma" -> "Lu M\u{03B1}", "Cu_Lb1" -> "Cu L\u{03B2}1". @@ -276,6 +279,7 @@ public nonisolated enum UnlistedLineChecker { refit.method.elements.removeAll { e in elements.contains { $0.element == e.symbol } } refit.method.elements += elements.map { .init(symbol: $0.element, role: .fitOnly, isManual: false) } refit.refinement = q.refinement + refit.sumEscape = PooledQuantifier.sameSumEscape(as: q) // the reported fit's sum-peak decision, not a new one let after: PooledQuantification do { after = try PooledQuantifier.run(refit, tables: nil, cancelled: cancelled, progress: progress.map { p in { @Sendable f in p(f * 0.95) } }) } catch let c as SpectroCancelled { throw c } diff --git a/Sources/SpectroEDX/SpectroEDX.docc/Quantifying-an-EDX-spectrum.md b/Sources/SpectroEDX/SpectroEDX.docc/Quantifying-an-EDX-spectrum.md index bcc719f..ef8f615 100644 --- a/Sources/SpectroEDX/SpectroEDX.docc/Quantifying-an-EDX-spectrum.md +++ b/Sources/SpectroEDX/SpectroEDX.docc/Quantifying-an-EDX-spectrum.md @@ -90,6 +90,23 @@ func report(_ result: PooledQuantification) { - ``PooledQuantification/Row/net`` is the fitted area of the element's alpha line, in counts; `atBound` marks an upper limit. - ``PooledQuantification/Row/atomicPercent`` and ``PooledQuantification/Row/atomicSigma`` are present only when at% was computed. - ``PooledQuantification/absorption`` says whether the absorption correction applied or was refused, and why. +- ``PooledQuantification/appliedSumEscape`` is the sum-peak model the fit kept, or nil for the fit without sum peaks. + +## Sum peaks and the line tail + +By default (``FitPolicy/sumPeaks`` `.whenSignificant`) the pooled fit tests the sum (pile-up) peak of the strongest line with +itself, and when it lies 3 sigma or more above 0 it models the sum peaks of the four strongest lines (``EDSSumEscapeFit``). The +footer says which, with the number. exSpy fits one Gaussian per line and no sum peaks; ``FitPolicy/exspyEquivalent`` (or +``SumPeakRule/off``) gives that fit: its numbers are bit for bit the old ones, and the footer names the non-default policy. On +the synthetic AlMgSi demo (planted truth: a simulation recipe, not a measurement) the fit without sum peaks read noise-free +Si K-alpha 8-57 % low, depending on the pool and its count rate, and held a stray Cu K-alpha at 0; with them Si reads within 4 % +(8 % at the highest count rate) and the Cu is recovered. A real line under the self pair (Ar K-alpha or Ag L-alpha under +Al+Al) is read as pile-up: when the sum peaks are kept, the footer and the warnings name the lines within one FWHM of it. + +The low-energy tail of a strong line (``LineTail``) is a property of the detector, not of the sample, and is not on by default: +fitted together with the sum peaks on the demo's Poisson pools (256 to 2 897 pixels) it read 0 to a third of the planted fraction +and left Mg K-alpha beside Al K-alpha up to 25 % low. Measure it once with ``TailEstimate`` on a high-count spectrum of the same +detector and set it as ``FitPolicy/lineTail``. ## What is and is not validated diff --git a/Tests/SpectroCoreTests/Fixtures/spectro-golden/demo-edx-tiny-dm4.txt b/Tests/SpectroCoreTests/Fixtures/spectro-golden/demo-edx-tiny-dm4.txt index 9c71be5..d42ac65 100644 --- a/Tests/SpectroCoreTests/Fixtures/spectro-golden/demo-edx-tiny-dm4.txt +++ b/Tests/SpectroCoreTests/Fixtures/spectro-golden/demo-edx-tiny-dm4.txt @@ -663,6 +663,7 @@ whole.quantification.fitSettings.escapePeaks = true whole.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 whole.quantification.fitSettings.method = .leastSquares whole.quantification.fitSettings.lineTail = nil +whole.quantification.sumEscapeCounts = nil whole.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 whole.quantification.fitRange.toKeV = 40239d932f3bac54 9.8077635536521157 whole.quantification.fitRange.source = .defaultReach @@ -674,6 +675,7 @@ whole.quantification.rangeSensitivity = nil whole.quantification.unlistedCheck = nil whole.quantification.unlistedCheckPending = false whole.quantification.abundanceCaveat = nil +whole.quantification.appliedSumEscape = nil whole.quantification.continuumDeadLayerMicrons = nil whole.csv-fnv = 37c2c8963acfc357 whole.rangeSensitivity = nil @@ -902,6 +904,7 @@ region-locked-axis.quantification.fitSettings.escapePeaks = true region-locked-axis.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 region-locked-axis.quantification.fitSettings.method = .leastSquares region-locked-axis.quantification.fitSettings.lineTail = nil +region-locked-axis.quantification.sumEscapeCounts = nil region-locked-axis.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 region-locked-axis.quantification.fitRange.toKeV = 402380c28065dbf0 9.7514839290942916 region-locked-axis.quantification.fitRange.source = .defaultReach @@ -913,6 +916,7 @@ region-locked-axis.quantification.rangeSensitivity = nil region-locked-axis.quantification.unlistedCheck = nil region-locked-axis.quantification.unlistedCheckPending = false region-locked-axis.quantification.abundanceCaveat = nil +region-locked-axis.quantification.appliedSumEscape = nil region-locked-axis.quantification.continuumDeadLayerMicrons = nil region-locked-axis.csv-fnv = 90f4608d5329d926 region-locked-axis.rangeSensitivity = nil diff --git a/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-realistic-l-sim.txt b/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-realistic-l-sim.txt index db10077..8cdd09a 100644 --- a/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-realistic-l-sim.txt +++ b/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-realistic-l-sim.txt @@ -318,6 +318,7 @@ seed0.seven.quantification.fitSettings.escapePeaks = true seed0.seven.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 seed0.seven.quantification.fitSettings.method = .leastSquares seed0.seven.quantification.fitSettings.lineTail = nil +seed0.seven.quantification.sumEscapeCounts = nil seed0.seven.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 seed0.seven.quantification.fitRange.toKeV = 4034000000000000 20 seed0.seven.quantification.fitRange.source = .defaultLimit @@ -329,6 +330,7 @@ seed0.seven.quantification.rangeSensitivity = nil seed0.seven.quantification.unlistedCheck = nil seed0.seven.quantification.unlistedCheckPending = false seed0.seven.quantification.abundanceCaveat = nil +seed0.seven.quantification.appliedSumEscape = nil seed0.seven.quantification.continuumDeadLayerMicrons = nil seed0.seven.csv-fnv = 176c2eb938b3c80a seed0.seven.rangeSensitivity.alternativeToKeV = 4053fdf036df3a38 79.967786520000004 @@ -687,6 +689,7 @@ seed0.seven-60keV.quantification.fitSettings.escapePeaks = true seed0.seven-60keV.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 seed0.seven-60keV.quantification.fitSettings.method = .leastSquares seed0.seven-60keV.quantification.fitSettings.lineTail = nil +seed0.seven-60keV.quantification.sumEscapeCounts = nil seed0.seven-60keV.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 seed0.seven-60keV.quantification.fitRange.toKeV = 404e000000000000 60 seed0.seven-60keV.quantification.fitRange.source = .typed @@ -698,6 +701,7 @@ seed0.seven-60keV.quantification.rangeSensitivity = nil seed0.seven-60keV.quantification.unlistedCheck = nil seed0.seven-60keV.quantification.unlistedCheckPending = false seed0.seven-60keV.quantification.abundanceCaveat = nil +seed0.seven-60keV.quantification.appliedSumEscape = nil seed0.seven-60keV.quantification.continuumDeadLayerMicrons = nil seed0.seven-60keV.csv-fnv = b4f647ee0ab928a3 seed0.seven-60keV.rangeSensitivity = nil @@ -983,6 +987,7 @@ seed0.four.quantification.fitSettings.escapePeaks = true seed0.four.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 seed0.four.quantification.fitSettings.method = .leastSquares seed0.four.quantification.fitSettings.lineTail = nil +seed0.four.quantification.sumEscapeCounts = nil seed0.four.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 seed0.four.quantification.fitRange.toKeV = 4034000000000000 20 seed0.four.quantification.fitRange.source = .defaultLimit @@ -994,6 +999,7 @@ seed0.four.quantification.rangeSensitivity = nil seed0.four.quantification.unlistedCheck = nil seed0.four.quantification.unlistedCheckPending = false seed0.four.quantification.abundanceCaveat = nil +seed0.four.quantification.appliedSumEscape = nil seed0.four.quantification.continuumDeadLayerMicrons = nil seed0.four.csv-fnv = 527d12db2afd525d seed0.four.rangeSensitivity.alternativeToKeV = 4053fdf036df3a38 79.967786520000004 diff --git a/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-unlisted-sim.txt b/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-unlisted-sim.txt index d7b4b07..e0c5854 100644 --- a/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-unlisted-sim.txt +++ b/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-unlisted-sim.txt @@ -292,6 +292,7 @@ seed0.four.quantification.fitSettings.escapePeaks = true seed0.four.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 seed0.four.quantification.fitSettings.method = .leastSquares seed0.four.quantification.fitSettings.lineTail = nil +seed0.four.quantification.sumEscapeCounts = nil seed0.four.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 seed0.four.quantification.fitRange.toKeV = 4034000000000000 20 seed0.four.quantification.fitRange.source = .defaultLimit @@ -303,6 +304,7 @@ seed0.four.quantification.rangeSensitivity = nil seed0.four.quantification.unlistedCheck = nil seed0.four.quantification.unlistedCheckPending = false seed0.four.quantification.abundanceCaveat = nil +seed0.four.quantification.appliedSumEscape = nil seed0.four.quantification.continuumDeadLayerMicrons = nil seed0.four.csv-fnv = 39e1a8432149c423 seed0.four.rangeSensitivity.alternativeToKeV = 4053fdc30de1dcc8 79.965030165261055 @@ -1525,6 +1527,7 @@ seed0.seven.quantification.fitSettings.escapePeaks = true seed0.seven.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 seed0.seven.quantification.fitSettings.method = .leastSquares seed0.seven.quantification.fitSettings.lineTail = nil +seed0.seven.quantification.sumEscapeCounts = nil seed0.seven.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 seed0.seven.quantification.fitRange.toKeV = 4034000000000000 20 seed0.seven.quantification.fitRange.source = .defaultLimit @@ -1536,6 +1539,7 @@ seed0.seven.quantification.rangeSensitivity = nil seed0.seven.quantification.unlistedCheck = nil seed0.seven.quantification.unlistedCheckPending = false seed0.seven.quantification.abundanceCaveat = nil +seed0.seven.quantification.appliedSumEscape = nil seed0.seven.quantification.continuumDeadLayerMicrons = nil seed0.seven.csv-fnv = 5312e03b97452089 seed0.seven.rangeSensitivity.alternativeToKeV = 4053fdffd20951d7 79.968739041424996 diff --git a/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-weakline-sim.txt b/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-weakline-sim.txt index 2b7857d..168481e 100644 --- a/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-weakline-sim.txt +++ b/Tests/SpectroCoreTests/Fixtures/spectro-golden/eds-weakline-sim.txt @@ -212,6 +212,7 @@ level0.quantification.fitSettings.escapePeaks = true level0.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 level0.quantification.fitSettings.method = .leastSquares level0.quantification.fitSettings.lineTail = nil +level0.quantification.sumEscapeCounts = nil level0.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 level0.quantification.fitRange.toKeV = 40340160bc0314bd 20.005382300140571 level0.quantification.fitRange.source = .defaultReach @@ -223,6 +224,7 @@ level0.quantification.rangeSensitivity = nil level0.quantification.unlistedCheck = nil level0.quantification.unlistedCheckPending = false level0.quantification.abundanceCaveat = nil +level0.quantification.appliedSumEscape = nil level0.quantification.continuumDeadLayerMicrons = nil level0.csv-fnv = 7bdff3fd070201e7 level0.rangeSensitivity = nil @@ -439,6 +441,7 @@ level4.quantification.fitSettings.escapePeaks = true level4.quantification.fitSettings.referenceShapes.shapes: n 0 sum 0000000000000000 0 fnv cbf29ce484222325 level4.quantification.fitSettings.method = .leastSquares level4.quantification.fitSettings.lineTail = nil +level4.quantification.sumEscapeCounts = nil level4.quantification.fitRange.fromKeV = 3fc999999999999a 0.20000000000000001 level4.quantification.fitRange.toKeV = 403404cb90bd12c4 20.018731161270594 level4.quantification.fitRange.source = .defaultReach @@ -450,6 +453,7 @@ level4.quantification.rangeSensitivity = nil level4.quantification.unlistedCheck = nil level4.quantification.unlistedCheckPending = false level4.quantification.abundanceCaveat = nil +level4.quantification.appliedSumEscape = nil level4.quantification.continuumDeadLayerMicrons = nil level4.csv-fnv = a32acb6ac2acfd15 level4.rangeSensitivity = nil diff --git a/Tests/SpectroEDXTests/DemoEDXPoolTests.swift b/Tests/SpectroEDXTests/DemoEDXPoolTests.swift new file mode 100644 index 0000000..6ed4aa0 --- /dev/null +++ b/Tests/SpectroEDXTests/DemoEDXPoolTests.swift @@ -0,0 +1,266 @@ +import Foundation +import Testing +import SpectroTestSupport +import SpectroCore +import SpectroEDX + +/// The pooled quantification against PLANTED TRUTH ON SYNTHETIC DATA: five pools of the public AlMgSi demo set (mac4DSTEM `demo-edx`, +/// `tools/demo-edx/sim_edx.py` v2.0; `tools/edx-sim/demo_pools.py` wrote `edx-demo-pools.json`) and the kit's own +/// `eds-absorption-truth.json` pool. The truth is the simulation recipe, not a measurement, so every number here stays +/// `validation: "none"`. +/// +/// The generator plants what a real detector does and exSpy's line model leaves out: sum (pile-up) peaks whose parents lose the +/// photons, a 1.5 % Al K-alpha tail (0.12 keV), Si escape, Si internal fluorescence and stray Cu K. Each pool is fitted on the +/// generator's noise-free expected spectrum x100 (the fit's bias without noise) and, where said, on its Poisson counts. Setup as the +/// apps run it: true axis locked, the generator's true k typed (weight convention, relative to the first quantified element), the +/// truth geometry and thickness, absorption on. Cu and O are Fit only: the demo's Cu is a stray grid line (the test's choice). +/// +/// Si planted counts include the Si internal-fluorescence peak at the same energy (the kit's convention, `SpectroscopyAbsorptionTruthTests`). +/// +/// What the bounds are: MEASURED regression bounds on fixed inputs, not derived limits. The fit with the default sum peaks reads +/// noise-free Si K-alpha -0.0 to -4.0 % on the pools at up to 300 counts/px and -7.9 % on L5 (the highest rate, where the +/// generator's pile-up takes 11 % of the Al K-alpha photons); the bound is 5 % (10 % on L5). The fit without sum peaks read -8 to +/// -57 % on the same pools: the Al+Al sum peak (2.97 keV) pulls the continuum segment above the Al K edge and Si K-alpha with it. +struct DemoEDXPoolTests { + static let tables = try! QuantificationTables(directory: EDXFixtures.repoRoot.appendingPathComponent("Sources/SpectroEDX/Resources/Spectroscopy")) + + private struct Axis: Decodable { let offset: Double; let scale: Double } + private struct DemoPool: Decodable { + let name: String; let npix: Int + let thicknessNm: Double + let truthAt: [String: Double] + let axisTrue: Axis + let counts: [Int]; let expected: [Double]; let planted: [String: Double] + enum CodingKeys: String, CodingKey { + case name, npix, counts, expected, planted + case thicknessNm = "thickness_nm", truthAt = "truth_at", axisTrue = "axis_true" + } + } + private struct DemoDoc: Decodable { + let trueK: [String: Double]; let mass: [String: Double]; let pools: [DemoPool] + enum CodingKeys: String, CodingKey { case pools; case trueK = "true_k_counts_per_atom_nm2"; case mass = "atomic_mass" } + } + private static let demo = try! JSONDecoder().decode(DemoDoc.self, from: Data(contentsOf: EDXFixtures.url("edx-demo-pools.json"))) + + /// One pool in the form the tests use. + struct Case { + let name: String + let axis: EnergyAxis + let npix: Int + let thicknessNm: Double + let quantified: [String] + let trueK: [String: Double] + let expected: [Double] + let counts: [Int]? + /// Planted Mg K-alpha, Si K-alpha (+ internal fluorescence) and Cu K-alpha (stray + sample), counts; nil when not planted or not known. + let mg: Double, si: Double, cu: Double? + } + + static let cases: [Case] = { + var out: [Case] = demo.pools.map { p in + Case(name: p.name, axis: EnergyAxis(offset: p.axisTrue.offset, scale: p.axisTrue.scale, size: p.expected.count), npix: p.npix, + thicknessNm: p.thicknessNm, quantified: p.truthAt["Al"] == nil ? ["Mg", "Si"] : ["Al", "Mg", "Si"], trueK: demo.trueK, + expected: p.expected, counts: p.counts, mg: p.planted["Mg_Ka"]!, si: p.planted["Si_Ka"]! + p.planted["Si_Ka_internal"]!, + cu: p.planted["Cu_Ka"]! + p.planted["Cu_Ka_stray"]!) + } + let fx = EDXFixtures.jsonObject("eds-absorption-truth.json") + let e = fx["expected"] as! [Double] + let with = fx["areas_with_absorption"] as! [String: Double] + out.append(Case(name: "absorption-truth", axis: EnergyAxis(offset: fx["offset"] as! Double, scale: fx["scale"] as! Double, size: e.count), + npix: fx["npix"] as! Int, thicknessNm: fx["thickness_nm"] as! Double, quantified: ["Al", "Mg", "Si"], + trueK: fx["true_k_counts_per_atom_nm2"] as! [String: Double], expected: e, counts: nil, + mg: with["Mg_Ka"]!, si: with["Si_Ka"]! + (fx["area_si_ka_internal"] as! Double), cu: nil)) + return out + }() + + static func named(_ prefix: String) -> Case { cases.first { $0.name.hasPrefix(prefix) }! } + + static func input(_ c: Case, noiseFree: Bool, policy: QuantificationPolicy = .default) -> PooledQuantificationInput { + let counts = noiseFree ? c.expected.map { UInt64(($0 * 100).rounded()) } : c.counts!.map { UInt64($0) } + var m = QuantificationMethod() + var roles: [(String, QuantificationMethod.ElementRole)] = c.quantified.map { ($0, .quantify) } + if !c.quantified.contains("Al") { roles.append(("Al", .fitOnly)) } + roles += [("Cu", .fitOnly), ("O", .fitOnly)] + m.elements = roles.map { .init(symbol: $0.0, role: $0.1, isManual: false) } + m.beamEnergyKeV = 200 + m.lockEnergyAxis = true + m.kFactorSource = .typed + m.kSource = "demo generator true k (Gp x s x eps), weight convention"; m.kDate = "2026-10-31"; m.kReference = c.quantified[0] + let mass = demo.mass + let w = c.quantified.map { mass[$0]! / c.trueK[$0]! } + m.typedK = zip(c.quantified, w).map { .init(element: $0.0, k: $0.1 / w[0], relativeSigma: 0) } + m.thickness = .init(nanometres: c.thicknessNm, sigmaNanometres: 0) + m.absorptionCorrection = true + var meta = SpectrumImageMetadata(fileName: c.name, filePath: c.name, scanWidth: 1, scanHeight: 1, channelCount: counts.count, + energyOffsetEV: c.axis.offset * 1000, energyDispersionEV: c.axis.scale * 1000) + meta.origin = .veloxEMD + meta.alphaTiltDegrees = -16.87; meta.betaTiltDegrees = 0 + meta.detectors = zip([45.0, 135, 225, 315], [0.4, 0.2, 0.1, 0.3]).enumerated().map { i, a in + SpectrumDetectorSegment(name: "SuperXG1\(i + 1)", azimuthDegrees: a.0, elevationDegrees: 22, solidAngle: a.1) + } + return PooledQuantificationInput(counts: counts, axis: c.axis, method: m, metadata: meta, regionName: c.name, pixelCount: c.npix, + resolutionMnKaEV: 130, policy: policy) + } + + static var withoutSumPeaks: QuantificationPolicy { QuantificationPolicy(fit: .exspyEquivalent) } + + static func net(_ q: PooledQuantification, _ group: String) -> Double { q.fit.groupIDs.firstIndex(of: group).map { q.fit.values[$0] } ?? .nan } + static func say(_ s: String) { FileHandle.standardError.write(Data(("DEMO " + s + "\n").utf8)) } + + /// Red before sum peaks were the default: Si K-alpha read 8-57 % low noise-free. Now within 5 % (10 % at L5's rate), and the + /// footer names the decision with its number. + @Test(arguments: cases.map(\.name)) + func defaultFitRecoversSiKAlphaNoiseFree(_ name: String) throws { + let c = Self.named(name) + let q = try PooledQuantifier.run(Self.input(c, noiseFree: true), tables: Self.tables) + let off = try PooledQuantifier.run(Self.input(c, noiseFree: true, policy: Self.withoutSumPeaks), tables: Self.tables) + let si = Self.net(q, "Si_Ka") / 100 / c.si - 1, siOff = Self.net(off, "Si_Ka") / 100 / c.si - 1 + Self.say(String(format: "%@ Si %+.4f (without sum peaks %+.4f) | %@", name, si, siOff, q.footerLines.first { $0.hasPrefix("sum peaks") } ?? "-")) + #expect(abs(si) <= (name.hasPrefix("L5") ? 0.10 : 0.05), "\(name): Si K-alpha \(si)") + #expect(q.appliedSumEscape == SumEscapeModel(sumPeaks: true)) + #expect(q.footerLines.contains { $0.hasPrefix("sum peaks kept") }) + #expect(off.appliedSumEscape == nil) + #expect(off.footerLines.contains("policy (non-default): fit.sumPeaks = off")) + #expect(abs(si) < abs(siOff) || abs(siOff) < 0.01, "\(name): the default is not closer than the fit without sum peaks") + #expect(q.quality < off.quality, "\(name): the fit with sum peaks fits worse") + } + + /// Cu K-alpha at high rate: the fit without sum peaks held it at 0 (L6) or read 40 % of it (L5, L7), noise-free; the default + /// reads 92-97 %. At the map pools' low rate both fits read it within 5 %. + @Test func cuKAlphaIsRecoveredAtHighRate() throws { + for c in Self.cases where c.cu != nil { + let q = try PooledQuantifier.run(Self.input(c, noiseFree: true), tables: Self.tables) + let off = try PooledQuantifier.run(Self.input(c, noiseFree: true, policy: Self.withoutSumPeaks), tables: Self.tables) + let cu = Self.net(q, "Cu_Ka") / 100 / c.cu!, cuOff = Self.net(off, "Cu_Ka") / 100 / c.cu! + Self.say(String(format: "%@ Cu read %.3f of planted (without sum peaks %.3f)", c.name, cu, cuOff)) + if c.name.hasPrefix("L") { + #expect(cu >= 0.85, "\(c.name): Cu \(cu)") + #expect(cuOff <= 0.45, "\(c.name): without sum peaks Cu \(cuOff)") + } else { + #expect(abs(cu - 1) <= 0.05 && abs(cuOff - 1) <= 0.05, "\(c.name): Cu \(cu), without sum peaks \(cuOff)") + } + } + // On the Poisson counts of L6 (300 counts/px): 123 counts of stray Cu above the window background. + let l6 = Self.named("L6") + let q = try PooledQuantifier.run(Self.input(l6, noiseFree: false), tables: Self.tables) + let off = try PooledQuantifier.run(Self.input(l6, noiseFree: false, policy: Self.withoutSumPeaks), tables: Self.tables) + #expect(Self.net(q, "Cu_Ka") / l6.cu! >= 0.85) + #expect(Self.net(off, "Cu_Ka") / l6.cu! <= 0.05) + } + + /// The Poisson counts of every demo pool: the fit without sum peaks has a reduced chi2 of 2.1-31; with them 0.7-1.1. + @Test func reducedChiSquareOnThePoissonCounts() throws { + for c in Self.cases where c.counts != nil { + let q = try PooledQuantifier.run(Self.input(c, noiseFree: false), tables: Self.tables) + let off = try PooledQuantifier.run(Self.input(c, noiseFree: false, policy: Self.withoutSumPeaks), tables: Self.tables) + Self.say(String(format: "%@ chi2_red %.3f (without sum peaks %.3f) | %@", c.name, q.quality, off.quality, + q.footerLines.first { $0.hasPrefix("sum peaks") } ?? "-")) + #expect(q.appliedSumEscape == SumEscapeModel(sumPeaks: true), "\(c.name): the self pair did not pass on the Poisson counts") + #expect(q.quality <= 1.2, "\(c.name): \(q.quality)") + #expect(off.quality >= 2, "\(c.name): \(off.quality)") + } + } + + /// The Al K-alpha tail is a detector calibration, not part of the default. Measured once on a high-count spectrum of the same + /// detector (the absorption-truth pool, 1e4 px) with `TailEstimate`, then typed into `FitPolicy.lineTail`, it takes the noise-free + /// Mg K-alpha bias next to Al K-alpha (-22 % on L5, -32 % on recipe A, -45 % on the matrix map) to within 5 % on L5 and recipe A, + /// and to -15 % on the matrix map (which + /// pools seven recipes and thicknesses; not explained). Without it the default fit leaves Mg where it was (the tail is not a sum peak). + @Test func aCalibratedTailTakesTheMgBiasOut() throws { + let fx = Self.named("absorption-truth") + var s = FitSettings.standard(elements: ["Al", "Mg", "Si", "Cu", "O"], axis: fx.axis, resolutionMnKaEV: 130, beamEnergy: 200) + s.method = .leastSquares + let tail = try TailEstimate.measure(counts: fx.expected.map { $0.rounded() }, axis: fx.axis, settings: s, elements: ["Al", "Mg", "Si", "Cu", "O"]).tail + Self.say(String(format: "tail measured on the absorption-truth pool: f %.4f, slope %.3f keV (planted 0.015, 0.12)", tail.fraction, tail.slopeKeV)) + #expect(tail.fraction > 0.005 && tail.fraction < 0.02) + var calibrated = QuantificationPolicy.default + calibrated.fit.lineTail = tail + for (name, bound) in [("L5", 0.05), ("L6", 0.05), ("L7", 0.05), ("M_A", 0.05), ("M_matrix", 0.16)] { + let c = Self.named(name) + let q = try PooledQuantifier.run(Self.input(c, noiseFree: true, policy: calibrated), tables: Self.tables) + let plain = try PooledQuantifier.run(Self.input(c, noiseFree: true), tables: Self.tables) + let off = try PooledQuantifier.run(Self.input(c, noiseFree: true, policy: Self.withoutSumPeaks), tables: Self.tables) + let mg = Self.net(q, "Mg_Ka") / 100 / c.mg - 1, mgPlain = Self.net(plain, "Mg_Ka") / 100 / c.mg - 1 + let mgOff = Self.net(off, "Mg_Ka") / 100 / c.mg - 1 + Self.say(String(format: "%@ Mg with the calibrated tail %+.4f, default %+.4f, without sum peaks %+.4f", name, mg, mgPlain, mgOff)) + #expect(abs(mg) <= bound, "\(name): Mg \(mg)") + #expect(abs(mgPlain - mgOff) <= 0.03, "\(name): sum peaks moved Mg from \(mgOff) to \(mgPlain)") + } + } + + /// The unlisted-line check on the Poisson counts of the Al-rich pools: without sum peaks the Al+Al sum (2.973 keV) is left in + /// the residual (Ar K-alpha 2.957 keV, Ag L-alpha 2.984 keV); with the default it is a modelled sum peak, explained to the proposer, + /// and neither Ar nor Ag is named. + @Test(arguments: ["L5", "M_A", "M_matrix"]) + func theAlAlSumIsNotNamedAsArOrAg(_ name: String) throws { + let c = Self.named(name) + let input = Self.input(c, noiseFree: false) + let q = try PooledQuantifier.run(input, tables: Self.tables) + let proposal = try UnlistedLineChecker.propose(counts: input.counts.map { Double($0) }, quantification: q) + let check = UnlistedLineChecker.check(proposal: proposal, input: input, quantification: q) + Self.say("\(name) unlisted check, default: \(check.summary)") + #expect(!check.names.contains("Ar") && !check.names.contains("Ag"), "\(name): \(check.summary)") + // The other side of the same coin: a real Ar or Ag line there would be read as pile-up, and the result says so. + #expect(q.warnings.contains { $0.contains("Ar_Ka") && $0.contains("read as pile-up") }, "\(name): \(q.warnings)") + #expect(q.footerLines.contains { $0.contains("Ar_Ka") }, "\(name): \(q.footerLines)") + } + + /// `.off` is the fit as it ran before, bit for bit: the same as a caller's explicit `SumEscapeModel()` (both off). + @Test func theSwitchGivesTheFitWithoutSumPeaksBitForBit() throws { + let c = Self.named("L6") + let off = try PooledQuantifier.run(Self.input(c, noiseFree: false, policy: Self.withoutSumPeaks), tables: Self.tables) + var explicit = Self.input(c, noiseFree: false) + explicit.sumEscape = SumEscapeModel() + let e = try PooledQuantifier.run(explicit, tables: Self.tables) + #expect(off.fit.values == e.fit.values) + #expect(off.fit.model == e.fit.model) + #expect(off.rows == e.rows) + #expect(FitPolicy.exspyEquivalent.sumPeaks == .off) + #expect(FitPolicy.default.sumPeaks == .whenSignificant) + } + + /// A policy stored before `sumPeaks` existed reads `.off` (the fit it was stored with); the new fields round-trip. + @Test func aStoredPolicyWithoutTheFieldReadsOff() throws { + var o = try #require(try JSONSerialization.jsonObject(with: Data(QuantificationPolicy.default.canonicalJSON.utf8)) as? [String: Any]) + var fit = try #require(o["fit"] as? [String: Any]) + #expect(fit["sumPeaks"] as? String == "whenSignificant") + fit.removeValue(forKey: "sumPeaks"); fit.removeValue(forKey: "sumPeakSignificance") + o["fit"] = fit + let old = try JSONDecoder().decode(QuantificationPolicy.self, from: JSONSerialization.data(withJSONObject: o)) + #expect(old.fit.sumPeaks == .off) + #expect(old.fit.sumPeakSignificance == 3) + var p = QuantificationPolicy.default + p.fit.sumPeaks = .always; p.fit.sumPeakSignificance = 5 + #expect(try JSONDecoder().decode(QuantificationPolicy.self, from: Data(p.canonicalJSON.utf8)) == p) + p.fit.sumPeakSignificance = -1 + #expect(p.problem != nil) + } + + /// No pile-up planted (`eds-unlisted-sim.json`, noise-free, the one such spectrum tested): the default keeps the fit without sum + /// peaks bit for bit, and says so. With Cu, Ga + /// and Ge left out of the list the four-parent model would keep c at 48 sigma (Ni K-alpha + O K-alpha lies on Cu K-alpha); the + /// self-pair test (Si + Si) reads 0, so nothing is kept. + @Test(arguments: [false, true]) + func noPileUpKeepsTheDefaultFit(incompleteList: Bool) throws { + let o = EDXFixtures.jsonObject("eds-unlisted-sim.json") + let e = o["expected"] as! [Double] + let axis = EnergyAxis(offset: o["offset"] as! Double, scale: o["scale"] as! Double, size: e.count) + var m = QuantificationMethod() + let listed = incompleteList ? ["O", "Si", "Ti", "Ni"] : ["O", "Si", "Ti", "Ni", "Ge", "Cu", "Ga"] + m.elements = listed.map { .init(symbol: $0, role: .quantify, isManual: false) } + m.beamEnergyKeV = 200 + m.absorptionCorrection = false + m.lockEnergyAxis = true + let meta = SpectrumImageMetadata(fileName: "eds-unlisted-sim.json", filePath: "", scanWidth: 1, scanHeight: 1, channelCount: e.count, + energyOffsetEV: axis.offset * 1000, energyDispersionEV: axis.scale * 1000) + var input = PooledQuantificationInput(counts: e.map { UInt64($0.rounded()) }, axis: axis, method: m, metadata: meta, + regionName: "synthetic", pixelCount: 1) + let q = try PooledQuantifier.run(input, tables: Self.tables) + input.policy = Self.withoutSumPeaks + let off = try PooledQuantifier.run(input, tables: Self.tables) + #expect(q.appliedSumEscape == nil) + #expect(q.fit.values == off.fit.values) + #expect(q.rows == off.rows) + #expect(q.footerLines.contains { $0.hasPrefix("sum peaks tested, not kept: Si_Ka + Si_Ka alone") }, "\(q.footerLines)") + } +} diff --git a/Tests/SpectroEDXTests/Fixtures/edx-demo-pools.json b/Tests/SpectroEDXTests/Fixtures/edx-demo-pools.json new file mode 100644 index 0000000..c89df08 --- /dev/null +++ b/Tests/SpectroEDXTests/Fixtures/edx-demo-pools.json @@ -0,0 +1 @@ +{"atomic_mass":{"Al":26.9815,"Mg":24.305,"Si":28.0855},"generator":"mac4DSTEM demo-edx, tools/demo-edx/sim_edx.py v2.0 (seed 42, ladder seed 52); truth is the simulation recipe","pools":[{"axis_true":{"offset":-0.478,"scale":0.005},"counts":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,2,1,3,0,4,0,3,4,0,0,4,2,2,3,2,3,3,2,4,6,1,5,6,3,5,4,3,6,1,7,4,2,4,5,9,4,13,9,11,8,4,6,5,7,7,12,9,8,4,12,5,17,18,11,18,13,7,8,10,8,8,15,12,11,11,8,5,11,9,7,8,9,9,7,8,6,10,3,6,6,8,10,8,5,7,11,8,15,5,7,5,13,7,7,3,7,4,8,10,5,6,8,9,3,4,4,5,5,7,3,8,4,7,3,5,8,10,12,10,11,7,9,7,5,6,5,10,8,13,5,5,6,5,8,5,2,5,8,7,9,9,6,7,6,2,8,6,6,4,4,6,11,2,8,3,6,9,4,11,9,8,6,10,6,7,1,7,5,5,12,8,8,6,5,5,6,7,6,6,5,7,6,6,2,4,1,8,7,3,7,6,7,5,11,8,9,9,9,9,13,16,10,14,17,10,7,9,9,10,12,7,9,8,15,12,10,17,5,12,11,8,5,6,6,7,14,7,10,20,21,30,39,55,51,82,136,153,202,275,372,449,524,617,726,784,920,976,1063,1089,1057,1051,1052,1018,901,772,704,638,539,467,340,266,181,148,117,84,75,52,42,33,25,24,11,12,8,5,6,7,3,6,6,5,2,5,3,6,5,6,6,3,6,3,11,10,8,7,11,10,6,19,17,8,9,7,10,13,10,13,4,6,4,6,5,3,5,4,3,7,5,5,1,2,4,3,2,6,3,4,3,6,3,6,4,5,5,2,2,2,3,3,4,5,2,3,7,2,3,4,1,2,1,1,2,5,4,3,5,3,2,2,1,3,3,2,5,1,3,3,1,2,5,5,1,4,2,3,0,1,3,6,2,2,4,3,3,2,3,1,2,2,5,5,6,4,4,1,2,2,4,5,7,2,1,2,3,5,2,0,2,1,1,4,1,2,1,1,0,0,1,3,7,2,6,2,3,3,2,0,1,2,0,6,4,2,2,0,3,1,4,3,3,3,2,2,2,3,3,5,3,2,3,2,2,6,5,5,9,1,6,4,2,4,7,4,4,4,2,1,2,2,2,1,4,1,2,4,1,0,3,1,3,4,6,0,5,5,3,5,4,1,3,4,2,4,1,2,3,3,3,2,1,3,3,2,4,1,3,3,2,0,3,4,6,4,3,3,2,0,3,3,3,3,6,6,5,5,4,7,9,9,14,20,27,24,33,30,28,39,37,55,63,69,61,87,109,99,78,99,81,91,97,87,70,74,67,55,66,55,40,35,21,25,24,18,10,10,6,4,6,3,7,3,5,2,2,2,3,3,1,0,3,8,4,1,2,3,3,3,0,3,1,4,2,2,2,3,2,3,3,3,4,4,5,4,7,1,4,2,2,4,2,3,1,3,0,4,0,0,3,0,4,2,1,4,1,2,0,3,4,3,2,1,5,2,0,1,1,0,1,4,1,4,2,1,1,2,2,1,3,2,3,3,3,2,2,2,1,1,2,2,0,1,4,3,3,1,3,3,5,3,3,0,2,2,2,1,5,2,3,2,4,3,0,2,0,1,2,1,3,2,1,3,0,0,0,2,3,0,1,2,1,2,1,0,3,1,3,3,2,4,1,2,3,3,1,1,3,2,4,3,0,2,0,3,1,0,2,1,4,2,4,2,3,2,1,1,0,2,2,0,1,1,2,1,5,1,0,3,1,1,3,3,1,0,0,2,1,1,3,1,2,3,0,1,0,2,2,0,3,0,1,5,4,1,1,0,3,3,0,2,1,3,3,1,4,1,3,1,1,3,2,2,7,3,2,5,2,2,4,2,2,2,3,2,3,0,2,0,2,5,1,2,3,1,1,2,1,3,4,1,3,1,0,1,2,4,3,0,2,2,2,2,1,1,2,1,2,1,1,1,2,4,2,5,3,0,3,0,3,5,0,1,3,2,2,1,2,2,1,1,2,1,3,1,3,1,0,0,1,0,1,2,1,1,4,1,1,2,0,0,1,0,1,2,2,1,3,2,0,1,3,3,1,3,5,0,2,1,2,2,1,2,3,0,1,2,0,1,0,3,1,1,3,1,3,2,1,2,1,1,1,2,1,2,2,3,5,2,2,0,1,1,4,3,0,1,3,2,3,2,1,1,2,1,1,0,2,2,2,3,1,0,1,2,0,0,2,4,0,1,0,1,2,3,0,2,2,0,1,1,1,0,0,1,2,1,4,2,2,1,1,1,0,2,2,0,4,0,2,0,1,3,1,1,1,2,2,2,2,2,1,0,2,0,1,2,1,3,3,0,1,0,1,1,1,2,0,1,2,4,2,0,2,1,2,0,2,2,0,0,2,1,2,3,1,2,1,3,0,1,0,2,0,1,0,1,2,0,1,1,1,1,0,4,2,2,0,2,1,0,1,1,1,0,2,0,1,0,2,0,1,1,1,2,3,0,2,1,0,2,1,0,1,0,2,1,3,1,1,1,1,2,0,0,0,4,0,1,2,0,1,2,1,1,1,0,0,1,0,1,0,3,1,1,2,0,1,3,3,0,1,2,2,1,1,3,2,1,1,0,1,1,2,1,2,3,1,1,2,1,2,2,1,2,2,0,1,0,2,0,1,0,1,2,2,2,3,0,1,2,0,0,1,2,1,0,1,0,2,4,1,1,2,3,0,2,1,3,1,0,1,0,1,1,0,1,0,0,2,1,0,0,0,0,2,2,3,2,1,2,0,0,1,0,2,2,2,0,1,1,0,0,1,0,1,2,1,0,3,1,1,3,1,2,0,0,1,2,1,0,0,0,0,2,1,2,3,1,1,1,1,2,1,2,1,2,0,3,1,1,2,3,0,2,0,2,0,3,0,2,2,2,1,2,1,1,0,1,1,0,1,2,3,1,2,2,1,1,1,0,1,1,3,0,0,0,2,0,3,0,2,1,1,5,0,0,0,1,1,0,0,2,3,1,0,1,0,1,2,3,0,0,1,0,0,0,1,2,2,1,1,1,0,0,1,3,0,1,1,0,0,0,1,2,0,0,1,3,1,0,2,0,3,3,0,1,1,0,1,0,1,0,1,1,2,1,1,1,0,1,2,1,2,1,3,2,3,0,1,1,0,2,0,2,2,1,2,2,1,0,1,0,1,1,3,2,0,1,0,1,0,1,1,1,0,1,1,1,2,0,1,0,0,1,0,2,1,4,0,2,1,0,1,0,1,0,1,1,1,2,2,0,1,3,1,1,0,0,0,1,2,2,0,0,1,2,3,1,2,2,1,0,1,1,1,0,2,4,1,4,0,2,1,0,0,2,0,3,1,0,1,1,2,2,0,1,0,0,0,3,2,2,1,0,3,1,0,0,0,1,1,0,0,2,1,0,2,0,0,1,0,1,1,0,0,0,0,1,0,2,0,0,1,2,1,2,3,0,1,1,0,2,1,0,1,2,0,2,3,0,0,1,0,1,1,1,1,1,1,3,1,0,1,0,1,1,0,0,0,1,1,0,0,1,1,4,1,3,2,0,0,2,0,1,2,1,1,1,3,1,1,0,2,0,3,2,3,2,2,2,1,1,2,3,3,0,3,5,0,3,1,0,2,1,0,0,3,0,1,2,0,1,1,2,0,0,1,0,0,0,1,0,0,2,1,2,0,1,0,1,0,0,1,0,1,2,0,0,1,1,2,1,1,0,0,0,2,1,1,4,0,0,0,0,1,0,1,0,1,2,0,1,0,2,1,2,0,1,1,0,3,0,1,1,1,0,0,1,0,0,2,0,0,0,2,0,0,1,1,1,0,0,0,3,1,1,1,2,1,0,0,1,1,0,1,1,1,0,0,2,0,1,1,1,1,3,0,1,1,0,0,0,2,3,1,1,0,0,1,2,1,0,3,0,0,0,1,0,2,0,2,2,3,0,2,0,0,1,2,2,0,1,2,0,0,0,2,1,0,1,1,2,0,0,0,1,1,2,1,0,3,2,1,0,1,2,0,0,0,1,2,3,1,0,0,1,1,1,0,1,1,1,2,0,0,2,0,1,1,1,0,0,2,0,1,0,0,1,0,1,2,2,0,0,1,0,2,0,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,2,0,0,0,1,0,1,2,1,0,1,0,0,0,0,0,1,0,0,0,0,2,0,0,0,1,0,0,0,2,1,1,1,2,1,1,0,1,0,2,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,3,0,0,0,1,1,0,0,4,2,0,0,0,2,2,0,0,2,2,1,1,1,0,0,0,0,1,0,0,0,0,1,0,2,0,0,1,0,0,1,2,0,0,1,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,2,0,2,0,1,2,1,1,2,0,0,1,0,0,1,2,1,2,1,2,1,0,1,0,0,2,1,0,0,0,0,2,0,1,1,0,0,1,0,0,0,0,1,0,0,1,2,0,1,2,1,2,0,1,0,1,0,0,0,0,0,0,1,0,0,4,1,0,0,2,5,0,1,1,1,1,1,0,1,2,1,2,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,2,1,0,0,0,1,3,3,1,0,0,1,2,0,0,1,0,0,2,0,0,2,3,1,1,1,1,0,1,0,0,1,0,1,2,0,2,2,2,2,2,1,0,1,0,2,0,1,2,1,0,0,2,0,1,1,1,0,2,0,0,0,1,0,1,1,2,0,1,0,0,0,1,0,0,0,0,3,1,2,0,1,0,0,0,0,2,0,0,1,1,1,0,1,0,1,1,2,2,2,1,1,0,1,4,1,0,0,0,0,0,3,1,1,1,4,0,0,0,2,2,0,0,0,0,1,1,1,0,0,1,1,2,0,0,0,0,0,1,0,0,0,0,1,1,1,0,2,0,0,3,0,0,0,2,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,3,1,1,1,0,0,0,1,1,2,1,0,0,0,3,1,1,0,1,1,0,1,2,1,1,0,3,0,1,0,0,1,1,2,0,0,3,0,1,1,0,0,2,1,2,1,1,1,1,0,1,0,1,1,0,1,0,3,0,3,0,0,1,0,1,1,2,1,0,0,1,4,1,0,2,0,2,0,0,0,0,0,0,0,0,1,1,0,1,1,1,2,1,0,2,1,0,1,0,0,0,0,0,0,0,0,1,1,0,0,2,0,1,0,0,1,0,0,0,0,4,0,1,0,0,2,1,1,0,0,2,1,0,1,2,0,1,0,1,1,0,0,0,2,2,3,0,1,0,1,0,0,0,0,0,1,1,1,2,1,0,2,0,1,0,1,0,3,1,1,1,1,1,1,0,0,2,0,0,1,1,3,0,0,0,0,1,3,0,2,0,0,0,0,2,1,1,1,1,1,2,1,0,0,1,0,1,2,0,2,0,0,0,0,0,1,0,0,0,2,0,0,0,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,3,0,0,2,1,1,0,1,0,1,0,0,1,0,1,0,0,0,2,0,0,0,1,0,1,2,0,0,0,0,0,0,0,2,1,1,1,0,1,0,1,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0,1,2,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,2,1,0,0,0,0,0,0,1,0,0,1,0,0,2,2,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,3,0,0,1,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,2,1,1,0,0,0,0,0,0,2,3,0,2,1,0,0,1,0,0,1,2,1,2,0,0,1,1,0,0,2,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,2,0,1,0,0,0,0,1,1,0,1,0,0,2,2,1,1,0,2,0,0,2,0,2,0,1,0,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,2,0,1,2,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,1,1,1,0,0,1,1,2,2,0,0,0,1,1,0,0,1,1,0,1,2,0,0,0,0,1,0,0,0,0,1,1,2,0,1,0,0,1,0,0,0,0,2,1,1,0,0,0,0,0,0,0,2,0,0,0,0,1,1,1,2,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,2,1,1,0,1,2,0,0,1,0,1,0,2,0,0,1,0,0,1,0,0,1,0,2,0,0,2,1,0,0,1,1,0,0,2,0,1,0,1,1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,3,1,0,1,0,1,0,0,2,1,0,1,0,1,0,0,1,0,0,2,1,0,1,1,0,1,0,0,1,0,2,0,1,0,2,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,3,0,2,0,1,0,0,0,0,0,1,2,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,2,0,0,0,0,0,1,0,0,1,0,1,2,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,2,0,0,0,0,1,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,2,0,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,2,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0,1,3,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,2,0,0,0,1,1,0,2,2,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,0,0,0,3,3,0,0,0,1,1,2,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,2,0,1,0,0,1,0,0,0,0,1,2,0,0,1,0,0,2,0,0,1,1,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0,2,0,0,0,0,0,1,0,1,2,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,2,0,0,0,0,0,1,0,0,2,0,0,1,1,1,0,0,0,0,0,2,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,1,2,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,1,0,0,0,0,1,0,2,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,2,0,0,0,1,2,1,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,2,0,1,0,0,3,0,0,0,1,0,1,1,1,1,0,0,0,0,1,0,0,0,1,2,0,0,0,2,0,0,0,1,0,2,0,0,2,1,0,0,2,0,1,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,3,0,1,2,1,0,0,1,0,0,0,0,0,1,2,0,0,2,0,1,1,0,0,0,2,1,0,0,0,0,0,2,1,2,0,1,0,1,1,0,1,2,0,0,1,0,0,2,0,0,2,0,0,0,0,0,2,0,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,2,0,1,0,2,1,0,0,1,1,2,0,1,0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,1,1,0,0,2,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0],"expected":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0002,0.0004,0.0007,0.0014,0.0026,0.0046,0.0079,0.0129,0.0201,0.0302,0.0437,0.0615,0.084,0.1119,0.1458,0.1861,0.2333,0.2875,0.3492,0.4184,0.495,0.5792,0.6706,0.7691,0.8747,0.9866,1.1045,1.2284,1.3575,1.4911,1.6294,1.7715,1.9167,2.0647,2.2154,2.3677,2.5213,2.6759,2.8315,2.9869,3.142,3.2963,3.4502,3.6027,3.7534,3.9021,4.0491,4.1938,4.3359,4.4751,4.6113,4.7451,4.8756,5.0028,5.1266,5.2468,5.3641,5.478,5.5882,5.6949,5.7982,5.8985,5.9963,6.0921,6.1875,6.2848,6.3883,6.5044,6.6418,6.8124,7.031,7.314,7.6773,8.1333,8.686,9.327,10.0328,10.764,11.4675,12.0833,12.5529,12.8288,12.8837,12.7129,12.275,11.7536,11.1351,10.4806,9.8445,9.2689,8.7799,8.3882,8.0916,7.8791,7.7352,7.6437,7.5893,7.5597,7.5457,7.5408,7.5406,7.5425,7.545,7.5475,7.5492,7.5502,7.5501,7.5492,7.5473,7.5446,7.541,7.5366,7.5315,7.5256,7.519,7.5117,7.5037,7.4952,7.486,7.4762,7.4659,7.4552,7.4439,7.4322,7.42,7.4074,7.3944,7.381,7.3673,7.3532,7.3388,7.3242,7.3092,7.294,7.2786,7.2629,7.2471,7.231,7.2148,7.1983,7.1818,7.1651,7.1484,7.1315,7.1145,7.0975,7.0804,7.0632,7.0461,7.0289,7.0117,6.9945,6.9773,6.9602,6.9431,6.926,6.9091,6.8922,6.8754,6.8587,6.8421,6.8256,6.8093,6.7931,6.7771,6.7613,6.7457,6.7303,6.7151,6.7001,6.6854,6.6709,6.6567,6.6428,6.6291,6.6158,6.6029,6.5905,6.5785,6.567,6.5558,6.545,6.5347,6.5248,6.5153,6.5064,6.4979,6.49,6.4826,6.4758,6.4696,6.4639,6.459,6.4547,6.4511,6.4482,6.4462,6.4449,6.4444,6.4448,6.4462,6.4486,6.4522,6.4572,6.4638,6.4727,6.4844,6.5001,6.5215,6.5508,6.591,6.646,6.7206,6.8202,6.9508,7.1182,7.3275,7.5816,7.881,8.2224,8.5977,8.9946,9.3961,9.7824,10.1319,10.4237,10.64,10.7681,10.8019,10.7428,10.5997,10.3874,10.1253,9.8348,9.5371,9.2513,8.9928,8.7726,8.5962,8.4617,8.3794,8.3403,8.3404,8.3762,8.4459,8.5516,8.7013,8.9129,9.2202,9.6809,10.3894,11.4932,13.2159,15.8834,19.9555,26.0565,35.0024,47.8147,65.7124,90.0723,122.3469,163.9351,216.0068,279.2907,353.848,438.8619,532.4811,631.7579,732.7122,830.5393,919.9581,995.669,1052.8706,1087.7646,1097.9771,1082.8299,1043.4196,982.4915,904.127,813.2955,715.3371,615.4506,518.2551,427.4709,345.7463,274.6286,214.6563,165.5384,126.3789,95.769,72.0267,54.5773,41.722,32.2691,25.313,20.1564,16.2865,13.3385,11.0618,9.2867,7.8986,6.8178,5.9865,5.3604,4.9046,4.5907,4.3966,4.3054,4.3059,4.3914,4.5591,4.8087,5.1408,5.5556,6.0504,6.6187,7.2486,7.922,8.6159,9.3006,9.9432,10.51,10.969,11.2929,11.4616,11.4644,11.3009,10.9816,10.526,9.9613,9.3195,8.6345,7.9391,7.2624,6.6286,6.0549,5.5523,5.1251,4.7724,4.4892,4.2674,4.0976,3.9699,3.8746,3.8032,3.7479,3.7024,3.6649,3.6322,3.6017,3.5726,3.5446,3.5176,3.4919,3.4679,3.4457,3.4257,3.4077,3.3919,3.378,3.3658,3.3552,3.3459,3.3376,3.3302,3.3233,3.3169,3.3109,3.305,3.2994,3.2939,3.2884,3.283,3.2776,3.2722,3.2668,3.2615,3.2561,3.2508,3.2455,3.2401,3.2348,3.2295,3.2242,3.2189,3.2135,3.2082,3.2029,3.1977,3.1924,3.1871,3.1818,3.1765,3.1713,3.1659,3.1606,3.1553,3.1499,3.1446,3.1393,3.134,3.1288,3.1235,3.1182,3.113,3.1077,3.1025,3.0972,3.092,3.0868,3.0816,3.0764,3.0712,3.0661,3.0609,3.0557,3.0506,3.0454,3.0403,3.0352,3.0301,3.025,3.0199,3.0148,3.0097,3.0047,2.9996,2.9945,2.9895,2.9845,2.9795,2.9744,2.9694,2.9645,2.9595,2.9545,2.9496,2.9446,2.9397,2.9348,2.9298,2.9249,2.92,2.9152,2.9103,2.9054,2.9006,2.8957,2.8909,2.8861,2.8813,2.8765,2.8717,2.8669,2.8622,2.8574,2.8527,2.848,2.8432,2.8385,2.8339,2.8292,2.8245,2.8199,2.8153,2.8107,2.8061,2.8015,2.797,2.7925,2.7879,2.7834,2.7789,2.7745,2.77,2.7655,2.761,2.7565,2.752,2.7475,2.743,2.7385,2.734,2.7295,2.725,2.7205,2.716,2.7115,2.707,2.7026,2.6982,2.6938,2.6895,2.6852,2.681,2.6769,2.673,2.6692,2.6658,2.6628,2.6603,2.6586,2.6578,2.6582,2.6603,2.6642,2.6705,2.6795,2.6917,2.7075,2.7271,2.7507,2.7783,2.8098,2.8448,2.8826,2.9222,2.9626,3.0024,3.04,3.074,3.1028,3.1251,3.1397,3.1457,3.1428,3.1309,3.1103,3.0819,3.0466,3.0059,2.9613,2.9145,2.8672,2.8209,2.7774,2.7383,2.7054,2.6807,2.6668,2.667,2.686,2.7303,2.8087,2.9332,3.1197,3.3888,3.7664,4.2847,4.9819,5.903,7.0982,8.6223,10.5324,12.8844,15.7296,19.1095,23.0508,27.5598,32.617,38.1731,44.1457,50.4186,56.8437,63.2443,69.4233,75.1717,80.2806,84.5531,87.8174,89.9379,90.8243,90.4385,88.7969,85.9695,82.0746,77.271,71.7468,65.7078,59.3642,52.9193,46.5589,40.4432,34.7015,29.4298,24.6903,20.5141,16.9045,13.8423,11.2914,9.2037,7.5246,6.1971,5.1651,4.3763,3.7835,3.3457,3.0284,2.8032,2.6475,2.5437,2.4786,2.4423,2.4278,2.4302,2.4463,2.4739,2.5113,2.5576,2.6116,2.6725,2.739,2.8098,2.8832,2.9571,3.0295,3.098,3.1601,3.2136,3.2564,3.2868,3.3033,3.3052,3.2923,3.2651,3.2244,3.1717,3.1089,3.0383,2.962,2.8826,2.8022,2.723,2.6466,2.5747,2.5082,2.4479,2.3941,2.3469,2.3062,2.2714,2.2422,2.218,2.1979,2.1816,2.1682,2.1574,2.1485,2.1412,2.1351,2.1299,2.1254,2.1214,2.1178,2.1145,2.1113,2.1084,2.1055,2.1027,2.1,2.0973,2.0946,2.092,2.0894,2.0868,2.0843,2.0817,2.0791,2.0765,2.0739,2.0712,2.0685,2.0658,2.0631,2.0603,2.0575,2.0546,2.0517,2.0488,2.0459,2.043,2.04,2.0371,2.0342,2.0313,2.0284,2.0256,2.0227,2.0199,2.0171,2.0144,2.0116,2.0089,2.0062,2.0035,2.0009,1.9983,1.9956,1.993,1.9904,1.9878,1.9852,1.9827,1.9801,1.9775,1.975,1.9724,1.9699,1.9673,1.9648,1.9623,1.9598,1.9573,1.9548,1.9523,1.9498,1.9473,1.9448,1.9423,1.9399,1.9374,1.9349,1.9325,1.93,1.9276,1.9251,1.9227,1.9203,1.9179,1.9155,1.913,1.9106,1.9082,1.9059,1.9035,1.9011,1.8987,1.8963,1.894,1.8916,1.8893,1.8869,1.8846,1.8822,1.8799,1.8776,1.8752,1.8729,1.8706,1.8683,1.866,1.8637,1.8614,1.8591,1.8568,1.8546,1.8523,1.85,1.8478,1.8455,1.8433,1.841,1.8388,1.8365,1.8343,1.8321,1.8299,1.8277,1.8254,1.8232,1.821,1.8188,1.8166,1.8145,1.8123,1.8101,1.8079,1.8058,1.8036,1.8014,1.7993,1.7971,1.795,1.7929,1.7907,1.7886,1.7865,1.7844,1.7822,1.7801,1.778,1.7759,1.7738,1.7717,1.7696,1.7676,1.7655,1.7634,1.7613,1.7593,1.7572,1.7552,1.7531,1.7511,1.749,1.747,1.7449,1.7429,1.7409,1.7389,1.7368,1.7348,1.7328,1.7308,1.7288,1.7268,1.7248,1.7228,1.7209,1.7189,1.7169,1.7149,1.713,1.711,1.7091,1.7071,1.7052,1.7032,1.7013,1.6993,1.6974,1.6955,1.6935,1.6916,1.6897,1.6878,1.6859,1.684,1.6821,1.6802,1.6783,1.6764,1.6745,1.6726,1.6708,1.6689,1.667,1.6652,1.6633,1.6614,1.6596,1.6577,1.6559,1.6541,1.6522,1.6504,1.6485,1.6467,1.6449,1.6431,1.6413,1.6395,1.6376,1.6358,1.634,1.6322,1.6305,1.6287,1.6269,1.6251,1.6233,1.6215,1.6198,1.618,1.6162,1.6145,1.6127,1.611,1.6092,1.6075,1.6057,1.604,1.6023,1.6005,1.5988,1.5971,1.5954,1.5936,1.5919,1.5902,1.5885,1.5868,1.5851,1.5834,1.5817,1.58,1.5783,1.5766,1.575,1.5733,1.5716,1.5699,1.5683,1.5666,1.565,1.5633,1.5616,1.56,1.5584,1.5567,1.5551,1.5534,1.5518,1.5502,1.5485,1.5469,1.5453,1.5437,1.5421,1.5404,1.5388,1.5372,1.5356,1.534,1.5324,1.5308,1.5293,1.5277,1.5261,1.5245,1.5229,1.5214,1.5198,1.5182,1.5166,1.5151,1.5135,1.512,1.5104,1.5089,1.5073,1.5058,1.5042,1.5027,1.5012,1.4996,1.4981,1.4966,1.4951,1.4935,1.492,1.4905,1.489,1.4875,1.486,1.4845,1.483,1.4815,1.48,1.4785,1.477,1.4755,1.474,1.4725,1.4711,1.4696,1.4681,1.4667,1.4652,1.4637,1.4623,1.4608,1.4594,1.4579,1.4564,1.455,1.4536,1.4521,1.4507,1.4492,1.4478,1.4464,1.4449,1.4435,1.4421,1.4407,1.4393,1.4378,1.4364,1.435,1.4336,1.4322,1.4308,1.4294,1.428,1.4266,1.4252,1.4238,1.4225,1.4211,1.4197,1.4183,1.4169,1.4156,1.4142,1.4128,1.4115,1.4101,1.4087,1.4074,1.406,1.4047,1.4033,1.402,1.4006,1.3993,1.3979,1.3966,1.3952,1.3939,1.3926,1.3913,1.3899,1.3886,1.3873,1.386,1.3846,1.3833,1.382,1.3807,1.3794,1.3781,1.3768,1.3755,1.3742,1.3729,1.3716,1.3703,1.369,1.3677,1.3664,1.3652,1.3639,1.3626,1.3613,1.3601,1.3588,1.3575,1.3562,1.355,1.3537,1.3525,1.3512,1.3499,1.3487,1.3474,1.3462,1.3449,1.3437,1.3425,1.3412,1.34,1.3387,1.3375,1.3363,1.3351,1.3338,1.3326,1.3314,1.3302,1.3289,1.3277,1.3265,1.3253,1.3241,1.3229,1.3217,1.3205,1.3193,1.3181,1.3169,1.3157,1.3145,1.3133,1.3121,1.3109,1.3097,1.3085,1.3074,1.3062,1.305,1.3038,1.3027,1.3015,1.3003,1.2991,1.298,1.2968,1.2957,1.2945,1.2933,1.2922,1.291,1.2899,1.2887,1.2876,1.2864,1.2853,1.2841,1.283,1.2819,1.2807,1.2796,1.2785,1.2773,1.2762,1.2751,1.274,1.2728,1.2717,1.2706,1.2695,1.2684,1.2672,1.2661,1.265,1.2639,1.2628,1.2617,1.2606,1.2595,1.2584,1.2573,1.2562,1.2551,1.254,1.2529,1.2519,1.2508,1.2497,1.2486,1.2475,1.2464,1.2454,1.2443,1.2432,1.2421,1.2411,1.24,1.2389,1.2379,1.2368,1.2357,1.2347,1.2336,1.2326,1.2315,1.2305,1.2294,1.2284,1.2273,1.2263,1.2252,1.2242,1.2231,1.2221,1.2211,1.22,1.219,1.218,1.2169,1.2159,1.2149,1.2139,1.2128,1.2118,1.2108,1.2098,1.2088,1.2077,1.2067,1.2057,1.2047,1.2037,1.2027,1.2017,1.2007,1.1997,1.1987,1.1977,1.1967,1.1957,1.1947,1.1937,1.1927,1.1917,1.1907,1.1897,1.1887,1.1878,1.1868,1.1858,1.1848,1.1839,1.1829,1.1819,1.181,1.18,1.179,1.1781,1.1772,1.1762,1.1753,1.1744,1.1734,1.1725,1.1717,1.1708,1.1699,1.169,1.1682,1.1673,1.1665,1.1657,1.1649,1.1641,1.1632,1.1624,1.1616,1.1608,1.16,1.1592,1.1584,1.1576,1.1567,1.1559,1.155,1.1541,1.1532,1.1523,1.1513,1.1504,1.1494,1.1484,1.1474,1.1463,1.1453,1.1442,1.1432,1.1421,1.1411,1.14,1.139,1.138,1.1369,1.1359,1.1349,1.1339,1.1329,1.1319,1.1309,1.13,1.129,1.1281,1.1272,1.1262,1.1253,1.1244,1.1235,1.1226,1.1217,1.1208,1.1199,1.119,1.1181,1.1173,1.1164,1.1155,1.1146,1.1138,1.1129,1.112,1.1112,1.1103,1.1094,1.1086,1.1077,1.1068,1.106,1.1051,1.1043,1.1034,1.1026,1.1017,1.1009,1.1,1.0992,1.0983,1.0975,1.0966,1.0958,1.0949,1.0941,1.0933,1.0924,1.0916,1.0907,1.0899,1.0891,1.0882,1.0874,1.0866,1.0857,1.0849,1.0841,1.0833,1.0824,1.0816,1.0808,1.08,1.0792,1.0783,1.0775,1.0767,1.0759,1.0751,1.0743,1.0735,1.0726,1.0718,1.071,1.0702,1.0694,1.0686,1.0678,1.067,1.0662,1.0654,1.0646,1.0638,1.063,1.0622,1.0614,1.0606,1.0598,1.059,1.0583,1.0575,1.0567,1.0559,1.0551,1.0543,1.0535,1.0528,1.052,1.0512,1.0504,1.0496,1.0489,1.0481,1.0473,1.0465,1.0458,1.045,1.0442,1.0435,1.0427,1.0419,1.0412,1.0404,1.0396,1.0389,1.0381,1.0374,1.0366,1.0358,1.0351,1.0343,1.0336,1.0328,1.0321,1.0313,1.0306,1.0298,1.0291,1.0284,1.0276,1.0269,1.0261,1.0254,1.0247,1.0239,1.0232,1.0225,1.0218,1.021,1.0203,1.0196,1.0189,1.0182,1.0174,1.0167,1.016,1.0153,1.0146,1.0139,1.0131,1.0124,1.0117,1.011,1.0103,1.0095,1.0088,1.0081,1.0074,1.0066,1.0059,1.0052,1.0045,1.0037,1.003,1.0023,1.0015,1.0008,1.0001,0.9994,0.9987,0.9979,0.9972,0.9965,0.9958,0.9951,0.9944,0.9937,0.993,0.9923,0.9916,0.9909,0.9902,0.9895,0.9888,0.9881,0.9874,0.9867,0.986,0.9853,0.9846,0.9839,0.9832,0.9826,0.9819,0.9812,0.9805,0.9798,0.9791,0.9785,0.9778,0.9771,0.9764,0.9758,0.9751,0.9744,0.9737,0.9731,0.9724,0.9717,0.971,0.9704,0.9697,0.969,0.9684,0.9677,0.967,0.9664,0.9657,0.9651,0.9644,0.9637,0.9631,0.9624,0.9618,0.9611,0.9604,0.9598,0.9591,0.9585,0.9578,0.9572,0.9565,0.9559,0.9552,0.9546,0.9539,0.9533,0.9526,0.952,0.9513,0.9507,0.9501,0.9494,0.9488,0.9481,0.9475,0.9469,0.9462,0.9456,0.9449,0.9443,0.9437,0.943,0.9424,0.9418,0.9411,0.9405,0.9399,0.9393,0.9386,0.938,0.9374,0.9368,0.9361,0.9355,0.9349,0.9343,0.9336,0.933,0.9324,0.9318,0.9312,0.9306,0.93,0.9294,0.9288,0.9282,0.9277,0.9272,0.9267,0.9262,0.9258,0.9255,0.9252,0.9251,0.9251,0.9253,0.9257,0.9264,0.9274,0.9288,0.9307,0.9332,0.9364,0.9404,0.9454,0.9515,0.9589,0.9678,0.9784,0.9908,1.0053,1.0221,1.0412,1.0631,1.0877,1.1151,1.1456,1.1791,1.2156,1.255,1.2971,1.3418,1.3888,1.4376,1.4879,1.539,1.5904,1.6415,1.6916,1.7399,1.7857,1.8283,1.867,1.901,1.9299,1.9531,1.9701,1.9807,1.9845,1.9817,1.9721,1.9559,1.9335,1.9053,1.8717,1.8333,1.7907,1.7447,1.696,1.6452,1.5932,1.5407,1.4882,1.4365,1.386,1.3373,1.2906,1.2465,1.205,1.1665,1.1309,1.0983,1.0687,1.042,1.0182,0.997,0.9784,0.962,0.9478,0.9355,0.925,0.916,0.9083,0.9018,0.8963,0.8917,0.8879,0.8846,0.8819,0.8796,0.8777,0.8761,0.8747,0.8735,0.8724,0.8715,0.8706,0.8699,0.8691,0.8685,0.8678,0.8672,0.8666,0.8661,0.8655,0.8649,0.8644,0.8638,0.8633,0.8628,0.8622,0.8617,0.8611,0.8606,0.8601,0.8596,0.859,0.8585,0.858,0.8574,0.8569,0.8564,0.8558,0.8553,0.8548,0.8543,0.8537,0.8532,0.8527,0.8522,0.8517,0.8511,0.8506,0.8501,0.8496,0.8491,0.8485,0.848,0.8475,0.847,0.8465,0.846,0.8454,0.8449,0.8444,0.8439,0.8434,0.8429,0.8424,0.8419,0.8413,0.8408,0.8403,0.8398,0.8393,0.8388,0.8383,0.8378,0.8373,0.8368,0.8363,0.8358,0.8353,0.8348,0.8343,0.8338,0.8333,0.8328,0.8323,0.8319,0.8314,0.8309,0.8305,0.8301,0.8297,0.8293,0.8289,0.8286,0.8283,0.8281,0.8279,0.8278,0.8278,0.8279,0.8281,0.8284,0.8289,0.8295,0.8304,0.8314,0.8327,0.8342,0.836,0.8382,0.8406,0.8433,0.8464,0.8499,0.8537,0.8578,0.8623,0.867,0.8721,0.8774,0.8829,0.8885,0.8942,0.9,0.9057,0.9113,0.9167,0.9219,0.9266,0.931,0.9348,0.938,0.9406,0.9425,0.9437,0.9441,0.9438,0.9427,0.9408,0.9382,0.9348,0.9308,0.9263,0.9212,0.9156,0.9096,0.9034,0.8969,0.8902,0.8835,0.8768,0.8702,0.8637,0.8574,0.8513,0.8455,0.84,0.8348,0.83,0.8255,0.8214,0.8176,0.8141,0.8109,0.8081,0.8055,0.8032,0.8011,0.7993,0.7976,0.7962,0.7948,0.7937,0.7926,0.7916,0.7908,0.79,0.7892,0.7886,0.7879,0.7873,0.7868,0.7862,0.7857,0.7852,0.7847,0.7842,0.7838,0.7833,0.7829,0.7824,0.7819,0.7815,0.781,0.7806,0.7802,0.7797,0.7793,0.7788,0.7784,0.778,0.7775,0.7771,0.7766,0.7762,0.7758,0.7753,0.7749,0.7745,0.774,0.7736,0.7731,0.7727,0.7723,0.7718,0.7714,0.771,0.7706,0.7701,0.7697,0.7693,0.7688,0.7684,0.768,0.7675,0.7671,0.7667,0.7663,0.7658,0.7654,0.765,0.7646,0.7641,0.7637,0.7633,0.7629,0.7624,0.762,0.7616,0.7612,0.7608,0.7603,0.7599,0.7595,0.7591,0.7587,0.7582,0.7578,0.7574,0.757,0.7566,0.7562,0.7557,0.7553,0.7549,0.7545,0.7541,0.7537,0.7532,0.7528,0.7524,0.752,0.7516,0.7512,0.7508,0.7504,0.75,0.7495,0.7491,0.7487,0.7483,0.7479,0.7475,0.7471,0.7467,0.7463,0.7459,0.7455,0.7451,0.7447,0.7443,0.7439,0.7435,0.7431,0.7427,0.7422,0.7418,0.7414,0.741,0.7406,0.7402,0.7398,0.7394,0.739,0.7386,0.7383,0.7379,0.7375,0.7371,0.7367,0.7363,0.7359,0.7355,0.7351,0.7347,0.7343,0.7339,0.7335,0.7331,0.7327,0.7323,0.7319,0.7315,0.7312,0.7308,0.7304,0.73,0.7296,0.7292,0.7288,0.7284,0.728,0.7277,0.7273,0.7269,0.7265,0.7261,0.7257,0.7253,0.725,0.7246,0.7242,0.7238,0.7234,0.723,0.7227,0.7223,0.7219,0.7215,0.7211,0.7208,0.7204,0.72,0.7196,0.7192,0.7189,0.7185,0.7181,0.7177,0.7174,0.717,0.7166,0.7162,0.7159,0.7155,0.7151,0.7147,0.7144,0.714,0.7136,0.7132,0.7129,0.7125,0.7121,0.7117,0.7114,0.711,0.7106,0.7103,0.7099,0.7095,0.7092,0.7088,0.7084,0.7081,0.7077,0.7073,0.707,0.7066,0.7062,0.7059,0.7055,0.7051,0.7048,0.7044,0.704,0.7037,0.7033,0.7029,0.7026,0.7022,0.7019,0.7015,0.7011,0.7008,0.7004,0.7001,0.6997,0.6993,0.699,0.6986,0.6983,0.6979,0.6975,0.6972,0.6968,0.6965,0.6961,0.6958,0.6954,0.6951,0.6947,0.6943,0.694,0.6936,0.6933,0.6929,0.6926,0.6922,0.6919,0.6915,0.6912,0.6908,0.6905,0.6901,0.6898,0.6894,0.6891,0.6887,0.6884,0.688,0.6877,0.6873,0.687,0.6866,0.6863,0.6859,0.6856,0.6853,0.6849,0.6846,0.6842,0.6839,0.6835,0.6832,0.6828,0.6825,0.6822,0.6818,0.6815,0.6811,0.6808,0.6804,0.6801,0.6798,0.6794,0.6791,0.6787,0.6784,0.6781,0.6777,0.6774,0.6771,0.6767,0.6764,0.676,0.6757,0.6754,0.675,0.6747,0.6744,0.674,0.6737,0.6734,0.673,0.6727,0.6724,0.672,0.6717,0.6714,0.671,0.6707,0.6704,0.67,0.6697,0.6694,0.669,0.6687,0.6684,0.6681,0.6677,0.6674,0.6671,0.6667,0.6664,0.6661,0.6658,0.6654,0.6651,0.6648,0.6644,0.6641,0.6638,0.6635,0.6631,0.6628,0.6625,0.6622,0.6619,0.6615,0.6612,0.6609,0.6606,0.6602,0.6599,0.6596,0.6593,0.659,0.6586,0.6583,0.658,0.6577,0.6574,0.657,0.6567,0.6564,0.6561,0.6558,0.6554,0.6551,0.6548,0.6545,0.6542,0.6539,0.6535,0.6532,0.6529,0.6526,0.6523,0.652,0.6516,0.6513,0.651,0.6507,0.6504,0.6501,0.6498,0.6495,0.6491,0.6488,0.6485,0.6482,0.6479,0.6476,0.6473,0.647,0.6467,0.6463,0.646,0.6457,0.6454,0.6451,0.6448,0.6445,0.6442,0.6439,0.6436,0.6433,0.643,0.6427,0.6424,0.642,0.6417,0.6414,0.6411,0.6408,0.6405,0.6402,0.6399,0.6396,0.6393,0.639,0.6387,0.6384,0.6381,0.6378,0.6375,0.6372,0.6369,0.6366,0.6363,0.636,0.6357,0.6354,0.6351,0.6348,0.6345,0.6342,0.6339,0.6336,0.6333,0.633,0.6327,0.6324,0.6321,0.6318,0.6315,0.6312,0.6309,0.6306,0.6303,0.63,0.6297,0.6294,0.6292,0.6289,0.6286,0.6283,0.628,0.6277,0.6274,0.6271,0.6268,0.6265,0.6262,0.6259,0.6256,0.6254,0.6251,0.6248,0.6245,0.6242,0.6239,0.6236,0.6233,0.623,0.6227,0.6225,0.6222,0.6219,0.6216,0.6213,0.621,0.6207,0.6204,0.6202,0.6199,0.6196,0.6193,0.619,0.6187,0.6184,0.6182,0.6179,0.6176,0.6173,0.617,0.6167,0.6165,0.6162,0.6159,0.6156,0.6153,0.615,0.6148,0.6145,0.6142,0.6139,0.6136,0.6134,0.6131,0.6128,0.6125,0.6122,0.612,0.6117,0.6114,0.6111,0.6108,0.6106,0.6103,0.61,0.6097,0.6095,0.6092,0.6089,0.6086,0.6084,0.6081,0.6078,0.6075,0.6073,0.607,0.6067,0.6064,0.6062,0.6059,0.6056,0.6053,0.6051,0.6048,0.6045,0.6042,0.604,0.6037,0.6034,0.6031,0.6029,0.6026,0.6023,0.6021,0.6018,0.6015,0.6013,0.601,0.6007,0.6004,0.6002,0.5999,0.5996,0.5994,0.5991,0.5988,0.5986,0.5983,0.598,0.5978,0.5975,0.5972,0.597,0.5967,0.5964,0.5962,0.5959,0.5956,0.5954,0.5951,0.5948,0.5946,0.5943,0.594,0.5938,0.5935,0.5932,0.593,0.5927,0.5925,0.5922,0.5919,0.5917,0.5914,0.5911,0.5909,0.5906,0.5904,0.5901,0.5898,0.5896,0.5893,0.5891,0.5888,0.5885,0.5883,0.588,0.5878,0.5875,0.5872,0.587,0.5867,0.5865,0.5862,0.586,0.5857,0.5854,0.5852,0.5849,0.5847,0.5844,0.5842,0.5839,0.5836,0.5834,0.5831,0.5829,0.5826,0.5824,0.5821,0.5819,0.5816,0.5814,0.5811,0.5809,0.5806,0.5803,0.5801,0.5798,0.5796,0.5793,0.5791,0.5788,0.5786,0.5783,0.5781,0.5778,0.5776,0.5773,0.5771,0.5768,0.5766,0.5763,0.5761,0.5758,0.5756,0.5753,0.5751,0.5748,0.5746,0.5743,0.5741,0.5738,0.5736,0.5733,0.5731,0.5728,0.5726,0.5724,0.5721,0.5719,0.5716,0.5714,0.5711,0.5709,0.5706,0.5704,0.5701,0.5699,0.5697,0.5694,0.5692,0.5689,0.5687,0.5684,0.5682,0.568,0.5677,0.5675,0.5672,0.567,0.5667,0.5665,0.5663,0.566,0.5658,0.5655,0.5653,0.565,0.5648,0.5646,0.5643,0.5641,0.5638,0.5636,0.5634,0.5631,0.5629,0.5627,0.5624,0.5622,0.5619,0.5617,0.5615,0.5612,0.561,0.5607,0.5605,0.5603,0.56,0.5598,0.5596,0.5593,0.5591,0.5589,0.5586,0.5584,0.5581,0.5579,0.5577,0.5574,0.5572,0.557,0.5567,0.5565,0.5563,0.556,0.5558,0.5556,0.5553,0.5551,0.5549,0.5546,0.5544,0.5542,0.5539,0.5537,0.5535,0.5532,0.553,0.5528,0.5526,0.5523,0.5521,0.5519,0.5516,0.5514,0.5512,0.5509,0.5507,0.5505,0.5502,0.55,0.5498,0.5496,0.5493,0.5491,0.5489,0.5486,0.5484,0.5482,0.548,0.5477,0.5475,0.5473,0.5471,0.5468,0.5466,0.5464,0.5461,0.5459,0.5457,0.5455,0.5452,0.545,0.5448,0.5446,0.5443,0.5441,0.5439,0.5437,0.5434,0.5432,0.543,0.5428,0.5426,0.5423,0.5421,0.5419,0.5417,0.5414,0.5412,0.541,0.5408,0.5405,0.5403,0.5401,0.5399,0.5397,0.5394,0.5392,0.539,0.5388,0.5386,0.5383,0.5381,0.5379,0.5377,0.5375,0.5372,0.537,0.5368,0.5366,0.5364,0.5361,0.5359,0.5357,0.5355,0.5353,0.535,0.5348,0.5346,0.5344,0.5342,0.534,0.5337,0.5335,0.5333,0.5331,0.5329,0.5327,0.5324,0.5322,0.532,0.5318,0.5316,0.5314,0.5311,0.5309,0.5307,0.5305,0.5303,0.5301,0.5299,0.5296,0.5294,0.5292,0.529,0.5288,0.5286,0.5284,0.5281,0.5279,0.5277,0.5275,0.5273,0.5271,0.5269,0.5267,0.5264,0.5262,0.526,0.5258,0.5256,0.5254,0.5252,0.525,0.5248,0.5245,0.5243,0.5241,0.5239,0.5237,0.5235,0.5233,0.5231,0.5229,0.5227,0.5224,0.5222,0.522,0.5218,0.5216,0.5214,0.5212,0.521,0.5208,0.5206,0.5204,0.5202,0.5199,0.5197,0.5195,0.5193,0.5191,0.5189,0.5187,0.5185,0.5183,0.5181,0.5179,0.5177,0.5175,0.5173,0.5171,0.5168,0.5166,0.5164,0.5162,0.516,0.5158,0.5156,0.5154,0.5152,0.515,0.5148,0.5146,0.5144,0.5142,0.514,0.5138,0.5136,0.5134,0.5132,0.513,0.5128,0.5126,0.5124,0.5122,0.512,0.5118,0.5116,0.5114,0.5111,0.5109,0.5107,0.5105,0.5103,0.5101,0.5099,0.5097,0.5095,0.5093,0.5091,0.5089,0.5087,0.5085,0.5083,0.5081,0.5079,0.5077,0.5075,0.5073,0.5071,0.5069,0.5067,0.5065,0.5063,0.5061,0.506,0.5058,0.5056,0.5054,0.5052,0.505,0.5048,0.5046,0.5044,0.5042,0.504,0.5038,0.5036,0.5034,0.5032,0.503,0.5028,0.5026,0.5024,0.5022,0.502,0.5018,0.5016,0.5014,0.5012,0.501,0.5008,0.5006,0.5004,0.5003,0.5001,0.4999,0.4997,0.4995,0.4993,0.4991,0.4989,0.4987,0.4985,0.4983,0.4981,0.4979,0.4977,0.4975,0.4973,0.4972,0.497,0.4968,0.4966,0.4964,0.4962,0.496,0.4958,0.4956,0.4954,0.4952,0.495,0.4948,0.4947,0.4945,0.4943,0.4941,0.4939,0.4937,0.4935,0.4933,0.4931,0.4929,0.4928,0.4926,0.4924,0.4922,0.492,0.4918,0.4916,0.4914,0.4912,0.491,0.4909,0.4907,0.4905,0.4903,0.4901,0.4899,0.4897,0.4895,0.4893,0.4892,0.489,0.4888,0.4886,0.4884,0.4882,0.488,0.4878,0.4877,0.4875,0.4873,0.4871,0.4869,0.4867,0.4865,0.4863,0.4862,0.486,0.4858,0.4856,0.4854,0.4852,0.485,0.4849,0.4847,0.4845,0.4843,0.4841,0.4839,0.4837,0.4836,0.4834,0.4832,0.483,0.4828,0.4826,0.4825,0.4823,0.4821,0.4819,0.4817,0.4815,0.4814,0.4812,0.481,0.4808,0.4806,0.4804,0.4803,0.4801,0.4799,0.4797,0.4795,0.4793,0.4792,0.479,0.4788,0.4786,0.4784,0.4782,0.4781,0.4779,0.4777,0.4775,0.4773,0.4772,0.477,0.4768,0.4766,0.4764,0.4762,0.4761,0.4759,0.4757,0.4755,0.4753,0.4752,0.475,0.4748,0.4746,0.4744,0.4743,0.4741,0.4739,0.4737,0.4735,0.4734,0.4732,0.473,0.4728,0.4726,0.4725,0.4723,0.4721,0.4719,0.4718,0.4716,0.4714,0.4712,0.471,0.4709,0.4707,0.4705,0.4703,0.4701,0.47,0.4698,0.4696,0.4694,0.4693,0.4691,0.4689,0.4687,0.4686,0.4684,0.4682,0.468,0.4678,0.4677,0.4675,0.4673,0.4671,0.467,0.4668,0.4666,0.4664,0.4663,0.4661,0.4659,0.4657,0.4656,0.4654,0.4652,0.465,0.4648,0.4647,0.4645,0.4643,0.4641,0.464,0.4638,0.4636,0.4634,0.4633,0.4631,0.4629,0.4628,0.4626,0.4624,0.4622,0.4621,0.4619,0.4617,0.4615,0.4614,0.4612,0.461,0.4608,0.4607,0.4605,0.4603,0.4601,0.46,0.4598,0.4596,0.4595,0.4593,0.4591,0.4589,0.4588,0.4586,0.4584,0.4582,0.4581,0.4579,0.4577,0.4576,0.4574,0.4572,0.457,0.4569,0.4567,0.4565,0.4564,0.4562,0.456,0.4558,0.4557,0.4555,0.4553,0.4552,0.455,0.4548,0.4546,0.4545,0.4543,0.4541,0.454,0.4538,0.4536,0.4534,0.4533,0.4531,0.4529,0.4528,0.4526,0.4524,0.4523,0.4521,0.4519,0.4517,0.4516,0.4514,0.4512,0.4511,0.4509,0.4507,0.4506,0.4504,0.4502,0.4501,0.4499,0.4497,0.4495,0.4494,0.4492,0.449,0.4489,0.4487,0.4485,0.4484,0.4482,0.448,0.4479,0.4477,0.4475,0.4474,0.4472,0.447,0.4469,0.4467,0.4465,0.4464,0.4462,0.446,0.4459,0.4457,0.4455,0.4454,0.4452,0.445,0.4449,0.4447,0.4445,0.4444,0.4442,0.444,0.4439,0.4437,0.4435,0.4434,0.4432,0.443,0.4429,0.4427,0.4425,0.4424,0.4422,0.442,0.4419,0.4417,0.4415,0.4414,0.4412,0.441,0.4409,0.4407,0.4405,0.4404,0.4402,0.44,0.4399,0.4397,0.4395,0.4394,0.4392,0.439,0.4389,0.4387,0.4386,0.4384,0.4382,0.4381,0.4379,0.4377,0.4376,0.4374,0.4372,0.4371,0.4369,0.4367,0.4366,0.4364,0.4363,0.4361,0.4359,0.4358,0.4356,0.4354,0.4353,0.4351,0.4349,0.4348,0.4346,0.4345,0.4343,0.4341,0.434,0.4338,0.4336,0.4335,0.4333,0.4331,0.433,0.4328,0.4327,0.4325,0.4323,0.4322,0.432,0.4318,0.4317,0.4315,0.4314,0.4312,0.431,0.4309,0.4307,0.4305,0.4304,0.4302,0.4301,0.4299,0.4297,0.4296,0.4294,0.4293,0.4291,0.4289,0.4288,0.4286,0.4284,0.4283,0.4281,0.428,0.4278,0.4276,0.4275,0.4273,0.4272,0.427,0.4268,0.4267,0.4265,0.4264,0.4262,0.426,0.4259,0.4257,0.4256,0.4254,0.4252,0.4251,0.4249,0.4247,0.4246,0.4244,0.4243,0.4241,0.4239,0.4238,0.4236,0.4235,0.4233,0.4231,0.423,0.4228,0.4227,0.4225,0.4223,0.4222,0.422,0.4219,0.4217,0.4216,0.4214,0.4212,0.4211,0.4209,0.4208,0.4206,0.4204,0.4203,0.4201,0.42,0.4198,0.4196,0.4195,0.4193,0.4192,0.419,0.4188,0.4187,0.4185,0.4184,0.4182,0.4181,0.4179,0.4177,0.4176,0.4174,0.4173,0.4171,0.4169,0.4168,0.4166,0.4165,0.4163,0.4162,0.416,0.4158,0.4157,0.4155,0.4154,0.4152,0.4151,0.4149,0.4147,0.4146,0.4144,0.4143,0.4141,0.4139,0.4138,0.4136,0.4135,0.4133,0.4132,0.413,0.4128,0.4127,0.4125,0.4124,0.4122,0.4121,0.4119,0.4117,0.4116,0.4114,0.4113,0.4111,0.411,0.4108,0.4107,0.4105,0.4103,0.4102,0.41,0.4099,0.4097,0.4096,0.4094,0.4092,0.4091,0.4089,0.4088,0.4086,0.4085,0.4083,0.4081,0.408,0.4078,0.4077,0.4075,0.4074,0.4072,0.4071,0.4069,0.4067,0.4066,0.4064,0.4063,0.4061,0.406,0.4058,0.4057,0.4055,0.4053,0.4052,0.405,0.4049,0.4047,0.4046,0.4044,0.4043,0.4041,0.4039,0.4038,0.4036,0.4035,0.4033,0.4032,0.403,0.4029,0.4027,0.4026,0.4024,0.4022,0.4021,0.4019,0.4018,0.4016,0.4015,0.4013,0.4012,0.401,0.4008,0.4007,0.4005,0.4004,0.4002,0.4001,0.3999,0.3998,0.3996,0.3995,0.3993,0.3992,0.399,0.3988,0.3987,0.3985,0.3984,0.3982,0.3981,0.3979,0.3978,0.3976,0.3975,0.3973,0.3972,0.397,0.3968,0.3967,0.3965,0.3964,0.3962,0.3961,0.3959,0.3958,0.3956,0.3955,0.3953,0.3952,0.395,0.3948,0.3947,0.3945,0.3944,0.3942,0.3941,0.3939,0.3938,0.3936,0.3935,0.3933,0.3932,0.393,0.3929,0.3927,0.3925,0.3924,0.3922,0.3921,0.3919,0.3918,0.3916,0.3915,0.3913,0.3912,0.391,0.3909,0.3907,0.3906,0.3904,0.3903,0.3901,0.39,0.3898,0.3896,0.3895,0.3893,0.3892,0.389,0.3889,0.3887,0.3886,0.3884,0.3883,0.3881,0.388,0.3878,0.3877,0.3875,0.3874,0.3872,0.3871,0.3869,0.3868,0.3866,0.3865,0.3863,0.3862,0.386,0.3858,0.3857,0.3855,0.3854,0.3852,0.3851,0.3849,0.3848,0.3846,0.3845,0.3843,0.3842,0.384,0.3839,0.3837,0.3836,0.3834,0.3833,0.3831,0.383,0.3828,0.3827,0.3825,0.3824,0.3822,0.3821,0.3819,0.3818,0.3816,0.3815,0.3813,0.3812,0.381,0.3809,0.3807,0.3806,0.3804,0.3802,0.3801,0.3799,0.3798,0.3796,0.3795,0.3793,0.3792,0.379,0.3789,0.3787,0.3786,0.3784,0.3783,0.3781,0.378,0.3778,0.3777,0.3775,0.3774,0.3772,0.3771,0.3769,0.3768,0.3766,0.3765,0.3763,0.3762,0.376,0.3759,0.3757,0.3756,0.3754,0.3753,0.3751,0.375,0.3748,0.3747,0.3745,0.3744,0.3742,0.3741,0.3739,0.3738,0.3736,0.3735,0.3733,0.3732,0.373,0.3729,0.3727,0.3726,0.3724,0.3723,0.3721,0.372,0.3718,0.3717,0.3715,0.3714,0.3712,0.3711,0.3709,0.3708,0.3706,0.3705,0.3703,0.3702,0.37,0.3699,0.3697,0.3696,0.3695,0.3693,0.3692,0.369,0.3689,0.3687,0.3686,0.3684,0.3683,0.3681,0.368,0.3678,0.3677,0.3675,0.3674,0.3672,0.3671,0.3669,0.3668,0.3666,0.3665,0.3663,0.3662,0.366,0.3659,0.3657,0.3656,0.3654,0.3653,0.3651,0.365,0.3648,0.3647,0.3645,0.3644,0.3642,0.3641,0.3639,0.3638,0.3637,0.3635,0.3634,0.3632,0.3631,0.3629,0.3628,0.3626,0.3625,0.3623,0.3622,0.362,0.3619,0.3617,0.3616,0.3614,0.3613,0.3611,0.361,0.3608,0.3607,0.3605,0.3604,0.3602,0.3601,0.3599,0.3598,0.3597,0.3595,0.3594,0.3592,0.3591,0.3589,0.3588,0.3586,0.3585,0.3583,0.3582,0.358,0.3579,0.3577,0.3576,0.3574,0.3573,0.3571,0.357,0.3569,0.3567,0.3566,0.3564,0.3563,0.3561,0.356,0.3558,0.3557,0.3555,0.3554,0.3552,0.3551,0.3549,0.3548,0.3546,0.3545,0.3544,0.3542,0.3541,0.3539,0.3538,0.3536,0.3535,0.3533,0.3532,0.353,0.3529,0.3527,0.3526,0.3524,0.3523,0.3521,0.352,0.3519,0.3517,0.3516,0.3514,0.3513,0.3511,0.351,0.3508,0.3507,0.3505,0.3504,0.3502,0.3501,0.35,0.3498,0.3497,0.3495,0.3494,0.3492,0.3491,0.3489,0.3488,0.3486,0.3485,0.3483,0.3482,0.3481,0.3479,0.3478,0.3476,0.3475,0.3473,0.3472,0.347,0.3469,0.3467,0.3466,0.3464,0.3463,0.3462,0.346,0.3459,0.3457,0.3456,0.3454,0.3453,0.3451,0.345,0.3448,0.3447,0.3446,0.3444,0.3443,0.3441,0.344,0.3438,0.3437,0.3435,0.3434,0.3432,0.3431,0.343,0.3428,0.3427,0.3425,0.3424,0.3422,0.3421,0.3419,0.3418,0.3416,0.3415,0.3414,0.3412,0.3411,0.3409,0.3408,0.3406,0.3405,0.3403,0.3402,0.3401,0.3399,0.3398,0.3396,0.3395,0.3393,0.3392,0.339,0.3389,0.3388,0.3386,0.3385,0.3383,0.3382,0.338,0.3379,0.3377,0.3376,0.3375,0.3373,0.3372,0.337,0.3369,0.3367,0.3366,0.3364,0.3363,0.3362,0.336,0.3359,0.3357,0.3356,0.3354,0.3353,0.3351,0.335,0.3349,0.3347,0.3346,0.3344,0.3343,0.3341,0.334,0.3339,0.3337,0.3336,0.3334,0.3333,0.3331,0.333,0.3328,0.3327,0.3326,0.3324,0.3323,0.3321,0.332,0.3318,0.3317,0.3316,0.3314,0.3313,0.3311,0.331,0.3308,0.3307,0.3305,0.3304,0.3303,0.3301,0.33,0.3298,0.3297,0.3295,0.3294,0.3293,0.3291,0.329,0.3288,0.3287,0.3285,0.3284,0.3283,0.3281,0.328,0.3278,0.3277,0.3275,0.3274,0.3273,0.3271,0.327,0.3268,0.3267,0.3265,0.3264,0.3263,0.3261,0.326,0.3258,0.3257,0.3255,0.3254,0.3253,0.3251,0.325,0.3248,0.3247,0.3246,0.3244,0.3243,0.3241,0.324,0.3238,0.3237,0.3236,0.3234,0.3233,0.3231,0.323,0.3228,0.3227,0.3226,0.3224,0.3223,0.3221,0.322,0.3219,0.3217,0.3216,0.3214,0.3213,0.3211,0.321,0.3209,0.3207,0.3206,0.3204,0.3203,0.3202,0.32,0.3199,0.3197,0.3196,0.3194,0.3193,0.3192,0.319,0.3189,0.3187,0.3186,0.3185,0.3183,0.3182,0.318,0.3179,0.3178,0.3176,0.3175,0.3173,0.3172,0.317,0.3169,0.3168,0.3166,0.3165,0.3163,0.3162,0.3161,0.3159,0.3158,0.3156,0.3155,0.3154,0.3152,0.3151,0.3149,0.3148,0.3147,0.3145,0.3144,0.3142,0.3141,0.314,0.3138,0.3137,0.3135,0.3134,0.3133,0.3131,0.313,0.3128,0.3127,0.3126,0.3124,0.3123,0.3121,0.312,0.3119,0.3117,0.3116,0.3114,0.3113,0.3112,0.311,0.3109,0.3107,0.3106,0.3105],"name":"L5_A","npix":256,"planted":{"Al_Ka":17737.71,"Al_Ka_tail":270.1174,"Cu_Ka":0.0,"Cu_Ka_stray":34.5788,"Mg_Ka":58.3917,"O_Ka":70.9318,"Si_Ka":115.2303,"Si_Ka_internal":21.12},"source":"ladder","thickness_nm":80.0,"truth_at":{"Al":98.8,"Mg":0.6,"Si":0.6}},{"axis_true":{"offset":-0.478,"scale":0.005},"counts":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,2,0,4,2,3,3,5,5,2,7,6,5,7,2,11,10,11,4,12,8,9,5,15,11,8,12,14,15,7,8,19,22,20,17,20,23,18,16,16,28,20,28,29,24,26,26,29,21,30,28,19,25,26,31,30,37,45,50,40,50,54,57,49,59,42,60,54,44,40,37,42,32,38,27,21,31,26,46,35,45,30,22,20,20,28,24,29,25,21,42,22,24,35,33,36,36,30,30,38,28,40,28,26,28,28,19,32,35,29,24,26,23,24,31,27,30,26,29,31,31,34,43,20,21,24,35,27,25,23,37,28,21,25,26,33,31,26,20,28,29,26,37,28,23,26,22,28,28,24,29,29,24,23,25,28,26,32,36,27,27,37,25,21,30,28,23,26,20,13,32,21,22,22,23,22,27,22,22,16,25,22,18,21,24,18,19,27,23,16,17,25,34,44,29,39,53,75,63,90,101,156,133,196,219,213,251,260,261,314,300,302,266,227,231,203,183,169,129,83,110,67,64,51,41,42,26,29,29,28,26,27,22,21,28,24,33,30,49,58,59,87,120,151,225,270,324,425,474,554,625,672,808,868,931,944,935,960,939,903,855,729,682,537,489,397,331,261,223,195,173,134,89,84,79,49,41,45,21,24,25,32,29,22,13,32,31,31,26,41,56,66,77,109,135,163,178,218,272,314,395,457,482,496,596,596,571,624,574,624,553,522,476,412,323,304,243,228,170,170,153,124,99,78,83,78,63,72,62,53,50,41,31,46,36,31,25,30,27,18,17,24,19,13,9,13,18,13,12,20,13,5,18,9,31,9,10,16,10,14,18,10,16,9,14,11,15,9,15,16,14,15,10,10,14,11,6,17,14,13,10,8,16,12,10,14,10,10,13,10,9,11,10,8,15,10,13,13,8,13,13,12,10,14,13,12,15,12,15,17,12,8,9,19,13,11,12,16,14,9,11,13,13,7,7,9,11,10,11,10,11,7,19,19,9,7,11,14,7,15,11,11,10,10,18,12,19,20,18,25,26,19,17,18,26,32,28,29,26,31,31,35,35,38,29,28,27,30,28,12,23,21,21,16,16,20,14,16,12,11,11,10,8,11,12,23,17,25,27,30,25,36,51,62,70,67,77,92,107,108,149,148,139,162,142,177,192,191,184,187,161,162,161,147,135,103,101,76,66,63,55,39,32,37,23,27,12,17,22,14,18,22,18,31,25,36,60,59,80,92,131,131,149,205,222,207,239,334,361,384,376,405,400,419,411,451,428,418,398,345,338,291,256,258,210,186,169,163,117,113,88,62,59,42,48,36,24,30,20,28,23,21,25,38,34,36,52,67,87,92,117,135,159,176,210,267,272,301,284,340,399,374,418,406,357,367,423,402,398,332,302,317,273,239,218,156,165,144,107,104,64,58,58,42,30,26,26,22,16,14,20,20,14,19,16,18,24,28,23,33,54,51,59,57,82,78,83,91,99,98,98,115,122,152,130,124,126,123,114,116,124,96,103,88,82,77,60,54,43,48,28,32,26,23,16,11,25,15,20,7,12,6,4,11,9,10,8,10,9,9,6,7,2,6,11,3,6,12,6,9,9,7,4,7,10,8,5,9,11,4,4,8,14,7,7,5,15,7,7,6,6,7,8,9,7,7,10,2,4,4,8,10,5,7,10,6,8,10,8,7,9,11,11,8,12,8,3,8,6,7,4,6,6,10,1,8,7,9,9,7,5,7,8,6,6,5,7,7,5,2,8,9,4,7,5,10,7,9,5,11,8,10,4,14,4,11,4,6,6,9,9,11,6,4,7,15,4,9,2,4,6,5,6,5,7,1,10,6,6,6,8,9,5,7,10,2,5,14,10,10,4,4,7,4,9,5,7,7,8,8,12,14,2,3,7,8,8,4,8,9,6,8,5,5,5,10,5,4,5,8,6,7,2,11,6,7,6,7,6,4,6,9,6,7,8,4,7,9,8,6,8,11,9,13,10,4,7,10,6,5,11,13,5,5,10,6,4,3,4,6,8,10,6,5,3,6,9,4,4,6,5,9,10,6,2,9,7,6,9,11,7,5,5,4,6,4,5,5,2,5,7,8,4,5,6,5,3,7,4,6,6,4,3,8,3,5,8,8,12,6,6,7,4,11,1,4,6,2,7,3,5,9,6,8,6,4,6,2,2,3,9,4,2,5,7,5,6,10,4,10,6,5,4,6,6,5,4,4,7,6,5,5,3,8,0,8,3,8,6,6,4,5,2,8,5,4,4,6,4,6,6,8,2,4,5,8,1,2,8,1,4,9,6,6,5,5,7,7,8,8,9,3,7,10,5,5,8,6,5,3,11,6,3,3,4,1,3,8,7,5,15,1,3,9,4,3,12,4,5,8,7,3,7,2,4,5,5,2,4,4,7,5,3,7,3,6,7,6,6,5,5,7,4,4,4,3,2,4,3,8,2,6,5,3,3,3,7,5,5,9,2,4,3,8,9,4,10,5,7,5,2,2,5,3,2,6,2,3,4,4,8,8,3,0,1,9,8,5,4,6,4,7,2,7,2,5,2,2,8,5,2,8,4,2,3,5,1,5,3,5,2,10,2,5,5,11,5,3,8,7,4,6,5,4,5,4,3,7,5,4,5,2,4,3,3,6,2,6,7,5,1,8,2,3,3,4,5,4,4,5,5,4,2,10,9,5,5,4,5,7,4,3,3,2,6,4,5,4,6,5,2,1,5,4,1,7,9,4,6,3,6,3,3,2,4,4,5,4,6,4,1,7,3,3,4,6,5,2,6,6,3,4,4,4,4,3,4,4,2,6,5,5,5,6,2,9,2,5,6,3,4,9,1,6,3,4,5,8,5,7,6,5,5,11,5,5,8,3,5,6,2,3,6,5,8,6,4,8,4,6,6,6,5,2,4,6,3,4,6,4,4,6,5,4,2,4,6,2,2,1,4,4,2,4,2,4,4,5,4,6,4,2,3,5,2,2,12,3,7,3,7,4,4,5,8,5,4,6,6,2,6,3,8,5,4,3,4,0,5,4,11,5,8,6,5,3,5,7,7,5,3,7,4,9,4,10,7,6,6,6,0,6,3,6,3,2,0,2,2,6,4,3,6,7,5,4,4,6,4,3,4,3,3,6,2,5,7,4,7,3,9,4,2,4,4,3,2,4,4,2,7,6,2,3,2,6,6,3,4,3,3,3,4,0,4,11,4,2,4,7,9,3,2,3,3,2,3,5,6,5,6,1,5,7,5,5,10,5,7,4,4,5,3,4,4,3,2,2,6,6,3,3,4,3,6,3,5,3,5,5,3,7,3,2,4,4,2,8,6,2,2,2,3,5,7,5,5,9,3,5,4,2,6,1,1,2,5,2,3,10,4,1,7,7,4,3,0,7,5,3,1,5,4,2,8,5,3,4,5,7,3,3,1,4,4,1,9,2,3,4,4,4,5,1,7,3,5,2,4,2,3,3,5,5,6,6,3,6,6,4,7,6,5,5,4,4,2,7,3,8,3,7,5,8,4,5,5,2,9,7,3,5,12,9,6,7,5,4,11,6,7,11,5,6,5,7,7,3,6,6,12,5,8,5,6,6,3,8,6,5,8,2,2,4,3,4,6,5,1,1,5,3,3,4,4,2,6,2,2,4,8,3,1,3,1,4,0,2,5,4,1,2,2,8,4,2,4,3,4,1,5,2,3,5,2,6,2,4,1,6,6,7,7,2,4,4,1,2,2,5,3,4,1,4,2,6,4,4,3,1,3,2,1,1,5,9,2,6,4,0,6,3,4,1,3,2,3,3,0,3,2,0,2,3,2,3,1,4,4,0,4,2,6,1,5,2,4,3,4,2,2,5,2,1,3,5,3,5,2,5,4,2,3,5,3,2,3,3,4,4,4,1,3,2,4,2,5,1,4,7,0,5,4,4,4,5,4,6,3,4,5,3,3,4,7,3,7,3,4,3,5,2,2,4,2,2,4,2,2,3,2,2,1,4,1,2,0,0,3,4,4,3,4,0,3,5,0,1,3,4,4,1,1,1,3,3,1,2,1,3,3,5,2,5,3,1,3,4,5,1,2,0,3,3,1,4,3,3,4,3,4,6,5,6,4,3,3,0,2,2,2,5,4,1,2,4,1,2,6,2,1,1,4,3,4,1,3,4,2,2,6,4,3,4,6,1,4,1,7,3,1,1,2,3,3,2,1,2,1,5,3,2,5,4,5,3,2,2,2,4,4,2,1,1,2,4,0,1,3,4,5,0,2,2,4,2,3,2,6,3,2,2,2,1,3,5,2,2,3,3,9,3,5,8,1,4,4,2,2,3,3,3,3,4,4,5,1,2,3,3,1,2,1,3,6,2,4,3,4,0,0,2,2,7,4,4,4,2,2,1,7,9,4,1,0,3,3,5,1,1,2,5,0,3,2,0,4,9,4,4,4,3,1,3,5,2,2,1,3,5,5,3,1,4,6,3,5,4,4,1,2,6,2,5,1,4,4,0,3,6,1,4,3,4,2,2,2,2,2,3,5,3,3,2,0,5,2,1,2,2,2,4,1,1,5,1,1,4,4,0,3,0,5,4,3,0,2,1,3,3,3,2,2,3,1,2,4,6,2,4,0,1,2,1,3,2,5,0,1,3,3,3,2,5,4,5,5,1,2,4,2,5,3,2,2,5,4,2,4,2,4,2,3,5,2,2,4,1,2,3,6,2,6,2,4,2,8,1,2,0,2,4,4,4,3,1,1,2,0,3,3,2,1,1,2,2,2,1,3,4,0,3,1,3,3,4,1,3,2,4,3,2,2,6,1,2,3,1,3,1,2,2,3,2,2,3,2,2,2,2,3,4,3,3,3,3,2,3,2,5,2,2,2,3,0,0,3,3,1,1,2,1,6,2,1,6,4,0,5,2,3,0,3,3,2,1,3,4,3,3,3,2,4,1,1,2,2,5,2,1,1,3,4,1,6,4,1,3,5,0,1,5,1,1,1,3,1,2,2,2,2,0,3,3,2,1,0,3,5,2,3,1,2,3,1,0,5,2,3,3,3,3,0,2,0,3,1,3,1,4,3,5,3,1,3,1,3,2,4,2,5,2,2,5,4,3,2,0,1,2,2,3,3,2,2,5,3,5,1,4,3,1,2,8,0,4,3,1,3,1,2,1,3,4,4,0,1,0,2,1,5,2,2,2,5,2,1,2,7,3,4,1,1,2,4,2,4,5,3,1,0,4,1,0,0,4,3,0,2,2,2,2,3,0,4,3,0,2,4,3,2,2,3,1,1,3,1,4,1,1,1,1,1,2,2,2,1,3,1,2,2,2,3,0,0,3,3,0,3,3,4,5,1,2,2,7,0,2,2,1,3,4,0,1,2,4,4,4,4,2,0,6,2,2,3,3,2,2,3,0,3,4,3,0,2,4,2,1,3,1,2,7,3,1,0,3,3,0,5,3,1,1,0,2,3,1,1,2,1,6,2,3,2,1,3,1,3,0,5,0,2,4,2,3,2,0,7,4,5,0,1,2,2,5,4,5,1,0,1,3,6,1,1,0,1,1,1,4,5,1,4,0,3,3,0,0,5,1,5,3,2,2,0,4,2,1,1,4,2,2,4,0,2,3,1,0,3,1,2,3,0,2,2,3,1,2,2,3,5,1,1,1,2,5,1,3,3,0,2,2,5,1,2,1,3,1,2,1,2,1,5,3,2,1,2,3,0,2,0,3,4,5,0,4,3,4,0,3,2,1,2,1,1,1,2,3,3,0,5,2,1,2,1,2,3,3,1,2,4,2,1,4,2,0,2,5,3,4,1,2,1,1,1,2,1,2,2,2,3,1,3,4,2,0,0,1,2,5,1,0,0,2,3,3,2,0,5,2,0,1,3,1,4,2,0,3,1,3,0,3,3,1,1,2,3,3,1,3,3,3,2,0,5,2,1,1,2,0,2,2,3,4,1,3,4,0,0,3,0,3,4,4,2,3,0,2,1,5,2,4,2,3,0,2,1,0,3,2,5,3,0,2,4,1,2,3,4,4,4,6,1,1,1,2,5,1,3,3,3,2,2,0,2,4,2,0,1,7,1,3,1,1,0,2,3,1,3,0,2,4,3,1,2,2,1,4,5,5,3,2,4,1,1,0,4,2,0,3,4,4,1,2,1,3,3,2,1,2,3,0,2,5,2,2,2,0,2,1,1,2,1,4,0,1,3,0,0,3,2,1,2,3,1,1,2,4,4,3,1,1,1,0,0,1,1,1,5,2,1,2,3,1,4,3,1,1,0,2,2,4,3,1,0,2,3,2,3,0,3,3,2,2,1,4,1,2,5,1,3,1,1,3,0,1,2,3,4,1,1,1,2,3,0,2,1,3,3,1,3,1,4,0,2,0,1,2,2,1,1,0,2,3,1,2,0,3,1,1,1,5,4,3,1,0,3,2,3,2,3,3,2,1,2,0,1,2,3,3,2,2,1,2,2,1,0,2,3,2,2,2,1,2,4,5,2,4,2,1,1,1,2,3,2,2,1,1,3,5,2,3,6,2,2,2,4,4,0,1,3,2,1,3,1,2,0,2,1,5,1,1,3,1,4,3,1,1,1,1,1,0,2,0,5,3,3,3,2,1,2,1,4,1,3,2,2,1,2,3,0,2,1,2,1,5,3,2,2,0,3,1,1,4,2,0,5,4,2,1,1,3,1,0,5,1,2,2,1,2,0,5,2,4,2,2,2,1,2,2,2,1,4,3,2,1,2,2,1,1,4,1,2,2,2,4,1,2,0,1,3,2,1,3,0,3,0,2,2,1,2,0,4,1,2,5,3,0,2,4,1,2,2,1,3,0,0,3,6,1,1,1,2,2,1,2,1,3,2,1,4,4,3,3,1,0,4,2,1,1,0,2,2,2,1,2,4,0,1,0,0,2,1,1,1,0,2,0,1,2,2,1,2,0,5,2,3,2,3,1,3,3,2,0,2,1,1,2,0,0,3,0,2,3,1,3,1,3,1,2,0,3,2,1,1,1,2,2,2,1,0,3,3,4,2,0,2,1,1,2,3,2,1,1,2,1,1,2,3,1,2,3,0,1,2,0,3,1,3,2,1,0,1,2,0,5,1,2,2,1,1,5,4,1,2,1,3,1,0,1,0,1,0,1,3,0,3,3,3,2,3,2,2,1,0,3,1,1,2,0,0,3,0,2,3,0,3,3,1,1,1,3,1,2,0,1,2,4,1,1,5,1,1,1,1,1,4,1,2,1,3,3,2,4,1,3,2,1,1,0,0,1,3,2,3,2,4,2,2,1,2,1,0,3,0,5,3,3,1,3,1,1,0,2,0,2,2,3,2,2,3,1,0,0,0,4,3,0,2,2,0,1,2,1,2,0,1,0,3,2,1,4,3,1,1,1,0,3,2,2,2,3,3,0,0,2,3,2,1,1,2,2,3,5,3,3,1,0,0,1,0,1,3,1,2,1,2,0,1,0,1,3,1,1,3,1,2,4,1,3,1,0,2,1,2,1,1,0,3,1,2,2,1,1,0,1,2,0,1,0,3,3,0,0,2,3,5,4,3,1,3,2,0,1,2,3,2,3,4,0,0,2,0,0,1,2,1,0,2,3,2,0,1,2,2,1,4,1,3,0,1,2,1,1,2,0,4,0,2,0,1,2,3,3,2,1,3,5,0,1,1,2,3,2,2,0,3,1,3,4,1,1,3,0,2,1,2,0,4,3,0,0,0,4,2,0,3,4,0,2,1,2,0,2,2,1,4,3,2,0,1,1,1,4,2,1,3,1,4,0,1,7,1,2,2,2,3,3,1,2,2,2,3,1,6,3,4,0,0,0,4,2,1,2,1,1,5,0,2,1,1,2,1,0,3,1,0,0,2,0,0,2,1,2,1,3,0,0,0,3,4,1,1,4,1,0,2,1,3,5,0,3,0,1,0,1,0,1,1,3,3,0,2,2,1,1,0,1,0,0,0,0,0,2,2,2,0,1,3,2,0,2,2,3,1,0,2,3,2,1,1,2,2,1,1,1,1,0,2,2,0,1,4,4,2,4,2,2,3,2,1,2,4,0,1,0,3,3,1,0,3,2,2,1,1,0,1,2,1,3,2,2,0,1,3,4,3,3,3,1,2,5,1,0,2,1,1,2,2,2,4,1,1,1,3,1,3,2,2,2,1,2,3,1,1,1,2,2,0,2,1,0,1,1,5,3,2,3,3,2,2,1,1,2,1,0,1,3,0,2,0,2,0,1,0,1,0,2,0,1,2,2,2,2,4,2,1,0,1,0,2,2,1,0,1,1,1,0,1,1,2,2,2,1,0,4,0,0,1,0,1,2,1,1,0,1,3,1,2,1,1,1,1,0,2,3,1,1,1,1,0,1,2,2,2,3,1,3,1,0,0,1,2,0,2,2,1,2,0,2,2,3,1,3,2,3,2,1,1,2,1,2,1,1,0,3,0,3,1,3,2,2,2,0,1,1,1,1,2,1,0,2,2,1,1,3,4,2,3,2,1,3,4,1,2,1,2,1,1,2,0,0,0,0,1,1,2,2,1,1,1,1,1,1,2,2,0,2,0,2,0,0,1,1,1,1,4,2,2,1,1,1,2,2,4,1,2,3,2,1,1,0,1,3,0,1,1,1,0,0,0,1,2,3,1,0,1,0,1,4,3,2,3,1,0,1,0,0,0,0,1,1,2,2,0,1,3,1,1,3,2,3,1,0,0,2,1,1,0,0,0,2,1,1,0,4,0,3,1,0,0,1,2,1,2,2,2,4,1,1,2,0,1,2,2,1,1,0,2,0,3,1,0,0,2,1,1,0,1,1,1,1,6,1,2,2,0,1,1,2,2,0,1,3,0,1,2,1,1,1,2,2,2,1,2,0,1,0,1,1,2,1,1,1,2,1,2,3,1,2,1,1,2,2,2,3,1,1,4,3,0],"expected":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0002,0.0005,0.001,0.0022,0.0046,0.009,0.0164,0.0283,0.045,0.0704,0.1059,0.1536,0.2159,0.2948,0.3932,0.5121,0.6542,0.8204,1.0116,1.2299,1.4745,1.7461,2.0454,2.3706,2.7219,3.0993,3.5,3.9233,4.3697,4.8355,5.319,5.8211,6.3384,6.8685,7.4102,7.9641,8.5258,9.0937,9.6672,10.2464,10.8272,11.4083,11.9888,12.5698,13.1473,13.7202,14.2875,14.8504,15.4068,15.9548,16.4939,17.0232,17.5452,18.0564,18.5563,19.0446,19.5209,19.9874,20.4418,20.8835,21.3127,21.7297,22.1364,22.5344,22.9255,23.3153,23.7133,24.135,24.6056,25.1583,25.8384,26.7021,27.8125,29.2307,31.0037,33.1469,35.6282,38.3575,41.1837,43.904,46.2878,48.1117,49.1935,49.4287,48.7983,47.1139,45.1413,42.7966,40.3134,37.9004,35.7185,33.868,32.3895,31.2746,30.4811,29.9502,29.6192,29.4301,29.3356,29.3001,29.2988,29.3152,29.3391,29.3651,29.3902,29.4123,29.4307,29.445,29.4553,29.4616,29.464,29.4627,29.4581,29.4502,29.439,29.4245,29.407,29.3864,29.3631,29.337,29.3082,29.2771,29.2437,29.2081,29.1702,29.1301,29.0881,29.0441,28.9982,28.9506,28.9012,28.8503,28.798,28.7442,28.689,28.6324,28.5746,28.5156,28.4555,28.3943,28.332,28.2688,28.2047,28.1398,28.0741,28.0076,27.9404,27.8726,27.8041,27.735,27.6654,27.5954,27.5248,27.4539,27.3826,27.311,27.2391,27.1669,27.0944,27.0218,26.949,26.8761,26.803,26.7299,26.6567,26.5835,26.5103,26.4372,26.3642,26.2912,26.2183,26.1456,26.0731,26.0007,25.9286,25.8567,25.7851,25.7137,25.6438,25.5747,25.506,25.4376,25.3696,25.3019,25.2347,25.1679,25.1015,25.0357,24.9704,24.9056,24.8414,24.7778,24.7148,24.6525,24.5909,24.5301,24.4701,24.4112,24.3535,24.2977,24.2449,24.1971,24.1579,24.1341,24.1372,24.1867,24.3144,24.5703,25.0304,25.806,27.0538,28.9854,31.8739,36.0543,41.9146,49.8729,60.3401,73.6656,90.0708,109.5768,131.9373,156.5906,182.6431,208.897,233.9268,256.1998,274.2299,286.7425,292.8258,292.0432,284.4871,270.7656,251.9232,229.3103,204.4248,178.7492,153.6103,130.0769,108.9046,90.3628,73.9157,61.3406,51.3705,43.6611,37.834,33.5219,30.3945,28.1796,26.6684,25.7165,25.2444,25.2393,25.7622,26.9609,29.0879,32.5247,37.8061,45.6448,56.9364,72.7528,94.3104,122.8944,159.7437,205.8948,261.9941,328.0968,403.4801,486.505,574.5615,664.1259,750.9457,830.3484,897.6488,948.6062,979.8727,989.3653,976.5058,942.2877,889.1597,820.7482,741.4547,655.9942,568.9403,484.3347,405.4078,334.4284,272.6844,220.572,177.763,143.4111,116.0587,93.8284,77.4449,64.9215,55.1625,47.4487,41.2516,36.2073,32.0768,28.7173,26.0563,24.074,22.796,22.2959,22.7029,24.2154,27.1149,31.777,38.6763,48.3801,61.5274,78.7893,100.8094,128.1256,161.0771,199.7064,243.6664,292.15,343.8557,397.0052,449.4121,498.6191,542.0805,577.3784,602.4466,615.7749,616.5647,604.8156,581.328,547.6233,505.7915,458.2879,407.7058,356.5535,307.0627,261.0449,219.8075,184.1294,154.2909,130.1435,111.2064,96.7739,86.0204,78.094,72.1897,67.6042,63.6393,59.7448,56.127,52.5515,48.815,44.9452,41.0196,37.1411,33.417,29.9428,26.7926,24.0145,21.6293,19.6343,18.0068,16.7111,15.7033,14.9366,14.3654,13.9478,13.6476,13.4346,13.2851,13.1799,13.105,13.0504,13.0091,12.9762,12.9486,12.9242,12.9016,12.8802,12.8593,12.8389,12.8186,12.7984,12.7783,12.7582,12.7382,12.7181,12.6981,12.6781,12.6581,12.6381,12.6182,12.5982,12.5783,12.5583,12.5384,12.5186,12.4987,12.4789,12.4591,12.4393,12.4195,12.3997,12.38,12.3603,12.3406,12.3209,12.3013,12.2816,12.262,12.2424,12.2229,12.2034,12.1838,12.1644,12.1449,12.1255,12.1061,12.0867,12.0674,12.048,12.0287,12.0095,11.9902,11.971,11.9519,11.9328,11.9137,11.8946,11.8755,11.8565,11.8376,11.8186,11.7997,11.7808,11.7619,11.7431,11.7243,11.7056,11.6869,11.6682,11.6496,11.631,11.6125,11.5942,11.5761,11.5584,11.5411,11.5248,11.5098,11.497,11.4874,11.4827,11.4852,11.4981,11.5259,11.5744,11.6511,11.7657,11.9296,12.1568,12.463,12.8655,13.3825,14.0318,14.8297,15.7889,16.9168,18.2134,19.6696,21.2656,22.9702,24.741,26.5253,28.262,29.8855,31.3288,32.5285,33.4291,33.9872,34.1752,33.9829,33.419,32.5098,31.2976,29.8371,28.1912,26.4269,24.6104,22.8033,21.0596,19.4232,17.9276,16.595,15.4382,14.4619,13.6655,13.0455,12.5986,12.3248,12.2302,12.3298,12.6499,13.2305,14.1266,15.4095,17.1661,19.4979,22.5176,26.344,31.095,36.8781,43.7794,51.8514,61.1004,71.4744,82.854,95.0463,107.7841,120.7308,133.4924,145.6348,156.7075,166.2707,173.9236,179.3326,182.2551,182.5574,180.225,175.3635,168.1909,159.021,148.2411,136.2844,123.6019,110.6344,97.7885,85.4176,73.8085,63.1762,53.6631,45.3453,38.242,32.3288,27.5517,23.842,21.1302,19.359,18.4935,18.5307,19.5049,21.492,24.6103,29.0181,34.9086,42.5007,52.0259,63.7115,77.7604,94.328,113.4973,135.2548,159.4679,185.8681,214.0407,243.4239,273.3186,302.9111,331.3055,357.5668,380.7713,400.0599,414.6908,424.087,427.8738,425.9037,418.2661,405.2799,387.472,365.5417,340.3151,312.694,283.603,253.9397,224.531,196.0988,169.2364,144.3964,121.8886,101.8886,84.4527,69.5381,57.0269,46.7496,38.509,32.1013,27.3342,24.042,22.0971,21.4175,21.9716,23.7797,26.9115,31.4821,37.6429,45.5709,55.4531,67.4695,81.7718,98.462,117.5688,139.0268,162.6577,188.1566,215.0866,242.8807,270.8553,298.2324,324.1735,347.8193,368.3367,384.9668,397.0711,404.1723,405.9857,402.4373,393.6699,380.0324,362.0577,340.4275,315.9295,289.4105,261.7277,233.7041,206.09,179.5332,154.5585,131.5589,110.7945,92.4018,76.4076,62.7479,51.2896,41.8512,34.2235,28.1868,23.5265,20.0437,17.5639,15.9417,15.0635,14.8473,15.2415,16.2214,17.7853,19.9488,22.7396,26.1903,30.3317,35.1855,40.7574,47.0301,53.9579,61.462,69.4281,77.7063,86.1134,94.4378,102.4475,109.9,116.5543,122.1834,126.587,129.6034,131.1194,131.0772,129.4779,126.3816,121.9038,116.2078,109.4951,101.9935,93.9443,85.5894,77.16,68.8661,60.8889,53.3756,46.437,40.1473,34.5465,29.6438,25.4228,21.8467,18.8641,16.4145,14.4326,12.8524,11.6104,10.6479,9.9121,9.3568,8.9429,8.638,8.4157,8.2548,8.1392,8.0562,7.9965,7.9531,7.9209,7.8964,7.8771,7.8612,7.8475,7.8353,7.824,7.8133,7.8029,7.7928,7.7828,7.7729,7.7631,7.7533,7.7435,7.7338,7.7241,7.7145,7.7048,7.6952,7.6856,7.6761,7.6665,7.657,7.6475,7.638,7.6285,7.6191,7.6096,7.6002,7.5909,7.5815,7.5722,7.5629,7.5536,7.5443,7.535,7.5258,7.5166,7.5074,7.4982,7.4891,7.48,7.4708,7.4618,7.4527,7.4436,7.4346,7.4256,7.4166,7.4076,7.3987,7.3897,7.3808,7.3719,7.3631,7.3542,7.3454,7.3365,7.3277,7.319,7.3102,7.3015,7.2927,7.284,7.2754,7.2667,7.258,7.2494,7.2408,7.2322,7.2237,7.2151,7.2066,7.198,7.1895,7.1811,7.1726,7.1642,7.1557,7.1473,7.1389,7.1306,7.1222,7.1139,7.1056,7.0973,7.089,7.0807,7.0725,7.0642,7.056,7.0478,7.0397,7.0315,7.0234,7.0152,7.0071,6.999,6.991,6.9829,6.9749,6.9668,6.9588,6.9508,6.9429,6.9349,6.927,6.9191,6.9111,6.9033,6.8954,6.8875,6.8797,6.8719,6.8641,6.8563,6.8485,6.8407,6.833,6.8253,6.8176,6.8099,6.8022,6.7945,6.7869,6.7793,6.7716,6.764,6.7565,6.7489,6.7413,6.7338,6.7263,6.7188,6.7113,6.7038,6.6964,6.6889,6.6815,6.6741,6.6667,6.6593,6.6519,6.6446,6.6372,6.6299,6.6226,6.6153,6.608,6.6008,6.5935,6.5863,6.5791,6.5719,6.5647,6.5575,6.5504,6.5432,6.5361,6.529,6.5219,6.5148,6.5077,6.5006,6.4936,6.4866,6.4795,6.4725,6.4656,6.4586,6.4516,6.4447,6.4377,6.4308,6.4239,6.417,6.4101,6.4033,6.3964,6.3896,6.3828,6.376,6.3692,6.3624,6.3556,6.3489,6.3421,6.3354,6.3287,6.322,6.3153,6.3086,6.3019,6.2953,6.2887,6.282,6.2754,6.2688,6.2622,6.2557,6.2491,6.2426,6.236,6.2295,6.223,6.2165,6.21,6.2035,6.1971,6.1906,6.1842,6.1778,6.1714,6.165,6.1586,6.1522,6.1459,6.1395,6.1332,6.1269,6.1206,6.1143,6.108,6.1017,6.0955,6.0892,6.083,6.0767,6.0705,6.0643,6.0581,6.052,6.0458,6.0396,6.0335,6.0274,6.0213,6.0151,6.009,6.003,5.9969,5.9908,5.9848,5.9787,5.9727,5.9667,5.9607,5.9547,5.9487,5.9428,5.9368,5.9308,5.9249,5.919,5.9131,5.9072,5.9013,5.8954,5.8895,5.8837,5.8778,5.872,5.8662,5.8603,5.8545,5.8487,5.843,5.8372,5.8314,5.8257,5.8199,5.8142,5.8085,5.8028,5.7971,5.7914,5.7857,5.78,5.7744,5.7687,5.7631,5.7575,5.7519,5.7463,5.7407,5.7351,5.7295,5.724,5.7184,5.7129,5.7073,5.7018,5.6963,5.6908,5.6853,5.6798,5.6743,5.6689,5.6634,5.658,5.6525,5.6471,5.6417,5.6363,5.6309,5.6255,5.6201,5.6148,5.6094,5.6041,5.5987,5.5934,5.5881,5.5828,5.5775,5.5722,5.5669,5.5617,5.5564,5.5511,5.5459,5.5407,5.5355,5.5302,5.525,5.5198,5.5147,5.5095,5.5043,5.4992,5.494,5.4889,5.4837,5.4786,5.4735,5.4684,5.4633,5.4582,5.4531,5.4481,5.443,5.438,5.4329,5.4279,5.4229,5.4178,5.4128,5.4078,5.4028,5.3979,5.3929,5.3879,5.383,5.378,5.3731,5.3682,5.3632,5.3583,5.3534,5.3485,5.3437,5.3388,5.3339,5.329,5.3242,5.3193,5.3145,5.3097,5.3049,5.3001,5.2953,5.2905,5.2857,5.2809,5.2761,5.2714,5.2666,5.2619,5.2571,5.2524,5.2477,5.243,5.2383,5.2336,5.2289,5.2242,5.2195,5.2148,5.2102,5.2055,5.2009,5.1963,5.1916,5.187,5.1824,5.1778,5.1732,5.1686,5.164,5.1595,5.1549,5.1503,5.1458,5.1413,5.1367,5.1322,5.1277,5.1232,5.1187,5.1142,5.1097,5.1052,5.1007,5.0963,5.0918,5.0874,5.0829,5.0785,5.074,5.0696,5.0652,5.0608,5.0564,5.052,5.0476,5.0432,5.0389,5.0345,5.0302,5.0258,5.0215,5.0171,5.0128,5.0085,5.0042,4.9999,4.9956,4.9913,4.987,4.9827,4.9784,4.9742,4.9699,4.9657,4.9614,4.9572,4.9529,4.9487,4.9445,4.9403,4.9361,4.9319,4.9277,4.9235,4.9193,4.9152,4.911,4.9069,4.9027,4.8986,4.8944,4.8903,4.8862,4.8821,4.8779,4.8738,4.8697,4.8657,4.8616,4.8575,4.8534,4.8494,4.8453,4.8412,4.8372,4.8332,4.8291,4.8251,4.8211,4.8171,4.8131,4.8091,4.8051,4.8011,4.7971,4.7931,4.7892,4.7852,4.7813,4.7773,4.7734,4.7694,4.7655,4.7616,4.7577,4.7538,4.7499,4.7461,4.7422,4.7384,4.7346,4.7308,4.727,4.7233,4.7196,4.7159,4.7122,4.7086,4.705,4.7015,4.698,4.6945,4.6911,4.6877,4.6843,4.681,4.6777,4.6744,4.6711,4.6678,4.6645,4.6612,4.6579,4.6546,4.6512,4.6478,4.6443,4.6408,4.6372,4.6335,4.6298,4.626,4.6221,4.6182,4.6142,4.6102,4.6062,4.6021,4.598,4.5938,4.5897,4.5855,4.5814,4.5773,4.5732,4.5691,4.5651,4.5611,4.5571,4.5532,4.5493,4.5454,4.5416,4.5378,4.5341,4.5303,4.5266,4.523,4.5193,4.5157,4.5121,4.5085,4.5049,4.5014,4.4978,4.4943,4.4908,4.4872,4.4837,4.4802,4.4767,4.4732,4.4697,4.4663,4.4628,4.4593,4.4559,4.4524,4.449,4.4455,4.4421,4.4386,4.4352,4.4318,4.4284,4.425,4.4215,4.4181,4.4147,4.4114,4.408,4.4046,4.4012,4.3978,4.3945,4.3911,4.3877,4.3844,4.381,4.3777,4.3743,4.371,4.3677,4.3643,4.361,4.3577,4.3544,4.3511,4.3478,4.3445,4.3412,4.3379,4.3346,4.3313,4.3281,4.3248,4.3215,4.3183,4.315,4.3118,4.3085,4.3053,4.3021,4.2988,4.2956,4.2924,4.2892,4.2859,4.2827,4.2795,4.2763,4.2731,4.2699,4.2668,4.2636,4.2604,4.2572,4.2541,4.2509,4.2477,4.2446,4.2414,4.2383,4.2352,4.232,4.2289,4.2258,4.2226,4.2195,4.2164,4.2133,4.2102,4.2071,4.204,4.2009,4.1978,4.1947,4.1916,4.1886,4.1855,4.1824,4.1794,4.1763,4.1733,4.1702,4.1672,4.1641,4.1611,4.1581,4.155,4.152,4.149,4.146,4.143,4.14,4.137,4.1341,4.1311,4.1281,4.1252,4.1222,4.1193,4.1163,4.1134,4.1105,4.1076,4.1046,4.1017,4.0988,4.0959,4.093,4.0902,4.0873,4.0844,4.0815,4.0786,4.0757,4.0728,4.07,4.0671,4.0642,4.0613,4.0584,4.0555,4.0526,4.0497,4.0467,4.0438,4.0409,4.038,4.0351,4.0322,4.0293,4.0264,4.0235,4.0206,4.0177,4.0148,4.012,4.0091,4.0062,4.0034,4.0005,3.9977,3.9948,3.992,3.9892,3.9864,3.9836,3.9808,3.978,3.9752,3.9724,3.9696,3.9668,3.964,3.9613,3.9585,3.9557,3.953,3.9502,3.9475,3.9447,3.942,3.9393,3.9365,3.9338,3.9311,3.9284,3.9256,3.9229,3.9202,3.9175,3.9148,3.9121,3.9094,3.9067,3.904,3.9013,3.8987,3.896,3.8933,3.8906,3.888,3.8853,3.8826,3.88,3.8773,3.8747,3.872,3.8694,3.8667,3.8641,3.8615,3.8588,3.8562,3.8536,3.851,3.8483,3.8457,3.8431,3.8405,3.8379,3.8353,3.8327,3.8301,3.8275,3.8249,3.8223,3.8198,3.8172,3.8146,3.812,3.8095,3.8069,3.8044,3.8018,3.7992,3.7967,3.7941,3.7916,3.7891,3.7865,3.784,3.7815,3.7789,3.7764,3.7739,3.7714,3.7688,3.7663,3.7638,3.7613,3.7588,3.7563,3.7538,3.7514,3.7489,3.7464,3.744,3.7415,3.7391,3.7367,3.7344,3.7321,3.7298,3.7277,3.7256,3.7237,3.722,3.7205,3.7194,3.7186,3.7183,3.7186,3.7197,3.7217,3.725,3.7296,3.736,3.7444,3.7553,3.7691,3.7863,3.8075,3.8331,3.864,3.9007,3.9439,3.9944,4.0527,4.1197,4.1958,4.2816,4.3776,4.4841,4.6011,4.7286,4.8663,5.0137,5.1701,5.3343,5.5051,5.6808,5.8597,6.0396,6.2184,6.3935,6.5624,6.7226,6.8715,7.0067,7.1258,7.2267,7.3075,7.3669,7.4036,7.4169,7.4065,7.3726,7.3158,7.2371,7.1378,7.0197,6.8848,6.7354,6.5739,6.4029,6.2248,6.0424,5.858,5.6739,5.4923,5.3152,5.1441,4.9804,4.8254,4.6799,4.5445,4.4195,4.305,4.2011,4.1074,4.0236,3.9492,3.8835,3.826,3.7759,3.7326,3.6953,3.6634,3.6363,3.6132,3.5938,3.5774,3.5636,3.5519,3.5422,3.5339,3.5269,3.5208,3.5157,3.5112,3.5072,3.5036,3.5004,3.4974,3.4946,3.492,3.4895,3.487,3.4847,3.4824,3.4801,3.4779,3.4757,3.4735,3.4713,3.4692,3.467,3.4649,3.4627,3.4606,3.4584,3.4563,3.4542,3.452,3.4499,3.4478,3.4457,3.4436,3.4414,3.4393,3.4372,3.4351,3.433,3.4309,3.4288,3.4267,3.4246,3.4225,3.4204,3.4183,3.4162,3.4142,3.4121,3.41,3.4079,3.4058,3.4038,3.4017,3.3996,3.3976,3.3955,3.3934,3.3914,3.3893,3.3873,3.3852,3.3832,3.3811,3.3791,3.377,3.375,3.373,3.3709,3.3689,3.3669,3.3649,3.3628,3.3608,3.3588,3.3568,3.3548,3.3528,3.3509,3.3489,3.347,3.345,3.3431,3.3413,3.3395,3.3377,3.336,3.3344,3.3329,3.3315,3.3302,3.3292,3.3283,3.3277,3.3274,3.3275,3.3279,3.3288,3.3302,3.3322,3.3349,3.3384,3.3426,3.3478,3.3539,3.361,3.3693,3.3787,3.3893,3.4011,3.4141,3.4283,3.4437,3.4602,3.4776,3.4959,3.5149,3.5345,3.5543,3.5743,3.5941,3.6135,3.6322,3.6499,3.6663,3.6812,3.6944,3.7055,3.7143,3.7208,3.7247,3.7259,3.7245,3.7203,3.7135,3.704,3.6921,3.6779,3.6617,3.6435,3.6237,3.6026,3.5804,3.5574,3.5339,3.5102,3.4865,3.463,3.4401,3.4177,3.3962,3.3756,3.3561,3.3378,3.3206,3.3046,3.2898,3.2763,3.2638,3.2526,3.2423,3.2331,3.2248,3.2173,3.2106,3.2046,3.1992,3.1943,3.1899,3.186,3.1824,3.1791,3.1761,3.1733,3.1707,3.1683,3.166,3.1638,3.1616,3.1596,3.1576,3.1556,3.1537,3.1519,3.15,3.1482,3.1463,3.1445,3.1427,3.1409,3.1391,3.1374,3.1356,3.1338,3.132,3.1303,3.1285,3.1267,3.125,3.1232,3.1214,3.1197,3.1179,3.1162,3.1144,3.1127,3.1109,3.1092,3.1075,3.1057,3.104,3.1022,3.1005,3.0988,3.097,3.0953,3.0936,3.0918,3.0901,3.0884,3.0867,3.085,3.0832,3.0815,3.0798,3.0781,3.0764,3.0747,3.073,3.0713,3.0696,3.0679,3.0662,3.0645,3.0628,3.0611,3.0594,3.0577,3.056,3.0543,3.0526,3.051,3.0493,3.0476,3.0459,3.0442,3.0426,3.0409,3.0392,3.0375,3.0359,3.0342,3.0326,3.0309,3.0292,3.0276,3.0259,3.0243,3.0226,3.0209,3.0193,3.0176,3.016,3.0144,3.0127,3.0111,3.0094,3.0078,3.0062,3.0045,3.0029,3.0013,2.9996,2.998,2.9964,2.9947,2.9931,2.9915,2.9899,2.9883,2.9866,2.985,2.9834,2.9818,2.9802,2.9786,2.977,2.9754,2.9738,2.9722,2.9706,2.969,2.9674,2.9658,2.9642,2.9626,2.961,2.9594,2.9578,2.9562,2.9546,2.9531,2.9515,2.9499,2.9483,2.9468,2.9452,2.9436,2.942,2.9405,2.9389,2.9373,2.9358,2.9342,2.9326,2.9311,2.9295,2.928,2.9264,2.9248,2.9233,2.9217,2.9202,2.9186,2.9171,2.9156,2.914,2.9125,2.9109,2.9094,2.9079,2.9063,2.9048,2.9033,2.9017,2.9002,2.8987,2.8971,2.8956,2.8941,2.8926,2.891,2.8895,2.888,2.8865,2.885,2.8835,2.882,2.8804,2.8789,2.8774,2.8759,2.8744,2.8729,2.8714,2.8699,2.8684,2.8669,2.8654,2.8639,2.8624,2.861,2.8595,2.858,2.8565,2.855,2.8535,2.852,2.8506,2.8491,2.8476,2.8461,2.8447,2.8432,2.8417,2.8402,2.8388,2.8373,2.8358,2.8344,2.8329,2.8314,2.83,2.8285,2.8271,2.8256,2.8242,2.8227,2.8213,2.8198,2.8184,2.8169,2.8155,2.814,2.8126,2.8111,2.8097,2.8082,2.8068,2.8054,2.8039,2.8025,2.8011,2.7996,2.7982,2.7968,2.7954,2.7939,2.7925,2.7911,2.7897,2.7882,2.7868,2.7854,2.784,2.7826,2.7812,2.7798,2.7783,2.7769,2.7755,2.7741,2.7727,2.7713,2.7699,2.7685,2.7671,2.7657,2.7643,2.7629,2.7615,2.7601,2.7587,2.7573,2.756,2.7546,2.7532,2.7518,2.7504,2.749,2.7476,2.7463,2.7449,2.7435,2.7421,2.7408,2.7394,2.738,2.7366,2.7353,2.7339,2.7325,2.7312,2.7298,2.7284,2.7271,2.7257,2.7244,2.723,2.7217,2.7203,2.7189,2.7176,2.7162,2.7149,2.7135,2.7122,2.7108,2.7095,2.7082,2.7068,2.7055,2.7041,2.7028,2.7015,2.7001,2.6988,2.6974,2.6961,2.6948,2.6935,2.6921,2.6908,2.6895,2.6881,2.6868,2.6855,2.6842,2.6829,2.6815,2.6802,2.6789,2.6776,2.6763,2.675,2.6736,2.6723,2.671,2.6697,2.6684,2.6671,2.6658,2.6645,2.6632,2.6619,2.6606,2.6593,2.658,2.6567,2.6554,2.6541,2.6528,2.6515,2.6502,2.649,2.6477,2.6464,2.6451,2.6438,2.6425,2.6412,2.64,2.6387,2.6374,2.6361,2.6348,2.6336,2.6323,2.631,2.6298,2.6285,2.6272,2.6259,2.6247,2.6234,2.6221,2.6209,2.6196,2.6184,2.6171,2.6158,2.6146,2.6133,2.6121,2.6108,2.6096,2.6083,2.6071,2.6058,2.6046,2.6033,2.6021,2.6008,2.5996,2.5983,2.5971,2.5959,2.5946,2.5934,2.5921,2.5909,2.5897,2.5884,2.5872,2.586,2.5847,2.5835,2.5823,2.581,2.5798,2.5786,2.5774,2.5761,2.5749,2.5737,2.5725,2.5713,2.57,2.5688,2.5676,2.5664,2.5652,2.564,2.5628,2.5616,2.5603,2.5591,2.5579,2.5567,2.5555,2.5543,2.5531,2.5519,2.5507,2.5495,2.5483,2.5471,2.5459,2.5447,2.5435,2.5423,2.5411,2.54,2.5388,2.5376,2.5364,2.5352,2.534,2.5328,2.5316,2.5305,2.5293,2.5281,2.5269,2.5257,2.5246,2.5234,2.5222,2.521,2.5199,2.5187,2.5175,2.5163,2.5152,2.514,2.5128,2.5117,2.5105,2.5093,2.5082,2.507,2.5059,2.5047,2.5035,2.5024,2.5012,2.5001,2.4989,2.4978,2.4966,2.4955,2.4943,2.4931,2.492,2.4909,2.4897,2.4886,2.4874,2.4863,2.4851,2.484,2.4828,2.4817,2.4806,2.4794,2.4783,2.4771,2.476,2.4749,2.4737,2.4726,2.4715,2.4703,2.4692,2.4681,2.467,2.4658,2.4647,2.4636,2.4625,2.4613,2.4602,2.4591,2.458,2.4569,2.4557,2.4546,2.4535,2.4524,2.4513,2.4502,2.4491,2.4479,2.4468,2.4457,2.4446,2.4435,2.4424,2.4413,2.4402,2.4391,2.438,2.4369,2.4358,2.4347,2.4336,2.4325,2.4314,2.4303,2.4292,2.4281,2.427,2.4259,2.4248,2.4237,2.4226,2.4215,2.4205,2.4194,2.4183,2.4172,2.4161,2.415,2.4139,2.4129,2.4118,2.4107,2.4096,2.4085,2.4075,2.4064,2.4053,2.4042,2.4032,2.4021,2.401,2.3999,2.3989,2.3978,2.3967,2.3957,2.3946,2.3935,2.3925,2.3914,2.3903,2.3893,2.3882,2.3872,2.3861,2.385,2.384,2.3829,2.3819,2.3808,2.3798,2.3787,2.3777,2.3766,2.3756,2.3745,2.3735,2.3724,2.3714,2.3703,2.3693,2.3682,2.3672,2.3661,2.3651,2.3641,2.363,2.362,2.3609,2.3599,2.3589,2.3578,2.3568,2.3558,2.3547,2.3537,2.3527,2.3516,2.3506,2.3496,2.3485,2.3475,2.3465,2.3455,2.3444,2.3434,2.3424,2.3414,2.3403,2.3393,2.3383,2.3373,2.3363,2.3352,2.3342,2.3332,2.3322,2.3312,2.3302,2.3291,2.3281,2.3271,2.3261,2.3251,2.3241,2.3231,2.3221,2.3211,2.3201,2.3191,2.3181,2.3171,2.316,2.315,2.314,2.313,2.312,2.311,2.3101,2.3091,2.3081,2.3071,2.3061,2.3051,2.3041,2.3031,2.3021,2.3011,2.3001,2.2991,2.2981,2.2972,2.2962,2.2952,2.2942,2.2932,2.2922,2.2912,2.2903,2.2893,2.2883,2.2873,2.2863,2.2854,2.2844,2.2834,2.2824,2.2815,2.2805,2.2795,2.2785,2.2776,2.2766,2.2756,2.2747,2.2737,2.2727,2.2718,2.2708,2.2698,2.2689,2.2679,2.2669,2.266,2.265,2.264,2.2631,2.2621,2.2612,2.2602,2.2592,2.2583,2.2573,2.2564,2.2554,2.2545,2.2535,2.2526,2.2516,2.2507,2.2497,2.2488,2.2478,2.2469,2.2459,2.245,2.244,2.2431,2.2421,2.2412,2.2402,2.2393,2.2384,2.2374,2.2365,2.2355,2.2346,2.2337,2.2327,2.2318,2.2309,2.2299,2.229,2.2281,2.2271,2.2262,2.2253,2.2243,2.2234,2.2225,2.2215,2.2206,2.2197,2.2188,2.2178,2.2169,2.216,2.2151,2.2141,2.2132,2.2123,2.2114,2.2104,2.2095,2.2086,2.2077,2.2068,2.2059,2.2049,2.204,2.2031,2.2022,2.2013,2.2004,2.1995,2.1985,2.1976,2.1967,2.1958,2.1949,2.194,2.1931,2.1922,2.1913,2.1904,2.1895,2.1886,2.1877,2.1868,2.1859,2.185,2.1841,2.1832,2.1823,2.1814,2.1805,2.1796,2.1787,2.1778,2.1769,2.176,2.1751,2.1742,2.1733,2.1724,2.1715,2.1706,2.1697,2.1688,2.168,2.1671,2.1662,2.1653,2.1644,2.1635,2.1626,2.1618,2.1609,2.16,2.1591,2.1582,2.1573,2.1565,2.1556,2.1547,2.1538,2.1529,2.1521,2.1512,2.1503,2.1494,2.1486,2.1477,2.1468,2.1459,2.1451,2.1442,2.1433,2.1425,2.1416,2.1407,2.1399,2.139,2.1381,2.1373,2.1364,2.1355,2.1347,2.1338,2.1329,2.1321,2.1312,2.1303,2.1295,2.1286,2.1278,2.1269,2.126,2.1252,2.1243,2.1235,2.1226,2.1218,2.1209,2.12,2.1192,2.1183,2.1175,2.1166,2.1158,2.1149,2.1141,2.1132,2.1124,2.1115,2.1107,2.1098,2.109,2.1081,2.1073,2.1065,2.1056,2.1048,2.1039,2.1031,2.1022,2.1014,2.1006,2.0997,2.0989,2.098,2.0972,2.0964,2.0955,2.0947,2.0939,2.093,2.0922,2.0913,2.0905,2.0897,2.0888,2.088,2.0872,2.0864,2.0855,2.0847,2.0839,2.083,2.0822,2.0814,2.0805,2.0797,2.0789,2.0781,2.0772,2.0764,2.0756,2.0748,2.0739,2.0731,2.0723,2.0715,2.0707,2.0698,2.069,2.0682,2.0674,2.0666,2.0658,2.0649,2.0641,2.0633,2.0625,2.0617,2.0609,2.06,2.0592,2.0584,2.0576,2.0568,2.056,2.0552,2.0544,2.0536,2.0527,2.0519,2.0511,2.0503,2.0495,2.0487,2.0479,2.0471,2.0463,2.0455,2.0447,2.0439,2.0431,2.0423,2.0415,2.0407,2.0399,2.0391,2.0383,2.0375,2.0367,2.0359,2.0351,2.0343,2.0335,2.0327,2.0319,2.0311,2.0303,2.0295,2.0287,2.0279,2.0271,2.0263,2.0256,2.0248,2.024,2.0232,2.0224,2.0216,2.0208,2.02,2.0192,2.0185,2.0177,2.0169,2.0161,2.0153,2.0145,2.0137,2.013,2.0122,2.0114,2.0106,2.0098,2.009,2.0083,2.0075,2.0067,2.0059,2.0051,2.0044,2.0036,2.0028,2.002,2.0013,2.0005,1.9997,1.9989,1.9982,1.9974,1.9966,1.9958,1.9951,1.9943,1.9935,1.9928,1.992,1.9912,1.9904,1.9897,1.9889,1.9881,1.9874,1.9866,1.9858,1.9851,1.9843,1.9835,1.9828,1.982,1.9812,1.9805,1.9797,1.9789,1.9782,1.9774,1.9767,1.9759,1.9751,1.9744,1.9736,1.9729,1.9721,1.9713,1.9706,1.9698,1.9691,1.9683,1.9676,1.9668,1.966,1.9653,1.9645,1.9638,1.963,1.9623,1.9615,1.9608,1.96,1.9593,1.9585,1.9578,1.957,1.9563,1.9555,1.9548,1.954,1.9533,1.9525,1.9518,1.951,1.9503,1.9495,1.9488,1.948,1.9473,1.9465,1.9458,1.9451,1.9443,1.9436,1.9428,1.9421,1.9413,1.9406,1.9399,1.9391,1.9384,1.9376,1.9369,1.9362,1.9354,1.9347,1.9339,1.9332,1.9325,1.9317,1.931,1.9303,1.9295,1.9288,1.9281,1.9273,1.9266,1.9259,1.9251,1.9244,1.9237,1.9229,1.9222,1.9215,1.9207,1.92,1.9193,1.9185,1.9178,1.9171,1.9164,1.9156,1.9149,1.9142,1.9135,1.9127,1.912,1.9113,1.9105,1.9098,1.9091,1.9084,1.9076,1.9069,1.9062,1.9055,1.9048,1.904,1.9033,1.9026,1.9019,1.9012,1.9004,1.8997,1.899,1.8983,1.8976,1.8968,1.8961,1.8954,1.8947,1.894,1.8932,1.8925,1.8918,1.8911,1.8904,1.8897,1.889,1.8882,1.8875,1.8868,1.8861,1.8854,1.8847,1.884,1.8833,1.8825,1.8818,1.8811,1.8804,1.8797,1.879,1.8783,1.8776,1.8769,1.8762,1.8754,1.8747,1.874,1.8733,1.8726,1.8719,1.8712,1.8705,1.8698,1.8691,1.8684,1.8677,1.867,1.8663,1.8656,1.8649,1.8642,1.8635,1.8628,1.8621,1.8614,1.8607,1.86,1.8593,1.8586,1.8579,1.8572,1.8565,1.8558,1.8551,1.8544,1.8537,1.853,1.8523,1.8516,1.8509,1.8502,1.8495,1.8488,1.8481,1.8474,1.8467,1.846,1.8453,1.8446,1.8439,1.8432,1.8425,1.8418,1.8412,1.8405,1.8398,1.8391,1.8384,1.8377,1.837,1.8363,1.8356,1.8349,1.8342,1.8336,1.8329,1.8322,1.8315,1.8308,1.8301,1.8294,1.8287,1.8281,1.8274,1.8267,1.826,1.8253,1.8246,1.8239,1.8233,1.8226,1.8219,1.8212,1.8205,1.8198,1.8192,1.8185,1.8178,1.8171,1.8164,1.8157,1.8151,1.8144,1.8137,1.813,1.8123,1.8117,1.811,1.8103,1.8096,1.8089,1.8083,1.8076,1.8069,1.8062,1.8055,1.8049,1.8042,1.8035,1.8028,1.8022,1.8015,1.8008,1.8001,1.7995,1.7988,1.7981,1.7974,1.7968,1.7961,1.7954,1.7947,1.7941,1.7934,1.7927,1.7921,1.7914,1.7907,1.79,1.7894,1.7887,1.788,1.7874,1.7867,1.786,1.7853,1.7847,1.784,1.7833,1.7827,1.782,1.7813,1.7807,1.78,1.7793,1.7787,1.778,1.7773,1.7767,1.776,1.7753,1.7747,1.774,1.7733,1.7727,1.772,1.7713,1.7707,1.77,1.7693,1.7687,1.768,1.7673,1.7667,1.766,1.7654,1.7647,1.764,1.7634,1.7627,1.762,1.7614,1.7607,1.7601,1.7594,1.7587,1.7581,1.7574,1.7568,1.7561,1.7554,1.7548,1.7541,1.7535,1.7528,1.7521,1.7515,1.7508,1.7502,1.7495,1.7489,1.7482,1.7475,1.7469,1.7462,1.7456,1.7449,1.7443,1.7436,1.743,1.7423,1.7416,1.741,1.7403,1.7397,1.739,1.7384,1.7377,1.7371,1.7364,1.7358,1.7351,1.7345,1.7338,1.7332,1.7325,1.7318,1.7312,1.7305,1.7299,1.7292,1.7286,1.7279,1.7273,1.7266,1.726,1.7253,1.7247,1.724,1.7234,1.7227,1.7221,1.7214,1.7208,1.7202,1.7195,1.7189,1.7182,1.7176,1.7169,1.7163,1.7156,1.715,1.7143,1.7137,1.713,1.7124,1.7117,1.7111,1.7105,1.7098,1.7092,1.7085,1.7079,1.7072,1.7066,1.7059,1.7053,1.7047,1.704,1.7034,1.7027,1.7021,1.7014,1.7008,1.7002,1.6995,1.6989,1.6982,1.6976,1.6969,1.6963,1.6957,1.695,1.6944,1.6937,1.6931,1.6925,1.6918,1.6912,1.6905,1.6899,1.6893,1.6886,1.688,1.6873,1.6867,1.6861,1.6854,1.6848,1.6841,1.6835,1.6829,1.6822,1.6816,1.681,1.6803,1.6797,1.679,1.6784,1.6778,1.6771,1.6765,1.6759,1.6752,1.6746,1.674,1.6733,1.6727,1.6721,1.6714,1.6708,1.6702,1.6695,1.6689,1.6682,1.6676,1.667,1.6663,1.6657,1.6651,1.6644,1.6638,1.6632,1.6625,1.6619,1.6613,1.6607,1.66,1.6594,1.6588,1.6581,1.6575,1.6569,1.6562,1.6556,1.655,1.6543,1.6537,1.6531,1.6524,1.6518,1.6512,1.6506,1.6499,1.6493,1.6487,1.648,1.6474,1.6468,1.6462,1.6455,1.6449,1.6443,1.6436,1.643,1.6424,1.6418,1.6411,1.6405,1.6399,1.6392,1.6386,1.638,1.6374,1.6367,1.6361,1.6355,1.6349,1.6342,1.6336,1.633,1.6324,1.6317,1.6311,1.6305,1.6299,1.6292,1.6286,1.628,1.6274,1.6267,1.6261,1.6255,1.6249,1.6242,1.6236,1.623,1.6224,1.6217,1.6211,1.6205,1.6199,1.6192,1.6186,1.618,1.6174,1.6168,1.6161,1.6155,1.6149,1.6143,1.6136,1.613,1.6124,1.6118,1.6112,1.6105,1.6099,1.6093,1.6087,1.6081,1.6074,1.6068,1.6062,1.6056,1.6049,1.6043,1.6037,1.6031,1.6025,1.6019,1.6012,1.6006,1.6,1.5994,1.5988,1.5981,1.5975,1.5969,1.5963,1.5957,1.595,1.5944,1.5938,1.5932,1.5926,1.592,1.5913,1.5907,1.5901,1.5895,1.5889,1.5883,1.5876,1.587,1.5864,1.5858,1.5852,1.5846,1.5839,1.5833,1.5827,1.5821,1.5815,1.5809,1.5802,1.5796,1.579,1.5784,1.5778,1.5772,1.5766,1.5759,1.5753,1.5747,1.5741,1.5735,1.5729,1.5723,1.5716,1.571,1.5704,1.5698,1.5692,1.5686,1.568,1.5673,1.5667,1.5661,1.5655,1.5649,1.5643,1.5637,1.5631,1.5624,1.5618,1.5612,1.5606,1.56,1.5594,1.5588,1.5582,1.5576,1.5569,1.5563,1.5557,1.5551,1.5545,1.5539,1.5533,1.5527,1.5521,1.5514,1.5508,1.5502,1.5496,1.549,1.5484,1.5478,1.5472,1.5466,1.546,1.5453,1.5447,1.5441,1.5435,1.5429,1.5423,1.5417,1.5411,1.5405,1.5399,1.5393,1.5387,1.538,1.5374,1.5368,1.5362,1.5356,1.535,1.5344,1.5338,1.5332,1.5326,1.532,1.5314,1.5308,1.5301,1.5295,1.5289,1.5283,1.5277,1.5271,1.5265,1.5259,1.5253,1.5247,1.5241,1.5235,1.5229,1.5223,1.5217,1.5211,1.5205,1.5198,1.5192,1.5186,1.518,1.5174,1.5168,1.5162,1.5156,1.515,1.5144,1.5138,1.5132,1.5126,1.512,1.5114,1.5108,1.5102,1.5096,1.509,1.5084,1.5078,1.5072,1.5066,1.506,1.5054,1.5047,1.5041,1.5035,1.5029,1.5023,1.5017,1.5011,1.5005,1.4999,1.4993,1.4987,1.4981,1.4975,1.4969,1.4963,1.4957,1.4951,1.4945,1.4939,1.4933,1.4927,1.4921,1.4915,1.4909,1.4903,1.4897,1.4891,1.4885,1.4879,1.4873,1.4867,1.4861,1.4855,1.4849,1.4843,1.4837,1.4831,1.4825,1.4819,1.4813,1.4807,1.4801,1.4795,1.4789,1.4783,1.4777,1.4771,1.4765,1.4759,1.4753,1.4747,1.4741,1.4735,1.4729,1.4723,1.4717,1.4711,1.4705,1.4699,1.4693,1.4687,1.4682,1.4676,1.467,1.4664,1.4658,1.4652,1.4646,1.464,1.4634,1.4628,1.4622,1.4616,1.461,1.4604,1.4598,1.4592,1.4586,1.458,1.4574,1.4568,1.4562,1.4556,1.455,1.4544,1.4538,1.4532,1.4527,1.4521,1.4515,1.4509,1.4503,1.4497,1.4491,1.4485,1.4479,1.4473,1.4467,1.4461,1.4455,1.4449,1.4443,1.4437,1.4431,1.4425,1.442,1.4414,1.4408,1.4402,1.4396,1.439,1.4384,1.4378,1.4372,1.4366,1.436,1.4354,1.4348,1.4342,1.4337,1.4331,1.4325,1.4319,1.4313,1.4307,1.4301,1.4295,1.4289,1.4283,1.4277,1.4271,1.4266,1.426,1.4254,1.4248,1.4242,1.4236,1.423,1.4224,1.4218,1.4212,1.4206,1.4201,1.4195,1.4189,1.4183,1.4177,1.4171,1.4165,1.4159,1.4153,1.4147,1.4142,1.4136,1.413,1.4124,1.4118,1.4112,1.4106,1.41,1.4094,1.4089,1.4083,1.4077,1.4071,1.4065,1.4059,1.4053,1.4047,1.4042,1.4036,1.403,1.4024,1.4018,1.4012,1.4006,1.4,1.3995,1.3989,1.3983,1.3977,1.3971,1.3965,1.3959,1.3953,1.3948,1.3942,1.3936,1.393,1.3924,1.3918,1.3912,1.3907,1.3901,1.3895,1.3889,1.3883,1.3877,1.3871,1.3866,1.386,1.3854,1.3848,1.3842,1.3836,1.383,1.3825,1.3819,1.3813,1.3807,1.3801,1.3795,1.379,1.3784,1.3778,1.3772,1.3766,1.376,1.3755,1.3749,1.3743,1.3737,1.3731,1.3725,1.372,1.3714,1.3708,1.3702,1.3696,1.369,1.3685,1.3679,1.3673,1.3667,1.3661,1.3655,1.365,1.3644,1.3638,1.3632,1.3626,1.3621,1.3615,1.3609,1.3603,1.3597,1.3592,1.3586,1.358,1.3574,1.3568,1.3562,1.3557,1.3551,1.3545,1.3539,1.3533,1.3528,1.3522,1.3516,1.351,1.3504,1.3499,1.3493,1.3487,1.3481,1.3475,1.347,1.3464,1.3458,1.3452,1.3447,1.3441,1.3435,1.3429,1.3423,1.3418,1.3412,1.3406,1.34,1.3394,1.3389,1.3383,1.3377,1.3371,1.3366,1.336,1.3354,1.3348,1.3343,1.3337,1.3331,1.3325,1.3319,1.3314,1.3308,1.3302,1.3296,1.3291,1.3285,1.3279,1.3273,1.3268,1.3262,1.3256,1.325,1.3245,1.3239,1.3233,1.3227,1.3222,1.3216,1.321,1.3204,1.3199,1.3193,1.3187,1.3181,1.3176,1.317,1.3164,1.3158,1.3153,1.3147,1.3141,1.3135,1.313,1.3124,1.3118,1.3112,1.3107,1.3101,1.3095,1.309,1.3084,1.3078,1.3072,1.3067,1.3061,1.3055,1.3049,1.3044,1.3038,1.3032,1.3027,1.3021,1.3015,1.3009,1.3004,1.2998,1.2992,1.2987,1.2981,1.2975,1.2969,1.2964,1.2958,1.2952,1.2947,1.2941,1.2935,1.293,1.2924,1.2918,1.2912,1.2907,1.2901,1.2895,1.289,1.2884,1.2878,1.2873,1.2867,1.2861,1.2856,1.285,1.2844,1.2838,1.2833,1.2827,1.2821,1.2816,1.281,1.2804,1.2799,1.2793,1.2787,1.2782,1.2776,1.277,1.2765,1.2759,1.2753,1.2748,1.2742,1.2736,1.2731,1.2725,1.2719,1.2714,1.2708,1.2702,1.2697,1.2691,1.2685,1.268,1.2674,1.2668,1.2663,1.2657,1.2652,1.2646,1.264,1.2635,1.2629,1.2623,1.2618,1.2612,1.2606,1.2601,1.2595,1.2589,1.2584,1.2578,1.2573,1.2567,1.2561,1.2556,1.255,1.2544,1.2539,1.2533,1.2528,1.2522,1.2516,1.2511,1.2505,1.2499,1.2494,1.2488],"name":"L6_precip_endon_0","npix":256,"planted":{"Al_Ka":15732.697,"Al_Ka_tail":239.5842,"Cu_Ka":0.0,"Cu_Ka_stray":121.1536,"Mg_Ka":4158.5316,"O_Ka":271.6062,"Si_Ka":10196.6579,"Si_Ka_internal":152.5416},"source":"ladder","thickness_nm":104.0,"truth_at":{"Al":49.4,"Mg":23.0272727273,"Si":27.5727272727}},{"axis_true":{"offset":-0.478,"scale":0.005},"counts":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,2,1,0,3,2,2,0,3,0,1,2,2,2,4,4,5,4,1,3,5,8,4,3,4,6,7,5,8,9,7,7,10,7,5,5,15,5,7,12,9,6,8,11,9,14,10,8,17,14,17,13,19,10,23,16,17,12,19,26,18,26,22,19,22,21,19,16,11,18,14,15,15,11,11,13,9,11,10,16,13,18,14,20,11,17,14,10,9,13,17,12,15,13,20,11,17,15,17,19,16,21,14,22,18,24,13,17,11,14,16,15,12,15,14,15,10,16,11,16,12,15,13,13,15,14,8,17,19,16,14,14,9,12,12,20,11,15,12,11,19,20,18,17,18,12,11,9,17,7,11,23,17,26,8,13,14,14,11,8,9,9,11,11,27,16,14,15,11,12,17,15,13,15,10,12,13,10,11,17,15,15,11,19,14,15,15,11,20,31,26,55,68,69,100,132,177,216,276,344,388,475,535,556,623,651,709,659,663,640,602,521,427,372,331,309,202,175,128,107,76,57,29,42,23,19,18,13,15,6,10,7,7,11,14,6,11,7,7,8,11,12,6,4,4,9,7,5,6,7,8,9,7,13,8,7,8,8,3,11,8,12,12,6,12,13,11,8,12,9,4,3,13,10,7,3,10,9,7,6,18,14,18,19,35,48,56,92,121,208,210,323,390,485,576,690,794,981,1046,1223,1364,1462,1421,1525,1525,1482,1436,1370,1255,1081,980,880,736,631,483,386,313,265,207,176,138,117,106,82,70,72,51,62,52,46,41,33,19,21,22,25,13,18,17,14,8,7,7,5,5,10,6,4,5,5,3,2,10,11,6,10,6,6,7,4,11,5,4,6,7,7,6,8,8,7,4,5,10,7,9,8,7,7,2,2,3,5,8,3,3,4,5,8,5,7,5,7,6,10,4,10,8,4,5,5,9,5,7,7,3,5,9,6,8,10,11,11,7,4,6,6,5,5,11,7,6,3,4,5,6,9,5,4,4,9,8,3,6,5,6,7,10,4,5,12,8,6,7,8,10,10,10,10,11,10,12,14,13,16,17,14,17,18,17,15,12,23,14,12,12,9,9,15,10,12,15,6,6,3,7,5,4,7,8,1,10,6,2,6,3,9,7,9,6,8,7,4,9,2,3,10,3,3,7,2,6,8,5,4,7,5,6,3,3,3,3,5,5,6,9,6,11,3,1,6,8,6,12,5,3,3,7,6,3,8,12,9,4,7,10,9,9,9,9,14,24,19,19,22,28,35,40,47,39,47,49,39,46,56,61,53,48,50,44,43,49,45,33,36,25,25,16,15,14,16,15,13,11,11,7,8,8,7,8,7,1,1,4,6,7,4,7,1,5,5,3,10,6,5,3,6,5,8,7,4,5,6,4,4,6,6,8,10,4,2,9,7,2,3,2,4,6,3,8,7,4,5,5,5,8,5,6,5,6,6,8,8,11,16,10,24,19,16,17,29,28,28,24,31,44,37,57,53,69,57,53,60,74,49,59,66,49,50,55,39,48,46,35,42,21,37,13,18,17,19,8,4,9,6,3,3,4,3,7,3,7,5,6,4,2,7,7,1,3,4,4,7,4,7,11,6,1,3,2,5,2,8,6,5,4,4,3,3,2,4,4,4,1,5,9,3,4,1,5,3,4,0,3,6,9,4,2,2,7,7,2,4,5,3,0,5,9,5,4,4,3,7,4,4,2,4,5,5,4,5,7,1,2,6,3,2,6,3,2,3,1,6,4,7,4,3,3,6,5,4,3,4,5,5,1,5,3,5,4,5,9,5,10,3,6,9,4,2,6,4,2,6,2,5,5,4,1,3,5,1,2,1,8,4,7,3,4,6,4,4,4,2,4,8,8,4,0,4,3,0,5,4,1,5,5,6,3,5,6,2,3,6,4,4,4,5,2,5,7,4,5,4,7,4,2,7,3,5,1,4,3,8,5,5,4,5,2,4,0,2,2,1,5,3,4,4,2,4,6,4,8,8,2,4,8,5,1,4,5,3,4,4,2,2,2,7,5,2,5,2,1,2,2,6,5,2,1,4,3,6,6,7,1,4,7,4,2,3,6,3,4,4,2,9,4,4,1,2,1,1,3,6,4,1,3,5,0,2,2,6,4,1,1,5,7,0,7,1,5,4,3,3,2,3,7,1,1,4,3,6,4,3,2,3,3,4,3,3,8,3,2,2,5,1,4,4,3,3,1,3,1,1,3,4,7,1,2,4,3,2,4,3,2,0,3,2,1,3,2,2,2,3,2,4,7,2,3,1,2,2,3,2,1,1,5,3,6,3,3,1,2,1,5,3,2,4,2,7,4,3,2,2,2,2,6,4,4,1,3,2,6,5,1,3,2,4,3,4,3,3,0,4,3,6,7,3,5,3,2,6,5,2,3,4,3,4,1,4,7,2,2,5,4,1,1,3,2,4,3,3,3,3,3,6,3,6,5,6,2,6,4,4,2,1,3,2,5,0,3,2,3,0,2,2,2,0,6,2,4,1,2,2,0,1,4,1,3,2,3,4,1,2,4,1,5,2,3,5,4,2,2,1,4,4,2,3,3,3,3,2,2,3,6,4,3,4,5,0,3,3,3,1,5,3,6,2,0,4,1,1,0,1,6,4,3,4,3,2,1,3,1,4,2,1,3,0,0,3,5,1,1,1,3,2,3,0,5,5,1,1,5,2,1,3,5,2,1,1,2,3,4,6,7,5,1,1,0,2,0,1,4,3,4,2,1,1,0,5,5,2,0,3,6,2,3,1,6,4,2,7,3,2,3,10,4,1,2,0,0,1,2,4,1,1,2,3,2,1,3,4,5,3,1,1,4,5,7,4,2,1,4,2,2,5,2,4,4,2,1,4,3,1,5,2,2,3,0,2,2,1,3,4,4,2,3,2,5,3,1,3,2,2,1,1,0,3,1,6,2,2,5,0,2,1,5,2,1,1,1,3,3,4,1,2,1,1,3,1,3,4,4,4,0,1,2,3,2,3,1,2,1,1,3,0,0,1,1,2,4,2,3,6,1,2,3,2,3,2,4,4,1,1,1,1,1,3,1,2,2,2,2,4,4,1,2,0,3,2,1,3,1,4,3,1,5,2,4,3,4,3,3,5,3,3,4,0,0,3,1,3,3,0,3,1,2,4,0,3,5,3,0,2,0,1,4,1,4,6,1,2,2,1,5,5,5,1,4,3,3,4,4,2,2,2,3,3,3,1,1,3,6,1,1,4,1,3,4,5,2,2,2,2,5,2,2,1,2,6,0,2,2,1,2,1,4,3,3,2,2,0,0,1,2,1,1,1,1,2,1,1,4,1,2,3,5,2,2,2,2,3,1,3,3,3,4,2,3,3,1,2,1,2,1,4,2,1,1,4,2,1,2,0,7,0,2,0,0,2,3,2,3,5,3,3,1,3,2,0,3,2,3,2,4,1,1,3,2,1,2,4,0,2,1,2,1,4,5,3,2,1,1,2,1,3,3,5,1,2,4,0,2,1,3,6,3,2,3,2,4,3,3,3,1,5,1,3,3,6,2,3,2,3,1,2,0,1,4,4,4,5,0,4,1,3,1,0,3,2,7,5,1,2,0,2,2,1,0,1,3,0,1,3,1,3,3,1,2,0,4,1,5,3,0,3,2,1,3,2,1,0,1,0,1,3,1,0,3,3,4,1,1,1,1,2,1,5,3,2,3,5,1,2,2,4,8,1,1,3,1,1,1,1,2,0,4,0,4,0,1,0,3,2,3,2,0,5,0,2,3,2,2,1,3,2,1,1,3,3,3,0,1,0,1,0,1,2,0,1,0,4,3,2,3,1,1,1,4,1,2,1,3,2,2,4,2,3,1,0,1,2,2,4,4,2,1,1,0,3,3,3,2,3,1,1,4,2,5,4,1,1,2,2,1,3,1,0,2,2,2,1,2,2,7,4,3,1,2,4,2,4,3,2,3,4,4,0,1,0,3,5,0,3,0,3,5,3,1,2,3,2,1,2,3,3,1,0,1,2,3,0,1,1,2,3,1,1,1,0,1,2,0,2,1,1,1,3,1,2,0,1,1,2,3,1,0,1,2,1,1,1,3,3,3,0,4,2,3,5,0,0,2,5,2,1,4,1,2,4,0,6,1,2,0,1,2,2,2,2,3,1,0,4,2,4,3,1,3,0,0,2,1,1,0,1,2,1,0,0,1,0,1,2,2,1,2,1,3,2,1,1,1,1,3,1,1,1,3,0,0,2,0,1,1,2,3,2,1,2,1,2,4,1,3,1,1,2,0,2,0,1,1,1,3,2,1,3,0,2,0,3,3,3,1,2,0,1,2,2,1,1,1,3,2,1,0,1,3,1,1,3,1,1,1,3,2,2,3,1,0,4,1,3,1,1,0,2,2,3,4,2,3,3,3,5,3,0,1,6,1,1,2,1,0,2,1,2,1,1,2,1,4,1,4,1,0,1,2,2,2,1,1,0,2,3,2,2,1,2,3,1,1,0,0,1,3,2,2,2,2,3,2,2,0,2,2,0,4,3,2,2,1,0,4,3,2,2,2,4,3,2,0,0,3,0,2,3,2,1,2,2,3,1,0,0,1,0,1,1,2,1,3,0,1,1,2,1,1,2,1,0,2,0,0,1,2,2,0,1,0,2,3,2,2,1,1,0,2,2,4,2,5,0,2,3,0,1,0,0,0,1,1,1,2,2,1,0,2,3,1,1,2,1,0,2,1,1,3,1,4,1,0,1,0,1,3,2,4,2,1,2,2,0,0,0,1,3,1,2,1,1,1,1,1,2,0,1,1,2,5,2,2,2,4,1,3,2,0,2,3,3,0,1,1,0,3,1,0,1,0,0,1,5,0,1,2,1,2,3,2,2,3,1,2,3,4,2,0,2,2,0,0,1,3,1,0,2,4,1,1,3,1,1,2,4,1,2,2,3,3,3,1,2,0,0,1,3,1,1,2,1,1,1,1,0,1,3,2,1,0,1,0,1,2,4,2,0,6,1,3,0,2,1,1,3,0,1,1,0,0,2,1,4,0,1,1,1,1,1,2,2,0,2,0,2,0,3,0,1,4,0,3,2,0,0,2,0,1,1,2,1,0,2,1,4,3,0,0,0,0,1,1,1,3,0,4,3,0,2,3,0,0,0,2,0,0,3,3,2,3,2,2,0,0,2,0,1,1,0,1,3,0,4,2,1,1,2,2,1,1,1,1,1,1,0,0,1,3,2,1,1,1,2,1,1,2,2,3,2,1,4,1,0,4,2,1,0,1,3,1,4,0,1,2,2,1,1,1,2,3,4,1,2,2,0,2,1,1,1,1,2,2,1,3,0,1,1,0,0,3,1,2,1,1,2,4,0,3,0,1,1,1,2,3,2,2,4,0,1,1,1,3,0,2,1,3,0,2,2,2,1,1,2,0,1,0,0,3,1,1,1,0,1,0,2,2,0,2,2,2,0,0,3,3,1,3,0,2,1,2,2,1,0,1,0,4,2,1,3,0,1,1,1,2,4,2,1,2,0,1,2,2,1,1,1,2,1,2,2,0,1,0,3,1,1,2,1,1,2,1,3,3,1,2,1,1,0,1,1,1,0,1,2,2,3,3,0,2,3,1,1,1,1,1,0,2,0,0,2,2,3,0,0,0,4,0,1,0,2,1,1,2,2,3,0,3,0,1,2,3,1,0,0,1,2,0,2,0,3,2,1,2,1,1,1,0,0,2,1,1,2,2,1,1,2,0,1,2,0,1,2,1,0,0,1,1,0,0,0,0,0,0,2,2,2,0,0,1,0,2,0,3,2,1,0,1,4,1,0,1,0,1,3,3,2,1,1,3,1,0,2,1,1,1,0,0,1,1,3,0,1,2,2,2,2,2,1,2,1,1,2,0,1,3,0,4,1,3,1,0,0,0,1,1,0,1,0,2,2,0,1,3,1,0,1,1,2,1,0,1,1,5,1,0,0,2,2,2,2,0,1,2,0,0,0,2,1,2,3,1,0,0,0,1,1,0,1,3,4,1,2,1,2,0,1,0,0,1,4,1,1,0,1,3,0,1,1,1,0,0,0,2,1,1,2,1,2,3,0,2,1,3,4,2,0,0,0,4,3,2,1,1,0,1,0,4,1,2,0,3,0,2,0,0,1,3,0,0,2,1,2,1,3,1,3,1,0,0,2,0,1,1,1,0,0,1,2,4,1,1,1,1,0,1,3,2,2,1,1,0,0,2,1,2,0,1,1,1,1,0,0,1,1,2,0,0,1,3,0,3,2,2,2,0,0,1,0,2,0,1,0,2,1,0,2,1,2,0,2,2,3,0,1,2,3,1,1,0,1,1,0,1,3,1,1,1,1,0,1,1,2,2,2,1,0,2,1,2,2,5,0,0,1,4,2,1,2,0,1,2,1,2,3,0,0,1,0,1,0,1,2,0,3,0,0,2,2,0,3,0,2,1,0,2,1,0,1,1,1,0,1,2,1,1,1,1,1,3,0,1,1,2,0,0,0,1,1,1,1,0,0,0,1,1,0,2,2,0,2,3,0,0,1,0,0,1,2,2,0,2,0,0,1,0,0,0,0,2,3,0,1,1,1,2,4,0,2,3,0,2,1,1,2,2,3,1,2,0,1,0,0,3,2,0,2,1,2,0,0,3,0,2,0,1,0,1,2,0,3,1,1,2,1,0,0,1,0,2,1,4,3,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,1,2,1,0,1,0,1,0,0,0,1,1,0,3,2,2,1,0,1,1,2,0,0,2,0,1,1,3,2,4,2,0,2,2,0,1,1,0,3,3,3,0,1,1,0,4,1,0,2,1,1,1,1,1,0,4,1,0,0,3,0,0,2,1,1,2,0,1,0,1,0,0,0,1,2,0,2,1,2,1,0,1,0,1,1,1,1,3,1,0,1,3,1,0,3,1,1,1,1,0,1,0,1,1,1,0,2,2,2,0,1,3,3,1,0,0,1,3,1,2,0,1,1,0,1,1,1,0,0,0,1,2,0,0,0,2,1,0,2,3,1,0,1,2,0,0,0,1,1,3,0,0,3,3,0,2,2,0,2,0,1,0,1,0,0,0,0,0,3,1,0,1,0,0,0,2,0,1,1,1,0,0,2,3,1,3,0,1,0,1,3,0,0,0,0,0,1,1,2,1,0,1,0,1,1,2,0,0,0,1,0,4,1,1,2,0,2,1,1,1,3,1,1,3,3,0,0,0,0,1,0,1,1,1,0,1,1,1,1,2,1,1,3,0,1,4,0,1,2,1,1,4,0,1,0,2,2,0,4,1,2,2,2,3,2,1,0,3,1,1,0,0,3,0,3,4,3,0,0,0,0,1,2,1,2,1,1,0,0,0,0,1,1,0,1,0,3,0,1,1,0,2,0,0,0,1,0,0,1,0,2,1,4,4,0,2,1,1,0,0,1,1,2,0,0,0,0,0,4,0,0,3,1,2,1,3,1,4,2,3,0,3,0,2,0,0,1,1,0,2,1,2,2,1,2,1,2,0,1,1,0,0,1,3,0,0,3,2,2,0,1,0,0,3,1,2,3,1,1,0,0,1,3,0,0,0,0,2,0,0,1,0,3,0,1,1,1,0,1,0,1,0,1,2,0,2,0,0,0,0,0,1,0,1,1,0,1,2,0,0,0,1,1,0,0,0,1,1,2,0,0,2,1,0,1,1,2,0,0,0,2,0,2,2,2,1,1,2,2,2,1,1,1,1,2,1,0,1,1,2,0,3,1,1,0,2,1,1,0,2,0,2,0,0,2,0,1,0,0,0,2,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,2,0,1,2,0,4,0,0,2,3,0,3,4,0,0,2,1,1,0,1,0,2,1,0,1,1,2,2,0,0,0,0,2,1,0,0,1,1,0,0,1,1,1,3,1,0,0,0,0,2,1,0,2,3,1,2,0,0,1,3,1,1,0,0,3,3,1,0,0,2,0,1,2,2,0,1,1,1,1,0,2,2,0,1,1,0,0,1,0,0,2,3,0,0,1,0,2,0,0,2,0,1,2,0,0,1,3,2,0,1,1,0,0,1,2,2,1,1,0,3,1,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,2,1,1,1,0,0,0,1,1,1,0,0,1,2,2,2,0,0,0,1,1,2,2,2,0,0,0,0,3,3,3,0,1,2,1,0,0,1,2,0,0,0,2,1,0,1,0,0,0,2,0,1,2,0,2,0,1,3,0,1,3,1,1,2,1,2,1,0,1,0,0,2,0,0,0,0,0,0,3,1,1,0,2,1,2,0,1,2,1,1,2,0,0,0,0,1,0,3,0,2,2,0,0,1,1,1,1,0,1,1,0,0,0,2,2,2,1,3,0,0,2,0,1,5,2,2,2,1,0,2,1,0,1,1,0,1,2,1,2,1,2,1,0,0,0,0,2,1,0,2,1,2,0,0,1,0,1,3,3,2,3,3,2,2,0,0,3,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,0,2,0,0,1,2,1,0,1,1,1,2,0,0,3,3,0,0,1,0,1,0,2,0,2,1,1,1,1,1,0,0,1,1,0,2,1,0,1,1,1,2,0,0,0,0,1,2,1,2,0,2,0,2,0,2,1,0,0,2,0,0,1,2,0,1,0,1,3,1,1,2,0,0,1,0,1,0,1,2,1,1,3,1,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,2,2,0,1,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,0,1,0,0,0,3,0,0,0,0,0,2,4,0,0,0,2,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0],"expected":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0001,0.0003,0.0006,0.0013,0.0026,0.0049,0.0084,0.0129,0.0203,0.0305,0.0443,0.0623,0.0853,0.114,0.1488,0.1908,0.2401,0.2973,0.3631,0.4375,0.5207,0.6135,0.7151,0.8259,0.9463,1.0754,1.2131,1.36,1.5148,1.6771,1.8477,2.0254,2.2094,2.3995,2.5963,2.7981,3.0044,3.2152,3.4307,3.6495,3.871,4.095,4.3223,4.5512,4.7812,5.012,5.2443,5.4772,5.7098,5.9419,6.1731,6.4047,6.635,6.8636,7.0903,7.3149,7.5386,7.7599,7.9785,8.1944,8.4074,8.6188,8.8289,9.0383,9.2491,9.4653,9.6937,9.9453,10.2343,10.58,11.0068,11.542,12.2121,13.0376,14.0251,15.1603,16.4039,17.69,18.9304,20.0247,20.8758,21.4043,21.5645,21.3448,20.5828,19.7811,18.8173,17.7931,16.7993,15.9055,15.1554,14.5666,14.1354,13.8434,13.665,13.5733,13.5425,13.5522,13.5869,13.6355,13.6911,13.7493,13.8075,13.8648,13.9199,13.9726,14.0227,14.0701,14.1149,14.1572,14.197,14.2346,14.27,14.3032,14.334,14.3627,14.3892,14.4136,14.436,14.4564,14.4749,14.4918,14.5069,14.5202,14.5318,14.5417,14.55,14.5567,14.5619,14.5656,14.568,14.569,14.5687,14.5671,14.5643,14.5602,14.5549,14.5485,14.5409,14.5323,14.5226,14.512,14.5005,14.488,14.4745,14.4602,14.4451,14.4291,14.4123,14.3948,14.3766,14.3576,14.338,14.3177,14.2968,14.2753,14.2532,14.2305,14.2073,14.1836,14.1593,14.1346,14.1094,14.0837,14.0577,14.0313,14.0046,13.9774,13.9499,13.922,13.8938,13.8653,13.8364,13.8073,13.7779,13.7483,13.7184,13.6894,13.6609,13.6321,13.6031,13.5738,13.5442,13.5144,13.4844,13.4542,13.4238,13.3933,13.3625,13.3316,13.3005,13.2692,13.2379,13.2064,13.1749,13.1436,13.1127,13.083,13.0556,13.0334,13.0211,13.028,13.0706,13.1778,13.3981,13.8107,14.5402,15.7763,17.7966,20.992,25.8904,33.1729,43.6755,58.3655,78.2862,104.4614,137.7611,178.735,227.4319,283.2319,344.7251,409.672,475.072,537.3535,592.6767,637.3183,668.0845,682.6911,680.0463,660.3878,625.2507,577.2706,519.8581,456.7993,391.8477,328.3676,269.0727,215.8846,169.5597,129.2713,98.2212,73.8552,55.2664,41.4527,31.4342,24.3222,19.3685,15.9727,13.6744,12.1335,11.1068,10.4249,9.9723,9.6711,9.4697,9.3336,9.2451,9.1882,9.1488,9.1206,9.0992,9.0819,9.0671,9.0536,9.041,9.0287,9.0165,9.0045,8.9924,8.9803,8.9681,8.9558,8.9435,8.9311,8.9186,8.907,8.8972,8.8872,8.8772,8.867,8.8568,8.8464,8.8359,8.8254,8.8147,8.804,8.7933,8.7826,8.7721,8.7621,8.7534,8.747,8.7455,8.753,8.7774,8.8324,8.9417,9.144,9.5023,10.1161,11.1389,12.7996,15.4305,19.4992,25.6427,34.7009,47.7402,66.0628,91.1887,124.8018,168.6509,224.4019,293.4424,376.6499,474.1457,585.0644,707.376,837.8009,971.8492,1104.0085,1228.0777,1337.628,1426.5476,1489.6059,1522.9671,1524.5818,1494.4041,1434.3991,1348.3424,1241.439,1119.8146,989.9487,858.121,729.9356,609.9684,501.5633,406.7768,326.4535,260.4003,207.6207,166.5723,135.4137,112.2197,95.1492,82.5619,72.8071,64.5985,58.1219,52.631,47.5211,42.6317,37.9173,33.4038,29.1529,25.234,21.7072,18.6121,15.9642,13.7556,11.9588,10.5325,9.4272,8.5905,7.9714,7.5233,7.2058,6.9853,6.8359,6.7358,6.6693,6.6254,6.5962,6.5764,6.5623,6.5518,6.5433,6.536,6.5294,6.523,6.5169,6.5109,6.5048,6.4988,6.4927,6.4866,6.4805,6.4743,6.4682,6.4619,6.4557,6.4494,6.4431,6.4368,6.4306,6.4246,6.4186,6.4125,6.4064,6.4003,6.3942,6.388,6.3818,6.3756,6.3693,6.363,6.3567,6.3504,6.344,6.3376,6.3312,6.3248,6.3183,6.3119,6.3054,6.2988,6.2923,6.2857,6.2792,6.2726,6.2659,6.2593,6.2526,6.246,6.2394,6.2328,6.2262,6.2195,6.2129,6.2062,6.1995,6.1928,6.186,6.1793,6.1725,6.1657,6.159,6.1522,6.1454,6.1385,6.1317,6.1249,6.1181,6.1113,6.1046,6.0981,6.0917,6.0857,6.0802,6.0757,6.0726,6.0715,6.0736,6.0801,6.093,6.1149,6.149,6.1995,6.2715,6.3708,6.5044,6.6797,6.9048,7.1872,7.5341,7.9509,8.441,9.0042,9.6366,10.3297,11.07,11.8389,12.6136,13.3677,14.0727,14.6994,15.2204,15.6116,15.8542,15.9362,15.8531,15.6088,15.2146,14.6889,14.0554,13.3414,12.5759,11.7876,11.003,10.2456,9.5339,8.882,8.2988,7.7887,7.3518,6.9853,6.6838,6.4403,6.2471,6.0963,5.9803,5.8922,5.8261,5.7767,5.7398,5.7122,5.6912,5.6748,5.6617,5.6507,5.6412,5.6326,5.6247,5.6171,5.6097,5.6025,5.5954,5.5884,5.5813,5.5743,5.5674,5.5604,5.5534,5.5465,5.5395,5.5326,5.5257,5.5188,5.5118,5.5049,5.498,5.4912,5.4843,5.4774,5.4706,5.4639,5.4572,5.4506,5.4443,5.4384,5.4331,5.4288,5.4261,5.4257,5.4289,5.4376,5.4543,5.4827,5.5275,5.5955,5.6952,5.838,6.0377,6.3116,6.6802,7.1674,7.8,8.6072,9.6192,10.8659,12.3745,14.1672,16.2583,18.6514,21.3366,24.2881,27.4627,30.7995,34.2202,37.6318,40.9299,44.0038,46.7425,49.0413,50.8079,51.9695,52.4766,52.3073,51.4686,49.996,47.9505,45.4152,42.489,39.2806,35.9015,32.4602,29.056,25.7754,22.6884,19.8475,17.2874,15.026,13.0663,11.3994,10.0067,8.8633,7.9404,7.2078,6.6355,6.1954,5.8621,5.6132,5.4298,5.2963,5.2001,5.1312,5.0821,5.0469,5.0215,5.0027,4.9885,4.9772,4.9679,4.9598,4.9525,4.9457,4.9391,4.9328,4.9266,4.9205,4.9144,4.9084,4.9023,4.8963,4.8903,4.8843,4.8784,4.8724,4.8665,4.8606,4.8548,4.8491,4.8436,4.8383,4.8335,4.8293,4.8262,4.8246,4.8255,4.8298,4.8394,4.8565,4.8843,4.9272,4.9909,5.0829,5.2129,5.3929,5.638,5.9659,6.3979,6.9579,7.6729,8.5718,9.6846,11.041,12.6683,14.5898,16.8218,19.3714,22.2338,25.3903,28.8065,32.4314,36.1973,40.0211,43.8071,47.4497,50.8388,53.8648,56.4244,58.4267,59.7981,60.487,60.4672,59.7393,58.3305,56.2934,53.7022,50.6486,47.2362,43.5747,39.7743,35.9399,32.1672,28.5384,25.1207,21.9644,19.1032,16.5553,14.3249,12.4045,10.7775,9.4204,8.3057,7.4037,6.6844,6.119,5.6807,5.3454,5.0923,4.9035,4.7642,4.6625,4.5887,4.5355,4.4972,4.4694,4.4491,4.4339,4.4221,4.4127,4.4049,4.3981,4.3919,4.3861,4.3807,4.3753,4.3701,4.365,4.3599,4.3548,4.3497,4.3447,4.3396,4.3346,4.3296,4.3246,4.3196,4.3146,4.3097,4.3047,4.2998,4.2948,4.2899,4.285,4.28,4.2751,4.2703,4.2654,4.2605,4.2557,4.2508,4.246,4.2411,4.2363,4.2315,4.2267,4.2219,4.2171,4.2123,4.2075,4.2028,4.198,4.1933,4.1885,4.1838,4.1791,4.1744,4.1697,4.165,4.1603,4.1556,4.151,4.1463,4.1416,4.137,4.1324,4.1277,4.1231,4.1185,4.1139,4.1093,4.1047,4.1002,4.0956,4.091,4.0865,4.0819,4.0774,4.0729,4.0684,4.0639,4.0594,4.0549,4.0504,4.0459,4.0414,4.037,4.0325,4.0281,4.0237,4.0192,4.0148,4.0104,4.006,4.0016,3.9972,3.9928,3.9885,3.9841,3.9797,3.9754,3.9711,3.9667,3.9624,3.9581,3.9538,3.9495,3.9452,3.9409,3.9366,3.9324,3.9281,3.9239,3.9196,3.9154,3.9111,3.9069,3.9027,3.8985,3.8943,3.8901,3.8859,3.8818,3.8776,3.8734,3.8693,3.8651,3.861,3.8569,3.8528,3.8486,3.8445,3.8404,3.8363,3.8323,3.8282,3.8241,3.8201,3.816,3.8119,3.8079,3.8039,3.7999,3.7958,3.7918,3.7878,3.7838,3.7798,3.7759,3.7719,3.7679,3.764,3.76,3.7561,3.7521,3.7482,3.7443,3.7403,3.7364,3.7325,3.7286,3.7248,3.7209,3.717,3.7131,3.7093,3.7054,3.7016,3.6977,3.6939,3.6901,3.6863,3.6824,3.6786,3.6748,3.671,3.6673,3.6635,3.6597,3.656,3.6522,3.6484,3.6447,3.641,3.6372,3.6335,3.6298,3.6261,3.6224,3.6187,3.615,3.6113,3.6076,3.604,3.6003,3.5966,3.593,3.5893,3.5857,3.5821,3.5785,3.5748,3.5712,3.5676,3.564,3.5604,3.5568,3.5533,3.5497,3.5461,3.5426,3.539,3.5355,3.5319,3.5284,3.5248,3.5213,3.5178,3.5143,3.5108,3.5073,3.5038,3.5003,3.4968,3.4934,3.4899,3.4864,3.483,3.4795,3.4761,3.4727,3.4692,3.4658,3.4624,3.459,3.4556,3.4522,3.4488,3.4454,3.442,3.4386,3.4352,3.4319,3.4285,3.4252,3.4218,3.4185,3.4151,3.4118,3.4085,3.4052,3.4019,3.3986,3.3953,3.392,3.3887,3.3854,3.3821,3.3788,3.3756,3.3723,3.3691,3.3658,3.3626,3.3593,3.3561,3.3529,3.3496,3.3464,3.3432,3.34,3.3368,3.3336,3.3304,3.3272,3.3241,3.3209,3.3177,3.3146,3.3114,3.3083,3.3051,3.302,3.2988,3.2957,3.2926,3.2895,3.2864,3.2833,3.2802,3.2771,3.274,3.2709,3.2678,3.2647,3.2617,3.2586,3.2555,3.2525,3.2494,3.2464,3.2433,3.2403,3.2373,3.2343,3.2312,3.2282,3.2252,3.2222,3.2192,3.2162,3.2132,3.2103,3.2073,3.2043,3.2013,3.1984,3.1954,3.1925,3.1895,3.1866,3.1836,3.1807,3.1778,3.1749,3.1719,3.169,3.1661,3.1632,3.1603,3.1574,3.1545,3.1516,3.1488,3.1459,3.143,3.1402,3.1373,3.1344,3.1316,3.1287,3.1259,3.1231,3.1202,3.1174,3.1146,3.1118,3.1089,3.1061,3.1033,3.1005,3.0977,3.095,3.0922,3.0894,3.0866,3.0838,3.0811,3.0783,3.0756,3.0728,3.07,3.0673,3.0646,3.0618,3.0591,3.0564,3.0536,3.0509,3.0482,3.0455,3.0428,3.0401,3.0374,3.0347,3.032,3.0293,3.0267,3.024,3.0213,3.0187,3.016,3.0133,3.0107,3.008,3.0054,3.0028,3.0001,2.9975,2.9949,2.9922,2.9896,2.987,2.9844,2.9818,2.9792,2.9766,2.974,2.9714,2.9688,2.9663,2.9637,2.9611,2.9585,2.956,2.9534,2.9509,2.9483,2.9458,2.9432,2.9407,2.9381,2.9356,2.9331,2.9306,2.928,2.9255,2.923,2.9205,2.918,2.9155,2.913,2.9105,2.908,2.9056,2.9031,2.9006,2.8981,2.8957,2.8932,2.8908,2.8883,2.8858,2.8834,2.881,2.8785,2.8761,2.8736,2.8712,2.8688,2.8664,2.864,2.8615,2.8591,2.8567,2.8543,2.8519,2.8495,2.8471,2.8448,2.8424,2.84,2.8376,2.8352,2.8329,2.8305,2.8281,2.8258,2.8234,2.8211,2.8187,2.8164,2.8141,2.8117,2.8094,2.8071,2.8047,2.8024,2.8001,2.7978,2.7955,2.7932,2.7908,2.7885,2.7863,2.784,2.7817,2.7794,2.7771,2.7748,2.7725,2.7703,2.768,2.7657,2.7635,2.7612,2.759,2.7567,2.7545,2.7522,2.75,2.7477,2.7455,2.7433,2.741,2.7388,2.7366,2.7344,2.7322,2.73,2.7278,2.7256,2.7234,2.7212,2.719,2.7168,2.7146,2.7125,2.7103,2.7081,2.706,2.7039,2.7017,2.6996,2.6975,2.6954,2.6933,2.6913,2.6892,2.6872,2.6851,2.6831,2.6811,2.6791,2.6771,2.6751,2.6731,2.6711,2.6692,2.6672,2.6652,2.6632,2.6612,2.6592,2.6572,2.6551,2.6531,2.651,2.6489,2.6468,2.6447,2.6425,2.6404,2.6382,2.636,2.6338,2.6316,2.6294,2.6272,2.625,2.6228,2.6207,2.6185,2.6163,2.6142,2.612,2.6099,2.6077,2.6056,2.6035,2.6014,2.5994,2.5973,2.5952,2.5932,2.5912,2.5891,2.5871,2.5851,2.5831,2.5811,2.5791,2.5771,2.5751,2.5731,2.5711,2.5691,2.5672,2.5652,2.5632,2.5613,2.5593,2.5573,2.5554,2.5534,2.5515,2.5495,2.5476,2.5457,2.5437,2.5418,2.5399,2.5379,2.536,2.5341,2.5321,2.5302,2.5283,2.5264,2.5245,2.5226,2.5207,2.5188,2.5169,2.515,2.5131,2.5112,2.5093,2.5074,2.5055,2.5036,2.5018,2.4999,2.498,2.4961,2.4943,2.4924,2.4905,2.4887,2.4868,2.485,2.4831,2.4813,2.4794,2.4776,2.4757,2.4739,2.4721,2.4702,2.4684,2.4666,2.4647,2.4629,2.4611,2.4593,2.4575,2.4556,2.4538,2.452,2.4502,2.4484,2.4466,2.4448,2.443,2.4412,2.4394,2.4376,2.4358,2.4341,2.4323,2.4305,2.4287,2.4269,2.4252,2.4234,2.4216,2.4199,2.4181,2.4163,2.4146,2.4128,2.4111,2.4093,2.4076,2.4058,2.4041,2.4023,2.4006,2.3989,2.3971,2.3954,2.3937,2.392,2.3902,2.3885,2.3868,2.3851,2.3834,2.3816,2.3799,2.3782,2.3765,2.3748,2.3731,2.3714,2.3697,2.3681,2.3664,2.3647,2.363,2.3613,2.3597,2.358,2.3563,2.3547,2.353,2.3514,2.3497,2.348,2.3464,2.3447,2.3431,2.3414,2.3398,2.3382,2.3365,2.3349,2.3332,2.3316,2.3299,2.3283,2.3267,2.325,2.3234,2.3217,2.3201,2.3184,2.3168,2.3152,2.3135,2.3119,2.3103,2.3086,2.307,2.3054,2.3038,2.3021,2.3005,2.2989,2.2973,2.2957,2.2941,2.2925,2.2909,2.2893,2.2877,2.2861,2.2845,2.2829,2.2813,2.2798,2.2782,2.2766,2.275,2.2735,2.2719,2.2703,2.2688,2.2672,2.2656,2.2641,2.2625,2.261,2.2594,2.2579,2.2563,2.2548,2.2532,2.2517,2.2502,2.2486,2.2471,2.2456,2.244,2.2425,2.241,2.2394,2.2379,2.2364,2.2349,2.2334,2.2318,2.2303,2.2288,2.2273,2.2258,2.2243,2.2228,2.2213,2.2198,2.2183,2.2168,2.2153,2.2138,2.2123,2.2108,2.2093,2.2078,2.2064,2.2049,2.2034,2.2019,2.2004,2.199,2.1975,2.196,2.1946,2.1931,2.1916,2.1902,2.1887,2.1872,2.1858,2.1843,2.1829,2.1814,2.18,2.1785,2.1771,2.1756,2.1742,2.1727,2.1713,2.1699,2.1684,2.167,2.1656,2.1641,2.1627,2.1613,2.1598,2.1584,2.157,2.1556,2.1542,2.1528,2.1514,2.1499,2.1485,2.1472,2.1458,2.1444,2.143,2.1417,2.1404,2.1391,2.1379,2.1367,2.1356,2.1346,2.1336,2.1329,2.1323,2.1319,2.1318,2.1321,2.1327,2.1339,2.1357,2.1381,2.1415,2.1458,2.1512,2.1579,2.1662,2.1761,2.188,2.2019,2.2181,2.2368,2.2581,2.2822,2.3093,2.3394,2.3726,2.4088,2.448,2.4899,2.5345,2.5813,2.63,2.6801,2.7312,2.7825,2.8336,2.8835,2.9317,2.9774,3.0198,3.0582,3.092,3.1205,3.1432,3.1597,3.1697,3.1729,3.1692,3.1588,3.1417,3.1183,3.0889,3.0542,3.0145,2.9707,2.9234,2.8733,2.8212,2.7678,2.7138,2.66,2.6069,2.555,2.5049,2.457,2.4115,2.3688,2.329,2.2923,2.2585,2.2279,2.2002,2.1753,2.1531,2.1335,2.1163,2.1012,2.088,2.0766,2.0668,2.0583,2.051,2.0448,2.0394,2.0348,2.0308,2.0274,2.0244,2.0217,2.0194,2.0173,2.0153,2.0136,2.0119,2.0104,2.0089,2.0075,2.0061,2.0048,2.0035,2.0022,2.0009,1.9997,1.9984,1.9972,1.9959,1.9947,1.9935,1.9922,1.991,1.9898,1.9886,1.9873,1.9861,1.9849,1.9837,1.9825,1.9813,1.9801,1.9789,1.9776,1.9764,1.9752,1.974,1.9728,1.9716,1.9704,1.9692,1.968,1.9668,1.9657,1.9645,1.9633,1.9621,1.9609,1.9597,1.9585,1.9573,1.9562,1.955,1.9538,1.9526,1.9514,1.9503,1.9491,1.9479,1.9468,1.9456,1.9444,1.9432,1.9421,1.9409,1.9398,1.9386,1.9374,1.9363,1.9351,1.934,1.9328,1.9317,1.9305,1.9294,1.9282,1.9271,1.9259,1.9248,1.9237,1.9226,1.9214,1.9203,1.9193,1.9182,1.9171,1.9161,1.9151,1.9141,1.9132,1.9124,1.9116,1.9108,1.9102,1.9096,1.9092,1.9089,1.9088,1.9088,1.909,1.9095,1.9101,1.9111,1.9123,1.9138,1.9157,1.9178,1.9203,1.9232,1.9264,1.93,1.9339,1.9381,1.9426,1.9473,1.9523,1.9574,1.9626,1.9678,1.973,1.9781,1.9829,1.9875,1.9917,1.9955,1.9988,2.0014,2.0035,2.0048,2.0054,2.0052,2.0043,2.0025,2.0,1.9967,1.9928,1.9881,1.9829,1.9771,1.9709,1.9642,1.9573,1.9501,1.9428,1.9354,1.928,1.9207,1.9136,1.9066,1.8998,1.8934,1.8872,1.8814,1.8759,1.8707,1.866,1.8615,1.8574,1.8536,1.8501,1.847,1.844,1.8414,1.8389,1.8367,1.8346,1.8327,1.8309,1.8292,1.8277,1.8262,1.8248,1.8235,1.8223,1.821,1.8199,1.8187,1.8176,1.8165,1.8154,1.8143,1.8133,1.8122,1.8112,1.8102,1.8091,1.8081,1.8071,1.8061,1.805,1.804,1.803,1.802,1.801,1.8,1.799,1.7979,1.7969,1.7959,1.7949,1.7939,1.7929,1.7919,1.7909,1.7899,1.7889,1.7879,1.7869,1.7859,1.7849,1.7839,1.783,1.782,1.781,1.78,1.779,1.778,1.777,1.776,1.7751,1.7741,1.7731,1.7721,1.7711,1.7701,1.7692,1.7682,1.7672,1.7662,1.7653,1.7643,1.7633,1.7624,1.7614,1.7604,1.7594,1.7585,1.7575,1.7565,1.7556,1.7546,1.7537,1.7527,1.7517,1.7508,1.7498,1.7489,1.7479,1.747,1.746,1.745,1.7441,1.7431,1.7422,1.7412,1.7403,1.7393,1.7384,1.7375,1.7365,1.7356,1.7346,1.7337,1.7327,1.7318,1.7309,1.7299,1.729,1.7281,1.7271,1.7262,1.7253,1.7243,1.7234,1.7225,1.7215,1.7206,1.7197,1.7188,1.7178,1.7169,1.716,1.7151,1.7141,1.7132,1.7123,1.7114,1.7105,1.7095,1.7086,1.7077,1.7068,1.7059,1.705,1.7041,1.7032,1.7022,1.7013,1.7004,1.6995,1.6986,1.6977,1.6968,1.6959,1.695,1.6941,1.6932,1.6923,1.6914,1.6905,1.6896,1.6887,1.6878,1.6869,1.686,1.6851,1.6842,1.6834,1.6825,1.6816,1.6807,1.6798,1.6789,1.678,1.6771,1.6763,1.6754,1.6745,1.6736,1.6727,1.6719,1.671,1.6701,1.6692,1.6683,1.6675,1.6666,1.6657,1.6649,1.664,1.6631,1.6622,1.6614,1.6605,1.6596,1.6588,1.6579,1.657,1.6562,1.6553,1.6545,1.6536,1.6527,1.6519,1.651,1.6502,1.6493,1.6484,1.6476,1.6467,1.6459,1.645,1.6442,1.6433,1.6425,1.6416,1.6408,1.6399,1.6391,1.6382,1.6374,1.6365,1.6357,1.6349,1.634,1.6332,1.6323,1.6315,1.6307,1.6298,1.629,1.6281,1.6273,1.6265,1.6256,1.6248,1.624,1.6231,1.6223,1.6215,1.6207,1.6198,1.619,1.6182,1.6173,1.6165,1.6157,1.6149,1.614,1.6132,1.6124,1.6116,1.6108,1.6099,1.6091,1.6083,1.6075,1.6067,1.6059,1.605,1.6042,1.6034,1.6026,1.6018,1.601,1.6002,1.5994,1.5986,1.5978,1.5969,1.5961,1.5953,1.5945,1.5937,1.5929,1.5921,1.5913,1.5905,1.5897,1.5889,1.5881,1.5873,1.5865,1.5857,1.5849,1.5841,1.5833,1.5826,1.5818,1.581,1.5802,1.5794,1.5786,1.5778,1.577,1.5762,1.5755,1.5747,1.5739,1.5731,1.5723,1.5715,1.5707,1.57,1.5692,1.5684,1.5676,1.5669,1.5661,1.5653,1.5645,1.5637,1.563,1.5622,1.5614,1.5607,1.5599,1.5591,1.5583,1.5576,1.5568,1.556,1.5553,1.5545,1.5537,1.553,1.5522,1.5514,1.5507,1.5499,1.5491,1.5484,1.5476,1.5469,1.5461,1.5453,1.5446,1.5438,1.5431,1.5423,1.5416,1.5408,1.5401,1.5393,1.5386,1.5378,1.5371,1.5363,1.5356,1.5348,1.5341,1.5333,1.5326,1.5318,1.5311,1.5303,1.5296,1.5288,1.5281,1.5274,1.5266,1.5259,1.5251,1.5244,1.5237,1.5229,1.5222,1.5214,1.5207,1.52,1.5192,1.5185,1.5178,1.517,1.5163,1.5156,1.5148,1.5141,1.5134,1.5127,1.5119,1.5112,1.5105,1.5098,1.509,1.5083,1.5076,1.5069,1.5061,1.5054,1.5047,1.504,1.5032,1.5025,1.5018,1.5011,1.5004,1.4997,1.4989,1.4982,1.4975,1.4968,1.4961,1.4954,1.4947,1.4939,1.4932,1.4925,1.4918,1.4911,1.4904,1.4897,1.489,1.4883,1.4876,1.4869,1.4862,1.4855,1.4847,1.484,1.4833,1.4826,1.4819,1.4812,1.4805,1.4798,1.4791,1.4784,1.4777,1.4771,1.4764,1.4757,1.475,1.4743,1.4736,1.4729,1.4722,1.4715,1.4708,1.4701,1.4694,1.4687,1.468,1.4674,1.4667,1.466,1.4653,1.4646,1.4639,1.4632,1.4626,1.4619,1.4612,1.4605,1.4598,1.4592,1.4585,1.4578,1.4571,1.4564,1.4558,1.4551,1.4544,1.4537,1.453,1.4524,1.4517,1.451,1.4504,1.4497,1.449,1.4483,1.4477,1.447,1.4463,1.4457,1.445,1.4443,1.4436,1.443,1.4423,1.4417,1.441,1.4403,1.4397,1.439,1.4383,1.4377,1.437,1.4363,1.4357,1.435,1.4344,1.4337,1.433,1.4324,1.4317,1.4311,1.4304,1.4298,1.4291,1.4285,1.4278,1.4271,1.4265,1.4258,1.4252,1.4245,1.4239,1.4232,1.4226,1.4219,1.4213,1.4206,1.42,1.4193,1.4187,1.4181,1.4174,1.4168,1.4161,1.4155,1.4148,1.4142,1.4136,1.4129,1.4123,1.4116,1.411,1.4104,1.4097,1.4091,1.4084,1.4078,1.4072,1.4065,1.4059,1.4053,1.4046,1.404,1.4034,1.4027,1.4021,1.4015,1.4008,1.4002,1.3996,1.3989,1.3983,1.3977,1.3971,1.3964,1.3958,1.3952,1.3946,1.3939,1.3933,1.3927,1.3921,1.3914,1.3908,1.3902,1.3896,1.3889,1.3883,1.3877,1.3871,1.3865,1.3858,1.3852,1.3846,1.384,1.3834,1.3828,1.3821,1.3815,1.3809,1.3803,1.3797,1.3791,1.3785,1.3779,1.3772,1.3766,1.376,1.3754,1.3748,1.3742,1.3736,1.373,1.3724,1.3718,1.3712,1.3705,1.3699,1.3693,1.3687,1.3681,1.3675,1.3669,1.3663,1.3657,1.3651,1.3645,1.3639,1.3633,1.3627,1.3621,1.3615,1.3609,1.3603,1.3597,1.3591,1.3585,1.3579,1.3573,1.3567,1.3562,1.3556,1.355,1.3544,1.3538,1.3532,1.3526,1.352,1.3514,1.3508,1.3502,1.3497,1.3491,1.3485,1.3479,1.3473,1.3467,1.3461,1.3455,1.345,1.3444,1.3438,1.3432,1.3426,1.342,1.3415,1.3409,1.3403,1.3397,1.3391,1.3386,1.338,1.3374,1.3368,1.3362,1.3357,1.3351,1.3345,1.3339,1.3334,1.3328,1.3322,1.3316,1.3311,1.3305,1.3299,1.3293,1.3288,1.3282,1.3276,1.3271,1.3265,1.3259,1.3253,1.3248,1.3242,1.3236,1.3231,1.3225,1.3219,1.3214,1.3208,1.3202,1.3197,1.3191,1.3185,1.318,1.3174,1.3169,1.3163,1.3157,1.3152,1.3146,1.314,1.3135,1.3129,1.3124,1.3118,1.3113,1.3107,1.3101,1.3096,1.309,1.3085,1.3079,1.3074,1.3068,1.3062,1.3057,1.3051,1.3046,1.304,1.3035,1.3029,1.3024,1.3018,1.3013,1.3007,1.3002,1.2996,1.2991,1.2985,1.298,1.2974,1.2969,1.2963,1.2958,1.2952,1.2947,1.2942,1.2936,1.2931,1.2925,1.292,1.2914,1.2909,1.2904,1.2898,1.2893,1.2887,1.2882,1.2877,1.2871,1.2866,1.286,1.2855,1.285,1.2844,1.2839,1.2833,1.2828,1.2823,1.2817,1.2812,1.2807,1.2801,1.2796,1.2791,1.2785,1.278,1.2775,1.2769,1.2764,1.2759,1.2753,1.2748,1.2743,1.2738,1.2732,1.2727,1.2722,1.2716,1.2711,1.2706,1.2701,1.2695,1.269,1.2685,1.268,1.2674,1.2669,1.2664,1.2659,1.2653,1.2648,1.2643,1.2638,1.2632,1.2627,1.2622,1.2617,1.2612,1.2606,1.2601,1.2596,1.2591,1.2586,1.258,1.2575,1.257,1.2565,1.256,1.2555,1.2549,1.2544,1.2539,1.2534,1.2529,1.2524,1.2519,1.2513,1.2508,1.2503,1.2498,1.2493,1.2488,1.2483,1.2478,1.2473,1.2468,1.2462,1.2457,1.2452,1.2447,1.2442,1.2437,1.2432,1.2427,1.2422,1.2417,1.2412,1.2407,1.2402,1.2397,1.2392,1.2386,1.2381,1.2376,1.2371,1.2366,1.2361,1.2356,1.2351,1.2346,1.2341,1.2336,1.2331,1.2326,1.2321,1.2316,1.2311,1.2306,1.2301,1.2296,1.2291,1.2286,1.2282,1.2277,1.2272,1.2267,1.2262,1.2257,1.2252,1.2247,1.2242,1.2237,1.2232,1.2227,1.2222,1.2217,1.2212,1.2207,1.2203,1.2198,1.2193,1.2188,1.2183,1.2178,1.2173,1.2168,1.2163,1.2159,1.2154,1.2149,1.2144,1.2139,1.2134,1.2129,1.2125,1.212,1.2115,1.211,1.2105,1.21,1.2095,1.2091,1.2086,1.2081,1.2076,1.2071,1.2067,1.2062,1.2057,1.2052,1.2047,1.2043,1.2038,1.2033,1.2028,1.2023,1.2019,1.2014,1.2009,1.2004,1.1999,1.1995,1.199,1.1985,1.198,1.1976,1.1971,1.1966,1.1961,1.1957,1.1952,1.1947,1.1943,1.1938,1.1933,1.1928,1.1924,1.1919,1.1914,1.1909,1.1905,1.19,1.1895,1.1891,1.1886,1.1881,1.1877,1.1872,1.1867,1.1863,1.1858,1.1853,1.1849,1.1844,1.1839,1.1835,1.183,1.1825,1.1821,1.1816,1.1811,1.1807,1.1802,1.1797,1.1793,1.1788,1.1784,1.1779,1.1774,1.177,1.1765,1.176,1.1756,1.1751,1.1747,1.1742,1.1737,1.1733,1.1728,1.1724,1.1719,1.1714,1.171,1.1705,1.1701,1.1696,1.1692,1.1687,1.1683,1.1678,1.1673,1.1669,1.1664,1.166,1.1655,1.1651,1.1646,1.1642,1.1637,1.1633,1.1628,1.1623,1.1619,1.1614,1.161,1.1605,1.1601,1.1596,1.1592,1.1587,1.1583,1.1578,1.1574,1.1569,1.1565,1.156,1.1556,1.1551,1.1547,1.1542,1.1538,1.1534,1.1529,1.1525,1.152,1.1516,1.1511,1.1507,1.1502,1.1498,1.1493,1.1489,1.1485,1.148,1.1476,1.1471,1.1467,1.1462,1.1458,1.1454,1.1449,1.1445,1.144,1.1436,1.1431,1.1427,1.1423,1.1418,1.1414,1.1409,1.1405,1.1401,1.1396,1.1392,1.1388,1.1383,1.1379,1.1374,1.137,1.1366,1.1361,1.1357,1.1353,1.1348,1.1344,1.134,1.1335,1.1331,1.1326,1.1322,1.1318,1.1313,1.1309,1.1305,1.13,1.1296,1.1292,1.1287,1.1283,1.1279,1.1274,1.127,1.1266,1.1262,1.1257,1.1253,1.1249,1.1244,1.124,1.1236,1.1231,1.1227,1.1223,1.1219,1.1214,1.121,1.1206,1.1201,1.1197,1.1193,1.1189,1.1184,1.118,1.1176,1.1172,1.1167,1.1163,1.1159,1.1155,1.115,1.1146,1.1142,1.1138,1.1133,1.1129,1.1125,1.1121,1.1116,1.1112,1.1108,1.1104,1.1099,1.1095,1.1091,1.1087,1.1083,1.1078,1.1074,1.107,1.1066,1.1062,1.1057,1.1053,1.1049,1.1045,1.1041,1.1036,1.1032,1.1028,1.1024,1.102,1.1016,1.1011,1.1007,1.1003,1.0999,1.0995,1.099,1.0986,1.0982,1.0978,1.0974,1.097,1.0966,1.0961,1.0957,1.0953,1.0949,1.0945,1.0941,1.0937,1.0932,1.0928,1.0924,1.092,1.0916,1.0912,1.0908,1.0903,1.0899,1.0895,1.0891,1.0887,1.0883,1.0879,1.0875,1.0871,1.0866,1.0862,1.0858,1.0854,1.085,1.0846,1.0842,1.0838,1.0834,1.083,1.0826,1.0821,1.0817,1.0813,1.0809,1.0805,1.0801,1.0797,1.0793,1.0789,1.0785,1.0781,1.0777,1.0773,1.0769,1.0765,1.076,1.0756,1.0752,1.0748,1.0744,1.074,1.0736,1.0732,1.0728,1.0724,1.072,1.0716,1.0712,1.0708,1.0704,1.07,1.0696,1.0692,1.0688,1.0684,1.068,1.0676,1.0672,1.0668,1.0664,1.066,1.0656,1.0652,1.0648,1.0644,1.064,1.0636,1.0632,1.0628,1.0624,1.062,1.0616,1.0612,1.0608,1.0604,1.06,1.0596,1.0592,1.0588,1.0584,1.058,1.0576,1.0572,1.0568,1.0564,1.056,1.0556,1.0552,1.0548,1.0544,1.054,1.0536,1.0532,1.0528,1.0525,1.0521,1.0517,1.0513,1.0509,1.0505,1.0501,1.0497,1.0493,1.0489,1.0485,1.0481,1.0477,1.0473,1.0469,1.0465,1.0462,1.0458,1.0454,1.045,1.0446,1.0442,1.0438,1.0434,1.043,1.0426,1.0422,1.0419,1.0415,1.0411,1.0407,1.0403,1.0399,1.0395,1.0391,1.0387,1.0383,1.038,1.0376,1.0372,1.0368,1.0364,1.036,1.0356,1.0352,1.0348,1.0345,1.0341,1.0337,1.0333,1.0329,1.0325,1.0321,1.0317,1.0314,1.031,1.0306,1.0302,1.0298,1.0294,1.029,1.0287,1.0283,1.0279,1.0275,1.0271,1.0267,1.0264,1.026,1.0256,1.0252,1.0248,1.0244,1.024,1.0237,1.0233,1.0229,1.0225,1.0221,1.0217,1.0214,1.021,1.0206,1.0202,1.0198,1.0194,1.0191,1.0187,1.0183,1.0179,1.0175,1.0172,1.0168,1.0164,1.016,1.0156,1.0153,1.0149,1.0145,1.0141,1.0137,1.0134,1.013,1.0126,1.0122,1.0118,1.0115,1.0111,1.0107,1.0103,1.0099,1.0096,1.0092,1.0088,1.0084,1.008,1.0077,1.0073,1.0069,1.0065,1.0062,1.0058,1.0054,1.005,1.0046,1.0043,1.0039,1.0035,1.0031,1.0028,1.0024,1.002,1.0016,1.0013,1.0009,1.0005,1.0001,0.9997,0.9994,0.999,0.9986,0.9982,0.9979,0.9975,0.9971,0.9967,0.9964,0.996,0.9956,0.9953,0.9949,0.9945,0.9941,0.9938,0.9934,0.993,0.9926,0.9923,0.9919,0.9915,0.9911,0.9908,0.9904,0.99,0.9896,0.9893,0.9889,0.9885,0.9882,0.9878,0.9874,0.987,0.9867,0.9863,0.9859,0.9856,0.9852,0.9848,0.9844,0.9841,0.9837,0.9833,0.983,0.9826,0.9822,0.9818,0.9815,0.9811,0.9807,0.9804,0.98,0.9796,0.9793,0.9789,0.9785,0.9781,0.9778,0.9774,0.977,0.9767,0.9763,0.9759,0.9756,0.9752,0.9748,0.9745,0.9741,0.9737,0.9734,0.973,0.9726,0.9723,0.9719,0.9715,0.9712,0.9708,0.9704,0.97,0.9697,0.9693,0.9689,0.9686,0.9682,0.9678,0.9675,0.9671,0.9667,0.9664,0.966,0.9656,0.9653,0.9649,0.9646,0.9642,0.9638,0.9635,0.9631,0.9627,0.9624,0.962,0.9616,0.9613,0.9609,0.9605,0.9602,0.9598,0.9594,0.9591,0.9587,0.9583,0.958,0.9576,0.9573,0.9569,0.9565,0.9562,0.9558,0.9554,0.9551,0.9547,0.9543,0.954,0.9536,0.9533,0.9529,0.9525,0.9522,0.9518,0.9514,0.9511,0.9507,0.9504,0.95,0.9496,0.9493,0.9489,0.9485,0.9482,0.9478,0.9475,0.9471,0.9467,0.9464,0.946,0.9456,0.9453,0.9449,0.9446,0.9442,0.9438,0.9435,0.9431,0.9428,0.9424,0.942,0.9417,0.9413,0.941,0.9406,0.9402,0.9399,0.9395,0.9392,0.9388,0.9384,0.9381,0.9377,0.9374,0.937,0.9366,0.9363,0.9359,0.9356,0.9352,0.9348,0.9345,0.9341,0.9338,0.9334,0.9331,0.9327,0.9323,0.932,0.9316,0.9313,0.9309,0.9305,0.9302,0.9298,0.9295,0.9291,0.9288,0.9284,0.928,0.9277,0.9273,0.927,0.9266,0.9263,0.9259,0.9255,0.9252,0.9248,0.9245,0.9241,0.9238,0.9234,0.923,0.9227,0.9223,0.922,0.9216,0.9213,0.9209,0.9205,0.9202,0.9198,0.9195,0.9191,0.9188,0.9184,0.9181,0.9177,0.9173,0.917,0.9166,0.9163,0.9159,0.9156,0.9152,0.9149,0.9145,0.9141,0.9138,0.9134,0.9131,0.9127,0.9124,0.912,0.9117,0.9113,0.911,0.9106,0.9102,0.9099,0.9095,0.9092,0.9088,0.9085,0.9081,0.9078,0.9074,0.9071,0.9067,0.9064,0.906,0.9056,0.9053,0.9049,0.9046,0.9042,0.9039,0.9035,0.9032,0.9028,0.9025,0.9021,0.9018,0.9014,0.9011,0.9007,0.9004,0.9,0.8996,0.8993,0.8989,0.8986,0.8982,0.8979,0.8975,0.8972,0.8968,0.8965,0.8961,0.8958,0.8954,0.8951,0.8947,0.8944,0.894,0.8937,0.8933,0.893,0.8926,0.8923,0.8919,0.8916,0.8912,0.8909,0.8905,0.8902,0.8898,0.8895,0.8891,0.8888,0.8884,0.8881,0.8877,0.8874,0.887,0.8867,0.8863,0.886,0.8856,0.8853,0.8849,0.8846,0.8842,0.8839,0.8835,0.8832,0.8828,0.8825,0.8821,0.8818,0.8814,0.8811,0.8807,0.8804,0.88,0.8797,0.8793,0.879,0.8786,0.8783,0.8779,0.8776,0.8772,0.8769,0.8765,0.8762,0.8758,0.8755,0.8751,0.8748,0.8744,0.8741,0.8737,0.8734,0.873,0.8727,0.8723,0.872,0.8717,0.8713,0.871,0.8706,0.8703,0.8699,0.8696,0.8692,0.8689,0.8685,0.8682,0.8678,0.8675,0.8671,0.8668,0.8664,0.8661,0.8657,0.8654,0.8651,0.8647,0.8644,0.864,0.8637,0.8633,0.863,0.8626,0.8623,0.8619,0.8616,0.8612,0.8609,0.8605,0.8602,0.8599,0.8595,0.8592,0.8588,0.8585,0.8581,0.8578,0.8574,0.8571,0.8567,0.8564,0.8561,0.8557,0.8554,0.855,0.8547,0.8543,0.854,0.8536,0.8533,0.8529,0.8526,0.8523,0.8519,0.8516,0.8512,0.8509,0.8505,0.8502,0.8498,0.8495,0.8492,0.8488,0.8485,0.8481,0.8478,0.8474,0.8471,0.8467,0.8464,0.8461,0.8457,0.8454,0.845,0.8447,0.8443,0.844,0.8437,0.8433,0.843,0.8426,0.8423,0.8419,0.8416,0.8413,0.8409,0.8406,0.8402,0.8399,0.8395,0.8392,0.8388,0.8385,0.8382,0.8378,0.8375,0.8371,0.8368,0.8365,0.8361,0.8358,0.8354,0.8351,0.8347,0.8344,0.8341,0.8337,0.8334,0.833,0.8327,0.8323,0.832,0.8317,0.8313,0.831,0.8306,0.8303,0.83,0.8296,0.8293,0.8289,0.8286,0.8282,0.8279,0.8276,0.8272,0.8269,0.8265,0.8262,0.8259,0.8255,0.8252,0.8248,0.8245,0.8242,0.8238,0.8235,0.8231,0.8228,0.8224,0.8221,0.8218,0.8214,0.8211,0.8207,0.8204,0.8201,0.8197,0.8194,0.819,0.8187,0.8184,0.818,0.8177,0.8173,0.817,0.8167,0.8163,0.816,0.8156,0.8153,0.815,0.8146,0.8143,0.814,0.8136,0.8133,0.8129,0.8126,0.8123,0.8119,0.8116,0.8112,0.8109,0.8106,0.8102,0.8099,0.8095,0.8092,0.8089,0.8085,0.8082,0.8079,0.8075,0.8072,0.8068,0.8065,0.8062,0.8058,0.8055,0.8051,0.8048,0.8045,0.8041,0.8038,0.8035,0.8031,0.8028,0.8024,0.8021,0.8018,0.8014,0.8011,0.8008,0.8004,0.8001,0.7997,0.7994,0.7991,0.7987,0.7984,0.7981,0.7977,0.7974,0.7971,0.7967,0.7964,0.796,0.7957,0.7954,0.795,0.7947,0.7944,0.794,0.7937,0.7934,0.793,0.7927,0.7923,0.792,0.7917,0.7913,0.791,0.7907,0.7903,0.79,0.7897,0.7893,0.789,0.7887,0.7883,0.788,0.7876,0.7873,0.787,0.7866,0.7863,0.786,0.7856,0.7853,0.785,0.7846,0.7843,0.784,0.7836,0.7833,0.783,0.7826,0.7823,0.782,0.7816,0.7813,0.781,0.7806,0.7803,0.7799,0.7796,0.7793,0.7789,0.7786,0.7783,0.7779,0.7776,0.7773,0.7769,0.7766,0.7763,0.7759,0.7756,0.7753,0.7749,0.7746,0.7743,0.7739,0.7736,0.7733,0.7729,0.7726,0.7723,0.7719,0.7716,0.7713,0.7709,0.7706,0.7703,0.7699,0.7696,0.7693,0.769,0.7686,0.7683,0.768,0.7676,0.7673,0.767,0.7666,0.7663,0.766,0.7656,0.7653,0.765,0.7646,0.7643,0.764,0.7636,0.7633,0.763,0.7626,0.7623,0.762,0.7617,0.7613,0.761,0.7607,0.7603,0.76,0.7597,0.7593,0.759,0.7587,0.7583,0.758,0.7577,0.7574,0.757,0.7567,0.7564,0.756,0.7557,0.7554,0.755,0.7547,0.7544,0.7541,0.7537,0.7534,0.7531,0.7527,0.7524,0.7521,0.7517,0.7514,0.7511,0.7508,0.7504,0.7501,0.7498,0.7494,0.7491,0.7488,0.7485,0.7481,0.7478,0.7475,0.7471,0.7468,0.7465,0.7462,0.7458,0.7455,0.7452,0.7448,0.7445,0.7442,0.7439,0.7435,0.7432,0.7429,0.7425,0.7422,0.7419,0.7416,0.7412,0.7409,0.7406,0.7402,0.7399,0.7396,0.7393,0.7389,0.7386,0.7383,0.738,0.7376,0.7373,0.737,0.7367,0.7363,0.736,0.7357,0.7353,0.735,0.7347,0.7344,0.734,0.7337,0.7334,0.7331,0.7327,0.7324,0.7321,0.7318,0.7314,0.7311,0.7308,0.7305,0.7301,0.7298,0.7295,0.7292,0.7288,0.7285,0.7282,0.7279,0.7275,0.7272,0.7269,0.7266,0.7262,0.7259,0.7256,0.7253,0.7249,0.7246,0.7243,0.724,0.7236,0.7233,0.723,0.7227,0.7223,0.722,0.7217,0.7214,0.721,0.7207,0.7204,0.7201,0.7197,0.7194],"name":"L7_beta_pure","npix":256,"planted":{"Al_Ka":0.0,"Al_Ka_tail":0.0,"Cu_Ka":0.0,"Cu_Ka_stray":35.0249,"Mg_Ka":10378.1908,"O_Ka":118.1401,"Si_Ka":26052.439,"Si_Ka_internal":41.978},"source":"ladder","thickness_nm":240.0,"truth_at":{"Mg":45.4545454545,"Si":54.5454545455}},{"axis_true":{"offset":-0.478,"scale":0.005},"counts":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,3,0,1,0,0,1,2,3,7,2,3,1,4,2,3,2,4,5,4,6,6,8,4,4,4,12,5,3,7,5,6,6,8,13,4,7,10,6,10,7,8,10,14,13,7,10,16,10,6,7,8,11,15,4,12,23,11,19,16,14,13,8,20,11,22,13,12,17,18,16,19,12,16,13,11,10,5,12,20,19,6,10,10,11,18,14,8,11,12,6,18,10,12,15,8,11,9,12,13,11,9,13,13,19,10,14,12,12,10,2,9,13,9,11,16,5,8,8,9,10,9,5,11,16,15,4,10,9,7,13,13,4,7,11,7,11,7,8,9,11,12,8,13,8,12,9,10,10,6,5,2,16,8,7,11,14,10,8,10,12,12,9,7,10,7,10,5,6,10,15,6,7,5,12,8,9,11,11,10,15,6,6,7,8,9,11,9,11,10,12,13,3,4,13,14,12,4,10,18,8,16,7,12,10,16,16,13,20,17,11,19,16,19,14,12,17,12,14,14,12,9,12,14,9,20,10,12,9,10,16,24,28,18,20,33,43,60,87,98,148,200,312,358,423,596,740,859,1046,1272,1294,1463,1555,1708,1782,1916,1812,1729,1562,1471,1345,1198,1003,893,698,626,469,357,269,242,162,113,87,70,57,45,37,24,18,26,12,10,11,11,8,9,5,3,2,5,5,5,8,7,5,11,8,14,13,11,10,18,15,13,14,19,13,16,16,13,8,12,10,7,13,8,9,10,8,7,3,13,5,3,4,4,6,8,6,3,8,4,3,3,8,4,5,3,5,2,6,7,6,7,0,7,6,3,7,5,7,4,2,6,2,9,3,3,8,5,4,6,7,5,3,4,4,5,3,8,4,4,5,2,2,7,3,6,2,5,6,1,10,5,3,4,4,5,7,5,7,5,2,4,0,6,2,4,4,8,4,7,3,8,2,1,8,5,4,4,5,6,6,2,7,5,6,6,1,8,7,3,2,3,4,4,5,6,1,5,3,5,3,4,2,3,2,6,4,3,6,2,7,2,3,5,6,5,2,4,4,7,0,4,1,2,7,5,4,4,5,6,4,4,7,7,7,5,8,1,3,3,6,2,5,3,3,3,7,2,6,4,4,1,1,2,4,5,3,2,1,3,2,4,7,3,4,2,6,7,5,7,4,5,6,4,1,4,2,7,1,2,10,3,5,10,6,2,2,5,6,9,7,3,3,3,6,3,5,7,4,4,4,5,13,4,6,13,18,18,16,18,22,35,30,34,32,32,33,48,55,38,48,38,32,53,50,37,45,31,27,34,14,31,19,14,15,12,11,11,6,9,5,6,5,5,2,6,4,3,3,2,6,5,6,4,5,6,4,3,3,3,5,2,3,2,2,1,4,3,1,3,3,1,0,5,4,3,1,3,2,1,4,2,2,7,4,4,5,6,5,1,2,4,3,6,1,3,4,2,4,2,5,5,1,2,2,5,1,2,5,3,3,5,3,3,2,2,4,5,5,4,3,3,2,2,1,5,6,0,4,1,2,0,2,5,3,5,3,2,4,3,3,2,5,0,1,3,1,3,5,0,3,3,2,4,2,0,3,3,4,4,3,2,2,3,3,1,3,1,4,2,1,2,3,7,6,0,5,3,2,5,6,2,2,5,1,2,3,3,4,3,0,3,1,3,3,4,3,8,4,2,2,1,6,3,6,3,1,3,2,1,2,1,4,1,4,2,0,5,0,5,3,5,5,3,3,4,3,3,1,4,1,3,2,2,4,4,2,4,3,2,7,1,1,0,4,4,2,0,2,2,0,2,5,2,4,1,1,4,3,2,3,3,2,3,4,2,2,3,3,5,0,1,1,5,2,3,0,2,4,5,3,1,2,1,3,3,4,6,2,1,3,1,3,3,2,3,1,0,2,0,2,6,1,2,2,3,3,0,4,1,4,3,2,1,4,1,1,4,3,4,1,6,2,2,2,1,2,2,2,2,0,3,0,0,3,3,0,1,3,2,4,4,2,0,3,2,1,4,5,3,1,0,1,2,3,3,3,3,3,3,3,0,1,1,2,1,1,0,4,1,2,3,2,4,1,3,2,2,1,1,1,3,2,4,2,1,1,2,2,1,2,2,4,2,5,1,3,3,0,2,3,2,1,3,3,0,1,1,1,1,1,2,2,1,3,2,2,6,1,3,2,0,3,5,3,3,2,2,0,4,3,2,2,1,2,3,2,1,1,0,2,2,0,1,2,2,1,1,3,1,5,1,1,3,0,1,0,2,2,2,3,2,1,1,2,3,1,3,2,1,2,3,2,4,1,3,3,3,2,1,1,1,3,1,1,3,0,3,3,1,2,1,2,1,2,2,2,1,3,1,3,3,4,3,2,0,3,5,1,2,2,1,1,2,2,6,2,2,2,1,1,1,4,1,2,5,2,3,0,4,0,2,1,3,3,2,4,1,3,0,1,4,2,1,2,1,1,1,2,2,1,2,1,1,1,0,3,1,4,0,2,2,1,0,1,1,1,1,3,1,1,1,1,1,0,1,2,4,1,1,3,3,2,3,2,1,2,1,5,3,1,2,2,4,1,1,2,0,2,5,4,0,2,5,0,1,2,1,0,3,2,1,0,1,2,2,0,4,0,0,0,2,1,5,1,4,5,1,2,4,3,2,0,1,2,1,1,0,0,1,1,1,2,1,1,1,2,3,2,1,3,3,2,1,1,4,0,0,3,2,3,1,1,1,2,2,1,3,1,1,0,1,0,3,0,3,0,3,1,1,2,2,1,0,0,0,3,1,1,3,3,2,3,1,1,1,1,3,1,1,2,1,1,3,0,2,3,5,3,1,2,2,0,0,0,1,1,1,2,3,0,2,1,0,1,3,0,2,1,0,0,1,2,1,0,1,2,1,2,4,3,2,3,1,2,2,0,1,1,1,0,1,3,2,3,3,1,2,1,2,2,0,2,1,0,1,2,1,0,2,3,2,0,2,2,0,2,1,0,2,1,1,2,1,1,4,1,2,2,0,0,1,0,4,2,0,2,1,2,2,3,1,3,2,1,2,1,0,0,2,3,2,2,0,2,2,2,1,1,2,2,3,1,0,2,3,1,0,0,2,2,2,1,1,1,2,3,1,2,0,0,4,4,0,1,3,0,2,2,0,1,2,1,2,0,1,0,0,2,0,2,2,1,1,1,6,3,2,0,1,2,3,1,3,1,1,2,1,0,1,1,0,4,2,1,0,0,1,3,2,0,2,2,1,1,1,0,4,2,1,1,1,3,1,1,1,1,1,2,0,1,0,1,1,3,2,2,2,1,0,0,2,1,2,0,3,1,0,0,1,0,1,1,1,2,1,0,1,0,0,1,1,0,0,1,1,0,2,0,3,1,0,4,4,2,0,2,1,1,0,1,0,1,1,2,1,3,2,0,3,0,1,1,1,1,0,2,1,2,1,1,1,1,1,1,1,1,0,2,1,2,0,1,0,1,2,3,1,2,2,0,0,0,1,0,1,2,2,1,1,2,2,4,1,1,4,1,1,3,1,0,3,3,2,1,4,1,7,0,2,2,1,1,3,3,3,4,3,3,1,3,3,6,2,3,7,0,3,2,2,10,1,4,5,0,1,3,2,0,1,1,3,3,4,3,1,0,1,1,2,2,3,1,2,1,2,1,1,1,0,0,0,1,1,2,1,2,0,2,0,0,4,0,5,1,2,2,0,0,0,0,0,3,2,0,1,0,2,0,2,1,2,0,0,0,1,1,0,1,1,0,2,4,0,1,1,0,3,1,2,2,3,1,1,0,2,0,1,0,3,1,1,0,1,1,1,3,0,1,0,0,4,1,3,3,2,0,1,1,1,1,1,0,1,0,0,0,3,3,2,0,0,3,1,0,0,2,0,2,1,0,2,1,1,2,1,2,2,3,1,0,0,0,1,1,2,2,0,0,2,1,0,1,1,1,0,1,1,2,1,1,2,2,1,2,0,2,1,2,1,1,2,1,0,0,0,1,2,1,2,3,1,2,0,0,1,2,2,1,2,1,2,2,2,0,2,1,0,5,0,1,0,1,1,0,0,1,5,2,2,1,0,0,0,2,1,2,1,2,1,2,0,0,1,2,1,0,2,0,4,1,0,0,1,0,1,3,1,0,0,1,1,1,3,1,0,0,2,1,2,0,0,0,2,1,2,2,3,1,0,0,0,3,1,0,2,1,2,0,1,1,0,2,3,0,0,1,2,2,0,1,1,0,0,2,1,1,0,2,0,0,3,1,2,1,1,2,2,1,0,0,2,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,3,1,2,0,2,1,0,1,2,1,1,1,2,0,0,0,0,0,0,2,2,0,0,1,1,1,0,0,1,0,1,0,3,1,1,2,2,2,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,1,0,2,0,2,1,0,2,1,1,2,0,1,0,3,0,0,0,0,1,0,1,3,1,2,2,2,0,1,2,1,0,1,1,1,0,2,1,2,1,2,0,1,1,1,2,2,0,0,1,1,4,3,2,2,0,2,2,0,0,1,1,1,1,0,1,0,3,0,0,1,2,1,0,1,3,1,1,0,0,1,0,0,2,1,0,1,0,1,1,0,1,0,1,0,1,2,0,0,1,1,0,1,0,1,2,0,0,0,0,3,0,1,1,1,0,1,0,0,4,0,0,2,3,2,0,2,0,1,1,0,0,1,0,1,1,1,1,1,0,2,1,0,0,0,1,1,0,0,1,1,0,1,1,2,2,0,0,1,1,0,0,0,2,0,0,2,1,1,2,2,1,1,1,2,0,2,0,0,3,1,1,0,0,4,0,1,1,2,1,0,0,1,2,3,0,2,0,0,2,2,1,1,0,2,1,2,1,0,0,0,0,0,2,0,2,0,2,3,1,0,0,1,1,1,0,2,1,2,1,1,1,1,1,2,1,1,2,0,1,2,0,1,1,2,0,0,1,2,1,1,0,0,0,0,2,3,0,4,1,2,2,1,4,0,1,2,0,0,0,0,2,0,2,0,0,1,0,0,0,1,0,2,0,0,2,1,3,0,2,1,1,0,0,0,2,1,1,0,1,1,0,2,2,1,1,0,0,0,2,0,2,1,0,1,1,0,2,0,0,2,1,1,1,1,0,1,0,0,1,0,0,0,0,2,1,1,0,1,0,1,1,3,1,2,0,1,1,1,2,1,4,0,1,2,1,3,3,1,1,1,1,2,0,0,1,1,1,2,0,0,1,0,1,0,1,1,2,1,2,2,2,2,1,3,3,2,2,2,1,1,0,1,1,0,0,1,3,0,1,0,2,1,1,0,1,0,0,1,1,1,1,1,1,2,1,1,0,0,0,0,1,0,2,1,3,0,0,1,1,0,0,0,0,0,3,0,2,1,0,1,2,0,2,1,0,2,0,2,0,3,2,0,1,0,0,0,1,0,0,0,1,2,1,0,3,0,0,2,0,1,0,1,0,0,0,0,1,3,0,1,1,2,1,2,0,1,1,0,3,0,0,0,0,0,2,1,1,1,0,1,1,2,0,1,4,0,1,0,1,1,0,2,0,1,1,2,3,0,1,2,1,1,1,0,1,1,0,2,1,1,2,2,3,1,1,0,2,0,2,1,1,0,1,0,1,0,2,0,0,1,2,1,1,0,1,1,1,2,0,0,0,2,1,1,2,2,1,0,0,1,0,0,1,0,0,0,2,1,2,0,0,1,1,1,4,1,1,0,0,0,0,1,2,0,1,1,1,2,1,1,0,2,0,0,0,2,0,0,0,1,1,0,1,0,1,2,0,0,1,3,1,1,0,1,0,0,0,1,1,2,1,1,1,1,1,1,0,1,1,0,0,0,3,0,0,4,0,2,2,2,0,1,1,0,0,1,0,3,1,0,2,1,2,0,0,0,1,0,0,1,1,2,0,0,1,0,0,3,1,0,0,4,2,0,1,1,0,0,2,1,1,0,0,0,0,0,1,1,2,1,2,1,1,0,0,0,2,0,1,0,0,1,0,0,2,0,0,1,2,0,0,0,2,3,0,0,1,0,2,0,0,0,0,1,0,1,0,0,2,2,1,0,0,2,1,0,1,0,1,0,0,0,1,1,0,0,0,0,0,3,0,0,1,1,0,0,0,2,0,1,0,1,0,2,1,0,1,2,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,3,1,1,0,3,1,1,0,0,1,0,0,2,0,0,1,0,1,1,4,1,0,1,0,0,3,0,0,0,1,1,0,0,0,4,0,2,2,0,1,0,1,1,2,1,0,4,0,0,0,0,0,3,1,1,0,1,4,0,2,0,2,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,2,1,1,5,1,0,0,0,0,0,0,2,0,1,1,2,0,0,0,0,0,0,1,1,0,0,0,0,0,2,2,0,1,1,2,1,1,1,2,1,2,0,0,0,1,1,1,0,1,1,1,0,1,2,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,1,0,5,0,1,0,0,0,1,0,0,0,0,0,1,1,2,0,0,1,0,0,1,3,0,0,1,2,2,2,0,2,1,1,1,0,0,2,1,2,3,2,0,0,0,0,0,1,1,0,2,0,0,0,1,2,1,0,2,0,1,2,3,0,1,3,1,0,1,0,0,1,1,1,1,1,1,1,0,1,3,0,0,0,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,3,0,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,2,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,1,2,2,0,2,0,1,0,0,2,2,0,1,0,1,0,0,1,0,0,0,1,1,1,0,2,0,2,0,0,1,1,1,2,0,1,0,0,0,3,1,0,1,1,0,1,1,0,1,1,1,2,1,2,1,0,1,1,1,0,0,1,0,0,0,2,1,4,0,0,1,1,0,1,1,2,0,3,0,0,2,0,0,1,0,0,1,0,1,1,1,1,0,0,0,2,1,1,1,1,1,1,1,0,0,0,1,0,1,1,3,1,0,1,0,1,2,0,1,0,2,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,1,0,0,1,0,1,1,0,1,0,2,0,0,0,0,1,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,1,0,1,0,0,1,2,0,0,0,1,1,1,0,0,2,0,1,0,0,0,1,2,0,0,0,1,0,1,1,1,1,0,1,1,2,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,3,0,1,0,1,0,1,1,1,1,0,0,1,0,2,0,0,0,0,0,0,1,2,0,0,1,1,0,0,1,2,0,0,0,2,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0,2,1,0,1,2,0,0,1,0,0,2,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,2,1,1,0,0,0,2,0,0,0,1,0,2,0,0,1,1,3,0,0,2,0,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,2,3,0,0,1,0,0,0,0,2,0,0,0,1,0,1,1,2,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,1,1,0,0,1,1,3,0,1,0,0,0,1,0,1,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,1,0,2,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,2,1,1,1,1,0,1,0,0,3,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,0,3,2,1,0,0,0,2,1,1,0,0,0,0,0,1,2,0,0,2,2,0,0,0,0,2,0,0,0,1,0,0,1,0,1,4,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,2,1,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,2,1,0,0,0,3,0,2,0,0,0,0,2,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,0,0,1,1,1,1,2,2,0,0,0,0,0,1,0,0,0,1,3,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,2,1,0,1,0,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,2,1,0,0,1,0,1,0,0,1,0,1,1,1,0,3,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,2,0,0,0,0,0,0,2,1,0,1,0,1,2,0,0,0,0,1,0,0,0,1,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,2,1,0,1,1,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,3,0,0,1,1,2,1,0,1,0,0,0,0,0,2,0,0,0,1,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,2,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,0,1,0,1,0,3,0,0,2,1,0,0,1,1,0,0],"expected":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0004,0.0006,0.0011,0.0021,0.004,0.0072,0.0122,0.0199,0.0311,0.0467,0.0676,0.0949,0.1295,0.1725,0.2244,0.2863,0.3585,0.4414,0.5358,0.6413,0.7581,0.8863,1.0253,1.1749,1.335,1.5045,1.6828,1.8701,2.0648,2.2661,2.4742,2.6876,2.9054,3.127,3.3524,3.5799,3.8089,4.0391,4.2702,4.501,4.7307,4.959,5.1863,5.4111,5.633,5.8515,6.0672,6.2793,6.4871,6.6905,6.8892,7.0839,7.2736,7.4582,7.6375,7.8116,7.981,8.1451,8.3039,8.4573,8.6056,8.7493,8.8893,9.0263,9.1625,9.3016,9.4496,9.6161,9.814,10.0606,10.3777,10.7894,11.3193,11.9853,12.7933,13.7311,14.7643,15.8347,16.8646,17.7656,18.4518,18.8534,18.9303,18.6759,18.035,17.2653,16.3531,15.3879,14.4498,13.6007,12.879,12.3003,11.8614,11.546,11.3317,11.1943,11.1115,11.0654,11.0421,11.0322,11.0294,11.0297,11.031,11.0322,11.0325,11.0316,11.0295,11.026,11.0212,11.0152,11.008,10.9997,10.9904,10.98,10.9686,10.9563,10.943,10.9289,10.914,10.8982,10.8818,10.8647,10.8469,10.8285,10.8094,10.7898,10.7697,10.749,10.7279,10.7063,10.6843,10.662,10.6393,10.6162,10.5929,10.5692,10.5453,10.5211,10.4968,10.4722,10.4475,10.4226,10.3976,10.3725,10.3473,10.3221,10.2968,10.2714,10.2461,10.2208,10.1955,10.1703,10.1451,10.12,10.0951,10.0702,10.0455,10.021,9.9966,9.9724,9.9485,9.9248,9.9013,9.8781,9.8552,9.8327,9.8104,9.7885,9.767,9.7458,9.7251,9.7048,9.685,9.6657,9.6468,9.6285,9.6107,9.5939,9.5777,9.5622,9.5473,9.5331,9.5196,9.5069,9.4949,9.4837,9.4733,9.4638,9.4552,9.4476,9.4409,9.4352,9.4306,9.4271,9.4248,9.4237,9.4238,9.4253,9.4281,9.4324,9.4383,9.4458,9.4553,9.4671,9.4816,9.4997,9.5226,9.5521,9.591,9.6429,9.7128,9.8072,9.9339,10.102,10.3212,10.6014,10.9505,11.3739,11.8721,12.4395,13.0631,13.7222,14.3891,15.0306,15.6112,16.0964,16.4568,16.6711,16.7296,16.6345,16.4003,16.0518,15.6209,15.1431,14.6535,14.1837,13.7591,13.3981,13.1099,12.8927,12.7603,12.6993,12.7032,12.7661,12.8853,13.0637,13.3148,13.6682,14.1793,14.9438,16.1172,17.9435,20.7916,25.2001,31.9279,42.0064,56.783,77.9444,107.5041,147.7357,201.0376,269.7203,355.7153,460.2261,583.3536,723.7482,878.3522,1042.2967,1209.0074,1370.5482,1518.195,1643.1933,1737.6101,1795.1689,1811.9446,1786.8128,1721.5807,1620.7785,1491.1456,1340.8898,1178.8337,1013.5709,852.7397,702.4978,567.2347,449.5221,350.2654,268.9978,204.25,153.7429,114.7686,86.1259,65.1144,49.7725,38.5885,30.3942,24.3267,19.7701,16.2993,13.6266,11.5583,9.9614,8.7414,7.828,7.1671,6.7161,6.4424,6.322,6.3392,6.4854,6.7576,7.1565,7.684,8.3407,9.123,10.0209,11.0156,12.079,13.1744,14.2551,15.2693,16.164,16.8886,17.3999,17.6662,17.6707,17.4128,16.9088,16.1896,15.2982,14.285,13.2033,12.1049,11.036,10.0342,9.1273,8.3323,7.6563,7.0978,6.6489,6.2972,6.0277,5.8251,5.674,5.5611,5.4743,5.4038,5.3463,5.2965,5.2507,5.2074,5.1658,5.1259,5.088,5.0526,5.02,4.9904,4.964,4.9406,4.9201,4.9021,4.8864,4.8725,4.8602,4.849,4.8388,4.8292,4.8202,4.8114,4.803,4.7946,4.7864,4.7783,4.7702,4.7621,4.7541,4.7461,4.7381,4.7301,4.7221,4.7141,4.7061,4.6981,4.6902,4.6822,4.6743,4.6664,4.6585,4.6506,4.6427,4.6348,4.6269,4.6191,4.6112,4.6032,4.5953,4.5874,4.5795,4.5716,4.5637,4.5558,4.5479,4.5401,4.5323,4.5245,4.5167,4.5089,4.5011,4.4934,4.4856,4.4779,4.4702,4.4625,4.4548,4.4472,4.4395,4.4319,4.4243,4.4167,4.4091,4.4015,4.394,4.3864,4.3789,4.3714,4.3639,4.3564,4.3489,4.3415,4.334,4.3266,4.3192,4.3118,4.3044,4.2971,4.2897,4.2824,4.2751,4.2678,4.2606,4.2533,4.2461,4.2388,4.2316,4.2245,4.2173,4.2101,4.203,4.1959,4.1888,4.1817,4.1746,4.1676,4.1605,4.1535,4.1465,4.1395,4.1325,4.1256,4.1186,4.1117,4.1048,4.098,4.0911,4.0843,4.0774,4.0706,4.0639,4.0571,4.0504,4.0437,4.037,4.0303,4.0236,4.0169,4.0103,4.0037,3.997,3.9904,3.9838,3.9772,3.9706,3.9641,3.9575,3.9509,3.9444,3.9379,3.9314,3.9249,3.9185,3.912,3.9056,3.8992,3.8929,3.8866,3.8804,3.8742,3.8682,3.8623,3.8566,3.8511,3.846,3.8414,3.8373,3.834,3.8315,3.8301,3.83,3.8313,3.8343,3.839,3.8455,3.8539,3.8641,3.8758,3.8889,3.9028,3.917,3.931,3.944,3.9554,3.9644,3.9705,3.9731,3.9718,3.9664,3.957,3.9436,3.9266,3.9066,3.8841,3.8599,3.8346,3.8091,3.7841,3.7604,3.7387,3.7198,3.7046,3.6944,3.6906,3.6954,3.7116,3.7434,3.7962,3.8772,3.9957,4.1636,4.3954,4.7086,5.1236,5.6632,6.3525,7.2171,8.2828,9.5726,11.1056,12.8939,14.9402,17.2359,19.7583,22.4701,25.3186,28.2361,31.1426,33.9483,36.5583,38.8774,40.8164,42.297,43.2575,43.6569,43.478,42.7281,41.439,39.6646,37.4771,34.9619,32.2127,29.3251,26.3913,23.496,20.712,18.098,15.6977,13.5394,11.6372,9.9927,8.597,7.4338,6.4812,5.7144,5.1074,4.6349,4.2729,4.0,3.7977,3.6501,3.5444,3.4703,3.4199,3.387,3.3673,3.3575,3.3555,3.3597,3.3692,3.3831,3.4011,3.4227,3.4475,3.4748,3.5041,3.5346,3.5653,3.5954,3.6236,3.649,3.6704,3.6869,3.6977,3.7021,3.6999,3.6909,3.6753,3.6536,3.6263,3.5945,3.559,3.521,3.4815,3.4416,3.4022,3.3642,3.3281,3.2946,3.2639,3.2363,3.2117,3.19,3.1711,3.1547,3.1406,3.1285,3.1181,3.109,3.1011,3.0941,3.0878,3.0821,3.0768,3.0719,3.0672,3.0627,3.0583,3.054,3.0497,3.0456,3.0414,3.0374,3.0333,3.0293,3.0253,3.0213,3.0173,3.0133,3.0093,3.0054,3.0014,2.9974,2.9935,2.9895,2.9855,2.9815,2.9775,2.9734,2.9694,2.9654,2.9613,2.9573,2.9533,2.9492,2.9452,2.9412,2.9372,2.9332,2.9292,2.9253,2.9213,2.9174,2.9135,2.9097,2.9058,2.9019,2.8981,2.8943,2.8905,2.8867,2.8829,2.8792,2.8754,2.8716,2.8679,2.8642,2.8605,2.8568,2.8531,2.8494,2.8457,2.842,2.8383,2.8347,2.831,2.8274,2.8238,2.8201,2.8165,2.8129,2.8093,2.8057,2.8022,2.7986,2.795,2.7915,2.7879,2.7844,2.7808,2.7773,2.7738,2.7703,2.7668,2.7633,2.7598,2.7563,2.7529,2.7494,2.746,2.7425,2.7391,2.7357,2.7323,2.7288,2.7254,2.722,2.7187,2.7153,2.7119,2.7085,2.7052,2.7018,2.6985,2.6952,2.6918,2.6885,2.6852,2.6819,2.6786,2.6753,2.672,2.6687,2.6655,2.6622,2.659,2.6557,2.6525,2.6493,2.646,2.6428,2.6396,2.6364,2.6332,2.63,2.6268,2.6237,2.6205,2.6173,2.6142,2.6111,2.6079,2.6048,2.6017,2.5985,2.5954,2.5923,2.5892,2.5861,2.5831,2.58,2.5769,2.5739,2.5708,2.5677,2.5647,2.5617,2.5586,2.5556,2.5526,2.5496,2.5466,2.5436,2.5406,2.5376,2.5346,2.5317,2.5287,2.5258,2.5228,2.5199,2.5169,2.514,2.5111,2.5081,2.5052,2.5023,2.4994,2.4965,2.4936,2.4908,2.4879,2.485,2.4822,2.4793,2.4765,2.4736,2.4708,2.4679,2.4651,2.4623,2.4595,2.4567,2.4539,2.4511,2.4483,2.4455,2.4427,2.4399,2.4372,2.4344,2.4317,2.4289,2.4262,2.4234,2.4207,2.418,2.4153,2.4125,2.4098,2.4071,2.4044,2.4017,2.3991,2.3964,2.3937,2.391,2.3884,2.3857,2.3831,2.3804,2.3778,2.3751,2.3725,2.3699,2.3673,2.3646,2.362,2.3594,2.3568,2.3542,2.3516,2.3491,2.3465,2.3439,2.3414,2.3388,2.3362,2.3337,2.3311,2.3286,2.3261,2.3235,2.321,2.3185,2.316,2.3135,2.311,2.3085,2.306,2.3035,2.301,2.2985,2.296,2.2936,2.2911,2.2887,2.2862,2.2838,2.2813,2.2789,2.2764,2.274,2.2716,2.2692,2.2667,2.2643,2.2619,2.2595,2.2571,2.2547,2.2524,2.25,2.2476,2.2452,2.2429,2.2405,2.2381,2.2358,2.2334,2.2311,2.2288,2.2264,2.2241,2.2218,2.2194,2.2171,2.2148,2.2125,2.2102,2.2079,2.2056,2.2033,2.201,2.1988,2.1965,2.1942,2.192,2.1897,2.1874,2.1852,2.1829,2.1807,2.1784,2.1762,2.174,2.1718,2.1695,2.1673,2.1651,2.1629,2.1607,2.1585,2.1563,2.1541,2.1519,2.1497,2.1475,2.1454,2.1432,2.141,2.1389,2.1367,2.1345,2.1324,2.1302,2.1281,2.126,2.1238,2.1217,2.1196,2.1174,2.1153,2.1132,2.1111,2.109,2.1069,2.1048,2.1027,2.1006,2.0985,2.0964,2.0943,2.0923,2.0902,2.0881,2.0861,2.084,2.082,2.0799,2.0779,2.0758,2.0738,2.0717,2.0697,2.0677,2.0656,2.0636,2.0616,2.0596,2.0576,2.0556,2.0536,2.0516,2.0496,2.0476,2.0456,2.0436,2.0416,2.0396,2.0377,2.0357,2.0337,2.0318,2.0298,2.0279,2.0259,2.024,2.022,2.0201,2.0181,2.0162,2.0143,2.0123,2.0104,2.0085,2.0066,2.0047,2.0027,2.0008,1.9989,1.997,1.9951,1.9932,1.9914,1.9895,1.9876,1.9857,1.9838,1.982,1.9801,1.9782,1.9764,1.9745,1.9726,1.9708,1.9689,1.9671,1.9653,1.9634,1.9616,1.9597,1.9579,1.9561,1.9543,1.9524,1.9506,1.9488,1.947,1.9452,1.9434,1.9416,1.9398,1.938,1.9362,1.9344,1.9326,1.9309,1.9291,1.9273,1.9255,1.9238,1.922,1.9202,1.9185,1.9167,1.915,1.9132,1.9115,1.9097,1.908,1.9062,1.9045,1.9028,1.901,1.8993,1.8976,1.8959,1.8941,1.8924,1.8907,1.889,1.8873,1.8856,1.8839,1.8822,1.8805,1.8788,1.8771,1.8754,1.8737,1.8721,1.8704,1.8687,1.867,1.8654,1.8637,1.862,1.8604,1.8587,1.8571,1.8554,1.8538,1.8521,1.8505,1.8488,1.8472,1.8456,1.8439,1.8423,1.8407,1.8391,1.8374,1.8358,1.8342,1.8326,1.831,1.8294,1.8278,1.8262,1.8246,1.823,1.8214,1.8198,1.8182,1.8166,1.815,1.8134,1.8119,1.8103,1.8087,1.8071,1.8056,1.804,1.8024,1.8009,1.7993,1.7978,1.7962,1.7947,1.7931,1.7916,1.79,1.7885,1.7869,1.7854,1.7839,1.7823,1.7808,1.7793,1.7778,1.7763,1.7747,1.7732,1.7717,1.7702,1.7687,1.7672,1.7657,1.7642,1.7627,1.7612,1.7597,1.7582,1.7567,1.7552,1.7537,1.7523,1.7508,1.7493,1.7478,1.7464,1.7449,1.7434,1.742,1.7405,1.739,1.7376,1.7361,1.7347,1.7332,1.7318,1.7303,1.7289,1.7274,1.726,1.7246,1.7231,1.7217,1.7203,1.7188,1.7174,1.716,1.7146,1.7132,1.7118,1.7104,1.709,1.7076,1.7062,1.7048,1.7034,1.702,1.7007,1.6993,1.698,1.6967,1.6953,1.694,1.6927,1.6915,1.6902,1.689,1.6878,1.6865,1.6854,1.6842,1.683,1.6819,1.6807,1.6796,1.6784,1.6773,1.6761,1.675,1.6738,1.6726,1.6714,1.6702,1.6689,1.6676,1.6663,1.665,1.6636,1.6622,1.6608,1.6593,1.6578,1.6563,1.6548,1.6533,1.6518,1.6502,1.6487,1.6472,1.6456,1.6441,1.6426,1.6411,1.6396,1.6382,1.6367,1.6353,1.6339,1.6325,1.6311,1.6297,1.6284,1.627,1.6257,1.6244,1.6231,1.6218,1.6205,1.6192,1.6179,1.6166,1.6153,1.6141,1.6128,1.6115,1.6103,1.609,1.6077,1.6065,1.6052,1.604,1.6027,1.6015,1.6002,1.599,1.5978,1.5965,1.5953,1.594,1.5928,1.5916,1.5903,1.5891,1.5879,1.5867,1.5854,1.5842,1.583,1.5818,1.5806,1.5793,1.5781,1.5769,1.5757,1.5745,1.5733,1.5721,1.5709,1.5697,1.5685,1.5673,1.5661,1.5649,1.5637,1.5625,1.5613,1.5601,1.559,1.5578,1.5566,1.5554,1.5542,1.5531,1.5519,1.5507,1.5495,1.5484,1.5472,1.546,1.5449,1.5437,1.5426,1.5414,1.5402,1.5391,1.5379,1.5368,1.5356,1.5345,1.5333,1.5322,1.531,1.5299,1.5287,1.5276,1.5265,1.5253,1.5242,1.5231,1.5219,1.5208,1.5197,1.5185,1.5174,1.5163,1.5152,1.5141,1.5129,1.5118,1.5107,1.5096,1.5085,1.5074,1.5063,1.5051,1.504,1.5029,1.5018,1.5007,1.4996,1.4985,1.4974,1.4963,1.4953,1.4942,1.4931,1.492,1.4909,1.4898,1.4887,1.4877,1.4866,1.4855,1.4845,1.4834,1.4823,1.4813,1.4802,1.4792,1.4781,1.4771,1.476,1.475,1.4739,1.4729,1.4718,1.4708,1.4698,1.4687,1.4677,1.4667,1.4656,1.4646,1.4635,1.4625,1.4615,1.4604,1.4594,1.4583,1.4573,1.4562,1.4552,1.4541,1.4531,1.452,1.451,1.4499,1.4489,1.4478,1.4468,1.4457,1.4447,1.4437,1.4426,1.4416,1.4405,1.4395,1.4385,1.4374,1.4364,1.4354,1.4344,1.4334,1.4323,1.4313,1.4303,1.4293,1.4283,1.4273,1.4263,1.4253,1.4243,1.4233,1.4223,1.4213,1.4203,1.4193,1.4183,1.4173,1.4164,1.4154,1.4144,1.4134,1.4124,1.4114,1.4105,1.4095,1.4085,1.4075,1.4066,1.4056,1.4046,1.4036,1.4027,1.4017,1.4007,1.3998,1.3988,1.3979,1.3969,1.3959,1.395,1.394,1.3931,1.3921,1.3912,1.3902,1.3893,1.3883,1.3874,1.3864,1.3855,1.3845,1.3836,1.3826,1.3817,1.3808,1.3798,1.3789,1.3779,1.377,1.3761,1.3751,1.3742,1.3733,1.3723,1.3714,1.3705,1.3696,1.3686,1.3677,1.3668,1.3659,1.365,1.364,1.3631,1.3622,1.3613,1.3604,1.3595,1.3586,1.3576,1.3567,1.3558,1.3549,1.354,1.3531,1.3522,1.3513,1.3504,1.3495,1.3486,1.3477,1.3468,1.346,1.3451,1.3442,1.3433,1.3425,1.3416,1.3408,1.34,1.3393,1.3386,1.338,1.3374,1.3369,1.3366,1.3365,1.3366,1.3369,1.3376,1.3387,1.3403,1.3426,1.3456,1.3496,1.3546,1.3609,1.3687,1.3783,1.3899,1.4038,1.4202,1.4396,1.4622,1.4882,1.5181,1.5521,1.5903,1.6331,1.6805,1.7325,1.7893,1.8505,1.9161,1.9856,2.0586,2.1345,2.2126,2.2921,2.3721,2.4515,2.5293,2.6044,2.6756,2.7418,2.8019,2.8549,2.8998,2.9359,2.9624,2.9788,2.9849,2.9805,2.9657,2.9407,2.906,2.8622,2.81,2.7504,2.6844,2.613,2.5373,2.4586,2.3779,2.2963,2.2149,2.1346,2.0563,1.9806,1.9083,1.8397,1.7754,1.7155,1.6603,1.6098,1.5639,1.5225,1.4856,1.4528,1.4238,1.3985,1.3765,1.3575,1.3411,1.3272,1.3153,1.3053,1.2969,1.2898,1.2838,1.2789,1.2747,1.2712,1.2683,1.2658,1.2637,1.2619,1.2603,1.2589,1.2577,1.2565,1.2555,1.2545,1.2536,1.2527,1.2518,1.251,1.2501,1.2493,1.2485,1.2478,1.247,1.2462,1.2454,1.2446,1.2439,1.2431,1.2423,1.2416,1.2408,1.24,1.2393,1.2385,1.2377,1.237,1.2362,1.2354,1.2347,1.2339,1.2332,1.2324,1.2317,1.2309,1.2301,1.2294,1.2286,1.2279,1.2271,1.2264,1.2256,1.2249,1.2241,1.2234,1.2227,1.2219,1.2212,1.2204,1.2197,1.2189,1.2182,1.2175,1.2167,1.216,1.2152,1.2145,1.2138,1.213,1.2123,1.2116,1.2108,1.2101,1.2094,1.2087,1.2079,1.2072,1.2065,1.2058,1.2051,1.2043,1.2036,1.2029,1.2022,1.2016,1.2009,1.2002,1.1996,1.199,1.1984,1.1978,1.1973,1.1969,1.1965,1.1962,1.196,1.1959,1.1959,1.1961,1.1964,1.197,1.1978,1.1989,1.2002,1.2019,1.204,1.2064,1.2093,1.2126,1.2164,1.2208,1.2256,1.231,1.237,1.2434,1.2504,1.2579,1.2657,1.274,1.2826,1.2914,1.3004,1.3094,1.3184,1.3271,1.3356,1.3436,1.351,1.3578,1.3638,1.3689,1.3729,1.376,1.3778,1.3786,1.3781,1.3764,1.3735,1.3695,1.3644,1.3582,1.3512,1.3433,1.3347,1.3255,1.3158,1.3057,1.2955,1.2851,1.2748,1.2645,1.2545,1.2447,1.2354,1.2264,1.2179,1.2099,1.2025,1.1955,1.1891,1.1833,1.1779,1.1731,1.1687,1.1647,1.1612,1.158,1.1552,1.1527,1.1505,1.1485,1.1467,1.1451,1.1437,1.1424,1.1412,1.1401,1.1391,1.1382,1.1373,1.1364,1.1357,1.1349,1.1342,1.1335,1.1328,1.1321,1.1314,1.1307,1.1301,1.1294,1.1288,1.1281,1.1275,1.1268,1.1262,1.1256,1.1249,1.1243,1.1236,1.123,1.1224,1.1217,1.1211,1.1205,1.1199,1.1192,1.1186,1.118,1.1173,1.1167,1.1161,1.1155,1.1148,1.1142,1.1136,1.113,1.1123,1.1117,1.1111,1.1105,1.1098,1.1092,1.1086,1.108,1.1074,1.1068,1.1061,1.1055,1.1049,1.1043,1.1037,1.1031,1.1025,1.1018,1.1012,1.1006,1.1,1.0994,1.0988,1.0982,1.0976,1.097,1.0964,1.0958,1.0952,1.0946,1.094,1.0934,1.0927,1.0921,1.0915,1.0909,1.0903,1.0897,1.0891,1.0886,1.088,1.0874,1.0868,1.0862,1.0856,1.085,1.0844,1.0838,1.0832,1.0826,1.082,1.0814,1.0808,1.0802,1.0797,1.0791,1.0785,1.0779,1.0773,1.0767,1.0761,1.0756,1.075,1.0744,1.0738,1.0732,1.0726,1.0721,1.0715,1.0709,1.0703,1.0697,1.0692,1.0686,1.068,1.0674,1.0669,1.0663,1.0657,1.0651,1.0646,1.064,1.0634,1.0629,1.0623,1.0617,1.0611,1.0606,1.06,1.0594,1.0589,1.0583,1.0577,1.0572,1.0566,1.056,1.0555,1.0549,1.0544,1.0538,1.0532,1.0527,1.0521,1.0515,1.051,1.0504,1.0499,1.0493,1.0488,1.0482,1.0476,1.0471,1.0465,1.046,1.0454,1.0449,1.0443,1.0438,1.0432,1.0427,1.0421,1.0416,1.041,1.0405,1.0399,1.0394,1.0388,1.0383,1.0377,1.0372,1.0366,1.0361,1.0356,1.035,1.0345,1.0339,1.0334,1.0328,1.0323,1.0318,1.0312,1.0307,1.0301,1.0296,1.0291,1.0285,1.028,1.0275,1.0269,1.0264,1.0259,1.0253,1.0248,1.0243,1.0237,1.0232,1.0227,1.0221,1.0216,1.0211,1.0205,1.02,1.0195,1.019,1.0184,1.0179,1.0174,1.0169,1.0163,1.0158,1.0153,1.0148,1.0142,1.0137,1.0132,1.0127,1.0121,1.0116,1.0111,1.0106,1.0101,1.0095,1.009,1.0085,1.008,1.0075,1.007,1.0065,1.0059,1.0054,1.0049,1.0044,1.0039,1.0034,1.0029,1.0023,1.0018,1.0013,1.0008,1.0003,0.9998,0.9993,0.9988,0.9983,0.9978,0.9973,0.9968,0.9962,0.9957,0.9952,0.9947,0.9942,0.9937,0.9932,0.9927,0.9922,0.9917,0.9912,0.9907,0.9902,0.9897,0.9892,0.9887,0.9882,0.9877,0.9872,0.9867,0.9862,0.9857,0.9852,0.9848,0.9843,0.9838,0.9833,0.9828,0.9823,0.9818,0.9813,0.9808,0.9803,0.9798,0.9793,0.9789,0.9784,0.9779,0.9774,0.9769,0.9764,0.9759,0.9754,0.975,0.9745,0.974,0.9735,0.973,0.9725,0.9721,0.9716,0.9711,0.9706,0.9701,0.9697,0.9692,0.9687,0.9682,0.9677,0.9673,0.9668,0.9663,0.9658,0.9653,0.9649,0.9644,0.9639,0.9634,0.963,0.9625,0.962,0.9616,0.9611,0.9606,0.9601,0.9597,0.9592,0.9587,0.9583,0.9578,0.9573,0.9569,0.9564,0.9559,0.9554,0.955,0.9545,0.954,0.9536,0.9531,0.9527,0.9522,0.9517,0.9513,0.9508,0.9503,0.9499,0.9494,0.949,0.9485,0.948,0.9476,0.9471,0.9467,0.9462,0.9457,0.9453,0.9448,0.9444,0.9439,0.9435,0.943,0.9425,0.9421,0.9416,0.9412,0.9407,0.9403,0.9398,0.9394,0.9389,0.9385,0.938,0.9376,0.9371,0.9367,0.9362,0.9358,0.9353,0.9349,0.9344,0.934,0.9335,0.9331,0.9326,0.9322,0.9317,0.9313,0.9308,0.9304,0.93,0.9295,0.9291,0.9286,0.9282,0.9277,0.9273,0.9269,0.9264,0.926,0.9255,0.9251,0.9247,0.9242,0.9238,0.9233,0.9229,0.9225,0.922,0.9216,0.9212,0.9207,0.9203,0.9199,0.9194,0.919,0.9186,0.9181,0.9177,0.9173,0.9168,0.9164,0.916,0.9155,0.9151,0.9147,0.9142,0.9138,0.9134,0.913,0.9125,0.9121,0.9117,0.9112,0.9108,0.9104,0.91,0.9095,0.9091,0.9087,0.9083,0.9078,0.9074,0.907,0.9066,0.9061,0.9057,0.9053,0.9049,0.9045,0.904,0.9036,0.9032,0.9028,0.9024,0.9019,0.9015,0.9011,0.9007,0.9003,0.8998,0.8994,0.899,0.8986,0.8982,0.8978,0.8973,0.8969,0.8965,0.8961,0.8957,0.8953,0.8949,0.8945,0.894,0.8936,0.8932,0.8928,0.8924,0.892,0.8916,0.8912,0.8908,0.8903,0.8899,0.8895,0.8891,0.8887,0.8883,0.8879,0.8875,0.8871,0.8867,0.8863,0.8859,0.8855,0.8851,0.8847,0.8843,0.8838,0.8834,0.883,0.8826,0.8822,0.8818,0.8814,0.881,0.8806,0.8802,0.8798,0.8794,0.879,0.8786,0.8782,0.8778,0.8774,0.877,0.8766,0.8762,0.8759,0.8755,0.8751,0.8747,0.8743,0.8739,0.8735,0.8731,0.8727,0.8723,0.8719,0.8715,0.8711,0.8707,0.8703,0.8699,0.8695,0.8692,0.8688,0.8684,0.868,0.8676,0.8672,0.8668,0.8664,0.866,0.8657,0.8653,0.8649,0.8645,0.8641,0.8637,0.8633,0.8629,0.8626,0.8622,0.8618,0.8614,0.861,0.8606,0.8603,0.8599,0.8595,0.8591,0.8587,0.8583,0.858,0.8576,0.8572,0.8568,0.8564,0.8561,0.8557,0.8553,0.8549,0.8545,0.8542,0.8538,0.8534,0.853,0.8527,0.8523,0.8519,0.8515,0.8511,0.8508,0.8504,0.85,0.8496,0.8493,0.8489,0.8485,0.8481,0.8478,0.8474,0.847,0.8467,0.8463,0.8459,0.8455,0.8452,0.8448,0.8444,0.8441,0.8437,0.8433,0.8429,0.8426,0.8422,0.8418,0.8415,0.8411,0.8407,0.8404,0.84,0.8396,0.8393,0.8389,0.8385,0.8382,0.8378,0.8374,0.8371,0.8367,0.8364,0.836,0.8356,0.8353,0.8349,0.8345,0.8342,0.8338,0.8335,0.8331,0.8327,0.8324,0.832,0.8316,0.8313,0.8309,0.8306,0.8302,0.8299,0.8295,0.8291,0.8288,0.8284,0.8281,0.8277,0.8273,0.827,0.8266,0.8263,0.8259,0.8256,0.8252,0.8249,0.8245,0.8242,0.8238,0.8234,0.8231,0.8227,0.8224,0.822,0.8217,0.8213,0.821,0.8206,0.8203,0.8199,0.8196,0.8192,0.8189,0.8185,0.8182,0.8178,0.8175,0.8171,0.8168,0.8164,0.8161,0.8157,0.8154,0.815,0.8147,0.8143,0.814,0.8137,0.8133,0.813,0.8126,0.8123,0.8119,0.8116,0.8112,0.8109,0.8106,0.8102,0.8099,0.8095,0.8092,0.8088,0.8085,0.8082,0.8078,0.8075,0.8071,0.8068,0.8065,0.8061,0.8058,0.8054,0.8051,0.8048,0.8044,0.8041,0.8037,0.8034,0.8031,0.8027,0.8024,0.8021,0.8017,0.8014,0.801,0.8007,0.8004,0.8,0.7997,0.7994,0.799,0.7987,0.7984,0.798,0.7977,0.7974,0.797,0.7967,0.7964,0.796,0.7957,0.7954,0.795,0.7947,0.7944,0.794,0.7937,0.7934,0.7931,0.7927,0.7924,0.7921,0.7917,0.7914,0.7911,0.7907,0.7904,0.7901,0.7898,0.7894,0.7891,0.7888,0.7885,0.7881,0.7878,0.7875,0.7872,0.7868,0.7865,0.7862,0.7859,0.7855,0.7852,0.7849,0.7846,0.7842,0.7839,0.7836,0.7833,0.7829,0.7826,0.7823,0.782,0.7817,0.7813,0.781,0.7807,0.7804,0.78,0.7797,0.7794,0.7791,0.7788,0.7784,0.7781,0.7778,0.7775,0.7772,0.7769,0.7765,0.7762,0.7759,0.7756,0.7753,0.775,0.7746,0.7743,0.774,0.7737,0.7734,0.7731,0.7727,0.7724,0.7721,0.7718,0.7715,0.7712,0.7709,0.7705,0.7702,0.7699,0.7696,0.7693,0.769,0.7687,0.7684,0.768,0.7677,0.7674,0.7671,0.7668,0.7665,0.7662,0.7659,0.7656,0.7652,0.7649,0.7646,0.7643,0.764,0.7637,0.7634,0.7631,0.7628,0.7625,0.7622,0.7619,0.7615,0.7612,0.7609,0.7606,0.7603,0.76,0.7597,0.7594,0.7591,0.7588,0.7585,0.7582,0.7579,0.7576,0.7573,0.757,0.7567,0.7564,0.7561,0.7558,0.7554,0.7551,0.7548,0.7545,0.7542,0.7539,0.7536,0.7533,0.753,0.7527,0.7524,0.7521,0.7518,0.7515,0.7512,0.7509,0.7506,0.7503,0.75,0.7497,0.7494,0.7491,0.7488,0.7485,0.7482,0.7479,0.7476,0.7473,0.7471,0.7468,0.7465,0.7462,0.7459,0.7456,0.7453,0.745,0.7447,0.7444,0.7441,0.7438,0.7435,0.7432,0.7429,0.7426,0.7423,0.742,0.7417,0.7414,0.7411,0.7409,0.7406,0.7403,0.74,0.7397,0.7394,0.7391,0.7388,0.7385,0.7382,0.7379,0.7376,0.7374,0.7371,0.7368,0.7365,0.7362,0.7359,0.7356,0.7353,0.735,0.7347,0.7345,0.7342,0.7339,0.7336,0.7333,0.733,0.7327,0.7324,0.7322,0.7319,0.7316,0.7313,0.731,0.7307,0.7304,0.7301,0.7299,0.7296,0.7293,0.729,0.7287,0.7284,0.7282,0.7279,0.7276,0.7273,0.727,0.7267,0.7264,0.7262,0.7259,0.7256,0.7253,0.725,0.7247,0.7245,0.7242,0.7239,0.7236,0.7233,0.7231,0.7228,0.7225,0.7222,0.7219,0.7216,0.7214,0.7211,0.7208,0.7205,0.7202,0.72,0.7197,0.7194,0.7191,0.7189,0.7186,0.7183,0.718,0.7177,0.7175,0.7172,0.7169,0.7166,0.7163,0.7161,0.7158,0.7155,0.7152,0.715,0.7147,0.7144,0.7141,0.7139,0.7136,0.7133,0.713,0.7128,0.7125,0.7122,0.7119,0.7117,0.7114,0.7111,0.7108,0.7106,0.7103,0.71,0.7097,0.7095,0.7092,0.7089,0.7086,0.7084,0.7081,0.7078,0.7076,0.7073,0.707,0.7067,0.7065,0.7062,0.7059,0.7057,0.7054,0.7051,0.7048,0.7046,0.7043,0.704,0.7038,0.7035,0.7032,0.7029,0.7027,0.7024,0.7021,0.7019,0.7016,0.7013,0.7011,0.7008,0.7005,0.7003,0.7,0.6997,0.6995,0.6992,0.6989,0.6987,0.6984,0.6981,0.6979,0.6976,0.6973,0.6971,0.6968,0.6965,0.6963,0.696,0.6957,0.6955,0.6952,0.6949,0.6947,0.6944,0.6941,0.6939,0.6936,0.6933,0.6931,0.6928,0.6925,0.6923,0.692,0.6918,0.6915,0.6912,0.691,0.6907,0.6904,0.6902,0.6899,0.6897,0.6894,0.6891,0.6889,0.6886,0.6883,0.6881,0.6878,0.6876,0.6873,0.687,0.6868,0.6865,0.6863,0.686,0.6857,0.6855,0.6852,0.685,0.6847,0.6844,0.6842,0.6839,0.6837,0.6834,0.6831,0.6829,0.6826,0.6824,0.6821,0.6818,0.6816,0.6813,0.6811,0.6808,0.6806,0.6803,0.68,0.6798,0.6795,0.6793,0.679,0.6788,0.6785,0.6782,0.678,0.6777,0.6775,0.6772,0.677,0.6767,0.6764,0.6762,0.6759,0.6757,0.6754,0.6752,0.6749,0.6747,0.6744,0.6741,0.6739,0.6736,0.6734,0.6731,0.6729,0.6726,0.6724,0.6721,0.6719,0.6716,0.6714,0.6711,0.6708,0.6706,0.6703,0.6701,0.6698,0.6696,0.6693,0.6691,0.6688,0.6686,0.6683,0.6681,0.6678,0.6676,0.6673,0.6671,0.6668,0.6666,0.6663,0.6661,0.6658,0.6656,0.6653,0.6651,0.6648,0.6646,0.6643,0.6641,0.6638,0.6636,0.6633,0.6631,0.6628,0.6626,0.6623,0.6621,0.6618,0.6616,0.6613,0.6611,0.6608,0.6606,0.6603,0.6601,0.6598,0.6596,0.6593,0.6591,0.6588,0.6586,0.6583,0.6581,0.6578,0.6576,0.6574,0.6571,0.6569,0.6566,0.6564,0.6561,0.6559,0.6556,0.6554,0.6551,0.6549,0.6546,0.6544,0.6541,0.6539,0.6537,0.6534,0.6532,0.6529,0.6527,0.6524,0.6522,0.6519,0.6517,0.6515,0.6512,0.651,0.6507,0.6505,0.6502,0.65,0.6497,0.6495,0.6493,0.649,0.6488,0.6485,0.6483,0.648,0.6478,0.6476,0.6473,0.6471,0.6468,0.6466,0.6463,0.6461,0.6459,0.6456,0.6454,0.6451,0.6449,0.6446,0.6444,0.6442,0.6439,0.6437,0.6434,0.6432,0.643,0.6427,0.6425,0.6422,0.642,0.6417,0.6415,0.6413,0.641,0.6408,0.6405,0.6403,0.6401,0.6398,0.6396,0.6393,0.6391,0.6389,0.6386,0.6384,0.6381,0.6379,0.6377,0.6374,0.6372,0.6369,0.6367,0.6365,0.6362,0.636,0.6358,0.6355,0.6353,0.635,0.6348,0.6346,0.6343,0.6341,0.6338,0.6336,0.6334,0.6331,0.6329,0.6327,0.6324,0.6322,0.6319,0.6317,0.6315,0.6312,0.631,0.6308,0.6305,0.6303,0.6301,0.6298,0.6296,0.6293,0.6291,0.6289,0.6286,0.6284,0.6282,0.6279,0.6277,0.6275,0.6272,0.627,0.6267,0.6265,0.6263,0.626,0.6258,0.6256,0.6253,0.6251,0.6249,0.6246,0.6244,0.6242,0.6239,0.6237,0.6235,0.6232,0.623,0.6228,0.6225,0.6223,0.622,0.6218,0.6216,0.6213,0.6211,0.6209,0.6206,0.6204,0.6202,0.6199,0.6197,0.6195,0.6192,0.619,0.6188,0.6185,0.6183,0.6181,0.6178,0.6176,0.6174,0.6171,0.6169,0.6167,0.6165,0.6162,0.616,0.6158,0.6155,0.6153,0.6151,0.6148,0.6146,0.6144,0.6141,0.6139,0.6137,0.6134,0.6132,0.613,0.6127,0.6125,0.6123,0.612,0.6118,0.6116,0.6114,0.6111,0.6109,0.6107,0.6104,0.6102,0.61,0.6097,0.6095,0.6093,0.609,0.6088,0.6086,0.6084,0.6081,0.6079,0.6077,0.6074,0.6072,0.607,0.6067,0.6065,0.6063,0.6061,0.6058,0.6056,0.6054,0.6051,0.6049,0.6047,0.6045,0.6042,0.604,0.6038,0.6035,0.6033,0.6031,0.6029,0.6026,0.6024,0.6022,0.6019,0.6017,0.6015,0.6013,0.601,0.6008,0.6006,0.6003,0.6001,0.5999,0.5997,0.5994,0.5992,0.599,0.5987,0.5985,0.5983,0.5981,0.5978,0.5976,0.5974,0.5972,0.5969,0.5967,0.5965,0.5962,0.596,0.5958,0.5956,0.5953,0.5951,0.5949,0.5947,0.5944,0.5942,0.594,0.5938,0.5935,0.5933,0.5931,0.5928,0.5926,0.5924,0.5922,0.5919,0.5917,0.5915,0.5913,0.591,0.5908,0.5906,0.5904,0.5901,0.5899,0.5897,0.5895,0.5892,0.589,0.5888,0.5886,0.5883,0.5881,0.5879,0.5877,0.5874,0.5872,0.587,0.5868,0.5865,0.5863,0.5861,0.5859,0.5856,0.5854,0.5852,0.585,0.5847,0.5845,0.5843,0.5841,0.5838,0.5836,0.5834,0.5832,0.5829,0.5827,0.5825,0.5823,0.582,0.5818,0.5816,0.5814,0.5812,0.5809,0.5807,0.5805,0.5803,0.58,0.5798,0.5796,0.5794,0.5791,0.5789,0.5787,0.5785,0.5783,0.578,0.5778,0.5776,0.5774,0.5771,0.5769,0.5767,0.5765,0.5762,0.576,0.5758,0.5756,0.5754,0.5751,0.5749,0.5747,0.5745,0.5742,0.574,0.5738,0.5736,0.5734,0.5731,0.5729,0.5727,0.5725,0.5722,0.572,0.5718,0.5716,0.5714,0.5711,0.5709,0.5707,0.5705,0.5702,0.57,0.5698,0.5696,0.5694,0.5691,0.5689,0.5687,0.5685,0.5683,0.568,0.5678,0.5676,0.5674,0.5672,0.5669,0.5667,0.5665,0.5663,0.566,0.5658,0.5656,0.5654,0.5652,0.5649,0.5647,0.5645,0.5643,0.5641,0.5638,0.5636,0.5634,0.5632,0.563,0.5627,0.5625,0.5623,0.5621,0.5619,0.5616,0.5614,0.5612,0.561,0.5608,0.5605,0.5603,0.5601,0.5599,0.5597,0.5594,0.5592,0.559,0.5588,0.5586,0.5583,0.5581,0.5579,0.5577,0.5575,0.5573,0.557,0.5568,0.5566,0.5564,0.5562,0.5559,0.5557,0.5555,0.5553,0.5551,0.5548,0.5546,0.5544,0.5542,0.554,0.5537,0.5535,0.5533,0.5531,0.5529,0.5527,0.5524,0.5522,0.552,0.5518,0.5516,0.5513,0.5511,0.5509,0.5507,0.5505,0.5503,0.55,0.5498,0.5496,0.5494,0.5492,0.5489,0.5487,0.5485,0.5483,0.5481,0.5479,0.5476,0.5474,0.5472,0.547,0.5468,0.5466,0.5463,0.5461,0.5459,0.5457,0.5455,0.5453,0.545,0.5448,0.5446,0.5444,0.5442,0.5439,0.5437,0.5435,0.5433,0.5431,0.5429,0.5426,0.5424,0.5422,0.542,0.5418,0.5416,0.5413,0.5411,0.5409,0.5407,0.5405,0.5403,0.54,0.5398,0.5396,0.5394,0.5392,0.539,0.5387,0.5385,0.5383,0.5381,0.5379,0.5377,0.5375,0.5372,0.537,0.5368,0.5366,0.5364,0.5362,0.5359,0.5357,0.5355,0.5353,0.5351,0.5349,0.5346,0.5344,0.5342,0.534,0.5338,0.5336,0.5334,0.5331,0.5329,0.5327,0.5325,0.5323,0.5321,0.5318,0.5316,0.5314,0.5312,0.531,0.5308,0.5306,0.5303,0.5301,0.5299,0.5297,0.5295,0.5293,0.5291,0.5288,0.5286,0.5284,0.5282,0.528,0.5278,0.5276,0.5273,0.5271,0.5269,0.5267,0.5265,0.5263,0.5261,0.5258,0.5256,0.5254,0.5252,0.525,0.5248,0.5246,0.5243,0.5241,0.5239,0.5237,0.5235,0.5233,0.5231,0.5228,0.5226,0.5224,0.5222,0.522,0.5218,0.5216,0.5213,0.5211,0.5209,0.5207,0.5205,0.5203,0.5201,0.5198,0.5196,0.5194,0.5192,0.519,0.5188,0.5186,0.5184,0.5181,0.5179,0.5177,0.5175,0.5173,0.5171,0.5169,0.5167,0.5164,0.5162,0.516,0.5158,0.5156,0.5154,0.5152,0.5149,0.5147,0.5145,0.5143,0.5141,0.5139,0.5137,0.5135,0.5132,0.513,0.5128,0.5126,0.5124,0.5122,0.512,0.5118,0.5115,0.5113,0.5111,0.5109,0.5107,0.5105,0.5103,0.5101,0.5099,0.5096,0.5094,0.5092,0.509,0.5088,0.5086,0.5084,0.5082,0.5079,0.5077,0.5075,0.5073,0.5071,0.5069,0.5067,0.5065,0.5063,0.506,0.5058,0.5056,0.5054,0.5052,0.505,0.5048,0.5046,0.5044,0.5041,0.5039,0.5037,0.5035,0.5033,0.5031,0.5029,0.5027,0.5025,0.5022,0.502,0.5018,0.5016,0.5014,0.5012,0.501,0.5008,0.5006,0.5003,0.5001,0.4999,0.4997,0.4995,0.4993,0.4991,0.4989,0.4987,0.4985,0.4982,0.498,0.4978,0.4976,0.4974,0.4972,0.497,0.4968,0.4966,0.4964,0.4961,0.4959,0.4957,0.4955,0.4953,0.4951,0.4949,0.4947,0.4945,0.4943,0.494,0.4938,0.4936,0.4934,0.4932,0.493,0.4928,0.4926,0.4924,0.4922,0.492,0.4917,0.4915,0.4913,0.4911,0.4909,0.4907,0.4905,0.4903,0.4901,0.4899,0.4897,0.4894,0.4892,0.489,0.4888,0.4886,0.4884,0.4882,0.488,0.4878,0.4876,0.4874,0.4871,0.4869,0.4867,0.4865,0.4863,0.4861,0.4859,0.4857,0.4855,0.4853,0.4851,0.4849,0.4846,0.4844,0.4842,0.484,0.4838,0.4836,0.4834,0.4832,0.483,0.4828,0.4826,0.4824,0.4822,0.4819,0.4817,0.4815,0.4813,0.4811,0.4809,0.4807,0.4805,0.4803,0.4801,0.4799,0.4797,0.4795,0.4793,0.479,0.4788,0.4786,0.4784,0.4782,0.478,0.4778,0.4776,0.4774,0.4772,0.477,0.4768,0.4766,0.4764,0.4761,0.4759,0.4757,0.4755,0.4753,0.4751,0.4749,0.4747,0.4745,0.4743,0.4741,0.4739,0.4737,0.4735,0.4733,0.473,0.4728,0.4726,0.4724,0.4722,0.472,0.4718,0.4716,0.4714,0.4712,0.471,0.4708,0.4706,0.4704,0.4702,0.47,0.4698,0.4695,0.4693,0.4691,0.4689,0.4687,0.4685,0.4683,0.4681,0.4679,0.4677,0.4675,0.4673,0.4671,0.4669,0.4667,0.4665,0.4663,0.4661,0.4659,0.4656,0.4654,0.4652,0.465,0.4648,0.4646,0.4644,0.4642,0.464,0.4638,0.4636,0.4634,0.4632,0.463,0.4628,0.4626,0.4624,0.4622,0.462,0.4618,0.4616,0.4614,0.4611,0.4609,0.4607,0.4605,0.4603,0.4601,0.4599,0.4597,0.4595,0.4593,0.4591,0.4589,0.4587,0.4585,0.4583,0.4581,0.4579,0.4577,0.4575,0.4573,0.4571,0.4569,0.4567,0.4565,0.4563,0.4561,0.4559,0.4557,0.4554,0.4552,0.455,0.4548,0.4546,0.4544,0.4542,0.454,0.4538,0.4536,0.4534,0.4532,0.453,0.4528,0.4526,0.4524,0.4522,0.452,0.4518,0.4516,0.4514,0.4512,0.451,0.4508,0.4506,0.4504,0.4502,0.45,0.4498,0.4496,0.4494,0.4492,0.449,0.4488,0.4486,0.4484],"name":"M_A","npix":1217,"planted":{"Al_Ka":29292.5838,"Al_Ka_tail":446.08,"Cu_Ka":0.0,"Cu_Ka_stray":53.7099,"Mg_Ka":96.4991,"O_Ka":104.2268,"Si_Ka":192.0564,"Si_Ka_internal":23.1027},"source":"map","thickness_nm":74.585081,"truth_at":{"Al":98.8,"Mg":0.6,"Si":0.6}},{"axis_true":{"offset":-0.478,"scale":0.005},"counts":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,4,0,2,3,1,4,5,6,10,6,10,4,7,7,5,10,10,7,11,10,13,18,14,14,11,22,15,11,15,15,14,9,20,22,11,22,18,22,24,15,24,19,23,22,15,24,36,28,22,23,23,24,33,28,31,39,36,40,50,46,39,36,54,36,44,30,26,33,31,38,39,28,39,31,29,25,24,24,31,38,22,30,23,29,38,27,29,34,35,19,34,26,28,31,21,24,25,24,31,26,28,29,25,31,27,33,28,27,30,21,25,22,33,25,30,24,30,29,21,25,28,24,30,39,35,23,26,26,21,26,23,20,19,25,21,21,28,26,25,25,29,22,26,23,21,29,18,19,20,19,13,32,26,21,26,29,30,24,23,30,36,19,20,19,28,26,19,20,23,32,23,24,25,32,27,34,35,37,38,43,32,27,32,32,24,21,24,33,31,32,33,17,20,34,30,32,18,30,36,28,44,34,45,36,42,43,39,50,44,42,43,45,35,39,35,44,34,29,31,38,22,34,33,25,34,39,38,26,47,40,45,53,49,53,93,111,155,188,269,372,490,713,922,1110,1499,1832,2226,2681,3161,3412,3855,4088,4408,4608,4679,4521,4369,4025,3808,3488,3017,2541,2234,1816,1497,1174,909,700,552,396,295,206,179,150,110,91,75,48,53,40,23,28,19,19,18,12,9,10,12,21,14,19,19,18,26,23,32,31,23,32,35,43,45,40,42,37,41,40,34,31,34,24,21,29,29,25,31,17,18,14,29,13,7,11,15,9,17,14,11,17,7,12,16,18,10,15,11,17,10,13,16,16,15,6,15,7,10,14,15,16,13,11,19,9,17,15,8,14,8,9,14,11,12,13,8,10,6,16,12,12,13,15,6,12,19,11,13,5,16,13,7,19,12,7,12,15,12,18,10,11,10,9,13,5,12,9,15,14,19,13,18,10,15,6,7,18,10,10,10,9,12,12,5,12,10,13,13,11,15,12,10,4,10,14,14,10,12,4,14,6,11,11,15,5,9,8,12,5,9,9,6,17,7,5,13,16,7,7,10,11,13,8,15,8,5,11,11,13,12,7,11,9,8,15,17,11,16,17,6,8,8,10,8,9,10,6,8,12,10,10,11,7,5,6,9,11,9,11,11,3,11,6,11,9,10,11,7,10,13,15,13,8,14,10,14,5,9,7,14,11,9,14,7,8,13,10,4,2,12,9,15,8,5,8,12,10,9,15,11,7,10,18,23,30,14,25,28,45,47,43,46,70,67,80,81,91,82,118,157,144,117,145,134,100,125,130,89,106,90,82,70,64,61,50,42,31,31,26,20,19,18,13,14,15,14,8,8,10,7,5,8,13,6,9,8,12,13,9,9,9,6,9,6,8,7,8,9,10,12,5,10,7,8,4,12,6,7,9,9,10,4,16,6,9,11,12,15,10,9,6,5,6,7,17,8,5,8,11,6,16,10,9,9,8,9,7,11,6,13,8,9,12,12,5,8,6,3,10,7,9,4,7,7,9,6,3,10,9,6,8,4,5,5,9,8,7,11,9,6,8,4,6,7,8,6,5,12,7,5,9,5,7,6,7,10,7,5,5,13,8,6,4,6,5,8,9,2,7,5,8,6,6,4,6,11,8,3,6,11,5,13,12,10,7,12,2,4,7,4,9,8,4,5,4,6,7,8,6,16,6,7,5,3,13,4,9,6,6,4,6,4,10,9,10,3,8,8,5,9,4,8,5,5,7,7,5,4,12,7,5,8,4,4,7,4,11,7,5,6,7,10,10,5,7,4,4,8,2,2,6,7,3,13,8,7,9,5,5,7,5,8,7,6,6,8,11,5,7,6,5,7,5,6,5,8,7,6,6,7,6,9,6,8,3,5,5,4,6,11,5,4,6,4,7,8,5,9,3,8,2,3,7,11,7,7,6,7,5,3,9,3,9,9,3,4,8,5,5,9,6,7,7,8,8,4,4,6,3,6,3,4,2,6,5,2,6,9,5,7,4,5,6,6,5,3,5,3,6,11,8,7,7,7,5,6,8,9,7,8,5,8,10,4,5,5,4,3,3,3,9,6,5,7,5,8,4,9,10,7,4,4,6,9,6,15,3,6,2,4,6,3,5,6,5,3,11,3,5,9,4,7,6,5,2,5,6,6,3,5,5,3,2,4,4,3,7,7,7,8,7,7,8,3,6,9,7,10,4,5,1,10,9,6,6,5,6,6,6,4,5,3,7,10,5,3,8,4,3,5,7,5,8,4,6,6,8,3,0,5,6,2,8,5,2,3,7,4,3,4,6,8,8,7,3,6,4,4,4,5,2,4,5,3,3,4,5,3,3,6,7,7,4,3,4,4,4,4,7,6,6,7,6,7,7,5,7,2,6,6,10,6,5,4,3,4,3,11,7,3,5,5,4,4,8,7,4,9,7,3,2,5,6,5,7,8,5,4,7,2,10,1,8,6,3,3,7,3,3,7,5,4,3,7,6,3,4,1,8,2,6,0,7,5,4,1,1,5,3,5,6,7,2,3,4,4,2,6,4,8,2,4,8,7,5,4,4,2,5,2,7,10,1,2,4,7,3,3,7,2,2,9,4,2,6,8,2,5,4,4,5,6,6,5,4,6,8,4,2,6,2,3,1,7,1,8,3,6,8,5,4,5,5,6,3,4,10,3,7,1,4,2,2,3,3,4,3,2,4,6,3,5,3,7,5,4,5,5,8,5,8,4,4,6,7,3,4,6,3,6,4,5,4,3,5,6,2,5,3,3,3,4,5,4,4,0,5,1,5,5,2,5,5,4,4,7,4,3,6,6,4,3,5,2,1,5,3,5,5,7,4,3,3,2,3,3,3,5,2,2,3,4,2,3,4,3,5,11,2,4,3,3,3,2,5,3,1,1,2,4,5,8,8,3,6,4,4,3,4,2,4,4,1,2,6,6,6,5,4,6,5,2,6,3,3,4,0,3,6,4,1,4,5,5,5,5,6,3,4,3,0,7,3,2,2,2,2,8,2,3,4,3,4,1,5,4,3,0,4,8,4,4,5,3,5,3,3,5,3,1,1,6,6,5,6,3,4,3,4,3,6,4,6,7,2,3,5,4,2,0,1,3,6,2,2,9,2,5,3,2,5,1,3,6,6,3,1,4,3,4,3,2,1,4,5,3,5,8,3,5,4,2,5,6,5,3,4,8,7,4,0,4,5,6,3,4,4,5,6,2,4,2,2,1,7,4,6,4,0,1,7,6,1,6,3,4,4,3,1,5,2,3,3,4,5,3,1,5,6,1,3,3,4,2,1,3,3,5,5,4,3,2,1,3,6,6,3,7,4,2,4,3,2,5,3,2,3,2,4,5,5,1,3,4,1,0,1,3,1,2,2,7,1,2,7,7,8,6,5,1,5,2,3,3,3,1,3,1,7,4,5,4,3,2,4,4,4,2,6,2,3,5,4,1,5,6,3,3,1,3,3,4,4,3,4,2,3,5,4,4,3,3,1,2,2,7,1,2,5,3,6,4,4,5,8,4,6,6,5,3,6,6,5,9,7,6,6,8,4,10,4,7,6,5,3,3,7,7,5,8,12,6,7,11,10,6,7,9,8,5,6,2,15,4,10,9,1,1,3,3,3,6,5,5,6,8,7,3,4,4,3,2,3,4,4,5,1,2,3,2,3,1,1,1,4,3,3,2,4,2,6,1,4,5,3,7,3,7,5,2,4,0,3,1,4,6,0,5,2,4,3,5,5,6,4,4,0,5,4,0,2,3,2,4,5,1,3,5,2,3,1,4,4,4,1,5,3,3,1,3,2,7,5,1,2,2,3,1,6,2,1,3,2,7,4,5,5,3,1,2,2,2,1,4,3,2,4,0,2,5,4,5,2,1,5,5,4,3,4,1,5,2,2,2,3,3,4,3,3,4,5,1,3,0,3,2,5,3,4,0,4,6,6,2,1,4,4,6,3,4,3,3,6,2,4,4,4,4,2,2,5,3,1,4,3,0,1,0,4,4,3,3,6,2,4,1,3,3,5,6,1,8,2,2,5,2,2,3,4,5,7,2,4,4,4,2,3,0,3,7,4,4,3,0,2,0,2,4,2,3,3,4,5,2,0,2,4,6,0,5,1,5,2,1,1,2,4,3,5,4,1,2,2,4,4,3,2,1,1,2,4,4,5,1,1,5,3,3,5,4,4,2,1,2,3,2,0,6,5,2,1,1,1,2,4,4,1,1,4,3,2,1,1,5,2,3,6,3,2,0,2,1,3,7,1,3,3,3,3,2,4,1,0,4,3,2,1,3,1,1,1,3,3,2,1,1,2,1,3,5,3,4,1,6,2,0,1,5,2,6,1,3,3,2,4,0,4,3,4,2,1,3,4,2,3,1,1,2,1,1,2,4,2,1,5,3,3,3,0,2,4,2,2,3,1,1,7,1,3,2,4,0,2,0,2,1,2,3,4,1,4,4,3,3,3,5,3,1,2,2,4,2,4,3,1,2,2,2,2,5,5,1,4,3,2,2,5,3,1,1,3,2,2,2,4,1,5,1,4,2,2,4,3,3,3,3,4,3,3,5,4,4,3,2,4,3,2,1,2,3,1,4,4,3,1,5,1,0,3,5,1,2,1,4,3,3,0,0,1,2,2,3,3,3,2,1,3,3,1,3,0,2,1,2,2,0,1,1,2,1,2,0,2,3,0,1,1,1,5,2,1,1,3,3,2,0,4,6,1,1,3,4,4,2,5,1,4,4,4,1,2,1,2,1,3,4,2,3,2,1,2,2,0,2,5,1,0,5,1,3,2,1,3,3,0,0,3,3,2,1,1,5,1,1,4,4,1,3,3,2,3,2,5,0,5,1,0,5,1,2,2,0,4,1,3,2,2,2,0,2,4,2,5,1,4,0,2,4,2,3,1,0,2,2,2,2,2,0,1,4,1,3,3,2,0,3,7,2,1,0,1,2,4,4,2,1,3,3,2,2,3,2,2,2,1,3,2,1,3,2,4,3,3,2,2,2,5,2,4,1,3,0,4,2,7,0,5,1,4,3,2,5,1,1,4,1,1,1,1,3,3,3,0,1,5,2,2,2,1,0,5,1,3,3,3,3,1,2,1,2,1,0,0,4,2,1,3,3,1,3,3,6,1,5,2,0,0,2,3,3,3,2,3,3,2,2,1,1,5,3,3,1,1,0,2,1,2,2,1,3,3,2,4,5,2,1,1,1,3,1,6,3,3,1,4,2,1,2,3,5,3,1,4,2,4,5,3,5,1,2,3,1,0,2,1,1,2,2,2,2,0,2,1,1,4,2,1,6,5,2,4,3,5,4,2,5,2,2,2,1,3,3,0,2,1,5,0,3,0,2,4,2,1,3,0,1,1,2,3,3,2,2,3,1,3,1,1,2,1,1,0,3,2,5,5,0,1,1,2,2,4,0,2,3,1,3,2,2,2,2,1,4,2,2,5,0,3,1,4,3,2,1,1,1,3,2,0,1,1,2,2,2,2,4,3,1,3,1,3,0,2,0,5,0,3,3,7,3,2,3,2,3,4,1,2,1,0,3,0,1,1,0,0,6,2,4,2,1,3,3,4,2,2,6,1,1,1,1,1,1,4,1,3,1,3,3,0,2,2,2,2,1,2,2,2,2,3,2,3,4,2,4,3,1,2,3,0,2,1,1,1,3,0,1,2,5,2,2,2,7,2,1,1,2,1,2,3,2,2,0,4,4,2,2,6,2,2,2,4,0,2,3,1,2,1,3,3,6,1,2,1,3,1,4,4,4,2,0,2,0,2,2,0,2,2,1,4,1,4,1,4,2,1,2,4,1,1,1,3,3,1,1,0,3,3,1,1,2,4,1,2,1,2,1,2,0,3,3,4,4,3,3,4,1,2,0,2,3,0,1,2,5,4,1,6,1,3,2,3,2,1,5,1,1,2,1,4,1,0,5,4,2,0,0,1,1,0,0,3,3,2,1,4,3,0,1,3,3,0,2,6,3,0,2,2,1,3,4,4,3,0,0,1,1,1,3,1,3,2,2,2,3,2,1,1,4,3,2,1,2,4,3,2,2,1,0,1,3,0,1,1,4,3,2,1,3,2,3,1,1,2,0,1,0,4,2,1,3,2,1,1,0,4,2,1,2,3,3,0,1,0,3,3,0,0,1,2,2,4,2,1,2,4,2,1,1,3,1,1,2,3,3,4,1,1,2,4,2,0,3,0,1,1,2,3,2,1,1,2,2,1,3,3,0,2,1,0,1,2,1,4,2,1,0,3,1,2,3,0,2,0,0,3,1,1,1,0,3,1,7,2,1,1,2,0,3,1,0,0,1,3,1,1,2,5,0,3,2,1,4,0,3,3,6,2,0,4,0,0,1,1,0,4,5,3,2,2,5,1,2,3,2,2,0,1,1,1,2,1,2,4,1,1,5,2,1,0,0,3,2,2,3,8,4,1,2,1,0,3,0,2,1,2,1,4,1,0,0,1,0,1,2,2,2,1,2,0,0,4,2,0,2,2,3,3,3,1,3,2,5,0,3,1,3,2,2,2,2,5,3,0,4,5,2,1,2,0,2,1,1,3,1,1,0,2,1,3,1,2,2,1,1,6,0,4,6,2,2,1,1,2,0,0,2,1,1,2,0,0,3,1,2,1,3,2,2,3,2,2,4,1,3,1,1,1,1,4,2,1,2,5,3,1,0,3,0,0,3,2,0,3,0,0,1,2,4,1,0,3,2,1,3,4,2,1,3,1,2,2,1,2,1,3,1,2,1,2,3,0,1,5,1,2,1,1,2,1,1,0,2,0,1,1,1,1,4,0,3,1,1,2,0,4,1,1,2,1,2,3,1,2,1,0,1,0,1,2,3,2,2,1,1,4,1,0,2,3,2,3,0,0,0,2,2,2,1,2,1,2,3,3,2,1,1,1,1,2,2,1,1,1,1,2,2,3,0,1,0,4,3,1,1,1,2,4,1,2,1,1,2,4,3,2,0,1,0,2,0,1,1,0,0,1,4,3,1,0,3,1,2,2,0,2,2,1,2,0,1,1,1,1,4,3,3,2,2,1,2,3,1,2,3,2,5,2,3,2,3,1,2,1,0,2,1,1,2,2,2,2,5,1,2,1,3,0,3,2,5,1,3,1,2,3,1,1,2,0,3,2,1,3,1,2,1,1,1,1,4,2,2,1,2,2,1,2,1,0,0,2,1,1,2,4,1,1,4,0,2,2,0,1,2,3,2,1,0,0,0,0,0,1,1,2,2,2,1,0,1,1,2,1,3,1,1,2,2,1,3,1,0,2,0,2,1,0,1,0,2,1,1,1,2,1,1,0,2,3,3,1,2,1,1,0,0,1,2,1,1,1,4,2,2,1,0,1,2,1,1,1,2,1,1,1,1,2,2,3,1,4,0,3,0,2,1,1,2,0,2,1,3,1,0,1,2,2,0,0,2,1,1,3,2,1,0,0,0,1,1,2,0,1,4,0,0,2,1,2,3,0,1,0,2,1,2,1,1,1,1,1,3,2,2,1,0,0,0,0,1,1,4,1,0,4,2,0,0,2,2,0,1,1,3,2,1,2,1,0,2,3,2,0,4,1,2,1,2,1,3,2,1,1,3,1,0,2,2,0,2,2,1,3,2,1,0,1,2,0,2,0,0,2,2,2,2,0,1,2,4,1,3,0,0,1,3,0,1,0,1,0,2,0,1,4,1,7,1,0,3,0,2,0,2,0,0,2,1,1,0,0,2,1,2,1,1,1,1,2,3,0,1,3,1,1,2,1,2,0,1,1,4,3,5,1,3,0,0,2,1,4,2,1,1,1,2,1,3,3,1,1,0,1,2,0,1,1,3,1,2,2,0,3,1,0,1,2,2,3,0,1,1,1,4,0,1,1,0,0,1,0,2,0,0,1,0,1,0,3,3,0,1,3,0,4,0,0,1,0,2,0,3,1,1,2,1,0,1,2,0,1,0,0,2,0,1,0,2,2,0,1,1,3,3,1,1,1,0,2,0,1,3,1,1,1,1,3,4,1,1,1,0,3,2,1,1,4,2,1,1,3,2,2,0,4,0,2,2,1,1,0,1,1,0,3,2,1,1,2,2,3,1,2,1,2,0,1,0,1,1,0,2,0,1,7,0,0,1,0,0,0,2,1,3,0,4,3,2,1,2,1,1,0,1,1,2,1,1,2,3,2,2,1,0,2,1,1,1,1,2,1,3,3,1,1,3,0,0,2,2,1,1,0,1,1,1,0,3,3,0,0,0,3,0,2,0,2,1,1,3,1,2,1,0,0,1,3,3,0,1,1,0,3,2,1,1,0,2,4,3,1,2,1,3,0,0,1,0,0,1,2,4,2,2,2,1,2,2,1,1,3,0,2,0,2,3,0,1,3,1,0,0,1,1,2,1,3,0,4,1,0,3,2,2,3,0,1,3,1,0,2,1,2,1,0,1,1,1,0,1,0,3,1,1,0,3,0,3,0,0,2,0,1,3,1,0,4,1,4,0,1,1,0,1,2,1,3,2,0,2,2,2,2,0,2,0,2,0,0,0,0,2,1,0,1,0,2,3,0,2,0,2,1,0,1,2,1,2,4,3,2,0,3,1,3,2,3,1,1,0,1,1,1,4,0,1,2,0,0,1,1,1,4,0,1,0,2,0,0,1,2,1,3,1,0,2,3,3,2,2,1,2,1,1,1,1,2,1,1,0,0,0,1,2,1,1,1,2,1,2,2,2,1,2,3,1,2,3,2,4,2,1,1,0,0,0,3,1,4,1,0,1,2,0,0,2,1,0,5,1,0,0,0,0,1,1,1,2,1,1,2,1,0,2,0,2,1,0,1,1,0,0,1,0,1,1,0,2,1,2,0,2,0,1,1,1,1,4,0,3,0,2,1,2,2,1,0,0,1,1,0,2,1,1,1,2,1,1,1,5,0,1,2,3,0,1,2,2,1,1],"expected":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0001,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0002,0.0003,0.0003,0.0003,0.0003,0.0003,0.0003,0.0003,0.0003,0.0004,0.0004,0.0004,0.0004,0.0004,0.0005,0.0005,0.0006,0.0009,0.0014,0.0027,0.0051,0.0095,0.0171,0.0292,0.0476,0.0743,0.1115,0.1616,0.2271,0.3101,0.4133,0.5382,0.6871,0.8612,1.0613,1.2893,1.5445,1.8273,2.1383,2.4758,2.8394,3.2291,3.6421,4.0774,4.5351,5.0115,5.5049,6.0155,6.5401,7.0762,7.6225,8.179,8.7417,9.3088,9.8798,10.4543,11.0286,11.6014,12.1716,12.7402,13.3036,13.8605,14.4101,14.9535,15.4886,16.0139,16.5288,17.0327,17.5275,18.0104,18.481,18.9391,19.3843,19.8187,20.2402,20.6485,21.0439,21.4266,21.7984,22.1609,22.5161,22.8696,23.2306,23.6143,24.0446,24.5539,25.1861,25.9956,27.0434,28.3885,30.0763,32.1217,34.4937,37.1056,39.8113,42.4149,44.6938,46.4319,47.4535,47.6577,47.0271,45.4066,43.4791,41.1927,38.7728,36.421,34.293,32.4855,31.0378,29.9417,29.1566,28.6255,28.288,28.0879,27.9797,27.929,27.9116,27.9119,27.92,27.9304,27.9404,27.9479,27.9522,27.9532,27.9506,27.9446,27.9354,27.923,27.9077,27.8897,27.8689,27.8454,27.8193,27.7908,27.76,27.7269,27.6917,27.6546,27.6157,27.5749,27.5325,27.4883,27.4427,27.3955,27.3469,27.2971,27.246,27.1938,27.1405,27.0863,27.031,26.9749,26.918,26.8604,26.802,26.743,26.6835,26.6234,26.563,26.5021,26.4409,26.3795,26.3178,26.256,26.1942,26.1325,26.071,26.0101,25.95,25.8911,25.8341,25.7796,25.7284,25.6815,25.6397,25.6039,25.5746,25.552,25.5356,25.5245,25.5169,25.5106,25.5029,25.4908,25.4717,25.4433,25.404,25.3532,25.2912,25.2193,25.1399,25.0559,24.971,24.8896,24.8174,24.76,24.7237,24.717,24.7495,24.8328,24.9792,25.2017,25.5121,25.919,26.4262,27.0299,27.717,28.464,29.2376,29.9963,30.6939,31.2841,31.7255,31.9866,32.0495,31.9122,31.5886,31.1068,30.5048,29.8268,29.118,28.4207,27.7711,27.1978,26.7215,26.3563,26.1112,25.9928,26.0074,26.1627,26.4693,26.9402,27.5892,28.4287,29.4657,30.6972,32.1064,33.6592,35.3028,36.9672,38.5689,40.0183,41.2281,42.1236,42.6511,42.785,42.531,41.9257,41.0314,39.929,38.7084,37.4589,36.2605,35.1781,34.2578,33.5231,32.9681,32.6309,32.4758,32.4863,32.6472,32.9513,33.4068,34.0474,34.949,36.2532,38.2034,41.1968,45.856,53.1218,64.3679,81.5309,107.2415,144.9371,198.9207,274.3284,376.9603,512.9353,688.1468,907.5226,1174.1329,1488.2349,1846.3859,2240.7856,2659.0134,3084.2982,3496.3946,3873.0479,4191.925,4432.789,4579.6284,4622.431,4558.3284,4391.931,4134.7962,3804.1161,3420.829,3007.4416,2585.8752,2175.6151,1792.3685,1447.3319,1147.0646,893.8748,686.5707,521.4035,392.5168,292.9458,219.8502,166.2335,127.0762,98.5231,77.5954,62.0932,50.4463,41.5709,34.7341,29.4414,25.354,22.2306,19.8918,18.1987,17.0425,16.3393,16.0276,16.0667,16.4341,17.1217,18.1308,19.4661,21.1289,23.1101,25.3838,27.9029,30.5957,33.3698,36.1069,38.6758,40.9418,42.7773,44.0728,44.7482,44.7605,44.1087,42.8337,41.0141,38.7584,36.1942,33.4568,30.6771,27.972,25.437,23.1422,21.1305,19.4201,18.0074,16.8721,15.9826,15.3014,14.7895,14.408,14.1231,13.904,13.726,13.5808,13.4555,13.3403,13.2311,13.1263,13.0259,12.9306,12.8416,12.7596,12.6853,12.6189,12.5603,12.5089,12.4641,12.4249,12.3905,12.3599,12.3323,12.3071,12.2835,12.2612,12.2397,12.2189,12.1985,12.1783,12.1583,12.1384,12.1186,12.0988,12.0791,12.0594,12.0397,12.02,12.0004,11.9807,11.9611,11.9415,11.9219,11.9023,11.8828,11.8632,11.8437,11.8242,11.8047,11.7853,11.7658,11.7463,11.7266,11.7069,11.6873,11.6677,11.6481,11.6285,11.609,11.5895,11.57,11.5505,11.5311,11.5118,11.4924,11.4731,11.4538,11.4346,11.4154,11.3962,11.377,11.3579,11.3388,11.3198,11.3008,11.2818,11.2629,11.244,11.2251,11.2063,11.1874,11.1686,11.1499,11.1311,11.1124,11.0938,11.0752,11.0566,11.038,11.0195,11.001,10.9826,10.9642,10.9459,10.9276,10.9093,10.891,10.8728,10.8547,10.8366,10.8185,10.8005,10.7825,10.7645,10.7466,10.7287,10.7108,10.693,10.6753,10.6576,10.6399,10.6222,10.6046,10.587,10.5695,10.552,10.5345,10.5171,10.4997,10.4824,10.4652,10.4479,10.4308,10.4136,10.3966,10.3796,10.3626,10.3457,10.3288,10.3119,10.2951,10.2784,10.2616,10.2449,10.2282,10.2115,10.1949,10.1783,10.1617,10.1451,10.1285,10.112,10.0955,10.079,10.0626,10.0462,10.0299,10.0136,9.9974,9.9812,9.9651,9.9492,9.9333,9.9176,9.9022,9.887,9.8722,9.858,9.8445,9.8319,9.8206,9.8108,9.8031,9.7978,9.7955,9.7967,9.8019,9.8116,9.8262,9.8459,9.8707,9.9004,9.9345,9.9722,10.0122,10.0533,10.0935,10.1311,10.1641,10.1906,10.2089,10.2175,10.2154,10.202,10.1772,10.1415,10.0959,10.0418,9.9808,9.9149,9.8462,9.7769,9.709,9.6446,9.5857,9.5347,9.4941,9.4671,9.458,9.4726,9.5192,9.6089,9.7568,9.983,10.3134,10.781,11.426,12.2972,13.4508,14.9506,16.8657,19.268,22.2284,25.8113,30.0694,35.0363,40.7199,47.0957,54.1012,61.6327,69.5434,77.6461,85.718,93.5101,100.7587,107.1998,112.5851,116.6976,119.3659,120.4764,119.9807,117.8996,114.3214,109.3956,103.3224,96.3397,88.707,80.6898,72.5448,64.5064,56.7769,49.5197,42.8559,36.864,31.5831,27.0177,23.1435,19.9147,17.2708,15.1427,13.4585,12.1474,11.1433,10.3868,9.826,9.4173,9.1249,8.9202,8.7812,8.6909,8.637,8.6107,8.6058,8.6181,8.6448,8.6841,8.7345,8.7947,8.8635,8.9395,9.0209,9.1055,9.1909,9.2744,9.3529,9.4235,9.4832,9.5295,9.56,9.5732,9.568,9.5442,9.5023,9.4435,9.3696,9.2831,9.1866,9.0831,8.9756,8.8669,8.7597,8.6561,8.5581,8.467,8.3837,8.3086,8.2419,8.1832,8.1322,8.0882,8.0504,8.0179,7.9901,7.9661,7.9453,7.9269,7.9106,7.8957,7.8821,7.8694,7.8573,7.8457,7.8345,7.8235,7.8127,7.8021,7.7916,7.7813,7.7709,7.7607,7.7505,7.7403,7.7302,7.7201,7.71,7.6999,7.6899,7.6798,7.6697,7.6595,7.6494,7.6392,7.6289,7.6187,7.6084,7.5981,7.5878,7.5775,7.5672,7.5569,7.5467,7.5364,7.5262,7.516,7.5059,7.4958,7.4858,7.4758,7.4659,7.456,7.4462,7.4363,7.4266,7.4168,7.4071,7.3975,7.3879,7.3782,7.3687,7.3591,7.3496,7.3401,7.3306,7.3212,7.3117,7.3023,7.2929,7.2836,7.2742,7.2649,7.2556,7.2463,7.237,7.2278,7.2186,7.2094,7.2002,7.1911,7.1819,7.1728,7.1637,7.1547,7.1456,7.1366,7.1276,7.1186,7.1096,7.1007,7.0918,7.0829,7.074,7.0651,7.0563,7.0475,7.0387,7.0299,7.0211,7.0124,7.0037,6.995,6.9863,6.9776,6.969,6.9603,6.9517,6.9431,6.9346,6.926,6.9175,6.909,6.9005,6.892,6.8836,6.8751,6.8667,6.8583,6.85,6.8416,6.8333,6.8249,6.8166,6.8084,6.8001,6.7919,6.7836,6.7754,6.7672,6.759,6.7509,6.7428,6.7346,6.7265,6.7185,6.7104,6.7023,6.6943,6.6863,6.6783,6.6703,6.6624,6.6544,6.6465,6.6386,6.6307,6.6228,6.615,6.6071,6.5993,6.5915,6.5837,6.576,6.5682,6.5605,6.5527,6.545,6.5374,6.5297,6.522,6.5144,6.5068,6.4992,6.4916,6.484,6.4765,6.4689,6.4614,6.4539,6.4464,6.4389,6.4315,6.424,6.4166,6.4092,6.4018,6.3944,6.3871,6.3797,6.3724,6.3651,6.3578,6.3505,6.3432,6.336,6.3287,6.3215,6.3143,6.3071,6.2999,6.2928,6.2856,6.2785,6.2714,6.2643,6.2572,6.2501,6.2431,6.236,6.229,6.222,6.215,6.208,6.201,6.1941,6.1871,6.1802,6.1733,6.1664,6.1595,6.1527,6.1458,6.139,6.1322,6.1253,6.1185,6.1118,6.105,6.0982,6.0915,6.0848,6.0781,6.0714,6.0647,6.058,6.0513,6.0447,6.0381,6.0315,6.0249,6.0183,6.0117,6.0051,5.9986,5.992,5.9855,5.979,5.9725,5.966,5.9596,5.9531,5.9467,5.9402,5.9338,5.9274,5.921,5.9146,5.9083,5.9019,5.8956,5.8893,5.8829,5.8766,5.8703,5.8641,5.8578,5.8516,5.8453,5.8391,5.8329,5.8267,5.8205,5.8143,5.8081,5.802,5.7958,5.7897,5.7836,5.7775,5.7714,5.7653,5.7593,5.7532,5.7472,5.7411,5.7351,5.7291,5.7231,5.7171,5.7111,5.7052,5.6992,5.6933,5.6874,5.6815,5.6756,5.6697,5.6638,5.6579,5.6521,5.6462,5.6404,5.6346,5.6287,5.6229,5.6172,5.6114,5.6056,5.5999,5.5941,5.5884,5.5827,5.5769,5.5712,5.5656,5.5599,5.5542,5.5485,5.5429,5.5373,5.5316,5.526,5.5204,5.5148,5.5093,5.5037,5.4981,5.4926,5.487,5.4815,5.476,5.4705,5.465,5.4595,5.454,5.4486,5.4431,5.4377,5.4322,5.4268,5.4214,5.416,5.4106,5.4052,5.3998,5.3945,5.3891,5.3838,5.3784,5.3731,5.3678,5.3625,5.3572,5.3519,5.3466,5.3414,5.3361,5.3309,5.3256,5.3204,5.3152,5.31,5.3048,5.2996,5.2944,5.2893,5.2841,5.279,5.2738,5.2687,5.2636,5.2585,5.2534,5.2483,5.2432,5.2381,5.233,5.228,5.2229,5.2179,5.2129,5.2079,5.2029,5.1979,5.1929,5.1879,5.1829,5.1779,5.173,5.168,5.1631,5.1582,5.1533,5.1484,5.1435,5.1386,5.1337,5.1288,5.1239,5.1191,5.1142,5.1094,5.1046,5.0997,5.0949,5.0901,5.0853,5.0805,5.0758,5.071,5.0662,5.0615,5.0567,5.052,5.0473,5.0425,5.0378,5.0331,5.0284,5.0237,5.0191,5.0144,5.0097,5.0051,5.0004,4.9958,4.9912,4.9865,4.9819,4.9773,4.9727,4.9681,4.9635,4.959,4.9544,4.9499,4.9453,4.9408,4.9362,4.9317,4.9272,4.9227,4.9182,4.9137,4.9092,4.9047,4.9002,4.8958,4.8913,4.8869,4.8824,4.878,4.8736,4.8692,4.8648,4.8604,4.856,4.8516,4.8472,4.8428,4.8385,4.8341,4.8298,4.8254,4.8211,4.8168,4.8124,4.8081,4.8038,4.7995,4.7952,4.7909,4.7867,4.7824,4.7781,4.7739,4.7696,4.7654,4.7612,4.7569,4.7527,4.7485,4.7443,4.7401,4.7359,4.7317,4.7276,4.7234,4.7192,4.7151,4.7109,4.7068,4.7026,4.6985,4.6944,4.6903,4.6862,4.6821,4.678,4.6739,4.6698,4.6657,4.6617,4.6576,4.6536,4.6495,4.6455,4.6415,4.6374,4.6334,4.6294,4.6254,4.6214,4.6174,4.6134,4.6094,4.6055,4.6015,4.5975,4.5936,4.5896,4.5857,4.5818,4.5778,4.5739,4.57,4.5661,4.5622,4.5583,4.5544,4.5505,4.5466,4.5428,4.5389,4.535,4.5312,4.5273,4.5235,4.5197,4.5158,4.512,4.5082,4.5044,4.5006,4.4968,4.493,4.4892,4.4854,4.4817,4.4779,4.4742,4.4704,4.4666,4.4629,4.4592,4.4554,4.4517,4.448,4.4443,4.4406,4.4369,4.4332,4.4295,4.4258,4.4221,4.4185,4.4148,4.4111,4.4075,4.4039,4.4002,4.3966,4.393,4.3894,4.3858,4.3822,4.3786,4.3751,4.3715,4.368,4.3645,4.3611,4.3576,4.3542,4.3508,4.3475,4.3441,4.3409,4.3376,4.3344,4.3312,4.3281,4.325,4.322,4.3189,4.3159,4.313,4.31,4.307,4.3041,4.3011,4.2981,4.295,4.292,4.2888,4.2856,4.2824,4.2791,4.2757,4.2723,4.2687,4.2652,4.2615,4.2578,4.254,4.2502,4.2464,4.2425,4.2386,4.2347,4.2308,4.227,4.2231,4.2192,4.2154,4.2116,4.2079,4.2042,4.2005,4.1968,4.1932,4.1897,4.1862,4.1827,4.1792,4.1758,4.1724,4.169,4.1656,4.1623,4.1589,4.1556,4.1523,4.1491,4.1458,4.1425,4.1393,4.136,4.1328,4.1295,4.1263,4.1231,4.1199,4.1167,4.1135,4.1103,4.1071,4.1039,4.1007,4.0975,4.0943,4.0912,4.088,4.0849,4.0817,4.0785,4.0754,4.0723,4.0691,4.066,4.0629,4.0597,4.0566,4.0535,4.0504,4.0473,4.0442,4.0411,4.038,4.0349,4.0318,4.0287,4.0257,4.0226,4.0195,4.0165,4.0134,4.0104,4.0073,4.0043,4.0012,3.9982,3.9952,3.9922,3.9891,3.9861,3.9831,3.9801,3.9771,3.9741,3.9711,3.9681,3.9651,3.9621,3.9592,3.9562,3.9532,3.9503,3.9473,3.9443,3.9414,3.9384,3.9355,3.9326,3.9296,3.9267,3.9238,3.9208,3.9179,3.915,3.9121,3.9092,3.9063,3.9034,3.9005,3.8976,3.8947,3.8918,3.889,3.8861,3.8832,3.8804,3.8775,3.8746,3.8718,3.8689,3.8661,3.8632,3.8604,3.8576,3.8548,3.8519,3.8491,3.8463,3.8435,3.8407,3.8379,3.8351,3.8323,3.8295,3.8267,3.8239,3.8212,3.8184,3.8157,3.8129,3.8102,3.8074,3.8047,3.802,3.7993,3.7966,3.7938,3.7912,3.7885,3.7858,3.7831,3.7804,3.7778,3.7751,3.7724,3.7698,3.7671,3.7645,3.7618,3.7591,3.7565,3.7538,3.7511,3.7485,3.7458,3.7431,3.7404,3.7377,3.7351,3.7324,3.7297,3.727,3.7243,3.7216,3.7189,3.7162,3.7135,3.7108,3.7082,3.7055,3.7028,3.7002,3.6975,3.6949,3.6922,3.6896,3.6869,3.6843,3.6817,3.6791,3.6765,3.6739,3.6713,3.6687,3.6661,3.6636,3.661,3.6584,3.6559,3.6533,3.6507,3.6482,3.6457,3.6431,3.6406,3.638,3.6355,3.633,3.6305,3.6279,3.6254,3.6229,3.6204,3.6179,3.6154,3.6129,3.6104,3.6079,3.6054,3.6029,3.6004,3.5979,3.5955,3.593,3.5905,3.5881,3.5856,3.5831,3.5807,3.5782,3.5758,3.5733,3.5709,3.5684,3.566,3.5636,3.5611,3.5587,3.5563,3.5538,3.5514,3.549,3.5466,3.5442,3.5418,3.5394,3.537,3.5346,3.5322,3.5298,3.5274,3.525,3.5226,3.5203,3.5179,3.5155,3.5131,3.5108,3.5084,3.506,3.5037,3.5013,3.499,3.4966,3.4943,3.4919,3.4896,3.4873,3.4849,3.4826,3.4803,3.4779,3.4756,3.4733,3.471,3.4687,3.4664,3.4641,3.4618,3.4595,3.4572,3.4549,3.4527,3.4504,3.4482,3.446,3.4438,3.4417,3.4397,3.4377,3.4359,3.4342,3.4327,3.4315,3.4306,3.4301,3.4301,3.4307,3.4322,3.4347,3.4384,3.4436,3.4506,3.4599,3.4717,3.4865,3.505,3.5276,3.555,3.5879,3.6269,3.6727,3.7263,3.7881,3.859,3.9396,4.0304,4.132,4.2445,4.3682,4.503,4.6485,4.8043,4.9694,5.1429,5.3233,5.5089,5.6978,5.8878,6.0766,6.2615,6.44,6.6092,6.7665,6.9093,7.0352,7.1419,7.2275,7.2904,7.3294,7.3437,7.3331,7.2976,7.238,7.1553,7.0509,6.9267,6.7848,6.6275,6.4575,6.2775,6.0901,5.898,5.7039,5.5101,5.3189,5.1324,4.9523,4.78,4.6169,4.4638,4.3212,4.1897,4.0694,3.9601,3.8616,3.7735,3.6953,3.6264,3.566,3.5135,3.4681,3.4291,3.3957,3.3674,3.3434,3.3232,3.3062,3.2919,3.2799,3.2699,3.2615,3.2544,3.2483,3.2431,3.2387,3.2347,3.2313,3.2281,3.2253,3.2226,3.2202,3.2178,3.2155,3.2133,3.2112,3.2091,3.207,3.205,3.203,3.201,3.199,3.197,3.195,3.193,3.191,3.189,3.1871,3.1851,3.1831,3.1812,3.1792,3.1773,3.1753,3.1734,3.1714,3.1695,3.1675,3.1656,3.1636,3.1617,3.1597,3.1578,3.1559,3.1539,3.152,3.1501,3.1482,3.1462,3.1443,3.1424,3.1405,3.1386,3.1367,3.1348,3.1329,3.131,3.1291,3.1272,3.1253,3.1234,3.1215,3.1196,3.1177,3.1158,3.1139,3.112,3.1102,3.1083,3.1064,3.1045,3.1027,3.1008,3.099,3.0971,3.0953,3.0934,3.0916,3.0898,3.088,3.0862,3.0844,3.0827,3.081,3.0793,3.0777,3.0762,3.0748,3.0734,3.0722,3.0712,3.0703,3.0697,3.0693,3.0692,3.0695,3.0703,3.0715,3.0732,3.0756,3.0787,3.0826,3.0873,3.093,3.0997,3.1075,3.1165,3.1267,3.1381,3.1508,3.1648,3.18,3.1965,3.2141,3.2327,3.2523,3.2726,3.2934,3.3146,3.3359,3.3571,3.3778,3.3977,3.4167,3.4343,3.4502,3.4643,3.4763,3.4859,3.4929,3.4973,3.4988,3.4976,3.4934,3.4864,3.4767,3.4645,3.4497,3.4328,3.4139,3.3933,3.3713,3.3481,3.3242,3.2996,3.2749,3.2501,3.2256,3.2016,3.1783,3.1559,3.1344,3.1141,3.095,3.0771,3.0605,3.0452,3.0311,3.0182,3.0066,2.996,2.9865,2.978,2.9704,2.9635,2.9574,2.952,2.9471,2.9427,2.9388,2.9353,2.932,2.9291,2.9264,2.9239,2.9216,2.9194,2.9173,2.9153,2.9133,2.9115,2.9097,2.9079,2.9061,2.9044,2.9027,2.901,2.8993,2.8977,2.896,2.8944,2.8927,2.8911,2.8894,2.8878,2.8862,2.8845,2.8829,2.8813,2.8797,2.878,2.8764,2.8748,2.8732,2.8716,2.8699,2.8683,2.8667,2.8651,2.8635,2.8619,2.8603,2.8587,2.8571,2.8555,2.8539,2.8523,2.8507,2.8491,2.8475,2.846,2.8444,2.8428,2.8412,2.8396,2.838,2.8365,2.8349,2.8333,2.8317,2.8302,2.8286,2.827,2.8255,2.8239,2.8223,2.8208,2.8192,2.8177,2.8161,2.8145,2.813,2.8114,2.8099,2.8083,2.8068,2.8052,2.8037,2.8022,2.8006,2.7991,2.7975,2.796,2.7945,2.7929,2.7914,2.7899,2.7884,2.7868,2.7853,2.7838,2.7823,2.7807,2.7792,2.7777,2.7762,2.7747,2.7732,2.7717,2.7701,2.7686,2.7671,2.7656,2.7641,2.7626,2.7611,2.7596,2.7581,2.7566,2.7551,2.7537,2.7522,2.7507,2.7492,2.7477,2.7462,2.7447,2.7433,2.7418,2.7403,2.7388,2.7373,2.7359,2.7344,2.7329,2.7315,2.73,2.7285,2.7271,2.7256,2.7241,2.7227,2.7212,2.7198,2.7183,2.7168,2.7154,2.7139,2.7125,2.711,2.7096,2.7082,2.7067,2.7053,2.7038,2.7024,2.7009,2.6995,2.6981,2.6966,2.6952,2.6938,2.6923,2.6909,2.6895,2.6881,2.6866,2.6852,2.6838,2.6824,2.681,2.6795,2.6781,2.6767,2.6753,2.6739,2.6725,2.6711,2.6697,2.6683,2.6669,2.6655,2.6641,2.6627,2.6613,2.6599,2.6585,2.6571,2.6557,2.6543,2.6529,2.6515,2.6501,2.6487,2.6473,2.646,2.6446,2.6432,2.6418,2.6404,2.6391,2.6377,2.6363,2.6349,2.6336,2.6322,2.6308,2.6295,2.6281,2.6267,2.6254,2.624,2.6227,2.6213,2.6199,2.6186,2.6172,2.6159,2.6145,2.6132,2.6118,2.6105,2.6091,2.6078,2.6064,2.6051,2.6037,2.6024,2.6011,2.5997,2.5984,2.5971,2.5957,2.5944,2.5931,2.5917,2.5904,2.5891,2.5877,2.5864,2.5851,2.5838,2.5824,2.5811,2.5798,2.5785,2.5772,2.5759,2.5745,2.5732,2.5719,2.5706,2.5693,2.568,2.5667,2.5654,2.5641,2.5628,2.5615,2.5602,2.5589,2.5576,2.5563,2.555,2.5537,2.5524,2.5511,2.5498,2.5485,2.5473,2.546,2.5447,2.5434,2.5421,2.5408,2.5396,2.5383,2.537,2.5357,2.5344,2.5332,2.5319,2.5306,2.5294,2.5281,2.5268,2.5256,2.5243,2.523,2.5218,2.5205,2.5192,2.518,2.5167,2.5155,2.5142,2.5129,2.5117,2.5104,2.5092,2.5079,2.5067,2.5054,2.5042,2.503,2.5017,2.5005,2.4992,2.498,2.4967,2.4955,2.4943,2.493,2.4918,2.4906,2.4893,2.4881,2.4869,2.4856,2.4844,2.4832,2.482,2.4807,2.4795,2.4783,2.4771,2.4758,2.4746,2.4734,2.4722,2.471,2.4698,2.4685,2.4673,2.4661,2.4649,2.4637,2.4625,2.4613,2.4601,2.4589,2.4577,2.4565,2.4553,2.4541,2.4529,2.4517,2.4505,2.4493,2.4481,2.4469,2.4457,2.4445,2.4433,2.4421,2.4409,2.4398,2.4386,2.4374,2.4362,2.435,2.4338,2.4327,2.4315,2.4303,2.4291,2.4279,2.4268,2.4256,2.4244,2.4233,2.4221,2.4209,2.4197,2.4186,2.4174,2.4162,2.4151,2.4139,2.4128,2.4116,2.4104,2.4093,2.4081,2.407,2.4058,2.4046,2.4035,2.4023,2.4012,2.4,2.3989,2.3977,2.3966,2.3954,2.3943,2.3932,2.392,2.3909,2.3897,2.3886,2.3874,2.3863,2.3852,2.384,2.3829,2.3818,2.3806,2.3795,2.3784,2.3772,2.3761,2.375,2.3739,2.3727,2.3716,2.3705,2.3694,2.3682,2.3671,2.366,2.3649,2.3638,2.3626,2.3615,2.3604,2.3593,2.3582,2.3571,2.356,2.3548,2.3537,2.3526,2.3515,2.3504,2.3493,2.3482,2.3471,2.346,2.3449,2.3438,2.3427,2.3416,2.3405,2.3394,2.3383,2.3372,2.3361,2.335,2.3339,2.3328,2.3317,2.3307,2.3296,2.3285,2.3274,2.3263,2.3252,2.3241,2.3231,2.322,2.3209,2.3198,2.3187,2.3177,2.3166,2.3155,2.3144,2.3134,2.3123,2.3112,2.3101,2.3091,2.308,2.3069,2.3059,2.3048,2.3037,2.3027,2.3016,2.3006,2.2995,2.2984,2.2974,2.2963,2.2953,2.2942,2.2931,2.2921,2.291,2.29,2.2889,2.2879,2.2868,2.2858,2.2847,2.2837,2.2826,2.2816,2.2805,2.2795,2.2784,2.2774,2.2764,2.2753,2.2743,2.2732,2.2722,2.2712,2.2701,2.2691,2.2681,2.267,2.266,2.265,2.2639,2.2629,2.2619,2.2608,2.2598,2.2588,2.2578,2.2567,2.2557,2.2547,2.2537,2.2526,2.2516,2.2506,2.2496,2.2486,2.2475,2.2465,2.2455,2.2445,2.2435,2.2425,2.2415,2.2404,2.2394,2.2384,2.2374,2.2364,2.2354,2.2344,2.2334,2.2324,2.2314,2.2304,2.2294,2.2284,2.2274,2.2264,2.2254,2.2244,2.2234,2.2224,2.2214,2.2204,2.2194,2.2184,2.2174,2.2164,2.2154,2.2145,2.2135,2.2125,2.2115,2.2105,2.2095,2.2085,2.2075,2.2066,2.2056,2.2046,2.2036,2.2026,2.2017,2.2007,2.1997,2.1987,2.1978,2.1968,2.1958,2.1948,2.1939,2.1929,2.1919,2.1909,2.19,2.189,2.188,2.1871,2.1861,2.1851,2.1842,2.1832,2.1823,2.1813,2.1803,2.1794,2.1784,2.1775,2.1765,2.1755,2.1746,2.1736,2.1727,2.1717,2.1708,2.1698,2.1689,2.1679,2.167,2.166,2.1651,2.1641,2.1632,2.1622,2.1613,2.1603,2.1594,2.1584,2.1575,2.1566,2.1556,2.1547,2.1537,2.1528,2.1519,2.1509,2.15,2.149,2.1481,2.1472,2.1462,2.1453,2.1444,2.1435,2.1425,2.1416,2.1407,2.1397,2.1388,2.1379,2.137,2.136,2.1351,2.1342,2.1333,2.1323,2.1314,2.1305,2.1296,2.1287,2.1277,2.1268,2.1259,2.125,2.1241,2.1232,2.1222,2.1213,2.1204,2.1195,2.1186,2.1177,2.1168,2.1159,2.1149,2.114,2.1131,2.1122,2.1113,2.1104,2.1095,2.1086,2.1077,2.1068,2.1059,2.105,2.1041,2.1032,2.1023,2.1014,2.1005,2.0996,2.0987,2.0978,2.0969,2.096,2.0951,2.0943,2.0934,2.0925,2.0916,2.0907,2.0898,2.0889,2.088,2.0871,2.0863,2.0854,2.0845,2.0836,2.0827,2.0818,2.081,2.0801,2.0792,2.0783,2.0774,2.0766,2.0757,2.0748,2.0739,2.073,2.0722,2.0713,2.0704,2.0696,2.0687,2.0678,2.0669,2.0661,2.0652,2.0643,2.0635,2.0626,2.0617,2.0609,2.06,2.0591,2.0583,2.0574,2.0565,2.0557,2.0548,2.054,2.0531,2.0522,2.0514,2.0505,2.0497,2.0488,2.0479,2.0471,2.0462,2.0454,2.0445,2.0437,2.0428,2.042,2.0411,2.0403,2.0394,2.0386,2.0377,2.0369,2.036,2.0352,2.0343,2.0335,2.0326,2.0318,2.031,2.0301,2.0293,2.0284,2.0276,2.0267,2.0259,2.0251,2.0242,2.0234,2.0226,2.0217,2.0209,2.02,2.0192,2.0184,2.0175,2.0167,2.0159,2.015,2.0142,2.0134,2.0126,2.0117,2.0109,2.0101,2.0092,2.0084,2.0076,2.0068,2.0059,2.0051,2.0043,2.0035,2.0026,2.0018,2.001,2.0002,1.9994,1.9985,1.9977,1.9969,1.9961,1.9953,1.9945,1.9936,1.9928,1.992,1.9912,1.9904,1.9896,1.9888,1.9879,1.9871,1.9863,1.9855,1.9847,1.9839,1.9831,1.9823,1.9815,1.9807,1.9799,1.979,1.9782,1.9774,1.9766,1.9758,1.975,1.9742,1.9734,1.9726,1.9718,1.971,1.9702,1.9694,1.9686,1.9678,1.967,1.9662,1.9654,1.9646,1.9639,1.9631,1.9623,1.9615,1.9607,1.9599,1.9591,1.9583,1.9575,1.9567,1.9559,1.9552,1.9544,1.9536,1.9528,1.952,1.9512,1.9504,1.9496,1.9489,1.9481,1.9473,1.9465,1.9457,1.945,1.9442,1.9434,1.9426,1.9418,1.9411,1.9403,1.9395,1.9387,1.9379,1.9372,1.9364,1.9356,1.9348,1.9341,1.9333,1.9325,1.9318,1.931,1.9302,1.9294,1.9287,1.9279,1.9271,1.9264,1.9256,1.9248,1.9241,1.9233,1.9225,1.9218,1.921,1.9202,1.9195,1.9187,1.9179,1.9172,1.9164,1.9157,1.9149,1.9141,1.9134,1.9126,1.9119,1.9111,1.9103,1.9096,1.9088,1.9081,1.9073,1.9066,1.9058,1.9051,1.9043,1.9035,1.9028,1.902,1.9013,1.9005,1.8998,1.899,1.8983,1.8975,1.8968,1.896,1.8953,1.8945,1.8938,1.8931,1.8923,1.8916,1.8908,1.8901,1.8893,1.8886,1.8878,1.8871,1.8864,1.8856,1.8849,1.8841,1.8834,1.8827,1.8819,1.8812,1.8804,1.8797,1.879,1.8782,1.8775,1.8768,1.876,1.8753,1.8746,1.8738,1.8731,1.8723,1.8716,1.8709,1.8702,1.8694,1.8687,1.868,1.8672,1.8665,1.8658,1.865,1.8643,1.8636,1.8629,1.8621,1.8614,1.8607,1.86,1.8592,1.8585,1.8578,1.8571,1.8563,1.8556,1.8549,1.8542,1.8535,1.8527,1.852,1.8513,1.8506,1.8499,1.8491,1.8484,1.8477,1.847,1.8463,1.8455,1.8448,1.8441,1.8434,1.8427,1.842,1.8413,1.8405,1.8398,1.8391,1.8384,1.8377,1.837,1.8363,1.8356,1.8349,1.8341,1.8334,1.8327,1.832,1.8313,1.8306,1.8299,1.8292,1.8285,1.8278,1.8271,1.8264,1.8257,1.825,1.8243,1.8236,1.8229,1.8222,1.8214,1.8207,1.82,1.8193,1.8186,1.8179,1.8172,1.8165,1.8158,1.8151,1.8145,1.8138,1.8131,1.8124,1.8117,1.811,1.8103,1.8096,1.8089,1.8082,1.8075,1.8068,1.8061,1.8054,1.8047,1.804,1.8033,1.8026,1.802,1.8013,1.8006,1.7999,1.7992,1.7985,1.7978,1.7971,1.7964,1.7958,1.7951,1.7944,1.7937,1.793,1.7923,1.7916,1.791,1.7903,1.7896,1.7889,1.7882,1.7875,1.7869,1.7862,1.7855,1.7848,1.7841,1.7835,1.7828,1.7821,1.7814,1.7807,1.7801,1.7794,1.7787,1.778,1.7773,1.7767,1.776,1.7753,1.7746,1.774,1.7733,1.7726,1.7719,1.7713,1.7706,1.7699,1.7692,1.7686,1.7679,1.7672,1.7666,1.7659,1.7652,1.7645,1.7639,1.7632,1.7625,1.7619,1.7612,1.7605,1.7599,1.7592,1.7585,1.7579,1.7572,1.7565,1.7559,1.7552,1.7545,1.7539,1.7532,1.7525,1.7519,1.7512,1.7505,1.7499,1.7492,1.7486,1.7479,1.7472,1.7466,1.7459,1.7452,1.7446,1.7439,1.7433,1.7426,1.7419,1.7413,1.7406,1.74,1.7393,1.7387,1.738,1.7373,1.7367,1.736,1.7354,1.7347,1.7341,1.7334,1.7328,1.7321,1.7314,1.7308,1.7301,1.7295,1.7288,1.7282,1.7275,1.7269,1.7262,1.7256,1.7249,1.7243,1.7236,1.723,1.7223,1.7217,1.721,1.7204,1.7197,1.7191,1.7184,1.7178,1.7171,1.7165,1.7158,1.7152,1.7145,1.7139,1.7133,1.7126,1.712,1.7113,1.7107,1.71,1.7094,1.7087,1.7081,1.7075,1.7068,1.7062,1.7055,1.7049,1.7043,1.7036,1.703,1.7023,1.7017,1.701,1.7004,1.6998,1.6991,1.6985,1.6979,1.6972,1.6966,1.6959,1.6953,1.6947,1.694,1.6934,1.6928,1.6921,1.6915,1.6908,1.6902,1.6896,1.6889,1.6883,1.6877,1.687,1.6864,1.6858,1.6851,1.6845,1.6839,1.6832,1.6826,1.682,1.6813,1.6807,1.6801,1.6795,1.6788,1.6782,1.6776,1.6769,1.6763,1.6757,1.675,1.6744,1.6738,1.6732,1.6725,1.6719,1.6713,1.6706,1.67,1.6694,1.6688,1.6681,1.6675,1.6669,1.6663,1.6656,1.665,1.6644,1.6638,1.6631,1.6625,1.6619,1.6613,1.6606,1.66,1.6594,1.6588,1.6582,1.6575,1.6569,1.6563,1.6557,1.655,1.6544,1.6538,1.6532,1.6526,1.6519,1.6513,1.6507,1.6501,1.6495,1.6488,1.6482,1.6476,1.647,1.6464,1.6458,1.6451,1.6445,1.6439,1.6433,1.6427,1.6421,1.6414,1.6408,1.6402,1.6396,1.639,1.6384,1.6378,1.6371,1.6365,1.6359,1.6353,1.6347,1.6341,1.6335,1.6328,1.6322,1.6316,1.631,1.6304,1.6298,1.6292,1.6286,1.6279,1.6273,1.6267,1.6261,1.6255,1.6249,1.6243,1.6237,1.6231,1.6225,1.6218,1.6212,1.6206,1.62,1.6194,1.6188,1.6182,1.6176,1.617,1.6164,1.6158,1.6152,1.6146,1.6139,1.6133,1.6127,1.6121,1.6115,1.6109,1.6103,1.6097,1.6091,1.6085,1.6079,1.6073,1.6067,1.6061,1.6055,1.6049,1.6043,1.6037,1.6031,1.6025,1.6019,1.6013,1.6007,1.6001,1.5994,1.5988,1.5982,1.5976,1.597,1.5964,1.5958,1.5952,1.5946,1.594,1.5934,1.5928,1.5922,1.5916,1.591,1.5904,1.5898,1.5892,1.5886,1.588,1.5875,1.5869,1.5863,1.5857,1.5851,1.5845,1.5839,1.5833,1.5827,1.5821,1.5815,1.5809,1.5803,1.5797,1.5791,1.5785,1.5779,1.5773,1.5767,1.5761,1.5755,1.5749,1.5743,1.5737,1.5731,1.5726,1.572,1.5714,1.5708,1.5702,1.5696,1.569,1.5684,1.5678,1.5672,1.5666,1.566,1.5654,1.5649,1.5643,1.5637,1.5631,1.5625,1.5619,1.5613,1.5607,1.5601,1.5595,1.5589,1.5584,1.5578,1.5572,1.5566,1.556,1.5554,1.5548,1.5542,1.5536,1.5531,1.5525,1.5519,1.5513,1.5507,1.5501,1.5495,1.5489,1.5484,1.5478,1.5472,1.5466,1.546,1.5454,1.5448,1.5442,1.5437,1.5431,1.5425,1.5419,1.5413,1.5407,1.5401,1.5396,1.539,1.5384,1.5378,1.5372,1.5366,1.5361,1.5355,1.5349,1.5343,1.5337,1.5331,1.5326,1.532,1.5314,1.5308,1.5302,1.5296,1.5291,1.5285,1.5279,1.5273,1.5267,1.5261,1.5256,1.525,1.5244,1.5238,1.5232,1.5227,1.5221,1.5215,1.5209,1.5203,1.5198,1.5192,1.5186,1.518,1.5174,1.5169,1.5163,1.5157,1.5151,1.5145,1.514,1.5134,1.5128,1.5122,1.5116,1.5111,1.5105,1.5099,1.5093,1.5088,1.5082,1.5076,1.507,1.5064,1.5059,1.5053,1.5047,1.5041,1.5036,1.503,1.5024,1.5018,1.5013,1.5007,1.5001,1.4995,1.499,1.4984,1.4978,1.4972,1.4967,1.4961,1.4955,1.4949,1.4944,1.4938,1.4932,1.4926,1.4921,1.4915,1.4909,1.4903,1.4898,1.4892,1.4886,1.488,1.4875,1.4869,1.4863,1.4857,1.4852,1.4846,1.484,1.4835,1.4829,1.4823,1.4817,1.4812,1.4806,1.48,1.4795,1.4789,1.4783,1.4777,1.4772,1.4766,1.476,1.4755,1.4749,1.4743,1.4737,1.4732,1.4726,1.472,1.4715,1.4709,1.4703,1.4697,1.4692,1.4686,1.468,1.4675,1.4669,1.4663,1.4658,1.4652,1.4646,1.4641,1.4635,1.4629,1.4624,1.4618,1.4612,1.4606,1.4601,1.4595,1.4589,1.4584,1.4578,1.4572,1.4567,1.4561,1.4555,1.455,1.4544,1.4538,1.4533,1.4527,1.4521,1.4516,1.451,1.4504,1.4499,1.4493,1.4487,1.4482,1.4476,1.447,1.4465,1.4459,1.4454,1.4448,1.4442,1.4437,1.4431,1.4425,1.442,1.4414,1.4408,1.4403,1.4397,1.4391,1.4386,1.438,1.4374,1.4369,1.4363,1.4358,1.4352,1.4346,1.4341,1.4335,1.4329,1.4324,1.4318,1.4313,1.4307,1.4301,1.4296,1.429,1.4284,1.4279,1.4273,1.4268,1.4262,1.4256,1.4251,1.4245,1.4239,1.4234,1.4228,1.4223,1.4217,1.4211,1.4206,1.42,1.4195,1.4189,1.4183,1.4178,1.4172,1.4167,1.4161,1.4155,1.415,1.4144,1.4139,1.4133,1.4127,1.4122,1.4116,1.4111,1.4105,1.4099,1.4094,1.4088,1.4083,1.4077,1.4071,1.4066,1.406,1.4055,1.4049,1.4043,1.4038,1.4032,1.4027,1.4021,1.4016,1.401,1.4004,1.3999,1.3993,1.3988,1.3982,1.3977,1.3971,1.3965,1.396,1.3954,1.3949,1.3943,1.3938,1.3932,1.3926,1.3921,1.3915,1.391,1.3904,1.3899,1.3893,1.3887,1.3882,1.3876,1.3871,1.3865,1.386,1.3854,1.3849,1.3843,1.3837,1.3832,1.3826,1.3821,1.3815,1.381,1.3804,1.3799,1.3793,1.3788,1.3782,1.3776,1.3771,1.3765,1.376,1.3754,1.3749,1.3743,1.3738,1.3732,1.3727,1.3721,1.3716,1.371,1.3704,1.3699,1.3693,1.3688,1.3682,1.3677,1.3671,1.3666,1.366,1.3655,1.3649,1.3644,1.3638,1.3633,1.3627,1.3622,1.3616,1.3611,1.3605,1.36,1.3594,1.3588,1.3583,1.3577,1.3572,1.3566,1.3561,1.3555,1.355,1.3544,1.3539,1.3533,1.3528,1.3522,1.3517,1.3511,1.3506,1.35,1.3495,1.3489,1.3484,1.3478,1.3473,1.3467,1.3462,1.3456,1.3451,1.3445,1.344,1.3434,1.3429,1.3423,1.3418,1.3412,1.3407,1.3401,1.3396,1.3391,1.3385,1.338,1.3374,1.3369,1.3363,1.3358,1.3352,1.3347,1.3341,1.3336,1.333,1.3325,1.3319,1.3314,1.3308,1.3303,1.3297,1.3292,1.3286,1.3281,1.3275,1.327,1.3265,1.3259,1.3254,1.3248,1.3243,1.3237,1.3232,1.3226,1.3221,1.3215,1.321,1.3204,1.3199,1.3194,1.3188,1.3183,1.3177,1.3172,1.3166,1.3161,1.3155,1.315,1.3144,1.3139,1.3134,1.3128,1.3123,1.3117,1.3112,1.3106,1.3101,1.3095,1.309,1.3085,1.3079,1.3074,1.3068,1.3063,1.3057,1.3052,1.3047,1.3041,1.3036,1.303,1.3025,1.3019,1.3014,1.3009,1.3003,1.2998,1.2992,1.2987,1.2981,1.2976,1.2971,1.2965,1.296,1.2954,1.2949,1.2943,1.2938,1.2933,1.2927,1.2922,1.2916,1.2911,1.2906,1.29,1.2895,1.2889,1.2884,1.2878,1.2873,1.2868,1.2862,1.2857,1.2851,1.2846,1.2841,1.2835,1.283,1.2824,1.2819,1.2814,1.2808,1.2803,1.2797,1.2792,1.2787,1.2781,1.2776,1.277,1.2765,1.276,1.2754,1.2749,1.2743,1.2738,1.2733,1.2727,1.2722,1.2717,1.2711,1.2706,1.27,1.2695,1.269,1.2684,1.2679,1.2673,1.2668,1.2663,1.2657,1.2652,1.2647,1.2641,1.2636,1.263,1.2625,1.262,1.2614,1.2609,1.2604,1.2598,1.2593,1.2588,1.2582,1.2577,1.2571,1.2566,1.2561,1.2555,1.255,1.2545,1.2539,1.2534,1.2529,1.2523,1.2518,1.2512,1.2507,1.2502,1.2496,1.2491,1.2486,1.248,1.2475,1.247,1.2464,1.2459,1.2454,1.2448,1.2443,1.2438,1.2432,1.2427,1.2422,1.2416,1.2411,1.2406,1.24,1.2395,1.239,1.2384,1.2379,1.2374,1.2368,1.2363,1.2358,1.2352,1.2347,1.2342,1.2336,1.2331,1.2326,1.232,1.2315,1.231,1.2304,1.2299,1.2294,1.2288,1.2283,1.2278,1.2272,1.2267,1.2262,1.2257,1.2251,1.2246,1.2241,1.2235,1.223,1.2225,1.2219,1.2214,1.2209,1.2203,1.2198,1.2193,1.2188,1.2182,1.2177,1.2172,1.2166,1.2161,1.2156,1.215,1.2145,1.214,1.2135,1.2129,1.2124,1.2119,1.2113,1.2108,1.2103,1.2098,1.2092,1.2087,1.2082,1.2076,1.2071,1.2066,1.2061,1.2055,1.205,1.2045,1.2039,1.2034,1.2029,1.2024,1.2018,1.2013,1.2008,1.2003,1.1997,1.1992,1.1987,1.1981,1.1976,1.1971,1.1966,1.196,1.1955,1.195,1.1945,1.1939,1.1934,1.1929,1.1924,1.1918,1.1913,1.1908,1.1903,1.1897,1.1892,1.1887,1.1882,1.1876,1.1871,1.1866,1.1861,1.1855,1.185,1.1845,1.184,1.1834,1.1829,1.1824,1.1819,1.1813,1.1808,1.1803,1.1798,1.1793,1.1787,1.1782,1.1777,1.1772,1.1766,1.1761,1.1756,1.1751,1.1745,1.174,1.1735,1.173,1.1725,1.1719,1.1714,1.1709,1.1704,1.1699,1.1693,1.1688,1.1683,1.1678,1.1672,1.1667,1.1662,1.1657,1.1652,1.1646,1.1641,1.1636,1.1631,1.1626,1.162,1.1615,1.161,1.1605,1.16,1.1594,1.1589,1.1584,1.1579,1.1574,1.1568,1.1563,1.1558,1.1553,1.1548,1.1543,1.1537,1.1532,1.1527,1.1522,1.1517,1.1511],"name":"M_matrix","npix":2897,"planted":{"Al_Ka":74726.2304,"Al_Ka_tail":1137.9629,"Cu_Ka":0.0,"Cu_Ka_stray":127.7478,"Mg_Ka":245.9678,"O_Ka":262.3691,"Si_Ka":484.8118,"Si_Ka_internal":59.8995},"source":"map","thickness_nm":80.878071,"truth_at":{"Al":98.8,"Mg":0.6,"Si":0.6}}],"true_k_counts_per_atom_nm2":{"Al":0.006802201645893394,"Mg":0.0036712336182256246,"Si":0.008262366164884884}} diff --git a/Tests/SpectroEDXTests/SpectroscopyAbsorptionTruthTests.swift b/Tests/SpectroEDXTests/SpectroscopyAbsorptionTruthTests.swift index 61d751b..1b5c6a1 100644 --- a/Tests/SpectroEDXTests/SpectroscopyAbsorptionTruthTests.swift +++ b/Tests/SpectroEDXTests/SpectroscopyAbsorptionTruthTests.swift @@ -160,7 +160,7 @@ final class SpectroscopyAbsorptionTruthTests { } } - private static func input(seed: UInt64, absorption: Bool) -> PooledQuantificationInput { + private static func input(seed: UInt64, absorption: Bool, policy: QuantificationPolicy = .default) -> PooledQuantificationInput { let p = pool var rng = SplitMix64(state: seed) let counts = p.expected.map { poisson($0, &rng) } @@ -183,7 +183,7 @@ final class SpectroscopyAbsorptionTruthTests { SpectrumDetectorSegment(name: "SuperXG1\(i + 1)", azimuthDegrees: a.0, elevationDegrees: 22, solidAngle: a.1) } return PooledQuantificationInput(counts: counts, axis: p.axis, method: m, metadata: meta, regionName: "recipe A pool", - pixelCount: p.npix, resolutionMnKaEV: 130) + pixelCount: p.npix, resolutionMnKaEV: 130, policy: policy) } private static let seeds: [UInt64] = [11, 12, 13, 14] @@ -223,7 +223,13 @@ final class SpectroscopyAbsorptionTruthTests { /// sqrt(4) (3 x 56 / 2 / 2116 = 0.040, about 85 counts). The seeds are fixed, so this is a regression pin, not a confidence /// interval and not validation. A known deviation: pinned so that a change either way fails and is looked at. It is the real /// Si gate; the per-seed tolerance above only bounds each draw. - private static let siBiasFraction = -0.203, siBiasBand = 0.040 + /// Those numbers are the fit WITHOUT sum peaks (`SumPeakRule.off`, the default before sum peaks were; the envelope above is + /// kept, it bounds both fits). With the default sum peaks (`SumPeakRule.whenSignificant`, the pile-up coefficient kept on every + /// seed) the nets are 2061 / 1912 / 1917 / 2006, mean 1974, -6.7 %, sd 72 counts, band 3 x 72 / 2 / 2116 = 0.051 (noise-free the + /// same fit reads -4.0 %). The Al+Al sum peak at 2.97 keV had pulled the continuum segment above the Al K edge, and Si K-alpha + /// with it (`DemoEDXPoolTests`). `siBiasFractionWithoutSumPeaks` keeps the old pin on the `.off` fit. + private static let siBiasFraction = -0.067, siBiasBand = 0.051 + private static let siBiasFractionWithoutSumPeaks = -0.203, siBiasBandWithoutSumPeaks = 0.040 /// Per-seed numbers go to stderr: `print` stays in the hosted app's stdout and never reaches the xcodebuild log. /// Also kept as an attachment (read it from the xcresult: `xcresulttool export attachments`, or the test run's attachments folder). @@ -285,6 +291,17 @@ final class SpectroscopyAbsorptionTruthTests { note(String(format: "L2 Si bias against the planted K-alpha peak %.4f (pinned %.3f +- %.3f); against the sample line alone %.4f", siBias, Self.siBiasFraction, Self.siBiasBand, siNet.reduce(0, +) / Double(siNet.count) / p.areasWithAbsorption["Si_Ka"]! - 1)) #expect(abs(siBias - Self.siBiasFraction) <= Self.siBiasBand, "Si bias against the planted K-alpha peak: \(siBias), nets \(siNet)") + // The fit without sum peaks (the exSpy-equivalent line model) keeps its own pin. + var off = QuantificationPolicy.default + off.fit.sumPeaks = .off + var offNet: [Double] = [] + for seed in Self.seeds { + let r = try PooledQuantifier.run(Self.input(seed: seed, absorption: true, policy: off), tables: Self.tables) + offNet.append(try #require(r.rows.first { $0.element == "Si" }).net) + } + let offBias = offNet.reduce(0, +) / Double(offNet.count) / Self.plantedSiKa - 1 + note(String(format: "L2 Si bias without sum peaks %.4f (pinned %.3f +- %.3f)", offBias, Self.siBiasFractionWithoutSumPeaks, Self.siBiasBandWithoutSumPeaks)) + #expect(abs(offBias - Self.siBiasFractionWithoutSumPeaks) <= Self.siBiasBandWithoutSumPeaks, "without sum peaks: \(offBias), nets \(offNet)") // The Si correction is a property of the geometry, not of the draw: the same on every seed (predicted +0.078 at%). let spread = (siGain.max() ?? 0) - (siGain.min() ?? 0) #expect(spread < 0.01, "Si correction by seed: \(siGain)") diff --git a/Tests/SpectroEDXTests/SumEscapeExplainedTests.swift b/Tests/SpectroEDXTests/SumEscapeExplainedTests.swift new file mode 100644 index 0000000..f3737b4 --- /dev/null +++ b/Tests/SpectroEDXTests/SumEscapeExplainedTests.swift @@ -0,0 +1,149 @@ +// +// SumEscapeExplainedTests.swift +// Role: the sum/escape model's peaks are explained counts for the element proposer and the unlisted-line check. Before, a Quantify fit +// with `SumEscapeModel` on modelled the pile-up and escape peaks, but the check proposed on the bare spectrum and named +// them as elements (measured on the tools/edx-sim pool below: Ar, Ag, Pd at 100 counts/px; Rh, Ar, In, Sn, Pd, Ag, Cd, Ru, +// Bi, K at 300 counts/px; La, Ce, Cr, Cs at the planted Fe escape with the free escape columns off). Planted truth only; the +// model is `validation: "none"` and eXSpy has no sum or escape model to compare with. +// + +import Foundation +import Testing +import SpectroTestSupport +import SpectroCore +import SpectroEDX + +struct SumEscapeExplainedTests { + + private struct SimPools: Decodable { + struct Region: Decodable { let label: String; let expected: [Double]; let components: [String: Double] } + let offset: Double, scale: Double, size: Int + let regions: [Region] + var axis: EnergyAxis { EnergyAxis(offset: offset, scale: scale, size: size) } + } + + /// tools/edx-sim/proposer_sim.py: region 1 is the Al matrix at 100 counts/px (Al+Al sum 1845 counts), region 2 the beta'' + /// pixel at 300 counts/px (six sum peaks, 454 to 8553 counts). + private static let sim: SimPools = { + let url = EDXFixtures.dir.appendingPathComponent("eds-proposer-sim.json") + return try! JSONDecoder().decode(SimPools.self, from: Data(contentsOf: url)) + }() + + private static func input(counts: [Double], axis: EnergyAxis, elements: [String], sumEscape: SumEscapeModel?, + policy: QuantificationPolicy = .default) -> PooledQuantificationInput { + var m = QuantificationMethod() + m.elements = elements.map { .init(symbol: $0, role: .quantify, isManual: false) } + m.beamEnergyKeV = 200 + m.absorptionCorrection = false + m.lockEnergyAxis = true + let meta = SpectrumImageMetadata(fileName: "planted", filePath: "", scanWidth: 1, scanHeight: 1, channelCount: axis.size, + energyOffsetEV: axis.offset * 1000, energyDispersionEV: axis.scale * 1000) + return PooledQuantificationInput(counts: counts.map { UInt64(max($0, 0).rounded()) }, axis: axis, method: m, metadata: meta, + regionName: "planted", pixelCount: 1, policy: policy, sumEscape: sumEscape) + } + + private static func check(_ input: PooledQuantificationInput) throws -> (UnlistedLineCheck, PooledQuantification) { + let q = try PooledQuantifier.run(input, tables: QuantificationTables.bundled()) + let proposal = try UnlistedLineChecker.propose(counts: input.counts.map { Double($0) }, quantification: q) + return (UnlistedLineChecker.check(proposal: proposal, input: input, quantification: q), q) + } + + private static func simCounts(_ region: Int, plant: [String: Double] = [:]) -> [Double] { + var expected = sim.regions[region].expected + if !plant.isEmpty { + let axis = sim.axis + let symbols = Array(Set(plant.keys.map { String($0.split(separator: "_")[0]) })) + let model = EDSLineModel.build(elements: symbols, axis: axis, beamEnergy: 200, resolutionMnKaEV: 130, escapePeaks: false) + let energies = (0.. 0.5 * Self.sim.regions[region].components.filter { $0.key.hasPrefix("sum_") }.values.reduce(0, +)) + #expect(on.candidates.isEmpty, "the modelled sum peaks are explained: \(on.summary)") + } + + /// A real line between two sum peaks is still found with the model on: K K-alpha (3.314 keV, between Al+Si 3.226 and Si+Si 3.479), + /// the strongest candidate. (The elements its peak was tested against, In and Cd among them, are named beside it as the check + /// always names every tested candidate at or above L_D; that is the check's rule, not pile-up.) + @Test func aRealLineBesideTheSumPeaksIsStillNamed() throws { + let counts = Self.simCounts(2, plant: ["K_Ka": 3000]) + let (on, _) = try Self.check(Self.input(counts: counts, axis: Self.sim.axis, elements: Self.listed, sumEscape: .both)) + #expect(on.elementNames.first == "K", "\(on.summary)") + } + + /// Red before: a common escape fraction with the free escape columns off left the Fe K-alpha escape (4.66 keV) to the proposer, + /// which named it La (L-alpha 4.651 keV), with Ce, Cr and Cs beside it. + @Test func theCommonEscapeIsExplained() throws { + let axis = EnergyAxis(offset: 0, scale: 0.01, size: 2000) + let energies = (0.. Double in + let x = max(e, 0.05) + return e >= 0.2 ? 2.0 * max(200 - e, 0) / x * exp(-pow(0.3 / x, 3)) / 40 : 0 + } + let model = EDSLineModel.build(elements: ["Al", "Fe"], axis: axis, beamEnergy: 200, resolutionMnKaEV: 130, escapePeaks: true) + for g in model.groups where g.id == "Al_Ka" || g.id == "Fe_Ka" { + let col = EDSLineModel.column(of: g.lines, energies: energies, scale: axis.scale) + for i in mu.indices { mu[i] += 300_000 * col[i] } + if !g.escapes.isEmpty { + let ec = EDSLineModel.column(of: g.escapes, energies: energies, scale: axis.scale) + for i in mu.indices { mu[i] += 0.01 * 300_000 * ec[i] } + } + } + var rng = Xoshiro256StarStar(seed: 3) + let counts = mu.map { rng.poisson($0) } + var policy = QuantificationPolicy.default + policy.fit.escapePeaks = false + let (on, q) = try Self.check(Self.input(counts: counts, axis: axis, elements: ["Al", "Fe"], + sumEscape: SumEscapeModel(commonEscapeFraction: true), policy: policy)) + #expect(q.sumEscapeCounts != nil) + #expect(on.candidates.isEmpty, "the modelled Fe escape is explained: \(on.summary)") + } + + /// The proposer itself: the sum/escape fit's components as `explained` remove the sum peaks from what it can propose; nil runs it + /// as before (the same result as no argument). + @Test func theProposerTakesTheComponentsAsExplained() throws { + let axis = Self.sim.axis + let counts = Self.simCounts(2) + let st = FitSettings.standard(elements: Self.listed, axis: axis, resolutionMnKaEV: 130, beamEnergy: 200) + let r = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: st, model: .both) + #expect(r.componentCounts.count == r.fit.channels.count) + var explained = [Double](repeating: 0, count: axis.size) + for (k, ch) in r.fit.channels.enumerated() { explained[ch] = r.componentCounts[k] } + let bare = try ElementProposer().propose(counts: counts, axis: axis, settings: st) + let none = try ElementProposer().propose(counts: counts, axis: axis, settings: st, explained: nil) + #expect(bare.candidates == none.candidates) + #expect(bare.candidates.contains { $0.aboveDetectionLimit }) + let shared = try ElementProposer().propose(counts: counts, axis: axis, settings: st, explained: explained) + #expect(!shared.candidates.contains { $0.aboveDetectionLimit }, "\(shared.candidates.map(\.group))") + #expect(throws: ProposerError.lengthMismatch) { + _ = try ElementProposer().propose(counts: counts, axis: axis, settings: st, explained: [1, 2]) + } + let off = try EDSSumEscapeFit.run(counts: counts, axis: axis, settings: st, model: SumEscapeModel()) + #expect(off.componentCounts.allSatisfy { $0 == 0 } && off.componentCounts.count == off.fit.channels.count) + } +} diff --git a/Tests/SpectroEDXTests/SumEscapeFitTests.swift b/Tests/SpectroEDXTests/SumEscapeFitTests.swift index 3b116b2..e4081b9 100644 --- a/Tests/SpectroEDXTests/SumEscapeFitTests.swift +++ b/Tests/SpectroEDXTests/SumEscapeFitTests.swift @@ -148,11 +148,14 @@ struct SumEscapeFitTests { energyOffsetEV: 0, energyDispersionEV: 10) let tables = QuantificationTables.bundled() var input = PooledQuantificationInput(counts: y, axis: Self.axis, method: m, metadata: meta, regionName: "planted", pixelCount: 1) + input.sumEscape = SumEscapeModel() // both off: the fit without sum peaks, whatever the policy says let plain = try PooledQuantifier.run(input, tables: tables) #expect(!plain.footerLines.contains { $0.hasPrefix("sum peaks") }) + #expect(plain.appliedSumEscape == nil) input.sumEscape = .both let on = try PooledQuantifier.run(input, tables: tables) #expect(on.footerLines.contains { $0.hasPrefix("sum peaks") }) + #expect(on.appliedSumEscape == .both) let truth = Self.areas["Ag_La"]! let ag = try #require(on.rows.first { $0.element == "Ag" }), agPlain = try #require(plain.rows.first { $0.element == "Ag" }) #expect(abs(ag.net - truth) < 0.1 * abs(agPlain.net - truth)) diff --git a/Tests/SpectroKitParityTests/SpectroGoldenTests.swift b/Tests/SpectroKitParityTests/SpectroGoldenTests.swift index 3f0115c..b7cef4e 100644 --- a/Tests/SpectroKitParityTests/SpectroGoldenTests.swift +++ b/Tests/SpectroKitParityTests/SpectroGoldenTests.swift @@ -164,8 +164,9 @@ enum GoldenQ { } static func input(_ method: QuantificationMethod, image: LoadedSpectrumImage) -> PooledQuantificationInput { + // The fit without sum peaks (an explicit off model): the baseline records the exSpy-equivalent line model. PooledQuantificationInput(counts: image.sum(mask: nil), axis: image.energyAxis, method: method, metadata: image.metadata, - regionName: "Whole map", pixelCount: image.metadata.pixelCount) + regionName: "Whole map", pixelCount: image.metadata.pixelCount, sumEscape: SumEscapeModel()) } } @@ -224,7 +225,9 @@ enum SpectroGolden { static func pooledInput(counts: [UInt64], axis: EnergyAxis, method: QuantificationMethod, name: String) -> PooledQuantificationInput { let meta = SpectrumImageMetadata(fileName: name, filePath: "", scanWidth: 1, scanHeight: 1, channelCount: axis.size, energyOffsetEV: axis.offset * 1000, energyDispersionEV: axis.scale * 1000) - return PooledQuantificationInput(counts: counts, axis: axis, method: method, metadata: meta, regionName: "synthetic", pixelCount: 1) + // The fit without sum peaks (an explicit off model): the baseline records the exSpy-equivalent line model. + return PooledQuantificationInput(counts: counts, axis: axis, method: method, metadata: meta, regionName: "synthetic", pixelCount: 1, + sumEscape: SumEscapeModel()) } /// The fit, its CSV, the range-sensitivity statement, the proposer on the fit's own settings and the unlisted-line check. diff --git a/tools/edx-sim/demo_pools.py b/tools/edx-sim/demo_pools.py new file mode 100644 index 0000000..6819cfe --- /dev/null +++ b/tools/edx-sim/demo_pools.py @@ -0,0 +1,75 @@ +"""Pooled spectra of the public synthetic AlMgSi demo set, with their planted truth, for `DemoEDXPoolTests`. + +The demo set is mac4DSTEM's `demo-edx` (generator `tools/demo-edx/sim_edx.py` v2.0, seed 42, ladder seed 52). Its truth is the +simulation recipe, not a measurement. Read-only on the demo folder. + + python -I -B tools/edx-sim/demo_pools.py Tests/SpectroEDXTests/Fixtures/edx-demo-pools.json + +Needs numpy and h5py. Each pool: the Poisson counts summed over its pixels, the generator's noise-free expected spectrum of the +same pixels (`expected`, counts, 4 decimals), and the generator's planted component areas (`planted`, counts). +""" +import json +import sys + +import h5py +import numpy as np + +D = sys.argv[1].rstrip('/') + '/' +OUT = sys.argv[2] +T = json.load(open(D + 'truth_edx.json')) +TA = np.load(D + 'truth_edx_arrays.npz') +L = json.load(open(D + 'truth_edx_ladder.json')) +LA = np.load(D + 'truth_edx_ladder_arrays.npz') +comps = T['component_names'] +kc = T['forward_model']['line_model']['true_k']['counts_per_atom_nm2_per_family_(Gp*s*eps)'] +true_axis = dict(offset=-0.478, scale=0.005) +keys = ['Al_Ka', 'Mg_Ka', 'Si_Ka', 'Si_Ka_internal', 'O_Ka', 'Al_Ka_tail', 'Cu_Ka_stray', 'Cu_Ka'] + + +def metals(af): + m = {k: v for k, v in af.items() if k != 'O'} + s = sum(m.values()) + return {k: round(100 * v / s, 10) for k, v in m.items()} + + +def spectrum(x): + return [round(float(v), 4) for v in x] + + +pools = [] +recipes_af = {k: v['atom_fraction_incl_oxide'] for k, v in T['recipes'].items()} +recipes_af['beta_pure'] = {'Mg': 5 / 11, 'Si': 6 / 11} + +with h5py.File(D + 'AlMgSi_edx_ladder.hspy', 'r') as f: + lad = f['Experiments/__unnamed__/data'][()] # (16, 128, 4096) +for ri in (5, 6, 7): + r = L['regions'][ri] + c0, c1 = r['columns'] + block = lad[:, c0:c1 + 1, :].astype(np.int64) + c = r['components_expected_total_counts'] + pools.append(dict(name='L%d_%s' % (ri, r['recipe']), source='ladder', npix=int(block.shape[0] * block.shape[1]), + thickness_nm=r['thickness_nm'], truth_at=metals(recipes_af[r['recipe']]), axis_true=true_axis, + counts=block.sum(axis=(0, 1)).tolist(), expected=spectrum(LA['expected_spectrum_sum_by_region'][ri]), + planted={k: round(float(c.get(k, 0.0)), 4) for k in keys})) + +with h5py.File(D + 'AlMgSi_4D_EDX_EDS.hspy', 'r') as f: + m = f['Experiments/__unnamed__/data'][()].astype(np.int64) # (48, 64, 4096), the file axis carries a planted error +rm = np.array(T['recipe_map']) +order = T['recipe_names_in_map_order'] +thick = TA['thickness_nm'] +cexp = TA['component_expected_counts'] +for name, idx in (('M_A', [0]), ('M_matrix', [0, 1, 2, 3, 4, 5, 6])): + mask = np.isin(rm, idx) + w = TA['expected_total_counts_per_pixel'][mask] + pools.append(dict(name=name, source='map', npix=int(mask.sum()), + thickness_nm=round(float((thick[mask] * w).sum() / w.sum()), 6), truth_at=metals(recipes_af[order[idx[0]]]), + axis_true=true_axis, counts=m[mask].sum(axis=0).tolist(), + expected=spectrum(sum(TA['expected_spectrum_sum_by_recipe'][i] for i in idx)), + planted={k: round(float(cexp[comps.index(k)][mask].sum()), 4) for k in keys})) + +out = dict(generator='mac4DSTEM demo-edx, tools/demo-edx/sim_edx.py v2.0 (seed 42, ladder seed 52); truth is the simulation recipe', + true_k_counts_per_atom_nm2={k: kc[k + '_K'] for k in ('Al', 'Mg', 'Si')}, + atomic_mass={'Al': 26.9815, 'Mg': 24.305, 'Si': 28.0855}, pools=pools) +with open(OUT, 'w') as fh: + json.dump(out, fh, separators=(',', ':'), sort_keys=True) + fh.write('\n')