diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..bd1b586 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 5b6a065..eba74f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1 @@ -.Rproj.user -.Rhistory -.RData -.Ruserdata +venv/ \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index d8976e1..0000000 --- a/INSTALL.md +++ /dev/null @@ -1,5 +0,0 @@ -# ssi_calculator - Academy Spectral Similarity Index Calculator - -The app is currently deployed on a (open source) Shiny Server on a DigitalOcean machine at http://165.227.11.103/ - -The actual code for the app lives at `/srv/shiny-server/ssi_calculator/`. That folder is a clone of this git repo, so to update the application you can do a `git pull` from within that folder. Note that if you manually modify files in that folder and then try to do a `git pull`, you will likely run into merge conflicts, so it's a good idea to only pull from that serer and not develop on it. diff --git a/INTRODUCTION.md b/INTRODUCTION.md deleted file mode 100644 index d6050f9..0000000 --- a/INTRODUCTION.md +++ /dev/null @@ -1,6 +0,0 @@ -Academy Spectral Similarity Index (SSI) Calculator has been written and is maintained by the Academy of Motion Picture Arts and Sciences. This tool implements the [Spectral Similarity Index (SSI)](http://www.oscars.org/ssi). The implementation is intended to be compliant with the [SSI specification](https://www.oscars.org/sites/oscars/files/ssi_overview_2018-12-04.pdf). - -Source code can be found on [Github](https://www.github.com/ampas/ssi_calculator/) - -For more information on the Spectral Similarity Index please visit: [http://www.oscars.org/ssi](http://www.oscars.org/ssi) - diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 8ec6e63..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,48 +0,0 @@ -The Academy Spectral Similarity Index (SSI) Calculator is provided by the -Academy under the following terms and conditions: - -Copyright © 2019 Academy of Motion Picture Arts and Sciences ("A.M.P.A.S."). -Portions contributed by others as indicated. All rights reserved. - -A worldwide, royalty-free, non-exclusive right to copy, modify, create -derivatives, and use, in source and binary forms, is hereby granted, subject to -acceptance of this license. Performance of any of the aforementioned acts -indicates acceptance to be bound by the following terms and conditions: - -* Copies of source code, in whole or in part, must retain the above copyright -notice, this list of conditions and the Disclaimer of Warranty. - -* Use in binary form must retain the above copyright notice, this list of -conditions and the Disclaimer of Warranty in the documentation and/or other -materials provided with the distribution. - -* Nothing in this license shall be deemed to grant any rights to trademarks, -copyrights, patents, trade secrets or any other intellectual property of -A.M.P.A.S. or any contributors, except as expressly stated herein. - -* Neither the name "A.M.P.A.S." nor the name of any other contributors to this -software may be used to endorse or promote products derivative of or based on -this software without express prior written permission of A.M.P.A.S. or the -contributors, as appropriate. - -This license shall be construed pursuant to the laws of the State of California, -and any disputes related thereto shall be subject to the jurisdiction of the -courts therein. - -Disclaimer of Warranty: THIS SOFTWARE IS PROVIDED BY A.M.P.A.S. AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND -NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL A.M.P.A.S., OR ANY -CONTRIBUTORS OR DISTRIBUTORS, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, RESITUTIONARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -WITHOUT LIMITING THE GENERALITY OF THE FOREGOING, THE ACADEMY SPECIFICALLY -DISCLAIMS ANY REPRESENTATIONS OR WARRANTIES WHATSOEVER RELATED TO PATENT OR -OTHER INTELLECTUAL PROPERTY RIGHTS IN THE ACES CONTAINER REFERENCE -IMPLEMENTATION, OR APPLICATIONS THEREOF, HELD BY PARTIES OTHER THAN A.M.P.A.S., -WHETHER DISCLOSED OR UNDISCLOSED. diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..b308fd8 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: gunicorn app:server \ No newline at end of file diff --git a/README.md b/README.md index 066ca62..40e855a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Source code can be found on [Github](https://www.github.com/ampas/ssi_calculator For more information on the Spectral Similarity Index please visit: [http://www.oscars.org/ssi](http://www.oscars.org/ssi) ## Software -This calculator was built using [R](https://www.r-project.org/), [Shiny](https://shiny.rstudio.com/), [Shiny Server Open Source](https://www.rstudio.com/products/shiny/shiny-server/) and [colorSpec](https://cran.r-project.org/web/packages/colorSpec/index.html). +This calculator was built using [Python](https://www.python.org/) and [Dash](https://dash.plotly.com/) ## License Terms The Academy Spectral Similarity Index (SSI) Calculator is provided by the diff --git a/app.R b/app.R deleted file mode 100644 index 6f7599c..0000000 --- a/app.R +++ /dev/null @@ -1,587 +0,0 @@ -# Import Libraries ---- -library(shiny) -library(rhandsontable) -library(colorSpec) -library(shinythemes) -library(shinyjs) -library(glue) - -# Define constants ---- -CORRECTION_FACTOR_DAYLIGHT <- 14388 / 14380 -CORRECTION_FACTOR_ILLUM_A <- 14350 / 14388 -MIN_WAVELENGTH <- 300 -MAX_WAVELENGTH <- 830 -DEFAULT_DAYLIGHT_CCT <- 5000 -DEFAULT_BLACKBODY_CCT <- 3200 -MIN_DAYLIGHT_CCT <- 4000 -MAX_DAYLIGHT_CCT <- 25000 -MIN_BLACKBODY_CCT <- 1000 -MAX_BLACKBODY_CCT <- 10000 - -# App revision info -commit.id <- substr(system("git log --format='%H' -n 1", intern = TRUE), - 1, 7) -commit.url <- paste0('https://www.github.com/ampas/ssi_calculator/commit/', - commit.id) -commit.datetime <- system("git show -s --format=%ci", - intern = TRUE) - -## Subfunctions ---- -interpolateAndNormalize <- function(spec) { - - # Interpolate to MIN_WAVELENGTH-MAX_WAVELENGTH nm in 1nm intervals - spec.resample <- resample( - spec, - wavelength = MIN_WAVELENGTH:MAX_WAVELENGTH, - method = 'linear', - extrapolation = 0) - - # Normailze 560nm to 1.0 - spec.out <- normalize(spec.resample, 560) - - return(spec.out) -} - -# Load Test Spectra ---- -cieF.testSpec <- interpolateAndNormalize(Fs.5nm) -external.testSpec <- interpolateAndNormalize(readSpectra('data/testSources.txt')) -default.testSpec <- bind(cieF.testSpec, external.testSpec) - -# UI Code ---- -ui <- navbarPage( - - # Title - title = 'Academy Spectral Similarity Index (SSI) Calculator (BETA)', - windowTitle = 'SSI Calculator', - - # Theme - theme = shinytheme("flatly"), - - # Common header above the tabs - header = tagList(# Enable ShinyJS to enable/disable elements - useShinyjs(), - - # Modify look of horizontal rules to make them more prominent. - # If more CSS starts to get added, it would be a good idea to pull it - # out into a separate CSS file rather than putting it all inline. - tags$head(includeScript("fathom-analytics.js"), - tags$style('hr {border-top: 1px solid #b3b3b3}'), - tags$style('.navbar-default {background-color:#5f5f5f}'), - tags$style('.navbar-default .navbar-brand:hover {color:#c79f27}'), - tags$style('.navbar-default .navbar-nav li a:hover {color:#c79f27}'), - tags$style('.navbar-default .navbar-nav .active a:focus {background-color:#505050}'), - tags$style('.navbar-default .navbar-nav .active a:hover {background-color:#505050}'), - tags$style('.navbar-default .navbar-nav .active a {background-color:#505050}'), - tags$style('h1 {color:#c79f27}'), - tags$style('h2 {color:#c79f27}'), - tags$style('h3 {color:#c79f27}'), - tags$style('a {color:#c79f27}'), - tags$style('a:hover {color:#c79f27}'), - tags$style('a:focus {color:#c79f27}'), - tags$style('.well {background-color:#f0f0f0}') - ) - ), - - ## Calculations Tab Panel---- - tabPanel(title = "Calculations", - - # Sidebar - sidebarLayout( - # Add Dropdown for test spectrum - sidebarPanel( - width = 3, - selectInput( - inputId = 'testChoice', - label = 'Test Spectrum', - choices = list('Custom', - 'Gas Discharge' = specnames(external.testSpec)[3:4], - 'LED' = specnames(external.testSpec)[1:2], - 'Fluorescent' = specnames(cieF.testSpec) - ), - selected = 'Custom' - ), - - # If test spectrum is custom, show widgets to specify wl range and increments - conditionalPanel( - "input.testChoice == 'Custom'", - # Inputs for CCT and Wavelength - numericInput( - "test.wlMin", - label = "Minimum Wavelength", - value = MIN_WAVELENGTH, - min = MIN_WAVELENGTH, - max = 400 - ), - numericInput( - "test.wlMax", - label = "Maximum Wavelength", - value = MAX_WAVELENGTH, - min = 700, - max = MAX_WAVELENGTH - ), - numericInput( - "test.wlInc", - label = "Wavelength Increments", - value = 1, - min = 0.1, - max = 10 - ) - ), - - # Horizontal rule - hr(), - - # Add dropdown for reference spectrum - selectInput( - inputId = 'refChoice', - label = 'Reference Spectrum', - choices = c('Default', 'Daylight', 'Blackbody'), - selected = 'Default' - ), - - # If daylight show radio buttons to specify CCT or a - # canonical daylight. Returns proper CCT. - conditionalPanel( - "input.refChoice == 'Daylight'", - radioButtons( - "ref.cieD", - label = '', - choiceNames = c('CCT', 'D50', 'D55', 'D65', 'D75'), - choiceValues = c( - 'CCT', - 5000 * CORRECTION_FACTOR_DAYLIGHT, - 5500 * CORRECTION_FACTOR_DAYLIGHT, - 6500 * CORRECTION_FACTOR_DAYLIGHT, - 7500 * CORRECTION_FACTOR_DAYLIGHT - ), - inline = TRUE - ) - ), - - # If blackbody how radio buttons to specify CCT or or Illuminant A - conditionalPanel( - "input.refChoice == 'Blackbody'", - radioButtons( - "ref.cieP", - label = '', - choiceNames = c('CCT', 'A'), - choiceValues = c('CCT', 2855.542), - inline = TRUE - ) - ), - - # If daylight add a box where CCT is shown or specified - conditionalPanel( - "input.refChoice == 'Daylight'", - numericInput( - "ref.cctD", - label = "CCT", - value = DEFAULT_DAYLIGHT_CCT, - min = MIN_DAYLIGHT_CCT, - max = MAX_DAYLIGHT_CCT - ) - ), - - # If blackbody add a box where CCT is shown or specified - conditionalPanel( - "input.refChoice == 'Blackbody'", - numericInput( - "ref.cctP", - label = "CCT", - value = DEFAULT_BLACKBODY_CCT, - min = MIN_BLACKBODY_CCT, - max = MAX_BLACKBODY_CCT - ) - ) - ), - - # Main Panel - mainPanel(width = 9, - fluidRow( - column(width = 4, - h3('Data'), - hr(), - fluidRow( - # Table with test spectrum values - column(width = 6, - rHandsontableOutput('spectra.test')), - # Table with reference spectrum values - column(width = 6, - rHandsontableOutput('spectra.ref')) - ), - br()), - # Plot - column( - width = 8, - h3('Plot'), - hr(), - plotOutput('plot.ref'), - h3('Results'), - hr(), - fluidRow( - # SSI Result - column( - width = 6, - h4("Spectral Similarity Index"), - wellPanel(textOutput('ssi.text')) - ), - column( - width = 6, - conditionalPanel( - "input.refChoice == 'Default'", - h4("Default Reference Spectrum Used"), - wellPanel(textOutput('cct.test')) - ) - ) - ), - fluidRow( - #Beta Notices - column( - width = 12, - tags$b('NOTICE:'), - div( - 'The Academy SSI Calculator is currently in beta testing!' - ), - div( - 'The calculator should not yet be considered a reference - implemenation of the Spectral Similarity Index (SSI) as in may - contain erorrs. Please log issues on', - a(href = 'https://github.com/ampas/ssi_calculator/issues', 'Github', target = '_blank') - ) - ) - ) - ) - )) - )), - - ## About Tab Panel ---- - tabPanel( - title = "About", - h2('Introduction'), - div( - includeMarkdown('INTRODUCTION.md'), - h2('Software'), - 'This calculator was built using', - a(href = 'https://www.r-project.org/', - 'R', - target = '_blank'), - ',', - a(href = 'https://shiny.rstudio.com/', - 'Shiny', - target = '_blank'), - ',', - a(href = 'https://www.rstudio.com/products/shiny/shiny-server/', - 'Shiny Server Open Source', - target = '_blank'), - 'and', - a(href = 'https://cran.r-project.org/web/packages/colorSpec/index.html', - 'colorSpec', - target = '_blank'), - '(in particular the', - a(href = 'https://rdrr.io/cran/colorSpec/man/computeSSI.html', - 'computeSSI', - target = '_blank'), - 'method)', - br(), - 'Current software versions : ', - tags$ul( - tags$li(R.version.string), - tags$li('Shiny', - as.character(packageVersion('shiny'))), - tags$li( - try( - system('shiny-server --version', - intern = TRUE, - ignore.stderr = TRUE)[1] - ) - ), - tags$li('colorSpec', - as.character(packageVersion('colorSpec'))) - ), - 'The calculator source code was last updated on ', - commit.datetime, - br(), - 'The git commit id of the current calculator code is ', - a(href = commit.url, - commit.id, - target = '_blank'), - h2('License Terms'), - br(), - includeMarkdown('LICENSE.md') - ), - style = "width:900px;" - ) -) - - -# Server Code ---- -server <- function(input, output, session) { - - ## Observe Events ---- - - # Gray out Daylight CCT numericInput if a canonical illuminant - observeEvent(input$ref.cieD, { - toggleState('ref.cctD', input$ref.cieD == "CCT") - }) - - # Gray out Blackbody CCT numericInput if a canonical illuminant - observeEvent(input$ref.cieP, { - toggleState('ref.cctP', input$ref.cieP == "CCT") - }) - - - # Update Daylight CCT numbericInput if a canonical illuminant or 5000K if 'CCT' - observeEvent(input$ref.cieD, { - if (input$ref.cieD == "CCT") { - cct <- DEFAULT_DAYLIGHT_CCT - } else { - cct <- input$ref.cieD - } - updateNumericInput(session, inputId = 'ref.cctD', value = cct) - }) - - # Update Blackbody CCT numbericInput if a canonical illuminant or 3200K if 'CCT' - observeEvent(input$ref.cieP, { - if (input$ref.cieP == "CCT") { - cct <- DEFAULT_BLACKBODY_CCT - } else { - cct <- input$ref.cieP - } - updateNumericInput(session, inputId = 'ref.cctP', value = cct) - }) - - ## Reactive Expressions ---- - - # Reactive expression to get the custom wavelengths - getCustomWl <- reactive({ - seq(input$test.wlMin, - input$test.wlMax, - input$test.wlInc) - }) - - # Reactive expression to get the current wavelengths that should be used - getCurrentWl <- reactive({ - if (input$testChoice == 'Custom') { - getCustomWl() - } else { - seq(MIN_WAVELENGTH, MAX_WAVELENGTH) - } - }) - - # Reactive epression to get test cct - getTestCCT <- reactive({ - XYZ <- product(getTestSpec(), - xyz1931.1nm, - wavelength = 'auto') - if (XYZ[2] == 0) { - NA - } else { - computeCCT(getTestSpec()) - } - }) - - # Reactive expression to get the SSI for test/ref spectra - getSSI <- reactive({ - computeSSI( - getTestSpec(), - getRefSpec() - ) - }) - - - # Reactive expression to get reference spectra for default mode - getRefSpecDefault <- reactive({ - # Calculate test spectrum cct - cct <- getTestCCT() - # Check to see if compute CCT throws a NA - if (is.na(cct)) { - spec <- getTestSpec() - } else { - # Compute default reference spectrum based on test cct - if (cct <= MIN_DAYLIGHT_CCT) { - spec <- planckSpectra(cct, getCurrentWl()) - } else { - spec <- daylightSpectra(cct, getCurrentWl()) - } - } - spec - }) - - # Reactive expression to get reference spectrum for daylight mode - getRefSpecDaylight <- reactive({ - validate( - need(input$ref.cctD <= MAX_DAYLIGHT_CCT, - glue('CCT must be {MAX_DAYLIGHT_CCT}K or less')), - need(input$ref.cctD >= MIN_DAYLIGHT_CCT, - glue('CCT must be at least {MIN_DAYLIGHT_CCT}K')) - ) - # Compute daylight reference spectrum - spec <- daylightSpectra(input$ref.cctD, getCurrentWl()) - if (input$ref.cieD == 5000 * CORRECTION_FACTOR_DAYLIGHT) { - specnames(spec) <- 'CIE D50' - } else if (input$ref.cieD == 5500 * CORRECTION_FACTOR_DAYLIGHT) { - specnames(spec) <- 'CIE D55' - } else if (input$ref.cieD == 6500 * CORRECTION_FACTOR_DAYLIGHT) { - specnames(spec) <- 'CIE D65' - } else if (input$ref.cieD == 7500 * CORRECTION_FACTOR_DAYLIGHT) { - specnames(spec) <- 'CIE D75' - } - spec - }) - - # Reactive expression to get reference spectrum for blackbody mode - getRefSpecBlackbody <- reactive({ - # Validate the input to make sure the range is good - validate( - need(input$ref.cctP <= MAX_BLACKBODY_CCT, - glue('CCT must be {MAX_BLACKBODY_CCT}K or less')), - need(input$ref.cctP >= MIN_BLACKBODY_CCT, - glue('CCT must be at least {MIN_BLACKBODY_CCT}K')) - ) - # Compute blackbody reference spectrum - if (input$ref.cieP == 'CCT') { - # For generic blackbody of a given CCT - spec <- planckSpectra(input$ref.cctP, - getCurrentWl()) - } else { - # For CIE Illuminant A - spec <- planckSpectra(input$ref.cctP * CORRECTION_FACTOR_ILLUM_A, - getCurrentWl(), - c2 = 1.435e-2) - specnames(spec) <- 'CIE A' - } - spec - }) - - getRefSpec <- reactive({ - switch( - input$refChoice, - 'Default' = getRefSpecDefault(), - 'Daylight' = getRefSpecDaylight(), - 'Blackbody' = getRefSpecBlackbody() - ) - }) - - getTestSpecTable <- reactive({ - if (input$testChoice != 'Custom') { - # Subset if not custom - subset(default.testSpec, glue("{input$testChoice}$")) - } else { - validate( - need(input$test.wlMin >= MIN_WAVELENGTH, - glue('Min Wavelength must be >= {MIN_WAVELENGTH}')), - need(input$test.wlMax <= MAX_WAVELENGTH, - glue('Max Wavelength must be <= {MAX_WAVELENGTH}')), - need(input$test.wlInc >= 0.1, - 'Wavelength increments must be >= 0.1'), - need(input$test.wlInc <= 10, - 'Wavelength increments must be <= 10') - ) - illuminantE(0, getCurrentWl()) - } - }) - - getTestSpec <- reactive({ - if (input$testChoice != 'Custom') { - getTestSpecTable() - } else { - req(input$spectra.test) - table <- hot_to_r(input$spectra.test) - req(length(getCurrentWl()) == length(table)) - colorSpec(table, - wavelength = getCurrentWl(), - organization = 'matrix') - } - }) - - ## Outputs ---- - - # Calculate the CCT of the test spectrum and prepare text used for display in the UI - output$cct.test <- renderText({ - cct <- getTestCCT() - if (is.na(cct)) { - 'No default reference spectrum could be calculated because a CCT - can not be calculated for the test spectrum' - } else if (cct <= MIN_DAYLIGHT_CCT) { - glue('Blackbody with CCT = {round(cct, digits = 2)}K') - } else if (cct > MIN_DAYLIGHT_CCT && cct < MAX_DAYLIGHT_CCT) { - glue('CIE Daylight with CCT = {round(cct, digits = 2)}K') - } - }) - - # Generate plot of test and reference spectra - output$plot.ref <- renderPlot({ - # Calculate test and reference spectra - spectra.ref <- getRefSpec() - spectra.test <- getTestSpec() - # Interpolate and normalize data - spectra.ref <- interpolateAndNormalize(spectra.ref) - spectra.test <- interpolateAndNormalize(spectra.test) - # Combine Test and Reference Spectrum into one ColorSpec object - specnames(spectra.ref) <- 'Reference' - specnames(spectra.test) <- 'Test' - s <- bind(spectra.ref, spectra.test) - # Define yMax for the plot y-axis limit - if (max(s) < 1) { - yMax <- 1 - } else if (max(s) > 30) { - yMax <- 30 - } else { - yMax <- max(s) - } - # Plot - plot(s, - color = c('black', 'red'), - main = 'Spectral Power Distributions', - CCT = TRUE, - ylim = c(0, yMax)) - }) - - # Calculate SSI - output$ssi.text <- renderText({ - ssi <- getSSI() - glue( - strsplit(names(ssi)[1], "_")[[1]][2], - '=', - ssi[[1]], - .sep = " " - ) - }) - - # Generate table with test sepctrum - output$spectra.test <- renderRHandsontable({ - if (input$testChoice == 'Custom') { - # Make table editable - ro <- FALSE - spectra.test <- getTestSpecTable() - } else { - # Interpolate and normalize - spectra.test <- interpolateAndNormalize(getTestSpecTable()) - # Make table read only - ro <- TRUE - } - # Generate Table - rhandsontable(coredata(spectra.test, forcemat = TRUE), - colHeaders = 'Test', - digits = 20, - width = 150, - stretchH = 'all', - readOnly = ro) %>% - hot_col(1, format = '0.00000') - }) - - # Generate Table of Reference Sepctra - output$spectra.ref <- renderRHandsontable({ - rhandsontable(coredata(getRefSpec(), forcemat = TRUE), - colHeaders = 'Reference', - digits = 20, - width = 150, - stretchH = 'all', - readOnly = TRUE) %>% - hot_col(1, format = '0.00000') - }) - -} - -# Run Application ---- -shinyApp(ui = ui, server = server) diff --git a/app.py b/app.py new file mode 100644 index 0000000..d9ab66c --- /dev/null +++ b/app.py @@ -0,0 +1,478 @@ +import dash +from dash import dcc, html, Input, Output, State, callback_context +import dash_bootstrap_components as dbc +import plotly.graph_objs as go +import numpy as np +import pandas as pd +from dash import dash_table +from ssi_module import calculate_ssi +from planck_module import planck +from daylight_module import daylight +from cct_module import cct_mccamy +import io +import base64 + +# Constants +CORRECTION_FACTOR_DAYLIGHT = 14388 / 14380 +CORRECTION_FACTOR_ILLUM_A = 14350 / 14388 +MIN_WAVELENGTH = 300 +MAX_WAVELENGTH = 830 +DEFAULT_DAYLIGHT_CCT = 5000 +DEFAULT_BLACKBODY_CCT = 3200 +MIN_DAYLIGHT_CCT = 4000 +MAX_DAYLIGHT_CCT = 25000 +MIN_BLACKBODY_CCT = 1000 +MAX_BLACKBODY_CCT = 10000 +wavelengths = np.linspace(300, 830, 530) + +CCT_MAPPING = { + 'D50': 5000 * CORRECTION_FACTOR_DAYLIGHT, + 'D55': 5500 * CORRECTION_FACTOR_DAYLIGHT, + 'D65': 6500 * CORRECTION_FACTOR_DAYLIGHT, + 'D75': 7500 * CORRECTION_FACTOR_DAYLIGHT, + 'Custom_Blackbody': 3200, + 'HMI': 5606, + 'A': 2855.542, + 'Xenon': 5159, + 'Warm LED': 3133, + 'Cool LED': 5300, + 'F1': 6425, + 'F2': 4224, + 'F3': 2447, + 'F4': 2939, + 'F5': 6342, + 'F6': 4148, + 'F7': 6489, + 'F8': 4995, + 'F9': 4147, + 'F10': 4988, + 'F11': 4001, + 'F12': 3002 +} + +# Function to interpolate and normalize spectra +def interpolate_and_normalize(spec): + wavelengths = np.arange(MIN_WAVELENGTH, MAX_WAVELENGTH + 1) + spec_resample = np.interp(wavelengths, spec['wavelength'], spec['intensity']) + spec_resample /= spec_resample[np.where(wavelengths == 560)] + return pd.DataFrame({'wavelength': wavelengths, 'intensity': spec_resample}) + +# Load test spectra from the provided text file +file_path_test = 'testSources_test.csv' +file_path_ref = 'daylighttestsources.csv' +test_spectra_df = pd.read_csv(file_path_test) +ref_spectra_df = pd.read_csv(file_path_ref) + +def parse_contents(contents, filename): + content_type, content_string = contents.split(',') + decoded = base64.b64decode(content_string) + if 'csv' in filename: + return pd.read_csv(io.StringIO(decoded.decode('utf-8'))) + elif 'xls' in filename: + return pd.read_excel(io.BytesIO(decoded)) + else: + return pd.DataFrame() + +# Interpolate and normalize each test spectrum +warm_led_spec = interpolate_and_normalize(test_spectra_df[['wavelength', 'Warm LED']].rename(columns={'Warm LED': 'intensity'})) +cool_led_spec = interpolate_and_normalize(test_spectra_df[['wavelength', 'Cool LED']].rename(columns={'Cool LED': 'intensity'})) +hmi_spec = interpolate_and_normalize(test_spectra_df[['wavelength', 'HMI']].rename(columns={'HMI': 'intensity'})) +xenon_spec = interpolate_and_normalize(test_spectra_df[['wavelength', 'Xenon']].rename(columns={'Xenon': 'intensity'})) +D50_spec = interpolate_and_normalize(ref_spectra_df[['wavelength', 'D50']].rename(columns={'D50': 'intensity'})) +D55_spec = interpolate_and_normalize(ref_spectra_df[['wavelength', 'D55']].rename(columns={'D55': 'intensity'})) +D65_spec = interpolate_and_normalize(ref_spectra_df[['wavelength', 'D65']].rename(columns={'D65': 'intensity'})) +D75_spec = interpolate_and_normalize(ref_spectra_df[['wavelength', 'D75']].rename(columns={'D75': 'intensity'})) +custom_spec_test = interpolate_and_normalize(test_spectra_df[['wavelength', 'Custom']].rename(columns={'Custom': 'intensity'})) +fluorescent_specs = {} +for i in range(1, 13): + name = f'F{i}' + fluorescent_specs[name] = interpolate_and_normalize(test_spectra_df[['wavelength', name]].rename(columns={name: 'intensity'})) + +# Initialize Dash app with callback exceptions suppressed +app = dash.Dash(__name__, external_stylesheets=[dbc.themes.LUX], suppress_callback_exceptions=True) +server = app.server + +intro_content = ''' +Academy Spectral Similarity Index (SSI) Calculator has been written and is maintained by the Academy of Motion Picture Arts and Sciences. This tool implements the [Spectral Similarity Index (SSI)](http://www.oscars.org/ssi). The implementation is intended to be compliant with the [SSI specification](https://www.oscars.org/sites/oscars/files/ssi_overview_2018-12-04.pdf). + +Source code can be found on [Github](https://www.github.com/ampas/ssi_calculator/) + +For more information on the Spectral Similarity Index please visit: [http://www.oscars.org/ssi](http://www.oscars.org/ssi) +''' + +software_content = ''' +This calculator was built using [Python](https://www.python.org/) and [Dash](https://dash.plotly.com/) +''' + +license = ''' +The Academy Spectral Similarity Index (SSI) Calculator is provided by the +Academy under the following terms and conditions: + +Copyright © 2019 Academy of Motion Picture Arts and Sciences ("A.M.P.A.S."). +Portions contributed by others as indicated. All rights reserved. + +A worldwide, royalty-free, non-exclusive right to copy, modify, create +derivatives, and use, in source and binary forms, is hereby granted, subject to +acceptance of this license. Performance of any of the aforementioned acts +indicates acceptance to be bound by the following terms and conditions: + +* Copies of source code, in whole or in part, must retain the above copyright +notice, this list of conditions and the Disclaimer of Warranty. + +* Use in binary form must retain the above copyright notice, this list of +conditions and the Disclaimer of Warranty in the documentation and/or other +materials provided with the distribution. + +* Nothing in this license shall be deemed to grant any rights to trademarks, +copyrights, patents, trade secrets or any other intellectual property of +A.M.P.A.S. or any contributors, except as expressly stated herein. + +* Neither the name "A.M.P.A.S." nor the name of any other contributors to this +software may be used to endorse or promote products derivative of or based on +this software without express prior written permission of A.M.P.A.S. or the +contributors, as appropriate. + +This license shall be construed pursuant to the laws of the State of California, +and any disputes related thereto shall be subject to the jurisdiction of the +courts therein. + +Disclaimer of Warranty: THIS SOFTWARE IS PROVIDED BY A.M.P.A.S. AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL A.M.P.A.S., OR ANY +CONTRIBUTORS OR DISTRIBUTORS, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, RESITUTIONARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +WITHOUT LIMITING THE GENERALITY OF THE FOREGOING, THE ACADEMY SPECIFICALLY +DISCLAIMS ANY REPRESENTATIONS OR WARRANTIES WHATSOEVER RELATED TO PATENT OR +OTHER INTELLECTUAL PROPERTY RIGHTS IN THE ACES CONTAINER REFERENCE +IMPLEMENTATION, OR APPLICATIONS THEREOF, HELD BY PARTIES OTHER THAN A.M.P.A.S., +WHETHER DISCLOSED OR UNDISCLOSED. +''' +# Define layout +app.layout = dbc.Container(fluid=True, children=[ + dbc.NavbarSimple( + brand="SSI Calculator", + brand_href="#", + color="dark", + dark=True, + fluid=True, + style={'backgroundColor': '#000000'} + ), + dcc.Store(id='stored-cct-value'), + dcc.Store(id='stored-custom-spec'), + + dbc.Tabs([ + dbc.Tab(label="Calculations", children=[ + dbc.Row([ + dbc.Col(width=4, children=[ # Half the screen width for settings, reference, and spectral data + dbc.Card([ + dbc.CardHeader("Test Spectrum", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([ + dcc.Dropdown( + id='testChoice', + options=[ + {'label': 'Warm LED', 'value': 'Warm LED'}, + {'label': 'Cool LED', 'value': 'Cool LED'}, + {'label': 'HMI', 'value': 'HMI'}, + {'label': 'Xenon', 'value': 'Xenon'} + ] +[{'label': f'F{i}', 'value': f'F{i}'} for i in range(1, 13)] + [{'label': 'Custom', 'value': 'Custom'}], + value='Warm LED' + ), + # html.Div(id='customTestSpecInputs') + ]) + ], style={'margin-top': '20px'}), + dbc.Card([ + dbc.CardHeader("Upload CSV or Excel", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([ + dcc.Upload( + id='upload-data', + children=html.Div([ + 'Drag and Drop or ', + html.A('Select Files') + ]), + style={ + 'width': '100%', + 'height': '60px', + 'lineHeight': '60px', + 'borderWidth': '1px', + 'borderStyle': 'dashed', + 'borderRadius': '5px', + 'textAlign': 'center', + 'margin': '10px' + }, + multiple=False + ), + html.Div(id='output-data-upload') + ]) + ], id='upload-card', style={'margin-top': '20px', 'display': 'none'}), + dbc.Card([ + dbc.CardHeader("Reference Spectrum", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([ + dcc.Dropdown( + id='refChoice', + options=[ + {'label': 'Default', 'value': 'Default'}, + {'label': 'Blackbody: A', 'value': 'A'}, + {'label': 'Blackbody: Custom CCT', 'value': 'Custom_Blackbody'}, + {'label': 'Daylight: D50', 'value': 'D50'}, + {'label': 'Daylight: D55', 'value': 'D55'}, + {'label': 'Daylight: D65', 'value': 'D65'}, + {'label': 'Daylight: D75', 'value': 'D75'}, + {'label': 'Daylight: Custom CCT', 'value': 'Custom_Daylight'} + ], + value='Default' + ), + html.Div(id='refSpecInputs', style={'margin-top': '20px'}), + dbc.Row([ + dbc.Label("CCT"), + dbc.Input( + type="number", + id="refCct", + value=4000, + min=MIN_BLACKBODY_CCT, + max=MAX_BLACKBODY_CCT, + step=1, + debounce=True + ), + ], id='customCctInput', style={'margin-top': '20px', 'display': 'none'}), + dbc.Button("Submit CCT", id="submit-cct", color="primary", className="mr-2", style={'margin-top': '10px', 'display': 'none'}), + html.Div(id='warning-message', style={'color': 'red', 'margin-top': '10px'}) + ]) + ], style={'margin-top': '20px'}), + + dbc.Card([ + dbc.CardHeader("Spectral Data", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([ + dcc.Tabs([ + dcc.Tab(label='Test Spectrum', children=[ + html.Div(id='spectraTest', children=[dash_table.DataTable( + id='spectra-test-table', + data=warm_led_spec.to_dict('records'), + columns=[{"name": i, "id": i} for i in warm_led_spec.columns], + editable=True, + page_size=1000, + export_format="csv", + export_headers="display", + )]) + ]), + dcc.Tab(label='Reference Spectrum', children=[ + html.Div(id='spectraRef') + ]), + ]), + ]) + ], style={'margin-top': '20px'}), + ]), + dbc.Col(width=8, children=[ # Half the screen width for the graph + dbc.Card([ + dbc.CardHeader("Graph", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([dcc.Graph(id='plotRef')]), + ], style={'margin-top': '20px'}), + dbc.Card([ + dbc.CardHeader("Spectral Similarity Index (SSI)", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([html.H5(id='ssiText', className='card-text')]), + ], style={'margin-top': '20px'}), + dbc.Card([ + dbc.CardHeader("Default Reference Spectrum Used", style={'backgroundColor': '#000000', 'color': '#BA9E5E'}), + dbc.CardBody([html.H5(id='defaultspecused', className='card-text')]), + ], id='default-spec-card', style={'margin-top': '20px'}), + ]), + ]), + ]), + dbc.Tab(label="About", children=[ + dbc.Container([ + html.H2('Introduction'), + dcc.Markdown(intro_content), + html.H2('Software'), + dcc.Markdown(software_content), + html.H2('License Terms'), + dcc.Markdown(license), + ], style={'margin-top': '20px'}) + ]), + ]), +]) + + +@app.callback( + Output('upload-card', 'style'), + Input('testChoice', 'value') +) +def update_upload_card_visibility(test_choice): + if test_choice == 'Custom': + return {'display': 'block'} + return {'display': 'none'} + +@app.callback( + Output('default-spec-card', 'style'), + Input('refChoice', 'value') +) +def update_defaultSpec_card_visibility(ref_choice): + if ref_choice == 'Default': + return {'display': 'block'} + return {'display': 'none'} + + +@app.callback( + Output('spectra-test-table', 'data'), + Output('spectra-test-table', 'columns'), + Output('stored-custom-spec', 'data'), + Input('testChoice', 'value'), + Input('upload-data', 'contents'), + State('upload-data', 'filename') +) +def update_spectra_test_table(test_choice, contents, filename): + + if test_choice == 'Warm LED': + df = warm_led_spec + elif test_choice == 'Cool LED': + df = cool_led_spec + elif test_choice == 'HMI': + df = hmi_spec + elif test_choice == 'Xenon': + df = xenon_spec + elif test_choice == 'Custom': + if contents is not None: + df = parse_contents(contents, filename) + custom_spec = df + df = interpolate_and_normalize(df) + df = df.round(5) + return df.to_dict('records'), [{"name": i, "id": i} for i in df.columns], custom_spec.to_dict('records') + else: + df = warm_led_spec + elif test_choice in fluorescent_specs: + df = fluorescent_specs[test_choice] + else: + return [], [], {} + + df = df.round(5) + return df.to_dict('records'), [{"name": i, "id": i} for i in df.columns], {} + +@app.callback( + [Output('customCctInput', 'style'), + Output('submit-cct', 'style'), + Output('warning-message', 'children')], + [Input('refChoice', 'value'), + Input('refCct', 'value')] +) +def update_cct_input_visibility(ref_choice, ref_cct): + if ref_choice == 'Custom_Blackbody' or ref_choice == 'Custom_Daylight': + warning_message = "" + if ref_choice == 'Custom_Daylight' and (ref_cct is not None and ref_cct < 4000): + warning_message = "CCT must be >= 4000 for Daylight Spectra" + return {'margin-top': '20px'}, {'margin-top': '10px', 'display': 'inline-block'}, warning_message + return {'display': 'none'}, {'display': 'none'}, "" + +@app.callback( + [Output('plotRef', 'figure'), + Output('spectraRef', 'children'), + Output('ssiText', 'children'), + Output('defaultspecused', 'children')], + [Input('spectra-test-table', 'data'), + Input('spectra-test-table', 'columns'), + Input('testChoice', 'value'), + Input('refChoice', 'value'), + Input('stored-cct-value', 'data'), + Input('submit-cct', 'n_clicks'), + Input('stored-custom-spec', 'data')], + [State('refCct', 'value')] +) +def update_all_outputs(rows, columns, test_choice, ref_choice, stored_cct_value, n_clicks, custom_spec_data, ref_cct_value): + fig = go.Figure() + + # Check for valid data in the DataTable + if not rows or not isinstance(rows, list) or not all(isinstance(row, dict) for row in rows): + return fig, html.Div("Invalid data format."), "Spectral Similarity Index: N/A" + + test_df = pd.DataFrame(rows, columns=[c['name'] for c in columns]) # Create DataFrame from DataTable rows + test_df = test_df.round(5) + + testcct = cct_mccamy(test_df).round(2) + + # Plot test spectrum + if test_choice == 'Custom' and custom_spec_data: + fig.add_trace(go.Scatter(x=test_df['wavelength'], y=test_df['intensity'], mode='lines', name=f'Test Spectrum [CCT: {testcct}]')) + else: + fig.add_trace(go.Scatter(x=test_df['wavelength'], y=test_df['intensity'], mode='lines', name=f'Test Spectrum [CCT: {testcct}]')) + + # Update reference spectrum based on the CCT value + if ref_choice == 'D50': + df = D50_spec + elif ref_choice == 'D55': + df = D55_spec + elif ref_choice == 'D65': + df = D65_spec + elif ref_choice == 'D75': + df = D75_spec + elif ref_choice == 'Custom_Blackbody': + if n_clicks is not None: + custom_spec_bb = planck(ref_cct_value, wavelengths) + df = interpolate_and_normalize(custom_spec_bb) + else: + return fig, html.Div("Please submit a CCT value."), "Spectral Similarity Index: N/A" + elif ref_choice == 'A': + custom_spec_bb = planck(2855.542, wavelengths) + df = interpolate_and_normalize(custom_spec_bb) + elif ref_choice == 'Custom_Daylight': + if n_clicks is not None: + custom_spec_daylight = daylight(ref_cct_value, wavelengths) + df = interpolate_and_normalize(custom_spec_daylight) + else: + return fig, html.Div("Please submit a CCT value."), "Spectral Similarity Index: N/A" + elif ref_choice == 'Default': + if cct_mccamy(test_df) < 4000: + custom_spec_bb = planck(cct_mccamy(test_df), wavelengths) + df = interpolate_and_normalize(custom_spec_bb) + else: + custom_spec_daylight = daylight(cct_mccamy(test_df), wavelengths) + df = interpolate_and_normalize(custom_spec_daylight) + + + df = df.round(5) + + refcct = cct_mccamy(df).round(2) + + fig.add_trace(go.Scatter(x=df['wavelength'], y=df['intensity'], mode='lines', name=f'Reference Spectrum [CCT: {refcct}]')) + + table = dash_table.DataTable( + data=df.to_dict('records'), + columns=[{"name": i, "id": i} for i in df.columns], + editable=False, # Allows users to edit the data in the table + page_size=1000, # Number of rows per page + export_format="csv", + export_headers="display", + merge_duplicate_headers=True + ) + + # SSI Calculation + ref_data = df + test_data = test_df # Use the updated test_df from the DataTable + + if test_data is None or ref_data is None: + ssi_value_text = "Spectral Similarity Index: N/A" + else: + test_intensity = test_data['intensity'] + ref_intensity = ref_data['intensity'] + test_wavelengths = test_data['wavelength'] + ref_wavelengths = ref_data['wavelength'] + + ssi_value = calculate_ssi(test_wavelengths, test_intensity, ref_wavelengths, ref_intensity) + ssi_value_text = f"Spectral Similarity Index: {int(ssi_value)}" + # testcct = cct_mccamy(test_data).round(2) + # refcct = cct_mccamy(ref_data).round(2) + if testcct < 4000: + default_spec_text = f"Blackbody with CCT = {refcct}" + else: + default_spec_text = f"CIE Daylight with CCT = {refcct}" + + return fig, table, ssi_value_text, default_spec_text + +# Run the app +if __name__ == '__main__': + app.run_server(debug=True) + + diff --git a/assets/custom_styles.css b/assets/custom_styles.css new file mode 100644 index 0000000..c3f75e0 --- /dev/null +++ b/assets/custom_styles.css @@ -0,0 +1,31 @@ +.navbar-dark .navbar-brand { + color: #BA9E5E !important; +} + +.card-header { + background-color: #BA9E5E !important; + color: #000000 !important; +} + +.navbar { + background-color: #000000 !important; + color: #BA9E5E !important; +} + + +body, .card-body, .container, .markdown, p { + color: #000000 !important; +} + +body, .app-container { + background-color: #f2f2f2; /* Light grey background */ + color: #000000; +} + +#submit-cct{ + margin-top: 10px !important; +} + +#upload-data{ + text-align: center !important; +} \ No newline at end of file diff --git a/cct_module.py b/cct_module.py new file mode 100644 index 0000000..2b78108 --- /dev/null +++ b/cct_module.py @@ -0,0 +1,26 @@ +import numpy as np +import pandas as pd +from color_matching_func import get_color_matching_functions + + +def cct_mccamy(spec): + if spec is None or spec.empty: + raise ValueError('missing required input argument spec') + + + cmf = get_color_matching_functions() + merged = pd.merge(spec, cmf, on='wavelength') + + X = np.sum(merged['intensity'] * merged['x_bar']) + Y = np.sum(merged['intensity'] * merged['y_bar']) + Z = np.sum(merged['intensity'] * merged['z_bar']) + + x = X / (X + Y + Z) + y = Y / (X + Y + Z) + + xe = 0.3320 + ye = 0.1858 + n = (x - xe) / (y - ye) + cct = -449 * (n ** 3) + 3525 * (n ** 2) - 6823.3 * n + 5520.33 + + return cct \ No newline at end of file diff --git a/ciexyz31.txt b/ciexyz31.txt new file mode 100644 index 0000000..eed6fb9 --- /dev/null +++ b/ciexyz31.txt @@ -0,0 +1,471 @@ +360 0.000129900000 0.000003917000 0.000606100000 +361 0.000145847000 0.000004393581 0.000680879200 +362 0.000163802100 0.000004929604 0.000765145600 +363 0.000184003700 0.000005532136 0.000860012400 +364 0.000206690200 0.000006208245 0.000966592800 +365 0.000232100000 0.000006965000 0.001086000000 +366 0.000260728000 0.000007813219 0.001220586000 +367 0.000293075000 0.000008767336 0.001372729000 +368 0.000329388000 0.000009839844 0.001543579000 +369 0.000369914000 0.000011043230 0.001734286000 +370 0.000414900000 0.000012390000 0.001946000000 +371 0.000464158700 0.000013886410 0.002177777000 +372 0.000518986000 0.000015557280 0.002435809000 +373 0.000581854000 0.000017442960 0.002731953000 +374 0.000655234700 0.000019583750 0.003078064000 +375 0.000741600000 0.000022020000 0.003486000000 +376 0.000845029600 0.000024839650 0.003975227000 +377 0.000964526800 0.000028041260 0.004540880000 +378 0.001094949000 0.000031531040 0.005158320000 +379 0.001231154000 0.000035215210 0.005802907000 +380 0.001368000000 0.000039000000 0.006450001000 +381 0.001502050000 0.000042826400 0.007083216000 +382 0.001642328000 0.000046914600 0.007745488000 +383 0.001802382000 0.000051589600 0.008501152000 +384 0.001995757000 0.000057176400 0.009414544000 +385 0.002236000000 0.000064000000 0.010549990000 +386 0.002535385000 0.000072344210 0.011965800000 +387 0.002892603000 0.000082212240 0.013655870000 +388 0.003300829000 0.000093508160 0.015588050000 +389 0.003753236000 0.000106136100 0.017730150000 +390 0.004243000000 0.000120000000 0.020050010000 +391 0.004762389000 0.000134984000 0.022511360000 +392 0.005330048000 0.000151492000 0.025202880000 +393 0.005978712000 0.000170208000 0.028279720000 +394 0.006741117000 0.000191816000 0.031897040000 +395 0.007650000000 0.000217000000 0.036210000000 +396 0.008751373000 0.000246906700 0.041437710000 +397 0.010028880000 0.000281240000 0.047503720000 +398 0.011421700000 0.000318520000 0.054119880000 +399 0.012869010000 0.000357266700 0.060998030000 +400 0.014310000000 0.000396000000 0.067850010000 +401 0.015704430000 0.000433714700 0.074486320000 +402 0.017147440000 0.000473024000 0.081361560000 +403 0.018781220000 0.000517876000 0.089153640000 +404 0.020748010000 0.000572218700 0.098540480000 +405 0.023190000000 0.000640000000 0.110200000000 +406 0.026207360000 0.000724560000 0.124613300000 +407 0.029782480000 0.000825500000 0.141701700000 +408 0.033880920000 0.000941160000 0.161303500000 +409 0.038468240000 0.001069880000 0.183256800000 +410 0.043510000000 0.001210000000 0.207400000000 +411 0.048995600000 0.001362091000 0.233692100000 +412 0.055022600000 0.001530752000 0.262611400000 +413 0.061718800000 0.001720368000 0.294774600000 +414 0.069212000000 0.001935323000 0.330798500000 +415 0.077630000000 0.002180000000 0.371300000000 +416 0.086958110000 0.002454800000 0.416209100000 +417 0.097176720000 0.002764000000 0.465464200000 +418 0.108406300000 0.003117800000 0.519694800000 +419 0.120767200000 0.003526400000 0.579530300000 +420 0.134380000000 0.004000000000 0.645600000000 +421 0.149358200000 0.004546240000 0.718483800000 +422 0.165395700000 0.005159320000 0.796713300000 +423 0.181983100000 0.005829280000 0.877845900000 +424 0.198611000000 0.006546160000 0.959439000000 +425 0.214770000000 0.007300000000 1.039050100000 +426 0.230186800000 0.008086507000 1.115367300000 +427 0.244879700000 0.008908720000 1.188497100000 +428 0.258777300000 0.009767680000 1.258123300000 +429 0.271807900000 0.010664430000 1.323929600000 +430 0.283900000000 0.011600000000 1.385600000000 +431 0.294943800000 0.012573170000 1.442635200000 +432 0.304896500000 0.013582720000 1.494803500000 +433 0.313787300000 0.014629680000 1.542190300000 +434 0.321645400000 0.015715090000 1.584880700000 +435 0.328500000000 0.016840000000 1.622960000000 +436 0.334351300000 0.018007360000 1.656404800000 +437 0.339210100000 0.019214480000 1.685295900000 +438 0.343121300000 0.020453920000 1.709874500000 +439 0.346129600000 0.021718240000 1.730382100000 +440 0.348280000000 0.023000000000 1.747060000000 +441 0.349599900000 0.024294610000 1.760044600000 +442 0.350147400000 0.025610240000 1.769623300000 +443 0.350013000000 0.026958570000 1.776263700000 +444 0.349287000000 0.028351250000 1.780433400000 +445 0.348060000000 0.029800000000 1.782600000000 +446 0.346373300000 0.031310830000 1.782968200000 +447 0.344262400000 0.032883680000 1.781699800000 +448 0.341808800000 0.034521120000 1.779198200000 +449 0.339094100000 0.036225710000 1.775867100000 +450 0.336200000000 0.038000000000 1.772110000000 +451 0.333197700000 0.039846670000 1.768258900000 +452 0.330041100000 0.041768000000 1.764039000000 +453 0.326635700000 0.043766000000 1.758943800000 +454 0.322886800000 0.045842670000 1.752466300000 +455 0.318700000000 0.048000000000 1.744100000000 +456 0.314025100000 0.050243680000 1.733559500000 +457 0.308884000000 0.052573040000 1.720858100000 +458 0.303290400000 0.054980560000 1.705936900000 +459 0.297257900000 0.057458720000 1.688737200000 +460 0.290800000000 0.060000000000 1.669200000000 +461 0.283970100000 0.062601970000 1.647528700000 +462 0.276721400000 0.065277520000 1.623412700000 +463 0.268917800000 0.068042080000 1.596022300000 +464 0.260422700000 0.070911090000 1.564528000000 +465 0.251100000000 0.073900000000 1.528100000000 +466 0.240847500000 0.077016000000 1.486111400000 +467 0.229851200000 0.080266400000 1.439521500000 +468 0.218407200000 0.083666800000 1.389879900000 +469 0.206811500000 0.087232800000 1.338736200000 +470 0.195360000000 0.090980000000 1.287640000000 +471 0.184213600000 0.094917550000 1.237422300000 +472 0.173327300000 0.099045840000 1.187824300000 +473 0.162688100000 0.103367400000 1.138761100000 +474 0.152283300000 0.107884600000 1.090148000000 +475 0.142100000000 0.112600000000 1.041900000000 +476 0.132178600000 0.117532000000 0.994197600000 +477 0.122569600000 0.122674400000 0.947347300000 +478 0.113275200000 0.127992800000 0.901453100000 +479 0.104297900000 0.133452800000 0.856619300000 +480 0.095640000000 0.139020000000 0.812950100000 +481 0.087299550000 0.144676400000 0.770517300000 +482 0.079308040000 0.150469300000 0.729444800000 +483 0.071717760000 0.156461900000 0.689913600000 +484 0.064580990000 0.162717700000 0.652104900000 +485 0.057950010000 0.169300000000 0.616200000000 +486 0.051862110000 0.176243100000 0.582328600000 +487 0.046281520000 0.183558100000 0.550416200000 +488 0.041150880000 0.191273500000 0.520337600000 +489 0.036412830000 0.199418000000 0.491967300000 +490 0.032010000000 0.208020000000 0.465180000000 +491 0.027917200000 0.217119900000 0.439924600000 +492 0.024144400000 0.226734500000 0.416183600000 +493 0.020687000000 0.236857100000 0.393882200000 +494 0.017540400000 0.247481200000 0.372945900000 +495 0.014700000000 0.258600000000 0.353300000000 +496 0.012161790000 0.270184900000 0.334857800000 +497 0.009919960000 0.282293900000 0.317552100000 +498 0.007967240000 0.295050500000 0.301337500000 +499 0.006296346000 0.308578000000 0.286168600000 +500 0.004900000000 0.323000000000 0.272000000000 +501 0.003777173000 0.338402100000 0.258817100000 +502 0.002945320000 0.354685800000 0.246483800000 +503 0.002424880000 0.371698600000 0.234771800000 +504 0.002236293000 0.389287500000 0.223453300000 +505 0.002400000000 0.407300000000 0.212300000000 +506 0.002925520000 0.425629900000 0.201169200000 +507 0.003836560000 0.444309600000 0.190119600000 +508 0.005174840000 0.463394400000 0.179225400000 +509 0.006982080000 0.482939500000 0.168560800000 +510 0.009300000000 0.503000000000 0.158200000000 +511 0.012149490000 0.523569300000 0.148138300000 +512 0.015535880000 0.544512000000 0.138375800000 +513 0.019477520000 0.565690000000 0.128994200000 +514 0.023992770000 0.586965300000 0.120075100000 +515 0.029100000000 0.608200000000 0.111700000000 +516 0.034814850000 0.629345600000 0.103904800000 +517 0.041120160000 0.650306800000 0.096667480000 +518 0.047985040000 0.670875200000 0.089982720000 +519 0.055378610000 0.690842400000 0.083845310000 +520 0.063270000000 0.710000000000 0.078249990000 +521 0.071635010000 0.728185200000 0.073208990000 +522 0.080462240000 0.745463600000 0.068678160000 +523 0.089739960000 0.761969400000 0.064567840000 +524 0.099456450000 0.777836800000 0.060788350000 +525 0.109600000000 0.793200000000 0.057250010000 +526 0.120167400000 0.808110400000 0.053904350000 +527 0.131114500000 0.822496200000 0.050746640000 +528 0.142367900000 0.836306800000 0.047752760000 +529 0.153854200000 0.849491600000 0.044898590000 +530 0.165500000000 0.862000000000 0.042160000000 +531 0.177257100000 0.873810800000 0.039507280000 +532 0.189140000000 0.884962400000 0.036935640000 +533 0.201169400000 0.895493600000 0.034458360000 +534 0.213365800000 0.905443200000 0.032088720000 +535 0.225749900000 0.914850100000 0.029840000000 +536 0.238320900000 0.923734800000 0.027711810000 +537 0.251066800000 0.932092400000 0.025694440000 +538 0.263992200000 0.939922600000 0.023787160000 +539 0.277101700000 0.947225200000 0.021989250000 +540 0.290400000000 0.954000000000 0.020300000000 +541 0.303891200000 0.960256100000 0.018718050000 +542 0.317572600000 0.966007400000 0.017240360000 +543 0.331438400000 0.971260600000 0.015863640000 +544 0.345482800000 0.976022500000 0.014584610000 +545 0.359700000000 0.980300000000 0.013400000000 +546 0.374083900000 0.984092400000 0.012307230000 +547 0.388639600000 0.987418200000 0.011301880000 +548 0.403378400000 0.990312800000 0.010377920000 +549 0.418311500000 0.992811600000 0.009529306000 +550 0.433449900000 0.994950100000 0.008749999000 +551 0.448795300000 0.996710800000 0.008035200000 +552 0.464336000000 0.998098300000 0.007381600000 +553 0.480064000000 0.999112000000 0.006785400000 +554 0.495971300000 0.999748200000 0.006242800000 +555 0.512050100000 1.000000000000 0.005749999000 +556 0.528295900000 0.999856700000 0.005303600000 +557 0.544691600000 0.999304600000 0.004899800000 +558 0.561209400000 0.998325500000 0.004534200000 +559 0.577821500000 0.996898700000 0.004202400000 +560 0.594500000000 0.995000000000 0.003900000000 +561 0.611220900000 0.992600500000 0.003623200000 +562 0.627975800000 0.989742600000 0.003370600000 +563 0.644760200000 0.986444400000 0.003141400000 +564 0.661569700000 0.982724100000 0.002934800000 +565 0.678400000000 0.978600000000 0.002749999000 +566 0.695239200000 0.974083700000 0.002585200000 +567 0.712058600000 0.969171200000 0.002438600000 +568 0.728828400000 0.963856800000 0.002309400000 +569 0.745518800000 0.958134900000 0.002196800000 +570 0.762100000000 0.952000000000 0.002100000000 +571 0.778543200000 0.945450400000 0.002017733000 +572 0.794825600000 0.938499200000 0.001948200000 +573 0.810926400000 0.931162800000 0.001889800000 +574 0.826824800000 0.923457600000 0.001840933000 +575 0.842500000000 0.915400000000 0.001800000000 +576 0.857932500000 0.907006400000 0.001766267000 +577 0.873081600000 0.898277200000 0.001737800000 +578 0.887894400000 0.889204800000 0.001711200000 +579 0.902318100000 0.879781600000 0.001683067000 +580 0.916300000000 0.870000000000 0.001650001000 +581 0.929799500000 0.859861300000 0.001610133000 +582 0.942798400000 0.849392000000 0.001564400000 +583 0.955277600000 0.838622000000 0.001513600000 +584 0.967217900000 0.827581300000 0.001458533000 +585 0.978600000000 0.816300000000 0.001400000000 +586 0.989385600000 0.804794700000 0.001336667000 +587 0.999548800000 0.793082000000 0.001270000000 +588 1.009089200000 0.781192000000 0.001205000000 +589 1.018006400000 0.769154700000 0.001146667000 +590 1.026300000000 0.757000000000 0.001100000000 +591 1.033982700000 0.744754100000 0.001068800000 +592 1.040986000000 0.732422400000 0.001049400000 +593 1.047188000000 0.720003600000 0.001035600000 +594 1.052466700000 0.707496500000 0.001021200000 +595 1.056700000000 0.694900000000 0.001000000000 +596 1.059794400000 0.682219200000 0.000968640000 +597 1.061799200000 0.669471600000 0.000929920000 +598 1.062806800000 0.656674400000 0.000886880000 +599 1.062909600000 0.643844800000 0.000842560000 +600 1.062200000000 0.631000000000 0.000800000000 +601 1.060735200000 0.618155500000 0.000760960000 +602 1.058443600000 0.605314400000 0.000723680000 +603 1.055224400000 0.592475600000 0.000685920000 +604 1.050976800000 0.579637900000 0.000645440000 +605 1.045600000000 0.566800000000 0.000600000000 +606 1.039036900000 0.553961100000 0.000547866700 +607 1.031360800000 0.541137200000 0.000491600000 +608 1.022666200000 0.528352800000 0.000435400000 +609 1.013047700000 0.515632300000 0.000383466700 +610 1.002600000000 0.503000000000 0.000340000000 +611 0.991367500000 0.490468800000 0.000307253300 +612 0.979331400000 0.478030400000 0.000283160000 +613 0.966491600000 0.465677600000 0.000265440000 +614 0.952847900000 0.453403200000 0.000251813300 +615 0.938400000000 0.441200000000 0.000240000000 +616 0.923194000000 0.429080000000 0.000229546700 +617 0.907244000000 0.417036000000 0.000220640000 +618 0.890502000000 0.405032000000 0.000211960000 +619 0.872920000000 0.393032000000 0.000202186700 +620 0.854449900000 0.381000000000 0.000190000000 +621 0.835084000000 0.368918400000 0.000174213300 +622 0.814946000000 0.356827200000 0.000155640000 +623 0.794186000000 0.344776800000 0.000135960000 +624 0.772954000000 0.332817600000 0.000116853300 +625 0.751400000000 0.321000000000 0.000100000000 +626 0.729583600000 0.309338100000 0.000086133330 +627 0.707588800000 0.297850400000 0.000074600000 +628 0.685602200000 0.286593600000 0.000065000000 +629 0.663810400000 0.275624500000 0.000056933330 +630 0.642400000000 0.265000000000 0.000049999990 +631 0.621514900000 0.254763200000 0.000044160000 +632 0.601113800000 0.244889600000 0.000039480000 +633 0.581105200000 0.235334400000 0.000035720000 +634 0.561397700000 0.226052800000 0.000032640000 +635 0.541900000000 0.217000000000 0.000030000000 +636 0.522599500000 0.208161600000 0.000027653330 +637 0.503546400000 0.199548800000 0.000025560000 +638 0.484743600000 0.191155200000 0.000023640000 +639 0.466193900000 0.182974400000 0.000021813330 +640 0.447900000000 0.175000000000 0.000020000000 +641 0.429861300000 0.167223500000 0.000018133330 +642 0.412098000000 0.159646400000 0.000016200000 +643 0.394644000000 0.152277600000 0.000014200000 +644 0.377533300000 0.145125900000 0.000012133330 +645 0.360800000000 0.138200000000 0.000010000000 +646 0.344456300000 0.131500300000 0.000007733333 +647 0.328516800000 0.125024800000 0.000005400000 +648 0.313019200000 0.118779200000 0.000003200000 +649 0.298001100000 0.112769100000 0.000001333333 +650 0.283500000000 0.107000000000 0.000000000000 +651 0.269544800000 0.101476200000 0.000000000000 +652 0.256118400000 0.096188640000 0.000000000000 +653 0.243189600000 0.091122960000 0.000000000000 +654 0.230727200000 0.086264850000 0.000000000000 +655 0.218700000000 0.081600000000 0.000000000000 +656 0.207097100000 0.077120640000 0.000000000000 +657 0.195923200000 0.072825520000 0.000000000000 +658 0.185170800000 0.068710080000 0.000000000000 +659 0.174832300000 0.064769760000 0.000000000000 +660 0.164900000000 0.061000000000 0.000000000000 +661 0.155366700000 0.057396210000 0.000000000000 +662 0.146230000000 0.053955040000 0.000000000000 +663 0.137490000000 0.050673760000 0.000000000000 +664 0.129146700000 0.047549650000 0.000000000000 +665 0.121200000000 0.044580000000 0.000000000000 +666 0.113639700000 0.041758720000 0.000000000000 +667 0.106465000000 0.039084960000 0.000000000000 +668 0.099690440000 0.036563840000 0.000000000000 +669 0.093330610000 0.034200480000 0.000000000000 +670 0.087400000000 0.032000000000 0.000000000000 +671 0.081900960000 0.029962610000 0.000000000000 +672 0.076804280000 0.028076640000 0.000000000000 +673 0.072077120000 0.026329360000 0.000000000000 +674 0.067686640000 0.024708050000 0.000000000000 +675 0.063600000000 0.023200000000 0.000000000000 +676 0.059806850000 0.021800770000 0.000000000000 +677 0.056282160000 0.020501120000 0.000000000000 +678 0.052971040000 0.019281080000 0.000000000000 +679 0.049818610000 0.018120690000 0.000000000000 +680 0.046770000000 0.017000000000 0.000000000000 +681 0.043784050000 0.015903790000 0.000000000000 +682 0.040875360000 0.014837180000 0.000000000000 +683 0.038072640000 0.013810680000 0.000000000000 +684 0.035404610000 0.012834780000 0.000000000000 +685 0.032900000000 0.011920000000 0.000000000000 +686 0.030564190000 0.011068310000 0.000000000000 +687 0.028380560000 0.010273390000 0.000000000000 +688 0.026344840000 0.009533311000 0.000000000000 +689 0.024452750000 0.008846157000 0.000000000000 +690 0.022700000000 0.008210000000 0.000000000000 +691 0.021084290000 0.007623781000 0.000000000000 +692 0.019599880000 0.007085424000 0.000000000000 +693 0.018237320000 0.006591476000 0.000000000000 +694 0.016987170000 0.006138485000 0.000000000000 +695 0.015840000000 0.005723000000 0.000000000000 +696 0.014790640000 0.005343059000 0.000000000000 +697 0.013831320000 0.004995796000 0.000000000000 +698 0.012948680000 0.004676404000 0.000000000000 +699 0.012129200000 0.004380075000 0.000000000000 +700 0.011359160000 0.004102000000 0.000000000000 +701 0.010629350000 0.003838453000 0.000000000000 +702 0.009938846000 0.003589099000 0.000000000000 +703 0.009288422000 0.003354219000 0.000000000000 +704 0.008678854000 0.003134093000 0.000000000000 +705 0.008110916000 0.002929000000 0.000000000000 +706 0.007582388000 0.002738139000 0.000000000000 +707 0.007088746000 0.002559876000 0.000000000000 +708 0.006627313000 0.002393244000 0.000000000000 +709 0.006195408000 0.002237275000 0.000000000000 +710 0.005790346000 0.002091000000 0.000000000000 +711 0.005409826000 0.001953587000 0.000000000000 +712 0.005052583000 0.001824580000 0.000000000000 +713 0.004717512000 0.001703580000 0.000000000000 +714 0.004403507000 0.001590187000 0.000000000000 +715 0.004109457000 0.001484000000 0.000000000000 +716 0.003833913000 0.001384496000 0.000000000000 +717 0.003575748000 0.001291268000 0.000000000000 +718 0.003334342000 0.001204092000 0.000000000000 +719 0.003109075000 0.001122744000 0.000000000000 +720 0.002899327000 0.001047000000 0.000000000000 +721 0.002704348000 0.000976589600 0.000000000000 +722 0.002523020000 0.000911108800 0.000000000000 +723 0.002354168000 0.000850133200 0.000000000000 +724 0.002196616000 0.000793238400 0.000000000000 +725 0.002049190000 0.000740000000 0.000000000000 +726 0.001910960000 0.000690082700 0.000000000000 +727 0.001781438000 0.000643310000 0.000000000000 +728 0.001660110000 0.000599496000 0.000000000000 +729 0.001546459000 0.000558454700 0.000000000000 +730 0.001439971000 0.000520000000 0.000000000000 +731 0.001340042000 0.000483913600 0.000000000000 +732 0.001246275000 0.000450052800 0.000000000000 +733 0.001158471000 0.000418345200 0.000000000000 +734 0.001076430000 0.000388718400 0.000000000000 +735 0.000999949300 0.000361100000 0.000000000000 +736 0.000928735800 0.000335383500 0.000000000000 +737 0.000862433200 0.000311440400 0.000000000000 +738 0.000800750300 0.000289165600 0.000000000000 +739 0.000743396000 0.000268453900 0.000000000000 +740 0.000690078600 0.000249200000 0.000000000000 +741 0.000640515600 0.000231301900 0.000000000000 +742 0.000594502100 0.000214685600 0.000000000000 +743 0.000551864600 0.000199288400 0.000000000000 +744 0.000512429000 0.000185047500 0.000000000000 +745 0.000476021300 0.000171900000 0.000000000000 +746 0.000442453600 0.000159778100 0.000000000000 +747 0.000411511700 0.000148604400 0.000000000000 +748 0.000382981400 0.000138301600 0.000000000000 +749 0.000356649100 0.000128792500 0.000000000000 +750 0.000332301100 0.000120000000 0.000000000000 +751 0.000309758600 0.000111859500 0.000000000000 +752 0.000288887100 0.000104322400 0.000000000000 +753 0.000269539400 0.000097335600 0.000000000000 +754 0.000251568200 0.000090845870 0.000000000000 +755 0.000234826100 0.000084800000 0.000000000000 +756 0.000219171000 0.000079146670 0.000000000000 +757 0.000204525800 0.000073858000 0.000000000000 +758 0.000190840500 0.000068916000 0.000000000000 +759 0.000178065400 0.000064302670 0.000000000000 +760 0.000166150500 0.000060000000 0.000000000000 +761 0.000155023600 0.000055981870 0.000000000000 +762 0.000144621900 0.000052225600 0.000000000000 +763 0.000134909800 0.000048718400 0.000000000000 +764 0.000125852000 0.000045447470 0.000000000000 +765 0.000117413000 0.000042400000 0.000000000000 +766 0.000109551500 0.000039561040 0.000000000000 +767 0.000102224500 0.000036915120 0.000000000000 +768 0.000095394450 0.000034448680 0.000000000000 +769 0.000089023900 0.000032148160 0.000000000000 +770 0.000083075270 0.000030000000 0.000000000000 +771 0.000077512690 0.000027991250 0.000000000000 +772 0.000072313040 0.000026113560 0.000000000000 +773 0.000067457780 0.000024360240 0.000000000000 +774 0.000062928440 0.000022724610 0.000000000000 +775 0.000058706520 0.000021200000 0.000000000000 +776 0.000054770280 0.000019778550 0.000000000000 +777 0.000051099180 0.000018452850 0.000000000000 +778 0.000047676540 0.000017216870 0.000000000000 +779 0.000044485670 0.000016064590 0.000000000000 +780 0.000041509940 0.000014990000 0.000000000000 +781 0.000038733240 0.000013987280 0.000000000000 +782 0.000036142030 0.000013051550 0.000000000000 +783 0.000033723520 0.000012178180 0.000000000000 +784 0.000031464870 0.000011362540 0.000000000000 +785 0.000029353260 0.000010600000 0.000000000000 +786 0.000027375730 0.000009885877 0.000000000000 +787 0.000025524330 0.000009217304 0.000000000000 +788 0.000023793760 0.000008592362 0.000000000000 +789 0.000022178700 0.000008009133 0.000000000000 +790 0.000020673830 0.000007465700 0.000000000000 +791 0.000019272260 0.000006959567 0.000000000000 +792 0.000017966400 0.000006487995 0.000000000000 +793 0.000016749910 0.000006048699 0.000000000000 +794 0.000015616480 0.000005639396 0.000000000000 +795 0.000014559770 0.000005257800 0.000000000000 +796 0.000013573870 0.000004901771 0.000000000000 +797 0.000012654360 0.000004569720 0.000000000000 +798 0.000011797230 0.000004260194 0.000000000000 +799 0.000010998440 0.000003971739 0.000000000000 +800 0.000010253980 0.000003702900 0.000000000000 +801 0.000009559646 0.000003452163 0.000000000000 +802 0.000008912044 0.000003218302 0.000000000000 +803 0.000008308358 0.000003000300 0.000000000000 +804 0.000007745769 0.000002797139 0.000000000000 +805 0.000007221456 0.000002607800 0.000000000000 +806 0.000006732475 0.000002431220 0.000000000000 +807 0.000006276423 0.000002266531 0.000000000000 +808 0.000005851304 0.000002113013 0.000000000000 +809 0.000005455118 0.000001969943 0.000000000000 +810 0.000005085868 0.000001836600 0.000000000000 +811 0.000004741466 0.000001712230 0.000000000000 +812 0.000004420236 0.000001596228 0.000000000000 +813 0.000004120783 0.000001488090 0.000000000000 +814 0.000003841716 0.000001387314 0.000000000000 +815 0.000003581652 0.000001293400 0.000000000000 +816 0.000003339127 0.000001205820 0.000000000000 +817 0.000003112949 0.000001124143 0.000000000000 +818 0.000002902121 0.000001048009 0.000000000000 +819 0.000002705645 0.000000977058 0.000000000000 +820 0.000002522525 0.000000910930 0.000000000000 +821 0.000002351726 0.000000849251 0.000000000000 +822 0.000002192415 0.000000791721 0.000000000000 +823 0.000002043902 0.000000738090 0.000000000000 +824 0.000001905497 0.000000688110 0.000000000000 +825 0.000001776509 0.000000641530 0.000000000000 +826 0.000001656215 0.000000598090 0.000000000000 +827 0.000001544022 0.000000557575 0.000000000000 +828 0.000001439440 0.000000519808 0.000000000000 +829 0.000001341977 0.000000484612 0.000000000000 +830 0.000001251141 0.000000451810 0.000000000000 \ No newline at end of file diff --git a/color_matching_func.py b/color_matching_func.py new file mode 100644 index 0000000..afbd849 --- /dev/null +++ b/color_matching_func.py @@ -0,0 +1,43 @@ +import numpy as np +import pandas as pd + +MIN_WAVELENGTH = 360 +MAX_WAVELENGTH = 830 + +def get_color_matching_functions(): + # CIE 1931 color matching functions for wavelengths from 380 nm to 780 nm + + # Read the text file and extract the values + file_path = 'ciexyz31.txt' + + wavelengths = [] + x_bar = [] + y_bar = [] + z_bar = [] + + with open(file_path, 'r') as file: + for line in file: + parts = line.split() + if len(parts) == 4: + wavelength, x, y, z = parts + wavelengths.append(float(wavelength)) + x_bar.append(float(x)) + y_bar.append(float(y)) + z_bar.append(float(z)) + + # print("Wavelengths:", wavelengths) + # print("x_bar:", x_bar) + # print("y_bar:", y_bar) + # print("z_bar:", z_bar) + + + cie_data = { + 'wavelength': wavelengths, + 'x_bar': x_bar, + 'y_bar': y_bar, + 'z_bar': z_bar + } + + return pd.DataFrame(cie_data) + +get_color_matching_functions() diff --git a/data/testSources.txt b/data/testSources.txt deleted file mode 100644 index 48dd85b..0000000 --- a/data/testSources.txt +++ /dev/null @@ -1,202 +0,0 @@ -wavelength Warm LED Cool LED HMI Xenon -380 0.00208181818181818 0.0198245614035088 1.2046332046332000 0.0453409090909091 -382 0.00520000000000000 0.0153859649122807 0.9974259974259970 0.0196590909090909 -384 0.00757272727272727 0.0103859649122807 1.0193050193050200 0.0376136363636364 -386 0.01145454545454550 0.0033508771929825 1.1209781209781200 0.0201136363636364 -388 0.00336363636363636 0.0099122807017544 1.2342342342342300 0.0397727272727273 -390 0.00890000000000000 0.0070175438596491 1.0900900900900900 0.0425000000000000 -392 0.01354545454545450 0.0154385964912281 1.2175032175032200 0.0296590909090909 -394 0.02090909090909090 0.0065789473684211 1.1145431145431100 0.0468181818181818 -396 0.02981818181818180 0.0087192982456140 1.2471042471042500 0.0557386363636364 -398 0.01645454545454550 0.0067368421052632 1.1338481338481300 0.0670454545454546 -400 0.00810909090909091 0.0053508771929825 1.1402831402831400 0.0846590909090909 -402 0.01400000000000000 0.0054736842105263 1.2998712998713000 0.1125000000000000 -404 0.02309090909090910 0.0100877192982456 1.3513513513513500 0.1443181818181820 -406 0.02709090909090910 0.0093333333333333 1.4800514800514800 0.1931818181818180 -408 0.02081818181818180 0.0093508771929825 1.4929214929214900 0.2392045454545450 -410 0.01690909090909090 0.0097192982456140 1.5958815958816000 0.3085227272727270 -412 0.02072727272727270 0.0108421052631579 1.5701415701415700 0.3579545454545450 -414 0.02554545454545450 0.0112280701754386 1.6473616473616500 0.4352272727272730 -416 0.03027272727272730 0.0116315789473684 1.7117117117117100 0.5085227272727270 -418 0.03709090909090910 0.0200000000000000 1.7245817245817200 0.5909090909090910 -420 0.04336363636363640 0.0257894736842105 1.7631917631917600 0.6704545454545450 -422 0.05554545454545450 0.0345614035087719 1.7889317889317900 0.7613636363636360 -424 0.07245454545454550 0.0471929824561403 1.6344916344916300 0.8181818181818180 -426 0.08709090909090910 0.0629824561403509 1.4671814671814700 0.8806818181818180 -428 0.11272727272727300 0.0854385964912281 1.3513513513513500 0.9431818181818180 -430 0.14545454545454500 0.1200000000000000 1.2857142857142900 1.0056818181818200 -432 0.19454545454545500 0.1673684210526320 1.3127413127413100 1.0454545454545500 -434 0.25090909090909100 0.2228070175438600 1.4800514800514800 1.0738636363636400 -436 0.30272727272727300 0.2929824561403510 1.5572715572715600 1.1193181818181800 -438 0.35545454545454500 0.3947368421052630 1.4157014157014200 1.1250000000000000 -440 0.39363636363636400 0.5017543859649120 1.1389961389961400 1.1250000000000000 -442 0.45727272727272700 0.6385964912280700 0.9549549549549550 1.1363636363636400 -444 0.54272727272727300 0.8105263157894740 0.9240669240669240 1.1420454545454500 -446 0.63818181818181800 1.0052631578947400 0.9459459459459460 1.1363636363636400 -448 0.74000000000000000 1.2035087719298200 0.9794079794079790 1.1306818181818200 -450 0.83545454545454500 1.3736842105263200 0.9897039897039900 1.1022727272727300 -452 0.93636363636363600 1.5631578947368400 1.0398970398970400 1.0852272727272700 -454 1.01818181818182000 1.6771929824561400 1.0990990990991000 1.0568181818181800 -456 1.08181818181818000 1.7421052631578900 1.1685971685971700 1.0340909090909100 -458 1.11818181818182000 1.7333333333333300 1.2226512226512200 1.0056818181818200 -460 1.13636363636364000 1.6666666666666700 1.2033462033462000 0.9772727272727270 -462 1.11818181818182000 1.5543859649122800 1.1608751608751600 0.9488636363636360 -464 1.07272727272727000 1.4192982456140400 1.1093951093951100 0.9147727272727270 -466 1.01818181818182000 1.2894736842105300 1.0965250965251000 0.8920454545454550 -468 0.92727272727272700 1.1350877192982500 1.0540540540540500 0.8465909090909090 -470 0.84272727272727300 1.0245614035087700 1.0643500643500600 0.8181818181818180 -472 0.77909090909090900 0.9333333333333330 1.0656370656370700 0.7954545454545450 -474 0.71454545454545500 0.8561403508771930 1.0501930501930500 0.7727272727272730 -476 0.64272727272727300 0.7771929824561400 1.0489060489060500 0.7443181818181820 -478 0.58363636363636400 0.7122807017543860 1.0360360360360400 0.7215909090909090 -480 0.54454545454545500 0.6666666666666670 1.0604890604890600 0.7045454545454550 -482 0.51000000000000000 0.6298245614035090 1.0450450450450500 0.6818181818181820 -484 0.48727272727272700 0.6070175438596490 1.0012870012870000 0.6818181818181820 -486 0.46545454545454500 0.5947368421052630 1.0012870012870000 0.6704545454545450 -488 0.44909090909090900 0.5894736842105260 1.0051480051480100 0.6590909090909090 -490 0.43545454545454500 0.5929824561403510 1.0218790218790200 0.6590909090909090 -492 0.43000000000000000 0.6140350877192980 1.0077220077220100 0.6647727272727270 -494 0.43454545454545500 0.6368421052631580 1.0038610038610000 0.6704545454545450 -496 0.44909090909090900 0.6561403508771930 0.9845559845559850 0.6761363636363640 -498 0.48545454545454500 0.6947368421052630 0.9884169884169880 0.6988636363636360 -500 0.53363636363636400 0.7350877192982460 1.0296010296010300 0.7159090909090910 -502 0.59272727272727300 0.7701754385964910 1.0797940797940800 0.7329545454545450 -504 0.67363636363636400 0.8017543859649120 1.1184041184041200 0.7556818181818180 -506 0.76272727272727300 0.8385964912280700 1.0926640926640900 0.7784090909090910 -508 0.87181818181818200 0.8736842105263160 1.0450450450450500 0.8011363636363640 -510 0.98181818181818200 0.9052631578947370 1.0154440154440200 0.8295454545454550 -512 1.13636363636364000 0.9456140350877190 1.0128700128700100 0.8636363636363640 -514 1.26363636363636000 0.9684210526315790 1.0090090090090100 0.8806818181818180 -516 1.40000000000000000 0.9929824561403510 0.9755469755469760 0.9034090909090910 -518 1.51818181818182000 1.0140350877193000 0.9369369369369370 0.9261363636363640 -520 1.63636363636364000 1.0368421052631600 0.9124839124839130 0.9545454545454550 -522 1.70909090909091000 1.0403508771929800 0.8764478764478760 0.9602272727272730 -524 1.75454545454545000 1.0526315789473700 0.8931788931788930 0.9772727272727270 -526 1.77272727272727000 1.0631578947368400 0.9227799227799230 0.9943181818181820 -528 1.77272727272727000 1.0719298245614000 0.9703989703989700 1.0056818181818200 -530 1.74545454545455000 1.0771929824561400 0.9961389961389960 1.0170454545454500 -532 1.69090909090909000 1.0789473684210500 0.9897039897039900 1.0170454545454500 -534 1.62727272727273000 1.0754385964912300 0.9485199485199490 1.0227272727272700 -536 1.57272727272727000 1.0736842105263200 0.9189189189189190 1.0227272727272700 -538 1.54545454545455000 1.0771929824561400 0.9395109395109390 1.0340909090909100 -540 1.52727272727273000 1.0684210526315800 0.9794079794079790 1.0340909090909100 -542 1.50909090909091000 1.0614035087719300 1.1866151866151900 1.0284090909090900 -544 1.49090909090909000 1.0596491228070200 1.6473616473616500 1.0397727272727300 -546 1.42727272727273000 1.0526315789473700 1.8018018018018000 1.0340909090909100 -548 1.33636363636364000 1.0438596491228100 1.7117117117117100 1.0284090909090900 -550 1.24545454545455000 1.0403508771929800 1.2998712998713000 1.0227272727272700 -552 1.15454545454545000 1.0280701754386000 1.0012870012870000 1.0170454545454500 -554 1.09090909090909000 1.0228070175438600 0.9691119691119690 1.0113636363636400 -556 1.05454545454545000 1.0140350877193000 0.9613899613899620 1.0056818181818200 -558 1.01818181818182000 1.0105263157894700 0.9652509652509650 1.0056818181818200 -560 1.00000000000000000 1.0000000000000000 1.0000000000000000 1.0000000000000000 -562 0.98181818181818200 0.9947368421052630 1.0952380952381000 0.9943181818181820 -564 0.97272727272727300 0.9859649122807020 1.1673101673101700 0.9829545454545450 -566 0.98181818181818200 0.9824561403508770 1.2084942084942100 0.9886363636363640 -568 0.99090909090909100 0.9771929824561400 1.1840411840411800 0.9829545454545450 -570 1.00909090909091000 0.9701754385964910 1.1595881595881600 0.9772727272727270 -572 1.05454545454545000 0.9701754385964910 1.1943371943371900 0.9829545454545450 -574 1.11818181818182000 0.9649122807017540 1.4157014157014200 0.9772727272727270 -576 1.20000000000000000 0.9614035087719300 1.6216216216216200 0.9772727272727270 -578 1.30909090909091000 0.9596491228070180 1.6731016731016700 0.9829545454545450 -580 1.44545454545455000 0.9561403508771930 1.5057915057915100 0.9772727272727270 -582 1.62727272727273000 0.9508771929824560 1.2831402831402800 0.9829545454545450 -584 1.87272727272727000 0.9473684210526320 1.1415701415701400 0.9829545454545450 -586 2.19090909090909000 0.9473684210526320 1.1943371943371900 0.9943181818181820 -588 2.51818181818182000 0.9526315789473680 1.2509652509652500 1.0000000000000000 -590 2.81818181818182000 0.9508771929824560 1.2522522522522500 1.0056818181818200 -592 2.99090909090909000 0.9456140350877190 1.2123552123552100 1.0113636363636400 -594 3.00000000000000000 0.9473684210526320 1.1994851994852000 1.0170454545454500 -596 2.78181818181818000 0.9491228070175440 1.2625482625482600 1.0284090909090900 -598 2.39090909090909000 0.9421052631578950 1.2998712998713000 1.0340909090909100 -600 2.01818181818182000 0.9403508771929830 1.2496782496782500 1.0397727272727300 -602 1.72727272727273000 0.9403508771929830 1.1467181467181500 1.0511363636363600 -604 1.51818181818182000 0.9350877192982460 1.0643500643500600 1.0568181818181800 -606 1.42727272727273000 0.9403508771929830 1.0656370656370700 1.0625000000000000 -608 1.43636363636364000 0.9421052631578950 1.0926640926640900 1.0738636363636400 -610 1.52727272727273000 0.9385964912280700 1.0913770913770900 1.0795454545454500 -612 1.64545454545455000 0.9421052631578950 1.0797940797940800 1.0795454545454500 -614 1.77272727272727000 0.9403508771929830 1.0643500643500600 1.0738636363636400 -616 1.93636363636364000 0.9403508771929830 1.0540540540540500 1.0738636363636400 -618 2.20000000000000000 0.9421052631578950 1.0489060489060500 1.0681818181818200 -620 2.52727272727273000 0.9403508771929830 1.0077220077220100 1.0568181818181800 -622 2.95454545454545000 0.9368421052631580 1.0064350064350100 1.0397727272727300 -624 3.39090909090909000 0.9315789473684210 1.0180180180180200 1.0227272727272700 -626 3.75454545454545000 0.9280701754385970 0.9948519948519950 1.0113636363636400 -628 3.93636363636364000 0.9263157894736840 0.9356499356499360 0.9943181818181820 -630 3.81818181818182000 0.9228070175438600 0.8712998712998710 0.9772727272727270 -632 3.38181818181818000 0.9157894736842110 0.8391248391248390 0.9602272727272730 -634 2.74545454545455000 0.9105263157894740 0.8352638352638350 0.9375000000000000 -636 2.04545454545455000 0.9017543859649120 0.8442728442728440 0.9204545454545450 -638 1.53636363636364000 0.8912280701754390 0.8532818532818530 0.8863636363636360 -640 1.18181818181818000 0.8859649122807020 0.8712998712998710 0.8636363636363640 -642 0.92727272727272700 0.8736842105263160 0.8661518661518660 0.8409090909090910 -644 0.74636363636363600 0.8649122807017540 0.8725868725868730 0.8181818181818180 -646 0.62545454545454600 0.8561403508771930 0.8545688545688550 0.7897727272727270 -648 0.54454545454545500 0.8456140350877190 0.8198198198198200 0.7670454545454550 -650 0.47636363636363600 0.8315789473684210 0.7850707850707850 0.7329545454545450 -652 0.43727272727272700 0.8192982456140350 0.7670527670527670 0.7159090909090910 -654 0.39545454545454500 0.8035087719298250 0.7953667953667950 0.6875000000000000 -656 0.37090909090909100 0.7877192982456140 0.8519948519948520 0.6534090909090910 -658 0.34636363636363600 0.7684210526315790 0.8777348777348780 0.6306818181818180 -660 0.32909090909090900 0.7526315789473680 0.8970398970398970 0.6079545454545450 -662 0.31181818181818200 0.7315789473684210 0.8803088803088800 0.5795454545454550 -664 0.29636363636363600 0.7070175438596490 0.8622908622908620 0.5596590909090910 -666 0.28090909090909100 0.6807017543859650 0.8815958815958820 0.5340909090909090 -668 0.26818181818181800 0.6561403508771930 0.9369369369369370 0.5176136363636360 -670 0.25545454545454500 0.6280701754385960 0.9703989703989700 0.4931818181818180 -672 0.24545454545454500 0.6035087719298250 0.9510939510939510 0.4693181818181820 -674 0.23636363636363600 0.5824561403508770 0.8957528957528960 0.4505681818181820 -676 0.23000000000000000 0.5666666666666670 0.8095238095238100 0.4250000000000000 -678 0.21545454545454500 0.5578947368421050 0.7657657657657660 0.4073863636363640 -680 0.20909090909090900 0.5473684210526320 0.7747747747747750 0.3869318181818180 -682 0.20181818181818200 0.5368421052631580 0.8314028314028310 0.3727272727272730 -684 0.19545454545454500 0.5280701754385970 0.8545688545688550 0.3539772727272730 -686 0.19090909090909100 0.5228070175438600 0.8159588159588160 0.3369318181818180 -688 0.18090909090909100 0.5175438596491230 0.7361647361647360 0.3193181818181820 -690 0.16818181818181800 0.5122807017543860 0.6731016731016730 0.3034090909090910 -692 0.15818181818181800 0.5000000000000000 0.6859716859716860 0.3000000000000000 -694 0.16090909090909100 0.4877192982456140 0.7516087516087520 0.2761363636363640 -696 0.15000000000000000 0.4754385964912280 0.8314028314028310 0.2681818181818180 -698 0.14727272727272700 0.4631578947368420 0.8519948519948520 0.2545454545454550 -700 0.13818181818181800 0.4508771929824560 0.7696267696267700 0.2431818181818180 -702 0.13545454545454500 0.4368421052631580 0.6628056628056630 0.2323863636363640 -704 0.13000000000000000 0.4210526315789470 0.5817245817245820 0.2210227272727270 -706 0.12727272727272700 0.4105263157894740 0.5122265122265120 0.2113636363636360 -708 0.12818181818181800 0.3982456140350880 0.4942084942084940 0.1971590909090910 -710 0.11909090909090900 0.3824561403508770 0.4658944658944660 0.1852272727272730 -712 0.11363636363636400 0.3701754385964910 0.4555984555984560 0.1823863636363640 -714 0.11090909090909100 0.3543859649122810 0.4440154440154440 0.1727272727272730 -716 0.09727272727272730 0.3438596491228070 0.4311454311454310 0.1659090909090910 -718 0.09272727272727270 0.3315789473684210 0.4478764478764480 0.1602272727272730 -720 0.08736363636363640 0.3175438596491230 0.4620334620334620 0.1545454545454550 -722 0.09090909090909090 0.3105263157894740 0.4813384813384810 0.1545454545454550 -724 0.08481818181818180 0.2929824561403510 0.4954954954954950 0.1426136363636360 -726 0.07781818181818180 0.2824561403508770 0.4851994851994850 0.1380681818181820 -728 0.08372727272727270 0.2719298245614030 0.4671814671814670 0.1329545454545450 -730 0.07390909090909090 0.2596491228070180 0.4581724581724580 0.1261363636363640 -732 0.06800000000000000 0.2491228070175440 0.4259974259974260 0.1278409090909090 -734 0.06163636363636360 0.2421052631578950 0.4182754182754180 0.1215909090909090 -736 0.06400000000000000 0.2333333333333330 0.4041184041184040 0.1164772727272730 -738 0.05654545454545450 0.2228070175438600 0.4272844272844270 0.1090909090909090 -740 0.05845454545454550 0.2140350877192980 0.4285714285714290 0.1090909090909090 -742 0.05609090909090910 0.2052631578947370 0.4028314028314030 0.1034090909090910 -744 0.05018181818181820 0.1982456140350880 0.4272844272844270 0.0909090909090909 -746 0.05790909090909090 0.1842105263157890 0.4002574002574000 0.0943181818181818 -748 0.04518181818181820 0.1842105263157890 0.4092664092664090 0.0897727272727273 -750 0.04300000000000000 0.1771929824561400 0.4337194337194340 0.0801136363636364 -752 0.04354545454545450 0.1712280701754390 0.4530244530244530 0.0829545454545455 -754 0.04527272727272730 0.1626315789473680 0.5353925353925350 0.0806818181818182 -756 0.04518181818181820 0.1557894736842110 0.5534105534105530 0.0687500000000000 -758 0.04618181818181820 0.1471929824561400 0.5804375804375800 0.0778409090909091 -760 0.05400000000000000 0.1422807017543860 0.5585585585585590 0.0778409090909091 -762 0.04845454545454550 0.1343859649122810 0.5366795366795370 0.0738636363636364 -764 0.05909090909090910 0.1245614035087720 0.6319176319176320 0.0544318181818182 -766 0.04500000000000000 0.1270175438596490 0.6808236808236810 0.0795454545454545 -768 0.04527272727272730 0.1133333333333330 0.6383526383526380 0.0619318181818182 -770 0.04436363636363640 0.1156140350877190 0.6550836550836550 0.0596590909090909 -772 0.03209090909090910 0.1191228070175440 0.5804375804375800 0.0681818181818182 -774 0.03454545454545450 0.1064912280701750 0.5096525096525100 0.0590909090909091 -776 0.01336363636363640 0.1003508771929820 0.4671814671814670 0.0602272727272727 -778 0.03745454545454550 0.0998245614035088 0.4157014157014160 0.0533522727272727 -780 0.03290909090909090 0.0970175438596491 0.4504504504504500 0.0579545454545455 \ No newline at end of file diff --git a/daylight_module.py b/daylight_module.py new file mode 100644 index 0000000..006d47a --- /dev/null +++ b/daylight_module.py @@ -0,0 +1,138 @@ +import numpy as np +import scipy.interpolate as interp + +def daylight(cct, wl=None): + # Validate input + if cct is None: + raise ValueError('missing required input argument cct') + + if wl is None: + wl = np.arange(300, 835, 5) + + if not isinstance(cct, (float, int)): + raise ValueError('cct must be a float or int') + + if not isinstance(wl, (list, np.ndarray)): + raise ValueError('wl must be a list or numpy array') + + if cct < 4000: + raise ValueError('D-Illuminants are not defined for CCTs <4000K') + + if cct > 25000: + raise ValueError('D-Illuminants are not defined for CCTs >25000K') + + wl = np.array(wl).reshape(-1) + + # Define constants + s_series = np.array([ + [300, 0.04, 0.02, 0], + [310, 6, 4.5, 2], + [320, 29.6, 22.4, 4], + [330, 55.3, 42, 8.5], + [340, 57.3, 40.6, 7.8], + [350, 61.8, 41.6, 6.7], + [360, 61.5, 38, 5.3], + [370, 68.8, 42.4, 6.1], + [380, 63.4, 38.5, 3.0], + [390, 65.8, 35, 1.2], + [400, 94.8, 43.4, -1.1], + [410, 104.8, 46.3, -0.5], + [420, 105.9, 43.9, -0.7], + [430, 96.8, 37.1, -1.2], + [440, 113.9, 36.7, -2.6], + [450, 125.6, 35.9, -2.9], + [460, 125.5, 32.6, -2.8], + [470, 121.3, 27.9, -2.6], + [480, 121.3, 24.3, -2.6], + [490, 113.5, 20.1, -1.8], + [500, 113.1, 16.2, -1.5], + [510, 110.8, 13.2, -1.3], + [520, 106.5, 8.6, -1.2], + [530, 108.8, 6.1, -1], + [540, 105.3, 4.2, -0.5], + [550, 104.4, 1.9, -0.3], + [560, 100, 0, 0], + [570, 96, -1.6, 0.2], + [580, 95.1, -3.5, 0.5], + [590, 89.1, -3.5, 2.1], + [600, 90.5, -5.8, 3.2], + [610, 90.3, -7.2, 4.1], + [620, 88.4, -8.6, 4.7], + [630, 84, -9.5, 5.1], + [640, 85.1, -10.9, 6.7], + [650, 81.9, -10.7, 7.3], + [660, 82.6, -12, 8.6], + [670, 84.9, -14, 9.8], + [680, 81.3, -13.6, 10.2], + [690, 71.9, -12, 8.3], + [700, 74.3, -13.3, 9.6], + [710, 76.4, -12.9, 8.5], + [720, 63.3, -10.6, 7], + [730, 71.7, -11.6, 7.6], + [740, 77, -12.2, 8], + [750, 65.2, -10.2, 6.7], + [760, 47.7, -7.8, 5.2], + [770, 68.6, -11.2, 7.4], + [780, 65, -10.4, 6.8], + [790, 66, -10.6, 7], + [800, 61, -9.7, 6.4], + [810, 53.3, -8.3, 5.5], + [820, 58.9, -9.3, 6.1], + [830, 61.9, -9.8, 6.5] + ]) + + # Interpolate S0, S1, S2 + s_interp = interp.interp1d(s_series[:, 0], s_series[:, 1:], axis=0, kind='linear', fill_value="extrapolate") + s_series_interp = s_interp(wl) + + s0 = s_series_interp[:, 0] + s1 = s_series_interp[:, 1] + s2 = s_series_interp[:, 2] + + # Calculate xy from CCT + xy = cct_2_xy(cct) + x = xy[0] + y = xy[1] + + # Calculate m, m1, m2 + m = 0.0241 + 0.2562 * x - 0.7341 * y + m1 = -1.3515 - 1.7703 * x + 5.9114 * y + m2 = 0.03000 - 31.4424 * x + 30.0717 * y + + m1 = np.round(m1 / m, 3) + m2 = np.round(m2 / m, 3) + + spectral_radiance = s0 + m1 * s1 + m2 * s2 + + return {'wavelength': wl, 'intensity': spectral_radiance} + + +class Illum: + def __init__(self, spectra, wl, description): + self.spectra = spectra + self.wl = wl + self.description = description + + + +def cct_2_xy(cct): + if cct < 4000 or cct > 25000: + raise ValueError('CCT must be between 4000K and 25000K') + + if cct <= 7000: + x = -4.6070 * (10**9) / (cct**3) + 2.9678 * (10**6) / (cct**2) + 0.09911 * (10**3) / cct + 0.244063 + else: + x = -2.0064 * (10**9) / (cct**3) + 1.9018 * (10**6) / (cct**2) + 0.24748 * (10**3) / cct + 0.237040 + + y = -3.000 * (x**2) + 2.870 * x - 0.275 + + return np.array([x, y]) + + + +# # Example usage: +# cct = 6500 +# wl = np.arange(300, 835, 5) +# illum = daylight(cct, wl) +# print(illum) + diff --git a/daylighttestsources.csv b/daylighttestsources.csv new file mode 100644 index 0000000..c8c1109 --- /dev/null +++ b/daylighttestsources.csv @@ -0,0 +1,532 @@ +wavelength,D50,D55,D65,D75 +300,0.000192266,0.000243042,0.00034107,0.000429059 +301,0.001522405,0.001610747,0.002538054,0.003844294 +302,0.003542864,0.003755309,0.006028964,0.00923675 +303,0.00596974,0.006309509,0.010172216,0.015647493 +304,0.008329856,0.008661311,0.013898506,0.021478298 +305,0.01035266,0.010483973,0.01664964,0.02588622 +306,0.012100273,0.011867132,0.018587294,0.02910944 +307,0.013497223,0.012680672,0.0194664,0.03079379 +308,0.014960932,0.01369661,0.02076247,0.033058076 +309,0.017164852,0.016134175,0.024795701,0.039240333 +310,0.020513053,0.020724904,0.03295821,0.051343381 +311,0.024923734,0.027324464,0.044977849,0.068975901 +312,0.030459709,0.036034534,0.061045517,0.092417761 +313,0.036735895,0.046166232,0.079850345,0.119777591 +314,0.043110486,0.056571418,0.099207555,0.14790311 +315,0.049178719,0.066506512,0.117695802,0.174749811 +316,0.055009738,0.076087413,0.135533069,0.200634712 +317,0.060554079,0.08525292,0.152611849,0.225393932 +318,0.066000015,0.094144938,0.169138248,0.249387463 +319,0.071694133,0.103091137,0.185639902,0.273470523 +320,0.077844385,0.112288121,0.202433393,0.298156241 +321,0.08434151,0.121568304,0.219190296,0.322941613 +322,0.091115374,0.130780119,0.235576284,0.347312275 +323,0.09813742,0.140046114,0.251937526,0.371772465 +324,0.105360053,0.149570544,0.268850976,0.397162581 +325,0.112714599,0.159424273,0.286552361,0.423800877 +326,0.120190722,0.169562114,0.304928273,0.451512111 +327,0.127838875,0.180080942,0.324202562,0.480657511 +328,0.135286441,0.190341335,0.342924645,0.508872984 +329,0.141979254,0.19936374,0.358860948,0.532528354 +330,0.147584814,0.206560425,0.37067133,0.549445513 +331,0.152142543,0.212031659,0.378597179,0.560007329 +332,0.155579928,0.215687368,0.382449719,0.563895854 +333,0.15826256,0.218105089,0.38351648,0.563224275 +334,0.160799756,0.220247384,0.383943346,0.561514571 +335,0.163586193,0.222746876,0.385145825,0.561087554 +336,0.16656039,0.225510092,0.386917603,0.561603638 +337,0.169754741,0.22857542,0.389337016,0.563194783 +338,0.173094528,0.231916173,0.392396325,0.565824054 +339,0.17640674,0.235396066,0.395869332,0.569083845 +340,0.179587573,0.238933328,0.39962032,0.572729595 +341,0.182698564,0.242606821,0.403813151,0.577033747 +342,0.185765604,0.246459107,0.408540547,0.582145299 +343,0.18880507,0.250450533,0.413681641,0.587887373 +344,0.191844257,0.25451501,0.419034991,0.593965167 +345,0.1948996,0.258598275,0.424437277,0.60013466 +346,0.197967844,0.262702414,0.429895694,0.606404368 +347,0.201052188,0.266839951,0.4354455,0.612832917 +348,0.20413681,0.270904437,0.44078305,0.618925746 +349,0.207195248,0.274742807,0.445473026,0.623970487 +350,0.210211626,0.278263223,0.449254235,0.627539724 +351,0.213190952,0.281479731,0.452175201,0.629723587 +352,0.21613365,0.284382856,0.454227198,0.630526465 +353,0.219050165,0.287059866,0.455631619,0.630281257 +354,0.221957903,0.289656206,0.456757457,0.629542794 +355,0.224869064,0.292275281,0.457881823,0.628742628 +356,0.227782262,0.294906088,0.458982723,0.627853638 +357,0.230697127,0.297543496,0.460026435,0.626804293 +358,0.233620769,0.300261572,0.46134873,0.626248202 +359,0.236562109,0.303156874,0.46341637,0.627110296 +360,0.239526502,0.306287339,0.46650941,0.629945531 +361,0.242470678,0.309613563,0.470559496,0.634636758 +362,0.245309206,0.313072144,0.475531087,0.641164266 +363,0.248165434,0.316707951,0.481248023,0.649109958 +364,0.251244937,0.32059577,0.487416701,0.657777005 +365,0.254626408,0.324730066,0.493770609,0.666603038 +366,0.258267315,0.329081707,0.500308842,0.675613967 +367,0.262254845,0.333730229,0.507122654,0.684928154 +368,0.266019099,0.33812674,0.513484725,0.693520987 +369,0.26868467,0.341440425,0.518333434,0.69992523 +370,0.269726314,0.343172794,0.521031808,0.703260544 +371,0.269293359,0.343454125,0.52169558,0.703643524 +372,0.267422897,0.342306363,0.520282447,0.700952284 +373,0.264453752,0.340075775,0.517355952,0.696072455 +374,0.260950631,0.337339472,0.513855334,0.69048009 +375,0.257359153,0.334544867,0.51045896,0.685203328 +376,0.253654272,0.331663161,0.507100052,0.680122046 +377,0.249754238,0.32862201,0.503730563,0.67521386 +378,0.246388181,0.326086572,0.500935198,0.67101821 +379,0.244593321,0.324996876,0.499497088,0.66819665 +380,0.244991992,0.32591694,0.499886111,0.667146113 +381,0.247658861,0.328956609,0.502302263,0.668161429 +382,0.252988507,0.334552616,0.507289668,0.671899412 +383,0.25988935,0.341594366,0.513634329,0.677011485 +384,0.266542093,0.348230864,0.519312911,0.681250021 +385,0.271904777,0.353432564,0.523244631,0.683441151 +386,0.276215565,0.357454006,0.525725574,0.683924474 +387,0.279186673,0.359959599,0.526326438,0.682185682 +388,0.282405882,0.362870445,0.527593381,0.681320428 +389,0.288436792,0.369253291,0.533547971,0.68619695 +390,0.298817562,0.380948188,0.54660315,0.69973619 +391,0.313099675,0.397439653,0.566120301,0.721192861 +392,0.331249451,0.418703492,0.592110101,0.750619302 +393,0.352210928,0.443439332,0.622787547,0.785787519 +394,0.374224168,0.469479885,0.655177639,0.822984186 +395,0.396022859,0.495263834,0.687152846,0.859575618 +396,0.41773405,0.520946878,0.718933158,0.895845138 +397,0.439441044,0.54663426,0.750641113,0.931915113 +398,0.460096274,0.571016931,0.780636423,0.965956638 +399,0.478304383,0.592348041,0.806756154,0.995597687 +400,0.493228156,0.60957948,0.827702543,1.019415046 +401,0.504808947,0.622640956,0.84335633,1.037228912 +402,0.512679553,0.631076149,0.85311137,1.04831258 +403,0.518103039,0.636459781,0.858990829,1.054995772 +404,0.523184508,0.64141639,0.864366655,1.06116136 +405,0.529255425,0.647606103,0.871362741,1.069242587 +406,0.53609054,0.654748139,0.879614746,1.078814916 +407,0.5438467,0.663037874,0.889386284,1.090199364 +408,0.551944878,0.671754633,0.899661456,1.102101417 +409,0.55930602,0.679554944,0.908579217,1.112191016 +410,0.565282694,0.685632726,0.91502294,1.119070127 +411,0.570083724,0.69025192,0.919341689,1.123150894 +412,0.573656214,0.693354271,0.921442748,1.124294556 +413,0.576491668,0.695540174,0.922186395,1.123625766 +414,0.579409261,0.69781029,0.923006432,1.12301894 +415,0.582884069,0.700748171,0.924747861,1.123586335 +416,0.586811222,0.704227001,0.927232516,1.125098066 +417,0.591312019,0.708390438,0.930653842,1.127796411 +418,0.595730676,0.712469664,0.933998777,1.130432792 +419,0.599001603,0.715211382,0.935604352,1.130946898 +420,0.600485445,0.715863616,0.934472783,1.128102544 +421,0.600486792,0.714777526,0.931051289,1.122437016 +422,0.599250925,0.712224459,0.925653967,1.114298049 +423,0.596867328,0.708333885,0.918517285,1.104036808 +424,0.59348514,0.703321587,0.910035352,1.092238566 +425,0.589393562,0.697541383,0.900713685,1.079561886 +426,0.584654587,0.691057114,0.890612611,1.066059498 +427,0.579006503,0.683580593,0.879402752,1.051371272 +428,0.574357011,0.677225795,0.869538144,1.038220047 +429,0.573552743,0.675142103,0.864660427,1.030631554 +430,0.57830168,0.679219149,0.866954588,1.031021229 +431,0.588351336,0.689179814,0.8761125,1.039063486 +432,0.60398187,0.705334424,0.892506048,1.055187533 +433,0.623457628,0.72576014,0.913886488,1.076874311 +434,0.643885855,0.747252233,0.936505914,1.099925388 +435,0.663340404,0.767674588,0.957867784,1.121548847 +436,0.682092209,0.787326463,0.978322729,1.142139354 +437,0.70006083,0.806121874,0.997767915,1.161575102 +438,0.717076982,0.82385091,1.015974117,1.17964655 +439,0.733176012,0.840519174,1.032972282,1.196459231 +440,0.748379129,0.856130027,1.04878098,1.212076464 +441,0.762379619,0.870347305,1.063007191,1.226054196 +442,0.774805372,0.882756626,1.075173372,1.23786974 +443,0.786314003,0.894105174,1.086131516,1.248426518 +444,0.79800154,0.905638257,1.097301615,1.259230227 +445,0.810489819,0.918066152,1.10949327,1.271134902 +446,0.823633003,0.931224658,1.122519128,1.283940102 +447,0.83761271,0.945314883,1.136608933,1.297895655 +448,0.851413511,0.959220574,1.150486785,1.311604275 +449,0.86340266,0.97114282,1.162096831,1.322819469 +450,0.872600508,0.980002277,1.17020556,1.330193339 +451,0.879204481,0.986018312,1.175060989,1.333991025 +452,0.883064578,0.989026344,1.176469913,1.333993335 +453,0.885113023,0.990050932,1.17561103,1.331502218 +454,0.886903521,0.990799675,1.174448843,1.328687591 +455,0.889419886,0.992352301,1.174222712,1.326916106 +456,0.892496307,0.994525966,1.174721162,1.325953254 +457,0.896247006,0.997448345,1.176095007,1.325968842 +458,0.900255651,1.00064657,1.177772158,1.326307941 +459,0.903742376,1.003240576,1.178698027,1.325771161 +460,0.906239263,1.004702324,1.178239864,1.323638873 +461,0.907956876,1.00526584,1.176671306,1.320216713 +462,0.908973687,1.005016143,1.174087182,1.315606537 +463,0.909468578,1.004162228,1.170751776,1.310120483 +464,0.909739689,1.003052416,1.167105566,1.304278784 +465,0.910010657,1.001946879,1.163474999,1.298464705 +466,0.910263609,1.000824291,1.15983208,1.292644272 +467,0.910471663,0.999654799,1.156142642,1.286780332 +468,0.910903499,0.998741205,1.152764009,1.281272038 +469,0.91193232,0.998502876,1.150188119,1.276666098 +470,0.913782051,0.999191434,1.148710133,1.273290538 +471,0.916391593,1.000741295,1.148260539,1.271075279 +472,0.919719394,1.003110849,1.148802815,1.269991626 +473,0.923644182,1.006155668,1.150147833,1.269810328 +474,0.927963834,1.009635042,1.15198038,1.270149299 +475,0.932478103,1.01331763,1.154013823,1.270675235 +476,0.937179657,1.017197556,1.156246984,1.271392365 +477,0.942154801,1.021367608,1.158778546,1.272400513 +478,0.94673508,1.025103106,1.160822579,1.272888392 +479,0.949938026,1.027341102,1.16123171,1.271677276 +480,0.951174156,1.027443827,1.159317513,1.268059932 +481,0.950561153,1.025535168,1.155207813,1.262162677 +482,0.948075466,1.021584531,1.148862204,1.253938673 +483,0.944212445,1.016136392,1.140881693,1.244015675 +484,0.939797673,1.01009821,1.132267954,1.23343994 +485,0.935436853,1.004132469,1.123748639,1.222969769 +486,0.931075054,0.998177479,1.115254205,1.212531831 +487,0.926656856,0.992176922,1.106727548,1.20206891 +488,0.922790408,0.986766408,1.098834119,1.192258726 +489,0.920305373,0.982808604,1.092471923,1.184013234 +490,0.919699551,0.980821112,1.088179765,1.177879607 +491,0.920949647,0.980786822,1.085949169,1.173855043 +492,0.924175329,0.982840468,1.085934488,1.172105585 +493,0.928782425,0.986346825,1.08745104,1.171920819 +494,0.933780647,0.990247185,1.089357691,1.172116722 +495,0.938497597,0.993827521,1.090891738,1.171906746 +496,0.943020818,0.99718336,1.092158909,1.171402521 +497,0.947340991,1.000297977,1.093131497,1.17056855 +498,0.95127004,1.00301859,1.093713987,1.169353911 +499,0.954624874,1.005221902,1.093877223,1.167800619 +500,0.957295642,1.006833931,1.09360371,1.165933886 +501,0.959214772,1.007774049,1.092792813,1.163638375 +502,0.96027508,1.007931171,1.091326389,1.160789903 +503,0.960761175,1.00757099,1.08944071,1.157602779 +504,0.961147402,1.00713633,1.087529566,1.154434184 +505,0.961738345,1.006907782,1.085834324,1.151494722 +506,0.962485069,1.006838163,1.084309766,1.148740049 +507,0.963416534,1.00695976,1.082996016,1.146218214 +508,0.964447867,1.007155836,1.081707732,1.143677849 +509,0.96540432,1.007207004,1.080127518,1.140706185 +510,0.966181047,1.006981632,1.078064937,1.137055559 +511,0.966865616,1.006572154,1.075624184,1.132842202 +512,0.967546285,1.006066583,1.07289327,1.128154421 +513,0.968152075,1.005416104,1.069870427,1.12303534 +514,0.968564687,1.004539358,1.066552705,1.117556834 +515,0.968751777,1.003432782,1.062997311,1.111833911 +516,0.968742995,1.002124242,1.059228188,1.105886702 +517,0.968470055,1.000540618,1.055162417,1.099623191 +518,0.968390294,0.999183261,1.051391524,1.093719105 +519,0.969201544,0.998812334,1.048803096,1.089180849 +520,0.971322507,0.999883933,1.047929684,1.086612263 +521,0.974637376,1.002280094,1.048650578,1.08589106 +522,0.979119397,1.005984244,1.050973114,1.087048705 +523,0.98449243,1.010674823,1.054478115,1.08957218 +524,0.990296241,1.015815898,1.05846695,1.09260645 +525,0.996168535,1.020995812,1.062423675,1.095536337 +526,1.002130078,1.026242835,1.066393416,1.09842358 +527,1.00824626,1.031618794,1.070427814,1.101308599 +528,1.013931662,1.036544258,1.073978377,1.103682823 +529,1.018354184,1.040203668,1.076292235,1.104868897 +530,1.021014564,1.04210769,1.076917665,1.10446041 +531,1.021965805,1.042302481,1.075882401,1.102465305 +532,1.021117742,1.040694873,1.073087004,1.098778215 +533,1.019006798,1.037821211,1.069054901,1.093902976 +534,1.016527012,1.034575406,1.064658474,1.088679314 +535,1.014288573,1.031568233,1.060494014,1.083680752 +536,1.012213706,1.028722193,1.056485983,1.078834394 +537,1.010306419,1.026040357,1.052637056,1.074143451 +538,1.008767974,1.023730664,1.049152453,1.069800929 +539,1.007810864,1.022015633,1.04625277,1.066012369 +540,1.007562582,1.021028775,1.044070363,1.062901093 +541,1.008046619,1.020793132,1.042627882,1.060489694 +542,1.00929793,1.021345579,1.041962599,1.058813729 +543,1.011130574,1.022492688,1.041882236,1.057691724 +544,1.013234654,1.023912079,1.042066328,1.056821227 +545,1.015369941,1.025355865,1.042269704,1.055970461 +546,1.017551911,1.026840951,1.042509665,1.055155602 +547,1.019819375,1.028404889,1.042821802,1.054410777 +548,1.021815405,1.029696546,1.042869484,1.053414445 +549,1.023035595,1.03022146,1.042179812,1.051714542 +550,1.023177301,1.029682955,1.040469045,1.049039829 +551,1.0222565,1.028096271,1.037752423,1.045406431 +552,1.020188707,1.025379233,1.033953648,1.040744217 +553,1.017345074,1.021895452,1.029417519,1.035378432 +554,1.014344187,1.018250948,1.024718699,1.029851149 +555,1.01158865,1.014841477,1.020234522,1.024519915 +556,1.009016812,1.011607176,1.015909046,1.019332598 +557,1.006658873,1.008575763,1.011765677,1.014309029 +558,1.004458188,1.005705073,1.007784998,1.009446957 +559,1.002267928,1.002871256,1.003880424,1.004688797 +560,1,1,1,1 +561,0.997743218,0.997176221,0.996221583,0.995452381 +562,0.995584616,0.994486588,0.992630667,0.991130083 +563,0.993436441,0.991833828,0.989115854,0.986911697 +564,0.991152437,0.989055816,0.985491483,0.982594876 +565,0.988672016,0.98608033,0.981668068,0.978077899 +566,0.986023594,0.982936843,0.977676652,0.973392922 +567,0.98315159,0.979570831,0.973464281,0.968488102 +568,0.980415415,0.976330071,0.969361468,0.963681716 +569,0.978368813,0.973752438,0.965882552,0.959471418 +570,0.977344031,0.972160659,0.963336135,0.956155798 +571,0.977232253,0.971443946,0.961613771,0.953632365 +572,0.977982595,0.971544298,0.960657438,0.951851663 +573,0.979422511,0.972307779,0.960325,0.950667048 +574,0.981264421,0.973477823,0.96037957,0.949834115 +575,0.983255381,0.974819182,0.960601613,0.949135884 +576,0.98539774,0.976330116,0.960988593,0.948573549 +577,0.987769548,0.978093677,0.961620448,0.948216252 +578,0.98973936,0.979450673,0.961865296,0.947507274 +579,0.990388769,0.979437975,0.960799003,0.945635974 +580,0.989166731,0.977477704,0.95786709,0.942115969 +581,0.986200572,0.973700818,0.953191915,0.937052123 +582,0.981510799,0.96812008,0.946778387,0.930446738 +583,0.975500623,0.961169648,0.939053719,0.922679032 +584,0.968842063,0.953573116,0.930729933,0.914381033 +585,0.962068005,0.945893863,0.922354065,0.906038019 +586,0.955149678,0.938096744,0.913888602,0.897616568 +587,0.947986177,0.930087683,0.905251234,0.889044043 +588,0.941471061,0.922724721,0.897212984,0.881001809 +589,0.936877468,0.91722256,0.890859186,0.874448715 +590,0.934969278,0.914310021,0.886841039,0.869960068 +591,0.935677545,0.913929682,0.88511486,0.867499184 +592,0.939167088,0.916248927,0.885840213,0.86721061 +593,0.944578154,0.920428972,0.888250017,0.868411176 +594,0.950477817,0.925071846,0.891065806,0.86996226 +595,0.955908604,0.9292462,0.893439303,0.871110589 +596,0.961003377,0.933082764,0.895491445,0.871964753 +597,0.965726994,0.936543374,0.897182491,0.872486265 +598,0.969962013,0.939541155,0.898467552,0.872657258 +599,0.973675566,0.942085593,0.899407141,0.872564794 +600,0.976847929,0.94418238,0.900037567,0.872261109 +601,0.97935263,0.945705794,0.900239764,0.871636374 +602,0.981042149,0.946518886,0.899894824,0.870586392 +603,0.9822102,0.946878636,0.899204413,0.869272953 +604,0.983346311,0.947213341,0.898504638,0.867965705 +605,0.984750583,0.94778499,0.897999036,0.8668252 +606,0.986366829,0.94854419,0.897648025,0.865818584 +607,0.98824485,0.949535325,0.897489314,0.86497995 +608,0.990154812,0.950551504,0.897339966,0.864135123 +609,0.991703014,0.951239562,0.896891967,0.862995882 +610,0.992653236,0.9513876,0.895960506,0.86138929 +611,0.993051401,0.951035312,0.894577036,0.859341776 +612,0.992839958,0.950128937,0.892691333,0.856803917 +613,0.992266754,0.948894441,0.890506978,0.853971643 +614,0.991744874,0.947708433,0.888363272,0.851171502 +615,0.991511901,0.94678718,0.886455667,0.848592996 +616,0.99151416,0.946081611,0.884740195,0.84619437 +617,0.991815591,0.945650495,0.883268953,0.844023806 +618,0.992065699,0.945170891,0.881757062,0.841821108 +619,0.991697434,0.944120727,0.87974327,0.83916333 +620,0.990370565,0.942186761,0.876950829,0.835796703 +621,0.98821514,0.939486125,0.873482345,0.831817311 +622,0.98529943,0.936076776,0.869386738,0.827272775 +623,0.981765348,0.932096867,0.864789231,0.822273158 +624,0.977849409,0.927776654,0.85989853,0.817001899 +625,0.973769897,0.92332235,0.854898495,0.811623389 +626,0.969528977,0.918733549,0.849787539,0.806137347 +627,0.965048112,0.913942596,0.844508611,0.800489725 +628,0.960949102,0.909491948,0.839522878,0.795113745 +629,0.958140998,0.906172264,0.835501219,0.790640898 +630,0.957169228,0.904457939,0.832846162,0.787450076 +631,0.957929395,0.904261278,0.831488074,0.785478973 +632,0.960448312,0.90560986,0.83145884,0.784765119 +633,0.964258135,0.908089406,0.832393681,0.784954397 +634,0.96857912,0.911009451,0.833684629,0.785456613 +635,0.972841189,0.913867618,0.834895682,0.785855063 +636,0.977097018,0.916711523,0.836071309,0.786195534 +637,0.981396164,0.919581649,0.837238263,0.786494827 +638,0.985184147,0.922011276,0.838049109,0.786481182 +639,0.987707225,0.923369366,0.838043494,0.78580598 +640,0.98851315,0.923277298,0.836945203,0.78426005 +641,0.987645537,0.921769826,0.834773305,0.781849267 +642,0.985042948,0.918795007,0.831485673,0.778534985 +643,0.981175453,0.914748651,0.827381578,0.774559147 +644,0.976826503,0.910290445,0.822959808,0.770324987 +645,0.972562458,0.905898568,0.818583169,0.766126113 +646,0.96832782,0.901526808,0.814217221,0.761934801 +647,0.964081797,0.897139008,0.809832869,0.757727109 +648,0.96031723,0.893163058,0.805766192,0.753777739 +649,0.957695036,0.890174829,0.802471433,0.750458416 +650,0.956611766,0.888519839,0.800221135,0.747992176 +651,0.957095548,0.888222148,0.799033864,0.746394135 +652,0.959325021,0.889438342,0.799034033,0.745766346 +653,0.962696868,0.891642255,0.79980612,0.745768605 +654,0.966205558,0.893956946,0.800657583,0.745833903 +655,0.969220403,0.895834094,0.801157023,0.745609426 +656,0.97185112,0.897370071,0.801381196,0.745158173 +657,0.974015361,0.89849066,0.80126922,0.744429754 +658,0.976042759,0.899500472,0.801077869,0.743638296 +659,0.978528318,0.900944114,0.80126155,0.743161691 +660,0.98182904,0.90314835,0.802092912,0.743226676 +661,0.985747417,0.905938456,0.80343175,0.74371811 +662,0.990135482,0.909187628,0.805180297,0.744556883 +663,0.994981708,0.912870631,0.807303877,0.74571051 +664,1.000266883,0.916945403,0.809744698,0.747124847 +665,1.005891691,0.921308356,0.812404637,0.748715267 +666,1.011823321,0.925933195,0.815265249,0.75046741 +667,1.018182374,0.930924569,0.818408426,0.752447778 +668,1.024102477,0.935524172,0.821234362,0.754167435 +669,1.028285994,0.938598753,0.822849127,0.754898393 +670,1.029954341,0.939468362,0.822716363,0.754203858 +671,1.029146749,0.938170002,0.820866411,0.752106711 +672,1.025579877,0.934463737,0.81711428,0.748453212 +673,1.020276417,0.92923245,0.812150978,0.743811013 +674,1.01494086,0.923947615,0.807128185,0.739126204 +675,1.010602321,0.919502824,0.802748807,0.734974959 +676,1.007058827,0.915725786,0.798879403,0.731247158 +677,1.004505931,0.912778082,0.795641516,0.7280444 +678,1.001985131,0.909883927,0.79246312,0.724884252 +679,0.997888228,0.905732494,0.788371007,0.720948457 +680,0.9912503,0.899537286,0.782781252,0.715746061 +681,0.982464144,0.891628427,0.775947441,0.70948979 +682,0.971728699,0.882181412,0.768012112,0.702300301 +683,0.959417149,0.871477118,0.759163065,0.694335164 +684,0.946151473,0.859983674,0.749713305,0.685857 +685,0.932495681,0.848139788,0.739970774,0.677125984 +686,0.918451467,0.835952417,0.72994597,0.668151646 +687,0.903826312,0.823256772,0.719508254,0.658821851 +688,0.890155285,0.811350277,0.709671252,0.650005084 +689,0.879678787,0.802132253,0.701924105,0.64297781 +690,0.873741062,0.79674229,0.697160296,0.638505908 +691,0.872189146,0.795056623,0.695292559,0.636522433 +692,0.875294668,0.797322076,0.69653828,0.637229898 +693,0.88159472,0.802276,0.699873855,0.639726855 +694,0.888651123,0.807813976,0.70359328,0.642510896 +695,0.894849699,0.812556546,0.706596184,0.644623158 +696,0.900422522,0.816709514,0.709056579,0.646220962 +697,0.905288787,0.820183886,0.710877222,0.647204404 +698,0.909398702,0.823074204,0.712314015,0.647900763 +699,0.912921393,0.825732725,0.713921408,0.648951198 +700,0.915958336,0.828370801,0.716032073,0.650740408 +701,0.918162398,0.830659005,0.718341299,0.652979944 +702,0.919081724,0.832205462,0.720531394,0.655392634 +703,0.919413825,0.833520121,0.72289209,0.658159402 +704,0.920321223,0.835452897,0.725906274,0.661581786 +705,0.922386371,0.838390115,0.729732979,0.665709588 +706,0.925423743,0.842180336,0.734261981,0.670454174 +707,0.929733923,0.847098622,0.739734202,0.6760353 +708,0.933468807,0.851398792,0.744552936,0.68096081 +709,0.933739983,0.85237658,0.746274834,0.682962311 +710,0.928814407,0.848409429,0.743433885,0.680678768 +711,0.919221664,0.839971063,0.736432391,0.674471178 +712,0.905119176,0.827183751,0.725352182,0.664402256 +713,0.88755298,0.811074058,0.711175138,0.651409326 +714,0.868266476,0.793352926,0.695537719,0.637054591 +715,0.848649762,0.77536921,0.679713878,0.622547735 +716,0.828631258,0.757046511,0.663624069,0.607810239 +717,0.807938482,0.73813894,0.647055763,0.59264826 +718,0.788966016,0.720842807,0.631947832,0.578848086 +719,0.775131389,0.708281483,0.621044935,0.568932925 +720,0.768485118,0.702328991,0.61599387,0.564416702 +721,0.76886457,0.702845341,0.61668134,0.565199418 +722,0.77676191,0.710288224,0.62351834,0.571662595 +723,0.78979709,0.722465917,0.634560375,0.582010785 +724,0.804003357,0.735725544,0.646566619,0.593251575 +725,0.816766444,0.747658994,0.657399733,0.603410998 +726,0.828468673,0.758618057,0.66737148,0.612776733 +727,0.83896194,0.76846733,0.67636294,0.621239621 +728,0.848284119,0.777234669,0.684390192,0.628809909 +729,0.856888698,0.785327144,0.691801437,0.63580221 +730,0.865047769,0.792988997,0.698805596,0.642405293 +731,0.872244378,0.799745002,0.70498199,0.648231149 +732,0.87788893,0.805050915,0.709846024,0.652831249 +733,0.882815881,0.809681965,0.714094052,0.656853363 +734,0.888415995,0.814930197,0.718886661,0.661377105 +735,0.895389096,0.821447403,0.724811288,0.666949921 +736,0.903514441,0.829029162,0.731685096,0.673402126 +737,0.913147405,0.838003333,0.739799838,0.68100373 +738,0.922107207,0.84636032,0.747369999,0.688103705 +739,0.926983596,0.850956531,0.751601246,0.692117546 +740,0.925730424,0.849905808,0.75081698,0.69149455 +741,0.918682266,0.843515209,0.745288153,0.686483928 +742,0.905442145,0.831415276,0.734681412,0.676774069 +743,0.888118613,0.815554567,0.720735757,0.663978076 +744,0.870225918,0.799180674,0.70634952,0.650784454 +745,0.853986443,0.784344793,0.693349818,0.638885831 +746,0.839024011,0.770698265,0.681424097,0.627991397 +747,0.825600966,0.75848711,0.670796794,0.618312436 +748,0.812747084,0.746789139,0.660610073,0.609031105 +749,0.798655602,0.733896304,0.649287345,0.598651787 +750,0.782242463,0.718783777,0.635882657,0.586277112 +751,0.764299476,0.702185763,0.621054476,0.572519781 +752,0.745623228,0.684832613,0.605446426,0.557971339 +753,0.72570938,0.666284599,0.588702369,0.542324911 +754,0.703717367,0.645808842,0.570228743,0.525069035 +755,0.679558484,0.623351163,0.550015325,0.506218726 +756,0.65349985,0.599153729,0.528271706,0.485964115 +757,0.624858713,0.572588824,0.504442382,0.46379318 +758,0.59829574,0.547951662,0.482342626,0.443231692 +759,0.580885993,0.531758349,0.467754709,0.429619452 +760,0.576874505,0.52791855,0.464147992,0.42616034 +761,0.585389005,0.535634412,0.470821946,0.432212156 +762,0.606733208,0.555193369,0.488042028,0.44802656 +763,0.637230636,0.583196175,0.51277395,0.470790211 +764,0.670753823,0.613977422,0.539960558,0.49581421 +765,0.703021139,0.643582176,0.566076623,0.51983315 +766,0.734525817,0.672468011,0.59153263,0.543228869 +767,0.765379776,0.700733042,0.616409033,0.566071597 +768,0.793207976,0.726219632,0.638830748,0.586653976 +769,0.815060604,0.746257868,0.65649087,0.60288386 +770,0.829167773,0.759245802,0.668005254,0.613505959 +771,0.835322701,0.764985607,0.673188627,0.618343309 +772,0.832776074,0.762787283,0.671429081,0.616831291 +773,0.824253876,0.755140604,0.664907942,0.610966777 +774,0.814299411,0.746195199,0.65726075,0.604077887 +775,0.805925117,0.738700588,0.650894041,0.598366369 +776,0.798700377,0.732262715,0.645461633,0.593514798 +777,0.792769355,0.727015891,0.641084498,0.589635724 +778,0.788270599,0.723067793,0.637833415,0.586781026 +779,0.784957602,0.720164977,0.635451002,0.584695709 +780,0.782682461,0.718155374,0.633782828,0.583226779 +781,0.781768898,0.717337591,0.633094144,0.582619025 +782,0.782431876,0.717905906,0.633552544,0.583024378 +783,0.784280613,0.719519503,0.634879614,0.584199114 +784,0.786663808,0.721610351,0.63661133,0.585737022 +785,0.78908379,0.723742182,0.638388349,0.587321741 +786,0.791575957,0.725944981,0.640233982,0.588972962 +787,0.794211802,0.728284213,0.642205848,0.590743628 +788,0.796313188,0.730146194,0.643773068,0.592151123 +789,0.796928042,0.730667198,0.644185725,0.592512142 +790,0.795485118,0.729328991,0.64299387,0.591416702 +791,0.791981854,0.726130963,0.64019925,0.588867775 +792,0.786198646,0.720875498,0.635632504,0.584712477 +793,0.778928906,0.714279056,0.629911195,0.579510703 +794,0.771494984,0.707535739,0.624064597,0.574195611 +795,0.764723128,0.701391382,0.618735332,0.569349759 +796,0.75846779,0.695714444,0.61380991,0.564870235 +797,0.752841682,0.690607091,0.609376763,0.560837287 +798,0.747379755,0.685646614,0.605068905,0.556917657 +799,0.741252202,0.680079536,0.60023293,0.552518141 +800,0.733961137,0.673453774,0.594476794,0.547282817 +801,0.725809429,0.666044224,0.588038899,0.541428287 +802,0.717064676,0.658094183,0.581130753,0.535147006 +803,0.707654297,0.649537541,0.573694491,0.528385839 +804,0.69745732,0.640264119,0.565633666,0.521056228 +805,0.686558484,0.630351163,0.557015325,0.513218726 +806,0.675035231,0.619869239,0.547901005,0.504929437 +807,0.6626528,0.608604425,0.538104256,0.496018568 +808,0.651056965,0.598056392,0.52893207,0.487676144 +809,0.642728489,0.590485663,0.522354576,0.481696055 +810,0.63915583,0.587248553,0.519553855,0.479154636 +811,0.640105314,0.588131783,0.520343704,0.479882288 +812,0.645813884,0.593350557,0.524911071,0.484049187 +813,0.654789814,0.601546635,0.532073131,0.490578421 +814,0.66454689,0.610456286,0.539858509,0.497675138 +815,0.673437156,0.618578556,0.546959718,0.504148931 +816,0.681696465,0.626128008,0.553563456,0.510169783 +817,0.689245193,0.633032793,0.559607688,0.515681206 +818,0.696012774,0.639224005,0.565028602,0.520625147 +819,0.702141982,0.644824658,0.569927616,0.525094006 +820,0.707718481,0.649908559,0.574365581,0.529143227 +821,0.712502636,0.654258263,0.5781537,0.53260084 +822,0.716254054,0.657654422,0.581100488,0.53529237 +823,0.719367098,0.660460021,0.583525376,0.53750882 +824,0.722499043,0.663280037,0.585960751,0.539735191 +825,0.726040474,0.666474571,0.588723948,0.542260502 +826,0.729911005,0.669969873,0.591750241,0.545025759 +827,0.734194803,0.673842576,0.595106453,0.548091939 +828,0.738459699,0.677700863,0.598452178,0.551148197 +829,0.741991716,0.68089651,0.601223568,0.553679764 +830,0.744362466,0.683040582,0.603082315,0.555377778 \ No newline at end of file diff --git a/fathom-analytics.js b/fathom-analytics.js deleted file mode 100644 index d66472d..0000000 --- a/fathom-analytics.js +++ /dev/null @@ -1,11 +0,0 @@ -(function(f, a, t, h, o, m){ - a[h]=a[h]||function(){ - (a[h].q=a[h].q||[]).push(arguments) - }; - o=f.createElement('script'), - m=f.getElementsByTagName('script')[0]; - o.async=1; o.src=t; o.id='fathom-script'; - m.parentNode.insertBefore(o,m) -})(document, window, '//134.209.53.137/tracker.js', 'fathom'); -fathom('set', 'siteId', 'WFUAH'); -fathom('trackPageview'); \ No newline at end of file diff --git a/planck_module.py b/planck_module.py new file mode 100644 index 0000000..dc5d239 --- /dev/null +++ b/planck_module.py @@ -0,0 +1,25 @@ +import numpy as np +import matplotlib.pyplot as plt + +def planck(temp, wl): + """ + Calculate the spectral radiance of a blackbody at given temperatures and wavelengths using Planck's Law. + + Parameters: + temp (float or np.array): Temperature(s) in Kelvin + wl (np.array): Wavelengths in nanometers + + Returns: + np.array: Spectral radiance values + """ + h = 6.626e-34 # Planck's constant (J·s) + c = 3e8 # Speed of light (m/s) + k = 1.381e-23 # Boltzmann's constant (J/K) + + # Convert wavelength from nanometers to meters + wl_m = wl * 1e-9 + + # Planck's law + spectral_radiance = (2 * h * c**2) / (wl_m**5) / (np.exp((h * c) / (wl_m * k * temp)) - 1) + + return {'wavelength': wl, 'intensity': spectral_radiance} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..df526b2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,41 @@ +blinker==1.8.2 +certifi==2024.6.2 +charset-normalizer==3.3.2 +click==8.1.7 +contourpy==1.2.1 +cycler==0.12.1 +dash==2.17.1 +dash-bootstrap-components==1.6.0 +dash-core-components==2.0.0 +dash-html-components==2.0.0 +dash-table==5.0.0 +Flask==3.0.3 +fonttools==4.53.0 +gunicorn==22.0.0 +idna==3.7 +importlib_metadata==7.2.0 +importlib_resources==6.4.0 +itsdangerous==2.2.0 +Jinja2==3.1.4 +kiwisolver==1.4.5 +MarkupSafe==2.1.5 +matplotlib==3.9.0 +nest-asyncio==1.6.0 +numpy==2.0.0 +packaging==24.1 +pandas==2.2.2 +pillow==10.3.0 +plotly==5.22.0 +pyparsing==3.1.2 +python-dateutil==2.9.0.post0 +pytz==2024.1 +requests==2.32.3 +retrying==1.3.4 +scipy==1.13.1 +six==1.16.0 +tenacity==8.4.1 +typing_extensions==4.12.2 +tzdata==2024.1 +urllib3==2.2.2 +Werkzeug==3.0.3 +zipp==3.19.2 diff --git a/ssi_calculator.Rproj b/ssi_calculator.Rproj deleted file mode 100644 index e83436a..0000000 --- a/ssi_calculator.Rproj +++ /dev/null @@ -1,16 +0,0 @@ -Version: 1.0 - -RestoreWorkspace: Default -SaveWorkspace: Default -AlwaysSaveHistory: Default - -EnableCodeIndexing: Yes -UseSpacesForTab: Yes -NumSpacesForTab: 2 -Encoding: UTF-8 - -RnwWeave: Sweave -LaTeX: pdfLaTeX - -AutoAppendNewline: Yes -StripTrailingWhitespace: Yes diff --git a/ssi_module.py b/ssi_module.py new file mode 100644 index 0000000..0b1f364 --- /dev/null +++ b/ssi_module.py @@ -0,0 +1,40 @@ +import numpy as np +from scipy.interpolate import interp1d +from scipy.signal import convolve + +def calculate_ssi(test_wavelengths, test_intensities, ref_wavelengths, ref_intensities): + lambda_range = np.arange(375, 676, 1) + interpol_test = interp1d(test_wavelengths, test_intensities, kind='linear', bounds_error=False, fill_value=0) + interpol_ref = interp1d(ref_wavelengths, ref_intensities, kind='linear', bounds_error=False, fill_value=0) + + TI = interpol_test(lambda_range) + RI = interpol_ref(lambda_range) + + # Resampling at 10 nm intervals, sum weighted values within ±5 nm + TR = np.array([0.5 * TI[i - 5] + sum(TI[i - 4:i + 5]) + 0.5 * TI[i + 5] for i in range(5, len(TI) - 5, 10)]) + RR = np.array([0.5 * RI[i - 5] + sum(RI[i - 4:i + 5]) + 0.5 * RI[i + 5] for i in range(5, len(RI) - 5, 10)]) + + TN = TR / np.sum(TR) + RN = RR / np.sum(RR) + + D = (TN - RN) / (RN + 1/30) + weights = np.array([4/15, 22/45, 32/45, 8/9, 44/45] + [1]*23 + [11/15, 3/15]) + W = D * weights + + # Extend with zeros + Z = np.concatenate(([0], W, [0])) + + # Smooth + F = convolve(Z, [0.22, 0.56, 0.22], mode='valid') + + e = np.sqrt(np.sum(F**2)) + ssi = round(100 - 32 * e) + return ssi + +# Example usage with dummy data +test_wavelengths = np.linspace(380, 780, 401) +test_intensities = np.random.rand(401) +ref_wavelengths = np.linspace(380, 780, 401) +ref_intensities = np.random.rand(401) +ssi_value = calculate_ssi(test_wavelengths, test_intensities, ref_wavelengths, ref_intensities) +print(f"SSI Value: {ssi_value}") diff --git a/testSources_test.csv b/testSources_test.csv new file mode 100644 index 0000000..f3aa12d --- /dev/null +++ b/testSources_test.csv @@ -0,0 +1,402 @@ +wavelength,HMI,Xenon,Warm LED,Cool LED,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,Custom +380,1.204633205,0.045340909,0.002081818,0.019824561,0.130495464,0.073019802,0.049308479,0.034905083,0.123026316,0.06097561,0.203497615,0.102891156,0.070643642,0.328402367,0.32155477,0.311688312,0.5 +381,1.101029601,0.0325,0.003640909,0.017605263,0.137334264,0.076732673,0.05171377,0.036497244,0.129342105,0.063995354,0.213354531,0.107823129,0.074097331,0.3,0.301766784,0.290909091,0.5 +382,0.997425997,0.019659091,0.0052,0.015385965,0.144173064,0.080445545,0.054119062,0.038089406,0.135657895,0.067015099,0.223211447,0.112755102,0.07755102,0.271597633,0.281978799,0.27012987,0.5 +383,1.008365508,0.028636364,0.006386364,0.012885965,0.151011863,0.084158416,0.056524354,0.039681568,0.141973684,0.070034843,0.233068362,0.117687075,0.08100471,0.243195266,0.262190813,0.249350649,0.5 +384,1.019305019,0.037613636,0.007572727,0.010385965,0.157850663,0.087871287,0.058929645,0.041273729,0.148289474,0.073054588,0.242925278,0.122619048,0.084458399,0.214792899,0.242402827,0.228571429,0.5 +385,1.07014157,0.028863636,0.009513636,0.006868421,0.164689463,0.091584158,0.061334937,0.042865891,0.154605263,0.076074332,0.252782194,0.12755102,0.087912088,0.186390533,0.222614841,0.207792208,0.5 +386,1.120978121,0.020113636,0.011454545,0.003350877,0.172784368,0.096039604,0.064221287,0.044947949,0.162105263,0.079790941,0.26327504,0.132823129,0.091679749,0.185798817,0.210600707,0.195454545,0.5 +387,1.177606178,0.029943182,0.007409091,0.006631579,0.180879274,0.10049505,0.067107637,0.047030006,0.169605263,0.083507549,0.273767886,0.138095238,0.09544741,0.185207101,0.198586572,0.183116883,0.5 +388,1.234234234,0.039772727,0.003363636,0.009912281,0.18897418,0.104950495,0.069993987,0.049112064,0.177105263,0.087224158,0.284260731,0.143367347,0.099215071,0.184615385,0.186572438,0.170779221,0.5 +389,1.162162162,0.041136364,0.006131818,0.008464912,0.197069086,0.109405941,0.072880337,0.051194121,0.184605263,0.090940767,0.294753577,0.148639456,0.102982732,0.184023669,0.174558304,0.158441558,0.5 +390,1.09009009,0.0425,0.0089,0.007017544,0.205163992,0.113861386,0.075766687,0.053276179,0.192105263,0.094657375,0.305246423,0.153911565,0.106750392,0.183431953,0.16254417,0.146103896,0.5 +391,1.153796654,0.036079545,0.011222727,0.01122807,0.212561061,0.11769802,0.077931449,0.054623393,0.199078947,0.097793264,0.316216216,0.159353741,0.110518053,0.180473373,0.156183746,0.138311688,0.5 +392,1.217503218,0.029659091,0.013545455,0.015438596,0.21995813,0.121534653,0.080096212,0.055970606,0.206052632,0.100929152,0.32718601,0.164795918,0.114285714,0.177514793,0.149823322,0.130519481,0.5 +393,1.166023166,0.038238636,0.017227273,0.011008772,0.227355199,0.125371287,0.082260974,0.05731782,0.213026316,0.104065041,0.338155803,0.170238095,0.118053375,0.174556213,0.143462898,0.122727273,0.5 +394,1.114543115,0.046818182,0.020909091,0.006578947,0.234752268,0.129207921,0.084425737,0.058665034,0.22,0.107200929,0.349125596,0.175680272,0.121821036,0.171597633,0.137102473,0.114935065,0.5 +395,1.180823681,0.051278409,0.025363636,0.007649123,0.242149337,0.133044554,0.086590499,0.060012247,0.226973684,0.110336818,0.36009539,0.181122449,0.125588697,0.168639053,0.130742049,0.107142857,0.5 +396,1.247104247,0.055738636,0.029818182,0.008719298,0.265875785,0.149009901,0.100180397,0.072627067,0.248684211,0.124390244,0.385850556,0.198809524,0.141130298,0.222485207,0.195759717,0.162987013,0.5 +397,1.19047619,0.061392045,0.023136364,0.00772807,0.289602233,0.164975248,0.113770295,0.085241886,0.270394737,0.13844367,0.411605723,0.216496599,0.1566719,0.276331361,0.260777385,0.218831169,0.5 +398,1.133848134,0.067045455,0.016454545,0.006736842,0.313328681,0.180940594,0.127360192,0.097856705,0.292105263,0.152497096,0.43736089,0.234183673,0.172213501,0.330177515,0.325795053,0.274675325,0.5 +399,1.137065637,0.075852273,0.012281818,0.00604386,0.337055129,0.196905941,0.14095009,0.110471525,0.313815789,0.166550523,0.463116057,0.251870748,0.187755102,0.384023669,0.390812721,0.330519481,0.5 +400,1.14028314,0.084659091,0.008109091,0.005350877,0.360781577,0.212871287,0.154539988,0.123086344,0.335526316,0.180603949,0.488871224,0.269557823,0.203296703,0.437869822,0.455830389,0.386363636,0.5 +401,1.22007722,0.098579545,0.011054545,0.005412281,0.56064201,0.364480198,0.29633193,0.26687079,0.517236842,0.316376307,0.699046105,0.438095238,0.363579278,1.069822485,1.260777385,1.119480519,0.5 +402,1.2998713,0.1125,0.014,0.005473684,0.760502442,0.516089109,0.438123873,0.410655236,0.698947368,0.452148664,0.909220986,0.606632653,0.523861852,1.701775148,2.065724382,1.852597403,0.5 +403,1.325611326,0.128409091,0.018545455,0.007780702,0.960362875,0.66769802,0.579915815,0.554439682,0.880657895,0.587921022,1.119395866,0.775170068,0.684144427,2.333727811,2.870671378,2.585714286,0.5 +404,1.351351351,0.144318182,0.023090909,0.010087719,1.160223308,0.819306931,0.721707757,0.698224127,1.062368421,0.72369338,1.329570747,0.943707483,0.844427002,2.965680473,3.675618375,3.318831169,0.5 +405,1.415701416,0.16875,0.025090909,0.009710526,1.36008374,0.970915842,0.863499699,0.842008573,1.244078947,0.859465738,1.539745628,1.112244898,1.004709576,3.597633136,4.480565371,4.051948052,0.5 +406,1.48005148,0.193181818,0.027090909,0.009333333,1.173621773,0.824381188,0.723271197,0.697489284,1.074210526,0.727409988,1.348966614,0.954931973,0.851648352,3.003550296,3.696819788,3.314285714,0.5 +407,1.486486486,0.216193182,0.023954545,0.009342105,0.987159805,0.677846535,0.583042694,0.552969994,0.904342105,0.595354239,1.158187599,0.797619048,0.698587127,2.409467456,2.913074205,2.576623377,0.5 +408,1.492921493,0.239204545,0.020818182,0.009350877,0.800697837,0.531311881,0.442814191,0.408450704,0.734473684,0.46329849,0.967408585,0.640306122,0.545525903,1.815384615,2.129328622,1.838961039,0.5 +409,1.544401544,0.273863636,0.018863636,0.009535088,0.614235869,0.384777228,0.302585689,0.263931415,0.564605263,0.331242741,0.776629571,0.482993197,0.392464678,1.221301775,1.345583039,1.101298701,0.5 +410,1.595881596,0.308522727,0.016909091,0.009719298,0.427773901,0.238242574,0.162357186,0.119412125,0.394736842,0.199186992,0.585850556,0.325680272,0.239403454,0.627218935,0.561837456,0.363636364,0.5 +411,1.583011583,0.333238636,0.018818182,0.010280702,0.429309142,0.236881188,0.159350571,0.115003062,0.396184211,0.19767712,0.580763116,0.319217687,0.231711146,0.661538462,0.575971731,0.351948052,0.5 +412,1.57014157,0.357954545,0.020727273,0.010842105,0.430844382,0.235519802,0.156343957,0.110593999,0.397631579,0.196167247,0.575675676,0.312755102,0.224018838,0.695857988,0.590106007,0.34025974,0.5 +413,1.608751609,0.396590909,0.023136364,0.011035088,0.432379623,0.234158416,0.153337342,0.106184936,0.399078947,0.194657375,0.570588235,0.306292517,0.216326531,0.730177515,0.604240283,0.328571429,0.5 +414,1.647361647,0.435227273,0.025545455,0.01122807,0.433914864,0.23279703,0.150330728,0.101775873,0.400526316,0.193147503,0.565500795,0.299829932,0.208634223,0.764497041,0.618374558,0.316883117,0.5 +415,1.67953668,0.471875,0.027909091,0.011429825,0.435450105,0.231435644,0.147324113,0.09736681,0.401973684,0.191637631,0.560413355,0.293367347,0.200941915,0.798816568,0.632508834,0.305194805,0.5 +416,1.711711712,0.508522727,0.030272727,0.011631579,0.44619679,0.23700495,0.150691521,0.099448867,0.411710526,0.196051103,0.5709062,0.300340136,0.205651491,0.86035503,0.679858657,0.314285714,0.5 +417,1.718146718,0.549715909,0.033681818,0.015815789,0.456943475,0.242574257,0.15405893,0.101530925,0.421447368,0.200464576,0.581399046,0.307312925,0.210361068,0.921893491,0.727208481,0.323376623,0.5 +418,1.724581725,0.590909091,0.037090909,0.02,0.467690161,0.248143564,0.157426338,0.103612982,0.431184211,0.204878049,0.591891892,0.314285714,0.215070644,0.983431953,0.774558304,0.332467532,0.5 +419,1.743886744,0.630681818,0.040227273,0.022894737,0.478436846,0.253712871,0.160793746,0.10569504,0.440921053,0.209291521,0.602384738,0.321258503,0.21978022,1.044970414,0.821908127,0.341558442,0.5 +420,1.763191763,0.670454545,0.043363636,0.025789474,0.489183531,0.259282178,0.164161155,0.107777097,0.450657895,0.213704994,0.612877583,0.328231293,0.224489796,1.106508876,0.869257951,0.350649351,0.5 +421,1.776061776,0.715909091,0.049454545,0.030175439,0.500069784,0.26460396,0.167408298,0.109859155,0.460263158,0.218234611,0.624006359,0.337755102,0.231397174,1.189349112,0.930742049,0.369480519,0.5 +422,1.788931789,0.761363636,0.055545455,0.034561404,0.510956036,0.269925743,0.170655442,0.111941212,0.469868421,0.222764228,0.635135135,0.347278912,0.238304553,1.272189349,0.992226148,0.388311688,0.5 +423,1.711711712,0.789772727,0.064,0.040877193,0.521842289,0.275247525,0.173902586,0.11402327,0.479473684,0.227293844,0.646263911,0.356802721,0.245211931,1.355029586,1.053710247,0.407142857,0.5 +424,1.634491634,0.818181818,0.072454545,0.047192982,0.532728542,0.280569307,0.177149729,0.116105328,0.489078947,0.231823461,0.657392687,0.366326531,0.252119309,1.437869822,1.115194346,0.425974026,0.5 +425,1.550836551,0.849431818,0.079772727,0.055087719,0.543614794,0.285891089,0.180396873,0.118187385,0.498684211,0.236353078,0.668521463,0.37585034,0.259026688,1.520710059,1.176678445,0.444805195,0.5 +426,1.467181467,0.880681818,0.087090909,0.062982456,0.554361479,0.291336634,0.183764281,0.120269443,0.508289474,0.240766551,0.680286169,0.387244898,0.267189953,1.615976331,1.258657244,0.471428571,0.5 +427,1.409266409,0.911931818,0.099909091,0.074210526,0.565108165,0.296782178,0.18713169,0.1223515,0.517894737,0.245180023,0.692050874,0.398639456,0.275353218,1.711242604,1.340636042,0.498051948,0.5 +428,1.351351351,0.943181818,0.112727273,0.085438596,0.57585485,0.302227723,0.190499098,0.124433558,0.5275,0.249593496,0.70381558,0.410034014,0.283516484,1.806508876,1.422614841,0.524675325,0.5 +429,1.318532819,0.974431818,0.129090909,0.102719298,0.586601535,0.307673267,0.193866506,0.126515615,0.537105263,0.254006969,0.715580286,0.421428571,0.291679749,1.901775148,1.50459364,0.551298701,0.5 +430,1.285714286,1.005681818,0.145454545,0.12,0.597348221,0.313118812,0.197233915,0.128597673,0.546710526,0.258420441,0.727344992,0.432823129,0.299843014,1.99704142,1.586572438,0.577922078,0.5 +431,1.299227799,1.025568182,0.17,0.143684211,1.087369156,0.683415842,0.540829826,0.473729333,0.973684211,0.585481998,1.283624801,0.926190476,0.751962323,3.632544379,3.667844523,2.348701299,0.5 +432,1.312741313,1.045454545,0.194545455,0.167368421,1.577390091,1.053712871,0.884425737,0.818860992,1.400657895,0.912543554,1.83990461,1.419557823,1.204081633,5.268047337,5.749116608,4.119480519,0.5 +433,1.396396396,1.059659091,0.222727273,0.195087719,2.067411026,1.424009901,1.228021648,1.163992652,1.827631579,1.23960511,2.39618442,1.91292517,1.656200942,6.903550296,7.830388693,5.89025974,0.5 +434,1.48005148,1.073863636,0.250909091,0.222807018,2.557431961,1.794306931,1.571617559,1.509124311,2.254605263,1.566666667,2.952464229,2.406292517,2.108320251,8.539053254,9.911660777,7.661038961,0.5 +435,1.518661519,1.096590909,0.276818182,0.257894737,3.047452896,2.16460396,1.91521347,1.854255971,2.681578947,1.893728223,3.508744038,2.899659864,2.56043956,10.17455621,11.99293286,9.431818182,0.5 +436,1.557271557,1.119318182,0.302727273,0.292982456,2.674389393,1.877846535,1.646061335,1.581751378,2.356578947,1.639721254,3.085532591,2.530952381,2.217425432,9.018934911,10.45159011,8.058441558,0.5 +437,1.486486486,1.122159091,0.329090909,0.343859649,2.30132589,1.591089109,1.3769092,1.309246785,2.031578947,1.385714286,2.662321145,2.162244898,1.874411303,7.863313609,8.91024735,6.685064935,0.5 +438,1.415701416,1.125,0.355454545,0.394736842,1.928262387,1.304331683,1.107757066,1.036742192,1.706578947,1.131707317,2.239109698,1.793537415,1.531397174,6.707692308,7.368904594,5.311688312,0.5 +439,1.277348777,1.125,0.374545455,0.448245614,1.555198883,1.017574257,0.838604931,0.7642376,1.381578947,0.877700348,1.815898251,1.424829932,1.188383046,5.552071006,5.827561837,3.938311688,0.5 +440,1.138996139,1.125,0.393636364,0.501754386,1.18213538,0.730816832,0.569452796,0.491733007,1.056578947,0.62369338,1.392686804,1.056122449,0.845368917,4.396449704,4.286219081,2.564935065,0.5 +441,1.046975547,1.130681818,0.425454545,0.570175439,1.095324494,0.662252475,0.503908599,0.424617269,0.981052632,0.562601626,1.294594595,0.975510204,0.767974882,4.132544379,3.920141343,2.224025974,0.5 +442,0.954954955,1.136363636,0.457272727,0.638596491,1.008513608,0.593688119,0.438364402,0.357501531,0.905526316,0.501509872,1.196502385,0.894897959,0.690580848,3.868639053,3.554063604,1.883116883,0.5 +443,0.93951094,1.139204545,0.5,0.724561404,0.921702722,0.525123762,0.372820204,0.290385793,0.83,0.440418118,1.098410175,0.814285714,0.613186813,3.604733728,3.187985866,1.542207792,0.5 +444,0.924066924,1.142045455,0.542727273,0.810526316,0.834891835,0.456559406,0.307276007,0.223270055,0.754473684,0.379326365,1.000317965,0.733673469,0.535792779,3.340828402,2.821908127,1.201298701,0.5 +445,0.935006435,1.139204545,0.590454545,0.907894737,0.748080949,0.38799505,0.24173181,0.156154317,0.678947368,0.318234611,0.902225755,0.653061224,0.458398744,3.076923077,2.455830389,0.86038961,0.5 +446,0.945945946,1.136363636,0.638181818,1.005263158,0.756873692,0.392450495,0.244497895,0.157991427,0.686710526,0.321718931,0.912559618,0.668707483,0.469858713,3.098224852,2.472791519,0.864285714,0.5 +447,0.962676963,1.133522727,0.689090909,1.104385965,0.765666434,0.396905941,0.247263981,0.159828536,0.694473684,0.325203252,0.922893482,0.684353741,0.481318681,3.119526627,2.48975265,0.868181818,0.5 +448,0.979407979,1.130681818,0.74,1.203508772,0.774459177,0.401361386,0.250030066,0.161665646,0.702236842,0.328687573,0.933227345,0.7,0.49277865,3.140828402,2.506713781,0.872077922,0.5 +449,0.984555985,1.116477273,0.787727273,1.288596491,0.783251919,0.405816832,0.252796152,0.163502756,0.71,0.332171893,0.943561208,0.715646259,0.504238619,3.162130178,2.523674912,0.875974026,0.5 +450,0.98970399,1.102272727,0.835454545,1.373684211,0.792044662,0.410272277,0.255562237,0.165339865,0.717763158,0.335656214,0.953895072,0.731292517,0.515698587,3.183431953,2.540636042,0.87987013,0.5 +451,1.014800515,1.09375,0.885909091,1.468421053,0.799581298,0.413985149,0.257847264,0.166809553,0.724210526,0.338559814,0.963116057,0.745918367,0.526373626,3.178106509,2.535689046,0.875974026,0.5 +452,1.03989704,1.085227273,0.936363636,1.563157895,0.807117934,0.41769802,0.260132291,0.168279241,0.730657895,0.341463415,0.972337043,0.760544218,0.537048666,3.172781065,2.530742049,0.872077922,0.5 +453,1.069498069,1.071022727,0.977272727,1.620175439,0.814654571,0.421410891,0.262417318,0.169748928,0.737105263,0.344367015,0.981558029,0.775170068,0.547723705,3.167455621,2.525795053,0.868181818,0.5 +454,1.099099099,1.056818182,1.018181818,1.677192982,0.822191207,0.425123762,0.264702345,0.171218616,0.743552632,0.347270616,0.990779014,0.789795918,0.558398744,3.162130178,2.520848057,0.864285714,0.5 +455,1.133848134,1.045454545,1.05,1.709649123,0.829727844,0.428836634,0.266987372,0.172688304,0.75,0.350174216,1,0.804421769,0.569073783,3.156804734,2.51590106,0.86038961,0.5 +456,1.168597169,1.034090909,1.081818182,1.742105263,0.836427076,0.432054455,0.268791341,0.17379057,0.755657895,0.352729384,1.007949126,0.817687075,0.578649922,3.123668639,2.487632509,0.85,0.5 +457,1.195624196,1.019886364,1.1,1.737719298,0.843126308,0.435272277,0.27059531,0.174892835,0.761315789,0.355284553,1.015898251,0.830952381,0.58822606,3.090532544,2.459363958,0.83961039,0.5 +458,1.222651223,1.005681818,1.118181818,1.733333333,0.849825541,0.438490099,0.272399278,0.175995101,0.766973684,0.357839721,1.023847377,0.844217687,0.597802198,3.05739645,2.431095406,0.829220779,0.5 +459,1.212998713,0.991477273,1.127272727,1.7,0.856524773,0.441707921,0.274203247,0.177097367,0.772631579,0.36039489,1.031796502,0.857482993,0.607378336,3.024260355,2.402826855,0.818831169,0.5 +460,1.203346203,0.977272727,1.136363636,1.666666667,0.863224006,0.444925743,0.276007216,0.178199633,0.778289474,0.362950058,1.039745628,0.870748299,0.616954474,2.99112426,2.374558304,0.808441558,0.5 +461,1.182110682,0.963068182,1.127272727,1.610526316,0.868527565,0.447524752,0.277570655,0.179179424,0.782763158,0.364808362,1.045627981,0.880952381,0.624646782,2.941420118,2.332862191,0.798051948,0.5 +462,1.160875161,0.948863636,1.118181818,1.554385965,0.873831124,0.450123762,0.279134095,0.180159216,0.787236842,0.366666667,1.051510334,0.891156463,0.632339089,2.891715976,2.291166078,0.787662338,0.5 +463,1.135135135,0.931818182,1.095454545,1.486842105,0.879134682,0.452722772,0.280697535,0.181139008,0.791710526,0.368524971,1.057392687,0.901360544,0.640031397,2.842011834,2.249469965,0.777272727,0.5 +464,1.109395109,0.914772727,1.072727273,1.419298246,0.884438241,0.455321782,0.282260974,0.1821188,0.796184211,0.370383275,1.06327504,0.911564626,0.647723705,2.792307692,2.207773852,0.766883117,0.5 +465,1.102960103,0.903409091,1.045454545,1.354385965,0.8897418,0.457920792,0.283824414,0.183098592,0.800657895,0.37224158,1.069157393,0.921768707,0.655416013,2.74260355,2.166077739,0.756493506,0.5 +466,1.096525097,0.892045455,1.018181818,1.289473684,0.893230984,0.459653465,0.28478653,0.183710961,0.803684211,0.373519164,1.073290938,0.930102041,0.661695447,2.684615385,2.118727915,0.741558442,0.5 +467,1.075289575,0.869318182,0.972727273,1.212280702,0.896720167,0.461386139,0.285748647,0.184323331,0.806710526,0.374796748,1.077424483,0.938435374,0.667974882,2.626627219,2.071378092,0.726623377,0.5 +468,1.054054054,0.846590909,0.927272727,1.135087719,0.900209351,0.463118812,0.286710764,0.184935701,0.809736842,0.376074332,1.081558029,0.946768707,0.674254317,2.568639053,2.024028269,0.711688312,0.5 +469,1.059202059,0.832386364,0.885,1.079824561,0.903698535,0.464851485,0.28767288,0.185548071,0.812763158,0.377351916,1.085691574,0.955102041,0.680533752,2.510650888,1.976678445,0.696753247,0.5 +470,1.064350064,0.818181818,0.842727273,1.024561404,0.907187718,0.466584158,0.288634997,0.186160441,0.815789474,0.378629501,1.089825119,0.963435374,0.686813187,2.452662722,1.929328622,0.681818182,0.5 +471,1.064993565,0.806818182,0.810909091,0.978947368,0.909281228,0.467574257,0.289356584,0.186650337,0.817631579,0.379326365,1.092527822,0.969897959,0.691679749,2.393491124,1.881978799,0.669480519,0.5 +472,1.065637066,0.795454545,0.779090909,0.933333333,0.911374738,0.468564356,0.290078172,0.187140233,0.819473684,0.380023229,1.095230525,0.976360544,0.696546311,2.334319527,1.834628975,0.657142857,0.5 +473,1.057915058,0.784090909,0.746818182,0.894736842,0.913468248,0.469554455,0.290799759,0.187630129,0.821315789,0.380720093,1.097933227,0.982823129,0.701412873,2.275147929,1.787279152,0.644805195,0.5 +474,1.05019305,0.772727273,0.714545455,0.856140351,0.915561759,0.470544554,0.291521347,0.188120024,0.823157895,0.381416957,1.10063593,0.989285714,0.706279435,2.215976331,1.739929329,0.632467532,0.5 +475,1.04954955,0.758522727,0.678636364,0.816666667,0.917655269,0.471534653,0.292242934,0.18860992,0.825,0.382113821,1.103338633,0.995748299,0.711145997,2.156804734,1.692579505,0.62012987,0.5 +476,1.048906049,0.744318182,0.642727273,0.777192982,0.918771807,0.471905941,0.292363199,0.188732394,0.825526316,0.382229965,1.10445151,1.000340136,0.715070644,2.193491124,1.754063604,0.691558442,0.5 +477,1.042471042,0.732954545,0.613181818,0.744736842,0.919888346,0.472277228,0.292483464,0.188854868,0.826052632,0.382346109,1.105564388,1.004931973,0.71899529,2.230177515,1.815547703,0.762987013,0.5 +478,1.036036036,0.721590909,0.583636364,0.712280702,0.921004885,0.472648515,0.292603728,0.188977342,0.826578947,0.382462253,1.106677266,1.00952381,0.722919937,2.266863905,1.877031802,0.834415584,0.5 +479,1.048262548,0.713068182,0.564090909,0.689473684,0.922121424,0.473019802,0.292723993,0.189099816,0.827105263,0.382578397,1.107790143,1.014115646,0.726844584,2.303550296,1.938515901,0.905844156,0.5 +480,1.06048906,0.704545455,0.544545455,0.666666667,0.923237962,0.473391089,0.292844257,0.18922229,0.827631579,0.382694541,1.108903021,1.018707483,0.730769231,2.340236686,2,0.977272727,0.5 +481,1.052767053,0.693181818,0.527272727,0.648245614,0.922400558,0.473019802,0.292603728,0.18922229,0.826842105,0.382346109,1.108585056,1.021938776,0.733437991,2.856804734,2.609893993,1.485064935,0.5 +482,1.045045045,0.681818182,0.51,0.629824561,0.921563154,0.472648515,0.292363199,0.18922229,0.826052632,0.381997677,1.108267091,1.025170068,0.73610675,3.373372781,3.219787986,1.992857143,0.5 +483,1.023166023,0.681818182,0.498636364,0.618421053,0.92072575,0.472277228,0.29212267,0.18922229,0.825263158,0.381649245,1.107949126,1.028401361,0.73877551,3.889940828,3.829681979,2.500649351,0.5 +484,1.001287001,0.681818182,0.487272727,0.607017544,0.919888346,0.471905941,0.291882141,0.18922229,0.824473684,0.381300813,1.107631161,1.031632653,0.74144427,4.406508876,4.439575972,3.008441558,0.5 +485,1.001287001,0.676136364,0.476363636,0.600877193,0.919050942,0.471534653,0.291641612,0.18922229,0.823684211,0.380952381,1.107313196,1.034863946,0.74411303,4.923076923,5.049469965,3.516233766,0.5 +486,1.001287001,0.670454545,0.465454545,0.594736842,0.918492673,0.471534653,0.292002405,0.18983466,0.823026316,0.380952381,1.105564388,1.036734694,0.746153846,4.928402367,5.096819788,3.584415584,0.5 +487,1.003217503,0.664772727,0.457272727,0.592105263,0.917934403,0.471534653,0.292363199,0.19044703,0.822368421,0.380952381,1.10381558,1.038605442,0.748194662,4.933727811,5.144169611,3.652597403,0.5 +488,1.005148005,0.659090909,0.449090909,0.589473684,0.917376134,0.471534653,0.292723993,0.1910594,0.821710526,0.380952381,1.102066773,1.04047619,0.750235479,4.939053254,5.191519435,3.720779221,0.5 +489,1.013513514,0.659090909,0.442272727,0.59122807,0.916817865,0.471534653,0.293084787,0.19167177,0.821052632,0.380952381,1.100317965,1.042346939,0.752276295,4.944378698,5.238869258,3.788961039,0.5 +490,1.021879022,0.659090909,0.435454545,0.592982456,0.916259595,0.471534653,0.29344558,0.19228414,0.820394737,0.380952381,1.098569157,1.044217687,0.754317111,4.949704142,5.286219081,3.857142857,0.5 +491,1.014800515,0.661931818,0.432727273,0.603508772,0.91235171,0.469430693,0.29212267,0.191304348,0.816842105,0.379326365,1.095707472,1.044897959,0.755416013,4.577514793,4.862897527,3.532467532,0.5 +492,1.007722008,0.664772727,0.43,0.614035088,0.908443824,0.467326733,0.290799759,0.190324556,0.813289474,0.377700348,1.092845787,1.045578231,0.756514914,4.205325444,4.439575972,3.207792208,0.5 +493,1.005791506,0.667613636,0.432272727,0.625438596,0.904535939,0.465222772,0.289476849,0.189344764,0.809736842,0.376074332,1.089984102,1.046258503,0.757613815,3.833136095,4.016254417,2.883116883,0.5 +494,1.003861004,0.670454545,0.434545455,0.636842105,0.900628053,0.463118812,0.288153939,0.188364972,0.806184211,0.374448316,1.087122417,1.046938776,0.758712716,3.460946746,3.592932862,2.558441558,0.5 +495,0.994208494,0.673295455,0.441818182,0.646491228,0.896720167,0.461014851,0.286831028,0.187385181,0.802631579,0.3728223,1.084260731,1.047619048,0.759811617,3.088757396,3.169611307,2.233766234,0.5 +496,0.984555985,0.676136364,0.449090909,0.656140351,0.892114445,0.458910891,0.285628382,0.186650337,0.798552632,0.371196283,1.080922099,1.048129252,0.760753532,2.822485207,2.869257951,2.00974026,0.5 +497,0.986486486,0.6875,0.467272727,0.675438596,0.887508723,0.456806931,0.284425737,0.185915493,0.794473684,0.369570267,1.077583466,1.048639456,0.761695447,2.556213018,2.568904594,1.785714286,0.5 +498,0.988416988,0.698863636,0.485454545,0.694736842,0.882903001,0.45470297,0.283223091,0.185180649,0.790394737,0.367944251,1.074244833,1.04914966,0.762637363,2.289940828,2.268551237,1.561688312,0.5 +499,1.009009009,0.707386364,0.509545455,0.714912281,0.878297278,0.45259901,0.282020445,0.184445805,0.786315789,0.366318235,1.0709062,1.049659864,0.763579278,2.023668639,1.96819788,1.337662338,0.5 +500,1.02960103,0.715909091,0.533636364,0.735087719,0.873691556,0.45049505,0.280817799,0.183710961,0.782236842,0.364692218,1.067567568,1.050170068,0.764521193,1.75739645,1.667844523,1.113636364,0.5 +501,1.054697555,0.724431818,0.563181818,0.752631579,0.869225401,0.448886139,0.280216476,0.183466013,0.778552632,0.363763066,1.064705882,1.05170068,0.766718995,1.603550296,1.498939929,0.987662338,0.5 +502,1.07979408,0.732954545,0.592727273,0.770175439,0.864759246,0.447277228,0.279615153,0.183221066,0.774868421,0.362833914,1.061844197,1.053231293,0.768916797,1.449704142,1.330035336,0.861688312,0.5 +503,1.099099099,0.744318182,0.633181818,0.785964912,0.860293091,0.445668317,0.27901383,0.182976118,0.771184211,0.361904762,1.058982512,1.054761905,0.7711146,1.295857988,1.161130742,0.735714286,0.5 +504,1.118404118,0.755681818,0.673636364,0.801754386,0.855826936,0.444059406,0.278412508,0.18273117,0.7675,0.36097561,1.056120827,1.056292517,0.773312402,1.142011834,0.992226148,0.60974026,0.5 +505,1.105534106,0.767045455,0.718181818,0.820175439,0.851360782,0.442450495,0.277811185,0.182486222,0.763815789,0.360046458,1.053259141,1.057823129,0.775510204,0.98816568,0.823321555,0.483766234,0.5 +506,1.092664093,0.778409091,0.762727273,0.838596491,0.84619679,0.441212871,0.277811185,0.182853644,0.760131579,0.359930314,1.050556439,1.059693878,0.778021978,0.929585799,0.76254417,0.446753247,0.5 +507,1.068854569,0.789772727,0.817272727,0.856140351,0.841032798,0.439975248,0.277811185,0.183221066,0.756447368,0.35981417,1.047853736,1.061564626,0.780533752,0.871005917,0.701766784,0.40974026,0.5 +508,1.045045045,0.801136364,0.871818182,0.873684211,0.835868807,0.438737624,0.277811185,0.183588487,0.752763158,0.359698026,1.045151033,1.063435374,0.783045526,0.812426036,0.640989399,0.372727273,0.5 +509,1.03024453,0.815340909,0.926818182,0.889473684,0.830704815,0.4375,0.277811185,0.183955909,0.749078947,0.359581882,1.042448331,1.065306122,0.7855573,0.753846154,0.580212014,0.335714286,0.5 +510,1.015444015,0.829545455,0.981818182,0.905263158,0.825540823,0.436262376,0.277811185,0.184323331,0.745394737,0.359465738,1.039745628,1.067176871,0.788069074,0.695266272,0.519434629,0.298701299,0.5 +511,1.014157014,0.846590909,1.059090909,0.925438596,0.820935101,0.436138614,0.279134095,0.185915493,0.742368421,0.360743322,1.03736089,1.069387755,0.791522763,0.667455621,0.493286219,0.285064935,0.5 +512,1.012870013,0.863636364,1.136363636,0.945614035,0.816329379,0.436014851,0.280457005,0.187507655,0.739342105,0.362020906,1.034976153,1.071598639,0.794976452,0.63964497,0.467137809,0.271428571,0.5 +513,1.010939511,0.872159091,1.2,0.957017544,0.811723657,0.435891089,0.281779916,0.189099816,0.736315789,0.36329849,1.032591415,1.073809524,0.798430141,0.61183432,0.440989399,0.257792208,0.5 +514,1.009009009,0.880681818,1.263636364,0.968421053,0.807117934,0.435767327,0.283102826,0.190691978,0.733289474,0.364576074,1.030206677,1.076020408,0.80188383,0.584023669,0.414840989,0.244155844,0.5 +515,0.992277992,0.892045455,1.331818182,0.980701754,0.802512212,0.435643564,0.284425737,0.19228414,0.730263158,0.365853659,1.02782194,1.078231293,0.80533752,0.556213018,0.38869258,0.230519481,0.5 +516,0.975546976,0.903409091,1.4,0.992982456,0.798604327,0.437128713,0.287552616,0.195590937,0.728421053,0.369337979,1.025437202,1.079761905,0.808791209,0.539053254,0.37385159,0.223376623,0.5 +517,0.956241956,0.914772727,1.459090909,1.003508772,0.794696441,0.438613861,0.290679495,0.198897734,0.726578947,0.3728223,1.023052464,1.081292517,0.812244898,0.521893491,0.359010601,0.216233766,0.5 +518,0.936936937,0.926136364,1.518181818,1.014035088,0.790788555,0.44009901,0.293806374,0.202204532,0.724736842,0.37630662,1.020667727,1.082823129,0.815698587,0.504733728,0.344169611,0.209090909,0.5 +519,0.924710425,0.940340909,1.577272727,1.025438596,0.78688067,0.441584158,0.296933253,0.205511329,0.722894737,0.379790941,1.018282989,1.084353741,0.819152276,0.487573964,0.329328622,0.201948052,0.5 +520,0.912483912,0.954545455,1.636363636,1.036842105,0.782972784,0.443069307,0.300060132,0.208818126,0.721052632,0.383275261,1.015898251,1.085884354,0.822605965,0.470414201,0.314487633,0.194805195,0.5 +521,0.894465894,0.957386364,1.672727273,1.038596491,0.78060014,0.446905941,0.305953097,0.214819351,0.721184211,0.38931475,1.013036566,1.085034014,0.824960754,0.463313609,0.31024735,0.196753247,0.5 +522,0.876447876,0.960227273,1.709090909,1.040350877,0.778227495,0.450742574,0.311846061,0.220820576,0.721315789,0.395354239,1.010174881,1.084183673,0.827315542,0.456213018,0.306007067,0.198701299,0.5 +523,0.884813385,0.96875,1.731818182,1.046491228,0.77585485,0.454579208,0.317739026,0.2268218,0.721447368,0.401393728,1.007313196,1.083333333,0.82967033,0.449112426,0.301766784,0.200649351,0.5 +524,0.893178893,0.977272727,1.754545455,1.052631579,0.773482205,0.458415842,0.32363199,0.232823025,0.721578947,0.407433217,1.00445151,1.082482993,0.832025118,0.442011834,0.297526502,0.202597403,0.5 +525,0.907979408,0.985795455,1.763636364,1.057894737,0.77110956,0.462252475,0.329524955,0.23882425,0.721710526,0.413472706,1.001589825,1.081632653,0.834379906,0.434911243,0.293286219,0.204545455,0.5 +526,0.922779923,0.994318182,1.772727273,1.063157895,0.770830426,0.469306931,0.338785328,0.248499694,0.724210526,0.422996516,0.999046105,1.079591837,0.836420722,0.45443787,0.318021201,0.235064935,0.5 +527,0.946589447,1,1.772727273,1.06754386,0.770551291,0.476361386,0.348045701,0.258175138,0.726710526,0.432520325,0.996502385,1.07755102,0.838461538,0.473964497,0.342756184,0.265584416,0.5 +528,0.97039897,1.005681818,1.772727273,1.071929825,0.770272156,0.483415842,0.357306073,0.267850582,0.729210526,0.442044135,0.993958665,1.075510204,0.840502355,0.493491124,0.367491166,0.296103896,0.5 +529,0.983268983,1.011363636,1.759090909,1.074561404,0.769993022,0.490470297,0.366566446,0.277526026,0.731710526,0.451567944,0.991414944,1.073469388,0.842543171,0.513017751,0.392226148,0.326623377,0.5 +530,0.996138996,1.017045455,1.745454545,1.077192982,0.769713887,0.497524752,0.375826819,0.28720147,0.734210526,0.461091754,0.988871224,1.071428571,0.844583987,0.532544379,0.416961131,0.357142857,0.5 +531,0.992921493,1.017045455,1.718181818,1.078070175,0.771807397,0.507920792,0.388935658,0.300918555,0.739210526,0.474216028,0.987122417,1.068537415,0.847723705,0.763905325,0.679858657,0.581818182,0.5 +532,0.98970399,1.017045455,1.690909091,1.078947368,0.773900907,0.518316832,0.402044498,0.31463564,0.744210526,0.487340302,0.985373609,1.065646259,0.850863422,0.995266272,0.942756184,0.806493506,0.5 +533,0.969111969,1.019886364,1.659090909,1.077192982,0.775994417,0.528712871,0.415153337,0.328352725,0.749210526,0.500464576,0.983624801,1.062755102,0.85400314,1.226627219,1.20565371,1.031168831,0.5 +534,0.948519949,1.022727273,1.627272727,1.075438596,0.778087927,0.539108911,0.428262177,0.34206981,0.754210526,0.51358885,0.981875994,1.059863946,0.857142857,1.457988166,1.468551237,1.255844156,0.5 +535,0.933719434,1.022727273,1.6,1.074561404,0.780181438,0.54950495,0.441371016,0.355786895,0.759210526,0.526713124,0.980127186,1.056972789,0.860282575,1.689349112,1.731448763,1.480519481,0.5 +536,0.918918919,1.022727273,1.572727273,1.073684211,0.785066294,0.563490099,0.458689116,0.374280465,0.766842105,0.543205575,0.979014308,1.053401361,0.863736264,3.776331361,4.183038869,3.418181818,0.5 +537,0.929214929,1.028409091,1.559090909,1.075438596,0.789951151,0.577475248,0.476007216,0.392774036,0.774473684,0.559698026,0.977901431,1.049829932,0.867189953,5.863313609,6.634628975,5.355844156,0.5 +538,0.93951094,1.034090909,1.545454545,1.077192982,0.794836008,0.591460396,0.493325316,0.411267606,0.782105263,0.576190476,0.976788553,1.046258503,0.870643642,7.950295858,9.086219081,7.293506494,0.5 +539,0.959459459,1.034090909,1.536363636,1.072807018,0.799720865,0.605445545,0.510643416,0.429761176,0.789736842,0.592682927,0.975675676,1.042687075,0.874097331,10.03727811,11.53780919,9.231168831,0.5 +540,0.979407979,1.034090909,1.527272727,1.068421053,0.804605722,0.619430693,0.527961515,0.448254746,0.797368421,0.609175377,0.974562798,1.039115646,0.87755102,12.12426036,13.98939929,11.16883117,0.5 +541,1.083011583,1.03125,1.518181818,1.064912281,1.030844382,0.803465347,0.708839447,0.635272505,1.003421053,0.780255517,1.248966614,1.323809524,1.137048666,14.05976331,16.33922261,13.18181818,0.5 +542,1.186615187,1.028409091,1.509090909,1.061403509,1.257083043,0.9875,0.889717378,0.822290263,1.209473684,0.951335656,1.523370429,1.608503401,1.396546311,15.99526627,18.68904594,15.19480519,0.5 +543,1.416988417,1.034090909,1.5,1.060526316,1.483321703,1.171534653,1.07059531,1.009308022,1.415526316,1.122415796,1.797774245,1.893197279,1.656043956,17.93076923,21.03886926,17.20779221,0.5 +544,1.647361647,1.039772727,1.490909091,1.059649123,1.709560363,1.355569307,1.251473241,1.196325781,1.621578947,1.293495935,2.07217806,2.177891156,1.915541601,19.86627219,23.38869258,19.22077922,0.5 +545,1.724581725,1.036931818,1.459090909,1.056140351,1.935799023,1.53960396,1.432351173,1.383343539,1.827631579,1.464576074,2.346581876,2.462585034,2.175039246,21.80177515,25.7385159,21.23376623,0.5 +546,1.801801802,1.034090909,1.427272727,1.052631579,1.786601535,1.437623762,1.339987974,1.291733007,1.695394737,1.374448316,2.148330684,2.25085034,1.995761381,19.43017751,22.89540636,18.9012987,0.5 +547,1.756756757,1.03125,1.381818182,1.048245614,1.637404047,1.335643564,1.247624775,1.200122474,1.563157895,1.284320557,1.950079491,2.039115646,1.816483516,17.05857988,20.05229682,16.56883117,0.5 +548,1.711711712,1.028409091,1.336363636,1.043859649,1.48820656,1.233663366,1.155261575,1.108511941,1.430921053,1.194192799,1.751828299,1.827380952,1.637205651,14.68698225,17.20918728,14.23636364,0.5 +549,1.505791506,1.025568182,1.290909091,1.042105263,1.339009072,1.131683168,1.062898376,1.016901408,1.298684211,1.104065041,1.553577107,1.615646259,1.457927786,12.31538462,14.36607774,11.9038961,0.5 +550,1.2998713,1.022727273,1.245454545,1.040350877,1.189811584,1.02970297,0.970535177,0.925290876,1.166447368,1.013937282,1.355325914,1.403911565,1.278649922,9.943786982,11.5229682,9.571428571,0.5 +551,1.150579151,1.019886364,1.2,1.034210526,1.140963015,1.004331683,0.951894167,0.910226577,1.123552632,0.992682927,1.282034976,1.323639456,1.215698587,8.44260355,9.749823322,8.122077922,0.5 +552,1.001287001,1.017045455,1.154545455,1.028070175,1.092114445,0.978960396,0.933253157,0.895162278,1.080657895,0.971428571,1.208744038,1.243367347,1.152747253,6.941420118,7.976678445,6.672727273,0.5 +553,0.985199485,1.014204545,1.122727273,1.025438596,1.043265876,0.953589109,0.914612147,0.880097979,1.037763158,0.950174216,1.1354531,1.163095238,1.089795918,5.440236686,6.203533569,5.223376623,0.5 +554,0.969111969,1.011363636,1.090909091,1.022807018,0.994417306,0.928217822,0.895971137,0.86503368,0.994868421,0.928919861,1.062162162,1.082823129,1.026844584,3.939053254,4.430388693,3.774025974,0.5 +555,0.965250965,1.008522727,1.072727273,1.018421053,0.945568737,0.902846535,0.877330126,0.849969382,0.951973684,0.907665505,0.988871224,1.00255102,0.96389325,2.437869822,2.657243816,2.324675325,0.5 +556,0.961389961,1.005681818,1.054545455,1.014035088,0.95645499,0.922277228,0.901864101,0.879975505,0.961578947,0.926132404,0.991096979,1.002040816,0.9711146,2.150295858,2.325795053,2.05974026,0.5 +557,0.963320463,1.005681818,1.036363636,1.012280702,0.967341242,0.941707921,0.926398076,0.909981629,0.971184211,0.944599303,0.993322734,1.001530612,0.97833595,1.862721893,1.99434629,1.794805195,0.5 +558,0.965250965,1.005681818,1.018181818,1.010526316,0.978227495,0.961138614,0.950932051,0.939987753,0.980789474,0.963066202,0.99554849,1.001020408,0.9855573,1.575147929,1.662897527,1.52987013,0.5 +559,0.982625483,1.002840909,1.009090909,1.005263158,0.989113747,0.980569307,0.975466025,0.969993876,0.990394737,0.981533101,0.997774245,1.000510204,0.99277865,1.287573964,1.331448763,1.264935065,0.5 +560,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.5 +561,1.047619048,0.997159091,0.990909091,0.997368421,1.009490579,1.017326733,1.022369212,1.028781384,1.0075,1.015214866,1.002225755,1.000170068,1.007378336,0.946153846,0.938515901,0.96038961,0.5 +562,1.095238095,0.994318182,0.981818182,0.994736842,1.018981158,1.034653465,1.044738425,1.057562768,1.015,1.030429733,1.00445151,1.000340136,1.014756672,0.892307692,0.877031802,0.920779221,0.5 +563,1.131274131,0.988636364,0.977272727,0.990350877,1.028471738,1.051980198,1.067107637,1.086344152,1.0225,1.045644599,1.006677266,1.000510204,1.022135008,0.838461538,0.815547703,0.881168831,0.5 +564,1.167310167,0.982954545,0.972727273,0.985964912,1.037962317,1.069306931,1.089476849,1.115125536,1.03,1.060859466,1.008903021,1.000680272,1.029513344,0.784615385,0.754063604,0.841558442,0.5 +565,1.187902188,0.985795455,0.977272727,0.984210526,1.047452896,1.086633663,1.111846061,1.14390692,1.0375,1.076074332,1.011128776,1.00085034,1.03689168,0.730769231,0.692579505,0.801948052,0.5 +566,1.208494208,0.988636364,0.981818182,0.98245614,1.05457083,1.099752475,1.12940469,1.167911819,1.041842105,1.086527294,1.012877583,1.002040816,1.043799058,0.711242604,0.672084806,0.788961039,0.5 +567,1.196267696,0.985795455,0.986363636,0.979824561,1.061688765,1.112871287,1.146963319,1.191916718,1.046184211,1.096980256,1.014626391,1.003231293,1.050706436,0.691715976,0.651590106,0.775974026,0.5 +568,1.184041184,0.982954545,0.990909091,0.977192982,1.068806699,1.125990099,1.164521948,1.215921617,1.050526316,1.107433217,1.016375199,1.004421769,1.057613815,0.672189349,0.631095406,0.762987013,0.5 +569,1.171814672,0.980113636,1,0.973684211,1.075924634,1.139108911,1.182080577,1.239926516,1.054868421,1.117886179,1.018124006,1.005612245,1.064521193,0.652662722,0.610600707,0.75,0.5 +570,1.15958816,0.977272727,1.009090909,0.970175439,1.083042568,1.152227723,1.199639206,1.263931415,1.059210526,1.128339141,1.019872814,1.006802721,1.071428571,0.633136095,0.590106007,0.737012987,0.5 +571,1.176962677,0.980113636,1.031818182,0.970175439,1.121702722,1.1875,1.237642814,1.308511941,1.091315789,1.157839721,1.061685215,1.053911565,1.117268446,0.79408284,0.785159011,0.92012987,0.5 +572,1.194337194,0.982954545,1.054545455,0.970175439,1.160362875,1.222772277,1.275646422,1.353092468,1.123421053,1.187340302,1.103497615,1.101020408,1.16310832,0.955029586,0.980212014,1.103246753,0.5 +573,1.305019305,0.980113636,1.086363636,0.96754386,1.199023029,1.258044554,1.31365003,1.397672994,1.155526316,1.216840883,1.145310016,1.148129252,1.208948195,1.115976331,1.175265018,1.286363636,0.5 +574,1.415701416,0.977272727,1.118181818,0.964912281,1.237683182,1.293316832,1.351653638,1.442253521,1.187631579,1.246341463,1.187122417,1.195238095,1.254788069,1.276923077,1.370318021,1.469480519,0.5 +575,1.518661519,0.977272727,1.159090909,0.963157895,1.276343336,1.328589109,1.389657246,1.486834048,1.219736842,1.275842044,1.228934817,1.242346939,1.300627943,1.437869822,1.565371025,1.652597403,0.5 +576,1.621621622,0.977272727,1.2,0.961403509,1.293928821,1.344925743,1.40865905,1.511083895,1.232368421,1.287921022,1.249443561,1.267857143,1.325274725,1.827810651,2.049469965,2.098701299,0.5 +577,1.647361647,0.980113636,1.254545455,0.960526316,1.311514306,1.361262376,1.427660854,1.535333742,1.245,1.3,1.269952305,1.293367347,1.349921507,2.217751479,2.533568905,2.544805195,0.5 +578,1.673101673,0.982954545,1.309090909,0.959649123,1.329099791,1.37759901,1.446662658,1.559583588,1.257631579,1.312078978,1.290461049,1.318877551,1.374568289,2.607692308,3.017667845,2.990909091,0.5 +579,1.589446589,0.980113636,1.377272727,0.957894737,1.346685276,1.393935644,1.465664462,1.583833435,1.270263158,1.324157956,1.310969793,1.344387755,1.399215071,2.997633136,3.501766784,3.437012987,0.5 +580,1.505791506,0.977272727,1.445454545,0.956140351,1.364270761,1.410272277,1.484666266,1.608083282,1.282894737,1.336236934,1.331478537,1.369897959,1.423861852,3.387573964,3.985865724,3.883116883,0.5 +581,1.394465894,0.980113636,1.536363636,0.953508772,1.307466853,1.366955446,1.445219483,1.571586038,1.228815789,1.294425087,1.269157393,1.305782313,1.367503925,3.585207101,4.23180212,4.101298701,0.5 +582,1.283140283,0.982954545,1.627272727,0.950877193,1.250662945,1.323638614,1.4057727,1.535088794,1.174736842,1.25261324,1.206836248,1.241666667,1.311145997,3.782840237,4.477738516,4.319480519,0.5 +583,1.212355212,0.982954545,1.75,0.949122807,1.193859037,1.280321782,1.366325917,1.498591549,1.120657895,1.210801394,1.144515103,1.17755102,1.254788069,3.980473373,4.723674912,4.537662338,0.5 +584,1.141570142,0.982954545,1.872727273,0.947368421,1.137055129,1.23700495,1.326879134,1.462094305,1.066578947,1.168989547,1.082193959,1.113435374,1.198430141,4.178106509,4.969611307,4.755844156,0.5 +585,1.167953668,0.988636364,2.031818182,0.947368421,1.080251221,1.193688119,1.287432351,1.425597061,1.0125,1.1271777,1.019872814,1.049319728,1.142072214,4.375739645,5.215547703,4.974025974,0.5 +586,1.194337194,0.994318182,2.190909091,0.947368421,1.072295883,1.185891089,1.280697535,1.421432945,1.002631579,1.117305459,1.017329094,1.05255102,1.143642072,4.220118343,5.072084806,4.905844156,0.5 +587,1.222651223,0.997159091,2.354545455,0.95,1.064340544,1.178094059,1.273962718,1.41726883,0.992763158,1.107433217,1.014785374,1.055782313,1.145211931,4.064497041,4.928621908,4.837662338,0.5 +588,1.250965251,1,2.518181818,0.952631579,1.056385206,1.17029703,1.267227901,1.413104715,0.982894737,1.097560976,1.012241653,1.059013605,1.14678179,3.90887574,4.785159011,4.769480519,0.5 +589,1.251608752,1.002840909,2.668181818,0.951754386,1.048429867,1.1625,1.260493085,1.4089406,0.973026316,1.087688734,1.009697933,1.062244898,1.148351648,3.753254438,4.641696113,4.701298701,0.5 +590,1.252252252,1.005681818,2.818181818,0.950877193,1.040474529,1.15470297,1.253758268,1.404776485,0.963157895,1.077816492,1.007154213,1.06547619,1.149921507,3.597633136,4.498233216,4.633116883,0.5 +591,1.232303732,1.008522727,2.904545455,0.948245614,1.029867411,1.143193069,1.242693927,1.394978567,0.951052632,1.064576074,1.003656598,1.068707483,1.150078493,3.40887574,4.286925795,4.476623377,0.5 +592,1.212355212,1.011363636,2.990909091,0.945614035,1.019260293,1.131683168,1.231629585,1.385180649,0.938947368,1.051335656,1.000158983,1.071938776,1.150235479,3.220118343,4.075618375,4.32012987,0.5 +593,1.205920206,1.014204545,2.995454545,0.946491228,1.008653175,1.120173267,1.220565244,1.375382731,0.926842105,1.038095238,0.996661367,1.075170068,1.150392465,3.031360947,3.864310954,4.163636364,0.5 +594,1.199485199,1.017045455,3,0.947368421,0.998046057,1.108663366,1.209500902,1.365584813,0.914736842,1.02485482,0.993163752,1.078401361,1.150549451,2.84260355,3.653003534,4.007142857,0.5 +595,1.231016731,1.022727273,2.890909091,0.948245614,0.987438939,1.097153465,1.19843656,1.355786895,0.902631579,1.011614402,0.989666137,1.081632653,1.150706436,2.653846154,3.441696113,3.850649351,0.5 +596,1.262548263,1.028409091,2.781818182,0.949122807,0.974459177,1.082425743,1.183283223,1.340722596,0.889078947,0.996167247,0.985532591,1.085034014,1.149921507,2.50887574,3.271378092,3.683116883,0.5 +597,1.281209781,1.03125,2.586363636,0.945614035,0.961479414,1.06769802,1.168129886,1.325658298,0.875526316,0.980720093,0.981399046,1.088435374,1.149136578,2.363905325,3.101060071,3.515584416,0.5 +598,1.2998713,1.034090909,2.390909091,0.942105263,0.948499651,1.052970297,1.152976548,1.310593999,0.861973684,0.965272938,0.977265501,1.091836735,1.148351648,2.218934911,2.930742049,3.348051948,0.5 +599,1.274774775,1.036931818,2.204545455,0.94122807,0.935519888,1.038242574,1.137823211,1.2955297,0.848421053,0.949825784,0.973131955,1.095238095,1.147566719,2.073964497,2.760424028,3.180519481,0.5 +600,1.24967825,1.039772727,2.018181818,0.940350877,0.922540126,1.023514851,1.122669874,1.280465401,0.834868421,0.93437863,0.96899841,1.098639456,1.14678179,1.928994083,2.590106007,3.012987013,0.5 +601,1.198198198,1.045454545,1.872727273,0.940350877,0.908164689,1.007054455,1.105231509,1.262339253,0.820131579,0.917537747,0.964228935,1.102040816,1.145054945,2.064497041,2.759010601,3.20974026,0.5 +602,1.146718147,1.051136364,1.727272727,0.940350877,0.893789253,0.990594059,1.087793145,1.244213105,0.805394737,0.900696864,0.959459459,1.105442177,1.1433281,2.2,2.927915194,3.406493506,0.5 +603,1.105534106,1.053977273,1.622727273,0.937719298,0.879413817,0.974133663,1.070354781,1.226086957,0.790657895,0.883855981,0.954689984,1.108843537,1.141601256,2.335502959,3.096819788,3.603246753,0.5 +604,1.064350064,1.056818182,1.518181818,0.935087719,0.865038381,0.957673267,1.052916416,1.207960808,0.775921053,0.867015099,0.949920509,1.112244898,1.139874411,2.471005917,3.265724382,3.8,0.5 +605,1.064993565,1.059659091,1.472727273,0.937719298,0.850662945,0.941212871,1.035478052,1.18983466,0.761184211,0.850174216,0.945151033,1.115646259,1.138147567,2.606508876,3.434628975,3.996753247,0.5 +606,1.065637066,1.0625,1.427272727,0.940350877,0.835729239,0.923762376,1.016596512,1.169136558,0.746447368,0.832868757,0.940540541,1.119387755,1.136420722,4.695857988,6.653710247,7.647402597,0.5 +607,1.079150579,1.068181818,1.431818182,0.94122807,0.820795534,0.906311881,0.997714973,1.148438457,0.731710526,0.815563298,0.935930048,1.123129252,1.134693878,6.785207101,9.872791519,11.29805195,0.5 +608,1.092664093,1.073863636,1.436363636,0.942105263,0.805861828,0.888861386,0.978833434,1.127740355,0.716973684,0.79825784,0.931319555,1.126870748,1.132967033,8.874556213,13.09187279,14.9487013,0.5 +609,1.092020592,1.076704545,1.481818182,0.940350877,0.790928123,0.871410891,0.959951894,1.107042254,0.702236842,0.780952381,0.926709062,1.130612245,1.131240188,10.96390533,16.31095406,18.59935065,0.5 +610,1.091377091,1.079545455,1.527272727,0.938596491,0.775994417,0.853960396,0.941070355,1.086344152,0.6875,0.763646922,0.922098569,1.134353741,1.129513344,13.05325444,19.53003534,22.25,0.5 +611,1.085585586,1.079545455,1.586363636,0.940350877,0.760781577,0.836138614,0.921707757,1.06503368,0.673026316,0.746573751,0.918124006,1.138945578,1.12967033,12.48698225,18.63321555,21.24285714,0.5 +612,1.07979408,1.079545455,1.645454545,0.942105263,0.745568737,0.818316832,0.902345159,1.043723209,0.658552632,0.729500581,0.914149444,1.143537415,1.129827316,11.92071006,17.73639576,20.23571429,0.5 +613,1.072072072,1.076704545,1.709090909,0.94122807,0.730355897,0.80049505,0.882982562,1.022412737,0.644078947,0.71242741,0.910174881,1.148129252,1.129984301,11.35443787,16.83957597,19.22857143,0.5 +614,1.064350064,1.073863636,1.772727273,0.940350877,0.715143057,0.782673267,0.863619964,1.001102266,0.629605263,0.695354239,0.906200318,1.152721088,1.130141287,10.78816568,15.94275618,18.22142857,0.5 +615,1.059202059,1.073863636,1.854545455,0.940350877,0.699930216,0.764851485,0.844257366,0.979791794,0.615131579,0.678281069,0.902225755,1.157312925,1.130298273,10.22189349,15.0459364,17.21428571,0.5 +616,1.054054054,1.073863636,1.936363636,0.940350877,0.684856943,0.74740099,0.825135298,0.960440906,0.601184211,0.661672474,0.898569157,1.161734694,1.131397174,8.892899408,12.96819788,14.72402597,0.5 +617,1.051480051,1.071022727,2.068181818,0.94122807,0.669783671,0.729950495,0.806013229,0.941090018,0.587236842,0.645063879,0.89491256,1.166156463,1.132496075,7.563905325,10.89045936,12.23376623,0.5 +618,1.048906049,1.068181818,2.2,0.942105263,0.654710398,0.7125,0.786891161,0.92173913,0.573289474,0.628455285,0.891255962,1.170578231,1.133594976,6.234911243,8.812720848,9.743506494,0.5 +619,1.028314028,1.0625,2.363636364,0.94122807,0.639637125,0.695049505,0.767769092,0.902388242,0.559342105,0.61184669,0.887599364,1.175,1.134693878,4.90591716,6.734982332,7.253246753,0.5 +620,1.007722008,1.056818182,2.527272727,0.940350877,0.624563852,0.67759901,0.748647023,0.883037355,0.545394737,0.595238095,0.883942766,1.179421769,1.135792779,3.576923077,4.657243816,4.762987013,0.5 +621,1.007078507,1.048295455,2.740909091,0.938596491,0.610746685,0.661509901,0.730607336,0.860257195,0.532631579,0.580255517,0.881240064,1.182823129,1.138147567,3.580473373,4.655830389,4.744155844,0.5 +622,1.006435006,1.039772727,2.954545455,0.936842105,0.596929518,0.645420792,0.712567649,0.837477036,0.519868421,0.565272938,0.878537361,1.18622449,1.140502355,3.584023669,4.654416961,4.725324675,0.5 +623,1.012226512,1.03125,3.172727273,0.934210526,0.583112352,0.629331683,0.694527962,0.814696877,0.507105263,0.55029036,0.875834658,1.18962585,1.142857143,3.587573964,4.653003534,4.706493506,0.5 +624,1.018018018,1.022727273,3.390909091,0.931578947,0.569295185,0.613242574,0.676488274,0.791916718,0.494342105,0.535307782,0.873131955,1.193027211,1.145211931,3.59112426,4.651590106,4.687662338,0.5 +625,1.006435006,1.017045455,3.572727273,0.929824561,0.555478018,0.597153465,0.658448587,0.769136558,0.481578947,0.520325203,0.870429253,1.196428571,1.147566719,3.594674556,4.650176678,4.668831169,0.5 +626,0.994851995,1.011363636,3.754545455,0.928070175,0.542358688,0.581683168,0.641130487,0.749173301,0.469605263,0.506155633,0.867408585,1.198639456,1.149136578,3.498224852,4.586572438,4.69025974,0.5 +627,0.965250965,1.002840909,3.845454545,0.927192982,0.529239358,0.566212871,0.623812387,0.729210043,0.457631579,0.491986063,0.864387917,1.20085034,1.150706436,3.401775148,4.522968198,4.711688312,0.5 +628,0.935649936,0.994318182,3.936363636,0.926315789,0.516120028,0.550742574,0.606494287,0.709246785,0.445657895,0.477816492,0.86136725,1.203061224,1.152276295,3.305325444,4.459363958,4.733116883,0.5 +629,0.903474903,0.985795455,3.877272727,0.924561404,0.503000698,0.535272277,0.589176188,0.689283527,0.433684211,0.463646922,0.858346582,1.205272109,1.153846154,3.20887574,4.395759717,4.754545455,0.5 +630,0.871299871,0.977272727,3.818181818,0.922807018,0.489881368,0.51980198,0.571858088,0.669320269,0.421710526,0.449477352,0.855325914,1.207482993,1.155416013,3.112426036,4.332155477,4.775974026,0.5 +631,0.855212355,0.96875,3.6,0.919298246,0.478436846,0.506435644,0.55694528,0.652051439,0.411447368,0.43728223,0.849920509,1.206802721,1.152747253,2.752071006,3.826855124,4.24025974,0.5 +632,0.839124839,0.960227273,3.381818182,0.915789474,0.466992324,0.493069307,0.542032471,0.634782609,0.401184211,0.425087108,0.844515103,1.206122449,1.150078493,2.391715976,3.32155477,3.704545455,0.5 +633,0.837194337,0.948863636,3.063636364,0.913157895,0.455547802,0.47970297,0.527119663,0.617513778,0.390921053,0.412891986,0.839109698,1.205442177,1.147409733,2.031360947,2.816254417,3.168831169,0.5 +634,0.835263835,0.9375,2.745454545,0.910526316,0.44410328,0.466336634,0.512206855,0.600244948,0.380657895,0.400696864,0.833704293,1.204761905,1.144740973,1.671005917,2.310954064,2.633116883,0.5 +635,0.83976834,0.928977273,2.395454545,0.906140351,0.432658758,0.452970297,0.497294047,0.582976118,0.370394737,0.388501742,0.828298887,1.204081633,1.142072214,1.310650888,1.80565371,2.097402597,0.5 +636,0.844272844,0.920454545,2.045454545,0.901754386,0.421772505,0.440470297,0.483343355,0.566564605,0.360789474,0.377119628,0.823370429,1.203571429,1.139717425,1.163905325,1.590812721,1.844805195,0.5 +637,0.848777349,0.903409091,1.790909091,0.896491228,0.410886253,0.427970297,0.469392664,0.550153092,0.351184211,0.365737515,0.818441971,1.203061224,1.137362637,1.017159763,1.375971731,1.592207792,0.5 +638,0.853281853,0.886363636,1.536363636,0.89122807,0.4,0.415470297,0.455441972,0.53374158,0.341578947,0.354355401,0.813513514,1.20255102,1.135007849,0.870414201,1.161130742,1.33961039,0.5 +639,0.862290862,0.875,1.359090909,0.888596491,0.389113747,0.402970297,0.441491281,0.517330067,0.331973684,0.342973287,0.808585056,1.202040816,1.132653061,0.723668639,0.946289753,1.087012987,0.5 +640,0.871299871,0.863636364,1.181818182,0.885964912,0.378227495,0.390470297,0.427540589,0.500918555,0.322368421,0.331591173,0.803656598,1.201530612,1.130298273,0.576923077,0.731448763,0.834415584,0.5 +641,0.868725869,0.852272727,1.054545455,0.879824561,0.368597348,0.379579208,0.415273602,0.4865891,0.313947368,0.321835075,0.80254372,1.205102041,1.133124019,0.59112426,0.750530035,0.846103896,0.5 +642,0.866151866,0.840909091,0.927272727,0.873684211,0.358967202,0.368688119,0.403006615,0.472259645,0.305526316,0.312078978,0.801430843,1.208673469,1.135949765,0.605325444,0.769611307,0.857792208,0.5 +643,0.869369369,0.829545455,0.836818182,0.869298246,0.349337055,0.35779703,0.390739627,0.45793019,0.297105263,0.30232288,0.800317965,1.212244898,1.13877551,0.619526627,0.78869258,0.869480519,0.5 +644,0.872586873,0.818181818,0.746363636,0.864912281,0.339706909,0.346905941,0.37847264,0.443600735,0.288684211,0.292566783,0.799205087,1.215816327,1.141601256,0.633727811,0.807773852,0.881168831,0.5 +645,0.863577864,0.803977273,0.685909091,0.860526316,0.330076762,0.336014851,0.366205652,0.42927128,0.280263158,0.282810685,0.79809221,1.219387755,1.144427002,0.647928994,0.826855124,0.892857143,0.5 +646,0.854568855,0.789772727,0.625454545,0.856140351,0.321981856,0.326732673,0.355742634,0.416901408,0.273157895,0.27456446,0.797774245,1.222108844,1.149136578,0.707100592,0.914487633,0.985714286,0.5 +647,0.837194337,0.778409091,0.585,0.850877193,0.31388695,0.317450495,0.345279615,0.404531537,0.266052632,0.266318235,0.79745628,1.224829932,1.153846154,0.766272189,1.002120141,1.078571429,0.5 +648,0.81981982,0.767045455,0.544545455,0.845614035,0.305792045,0.308168317,0.334816597,0.392161666,0.258947368,0.258072009,0.797138315,1.22755102,1.15855573,0.825443787,1.08975265,1.171428571,0.5 +649,0.802445302,0.75,0.510454545,0.838596491,0.297697139,0.298886139,0.324353578,0.379791794,0.251842105,0.249825784,0.79682035,1.230272109,1.163265306,0.884615385,1.177385159,1.264285714,0.5 +650,0.785070785,0.732954545,0.476363636,0.831578947,0.289602233,0.28960396,0.313890559,0.367421923,0.244736842,0.241579559,0.796502385,1.232993197,1.167974882,0.943786982,1.265017668,1.357142857,0.5 +651,0.776061776,0.724431818,0.456818182,0.825438596,0.282484299,0.281435644,0.304630186,0.356521739,0.238552632,0.234494774,0.797933227,1.232312925,1.177864992,0.918934911,1.224734982,1.309090909,0.5 +652,0.767052767,0.715909091,0.437272727,0.819298246,0.275366364,0.273267327,0.295369814,0.345621555,0.232368421,0.227409988,0.79936407,1.231632653,1.187755102,0.89408284,1.184452297,1.261038961,0.5 +653,0.781209781,0.701704545,0.416363636,0.811403509,0.26824843,0.26509901,0.286109441,0.334721372,0.226184211,0.220325203,0.800794913,1.230952381,1.197645212,0.869230769,1.144169611,1.212987013,0.5 +654,0.795366795,0.6875,0.395454545,0.803508772,0.261130495,0.256930693,0.276849068,0.323821188,0.22,0.213240418,0.802225755,1.230272109,1.207535322,0.844378698,1.103886926,1.164935065,0.5 +655,0.823680824,0.670454545,0.383181818,0.795614035,0.254012561,0.248762376,0.267588695,0.312921004,0.213815789,0.206155633,0.803656598,1.229591837,1.217425432,0.819526627,1.06360424,1.116883117,0.5 +656,0.851994852,0.653409091,0.370909091,0.787719298,0.247871598,0.241707921,0.259771497,0.303735456,0.208289474,0.2,0.799841017,1.221768707,1.216797488,0.79112426,1.02614841,1.075974026,0.5 +657,0.864864865,0.642045455,0.358636364,0.778070175,0.241730635,0.234653465,0.251954299,0.294549908,0.202763158,0.193844367,0.796025437,1.213945578,1.216169545,0.762721893,0.98869258,1.035064935,0.5 +658,0.877734878,0.630681818,0.346363636,0.768421053,0.235589672,0.22759901,0.244137102,0.28536436,0.197236842,0.187688734,0.792209857,1.206122449,1.215541601,0.734319527,0.951236749,0.994155844,0.5 +659,0.887387387,0.619318182,0.337727273,0.760526316,0.229448709,0.220544554,0.236319904,0.276178812,0.191710526,0.181533101,0.788394277,1.19829932,1.214913658,0.70591716,0.913780919,0.953246753,0.5 +660,0.897039897,0.607954545,0.329090909,0.752631579,0.223307746,0.213490099,0.228502706,0.266993264,0.186184211,0.175377468,0.784578696,1.19047619,1.214285714,0.677514793,0.876325088,0.912337662,0.5 +661,0.888674389,0.59375,0.320454545,0.742105263,0.21786462,0.207425743,0.221647625,0.258787508,0.181710526,0.170150987,0.76518283,1.166326531,1.178649922,0.66035503,0.85229682,0.887012987,0.5 +662,0.88030888,0.579545455,0.311818182,0.731578947,0.212421493,0.201361386,0.214792544,0.250581751,0.177236842,0.164924506,0.745786963,1.142176871,1.143014129,0.643195266,0.828268551,0.861688312,0.5 +663,0.871299871,0.569602273,0.304090909,0.719298246,0.206978367,0.19529703,0.207937462,0.242375995,0.172763158,0.159698026,0.726391097,1.118027211,1.107378336,0.626035503,0.804240283,0.836363636,0.5 +664,0.862290862,0.559659091,0.296363636,0.707017544,0.201535241,0.189232673,0.201082381,0.234170239,0.168289474,0.154471545,0.706995231,1.093877551,1.071742543,0.60887574,0.780212014,0.811038961,0.5 +665,0.871943372,0.546875,0.288636364,0.693859649,0.196092114,0.183168317,0.1942273,0.225964483,0.163815789,0.149245064,0.687599364,1.069727891,1.03610675,0.591715976,0.756183746,0.785714286,0.5 +666,0.881595882,0.534090909,0.280909091,0.680701754,0.191346825,0.178094059,0.1884546,0.21910594,0.159868421,0.144947735,0.665659777,1.042687075,0.994819466,0.563313609,0.713780919,0.735064935,0.5 +667,0.909266409,0.525852273,0.274545455,0.668421053,0.186601535,0.173019802,0.1826819,0.212247397,0.155921053,0.140650407,0.643720191,1.015646259,0.953532182,0.534911243,0.671378092,0.684415584,0.5 +668,0.936936937,0.517613636,0.268181818,0.656140351,0.181856246,0.167945545,0.1769092,0.205388855,0.151973684,0.136353078,0.621780604,0.988605442,0.912244898,0.506508876,0.628975265,0.633766234,0.5 +669,0.953667954,0.505397727,0.261818182,0.642105263,0.177110956,0.162871287,0.1711365,0.198530312,0.148026316,0.132055749,0.599841017,0.961564626,0.870957614,0.478106509,0.586572438,0.583116883,0.5 +670,0.97039897,0.493181818,0.255454545,0.628070175,0.172365666,0.15779703,0.1653638,0.19167177,0.144078947,0.12775842,0.577901431,0.93452381,0.82967033,0.449704142,0.544169611,0.532467532,0.5 +671,0.960746461,0.48125,0.250454545,0.615789474,0.168318214,0.153341584,0.160312688,0.185670545,0.140657895,0.123925668,0.564705882,0.917346939,0.807849294,0.43964497,0.529328622,0.514285714,0.5 +672,0.951093951,0.469318182,0.245454545,0.603508772,0.164270761,0.148886139,0.155261575,0.17966932,0.137236842,0.120092915,0.551510334,0.900170068,0.786028257,0.429585799,0.514487633,0.496103896,0.5 +673,0.923423423,0.459943182,0.240909091,0.592982456,0.160223308,0.144430693,0.150210463,0.173668096,0.133815789,0.116260163,0.538314785,0.882993197,0.764207221,0.419526627,0.499646643,0.477922078,0.5 +674,0.895752896,0.450568182,0.236363636,0.58245614,0.156175855,0.139975248,0.145159351,0.167666871,0.130394737,0.11242741,0.525119237,0.865816327,0.742386185,0.409467456,0.484805654,0.45974026,0.5 +675,0.852638353,0.437784091,0.233181818,0.574561404,0.152128402,0.135519802,0.140108238,0.161665646,0.126973684,0.108594657,0.511923688,0.848639456,0.720565149,0.399408284,0.469964664,0.441558442,0.5 +676,0.80952381,0.425,0.23,0.566666667,0.148639218,0.131806931,0.136019242,0.156766687,0.124078947,0.105458769,0.502225755,0.835714286,0.705965463,0.406508876,0.479151943,0.45,0.5 +677,0.787644788,0.416193182,0.222727273,0.562280702,0.145150035,0.128094059,0.131930247,0.151867728,0.121184211,0.10232288,0.492527822,0.822789116,0.691365777,0.413609467,0.488339223,0.458441558,0.5 +678,0.765765766,0.407386364,0.215454545,0.557894737,0.141660851,0.124381188,0.127841251,0.146968769,0.118289474,0.099186992,0.482829889,0.809863946,0.676766091,0.420710059,0.497526502,0.466883117,0.5 +679,0.77027027,0.397159091,0.212272727,0.552631579,0.138171668,0.120668317,0.123752255,0.14206981,0.115394737,0.096051103,0.473131955,0.796938776,0.662166405,0.427810651,0.506713781,0.475324675,0.5 +680,0.774774775,0.386931818,0.209090909,0.547368421,0.134682484,0.116955446,0.119663259,0.137170851,0.1125,0.092915215,0.463434022,0.784013605,0.647566719,0.434911243,0.51590106,0.483766234,0.5 +681,0.803088803,0.379829545,0.205454545,0.542105263,0.13175157,0.113861386,0.116175586,0.13312921,0.11,0.090243902,0.456756757,0.773809524,0.63689168,0.453846154,0.549823322,0.525974026,0.5 +682,0.831402831,0.372727273,0.201818182,0.536842105,0.128820656,0.110767327,0.112687913,0.129087569,0.1075,0.08757259,0.450079491,0.763605442,0.626216641,0.472781065,0.583745583,0.568181818,0.5 +683,0.842985843,0.363352273,0.198636364,0.53245614,0.125889742,0.107673267,0.109200241,0.125045928,0.105,0.084901278,0.443402226,0.753401361,0.615541601,0.491715976,0.617667845,0.61038961,0.5 +684,0.854568855,0.353977273,0.195454545,0.528070175,0.122958828,0.104579208,0.105712568,0.121004287,0.1025,0.082229965,0.43672496,0.743197279,0.604866562,0.510650888,0.651590106,0.652597403,0.5 +685,0.835263835,0.345454545,0.193181818,0.525438596,0.120027913,0.101485149,0.102224895,0.116962645,0.1,0.079558653,0.430047695,0.732993197,0.594191523,0.529585799,0.685512367,0.694805195,0.5 +686,0.815958816,0.336931818,0.190909091,0.522807018,0.119330077,0.100123762,0.100420926,0.114390692,0.098815789,0.078629501,0.424165342,0.723639456,0.585714286,0.526627219,0.68975265,0.707792208,0.5 +687,0.776061776,0.328125,0.185909091,0.520175439,0.11863224,0.098762376,0.098616957,0.111818739,0.097631579,0.077700348,0.418282989,0.714285714,0.577237049,0.523668639,0.693992933,0.720779221,0.5 +688,0.736164736,0.319318182,0.180909091,0.51754386,0.117934403,0.09740099,0.096812989,0.109246785,0.096447368,0.076771196,0.412400636,0.704931973,0.568759812,0.520710059,0.698233216,0.733766234,0.5 +689,0.704633205,0.311363636,0.174545455,0.514912281,0.117236567,0.096039604,0.09500902,0.106674832,0.095263158,0.075842044,0.406518283,0.695578231,0.560282575,0.517751479,0.702473498,0.746753247,0.5 +690,0.673101673,0.303409091,0.168181818,0.512280702,0.11653873,0.094678218,0.093205051,0.104102878,0.094078947,0.074912892,0.40063593,0.68622449,0.551805338,0.514792899,0.706713781,0.75974026,0.5 +691,0.67953668,0.301704545,0.163181818,0.506140351,0.113189114,0.091460396,0.089837643,0.100306185,0.091842105,0.072125436,0.393163752,0.674659864,0.541130298,0.472189349,0.650176678,0.7,0.5 +692,0.685971686,0.3,0.158181818,0.5,0.109839498,0.088242574,0.086470235,0.096509492,0.089605263,0.069337979,0.385691574,0.663095238,0.530455259,0.429585799,0.593639576,0.64025974,0.5 +693,0.718790219,0.288068182,0.159545455,0.493859649,0.106489881,0.085024752,0.083102826,0.092712799,0.087368421,0.066550523,0.378219396,0.651530612,0.51978022,0.386982249,0.537102473,0.580519481,0.5 +694,0.751608752,0.276136364,0.160909091,0.487719298,0.103140265,0.081806931,0.079735418,0.088916105,0.085131579,0.063763066,0.370747218,0.639965986,0.509105181,0.344378698,0.480565371,0.520779221,0.5 +695,0.791505792,0.272159091,0.155454545,0.481578947,0.099790649,0.078589109,0.07636801,0.085119412,0.082894737,0.06097561,0.36327504,0.628401361,0.498430141,0.301775148,0.424028269,0.461038961,0.5 +696,0.831402831,0.268181818,0.15,0.475438596,0.097836706,0.076485149,0.074203247,0.082547459,0.081184211,0.059349593,0.356120827,0.616836735,0.488540031,0.30887574,0.434628975,0.473376623,0.5 +697,0.841698842,0.261363636,0.148636364,0.469298246,0.095882763,0.074381188,0.072038485,0.079975505,0.079473684,0.057723577,0.348966614,0.605272109,0.478649922,0.315976331,0.445229682,0.485714286,0.5 +698,0.851994852,0.254545455,0.147272727,0.463157895,0.093928821,0.072277228,0.069873722,0.077403552,0.077763158,0.056097561,0.341812401,0.593707483,0.468759812,0.323076923,0.455830389,0.498051948,0.5 +699,0.810810811,0.248863636,0.142727273,0.457017544,0.091974878,0.070173267,0.06770896,0.074831598,0.076052632,0.054471545,0.334658188,0.582142857,0.458869702,0.330177515,0.466431095,0.51038961,0.5 +700,0.76962677,0.243181818,0.138181818,0.450877193,0.090020935,0.068069307,0.065544197,0.072259645,0.074342105,0.052845528,0.327503975,0.570578231,0.448979592,0.337278107,0.477031802,0.522727273,0.5 +701,0.716216216,0.237784091,0.136818182,0.443859649,0.088625262,0.066707921,0.063980758,0.070422535,0.073289474,0.051684088,0.321939587,0.56122449,0.441601256,0.466272189,0.671378092,0.745454545,0.5 +702,0.662805663,0.232386364,0.135454545,0.436842105,0.087229588,0.065346535,0.062417318,0.068585426,0.072236842,0.050522648,0.316375199,0.551870748,0.43422292,0.595266272,0.865724382,0.968181818,0.5 +703,0.622265122,0.226704545,0.132727273,0.428947368,0.085833915,0.063985149,0.060853879,0.066748316,0.071184211,0.049361208,0.310810811,0.542517007,0.426844584,0.724260355,1.060070671,1.190909091,0.5 +704,0.581724582,0.221022727,0.13,0.421052632,0.084438241,0.062623762,0.059290439,0.064911206,0.070131579,0.048199768,0.305246423,0.533163265,0.419466248,0.853254438,1.254416961,1.413636364,0.5 +705,0.546975547,0.216193182,0.128636364,0.415789474,0.083042568,0.061262376,0.057726999,0.063074097,0.069078947,0.047038328,0.299682035,0.523809524,0.412087912,0.982248521,1.448763251,1.636363636,0.5 +706,0.512226512,0.211363636,0.127272727,0.410526316,0.081507327,0.05990099,0.05616356,0.061236987,0.067894737,0.045876887,0.294753577,0.514795918,0.405023548,1.05147929,1.55335689,1.762337662,0.5 +707,0.503217503,0.204261364,0.127727273,0.404385965,0.079972087,0.058539604,0.05460012,0.059399878,0.066710526,0.044715447,0.289825119,0.505782313,0.397959184,1.120710059,1.65795053,1.888311688,0.5 +708,0.494208494,0.197159091,0.128181818,0.398245614,0.078436846,0.057178218,0.053036681,0.057562768,0.065526316,0.043554007,0.284896661,0.496768707,0.390894819,1.189940828,1.76254417,2.014285714,0.5 +709,0.48005148,0.191193182,0.123636364,0.390350877,0.076901605,0.055816832,0.051473241,0.055725658,0.064342105,0.042392567,0.279968203,0.487755102,0.383830455,1.259171598,1.867137809,2.14025974,0.5 +710,0.465894466,0.185227273,0.119090909,0.38245614,0.075366364,0.054455446,0.049909802,0.053888549,0.063157895,0.041231127,0.275039746,0.478741497,0.376766091,1.328402367,1.971731449,2.266233766,0.5 +711,0.460746461,0.183806818,0.116363636,0.376315789,0.073691556,0.052970297,0.048466627,0.052173913,0.061710526,0.040069686,0.26899841,0.468537415,0.368759812,1.184023669,1.754770318,2.02012987,0.5 +712,0.455598456,0.182386364,0.113636364,0.370175439,0.072016748,0.051485149,0.047023452,0.050459277,0.060263158,0.038908246,0.262957075,0.458333333,0.360753532,1.03964497,1.537809187,1.774025974,0.5 +713,0.44980695,0.177556818,0.112272727,0.362280702,0.07034194,0.05,0.045580277,0.048744642,0.058815789,0.037746806,0.256915739,0.448129252,0.352747253,0.895266272,1.320848057,1.527922078,0.5 +714,0.444015444,0.172727273,0.110909091,0.354385965,0.068667132,0.048514851,0.044137102,0.047030006,0.057368421,0.036585366,0.250874404,0.43792517,0.344740973,0.750887574,1.103886926,1.281818182,0.5 +715,0.437580438,0.169318182,0.104090909,0.349122807,0.066992324,0.047029703,0.042693927,0.04531537,0.055921053,0.035423926,0.244833068,0.427721088,0.336734694,0.606508876,0.886925795,1.035714286,0.5 +716,0.431145431,0.165909091,0.097272727,0.343859649,0.065875785,0.046039604,0.041611545,0.044090631,0.055,0.034610918,0.23926868,0.418027211,0.329042386,0.514201183,0.749823322,0.874675325,0.5 +717,0.43951094,0.163068182,0.095,0.337719298,0.064759246,0.045049505,0.040529164,0.042865891,0.054078947,0.033797909,0.233704293,0.408333333,0.321350078,0.421893491,0.612720848,0.713636364,0.5 +718,0.447876448,0.160227273,0.092727273,0.331578947,0.063642708,0.044059406,0.039446783,0.041641151,0.053157895,0.032984901,0.228139905,0.398639456,0.313657771,0.329585799,0.475618375,0.552597403,0.5 +719,0.454954955,0.157386364,0.090045455,0.324561404,0.062526169,0.043069307,0.038364402,0.040416412,0.052236842,0.032171893,0.222575517,0.388945578,0.305965463,0.237278107,0.338515901,0.391558442,0.5 +720,0.462033462,0.154545455,0.087363636,0.31754386,0.06140963,0.042079208,0.03728202,0.039191672,0.051315789,0.031358885,0.217011129,0.379251701,0.298273155,0.144970414,0.201413428,0.230519481,0.5 +721,0.471685972,0.154545455,0.089136364,0.314035088,0.060432659,0.041212871,0.036319904,0.037966932,0.050526316,0.030662021,0.212877583,0.371768707,0.292464678,0.130177515,0.180212014,0.203896104,0.5 +722,0.481338481,0.154545455,0.090909091,0.310526316,0.059455687,0.040346535,0.035357787,0.036742192,0.049736842,0.029965157,0.208744038,0.364285714,0.286656201,0.115384615,0.159010601,0.177272727,0.5 +723,0.488416988,0.148579545,0.087863636,0.301754386,0.058478716,0.039480198,0.03439567,0.035517453,0.048947368,0.029268293,0.204610493,0.356802721,0.280847724,0.100591716,0.137809187,0.150649351,0.5 +724,0.495495495,0.142613636,0.084818182,0.292982456,0.057501745,0.038613861,0.033433554,0.034292713,0.048157895,0.028571429,0.200476948,0.349319728,0.275039246,0.085798817,0.116607774,0.124025974,0.5 +725,0.49034749,0.140340909,0.081318182,0.287719298,0.056524773,0.037747525,0.032471437,0.033067973,0.047368421,0.027874564,0.196343402,0.341836735,0.269230769,0.071005917,0.09540636,0.097402597,0.5 +726,0.485199485,0.138068182,0.077818182,0.28245614,0.055966504,0.037128713,0.031870114,0.032455603,0.046842105,0.027409988,0.192845787,0.335714286,0.264364207,0.069230769,0.092579505,0.094805195,0.5 +727,0.476190476,0.135511364,0.080772727,0.277192982,0.055408234,0.036509901,0.031268791,0.031843233,0.046315789,0.026945412,0.189348172,0.329591837,0.259497645,0.067455621,0.08975265,0.092207792,0.5 +728,0.467181467,0.132954545,0.083727273,0.271929825,0.054849965,0.035891089,0.030667468,0.031230863,0.045789474,0.026480836,0.185850556,0.323469388,0.254631083,0.065680473,0.086925795,0.08961039,0.5 +729,0.462676963,0.129545455,0.078818182,0.265789474,0.054291696,0.035272277,0.030066146,0.030618494,0.045263158,0.02601626,0.182352941,0.317346939,0.249764521,0.063905325,0.08409894,0.087012987,0.5 +730,0.458172458,0.126136364,0.073909091,0.259649123,0.053733426,0.034653465,0.029464823,0.030006124,0.044736842,0.025551684,0.178855326,0.31122449,0.244897959,0.062130178,0.081272085,0.084415584,0.5 +731,0.442084942,0.126988636,0.070954545,0.254385965,0.053454292,0.034405941,0.029104029,0.029638702,0.044605263,0.02543554,0.175834658,0.306122449,0.240816327,0.062130178,0.079858657,0.082467532,0.5 +732,0.425997426,0.127840909,0.068,0.249122807,0.053175157,0.034158416,0.028743235,0.02927128,0.044473684,0.025319396,0.17281399,0.301020408,0.236734694,0.062130178,0.07844523,0.080519481,0.5 +733,0.422136422,0.124715909,0.064818182,0.245614035,0.052896022,0.033910891,0.028382441,0.028903858,0.044342105,0.025203252,0.169793323,0.295918367,0.232653061,0.062130178,0.077031802,0.078571429,0.5 +734,0.418275418,0.121590909,0.061636364,0.242105263,0.052616888,0.033663366,0.028021648,0.028536436,0.044210526,0.025087108,0.166772655,0.290816327,0.228571429,0.062130178,0.075618375,0.076623377,0.5 +735,0.411196911,0.119034091,0.062818182,0.237719298,0.052337753,0.033415842,0.027660854,0.028169014,0.044078947,0.024970964,0.163751987,0.285714286,0.224489796,0.062130178,0.074204947,0.074675325,0.5 +736,0.404118404,0.116477273,0.064,0.233333333,0.052058618,0.033044554,0.02730006,0.027679118,0.043815789,0.024622532,0.161208267,0.281122449,0.221036107,0.063905325,0.076325088,0.077922078,0.5 +737,0.415701416,0.112784091,0.060272727,0.228070175,0.051779484,0.032673267,0.026939266,0.027189222,0.043552632,0.0242741,0.158664547,0.276530612,0.217582418,0.065680473,0.07844523,0.081168831,0.5 +738,0.427284427,0.109090909,0.056545455,0.222807018,0.051500349,0.03230198,0.026578473,0.026699326,0.043289474,0.023925668,0.156120827,0.271938776,0.214128728,0.067455621,0.080565371,0.084415584,0.5 +739,0.427927928,0.109090909,0.0575,0.218421053,0.051221214,0.031930693,0.026217679,0.02620943,0.043026316,0.023577236,0.153577107,0.267346939,0.210675039,0.069230769,0.082685512,0.087662338,0.5 +740,0.428571429,0.109090909,0.058454545,0.214035088,0.05094208,0.031559406,0.025856885,0.025719535,0.042763158,0.023228804,0.151033386,0.262755102,0.20722135,0.071005917,0.084805654,0.090909091,0.5 +741,0.415701416,0.10625,0.057272727,0.209649123,0.050244243,0.031064356,0.025375827,0.025107165,0.042236842,0.022880372,0.148648649,0.258673469,0.203924647,0.071005917,0.084805654,0.090909091,0.5 +742,0.402831403,0.103409091,0.056090909,0.205263158,0.049546406,0.030569307,0.024894768,0.024494795,0.041710526,0.02253194,0.146263911,0.254591837,0.200627943,0.071005917,0.084805654,0.090909091,0.5 +743,0.415057915,0.097159091,0.053136364,0.201754386,0.048848569,0.030074257,0.02441371,0.023882425,0.041184211,0.022183508,0.143879173,0.250510204,0.19733124,0.071005917,0.084805654,0.090909091,0.5 +744,0.427284427,0.090909091,0.050181818,0.198245614,0.048150733,0.029579208,0.023932652,0.023270055,0.040657895,0.021835075,0.141494436,0.246428571,0.194034537,0.071005917,0.084805654,0.090909091,0.5 +745,0.413770914,0.092613636,0.054045455,0.19122807,0.047452896,0.029084158,0.023451594,0.022657685,0.040131579,0.021486643,0.139109698,0.242346939,0.190737834,0.071005917,0.084805654,0.090909091,0.5 +746,0.4002574,0.094318182,0.057909091,0.184210526,0.047592463,0.029084158,0.023451594,0.022657685,0.040263158,0.021602787,0.137042925,0.238945578,0.188069074,0.069230769,0.081978799,0.086363636,0.5 +747,0.404761905,0.092045455,0.051545455,0.184210526,0.047732031,0.029084158,0.023451594,0.022657685,0.040394737,0.021718931,0.134976153,0.235544218,0.185400314,0.067455621,0.079151943,0.081818182,0.5 +748,0.409266409,0.089772727,0.045181818,0.184210526,0.047871598,0.029084158,0.023451594,0.022657685,0.040526316,0.021835075,0.13290938,0.232142857,0.182731554,0.065680473,0.076325088,0.077272727,0.5 +749,0.421492921,0.084943182,0.044090909,0.180701754,0.048011165,0.029084158,0.023451594,0.022657685,0.040657895,0.02195122,0.130842607,0.228741497,0.180062794,0.063905325,0.073498233,0.072727273,0.5 +750,0.433719434,0.080113636,0.043,0.177192982,0.048150733,0.029084158,0.023451594,0.022657685,0.040789474,0.022067364,0.128775835,0.225340136,0.177394035,0.062130178,0.070671378,0.068181818,0.5 +751,0.443371943,0.081534091,0.043272727,0.174210526,0.047452896,0.028589109,0.022970535,0.022167789,0.040394737,0.021718931,0.127503975,0.222959184,0.175510204,0.059763314,0.073498233,0.065584416,0.5 +752,0.453024453,0.082954545,0.043545455,0.17122807,0.046755059,0.028094059,0.022489477,0.021677893,0.04,0.021370499,0.126232114,0.220578231,0.173626374,0.05739645,0.076325088,0.062987013,0.5 +753,0.494208494,0.081818182,0.044409091,0.166929825,0.046057223,0.02759901,0.022008419,0.021187998,0.039605263,0.021022067,0.124960254,0.218197279,0.171742543,0.055029586,0.079151943,0.06038961,0.5 +754,0.535392535,0.080681818,0.045272727,0.162631579,0.045359386,0.02710396,0.02152736,0.020698102,0.039210526,0.020673635,0.123688394,0.215816327,0.169858713,0.052662722,0.081978799,0.057792208,0.5 +755,0.544401544,0.074715909,0.045227273,0.159210526,0.044661549,0.026608911,0.021046302,0.020208206,0.038815789,0.020325203,0.122416534,0.213435374,0.167974882,0.050295858,0.084805654,0.055194805,0.5 +756,0.553410553,0.06875,0.045181818,0.155789474,0.045219819,0.026980198,0.021407096,0.020453154,0.039210526,0.020789779,0.120985692,0.211054422,0.166091052,0.052662722,0.090459364,0.057792208,0.5 +757,0.566924067,0.073295455,0.045681818,0.151491228,0.045778088,0.027351485,0.021767889,0.020698102,0.039605263,0.021254355,0.119554849,0.208673469,0.164207221,0.055029586,0.096113074,0.06038961,0.5 +758,0.58043758,0.077840909,0.046181818,0.147192982,0.046336357,0.027722772,0.022128683,0.02094305,0.04,0.021718931,0.118124006,0.206292517,0.162323391,0.05739645,0.101766784,0.062987013,0.5 +759,0.569498069,0.077840909,0.050090909,0.144736842,0.046894627,0.028094059,0.022489477,0.021187998,0.040394737,0.022183508,0.116693164,0.203911565,0.16043956,0.059763314,0.107420495,0.065584416,0.5 +760,0.558558559,0.077840909,0.054,0.142280702,0.047452896,0.028465347,0.022850271,0.021432945,0.040789474,0.022648084,0.115262321,0.201530612,0.15855573,0.062130178,0.113074205,0.068181818,0.5 +761,0.547619048,0.075852273,0.051227273,0.138333333,0.047592463,0.028589109,0.022970535,0.021555419,0.041052632,0.022880372,0.113195548,0.197789116,0.155572998,0.062721893,0.108833922,0.066883117,0.5 +762,0.536679537,0.073863636,0.048454545,0.134385965,0.047732031,0.028712871,0.0230908,0.021677893,0.041315789,0.02311266,0.111128776,0.194047619,0.152590267,0.063313609,0.10459364,0.065584416,0.5 +763,0.584298584,0.064147727,0.053772727,0.129473684,0.047871598,0.028836634,0.023211064,0.021800367,0.041578947,0.023344948,0.109062003,0.190306122,0.149607535,0.063905325,0.100353357,0.064285714,0.5 +764,0.631917632,0.054431818,0.059090909,0.124561404,0.048011165,0.028960396,0.023331329,0.021922841,0.041842105,0.023577236,0.106995231,0.186564626,0.146624804,0.064497041,0.096113074,0.062987013,0.5 +765,0.656370656,0.066988636,0.052045455,0.125789474,0.048150733,0.029084158,0.023451594,0.022045315,0.042105263,0.023809524,0.104928458,0.182823129,0.143642072,0.065088757,0.091872792,0.061688312,0.5 +766,0.680823681,0.079545455,0.045,0.127017544,0.047034194,0.028217822,0.022730006,0.021432945,0.040921053,0.022880372,0.10254372,0.178401361,0.140188383,0.062130178,0.084805654,0.059090909,0.5 +767,0.65958816,0.070738636,0.045136364,0.120175439,0.045917655,0.027351485,0.022008419,0.020820576,0.039736842,0.02195122,0.100158983,0.173979592,0.136734694,0.059171598,0.077738516,0.056493506,0.5 +768,0.638352638,0.061931818,0.045272727,0.113333333,0.044801117,0.026485149,0.021286831,0.020208206,0.038552632,0.021022067,0.097774245,0.169557823,0.133281005,0.056213018,0.070671378,0.053896104,0.5 +769,0.646718147,0.060795455,0.044818182,0.114473684,0.043684578,0.025618812,0.020565244,0.019595836,0.037368421,0.020092915,0.095389507,0.165136054,0.129827316,0.053254438,0.06360424,0.051298701,0.5 +770,0.655083655,0.059659091,0.044363636,0.115614035,0.042568039,0.024752475,0.019843656,0.018983466,0.036184211,0.019163763,0.093004769,0.160714286,0.126373626,0.050295858,0.056537102,0.048701299,0.5 +771,0.617760618,0.063920455,0.038227273,0.117368421,0.041311933,0.023886139,0.019242333,0.018371096,0.035131579,0.018350755,0.090143084,0.155952381,0.122762951,0.047337278,0.053710247,0.045454545,0.5 +772,0.58043758,0.068181818,0.032090909,0.119122807,0.040055827,0.023019802,0.01864101,0.017758726,0.034078947,0.017537747,0.087281399,0.151190476,0.119152276,0.044378698,0.050883392,0.042207792,0.5 +773,0.545045045,0.063636364,0.033318182,0.112807018,0.038799721,0.022153465,0.018039687,0.017146356,0.033026316,0.016724739,0.084419714,0.146428571,0.115541601,0.041420118,0.048056537,0.038961039,0.5 +774,0.50965251,0.059090909,0.034545455,0.106491228,0.037543615,0.021287129,0.017438364,0.016533987,0.031973684,0.015911731,0.081558029,0.141666667,0.111930926,0.038461538,0.045229682,0.035714286,0.5 +775,0.488416988,0.059659091,0.023954545,0.103421053,0.036287509,0.020420792,0.016837041,0.015921617,0.030921053,0.015098722,0.078696343,0.136904762,0.108320251,0.035502959,0.042402827,0.032467532,0.5 +776,0.467181467,0.060227273,0.013363636,0.100350877,0.035031403,0.019678218,0.015995189,0.015064299,0.03,0.014518002,0.075834658,0.131972789,0.104238619,0.033727811,0.040282686,0.029220779,0.5 +777,0.441441441,0.056789773,0.025409091,0.100087719,0.033775297,0.018935644,0.015153337,0.014206981,0.029078947,0.013937282,0.072972973,0.127040816,0.100156986,0.031952663,0.038162544,0.025974026,0.5 +778,0.415701416,0.053352273,0.037454545,0.099824561,0.032519191,0.018193069,0.014311485,0.013349663,0.028157895,0.013356562,0.070111288,0.122108844,0.096075353,0.030177515,0.036042403,0.022727273,0.5 +779,0.433075933,0.055653409,0.035181818,0.098421053,0.031263084,0.017450495,0.013469633,0.012492345,0.027236842,0.012775842,0.067249603,0.117176871,0.091993721,0.028402367,0.033922261,0.019480519,0.5 +780,0.45045045,0.057954545,0.032909091,0.097017544,0.030006978,0.016707921,0.012627781,0.011635028,0.026315789,0.012195122,0.064387917,0.112244898,0.087912088,0.026627219,0.03180212,0.016233766,0.5 \ No newline at end of file