From 518fc7f58c5f33cc84463201157489cda7aac9df Mon Sep 17 00:00:00 2001 From: iainrb Date: Fri, 10 Feb 2017 14:30:10 +0000 Subject: [PATCH] Changes for release 1.14.0 --- doc/CHANGELOG.md | 66 +- src/bash/cpanm.sha256 | 1 + src/bash/install.sh | 151 +- src/perl/Build.PL | 1 + src/perl/MANIFEST | 60 +- src/perl/bin/archive_fluidigm_genotypes.pl | 149 + src/perl/bin/check_duplicates_bed.pl | 52 +- ..._bed_wip.pl => check_identity_bayesian.pl} | 63 +- src/perl/bin/check_identity_bed.pl | 115 - src/perl/bin/collate_qc_results.pl | 122 +- src/perl/bin/create_test_database.pl | 31 + src/perl/bin/filter_illuminus_output.pl | 85 +- src/perl/bin/find_modified_files.pl | 169 - src/perl/bin/identity_simulation.pl | 53 +- src/perl/bin/illuminus.pl | 68 +- src/perl/bin/plate_heatmap_index.pl | 54 +- src/perl/bin/plate_heatmap_plots.pl | 94 +- src/perl/bin/plot_box_bean.pl | 71 +- src/perl/bin/plot_cr_het_density.pl | 58 +- src/perl/bin/plot_fail_causes.pl | 49 +- src/perl/bin/plot_metric_scatter.pl | 45 +- src/perl/bin/publish_expression_analysis.pl | 72 +- src/perl/bin/publish_fluidigm_genotypes.pl | 68 +- src/perl/bin/publish_infinium_analysis.pl | 52 +- src/perl/bin/publish_infinium_genotypes.pl | 76 +- src/perl/bin/publish_sequenom_genotypes.pl | 51 +- src/perl/bin/publish_snpset.pl | 41 +- src/perl/bin/query_project_samples.pl | 60 +- src/perl/bin/ready_external.pl | 97 +- src/perl/bin/ready_infinium.pl | 67 +- src/perl/bin/ready_pipe.pl | 28 +- src/perl/bin/ready_qc_calls.pl | 47 +- src/perl/bin/ready_samples.pl | 20 +- src/perl/bin/ready_workflow.pl | 209 +- src/perl/bin/run_qc.pl | 197 +- src/perl/bin/sample_intensities.pl | 46 +- src/perl/bin/update_expression_metadata.pl | 47 +- src/perl/bin/update_fluidigm_metadata.pl | 51 +- src/perl/bin/update_infinium_metadata.pl | 47 +- src/perl/bin/update_plink_annotation.pl | 44 +- src/perl/bin/update_sequenom_metadata.pl | 57 +- src/perl/bin/update_sequenom_qc_metadata.pl | 50 +- src/perl/bin/vcf_consistency_check.pl | 33 +- src/perl/bin/vcf_from_plex.pl | 32 +- src/perl/bin/vcf_from_plink.pl | 54 +- src/perl/bin/write_qc_reports.pl | 42 +- src/perl/bin/write_snp_metadata.pl | 51 +- src/perl/etc/illuminus_prefilter.json | 3 + src/perl/etc/qc_config.json | 4 +- src/perl/etc/reportIntro.tex | 2 +- src/perl/etc/zcall_prefilter.json | 10 + .../WTSI/NPG/Expression/AnalysisPublisher.pm | 8 +- .../WTSI/NPG/Genotyping/Fluidigm/Archiver.pm | 119 + .../NPG/Genotyping/Fluidigm/AssayResultSet.pm | 1 + .../WTSI/NPG/Genotyping/Fluidigm/Collector.pm | 215 + .../NPG/Genotyping/Fluidigm/ExportFile.pm | 19 + .../WTSI/NPG/Genotyping/Fluidigm/Publisher.pm | 4 +- .../Genotyping/Infinium/AnalysisPublisher.pm | 2 +- .../WTSI/NPG/Genotyping/Infinium/Publisher.pm | 3 +- .../BayesianIdentity/Check.pm} | 25 +- .../BayesianIdentity/SampleMetric.pm} | 6 +- .../BayesianIdentity/Simulator.pm} | 17 +- .../lib/WTSI/NPG/Genotyping/QC/Collation.pm | 741 -- .../lib/WTSI/NPG/Genotyping/QC/Collator.pm | 1138 ++ .../lib/WTSI/NPG/Genotyping/QC/Identity.pm | 564 - .../NPG/Genotyping/QC/MetricScatterplots.pm | 41 +- .../lib/WTSI/NPG/Genotyping/QC/Reports.pm | 40 +- src/perl/lib/WTSI/NPG/Genotyping/SNPSet.pm | 2 + .../NPG/Genotyping/Sequenom/AssayResultSet.pm | 1 + .../WTSI/NPG/Genotyping/Sequenom/Publisher.pm | 1 + .../lib/WTSI/NPG/Genotyping/VCF/Parser.pm | 5 +- src/perl/lib/WTSI/NPG/Publisher.pm | 34 +- src/perl/lib/WTSI/NPG/Utilities.pm | 191 +- src/perl/lib/WTSI/NPG/Utilities/Archivable.pm | 281 + src/perl/lib/WTSI/NPG/Utilities/Collector.pm | 372 + src/perl/t/WTSI/NPG/ArchivableTest.pm | 141 + src/perl/t/WTSI/NPG/CollectorTest.pm | 125 + .../NPG/Genotyping/Fluidigm/ArchiverTest.pm | 226 + .../NPG/Genotyping/Fluidigm/PublisherTest.pm | 9 +- .../NPG/Genotyping/Fluidigm/SubscriberTest.pm | 11 +- .../NPG/Genotyping/Infinium/PublisherTest.pm | 3 - .../BayesianIdentity/CheckTest.pm} | 34 +- .../BayesianIdentity/SampleMetricTest.pm} | 16 +- .../BayesianIdentity/SimulatorTest.pm} | 12 +- .../QC/{CollationTest.pm => CollatorTest.pm} | 31 +- .../t/WTSI/NPG/Genotyping/QC/IdentityTest.pm | 147 - .../NPG/Genotyping/VCF/ReadyWorkflowTest.pm | 96 +- src/perl/t/WTSI/NPG/Test.pm | 29 +- src/perl/t/WTSI/NPG/UtilitiesTest.pm | 91 +- src/perl/t/archivable.t | 9 + src/perl/t/{utilities => archiver}/lorem.txt | 0 src/perl/t/bayesian_identity.t | 9 + src/perl/t/bayesian_identity_sample.t | 9 + src/perl/t/bayesian_identity_simulator.t | 7 + src/perl/t/collation.t | 9 - src/perl/t/collator.t | 9 + src/perl/t/collector.t | 9 + .../collect_files/a/10.txt | 0 .../collect_files/a/x/1.txt | 0 .../collect_files/b/20.txt | 0 .../collect_files/b/y/2.txt | 0 .../collect_files/c/30.txt | 0 .../collect_files/c/z/3.txt | 0 src/perl/t/compile_scripts.t | 5 +- src/perl/t/fluidigm_archiver.t | 9 + .../0123456789/0123456789.csv | 9232 +++++++++++++++++ .../0123456789/Data/aramis.tif | 0 .../0123456789/Data/athos.tif | 0 .../0123456789/Data/porthos.tif | 0 src/perl/t/fluidigm_archiver/qc.tsv | 27 + src/perl/t/identity.t | 9 - .../t/identity_check_sample_wip_bayesian.t | 9 - src/perl/t/identity_check_wip.t | 9 - src/perl/t/identity_simulation_wip.t | 7 - src/perl/t/qc_small.t | 55 +- src/perl/t/qc_test_data/config_test.json | 6 +- .../output_examples/duplicate_full.txt.gz | Bin 19654 -> 21624 bytes .../output_examples/identity_check.json | 2 +- .../output_examples/qc_exclusions.json | 103 +- .../output_examples/qc_metrics.json | 2 +- .../output_examples/qc_results.csv | 202 +- .../output_examples/qc_results.json | 2 +- src/perl/t/reports.t | 12 +- src/r/bin/check_xhet_gender.R | 35 +- src/r/bin/heatmapCrHetDensity.R | 14 + src/r/bin/plotCombinedFails.R | 16 +- src/r/bin/plotCrHetDensity.R | 16 + src/r/bin/plotCrPlate.R | 15 + src/r/bin/plotHetPlate.R | 15 + src/r/bin/plotIndividualFails.R | 14 + src/r/bin/plotMagnitudePlate.R | 15 + src/r/bin/plotXYdiffDensity.R | 15 + src/r/bin/plotXYdiffPlate.R | 15 + src/r/bin/scatterPlotFails.R | 16 +- src/r/bin/scatter_plot_metric.R | 17 +- .../data/illuminus_test_prefilter.json | 3 + .../genotyping-workflows/lib/genotyping.rb | 3 +- .../lib/genotyping/tasks/quality_control.rb | 58 +- .../genotyping/workflows/genotype_gencall.rb | 166 + .../workflows/genotype_illuminus.rb | 20 +- .../genotyping/workflows/genotype_zcall.rb | 18 +- .../lib/genotyping/workflows/identity_qc.rb | 112 - .../test/test_gencall_workflow.rb | 148 + .../genotyping-workflows/test/test_helper.rb | 6 +- .../test/test_identity_qc_workflow.rb | 73 - .../test/test_illuminus_workflow.rb | 85 +- .../test/test_zcall_workflow.rb | 60 +- 147 files changed, 14819 insertions(+), 3904 deletions(-) create mode 100644 src/bash/cpanm.sha256 create mode 100755 src/perl/bin/archive_fluidigm_genotypes.pl rename src/perl/bin/{check_identity_bed_wip.pl => check_identity_bayesian.pl} (86%) delete mode 100755 src/perl/bin/check_identity_bed.pl delete mode 100755 src/perl/bin/find_modified_files.pl create mode 100644 src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Archiver.pm create mode 100644 src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Collector.pm rename src/perl/lib/WTSI/NPG/Genotyping/{QC_wip/Check/Identity.pm => QC/BayesianIdentity/Check.pm} (95%) rename src/perl/lib/WTSI/NPG/Genotyping/{QC_wip/Check/SampleIdentityBayesian.pm => QC/BayesianIdentity/SampleMetric.pm} (99%) rename src/perl/lib/WTSI/NPG/Genotyping/{QC_wip/Check/IdentitySimulator.pm => QC/BayesianIdentity/Simulator.pm} (96%) delete mode 100644 src/perl/lib/WTSI/NPG/Genotyping/QC/Collation.pm create mode 100644 src/perl/lib/WTSI/NPG/Genotyping/QC/Collator.pm delete mode 100644 src/perl/lib/WTSI/NPG/Genotyping/QC/Identity.pm create mode 100644 src/perl/lib/WTSI/NPG/Utilities/Archivable.pm create mode 100644 src/perl/lib/WTSI/NPG/Utilities/Collector.pm create mode 100644 src/perl/t/WTSI/NPG/ArchivableTest.pm create mode 100644 src/perl/t/WTSI/NPG/CollectorTest.pm create mode 100644 src/perl/t/WTSI/NPG/Genotyping/Fluidigm/ArchiverTest.pm rename src/perl/t/WTSI/NPG/Genotyping/{QC_wip/Check/IdentityTest.pm => QC/BayesianIdentity/CheckTest.pm} (94%) rename src/perl/t/WTSI/NPG/Genotyping/{QC_wip/Check/SampleIdentityBayesianTest.pm => QC/BayesianIdentity/SampleMetricTest.pm} (94%) rename src/perl/t/WTSI/NPG/Genotyping/{QC_wip/Check/IdentitySimulatorTest.pm => QC/BayesianIdentity/SimulatorTest.pm} (89%) rename src/perl/t/WTSI/NPG/Genotyping/QC/{CollationTest.pm => CollatorTest.pm} (87%) delete mode 100644 src/perl/t/WTSI/NPG/Genotyping/QC/IdentityTest.pm create mode 100644 src/perl/t/archivable.t rename src/perl/t/{utilities => archiver}/lorem.txt (100%) create mode 100644 src/perl/t/bayesian_identity.t create mode 100644 src/perl/t/bayesian_identity_sample.t create mode 100644 src/perl/t/bayesian_identity_simulator.t delete mode 100644 src/perl/t/collation.t create mode 100644 src/perl/t/collator.t create mode 100644 src/perl/t/collector.t rename src/perl/t/{utilities => collector}/collect_files/a/10.txt (100%) rename src/perl/t/{utilities => collector}/collect_files/a/x/1.txt (100%) rename src/perl/t/{utilities => collector}/collect_files/b/20.txt (100%) rename src/perl/t/{utilities => collector}/collect_files/b/y/2.txt (100%) rename src/perl/t/{utilities => collector}/collect_files/c/30.txt (100%) rename src/perl/t/{utilities => collector}/collect_files/c/z/3.txt (100%) create mode 100644 src/perl/t/fluidigm_archiver.t create mode 100644 src/perl/t/fluidigm_archiver/0123456789/0123456789.csv create mode 100644 src/perl/t/fluidigm_archiver/0123456789/Data/aramis.tif create mode 100644 src/perl/t/fluidigm_archiver/0123456789/Data/athos.tif create mode 100644 src/perl/t/fluidigm_archiver/0123456789/Data/porthos.tif create mode 100644 src/perl/t/fluidigm_archiver/qc.tsv delete mode 100644 src/perl/t/identity.t delete mode 100644 src/perl/t/identity_check_sample_wip_bayesian.t delete mode 100644 src/perl/t/identity_check_wip.t delete mode 100644 src/perl/t/identity_simulation_wip.t create mode 100644 src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_gencall.rb delete mode 100644 src/ruby/genotyping-workflows/lib/genotyping/workflows/identity_qc.rb create mode 100644 src/ruby/genotyping-workflows/test/test_gencall_workflow.rb delete mode 100644 src/ruby/genotyping-workflows/test/test_identity_qc_workflow.rb diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 4e6e2ed7c..222816cdc 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -4,12 +4,70 @@ Change log for WTSI genotyping pipeline Latest version is hosted at: https://github.com/wtsi-npg/genotyping -Unreleased ----------- +Release 1.14.0: 2017-02-07 +-------------------------- + +Added: +- Gencall workflow: + - Writes Plink data and runs QC for Gencall only + - New option in ready_workflow.pl +- Replace old identity metric with new Bayesian version, which will: + - Appear in main QC output and plots + - Contribute to sample pass/fail status + +Changed: +- Extensive refactoring of Collation.pm, to make it more maintainable +and support Log4Perl. Module renamed Collator.pm and changed into a +Moose class. + +Fixed: +- Check for allowed combination of plex manifests and VCF files in +workflow arguments (Issue #434) +- Create Text::CSV objects with binary flag enabled (Issue #406) + + +Release 1.13.2: 2016-11-10 +-------------------------- + +Changed: +- Hotfix: Add cgp and ddd references to WTSI::NPG::Genotyping::QC::Identity + + +Release 1.13.1: 2016-07-28 +-------------------------- + +Changed: +- Made install.sh more transparent and portable. +- Updated WTSI-DNAP-Utilities and perl-irods-wrap versions in install.sh. + +Fixed: +- Default LSF queue for Ruby workflows + + +Release 1.13.0: 2016-06-20 +-------------------------- Added: -- Replace old identity check with new Bayesian version in "main" QC output -and plots +- install.sh script to install pipeline and its Perl dependencies +- Documentation for Bayesian identity check + +Changed: +- Modified ready_workflow.pl to better align with user SOP +- Use try/catch to handle unexpected errors in retrieving QC plex results +from iRODS +- Updated reference genome for Sequenom iRODS query +- Update perl-irods-wrap dependency to 2.4.0; removes unhelpful warning +messages to STDERR. This in turn requires baton version >= 0.16.4. + +Removed: +- Script publish_infinium_file_list.pl; superseded by other publish scripts + + +Release 1.12.1: 2016-05-13 +-------------------------- + +Fixed: +- Support repeat scans from Infinium database Release 1.13.2: 2016-11-10 diff --git a/src/bash/cpanm.sha256 b/src/bash/cpanm.sha256 new file mode 100644 index 000000000..00c309926 --- /dev/null +++ b/src/bash/cpanm.sha256 @@ -0,0 +1 @@ +9da50e155df72bce55cb69f51f1dbb4b62d23740fb99f6178bb27f22ebdf8a46 ./App-cpanminus-1.7042.tar.gz diff --git a/src/bash/install.sh b/src/bash/install.sh index 58da70547..0e891d66b 100755 --- a/src/bash/install.sh +++ b/src/bash/install.sh @@ -8,26 +8,66 @@ # similar in purpose to npg_irods/scripts/travis_install.sh +set -e # script will exit if any command has a non-zero return value + +# check for environment variables if [ -z $INSTALL_ROOT ]; then - echo "INSTALL_ROOT environment variable must specify the path to a directory for installation; exiting." >&2 + echo "Environment variable INSTALL_ROOT must specify directory path for installation; exiting." >&2 + exit 1 +fi +if [ -z $RUBY_HOME ]; then + echo "Required environment variable RUBY_HOME not set; exiting." 1>&2 + exit 1 +fi +if [ -z $GEM_PATH ]; then + echo "Required environment variable GEM_PATH not set; exiting." 1>&2 exit 1 -elif [ ! -e $INSTALL_ROOT ]; then - echo "INSTALL_ROOT environment variable path $INSTALL_ROOT does not exist; exiting." >&2 +fi +if [ -n $GEM_HOME ]; then + echo "Warning: Existing GEM_HOME variable '$GEM_HOME' will be changed to value of INSTALL_ROOT" 1>&2 +fi + +# test that INSTALL_ROOT is a writable directory +if [ ! -e $INSTALL_ROOT ]; then + echo "INSTALL_ROOT environment variable path $INSTALL_ROOT does not exist; exiting." 1>&2 exit 1 elif [ ! -d $INSTALL_ROOT ]; then - echo "INSTALL_ROOT environment variable path $INSTALL_ROOT is not a directory; exiting." >&2 + echo "INSTALL_ROOT environment variable path $INSTALL_ROOT is not a directory; exiting." 1>&2 + exit 1 +elif [ ! -w $INSTALL_ROOT ]; then + echo "INSTALL_ROOT environment variable path $INSTALL_ROOT is not writable; exiting." 1>&2 exit 1 else echo "Installing pipeline to root directory $INSTALL_ROOT" fi -WTSI_DNAP_UTILITIES_VERSION="0.5.2" +# set Ruby environment variables +export PATH=$RUBY_HOME/bin:$PATH +export MANPATH=$RUBY_HOME/share/man:$MANPATH +export GEM_HOME=$INSTALL_ROOT +# split GEM_PATH to find a bin directory +IFS=':' # IFS = Bash "Internal Field Separator" +GEM_ARRAY=($GEM_PATH) +unset IFS +GEM_BIN=${GEM_ARRAY[0]}/bin +if [ ! -e $GEM_BIN ]; then + echo "Expected Ruby script directory '$GEM_BIN' does not exist" 1>&2 + exit 1 +elif [ ! -d $GEM_BIN ]; then + echo "Expected Ruby script directory '$GEM_BIN' is not a directory" 1>&2 + exit 1 +fi +export PATH=$GEM_BIN:$PATH +# update GEM_PATH +export GEM_PATH=$INSTALL_ROOT:$GEM_PATH + +# version numbers +CPANM_VERSION="1.7042" +WTSI_DNAP_UTILITIES_VERSION="0.5.3" ML_WAREHOUSE_VERSION="2.1" ALIEN_TIDYP_VERSION="1.4.7" NPG_TRACKING_VERSION="85.3" NPG_IRODS_VERSION="2.5.0" -RUBY_VERSION="1.8.7-p330" -LIB_RUBY_VERSION="0.3.0" START_DIR=$PWD @@ -39,18 +79,46 @@ SRC_DIRS=($PERL_DIR $RUBY_DIR) for DIR in ${SRC_DIRS[@]}; do if [ ! -d $DIR ]; then echo -n "Genotyping source code directory $DIR not found; " - echo "install halted" >&2 + echo "install halted" 1>&2 exit 1 fi done +# ensure temporary directory is cleaned up (even after unexpected exit) +function finish { + cd $START_DIR + rm -Rf $TEMP +} +trap finish EXIT + # create and cd to temp directory TEMP_NAME=`mktemp -d genotyping_temp.XXXXXXXX` TEMP=`readlink -f $TEMP_NAME` # full path to temp directory -CPANM_TEMP="$TEMP/cpanm" -mkdir $CPANM_TEMP -export PERL_CPANM_HOME=$CPANM_TEMP -export PATH=$TEMP:$PATH # ensure cpanm download is on PATH +export PERL_CPANM_HOME="$TEMP/cpanm_home" +mkdir $PERL_CPANM_HOME +mkdir "$TEMP/cpanm" # cpanm installation directory +export PATH=$TEMP/cpanm/bin:$PATH # ensure cpanm download is on PATH +cd $TEMP + +# Download, verify and install cpanm +# See checksum at http://www.cpan.org/authors/id/M/MI/MIYAGAWA/CHECKSUMS +CPANM_TARFILE=App-cpanminus-$CPANM_VERSION.tar.gz +CPANM_URL=http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/$CPANM_TARFILE +wget $CPANM_URL +sha256sum -c $SCRIPT_DIR/cpanm.sha256 # verify checksum of the cpanm download +tar -xzf $CPANM_TARFILE +cd App-cpanminus-$CPANM_VERSION +perl Makefile.PL INSTALL_BASE=$TEMP/cpanm +make +make test +make install +CPANM_SCRIPT=$TEMP/cpanm/bin/cpanm +if [ ! -e $CPANM_SCRIPT ]; then + echo "Cannot find cpanm script '$CPANM_SCRIPT'; install halted" 1>&2 + exit 1 +fi +echo -n "cpanm script is $CPANM_SCRIPT, version: " +$CPANM_SCRIPT --version cd $TEMP # use wget to download tarballs to install @@ -62,17 +130,9 @@ https://github.com/wtsi-npg/perl-irods-wrap/releases/download/$NPG_IRODS_VERSION for URL in ${URLS[@]}; do wget $URL - if [ $? -ne 0 ]; then - echo -n "Failed to download $URL; non-zero exit status " >&2 - echo " from wget; install halted" >&2 - exit 1 - fi done eval $(perl -Mlocal::lib=$INSTALL_ROOT) # set environment variables -# use local installation of cpanm -module load cpanm/1.7042 - # install prerequisites from tarfiles TARFILES=(WTSI-DNAP-Utilities-$WTSI_DNAP_UTILITIES_VERSION.tar.gz \ ml_warehouse-$ML_WAREHOUSE_VERSION.tar.gz \ @@ -81,67 +141,28 @@ npg-tracking-$NPG_TRACKING_VERSION.tar.gz \ WTSI-NPG-iRODS-$NPG_IRODS_VERSION.tar.gz) for FILE in ${TARFILES[@]}; do - cpanm --installdeps $FILE --self-contained --notest - if [ $? -ne 0 ]; then - echo "cpanm --installdeps failed for $FILE; install halted" >&2 - exit 1 - fi - cpanm --install $FILE --notest - if [ $? -ne 0 ]; then - echo "cpanm --install failed for $FILE; install halted" >&2 - exit 1 - fi + $CPANM_SCRIPT --installdeps $FILE --self-contained --notest + $CPANM_SCRIPT --install $FILE --notest done cd $PERL_DIR -cpanm --installdeps . --self-contained --notest -if [ $? -ne 0 ]; then - echo "cpanm --installdeps failed for genotyping; install halted" >&2 - exit 1 -fi +$CPANM_SCRIPT --installdeps . --self-contained --notest perl Build.PL ./Build install --install_base $INSTALL_ROOT -if [ $? -ne 0 ]; then - echo "Genotyping pipeline Perl installation failed; install halted " >&2 - exit 1 -fi -# now set Ruby environment variables and install -if [ -z $RUBY_HOME ]; then - export RUBY_HOME=/software/gapi/pkg/ruby/$RUBY_VERSION -fi -export PATH=$RUBY_HOME/bin:$PATH -export MANPATH=$RUBY_HOME/share/man:$MANPATH -if [ -z $GEM_HOME ]; then - export GEM_HOME=$INSTALL_ROOT -fi -if [ -z $GEM_PATH ]; then - export GEM_PATH=/software/gapi/pkg/lib-ruby/$LIB_RUBY_VERSION -fi -export GEM_PATH=$INSTALL_ROOT:$GEM_PATH -export PATH=$GEM_PATH/bin:$PATH +echo "Perl installation complete; now installing Ruby." cd $RUBY_DIR GENOTYPING_GEM=`rake gem | grep File | cut -f 4 -d " "` -if [ $? -ne 0 ]; then - echo "'rake gem' failed for genotyping; install halted" >&2 - exit 1 -fi GEM_FILE_PATH=pkg/$GENOTYPING_GEM if [ ! -f $GEM_FILE_PATH ]; then - echo "Expected gem file '$GEM_FILE_PATH' not found; install halted" >&2 + echo "Expected gem file '$GEM_FILE_PATH' not found; install halted" 1>&2 exit 1 fi gem install $GEM_FILE_PATH -if [ $? -ne 0 ]; then - echo "'gem install' failed for genotyping; install halted" >&2 - exit 1 -fi -# clean up temporary directory -cd $START_DIR -rm -Rf $TEMP +echo "Ruby installation complete." exit 0 diff --git a/src/perl/Build.PL b/src/perl/Build.PL index 469a71555..107bfb611 100644 --- a/src/perl/Build.PL +++ b/src/perl/Build.PL @@ -44,6 +44,7 @@ my $build = Build->new 'Text::CSV' => '>= 1.33', 'Try::Tiny' => '>= 0.22', 'URI' => '>= 1.67', + 'WTSI::DNAP::Utilities' => '>= 0.5.3', 'WTSI::DNAP::Warehouse::Schema' => '>= 1.1', 'WTSI::NPG::iRODS' => '>= 2.1.0' }, diff --git a/src/perl/MANIFEST b/src/perl/MANIFEST index d04269e99..34b59fb08 100644 --- a/src/perl/MANIFEST +++ b/src/perl/MANIFEST @@ -1,11 +1,10 @@ +bin/archive_fluidigm_genotypes.pl bin/check_duplicates_bed.pl -bin/check_identity_bed.pl -bin/check_identity_bed_wip.pl +bin/check_identity_bayesian.pl bin/check_xhet_gender.pl bin/collate_qc_results.pl bin/create_test_database.pl bin/filter_illuminus_output.pl -bin/find_modified_files.pl bin/gendermix_standalone.pl bin/identity_simulation.pl bin/illuminus.pl @@ -107,9 +106,11 @@ lib/WTSI/NPG/Genotyping/Database/Pipeline/Schema/Result/State.pm lib/WTSI/NPG/Genotyping/Database/Pipeline/Schema/Result/Well.pm lib/WTSI/NPG/Genotyping/Database/Sequenom.pm lib/WTSI/NPG/Genotyping/Database/SNP.pm +lib/WTSI/NPG/Genotyping/Fluidigm/Archiver.pm lib/WTSI/NPG/Genotyping/Fluidigm/AssayDataObject.pm lib/WTSI/NPG/Genotyping/Fluidigm/AssayResult.pm lib/WTSI/NPG/Genotyping/Fluidigm/AssayResultSet.pm +lib/WTSI/NPG/Genotyping/Fluidigm/Collector.pm lib/WTSI/NPG/Genotyping/Fluidigm/ExportFile.pm lib/WTSI/NPG/Genotyping/Fluidigm/Publisher.pm lib/WTSI/NPG/Genotyping/Fluidigm/ResultSet.pm @@ -123,19 +124,18 @@ lib/WTSI/NPG/Genotyping/Infinium/Publisher.pm lib/WTSI/NPG/Genotyping/Infinium/ResultSet.pm lib/WTSI/NPG/Genotyping/Infinium/SampleQuery.pm lib/WTSI/NPG/Genotyping/Plink.pm -lib/WTSI/NPG/Genotyping/QC/Collation.pm +lib/WTSI/NPG/Genotyping/QC/Collator.pm lib/WTSI/NPG/Genotyping/QC/GenderCheck.pm lib/WTSI/NPG/Genotyping/QC/GenderCheckDatabase.pm -lib/WTSI/NPG/Genotyping/QC/Identity.pm lib/WTSI/NPG/Genotyping/QC/MetricScatterplots.pm lib/WTSI/NPG/Genotyping/QC/PlinkIO.pm lib/WTSI/NPG/Genotyping/QC/QCPlotShared.pm lib/WTSI/NPG/Genotyping/QC/QCPlotTests.pm lib/WTSI/NPG/Genotyping/QC/Reports.pm lib/WTSI/NPG/Genotyping/QC/SnpID.pm -lib/WTSI/NPG/Genotyping/QC_wip/Check/Identity.pm -lib/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulator.pm -lib/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesian.pm +lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Check.pm +lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Simulator.pm +lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetric.pm lib/WTSI/NPG/Genotyping/Reference.pm lib/WTSI/NPG/Genotyping/Sequenom/AssayDataObject.pm lib/WTSI/NPG/Genotyping/Sequenom/AssayResult.pm @@ -163,11 +163,24 @@ lib/WTSI/NPG/GenotypingReduced lib/WTSI/NPG/Publisher.pm lib/WTSI/NPG/SimplePublisher.pm lib/WTSI/NPG/Utilities.pm +lib/WTSI/NPG/Utilities/Archivable.pm +lib/WTSI/NPG/Utilities/Collector.pm lib/WTSI/NPG/Utilities/DelimitedFiles.pm MANIFEST This list of files README +t/archivable.t +t/bayesian_identity.t +t/bayesian_identity_sample.t +t/bayesian_identity_simulator.t t/call.t -t/collation.t +t/collator.t +t/collector.t +t/collector/collect_files/a/10.txt +t/collector/collect_files/a/x/1.txt +t/collector/collect_files/b/20.txt +t/collector/collect_files/b/y/2.txt +t/collector/collect_files/c/30.txt +t/collector/collect_files/c/z/3.txt t/compile_scripts.t t/critic.t t/database_infinium.t @@ -218,6 +231,12 @@ t/filter_illuminus_output.t t/filter_illuminus_output/columns.txt t/filter_illuminus_output/illuminus_genotypes_1.txt t/filter_illuminus_output/illuminus_probabilities_1.txt +t/fluidigm_archiver.t +t/fluidigm_archiver/0123456789/0123456789.csv +t/fluidigm_archiver/0123456789/Data/aramis.tif +t/fluidigm_archiver/0123456789/Data/athos.tif +t/fluidigm_archiver/0123456789/Data/porthos.tif +t/fluidigm_archiver/qc.tsv t/fluidigm_assay_data_object.t t/fluidigm_assay_data_object/1381735059/S01_1381735059.csv t/fluidigm_assay_data_object/1381735059/S02_1381735059.csv @@ -366,10 +385,6 @@ t/gender/input_xhet_large.txt t/gender_marker.t t/gender_marker_call.t t/gender_standalone.t -t/identity.t -t/identity_check_sample_wip_bayesian.t -t/identity_check_wip.t -t/identity_simulation_wip.t t/illuminus.t t/illuminus/example.json t/illuminus/example_all.iln @@ -642,13 +657,6 @@ t/update_plink_annotation/input.bim t/update_plink_annotation/input_gender.fam t/update_plink_annotation/input_placeholder.fam t/utilities.t -t/utilities/collect_files/a/10.txt -t/utilities/collect_files/a/x/1.txt -t/utilities/collect_files/b/20.txt -t/utilities/collect_files/b/y/2.txt -t/utilities/collect_files/c/30.txt -t/utilities/collect_files/c/z/3.txt -t/utilities/lorem.txt t/vcf.t t/vcf/calls_from_plink.vcf t/vcf/chromosome_lengths_GRCh37.json @@ -677,6 +685,8 @@ t/vcf/sequenom_alternate_snp_004.csv t/vcf/sequenom_inputs.txt t/vcf/W30467_snp_set_info_GRCh37.tsv t/vcf/W30467_snp_set_info_GRCh37_1.tsv +t/WTSI/NPG/ArchivableTest.pm +t/WTSI/NPG/CollectorTest.pm t/WTSI/NPG/Database/MLWarehouseTest.pm t/WTSI/NPG/Database/WarehouseTest.pm t/WTSI/NPG/DatabaseTest.pm @@ -692,6 +702,7 @@ t/WTSI/NPG/Genotyping/Database/InfiniumTest.pm t/WTSI/NPG/Genotyping/Database/PipelineTest.pm t/WTSI/NPG/Genotyping/Database/SequenomTest.pm t/WTSI/NPG/Genotyping/Database/SNPTest.pm +t/WTSI/NPG/Genotyping/Fluidigm/ArchiverTest.pm t/WTSI/NPG/Genotyping/Fluidigm/AssayDataObjectTest.pm t/WTSI/NPG/Genotyping/Fluidigm/AssayResultSetTest.pm t/WTSI/NPG/Genotyping/Fluidigm/AssayResultTest.pm @@ -707,11 +718,10 @@ t/WTSI/NPG/Genotyping/Infinium/InfiniumDataObjectTest.pm t/WTSI/NPG/Genotyping/Infinium/PublisherTest.pm t/WTSI/NPG/Genotyping/Infinium/ResultSetTest.pm t/WTSI/NPG/Genotyping/Infinium/SampleQueryTest.pm -t/WTSI/NPG/Genotyping/QC/CollationTest.pm -t/WTSI/NPG/Genotyping/QC/IdentityTest.pm -t/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulatorTest.pm -t/WTSI/NPG/Genotyping/QC_wip/Check/IdentityTest.pm -t/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesianTest.pm +t/WTSI/NPG/Genotyping/QC/CollatorTest.pm +t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SimulatorTest.pm +t/WTSI/NPG/Genotyping/QC/BayesianIdentity/CheckTest.pm +t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetricTest.pm t/WTSI/NPG/Genotyping/ScriptsTest.pm t/WTSI/NPG/Genotyping/Sequenom/AssayDataObjectTest.pm t/WTSI/NPG/Genotyping/Sequenom/AssayResultSetTest.pm diff --git a/src/perl/bin/archive_fluidigm_genotypes.pl b/src/perl/bin/archive_fluidigm_genotypes.pl new file mode 100755 index 000000000..ff3dde53d --- /dev/null +++ b/src/perl/bin/archive_fluidigm_genotypes.pl @@ -0,0 +1,149 @@ +#!/usr/bin/env perl + +package main; + +use strict; +use warnings; +use Cwd qw/cwd/; +use DateTime; +use Getopt::Long; +use Log::Log4perl qw(:levels); +use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw/log_init/; + +use WTSI::NPG::Genotyping::Fluidigm::Archiver; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'archive_fluidigm_genotypes'); + +our $VERSION = ''; + +run() unless caller(); +sub run { + + my $days_ago; + my $debug; + my $dry_run; + my $input_dir; + my $irods_root; + my $log4perl_config; + my $output_dir; + my $output_prefix; + my $pigz_processes; + my $verbose; + + GetOptions( + 'days-ago|days_ago=i' => \$days_ago, + 'debug' => \$debug, + 'dry-run|dry_run' => \$dry_run, + 'help' => sub { pod2usage(-verbose => 2, + -exitval => 0) }, + 'input-dir|input_dir=s' => \$input_dir, + 'irods-root|irods_root=s' => \$irods_root, + 'logconf=s' => \$log4perl_config, + 'output-dir|output_dir=s' => \$output_dir, + 'output-prefix|output_prefix=s' => \$output_prefix, + 'pigz-processes|pigz_processes=i' => \$pigz_processes, + 'verbose' => \$verbose + ); + + unless ($irods_root) { + pod2usage(-msg => "An --irods-root argument is required\n", + -exitval => 2); + } + + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); + + $input_dir ||= cwd(); + + my %args = (irods_root => $irods_root, + target_dir => $input_dir, + ); + if ($days_ago) { $args{'days_ago'} = $days_ago; } + if ($output_dir) { $args{'output_dir'} = $output_dir; } + if ($output_prefix) { $args{'output_prefix'} = $output_prefix; } + if ($pigz_processes) { $args{'pigz_processes'} = $pigz_processes; } + my $archiver = WTSI::NPG::Genotyping::Fluidigm::Archiver->new(%args); + + my @dirs_to_archive = $archiver->find_directories_to_archive(); + $log->info("Found ", scalar(@dirs_to_archive), + " path(s) eligible for archiving"); + if (@dirs_to_archive) { + $log->info("Directory path(s) to archive: ", + join(", ", @dirs_to_archive)); + $archiver->add_to_archives(\@dirs_to_archive, $dry_run); + } +} + + +__END__ + +=head1 NAME + +archive_fluidigm_genotypes + +=head1 SYNOPSIS + + +Options: + + --days_ago Minimum time in days since last modification, for + directories to be archived. Optional, defaults to 90 days. + --dry_run Report which directories would be archived, but do not + actually archive them. + --help Display help. + --input_dir Directory to search for archivable Fluidigm data. + Optional, defaults to current working directory. + --irods_root Root path in iRODS to search for published Fluidigm + data. If a directory's publication to iRODS cannot be + confirmed, it will not be archived. Required. + --logconf A log4perl configuration file. Optional. + --output_dir Directory for output of .tar.gz files. Optional, defaults + to current working directory. + --output_prefix Prefix for output filenames, which will be of the form + [prefix]_yyyy-mm.tar.gz. Optional, defaults to 'fluidigm'. + --pigz_processes Number of processes to use for compressing/decompressing + existing archives with the pigz program. Optional, + defaults to 4. + --verbose Print messages while processing. Optional. + +=head1 DESCRIPTION + +Searches a directory recursively for Fluidigm result directories that +were last modified more than the given number of days ago. (N.B. limits +search to 1 level of directories.) Any files identified +are added to .tar.gz archives. The archive files are created on a monthly +basis, with names of the form [prefix]_yyyy-mm.tar.gz. + +=head1 METHODS + +None + +=head1 AUTHOR + +Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2016 Genome Research Limited. All Rights +Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/check_duplicates_bed.pl b/src/perl/bin/check_duplicates_bed.pl index ccc6fc294..ef1ff4346 100755 --- a/src/perl/bin/check_duplicates_bed.pl +++ b/src/perl/bin/check_duplicates_bed.pl @@ -93,17 +93,17 @@ } # generate hashes of chromosome and position for each SNP in .bim file -open my $bim, "<", $bfile.".bim" or die "Unable to open $bfile.bim\n"; +open my $bim, "<", $bfile.".bim" or croak("Unable to open '$bfile.bim'"); while (<$bim>) { my ($chr, $snp, $pos) = (split)[0, 1, 3]; $chr{$snp} = $chr; $pos{$snp} = $pos; } -close $bim; +close $bim or croak("Failed to close '$bfile.bim'"); # open genotyping SNP results file (defaults to snp_cr_af.txt) and filter on MAF and CR # populate a hash %snps: Keys=chromosomes, values = lists of (snp_name, snp_position) pairs -open my $snpfile, "<", $af or die "Cannot read SNP file '$af': $!\n"; +open my $snpfile, "<", $af or croak("Cannot read SNP file '$af': $!"); while (<$snpfile>) { my ($snp, $cr, $maf) = (split)[0, 1, 5]; next unless $chr{$snp}; @@ -111,7 +111,7 @@ next if $maf < $maf_min || $maf > $maf_max; push @{$snps{$chr{$snp}}}, [ $snp, $pos{$snp} ]; } -close $snpfile or die "Failed to close $snpfile: $!\n"; +close $snpfile or croak("Failed to close $snpfile: $!"); # filter to ensure minimum distance between SNPs; generates @use_snps array foreach my $chr (keys %snps) { @@ -126,25 +126,57 @@ } } } -open my $logfile, ">", $log or die "Failed to open $log for writing: $!\n"; +open my $logfile, ">", $log or croak("Failed to open '$log' for writing: $!"); print $logfile scalar(@use_snps), " available SNPs found for duplicate check\n"; if (@use_snps > $max_snps) { @use_snps = @use_snps[0 .. $max_snps - 1]; # truncate @use_snps if too large } print $logfile "Using ", scalar(@use_snps), " SNPs\n"; -close $logfile; +close $logfile or croak("Failed to close '$log' for writing"); # write @use_snps to temp file -my $snp_file = new File::Temp; +my $snp_file = new File::Temp; $snp_file->autoflush(1); print $snp_file map { $_ . "\n" } @use_snps; -# execute binary to write pairwise concordance +# execute binary to write pairwise concordance my $full = $dir.'/duplicate_full.txt'; my $summary = $dir.'/duplicate_summary.txt'; my $cmd = "pairwise_concordance_bed -n $snp_file -f $full -m $summary $bfile"; -system($cmd) && die qq(Error running command "$cmd": $!\n); +system($cmd) && croak("Error running command '$cmd'"); # gzip pairwise output file; can be quite large, >> 1 GB $cmd = "gzip -f $full"; -system($cmd) && die qq(Error running command "$cmd": $!\n);; +system($cmd) && croak("Error running command '$cmd': $!"); + + +__END__ + +=head1 NAME + +check_duplicates_bed + +=head1 DESCRIPTION + +Compare genotype calls to check for duplicate samples + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/check_identity_bed_wip.pl b/src/perl/bin/check_identity_bayesian.pl similarity index 86% rename from src/perl/bin/check_identity_bed_wip.pl rename to src/perl/bin/check_identity_bayesian.pl index ebc60af02..2d0972e76 100755 --- a/src/perl/bin/check_identity_bed_wip.pl +++ b/src/perl/bin/check_identity_bayesian.pl @@ -7,11 +7,11 @@ use File::Slurp qw (read_file); use Getopt::Long; use JSON; -use Log::Log4perl; -use Log::Log4perl::Level; use Pod::Usage; +use Log::Log4perl qw(:levels); +use WTSI::DNAP::Utilities::ConfigureLogger qw/log_init/; -use WTSI::NPG::Genotyping::QC_wip::Check::Identity; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::Check; use WTSI::NPG::Genotyping::SNPSet; use WTSI::NPG::Genotyping::VCF::Slurper; use WTSI::NPG::iRODS; @@ -24,24 +24,6 @@ chomp($uid); my $session_log = user_session_log($uid, 'check_identity_bed_wip'); -my $embedded_conf = " - log4perl.logger.npg.genotyping.qc.identity = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - -my $log; - run() unless caller(); sub run { @@ -83,24 +65,17 @@ sub run { 'verbose' => \$verbose, 'xer=f' => \$expected_error_rate); - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.genotyping.qc.identity'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.genotyping.qc.identity'); - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); ### set up iRODS connection and make it use same logger as script ### my $irods = WTSI::NPG::iRODS->new; - $irods->logger($log); + $irods->logger(); ### read equivalent calls probability by SNP from JSON, if given my $ecp; @@ -119,6 +94,8 @@ sub run { $log->logcroak("Cannot read sample JSON path '$sample_json'"); } my $sample_data = decode_json(read_file($sample_json)); + $log->debug("Read sample JSON data for ", scalar @{$sample_data}, + " samples"); # generate a hash mapping sanger sample ID to URI foreach my $sample (@{$sample_data}) { my $ssid = $sample->{'sanger_sample_id'}; @@ -190,8 +167,7 @@ sub run { ### create identity check object ### my %args = (plink_path => $plink, - snpset => $snpset, - logger => $log); + snpset => $snpset); if (defined($swap_threshold)) {$args{'swap_threshold'} = $swap_threshold;} if (defined($pass_threshold)) {$args{'pass_threshold'} = $pass_threshold;} if (defined($ecp)) { $args{'equivalent_calls_probability'} = $ecp; } @@ -203,7 +179,8 @@ sub run { $args{'expected_error_rate'} = $expected_error_rate; } $log->debug("Creating identity check object"); - my $checker = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new(%args); + my $checker = + WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new(%args); ### read QC plex calls from VCF file(s) ### my %qc_calls; @@ -235,6 +212,8 @@ sub run { my $uri = $ssid_to_uri{$ssid}; if ($uri) { push @{$qc_calls{$uri}}, @{$vcf_calls{$ssid}}; + $log->debug("Appending calls for URI '", $uri, "', SSID '", + $ssid, "'"); } else { # samples in QC plex results do not necessarily appear in # production, eg. sample exclusion in Illuminus/zCall @@ -254,11 +233,11 @@ sub run { =head1 NAME -check_identity_bed_wip +check_identity_bayesian =head1 SYNOPSIS -check_identity_bed_wip --vcf --plink +check_identity_bayesian --vcf --plink --sample_json [--plex ] [--plex-irods ] [--pass-threshold ] [--swap_threshold ] [--help] [--verbose] @@ -307,7 +286,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2015, 2016 Genome Research Limited. All Rights Reserved. +Copyright (c) 2015, 2016, 2017 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/check_identity_bed.pl b/src/perl/bin/check_identity_bed.pl deleted file mode 100755 index 4a73f23fd..000000000 --- a/src/perl/bin/check_identity_bed.pl +++ /dev/null @@ -1,115 +0,0 @@ -#! /software/bin/perl - -use warnings; -use strict; -use Carp; -use Cwd; -use Getopt::Long; -use WTSI::NPG::Genotyping::QC::Identity; -use WTSI::NPG::Genotyping::QC::QCPlotShared qw(readThresholds); - -our $VERSION = ''; -our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; - -# Check identity of genotyped data against sequenom -# Input: files of genotypes in tab-delimited format, one row per SNP - -# Author: Iain Bancarz, ib5@sanger.ac.uk (refactored edition Feb 2012, original author unknown) - -# Old version used heterozygosity mismatch rates for comparison -# Modify to use genotype mismatch rates -# Do not count "flips" and/or "swaps" as mismatches -# Flip: Reverse complement, eg. GA and TC -# Swap: Transpose major and minor alleles, eg. GA and AG -# can have both flip and swap, eg. GA ~ CT - -# IMPORTANT: Plink and Sequenom name formats may differ: -# - Plink *sample* names may be of the form PLATE_WELL_ID -# where ID is the Sequenom identifier -# - Plink *snp* names may be of the form exm-FOO -# where FOO is the Sequenom SNP name -# - Either of the above differences *may* occur, but is not guaranteed! - -my ($outDir, $dbPath, $configPath, $iniPath, $minSNPs, $minIdent, $swap, - $plink, $help); - -# TODO introduce 'quiet' mode to suppress warnings - -GetOptions("outdir=s" => \$outDir, - "db=s" => \$dbPath, - "config=s" => \$configPath, - "ini=s" => \$iniPath, - "min_snps=i" => \$minSNPs, - "min_ident=f" => \$minIdent, - "swap=f" => \$swap, - "plink=s" => \$plink, - "h|help" => \$help); - -my $swapDefault = 0.95; - -if ($help) { - print STDERR "Usage: $0 [ output file options ] PLINK_GTFILE -PLINK_GTFILE is the prefix for binary plink files (without .bed, .bim, .fam extension) -Options: ---config=PATH Config path in .json format with QC thresholds. - At least one of config or min_ident must be given. ---ini=PATH Path to .ini file with additional configuration. - Defaults to: $DEFAULT_INI ---min_snps=NUMBER Minimum number of SNPs for comparison ---min_ident=NUMBER Minimum threshold of SNP matches for identity; if given, overrides value in config file; 0 <= NUMBER <= 1 ---swap=NUMBER Minimum threshold of SNP matches to flag a failed sample - pair as a potential swap; 0 <= NUMBER <= 1. Optional, - defaults to $swapDefault. ---outdir=PATH Directory for output files. Optional, defaults to current - working directory. ---plink=PATH Prefix for a Plink binary dataset, ie. path without .bed, - .bim, .fam extension. Required. ---db=PATH Path to an SQLite pipeline database containing the QC plex calls. Required. ---help Print this help text and exit -"; - exit(0); -} - -$plink or die "Must supply a Plink binary input prefix\n"; -foreach my $part (map { $plink . $_ } qw(.bed .bim .fam)) { - -e $part or die "Prefix '$plink' is not a valid Plink binary dataset; " . - "'$part' is missing\n"; -} - -if ($outDir) { - -e $outDir or die "Output '$outDir' does not exist\n"; - -d $outDir or die "Output '$outDir' is not a directory\n"; -} - -$dbPath or die "Must supply an SQLite pipeline database path\n"; --e $dbPath or die "Database path '$dbPath' does not exist\n"; - -$outDir ||= getcwd(); -$minSNPs ||= 8; -if (!$minIdent) { - if ($configPath) { - my %thresholds = readThresholds($configPath); - $minIdent = $thresholds{'identity'}; - } else { - die "Must supply a value for either --min_ident or --config\n"; - } -} -if ($minIdent < 0 || $minIdent > 1) { - die "Minimum identity value must be a number between 0 and 1\n"; -} -if ($swap && ($swap < 0 || $swap > 1)) { - die "Swap threshold must be a number between 0 and 1\n"; -} -$swap ||= $swapDefault; - -$iniPath ||= $DEFAULT_INI; - -WTSI::NPG::Genotyping::QC::Identity->new( - db_path => $dbPath, - ini_path => $iniPath, - min_shared_snps => $minSNPs, - output_dir => $outDir, - pass_threshold => $minIdent, - plink_path => $plink, - swap_threshold => $swap -)->run_identity_check(); diff --git a/src/perl/bin/collate_qc_results.pl b/src/perl/bin/collate_qc_results.pl index 32403aab0..1f59bb0ac 100755 --- a/src/perl/bin/collate_qc_results.pl +++ b/src/perl/bin/collate_qc_results.pl @@ -1,39 +1,59 @@ #! /software/bin/perl -# Author: Iain Bancarz, ib5@sanger.ac.uk -# February 2014 - -# Collate QC metric files and merge into a single JSON file -# Optionally: -# * Apply thresholds and evaluate pass/fail status -# * Exclude failed samples in pipeline SQLite database -# Metrics appear in various formats in the QC directory - use strict; use warnings; use Carp; use Cwd qw/abs_path/; use Getopt::Long; -use WTSI::NPG::Genotyping::QC::Collation qw(collate); +use Log::Log4perl qw(:levels); +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); +use WTSI::NPG::Genotyping::QC::Collator; +use WTSI::NPG::Utilities qw(user_session_log); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; -my ($inputDir, $metricJson, $statusJson, $csv, $iniPath, $dbPath, $thresholds, - $config, $exclude, $help, $verbose); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'collate_qc_results'); +my $log; -GetOptions("input=s" => \$inputDir, - "dbpath=s" => \$dbPath, - "metrics=s" => \$metricJson, - "status=s" => \$statusJson, +my $config; +my $csv; +my $dbPath; +my $debug; +my $duplicates; +my $exclude; +my $help; +my $iniPath; +my $inputDir; +my $log4perl_config; +my $metricJson; +my $statusJson; +my $verbose; + +GetOptions("config=s" => \$config, "csv=s" => \$csv, - "ini=s" => \$iniPath, - "config=s" => \$config, - "thresholds=s" => \$thresholds, + "debug" => \$debug, + "duplicates=s" => \$duplicates, "exclude" => \$exclude, "help" => \$help, + "ini=s" => \$iniPath, + "input=s" => \$inputDir, + "dbpath=s" => \$dbPath, + "logconf=s" => \$log4perl_config, + "metrics=s" => \$metricJson, + "status=s" => \$statusJson, "verbose" => \$verbose, - ); + ); + +my @log_levels; +if ($debug) { push @log_levels, $DEBUG; } +if ($verbose) { push @log_levels, $INFO; } +log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); +$log = Log::Log4perl->get_logger('main'); my $defaultStatusJson = 'qc_results.json'; @@ -43,11 +63,11 @@ --input Directory containing input files. Defaults to current working directory. --status Path for JSON output of metric values and pass/fail status. Defaults to $defaultStatusJson in current working directory. --dbpath Path to pipeline SQLite database file. Required. +--duplicates Path for JSON output of duplicate metric details. Optional; if absent, file will not be written. --ini Path to .ini file for SQLite database. Optional, defaults to $DEFAULT_INI. --csv Path for CSV output. Optional. --metrics Path for JSON output of metric values, without pass/fail status. Optional. --config Path to JSON file containing general configuration, including input filenames. Required. ---thresholds Path to JSON file containing thresholds to determine pass/fail status for each sample. Optional; defaults to value of --config. --exclude Flag failed samples for exclusion in pipeline DB file. --verbose Print progress information to STDERR --help Print this help text and exit @@ -58,7 +78,6 @@ $inputDir ||= '.'; $statusJson ||= $defaultStatusJson; $iniPath ||= $DEFAULT_INI; -$thresholds ||= $config; $exclude ||= 0; # validate command-line arguments @@ -68,8 +87,59 @@ if (!(-r $dbPath)) { croak "Cannot read pipeline database path $dbPath"; } elsif (!(-d $inputDir)) { croak "Input $inputDir does not exist or is not a directory"; } elsif (!(-r $config)) { croak "Cannot read config path $config"; } -elsif ($thresholds && !(-r $thresholds)) { croak "Cannot read thresholds path $thresholds"; } -# assign 0 (ie. false) to the optional reference to a list of metric names -collate($inputDir, $config, $thresholds, $dbPath, $iniPath, $statusJson, - $metricJson, $csv, $exclude, 0, $verbose); +my $collator = WTSI::NPG::Genotyping::QC::Collator->new( + db_path => $dbPath, + ini_path => $iniPath, + input_dir => $inputDir, + config_path => $config, +); + +if (defined $metricJson) { + $collator->writeMetricJson($metricJson); +} +if (defined $statusJson) { + $collator->writePassFailJson($statusJson); +} +if (defined $csv) { + $collator->writeCsv($csv); +} +if (defined $duplicates) { + $collator->writeDuplicates($duplicates); +} +if ($exclude) { + $collator->excludeFailedSamples(); +} + + +__END__ + +=head1 NAME + +collate_qc_results + +=head1 DESCRIPTION + +Collate genotyping QC results into a single object. Can write JSON and +CSV output, and exclude failed samples from the pipeline database. + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2014, 2015, 2016, 2017 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/create_test_database.pl b/src/perl/bin/create_test_database.pl index 8ae8d9408..c52e3455e 100755 --- a/src/perl/bin/create_test_database.pl +++ b/src/perl/bin/create_test_database.pl @@ -101,6 +101,7 @@ sub createDummyCalls { my ($plexPath,) = @_; my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); my @calls; @@ -282,3 +283,33 @@ sub addSampleGender { $db->disconnect(); +__END__ + +=head1 NAME + +create_test_database + +=head1 DESCRIPTION + +Create a test SQLite database for the genotyping pipeline + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/filter_illuminus_output.pl b/src/perl/bin/filter_illuminus_output.pl index 65f5e1aac..254da2969 100755 --- a/src/perl/bin/filter_illuminus_output.pl +++ b/src/perl/bin/filter_illuminus_output.pl @@ -6,9 +6,11 @@ package main; use strict; use warnings; +use Carp; use Getopt::Long; -use Log::Log4perl qw(:easy); +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw/log_init/; use WTSI::NPG::Utilities::DelimitedFiles qw(read_fon find_column_indices @@ -17,29 +19,37 @@ package main; use WTSI::NPG::Genotyping::Illuminus qw(read_gt_column_names filter_gt_columns); -our $VERSION = ''; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'filter_illuminus_output'); -Log::Log4perl->easy_init($ERROR); +our $VERSION = ''; run() unless caller(); sub run { my $columns; + my $debug; my $gt_input; my $gt_output; + my $log4perl_config; my $operation; my $pr_input; my $pr_output; my $verbose; - GetOptions('columns=s' => \$columns, - 'gt-input=s' => \$gt_input, + GetOptions('columns=s' => \$columns, + 'debug' => \$debug, + 'gt-input=s' => \$gt_input, 'gt-output=s' => \$gt_output, - 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, + 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, + 'logconf=s' => \$log4perl_config, 'operation=s' => \$operation, - 'pr-input=s' => \$pr_input, + 'pr-input=s' => \$pr_input, 'pr-output=s' => \$pr_output, - 'verbose' => \$verbose); + 'verbose' => \$verbose); unless ($gt_input) { pod2usage(-msg => "A --gt-input argument is required\n", @@ -62,6 +72,14 @@ sub run { -exitval => 2); } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); + my $gt_offset = 1; # 1 leading column in genotype files my $pr_offset = 3; # 3 leading columns in probability files @@ -81,18 +99,21 @@ sub run { } open(my $col, '<', "$columns") - or die "Failed to open column file '$columns' for reading: $!\n"; + or $log->logcroak("Failed to open column file '", $columns, + "' for reading: $!"); my $column_names = read_fon($col); - close($col) or warn "Failed to close column file '$columns'\n"; + close($col) or $log->logwarn("Failed to close column file '", + $columns, "': $!"); open(my $gti, '<', "$gt_input") - or die "Failed to open genotype file '$gt_input' for reading: $!\n"; + or $log->logcroak("Failed to open genotype file '", $gt_input, + "' for reading: $!"); open(my $gto, '>', "$gt_output") - or die "Failed to open genotype file '$gt_output' for writing: $!\n"; + or $log->logcroak("Failed to open genotype file '", $gt_output, + "' for writing: $!"); my $headers = read_gt_column_names($gti); my $cols_to_use = find_column_indices($column_names, $headers); - my $num_cols = scalar @$cols_to_use; print $gto $gt_separator, join($gt_separator, filter_columns($headers, $cols_to_use, $operation)), "\n"; @@ -100,31 +121,37 @@ sub run { my $num_genotypes = filter_gt_columns($gti, $gto, $gt_separator, $gt_offset, $gt_col_group, $cols_to_use, $operation); - close($gto) or warn "Failed to close genotype file '$gt_output'\n"; - close($gti) or warn "Failed to close genotype file '$gt_input'\n"; + + close($gto) or $log->logwarn("Failed to close genotype file '", + $gt_output, "': $!"); + close($gti) or $log->logwarn("Failed to close genotype file '", + $gt_input, "': $!"); open(my $pri, '<', "$pr_input") - or die "Failed to open probability file '$pr_input' for reading: $!\n"; + or $log->logcroak("Failed to open probability file '", + $pr_input, "' for reading: $!"); open(my $pro, '>', ">pr_output") - or die "Failed to open probability file '$pr_output' for writing: $!\n"; + or $log->logcroak("Failed to open probability file '", + $pr_output, "' for writing: $!"); my $num_probs = filter_gt_columns($pri, $pro, $pr_separator, $pr_offset, $pr_col_group, $cols_to_use, $operation); - close($pro) or warn "Failed to close probability file '$pr_output'\n"; - close($pri) or warn "Failed to close probability file '$pr_input'\n"; + close($pro) or $log->logwarn("Failed to close probability file '", + $pr_output, "': $!"); + close($pri) or $log->logwarn("Failed to close probability file '", + $pr_input, "': $!"); unless ($num_genotypes == $num_probs) { - die "Number of SNP genotype records ($num_genotypes) in '$gt_input' " . - "was not equal to the number of SNP probability records ($num_probs) " . - "in '$pr_input'\n"; + $log->logcroak("Number of SNP genotype records (", $num_genotypes, + ") in '", $gt_input, "' was not equal to the number ", + "of SNP probability records (", $num_probs, + ") in '", $pr_input, "'"); } - if ($verbose) { - my $verb = $operation . "d"; - my $num_cols = scalar @$cols_to_use; - print STDERR "$verb $num_cols columns from $num_genotypes records\n"; - } + my $verb = $operation . "d"; + my $num_cols = scalar @$cols_to_use; + $log->info("$verb $num_cols columns from $num_genotypes records"); return; } @@ -173,11 +200,11 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2011, 2012, 2015 Genome Research Limited. All Rights +Copyright (C) 2011, 2012, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify diff --git a/src/perl/bin/find_modified_files.pl b/src/perl/bin/find_modified_files.pl deleted file mode 100755 index 23f685cfc..000000000 --- a/src/perl/bin/find_modified_files.pl +++ /dev/null @@ -1,169 +0,0 @@ -#!/software/bin/perl - -use utf8; - -package main; - -use strict; -use warnings; -use Cwd qw(abs_path); -use DateTime; -use File::Basename; -use File::Find; -use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; -use Pod::Usage; - -use WTSI::NPG::iRODS qw(collect_files - collect_dirs - modified_between); - -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); - -our $VERSION = ''; -our $DEFAULT_DAYS = 7; - -run() unless caller(); - -sub run { - my $days; - my $days_ago; - my $debug; - my $depth; - my $log4perl_config; - my $root; - my $type; - my $verbose; - - GetOptions('days=i' => \$days, - 'days-ago=i' => \$days_ago, - 'debug' => \$debug, - 'depth=i' => \$depth, - 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, - 'logconf=s' => \$log4perl_config, - 'root=s' => \$root, - 'type=s' => \$type, - 'verbose' => \$verbose); - - unless ($root) { - pod2usage(-msg => "A --root argument is required\n", - -exitval => 2); - } - unless ($type) { - pod2usage(-msg => "A --type argument is required\n", - -exitval => 2); - } - - $days ||= $DEFAULT_DAYS; - $days_ago ||= 0; - - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } - - my $now = DateTime->now(); - my $end; - if ($days_ago > 0) { - $end = DateTime->from_epoch - (epoch => $now->epoch())->subtract(days => $days_ago); - } - else { - $end = $now; - } - - my $begin = DateTime->from_epoch - (epoch => $end->epoch())->subtract(days => $days); - - $log->info("Finding file of type '$type' under '$root' ", - "last modified between ", $begin->iso8601, " and ", $end->iso8601); - - my $file_test = modified_between($begin->epoch(), $end->epoch()); - my $file_regex = qr{.($type)$}msxi; - my $root_dir = abs_path($root); - - my @found = collect_files($root_dir, $file_test, $depth, $file_regex); - $log->debug("Found " . scalar @found . " matching items in '$root'"); - - foreach my $file (@found) { - print "$file\n"; - } -} - - - -__END__ - -=head1 NAME - -find_modified_files - -=head1 SYNOPSIS - -find_modified_files [--days-ago ] [--days ] \ - --root --type - -Options: - - --days-ago The number of days ago that the publication window ends. - Optional, defaults to zero (the current day). - --days The number of days in the publication window, ending at - the day given by the --days-ago argument. Any sample data - modified during this period will be considered - for publication. Optional, defaults to 7 days. - --help Display help. - --logconf A log4perl configuration file. Optional. - --root The root directory to search for sample data. - --type The data type (file suffix) of file to print. - --verbose Print messages while processing. Optional. - -=head1 DESCRIPTION - -Searches a directory recursively files that have been modified within -the n days prior to a specific time and prints their path to -STDOUT. - -=head1 METHODS - -None - -=head1 AUTHOR - -Keith James - -=head1 COPYRIGHT AND DISCLAIMER - -Copyright (c) 2013 Genome Research Limited. All Rights Reserved. - -This program is free software: you can redistribute it and/or modify -it under the terms of the Perl Artistic License or the GNU General -Public License as published by the Free Software Foundation, either -version 3 of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -=cut diff --git a/src/perl/bin/identity_simulation.pl b/src/perl/bin/identity_simulation.pl index cd8d94823..4f49029c5 100755 --- a/src/perl/bin/identity_simulation.pl +++ b/src/perl/bin/identity_simulation.pl @@ -9,13 +9,12 @@ package main; use FindBin qw($Bin); use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw/log_init/; use WTSI::NPG::Genotyping::Call; -use WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator; -use WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator; use WTSI::NPG::Genotyping::SNPSet; use WTSI::NPG::Utilities qw(user_session_log); @@ -30,25 +29,7 @@ package main; my $uid = `whoami`; chomp($uid); -my $session_log = user_session_log($uid, 'check_identity_bed_wip'); - -my $embedded_conf = " - log4perl.logger.npg.genotyping.qc.identity = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - -my $log; +my $session_log = user_session_log($uid, 'identity_simulation'); run() unless caller(); @@ -87,20 +68,13 @@ sub run { 'total=i' => \$total, 'verbose' => \$verbose); - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.genotyping.qc.identity'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.genotyping.qc.identity'); - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $data_path = $Bin.'/../t/qc/check/identity'; $snpset_file ||= "$data_path/W30467_snp_set_info_1000Genomes.tsv"; @@ -108,10 +82,9 @@ sub run { my $calls = generate_calls($snpset); - my $idsim = WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator->new( + my $idsim = WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator->new( calls => $calls, - snpset => $snpset, - logger => $log, + snpset => $snpset ); my $results; diff --git a/src/perl/bin/illuminus.pl b/src/perl/bin/illuminus.pl index e390ccaad..b3c877a72 100755 --- a/src/perl/bin/illuminus.pl +++ b/src/perl/bin/illuminus.pl @@ -13,10 +13,11 @@ package main; use File::Temp qw(tempdir); use Getopt::Long; use IO::ScalarArray; -use Log::Log4perl qw(:easy); +use Log::Log4perl qw(:levels); use POSIX qw(mkfifo); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::DNAP::Utilities::IO qw(maybe_stdin maybe_stdout); use WTSI::NPG::Genotyping qw(read_sample_json); use WTSI::NPG::Genotyping::Illuminus qw(nullify_females @@ -24,14 +25,21 @@ package main; update_it_columns write_gt_calls write_it_header); -our $VERSION = ''; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'perl_illuminus_wrap'); +my $log; -Log::Log4perl->easy_init($ERROR); +our $VERSION = ''; my $chromosome; +my $debug; my $end; my $executable; my $input; +my $log4perl_config; my $output; my $plink; my $samples; @@ -40,9 +48,11 @@ package main; my $whole_genome_amplified; GetOptions('chr=s' => \$chromosome, + 'debug' => \$debug, 'end=i' => \$end, 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, 'input=s' => \$input, + 'logconf=s' => \$log4perl_config, 'output=s' => \$output, 'plink' => \$plink, 'samples=s' => \$samples, @@ -75,6 +85,14 @@ package main; -exitval => 2); } +my @log_levels; +if ($debug) { push @log_levels, $DEBUG; } +if ($verbose) { push @log_levels, $INFO; } +log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); +$log = Log::Log4perl->get_logger('main'); + $chromosome = uc($chromosome); $executable = 'illuminus'; @@ -102,20 +120,18 @@ package main; if ($plink) { push(@command, '-b', '-out', $output); # Maybe muffle Illuminus' STDOUT chatter - unless ($verbose) { + unless ($verbose || $debug) { push(@command, "> /dev/null"); } my $command = join(" ", @command); - if ($verbose) { - print STDERR "Executing '$command'\n"; - } + $log->info("Executing '", $command, "'"); if ($chromosome eq 'Y') { nullify_females($input, $command, \@samples); } else { - system($command) == 0 or die "Failed to execute '$command'\n"; + system($command) && $log->logcroak("Failed to execute '", $command, "'"); } exit(0); @@ -135,7 +151,7 @@ package main; my $pid = fork(); if (! defined $pid) { - die "Failed to fork: $!\n"; + $log->logcroak("Failed to fork: $!"); } elsif ($pid) { my @calls; @@ -146,18 +162,20 @@ package main; # interleave reads and make this a nice stream. We have to slurp all # of one, then the other. open(my $calls, '<', "$calls_fifo") - or die "Failed to open '$calls_fifo': $!\n"; + or $log->logcroak("Failed to open FIFO '", $calls_fifo, "': $!"); while (my $line = <$calls>) { push(@calls, $line); } - close($calls) or warn "Failed to close FIFO $calls_fifo: $!\n"; + close($calls) or $log->logwarn("Failed to close FIFO '", + $calls_fifo, "': $!"); open(my $probs, '<', "$probs_fifo") - or die "Failed to open '$probs_fifo': $!\n"; + or $log->logcroak("Failed to open '", $probs_fifo, "': $!"); while (my $line = <$probs>) { push(@probs, $line); } - close($probs) or warn "Failed to close FIFO $probs_fifo: $!\n"; + close($probs) or $log->logwarn("Failed to close FIFO '", + $probs_fifo, "': $!"); # write_gt_calls requires streams, so this is a shim to pretend that # we have such @@ -171,20 +189,19 @@ package main; } else { # Maybe muffle Illuminus' STDOUT chatter - unless ($verbose) { + unless ($verbose || $debug) { push(@command, "> /dev/null"); } my $command = join(" ", @command); - if ($verbose) { - print STDERR "Executing '$command'\n"; - } + $log->info("Executing '", $command, "'"); if ($chromosome eq 'Y') { nullify_females($input, $command, \@samples, $verbose); } else { - system($command) == 0 or die "Failed to execute '$command'\n"; + system($command) && $log->logcroak("Failed to execute '", + $command, "'"); } exit; @@ -213,7 +230,7 @@ sub write_gender_codes { my ($file, $chromosome, $samples) = @_; open(my $genders, '>', "$file") - or die "Failed to open '$file' for writing: $!\n"; + or $log->logcroak("Failed to open '", $file, "' for writing: $!"); foreach my $sample (@$samples) { my $code = 0; if ($chromosome =~ m{^M}msx) { @@ -223,12 +240,14 @@ sub write_gender_codes { } unless (defined $code) { my $uri = $sample->{uri}; - die "Failed to find a gender code for sample $uri in '$file'\n"; + $log->logcroak("Failed to find a gender code for sample ", $uri, + " in '", $file, "': $!"); } print $genders "$code\n"; } - close($genders) or warn "Failed to close gender code file '$file'\n"; + close($genders) or $log->logwarn("Failed to close gender code file '", + $file, "': $!"); return $file; } @@ -236,7 +255,8 @@ sub write_gender_codes { sub make_fifo { my $filename = shift; - mkfifo($filename, '0400') or die "Failed to create FIFO '$filename': $!\n"; + mkfifo($filename, '0400') or $log->logcroak("Failed to create FIFO '", + $filename, "': $!"); return $filename; } @@ -286,11 +306,11 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2012, 2015 Genome Research Limited. All Rights Reserved. +Copyright (C) 2012, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/plate_heatmap_index.pl b/src/perl/bin/plate_heatmap_index.pl index 412259f0a..fdb2d1333 100755 --- a/src/perl/bin/plate_heatmap_index.pl +++ b/src/perl/bin/plate_heatmap_index.pl @@ -9,6 +9,7 @@ use warnings; use strict; +use Carp; use CGI qw/:standard *table/; use Cwd; use File::Basename; @@ -64,10 +65,12 @@ sub getPlateInfo { my ($experiment, $plotDir, $outFileName) = @ARGV; # experiment name, input/output directory, output filename if (@ARGV!=3) { - die "Usage: $0 experiment_name input/output_directory output_filename\n"; + croak("Usage: $0 experiment_name input/output_directory ", + "output_filename\n"); } elsif (!(-e $plotDir && -d $plotDir)) { - die "Output path '$plotDir' does not exist or is not a directory\n"; -} + croak("Output path '", $plotDir, + "' does not exist or is not a directory"); +} my @refs = getPlateInfo($plotDir); my @plates = @{shift(@refs)}; my %crPlots = %{shift(@refs)}; @@ -75,7 +78,8 @@ sub getPlateInfo { my %magPlots = %{shift(@refs)}; # must write index to given plot directory -- otherwise links are broken my $outPath = $plotDir.'/'.$outFileName; -open my $out, ">", $outPath || die "Cannot open output path $outPath: $!\n"; +open my $out, ">", $outPath || croak("Cannot open output path '", + $outPath, "': $!"); print $out header(-type=>''), # create the HTTP header; content-type declaration not needed for writing to file start_html(-title=>"$experiment: Plate heatmap index", -author=>'Iain Bancarz ', @@ -100,9 +104,43 @@ sub getPlateInfo { } print $out end_table(); print $out end_html(); -close $out; +close $out || croak("Cannot close output path '", $outPath, "'");; # test output for XML validity -open my $fh, "<", $outPath; -if (WTSI::NPG::Genotyping::QC::QCPlotTests::xmlOK($fh)) { close $fh; exit(0); } # no error -else { close $fh; exit(1); } # error found +open my $fh, "<", $outPath || croak("Cannot open '", $outPath, "'"); +my $xml_ok = WTSI::NPG::Genotyping::QC::QCPlotTests::xmlOK($fh); +close $fh || croak("Cannot close '", $outPath, "'"); +unless ($xml_ok) { croak("Output '", $outPath, "' is not valid XML"); } + + + +__END__ + +=head1 NAME + +plate_heatmap_index + +=head1 DESCRIPTION + +Generate an HTML index page for plate heatmap plots + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/plate_heatmap_plots.pl b/src/perl/bin/plate_heatmap_plots.pl index 485885d28..c7b6445d9 100755 --- a/src/perl/bin/plate_heatmap_plots.pl +++ b/src/perl/bin/plate_heatmap_plots.pl @@ -22,12 +22,12 @@ GetOptions("dbpath=s" => \$dbPath, "inipath=s" => \$iniPath, - "mode=s" => \$mode, + "mode=s" => \$mode, "out_dir=s" => \$outDir, "h|help" => \$help); if ($help) { - print STDERR "Usage: $0 [ options ] + print STDERR "Usage: $0 [ options ] Script to generate heatmap plots for each sample on a plate surface. Plots include call rate, autosome heterozygosity, and xy intensity difference. Appropriate input data must be supplied to STDIN: either sample_cr_het.txt or the *XYdiff.txt file. @@ -51,13 +51,13 @@ $outDir ||= 'platePlots'; if ((!$dbPath) && (!$iniPath)) { - die "Must supply at least one of pipeline database path and .ini path!\n"; + croak("Must supply at least one of pipeline database path and .ini path!"); } if ($dbPath && !(-r $dbPath)) { - die "Cannot read pipeline database path $dbPath\n"; + croak("Cannot read pipeline database path '", $dbPath, "'"); } if ($iniPath && !(-r $iniPath)) { - die "Cannot read .ini path $iniPath\n"; + croak("Cannot read .ini path '", $iniPath, "'"); } sub getXYdiffMinMax { @@ -86,7 +86,7 @@ sub makePlots { my $plate = $comments{'PLATE_NAME'}; # TODO fail silently for reserved filenames, eg. xydiff_boxplot.txt if (not(defined($plate))) { - print STDERR "WARNING: Cannot read plate name from $path. Skipping.\n"; + carp("Cannot read plate name from '", $path, "'. Skipping."); next; } $plate =~ s/\s+/_/msx; # get rid of spaces in plate name (if any) @@ -153,7 +153,7 @@ sub readData { } @allResults = sort {$a<=>$b} @allResults; # sort numerically if ($mode eq 'xydiff') { # special plot range for xydiff - ($plotMin, $plotMax) = getXYdiffMinMax(\@allResults); + ($plotMin, $plotMax) = getXYdiffMinMax(\@allResults); } else { # default to plot range = data range $plotMin = $allResults[0]; $plotMax = $allResults[-1]; @@ -167,14 +167,15 @@ sub readComments { # header lines of the form '# KEY VALUE' ; VALUE may contain spaces! my $inPath = shift; my %comments = (); - open my $in, "<", $inPath || die "Cannot open input path $inPath: $!\n"; + open my $in, "<", $inPath || croak("Cannot open input path '", + $inPath, "': $!"); while (<$in>) { chomp; unless (m{^\#}msx) { next; } my @words = split /\s/msx; $comments{$words[1]} = join(' ', @words[2..$#words]); # value may contain spaces! } - close $in; + close $in || croak("Cannot close input path '", $inPath, "'"); return %comments; } @@ -188,7 +189,8 @@ sub writeGrid { my $outPath = $outDir."/".$outPrefix.$plate.".txt"; my @keyList = keys(%comments); @keyList = sort(@keyList); - open my $out, ">", $outPath || die "Cannot open output path $outPath: $!\n"; + open my $out, ">", $outPath || croak("Cannot open output path '", + $outPath, "': $!"); foreach my $key (@keyList) { print $out "# $key $comments{$key}\n"; } for (my $y=1; $y<=$yMax; $y++) { # x, y counts start at 1 my @row = (); @@ -199,7 +201,7 @@ sub writeGrid { } print $out join("\t", @row)."\n"; } - close $out; + close $out || croak("Cannot close output path '", $outPath, "'"); return 1; } @@ -210,17 +212,19 @@ sub writePlateData { my ($dataRef, $prefix, $xMax, $yMax, $outDir, $min, $max) = @_; # will append plate name to prefix my %data = %$dataRef; if (not -e $outDir) { - mkdir($outDir) || die "Failed to create output directory $outDir : $!\n"; + mkdir($outDir) || croak("Failed to create output directory '", + $outDir, "'"); } - elsif (not -d $outDir) { die "$outDir is not a directory: $!\n"; } - elsif (not -w $outDir) { die "Directory $outDir is not writable: $!\n"; } - foreach my $plate (keys(%data)) { + elsif (not -d $outDir) { croak("'", $outDir, "' is not a directory"); } + elsif (not -w $outDir) { croak("Directory '", $outDir, + "' is not writable"); } + foreach my $plate (keys(%data)) { my %comments = ( PLATE_NAME => $plate, PLOT_MIN => $min, PLOT_MAX => $max, ); - writeGrid($data{$plate}, $outDir, $prefix, $xMax, $yMax, \%comments); + writeGrid($data{$plate}, $outDir, $prefix, $xMax, $yMax, \%comments); } return 1; } @@ -231,34 +235,34 @@ sub run { my $test = 1; # keep tests on by default, since they are very quick to run my %plotScripts = ( # R plotting scripts for each mode cr => 'plotCrPlate.R', - het => 'plotHetPlate.R', - xydiff => 'plotXYdiffPlate.R', + het => 'plotHetPlate.R', + xydiff => 'plotXYdiffPlate.R', magnitude => 'plotMagnitudePlate.R', ); my %index = ( # index in whitespace-separated input data for each mode cr => 1, - het => 2, - xydiff => 1, + het => 2, + xydiff => 1, magnitude => 1, ); my %minMaxArgs = ( # supply min/max arguments to R script? cr => 0, - het => 0, - xydiff => 1, + het => 0, + xydiff => 1, magnitude => 0,); - my $inputFH = \*STDIN; + my $inputFH = \*STDIN; # read data from STDIN; output data values by plate & useful stats my ($dataOK, $dataRef, $xMax, $yMax, $plotMin, $plotMax) = readData($inputFH, $index{$mode}, $mode, $dbPath, $iniPath); my $ok = 1; if ($dataOK) { - writePlateData($dataRef, $mode.'_', $xMax, $yMax, $outDir, - $plotMin, $plotMax); - $ok = makePlots($outDir, $plotScripts{$mode}, $mode."_*", - "plot_${mode}_", $minMaxArgs{$mode}, $test); + writePlateData($dataRef, $mode.'_', $xMax, $yMax, $outDir, + $plotMin, $plotMax); + $ok = makePlots($outDir, $plotScripts{$mode}, $mode."_*", + "plot_${mode}_", $minMaxArgs{$mode}, $test); } else { - print STDERR "Cannot parse plate/well locations; omitting ". - "plate heatmap plots.\n"; + carp("Cannot parse plate/well locations; omitting ", + "plate heatmap plots."); } return $ok; } @@ -266,3 +270,35 @@ sub run { my $ok = run($mode, $outDir, $dbPath, $iniPath); if ($ok) { exit(0); } else { exit(1); } + + +__END__ + +=head1 NAME + +plate_heatmap_plots + +=head1 DESCRIPTION + +Generate heatmap plots of QC metrics by plate + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/plot_box_bean.pl b/src/perl/bin/plot_box_bean.pl index 2a50dadf4..0fb3fa644 100755 --- a/src/perl/bin/plot_box_bean.pl +++ b/src/perl/bin/plot_box_bean.pl @@ -24,7 +24,7 @@ our $VERSION = ''; Log::Log4perl->easy_init($ERROR); -my $log = Log::Log4perl->get_logger("genotyping"); +my $log = Log::Log4perl->get_logger(); my ($mode, $type, $outDir, $title, $help, $dbpath, $inipath); @@ -38,7 +38,7 @@ if ($help) { - print STDERR "Usage: $0 [ options ] + print STDERR "Usage: $0 [ options ] Script to boxplots by plate for QC metrics. Plots include call rate, autosome heterozygosity, and xy intensity difference. Appropriate input data must be supplied to STDIN: either sample_cr_het.txt or the *XYdiff.txt file. @@ -64,19 +64,19 @@ $title ||= "UNTITLED"; unless ($mode eq "cr" || $mode eq "het" || $mode eq "xydiff") { - die "Illegal mode argument: $mode: $!\n"; + $log->logcroak("Illegal mode argument: ", $mode, "': $!"); } unless ($type eq "box" || $type eq "bean" || $type eq "both") { - die "Illegal type argument: $type: $!\n"; + $log->logcroak("Illegal type argument: '", $type, "': $!"); } if ((!$dbpath) && (!$inipath)) { - die "Must supply at least one of pipeline database path and .ini path!\n"; + $log->logcroak("Must supply at least one of pipeline database path and .ini path"); } if ($dbpath && !(-r $dbpath)) { - die "Cannot read pipeline database path $dbpath\n"; + $log->logcroak("Cannot read pipeline database path '", $dbpath, "': $!"); } if ($inipath && !(-r $inipath)) { - die "Cannot read .ini path $inipath\n"; + $log->logcroak("Cannot read .ini path '", $inipath, "'"); } sub writeBoxplotInput { @@ -90,7 +90,8 @@ sub writeBoxplotInput { chomp; my @words = split; unless ($plateLocs{$words[0]}) { - die "No plate location for sample '$words[0]'; exiting\n"; + $log->logcroak("No plate location for sample '", $words[0], + "'; exiting"); } my ($plate, $addressLabel) = @{$plateLocs{$words[0]}}; if ($plate) { @@ -106,19 +107,19 @@ sub runPlotScript { my ($mode, $bean, $outDir, $title, $textPath) = @_; my %beanPlotScripts = ( # R plotting scripts for each mode cr => 'beanplotCR.R', - het => 'beanplotHet.R', + het => 'beanplotHet.R', xydiff => 'beanplotXYdiff.R', ); my %boxPlotScripts = ( # R plotting scripts for each mode cr => 'boxplotCR.R', het => 'boxplotHet.R', xydiff => 'boxplotXYdiff.R', ); my ($plotScript, $pngOutPath); - if ($bean) { - $plotScript = $beanPlotScripts{$mode}; + if ($bean) { + $plotScript = $beanPlotScripts{$mode}; $pngOutPath = $outDir."/".$mode."_beanplot.png"; } - else { - $plotScript = $boxPlotScripts{$mode}; + else { + $plotScript = $boxPlotScripts{$mode}; $pngOutPath = $outDir."/".$mode."_boxplot.png"; } my @args = ($plotScript, $textPath, $title); @@ -139,14 +140,16 @@ sub run { my ($mode, $type, $outDir, $title, $dbpath, $inipath) = @_; my %index = ( # index in whitespace-separated input data for each mode; use to write .txt input to R scripts cr => 1, - het => 2, + het => 2, xydiff => 1, ); my $input = \*STDIN; my $textOutPath = $outDir."/".$mode."_boxplot.txt"; - open my $output, ">", $textOutPath || croak "Cannot open output file: $!"; + open my $output, ">", $textOutPath || + $log->logcroak("Cannot open output file '", $textOutPath, "': $!"); my $inputOK = writeBoxplotInput($input, $output, $index{$mode}, $dbpath, $inipath); - close $output; - my $plotsOK = 0; + close $output || $log->logcroak("Cannot close output file '", + $textOutPath, "'");; + my $plotsOK = 0; if ($inputOK) { if ($type eq 'both' || $type eq 'box') { $plotsOK = runPlotScript($mode, 0, $outDir, $title, $textOutPath); # boxplot @@ -155,7 +158,7 @@ sub run { $plotsOK = runPlotScript($mode, 1, $outDir, $title, $textOutPath); # beanplot } } else { - croak "\tERROR: Cannot parse any plate names from standard input"; + $log->logcroak("Cannot parse any plate names from standard input"); } return $plotsOK; } @@ -163,3 +166,35 @@ sub run { my $ok = run($mode, $type, $outDir, $title, $dbpath, $inipath); if ($ok) { exit(0); } else { exit(1); } + + +__END__ + +=head1 NAME + +plot_box_bean + +=head1 DESCRIPTION + +Generate boxplots and beanplots of QC metrics using R + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/plot_cr_het_density.pl b/src/perl/bin/plot_cr_het_density.pl index c5e7f7519..a141efa54 100755 --- a/src/perl/bin/plot_cr_het_density.pl +++ b/src/perl/bin/plot_cr_het_density.pl @@ -9,6 +9,7 @@ use strict; use warnings; +use Carp; use Getopt::Long; use FindBin qw($Bin); use POSIX qw(floor); @@ -76,7 +77,7 @@ sub readCrHet { my $qMax = shift; $qMax ||= 40; my $crMax = 1 - 10**(-$qMax/10); # truncate very high CR (may have CR=100% for few SNPs) - my ($crIndex, $hetIndex) = (1,2); + my ($crIndex, $hetIndex) = (1,2); my @coords = (); my ($hetMin, $hetMax) = (1, 0); while (<$input>) { @@ -85,7 +86,7 @@ sub readCrHet { my @words = split; my $cr = $words[$crIndex]; my $crScore; # convert cr to phred scale - if ($cr > $crMax) { $crScore = $qMax; } + if ($cr > $crMax) { $crScore = $qMax; } else { $crScore = -10 * (log(1 - $words[$crIndex]) / log(10)); } my $het = $words[$hetIndex]; if ($het < $hetMin) { $hetMin = $het; } @@ -108,10 +109,10 @@ sub writeTable { sub run { my $title = shift; my $outDir = shift; - my @names = ('crHetDensityHeatmap.txt', 'crHetDensityHeatmap.pdf', - 'crHetDensityHeatmap.png', + my @names = ('crHetDensityHeatmap.txt', 'crHetDensityHeatmap.pdf', + 'crHetDensityHeatmap.png', 'crHet.txt', 'crHetDensityScatter.pdf', - 'crHetDensityScatter.png', 'crHistogram.png', + 'crHetDensityScatter.png', 'crHistogram.png', 'hetHistogram.png'); my @paths = (); foreach my $name (@names) { push(@paths, $outDir.'/'.$name); } @@ -124,26 +125,59 @@ sub run { my ($xmin, $xmax, $xsteps, $ysteps) = (0, 41, 40, 40); my @counts = getBinCounts($coordsRef, $xmin, $xmax, $xsteps, $hetMin, $hetMax, $ysteps); open $output, ">", $heatText || - die "Cannot open output path $heatText: $!\n"; + croak("Cannot open output path '", $heatText, "': $!"); writeTable(\@counts, $output); - close $output; + close $output || croak("Cannot close output path '", $heatText, "'");; @args = ($heatPlotScript, $heatText, $title, $hetMin, $hetMax, $heatPdf); @outputs = ($heatPng,); my $plotsOK = WTSI::NPG::Genotyping::QC::QCPlotTests::wrapPlotCommand(\@args, \@outputs); ### do scatterplot & histograms ### if ($plotsOK) { - open $output, ">", $scatterText || - die "Cannot open output path $scatterText: $!\n"; - writeTable($coordsRef, $output); # note that CR coordinates have been transformed to phred scale - close $output; + open $output, ">", $scatterText || + croak("Cannot open output path '", $scatterText, "': $!"); + writeTable($coordsRef, $output); # note that CR coordinates have been transformed to phred scale + close $output || + croak("Cannot close output path '", $scatterText, "'"); my $scatterPlotScript = "plotCrHetDensity.R"; @args = ($scatterPlotScript, $scatterText, $title, $scatterPdf); @outputs = ($scatterPng, $crHist, $hetHist); $plotsOK = WTSI::NPG::Genotyping::QC::QCPlotTests::wrapPlotCommand(\@args, \@outputs); } - return $plotsOK; + return $plotsOK; } my $ok = run($title, $outDir, $test); if ($ok) { exit(0); } else { exit(1); } + + +__END__ + +=head1 NAME + +plot_cr_het_density + +=head1 DESCRIPTION + +Create density plots for genotype call rate and heterozygosity using R + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/plot_fail_causes.pl b/src/perl/bin/plot_fail_causes.pl index 492c89a1a..ddb4ea68f 100755 --- a/src/perl/bin/plot_fail_causes.pl +++ b/src/perl/bin/plot_fail_causes.pl @@ -165,19 +165,19 @@ sub writeFailCounts { }; } open my $out, ">", $failText || - die "Cannot open output file $failText: $!\n"; + croak("Cannot open output file '", $failText, "': $!"); my @metrics = sort(keys(%singleFails)); foreach my $metric (@metrics) { print $out $metric."\t".$singleFails{$metric}."\n"; } - close $out; + close $out || croak("Cannot close output file '", $failText, "'"); my @failCombos = sort(keys(%combinedFails)); open $out, ">", $comboText || - die "Cannot open output file $failText: $!\n"; + croak("Cannot open output file '", $comboText, "': $!"); foreach my $combo (@failCombos) { print $out $combo."\t".$combinedFails{$combo}."\n"; } - close $out; + close $out || croak("Cannot close output file '", $comboText, "': $!"); return @failedSamples; } @@ -191,7 +191,8 @@ sub writeFailedCrHet { my @header = qw(sample cr het); my @keys = qw(duplicate gender identity magnitude); push(@header, @keys); - open my $out, ">", $outPath || die "Cannot open output path $outPath: $!\n"; + open my $out, ">", $outPath || croak("Cannot open output path '", + $outPath, "': $!"); print $out join("\t", @header)."\n"; foreach my $fieldsRef (@data) { my @fields = splice(@$fieldsRef, 0, 3); @@ -208,7 +209,7 @@ sub writeFailedCrHet { } print $out join("\t", @fields)."\n"; } - close $out; + close $out || croak("Cannot close output path '", $outPath, "': $!"); return 1; } @@ -217,7 +218,7 @@ sub run { my ($inputPath, $qcConfigPath, $outputsRef, $title, $crHetPath) = @_; my %qcResults = WTSI::NPG::Genotyping::QC::QCPlotShared::readMetricResultHash($inputPath, $qcConfigPath); unless (containsFailedSample(\%qcResults)) { - print STDERR "No samples failed QC thresholds; omitting failure plots.\n"; + carp("No samples failed QC thresholds; omitting failure plots."); return 1; } my ($failText, $comboText, $causeText, $comboPdf, $causePdf, @@ -239,7 +240,7 @@ sub run { @args = ("plotCombinedFails.R", $comboText, $title, $comboPdf); @outputs = ($comboPng,); $ok = WTSI::NPG::Genotyping::QC::QCPlotTests::wrapPlotCommand(\@args, \@outputs); - unless ($ok) { confess "Error for combined failure barplot: $!"; } + unless ($ok) { confess "Error for combined failure barplot: $!"; } my %thresholds = WTSI::NPG::Genotyping::QC::QCPlotShared::readThresholds($qcConfigPath); my ($hetMean, $hetSd) = findHetMeanSd($crHetPath); my $hetMaxDist = $hetSd * $thresholds{'heterozygosity'}; @@ -253,3 +254,35 @@ sub run { my $allPlotsOK = run($inPath, $configPath, \@outputPaths, $title, $crHetPath); if ($allPlotsOK) { exit(0); } else { exit(1); } + + +__END__ + +=head1 NAME + +plot_fail_causes + +=head1 DESCRIPTION + +Plot causes of genotyping QC failure using R + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/plot_metric_scatter.pl b/src/perl/bin/plot_metric_scatter.pl index b210284a2..e549f790a 100755 --- a/src/perl/bin/plot_metric_scatter.pl +++ b/src/perl/bin/plot_metric_scatter.pl @@ -19,10 +19,10 @@ our $VERSION = ''; Log::Log4perl->easy_init($ERROR); -my $log = Log::Log4perl->get_logger("genotyping"); +my $log = Log::Log4perl->get_logger(); -my ($qcDir, $outDir, $title, $help, $config, $gender, $dbpath, $inipath, - $resultpath, $maxBatch, $noIntensity); +my ($qcDir, $outDir, $title, $help, $config, $gender, $dbpath, $inipath, + $resultpath, $maxBatch); GetOptions("qcdir=s" => \$qcDir, "outdir=s" => \$outDir, @@ -32,7 +32,6 @@ "gender=s" => \$gender, "inipath=s" => \$inipath, "resultpath=s" => \$resultpath, - "no-intensity" => \$noIntensity, "max" => \$maxBatch, "h|help" => \$help); @@ -52,7 +51,6 @@ --gender=PATH Path to .txt file with gender thresholds --qcdir=PATH Directory for QC input --outdir=PATH Directory for output; defaults to qcdir ---no-intensity Omit intensity metric (normalized signal magnitude) --max Maximum number of samples on any one plot --help Print this help text and exit Unspecified options will receive default values. @@ -70,9 +68,40 @@ my @paths = ($qcDir, $outDir, $dbpath, $inipath, $resultpath, $config); foreach my $path (@paths) { - if (!(-r $path)) { croak "Cannot read path $path"; } + if (!(-r $path)) { croak("Cannot read path '", $path, "'"); } } -runAllMetrics($qcDir, $outDir, $config, $gender, $dbpath, $inipath, - $resultpath, $maxBatch, $noIntensity); +runAllMetrics($qcDir, $outDir, $config, $gender, $dbpath, $inipath, + $resultpath, $maxBatch); + +__END__ + +=head1 NAME + +plot_metric_scatter + +=head1 DESCRIPTION + +Create scatterplots of QC metrics using R + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2015, 2017 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/publish_expression_analysis.pl b/src/perl/bin/publish_expression_analysis.pl index d468afa61..79c0db3c1 100755 --- a/src/perl/bin/publish_expression_analysis.pl +++ b/src/perl/bin/publish_expression_analysis.pl @@ -12,43 +12,27 @@ package main; use DateTime; use Getopt::Long; use List::AllUtils qw(uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Net::LDAP; use Pod::Usage; use URI; use UUID; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::DNAP::Utilities::IO qw(maybe_stdin); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Expression::AnalysisPublisher; use WTSI::NPG::Expression::ChipLoadingManifestV1; use WTSI::NPG::Expression::ChipLoadingManifestV2; use WTSI::NPG::Expression::Publisher; -use WTSI::NPG::Utilities qw(collect_files trim user_session_log); +use WTSI::NPG::Utilities qw(trim user_session_log); +use WTSI::NPG::Utilities::Collector; our $VERSION = ''; my $uid = `whoami`; chomp($uid); my $session_log = user_session_log($uid, 'publish_expression_analysis'); - -my $embedded_conf = " - log4perl.logger.npg.irods.publish = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - my $log; our $DEFAULT_INI = $ENV{HOME} . '/.npg/genotyping.ini'; @@ -140,21 +124,13 @@ sub run { -exitval => 3); } - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + $log = Log::Log4perl->get_logger('main'); $log->info("Publishing samples from '$sample_source' ", "to '$publish_sample_dest'"); @@ -190,18 +166,16 @@ sub run { my $publication_time = DateTime->now; my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', - inifile => $config, - logger => $log)->connect(RaiseError => 1, - mysql_enable_utf8 => 1, - mysql_auto_reconnect => 1); + inifile => $config)->connect(RaiseError => 1, + mysql_enable_utf8 => 1, + mysql_auto_reconnect => 1); my @data_files = find_data_files($sample_source, $manifest); my $sample_publisher = WTSI::NPG::Expression::Publisher->new (data_files => \@data_files, manifest => $manifest, publication_time => $publication_time, - sequencescape_db => $ssdb, - logger => $log); + sequencescape_db => $ssdb); # Includes secondary metadata (from warehouse) $sample_publisher->publish($publish_sample_dest); @@ -211,8 +185,7 @@ sub run { manifest => $manifest, publication_time => $publication_time, sample_archive => $publish_sample_dest, - irods => $sample_publisher->irods, - logger => $log); + irods => $sample_publisher->irods); # Uses the secondary metadata added above to find the sample data in # iRODS for cross-referencing @@ -252,11 +225,12 @@ sub find_data_files { $log->debug("Finding sample data files matching regex '$filename_regex'"); - my $sample_dir = abs_path($sample_source); - my $file_test = sub { return $_[0] =~ $filename_regex }; - my $relative_depth = 3; - - return collect_files($sample_dir, $file_test, $relative_depth); + my $collector = WTSI::NPG::Utilities::Collector->new( + root => abs_path($sample_source), + depth => 3, + regex => $filename_regex, + ); + return $collector->collect_files_simple(); } __END__ @@ -296,7 +270,7 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER diff --git a/src/perl/bin/publish_fluidigm_genotypes.pl b/src/perl/bin/publish_fluidigm_genotypes.pl index 42376ca28..bdc7fd737 100755 --- a/src/perl/bin/publish_fluidigm_genotypes.pl +++ b/src/perl/bin/publish_fluidigm_genotypes.pl @@ -7,33 +7,27 @@ package main; use Cwd qw(abs_path); use DateTime; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::MLWarehouse; use WTSI::NPG::Genotyping::Fluidigm::ExportFile; use WTSI::NPG::Genotyping::Fluidigm::Publisher; use WTSI::NPG::Genotyping::Fluidigm::ResultSet; -use WTSI::NPG::Utilities qw(collect_files - collect_dirs - modified_between); - -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +use WTSI::NPG::Utilities qw(user_session_log); +use WTSI::NPG::Utilities::Collector; our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; our $DEFAULT_DAYS = 7; our $DEFAULT_REFERENCE_PATH = '/seq/fluidigm/multiplexes'; +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'publish_fluidigm_genotypes'); + run() unless caller(); sub run { my $config; @@ -73,23 +67,13 @@ sub run { $days_ago ||= 0; $reference_path ||= $DEFAULT_REFERENCE_PATH;; - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $whdb = WTSI::NPG::Database::MLWarehouse->new (name => 'multi_lims_warehouse', @@ -106,21 +90,22 @@ sub run { else { $end = $now; } - my $begin = DateTime->from_epoch (epoch => $end->epoch)->subtract(days => $days); - my $dir_test = modified_between($begin->epoch, $end->epoch); - my $dir_regex = qr{^\d{10}$}msxi; my $source_dir = abs_path($source); - my $relative_depth = 2; - $log->info("Publishing from '$source_dir' to '$publish_dest' Fluidigm ", "results finished between ", $begin->iso8601, " and ", $end->iso8601); $log->info("Using reference path '$reference_path'"); - my @dirs = collect_dirs($source_dir, $dir_test, $relative_depth, $dir_regex); + my $collector = WTSI::NPG::Utilities::Collector->new( + root => $source_dir, + depth => 2, + regex => qr{^\d{10}$}msxi, + ); + my @dirs = $collector->collect_dirs_modified_between($begin->epoch, + $end->epoch); my $total = scalar @dirs; my $num_published = 0; @@ -136,8 +121,7 @@ sub run { resultset => $resultset, reference_path => $reference_path, warehouse_db => $whdb, - logger => $log); - $publisher->irods->logger($log); + ); $publisher->publish($publish_dest); $num_published++; @@ -145,7 +129,7 @@ sub run { $log->error("Failed to publish '$dir': ", $_); }; - $log->debug("Published '$dir': $num_published of $total"); + $log->info("Published '$dir': $num_published of $total"); } } @@ -193,11 +177,11 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2013, 2014, 2015 Genome Research Limited. All Rights +Copyright (C) 2013, 2014, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify diff --git a/src/perl/bin/publish_infinium_analysis.pl b/src/perl/bin/publish_infinium_analysis.pl index d1af92895..0b772c0a3 100755 --- a/src/perl/bin/publish_infinium_analysis.pl +++ b/src/perl/bin/publish_infinium_analysis.pl @@ -9,10 +9,10 @@ package main; use Cwd qw(abs_path); use DateTime; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Database::Pipeline; use WTSI::NPG::Genotyping::Infinium::AnalysisPublisher; use WTSI::NPG::Utilities qw(user_session_log); @@ -21,22 +21,6 @@ package main; chomp($uid); my $session_log = user_session_log($uid, 'publish_infinium_analysis'); -my $embedded_conf = " - log4perl.logger.npg.irods.publish = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; @@ -100,23 +84,13 @@ sub run { $config ||= $DEFAULT_INI; - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $db = $dbfile; $db ||= 'configured database'; @@ -140,8 +114,7 @@ sub run { my @publisher_args = (analysis_directory => $source, pipe_db => $pipedb, publication_time => $now, - run_name => $run_name, - logger => $log); + run_name => $run_name); if ($archive_root) { push @publisher_args, (sample_archive => $archive_root); } @@ -203,11 +176,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2013 Genome Research Limited. All Rights Reserved. +Copyright (c) 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/publish_infinium_genotypes.pl b/src/perl/bin/publish_infinium_genotypes.pl index 385d42ded..e947b91b5 100755 --- a/src/perl/bin/publish_infinium_genotypes.pl +++ b/src/perl/bin/publish_infinium_genotypes.pl @@ -11,24 +11,20 @@ package main; use File::Basename; use Getopt::Long; use List::AllUtils qw(uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping::Database::Infinium; use WTSI::NPG::Genotyping::Infinium::Publisher; use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw(user_session_log); -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'publish_infinium_genotypes'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; @@ -90,23 +86,13 @@ sub run { $days ||= $DEFAULT_DAYS; $days_ago ||= 0; - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $now = DateTime->now; my $end; @@ -123,15 +109,13 @@ sub run { my $ifdb = WTSI::NPG::Genotyping::Database::Infinium->new (name => 'infinium', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', - inifile => $config, - logger => $log)->connect(RaiseError => 1, - mysql_enable_utf8 => 1, - mysql_auto_reconnect => 1); + inifile => $config)->connect(RaiseError => 1, + mysql_enable_utf8 => 1, + mysql_auto_reconnect => 1); my @files; if ($stdio) { @@ -141,7 +125,8 @@ sub run { } } else { - my $irods = WTSI::NPG::iRODS->new(logger => $log); + my $irods = WTSI::NPG::iRODS->new(); + $log->info("Finding files to publish in Infinium LIMS"); @files = find_files_to_publish($ifdb, $begin, $end, $project, $irods, $publish_dest, $force, $log); } @@ -154,23 +139,23 @@ sub run { } elsif ($project) { $log->info("Publishing to '$publish_dest' Infinium results in project ", - "'$project'"); + "'$project', $total files in total"); } else { $log->info("Publishing to '$publish_dest' Infinium results ", - "scanned between ", $begin->iso8601, " and ", $end->iso8601); - - $log->debug("Publishing $total files"); + "scanned between ", $begin->iso8601, " and ", $end->iso8601, + ", $total files in total"); } my $publisher = WTSI::NPG::Genotyping::Infinium::Publisher->new (publication_time => $now, data_files => \@files, infinium_db => $ifdb, - ss_warehouse_db => $ssdb, - logger => $log); + ss_warehouse_db => $ssdb); $publisher->publish($publish_dest); + $log->info("Finished publishing $total files"); + return 0; } @@ -239,7 +224,7 @@ sub find_files_to_publish { } elsif ($num_matches == 1) { push @data_objects, @matches; - $log->info("Found a match for '$file' with MD5 '$md5'"); + $log->debug("Found a match for '$file' with MD5 '$md5'"); } else { push @data_objects, $matches[0]; @@ -254,8 +239,8 @@ sub find_files_to_publish { my $num_files = scalar @candidate_files; my $num_data_objects = scalar @data_objects; - $log->info("Beadchip '$chip' section '$section' data objects published ", - "previously: $num_data_objects/$num_files"); + $log->debug("Beadchip '$chip' section '$section' data objects ", + "published previously: $num_data_objects/$num_files"); if ($num_data_objects < $num_files || $force) { push @to_publish, @candidate_files; @@ -318,11 +303,12 @@ =head1 DESCRIPTION =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2012-2013 Genome Research Limited. All Rights Reserved. +Copyright (c) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/publish_sequenom_genotypes.pl b/src/perl/bin/publish_sequenom_genotypes.pl index b1bd91d29..2c668a74d 100755 --- a/src/perl/bin/publish_sequenom_genotypes.pl +++ b/src/perl/bin/publish_sequenom_genotypes.pl @@ -9,23 +9,19 @@ package main; use DateTime; use Getopt::Long; use List::AllUtils qw(uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping::Database::Sequenom; use WTSI::NPG::Genotyping::Database::SNP; use WTSI::NPG::Genotyping::Sequenom::Publisher; +use WTSI::NPG::Utilities qw(user_session_log); -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'publish_sequenom_genotypes'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; @@ -75,23 +71,13 @@ sub run { $days ||= $DEFAULT_DAYS; $days_ago ||= 0; - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $now = DateTime->now; my $end; @@ -108,13 +94,11 @@ sub run { my $sqdb = WTSI::NPG::Genotyping::Database::Sequenom->new (name => 'mspec2', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); my $snpdb = WTSI::NPG::Genotyping::Database::SNP->new (name => 'snp', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', @@ -130,7 +114,7 @@ sub run { } } else { - my $irods = WTSI::NPG::iRODS->new(logger => $log); + my $irods = WTSI::NPG::iRODS->new(); @plate_names = find_plates_to_publish($sqdb, $begin, $end, $irods, $publish_dest, $force, $log); } @@ -158,8 +142,7 @@ sub run { plate_name => $plate_name, sequenom_db => $sqdb, snp_db => $snpdb, - ss_warehouse_db => $ssdb, - logger => $log); + ss_warehouse_db => $ssdb); $publisher->publish($publish_dest); $published++; diff --git a/src/perl/bin/publish_snpset.pl b/src/perl/bin/publish_snpset.pl index e77d60c3f..618bfd496 100755 --- a/src/perl/bin/publish_snpset.pl +++ b/src/perl/bin/publish_snpset.pl @@ -7,13 +7,19 @@ package main; use Cwd qw(abs_path); use DateTime; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Moose; use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::iRODS; use WTSI::NPG::Genotyping::SNPSetPublisher; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'publish_snpset'); + our $VERSION = ''; @@ -73,23 +79,13 @@ sub run { -exitval => 2); } - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $irods = WTSI::NPG::iRODS->new; $irods->logger($log); @@ -103,8 +99,7 @@ sub run { publication_time => DateTime->now, reference_names => \@references, snpset_name => $snpset, - snpset_platform => $platform, - logger => $log); + snpset_platform => $platform); my $rods_path = $publisher->publish($publish_dest); @@ -148,11 +143,11 @@ =head1 DESCRIPTION =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2014 Genome Research Limited. All Rights Reserved. +Copyright (c) 2014, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/query_project_samples.pl b/src/perl/bin/query_project_samples.pl index 71cb072e1..1b7d97d65 100755 --- a/src/perl/bin/query_project_samples.pl +++ b/src/perl/bin/query_project_samples.pl @@ -7,10 +7,10 @@ package main; use warnings; use strict; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping::Database::Infinium; use WTSI::NPG::Genotyping::Infinium::SampleQuery; @@ -28,30 +28,12 @@ package main; chomp($uid); my $session_log = user_session_log($uid, 'query_project_samples'); -my $embedded_conf = " - log4perl.logger.npg.irods.publish = WARN, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - -my $log; - run() unless caller(); sub run { my $config; - my $debug_level; + my $debug; my $header; my $limit; my $outpath; @@ -63,7 +45,7 @@ sub run { GetOptions( 'config=s' => \$config, - 'debug' => \$debug_level, + 'debug' => \$debug, 'header' => \$header, 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, @@ -82,31 +64,22 @@ sub run { if (defined($limit) && $limit < 0) { pod2usage(-msg => "--limit argument must be >= 0\n", -exitval => 2); } - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - if ($debug_level) { - $log->level($DEBUG); - } elsif ($verbose) { - $log->level($INFO); - } elsif ($quiet) { - $log->level($ERROR); - } - } + + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $ifdb = WTSI::NPG::Genotyping::Database::Infinium->new (name => 'infinium', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', - inifile => $config, - logger => $log)->connect(RaiseError => 1, + inifile => $config)->connect(RaiseError => 1, mysql_enable_utf8 => 1, mysql_auto_reconnect => 1); @@ -115,8 +88,7 @@ sub run { my $sample_query = WTSI::NPG::Genotyping::Infinium::SampleQuery->new (infinium_db => $ifdb, - sequencescape_db => $ssdb, - logger => $log); + sequencescape_db => $ssdb); $sample_query->run($project, $root, $outpath, $header, $limit); } @@ -182,7 +154,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2015 Genome Research Limited. All Rights Reserved. +Copyright (c) 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/ready_external.pl b/src/perl/bin/ready_external.pl index 1abfc8abd..02b2fced7 100755 --- a/src/perl/bin/ready_external.pl +++ b/src/perl/bin/ready_external.pl @@ -9,26 +9,33 @@ package main; use File::Basename; use Getopt::Long; use List::AllUtils qw(any); -use Log::Log4perl qw(:easy); +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::DNAP::Utilities::IO qw(maybe_stdin maybe_stdout); use WTSI::NPG::Utilities qw(common_stem); use WTSI::NPG::Genotyping::Database::Pipeline; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'ready_external'); +my $log; our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; our $ID_REGEX = qr{^[\w.-]{4,}$}msx; -Log::Log4perl->easy_init($ERROR); - run() unless caller(); sub run { my $chip_design; my $config; my $dbfile; + my $debug; my $input; + my $log4perl_config; my $namespace; my $run_name; my $supplier_name; @@ -36,8 +43,10 @@ sub run { GetOptions('chip-design=s' => \$chip_design, 'config=s' => \$config, + 'debug' => \$debug, 'dbfile=s' => \$dbfile, 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, + 'logconf=s' => \$log4perl_config, 'input=s' => \$input, 'run=s' => \$run_name, 'namespace=s' => \$namespace, @@ -64,11 +73,17 @@ sub run { unless ($namespace =~ $ID_REGEX) { pod2usage(-msg => "Invalid namespace '$namespace'\n", -exitval => 2); } - if ($verbose) { - my $db = $dbfile; - $db ||= 'configured database'; - print STDERR "Updating $db using config from $config\n"; - } + + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + $log = Log::Log4perl->get_logger('main'); + + my $db = $dbfile || 'configured database'; + $log->info("Updating '", $db, "' using config from '", $config, "'"); my @initargs = (name => 'pipeline', inifile => $config); @@ -84,8 +99,9 @@ sub run { my @valid_designs = map { $_->name } $pipedb->snpset->all; unless (any { $chip_design eq $_ } @valid_designs ) { - die "Invalid chip design '$chip_design'. Valid designs are: [" . - join(", ", @valid_designs) . "]\n"; + $log->logcroak("Invalid chip design '", $chip_design, + "'. Valid designs are: [", + join(", ", @valid_designs), "]"); } my $snpset = $pipedb->snpset->find({name => $chip_design}); @@ -99,7 +115,7 @@ sub run { my $in = maybe_stdin($input); my @ex_samples = parse_manifest($in); - close($in) or warn "Failed to close '$input'\n"; + close($in) or $log->logwarn("Failed to close '$input'"); $pipedb->in_transaction (sub { @@ -112,7 +128,9 @@ sub run { my $dataset = $run->add_to_datasets({datasupplier => $supplier, snpset => $snpset}); - print_pre_report($supplier, $namespace, $snpset) if $verbose; + $log->info("Adding dataset: From supplier '", $supplier->name, + "', into namespace '", $namespace, "', using snpset '", + $snpset->name, "'"); SAMPLE: foreach my $ex_sample (@ex_samples) { my $grn_path = $ex_sample->{idat_grn_path}; @@ -153,8 +171,7 @@ sub run { $sample->include_from_state; } }); - - print_post_report(\@ex_samples) if $verbose; + $log->info("Added dataset of ", scalar(@ex_samples), " samples"); return; } @@ -180,8 +197,8 @@ sub parse_manifest { my $num_fields = scalar @fields; unless ($num_fields == 6) { - die "Parse error on line $i: expected 6 fields, but found $num_fields:\n" . - "$line\n"; + $log->logcroak("Parse error on line ", $i, ": expected 6 fields, ", + "but found ", $num_fields, ": ", $line); } my $sample = {sample => $fields[0], @@ -192,7 +209,8 @@ sub parse_manifest { idat_red_path => $fields[5]}; unless ($sample->{gtc_path}) { - die "Parse error on line $i: no GTC path was provided:\n$line\n"; + $log->logcroak("Parse error on line ", $i, ": no GTC path was ", + "provided: '", $line, "'"); } unless ($sample->{beadchip}) { @@ -203,17 +221,20 @@ sub parse_manifest { $sample->{beadchip} = $beadchip_guess; } else { - die "Parse error on line $i: no beadchip was supplied and unable " . - "to infer from GTC file name:\n$line\n"; + $log->logcroak("Parse error on line ", $i, ": no beadchip was ", + "supplied and unable to infer from GTC ", + "file name: '", $line, "'"); } } if ($sample->{idat_grn_path} or $sample->{idat_red_path}) { unless ($sample->{idat_grn_path}) { - die "Parse error on line $i: no green IDAT path was provided:\n$line\n"; + $log->logcroak("Parse error on line ", $i, ": no green IDAT path ", + "was provided: '", $line, "'"); } unless ($sample->{idat_red_path}) { - die "Parse error on line $i: no red IDAT path was provided:\n$line\n"; + $log->logcroak("Parse error on line ", $i, ": no red IDAT path ", + "was provided: '", $line, "'"); } } @@ -227,36 +248,15 @@ sub validate_snpset { my ($run, $snpset) = @_; unless ($run->validate_snpset($snpset)) { - die "Cannot add this project to '", $run->name, "'; design mismatch: '", - $snpset->name, "' cannot be added to existing designs [", - join(", ", map { $_->snpset->name } $run->datasets), "]\n"; + $log->logcroak("Cannot add this project to '", $run->name, + "'; design mismatch: '", $snpset->name, + "' cannot be added to existing designs [", + join(", ", map { $_->snpset->name } $run->datasets), "]"); } - return $snpset; } -sub print_pre_report { - my ($supplier, $namespace, $snpset) = @_; - print STDERR "Adding dataset:\n"; - print STDERR " From '", $supplier->name, "'\n"; - print STDERR " Into namespace '$namespace'\n"; - print STDERR " Using '", $snpset->name, "'\n"; - - return; -} - -sub print_post_report { - my ($samples) = @_; - - my $num_samples = scalar @$samples; - - print STDERR "Added dataset:\n"; - print STDERR " $num_samples samples\n"; - - return; -} - __END__ @@ -279,6 +279,7 @@ =head1 SYNOPSIS value given in the configuration .ini file. --help Display help. --input The sample manifest file. Optional, defaults to STDIN. + --logconf A log4perl configuration file. Optional. --namespace The namespace for the imported sample names. --run The pipeline run name in the database which will be created or added to. @@ -327,11 +328,11 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2012, 2015 Genome Research Limited. All Rights Reserved. +Copyright (C) 2012, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/ready_infinium.pl b/src/perl/bin/ready_infinium.pl index a91a7dd0d..408d57ff2 100755 --- a/src/perl/bin/ready_infinium.pl +++ b/src/perl/bin/ready_infinium.pl @@ -9,10 +9,10 @@ package main; use Config::IniFiles; use Getopt::Long; use List::AllUtils qw(any uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping; use WTSI::NPG::Genotyping::Database::Pipeline; @@ -52,23 +52,6 @@ package main; my $uid = `whoami`; chomp($uid); my $session_log = user_session_log($uid, 'ready_infinium'); - -my $embedded_conf = " - log4perl.logger.npg.irods.publish = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - my $log; run() unless caller(); @@ -133,21 +116,13 @@ sub run { pod2usage(-msg => "Invalid namespace '$namespace'\n", -exitval => 2); } - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + $log = Log::Log4perl->get_logger('main'); unless (-e $dbfile) { $log->logcroak("SQLite database file '$dbfile' does not exist"); @@ -189,15 +164,13 @@ sub run { my $ifdb = WTSI::NPG::Genotyping::Database::Infinium->new (name => 'infinium', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', - inifile => $config, - logger => $log)->connect(RaiseError => 1, - mysql_enable_utf8 => 1, - mysql_auto_reconnect => 1); + inifile => $config)->connect(RaiseError => 1, + mysql_enable_utf8 => 1, + mysql_auto_reconnect => 1); my @chip_designs = @{$ifdb->find_project_chip_design($project_title)}; unless (@chip_designs) { @@ -426,8 +399,7 @@ sub run { my $snpdb = WTSI::NPG::Genotyping::Database::SNP->new (name => 'snp', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); $inserted = insert_sequenom_calls($pipedb, $snpdb, \@samples, $qc_plex); @@ -436,7 +408,7 @@ sub run { my $irods = WTSI::NPG::iRODS->new; $inserted = insert_fluidigm_calls($pipedb, $irods, \@samples, $qc_plex, - $reference_path, $log); + $reference_path); } else { $log->logcroak("Unexpected QC platform '$qc_platform'"); } @@ -466,7 +438,7 @@ sub validate_snpset { sub insert_fluidigm_calls { # returns the number of samples for which calls were inserted - my ($pipedb, $irods, $samples, $qc_plex, $reference_path, $log) = @_; + my ($pipedb, $irods, $samples, $qc_plex, $reference_path) = @_; my $method = $pipedb->method->find({name => 'Fluidigm'}); $method or $log->logcroak("The genotyping method 'Fluidigm' is ", @@ -483,8 +455,7 @@ sub insert_fluidigm_calls { data_path => $DEFAULT_DATA_PATH, reference_path => $reference_path, reference_name => $reference_name, - snpset_name => $snpset->name, - logger => $log); + snpset_name => $snpset->name); my ($resultsets, $vcf_meta) = $subscriber->get_assay_resultsets_and_vcf_metadata(\@sample_ids); @@ -668,11 +639,11 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2012, 2013, 2014, 2015 Genome Research Limited. All +Copyright (C) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify diff --git a/src/perl/bin/ready_pipe.pl b/src/perl/bin/ready_pipe.pl index 66296357e..e11cc95b9 100755 --- a/src/perl/bin/ready_pipe.pl +++ b/src/perl/bin/ready_pipe.pl @@ -7,30 +7,46 @@ package main; use warnings; use strict; use Getopt::Long; -use Log::Log4perl qw(:easy); +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Database::Pipeline; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'ready_pipe'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; -Log::Log4perl->easy_init($ERROR); - run() unless caller(); sub run { my $config; my $dbfile; + my $debug; + my $log4perl_config; my $overwrite; my $verbose; GetOptions('config=s' => \$config, 'dbfile=s' => \$dbfile, + 'debug' => \$debug, 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, + 'logconf=s' => \$log4perl_config, 'overwrite' => \$overwrite, 'verbose' => \$verbose); + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); + $config ||= $DEFAULT_INI; my @initargs = (name => 'pipeline', inifile => $config, @@ -74,6 +90,7 @@ =head1 SYNOPSIS --dbfile The SQLite database file. If not supplied, defaults to the value given in the configuration .ini file. --help Display help. + --logconf A log4perl configuration file. Optional. --overwrite Overwrite any existing file, otherwise data dictionaries will be updated with new entries only. --verbose Print messages while processing. Optional. @@ -89,11 +106,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2012 Genome Research Limited. All Rights Reserved. +Copyright (c) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/ready_qc_calls.pl b/src/perl/bin/ready_qc_calls.pl index d05b46555..0a7d8e692 100755 --- a/src/perl/bin/ready_qc_calls.pl +++ b/src/perl/bin/ready_qc_calls.pl @@ -11,11 +11,11 @@ package main; use Getopt::Long; use JSON; use List::AllUtils qw(uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Database::Pipeline; use WTSI::NPG::Genotyping::VCF::PlexResultFinder; use WTSI::NPG::Utilities qw(user_session_log); @@ -45,24 +45,6 @@ package main; chomp($uid); my $session_log = user_session_log($uid, 'ready_qc_calls'); -my $embedded_conf = " - log4perl.logger.npg.ready_qc_calls = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - -my $log; - run() unless caller(); sub run { @@ -90,21 +72,13 @@ sub run { $inifile ||= $DEFAULT_INI; - ### set up logging ### - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.vcf.qc'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.vcf.qc'); - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); ### validate command-line arguments ### my @config = split(/,/msx, $config); @@ -156,8 +130,7 @@ sub run { try { my $finder = WTSI::NPG::Genotyping::VCF::PlexResultFinder->new( sample_ids => \@sample_ids, - subscriber_config => \@config, - logger => $log, + subscriber_config => \@config ); my $plex_manifests = $finder->write_manifests($manifest_dir); $log->info("Wrote plex manifests: ", join(', ', @{$plex_manifests})); diff --git a/src/perl/bin/ready_samples.pl b/src/perl/bin/ready_samples.pl index 792ff8573..1e2876ba9 100755 --- a/src/perl/bin/ready_samples.pl +++ b/src/perl/bin/ready_samples.pl @@ -18,7 +18,7 @@ package main; our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; -Log::Log4perl->easy_init($ERROR); +Log::Log4perl->easy_init($WARN); run() unless caller(); @@ -57,6 +57,8 @@ sub run { -exitval => 2); } + my $log = Log::Log4perl->get_logger('main'); + my @initargs = (name => 'pipeline', inifile => $config); if ($dbfile) { @@ -76,7 +78,8 @@ sub run { foreach my $sample ($pipedb->sample->all) { my $state = $pipedb->state->find({name => $select}); unless ($state) { - die "Failed to select sample state '$select': invalid state\n"; + $log->logcroak("Failed to select sample state '", $select, + "': invalid state"); } if (any { $state->name eq $_->name } $sample->states) { @@ -93,14 +96,15 @@ sub run { my $sample = $pipedb->sample->find({name => $name}); unless ($sample) { - warn "Failed to find $name\n"; + $log->logwarn("Failed to find name '", $name, "'"); next; } if ($remove) { my $state = $pipedb->state->find({name => $remove}); unless ($state) { - die "Failed to remove sample state '$remove': invalid state\n"; + $log->logcroak("Failed to remove sample state '", $remove, + "': invalid state"); } if (any { $state->name eq $_->name } $sample->states) { @@ -111,7 +115,8 @@ sub run { if ($add) { my $state = $pipedb->state->find({name => $add}); unless ($state) { - die "Failed to add sample state '$add': invalid state\n"; + $log->logcroak("Failed to add sample state '", $add, + "': invalid state"); } unless (any { $state->name eq $_->name } $sample->states) { @@ -209,11 +214,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2012 Genome Research Limited. All Rights Reserved. +Copyright (c) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/ready_workflow.pl b/src/perl/bin/ready_workflow.pl index 11bd5353e..23a418e98 100755 --- a/src/perl/bin/ready_workflow.pl +++ b/src/perl/bin/ready_workflow.pl @@ -15,13 +15,13 @@ package main; use FindBin qw($Bin); use Getopt::Long; use JSON; -use List::AllUtils qw(uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use List::AllUtils qw(none uniq); +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; use YAML qw /DumpFile/; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Database::Pipeline; use WTSI::NPG::Genotyping::VCF::PlexResultFinder; use WTSI::NPG::Utilities qw(user_session_log); @@ -31,8 +31,11 @@ package main; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; our $PERCOLATE_LOG_NAME = 'percolate.log'; our $GENOTYPING_DB_NAME = 'genotyping.db'; + +our $MODULE_GENCALL = 'Genotyping::Workflows::GenotypeGencall'; our $MODULE_ILLUMINUS = 'Genotyping::Workflows::GenotypeIlluminus'; our $MODULE_ZCALL = 'Genotyping::Workflows::GenotypeZCall'; +our $GENCALL = 'gencall'; our $ILLUMINUS = 'illuminus'; our $ZCALL = 'zcall'; @@ -49,23 +52,6 @@ package main; my $uid = `whoami`; chomp($uid); my $session_log = user_session_log($uid, 'ready_workflow'); - -my $embedded_conf = " - log4perl.logger.npg.genotyping.ready_workflow = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - my $log; run() unless caller(); @@ -119,57 +105,54 @@ sub run { 'ztotal=i' => \$ztotal, ); - ### set up logging ### - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.genotyping.ready_workflow'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.genotyping.ready_workflow'); - if ($verbose) { - $log->level($INFO); + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + $log = Log::Log4perl->get_logger('main'); + + ### process command-line arguments ### + + # required arguments for all workflows + my %required_args = ( + workdir => $workdir, + run => $run, + workflow => $workflow, + dbfile => $dbfile, + manifest => $manifest + ); + my @required_args = sort keys %required_args; + my @workflows = ($GENCALL, $ILLUMINUS, $ZCALL); + foreach my $name (@required_args) { + if (! defined $required_args{$name}) { + $log->logcroak("Argument --$name is required"); } - elsif ($debug) { - $log->level($DEBUG); + if ($name eq 'workflow') { + if (none { $_ eq $required_args{$name} } @workflows) { + $log->logcroak('--$name argument must be one of: ', + join(', ', @workflows)); + } + } elsif ($name eq 'dbfile' || $name eq 'manifest') { + if (! -e $required_args{$name}) { + $log->logcroak("Path argument to --$name does not exist: '", + $required_args{$name}, "'"); + } } } + $workdir = abs_path($workdir); + $log->info("Working directory absolute path is '", $workdir, "'"); - ### process command-line arguments ### + # optional arguments for all workflows + $memory ||= $DEFAULT_MEMORY; + $host ||= $DEFAULT_HOST; $inifile ||= $DEFAULT_INI; if (! -e $inifile) { $log->logcroak("--inifile argument '", $inifile, "' does not exist"); } - if ($workdir) { - $workdir = abs_path($workdir); - $log->info("Working directory absolute path is '", $workdir, "'"); - } else { - $log->logcroak("--workdir argument is required"); - } - if (!$run) { - $log->logcroak("--run argument is required"); - } - if (!$dbfile) { - $log->logcroak("--dbfile argument is required"); - } elsif (! -e $dbfile) { - $log->logcroak("--dbfile argument '", $dbfile, "' does not exist"); - } - if (!$manifest) { - $log->logcroak("--manifest argument is required"); - } elsif (! -e $manifest) { - $log->logcroak("--manifest argument '", $manifest, - "' does not exist"); - } - if (defined($no_filter)) { $no_filter = 'true'; } # Boolean value for Ruby - else { $no_filter = 'false'; } - if (!$workflow) { - $log->logcroak("--workflow argument is required"); - } elsif (!($workflow eq $ILLUMINUS || $workflow eq $ZCALL)) { - $log->logcroak("Invalid workflow argument; must be '", - $ILLUMINUS, "' or '", $ZCALL, "'"); - } - if (defined($egt) && !(-e $egt)) { - $log->logcroak("--egt argument '", $egt, "' does not exist"); + if (! defined $config_out) { + $config_out = workflow_config_path($workdir, $workflow, $local); } if (scalar @plex_config == 0) { # get defaults from perl/etc directory my $etc_dir = catfile($Bin, "..", "etc"); @@ -183,17 +166,49 @@ sub run { "' does not exist"); } } - $host ||= $DEFAULT_HOST; - # illuminus paralellizes by SNP, other callers by sample - if ($workflow eq 'illuminus') { $chunk_size ||= $DEFAULT_CHUNK_SIZE_SNP; } - else { $chunk_size ||= $DEFAULT_CHUNK_SIZE_SAMPLE; } - $memory ||= $DEFAULT_MEMORY; - - # ensure $zstart, $ztotal are initialized before comparison - $zstart ||= $DEFAULT_ZSTART; - $ztotal ||= $DEFAULT_ZTOTAL; - if ($zstart <=0) { $log->logcroak("zstart must be > 0"); } - if ($ztotal <=0) { $log->logcroak("ztotal must be > 0"); } + + # arguments for illuminus and zcall only + if (defined $no_filter) { + if ($workflow eq $GENCALL) { + $log->logcroak('--nofilter option is not compatible with the ', + $GENCALL, 'workflow'); + } + $no_filter = 'true'; # Boolean value for Ruby + } else { + $no_filter = 'false'; + } + if (defined $chunk_size) { + if ($workflow eq $GENCALL) { + $log->logcroak('--chunk_size option is not compatible with the ', + $GENCALL, 'workflow'); + } + } elsif ($workflow eq $ILLUMINUS) { + $chunk_size = $DEFAULT_CHUNK_SIZE_SNP; + } else { + $chunk_size = $DEFAULT_CHUNK_SIZE_SAMPLE; + } + + # arguments for zcall only + my $msg = " argument is only compatible with the $ZCALL workflow;". + " given workflow is '$workflow'"; + if ($workflow eq $ZCALL) { + # check EGT & assign zstart/ztotal defaults + if (! defined $egt) { + $log->logcroak("--egt argument is required for $ZCALL workflow"); + } elsif (! -e $egt) { + $log->logcroak("--egt argument '$egt' does not exist"); + } + $zstart ||= $DEFAULT_ZSTART; + $ztotal ||= $DEFAULT_ZTOTAL; + if ($zstart <=0) { $log->logcroak("zstart must be > 0"); } + if ($ztotal <=0) { $log->logcroak("ztotal must be > 0"); } + } elsif (defined $egt) { + $log->logcroak('--egt', $msg); + } elsif (defined $zstart) { + $log->logcroak('--zstart', $msg); + } elsif (defined $ztotal) { + $log->logcroak('--ztotal', $msg); + } ### create and populate the working directory ### make_working_directory($workdir, $local); @@ -212,34 +227,32 @@ sub run { } } ### generate the workflow config and write as YML ### - unless (defined($config_out)) { - $config_out = workflow_config_path($workdir, $workflow, $local); - } my %workflow_args = ( 'manifest' => $manifest, - 'chunk_size' => $chunk_size, 'memory' => $memory, - 'nofilter' => $no_filter, 'queue' => $queue, 'vcf' => $vcf, 'plex_manifest' => $plex_manifests, ); + my $workflow_module; - if ($workflow eq $ILLUMINUS) { + if ($workflow eq $GENCALL) { + $workflow_module = $MODULE_GENCALL; + } elsif ($workflow eq $ILLUMINUS) { + $workflow_args{'chunk_size'} = $chunk_size; + $workflow_args{'nofilter'} = $no_filter; $workflow_args{'gender_method'} = 'Supplied'; $workflow_module = $MODULE_ILLUMINUS; } elsif ($workflow eq $ZCALL) { $workflow_module = $MODULE_ZCALL; - if (!($egt && $zstart && $ztotal)) { - $log->logcroak("Must specify EGT, zstart, and ztotal for ", - "zcall workflow"); - } + $workflow_args{'chunk_size'} = $chunk_size; + $workflow_args{'nofilter'} = $no_filter; $workflow_args{'egt'} = $egt; $workflow_args{'zstart'} = $zstart; $workflow_args{'ztotal'} = $ztotal; } else { $log->logcroak("Invalid workflow argument '", $workflow, - "'; must be one of $ILLUMINUS, $ZCALL"); + "'; must be one of $GENCALL, $ILLUMINUS, $ZCALL"); } my @args = ($dbfile, $run, $workdir, \%workflow_args); my %params = ( @@ -342,26 +355,38 @@ sub write_plex_results { on_connect_do => 'PRAGMA foreign_keys = ON'); my @samples = $pipedb->sample->all; my @sample_ids = uniq map { $_->sanger_sample_id } @samples; + if (scalar @sample_ids == 0) { + $log->logwarn("No sample IDs found in pipeline SQLite DB"); + } try { my $finder = WTSI::NPG::Genotyping::VCF::PlexResultFinder->new( sample_ids => \@sample_ids, - logger => $log, subscriber_config => $plex_config, ); my $manifest_dir = catfile($workdir, $PLEX_MANIFEST_SUBDIRECTORY); $plex_manifests = $finder->write_manifests($manifest_dir); - $log->info("Wrote plex manifests: ", - join(', ', @{$plex_manifests})); + $log->info("Wrote plex manifests: (", + join(', ', @{$plex_manifests}), ")"); my $vcf_dir = catfile($workdir, $VCF_SUBDIRECTORY); $vcf = $finder->write_vcf($vcf_dir); - $log->info("Wrote VCF: ", join(', ', @{$vcf})); + $log->info("Wrote VCF: (", join(', ', @{$vcf}), ")"); } catch { $log->logwarn("Unexpected error finding QC plex data in ", - "iRODS; VCF and plex manifests not written; ", - "run with --verbose for details"); + "iRODS; run with --verbose for details"); $log->info("Caught PlexResultFinder error: $_"); } } + if (scalar @{$plex_manifests} != 0 && scalar @{$vcf} == 0) { + $log->info('Found plex manifests: (', + join(', ', @{$plex_manifests}), ') but no VCF data; ', + 'omitting plex manifests from pipeline YML'); + $plex_manifests = []; + } elsif (scalar @{$plex_manifests} == 0 && scalar @{$vcf} != 0) { + $log->info('Found VCF: (', + join(', ', @{$vcf}), ') but no plex manifests; ', + 'omitting VCF from pipeline YML'); + $vcf = []; + } return ($plex_manifests, $vcf); } @@ -515,7 +540,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2016 Genome Research Limited. All Rights Reserved. +Copyright (c) 2016, 2017 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/run_qc.pl b/src/perl/bin/run_qc.pl index 36b2ed852..459447b28 100755 --- a/src/perl/bin/run_qc.pl +++ b/src/perl/bin/run_qc.pl @@ -11,13 +11,12 @@ use Cwd qw(getcwd abs_path); use File::Basename; use FindBin qw($Bin); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Version qw(write_version_log); -use WTSI::NPG::Genotyping::QC::Collation qw(collate readMetricThresholds); -use WTSI::NPG::Genotyping::QC::Identity; +use WTSI::NPG::Genotyping::QC::Collator; use WTSI::NPG::Genotyping::QC::PlinkIO qw(checkPlinkBinaryInputs); use WTSI::NPG::Genotyping::QC::QCPlotShared qw(defaultConfigDir defaultJsonConfig defaultTexIntroPath readQCFileNames); use WTSI::NPG::Genotyping::QC::Reports qw(createReports); @@ -26,28 +25,12 @@ our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; our $CR_STATS_EXECUTABLE = "snp_af_sample_cr_bed"; +our $ID_EXECUTABLE= "check_identity_bayesian.pl"; our $MAF_HET_EXECUTABLE = "het_by_maf.py"; - my $uid = `whoami`; chomp($uid); my $session_log = user_session_log($uid, 'run_qc'); -my $embedded_conf = " - log4perl.logger.npg.ready_qc_calls = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - my $log; run() unless caller(); @@ -83,20 +66,13 @@ sub run { ); - ### set up logging - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.genotyping.qc.identity'); - } else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.genotyping.qc.identity'); - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + $log = Log::Log4perl->get_logger('main'); ### process options and validate inputs if (defined($plinkRaw)) { @@ -113,7 +89,7 @@ sub run { $mafHet ||= 0; if (not -e $outDir) { mkdir($outDir); } elsif (not -w $outDir) { - die "Cannot write to output directory $outDir\n"; + $log->logcroak("Cannot write to output directory $outDir"); } $outDir = abs_path($outDir); $title ||= getDefaultTitle($outDir); @@ -131,6 +107,13 @@ sub run { my @vcf; my @plexManifests; if ($vcf && $plexManifests) { + if (!$sampleJson) { + $log->logcroak("--vcf and --plex-manifests arguments must be ", + "accompanied by a --sample-json argument"); + } elsif (! -e $sampleJson) { + $log->logcroak("--sample-json path '", $sampleJson, + "' does not exist"); + } @vcf = split(/,/msx, $vcf); foreach my $vcf_path (@vcf) { unless (-e $vcf_path) { @@ -156,6 +139,7 @@ sub run { $log->logcroak("--plex-manifests argument must be accompanied by a", " --vcf argument"); } + ### run QC run_qc($plinkPrefix, $simPath, $dbPath, $iniPath, $configPath, $runName, $outDir, $title, $texIntroPath, $mafHet, $filterConfig, @@ -262,7 +246,8 @@ sub processPlinkPrefix { } my $ok = checkPlinkBinaryInputs($plinkPrefix); unless ($ok) { - die "Cannot read plink binary inputs for prefix $plinkPrefix\n"; + $log->logcroak("Cannot read plink binary inputs for prefix '", + $plinkPrefix, "'"); } return $plinkPrefix; } @@ -271,56 +256,47 @@ sub verifyAbsPath { my $path = shift; my $cwd = getcwd(); unless (-e $path) { - die "Path '$path' does not exist relative to current directory '$cwd'\n"; + $log->logcroak("Path '", $path, "' does not exist relative to ", + "current directory '", $cwd, "'"); } $path = abs_path($path); return $path; } -sub run_qc_wip { - # run the work-in-progess refactored QC in parallel with the old one - my ($plinkPrefix, $outDir, $plexManifestRef, $vcfRef, $sampleJson) = @_; - $outDir = $outDir."/qc_wip"; - mkdir($outDir); - my $script = "check_identity_bed_wip.pl"; - my $jsonPath = $outDir."/identity_wip.json"; - my $csvPath = $outDir."/identity_wip.csv"; - my $vcf = join(',', @{$vcfRef}); - my $plexManifest = join(',', @{$plexManifestRef}); - my @args = ("--json=$jsonPath", - "--csv=$csvPath", - "--plink=$plinkPrefix", - "--plex=$plexManifest", - "--sample_json=$sampleJson", - "--vcf=$vcf" - ); - my $cmd = $script." ".join(" ", @args); - my $result = system($cmd); - if ($result!=0) { - die qq(Command finished with non-zero exit status: "$cmd"\n); - } - -} - sub run_qc { my ($plinkPrefix, $simPath, $dbPath, $iniPath, $configPath, $runName, $outDir, $title, $texIntroPath, $mafHet, $filter, $exclude, $plexManifest, $vcf, $sampleJson) = @_; - if ($plexManifest && $vcf && $sampleJson) { - run_qc_wip($plinkPrefix, $outDir, $plexManifest, $vcf, $sampleJson); + if (! defined $runName) { + $log->logcroak("Must supply pipeline run name for database ", + "gender update"); } write_version_log($outDir); my %fileNames = readQCFileNames($configPath); - ### input file generation ### - my @cmds = ("$CR_STATS_EXECUTABLE -r $outDir/snp_cr_af.txt -s $outDir/sample_cr_het.txt $plinkPrefix", - "$Bin/check_duplicates_bed.pl --dir $outDir $plinkPrefix", - ); - my $genderCmd = "$Bin/check_xhet_gender.pl --input=$plinkPrefix --output-dir=$outDir"; - if (!defined($runName)) { - die "Must supply pipeline run name for database gender update\n"; + ### generate commands to produce QC metrics ### + # TODO use WTSI::DNAP::Utilities::Runnable for more robust execution? + my @cmds; + my $crCmd = "$CR_STATS_EXECUTABLE -r $outDir/snp_cr_af.txt ". + "-s $outDir/sample_cr_het.txt $plinkPrefix"; + my $dupCmd = "$Bin/check_duplicates_bed.pl --dir $outDir $plinkPrefix"; + push @cmds, $crCmd, $dupCmd; + if (defined $plexManifest && defined $vcf && defined $sampleJson) { + my @idArgs = ('--json', $outDir.'/'.$fileNames{'id_json'}, + '--csv', $outDir.'/'.$fileNames{'id_csv'}, + '--plink', $plinkPrefix, + '--plex', join(',', @{$plexManifest}), + '--vcf', join(',', @{$vcf}), + '--sample_json', $sampleJson, + ); + my $idCmd = $ID_EXECUTABLE.' '.join(' ', @idArgs); + push @cmds, $idCmd; } + my @genderArgs = ('--input', $plinkPrefix, + '--output-dir', $outDir, + ); + my $genderCmd = "$Bin/check_xhet_gender.pl ".join(' ', @genderArgs); $genderCmd.=" --dbfile=".$dbPath." --run=".$runName; - push(@cmds, $genderCmd); + push @cmds, $genderCmd; if ($mafHet) { my $mhout = $outDir.'/'.$fileNames{'het_by_maf'}; push(@cmds, "$MAF_HET_EXECUTABLE --in $plinkPrefix --out $mhout"); @@ -336,46 +312,35 @@ sub run_qc { # using previously calculated metric values $intensity = 1; } - my $dbopt = "--dbpath=$dbPath "; - ### run QC data generation commands ### + ### run QC metric commands ### foreach my $cmd (@cmds) { - my $result = system($cmd); + my $result = system($cmd); if ($result!=0) { - die qq("Command finished with non-zero exit status: "$cmd"\n); + $log->logcroak("Command finished with non-zero exit status: '", + $cmd, "'"); } } - ### run identity check ### - WTSI::NPG::Genotyping::QC::Identity->new( - db_path => $dbPath, - ini_path => $iniPath, - output_dir => $outDir, - plink_path => $plinkPrefix, - )->run_identity_check(); - my $idJson = $outDir.'/'.$fileNames{'id_json'}; - if (!(-e $idJson)) { - die "Identity JSON file '$idJson' does not exist!\n"; - } ### collate inputs, write JSON and CSV ### my $csvPath = $outDir."/pipeline_summary.csv"; my $statusJson = $outDir."/qc_results.json"; - my $metricJson = ""; + my $duplicates = $outDir."/duplicate_results.json"; # first pass -- standard thresholds, no DB update - my @allMetricNames = keys(%{readMetricThresholds($configPath)}); - my @metricNames = (); - foreach my $metric (@allMetricNames) { - if ($intensity || ($metric ne 'magnitude' && $metric ne 'xydiff')) { - push(@metricNames, $metric); - } + my $collator = WTSI::NPG::Genotyping::QC::Collator->new( + db_path => $dbPath, + ini_path => $iniPath, + input_dir => $outDir, + config_path => $configPath + ); + $collator->writePassFailJson($statusJson); + $collator->writeCsv($csvPath); + if ($collator->hasDuplicatesThreshold()) { + $collator->writeDuplicates($duplicates); } - collate($outDir, $configPath, $configPath, $dbPath, $iniPath, - $statusJson, $metricJson, $csvPath, 0, \@metricNames); ### plot generation ### @cmds = (); - if ($dbopt) { - my $cmd = "$Bin/plot_metric_scatter.pl $dbopt --inipath=$iniPath --config=$configPath --outdir=$outDir --qcdir=$outDir"; - if (!$simPath) { $cmd = $cmd." --no-intensity "; } - push(@cmds, $cmd); - } + my $dbopt = "--dbpath=$dbPath "; + my $cmd = "$Bin/plot_metric_scatter.pl $dbopt --inipath=$iniPath --config=$configPath --outdir=$outDir --qcdir=$outDir"; + push(@cmds, $cmd); push(@cmds, getPlateHeatmapCommands($dbopt, $iniPath, $outDir, $title, $intensity, \%fileNames)); my @densityTerms = ('cat', $outDir.'/'.$fileNames{'sample_cr_het'}, '|', @@ -387,22 +352,36 @@ sub run_qc { foreach my $cmd (@cmds) { my $result = system($cmd); if ($result!=0) { - die qq("Command finished with non-zero exit status: "$cmd"\n); + $log->logcroak("Command finished with non-zero exit status: '", + $cmd, "'"); } } ### create PDF report my $texPath = $outDir."/pipeline_summary.tex"; my $genderThresholdPath = $outDir."/sample_xhet_gender_thresholds.txt"; - createReports($texPath, $statusJson, $idJson, $configPath, $dbPath, + createReports($texPath, $statusJson, $configPath, $dbPath, $genderThresholdPath, $outDir, $texIntroPath); ### exclude failed samples from pipeline DB if ($filter) { # second pass -- evaluate filter metrics/thresholds # update DB unless the --include option is in effect - $csvPath = $outDir."/filter_results.csv"; + my $collator = WTSI::NPG::Genotyping::QC::Collator->new( + db_path => $dbPath, + ini_path => $iniPath, + input_dir => $outDir, + config_path => $filter + ); $statusJson = $outDir."/filter_results.json"; - collate($outDir, $configPath, $filter, $dbPath, $iniPath, - $statusJson, $metricJson, $csvPath, $exclude); + $csvPath = $outDir."/filter_results.csv"; + $duplicates = $outDir."/filter_duplicates.json"; + $collator->writePassFailJson($statusJson); + $collator->writeCsv($csvPath); + if ($collator->hasDuplicatesThreshold()) { + $collator->writeDuplicates($duplicates); + } + if ($exclude) { + $collator->excludeFailedSamples(); + } } ## create 'supplementary' directory and move files cleanup($outDir); @@ -487,7 +466,7 @@ =head2 NOTES =item 2. The --plex-manifest and --vcf options, with appropriate arguments, -are required to run the alternate identity check. If both these +are required for the identity check metric. If both these options are not specified, the check will be omitted. Arguments to both options are comma-separated lists of file paths; the individual paths may not contain commas. The order of paths is not significant. @@ -560,7 +539,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +Copyright (c) 2012, 2013, 2014, 2015, 2016, 2017 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify diff --git a/src/perl/bin/sample_intensities.pl b/src/perl/bin/sample_intensities.pl index 88c1b75aa..9a5b7022d 100755 --- a/src/perl/bin/sample_intensities.pl +++ b/src/perl/bin/sample_intensities.pl @@ -6,10 +6,13 @@ package main; use warnings; use strict; +use Carp; use Getopt::Long; use JSON; -use Log::Log4perl qw(:easy); +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw/log_init/; +use WTSI::NPG::Utilities qw(user_session_log); use WTSI::DNAP::Utilities::IO qw(maybe_stdout); use WTSI::NPG::Genotyping::Database::Pipeline; @@ -19,7 +22,9 @@ package main; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; our $ID_REGEX = qr/^[\w.-]{4,}$/msx; -Log::Log4perl->easy_init($ERROR); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'sample_intensities'); run() unless caller(); @@ -27,23 +32,34 @@ sub run { my $all; my $config; my $dbfile; + my $debug; my $gender_method; + my $log4perl_config; my $output; my $run_name; my $verbose; GetOptions('all' => \$all, 'config=s' => \$config, + 'debug' => \$debug, 'dbfile=s' => \$dbfile, 'gender_method=s' => \$gender_method, 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, + 'logconf=s' => \$log4perl_config, 'output=s' => \$output, 'run=s' => \$run_name, - 'verbose' => \$verbose); + 'verbose' => \$verbose,); $config ||= $DEFAULT_INI; $gender_method ||= 'Supplied'; + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); unless ($run_name) { pod2usage(-msg => "A --run argument is required\n", -exitval => 2); @@ -54,7 +70,7 @@ sub run { if ($dbfile) { push @initargs, (dbfile => $dbfile); } - + $log->debug("Connecting to SQLite database file '$dbfile'"); my $pipedb = WTSI::NPG::Genotyping::Database::Pipeline->new (@initargs)->connect (RaiseError => 1, @@ -62,8 +78,8 @@ sub run { my $run = $pipedb->piperun->find({name => $run_name}); unless ($run) { - die "Run '$run_name' does not exist. Valid runs are: [" . - join(", ", map { $_->name } $pipedb->piperun->all) . "]\n"; + $log->logcroak("Run '", $run_name, "' does not exist. Valid runs are: [", + join(", ", map { $_->name } $pipedb->piperun->all), "]"); } my $where = {'piperun.name' => $run->name, @@ -77,6 +93,8 @@ sub run { {join => [{dataset => 'piperun'}, {results => 'method'}], order_by => 'me.id_sample'})) { + + $log->debug("Processing sample ID: ", $sample->sanger_sample_id); my $gender = $pipedb->gender->find ({'sample.id_sample' => $sample->id_sample, 'method.name' => $gender_method}, @@ -89,14 +107,16 @@ sub run { push @samples, {sanger_sample_id => $sample->sanger_sample_id, uri => $sample->uri->as_string, result => $sample->gtc, - gender => $gender_name, + gender => $gender_name, gender_code => $gender_code, gender_method => $gender_method}; } + $log->info("Found data for ", scalar @samples, " samples"); my $fh = maybe_stdout($output); print $fh to_json(\@samples, {utf8 => 1, pretty => 1}); - close($fh); + close($fh) || $log->logcroak("Cannot close output"); + $log->info("Wrote sample JSON data to ", $output); return; } @@ -111,8 +131,8 @@ =head1 NAME =head1 SYNOPSIS sample_intensities [--config ] [--dbfile ] \ - [--output ] --run --gender \ - [--verbose] + [--output ] --run --gender + Options: @@ -129,7 +149,6 @@ =head1 SYNOPSIS defaults to STDOUT. --run The name of a pipe run defined previously using the ready_infinium script. - --verbose Print messages while processing. Optional. =head1 DESCRIPTION @@ -155,11 +174,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2012, 2015 Genome Research Limited. All Rights Reserved. +Copyright (C) 2012, 2015, 2016, 2017 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/update_expression_metadata.pl b/src/perl/bin/update_expression_metadata.pl index 506b3bd8b..2007e0102 100755 --- a/src/perl/bin/update_expression_metadata.pl +++ b/src/perl/bin/update_expression_metadata.pl @@ -7,29 +7,24 @@ package main; use strict; use warnings; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; + use Pod::Usage; use Try::Tiny; +use Log::Log4perl qw(:levels); +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Expression::InfiniumDataObject; use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw(user_session_log); -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'update_expression_metadata'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; -my $log; - run() unless caller(); sub run { @@ -80,21 +75,13 @@ sub run { } } - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', @@ -102,7 +89,7 @@ sub run { mysql_enable_utf8 => 1, mysql_auto_reconnect => 1); - my $irods = WTSI::NPG::iRODS->new(logger => $log); + my $irods = WTSI::NPG::iRODS->new(); my @gex_data; if ($stdio) { @@ -192,11 +179,11 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2014 Genome Research Limited. All Rights Reserved. +Copyright (c) 2014, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/update_fluidigm_metadata.pl b/src/perl/bin/update_fluidigm_metadata.pl index 2e62e547c..e7c0fff6e 100755 --- a/src/perl/bin/update_fluidigm_metadata.pl +++ b/src/perl/bin/update_fluidigm_metadata.pl @@ -5,30 +5,24 @@ package main; use strict; use warnings; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; -use WTSI::NPG::Database::Warehouse; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); +use WTSI::NPG::Database::MLWarehouse; use WTSI::NPG::Genotyping::Fluidigm::AssayDataObject; use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw(user_session_log); -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'update_fluidigm_metadata'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; our $DEFAULT_DAYS = 4; -my $log; - run() unless caller(); sub run { @@ -79,29 +73,21 @@ sub run { } } - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); - my $ssdb = WTSI::NPG::Database::Warehouse->new + my $ssdb = WTSI::NPG::Database::MLWarehouse->new (name => 'sequencescape_warehouse', inifile => $config)->connect(RaiseError => 1, mysql_enable_utf8 => 1, mysql_auto_reconnect => 1); - my $irods = WTSI::NPG::iRODS->new(logger => $log); + my $irods = WTSI::NPG::iRODS->new(); my @fluidigm_data; if ($stdio) { @@ -194,11 +180,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2013 Genome Research Limited. All Rights Reserved. +Copyright (c) 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/update_infinium_metadata.pl b/src/perl/bin/update_infinium_metadata.pl index 7a0548239..c5f6c75b8 100755 --- a/src/perl/bin/update_infinium_metadata.pl +++ b/src/perl/bin/update_infinium_metadata.pl @@ -7,14 +7,19 @@ package main; use strict; use warnings; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping::Infinium::InfiniumDataObject; use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'update_infinium_metadata'); my $embedded_conf = q( log4perl.logger.npg.irods.publish = ERROR, A1 @@ -79,31 +84,20 @@ sub run { } } - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', - inifile => $config, - logger => $log)->connect(RaiseError => 1, - mysql_enable_utf8 => 1, - mysql_auto_reconnect => 1); - my $irods = WTSI::NPG::iRODS->new(logger => $log); + inifile => $config)->connect(RaiseError => 1, + mysql_enable_utf8 => 1, + mysql_auto_reconnect => 1); + my $irods = WTSI::NPG::iRODS->new(); my @infinium_data; if ($stdio) { @@ -196,11 +190,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2013 Genome Research Limited. All Rights Reserved. +Copyright (c) 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/update_plink_annotation.pl b/src/perl/bin/update_plink_annotation.pl index ed1320282..cfe3b2a76 100755 --- a/src/perl/bin/update_plink_annotation.pl +++ b/src/perl/bin/update_plink_annotation.pl @@ -8,12 +8,18 @@ package main; use warnings; use File::Temp qw(tempdir tempfile); use Getopt::Long; -use Log::Log4perl qw(:easy); +use Log::Log4perl qw(:levels); use Pod::Usage; -use WTSI::NPG::Genotyping::Plink qw(update_placeholder +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); +use WTSI::NPG::Genotyping::Plink qw(update_placeholder update_snp_locations update_sample_genders); +use WTSI::NPG::Utilities qw(user_session_log); + +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'update_plink_annotation'); our $VERSION = ''; @@ -23,17 +29,21 @@ package main; sub run { my $bed_file; + my $debug; + my $log4perl_config; my $sample_json; my $snp_json; - my $placeholder; + my $placeholder; my $verbose; - GetOptions('bed=s' => \$bed_file, + GetOptions('bed=s' => \$bed_file, + 'debug' => \$debug, 'help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, - 'samples=s' => \$sample_json, - 'snps=s' => \$snp_json, + 'logconf=s' => \$log4perl_config, + 'samples=s' => \$sample_json, + 'snps=s' => \$snp_json, 'placeholder=i' => \$placeholder, - 'verbose' => \$verbose); + 'verbose' => \$verbose); unless ($bed_file) { pod2usage(-msg => "A --bed argument is required\n", @@ -45,6 +55,14 @@ sub run { -exitval => 2); } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); + # placeholder for missing data in .fam files must be 0 or -9 if (defined($placeholder) && $placeholder!=0 && $placeholder!=-9) { pod2usage(-msg => "--placeholder argument must be one of (0, -9)\n", @@ -55,19 +73,19 @@ sub run { if ($sample_json) { my $num_updated = update_sample_genders($bed_file, $bed_file, $sample_json, $tmp_dir); - print STDERR "Updated the gender of $num_updated samples\n" if $verbose; + $log->info("Updated the gender of ", $num_updated, " samples"); } if ($snp_json) { my $num_updated = update_snp_locations($bed_file, $bed_file, $snp_json, $tmp_dir); - print STDERR "Updated the location of $num_updated SNPs\n" if $verbose; + $log->info("Updated the location of ", $num_updated, " SNPs"); } if (defined($placeholder)) { my $num_updated = update_placeholder($bed_file, $bed_file, $placeholder, $tmp_dir); - print STDERR "Updated placeholders for $num_updated samples\n" if $verbose; + $log->info("Updated placeholders for ", $num_updated, " samples"); } return; @@ -89,6 +107,7 @@ =head1 SYNOPSIS --bed The file name of the Plink data to me modified. This should be the name of the BED file whose corresponding BIM and/or FAM annotation files are to be updated. + --logconf A log4perl configuration file. Optional. --samples A JSON file of sample annotation containing the new gender codes. --snps A JSON file of SNP annotation containing the new chromosome @@ -110,11 +129,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2012 Genome Research Limited. All Rights Reserved. +Copyright (c) 2012, 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/update_sequenom_metadata.pl b/src/perl/bin/update_sequenom_metadata.pl index f0674e7d4..24e6ef39d 100755 --- a/src/perl/bin/update_sequenom_metadata.pl +++ b/src/perl/bin/update_sequenom_metadata.pl @@ -10,24 +10,20 @@ package main; use DateTime; use Getopt::Long; use List::MoreUtils qw(natatime); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping::Database::SNP; use WTSI::NPG::Genotyping::Sequenom::AssayDataObject; use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw(user_session_log); -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'update_sequenom_metadata'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; @@ -82,37 +78,25 @@ sub run { } } - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $ssdb = WTSI::NPG::Database::Warehouse->new (name => 'sequencescape_warehouse', - inifile => $config, - logger => $log)->connect(RaiseError => 1, - mysql_enable_utf8 => 1, - mysql_auto_reconnect => 1); + inifile => $config)->connect(RaiseError => 1, + mysql_enable_utf8 => 1, + mysql_auto_reconnect => 1); my $snpdb = WTSI::NPG::Genotyping::Database::SNP->new (name => 'snp', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); - my $irods = WTSI::NPG::iRODS->new(logger => $log); + my $irods = WTSI::NPG::iRODS->new(); my @sequenom_data; if ($stdio) { @@ -208,11 +192,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2013 Genome Research Limited. All Rights Reserved. +Copyright (c) 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/update_sequenom_qc_metadata.pl b/src/perl/bin/update_sequenom_qc_metadata.pl index b23e93f5c..b93fc1c20 100755 --- a/src/perl/bin/update_sequenom_qc_metadata.pl +++ b/src/perl/bin/update_sequenom_qc_metadata.pl @@ -8,23 +8,19 @@ package main; use warnings; use DateTime; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Try::Tiny; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Database::SNP; use WTSI::NPG::Genotyping::Sequenom::AssayDataObject; use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw(user_session_log); -my $embedded_conf = q( - log4perl.logger.npg.irods.publish = ERROR, A1 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n -); +my $uid = `whoami`; +chomp($uid); +my $session_log = user_session_log($uid, 'update_sequenom_qc_metadata'); our $VERSION = ''; our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; @@ -86,23 +82,13 @@ sub run { } } - my $log; - - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.irods.publish'); - - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); my $now = DateTime->now; my $end; @@ -119,10 +105,9 @@ sub run { my $snpdb = WTSI::NPG::Genotyping::Database::SNP->new (name => 'snp', - inifile => $config, - logger => $log)->connect(RaiseError => 1); + inifile => $config)->connect(RaiseError => 1); - my $irods = WTSI::NPG::iRODS->new(logger => $log); + my $irods = WTSI::NPG::iRODS->new(); my @sequenom_data; if ($stdio) { @@ -232,11 +217,12 @@ =head1 METHODS =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2013 Genome Research Limited. All Rights Reserved. +Copyright (c) 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/vcf_consistency_check.pl b/src/perl/bin/vcf_consistency_check.pl index 92b2a74e5..df346ba89 100755 --- a/src/perl/bin/vcf_consistency_check.pl +++ b/src/perl/bin/vcf_consistency_check.pl @@ -8,10 +8,10 @@ package main; use warnings; use Carp; use Getopt::Long; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::VCF::GtcheckWrapper; use WTSI::NPG::Utilities qw(user_session_log); @@ -38,32 +38,25 @@ package main; "; -my ($input, $debug, $jsonOut, $log, $logConfig, $textOut, $verbose); +my ($input, $debug, $jsonOut, $log4perl_config, $textOut, $verbose); GetOptions('help' => sub { pod2usage(-verbose => 2, -exitval => 0) }, 'debug' => \$debug, 'input=s' => \$input, 'json=s' => \$jsonOut, - 'logconf=s' => \$logConfig, + 'logconf=s' => \$log4perl_config, 'text=s' => \$textOut, 'verbose' => \$verbose ); - -### set up logging ### -if ($logConfig) { - Log::Log4perl::init($logConfig); -} else { - Log::Log4perl::init(\$embedded_conf); -} -$log = Log::Log4perl->get_logger('npg.vcf.consistency'); -if ($verbose) { - $log->level($INFO); -} -elsif ($debug) { - $log->level($DEBUG); -} +my @log_levels; +if ($debug) { push @log_levels, $DEBUG; } +if ($verbose) { push @log_levels, $INFO; } +log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); +my $log = Log::Log4perl->get_logger('main'); ### read input and do consistency check @@ -122,7 +115,7 @@ =head1 SYNOPSIS standard output. Optional; if not given, text is not written. --logconf=PATH Path to Log4Perl configuration file. Optional. - --quiet Suppress printing of status information. + --verbose Print additional messages while processing. Optional. =head1 DESCRIPTION @@ -143,7 +136,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2014 Genome Research Limited. All Rights Reserved. +Copyright (c) 2014, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/vcf_from_plex.pl b/src/perl/bin/vcf_from_plex.pl index 1b26679e6..f453c3940 100755 --- a/src/perl/bin/vcf_from_plex.pl +++ b/src/perl/bin/vcf_from_plex.pl @@ -12,10 +12,10 @@ package main; use Getopt::Long; use JSON; use List::MoreUtils qw(uniq); -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::iRODS; use WTSI::NPG::iRODS::DataObject; use WTSI::NPG::Genotyping::Types qw(:all); @@ -47,9 +47,9 @@ package main; "; -my ($input, $inputType, $vcfPath, $log, $logConfig, $use_irods, +my ($input, $inputType, $vcfPath, $log4perl_config, $use_irods, $debug, $quiet, $repository, $snpset_path, $chromosome_json, - $metadata_json, $callset_name); + $metadata_json, $callset_name, $verbose); my $CHROMOSOME_JSON_KEY = 'chromosome_json'; our $SEQUENOM_TYPE = 'sequenom'; @@ -66,20 +66,21 @@ package main; -exitval => 0) }, 'input=s' => \$input, 'irods' => \$use_irods, - 'logconf=s' => \$logConfig, + 'logconf=s' => \$log4perl_config, 'plex_type=s' => \$inputType, 'repository=s' => \$repository, 'vcf=s' => \$vcfPath, 'quiet' => \$quiet, + 'verbose' => \$verbose, ); -### set up logging ### -if ($logConfig) { Log::Log4perl::init($logConfig); } -else { Log::Log4perl::init(\$embedded_conf); } -$log = Log::Log4perl->get_logger('npg.vcf.plex'); -if ($quiet) { $log->level($WARN); } -elsif ($debug) { $log->level($DEBUG); } -else { $log->level($INFO); } +my @log_levels; +if ($debug) { push @log_levels, $DEBUG; } +if ($verbose) { push @log_levels, $INFO; } +log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); +my $log = Log::Log4perl->get_logger('main'); ### process command-line options and make sanity checks ### unless ($inputType eq $SEQUENOM_TYPE || $inputType eq $FLUIDIGM_TYPE) { @@ -102,7 +103,6 @@ package main; my ($snpset, $chromosome_lengths); if ($use_irods) { $irods = WTSI::NPG::iRODS->new(); - $irods->logger($log); my $snpset_obj = WTSI::NPG::iRODS::DataObject->new ($irods, $snpset_path); $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_obj); @@ -293,7 +293,9 @@ =head1 SYNOPSIS --irods Indicates that inputs are in iRODS. If absent, inputs are assumed to be in the local filesystem, and the --snpset and --chromosomes options are required. + --logconf=PATH Path to Log4Perl configuration file. Optional. --plex_type=NAME Either fluidigm or sequenom. Required. + --quiet Only print warning messages to the default log. --repository=DIR Location of the root directory for NPG genome reference repository. Defaults to the value of the NPG_REPOSITORY_ROOT environment variable. @@ -304,7 +306,7 @@ =head1 SYNOPSIS --vcf=PATH Path for VCF file output. Optional; if not given, VCF is not written. If equal to '-', output is written to STDOUT. - --logconf=PATH Path to Log4Perl configuration file. Optional. + --verbose Print additional messages to the default log. =head1 DESCRIPTION @@ -324,7 +326,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2014 Genome Research Limited. All Rights Reserved. +Copyright (c) 2014, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/vcf_from_plink.pl b/src/perl/bin/vcf_from_plink.pl index dbb5da4ac..4307cff13 100755 --- a/src/perl/bin/vcf_from_plink.pl +++ b/src/perl/bin/vcf_from_plink.pl @@ -9,11 +9,11 @@ package main; use File::Slurp qw(read_file); use Getopt::Long; use JSON; -use Log::Log4perl; -use Log::Log4perl::Level; +use Log::Log4perl qw(:levels); use Pod::Usage; use Text::CSV; +use WTSI::DNAP::Utilities::ConfigureLogger qw(log_init); use WTSI::NPG::Genotyping::Call; use WTSI::NPG::Genotyping::SNPSet; use WTSI::NPG::Genotyping::VCF::DataRow; @@ -25,28 +25,9 @@ package main; our $VERSION = ''; - my $uid = `whoami`; chomp($uid); -my $session_log = user_session_log($uid, 'check_identity_bed_wip'); - -my $embedded_conf = " - log4perl.logger.npg.genotyping.vcf_from_plink = ERROR, A1, A2 - - log4perl.appender.A1 = Log::Log4perl::Appender::Screen - log4perl.appender.A1.utf8 = 1 - log4perl.appender.A1.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A1.layout.ConversionPattern = %d %p %m %n - - log4perl.appender.A2 = Log::Log4perl::Appender::File - log4perl.appender.A2.filename = $session_log - log4perl.appender.A2.utf8 = 1 - log4perl.appender.A2.layout = Log::Log4perl::Layout::PatternLayout - log4perl.appender.A2.layout.ConversionPattern = %d %p %m %n - log4perl.appender.A2.syswrite = 1 -"; - -my $log; +my $session_log = user_session_log($uid, 'vcf_from_plink'); run() unless caller(); @@ -73,20 +54,13 @@ sub run { 'verbose' => \$verbose, ); - if ($log4perl_config) { - Log::Log4perl::init($log4perl_config); - $log = Log::Log4perl->get_logger('npg.genotyping.vcf_from_plink'); - } - else { - Log::Log4perl::init(\$embedded_conf); - $log = Log::Log4perl->get_logger('npg.genotyping.vcf_from_plink'); - if ($verbose) { - $log->level($INFO); - } - elsif ($debug) { - $log->level($DEBUG); - } - } + my @log_levels; + if ($debug) { push @log_levels, $DEBUG; } + if ($verbose) { push @log_levels, $INFO; } + log_init(config => $log4perl_config, + file => $session_log, + levels => \@log_levels); + my $log = Log::Log4perl->get_logger('main'); unless ($contigs && $manifest && $plink && $vcf) { $log->logcroak("Missing required argument: Must supply --contigs, ", @@ -154,7 +128,8 @@ sub read_plink_calls { my ($pedPath, $plink_snps_ref) = @_; my @plink_snps = @{$plink_snps_ref}; my @ped_lines = read_file($pedPath); - my $csv = Text::CSV->new({sep_char => " "}); + my $csv = Text::CSV->new({sep_char => " ", + binary => 1 }); my %calls_by_sample; foreach my $line (@ped_lines) { $csv->parse($line); @@ -205,7 +180,8 @@ sub read_column { $sep_char ||= "\t"; my @values; my @inLines = read_file($inPath); - my $csv = Text::CSV->new({sep_char => $sep_char}); + my $csv = Text::CSV->new({sep_char => $sep_char, + binary => 1}); foreach my $line (@inLines) { $csv->parse($line); my @fields = $csv->fields(); @@ -260,7 +236,7 @@ =head1 AUTHOR =head1 COPYRIGHT AND DISCLAIMER -Copyright (c) 2015 Genome Research Limited. All Rights Reserved. +Copyright (c) 2015, 2016, 2017 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/bin/write_qc_reports.pl b/src/perl/bin/write_qc_reports.pl index 4284f9042..dfc1c3dba 100755 --- a/src/perl/bin/write_qc_reports.pl +++ b/src/perl/bin/write_qc_reports.pl @@ -9,7 +9,7 @@ use warnings; use Getopt::Long; use Carp; -use WTSI::NPG::Genotyping::QC::QCPlotShared qw(defaultJsonConfig +use WTSI::NPG::Genotyping::QC::QCPlotShared qw(defaultJsonConfig defaultTexIntroPath); use WTSI::NPG::Genotyping::QC::Reports qw(createReports qcNameFromPath); @@ -19,7 +19,7 @@ my $defaultInput = "."; my $defaultPrefix = "pipeline_summary"; -my ($help, $prefix, $texPath, $iniPath, $resultPath, $configPath, $idPath, +my ($help, $prefix, $texPath, $iniPath, $resultPath, $configPath, $dbPath, $genderThresholdPath, $qcDir, $texIntroPath, $qcName); GetOptions("help" => \$help, @@ -32,8 +32,8 @@ if ($help) { print STDERR "Usage: $0 [ options ] Convenience script to regenerate the PDF report file. -This script does not regenerate plots contained in the PDF report. -In order to regenerate plots, re-run the individual plotting scripts, +This script does not regenerate plots contained in the PDF report. +In order to regenerate plots, re-run the individual plotting scripts, such as plot_scatter_metric.pl for metric scatterplots. Options: --input Path to \"supplementary\" directory containing QC results. @@ -59,8 +59,38 @@ $configPath = defaultJsonConfig($iniPath); $texIntroPath = defaultTexIntroPath($iniPath); $resultPath = $qcDir."/qc_results.json"; -$idPath = $qcDir."/identity_check.json"; $genderThresholdPath = $qcDir."/sample_xhet_gender_thresholds.txt"; -createReports($texPath, $resultPath, $idPath, $configPath, $dbPath, +createReports($texPath, $resultPath, $configPath, $dbPath, $genderThresholdPath, $qcDir, $texIntroPath, $qcName); + +__END__ + +=head1 NAME + +write_qc_reports + +=head1 DESCRIPTION + +Generate genotyping QC summary reports + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/bin/write_snp_metadata.pl b/src/perl/bin/write_snp_metadata.pl index b62d6a8d4..e49cce2f2 100755 --- a/src/perl/bin/write_snp_metadata.pl +++ b/src/perl/bin/write_snp_metadata.pl @@ -1,20 +1,4 @@ #!/software/bin/perl - -# -# Copyright (C) 2013, 2015 Genome Research Ltd. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . # # Parse a SNP manifest .csv file and write metadata in .json format @@ -229,8 +213,41 @@ sub run { my $sortedAll = $temp."/sorted.all.csv"; system("cat ".join(" ", @sortedPaths)." > ".$sortedAll); readWriteManifest($sortedAll, $snpJson, $verbose); - } + } } run(); + + + +__END__ + +=head1 NAME + +write_snp_metadata + +=head1 DESCRIPTION + +Parse a SNP manifest .csv file and write metadata in .json format + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2013, 2014, 2015, 2016 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/etc/illuminus_prefilter.json b/src/perl/etc/illuminus_prefilter.json index 7eb07c8e8..6003276e1 100644 --- a/src/perl/etc/illuminus_prefilter.json +++ b/src/perl/etc/illuminus_prefilter.json @@ -1,4 +1,7 @@ { + "collation_names": { + "call_rate":"sample_cr_het.txt" + }, "Metrics_thresholds": { "call_rate": 0.9 }, diff --git a/src/perl/etc/qc_config.json b/src/perl/etc/qc_config.json index 80797463c..d85cb3fea 100644 --- a/src/perl/etc/qc_config.json +++ b/src/perl/etc/qc_config.json @@ -4,6 +4,7 @@ "main_index":"index.html", "het_by_maf":"het_by_maf.json", "id_json":"identity_check.json", + "id_csv":"identity_check.csv", "magnitude":"magnitude.txt", "sample_cr_het":"sample_cr_het.txt", "plate_index":"index.html", @@ -17,7 +18,6 @@ "xydiff":"xydiff.txt", "identity":"identity_check.json", "duplicate":"duplicate_full.txt.gz", - "duplicate_subsets":"duplicate_subsets.json", "gender":"sample_xhet_gender.txt", "magnitude":"magnitude.txt"}, "short_names":{"heterozygosity":"H","call_rate":"C","xydiff":"X","identity":"I","duplicate":"D","gender":"G","magnitude":"M"}, @@ -42,7 +42,7 @@ "heterozygosity" : 3, "call_rate" : 0.95, "magnitude" : 0.90, - "identity" : 0.90, + "identity" : 0.99, "duplicate" : 0.98, "gender" : "NA", "xydiff" : 3 diff --git a/src/perl/etc/reportIntro.tex b/src/perl/etc/reportIntro.tex index 0581ba9cd..4c7d27082 100644 --- a/src/perl/etc/reportIntro.tex +++ b/src/perl/etc/reportIntro.tex @@ -21,7 +21,7 @@ \subsection{Metrics} \subsubsection*{Metric descriptions} \begin{enumerate} -\item \textbf{Identity:} In addition to Illumina genotyping, samples may be typed on an alternate platform such as Sequenom or Fluidigm. Identity of calls between platforms is checked. The check requires a minimum number of sites to be shared between platforms (default is 8). If fewer than the minimum are available, the identity check is not applied and \emph{all} samples receive a pass. Otherwise, only samples for which concordance is greater than a chosen threshold will pass. +\item \textbf{Identity:} In addition to Illumina genotyping, samples may be typed on an alternate platform such as Sequenom or Fluidigm. Probability that the Illumina and alternate calls represent the same sample is evaluated. If the probability of identity is above a chosen threshold, the sample receives a pass. For additional details, see the pipeline software documentation: \url{https://github.com/wtsi-npg/genotyping/blob/master/doc/bayesian_identity/bayesian_identity.pdf} See Section \ref{sec:metric-summary} for threshold values in this pipeline run. diff --git a/src/perl/etc/zcall_prefilter.json b/src/perl/etc/zcall_prefilter.json index 733649281..8f1b547d7 100644 --- a/src/perl/etc/zcall_prefilter.json +++ b/src/perl/etc/zcall_prefilter.json @@ -1,4 +1,14 @@ { + "collation_names": { + "heterozygosity":"sample_cr_het.txt", + "het_by_maf":"het_by_maf.json", + "call_rate":"sample_cr_het.txt", + "xydiff":"xydiff.txt", + "identity":"identity_check.json", + "duplicate":"duplicate_full.txt.gz", + "duplicate_subsets":"duplicate_subsets.json", + "gender":"sample_xhet_gender.txt", + "magnitude":"magnitude.txt"}, "Metrics_thresholds": { "call_rate": 0.98, "duplicate": 0.98, diff --git a/src/perl/lib/WTSI/NPG/Expression/AnalysisPublisher.pm b/src/perl/lib/WTSI/NPG/Expression/AnalysisPublisher.pm index 77318eb83..c6122beba 100644 --- a/src/perl/lib/WTSI/NPG/Expression/AnalysisPublisher.pm +++ b/src/perl/lib/WTSI/NPG/Expression/AnalysisPublisher.pm @@ -12,7 +12,7 @@ use WTSI::NPG::Expression::ResultSet; use WTSI::NPG::Expression::SampleProbeProfile; use WTSI::NPG::Publisher; use WTSI::NPG::SimplePublisher; -use WTSI::NPG::Utilities qw(collect_files); +use WTSI::NPG::Utilities::Collector; use WTSI::NPG::iRODS; use WTSI::NPG::iRODS::Metadata; # has attribute name constants @@ -217,8 +217,10 @@ sub ensure_analysis_collection { sub find_analysis_files { my ($self) = @_; - - return collect_files($self->analysis_directory, sub { return 1;}); + my $collector = WTSI::NPG::Utilities::Collector->new( + root => $self->analysis_directory + ); + return $collector->collect_files_simple(); } sub publish_analysis_file { diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Archiver.pm b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Archiver.pm new file mode 100644 index 000000000..3f4bacd44 --- /dev/null +++ b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Archiver.pm @@ -0,0 +1,119 @@ +use utf8; + +package WTSI::NPG::Genotyping::Fluidigm::Archiver; + +use Cwd qw/abs_path/; +use File::Spec; +use WTSI::NPG::Genotyping::Fluidigm::Collector; +use WTSI::NPG::Genotyping::Fluidigm::ExportFile; +use WTSI::NPG::Genotyping::Fluidigm::ResultSet; + +use Moose; + +with qw/WTSI::NPG::Utilities::Archivable/; + +has 'dir_regex' => + (is => 'ro', + isa => 'RegexpRef', + default => sub { return qr/^\d{10}$/msx; } + ); + +has 'irods_root' => + (is => 'ro', + isa => 'Str', + required => 1, + documentation => 'Root collection path in iRODS, eg. /seq' + ); + +has 'output_prefix' => ( + is => 'ro', + isa => 'Str', + documentation => 'Prefix for .tgz archive filenames. Overrides '. + 'attribute in Archivable Role.', + default => 'fluidigm', + ); + +has 'collector' => ( + is => 'ro', + isa => 'WTSI::NPG::Genotyping::Fluidigm::Collector', + documentation => 'Utility object to collect target files. Overrides '. + 'attribute in Archivable Role.', + lazy => 1, + builder => '_build_collector', + init_arg => undef, +); + +our $VERSION = ''; + + +sub _build_collector { + # overrides build method in Archivable Role + my ($self) = @_; + my $collector = WTSI::NPG::Genotyping::Fluidigm::Collector->new( + root => abs_path($self->target_dir), + depth => 2, + regex => $self->dir_regex, + irods_root => $self->irods_root, + ); + return $collector; +} + + +=head2 find_directories_to_archive + + Args : None + + Example : $dirs = $archiver->find_directories_to_archive() + Description: Return an Array containing directories which are candidates + for archiving. Overrides method in the Archivable Role. + Returntype : Array[Str] + +=cut + +sub find_directories_to_archive { + my ($self) = @_; + my $now = DateTime->now; + my $threshold = DateTime->from_epoch + (epoch => $now->epoch)->subtract(days => $self->days_ago); + return $self->collector->collect_archivable_dirs($threshold->epoch); +} + +__PACKAGE__->meta->make_immutable; + +no Moose; + +1; + +__END__ + +=head1 NAME + +WTSI::NPG:::Genotyping::Fluidigm::Archiver + +=head1 DESCRIPTION + +Class to archive Fluidigm data in gzipped tar files. + +Find candidate files/directories for archiving; check their last +modification time and iRODS publication status; and, if they meet given +criteria, store them in gzipped tar files. + +=head1 AUTHOR + +Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2016 Genome Research Limited. All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/AssayResultSet.pm b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/AssayResultSet.pm index 5b3e02dea..155c756d7 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/AssayResultSet.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/AssayResultSet.pm @@ -213,6 +213,7 @@ sub _parse_assay_results { my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Collector.pm b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Collector.pm new file mode 100644 index 000000000..d840177ad --- /dev/null +++ b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Collector.pm @@ -0,0 +1,215 @@ +use utf8; + +package WTSI::NPG::Genotyping::Fluidigm::Collector; + +use DateTime; +use File::Temp qw/tempdir/; +use WTSI::NPG::iRODS; +use WTSI::NPG::Utilities qw/md5sum/; + +use Moose; + +extends 'WTSI::NPG::Utilities::Collector'; + +our $VERSION = ''; + +has 'irods' => + (is => 'ro', + isa => 'WTSI::NPG::iRODS', + required => 1, + default => sub { + return WTSI::NPG::iRODS->new; + }); + +has 'irods_root' => + (is => 'ro', + isa => 'Str', + required => 1, + documentation => 'Root collection path in iRODS, eg. /seq' + ); + + +=head2 collect_archivable_dirs + + Arg [1] : latest modification time to archive, in seconds since the epoch + + Example : @dirs = $collector->collect_archivable_dirs(); + Description: Return an array of Fluidigm directory names which are ready + for archiving. + Returntype : array of strings (dir names) + +=cut + +sub collect_archivable_dirs { + my ($self, $threshold) = @_; + return $self->collect_dirs($self->test_archivable($threshold)); +} + + +=head2 test_archivable + + Arg [1] : latest modification time to archive, in seconds since + the epoch + + Example : my $ok = $collector->test_archivable($threshold); + + Description: The return value will be used as a test, to determine if + a directory will be archived. So, the return value is a + reference to a function which itself returns a Boolean + value. + + Returntype : Coderef + +=cut + +sub test_archivable { + my ($self, $threshold) = @_; + my $time = DateTime->from_epoch(epoch => $threshold); + my $time_str = $time->strftime("%Y-%m-%d_%H:%M:%S"); + + return sub { + my ($path) = @_; + if ($self->last_modified_before($threshold)->($path)) { + $self->debug("Last modification time of $path was earlier than ", + $time_str, + " , checking iRODS publication status"); + return $self->irods_publication_ok($path); + } else { + $self->debug("Last modification time of $path was later than ", + $time_str, + ", directory will not be archived"); + return 0; + } + } +} + + +=head2 irods_publication_ok + + Arg [1] : (Str) Path of Fluidigm results directory to evaluate + Example : my $pub_ok = irods_publication_ok($params); + Description: Check if the given Fluidigm results directory has been + published to iRODS. Want to verify that local and iRODS + CSV files are congruent: All files are present, with the + same plate, well (if any) and md5 checksum. + Returntype : Bool + +=cut + +sub irods_publication_ok { + my ($self, $dir) = @_; + my $resultset = WTSI::NPG::Genotyping::Fluidigm::ResultSet->new + (directory => $dir); + my $export_file = WTSI::NPG::Genotyping::Fluidigm::ExportFile->new + (file_name => $resultset->export_file); + my $publication_ok = 1; + # find CSV results for given Fluidigm plate in iRODS + my @results = $self->irods->find_objects_by_meta( + $self->irods_root, + [ fluidigm_plate => $export_file->fluidigm_barcode ], + [ type => 'csv' ], + ); + my $result_total = scalar(@results); + if ($result_total == 0) { + $self->warn("No results found in iRODS for directory '", $dir, "'"); + $publication_ok = 0; + } else { + # expect one file for each well address, plus the original export file + my $expected = scalar(@{$export_file->addresses}) + 1; + $self->debug("Checking publication status for ", $result_total, + " results from iRODS"); + if ($result_total != $expected) { + $self->error("File totals for plate '", + $export_file->fluidigm_barcode, + "' do not match; expected ", $expected, + " results in iRODS, found ", $result_total); + $publication_ok = 0; + } + # check well (if any) and md5 for each iRODS result found + my %md5_by_address = $self->_get_md5_by_address($export_file); + foreach my $result (@results) { + # look at address and md5 in iRODS metadata + my ($address, $irods_md5); + foreach my $avu ($self->irods->get_object_meta($result)) { + my $attribute = $avu->{'attribute'}; + if ($attribute eq 'fluidigm_well') { + $address = $avu->{'value'}; + } elsif ($attribute eq 'md5') { + $irods_md5 = $avu->{'value'}; + } + } + if (defined($address)) { + if ($irods_md5 ne $md5_by_address{$address}) { + $self->error + ("Local and iRODS checksums do not match for plate '", + $export_file->fluidigm_barcode, "' well '", + $address, "'"); + $publication_ok = 0; + } + } elsif (md5sum($resultset->export_file) ne $irods_md5) { + $self->error + ("Local and iRODS checksums do not match for plate '", + $export_file->fluidigm_barcode, "export file '", + $export_file->file_name, "'"); + $publication_ok = 0; + } + } + } + $self->debug("iRODS publication status for '", $dir, "': ", + $publication_ok); + return $publication_ok; +} + +sub _get_md5_by_address { + my ($self, $export_file) = @_; + my $tmpdir = tempdir("fluidigm_samples_XXXXXX", CLEANUP => 1); + my %md5_by_address; + foreach my $address (@{$export_file->addresses}) { + my $filename = $export_file->fluidigm_filename($address); + my $file = File::Spec->catfile($tmpdir, $filename); + my $records = $export_file->write_assay_result_data($address, $file); + my $md5 = md5sum($file); + $md5_by_address{$address} = $md5; + $self->debug("Wrote $records records for address $address into ", + "temp file '", $file, "', with md5 '", $md5, "'"); + } + return %md5_by_address; +} + + +__PACKAGE__->meta->make_immutable; + +no Moose; + +1; + +__END__ + +=head1 NAME + +WTSI::NPG:::Genotyping::Fluidigm::Collector + +=head1 DESCRIPTION + +Subclass of WTSI::NPG::Utilities::Collector, to collect Fluidigm data +for archiving. Includes method to verify iRODS publication. + +=head1 AUTHOR + +Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2016 Genome Research Limited. All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/ExportFile.pm b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/ExportFile.pm index a085be2bf..b692b5ade 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/ExportFile.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/ExportFile.pm @@ -124,6 +124,7 @@ sub write_assay_result_data { my $records_written = 0; my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); @@ -169,6 +170,24 @@ sub fluidigm_metadata { [$FLUIDIGM_PLATE_WELL => $address]); } +=head2 fluidigm_filename + + Arg [1] : Sample address i.e. S01, S02 etc. + + Example : $export->fluidigm_filename('S01') + Description: Return the name for a CSV file, to contain data for the + given address. + Returntype : Str + +=cut + +sub fluidigm_filename { + my ($self, $address) = @_; + + return sprintf("%s_%s.csv", $address, $self->fluidigm_barcode); +} + + =head2 fluidigm_fingerprint Arg [1] : Sample address i.e. S01, S02 etc. diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Publisher.pm b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Publisher.pm index 7adc62a5b..2633f940f 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Publisher.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Fluidigm/Publisher.pm @@ -172,8 +172,8 @@ sub publish_samples { foreach my $address (@addresses) { try { - my $file = sprintf("%s/%s_%s.csv", $tmpdir, $address, - $export_file->fluidigm_barcode); + my $filename = $export_file->fluidigm_filename($address); + my $file = File::Spec->catfile($tmpdir, $filename); $current_file = $file; my $record_count = $export_file->write_assay_result_data($address, $file); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Infinium/AnalysisPublisher.pm b/src/perl/lib/WTSI/NPG/Genotyping/Infinium/AnalysisPublisher.pm index dd43c6518..131d94cd1 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Infinium/AnalysisPublisher.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Infinium/AnalysisPublisher.pm @@ -113,7 +113,7 @@ sub publish { unless (@project_titles) { $self->logcroak("The analysis database contained no data for run '", - $self->run_name, "'") + $self->run_name, "'"); } my $analysis_coll; diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Infinium/Publisher.pm b/src/perl/lib/WTSI/NPG/Genotyping/Infinium/Publisher.pm index fe7bb5c71..d2565ece4 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Infinium/Publisher.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Infinium/Publisher.pm @@ -159,8 +159,7 @@ sub _publish_file { my $publisher = WTSI::NPG::Publisher->new(irods => $self->irods, - accountee_uid => $self->accountee_uid, - logger => $self->logger); + accountee_uid => $self->accountee_uid); my @meta = $self->make_infinium_metadata($if_sample); my @fingerprint = $self->infinium_fingerprint(@meta); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/Identity.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Check.pm similarity index 95% rename from src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/Identity.pm rename to src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Check.pm index 0c9959f30..b6faeac40 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/Identity.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Check.pm @@ -1,5 +1,5 @@ -package WTSI::NPG::Genotyping::QC_wip::Check::Identity; +package WTSI::NPG::Genotyping::QC::BayesianIdentity::Check; use JSON; use Moose; @@ -9,7 +9,7 @@ use plink_binary; use WTSI::NPG::Genotyping::Call; use WTSI::NPG::Genotyping::SNP; -use WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric; use WTSI::NPG::Genotyping::Types qw(:all); @@ -104,7 +104,7 @@ has 'production_calls' => Arg [1] : HashRef[ArrayRef[WTSI::NPG::Genotyping::Call]] - Returntype : ArrayRef[WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian] + Returntype : ArrayRef[WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric] Description : Find identity results for all samples. Input is a hash of arrays of Call objects, indexed by sample name. @@ -127,9 +127,7 @@ sub find_identity { my $qc_calls = $qc_calls_by_sample->{$sample_name}; if (defined($qc_calls)) { my %args = %{$self->_get_sample_args($sample_name, $qc_calls)}; - my $result = - WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> - new(%args); + my $result = WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric->new(%args); push @id_results, $result; } else { $missing{$sample_name} = 1; @@ -142,9 +140,7 @@ sub find_identity { foreach my $sample_name (@{$self->sample_names}) { if ($missing{$sample_name}) { my $args = $self->_get_sample_args($sample_name); - my $result = - WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> - new($args); + my $result = WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric->new($args); push @id_results, $result; } } @@ -155,7 +151,7 @@ sub find_identity { =head2 pairwise_swap_check Arg [1] : ArrayRef[ - WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian + WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric ] Arg [2] : Maybe[Num] @@ -521,9 +517,10 @@ sub _from_illumina_snp_name { return $body; } -# get failed WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentity results -# only returns results confirmed as failed -# 'missing' results have undefined pass/fail status +# - get failed WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleIdentity +# results +# - only returns results confirmed as failed +# - 'missing' results have undefined pass/fail status sub _get_failed_results { my ($self, $id_results) = @_; @@ -534,7 +531,7 @@ sub _get_failed_results { } sub _get_sample_args { - # get arguments to construct a SampleIdentityBayesian object + # get arguments to construct a SampleMetric object # QC calls may be omitted, eg. for a sample missing from QC data my ($self, $sample_name, $qc_calls) = @_; $qc_calls ||= []; diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesian.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetric.pm similarity index 99% rename from src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesian.pm rename to src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetric.pm index 15ed2befa..d61533cb4 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesian.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetric.pm @@ -1,4 +1,4 @@ -package WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian; +package WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric; # class to do Bayesian identity computation for a single sample # Similar to older SampleIdentity class, but metrics are Bayesian probabilities, not simple match/mismatch rates @@ -227,7 +227,7 @@ sub missing { =head2 swap_metric - Arg [1] : WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian + Arg [1] : WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric Example : my $swap = $si->swap_metric($other_si) Description: Evaluate the swap metric on two sample identity objects, @@ -331,7 +331,7 @@ sub to_csv { push @csv_fields, @callset_fields; } } - my $csv = Text::CSV->new(); + my $csv = Text::CSV->new({ binary => 1 }); $csv->combine(@csv_fields); return $csv->string; } diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulator.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Simulator.pm similarity index 96% rename from src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulator.pm rename to src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Simulator.pm index 9480c8a8d..f662a2a0a 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulator.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/QC/BayesianIdentity/Simulator.pm @@ -1,12 +1,12 @@ -package WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator; +package WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator; use Moose; use MooseX::Types::Moose qw(Int); use WTSI::NPG::Genotyping::Call; -use WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric; use WTSI::NPG::Genotyping::SNPSet; use WTSI::NPG::Genotyping::Types qw(:all); @@ -27,7 +27,7 @@ has 'snpset' => (is => 'ro', isa => 'WTSI::NPG::Genotyping::SNPSet', required => 1, - documentation => 'SNPSet for creation of SampleIdentityBayesian '. + documentation => 'SNPSet for creation of SampleMetric '. 'objects. Must include all SNPs in the "calls" attribute.'); # optional argument @@ -39,8 +39,8 @@ has 'pass_threshold' => 'sample pass'); # optional params for identity calculation -# passed to SampleIdentityBayesian constructor -# no default values; instead use defaults of SampleIdentityBayesian class +# passed to SampleMetric constructor +# no default values; instead use defaults of SampleMetric class has 'equivalent_calls_probability' => # ECP (is => 'ro', @@ -301,7 +301,7 @@ sub find_identity_vary_xer { } sub _build_identity_params { - # build a generic params hash for SampleIdentityBayesian construction + # build a generic params hash for SampleMetric construction # production_calls and qc_calls are specified for each simulation type my ($self) = @_; my %params; @@ -331,7 +331,7 @@ sub _build_identity_params { sub _find_identity { # 'workhorse' method to evaluate the identity metric with given inputs # $calls = arrayref of Call objects - # $params = hashref of params for SampleIdentityBayesian object creation + # $params = hashref of params for SampleMetric object creation my ($self, $calls, $params, $equivalent, $total, $qc_total, $maf) = @_; $qc_total ||= 1; $maf ||= 0.25; @@ -347,8 +347,7 @@ sub _find_identity { foreach my $key (keys %{$params}) { $args{$key} = $params->{$key}; } - my $sib = WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> - new(\%args); + my $sib = WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric->new(\%args); return $sib->identity; } diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC/Collation.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/Collation.pm deleted file mode 100644 index 67f058dc8..000000000 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC/Collation.pm +++ /dev/null @@ -1,741 +0,0 @@ -# Author: Iain Bancarz, ib5@sanger.ac.uk -# February 2014 - -# Collate QC result outputs into a single JSON summary file -# Apply thresholds to find pass/fail status - -package WTSI::NPG::Genotyping::QC::Collation; - -use strict; -use warnings; -use Carp; -use File::Slurp qw(read_file); -use IO::Uncompress::Gunzip qw($GunzipError); # for duplicate_full.txt.gz -use JSON; -use WTSI::NPG::Genotyping::Database::Pipeline; -use WTSI::NPG::Genotyping::QC::QCPlotShared qw(getDatabaseObject - getPlateLocationsFromPath - meanSd - readQCMetricInputs - readSampleData); -use Exporter; - -our @ISA = qw/Exporter/; -our @EXPORT_OK = qw/collate readMetricThresholds/; - -our $VERSION = ''; - -our $DEFAULT_INI = $ENV{HOME} . "/.npg/genotyping.ini"; - -# metric names -our $CR_NAME = 'call_rate'; -our $HET_NAME = 'heterozygosity'; -our $DUP_NAME = 'duplicate'; -our $ID_NAME = 'identity'; -our $GENDER_NAME = 'gender'; -our $XYD_NAME = 'xydiff'; -our $MAG_NAME = 'magnitude'; -our $LMH_NAME = 'low_maf_het'; -our $HMH_NAME = 'high_maf_het'; -# standard order for metric names -our @METRIC_NAMES = ($ID_NAME, $DUP_NAME, $GENDER_NAME, $CR_NAME, - $HET_NAME, $LMH_NAME, $HMH_NAME, $MAG_NAME, $XYD_NAME); -our @GENDERS = ('Unknown', 'Male', 'Female', 'Not_Available'); -our $DUPLICATE_SUBSETS_KEY = 'SUBSETS'; -our $DUPLICATE_RESULTS_KEY = 'RESULTS'; -our %FILENAMES; # hash for names of input files - -# Collate QC results from various output files into a single data structure, -# write JSON and CSV output files and update pipeline SQLite DB if required. - -# Get additional information for .csv fields from pipeline DB: -# run,project,data_supplier,snpset,supplier_name,rowcol,beadchip_number,sample,include,plate,well,pass - -sub addLocations { - # add plate/well locations to a hash indexed by sample - my %samples = %{ shift() }; - my ($dbPath, $iniPath) = @_; - my %plateLocs = getPlateLocationsFromPath($dbPath, $iniPath); - foreach my $uri (keys %samples) { - my %results = %{$samples{$uri}}; - my $locsRef = $plateLocs{$uri}; - if (defined($locsRef)) { - # samples with unknown location will have dummy values in hash - my ($plate, $addressLabel) = @$locsRef; - $results{'plate'} = $plate; - $results{'address'} = $addressLabel; - $samples{$uri} = \%results; - } else { - # excluded sample has *no* location value - print STDERR "Excluded sample URI $uri is in QC metric data\n"; - } - } - return \%samples; -} - -sub appendNull { - # append 'NA' values to given list - my @array = @{ shift() }; - my $nulls = shift; - for (my $i=0;$i<$nulls;$i++) { - push(@array, 'NA'); - } - return @array; -} - -sub bySampleName { - # comparison function for sorting samples in getSampleInfo - # if in plate_well_id format, sort by id; otherwise use standard sort - if ($a =~ m{[[:alnum:]]+_[[:alnum:]]+_[[:alnum:]]+}msx && - $b =~ m{[[:alnum:]]+_[[:alnum:]]+_[[:alnum:]]+}msx) { - my @termsA = split /_/msx, $a; - my @termsB = split /_/msx, $b; - return $termsA[-1] cmp $termsB[-1]; - } else { - return $a cmp $b; - } -} - -sub dbExcludedSamples { - # find list of excluded sample URIs from database - # use to fill in empty lines for CSV file - my $dbfile = shift; - my $db = getDatabaseObject($dbfile); - my @excluded; - my @samples = $db->sample->all; - foreach my $sample (@samples) { - if (!($sample->include)) { - push @excluded, $sample->uri; - } - } - $db->disconnect(); - return @excluded; -} - -sub dbSampleInfo { - # get general information on analysis run from pipeline database - # return a hash indexed by sample - my $dbfile = shift; - my $db = getDatabaseObject($dbfile); - my %sampleInfo; - my @runs = $db->piperun->all; - foreach my $run (@runs) { - my @root; - my @datasets = $run->datasets->all; - foreach my $dataset (@datasets) { - my @samples = $dataset->samples->all; - @root = ($run->name, $dataset->if_project, - $dataset->datasupplier->name, - $dataset->snpset->name); - # query for rowcol, supplier name, chip no. - foreach my $sample (@samples) { - my @info = ( - $sample->rowcol, - $sample->beadchip, - $sample->supplier_name, - $sample->cohort); - foreach (my $i=0;$i<@info;$i++) { # set null values to "NA" - if ($info[$i] eq "") { $info[$i] = "NA"; } - } - unshift(@info, @root); - $sampleInfo{$sample->uri} = \@info; - } - } - } - $db->disconnect(); - return %sampleInfo; -} - -sub duplicateSubsets { - # Find *connected subsets* of the duplicate pairs: - # if A<->B and B<->C then A~B, B~C and A~C - # where <-> denotes similarity on snp panel greater than some threshold, - # and ~ denotes membership of a connected subset (equivalence class). - # - # The member of a connected subset with the highest call rate is kept; - # others are flagged as QC failures. This is a "quick and dirty" - # substitute for applying a clustering algorithm to find subsets with - # high mutual similarity. It should give acceptable results, but for - # very high duplicate rates, it will fail *more* samples than - # a clustering algorithm would. - # - # Arguments: - Hash of hashes of pairwise similarities - # - Similarity threshold for duplicates - # Return value: list of lists of samples in each subset - my %similarity = %{ shift() }; - my $threshold = shift; - my @samples = keys(%similarity); - # if sample has no neighbours: simple, it is in a subset by itself - # if sample does have neighbours: add to appropriate subset - my @subsets; - foreach my $sample_i (@samples) { - my $added = 0; - SUBSET: for (my $i=0;$i<@subsets;$i++) { - my @subset = @{$subsets[$i]}; - foreach my $sample_j (@subset) { - if ($similarity{$sample_i}{$sample_j} >= $threshold) { - push(@subset, $sample_i); - $subsets[$i] = [ @subset ]; - $added = 1; - last SUBSET; - } - } - } - unless ($added) { push(@subsets, [$sample_i]); } - } - return @subsets; -} - -sub evaluateThresholds { - # apply thresholds, evaluate pass/fail status of each sample/metric pair - # input a sample-major hash of metric values - # return reference to a hash in 'qc_results.json' format (minus plate name and address for each sample) - my ($sampleResultsRef, $thresholdsRef) = @_; - my %results = %{$sampleResultsRef}; - my %thresholds = %{$thresholdsRef}; - my %evaluated = (); - foreach my $sample (keys(%results)) { - my %result = %{$results{$sample}}; - foreach my $metric (keys(%result)) { - if (!defined($thresholds{$metric})) { - croak "No thresholds defined for metric $metric: $!"; - } - my $value = $result{$metric}; - my $pass = metricPass($metric, $value, $thresholds{$metric}); - my @terms = ($pass, ); - if ($metric eq $GENDER_NAME) { push (@terms, @{$value}); } - elsif ($metric eq $DUP_NAME) { push (@terms, @{$value}[0]); } - else { push(@terms, $value); } - $evaluated{$sample}{$metric} = \@terms; - } - } - return \%evaluated; -} - -sub excludedSampleCsv { - # generate CSV lines for samples excluded from pipeline DB - my @sampleNames = @{ shift() }; - my %sampleInfo = %{ shift() }; # generic sample/dataset info - my %metrics = %{ shift() }; - my %excluded = %{ shift() }; - my @lines = (); - foreach my $sample (@sampleNames) { - if (!$excluded{$sample}) { next; } - my @fields = @{$sampleInfo{$sample}}; - push(@fields, $sample); - push(@fields, 'Excluded'); - @fields = appendNull(\@fields, 3); # null plate, well, sample pass - foreach my $name (@METRIC_NAMES) { - if (!$metrics{$name}) { - next; - } elsif ($name eq $GENDER_NAME) { - @fields = appendNull(\@fields, 4); # pass/fail, metric triple - } else { - @fields = appendNull(\@fields, 2); # pass/fail, metric - } - } - push(@lines, join(',', @fields)); - } - return \@lines; -} - -sub findMetricResults { - # find QC results in metric-major order, return a hash reference - # "results" for gender, duplicate, and identity are complex! represent as lists. For other metrics, result is a single float. See methods in write_qc_status.pl - my $inputDir = shift; - my @metricNames = @{ shift() }; - my %allResults; - foreach my $name (@metricNames) { - my $resultsRef; - if ($name eq $CR_NAME) { - $resultsRef = resultsCallRate($inputDir); - } elsif ($name eq $DUP_NAME) { - $resultsRef = resultsDuplicate($inputDir); - } elsif ($name eq $GENDER_NAME) { - $resultsRef = resultsGender($inputDir); - } elsif ($name eq $HET_NAME) { - $resultsRef = resultsHet($inputDir); - } elsif ($name eq $HMH_NAME) { - $resultsRef = resultsHighMafHet($inputDir); - } elsif ($name eq $ID_NAME) { - $resultsRef = resultsIdentity($inputDir); - } elsif ($name eq $LMH_NAME) { - $resultsRef = resultsLowMafHet($inputDir); - } elsif ($name eq $MAG_NAME) { - $resultsRef = resultsMagnitude($inputDir); - } elsif ($name eq $XYD_NAME) { - $resultsRef = resultsXydiff($inputDir); - } else { - croak "Unknown metric name $name for results: $!"; - } - if ($resultsRef) { $allResults{$name} = $resultsRef; } - } - return \%allResults; -} - -sub findThresholds { - # find threshold values, which may depend on mean/sd of metric values - my %metricResults = %{ shift() }; - my %thresholdsConfig = %{ shift() }; - my %thresholds; - my @names = keys(%metricResults); - foreach my $metric (keys(%metricResults)) { - if ($metric eq $HET_NAME || $metric eq $LMH_NAME || $metric eq $HMH_NAME || $metric eq $XYD_NAME) { - # find mean/sd for thresholds - my %resultsBySample = %{$metricResults{$metric}}; - my ($mean, $sd) = meanSd(values(%resultsBySample)); - my $min = $mean - ($thresholdsConfig{$metric}*$sd); - my $max = $mean + ($thresholdsConfig{$metric}*$sd); - $thresholds{$metric} = [$min, $max]; - } elsif ($metric eq $CR_NAME || $metric eq $DUP_NAME || $metric eq $ID_NAME || $metric eq $GENDER_NAME || $metric eq $MAG_NAME ) { - $thresholds{$metric} = $thresholdsConfig{$metric}; - } else { - croak "Unknown metric name $metric for thresholds: $!"; - } - } - return %thresholds; -} - -sub includedSampleCsv { - # generate CSV lines for samples included in pipeline DB - my @sampleNames = @{ shift() }; - my %sampleInfo = %{ shift() }; # generic sample/dataset info - my %passResult = %{ shift() }; # metric pass/fail status and values - my %samplePass = %{ shift() }; # overall pass/fail by sample - my %excluded = %{ shift() }; - my %metrics; - my @lines = (); - foreach my $sample (@sampleNames) { - if ($excluded{$sample}) { next; } - my @fields = @{$sampleInfo{$sample}}; # start with general info - my %result = %{$passResult{$sample}}; - # first obtain: sample include plate well pass - push(@fields, $sample); - push(@fields, 'Included'); - push(@fields, $result{'plate'}); - push(@fields, $result{'address'}); # aka well - if ($samplePass{$sample}) { push(@fields, 'Pass'); } - else { push(@fields, 'Fail'); } - # now add relevant metric values - foreach my $metric (@METRIC_NAMES) { - if (!defined($result{$metric})) { next; } - $metrics{$metric} = 1; - my @metricResult = @{$result{$metric}}; # pass/fail, value(s) - if ($metricResult[0]) { $metricResult[0] = 'Pass'; } - else { $metricResult[0] = 'Fail'; } - if ($metric eq $GENDER_NAME) { # use human-readable gender names - $metricResult[2] = $GENDERS[$metricResult[2]]; - # 'supplied' Plink gender may be -9 or other arbitrary number - my $totalCodes = scalar @GENDERS; - if ($metricResult[3] < 0 || $metricResult[3] >= $totalCodes){ - $metricResult[3] = $totalCodes - 1; # 'not available' - } - $metricResult[3] = $GENDERS[$metricResult[3]]; - } - push (@fields, @metricResult); - } - push(@lines, join(',', @fields)); - } - return (\@lines, \%metrics); -} - -sub metricPass { - # find pass/fail status for given metric, value, and threshold - my ($metric, $value, $threshold) = @_; - my $pass = 0; - if ($metric eq $CR_NAME || $metric eq $MAG_NAME) { - if ($value >= $threshold) { $pass = 1; } - } elsif ($metric eq $DUP_NAME) { - my ($similarity, $keep) = @{$value}; - if ($similarity < $threshold || $keep) { $pass = 1; } - } elsif ($metric eq $GENDER_NAME) { - my ($xhet, $inferred, $supplied) = @{$value}; - if ($inferred==$supplied) { $pass = 1; } - } elsif ($metric eq $HET_NAME || $metric eq $LMH_NAME || - $metric eq $HMH_NAME || $metric eq $XYD_NAME) { - my ($min, $max) = @{$threshold}; - if ($value >= $min && $value <= $max) { $pass = 1; } - } elsif ($metric eq $ID_NAME) { - if ($value eq 'NA' || $value > $threshold) { $pass = 1; } - } else { - croak "Unknown metric name: $!"; - } - return $pass; -} - -sub passFailBySample { - # evaluate results by metric and find overall pass/fail for each sample - my %results = %{ shift() }; - my $crHetPath = shift(); # required to find duplicates pass/fail - my %passFail = (); - foreach my $sample (keys(%results)) { - my %result = %{$results{$sample}}; - my $samplePass = 1; - foreach my $metric (@METRIC_NAMES) { - if (!defined($result{$metric})) { next; } - my @values = @{$result{$metric}}; - my $pass = shift @values; - if (!$pass) { $samplePass = 0; last; } - } - $passFail{$sample} = $samplePass; - } - return %passFail; -} - -sub processDuplicates { - # pre-processing of duplicate metric with given threshold - # partition samples into subsets; sample in subset with highest CR passes - # want to write partitioning and pass/fail status to file - # then read file for final metric/threshold collation - my $inputDir = shift; - my $threshold = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'duplicate'}; - if (!(-e $inPath)) { - croak "Input path for duplicates \"$inPath\" does not exist: $!"; - } - my ($simRef, $maxRef) = readDuplicates($inPath); - my @subsets = duplicateSubsets($simRef, $threshold); - my %max = %{$maxRef}; - # read call rates and find keep/discard status - my %cr = %{resultsCallRate($inputDir)}; - my %results; - foreach my $subsetRef (@subsets) { - my $maxCR = 0; - my @subset = @{$subsetRef}; - # first pass -- find highest CR - foreach my $sample (@subset) { - if ($cr{$sample} > $maxCR) { $maxCR = $cr{$sample}; } - } - # second pass -- record sample status - # may keep more than one sample if there is a tie for greatest CR - foreach my $sample (@subset) { - my $keep = 0; - if ($cr{$sample} eq $maxCR) { $keep = 1; } - $results{$sample} = [$max{$sample}, $keep]; - } - } - my %output; - $output{$DUPLICATE_SUBSETS_KEY} = \@subsets; - $output{$DUPLICATE_RESULTS_KEY} = \%results; - my $outPath = $inputDir.'/'.$FILENAMES{'duplicate_subsets'}; - open my $out, ">", $outPath || croak "Cannot open output '$outPath'"; - print $out to_json(\%output); - close $out || croak "Cannot close output '$outPath'"; -} - -sub readDuplicates { - # read pairwise similarities for duplicate check from gzipped file - # also find maximum pairwise similarity for each sample - my $inPath = shift; - my (%similarity, %max); - my $z = new IO::Uncompress::Gunzip $inPath || - croak "gunzip failed: $GunzipError\n"; - my $firstLine = 1; - while (<$z>) { - if ($firstLine) { $firstLine = 0; next; } # skip headers - chomp; - my @words = split; - my @samples = ($words[1], $words[2]); - my $sim = $words[3]; # similarity on SNP panel - $similarity{$samples[0]}{$samples[1]} = $sim; - $similarity{$samples[1]}{$samples[0]} = $sim; - } - $z->close(); - # find max pairwise similarity for each sample - foreach my $sample_i (keys(%similarity)) { - my $maxSim = 0; - foreach my $sample_j (keys(%similarity)) { - if ($sample_i eq $sample_j) { next; } - my $sim = $similarity{$sample_i}{$sample_j}; - if ($sim > $maxSim) { $maxSim = $sim; } - } - $max{$sample_i} = $maxSim; - } - return (\%similarity, \%max); -} - -sub readMetricThresholds { - # exportable convenience method to read metric thresholds from JSON config - my $configPath = shift; - my %config = %{decode_json(read_file($configPath))}; - my %thresholds = %{$config{'Metrics_thresholds'}}; - return \%thresholds; -} - -sub resultsCallRate { - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'call_rate'}; - if (!(-e $inPath)) { - croak "Input path for call rate \"$inPath\" does not exist: $!"; - } - my $index = 1; - return resultsSpaceDelimited($inPath, $index); -} - -sub resultsDuplicate { - # read pre-processed values for duplicate metric - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'duplicate_subsets'}; - if (!(-e $inPath)) { - croak "Input path for duplicates \"$inPath\" does not exist: $!"; - } - open my $in, "<", $inPath || croak "Cannot open input '$inPath'"; - my $input = <$in>; - close $in || croak "Cannot close input '$inPath'"; - my %duplicateData = %{ from_json($input) }; - my $resultsRef = $duplicateData{$DUPLICATE_RESULTS_KEY}; - return $resultsRef; -} - -sub resultsGender { - # read gender results from sample_xhet_gender.txt - # 'metric value' is concatenation of inferred, supplied gender codes - # $threshold not used - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'gender'}; - if (!(-e $inPath)) { - croak "Input path for gender \"$inPath\" does not exist: $!"; - } - my @data = WTSI::NPG::Genotyping::QC::QCPlotShared::readSampleData($inPath, 1); # skip header on line 0 - my %results; - foreach my $ref (@data) { - my ($sample, $xhet, $inferred, $supplied) = @$ref; - $results{$sample} = [$xhet, $inferred, $supplied]; - } - return \%results; -} - -sub resultsHet { - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'heterozygosity'}; - if (!(-e $inPath)) { - croak "Input path for heterozygosity \"$inPath\" does not exist: $!"; - } - my $index = 2; - return resultsSpaceDelimited($inPath, $index); -} - -sub resultsHighMafHet { - my $inputDir = shift; - return resultsMafHet($inputDir, 1); -} - -sub resultsIdentity { - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'identity'}; - my %data = %{decode_json(read_file($inPath))}; - return $data{'results'}; -} - - -sub resultsLowMafHet { - my $inputDir = shift; - return resultsMafHet($inputDir, 0); -} - -sub resultsMafHet { - # read JSON file output by Plinktools het_by_maf.py - my $inputDir = shift; - my $high = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'het_by_maf'}; - if (!(-r $inPath)) { - carp "Omitting MAF heterozygosity; cannot read input \"$inPath\": $!"; - return 0; - } - my %data = %{decode_json(read_file($inPath))}; - my %results; - foreach my $sample (keys(%data)) { - # TODO modify output format of het_by_maf.py - if ($high) { $results{$sample} = $data{$sample}{'high_maf_het'}[1]; } - else { $results{$sample} = $data{$sample}{'low_maf_het'}[1]; } - } - return \%results; -} - -sub resultsMagnitude { - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'magnitude'}; - if (!(-e $inPath)) { - carp "Omitting magnitude; input \"$inPath\" does not exist: $!"; - return 0; # magnitude of intensity is optional - } - my $index = 1; - return resultsSpaceDelimited($inPath, $index); -} - -sub resultsSpaceDelimited { - # read metric results from a space-delimited file () - my $inPath = shift; - my $index = shift; - my @data = readSampleData($inPath); - my %results; - foreach my $ref (@data) { - my @fields = @{$ref}; - my $uri = $fields[0]; - my $metric = $fields[$index]; - $results{$uri} = $metric; - } - return \%results; -} - -sub resultsXydiff { - my $inputDir = shift; - my $inPath = $inputDir.'/'.$FILENAMES{'xydiff'}; - if (!(-e $inPath)) { - carp "Omitting xydiff; input \"$inPath\" does not exist: $!"; - return 0; - } - my $index = 1; - return resultsSpaceDelimited($inPath, $index); -} - -sub transposeResults { - # convert results from metric-major to sample-major ordering - my %metricResults = %{ shift() }; - my %sampleResults = (); - foreach my $metric (keys(%metricResults)) { - my %resultsBySample = %{$metricResults{$metric}}; - foreach my $sample (keys(%resultsBySample)) { - my $resultRef = $resultsBySample{$sample}; - $sampleResults{$sample}{$metric} = $resultRef; - } - } - return \%sampleResults; -} - -sub updateDatabase { - # update pipeline db with pass/fail of each sample - my $dbPath = shift; - my %samplePass = %{ shift() }; - # samples which were previously excluded should *remain* excluded - my $db = getDatabaseObject($dbPath); # uses default .ini path - my @samples = $db->sample->all; - $db->in_transaction(sub { - foreach my $sample (@samples) { - my $uri = $sample->uri; - if (!($samplePass{$uri})) { - $sample->update({'include' => 0}); - } - } - }); - $db->disconnect(); -} - -sub writeCsv { - # write a .csv file summarizing metrics and pass/fail status - my $csvPath = shift; - my %sampleInfo = %{ shift() }; # generic sample/dataset info - my @excluded = @{ shift() }; # samples excluded in DB - my %passResult = %{ shift() }; # metric pass/fail status and values - my %samplePass = %{ shift() }; # overall pass/fail by sample - my %excluded; - foreach my $sample (@excluded) { $excluded{$sample} = 1; } - my @lines = (); - my @sampleNames = keys(%sampleInfo); - @sampleNames = sort bySampleName @sampleNames; - my ($linesRef, $metricsRef); - # first pass; append lines for samples included in pipeline DB - ($linesRef, $metricsRef) = includedSampleCsv(\@sampleNames, \%sampleInfo, - \%passResult, \%samplePass, - \%excluded); - push(@lines, @{$linesRef}); - # second pass; append dummy lines for excluded samples - $linesRef = excludedSampleCsv(\@sampleNames, \%sampleInfo, - $metricsRef, \%excluded); - push(@lines, @{$linesRef}); - my %metrics = %{$metricsRef}; - # use %metrics to construct appropriate CSV header - my @headers = qw/run project data_supplier snpset rowcol beadchip_number - supplier_name cohort sample include plate well pass/; - foreach my $name (@METRIC_NAMES) { - my @suffixes; - if (!$metrics{$name}) { - next; - } elsif ($name eq $GENDER_NAME) { - @suffixes = qw/pass xhet inferred supplied/; - } else { - @suffixes = qw/pass value/; - } - foreach my $suffix (@suffixes) { push(@headers, $name.'_'.$suffix); } - } - unshift(@lines, join(',', @headers)); - # write results to file - open my $out, ">", $csvPath || croak "Cannot open output $csvPath: $!"; - foreach my $line (@lines) { print $out $line."\n"; } - close $out || croak "Cannot close output $csvPath: $!"; -} - -sub writeJson { - # open a file, and write the given reference in JSON format - my ($outPath, $dataRef) = @_; - my $resultString = encode_json($dataRef); - open my $out, ">", $outPath || - croak "Cannot open output path $outPath: $!"; - print $out $resultString; - close($out) || croak "Cannot close output path $outPath: $!";; - return 1; -} - -sub collate { - # main method to collate results and write outputs - # $metricsRef is an optional reference to an array of metric names; use to specify a subset of metrics for evaluation - my ($inputDir, $configPath, $thresholdPath, $dbPath, $iniPath, - $statusJson, $metricsJson, $csvPath, $exclude, $metricsRef, - $verbose) = @_; - my (%config, %thresholdConfig, @metricNames); - if ($verbose) { print STDERR "Started collating QC results.\n"; } - %thresholdConfig = %{readMetricThresholds($thresholdPath)}; - if ($metricsRef) { - @metricNames = @{$metricsRef}; - foreach my $name (@metricNames) { - if (!defined($thresholdConfig{$name})) { - croak "No threshold defined for metric $name: $!"; - } - } - } - else { - @metricNames = keys(%thresholdConfig); - } - %config = %{decode_json(read_file($configPath))}; - %FILENAMES = %{$config{'collation_names'}}; - - # 0) reprocess duplicate results for given threshold (if any) - if (defined($thresholdConfig{$DUP_NAME})) { - processDuplicates($inputDir, $thresholdConfig{$DUP_NAME}); - } - - # 1) find metric values (and write to file if required) - my $metricResultsRef = findMetricResults($inputDir, \@metricNames); - my $sampleResultsRef = transposeResults($metricResultsRef); - if ($verbose) { print "Found metric values.\n"; } - if ($metricsJson) { writeJson($metricsJson, $sampleResultsRef); } - if ($statusJson || $csvPath || $exclude) { - # if output options require evaluation of thresholds - # 2) apply filters to find pass/fail status - my %thresholds = findThresholds($metricResultsRef, \%thresholdConfig); - my $passResultRef = evaluateThresholds($sampleResultsRef, - \%thresholds); - if ($verbose) { print "Evaluated pass/fail status.\n"; } - - # 3) add location info and write JSON status file - $passResultRef = addLocations($passResultRef, $dbPath, $iniPath); - writeJson($statusJson, $passResultRef); - if ($verbose) { print "Wrote status JSON file $statusJson.\n"; } - - # 4) write CSV (if required) - my %samplePass = passFailBySample($passResultRef); - if ($csvPath) { - my %sampleInfo = dbSampleInfo($dbPath); - my @excluded = dbExcludedSamples($dbPath); - writeCsv($csvPath, \%sampleInfo, \@excluded, $passResultRef, - \%samplePass); - if ($verbose) { print "Wrote CSV $csvPath.\n"; } - } - - # 5) exclude failing samples in pipeline DB (if required) - if ($exclude) { updateDatabase($dbPath, \%samplePass); } - if ($verbose) { print "Updated pipeline DB $dbPath.\n"; } - } -} - -1; diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC/Collator.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/Collator.pm new file mode 100644 index 000000000..013876238 --- /dev/null +++ b/src/perl/lib/WTSI/NPG/Genotyping/QC/Collator.pm @@ -0,0 +1,1138 @@ + +package WTSI::NPG::Genotyping::QC::Collator; + +use strict; +use warnings; +use File::Slurp qw(read_file); +use IO::Uncompress::Gunzip qw($GunzipError); # for duplicate_full.txt.gz +use JSON; +use Moose; +use Text::CSV; +use WTSI::NPG::Genotyping::Database::Pipeline; +use WTSI::NPG::Genotyping::QC::QCPlotShared qw(meanSd); + +our $VERSION = ''; + +with 'WTSI::DNAP::Utilities::Loggable'; + +# metric names +our $CR_NAME = 'call_rate'; +our $HET_NAME = 'heterozygosity'; +our $DUP_NAME = 'duplicate'; +our $ID_NAME = 'identity'; +our $GENDER_NAME = 'gender'; +our $XYD_NAME = 'xydiff'; +our $MAG_NAME = 'magnitude'; +our $LMH_NAME = 'low_maf_het'; +our $HMH_NAME = 'high_maf_het'; +our @GENDERS = ('Unknown', 'Male', 'Female', 'Not_Available'); +our $DUPLICATE_SUBSETS_KEY = 'SUBSETS'; +our $DUPLICATE_RESULTS_KEY = 'RESULTS'; +our $UNKNOWN_PLATE = "Unknown_plate"; +our $UNKNOWN_ADDRESS = "Unknown_address"; + +###################################################################### +### attributes supplied as init_args ### + +has 'db_path' => + (is => 'ro', + isa => 'Str', + required => 1); + +has 'ini_path' => + (is => 'ro', + isa => 'Str', + required => 1, + default => $ENV{HOME} . "/.npg/genotyping.ini" ); + +has 'input_dir' => + (is => 'ro', + isa => 'Str', + required => 1, + documentation => 'Path to directory containing required input files.' +); + +has 'config_path' => + (is => 'ro', + isa => 'Str', + required => 1, + documentation => 'Path to a JSON file with required parameters.' +); + +###################################################################### +### attributes not in init_args ### + +has 'db' => + (is => 'ro', + isa => 'WTSI::NPG::Genotyping::Database::Pipeline', + lazy => 1, + init_arg => undef, + builder => '_build_db'); + +has 'duplicate_similarity' => + (is => 'ro', + isa => 'HashRef[HashRef]', + lazy => 1, + builder => '_build_duplicate_similarity', + documentation => 'Hash of hashes to record pairwise similarity between '. + 'samples. Keys are sample identifiers, values are similarity '. + 'scores generated by check_duplicates_bed.pl.' +); + +has 'duplicate_subsets' => + (is => 'ro', + isa => 'ArrayRef[ArrayRef]', + lazy => 1, + init_arg => undef, + builder => '_build_duplicate_subsets', + documentation => 'Subsets of samples with mutual similarity above a '. + 'given threshold. The subset member with the highest call rate '. + 'passes the duplicate check; others fail.' +); + +has 'filenames' => + (is => 'ro', + isa => 'HashRef', + lazy => 1, + init_arg => undef, + builder => '_build_filenames', + documentation => 'Files used for input to each metric.' +); + +has 'metric_names' => + (is => 'ro', + isa => 'ArrayRef', + lazy => 1, + init_arg => undef, + builder => '_build_metric_names', +); + +has 'metric_results' => + (is => 'ro', + isa => 'HashRef', + lazy => 1, + init_arg => undef, + builder => '_build_metric_results', + documentation => 'For each metric, record a string (for a single '. + 'value) or ArrayRef (for multiple values) to '. + 'represent the metric outcome.' +); + +has 'pass_fail_details' => + (is => 'ro', + isa => 'HashRef[HashRef]', + lazy => 1, + init_arg => undef, + builder => '_build_pass_fail_details', + documentation => 'Pass/fail status for each sample/metric combination, '. + 'indexed by sample and metric', +); + +has 'pass_fail_summary' => + (is => 'ro', + isa => 'HashRef[Bool]', + lazy => 1, + init_arg => undef, + builder => '_build_pass_fail_summary', + documentation => 'Overall pass/fail status for each sample' +); + +has 'thresholds' => + (is => 'ro', + isa => 'HashRef', + lazy => 1, + init_arg => undef, + builder => '_build_thresholds', + documentation => 'Actual thresholds to determine pass/fail status, '. + 'which may depend on metric values (eg. if defined in terms of '. + 'standard deviations from the mean).'); + +has 'threshold_parameters' => + (is => 'ro', + isa => 'HashRef', + lazy => 1, + init_arg => undef, + builder => '_build_threshold_parameters', + documentation => 'Parameters to determine pass/fail thresholds for '. + 'each metric.' +); + +sub BUILD { + my ($self, ) = @_; + + if (! -e $self->db_path) { + $self->logcroak("Database path '", $self->db_path, + "' does not exist"); + } + if (! -e $self->ini_path) { + $self->logcroak("INI path '", $self->ini_path, "' does not exist"); + } + if (! -e $self->config_path) { + $self->logcroak("Config path '", $self->config_path, + "' does not exist"); + } + if (! -e $self->input_dir) { + $self->logcroak("Input directory '", $self->input_dir, + "' does not exist"); + } + if (! -d $self->input_dir) { + $self->logcroak("Input directory path '", $self->input_dir, + "' is not a directory"); + } + + my $names = $self->metric_names; # force checks in _build_metric_names + $self->info("Found configuration for ", scalar @{$names}, " metrics in ", + $self->config_path); +} + +=head2 excludeFailedSamples + + Arg [1] : None + Example : $collator->excludeFailedSamples(); + Description: Update the pipeline database attribute. If any samples have + failed QC, set their 'include' value to false. + + Samples which have not failed QC are unaffected. Therefore, + samples which were excluded before this function was called + will remain excluded, regardless of their QC status. + + Returntype : Result of database disconnection + +=cut + +sub excludeFailedSamples { + my ($self, ) = @_; + my %samplePass = %{$self->pass_fail_summary}; + $self->db->connect(RaiseError => 1, + on_connect_do => 'PRAGMA foreign_keys = ON'); + my @samples = $self->db->sample->all; + $self->db->in_transaction(sub { + foreach my $sample (@samples) { + my $uri = $sample->uri; + if (!($samplePass{$uri})) { + $sample->update({'include' => 0}); + } + } + }); + $self->db->disconnect(); +} + + +=head2 hasDuplicatesThreshold + + Arg [1] : None + Example : $collator->hasDuplicatesThreshold(); + Description: Return true if a threshold is defined for the duplicates + metric, false otherwise. Used for checking if it is valid + to call the writeDuplicates() function. + Returntype : Boolean + +=cut + +sub hasDuplicatesThreshold { + # check if a threshold is defined for the duplicate metric + my ($self, ) = @_; + if (defined $self->thresholds->{$DUP_NAME}) { + return 1; + } else { + return 0; + } +} + + +=head2 writeCsv + + Arg [1] : [Str] Output path + Example : $collator->writeCsv($csvPath); + Description: Write a summary of QC outcomes, including plate/well + location and pass/fail status for each sample and metric, + in CSV format to the given path. Returns true on a successful + exit. + + Writes metric values only for samples with a true value of + 'include' in the SQLite database. Excluded samples are + instead output with dummy values. + + Returntype : Boolean + +=cut + +sub writeCsv { + my ($self, $outPath) = @_; + my %passResult = %{$self->_add_locations($self->pass_fail_details)}; + my %samplePass = %{$self->pass_fail_summary}; + my %sampleInfo = $self->_db_sample_info(); # generic sample/dataset info + my @excluded = $self->_db_excluded_samples(); # samples excluded in DB + my %excluded; + foreach my $sample (@excluded) { $excluded{$sample} = 1; } + my @lines = (); + + my @sampleNames = keys(%sampleInfo); + my $bySampleName = $self->_getBySampleName(); + @sampleNames = sort $bySampleName @sampleNames; + + my ($linesRef, $metricsRef); + # first pass; append lines for samples included in pipeline DB + ($linesRef, $metricsRef) = + $self->_included_sample_csv(\@sampleNames, \%sampleInfo, + \%passResult, \%samplePass, \%excluded); + push(@lines, @{$linesRef}); + # second pass; append dummy lines for excluded samples + $linesRef = $self->_excluded_sample_csv(\@sampleNames, \%sampleInfo, + $metricsRef, \%excluded); + push(@lines, @{$linesRef}); + my %metrics = %{$metricsRef}; + # use %metrics to construct appropriate CSV header + my @headers = qw/run project data_supplier snpset rowcol beadchip_number + supplier_name cohort sample include plate well pass/; + foreach my $name (@{$self->metric_names}) { + my @suffixes; + if (!$metrics{$name}) { + next; + } elsif ($name eq $GENDER_NAME) { + @suffixes = qw/pass xhet inferred supplied/; + } elsif ($name eq $ID_NAME) { + @suffixes = qw/pass probability concordance/; + } else { + @suffixes = qw/pass value/; + } + foreach my $suffix (@suffixes) { push(@headers, $name.'_'.$suffix); } + } + unshift(@lines, join(',', @headers)); + # write results to file + open my $out, ">", $outPath || + $self->logcroak("Cannot open output '$outPath'"); + foreach my $line (@lines) { print $out $line."\n"; } + close $out || $self->logcroak("Cannot close output '$outPath'"); + return 1; +} + + +=head2 writeDuplicates + + Arg [1] : [Str] Output path + Example : $collator->writeMetricJson($outPath); + Description: Write details of the duplicate metric to the given path in + JSON format. Returns true on a successful exit. Output + includes highly-similar sample subsets used to determine + sample pass/fail status. Returns true on successful exit. + Returntype : Boolean + +=cut + +sub writeDuplicates { + my ($self, $outPath) = @_; + my %output; + if ($self->hasDuplicatesThreshold()) { + $output{$DUPLICATE_SUBSETS_KEY} = $self->duplicate_subsets; + my $results = $self->metric_results->{$DUP_NAME}; + $output{$DUPLICATE_RESULTS_KEY} = $results; + + open my $out, ">", $outPath || + $self->logcroak("Cannot open output '", $outPath, "'"); + print $out to_json(\%output); + close $out || + $self->logcroak("Cannot close output '", $outPath, "'"); + return 1; + } else { + $self->logwarn('No duplicate threshold defined; omitting ', + 'duplicate output'); + return 0; + } +} + + +=head2 writeMetricJson + + Arg [1] : [Str] Output path + Example : $collator->writeMetricJson($outPath); + Description: Write a JSON file containing metric results for each sample, + without evaluating pass/fail status. + Returntype : Boolean + +=cut + +sub writeMetricJson { + my ($self, $outPath) = @_; + my $sampleResultsRef = $self->_transpose_results($self->metric_results); + $self->_write_json($outPath, $sampleResultsRef); + return 1; +} + + +=head2 writePassFailJson + + Arg [1] : [Str] Output path + Example : $collator->writePassFailJson($outPath); + Description: Write a summary of QC outcomes, including plate/well + location and pass/fail status for each sample and metric, + in JSON format to the given path. Returns true on a successful + exit. Output is used by downstream programs to generate QC + plots/reports. + Returntype : Boolean + +=cut + +sub writePassFailJson { + my ($self, $outPath) = @_; + my $passResultRef = $self->_add_locations($self->pass_fail_details); + $self->_write_json($outPath, $passResultRef); + return 1; +} + +#################################################################### +### private methods ### + +sub _add_locations { + # add plate/well locations to a hash indexed by sample + my ($self, $samplesRef) = @_; + my %samples = %{$samplesRef}; + $self->db->connect(RaiseError => 1, + on_connect_do => 'PRAGMA foreign_keys = ON'); + my %plateLocs; + $self->db->in_transaction( + sub { + foreach my $sample ($self->db->sample->all) { + my ($plate, $x, $y) = (0,0,0); + my $uri = $sample->uri; + if (!defined($uri)) { + $self->logwarn("Sample '$sample' has no uri!"); + next; + } elsif ($sample->include == 0) { + next; # excluded sample + } + # assume one well per sample + my $well = ($sample->wells->all)[0]; + if (defined($well)) { + my $address = $well->address; + my $label = $address->label1; + $plate = $well->plate; + my $plateName = $plate->ss_barcode; + $plateLocs{$uri} = [$plateName, $label]; + } else { + $plateLocs{$uri} = [$UNKNOWN_PLATE, $UNKNOWN_ADDRESS]; + } + } + }); + $self->db->disconnect(); + foreach my $uri (keys %samples) { + my %results = %{$samples{$uri}}; + if (defined($plateLocs{$uri})) { + # samples with unknown location will have dummy values in hash + my ($plate, $addressLabel) = @{$plateLocs{$uri}}; + $results{'plate'} = $plateLocs{$uri}->[0]; + $results{'address'} = $plateLocs{$uri}->[1]; + $samples{$uri} = \%results; + } else { + # excluded sample has *no* location value + $self->logwarn('Excluded sample URI ', $uri, + 'is in QC metric data'); + } + } + return \%samples; +} + +sub _append_null { + # append 'NA' values to given list + my ($self, $arrayRef, $nullTotal) = @_; + my @array = @{$arrayRef}; + for (my $i=0;$i<$nullTotal;$i++) { + push(@array, 'NA'); + } + return @array; +} + +sub _build_db { + my ($self,) = @_; + my $db = WTSI::NPG::Genotyping::Database::Pipeline->new + (name => 'pipeline', + inifile => $self->ini_path, + dbfile => $self->db_path); + return $db; +} + +sub _build_duplicate_similarity { + my ($self,) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'duplicate'}; + if (!(-e $inPath)) { + $self->logcroak("Input path for duplicates '", + $inPath, "' does not exist"); + } + my %similarity; + my $z = new IO::Uncompress::Gunzip $inPath || + $self->logcroak("gunzip failed: $GunzipError"); + my $firstLine = 1; + while (<$z>) { + if ($firstLine) { $firstLine = 0; next; } # skip headers + chomp; + my @words = split; + my @samples = ($words[1], $words[2]); + my $sim = $words[3]; # similarity on SNP panel + $similarity{$samples[0]}{$samples[1]} = $sim; + $similarity{$samples[1]}{$samples[0]} = $sim; + } + $z->close(); + return \%similarity; +} + +sub _build_duplicate_subsets { + # Find *connected subsets* of the duplicate pairs: + # if A<->B and B<->C then A~B, B~C and A~C + # where <-> denotes similarity on snp panel greater than some threshold, + # and ~ denotes membership of a connected subset (equivalence class). + # + # The member of a connected subset with the highest call rate is kept; + # others are flagged as QC failures. This is a "quick and dirty" + # substitute for applying a clustering algorithm to find subsets with + # high mutual similarity. It should give acceptable results, but for + # very high duplicate rates, it will fail *more* samples than + # a clustering algorithm would. + # + # Arguments: - Hash of hashes of pairwise similarities + # - Similarity threshold for duplicates + # Return value: list of lists of samples in each subset + my ($self,) = @_; + my %similarity = %{$self->duplicate_similarity}; + my @samples = keys(%similarity); + my $threshold = $self->threshold_parameters->{$DUP_NAME}; + if (! defined $threshold) { + $self->logcroak("Threshold for duplicates metric is not defined"); + } + # if sample has no neighbours: simple, it is in a subset by itself + # if sample does have neighbours: add to appropriate subset + my @subsets; + foreach my $sample_i (@samples) { + my $added = 0; + SUBSET: for (my $i=0;$i<@subsets;$i++) { + my @subset = @{$subsets[$i]}; + foreach my $sample_j (@subset) { + if ($similarity{$sample_i}{$sample_j} >= $threshold) { + push(@subset, $sample_i); + $subsets[$i] = [ @subset ]; + $added = 1; + last SUBSET; + } + } + } + unless ($added) { push(@subsets, [$sample_i]); } + } + return \@subsets; +} + +sub _build_filenames { + my ($self,) = @_; + my $config = decode_json(read_file($self->config_path)); + my $names = $config->{'collation_names'}; + if (! defined $names) { + $self->logcroak("No collation_names entry in QC config file '", + $self->config_path, "'"); + } elsif (scalar keys %{$names} == 0) { + $self->logcroak("Empty collation_names entry in QC config file '", + $self->config_path, "'"); + } + return $names; +} + +sub _build_metric_names { + my ($self,) = @_; + my @metrics; + my @ordered_metrics = ($ID_NAME, $DUP_NAME, $GENDER_NAME, $CR_NAME, + $HET_NAME, $LMH_NAME, $HMH_NAME, $MAG_NAME, + $XYD_NAME); + foreach my $metric (@ordered_metrics) { + if (defined $self->threshold_parameters->{$metric}) { + push @metrics, $metric; + } + } + if (scalar @metrics == 0) { + $self->logcroak("No metrics available. Config file must define ", + "a pass/fail threshold for at least one metric ", + "from: (", join(', ', @ordered_metrics), ")"); + } + return \@metrics; +} + +sub _build_metric_results { + # find QC results in metric-major order, return a hash reference + # "results" for gender, duplicate, and identity are represented as lists; + # others as a single float. See methods in + # WTSI::NPG::Genotyping::QC::Reports. + my ($self,) = @_; + my %allResults; + foreach my $name (@{$self->metric_names}) { + my $resultsRef; + if ($name eq $CR_NAME) { + $resultsRef = $self->_results_call_rate(); + } elsif ($name eq $DUP_NAME) { + $resultsRef = $self->_results_duplicate(); + } elsif ($name eq $GENDER_NAME) { + $resultsRef = $self->_results_gender(); + } elsif ($name eq $HET_NAME) { + $resultsRef = $self->_results_het(); + } elsif ($name eq $HMH_NAME) { + $resultsRef = $self->_results_high_maf_het(); + } elsif ($name eq $ID_NAME) { + $resultsRef = $self->_results_identity(); + } elsif ($name eq $LMH_NAME) { + $resultsRef = $self->_results_low_maf_het(); + } elsif ($name eq $MAG_NAME) { + $resultsRef = $self->_results_magnitude(); + } elsif ($name eq $XYD_NAME) { + $resultsRef = $self->_results_xydiff(); + } else { + $self->logcroak("Unknown metric name $name for results: $!"); + } + if ($resultsRef) { $allResults{$name} = $resultsRef; } + } + return \%allResults; +} + +sub _build_pass_fail_details { + my ($self, ) = @_; + my $results = $self->_transpose_results($self->metric_results); + my %evaluated = (); + foreach my $sample (keys(%{$results})) { + foreach my $metric (keys(%{$results->{$sample}})) { + my $value = $results->{$sample}->{$metric}; + my $threshold = $self->thresholds->{$metric}; + if (!defined($threshold)) { + $self->logcroak("No threshold defined for metric '", + $metric, "'"); + } + my $pass = 0; + if ($metric eq $CR_NAME || $metric eq $MAG_NAME) { + if ($value >= $threshold) { $pass = 1; } + } elsif ($metric eq $DUP_NAME) { + my ($similarity, $keep) = @{$value}; + if ($similarity < $threshold || $keep) { $pass = 1; } + } elsif ($metric eq $GENDER_NAME) { + my ($xhet, $inferred, $supplied) = @{$value}; + if ($inferred==$supplied) { $pass = 1; } + } elsif ($metric eq $HET_NAME || $metric eq $LMH_NAME || + $metric eq $HMH_NAME || $metric eq $XYD_NAME) { + my ($min, $max) = @{$threshold}; + if ($value >= $min && $value <= $max) { $pass = 1; } + } elsif ($metric eq $ID_NAME) { + my ($probability, $concordance) = @{$value}; + if ($value eq 'NA' || $probability > $threshold) { + $pass = 1; + } + } else { + $self->logcroak("Unknown metric name '", $metric, + "' for pass/fail evaluation"); + } + my @terms = ($pass, ); + if ($metric eq $GENDER_NAME || $metric eq $ID_NAME) { + push (@terms, @{$value}); + } elsif ($metric eq $DUP_NAME) { + push (@terms, @{$value}[0]); + } else { + push(@terms, $value); + } + $evaluated{$sample}{$metric} = \@terms; + } + } + return \%evaluated; +} + +sub _build_pass_fail_summary { + my ($self,) = @_; + my %results = %{$self->pass_fail_details}; + my %passFail = (); + foreach my $sample (keys(%results)) { + my %result = %{$results{$sample}}; + my $samplePass = 1; + foreach my $metric (@{$self->metric_names}) { + if (!defined($result{$metric})) { next; } + my @values = @{$result{$metric}}; + my $pass = shift @values; + if (!$pass) { $samplePass = 0; last; } + } + $passFail{$sample} = $samplePass; + } + return \%passFail; +} + +sub _build_threshold_parameters { + my ($self,) = @_; + my $config = decode_json(read_file($self->config_path)); + my $thresholds = $config->{'Metrics_thresholds'}; + return $thresholds; +} + +sub _build_thresholds { + # find threshold values, which may depend on mean/sd of metric values + my ($self, ) = @_; + my %metricResults = %{$self->metric_results}; + my %thresholds; + my @names = keys(%metricResults); + foreach my $metric (keys(%metricResults)) { + if ($metric eq $HET_NAME || $metric eq $LMH_NAME || + $metric eq $HMH_NAME || $metric eq $XYD_NAME) { + # find mean/sd for thresholds + my %resultsBySample = %{$metricResults{$metric}}; + my ($mean, $sd) = meanSd(values(%resultsBySample)); + my $min = $mean - ($self->threshold_parameters->{$metric}*$sd); + my $max = $mean + ($self->threshold_parameters->{$metric}*$sd); + $thresholds{$metric} = [$min, $max]; + } elsif ($metric eq $CR_NAME || $metric eq $DUP_NAME || + $metric eq $ID_NAME || $metric eq $GENDER_NAME || + $metric eq $MAG_NAME ) { + $thresholds{$metric} = $self->threshold_parameters->{$metric}; + } else { + $self->logcroak("Unknown metric name '", $metric, + "' for thresholds"); + } + } + return \%thresholds; + +} + +sub _db_excluded_samples { + # find list of excluded sample URIs from database + # use to fill in empty lines for CSV file + my ($self, ) = @_; + my @excluded; + $self->db->connect(RaiseError => 1, + on_connect_do => 'PRAGMA foreign_keys = ON'); + my @samples = $self->db->sample->all; + foreach my $sample (@samples) { + if (!($sample->include)) { + push @excluded, $sample->uri; + } + } + $self->db->disconnect(); + return @excluded; +} + +sub _db_sample_info { + # get general information on analysis run from pipeline database + # return a hash indexed by sample + my ($self, ) = @_; + my %sampleInfo; + $self->db->connect(RaiseError => 1, + on_connect_do => 'PRAGMA foreign_keys = ON'); + my @runs = $self->db->piperun->all; + foreach my $run (@runs) { + my @root; + my @datasets = $run->datasets->all; + foreach my $dataset (@datasets) { + my @samples = $dataset->samples->all; + @root = ($run->name, $dataset->if_project, + $dataset->datasupplier->name, + $dataset->snpset->name); + # query for rowcol, supplier name, chip no. + foreach my $sample (@samples) { + my @info = ( + $sample->rowcol, + $sample->beadchip, + $sample->supplier_name, + $sample->cohort); + foreach (my $i=0;$i<@info;$i++) { # set null values to "NA" + if ($info[$i] eq "") { $info[$i] = "NA"; } + } + unshift(@info, @root); + $sampleInfo{$sample->uri} = \@info; + } + } + } + $self->db->disconnect(); + return %sampleInfo; +} + +sub _excluded_sample_csv { + # generate CSV lines for samples excluded from pipeline DB + my ($self, $sampleNamesRef, $sampleInfoRef, + $metricsRef, $excludedRef) = @_; + my @sampleNames = @{$sampleNamesRef}; + my %sampleInfo = %{$sampleInfoRef}; # generic sample/dataset info + my %metrics = %{$metricsRef}; + my %excluded = %{$excludedRef}; + my @lines = (); + foreach my $sample (@sampleNames) { + if (!$excluded{$sample}) { next; } + my @fields = @{$sampleInfo{$sample}}; + push(@fields, $sample); + push(@fields, 'Excluded'); + @fields = $self->_append_null(\@fields, 3); # null plate, well, pass + foreach my $name (@{$self->metric_names}) { + if (!$metrics{$name}) { + next; + } elsif ($name eq $GENDER_NAME) { + # pass/fail, metric triple + @fields = $self->_append_null(\@fields, 4); + } elsif ($name eq $ID_NAME) { + # pass/fail, metric double + @fields = $self->_append_null(\@fields, 3); + } else { + # pass/fail, metric + @fields = $self->_append_null(\@fields, 2); + } + } + push(@lines, join(',', @fields)); + } + return \@lines; +} + +sub _getBySampleName { + my ($self,) = @_; + # need a coderef to sort sample identifiers in writeCsv + # wrapped in its own object method to satisfy Moose syntax & PerlCritic + return sub { + # comparison function for sorting samples + # if in plate_well_id format, sort by id; otherwise use standard sort + if ($a =~ m{[[:alnum:]]+_[[:alnum:]]+_[[:alnum:]]+}msx && + $b =~ m{[[:alnum:]]+_[[:alnum:]]+_[[:alnum:]]+}msx) { + my @termsA = split /_/msx, $a; + my @termsB = split /_/msx, $b; + return $termsA[-1] cmp $termsB[-1]; + } else { + return $a cmp $b; + } + } +} + +sub _included_sample_csv { + # generate CSV lines for samples included in pipeline DB + my ($self, $sampleNamesRef, $sampleInfoRef, $passFailDetail, + $passFailSummary, $excluded) = @_; + my @sampleNames = @{ $sampleNamesRef }; + my %sampleInfo = %{ $sampleInfoRef }; # generic sample/dataset info + my %passResult = %{ $passFailDetail }; # metric pass/fail status + my %samplePass = %{ $passFailSummary }; # overall pass/fail by sample + my %excluded = %{ $excluded }; + my %metrics; + my @lines = (); + foreach my $sample (@sampleNames) { + if ($excluded{$sample}) { next; } + my @fields = @{$sampleInfo{$sample}}; # start with general info + my %result = %{$passResult{$sample}}; + # first obtain: sample include plate well pass + push(@fields, $sample); + push(@fields, 'Included'); + push(@fields, $result{'plate'}); + push(@fields, $result{'address'}); # aka well + if ($samplePass{$sample}) { push(@fields, 'Pass'); } + else { push(@fields, 'Fail'); } + # now add relevant metric values + foreach my $metric (@{$self->metric_names}) { + if (!defined($result{$metric})) { next; } + $metrics{$metric} = 1; + my @metricResult = @{$result{$metric}}; # pass/fail, value(s) + if ($metricResult[0]) { $metricResult[0] = 'Pass'; } + else { $metricResult[0] = 'Fail'; } + if ($metric eq $GENDER_NAME) { # use human-readable gender names + $metricResult[2] = $GENDERS[$metricResult[2]]; + # 'supplied' Plink gender may be -9 or other arbitrary number + my $totalCodes = scalar @GENDERS; + if ($metricResult[3] < 0 || $metricResult[3] >= $totalCodes){ + $metricResult[3] = $totalCodes - 1; # 'not available' + } + $metricResult[3] = $GENDERS[$metricResult[3]]; + } + push (@fields, @metricResult); + } + push(@lines, join(',', @fields)); + } + return (\@lines, \%metrics); +} + +sub _read_tab_delimited_column { + # read metric results from a tab-delimited file + # omit any line starting with # + # '$index' argument denotes the column with the desired metric values + # assume first field in each line is the sample URI + # return a hash of metric values indexed by sample URI + my ($self, $inPath, $index) = @_; + my @raw_lines = read_file($inPath); + my @lines = grep { !/^[#]/msx } @raw_lines; # remove comments/headers + my $csv = Text::CSV->new( + { binary => 1, + sep_char => "\t", + } + ); + my %results; + foreach my $line (@lines) { + my $status = $csv->parse($line); + if (! defined $status) { + $self->logcroak("Unable to parse tab-delimited input line: '", + $line, "'"); + } + my @fields = $csv->fields(); + my $uri = $fields[0]; + if (! defined $uri) { + $self->logcroak("Unable to find URI from input '", $line, "'"); + } + my $metric = $fields[$index]; + if (! defined $metric) { + $self->logcroak("Unable to find field index ", $index, + " for line '", $line, "'"); + } + $results{$uri} = $metric; + } + return \%results; +} + +sub _results_call_rate { + my ($self, ) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'call_rate'}; + if (!(-e $inPath)) { + $self->logcroak("Input path for call rate '", + $inPath, "' does not exist"); + } + my $index = 1; + return $self->_read_tab_delimited_column($inPath, $index); +} + +sub _results_duplicate { + my ($self, ) = @_; + my %similarity = %{$self->duplicate_similarity}; + my %max; + foreach my $sample_i (keys(%similarity)) { + my $maxSim = 0; + foreach my $sample_j (keys(%similarity)) { + if ($sample_i eq $sample_j) { next; } + my $sim = $similarity{$sample_i}{$sample_j}; + if ($sim > $maxSim) { $maxSim = $sim; } + } + $max{$sample_i} = $maxSim; + } + # read call rates and find keep/discard status + my %cr = %{$self->_results_call_rate()}; + my %results; + foreach my $subsetRef (@{$self->duplicate_subsets}) { + my $maxCR = 0; + my @subset = @{$subsetRef}; + # first pass -- find highest CR + foreach my $sample (@subset) { + if ($cr{$sample} > $maxCR) { $maxCR = $cr{$sample}; } + } + # second pass -- record sample status + # may keep more than one sample if there is a tie for greatest CR + foreach my $sample (@subset) { + my $keep = 0; + if ($cr{$sample} eq $maxCR) { $keep = 1; } + $results{$sample} = [$max{$sample}, $keep]; + } + } + return \%results; +} + +sub _results_gender { + # read gender results from sample_xhet_gender.txt + # 'metric value' is concatenation of inferred, supplied gender codes + # $threshold not used + my ($self, ) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'gender'}; + if (!(-e $inPath)) { + $self->logcroak("Input path for gender '", + $inPath, "' does not exist"); + } + my @data = WTSI::NPG::Genotyping::QC::QCPlotShared::readSampleData($inPath, 1); # skip header on line 0 + my %results; + foreach my $ref (@data) { + my ($sample, $xhet, $inferred, $supplied) = @$ref; + $results{$sample} = [$xhet, $inferred, $supplied]; + } + return \%results; +} + +sub _results_het { + my ($self, ) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'heterozygosity'}; + if (!(-e $inPath)) { + $self->logcroak("Input path for heterozygosity '", + $inPath, "' does not exist"); + } + my $index = 2; + return $self->_read_tab_delimited_column($inPath, $index); +} + +sub _results_high_maf_het { + my ($self, ) = @_; + return $self->_results_maf_het(1); +} + +sub _results_identity { + my ($self, ) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'identity'}; + my $resultsRef; + if (-e $inPath) { + # read identity results from JSON file + my %data = %{decode_json(read_file($inPath))}; + my @sample_results = @{$data{'identity'}}; + my %results; + foreach my $result (@sample_results) { + my $name = $result->{'sample_name'}; + my $concordance = $result->{'concordance'}; + my $identity = $result->{'identity'}; + $results{$name} = [$identity, $concordance]; + } + $resultsRef = \%results; + } else { + $self->info("Omitting identity metric; expected identity JSON path '", + $inPath, "' does not exist"); + } + return $resultsRef; +} + +sub _results_low_maf_het { + my ($self, ) = @_; + return $self->_results_maf_het(0); +} + +sub _results_maf_het { + # read JSON file output by Plinktools het_by_maf.py + my ($self, $high) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'het_by_maf'}; + if (!(-r $inPath)) { + $self->info("Omitting MAF heterozygosity; cannot read input '", + $inPath, "'"); + return 0; + } + my %data = %{decode_json(read_file($inPath))}; + my %results; + foreach my $sample (keys(%data)) { + # TODO modify output format of het_by_maf.py + if ($high) { $results{$sample} = $data{$sample}{'high_maf_het'}[1]; } + else { $results{$sample} = $data{$sample}{'low_maf_het'}[1]; } + } + return \%results; +} + +sub _results_magnitude { + my ($self, ) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'magnitude'}; + if (!(-e $inPath)) { + $self->info("Omitting magnitude; input '", $inPath, + "' does not exist"); + return 0; # magnitude of intensity is optional + } + my $index = 1; + return $self->_read_tab_delimited_column($inPath, $index); +} + +sub _results_xydiff { + my ($self, ) = @_; + my $inPath = $self->input_dir.'/'.$self->filenames->{'xydiff'}; + if (!(-e $inPath)) { + $self->info("Omitting xydiff; input '", $inPath, + "' does not exist"); + return 0; + } + my $index = 1; + return $self->_read_tab_delimited_column($inPath, $index); +} + +sub _transpose_results { + # convert results from metric-major to sample-major ordering + my ($self, $resultsRef) = @_; + my %metricResults = %{$resultsRef}; + my %sampleResults = (); + foreach my $metric (keys(%metricResults)) { + my %resultsBySample = %{$metricResults{$metric}}; + foreach my $sample (keys(%resultsBySample)) { + my $resultRef = $resultsBySample{$sample}; + $sampleResults{$sample}{$metric} = $resultRef; + } + } + return \%sampleResults; +} + +sub _write_json { + # convenience method to write the given reference in JSON format + my ($self, $outPath, $dataRef) = @_; + my $resultString = encode_json($dataRef); + open my $out, ">", $outPath || + $self->logcroak("Cannot open output path '$outPath'"); + print $out $resultString; + close($out) || $self->logcroak("Cannot close output path '$outPath'"); + return 1; +} + + + +no Moose; + +1; + + +__END__ + +=head1 NAME + +WTSI::NPG::Genotyping::QC::Collator - Class to collate QC metric outputs + +=head1 SYNOPSIS + +my $collator = WTSI::NPG::Genotyping::QC::Collator->new( + db_path => './genotyping.db', + ini_path => './genotyping.ini', + input_dir => './data', + config_path => './qc_config.json', +); + +=head1 DESCRIPTION + +Collate QC metric outputs from the WTSI genotyping pipeline, and perform +actions with the collated data. + +Actions include: Combining duplicate and call rate data to evaluate the +duplicate metric; assessment of pass/fail status of samples; exclusion of +failed samples in the pipeline SQLite database; and output of QC result +summaries in JSON or CSV format. + +Supported metrics include: Call rate; duplicates; gender; heterozygosity; +heterozygosity restricted to low MAF SNPs; heterozygosity restricted to +high MAF SNPs; Bayesian identity with QC plex data; magnitude of intensity; +and X/Y intensity difference. + +The JSON format output is used by downstream software to create QC plots +and reports. + +The JSON configuration file must encode a hash, which must contain the +following keys and values: + +=over + +=item + +B A hash mapping metric names to their threshold +values. + +The metrics which appear in Metrics_thresholds will be used for all +subsequent operations, and may be a subset of the full list of available +metrics. For example, this allows sample pass/fail status to be +determined by call rate only for the Illuminus caller prefilter. + +=item + +B A hash mapping input types to the names of input +files, which are to be found in the given input directory. Some files +provide input to more than one metric. If a metric is present in +Metrics_thresholds, it must also have appropriate input in collation_names. + +=back + +First created February 2014; substantially refactored January 2017. + +=head1 AUTHOR + +Keith James , Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2014, 2015, 2016, 2017 Genome Research Limited. +All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC/Identity.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/Identity.pm deleted file mode 100644 index 7509fe74c..000000000 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC/Identity.pm +++ /dev/null @@ -1,564 +0,0 @@ - -# Author: Iain Bancarz, ib5@sanger.ac.uk -# March 2014 - -# -# Copyright (C) 2014, 2015 Genome Research Ltd. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -# Module for identity QC check against Sequenom calls - - -use utf8; - -package WTSI::NPG::Genotyping::QC::Identity; - -use Moose; - -use JSON; -use List::Util qw(max); -use Log::Log4perl; -use Log::Log4perl::Level; -use plink_binary; # in /software/varinf/gftools/lib ; front-end for C library - -use WTSI::NPG::Genotyping::Database::SNP; -use WTSI::NPG::Genotyping::QC::QCPlotShared qw(defaultConfigDir - getDatabaseObject); -use WTSI::NPG::Genotyping::QC::SnpID qw(convertFromIlluminaExomeSNP); -use WTSI::NPG::Genotyping::SNPSet; - -our $VERSION = ''; - -our $SEQUENOM = 'Sequenom'; -our $FLUIDIGM = 'Fluidigm'; -our $PLEX_DIR = '/nfs/srpipe_references/genotypes'; -our %PLEX_MANIFESTS = ( - $FLUIDIGM => { - cgp => $PLEX_DIR.'/cgp_fluidigm_snp_info_1000Genomes.tsv', - ddd => $PLEX_DIR.'/ddd_fluidigm_snp_info_1000Genomes.tsv', - qc => $PLEX_DIR.'/qc_fluidigm_snp_info_1000Genomes.tsv', - }, - $SEQUENOM => { - W30467 => $PLEX_DIR.'/W30467_snp_set_info_1000Genomes.tsv', - W34340 => $PLEX_DIR.'/W34340_snp_set_info_1000Genomes.tsv', - W35540 => $PLEX_DIR.'/W35540_snp_set_info_1000Genomes.tsv', - }, -); - -with 'WTSI::DNAP::Utilities::Loggable'; - -has 'db_path' => - (is => 'rw', - isa => 'Str', - required => 1, - ); - -has 'ini_path' => - (is => 'rw', - isa => 'Str', - required => 1, - ); - -has 'min_shared_snps' => - (is => 'rw', - isa => 'Int', - default => 8, - ); - -has 'output_dir' => - (is => 'rw', - isa => 'Str', - default => '.' - ); - -has 'output_names' => - (is => 'ro', - isa => 'HashRef[Str]', - default => sub {{'genotypes' => 'identity_check_gt.txt', - 'results' => 'identity_check_results.txt', - 'fail_pairs' => 'identity_check_failed_pairs.txt', - 'json' => 'identity_check.json' }}, - ); - -has 'pass_threshold' => # minimum similarity for metric pass - (is => 'rw', - isa => 'Num', - default => 0.9, - ); - -has 'pipedb' => - (is => 'rw', - isa => 'WTSI::NPG::Genotyping::Database::Pipeline', - ); - -has 'plex_manifest' => # location of plex manifest in local filesystem - (is => 'rw', - isa => 'Str', - ); - -has 'plink_path' => - (is => 'rw', - isa => 'Str', - required => 1, - ); - -has 'plink' => - (is => 'rw', - isa => 'plink_binary::plink_binary', - ); - -has 'swap_threshold' => # minimum similarity to be flagged as possible swap - (is => 'rw', - isa => 'Num', - default => 0.9, -); - -sub BUILD { - my ($self,) = @_; - $self->plink(plink_binary::plink_binary->new($self->plink_path)); - $self->plink->{"missing_genotype"} = "N"; - $self->pipedb(getDatabaseObject($self->db_path, $self->ini_path)); - my $sequenomTotal = $self->pipedb->total_results_for_method($SEQUENOM); - my $fluidigmTotal = $self->pipedb->total_results_for_method($FLUIDIGM); - my $method; - # if no valid QC plex found, plex_manifest attribute remains undefined - if ($sequenomTotal==0 && $fluidigmTotal==0) { - $self->logger->warn('No QC plex results in pipeline DB'); - } elsif ($sequenomTotal!=0 && $fluidigmTotal!=0) { - $self->logger->warn('Results for more than one QC plex in pipeline DB'); - } elsif ($fluidigmTotal != 0) { - $method = $FLUIDIGM; - } else { - $method = $SEQUENOM; - } - if ($method) { - my @names = @{$self->pipedb->snpset_names_for_method($method)}; - if (scalar(@names)!=1) { - $self->logcroak("Must have exactly one snpset name ", - "for identity check"); - } else { - $self->plex_manifest($PLEX_MANIFESTS{$method}{$names[0]}); - } - } -} - -sub compareFailedPairs { - # pairwise check of all failed samples; use output to detect swaps - # Consider sample pair (i, j) - # let s_ij = rate of matching calls between (Illumina_i, Sequenom_j) - # we may have s_ij != s_ji, so define pairwise metric as max(s_ij, s_ji) - my ($self, $gtRef, $failRef, $snpRef) = @_; - my %genotypes = %{$gtRef}; - my @failedSamples = @{$failRef}; - my @snps = @{$snpRef}; - my @comparison = (); - for (my $i = 0; $i < @failedSamples; $i++) { - for (my $j = 0; $j < $i; $j++) { - my $sample_i = $failedSamples[$i]; - my $sample_j = $failedSamples[$j]; - my @match = (0,0); - foreach my $snp (@snps) { - my ($plink_i, $plex_i) = @{$genotypes{$sample_i}{$snp}}; - my ($plink_j, $plex_j) = @{$genotypes{$sample_j}{$snp}}; - my $equiv_ij = $self->equivalent($plink_i, $plex_j); - my $equiv_ji = $self->equivalent($plink_j, $plex_i); - if ($equiv_ij) { $match[0]++; } - if ($equiv_ji) { $match[1]++; } - } - my $similarity = max(@match)/@snps; - push(@comparison, [$sample_i, $sample_j, $similarity]); - } - } - return \@comparison; -} - -sub equivalent { - # check if given genotypes are equivalent to within: - # - swap (major/minor allele reversal) and/or a flip (reverse complement) - my ($self, $gt0, $gt1) = @_; - # basic sanity checking on input - # allow no-call genotypes (represented by NN or 0) - my $inputOK = 1; - foreach my $gt ($gt0, $gt1) { - if ($gt && $gt ne 'NN' && (length($gt)!=2 || $gt =~ m{[^ACGT]}msx)) { - $inputOK = 0; - } - } - unless ($inputOK) { - $self->warn("Invalid genotype arguments: '$gt0', '$gt1'"); - return 0; # no match - } - my $gt1Swap = join('', reverse(split('', $gt1))); # swap alleles - if ($gt0 eq $gt1 || $gt0 eq $gt1Swap || $gt0 eq $self->revComp($gt1) || - $gt0 eq $self->revComp($gt1Swap) ) { - return 1; # match - } else { - return 0; # no match - } -} - -sub findIdentity { - # find the identity metric for each sample - # return: metric values, genotypes by SNP & sample, pass/fail status - my ($self, $plinkRef, $plexRef, $snpsRef) = @_; - my %plink = %{$plinkRef}; - my %qcplex = %{$plexRef}; - my @snps = @{$snpsRef}; - my (%identity, %genotypes, %failed, %missing); - foreach my $sample (keys(%plink)) { - my $match = 0; - # compare genotypes - # mark samples as missing OR pass/fail (but not both) - if ($qcplex{$sample}) { - foreach my $snp (@snps) { - my $pCall = $plink{$sample}{$snp}; - my $sCall = $qcplex{$sample}{$snp}; - if ($pCall && $sCall) { - my $equiv = $self->equivalent($pCall, $sCall); - unless (defined($equiv)) { - $self->logger->logwarn("WARNING: ".$@); # error caught - $equiv = 0; - } - if ($equiv) { $match++; } - } - $pCall ||= 0; - $sCall ||= 0; - $genotypes{$sample}{$snp} = [$pCall, $sCall]; - } - my $id = $match / @snps; - $identity{$sample} = $id; - if ($id < $self->pass_threshold) { $failed{$sample} = 1; } - } else { - $missing{$sample} = 1; - $identity{$sample} = 0; - } - } - return (\%identity, \%genotypes, \%failed, \%missing); -} - -sub getIntersectingSNPsPlink { - # find SNPs in Plink data which are also in QC plex (if any) - my ($self,) = @_; - my @shared; - if ($self->plex_manifest) { - my @plinkSNPs; - for my $i (0..$self->plink->{"snps"}->size() - 1) { - my $name = $self->plink->{"snps"}->get($i)->{"name"}; - push @plinkSNPs, $name; - } - my $snpset = WTSI::NPG::Genotyping::SNPSet->new($self->plex_manifest); - my %plexSNPs = (); - foreach my $name ($snpset->snp_names) { $plexSNPs{$name} = 1; } - foreach my $name (@plinkSNPs) { - $name = convertFromIlluminaExomeSNP($name); - if ($plexSNPs{$name}) { push(@shared, $name); } - } - } - return @shared; -} - -sub getSampleNamesIDs { - # extract sample IDs from a plink_binary object - # first, try parsing sampleName in standard PLATE_WELL_ID format - # if unsuccessful, set sample ID = sampleName - # output hash of IDs indexed by name - # also get list of names (use to ensure consistent name order) - my ($self,) = @_; - my (%samples, @sampleNames); - for my $i (0..$self->plink->{"individuals"}->size() - 1) { - my $longName = $self->plink->{"individuals"}->get($i)->{"name"}; - my ($plate, $well, $id) = split /_/msx, $longName, 3; - if ($id) { - $samples{$longName} = $id; - } else { - $samples{$longName} = $longName; - } - push(@sampleNames, $longName); - } - return (\%samples, \@sampleNames); -} - -sub readPlexCalls { - # read QC plex calls (Sequenom or Fluidigm) from pipeline SQLite database - # return a hash of calls indexed by sample and SNP - my ($self, ) = @_; - # read samples and SNP names - my @samples = $self->pipedb->sample->all; - $self->logger->debug("Read ", scalar(@samples), - " samples from pipeline DB"); - my @snps = $self->pipedb->snp->all; - my $snpTotal = @snps; - $self->logger->debug("Read $snpTotal SNPs from pipeline DB"); - my %snpNames; - foreach my $snp (@snps) { - $snpNames{$snp->id_snp} = $snp->name; - } - # read QC calls for each sample and SNP - my $snpResultTotal = 0; - my %results; - my $i = 0; - foreach my $sample (@samples) { - if ($sample->include == 0) { next; } - my $sampleURI = $sample->uri; - my @results = $sample->results->all; - $i++; - if ($i % 100 == 0) { - $self->logger->debug("Read ", scalar(@results), - " results for sample ", $i, " of ", - scalar(@samples)); - } - foreach my $result (@results) { - my @snpResults = $result->snp_results->all; - $snpResultTotal += @snpResults; - foreach my $snpResult (@snpResults) { - my $snpName = $snpNames{$snpResult->id_snp}; - if (!$results{$sampleURI}{$snpName}) { - $results{$sampleURI}{$snpName} = $snpResult->value; - } - } - } - } - $self->logger->debug("Read ", $snpResultTotal, - " QC SNP results from pipeline DB"); - return \%results; -} - -sub readPlinkCalls { - # read genotype calls by sample & snp from given plink_binary object - # requires list of sample names in same order as in plink file - # assumes that "sample names" in the Plink dataset are URI's - # return hash of calls by sample and SNP name - my ($self, $sampleNamesRef, $snpsRef) = @_; - my @sampleNames = @$sampleNamesRef; - my @snps = @$snpsRef; - my %snps; - foreach my $snp_id (@snps) { $snps{$snp_id} = 1; } - my $snp = new plink_binary::snp; - my $genotypes = new plink_binary::vectorstr; - my %plinkCalls; - while ($self->plink->next_snp($snp, $genotypes)) { - # read calls from Plink binary object - # try both "plink" and "sequenom" SNP name formats - my $snp_id_illumina = $snp->{"name"}; - my $snp_id_sequenom = convertFromIlluminaExomeSNP($snp_id_illumina); - foreach my $snp_id ($snp_id_illumina, $snp_id_sequenom) { - if (!$snps{$snp_id}) { next; } - for my $i (0..$genotypes->size() - 1) { - my $call = $genotypes->get($i); - if ($call =~ m{[N]{2}}msx) { $call = 0; } - $plinkCalls{$sampleNames[$i]}{$snp_id} = $call; - } - } - } - return \%plinkCalls; -} - -sub revComp { - # reverse complement a DNA sequence - my ($self, $seq) = @_; - my @bases = reverse(split('', $seq)); - my @rev = (); - foreach my $base (@bases) { - if ($base eq 'A') {push(@rev, 'T');} - elsif ($base eq 'C') {push(@rev, 'G');} - elsif ($base eq 'G') {push(@rev, 'C');} - elsif ($base eq 'T') {push(@rev, 'A');} - else {push(@rev, 'N'); } - } - return join('', @rev); -} - -sub writeFailedPairComparison { - my $self = shift; - my @compareResults = @{ shift() }; - my $maxSimilarity = shift; - my $outPath = $self->output_dir.'/'.$self->output_names->{'fail_pairs'}; - open my $out, ">", $outPath || - $self->logger->logcroak("Cannot open '$outPath'"); - my $header = join("\t", "#Sample_1", "Sample_2", "Similarity", "Swap_warning"); - print $out $header."\n"; - foreach my $resultRef (@compareResults) { - my ($sample1, $sample2, $metric) = @$resultRef; - my $status; - if ($metric > $maxSimilarity) { $status = 'TRUE'; } - else { $status = 'FALSE'; } - my $line = sprintf("%s\t%s\t%.4f\t%s\n", $sample1, $sample2, $metric, $status); - print $out $line; - } - close $out || $self->logger->logcroak("Cannot close '$outPath'"); -} - -sub writeGenotypes { - my $self = shift; - my %genotypes = %{ shift() }; # hashes of calls by sample & snp - my @snps = @{ shift() }; # list of SNPs to output - my @samples = sort(keys(%genotypes)); - my $outPath = $self->output_dir.'/'.$self->output_names->{'genotypes'}; - open my $gt, ">", $outPath or - die "Failed to open $outPath for writing: $!\n"; - my @heads = qw/SNP sample illumina_call qc_plex_call/; - print $gt '#'.join("\t", @heads)."\n"; - foreach my $snp (@snps) { - foreach my $sample (sort(keys(%genotypes))) { - my ($pCall, $sCall) = @{ $genotypes{$sample}{$snp} }; - $pCall ||= '-'; - $sCall ||= '-'; - print $gt join("\t", $snp, $sample, $pCall, $sCall), "\n"; - } - } - close $gt or die "Failed to close $outPath: $!\n"; -} - -sub writeIdentity { - # evaluate identity pass/fail and write results - # return list of failed sample names - my $self = shift; - my %identity = %{ shift() }; # hash of identity by sample - my %failed = %{ shift() }; # pass/fail status by sample - my %missing = %{ shift() }; # missing samples from Sequenom query - my @samples = @{ shift() }; # list ensures consistent sample name order - my $snpTotal = shift; - my $minIdent = shift; - my $outPath = $self->output_dir.'/'.$self->output_names->{'results'}; - open my $results, ">", $outPath or - die "Failed to open $outPath for writing: $!\n"; - my $header = join("\t", "#Identity comparison", - "MIN_IDENTITY:$minIdent", - "AVAILABLE_PLEX_SNPS:$snpTotal")."\n"; - $header .= join("\t", "#sample", "concordance", "result")."\n"; - print $results $header; - foreach my $sample (@samples) { - my $line; - if (!($missing{$sample})) { - $line = sprintf("%s\t%.4f\t", $sample, $identity{$sample}); - if ($failed{$sample}) { $line .= "Fail\n"; } - else { $line .= "Pass\n"; } - } else { - $line = join("\t", $sample, "-", "Unavailable")."\n"; - } - print $results $line; - } - close $results; -} - -sub writeJson { - # get data structure for output to and write to JSON file - # first argument is hash of values (if check was run) or list of samples (if check was not run) - my ($self, $resultsRef, $idCheck, $minSnps, $commonSnps) = @_; - my $idRef; - my %data = (results => $resultsRef, - identity_check_run => $idCheck, - min_snps => $minSnps, - common_snps => $commonSnps - ); - my $outPath = $self->output_dir.'/'.$self->output_names->{'json'}; - open my $out, ">", $outPath || - $self->logger->logcroak("Cannot open '$outPath'"); - print $out encode_json(\%data); - close $out || $self->logger->logcroak("Cannot close '$outPath'"); -} - -sub run_identity_check { - # 'main' method to run identity check - my ($self,) = @_; - # 1) Read sample names and IDs from Plink - my ($samplesRef, $sampleNamesRef) = $self->getSampleNamesIDs(); - $self->logger->debug("Sample names read from PLINK binary.\n"); - # definitive list of qc SNPs - my @snps = $self->getIntersectingSNPsPlink(); - my $snpTotal = @snps; - if ($snpTotal < $self->min_shared_snps) { - my %id; - foreach my $sample (@{$sampleNamesRef}) { $id{$sample} = 'NA'; } - $self->writeJson(\%id, 0, $self->min_shared_snps, $snpTotal); - $self->warn("Cannot do identity check; ", - $self->min_shared_snps, - " SNPs from QC plex required ", $snpTotal, - " found"); - } else { - # 2) Read Sequenom results from pipeline SQLite DB - my $start = time(); - my $plexCallsRef = $self->readPlexCalls(); - my $duration = time() - $start; - $self->logger->debug("Calls read from pipeline DB: ", - $duration, " seconds.\n"); - # 3) Read PLINK genotypes for all samples; can take a while! - $start = time(); - my $plinkCallsRef = $self->readPlinkCalls($sampleNamesRef, \@snps); - $duration = time() - $start; - $self->logger->debug("Calls read from PLINK binary: ", - $duration, " seconds.\n"); - # 4) Find identity, genotypes, and pass/fail status; write output - my ($idRef, $gtRef, $failRef, $missingRef) = $self->findIdentity($plinkCallsRef, $plexCallsRef, \@snps, $self->pass_threshold); - $self->writeJson($idRef, 1, $self->min_shared_snps, $snpTotal); - $self->writeGenotypes($gtRef, \@snps); - $self->writeIdentity($idRef, $failRef, $missingRef, $sampleNamesRef, - $snpTotal, $self->pass_threshold); - # 5) Pairwise check on failed samples for possible swaps - my @failed = sort(keys(%{$failRef})); - my $compareRef = $self->compareFailedPairs($gtRef, \@failed, - \@snps, - $self->swap_threshold); - $self->writeFailedPairComparison($compareRef, $self->pass_threshold); - $self->logger->debug("Finished identity check.\n"); - } - return 1; -} - -no Moose; - -1; - - - -__END__ - -=head1 NAME - -WTSI::NPG::Genotyping::QC::Identity - -=head1 DESCRIPTION - -Class to run the WTSI Genotyping pipeline identity check on a Plink dataset. -Checks Plink calls against a QC plex (Sequenom or Fluidigm) by comparing -calls on SNPs which occur in both the Infinium and QC plex manifests. If -available SNPs are too few, omit the identity check. No-calls on any given -sample are counted as mismatches. Samples with concordance below a given -threshold fail the QC metric. Failed pairs of samples are compared in order -to detect possible swaps. - -Output is a JSON file with identity metric for each sample, and supplementary -text files. - -=head1 AUTHOR - -Iain Bancarz - -=head1 COPYRIGHT AND DISCLAIMER - -Copyright (c) 2014 Genome Research Limited. All Rights Reserved. - -This program is free software: you can redistribute it and/or modify -it under the terms of the Perl Artistic License or the GNU General -Public License as published by the Free Software Foundation, either -version 3 of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -=cut diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC/MetricScatterplots.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/MetricScatterplots.pm index 311ab4a5c..24e8fe1ad 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC/MetricScatterplots.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/QC/MetricScatterplots.pm @@ -9,7 +9,7 @@ use File::Temp qw(tempdir); use POSIX qw(ceil); use WTSI::NPG::Genotyping::QC::QCPlotShared qw(defaultJsonConfig getPlateLocationsFromPath meanSd readMetricResultHash readQCMetricInputs - readThresholds plateLabel); + readQCNameArray readThresholds plateLabel); use WTSI::NPG::Genotyping::QC::QCPlotTests qw(wrapCommand wrapPlotCommand); use Exporter; @@ -99,6 +99,38 @@ sub metricMeanSd { else { return meanSd(@values); } } +sub metricNames { + # arguments: paths to JSON results and config files + # find metrics in use for the given result set & check consistency + my ($resultsPath, $configPath) = @_; + my @allNames = readQCNameArray($configPath); # ensure consistent order + my %resultNames; + my %results = readMetricResultHash($resultsPath, $configPath); + my @samples = keys %results; + # arbitrarily choose a sample name to populate metric list + my $chosen = shift @samples; + foreach my $name (keys %{$results{$chosen}}) { + $resultNames{$name} = 1; + } + # now check other samples have the same set of metrics + foreach my $sample (keys %results) { + if ($sample eq $chosen) { next; } + my @sampleMetrics = keys %{$results{$sample}}; + foreach my $name (@sampleMetrics) { + if (! defined $resultNames{$name}) { + croak("Inconsistent metric names for samples '", $sample, + "' and '", $chosen, "'"); + } + } + } + # keep members of the default name list which appear in the results + my @names; + foreach my $name (@allNames) { + if ($resultNames{$name}) { push @names, $name; } + } + return @names; +} + sub metricStatus { # did sample pass wrt all metrics other than the target? # code to record pass/fail status wrt this and other metrics @@ -145,7 +177,7 @@ sub readThresholdsForMetric { if ($words[0] eq 'M_max') { $thresh1 = $words[1]; } elsif ($words[0] eq 'F_min') { $thresh2 = $words[1]; } } - close $in || croak "Cannot close gender file $gender"; + close $in || croak "Cannot close gender file $gender"; } else { my %thresh = readThresholds($config); $thresh1 = $thresh{$metric}; @@ -276,9 +308,8 @@ sub runMetric { sub runAllMetrics { my ($qcDir, $outDir, $config, $gender, $dbPath, $iniPath, $resultPath, - $maxBatch, $noIntensity) = @_; - my @metrics = qw(call_rate duplicate heterozygosity identity gender); - if (!$noIntensity) { push(@metrics, qw/magnitude xydiff/); } + $maxBatch) = @_; + my @metrics = metricNames($resultPath, $config); foreach my $metric (@metrics) { runMetric($metric, $qcDir, $outDir, $config, $gender, $dbPath, $iniPath, $resultPath, $maxBatch); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/QC/Reports.pm b/src/perl/lib/WTSI/NPG/Genotyping/QC/Reports.pm index 8c8e4ac56..e8a3216e5 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/QC/Reports.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/QC/Reports.pm @@ -32,9 +32,9 @@ our @METRIC_NAMES = qw/identity duplicate gender call_rate heterozygosity sub createReports { # 'main' method to write text and PDF files - my ($texPath, $resultPath, $idPath, $config, $dbPath, $genderThresholdPath, $qcDir, $introPath, $qcName, $title, $author) = @_; + my ($texPath, $resultPath, $config, $dbPath, $genderThresholdPath, $qcDir, $introPath, $qcName, $title, $author) = @_; $qcName ||= qcNameFromPath($qcDir); - writeSummaryLatex($texPath, $resultPath, $idPath, $config, $dbPath, + writeSummaryLatex($texPath, $resultPath, $config, $dbPath, $genderThresholdPath, $qcDir, $introPath, $qcName, $title, $author); my $pdfOK = texToPdf($texPath); @@ -121,7 +121,8 @@ sub latexFooter { sub latexHeader { my ($title, $author) = @_; my $date = strftime("%Y-%m-%d %H:%M", localtime(time())); - # formerly used graphicx, but all plots are now pdf + # formerly used graphicx, but all plots are now PDF + # hyperref package enables hyperlinks in PDF output my $header = '\documentclass{article} \title{'.$title.'} \author{'.$author.'} @@ -129,6 +130,8 @@ sub latexHeader { \usepackage{pdfpages} +\usepackage{hyperref} + \renewcommand{\familydefault}{\sfdefault} % sans serif font \begin{document} @@ -176,13 +179,12 @@ sub latexResultNotes { } sub latexSectionResults { - my ($config, $qcDir, $resultPath, $identityPath) = @_; + my ($config, $qcDir, $resultPath) = @_; my @lines = (); push @lines, "\\section{Results}\n\n"; - push @lines, textForIdentity($identityPath); push @lines, "\\subsection{Tables}\n\n"; my @titles = ("Pass/fail summary", - "Key to metric abbreviations", + "Key to metric abbreviations", "Total samples passing filters", "Sample pass rates"); my @refs = textForPlates($resultPath, $config); @@ -190,12 +192,12 @@ sub latexSectionResults { my @centre = (0,0,1,1); for (my $i=0;$i<@refs;$i++) { push @lines, "\\subsubsection*{".$titles[$i]."}\n"; - foreach my $table (latexTables($refs[$i], $headers[$i], $centre[$i])) { - push @lines, $table."\n"; + foreach my $table (latexTables($refs[$i], $headers[$i], $centre[$i])) { + push @lines, $table."\n"; } if ($i>0) { push @lines, "\\clearpage\n\n"; # flush table buffer to output - push @lines, "\\pagebreak\n\n"; + push @lines, "\\pagebreak\n\n"; } } push @lines, latexResultNotes(); @@ -366,22 +368,6 @@ sub textForDatasets { return @text; } -sub textForIdentity { - # text for subsection to describe status of identity metric - my $idResultsPath = shift; - my %results = %{readJson($idResultsPath)}; - my $idCheck = $results{'identity_check_run'}; # was identity check run? - my $minSnps = $results{'min_snps'}; - my $commonSnps = $results{'common_snps'}; # Illumina/Sequenom shared SNPs - my $text = "\\subsection{Identity Metric}\n\n\\begin{itemize}\n \\item Minimum number of SNPs for identity check = $minSnps\n\\item Common SNPs between input and QC plex = $commonSnps\n"; - if ($idCheck) { - $text.= "\\item Identity check run successfully.\n\\end{itemize}\n\n"; - } else { - $text.= "\\item \\textbf{Identity check omitted.} All samples pass with respect to identity; scatterplot not created.\n\\end{itemize}\n\n"; - } - return $text; -} - sub textForMetrics { # text for metric threshold/description table my ($jsonPath, $mMax, $fMin) = @_; @@ -520,7 +506,7 @@ sub texToPdf { sub writeSummaryLatex { # write .tex file for report - my ($texPath, $resultPath, $idPath, $config, $dbPath, $genderThresholdPath, + my ($texPath, $resultPath, $config, $dbPath, $genderThresholdPath, $qcDir, $introPath, $qcName, $title, $author) = @_; $texPath ||= "pipeline_summary.tex"; $title ||= "Genotyping QC Report"; @@ -534,7 +520,7 @@ sub writeSummaryLatex { print $out latexSectionInput($qcName, $dbPath); print $out read_file($introPath); # new section = Preface print $out latexSectionMetrics($config, $genderThresholdPath); - print $out latexSectionResults($config, $qcDir, $resultPath, $idPath); + print $out latexSectionResults($config, $qcDir, $resultPath); print $out latexFooter(); close $out || croak "Cannot close output path $texPath"; } diff --git a/src/perl/lib/WTSI/NPG/Genotyping/SNPSet.pm b/src/perl/lib/WTSI/NPG/Genotyping/SNPSet.pm index 16fd1701d..346dd5f84 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/SNPSet.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/SNPSet.pm @@ -291,6 +291,7 @@ sub write_snpset_data { my $records_written = 0; my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); $csv->column_names($self->column_names); @@ -373,6 +374,7 @@ sub _parse_snps { my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/AssayResultSet.pm b/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/AssayResultSet.pm index 94f78dab6..e35f950a8 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/AssayResultSet.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/AssayResultSet.pm @@ -173,6 +173,7 @@ sub _parse_assay_results { my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/Publisher.pm b/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/Publisher.pm index b7e693d03..73853553e 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/Publisher.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/Sequenom/Publisher.pm @@ -209,6 +209,7 @@ sub _write_sequenom_csv_file { my $csv = Text::CSV->new({eol => "\n", sep_char => "\t", + binary => 1, allow_whitespace => undef, quote_char => undef}); $csv->column_names(\@header); diff --git a/src/perl/lib/WTSI/NPG/Genotyping/VCF/Parser.pm b/src/perl/lib/WTSI/NPG/Genotyping/VCF/Parser.pm index 030ca3111..f8b9948f0 100644 --- a/src/perl/lib/WTSI/NPG/Genotyping/VCF/Parser.pm +++ b/src/perl/lib/WTSI/NPG/Genotyping/VCF/Parser.pm @@ -11,7 +11,10 @@ with 'WTSI::DNAP::Utilities::Loggable'; has 'csv' => (is => 'ro', isa => 'Text::CSV', - default => sub { return Text::CSV->new({sep_char => "\t"}); }, + default => sub { + return Text::CSV->new({sep_char => "\t", + binary => 1 }); + }, documentation => 'Object to parse tab-delimited input lines' ); diff --git a/src/perl/lib/WTSI/NPG/Publisher.pm b/src/perl/lib/WTSI/NPG/Publisher.pm index fc0995bcb..641e5191a 100644 --- a/src/perl/lib/WTSI/NPG/Publisher.pm +++ b/src/perl/lib/WTSI/NPG/Publisher.pm @@ -91,10 +91,10 @@ sub publish_file { if (@existing) { my $existing_obj = WTSI::NPG::iRODS::DataObject->new($irods, $existing[0]); - $self->warn("While publishing '", $target_obj->str, "' identified by ", - $meta_str, " found existing sample data: '", - $existing_obj->str, "' identified by ", - $existing_obj->meta_str); + $self->debug("While publishing '", $target_obj->str, "' identified by ", + $meta_str, " found existing sample data: '", + $existing_obj->str, "' identified by ", + $existing_obj->meta_str); # Tidy existing file checksum before proceeding $self->_ensure_checksum($existing_obj); @@ -107,11 +107,12 @@ sub publish_file { if ($md5 eq $existing_md5) { $self->info("Skipping publication of '", $target_obj->str, "' because existing object '", $existing_obj->str, - "' exists with the same checksum"); + "' exists with the same checksum '", $md5, "'"); } else { $self->info("Republishing '", $existing_obj->str, "' in situ ", - "because the checksum is changed"); + "because the checksum is changed from ", + "'$existing_md5' to '$md5'"); $irods->replace_object($file, $existing_obj->str); foreach my $avu ($target_obj->find_in_metadata('md5')) { @@ -127,16 +128,17 @@ sub publish_file { if ($md5 eq $existing_md5) { $self->info("Moving existing object '", $existing_obj->str, "' to new location '", $target_obj->str, - "' without changing its content because the checksum ", - "is unchanged"); + "' without changing its content because the checksum '", + $md5, "' is unchanged"); # The following moves any metadata too $irods->move_object($existing_obj->str, $target_obj->str); } else { - $self->info("Moving '", $existing_obj->str, ' to ', + $self->info("Moving existing object '", $existing_obj->str, + "' to new location '", $target_obj->str, "' and republishing over it ", "because the checksum is changed from ", - "'$existing_md5' to '$md5'"); + "'", $existing_md5, "' to '", $md5, "'"); # The following moves any metadata too $irods->move_object($existing_obj->str, $target_obj->str); @@ -154,7 +156,17 @@ sub publish_file { } else { $self->info("Publishing new object '$target'"); - $irods->add_object($file, $target_obj->str); + + # This used to use just 'add_object' in order to trigger an error + # if an aun-annotated file were already there. However, a file may + # be present due to iRODS failures, which triggers an unnecessary + # error. Now we use 'replace_object', which forces an overwrite. + if ($target_obj->is_present) { + $irods->replace_object($file, $target_obj->str); + } + else { + $irods->add_object($file, $target_obj->str); + } my $creator_uri = $self->affiliation_uri; my $publisher_uri = $self->accountee_uri; diff --git a/src/perl/lib/WTSI/NPG/Utilities.pm b/src/perl/lib/WTSI/NPG/Utilities.pm index 5c6e3c0d9..cd0e6cfeb 100644 --- a/src/perl/lib/WTSI/NPG/Utilities.pm +++ b/src/perl/lib/WTSI/NPG/Utilities.pm @@ -10,13 +10,11 @@ use File::Find; use File::stat; use Log::Log4perl; +use WTSI::DNAP::Utilities::Runnable; + use base 'Exporter'; -our @EXPORT_OK = qw(collect_dirs - collect_files - common_stem - make_collector +our @EXPORT_OK = qw(common_stem md5sum - modified_between trim depad_well user_session_log); @@ -148,153 +146,6 @@ sub user_session_log { $session_name, $uid, $now->strftime("%F")); } -=head2 collect_files - - Arg [1] : Root directory - Arg [2] : coderef of a function that accepts a single argument and - returns true if that object is to be collected. - Arg [3] : Maximum depth to search below the starting directory. - Optional (undef for unlimited depth). - Arg [4] : A file matching regex that is applied in addition to to - the test. Optional. - - Example : @files = collect_files('/home', $modified, 3, qr/.txt$/i) - Description: Returns an array of file names present under the specified - root, for which the test predicate returns true, up to the - specified depth. - Returntype : array of strings (file names) - -=cut - -sub collect_files { - my ($root, $test, $depth, $regex) = @_; - - $root eq '' and croak 'A non-empty root argument is required'; - - my @files; - my $collector = make_collector($test, \@files); - - my $start_depth = $root =~ tr[/][]; - my $stop_depth; - if (defined $depth) { - $stop_depth = $start_depth + $depth; - } - - find({preprocess => sub { - my $current_depth = $File::Find::dir =~ tr[/][]; - - my @elts; - if (!defined $stop_depth || $current_depth < $stop_depth) { - # Remove any dirs except . and .. - @elts = grep { ! /^[.]+$/msx } @_; - } - - return @elts; - }, - wanted => sub { - my $current_depth = $File::Find::dir =~ tr[/][]; - - if (!defined $stop_depth || $current_depth < $stop_depth) { - if (-f) { - if ($regex) { - $collector->($File::Find::name) if $_ =~ $regex; - } - else { - $collector->($File::Find::name) - } - } - } - } - }, $root); - - return @files; -} - -=head2 collect_dirs - - Arg [1] : Root directory - Arg [2] : coderef of a function that accepts a single argument and - returns true if that object is to be collected. - Arg [3] : Maximum depth to search below the starting directory. - Arg [4] : A file matching regex that is applied in addition to to - the test. Optional. - - Example : @dirs = collect_dirs('/home', $modified, 2) - Description: Return an array of directory names present under the specified - root, for which the test predicate returns true, up to the - specified depth. - Returntype : array of strings (dir names) - -=cut - -sub collect_dirs { - my ($root, $test, $depth, $regex) = @_; - - $root eq '' and croak 'A non-empty root argument is required'; - - my @dirs; - my $collector = make_collector($test, \@dirs); - - my $start_depth = $root =~ tr[/][]; - my $stop_depth; - if (defined $depth) { - $stop_depth = $start_depth + $depth; - } - - find({preprocess => sub { - my $current_depth = $File::Find::name =~ tr[/][]; - - my @dirs; - if (!defined $stop_depth || $current_depth < $stop_depth) { - @dirs = grep { -d && ! /^[.]+$/msx } @_; - } - - return @dirs; - }, - wanted => sub { - my $current_depth = $File::Find::name =~ tr[/][]; - - if (!defined $stop_depth || $current_depth < $stop_depth) { - if ($regex) { - $collector->($File::Find::name) if $_ =~ $regex; - } - else { - $collector->($File::Find::name); - } - } - } - }, $root); - - return @dirs; -} - -=head2 make_collector - - Arg [1] : coderef of a function that accepts a single argument and - returns true if that object is to be collected. - Arg [2] : arrayref of an array into which matched object will be pushed - if the test returns true. - - Example : $collector = make_collector(sub { ... }, \@found); - Description: Returns a function that will push matched objects onto a - specified array. - Returntype : coderef - -=cut - -sub make_collector { - my ($test, $listref) = @_; - - return sub { - my ($arg) = @_; - - my $collect = $test->($arg); - push(@{$listref}, $arg) if $collect; - - return $collect; - } -} - =head2 md5sum Arg [1] : string path to a file @@ -321,49 +172,17 @@ sub md5sum { return $md5; } -=head2 modified_between - - Arg [1] : time in seconds since the epoch - Arg [2] : time in seconds since the epoch - - Example : $test = modified_between($start_time, $end_time) - Description: Return a function that accepts a single argument (a - file name string) and returns true if that file has - last been modified between the two specified times in - seconds (inclusive). - Returntype : coderef - -=cut - -sub modified_between { - my ($start, $finish) = @_; - - return sub { - my ($file) = @_; - - my $stat = stat($file); - unless (defined $stat) { - my $wd = `pwd`; - croak "Failed to stat file '$file' in $wd: $!"; - } - - my $mtime = $stat->mtime; - - return ($start <= $mtime) && ($mtime <= $finish); - } -} - 1; __END__ =head1 AUTHOR -Keith James +Keith James , Iain Bancarz =head1 COPYRIGHT AND DISCLAIMER -Copyright (C) 2012, 2015 Genome Research Limited. All Rights Reserved. +Copyright (C) 2012, 2015, 2016 Genome Research Limited. All Rights Reserved. This program is free software: you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General diff --git a/src/perl/lib/WTSI/NPG/Utilities/Archivable.pm b/src/perl/lib/WTSI/NPG/Utilities/Archivable.pm new file mode 100644 index 000000000..8625e0564 --- /dev/null +++ b/src/perl/lib/WTSI/NPG/Utilities/Archivable.pm @@ -0,0 +1,281 @@ +use utf8; + +package WTSI::NPG::Utilities::Archivable; + +use Cwd qw/abs_path cwd/; +use DateTime; +use File::Basename qw/fileparse/; +use File::Find; +use File::Spec qw/catfile/; +use WTSI::DNAP::Utilities::Runnable; +use WTSI::NPG::Utilities::Collector; + +use Moose::Role; + +with qw/WTSI::DNAP::Utilities::Loggable/; + +has 'days_ago' => ( + is => 'ro', + isa => 'Int', + documentation => 'Minimum time, in days, since last modification '. + 'for directory to be archived', + default => 90, + ); + +has 'dir_regex' => + (is => 'ro', + isa => 'RegexpRef', + required => 1, + documentation => 'Regexp to identify directory names (not paths) for '. + 'possible archiving.', + ); + +has 'output_dir' => ( + is => 'ro', + isa => 'Str', + documentation => 'Directory for .tar.gz archive files', + default => sub { cwd() }, + ); + +has 'output_prefix' => ( + is => 'ro', + isa => 'Str', + documentation => 'Prefix for .tar.gz archive filenames, eg. "fluidigm_"', + required => 1, + ); + +has 'pigz_processes' => ( + is => 'ro', + isa => 'Int', + documentation => 'Number of processes to use for pigz compression', + default => 4, + ); + +has 'target_dir' => ( + is => 'ro', + isa => 'Str', + documentation => 'Root directory to search for input files', + default => sub { cwd() }, + ); + +has 'remove' => ( + is => 'ro', + isa => 'Bool', + documentation => 'If true, remove input files after adding to an archive', + default => 1, + ); + +has 'collector' => ( + is => 'ro', + isa => 'WTSI::NPG::Utilities::Collector', + documentation => 'Utility object to collect target files', + lazy => 1, + builder => '_build_collector', + init_arg => undef, +); + +our $VERSION = ''; + +sub BUILD { + my ($self) = @_; + if (! -e $self->output_dir) { + $self->logcroak("Output directory path '", $self->output_dir, + "' does not exist"); + } elsif (! -d $self->output_dir) { + $self->logcroak("Output directory path '", $self->output_dir, + "' is not a directory"); + } + + if (! -e $self->target_dir) { + $self->logcroak("Target directory path '", $self->target_dir, + "' does not exist"); + } elsif (! -d $self->target_dir) { + $self->logcroak("Target directory path '", $self->target_dir, + "' is not a directory"); + } +} + +sub _build_collector { + my ($self) = @_; + my $collector = WTSI::NPG::Utilities::Collector->new( + root => abs_path($self->target_dir), + depth => 2, + regex => $self->dir_regex, + ); + return $collector; +} + + +=head2 add_to_archives + + Arg [1] : [ArrayRef] One or more file or directory paths to be archived + Arg [2] : [Bool] Dry-run status. If true, log archive files which would + be used, but do not actually archive any files. Optional, + defaults to False. + + Example : add_to_archives($files, $dry_run); + Description: Add the given list of files to monthly .tar.gz archives + with names of the form [prefix]_yyy-mm, creating the + archives if necessary. + + Returntype : [Array] Paths to archive files + +=cut + +sub add_to_archives { + my ($self, $inputs, $dry_run) = @_; + my %inputs_by_archive; # hash of arrays of input paths + foreach my $input (@{$inputs}) { + my $mtime = $self->collector->stat_mtime($input); + my $archive_name = $self->monthly_archive_filename($mtime); + my $archive_path = File::Spec->catfile + ($self->output_dir, $archive_name); + push @{$inputs_by_archive{$archive_path}}, $input; + } + my @archives = sort(keys(%inputs_by_archive)); + $self->info("Archive files to be written: ", join(", ", @archives)); + foreach my $archive (@archives) { + my $total = scalar(@{$inputs_by_archive{$archive}}); + if ($dry_run) { + $self->info("Dry-run mode: ", $total, + " inputs for archive path ", $archive); + } else { + $self->info("Adding ", $total, " input(s) to archive path ", + $archive); + $self->_add_to_archive($inputs_by_archive{$archive}, $archive); + } + } + return @archives; +} + + +=head2 find_directories_to_archive + + Args : None + + Example : $dirs = $archiver->find_directories_to_archive() + Description: Return an Array containing directories which are candidates + for archiving. + Returntype : Array[Str] + +=cut + +sub find_directories_to_archive { + my ($self) = @_; + my $now = DateTime->now; + my $threshold = DateTime->from_epoch + (epoch => $now->epoch)->subtract(days => $self->days_ago); + my $t = $threshold->epoch; + return $self->collector->collect_dirs_last_modified_before($t); +} + + +=head2 monthly_archive_filename + + Arg [1] : last modification time of a file, in seconds since the epoch + + Example : $name = $archiver->month_archive_filename($time) + Description: Get the name of a .tar.gz file, of the form + [prefix]_[date].tar.gz, where [date] is of the form yyyy-mm. + Example: fluidigm_2015-08.tar.gz + Returntype : Str + +=cut + +sub monthly_archive_filename { + + my ($self, $epoch_time) = @_; + my $mod_time = DateTime->from_epoch(epoch => $epoch_time); + my $filename = sprintf("%s_%d-%02d.tar.gz", + $self->output_prefix, + $mod_time->year, + $mod_time->month + ); + return $filename; +} + + +sub _add_to_archive { + # This method does not use Perl's Archive::Tar package. This is because + # Archive::Tar reads the entire tarfile into memory, so is not + # appropriate for large archive files. + my ($self, $target_files, $archive_path) = @_; + if (-e $archive_path) { + # limitation of tar: cannot append to compressed files + # instead, need to uncompress, append, and recompress + # use pigz instead of gzip for greater speed + $self->debug("Archive file '", $archive_path, "' already exists"); + WTSI::DNAP::Utilities::Runnable->new( + executable => 'pigz', + arguments => ['-p', $self->pigz_processes, '-d', $archive_path], + )->run(); + my ($uncompressed_name, $dirs, $suffix) = fileparse + ($archive_path, qr/[.][^.]*/msx); + my $uncompressed_path = $dirs.$uncompressed_name; + my @args = ('-uf', $uncompressed_path); + if ($self->remove) { + $self->debug(scalar @{$target_files}, + " target files will be removed after archiving"); + unshift @args, '--remove-files'; + } + push(@args, @{$target_files}); + WTSI::DNAP::Utilities::Runnable->new( + executable => 'tar', + arguments => \@args, + )->run(); + WTSI::DNAP::Utilities::Runnable->new( + executable => 'pigz', + arguments => ['-p', $self->pigz_processes, $uncompressed_path], + )->run(); + $self->debug("Appended to archive file, '", $archive_path, "'"); + } else { + my @args = ('-czf', $archive_path); + if ($self->remove) { + $self->debug(scalar @{$target_files}, + " target files will be removed after archiving"); + unshift @args, '--remove-files'; + } + push(@args, @{$target_files}); + WTSI::DNAP::Utilities::Runnable->new( + executable => 'tar', + arguments => \@args, + )->run(); + $self->debug("Created new archive file '", $archive_path, "'"); + } + return $archive_path; +} + +no Moose; + +1; + +__END__ + +=head1 NAME + +WTSI::NPG::Utilities::Archiver + +=head1 DESCRIPTION + +Role to find candidate files/directories for archiving, and store them +in gzipped tar files. + +=head1 AUTHOR + +Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2016 Genome Research Limited. All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/lib/WTSI/NPG/Utilities/Collector.pm b/src/perl/lib/WTSI/NPG/Utilities/Collector.pm new file mode 100644 index 000000000..f9753d5c8 --- /dev/null +++ b/src/perl/lib/WTSI/NPG/Utilities/Collector.pm @@ -0,0 +1,372 @@ +use utf8; + +package WTSI::NPG::Utilities::Collector; + +use DateTime; +use File::Find; +use File::stat; + +use Moose; + +our $VERSION = ''; + +with qw/WTSI::DNAP::Utilities::Loggable/; + +has 'root' => + (is => 'ro', + isa => 'Str', + documentation => "Root path in which to begin file/directory search", + required => 1); + +has 'depth' => + (is => 'ro', + isa => 'Maybe[Int]', + documentation => "Maximum depth of search", + default => sub { undef; } ); + +has 'regex' => + (is => 'ro', + isa => 'Maybe[RegexpRef]', + lazy => 1, + documentation => "Regular expression to filter files/directories", + default => sub { undef; } ); + +has 'start_depth' => + (is => 'ro', + isa => 'Int', + documentation => "Starting depth of search", + lazy => 1, + builder => '_build_start_depth', + init_arg => undef); + +has 'stop_depth' => + (is => 'ro', + isa => 'Maybe[Int]', + lazy => 1, + documentation => "Starting depth of search", + builder => '_build_stop_depth', + init_arg => undef); + +sub BUILD { + + my ($self) = @_; + if ($self->root eq '') { + $self->logcroak('A non-empty root argument is required'); + } elsif (! -d $self->root) { + $self->logcroak("Root argument '", $self->root, "' is not a directory"); + } else { + $self->debug("Root for filesystem search: '", $self->root, "'"); + } +} + +sub _build_start_depth { + my ($self) = @_; + my $start_depth = $self->root =~ tr[/][]; + $self->debug("Start depth for filesystem search is ", $start_depth); + return $start_depth; +} + +sub _build_stop_depth { + my ($self) = @_; + my $stop_depth; + if (defined $self->depth) { + $stop_depth = $self->start_depth + $self->depth; + $self->debug("Stop depth for filesystem search is ", $stop_depth); + } else { + $self->debug("Stop depth not defined, searching entire directory tree."); + } + return $stop_depth; +} + +=head2 collect_dirs + + Arg [1] : coderef of a function that accepts a single argument and + returns true if that object is to be collected. + + Example : @dirs = $collector->collect_dirs($modified) + Description: Return an array of directory names present for which the test + predicate returns true. + Returntype : array of strings (dir names) + +=cut + +sub collect_dirs { + my ($self, $test) = @_; + my @dirs; + my $collector = $self->make_collector_function($test, \@dirs); + + find({preprocess => sub { + my $current_depth = $File::Find::name =~ tr[/][]; + + my @dirs; + if (!defined $self->stop_depth || + $current_depth < $self->stop_depth) { + @dirs = grep { -d && ! /^[.]+$/msx } @_; + } + + return @dirs; + }, + wanted => sub { + my $current_depth = $File::Find::name =~ tr[/][]; + + if (!defined $self->stop_depth || + $current_depth < $self->stop_depth) { + if ($self->regex) { + $collector->($File::Find::name) if $_ =~ $self->regex; + } + else { + $collector->($File::Find::name); + } + } + } + }, $self->root); + + return @dirs; +} + + +=head2 collect_dirs_last_modified_before + + Arg [1] : Finish time, in seconds since the epoch + + Example : @dirs = $c->collect_dirs_last_modified_before($finish) + Description: Return an array of directory names present under the specified + root, for which the test predicate returns true, up to the + specified depth. + Returntype : array of strings (dir names) + +=cut + +sub collect_dirs_last_modified_before { + my ($self, $finish) = @_; + return $self->collect_dirs($self->last_modified_before($finish)); +} + + +=head2 collect_dirs_modified_between + + Arg [1] : Start time, in seconds since the epoch + Arg [2] : Finish time, in seconds since the epoch + + Example : @dirs = $c->collect_dirs_modified_between($start, $finish) + Description: Return an array of directory names present under the specified + root, for which the test predicate returns true, up to the + specified depth. + Returntype : array of strings (dir names) + +=cut + +sub collect_dirs_modified_between { + my ($self, $start, $finish) = @_; + my $test = $self->modified_between($start, $finish); + return $self->collect_dirs($test); +} + +=head2 collect_files + + Arg [1] : coderef of a function that accepts a single argument and + returns true if that object is to be collected. + + Example : @files = $collector->collect_files($modified) + Description: Returns an array of file names present, for which the test + predicate returns true. + Returntype : array of strings (file names) + +=cut + +sub collect_files { + my ($self, $test) = @_; + my @files; + my $collector = $self->make_collector_function($test, \@files); + + find({preprocess => sub { + my $current_depth = $File::Find::dir =~ tr[/][]; + + my @elts; + if (!defined $self->stop_depth || + $current_depth < $self->stop_depth) { + # Remove any dirs except . and .. + @elts = grep { ! /^[.]+$/msx } @_; + } + + return @elts; + }, + wanted => sub { + my $current_depth = $File::Find::dir =~ tr[/][]; + + if (!defined $self->stop_depth || + $current_depth < $self->stop_depth) { + if (-f) { + if ($self->regex) { + $collector->($File::Find::name) if $_ =~ $self->regex; + } + else { + $collector->($File::Find::name) + } + } + } + } + }, $self->root); + + return @files; +} + +=head2 collect_files_simple + + Args : None + Example : @files = $collector->collect_files_simple() + Description: Collect files, restricted only by the 'regex' and 'depth' + attributes (if any). No other tests are applied. + Returntype : array of strings (dir names) + +=cut + +sub collect_files_simple { + my ($self) = @_; + my $test = sub { return 1 }; + + return $self->collect_files(sub {return 1;}); +} + +=head2 make_collector_function + + Arg [1] : coderef of a function that accepts a single argument and + returns true if that object is to be collected. + Arg [2] : arrayref of an array into which matched object will be pushed + if the test returns true. + + Example : $coll_fun = make_collector_function(sub { ... }, \@found); + Description: Returns a function that will push matched objects onto a + specified array. + Returntype : coderef + +=cut + +sub make_collector_function { + my ($self, $test, $listref) = @_; + + return sub { + my ($arg) = @_; + + my $collect = $test->($arg); + if ($collect) { + push(@{$listref}, $arg); + $self->debug("Added '$arg' to array of filesystem objects"); + } + return $collect; + } +} + +=head2 modified_between + + Arg [1] : time in seconds since the epoch + Arg [2] : time in seconds since the epoch + + Example : $test = $collector->modified_between($start_time, $end_time) + Description: Return a function that accepts a single argument (a + file name string) and returns true if that file has + last been modified between the two specified times in + seconds (inclusive). + + Return value can be used as the $test argument to + make_collector_function(). + Returntype : coderef + +=cut + +sub modified_between { + my ($self, $start, $finish) = @_; + + return sub { + my ($file) = @_; + my $mtime = $self->stat_mtime($file); + return ($start <= $mtime) && ($mtime <= $finish); + } +} + + +=head2 last_modified_before + + Arg [1] : time in seconds since the epoch + + Example : $test = $collector->last_modified_before($time) + Description: Return a function that accepts a single argument (a + file name string) and returns true if that file was + last modified before (ie. is older than) the specified + time in seconds. + + Return value can be used as the $test argument to + make_collector_function(). + Returntype : coderef + +=cut + +sub last_modified_before { + my ($self, $threshold) = @_; + + return sub { + my ($file) = @_; + my $mtime = $self->stat_mtime($file); + return $mtime <= $threshold; + } +} + +=head2 stat_mtime + + Arg [1] : file path + + Example : $time = $collector->stat_mtime($file); + Description: Safely stat the given file and return its mtime. + Returntype : Int + +=cut + +sub stat_mtime { + my ($self, $file) = @_; + my $stat = stat($file); + unless (defined $stat) { + my $wd = `pwd`; + $self->logcroak("Failed to stat file '$file' in $wd: $!"); + } + my $mtime = $stat->mtime; + return $mtime; +} + + +no Moose; + +1; + + + +__END__ + +=head1 NAME + +WTSI::NPG::Utilities::Collector + +=head1 DESCRIPTION + +Utility class to evaluate whether files and directories meet given criteria, +and search a filesystem tree for matching entries. Acts as a wrapper for +the Perl File::Find module. + +=head1 AUTHOR + +Iain Bancarz + +=head1 COPYRIGHT AND DISCLAIMER + +Copyright (C) 2016 Genome Research Limited. All Rights Reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the Perl Artistic License or the GNU General +Public License as published by the Free Software Foundation, either +version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +=cut diff --git a/src/perl/t/WTSI/NPG/ArchivableTest.pm b/src/perl/t/WTSI/NPG/ArchivableTest.pm new file mode 100644 index 000000000..ced3952f2 --- /dev/null +++ b/src/perl/t/WTSI/NPG/ArchivableTest.pm @@ -0,0 +1,141 @@ +use utf8; + +package WTSI::NPG::ArchivableTest; + +use strict; +use warnings; + +use base qw(WTSI::NPG::Test); +use Archive::Tar; +use Cwd qw(abs_path); +use DateTime; +use File::Spec; +use File::Temp qw(tempdir); +use Test::More tests => 12; +use Test::Exception; + +{ + package WTSI::NPG::Utilities::TestArchiver; + + use Moose; + + with 'WTSI::NPG::Utilities::Archivable'; + + has 'dir_regex' => + (is => 'ro', + isa => 'RegexpRef', + default => sub { return qr/^\d{5}$/msx; } + ); + + has 'output_prefix' => ( + is => 'ro', + isa => 'Str', + default => 'test', + ); + + __PACKAGE__->meta->make_immutable; + + no Moose; + + 1; +} + +use Log::Log4perl; +Log::Log4perl::init('./etc/log4perl_tests.conf'); +our $log = Log::Log4perl->get_logger(); + +BEGIN { use_ok('WTSI::NPG::Utilities::TestArchiver'); } + +my $tempdir; +my $data_path = './t/archiver'; +my $output_prefix = 'test'; + +sub make_fixture : Test(setup) { + $tempdir = tempdir( "ArchivableTest_XXXXXX", CLEANUP => 1); + $tempdir = abs_path($tempdir); + my @dirnames = qw/12345 13579 24680 1234567890/; + foreach my $name (@dirnames) { + my $dirpath = File::Spec->catfile($tempdir, $name); + mkdir($dirpath); + `cp $data_path/lorem.txt $dirpath`; + if ($name eq '12345' || $name eq '13579' || $name eq '1234567890') { + `touch $dirpath -d 2000-01-01`; # change modification time + `touch $dirpath/lorem.txt -d 2000-01-01`; + } + } +} + +sub add_to_archives : Test(8) { + my $archiver = WTSI::NPG::Utilities::TestArchiver->new( + output_dir => $tempdir, + ); + my @files = ( File::Spec->catfile($tempdir, '12345', 'lorem.txt'), + File::Spec->catfile($tempdir, '13579', 'lorem.txt'), + ); + my @archive_files = $archiver->add_to_archives(\@files); + my $expected_archive = File::Spec->catfile($tempdir, + 'test_2000-01.tar.gz'); + is_deeply(\@archive_files, [$expected_archive, ], + "Archive file path matches expected value"); + my $archive_file = $archive_files[0]; + ok(-e $archive_file, "Archive file '$archive_file' exists"); + + my $tar = Archive::Tar->new(); + $tar->read($archive_file); + my @contents = $tar->list_files(); + for (my $i=0;$i<@contents;$i++) { + # tar removes the leading / from paths in its listing + is("/".$contents[$i], $files[$i], + "File ".$files[$i]." appears in archive contents"); + } + # test appending to an existing archive + my $extra_file = File::Spec->catfile($tempdir, '24680', 'lorem.txt'); + `touch -d 2000-01-01 $extra_file`; + ok($archiver->add_to_archives([$extra_file]), + 'Extra file added to archive'); + $tar->read($archive_file); + @contents = $tar->list_files(); + push(@files, $extra_file); + for (my $i=0;$i<@contents;$i++) { + # tar removes the leading / from paths in its listing + is("/".$contents[$i], $files[$i], + "File ".$files[$i]." appears in updated archive contents"); + } +} + +sub find_directories_to_archive : Test(1) { + my $archiver = WTSI::NPG::Utilities::TestArchiver->new( + output_dir => $tempdir, + target_dir => $tempdir, + days_ago => 30, + ); + my @found_dirs = $archiver->find_directories_to_archive(); + my @expected_dirs = (File::Spec->catfile($tempdir, '12345'), + File::Spec->catfile($tempdir, '13579')); + is_deeply(\@found_dirs, \@expected_dirs, + "Candidate directories for archiving match expected values"); +} + +sub monthly_archive_name : Test(1) { + my $dt = DateTime->new( + year => 2016, + month => 4, + day => 1, + ); + my $time = $dt->epoch; + my $archiver = WTSI::NPG::Utilities::TestArchiver->new( + output_dir => $tempdir, + ); + is($archiver->monthly_archive_filename($time), 'test_2016-04.tar.gz', + 'Monthly archive filename matches expected value'); + +} + +sub output_directory : Test(1) { + my $output_dir = "/dummy/nonexistent/directory"; + dies_ok { + WTSI::NPG::Utilities::TestArchiver->new(output_dir => $output_dir); + }, "Dies on nonexistent output directory"; +} + +1; diff --git a/src/perl/t/WTSI/NPG/CollectorTest.pm b/src/perl/t/WTSI/NPG/CollectorTest.pm new file mode 100644 index 000000000..625bb0d61 --- /dev/null +++ b/src/perl/t/WTSI/NPG/CollectorTest.pm @@ -0,0 +1,125 @@ +use utf8; + +package WTSI::NPG::CollectorTest; + +use strict; +use warnings; +use File::Temp qw(tempfile); + +use base qw(WTSI::NPG::Test); +use Test::More tests => 11; +use Test::Exception; + +use Log::Log4perl; + +Log::Log4perl::init('./etc/log4perl_tests.conf'); + +BEGIN { use_ok('WTSI::NPG::Utilities::Collector'); } + +use WTSI::NPG::Utilities::Collector; + +my $data_path = './t/collector'; + +sub test_collect_files : Test(4) { + + # Accept all files + my $file_test = sub { + my ($file) = @_; + return 1; + }; + + my $collect_path = "$data_path/collect_files"; + + my @depths = (1, 2, 3, undef); + my @expected = ( + [], + ["$collect_path/a/10.txt", + "$collect_path/b/20.txt", + "$collect_path/c/30.txt"], + ["$collect_path/a/10.txt", + "$collect_path/a/x/1.txt", + "$collect_path/b/20.txt", + "$collect_path/b/y/2.txt", + "$collect_path/c/30.txt", + "$collect_path/c/z/3.txt"], + ["$collect_path/a/10.txt", + "$collect_path/a/x/1.txt", + "$collect_path/b/20.txt", + "$collect_path/b/y/2.txt", + "$collect_path/c/30.txt", + "$collect_path/c/z/3.txt"] + ); + for (my $i=0;$i<@depths;$i++) { + my $collector = WTSI::NPG::Utilities::Collector->new( + root => $collect_path, + depth => $depths[$i], + ); + is_deeply([$collector->collect_files($file_test)], + $expected[$i]); + } +} + +sub test_collect_dirs : Test(5) { + + # Accept all dirs + my $dir_test = sub { + my ($dir) = @_; + return 1; + }; + + my $collect_path = "$data_path/collect_files"; + + my @depths = (1, 2, 3, undef); + my @expected = ( + ["$collect_path"], + ["$collect_path", + "$collect_path/a", + "$collect_path/b", + "$collect_path/c"], + ["$collect_path", + "$collect_path/a", + "$collect_path/a/x", + "$collect_path/b", + "$collect_path/b/y", + "$collect_path/c", + "$collect_path/c/z"], + ["$collect_path", + "$collect_path/a", + "$collect_path/a/x", + "$collect_path/b", + "$collect_path/b/y", + "$collect_path/c", + "$collect_path/c/z"] + ); + for (my $i=0;$i<@depths;$i++) { + my $collector = WTSI::NPG::Utilities::Collector->new( + root => $collect_path, + depth => $depths[$i], + ); + is_deeply([$collector->collect_dirs($dir_test)], + $expected[$i]); + } + + # collect with regex + my $collector = WTSI::NPG::Utilities::Collector->new( + root => $collect_path, + depth => 2, + regex => qr/^[ab]$/msx); + is_deeply([$collector->collect_dirs($dir_test)], + ["$collect_path/a", + "$collect_path/b"]); +} + +sub test_modified_between : Test(1) { + my $then = DateTime->now; + my ($fh, $file) = tempfile(); + my $now = DateTime->now; + my $collect_path = "$data_path/collect_files"; + + my $collector = WTSI::NPG::Utilities::Collector->new( + root => $collect_path, + ); + + my $fn = $collector->modified_between($then->epoch, $now->epoch); + ok($fn->($file)); +} diff --git a/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/ArchiverTest.pm b/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/ArchiverTest.pm new file mode 100644 index 000000000..81d8d8b6b --- /dev/null +++ b/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/ArchiverTest.pm @@ -0,0 +1,226 @@ +use utf8; + + +{ + package WTSI::NPG::Database::WarehouseStub; + # needed for Fluidigm publisher + + use Moose; + use Carp; + + extends 'WTSI::NPG::Database'; + + has 'test_id_lims' => + (is => 'rw', + isa => 'Str', + required => 0, + default => sub { 'SQSCP' }); + + has 'test_sanger_sample_id' => + (is => 'rw', + isa => 'Str | Undef', + required => 0, + default => sub { '0123456789' }); + + sub find_fluidigm_sample_by_plate { + my ($self, $fluidigm_barcode, $well) = @_; + + $well eq 'S01' or + confess "WarehouseStub expected well argument 'S01' but got '$well'"; + + return {id_lims => $self->test_id_lims, + id_sample_lims => 123456789, + sanger_sample_id => $self->test_sanger_sample_id, + consent_withdrawn => 0, + donor_id => 'D999', + uuid => 'AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDD', + name => 'sample1', + common_name => 'Homo sapiens', + supplier_name => 'aaaaaaaaaa', + accession_number => 'A0123456789', + gender => 'Female', + cohort => 'AAA111222333', + control => 'XXXYYYZZZ', + study_id => 0, + barcode_prefix => 'DN', + barcode => '0987654321', + plate_purpose_name => 'Fluidigm', + map => 'S01'}; + } +} + + +package WTSI::NPG::Genotyping::Fluidigm::ArchiverTest; + +use strict; +use warnings; + +use base qw(WTSI::NPG::Test); +use Archive::Tar; +use Cwd qw(abs_path); +use File::Temp qw(tempdir); +use Test::More tests => 15; +use Test::Exception; +use WTSI::NPG::Database::WarehouseStub; +use WTSI::NPG::iRODS; +use WTSI::NPG::Genotyping::Fluidigm::Archiver; +use WTSI::NPG::Genotyping::Fluidigm::Publisher; +use WTSI::NPG::Genotyping::Fluidigm::ResultSet; +use WTSI::NPG::iRODS::Collection; +use WTSI::NPG::iRODS::DataObject; + +use Log::Log4perl; +Log::Log4perl::init('./etc/log4perl_tests.conf'); +our $log = Log::Log4perl->get_logger(); + +BEGIN { use_ok('WTSI::NPG::Genotyping::Fluidigm::Archiver'); } + +my $data_path = './t/fluidigm_archiver'; +my $fluidigm_directory_name = "0123456789"; +my $fluidigm_directory = $data_path."/".$fluidigm_directory_name; +my $snpset_file = 'qc.tsv'; +my $tmp; +my $fluidigm_tmp; +my $resultset; +my $reference_path; +my $irods_tmp_coll; +my $pid = $$; + +sub make_fixture : Test(setup) { + # create a Fluidigm resultset and publish to temp iRODS collection + my $irods = WTSI::NPG::iRODS->new; + $irods_tmp_coll = "FluidigmPublisherTest.$pid"; + $irods->add_collection($irods_tmp_coll); + $irods->add_object("$data_path/$snpset_file", + "$irods_tmp_coll/$snpset_file"); + $reference_path = WTSI::NPG::iRODS::Collection->new + ($irods, "$irods_tmp_coll" )->absolute->str; + my $snpset_obj = WTSI::NPG::iRODS::DataObject->new + ($irods, "$irods_tmp_coll/$snpset_file" )->absolute; + $snpset_obj->add_avu('fluidigm_plex', 'qc'); + $snpset_obj->add_avu('reference_name', 'Homo_sapiens (1000Genomes)'); + my $publication_time = DateTime->now; + my $resultset = WTSI::NPG::Genotyping::Fluidigm::ResultSet->new + (directory => $fluidigm_directory); + my $inifile = File::Spec->catfile($ENV{HOME}, '.npg/genotyping.ini'); + my $whdb = WTSI::NPG::Database::WarehouseStub->new + (name => 'ml_warehouse', + inifile => $inifile, + test_id_lims => 'SQSCP'); + my $publisher = WTSI::NPG::Genotyping::Fluidigm::Publisher->new + (publication_time => $publication_time, + resultset => $resultset, + reference_path => $reference_path, + warehouse_db => $whdb); + $publisher->publish($irods_tmp_coll); + $tmp = tempdir('FluidigmArchiverTest_XXXXXX', CLEANUP => 1); + $tmp = abs_path($tmp); + $fluidigm_tmp = File::Spec->catfile($tmp, $fluidigm_directory_name); + `cp -R $fluidigm_directory $tmp`; +} + +sub teardown : Test(teardown) { + my $irods = WTSI::NPG::iRODS->new; + $irods->remove_collection($irods_tmp_coll); + undef $resultset; +} + +sub ready_to_archive : Test(3) { + my $irods = WTSI::NPG::iRODS->new; + my $archiver = WTSI::NPG::Genotyping::Fluidigm::Archiver->new + (irods_root => $irods_tmp_coll, + output_dir => $tmp, + target_dir => $tmp, + dir_regex => qr{^\d{10}$}msxi, + days_ago => 90, + ); + + # set mtime of test data to the current date/time + `find $fluidigm_tmp | xargs touch`; + my @to_archive_new = $archiver->find_directories_to_archive(); + is_deeply(\@to_archive_new, [ ], + "New directory is not OK for archiving"); + + # reset mtime to an old date/time + `find $fluidigm_tmp | xargs touch -d 2000-01-01`; + my @to_archive_old = $archiver->find_directories_to_archive(); + is_deeply(\@to_archive_old, [ abs_path($fluidigm_tmp), ], + "Old directory is OK for archiving"); + + # remove iRODS publication metadata; causes check to fail + my @results = $irods->find_objects_by_meta( + $irods_tmp_coll, + [fluidigm_plate => '1381735059'], + [fluidigm_well => 'S70'], + ); + my $result = shift @results; + $irods->remove_object_avu($result, 'fluidigm_plate', '1381735059'); + my @to_archive_unpub = $archiver->find_directories_to_archive(); + is_deeply(\@to_archive_unpub, [ ], + "Unpublished directory is not OK for archiving"); +} + +sub irods_publication : Test(1) { + # tests a method of the Collector attribute in the Archiver class + my $irods = WTSI::NPG::iRODS->new; + my $archiver = WTSI::NPG::Genotyping::Fluidigm::Archiver->new + (irods => $irods, + irods_root => $irods_tmp_coll, + output_dir => $tmp, + days_ago => 90, + ); + ok($archiver->collector->irods_publication_ok($fluidigm_tmp), + "$fluidigm_tmp published to iRODS OK"); +} + +sub script : Test(3) { + # reset mtime to an old date/time + `find $fluidigm_tmp | xargs touch -d 2000-01-01`; + my $script = './bin/archive_fluidigm_genotypes.pl'; + my $output = "$tmp/fluidigm.txt"; + ok(system(join q{ }, "$script", + "--input_dir $tmp", + "--irods_root $irods_tmp_coll", + "--output_dir $tmp", + "2> $output", + ) == 0, "$script ran with zero exit status"); + my $archive_file = $tmp."/fluidigm_2000-01.tar.gz"; + ok(-e $archive_file, 'Expected .tar.gz output exists'); + my $tar = Archive::Tar->new(); + $tar->read($archive_file); + my @contents = $tar->list_files(); + is(scalar @contents, 6, 'Correct number of entries in .tar.gz archive'); +} + +sub script_dry_run : Test(7) { + # test the script in dry-run mode + # reset mtime to an old date/time + `find $fluidigm_tmp | xargs touch -d 2000-01-01`; + my $script = './bin/archive_fluidigm_genotypes.pl'; + my $output = "$tmp/fluidigm.txt"; + ok(system(join q{ }, "$script", + "--input_dir $tmp", + "--irods_root $irods_tmp_coll", + "--output_dir $tmp", + "--verbose", + "--dry_run", + "2> $output", + ) == 0, "$script ran in dry-run mode with zero exit status"); + # check no archive has been written + my @archive_files = glob("$tmp/*.tar.gz"); + is(scalar @archive_files, 0, 'No .tar.gz output in dry-run mode'); + # check archivable files are still present + my $tmp_fluidigm_dir = "$tmp/$fluidigm_directory_name"; + my @archivable_files = ("$tmp_fluidigm_dir/0123456789.csv", ); + foreach my $name (qw/aramis.tif athos.tif porthos.tif/) { + push @archivable_files, "$tmp_fluidigm_dir/Data/$name"; + } + foreach my $path (@archivable_files) { + ok(-e $path, "Archivable file $path exists after dry run"); + } + # check for expected log output + my $msg = '"Dry-run mode: 1 inputs for archive path $archive_file"'; + is(system("grep $msg $output"), 0, "Dry-run status OK in log output"); + + +} diff --git a/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/PublisherTest.pm b/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/PublisherTest.pm index 0c4cd57b8..8e3ac6b3c 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/PublisherTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/PublisherTest.pm @@ -206,8 +206,13 @@ sub publish_sqscp_no_id : Test(19) { warehouse_db => $whdb); my @addresses_to_publish = qw(S01); - my $num_published = $publisher->publish($irods_tmp_coll, - @addresses_to_publish); + my $num_published; + do { + local *STDERR; + open (STDERR, '>', '/dev/null'); # suppress warning output to STDERR + $num_published = $publisher->publish($irods_tmp_coll, + @addresses_to_publish); + }; cmp_ok($num_published, '==', scalar @addresses_to_publish, "Number of chunks published"); diff --git a/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/SubscriberTest.pm b/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/SubscriberTest.pm index 8d1dd900b..c3390be24 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/SubscriberTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/Fluidigm/SubscriberTest.pm @@ -256,10 +256,13 @@ sub get_calls : Test(31) { $resultset_obj->add_avu('fluidigm_well', 'S01'); $resultset_obj->add_avu('dcterms:identifier', $sample_identifiers[0]); $resultset_obj->add_avu('dcterms:identifier', $non_unique_identifier); - - @calls_observed = _get_observed_calls($irods, $irods_tmp_coll, - $reference_name, $snpset_name, - 'ABC0123456789'); + do { + local *STDERR; + open (STDERR, '>', '/dev/null'); # suppress warning output to STDERR + @calls_observed = _get_observed_calls($irods, $irods_tmp_coll, + $reference_name, $snpset_name, + 'ABC0123456789'); + }; # Merging 3 un-mergable resultsets is (scalar @calls_expected, scalar @calls_observed, diff --git a/src/perl/t/WTSI/NPG/Genotyping/Infinium/PublisherTest.pm b/src/perl/t/WTSI/NPG/Genotyping/Infinium/PublisherTest.pm index 29cfac79b..ce54cd5c9 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/Infinium/PublisherTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/Infinium/PublisherTest.pm @@ -130,9 +130,6 @@ use WTSI::NPG::Database::Warehouse; use WTSI::NPG::Genotyping::Database::Infinium; use WTSI::NPG::Genotyping::Infinium::Publisher; use WTSI::NPG::iRODS; -use WTSI::NPG::Utilities qw(collect_files - collect_dirs - modified_between); my $config = $ENV{HOME} . "/.npg/genotyping.ini"; diff --git a/src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/IdentityTest.pm b/src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/CheckTest.pm similarity index 94% rename from src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/IdentityTest.pm rename to src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/CheckTest.pm index 02ecad859..b6a17ee0b 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/IdentityTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/CheckTest.pm @@ -1,5 +1,5 @@ -package WTSI::NPG::Genotyping::QC_wip::Check::IdentityTest; +package WTSI::NPG::Genotyping::QC::BayesianIdentity::CheckTest; use strict; use warnings; @@ -14,8 +14,8 @@ use Test::Exception; use plink_binary; use WTSI::NPG::Genotyping::Call; -use WTSI::NPG::Genotyping::QC_wip::Check::Identity; -use WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::Check; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric; use WTSI::NPG::Genotyping::SNPSet; Log::Log4perl::init('./etc/log4perl_tests.conf'); @@ -40,12 +40,12 @@ my @qc_sample_names = qw/urn:wtsi:249441_F11_HELIC5102138 urn:wtsi:249461_G12_HELIC5215300/; sub require : Test(1) { - require_ok('WTSI::NPG::Genotyping::QC_wip::Check::Identity'); + require_ok('WTSI::NPG::Genotyping::QC::BayesianIdentity::Check'); } sub find_identity : Test(2) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); # get fake QC results for a few samples; others will appear as missing @@ -67,7 +67,7 @@ sub find_identity_insufficient_snps : Test(3) { my $tempdir = tempdir("IdentityTest.$pid.XXXXXX", CLEANUP => 1); my $json_path = "$tempdir/identity.json"; my $csv_path = "$tempdir/identity.csv"; - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); # get fake QC results for a few samples; others will appear as missing @@ -84,7 +84,7 @@ sub find_identity_insufficient_snps : Test(3) { sub num_samples : Test(1) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); @@ -93,7 +93,7 @@ sub num_samples : Test(1) { sub sample_names : Test(1) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); @@ -110,7 +110,7 @@ sub sample_names : Test(1) { sub shared_snp_names : Test(1) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); @@ -141,7 +141,7 @@ sub shared_snp_names : Test(1) { sub production_calls : Test(18) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); @@ -193,7 +193,7 @@ sub run_identity_checks : Test(3) { my $tempdir = tempdir("IdentityTest.$pid.XXXXXX", CLEANUP => 1); my $json_path = $tempdir."/identity.json"; my $csv_path = $tempdir."/identity.csv"; - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_path, snpset => $snpset); # get fake QC results for a few samples; others will appear as missing @@ -211,7 +211,7 @@ sub run_identity_checks : Test(3) { sub sample_swap_evaluation : Test(14) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_swap, snpset => $snpset); my $sample_ids = _get_swap_sample_identities(); @@ -259,7 +259,7 @@ sub sample_swap_evaluation : Test(14) { sub script : Test(13) { # test of command-line script # Could move this into Scripts.pm (which is slow to run, ~10 minutes) - my $identity_script_wip = "./bin/check_identity_bed_wip.pl"; + my $identity_script_wip = "./bin/check_identity_bayesian.pl"; my $tempdir = tempdir("IdentityTest.script.$pid.XXXXXX", CLEANUP => 1); my $jsonPath = "$tempdir/identity.json"; my $csvPath = "$tempdir/identity.csv"; @@ -337,10 +337,10 @@ sub _get_swap_sample_identities { # Some fake QC data # - List of 3 'failed' sample names, 2 of which are swapped - # - Create SampleIdentityBayesian object for each sample + # - Create SampleMetric object for each sample my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $check = WTSI::NPG::Genotyping::QC_wip::Check::Identity->new + my $check = WTSI::NPG::Genotyping::QC::BayesianIdentity::Check->new (plink_path => $plink_swap, snpset => $snpset); my $qc_calls = _get_qc_calls(); @@ -356,9 +356,7 @@ sub _get_swap_sample_identities { qc_calls => $qc_calls->{$sample_name}, pass_threshold => $pass_threshold, sample_mismatch_prior => $sample_mismatch_prior); - my $sample_id = - WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> - new(\%args); + my $sample_id = WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric->new(\%args); push (@sample_identities, $sample_id); } return \@sample_identities; diff --git a/src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesianTest.pm b/src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetricTest.pm similarity index 94% rename from src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesianTest.pm rename to src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetricTest.pm index 4502506a6..0f0e1e4cc 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/SampleIdentityBayesianTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SampleMetricTest.pm @@ -1,5 +1,5 @@ -package WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesianTest; +package WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetricTest; use strict; use warnings; @@ -11,7 +11,7 @@ use Test::More tests => 9; use Test::Exception; use WTSI::NPG::Genotyping::Call; -use WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric; use WTSI::NPG::Genotyping::SNPSet; Log::Log4perl::init('./etc/log4perl_tests.conf'); @@ -166,7 +166,7 @@ sub setup : Test(setup) { sub require : Test(1) { - require_ok('WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian'); + require_ok('WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric'); } sub construct : Test(1) { @@ -181,7 +181,7 @@ sub construct : Test(1) { sample_mismatch_prior => $sample_mismatch_prior, ); - new_ok('WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian' + new_ok('WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric' => \@args); } @@ -189,7 +189,7 @@ sub output : Test(5) { my $snpset = WTSI::NPG::Genotyping::SNPSet->new($snpset_file); - my $sib = WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> + my $sib = WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric-> new(sample_name => $sample_name, snpset => $snpset, production_calls => $production_calls, @@ -228,7 +228,7 @@ sub output : Test(5) { push @anonymous_qc_calls, $new_call; } my $anon_sib = - WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> + WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric-> new(sample_name => $sample_name, snpset => $snpset, production_calls => $production_calls, @@ -258,7 +258,7 @@ sub metric : Test(2) { qc_calls => $qc_calls, pass_threshold => $pass_threshold, sample_mismatch_prior => $sample_mismatch_prior); - my $sib = WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> + my $sib = WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric-> new(\%args); ok(abs($sib->identity - $expected_big) < $delta, "Identity matches expected value, large test set"); @@ -270,7 +270,7 @@ sub metric : Test(2) { pass_threshold => $pass_threshold, sample_mismatch_prior => $sample_mismatch_prior); my $sib_small = - WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesian-> + WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetric-> new(\%args); ok(abs($sib_small->identity - $expected_small) < $delta, "Identity matches expected value, small test set"); diff --git a/src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulatorTest.pm b/src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SimulatorTest.pm similarity index 89% rename from src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulatorTest.pm rename to src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SimulatorTest.pm index 6e081b3ab..24bd6b6dd 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/QC_wip/Check/IdentitySimulatorTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/QC/BayesianIdentity/SimulatorTest.pm @@ -1,5 +1,5 @@ -package WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulatorTest; +package WTSI::NPG::Genotyping::QC::BayesianIdentity::SimulatorTest; use strict; use warnings; @@ -11,7 +11,7 @@ use Test::Exception; use Text::CSV; use WTSI::NPG::Genotyping::Call; -use WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator; +use WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator; use WTSI::NPG::Genotyping::SNPSet; Log::Log4perl::init('./etc/log4perl_tests.conf'); @@ -63,14 +63,14 @@ sub setup : Test(setup) { genotype => $genotype) } @data; $calls = \@calls; - my $id_sim = WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator->new( + my $id_sim = WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator->new( calls => \@calls, snpset => $snpset ); } sub require : Test(1) { - require_ok('WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator'); + require_ok('WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator'); } @@ -78,7 +78,7 @@ sub construct : Test(1) { my @args = (snpset => $snpset, calls => $calls); - new_ok('WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator' + new_ok('WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator' => \@args); } @@ -102,7 +102,7 @@ sub script : Test(11) { sub simulate : Test(5) { - my $id_sim = WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulator->new( + my $id_sim = WTSI::NPG::Genotyping::QC::BayesianIdentity::Simulator->new( snpset => $snpset, calls => $calls); my $results; diff --git a/src/perl/t/WTSI/NPG/Genotyping/QC/CollationTest.pm b/src/perl/t/WTSI/NPG/Genotyping/QC/CollatorTest.pm similarity index 87% rename from src/perl/t/WTSI/NPG/Genotyping/QC/CollationTest.pm rename to src/perl/t/WTSI/NPG/Genotyping/QC/CollatorTest.pm index 92bbf20d7..8ff407687 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/QC/CollationTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/QC/CollatorTest.pm @@ -1,6 +1,6 @@ use utf8; -package WTSI::NPG::Genotyping::QC::CollationTest; +package WTSI::NPG::Genotyping::QC::CollatorTest; use strict; use warnings; @@ -14,17 +14,17 @@ use JSON; use Text::CSV; use base qw(WTSI::NPG::Test); -use Test::More tests => 16; +use Test::More tests => 19; use Test::Exception; -use WTSI::NPG::Genotyping::QC::Collation qw(collate); +use WTSI::NPG::Genotyping::QC::Collator; use WTSI::NPG::Genotyping::QC::QCPlotShared qw(readSampleInclusion); Log::Log4perl::init('./etc/log4perl_tests.conf'); our $log = Log::Log4perl->get_logger(); -BEGIN { use_ok('WTSI::NPG::Genotyping::QC::Collation'); } +BEGIN { use_ok('WTSI::NPG::Genotyping::QC::Collator'); } my $temp_dir; my $dbName = 'small_test.db'; @@ -32,7 +32,6 @@ my $data_dir = "$Bin/qc_test_data/"; my $example_dir = catfile($data_dir, 'output_examples'); my $configPath = catfile($data_dir, 'config_test.json'); -my $thresholdPath = $configPath; my $dbPath = catfile($data_dir, 'small_test.db'); my $iniPath = $ENV{HOME} . "/.npg/genotyping.ini"; @@ -43,7 +42,7 @@ my $csvExpected = catfile($example_dir, 'qc_results.csv'); my $expectedCsvContents; sub make_fixture : Test(setup) { - $temp_dir = tempdir("CollationTest_XXXXXX", CLEANUP => 1); + $temp_dir = tempdir("CollatorTest_XXXXXX", CLEANUP => 1); open my $fh, "<", $csvExpected || $log->logcroak("Cannot open CSV '", $csvExpected, "'"); my $csv = Text::CSV->new(); @@ -52,29 +51,35 @@ sub make_fixture : Test(setup) { } sub require : Test(1) { - require_ok('WTSI::NPG::Genotyping::QC::Collation'); + require_ok('WTSI::NPG::Genotyping::QC::Collator'); } -sub collation : Test(6) { +sub collation : Test(9) { my $jsonResults = catfile($temp_dir, 'qc_results.json'); my $jsonMetrics = catfile($temp_dir, 'qc_metrics.json'); my $csvPath = catfile($temp_dir, 'qc_results.csv'); my $exclude = 0; - my $metricsRef = 0; - my $verbose = 0; - collate($example_dir, $configPath, $thresholdPath, $dbPath, $iniPath, - $jsonResults, $jsonMetrics, $csvPath, - $exclude, $metricsRef, $verbose); + my $collator = WTSI::NPG::Genotyping::QC::Collator->new( + db_path => $dbPath, + ini_path => $iniPath, + input_dir => $example_dir, + config_path => $configPath + ); + ok($collator->writeMetricJson($jsonMetrics), 'Write metrics JSON'); ok(-e $jsonMetrics, "JSON metrics path exists"); my $got_metrics = decode_json(read_file($jsonMetrics)); my $expected_metrics = decode_json(read_file($metricsExpected)); is_deeply($got_metrics, $expected_metrics, "JSON metrics data equivalent to expected"); + + ok($collator->writePassFailJson($jsonResults), 'Write results JSON'); ok(-e $jsonResults, "JSON results path exists"); my $got_results = decode_json(read_file($jsonResults)); my $expected_results = decode_json(read_file($resultsExpected)); is_deeply($got_results, $expected_results, "JSON results data equivalent to expected"); + + ok($collator->writeCsv($csvPath), 'Write CSV'); ok(-e $csvPath, "CSV results path exists"); open my $fh, "<", $csvPath || $log->logcroak("Cannot open CSV '", $csvPath, "'"); diff --git a/src/perl/t/WTSI/NPG/Genotyping/QC/IdentityTest.pm b/src/perl/t/WTSI/NPG/Genotyping/QC/IdentityTest.pm deleted file mode 100644 index ceb6af680..000000000 --- a/src/perl/t/WTSI/NPG/Genotyping/QC/IdentityTest.pm +++ /dev/null @@ -1,147 +0,0 @@ -use utf8; - -package WTSI::NPG::Genotyping::QC::IdentityTest; - -use strict; -use warnings; -use File::Slurp qw(read_file); -use File::Temp qw(tempdir); -use JSON; -use Log::Log4perl; -use Log::Log4perl::Level; - -use base qw(WTSI::NPG::Test); -use Test::More tests => 28; -use Test::Exception; - -use WTSI::NPG::Genotyping::QC::Identity; -use WTSI::NPG::Genotyping::QC::QCPlotShared qw/defaultJsonConfig/; -use WTSI::NPG::Genotyping::QC::SnpID qw/convertFromIlluminaExomeSNP convertToIlluminaExomeSNP/; - -Log::Log4perl::init('./etc/log4perl_tests.conf'); -my $log = Log::Log4perl->get_logger(); -my $workdir; -my $jsonRef; -my $jsonOutPath; -my $jsonName = 'identity_check.json'; -my $textName = 'identity_check_results.txt'; -my $gtName = 'identity_check_gt.txt'; -my $failPairsName = 'identity_check_failed_pairs.txt'; -my $pipelineTestDir = '/nfs/gapi/data/genotype/pipeline_test'; -my $dataDir = $pipelineTestDir.'/identity_check'; -my $dbPath = $dataDir.'/id_test_genotyping.db'; -my $manifest = $pipelineTestDir.'/manifests/Human670-QuadCustom_v1_A.bpm.csv'; -my $qcPlex = "$dataDir/W30467_snp_set_info_1000Genomes.tsv"; -my $minSNPs = 8; -my $manySNPs = 1000; # use to make methods fail -my $minIdent = 0.90; -my $swap = 0.95; -my $iniPath = $ENV{HOME} . "/.npg/genotyping.ini"; - -sub setup : Test(setup) { - $workdir = tempdir("identity_test_XXXXXX", CLEANUP => 1); - $jsonOutPath = $workdir.'/'.$jsonName; - $jsonRef = decode_json(read_file($dataDir.'/'.$jsonName)); -} - -sub teardown : Test(teardown) { - # placeholder, does nothing for now -} - -sub run_identity { - # run the 'main' identity check method - my @inputs = @{ shift() }; - ok(run_identity_check(@inputs), "Identity check status, input $inputs[0]"); -} - -sub require : Test(1) { - require_ok('WTSI::NPG::Genotyping::QC::Identity'); -} - -sub test_alternate_snp_names : Test(5) { - WTSI::NPG::Genotyping::QC::Identity->new( - db_path => $dbPath, - ini_path => $iniPath, - output_dir => $workdir, - plex_manifest => $qcPlex, - plink_path => $dataDir.'/identity_test_not_exome', - )->run_identity_check(); - validate_outputs(); -} - -sub test_command_line : Test(6) { - my $plink = $dataDir."/identity_test"; - my $config = defaultJsonConfig(); - my $cmd = "check_identity_bed.pl --config $config --outdir $workdir ". - " --plink $plink --db $dbPath"; - is(system($cmd), 0, "check_identity_bed.pl exit status, input $plink"); - validate_outputs(); -} - -sub test_manifest_intersection : Test(3) { - my $expected = 25; - my $snps = $workdir.'/shared_snps.txt'; - my $cmd = "manifest_plex_intersection.pl --manifest $manifest --plex $qcPlex --out $snps"; - is(system($cmd), 0, 'manifest_plex_intersection.pl exit status'); - ok(-e $snps, 'SNP output text file exists'); - my $total = 0; - open my $in, "<", $snps || $log->logcroak("Cannot open input '$snps'"); - while (<$in>) { $total++; } - close $in || $log->logcroak("Cannot close input '$snps'"); - is($total, $expected, "$expected SNPs read from text file"); -} - -sub test_insufficient_snps : Test(2) { - WTSI::NPG::Genotyping::QC::Identity->new( - db_path => $dbPath, - ini_path => $iniPath, - min_shared_snps => $manySNPs, - output_dir => $workdir, - plex_manifest => $qcPlex, - plink_path => $dataDir.'/identity_test' - )->run_identity_check(); - ok(-e $jsonOutPath, "JSON output exists for insufficient SNPs"); - my $failJson = $dataDir.'/identity_check_fail.json'; - my $failDataRef = decode_json(read_file($failJson)); - my $jsonOut = decode_json(read_file($jsonOutPath)); - is_deeply($jsonOut, $failDataRef, "JSON output is equivalent to reference"); -} - -sub test_name_conversion : Test(4) { - my $id = 'exm-rs1234'; - is(convertFromIlluminaExomeSNP($id), 'rs1234', - 'Illumina to Sequenom action'); - is(convertToIlluminaExomeSNP($id), 'exm-rs1234', - 'Sequenom to Illumina no action'); - $id = 'rs5678'; - is(convertFromIlluminaExomeSNP($id), 'rs5678', - 'Illumina to Sequenom no action'); - is(convertToIlluminaExomeSNP($id), 'exm-rs5678', - 'Sequenom to Illumina action'); -} - -sub test_standard : Test(7) { - my $checker = WTSI::NPG::Genotyping::QC::Identity->new( - db_path => $dbPath, - ini_path => $iniPath, - output_dir => $workdir, - plex_manifest => $qcPlex, - plink_path => $dataDir.'/identity_test', - ); - ok($checker, "Identity check Moose object created"); - ok($checker->run_identity_check(), "Identity check completed"); - validate_outputs(); -} - -sub validate_outputs { - # check for output files and validate contents of JSON - # expects output files for the 'standard' test dataset and parameters - ok(-e $jsonOutPath, "JSON output exists"); - my $jsonOut = decode_json(read_file($jsonOutPath)); - is_deeply($jsonOut, $jsonRef, "JSON output is equivalent to reference"); - ok(-e $workdir.'/'.$textName, "Text summary exists"); - ok(-e $workdir.'/'.$failPairsName, "Failed pairs comparison exists"); - ok(-e $workdir.'/'.$gtName, "Detailed genotype file exists"); -} - -return 1; diff --git a/src/perl/t/WTSI/NPG/Genotyping/VCF/ReadyWorkflowTest.pm b/src/perl/t/WTSI/NPG/Genotyping/VCF/ReadyWorkflowTest.pm index 162594dcf..3e89361a4 100644 --- a/src/perl/t/WTSI/NPG/Genotyping/VCF/ReadyWorkflowTest.pm +++ b/src/perl/t/WTSI/NPG/Genotyping/VCF/ReadyWorkflowTest.pm @@ -7,7 +7,7 @@ use warnings; use base qw(WTSI::NPG::Test); use Cwd qw/abs_path/; -use Test::More tests => 82; +use Test::More tests => 98; use Test::Exception; use File::Basename qw(fileparse); use File::Path qw/make_path/; @@ -398,6 +398,100 @@ sub test_result_finder : Test(9) { 'Sequenom manifest contents OK'); } +sub test_workflow_script_gencall: Test(16) { + setup_chromosome_json(); + my $f_config = setup_fluidigm(); + my $s_config = setup_sequenom_default(); + my $workdir = abs_path(catfile($tmp, "genotype_workdir_gencall")); + my $config_path = catfile($workdir, "config.yml"); + my $working_db = catfile($workdir, $db_file_name); + my $queue = 'yesterday'; # non-default queue for testing + my $cmd = join q{ }, "$READY_WORKFLOW", + "--logconf $LOG_TEST_CONF", + "--dbfile $dbfile", + "--local", + "--manifest $manifest", + "--queue $queue", + "--run run1", + "--verbose", + "--plex_config $f_config", + "--plex_config $s_config", + "--workdir $workdir", + "--workflow gencall"; + is(0, system($cmd), "gencall setup exit status is zero"); + # check presence of required files and subfolders for workflow + ok(-e $workdir, "Workflow directory found"); + ok(-e $config_path, "config.yml found"); + ok(-e $working_db, "genotyping SQLite database found"); + foreach my $name (qw/in pass fail/) { + my $subdir = catfile($workdir, $name); + ok(-e $subdir && -d $subdir, "Subdirectory '$name' found"); + } + my $params_path = catfile($workdir, "in", "genotype_gencall.yml"); + ok(-e $params_path, "genotype_gencall.yml found"); + my $vcf_path_fluidigm = catfile($workdir, 'vcf', 'fluidigm_qc.vcf'); + my $vcf_path_sequenom = catfile($workdir, 'vcf', 'sequenom_W30467.vcf'); + ok(-e $vcf_path_fluidigm, "Fluidigm VCF file found for Gencall"); + + my $got_fluidigm = _read_without_filedate($vcf_path_fluidigm); + my $expected_fluidigm_path = catfile($data_path, 'fluidigm.vcf'); + my $expected_fluidigm = _read_without_filedate($expected_fluidigm_path); + is_deeply($got_fluidigm, $expected_fluidigm, + "Fluidigm VCF matches expected values"); + ok(-e $vcf_path_sequenom, "Sequenom VCF file found for Gencall"); + my $got_sequenom = _read_without_filedate($vcf_path_sequenom); + my $expected_sequenom_path = catfile($data_path, 'sequenom.vcf'); + my $expected_sequenom = _read_without_filedate($expected_sequenom_path); + is_deeply($got_sequenom, $expected_sequenom, + "Sequenom VCF matches expected values"); + # check contents of YML files + my $config = LoadFile($config_path); + ok($config, "Config data structure loaded from YML"); + my $expected_config = { + 'msg_port' => '11300', + 'max_processes' => '250', + 'root_dir' => $workdir, + 'log_level' => 'DEBUG', + 'async' => 'lsf', + 'msg_host' => 'farm3-head2', + 'log' => catfile($workdir, 'percolate.log') + }; + is_deeply($config, $expected_config, + "YML Gencall config matches expected values"); + + my $params = LoadFile($params_path); + ok($params, "Workflow parameter data structure loaded from YML"); + my $manifest_name = fileparse($manifest); + my $fluidigm_manifest_name = 'fluidigm_qc.tsv'; + my $sequenom_manifest_name = 'sequenom_W30467.tsv'; + my $expected_params = { + 'workflow' => 'Genotyping::Workflows::GenotypeGencall', + 'library' => 'genotyping', + 'arguments' => [ + $working_db, + 'run1', + $workdir, + { + 'memory' => '2048', + 'manifest' => catfile($workdir, $manifest_name), + 'queue' => $queue, + 'plex_manifest' => [ + catfile($workdir, 'plex_manifests', + $fluidigm_manifest_name), + catfile($workdir, 'plex_manifests', + $sequenom_manifest_name), + ], + 'vcf' => [ + $vcf_path_fluidigm, + $vcf_path_sequenom, + ], + } + ] + }; + is_deeply($params, $expected_params, + "YML Gencall workflow params match expected values"); +} + sub test_workflow_script_illuminus: Test(16) { setup_chromosome_json(); my $f_config = setup_fluidigm(); diff --git a/src/perl/t/WTSI/NPG/Test.pm b/src/perl/t/WTSI/NPG/Test.pm index 64707809c..17e462d52 100644 --- a/src/perl/t/WTSI/NPG/Test.pm +++ b/src/perl/t/WTSI/NPG/Test.pm @@ -11,21 +11,26 @@ use Test::More; sub runtests { my ($self) = @_; - my $env_file = $ENV{'WTSI_NPG_iRODS_Test_irodsEnvFile'} || q{}; - if (not $env_file) { - if ($ENV{TEST_AUTHOR}) { - die 'Environment variable WTSI_NPG_iRODS_Test_irodsEnvFile was not set'; - } - else { - $self->SKIP_CLASS('TEST_AUTHOR environment variable is false'); + my %env_copy = %ENV; + + # iRODS 3.* and iRODS 4.* have different env vars for configuration + foreach my $file (qw(irodsEnvFile IRODS_ENVIRONMENT_FILE)) { + my $env_file = $ENV{"WTSI_NPG_iRODS_Test_$file"} || q[]; + + # Ensure that the iRODS connection details are a nonsense value if + # they are not set explicitly via WTSI_NPG_iRODS_Test_* + $env_copy{$file} = $env_file || 'DUMMY_VALUE'; + + if (not $env_file) { + if ($ENV{TEST_AUTHOR}) { + die "Environment variable WTSI_NPG_iRODS_Test_$file was not set"; + } + else { + $self->SKIP_CLASS('TEST_AUTHOR environment variable is false'); + } } } - my %env_copy = %ENV; - # Ensure that the iRODS connection details are a nonsense value if - # they are not set explicitly via WTSI_NPG_iRODS_Test_irodsEnvFile - $env_copy{'irodsEnvFile'} = $env_file || 'DUMMY_VALUE'; - { local %ENV = %env_copy; return $self->SUPER::runtests; diff --git a/src/perl/t/WTSI/NPG/UtilitiesTest.pm b/src/perl/t/WTSI/NPG/UtilitiesTest.pm index 8e2b6222d..b6dbf4328 100644 --- a/src/perl/t/WTSI/NPG/UtilitiesTest.pm +++ b/src/perl/t/WTSI/NPG/UtilitiesTest.pm @@ -8,7 +8,7 @@ use warnings; use File::Temp qw(tempfile); use base qw(WTSI::NPG::Test); -use Test::More tests => 810; +use Test::More tests => 801; use Test::Exception; use Log::Log4perl; @@ -18,12 +18,7 @@ Log::Log4perl::init('./etc/log4perl_tests.conf'); BEGIN { use_ok('WTSI::NPG::Utilities'); } use WTSI::NPG::Utilities qw(common_stem - depad_well - collect_dirs - collect_files - modified_between); - -my $data_path = './t/utilities'; + depad_well); sub test_common_stem : Test(11) { is(common_stem('', ''), ''); @@ -76,85 +71,3 @@ sub test_depad_well : Test(789) { } } } - -sub test_collect_files : Test(4) { - - # Accept all files - my $file_test = sub { - my ($file) = @_; - return 1; - }; - - my $collect_path = "$data_path/collect_files"; - - is_deeply([collect_files($collect_path, $file_test, 1)], - []); - - is_deeply([collect_files($collect_path, $file_test, 2)], - ["$collect_path/a/10.txt", - "$collect_path/b/20.txt", - "$collect_path/c/30.txt"]); - - is_deeply([collect_files($collect_path, $file_test, 3)], - ["$collect_path/a/10.txt", - "$collect_path/a/x/1.txt", - "$collect_path/b/20.txt", - "$collect_path/b/y/2.txt", - "$collect_path/c/30.txt", - "$collect_path/c/z/3.txt"]); - - is_deeply([collect_files($collect_path, $file_test, undef)], - ["$collect_path/a/10.txt", - "$collect_path/a/x/1.txt", - "$collect_path/b/20.txt", - "$collect_path/b/y/2.txt", - "$collect_path/c/30.txt", - "$collect_path/c/z/3.txt"]); -} - -sub test_collect_dirs : Test(4) { - - # Accept all dirs - my $dir_test = sub { - my ($dir) = @_; - return 1; - }; - - my $collect_path = "$data_path/collect_files"; - - is_deeply([collect_dirs($collect_path, $dir_test, 1)], - ["$collect_path"]); - - is_deeply([collect_dirs($collect_path, $dir_test, 2)], - ["$collect_path", - "$collect_path/a", - "$collect_path/b", - "$collect_path/c"]); - - is_deeply([collect_dirs($collect_path, $dir_test, 3)], - ["$collect_path", - "$collect_path/a", - "$collect_path/a/x", - "$collect_path/b", - "$collect_path/b/y", - "$collect_path/c", - "$collect_path/c/z"]); - - is_deeply([collect_dirs($collect_path, $dir_test, undef)], - ["$collect_path", - "$collect_path/a", - "$collect_path/a/x", - "$collect_path/b", - "$collect_path/b/y", - "$collect_path/c", - "$collect_path/c/z"]); -} - -sub test_modified_between : Test(1) { - my $then = DateTime->now; - my ($fh, $file) = tempfile(); - my $now = DateTime->now; - - my $fn = modified_between($then->epoch, $now->epoch); - ok($fn->($file)); -} diff --git a/src/perl/t/archivable.t b/src/perl/t/archivable.t new file mode 100644 index 000000000..cdfd9bf4d --- /dev/null +++ b/src/perl/t/archivable.t @@ -0,0 +1,9 @@ + +use utf8; + +use strict; +use warnings; + +use WTSI::NPG::ArchivableTest; + +WTSI::NPG::ArchivableTest->runtests; diff --git a/src/perl/t/utilities/lorem.txt b/src/perl/t/archiver/lorem.txt similarity index 100% rename from src/perl/t/utilities/lorem.txt rename to src/perl/t/archiver/lorem.txt diff --git a/src/perl/t/bayesian_identity.t b/src/perl/t/bayesian_identity.t new file mode 100644 index 000000000..991673c50 --- /dev/null +++ b/src/perl/t/bayesian_identity.t @@ -0,0 +1,9 @@ + +use utf8; + +use strict; +use warnings; + +use WTSI::NPG::Genotyping::QC::BayesianIdentity::CheckTest; + +WTSI::NPG::Genotyping::QC::BayesianIdentity::CheckTest->runtests; diff --git a/src/perl/t/bayesian_identity_sample.t b/src/perl/t/bayesian_identity_sample.t new file mode 100644 index 000000000..1474b399c --- /dev/null +++ b/src/perl/t/bayesian_identity_sample.t @@ -0,0 +1,9 @@ + +use utf8; + +use strict; +use warnings; + +use WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetricTest; + +WTSI::NPG::Genotyping::QC::BayesianIdentity::SampleMetricTest->runtests; diff --git a/src/perl/t/bayesian_identity_simulator.t b/src/perl/t/bayesian_identity_simulator.t new file mode 100644 index 000000000..55ade8488 --- /dev/null +++ b/src/perl/t/bayesian_identity_simulator.t @@ -0,0 +1,7 @@ + +use strict; +use warnings; + +use WTSI::NPG::Genotyping::QC::BayesianIdentity::SimulatorTest; + +Test::Class->runtests; \ No newline at end of file diff --git a/src/perl/t/collation.t b/src/perl/t/collation.t deleted file mode 100644 index 1a4dbec71..000000000 --- a/src/perl/t/collation.t +++ /dev/null @@ -1,9 +0,0 @@ - -use utf8; - -use strict; -use warnings; - -use WTSI::NPG::Genotyping::QC::CollationTest; - -WTSI::NPG::Genotyping::QC::CollationTest->runtests; diff --git a/src/perl/t/collator.t b/src/perl/t/collator.t new file mode 100644 index 000000000..e6515dd28 --- /dev/null +++ b/src/perl/t/collator.t @@ -0,0 +1,9 @@ + +use utf8; + +use strict; +use warnings; + +use WTSI::NPG::Genotyping::QC::CollatorTest; + +WTSI::NPG::Genotyping::QC::CollatorTest->runtests; diff --git a/src/perl/t/collector.t b/src/perl/t/collector.t new file mode 100644 index 000000000..03939b3ea --- /dev/null +++ b/src/perl/t/collector.t @@ -0,0 +1,9 @@ + +use utf8; + +use strict; +use warnings; + +use WTSI::NPG::CollectorTest; + +WTSI::NPG::CollectorTest->runtests; diff --git a/src/perl/t/utilities/collect_files/a/10.txt b/src/perl/t/collector/collect_files/a/10.txt similarity index 100% rename from src/perl/t/utilities/collect_files/a/10.txt rename to src/perl/t/collector/collect_files/a/10.txt diff --git a/src/perl/t/utilities/collect_files/a/x/1.txt b/src/perl/t/collector/collect_files/a/x/1.txt similarity index 100% rename from src/perl/t/utilities/collect_files/a/x/1.txt rename to src/perl/t/collector/collect_files/a/x/1.txt diff --git a/src/perl/t/utilities/collect_files/b/20.txt b/src/perl/t/collector/collect_files/b/20.txt similarity index 100% rename from src/perl/t/utilities/collect_files/b/20.txt rename to src/perl/t/collector/collect_files/b/20.txt diff --git a/src/perl/t/utilities/collect_files/b/y/2.txt b/src/perl/t/collector/collect_files/b/y/2.txt similarity index 100% rename from src/perl/t/utilities/collect_files/b/y/2.txt rename to src/perl/t/collector/collect_files/b/y/2.txt diff --git a/src/perl/t/utilities/collect_files/c/30.txt b/src/perl/t/collector/collect_files/c/30.txt similarity index 100% rename from src/perl/t/utilities/collect_files/c/30.txt rename to src/perl/t/collector/collect_files/c/30.txt diff --git a/src/perl/t/utilities/collect_files/c/z/3.txt b/src/perl/t/collector/collect_files/c/z/3.txt similarity index 100% rename from src/perl/t/utilities/collect_files/c/z/3.txt rename to src/perl/t/collector/collect_files/c/z/3.txt diff --git a/src/perl/t/compile_scripts.t b/src/perl/t/compile_scripts.t index a1a9cb389..0ee944946 100644 --- a/src/perl/t/compile_scripts.t +++ b/src/perl/t/compile_scripts.t @@ -8,6 +8,9 @@ eval "use Test::Compile"; plan skip_all => "Test::Compile required for testing compilation" if $@; -all_pl_files_ok(all_pl_files('bin')); +my $test = Test::Compile->new(); +$test->verbose(0); +$test->all_files_ok($test->all_pl_files('bin')); +$test->done_testing(); 1; diff --git a/src/perl/t/fluidigm_archiver.t b/src/perl/t/fluidigm_archiver.t new file mode 100644 index 000000000..cb320eff4 --- /dev/null +++ b/src/perl/t/fluidigm_archiver.t @@ -0,0 +1,9 @@ + +use utf8; + +use strict; +use warnings; + +use WTSI::NPG::Genotyping::Fluidigm::ArchiverTest; + +WTSI::NPG::Genotyping::Fluidigm::ArchiverTest->runtests; diff --git a/src/perl/t/fluidigm_archiver/0123456789/0123456789.csv b/src/perl/t/fluidigm_archiver/0123456789/0123456789.csv new file mode 100644 index 000000000..2bb334a54 --- /dev/null +++ b/src/perl/t/fluidigm_archiver/0123456789/0123456789.csv @@ -0,0 +1,9232 @@ +Chip Run Info,C:\Demonstration\TK2 Testing\0123456789\ChipRun.bml,1381735059,96.96 (138x),,ROX,SNPtype-FAM : SNPtype-HEX,9/11/2013 7:34:53 AM,00:01:02,EP1-50105 +Application Version,3.1.3 +Application Build,20120816.1511 +Export Type,Detailed Table Results,Standard +Number of Combined Chip Runs,1,9216 +Confidence Threshold,65.00 +Normalization Method,NTC Normalization +Allele Probe Type Mapping,Allele X,SNPtype-FAM +Allele Probe Type Mapping,Allele Y,SNPtype-HEX +Allele Axis Mapping,Allele X,X +Allele Axis Mapping,Allele Y,Y + + +Experiment Information,Experiment Information,Experiment Information,Experiment Information,Experiment Information,Experiment Information,Results,Results,Results,Results,Results,Results +Chamber,SNP Assay and Allele Names,SNP Assay and Allele Names,SNP Assay and Allele Names,Sample,Sample,Call Information,Call Information,Call Information,Call Information,Intensity,Intensity +ID,Assay,Allele X,Allele Y,Name,Type,Auto,Confidence,Final,Converted,Allele X,Allele Y +S96-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S96-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S96-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S96-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S96-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S96-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S96-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S96-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S96-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S96-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S96-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S96-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S96-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S96-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S96-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S96-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S96-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S96-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S96-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S96-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S96-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S96-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S95-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S95-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S95-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S95-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S95-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S95-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S95-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S95-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S95-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S95-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S95-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S95-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S95-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S95-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S95-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S95-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S95-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S95-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S95-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S95-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S95-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S94-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S94-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S94-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S94-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S94-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S94-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S94-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S94-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S94-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S94-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S94-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S94-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S94-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S94-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S94-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S94-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S94-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S94-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S94-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S94-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S94-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S93-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S93-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S93-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S93-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S93-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S93-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S93-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S93-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S93-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S93-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S93-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S93-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S93-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S93-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S93-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S93-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S93-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S93-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S93-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S93-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S93-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S92-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S92-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S92-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S92-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S92-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S92-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S92-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S92-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S92-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S92-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S92-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S92-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S92-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S92-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S92-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S92-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S92-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S92-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S92-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S92-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S92-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S91-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S91-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S91-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S91-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S91-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S91-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S91-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S91-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S91-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S91-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S91-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S91-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S91-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S91-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S91-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S91-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S91-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S91-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S91-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S91-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S91-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S90-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S90-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S90-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S90-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S90-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S90-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S90-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S90-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S90-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S90-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S90-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S90-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S90-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S90-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S90-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S90-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S90-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S90-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S90-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S90-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S90-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S89-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S89-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S89-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S89-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S89-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S89-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S89-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S89-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S89-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S89-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S89-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S89-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S89-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S89-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S89-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S89-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S89-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S89-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S89-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S89-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S89-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S88-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S88-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S88-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S88-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S88-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S88-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S88-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S88-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S88-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S88-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S88-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S88-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S88-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S88-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S88-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S88-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S88-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S88-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S88-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S88-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S88-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S87-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S87-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S87-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S87-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S87-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S87-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S87-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S87-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S87-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S87-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S87-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S87-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S87-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S87-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S87-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S87-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S87-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S87-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S87-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S87-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S87-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S86-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S86-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S86-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S86-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S86-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S86-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S86-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S86-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S86-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S86-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S86-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S86-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S86-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S86-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S86-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S86-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S86-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S86-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S86-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S86-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S86-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S85-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S85-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S85-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S85-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S85-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S85-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S85-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S85-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S85-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S85-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S85-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S85-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S85-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S85-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S85-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S85-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S85-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S85-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S85-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S85-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S85-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S84-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S84-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S84-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S84-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S84-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S84-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S84-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S84-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S84-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S84-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S84-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S84-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S84-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S84-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S84-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S84-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S84-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S84-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S84-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S84-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S84-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S83-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S83-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S83-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S83-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S83-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S83-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S83-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S83-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S83-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S83-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S83-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S83-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S83-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S83-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S83-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S83-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S83-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S83-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S83-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S83-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S83-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S82-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S82-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S82-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S82-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S82-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S82-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S82-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S82-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S82-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S82-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S82-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S82-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S82-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S82-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S82-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S82-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S82-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S82-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S82-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S82-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S82-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S81-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S81-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S81-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S81-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S81-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S81-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S81-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S81-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S81-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S81-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S81-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S81-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S81-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S81-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S81-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S81-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S81-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S81-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S81-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S81-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S81-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S80-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S80-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S80-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S80-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S80-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S80-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S80-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S80-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S80-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S80-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S80-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S80-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S80-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S80-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S80-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S80-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S80-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S80-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S80-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S80-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S80-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S79-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S79-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S79-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S79-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S79-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S79-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S79-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S79-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S79-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S79-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S79-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S79-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S79-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S79-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S79-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S79-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S79-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S79-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S79-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S79-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S79-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S78-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S78-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S78-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S78-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S78-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S78-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S78-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S78-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S78-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S78-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S78-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S78-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S78-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S78-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S78-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S78-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S78-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S78-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S78-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S78-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S78-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S77-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S77-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S77-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S77-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S77-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S77-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S77-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S77-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S77-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S77-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S77-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S77-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S77-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S77-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S77-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S77-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S77-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S77-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S77-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S77-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S77-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S76-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S76-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S76-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S76-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S76-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S76-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S76-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S76-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S76-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S76-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S76-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S76-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S76-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S76-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S76-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S76-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S76-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S76-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S76-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S76-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S76-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S75-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S75-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S75-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S75-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S75-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S75-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S75-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S75-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S75-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S75-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S75-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S75-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S75-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S75-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S75-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S75-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S75-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S75-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S75-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S75-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S75-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S74-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S74-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S74-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S74-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S74-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S74-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S74-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S74-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S74-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S74-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S74-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S74-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S74-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S74-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S74-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S74-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S74-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S74-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S74-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S74-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S74-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S73-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S73-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S73-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S73-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S73-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S73-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S73-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S73-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S73-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S73-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S73-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S73-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S73-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S73-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S73-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S73-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S73-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S73-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S73-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S73-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S73-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S72-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S72-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S72-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S72-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S72-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S72-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S72-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S72-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S72-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S72-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S72-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S72-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S72-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S72-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S72-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S72-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S72-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S72-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S72-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S72-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S72-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S71-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S71-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S71-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S71-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S71-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S71-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S71-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S71-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S71-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S71-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S71-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S71-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S71-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S71-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S71-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S71-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S71-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S71-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S71-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S71-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S71-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S70-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S70-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S70-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S70-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S70-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S70-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S70-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S70-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S70-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S70-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S70-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S70-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S70-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S70-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S70-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S70-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S70-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S70-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S70-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S70-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S70-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S69-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S69-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S69-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S69-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S69-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S69-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S69-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S69-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S69-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S69-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S69-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S69-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S69-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S69-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S69-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S69-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S69-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S69-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S69-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S69-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S69-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S68-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S68-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S68-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S68-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S68-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S68-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S68-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S68-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S68-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S68-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S68-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S68-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S68-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S68-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S68-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S68-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S68-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S68-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S68-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S68-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S68-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S67-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S67-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S67-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S67-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S67-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S67-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S67-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S67-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S67-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S67-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S67-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S67-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S67-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S67-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S67-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S67-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S67-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S67-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S67-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S67-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S67-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S66-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S66-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S66-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S66-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S66-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S66-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S66-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S66-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S66-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S66-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S66-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S66-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S66-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S66-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S66-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S66-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S66-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S66-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S66-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S66-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S66-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S65-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S65-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S65-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S65-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S65-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S65-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S65-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S65-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S65-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S65-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S65-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S65-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S65-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S65-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S65-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S65-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S65-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S65-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S65-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S65-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S65-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S64-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S64-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S64-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S64-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S64-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S64-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S64-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S64-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S64-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S64-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S64-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S64-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S64-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S64-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S64-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S64-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S64-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S64-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S64-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S64-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S64-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S63-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S63-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S63-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S63-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S63-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S63-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S63-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S63-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S63-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S63-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S63-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S63-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S63-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S63-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S63-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S63-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S63-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S63-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S63-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S63-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S63-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S62-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S62-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S62-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S62-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S62-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S62-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S62-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S62-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S62-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S62-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S62-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S62-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S62-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S62-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S62-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S62-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S62-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S62-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S62-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S62-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S62-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S61-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S61-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S61-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S61-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S61-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S61-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S61-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S61-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S61-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S61-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S61-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S61-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S61-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S61-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S61-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S61-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S61-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S61-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S61-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S61-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S61-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S60-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S60-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S60-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S60-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S60-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S60-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S60-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S60-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S60-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S60-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S60-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S60-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S60-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S60-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S60-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S60-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S60-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S60-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S60-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S60-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S60-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S59-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S59-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S59-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S59-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S59-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S59-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S59-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S59-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S59-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S59-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S59-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S59-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S59-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S59-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S59-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S59-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S59-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S59-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S59-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S59-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S59-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S58-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S58-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S58-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S58-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S58-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S58-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S58-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S58-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S58-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S58-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S58-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S58-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S58-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S58-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S58-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S58-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S58-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S58-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S58-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S58-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S58-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S57-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S57-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S57-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S57-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S57-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S57-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S57-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S57-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S57-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S57-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S57-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S57-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S57-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S57-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S57-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S57-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S57-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S57-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S57-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S57-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S57-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S56-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S56-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S56-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S56-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S56-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S56-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S56-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S56-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S56-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S56-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S56-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S56-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S56-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S56-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S56-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S56-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S56-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S56-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S56-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S56-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S56-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S55-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S55-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S55-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S55-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S55-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S55-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S55-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S55-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S55-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S55-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S55-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S55-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S55-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S55-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S55-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S55-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S55-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S55-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S55-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S55-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S55-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S54-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S54-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S54-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S54-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S54-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S54-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S54-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S54-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S54-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S54-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S54-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S54-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S54-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S54-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S54-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S54-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S54-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S54-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S54-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S54-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S54-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S53-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S53-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S53-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S53-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S53-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S53-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S53-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S53-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S53-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S53-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S53-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S53-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S53-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S53-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S53-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S53-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S53-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S53-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S53-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S53-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S53-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S52-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S52-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S52-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S52-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S52-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S52-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S52-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S52-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S52-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S52-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S52-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S52-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S52-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S52-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S52-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S52-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S52-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S52-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S52-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S52-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S52-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S51-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S51-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S51-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S51-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S51-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S51-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S51-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S51-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S51-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S51-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S51-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S51-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S51-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S51-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S51-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S51-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S51-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S51-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S51-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S51-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S51-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S50-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S50-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S50-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S50-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S50-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S50-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S50-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S50-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S50-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S50-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S50-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S50-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S50-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S50-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S50-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S50-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S50-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S50-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S50-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S50-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S50-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S49-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S49-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S49-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S49-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S49-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S49-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S49-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S49-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S49-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S49-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S49-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S49-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S49-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S49-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S49-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S49-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S49-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S49-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S49-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S49-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S49-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S48-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S48-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S48-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S48-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S48-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S48-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S48-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S48-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S48-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S48-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S48-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S48-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S48-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S48-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S48-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S48-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S48-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S48-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S48-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S48-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S48-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S47-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S47-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S47-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S47-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S47-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S47-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S47-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S47-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S47-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S47-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S47-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S47-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S47-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S47-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S47-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S47-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S47-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S47-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S47-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S47-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S47-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S46-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S46-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S46-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S46-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S46-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S46-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S46-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S46-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S46-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S46-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S46-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S46-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S46-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S46-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S46-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S46-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S46-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S46-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S46-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S46-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S46-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S45-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S45-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S45-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S45-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S45-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S45-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S45-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S45-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S45-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S45-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S45-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S45-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S45-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S45-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S45-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S45-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S45-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S45-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S45-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S45-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S45-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S44-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S44-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S44-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S44-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S44-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S44-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S44-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S44-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S44-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S44-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S44-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S44-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S44-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S44-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S44-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S44-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S44-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S44-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S44-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S44-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S44-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S43-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S43-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S43-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S43-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S43-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S43-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S43-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S43-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S43-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S43-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S43-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S43-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S43-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S43-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S43-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S43-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S43-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S43-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S43-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S43-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S43-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S42-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S42-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S42-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S42-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S42-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S42-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S42-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S42-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S42-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S42-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S42-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S42-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S42-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S42-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S42-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S42-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S42-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S42-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S42-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S42-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S42-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S41-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S41-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S41-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S41-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S41-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S41-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S41-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S41-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S41-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S41-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S41-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S41-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S41-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S41-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S41-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S41-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S41-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S41-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S41-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S41-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S41-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S40-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S40-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S40-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S40-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S40-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S40-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S40-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S40-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S40-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S40-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S40-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S40-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S40-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S40-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S40-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S40-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S40-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S40-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S40-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S40-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S40-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S39-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S39-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S39-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S39-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S39-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S39-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S39-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S39-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S39-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S39-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S39-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S39-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S39-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S39-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S39-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S39-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S39-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S39-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S39-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S39-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S39-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S38-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S38-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S38-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S38-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S38-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S38-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S38-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S38-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S38-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S38-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S38-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S38-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S38-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S38-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S38-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S38-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S38-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S38-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S38-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S38-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S38-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S37-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S37-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S37-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S37-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S37-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S37-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S37-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S37-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S37-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S37-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S37-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S37-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S37-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S37-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S37-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S37-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S37-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S37-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S37-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S37-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S37-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S36-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S36-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S36-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S36-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S36-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S36-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S36-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S36-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S36-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S36-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S36-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S36-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S36-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S36-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S36-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S36-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S36-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S36-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S36-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S36-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S36-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S35-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S35-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S35-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S35-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S35-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S35-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S35-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S35-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S35-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S35-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S35-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S35-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S35-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S35-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S35-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S35-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S35-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S35-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S35-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S35-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S35-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S34-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S34-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S34-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S34-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S34-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S34-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S34-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S34-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S34-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S34-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S34-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S34-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S34-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S34-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S34-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S34-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S34-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S34-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S34-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S34-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S34-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S33-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S33-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S33-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S33-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S33-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S33-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S33-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S33-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S33-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S33-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S33-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S33-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S33-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S33-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S33-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S33-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S33-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S33-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S33-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S33-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S33-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S32-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S32-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S32-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S32-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S32-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S32-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S32-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S32-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S32-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S32-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S32-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S32-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S32-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S32-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S32-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S32-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S32-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S32-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S32-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S32-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S32-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S31-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S31-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S31-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S31-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S31-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S31-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S31-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S31-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S31-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S31-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S31-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S31-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S31-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S31-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S31-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S31-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S31-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S31-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S31-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S31-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S31-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S30-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S30-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S30-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S30-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S30-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S30-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S30-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S30-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S30-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S30-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S30-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S30-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S30-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S30-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S30-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S30-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S30-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S30-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S30-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S30-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S30-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S29-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S29-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S29-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S29-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S29-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S29-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S29-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S29-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S29-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S29-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S29-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S29-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S29-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S29-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S29-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S29-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S29-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S29-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S29-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S29-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S29-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S28-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S28-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S28-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S28-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S28-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S28-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S28-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S28-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S28-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S28-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S28-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S28-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S28-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S28-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S28-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S28-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S28-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S28-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S28-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S28-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S28-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S27-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S27-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S27-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S27-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S27-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S27-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S27-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S27-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S27-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S27-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S27-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S27-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S27-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S27-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S27-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S27-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S27-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S27-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S27-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S27-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S27-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S26-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S26-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S26-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S26-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S26-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S26-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S26-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S26-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S26-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S26-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S26-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S26-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S26-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S26-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S26-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S26-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S26-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S26-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S26-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S26-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S26-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S25-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S25-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S25-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S25-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S25-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S25-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S25-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S25-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S25-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S25-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S25-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S25-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S25-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S25-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S25-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S25-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S25-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S25-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S25-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S25-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S25-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S24-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S24-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S24-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S24-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S24-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S24-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S24-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S24-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S24-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S24-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S24-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S24-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S24-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S24-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S24-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S24-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S24-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S24-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S24-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S24-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S24-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S23-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S23-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S23-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S23-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S23-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S23-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S23-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S23-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S23-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S23-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S23-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S23-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S23-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S23-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S23-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S23-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S23-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S23-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S23-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S23-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S23-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S22-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S22-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S22-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S22-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S22-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S22-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S22-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S22-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S22-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S22-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S22-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S22-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S22-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S22-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S22-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S22-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S22-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S22-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S22-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S22-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S22-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S21-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S21-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S21-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S21-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S21-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S21-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S21-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S21-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S21-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S21-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S21-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S21-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S21-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S21-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S21-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S21-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S21-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S21-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S21-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S21-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S21-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S20-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S20-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S20-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S20-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S20-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S20-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S20-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S20-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S20-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S20-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S20-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S20-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S20-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S20-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S20-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S20-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S20-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S20-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S20-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S20-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S20-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S19-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S19-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S19-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S19-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S19-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S19-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S19-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S19-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S19-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S19-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S19-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S19-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S19-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S19-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S19-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S19-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S19-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S19-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S19-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S19-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S19-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S18-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S18-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S18-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S18-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S18-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S18-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S18-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S18-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S18-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S18-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S18-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S18-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S18-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S18-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S18-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S18-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S18-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S18-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S18-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S18-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S18-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S17-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S17-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S17-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S17-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S17-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S17-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S17-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S17-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S17-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S17-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S17-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S17-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S17-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S17-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S17-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S17-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S17-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S17-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S17-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S17-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S17-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S16-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S16-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S16-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S16-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S16-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S16-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S16-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S16-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S16-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S16-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S16-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S16-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S16-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S16-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S16-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S16-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S16-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S16-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S16-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S16-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S16-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S15-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S15-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S15-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S15-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S15-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S15-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S15-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S15-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S15-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S15-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S15-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S15-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S15-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S15-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S15-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S15-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S15-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S15-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S15-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S15-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S15-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S14-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S14-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S14-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S14-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S14-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S14-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S14-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S14-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S14-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S14-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S14-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S14-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S14-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S14-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S14-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S14-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S14-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S14-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S14-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S14-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S14-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S13-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S13-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S13-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S13-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S13-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S13-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S13-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S13-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S13-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S13-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S13-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S13-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S13-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S13-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S13-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S13-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S13-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S13-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S13-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S13-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S13-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S12-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S12-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S12-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S12-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S12-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S12-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S12-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S12-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S12-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S12-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S12-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S12-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S12-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S12-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S12-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S12-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S12-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S12-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S12-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S12-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S12-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S11-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S11-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S11-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S11-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S11-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S11-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S11-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S11-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S11-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S11-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S11-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S11-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S11-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S11-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S11-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S11-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S11-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S11-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S11-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S11-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S11-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S10-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S10-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S10-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S10-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S10-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S10-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S10-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S10-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S10-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S10-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S10-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S10-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S10-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S10-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S10-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S10-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S10-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S10-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S10-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S10-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S10-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S09-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S09-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S09-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S09-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S09-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S09-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S09-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S09-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S09-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S09-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S09-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S09-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S09-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S09-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S09-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S09-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S09-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S09-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S09-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S09-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S09-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S08-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S08-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S08-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S08-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S08-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S08-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S08-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S08-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S08-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S08-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S08-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S08-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S08-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S08-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S08-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S08-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S08-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S08-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S08-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S08-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S08-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S07-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S07-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S07-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S07-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S07-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S07-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S07-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S07-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S07-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S07-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S07-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S07-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S07-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S07-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S07-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S07-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S07-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S07-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S07-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S07-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S07-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S06-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S06-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S06-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S06-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S06-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S06-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S06-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S06-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S06-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S06-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S06-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S06-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S06-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S06-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S06-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S06-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S06-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S06-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S06-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S06-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S06-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S05-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S05-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S05-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S05-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S05-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S05-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S05-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S05-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S05-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S05-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S05-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S05-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S05-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S05-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S05-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S05-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S05-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S05-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S05-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S05-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S05-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S04-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S04-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S04-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S04-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S04-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S04-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S04-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S04-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S04-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S04-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S04-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S04-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S04-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S04-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S04-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S04-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S04-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S04-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S04-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S04-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S04-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S03-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S03-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S03-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S03-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S03-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S03-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S03-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S03-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S03-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S03-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S03-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S03-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S03-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S03-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S03-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S03-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S03-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S03-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S03-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S03-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S03-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S02-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S02-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S02-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S02-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S02-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S02-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S02-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S02-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S02-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S02-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S02-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S02-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S02-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S02-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S02-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S02-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S02-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S02-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S02-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S02-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S02-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A01,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S01-A02,GS34251,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S01-A03,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S01-A04,GS35220,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S01-A05,rs11096957,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S01-A06,rs12828016,G,T,ABC0123456789,Unknown,XY,100,XY,G:T,0.1,0.1 +S01-A07,rs156697,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S01-A08,rs1801262,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S01-A09,rs1805034,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S01-A10,rs1805087,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S01-A11,rs2247870,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A12,rs2286963,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S01-A13,rs3742207,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S01-A14,rs3795677,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A15,rs4075254,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A16,rs4619,A,G,ABC0123456789,Unknown,XY,100,XY,A:G,0.1,0.1 +S01-A17,rs4843075,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A18,rs5215,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S01-A19,rs6166,C,T,ABC0123456789,Unknown,XY,100,XY,C:T,0.1,0.1 +S01-A20,rs649058,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A21,rs6557634,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S01-A22,rs6759892,T,G,ABC0123456789,Unknown,XY,100,XY,T:G,0.1,0.1 +S01-A23,rs7298565,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A24,rs753381,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S01-A25,rs7627615,G,A,ABC0123456789,Unknown,XY,100,XY,G:A,0.1,0.1 +S01-A26,rs8065080,T,C,ABC0123456789,Unknown,XY,100,XY,T:C,0.1,0.1 +S01-A27,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A28,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A29,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A30,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A31,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A32,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A33,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A34,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A35,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A36,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A37,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A38,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A39,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A40,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A41,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A42,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A43,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A44,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A45,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A46,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A47,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A48,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A49,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A50,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A51,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A52,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A53,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A54,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A55,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A56,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A57,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A58,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A59,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A60,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A61,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A62,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A63,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A64,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A65,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A66,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A67,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A68,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A69,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A70,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A71,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A72,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A73,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A74,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A75,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A76,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A77,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A78,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A79,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A80,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A81,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A82,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A83,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A84,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A85,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A86,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A87,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A88,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A89,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A90,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A91,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A92,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A93,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A94,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A95,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 +S01-A96,,,,[ Empty ],NTC,NTC,100,NTC,NTC,0.1,0.1 diff --git a/src/perl/t/fluidigm_archiver/0123456789/Data/aramis.tif b/src/perl/t/fluidigm_archiver/0123456789/Data/aramis.tif new file mode 100644 index 000000000..e69de29bb diff --git a/src/perl/t/fluidigm_archiver/0123456789/Data/athos.tif b/src/perl/t/fluidigm_archiver/0123456789/Data/athos.tif new file mode 100644 index 000000000..e69de29bb diff --git a/src/perl/t/fluidigm_archiver/0123456789/Data/porthos.tif b/src/perl/t/fluidigm_archiver/0123456789/Data/porthos.tif new file mode 100644 index 000000000..e69de29bb diff --git a/src/perl/t/fluidigm_archiver/qc.tsv b/src/perl/t/fluidigm_archiver/qc.tsv new file mode 100644 index 000000000..d05c6ca01 --- /dev/null +++ b/src/perl/t/fluidigm_archiver/qc.tsv @@ -0,0 +1,27 @@ +#SNP_NAME REF_ALLELE ALT_ALLELE CHR POS STRAND +GS34251 T T X 88666325 + +GS34251 C C Y 2934912 + +GS35220 C C X 90473610 + +GS35220 T T Y 4550107 + +rs11096957 T G 4 38776491 - +rs12828016 G T 12 998365 + +rs156697 A G 10 106039185 - +rs1801262 T C 2 182543455 - +rs1805034 C T 18 60027241 + +rs1805087 A G 1 237048500 + +rs2247870 G A 5 90151589 - +rs2286963 T G 2 211060050 + +rs3742207 T G 13 110818598 - +rs3795677 G A 1 240492734 + +rs4075254 G A 15 86123988 - +rs4619 A G 7 45932669 + +rs4843075 G A 15 86124555 + +rs5215 C T 11 17408630 + +rs6166 C T 2 49189921 - +rs649058 G A 1 74941293 + +rs6557634 T C 8 23060256 + +rs6759892 T G 2 234601669 + +rs7298565 G A 12 109937534 + +rs753381 T C 20 39797465 - +rs7627615 G A 3 183818416 + +rs8065080 T C 17 3480447 + diff --git a/src/perl/t/identity.t b/src/perl/t/identity.t deleted file mode 100644 index 21ae34a06..000000000 --- a/src/perl/t/identity.t +++ /dev/null @@ -1,9 +0,0 @@ - -use utf8; - -use strict; -use warnings; - -use WTSI::NPG::Genotyping::QC::IdentityTest; - -WTSI::NPG::Genotyping::QC::IdentityTest->runtests; diff --git a/src/perl/t/identity_check_sample_wip_bayesian.t b/src/perl/t/identity_check_sample_wip_bayesian.t deleted file mode 100644 index 09cad84e0..000000000 --- a/src/perl/t/identity_check_sample_wip_bayesian.t +++ /dev/null @@ -1,9 +0,0 @@ - -use utf8; - -use strict; -use warnings; - -use WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesianTest; - -WTSI::NPG::Genotyping::QC_wip::Check::SampleIdentityBayesianTest->runtests; diff --git a/src/perl/t/identity_check_wip.t b/src/perl/t/identity_check_wip.t deleted file mode 100644 index 11c3f0159..000000000 --- a/src/perl/t/identity_check_wip.t +++ /dev/null @@ -1,9 +0,0 @@ - -use utf8; - -use strict; -use warnings; - -use WTSI::NPG::Genotyping::QC_wip::Check::IdentityTest; - -WTSI::NPG::Genotyping::QC_wip::Check::IdentityTest->runtests; diff --git a/src/perl/t/identity_simulation_wip.t b/src/perl/t/identity_simulation_wip.t deleted file mode 100644 index cc55c362b..000000000 --- a/src/perl/t/identity_simulation_wip.t +++ /dev/null @@ -1,7 +0,0 @@ - -use strict; -use warnings; - -use WTSI::NPG::Genotyping::QC_wip::Check::IdentitySimulatorTest; - -Test::Class->runtests; \ No newline at end of file diff --git a/src/perl/t/qc_small.t b/src/perl/t/qc_small.t index 2c9b9750b..84a9e0f54 100644 --- a/src/perl/t/qc_small.t +++ b/src/perl/t/qc_small.t @@ -13,7 +13,7 @@ use File::Temp qw/tempdir/; use FindBin qw($Bin); use JSON; -use Test::More tests => 53; +use Test::More tests => 52; use WTSI::NPG::Genotyping::QC::QCPlotTests qw(jsonPathOK pngPathOK xmlPathOK); @@ -23,20 +23,18 @@ my $bin = "$Bin/../bin/"; # assume we are running from perl/t my $data_dir = $Bin."/qc_test_data/"; my $plink = $data_dir.$testName; my $sim = $data_dir.$testName.".sim"; -my $outDir = "$Bin/qc/$testName/"; my $heatMapDir = "plate_heatmaps/"; my $iniPath = "$bin/../etc/qc_test.ini"; # contains inipath relative to test output directory (works after chdir) my $dbname = "small_test.db"; my $dbfileMasterA = $data_dir.$dbname; my $inclusionMaster = $data_dir."sample_inclusion.json"; -my $mafhet = $data_dir."output_examples/small_test_maf_het.json"; my $config = "$bin/../etc/qc_config.json"; my $filterConfig = $data_dir."zcall_prefilter_test.json"; my $vcf = $data_dir."small_test_plex.vcf"; my $plexManifest = $data_dir."small_test_fake_manifest.tsv"; my $sampleJson = $data_dir."small_test_sample.json"; my $piperun = "pipeline_run"; # run name in pipeline DB -my ($cmd, $status); +my ($cmd, $status, $outDir); # The directories containing the R scripts and Perl scripts $ENV{PATH} = join(':', abs_path('../r/bin'), abs_path('../bin'), $ENV{PATH}); @@ -46,25 +44,14 @@ my $tempdir = tempdir(CLEANUP => 1); system("cp $dbfileMasterA $tempdir"); my $dbfile = $tempdir."/".$dbname; -if (-e $outDir) { - if (-d $outDir) { - system("rm -Rf $outDir/*"); # remove previous output - } else { - croak "Output path $outDir exists and is not a directory!"; - } -} else { - mkdir($outDir); -} - -### test creation of QC input files ### +### test creation of QC input files ### print "Testing dataset $testName.\n"; +$outDir = tempdir("test_qc_components_XXXXXX", CLEANUP => 1); ## test identity check -$status = system("$bin/check_identity_bed.pl --outdir $outDir --config $config --plink $plink --db $dbfile"); -is($status, 0, "check_identity_bed.pl exit status"); - -## WIP identity check script is tested in WTSI::NPG::Genotyping::QC_wip::Check::IdentityTest +$status = system("$bin/check_identity_bayesian.pl --json $outDir/identity_check.json --csv $outDir/identity_check.csv --plex $plexManifest --plink $plink --vcf $vcf --sample_json $sampleJson"); +is($status, 0, "check_identity_bayesian.pl exit status"); ## test call rate & heterozygosity computation my $crHetFinder = "snp_af_sample_cr_bed"; @@ -130,20 +117,17 @@ is(system($cmd), 0, "plot_fail_causes.pl exit status"); ## test PNG outputs in main directory # sample_xhet_gender.png absent for this test; no mixture model -my @png = qw /crHetDensityScatter.png failScatterPlot.png - crHistogram.png failsCombined.png +my @png = qw /crHetDensityScatter.png failScatterPlot.png + crHistogram.png failsCombined.png crHetDensityHeatmap.png failScatterDetail.png failsIndividual.png hetHistogram.png/; foreach my $png (@png) { ok(pngPathOK($outDir.'/'.$png), "PNG output $png in valid format"); } - -system("rm -Rf $outDir/*"); # remove output from previous tests -system("cp $dbfileMasterA $tempdir"); -print "\tRemoved output from previous tests; now testing main bootstrap script.\n"; - ## check run_qc.pl bootstrap script +$outDir = tempdir("test_qc_script_main_XXXXXX", CLEANUP => 1); +system("cp $dbfileMasterA $tempdir"); # fresh copy of SQLite database # omit --title argument, to test default title function my @args = ("--output-dir=$outDir", "--dbpath=$dbfile", @@ -159,13 +143,6 @@ my @args = ("--output-dir=$outDir", is(system("$bin/run_qc.pl ".join(" ", @args)), 0, "run_qc.pl bootstrap script exit status"); -## check work-in-progress output files -my $outDirWip = $outDir."/qc_wip"; -my @output_wip = ("identity_wip.json", ); -foreach my $file (@output_wip) { - ok(-e $outDirWip."/".$file, "QC WIP output $file exists") -} - ## check (non-heatmap) outputs again foreach my $png (@png) { ok(pngPathOK($outDir."/supplementary/".$png), "PNG output $png in valid format"); @@ -187,27 +164,27 @@ ok(-r $outDir.'/pipeline_summary.csv', "CSV summary found"); ok(-r $outDir.'/pipeline_summary.pdf', "PDF summary found"); -## check that run_qc.pl dies with incorrect arguments for alternate ID check -system("rm -Rf $outDir/*"); # remove output from previous tests +## check that run_qc.pl dies with incorrect arguments for identity check +$outDir = tempdir("test_qc_script_XXXXXX", CLEANUP => 1); system("cp $dbfileMasterA $tempdir"); my $cmd_base = "$bin/run_qc.pl --output-dir=$outDir --dbpath=$dbfile --sim=$sim --plink=$plink --run=$piperun --inipath=$iniPath --mafhet --config=$config"; isnt(system($cmd_base." --vcf $vcf 2> /dev/null"), 0, 'Non-zero exit for run_qc.pl with --vcf but not --plex-manifest'); ok(!(-e $outDir.'/pipeline_summary.csv'), "CSV summary not found"); -system("rm -Rf $outDir/*"); # remove output from previous tests +$outDir = tempdir("test_qc_script_XXXXXX", CLEANUP => 1); system("cp $dbfileMasterA $tempdir"); isnt(system($cmd_base." --plex-manifests $plexManifest 2> /dev/null"), 0, 'Non-zero exit for run_qc.pl with --plex-manifest but not --vcf'); ok(!(-e $outDir.'/pipeline_summary.csv'), "CSV summary not found"); -## run_qc.pl again, without the arguments for alternate identity check -system("rm -Rf $outDir/*"); # remove output from previous tests +## run_qc.pl again, without the arguments for identity check +$outDir = tempdir("test_qc_script_XXXXXX", CLEANUP => 1); system("cp $dbfileMasterA $tempdir"); $cmd = "$bin/run_qc.pl --output-dir=$outDir --dbpath=$dbfile --sim=$sim --plink=$plink --run=$piperun --inipath=$iniPath --mafhet --config=$config"; is(system($cmd), 0, - "run_qc.pl bootstrap script exit status, no alternate identity check"); + "run_qc.pl bootstrap script exit status, no identity check"); ## test standalone report script print "\tTesting standalone report generation script.\n"; diff --git a/src/perl/t/qc_test_data/config_test.json b/src/perl/t/qc_test_data/config_test.json index 57a429016..5425ea3c8 100644 --- a/src/perl/t/qc_test_data/config_test.json +++ b/src/perl/t/qc_test_data/config_test.json @@ -5,12 +5,10 @@ "duplicate":"duplicate_full.txt.gz", "duplicate_subsets":"duplicate_subsets.json", "gender":"sample_xhet_gender.txt", - "magnitude":"magnitude.txt", - "het_by_maf":"small_test_maf_het.json"}, + "magnitude":"magnitude.txt" + }, "Metrics_thresholds" : { "heterozygosity" : 3, - "low_maf_het" : 3, - "high_maf_het" : 3, "gender" : "NA", "identity" : 0.9, "magnitude" : 0.9, diff --git a/src/perl/t/qc_test_data/output_examples/duplicate_full.txt.gz b/src/perl/t/qc_test_data/output_examples/duplicate_full.txt.gz index d524c381799bb4b060d24025dac9e63b23e8731e..c192bce8ec519864c41d24a1301a0aeb51af92ef 100644 GIT binary patch literal 21624 zcmb_^c|g-g(|;{hq^(k=9;j#)m0A^4L<9`jRBLx!h7Sw>1CMm%L1q2}m2#_Fz8O^q4x- zS~t`?V@O;#q^ui!RM!7^=ovfu*)6-FYeW4Nb%V<2p)R|@Yju%bLqm^hGy0n{2D^KP zy3K~V5~KSx(a)TtdozaAWdl9Y1MISA3g^KA-@$I*p{lY0`A{EcsDH+gEZNMrw70}} zsJCpWZ)h;rY)F|wl?@1}_}EzO=D?OoQ_sSrnZN$(WWa{A;R!uEj4&jfL;mcE1i?~HPd z*0A~ncMDY|9ztpsJN_8D%vg1I`@f2&yA8Dbw)R;8$1QppcYJB~U_{`Y2$z8ysLSlT zV+fL2QI-Y%1A}g~Cu6z}P7-E}?@c@_H{id zTU5r>_84?iC2zD5OcJ)A4NV0`=Uh(NvsP-9di#MK-!fK|c|mc1lbecde%CTlJDIzj zhdmsYU53lRHFoRohE1z!Pdqx@-Pmo zPK&#m=s-}3q4%hA58qOamuk{R9wxQBRWOj*C;cr=vzqqw{Vr~++0DvD1P3C#!2zS) z6)$Jh)#RstdsRclYXJ4?~ovDqsdR&<)V_^4yyN; zMS_s-s2-MeBV`DTYc_BH2A~JO`q~bIXtKU0O2AObxh@gA^|x?2IAQj=Nw0_S++Co2 z!dGbksz)>fpgMoYziVXPb%WtUeX6<$yG~i3y3?{Q(a*k)e7~!Gje5VfDYI{2AjD@w zf1yU4S`imm)wr4)(3vSQ4|h?d@UqqG$ga$}W-QV%OEP6Hl_y#!qvxjZlwRiH4P5`u zn-oD~0>(|{SiI^`&Pw4WxtWI>v;8~m-O(Wj9X!z?KX5K}{?@-3@n1m_9sU-ipKzVb z{pufx_*WqRX&UKtLCOkcs(E<5ML_3uN@ZiL_+*6v$Lg2~Ib^OgujyYf;=j=_NLI~0 zHc6O1%ywE@McF`(qiirVE8L-qYRAqlb*R#Htvl1K!*XOqIewpQ+R}TdHLbhr;Z>h`uCO;21Qo=kp(-|163_)tYiIVvJ==Z~0ofL)Ag|t7!OA(Nd%=cBq=s!9W#Viczu$ z$=wl81pG72#`7N?P1ny>cR!$mjF>6{98ZL=TnzH64l!n*ZMGK?T`+;?-~rQ1&#a~Q zUK$g1vIhh~P1uIx$P`S17);=x1N!I0ltyzbNS0(Ed{`?v`@EjomYR-zhI(QMI$buP zA4^XpC|nbf3Q8i z#7Jto{t7W>e?4l;`l>a<6a?Sz(&d4=nXgc7y5E&lxYfBT0el|n>@NWRc-`prRRL;% zCP?kS&|2HwuMFWkR3*BB@>Qz!jHsWAXE#uL_FFVh6sCvZa22iQHb2Oegao@NtO~Q$ zC%s*nl|ekw$y$1@RiV-=B)Eaw^ZJlWkr`rc?&`2~XCRv#bh}+(Lql*-Z~{ zsETl?LU5>>FP%957bE^FNTS2vfn1g!SQ&(K`X&+o3gkacV?D3wWEx#yWvNUJ39h$j zet<(&gvANL;xx}Chx`jh{5KjRIgF#P*jy|qs_QKF`<)s_OX}+Jzahyf!@GOk&R$8B*ecxDqIj!`u zG0!x%d$cE7K677x2HgJw+)o0lW?^|&Ny=HV7jyTcf}FgHv0pqVY5JGIrYy#Ao@wNr zHSSj>g*YIQcd&nw29Cb^`XT5$_WZMq1L5rcYxygM3zw^n$-Jk}XyBs1_FO0rC zj0qg*qm&vzo=uUcQ2eI#QYje{&Vz;xIhk0VpC!BH>pNAKu4gR zZe>aewz(*3E@Z2pZgORYE?|*tFs;y?JkitN>A5u*lwJkfpq*~vARWO<8DXVtuu`Er z{e(|{FK5+UNOCLK2JLj~()hm`A;t&}M*J;EqQl>T#MwL&G$-c|MEom||AZ6g#0cla z2InMn9k1!>4|GAzVr6Ql=E|%JbcsCHIr!|IBW1aB9vk&ulAYn{IG@hq-ISjVP$^+d$da1-P#n#1 zylr!pqVNpz3u3s>fEv2Zl&_rXnS4C#>p7b@$j0S=e>@C_@U~6IX4Ewnl{$p4q34p= zI1*K@kiZ*cGs%`D_Kc3=Gd$z@Ti1tUmYq{L+yJh!xI1UMr?1((_R*eve0nk6rxNu^ zZYX%B9q$?8=~&g8bmBiPo}~Qo0F*Rv`Do`@g&y!|FcC5DG!*qA!V)~A^HO~st z&+syf6`qmLg7^;Mx}~{=^V$DuI? z2+vV^b!~$3xqvgX4P3r8#nU3uB0q3C#ZS0GRL%;|NpkDj1m$x98+;o!_+O0RU<8>m z9V}WQqUZiihra`fb9zg%cGDk-_*WqR3Fml@RpK0S$aF_u(~9rug75{()UHiXJ{NFi zw&76Sn)1I!A!DaEzGP#zdPQi3S6$m-%I;5Cd|!yDs2iDmXML5I0~8hKvek{QuFSHp zpnW)WXbCH$FHx)XI=0c6t)9Ou|NE#L5aN9k62EiPOqlA)^@XG&3XWyS=MDpDpjC68jo>)$w#M#$j)0yADuyx4&9Zl2@05@Ov@Z+w|MmLB^dUI*5a|^s(h|hBs3N=M+xV5x^#9H zY{%JIpUdTQtWH@~a4K3xbJ7~SM{trG_Z%7?=HN8LF6P*4{9nnfD)!m%EABmW8m4`z zFwDvh4#+PhO*+(ibeAmsJ=kwItxgx`jwQKEEB)|~|H)f8oV$)hc#|5I<}VZes9(-9 z_e{vKJ|-+@8D`;n;sl*?(%$`4MIfxF+=~MUIF=2IBD@+bb;5B$|MUp zAm@)aHEiA+$Qg?xb8`nzl#+9kl1qHhvT-XJh6HS5v(@p{!{7nKlQx%4;PKYej)||P z=Ne`a-5Y2djr#VAK?>c6^*LB3{1FEkB&?@B(ILy%xi@g#4`MZ~u~#sn*zcr{^Fy?O zODQ?Gn91Nk&4eDn^I1};@+$cI>3p4{K5a0+oSrlzyAgR9H83CX+Wv1*rgDy%L8G9(u z*?2YAWAoua&M!;J$xAz%#%%NRxnG_{WoIQ}j~gfCNZ1fs{J?~q^&E+=pK$4Y_p3w+ zrbKzI>9m{jISJExCv-2pj~h%mcE9^(Y}tgRWXm0mi*+2QSY2J|Y>a8yW7Q7dX=s*I ze*p^ME)VeqIbl1sl?1uL_se0PovrV@ z;?#B2p4fT`v&kV-uslnT(tWDSV{w16AG_#0(9M6eEMY~nD%HO7Wc=uhUbO!P zapshJlcFFB5AM-(i+;qV=yPn|#n`+X*~;RSUA=q7l5;}3)OE4#LoVQxDZyX+2_M`m zXBGXJ61)>5DyBp4Gbmd4)+A%|qSL#-UR zE;qGY(QFYGIEUO7?^v%bps7Jisb$flqOLuHF>t-qg2rJ`TDX{+mKqC7?B@sn@r&d) z9xylQUGaikaJq_Cdrn2CdG5XzBYb@3u!}1*%iTp98c2%Bqk^l=#eU!5qGR#MKxiB1 z;#wHFw$2uAg7KwE%@PA!7lmF%w%Yb*d(m0v7UJFzQD~ZyM00p%Kl#at7<>2J_aV_v z#N4VPs?z0`mUN8ZaGeRUyAfi=@v7x@%BdS)^F;fr=(z=8hIJem5xEvy_i7L9lGzc) zek$9a!Lj$jv5XDSX7eoaTNl_Hv*$+Gi{?IJo*z#JDX_sh#wheC+fV22=Ptqe>SaKi z9S37y$JN~=a~*}n1q?FfY5*^|?>HQyAYxBb9x=ecwt+i0;-=hxVuKFZ5>&sxK(B7J z4(XA(w!6qP9;@)k#@CmlS9cf61qafpn8lr%jY;_8-3F_m;*5+WBk2P3N6wGy?U4jC5 zqCgv5bar9S-p7eIJvH1n^@btGBF;QNaAJU;Fwn-B9on)qKQI|e@*DF4J2CF3o3^Zy+r*SE}1g%IcE1-Lk`GQdVyR5BbmZAQl^&d0mB_la64I!+sQ7d zk@`d873Sa31?D<1gMWtBA|@gs3dBUTg*T=~Aaa~&nO{oI{{>!`D$IXQoCaPOf*tZX zacMPWO`y&v|Cd`V6JaQX&ZxtI?f2(_n-7l`@TFJ8(@$hdHk!LAChUau^-a)2z3$)E zxiS;ix+u=2B)M%gH)gw^H}vFwBPeGTDB^QcQ)2@;TR?x}+6JyV8*B;m=ZW53)<8SA zMFZPMb_2$_f1%|$7&w8UCB{qM>>2D|OTvB~9_JUdp#pEmge!}S|pppax z4lP3Wt6o=zVRO&=V=q`_f$5PeCoGU=`Qn{KDAZYx$vq!c{cy386U>o27?a zLr2wmlULI!3WLLO_n^iGRuzIDR6|dTx+VF6rQ7|45st2fy&|CM6$O3u6_4DRo8jB-*#A6<9^%`X`=e!;0EpHfyxCxKzR}y*c?;<7 z_e_qUG#02aLfYu9kEy!-j+-sW3fswf7mH#v1qy^9p!!E8p`57+5#Iby;^_jnt=RB| z*zo%j=u*KJ8~-g8h4$`OgWP_%;)o+Cxb9&T7xZyJA3eACd#IPI@nUd;LmQO_%~V)< zDvMHT(Qv$pwdhqxsq43-hXk?_oU{n}l|DvA;Q^6Y@}rWhI{V4f4n1B);i&Y>4yAKg zq&lyBc40~VoY>;toJ`5Fk6jce+;K#{jSbA0FqakS{zJAJI+*2f9AXA+q7fBq=VRxY zEG5fxfU^=4r2KpWw}y|0KeV-PHb;L3A?yN)e-SGf{h2WvgYpA^KJgOfaKR!r|HS#{ z{f1%A&&8t7$IJ^bYi(gb539RlJ5S_EEDf=ggZm-ToS|=sg0|*m6H(AMd4kXB6YP0S zL?Q3uEON-t6CmRaAbai~rV9$LVhP?r<8T~u3T(%GUn^(~V7k7jv53XNCMN!}AJJ?P zTkJtfdBHl*t>9_)ob8N~XrCoN!P&05e<85F(uBolIJh!ZMp->VWqk}(cN-H36h{_D|^)Z?L6|5pK5!EEkShf?}n{&3MyCV z2o+6UlD{nFSDk#*lwTD^m&=R&?2UQq);ZYgW?Edi`_od~i7SdBu@xB=Fp7SzJzQk?LAWAwdAL9`3!=d7u6Jhzn7F~QG4-G(G~%95>L>vr*y_I{`TgYn9clE zyr$MU^)wIuo=SP1O&y^m4GAR~W?OIJ0W4e~)=ns82MtaR!-Pfmh`GD~C_igc2c?a9 zXgNZwKGlv(+TE`Y4Np|s3u#Eq*gUt*&3TEji$dB9nPP^myMx>KDK#wBu{fmb9f+23 zdvYYzMlOn$BiZUbYh0Pd#w?O_aemWV^ouiY-sU1~vjWh>uxVj|rcG-J`Lusn)P$&SGB^g|jx0<6)3nZNIPm z#UX5ZhZnQ@54{2M$*6~zK5I-4DgK<-boe9i^qp~>qFIONQq@_TW}3&iJ(U!v=YR;p zi(eA*5;cJf)Dy69rq5!>5xi(w9|oDWC!kRveKA)HX^{sX^*P14qpjVCIT_#(ENhbm zjx}accmI$^b#$$3Tm&Qk;5cFWwL^hbTX8EMYu>S$Id&UQH0>tb{qf4;#zl6v;zH`= z2G!AP4@$RUvA4f!^$M8`8JVJhTVkwverd4(JETp%mTt>#m3=ekU{UVk#rdXIcgv~l z=0*1Iio5=PLDmJNk0=#eAJ^t=H}!lIq;6fN9P_ z!$(~A8ZZ?-C;`jh!CHi?<+b=64$b~MoMSAhwg4)${V*PP`uyQd1Jz(@?_6@EX>zmYEtnGECI9}6+|b6%d+UAQtaQbK?sFq}27)gdQO^M6>#ZCnJO zoW()IFBRa0cD5B;?Xm1ND{wvW2lr1T5G;cGL(8wb{8k5Wm*A+S)m?antnMDYz#~oi z?e+x7>G_ZxHHQK-wi~l*J(t~L@prFwEiBk6E8Vu5=CCd}49=E0i;E%=8shH00SmkW zBJ>WHAvP8}VI6ei_+!wGj}I%o=6hh@RGn4qz9ECbGgXLpj0C|x&*%QOdStsUW zpKo3aLw%~Zo_xVnuqbab2mP>J9Mum6kq+w)$Q}@wq_gMVa^B*w&OZI}rQMHVfy7pn z2Y_7c>UG%FKVShCV*#MKMc1zn(97UhdQ zG3GP(_S;ZhJFmg0EsD>PoVZgixw|=hrF-tE#c&dRr0;&!@zSm|M2nJlZfo?oS1<<7 zn@d|^%6tk5QnDKoWPUP4)hJA0PVHoPp94R@I_$$bOu3G2w2z41g0vu2-eyQH0vAy@ z1x5wuCu|$_{myOsV}dRzw?q>7#e%yhLdaplkDBFji`pMNeM3AMuErX9@BF;pudTC zqF~H0b!j^r9?awWPc?ViL3E*9+Qnfk3Bhg^esmBash!&%))rSRld(*TZonE`KXVl~ z>jRkNqg@p9_Gha<{LGd4?o1ZxTP(n5*gW4ZB2(Vo$`gHf6~6WTFoZ|LCGi1v*G%lL zR~`I>A6_kI&D#$Pel!H~2N1|JA&@_t>}m1s`4i{=V#I$1`A;1_B8R;DDX;0nZ|H(~ z@4%iO4SV{7>lCM%hr}m8`+#HhFRA_~6u)?o9A4wigo%z7oD&7l@zK~hmII_@r zrE8)2f+KeFqm$wzM3&)K_O_<+wydPtT&v&24fBJTCvV}2j;zC$*t(Tx8h&Lohj!pw zY}QSaIcdCyuoev`V*eVYU~eW>l(UFJ>ZHk@=mZOG(`0x{CK9oI-j*kV$cp!H-Yv|q z7;EN2YA3ZoYLgei;bk}x@aG`v9)1NPD?A1gZKO^Hx9U8)68L$S;qZ@v4`T`B?f1V7 zqt^l&rVggs)=znD{+mvArP?eR$0<3o4!+*-EAMcu%swKEd0W1U6qql7FuQh@F5Tm2 zEi(Y7^7Qir0!#A+I4N4lm>3X4l)jj+mN3D4FdC9zb`TKem`#SyjkjeB%_?QDKKM6YbFWXp2h`+sT0Jl zPp5K(HI`&{0hQ+-P)E z=wX?>#tZL&Aw_`CW=)}up!G^zV9&$VTxLh6ghY2yOy^~X>XThdbiuKG;E*mjq>q%K z=|~A8(Hppoj++$KL$L4)IJ6HO(gla~W#z2t$loE+joFM2dw11C1d#q>1P3Gj5#&F0 z0Ee!CL;JuXU2sSr`8(5*zeA$eTQEDWQ`Eym{SyQ&)&JB15z-Z}^PudR9LXJ%3j5W1 zhXUJu%vk&|ezsbs%9Jq0*hzO*b9?e831ubV4_^*H$6poTrIy28T>=&b7a@8nM%X8e z|FQr-Sr}jGCEX1zn1{@lcE(>7iXTHY_#it=rovJq$DkES48nzf>`!zfS|uf54qpym z%%2KRzc=6%g^`r0AcUhu{XZ)F1)Y6N;jtGiA$Sz|OC3l31Y?{3puDMXQ3&ll`_>+HSw1uH)_nwLhag3 z_~Hn~%gFMD|7qaL-nRUU0-J*r3GatDDg2SaJa=DY-;`cbdPN5Pp+C`0+gf-zRvhu( zNxI!$_>8`;r!}vfVSXO{=0BRM+jpm{3S-PoeiFu{Z}RofWz_p!3^@%i z3l*_#pnf&50jPANE)e9*e?m~Z{GNeHZv+t+2N%d}9i*H9N7TdCmHN40fr{S>c0ALP z?))%UXW)mJV`;*;lKxO#U;bAv3i5^QP|haT5|0He>HLYpwh54VhavNBK$acGVM4f7 zi0CZKW2c`R2MHu(gk||(L6+TsEIW*iI04&^{}rU)n4HNahLV;8p`i)G^211{J6mO+yyLtVg8E>FhdB(Jas$n#_mX~(H2fGdR}-@Q(O#9=s_e>d<^aET>}w# z0+Q#?g?%vjUN&hv6E%Mx^|Fb70)ops1rqE}1=7d3U<^0ChO4y|0fxeScvR;@ru}un z#|LutG^`owb`;!^`$H6pi=i0#Cm_e&CkkcWo~|YAlI540$`F^)0mO zY;r9u3`}$@B<-ymyc92v8)9e<;C4GGSC}CdS%_F-$IVc^vk##+=w=! zzfJ8Ij}Yb#G5Y6k>K7-~iR#Oa^k2F(D2Iai+zanu&G0;D}7!V&r!MO zLe3zz_hx};iW{;%KOPi9zPTasVfy9k@;u!RxGw>{hk(v2EFN0R^B+1vm-cd+i5}1& zBalCZG4lGdu`9$f9Yoc;-?Fu%`V5Fuy4>5)>OLfdOb!HR(U?oxJ4_Lfb-crPPA3N2 zx|3Q)EMR#LsW#DSb)IcfB@8jTJSS0U*XKri1^X8Dl26QXK1x`fl2za?edtnA{fEoA#!Jy7fdDGceIJ5?IVWYm$ z2AuMrkz6_@zZNkVcY^nWW8 zLMRp6WhrDi0V(|~?6UO@H04qx1r*w8YoFyvs}brhv`efT8J88#G=+_w-ULEd2$Fi- zfl4gdhyd$@L4<>ER<9VmG|@Svv9`6)4pL_a7*jo)T#)6!%S&&90w2&8a47($V&&4r zXz#cztIpb1VGnpeu!HCBj4015Dx&*ykk`b{vieLUs*bpKw9HTu5N)S&DFfomtf5Lz<6S(#Q{mZMN7)Ggfm;5;G;zH7<&_pOW09YmC{&iO_O0 zaMEn2cnTwz=Cic@my+3E)_v40BN& zs{>=mFc~|MfqFs=b)<*M8({J#U=n=SXrSjFtHajsl@1rs%As|ZD7{R|roJi&;ro9T z{34=Y?qmqdH9x~Ff~Vgp3by2ME$qWiWVG4NRHmAg8F0coZT?WGAwWHb*)g93{=T5W z7LoinFls3~A%+)+2V1Q%Y#7O_Li}kMjuq{h5|c7WS-sU<&Hgyu<@HZuTQ4QoUkEJg zHDO7AH4wI;BDA%K$Wb&sA`42S8O!URNFji8TAvtt3V((3)@-$lRK0=N$7`tA$4Am( z-gHmT*{^CsFxiL%#HZlnupEMCd>VgTexJY&N1Oo}@-re3U z=uC+b$wjd-U}9k&gG!C|hQz2wAhURa(Dv3U*Fsq>oLTq?5-Jw!#Px*Au`wpKD?)|K z@>_$fVQja+$wouI9?Ki+EyZ-K<|2=ZPBr$UwIl2n0^c6d9^CW;yijpH%Q}O!^)f^! z`IeA0)SL2~Ot|utGW*HD%g!>-m%3w|lum8twXuS$#A0^OvVzhkmN)#^((#<|BYN;b z1tVi(+Och;CbkFpIsft!89~f?p`y2sp_2KF#6Bp(fa4>!&^gVZf!4r>-`Gr6dpCT3 z9pTd!<|>Pe;M0BwVD{(O-hxZ8umv##o~4VlaN7{f&x>eN6TmUIqw(^2^2nvf)A`CGi0@i}-<9hD${ zd_XdKI85NP1iM9p^rwry4YZ;k)eQlWnj?t)o7O0ts-arW+PDKUHVPcGk~Bo9gR>Jl zii>^>?GI9=ZiLwJL#)bb4p}@k&_GTp{So1-sezCq6$n--lIeo#s93S;faG#OWXR`1 z`^BvwM+oO9MSxU{2VbUb^6eU9K_Fh%;aTE{K-tv5oATYC2l++j@`<$!fv$U1Wr~Qh zPd-yt)~sy2J*St)9c;S0!f$Ya)!;!IUwH(IeyJdzjJJ>HJ@ujLUMP z;%;NRW@E)D5Ha4a5P}wny)OKufff?i3Iork2f{a`3}%iCHY8EdL_q9JL}-$z(H3la zAbqbQDX(NTt$*{R<{gcE?s8}2c0fn`lY8JgrF8XbUK0VGzZ!1i$^jT8RpQ>hRFeoC zb#K?^=3I8yQe?CclrRXAPHAxA{u6E5(F7Pp7mdTHE*jdzt;-xQjEY<9%FN*0aGRn$ zw2I4I1qabAIEa$6LleJnEmA&x=iszqr2wt6W@aoLMO=uNvLWd5CpN<>HsWF~KF8Dt{v4_K`9~T?g^I}4oH--#% zg{13-cpB5Nl6^;My7bZ)K(Ag=u_mxR78PEX@0!mxf%rhimhH% z%Wn#L7oFGy5wV_uNJYsrm|G8~{cw5#o@zL}){ST>B9C=clkT%1ibNEoSzA~aN* z`DgAKAkp3O7Ckrk$g7@mKRbAOEnB`5TLxFY#W6WHu!`%fHV_8Yozd@FXy%mg%ydy* zCz-1;g@a}ibjH`KXw0~#XSH4t$;h|tVdLtWOfmgdc2Y_81}^~uFY&H*YPfjv9Z~q z2Uoe4d_IdMow=CI{`@PRx~S(Wh4uwz_8maIUYWr(8*U{E?gych#>PVLk8j{s@h4&I zXFUId`{{zQP=iL};klg+(fm44btAkGRezlgJ1PBWiUk)~Sk!o}O&iwRPIVxHx0^4^F1MU|zf~WOl4m zVx@O@<}rle5Ffm8XEHr619-fBHN!y4Hj>huqBz8Ko&_o9T9bNnFjq6%8;9f{v7|J3 z&8)GyMmW!7VFl>I&9N^#RD6Y=o3{_DQWyGpEO={#m9?JCi9B$z<4=`B+9EPrzJ=#5 zj-d?$P}u@k8M zN8COgoC94<3U}B@2?u!#(Nl&C1GqaAtr_a~c+=NuMv}vhZN`On!bDgp=MnvCcdl1$ zk(hO)&R>8fB!Fh9=R>*`O>5Vi6urgInZ88fL6@%E9e(*0I(I~#2sDzcfp=dOrbZ(c zMN}7`JHMRlGclTo(4-MW&tI^LW>fLFqo`D=8=N8Et)5|p2eEd4`-AM5jjQf4L>!#) z0GWix$NyAuonnh;yS=mVWcL{20nT{K`-h7E4&%S~z)G3m#q`Tx@8jdPyPGBoqn`g{ z8DF|;6bu)|0B$lpxST~b!N)`-QKjRVB?BMw6u6-ai7-J15=FEPCd{EdFkn-Js(M)blC?PL`VqJQ?zB9+ zL?pN21*DfVp5YOX90e`UpfsFrL9;oZ!Lx!d3^*mL`kob;W;N6vcC1%1tfz-lRg#c; z3zPfsSE>6?qR;S)MZ5*ik``ZI}cnuu$U8*O$UnIMe%+aIiaD`fLG<5^VtHUNR0 z|Az|Xcw6C7Q8OMCW#BPU#F0N${AtMlM+M)5WQFHib}xUX0j@T97!vG!az>NAjBRS- z^uyF}PG8e?s}9d(gXZ!8QVKJQBXK^Ni66Eu9%rboLnstA`-<$O9!fo);XjLXyaVxmjb`BJje$1re$^ivi!=l9S>Dojx6n9ELt;#PWs_5 z2L1!ge`t!#Vk}$Jha36pBqxVtoT?w?TBuit)WB)8Sp!bzvV#pu^$V`Hxg~F$cK1>V zCUJ+!DJI=8vWt2Ap>Fm4{bEMeZ(wma_?hfM6k^0DJCOV3ZKh-_N}dFo@4Uxr3g&Bb z+wsC+>@0E@;c%3}398vlexxlB>GGmrKD?42_UzR{%ssUaS5Yfi-eGWn5;(L;_e2go zF_O~!5mCS%O9MR;8(mypHhuzvTXuiOZqC&=|EA4NlYq2o%TM5>&4%3iX@e_KK}rc> za3oaZD68z@BzjShG@pE%)62uXW9o_P@+&7dKD4Mq)^S(D+WOZE*m?=@G09$JT6ZDk zkpK}{c@FWO=Rg7L-C^iNUUYgP?2=|zT+KhhJhU0pHP|Gt)0UpPFkqgQA?%uCN!jUl z6L{b4KKA*a-*qLFYAH zUeoiM)M_JSrPzSi(`+Acs~#CV?+-J-<%m+!+@Z&b9GlUhO>q2E7NQpNaL?x*aM+$_ zR5~|xNZIN=0ah8m@7RVH+H*4{1_pRSADgWn`+laxX3?QQjuiC%0LOSJs56?3*h>to zBCZXr2kA_lz|;{qfr7om)kc%C4`X27AXm-Hc`7bSm*Jux`~GW%49eWsYN}ypHmB-w zxH>S-Y!<<&$V=(KNRap%5v}Tr%B@RoKAt_Z`5R8OH{Jt;WMaz}t#qwB`Q9j3=cZLs zNDXZUuK|rCsTw()zq7d-_5hLCV|fmijgbHCWuWGzJh+t_wUE+I0I zxMz_Eg485Q^D1!E={UCO219K@TSH_pX-1RzwrZ| zXMRsAd-`zbg%2d+>9r?NHWeLQCLO^TF1^?9F*_>^Z!HRfbH;ioIK!%vDWOL|6- z!)PB6gvm0pqh$Q(Hq)q@lsit$RjRHrsd&bcwUAYNN_|i!!PR5lBwm$HL< zBnS=HQ0mg(j}^tV4rh}pBR4PY zl={ckwo8M(2ER*1(Vd#rtAExJ)T^bAoxi|1EOJ7(78cx0N&)6sgXD^O%~5 zBrEU7$gi@%^UaLWGkGH06}UC&S1tC;7-$ZFqPw<@r;h#LDk5=k6x14Hw?D6uH>t~K za%_fr`wP<7@BhU^VS!|QYT^PLaxD>GWPO2~SrTgO;#wUJ4nSgPJY6+|Zup&`3p5@O zr%`jsUBpLW1_Yu85musL{p(%2!blB8P1I;SAY`Lp|IKh1F31%D;I40iShm&o5B=0h zke5XR3s{juPyp%zycauqN4Cc=YaYwQ=uW$v#%ZG~b7%}qSj$!1c0^=|pST9j7evZJ zhQ`1mtwR8H2nm8=3vk;-JWe!7obxgy_Ps1v+rXZE(T^y+*^g)z)!@j|7L<8tG4<5p z+IHNuq&$iAV|MzUz0m(HZ^3%FKcbJ!ZHG1e;ztBz+W0GZ)A#J1NM`DO{fHZe0ulL9 zkG*%5(*D-M;SdnE@1cIk0R+Ugx_84Y+MgAXC1D&?Uin&G5rr z@by-A$Zx(Kv~I}8;jZj8gkKrqkK9E?9;9=N#tEZ7cZNT2E=za7fy2yBGD^x;A5lO9 zT#9QAUDI7^JSp4MCKK;_xb1M85x=Yha5*}_rL*B05>$>mA8AH-3SefFIg>0u0%qC3HQ06tB6kX&)jybRAS{Iwk@%%gF)cYY&T@@wNt!Wh z;O4RHP?R+bk&ab}^t8HfCJ9U7)M2MVS9&7{jXx4s#FvGs&ac-f;ff^OV1-BtW4uQM zfz#ptd=Gz($*+AD(vk32ue_1&mi48nW_-=|2R&Oy2utsLAl#SdcUsc!hHFtP?%wQu z*=i=7NA2)s70ow9#&qj{`fK|l%$qSmHZ)e4A#i%&dXfj9Lfcw+`t#uYCkomc>2|_* z1P&K@EMyIkx!LMG_#}*uZr5F$kKlOe^WQ#G=hKXPkM&$NQ7c{bi&w-1*5MXUBcj^_ zd-2q6#ke;=itZR-cjHPgMYoq9ZJm4Aj2B>^gKX)`E41tp^nJq0pzMUlK1%$ltA_B2 zP=j4aPf~SQ{LgUFBb*{K_&hAbjF5d#^i+D)J;3JpZW%d5JguIq4#0gN+8&N;@uMq! zedlgB)%2y7G(BL+ct!efn%{1!2vES~qB>2fRORl>Y8WBhXF3~m`t}{|9~K+1h2LDW zKT}(wu@TV)KJbV!i0f<*ad~~CkhQJBA`Ff)IbxD16uFTq@aM`1%kDYM#=gO6;ZqL> zM&oC<>(!6=9eSSlJ=#3oj0tPtmVV~ z2>{2ed+*rnXdHt*{kK1CX-hmUs9OZ6*O2}&=8cL6>~x_~9b0V)J5u|*+o_%$KIu?k znaezFOiOmc(Us{B=`=qXn`|@ww43p;<;^t8!V7$S_}dRZ^pTv9lT~MkZg=6qcbv-_ z@HwB;Wz4>mt=>WW(Va0aq;qj49twxD?DXGm5Q1s=A3YA=)JdBoFOk>p7YkSeKQ_72 z`8kp=Ll{{M_eo(KiARu&RJP9!Z`>FbW^3is{kJS_=B zIudmQ?jR1^d1`CpN8Gl<3E~y&)9DJDeHd#^b>pY1EvYNCgVKL9^bu9I>PP%CGK#}k zq?qigf7WPU>y?Y!z9jt+`aa8q21`-5`UplykUN!yKc5qhf<(To%{B3lJ(Jyn8}}?g z_vPq5#Uxu@jlbMM{45+@o!hQ}z10^01Ahu(V0!?t3nz@_u4Qd*%+>cgDa6TWtsrF*Zto5>3_QfGx(|~}@7@Q`sa!W2T2&un z@XU;U+^k5MciQJF^z434$}H}Gw>0I;f&Te)yibXZ3(S}UmM?MKjJGM*6W#2F-bGBz z)-hscgdf5_CRROo<5H>pTU>SL(jPwns@JM~H%*%frtZGR6gr8J=b+6bo&=JpJ*-nX z-=>Zm1tp@_?pD<|4)+h}{NdlD&H?=SgC17Ez!J>3Z#$;geFrmEa?R?lm#_Vp1y=;l uq;P_e;n5>7pGtrGtXIVn;aXAJP?&KB%%%Vz+cjy-}-;jWd_3l literal 19654 zcmcIs3s_TEww~LLwb2nek;=4yw6&2?6{e*M2$I{-3c?stW5pJbidB3A0YwnW*J~^V z3RH9dbB z0=$1KyrMez%}F_3MECv6(eEa@pIiD5L0yuCwdBpv59)bdmg;F1`%I#Kc+0tHUE-Bi zbER!`|K&<`&w~U6dDj5R+bMc>vCL- z_^JkoHSDY^DNzL$GpLHImgyw}l>@==_L^R;vP|NuWK=~*vwOSO)haJHrn>b_h1|Wp zahYq0OG__RQSr7or7FnSQK`64b>GPGBtM#WzJt~qug;a zmfT2+Qt|y|&vyG5;WB2)JdNQ7jp6&ou&4^wSS)j8l{{)<^i-5-8oV@uYPEX)wn&X| z-`k5)syJR&&x%Ig8h%Jxigvggpk*0sc`FN{l3hH0$# zXpC}_oEgz?C@OaH9!7^uQue#I+vbSGQzLAK7R7&4s+!NMe^ja7jBMZ8cDXD?6f-p< zTYurQO`a~lT{W$8cJJfjvC$lj3!+0cB&tGd(DG*?ww)ojG@9q;=W2`sj_nDm!7X&H z{PekEvf8Xqo|NvTx$O@z6EHK%?kDk=jqkGLIZzdsXZOlVK4tv0S9x~rGG@eVTT#&u zDePqxp7fknn!vkM^|yMOV0;%<@^Uyu`gI{+cFK<#amz;J9Gt?QnwQEk z*9$Xi^E@KdrMu`?Fq{!0g_`^|rY@OdK?8raG6)*=g+bo5hmf%URJVz4*Hd7_XLMYPfd3@RWdSMeW+;6Y1 zCxWUMjbxpP+K3ct>PM}Vz?e|jxt*yhpyCjMq;>qH}xmM?{Q6($ZQ>5>o;LH927k@WP%`}fV3K%* z2=}}!pYJf765To?g_`3?l;md-TG9w%?ks?3NTdim&B-vT0chE?kFjYTbQT=) zV9xP3{e#?h1Wk%MVufTR$}ZR}v>jU)69F-I~9CIeYt1KMg39tRx+ zht$+v2@9Bud1ry}nCLB%4pHie9KkxkQ8ThiW8e!AO;eI=;h6o6UBUea5 zLLlr6Bg3c$pk?pF7@LEG&VfUE=S_ID9#%>7NHLTent2jxk3^W?}`g#WEj-|wCr6J#Sc10Yj%hpU77zj9ZR85cNN}_2 z7Lb9guK{i42yfaBDX+8P2DH*e&Y=Q!nj^A5bL@d8QYCh76zSgmeA&fnVbjRqe*0oI z5fIKsrc96Vox;wGWEe4d9eeL%3sc(}-E)=;m%fYaj*2bJSgIucV~X^X48H80Pni)r z>7pWcL;=IG2(kpwgfGJt8DJEl%bg4(B0h{ggs&lvC^|gJ>fCm!r1>L?wEIWCYzvzi z;f!fE72(SmiOF~*GX?>f*?1yovNMB}7;3CMGjTi_4AnyS{@9uW|p^eZsL$Ws|^);t~=p305#Q*B<* zuI&J|PYf?(m#xURJcXUz;z{?G(F8N(RLSlriqxZ+&!sgA1IXdNoYqJLRWBO#DHuU} zx^OLx3}dy$h_QK3d+_Qdx#_DbJ?Xh^G(jDX$M4~IyuXOg-MWmKKM&I>&0c(s7>m$G zfLz8ll8$6b3EHg0H`2&JN|ZpScArX7{E&f{%x<=d>!M0N!5MZ&A)j0A$INfH5&4Ft zux$!F>81@8)>DQ>g2|KyA|Tuh--$?>zWVaaDGg-M*I!?IXnV$xK?l+LV_5}!t`)qI zY$K{)fN*oblOFy%P2ki)mFx=(je8!`cI*oy0>aDl9fnh4XdO3eUl%eU1N0pVn*ux{rO{w)-) z-A0Dz$c<1x4rn{I2RpE2Qu^vhPrCg{njjSiv?e!A!cpKA>d2xf_VC41O5 zD?RBcM=PxNJVt`ao})xSxOgJ;RCuhP<(Yeql3}d+5iW)dGHA!0Sk z+QZJCi|k_`O>pQERq`25AG40}xwY5bmlFfwp!T{j;DuqYaBVFa#%c?PgIU^xlP_73 zwwi|QVi!%|Q%;o}#^KO81UqKkYTL0@bnLkOT)c* zcB0jUvsB5r0E+abBYf`HOPTrqi&^j%p8nU&tY;1jBo*IcJ$_+8Uhpj$#%c=>`{0-~ z+=HaIVzYDj+^gQq{5vy5^?ke9T?!9+_%@oLuz3E2=RuYD;VkXNft%%rV=rQi(H4%q z+6Tu2?u|Z4;Td~ohXW@k%1=vTQk!Mc2^sS zCcg0_8OCZ0hem_r&~QI_e1(-Hn<`m}L!+aI_}uHCG4t=fC-U9An{8A0ruEFn@Svyo zVXb^&z?$qwhOyehqdGVS4fmi=_Vg}FpUS`4zsQRjv^CR8lzXx!xvFki=YsYPwtesR zo=8#jep|Ef$z^0~@4=MO6ee3UHC+{3S_l;U+0xRRoq`{~qv(Awc=@bSt7Q~S{vBv6v}8w2&q!A-brrjy|60Sei3uw)kP~!B&%!8#wv! zPW^#1u$B`V=f7bstNYMGU7;BV^a;|$irRxMi%V|cjKw>37e~34!_D&F;KAxUw6Hug z`na`Y?Z`}Ocm?br;I_udFY0(EU*?_aLFYZWxY;S1ya8t{C&YYi9fz5J&stR9FJN!n z>Os$)hfRXCR+ATlmc?~xWEiU*$FS-lymP0wef&NK^lxjC??nOIW|ars)Q%>I-%FL0 z;)EpNpkwKnG2O8?fDB``vC7ELM4NN#;V{Q)k$~OB#yU&KcW?n!V&OrN8vVrQ#w=py zyRKm!850(;j=Pd!torx5nhxO`amVeF@0aPWrl!~MTkCQCj$t8RZ!_}Ktvcx-op`s@ z+W$*imi(oyArjMT@topQ%Y?FV{Y?VfUrfbOU+WPWFOL3tovH7KB@f(4cR${{`^g0@R z`^^g+Qs%|j=vMg&W%+lT1eGgc#ir0f8hX9dI{ktTOYXZlMACLNp5u~2A`;x$c62+3 zkzyfKE8^&H=Q#8kq{RS3 zoc7Kk%m<3p{WEz@)kS>Ser)x+VaqoO@9$XR4JiiRl#2e)Ry45srm$&$L}*-6YlXGT z5BB1RdMd2Miq&bt&ixVGtfbcROqU;?tI)4QzXTqap=?X$ZBE}3XCoRg@ng!Z@vaL8 z@4Sfd?u%D7O^}{}0eu3kCJn+S4t6EIsxcUn3T~EHHMoBQ?k4+$ogC~T>Qw00p;rQ% zheH|n)=iehj>krsaS?6;-fUp}v4ln+z>HC}CaIVd#FxCq?wUcWCTmg3&{bfay_0Ak$hIAhSQ z@)ybuKWq{Nl_HeQD0YzgbeCE;#vynwi3*YAHX(SwZYfk8et4@Us1$K(hKoa=PxtA} z#yCXgB~ihhxlM@7uN$Dn01?KHY+ZV4S$#z7D-S^aG~)2aV2sDC9^=ui0_j_bzpsRc zNbK`K`ZVJ2q%Mpr7~|TG;A&P6(zg&?UkMNHw9f-#`qlxCYYa5JT+{ zLsO4{^mhoetJdRwtpMpa5Q!_U4X;JN$X%0yf;X@NY&?fWA@vC6$Ev#*wqM=rBgEyD zHq4$RNXH+;v=@SO(@d6pN+3M#0Meyz2o5%8O=oe`NXAE6VpBhq#ZD>bIajIBajYRDwHLh0crCgS_}{oGQI7M zFaZ+IU;;D;V@^0kMF<^3oi^e!F%|Q=xwWeFULIO?t6;9|b#auF4JK>|7$r_*DL4DV z)6M_KDX}mWD(>ZhblEs@v{N>weF(;tID;kM>s92Z{MqDsTo`DJL3(_qUSjy?%@N_;%mwzUd zEzAZZF2XORAe#p+8&{*itll{4@z z@)xU)RujeoBr^*N980}^$EL!rjjZluWHs6%y{*Z;Wz&Wg!sDb(U|@mb9!It}bv*8O z>uF4Zh<{=VOhp2$TlH6QbkAFunBy@GoL^-rTR+0YG{!xSU?Y-l$332EB97|$5fgJf zrhzk^C2#!*6VnipgH^Q^+wq+Ae2M48`QLa>jF-7orA4G5iP)m2KuU0b7jgqX+3Cy@ zPh<<><)-2R8+ntUk%knYuqB=ooe~uyxxWiJhM%m|y2KM%hk-))#ui?V6hONuiRyRm zNyJjyt*^LM(^!o)->G0bhv$Yw;eI>TM2iMc*pH<>JPbS&yTG#=xr0*ycp4`3z@#A3 z4H?Q7?cze&SvyQ@S5tij7WalSxatv>`*2H8=xPRqZO8-)lR)7CR`vTX;Mq_Ho`wl+ znc#=V%gC=tt9U4#+z^}IAYiMmFQiBbFSuEZ!Zob!K>G@7)m?0fq&Ivhet0ak)r7bC zvaqRgBlgg)FAR+{PzYNHj6!SCz_C=SK|+o@vWFT|6wdW$SnYdwjl-0$zyV_jkDYe4_t#Q%COnS=zk(o8~)bxVP&znl;L;Lme`=<-Gv{HwB4Il z5$lEBAO?1ZRQyFu`DAPf=~N(guwjM&JHm?qRz$Eu`3d2L4kAntne0I>x`3IB?}`Iq^t!1`Wp3-+H9Vq=@=Vng{3j)i znvDaWo|eVDb=Xb_sz~N24`WZEWVRQpFSm6?d#kpRux_886dv!=z&GJWe)@`B2WjIU zc%IE}HVJrV@FgH;L zEVWk8ISO0zVXN*uY?&b}M4KTHX%}*txAJ1pB|NwKia3s{;&W(sM3!nF2<@%^fp+0S z(V<2m5;pDP)Ta z^%c0KPA73oolb(jc45n#c`3@9i$f26#RR`?x*{?uFQ+nU{08(UDbP{3^`4YBt}-e& z5FLjv&_}nSP0I6O`JS*5MO{bsxbhBFl5*IS?tcPn{gaEq7W->~C)ypuj(mcQWmcq- z-}-7!``UQO`Czx{S_V?TDawF9E}p}I?wn%Cbz}A<1VJteKP7I)_bIc+i79q 1); my $cmd = "cp $inputdir$dbName $inputdir$resultName $inputdir$gtName ". "$inputdir$idName ${inputdir}*.pdf $tempdir"; -if (system($cmd)!=0) { - croak "Cannot copy input files to temporary directory!"; +if (system($cmd)!=0) { + croak "Cannot copy input files to temporary directory!"; } my $dbPath = $tempdir."/".$dbName; my $resultPath = $tempdir."/".$resultName; @@ -42,11 +42,11 @@ ok(@text, "Read database dataset info"); my ($sumRef, $keyRef, $countRef, $rateRef) = WTSI::NPG::Genotyping::QC::Reports::textForPlates($resultPath, $config); # expect exactly 13 lines, including header -is(@{$countRef}, 13, "Find pass/fail count table text"); -is(@{$rateRef}, 13, "Find pass/fail rate table text"); +is(@{$countRef}, 13, "Find pass/fail count table text"); +is(@{$rateRef}, 13, "Find pass/fail rate table text"); ok(WTSI::NPG::Genotyping::QC::Reports::writeSummaryLatex - ($texPath, $resultPath, $idPath, $config, $dbPath, $gtPath, $tempdir, + ($texPath, $resultPath, $config, $dbPath, $gtPath, $tempdir, $introPath, $qcName, $title, $author), "Write summary .tex"); if (-e $pdfPath) { system("rm -f $pdfPath"); } @@ -55,7 +55,7 @@ ok(WTSI::NPG::Genotyping::QC::Reports::texToPdf($texPath), "Convert .tex to .pdf ok((-e $pdfPath), "PDF file exists"); -ok(createReports($texPath, $resultPath, $idPath, $config, $dbPath, $gtPath, +ok(createReports($texPath, $resultPath, $config, $dbPath, $gtPath, $tempdir, $introPath, $qcName, $title, $author), "Main method to create PDF reports"); diff --git a/src/r/bin/check_xhet_gender.R b/src/r/bin/check_xhet_gender.R index c65930c97..a878051aa 100755 --- a/src/r/bin/check_xhet_gender.R +++ b/src/r/bin/check_xhet_gender.R @@ -1,24 +1,5 @@ #!/usr/bin/env Rscript -# Author: Iain Bancarz, ib5@sanger.ac.uk -# April 2012 - -# -# Copyright (c) 2012 Genome Research Ltd. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# ######################################################### # script to infer sample gender from xhet (x chromosome heterozygosity) @@ -284,3 +265,19 @@ cat(paste('Ambiguity_rate ', signif(ambig/total,4), "\n", sep='')) write.table(data.new, textPath, sep="\t", quote=FALSE, row.names=FALSE) # note that R will automatically close logfile + +##################################################################### + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/heatmapCrHetDensity.R b/src/r/bin/heatmapCrHetDensity.R index 58fc5a25b..dd2379604 100755 --- a/src/r/bin/heatmapCrHetDensity.R +++ b/src/r/bin/heatmapCrHetDensity.R @@ -46,3 +46,17 @@ make.plot <- function(data, title, hetMin, hetMax, type, outPath) { make.plot(data, title, hetMin, hetMax, 'pdf', pdfPath) make.plot(data, title, hetMin, hetMax, 'png', pngPath) + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/plotCombinedFails.R b/src/r/bin/plotCombinedFails.R index c2a427235..2b22d7084 100755 --- a/src/r/bin/plotCombinedFails.R +++ b/src/r/bin/plotCombinedFails.R @@ -16,7 +16,7 @@ make.plot <- function(experiment, combined.counts, combined.causes, total, type, outPath) { if (type=='pdf') { pdf(outPath, paper="a4") } else if (type=='png') { png(outPath, width=800,height=800,pointsize=18) } - cause.key <- c("C = Call_rate", "D = Duplicate", "G = Gender", "H = Heterozygosity", "I = Identity_with_Sequenom", "M = Magnitude_of_intensity") + cause.key <- c("C = Call_rate", "D = Duplicate", "G = Gender", "H = Heterozygosity", "I = Probability_of_identity", "M = Magnitude_of_intensity") layout(matrix(c(1,2), 2, 1), heights=c(2,1)) par(mar=c(5.1, 4.1, 7.1, 2.1)) # increase top margin barplot(rev(combined.counts), names.arg=rev(combined.causes), col=2, las=1, horiz=TRUE, xlab="Total failed samples", main=paste(experiment, "\nCombined causes of sample failure\n", sep=""), cex.names=0.8) @@ -31,3 +31,17 @@ make.plot <- function(experiment, combined.counts, combined.causes, total, make.plot(experiment, combined.counts, combined.causes, total, 'pdf', pdfPath) make.plot(experiment, combined.counts, combined.causes, total, 'png', pngPath) + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016, 2017 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/plotCrHetDensity.R b/src/r/bin/plotCrHetDensity.R index 8feb270f6..944287fe0 100755 --- a/src/r/bin/plotCrHetDensity.R +++ b/src/r/bin/plotCrHetDensity.R @@ -47,3 +47,19 @@ graphics.off() png(hetPng, height=800, width=800, pointsize=18) hist(het, col=2, breaks=40, xlab="Autosome heterozygosity rate", main=paste(title, "Sample Het Rate")) dev.off() + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + diff --git a/src/r/bin/plotCrPlate.R b/src/r/bin/plotCrPlate.R index f9cad7515..fb5820366 100755 --- a/src/r/bin/plotCrPlate.R +++ b/src/r/bin/plotCrPlate.R @@ -22,3 +22,18 @@ image(c(0:40), c(1), as.matrix(c(1:40)), col=c("#000000", rainbow(40, end=0.8)), axis(3, at=c(0,10,20,30,40), labels=c('No data', '90%', '99%', '99.9%', '99.99%')) dev.off() q(status=0) + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/plotHetPlate.R b/src/r/bin/plotHetPlate.R index 2e5dcadd8..aad98b75d 100755 --- a/src/r/bin/plotHetPlate.R +++ b/src/r/bin/plotHetPlate.R @@ -20,3 +20,18 @@ image(c(0:50)*0.02, c(1), as.matrix(c(1:50)), col=c("#000000", rainbow(50, end=0 axis(3, at=c(0), labels=c('No data')) dev.off() q(status=0) + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/plotIndividualFails.R b/src/r/bin/plotIndividualFails.R index 425582323..8f85fdc99 100755 --- a/src/r/bin/plotIndividualFails.R +++ b/src/r/bin/plotIndividualFails.R @@ -27,4 +27,18 @@ make.plot(experiment, single.causes, single.counts, total, 'pdf', pdfPath) make.plot(experiment, single.causes, single.counts, total, 'png', pngPath) +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + diff --git a/src/r/bin/plotMagnitudePlate.R b/src/r/bin/plotMagnitudePlate.R index 6af9094c9..09eec2ee3 100755 --- a/src/r/bin/plotMagnitudePlate.R +++ b/src/r/bin/plotMagnitudePlate.R @@ -23,3 +23,18 @@ axis(2, at=0.5, labels=c("No data"), las=1, cex.axis=0.8) axis(3, at=c(0.8,1.2), labels=c('< 0.8', '> 1.2')) dev.off() q(status=0) + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/plotXYdiffDensity.R b/src/r/bin/plotXYdiffDensity.R index 34cfc25f2..c119ab833 100755 --- a/src/r/bin/plotXYdiffDensity.R +++ b/src/r/bin/plotXYdiffDensity.R @@ -17,3 +17,18 @@ options(device="png") # sets default graphics output; prevents generation of emp png(pngOut, height=800, width=800, pointsize=18) hist(xydiff, breaks=40, col=2, xlab="xydiff", main=paste(title, ": XY intensity difference")) dev.off() + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/plotXYdiffPlate.R b/src/r/bin/plotXYdiffPlate.R index 1751f5875..690f77c4c 100755 --- a/src/r/bin/plotXYdiffPlate.R +++ b/src/r/bin/plotXYdiffPlate.R @@ -31,3 +31,18 @@ image(seq(from=global.min, to=global.max, length.out=50), c(1), as.matrix(c(1:50 axis(3, at=c(global.min, global.max), labels=c(paste("< ", signif(global.min,3)), paste("> ", signif(global.max,3))) ) # round labels to 3 s.f. dev.off() q(status=0) + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/scatterPlotFails.R b/src/r/bin/scatterPlotFails.R index e6c302ade..c7997e687 100755 --- a/src/r/bin/scatterPlotFails.R +++ b/src/r/bin/scatterPlotFails.R @@ -29,7 +29,7 @@ qmax <- 40 q = -10 * log10(1-cr) # convert to phred scale q[q>qmax] <- qmax # truncate CR better than Q40 (!) qmin <- -10 * log10(1-minCR) # minimum CR for QC pass -categories = c("Duplicate", "Gender", "Identity (Sequenom)", "Magnitude", "Multiple/Other") # legend categories +categories = c("Duplicate", "Gender", "Identity", "Magnitude", "Multiple/Other") # legend categories make.plot.full <- function(hetMean, hetMaxDist, minCR, experiment, categories, names, cr, het, d.fail, g.fail, i.fail, m.fail, fail.sum, q, qmin, qmax, type, outPath) { if (type=='pdf') { pdf(outPath, paper="a4") } @@ -96,3 +96,17 @@ make.plot.detail(hetMean, hetMaxDist, minCR, experiment, categories, names, cr, make.plot.detail(hetMean, hetMaxDist, minCR, experiment, categories, names, cr, het, d.fail, g.fail, i.fail, m.fail, fail.sum, q, qmin, qmax, 'png', pngDetail) + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/r/bin/scatter_plot_metric.R b/src/r/bin/scatter_plot_metric.R index 26e571308..718efe0b5 100755 --- a/src/r/bin/scatter_plot_metric.R +++ b/src/r/bin/scatter_plot_metric.R @@ -120,7 +120,7 @@ ylab.name <- function(metricName) { } else if (metricName=='duplicate') { ylab.name <- "maximum similarity on test panel" } else if (metricName=='identity') { - ylab.name <- "identity with Sequenom results" + ylab.name <- "probability of identity with QC plex results" } else if (metricName=='magnitude') { ylab.name <- "normalised magnitude of intensity" } else { @@ -182,3 +182,18 @@ pn <- process.pn(pn) plot.pdf(index, metric, pass, pn, pb, metricName, metricMean, metricSd, metricThresh1, metricThresh2, sdThresh, plotNum, plotTotal, xmin, xmax, ymin, ymax, outPath) + + +# Author: Iain Bancarz + +# Copyright (c) 2012, 2016, 2017 Genome Research Limited. All Rights Reserved. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. diff --git a/src/ruby/genotyping-workflows/data/illuminus_test_prefilter.json b/src/ruby/genotyping-workflows/data/illuminus_test_prefilter.json index 68b134e77..2b06ed380 100644 --- a/src/ruby/genotyping-workflows/data/illuminus_test_prefilter.json +++ b/src/ruby/genotyping-workflows/data/illuminus_test_prefilter.json @@ -1,4 +1,7 @@ { + "collation_names": { + "call_rate":"sample_cr_het.txt" + }, "Metrics_thresholds": { "call_rate": 0.9995 }, diff --git a/src/ruby/genotyping-workflows/lib/genotyping.rb b/src/ruby/genotyping-workflows/lib/genotyping.rb index cc9d6b323..1ef120cc6 100644 --- a/src/ruby/genotyping-workflows/lib/genotyping.rb +++ b/src/ruby/genotyping-workflows/lib/genotyping.rb @@ -44,6 +44,7 @@ module Genotyping require 'genotyping/tasks/simtools' require 'genotyping/tasks/zcall' +require 'genotyping/workflows/genotype_gencall' require 'genotyping/workflows/genotype_illuminus' require 'genotyping/workflows/genotype_zcall' -require 'genotyping/workflows/identity_qc' + diff --git a/src/ruby/genotyping-workflows/lib/genotyping/tasks/quality_control.rb b/src/ruby/genotyping-workflows/lib/genotyping/tasks/quality_control.rb index d9a89e149..90d894d18 100644 --- a/src/ruby/genotyping-workflows/lib/genotyping/tasks/quality_control.rb +++ b/src/ruby/genotyping-workflows/lib/genotyping/tasks/quality_control.rb @@ -19,7 +19,6 @@ module Genotyping::Tasks RUN_QC = 'run_qc.pl' - CHECK_IDENTITY_BED = 'check_identity_bed.pl' module QualityControl include Genotyping::Tasks @@ -76,60 +75,5 @@ def quality_control(dbfile, input, output, end end end # quality_control - - - # Runs the identity check stand-alone on genotype call results. - # - # Arguments: - # - dbfile (String): The SQLite database file name. - # - input (String): Path to the Plink BED file; corresponding BIM, FAM files are assumed to be present in the same directory - # - output (String): Path to directory to write results - # - args (Hash): Arguments for the operation. - # - async (Hash): Arguments for asynchronous management. - # - # Returns: - # - boolean - # - # NOTE: This is the old version of the identity check. Calls are read - # from the SQLite pipeline database instead of a VCF file. - # - def check_identity(dbfile, input, output, args = {}, async = {}) - - args, work_dir, log_dir = process_task_args(args) - - if args_available?(dbfile, input, output, work_dir) - - base = File.basename(input, File.extname(input)) - plink = File.join(File.dirname(input), base) - Dir.mkdir(output) unless File.exist?(output) - - cli_args = args.merge({:db => dbfile, - :plink => plink, - :outdir => output}) - margs = [dbfile, input, output] - - - command = [CHECK_IDENTITY_BED, - cli_arg_map(cli_args, :prefix => '--')].flatten.join(' ') - task_id = task_identity(:check_identity, *margs) - log = File.join(log_dir, task_id + '.log') - - result_names = ['identity_check_failed_pairs.txt', - 'identity_check_gt.txt', - 'identity_check.json', - 'identity_check_results.txt' - ] - results = Array.new - result_names.each{ |name| results.push(File.join(output, name)) } - - async_task(margs, command, work_dir, log, - :post => lambda {ensure_files(results, :error => false)}, - :result => lambda { true }, - :async => async) - - end - - end # check_identity - - end + end # module QualityControl end diff --git a/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_gencall.rb b/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_gencall.rb new file mode 100644 index 000000000..5d6dfccb6 --- /dev/null +++ b/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_gencall.rb @@ -0,0 +1,166 @@ +#-- encoding: UTF-8 +# +# Copyright (c) 2017 Genome Research Ltd. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +module Genotyping::Workflows + + class GenotypeGencall < Percolate::Workflow + include Genotyping + include Genotyping::Tasks::Metadata + include Genotyping::Tasks::GenotypeCall + include Genotyping::Tasks::Simtools + include Genotyping::Tasks::Plink + include Genotyping::Tasks::QualityControl + + + description <<-DESC +Writes GenCall genotyping data in Plink binary format, and runs the +standard set of QC checks. + +Requires a populated pipeline database. + DESC + + usage <<-USAGE +GenotypeGencall args + +Arguments: + +- db_file : The SQLite pipeline database file. +- run_name : The name of a pipeline run defined in the pipeline +database. +- work_dir : The working directory, an absolute path. +- other arguments (keys and values): + + - config: of custom pipeline database .ini file. Optional. + - manifest: of the chip manifest file. Required. + - plex_manifest: containing paths to one or more qc plex + manifest files. If plex_manifest is supplied, vcf must also be given. + - gender_method: name of a gender determination method + described in methods.ini. Optional, defaults to 'Inferred' + - memory: number of Mb to request for jobs. + - queue: An LSF queue hint. Optional. + - fam_dummy: Dummy value for missing paternal/maternal ID or + phenotype in Plink .fam output. Must be equal to 0 or -9. Optional, + defaults to -9. + - vcf: containing paths to one or more VCF files for identity QC. + If vcf is supplied, plex_manifest must also be given. + +e.g. + + library: genotyping + workflow: Genotyping::Workflows::GenotypeGencall + arguments: + - /work/my_project/my_analysis.db + - sample_batch_1 + - /work/my_project/pipeline/ + - config: /work/my_project/pipeline/pipedb.ini + queue: small + manifest: /genotyping/manifests/Human670-QuadCustom_v1_A.bpm.csv + vcf: + - /work/my_project/qc_calls_foo.vcf + - /work/my_project/qc_calls_bar.vcf + plex_manifest: + -/genotyping/manifests/qc_foo.tsv + -/genotyping/manifests/qc_bar.tsv + +Returns: + +- boolean. + USAGE + + #version '0.1.0' + def run(dbfile, run_name, work_dir, args = {}) + defaults = {} + args = intern_keys(defaults.merge(args)) + args = ensure_valid_args(args, :config, :manifest, :plex_manifest, + :queue, :memory, :select, + :fam_dummy, :gender_method, :vcf) + + async_defaults = {:memory => 1024} + async = lsf_args(args, async_defaults, :memory, :queue, :select) + + manifest_raw = args.delete(:manifest) + plex_manifest = args.delete(:plex_manifest) || Array.new() + fam_dummy = args.delete(:fam_dummy) || -9 + gender_method = args.delete(:gender_method) + config = args.delete(:config) + vcf = args.delete(:vcf) || Array.new() + + args.delete(:memory) + args.delete(:queue) + args.delete(:select) + + if vcf.empty? and (not plex_manifest.empty?) + raise ArgumentError, "Plex manifest must be accompanied by VCF" + elsif (not vcf.empty?) and plex_manifest.empty? + raise ArgumentError, "VCF must be accompanied by plex manifest" + end + + ENV['PERL_INLINE_DIRECTORY'] = self.inline_dir + + work_dir = maybe_work_dir(work_dir) + log_dir = File.join(work_dir, 'log') + Dir.mkdir(log_dir) unless File.exist?(log_dir) + args = {:work_dir => work_dir, + :log_dir => log_dir}.merge(args) + maybe_version_log(log_dir) + + run_name = run_name.to_s + sjname = run_name + '.gencall.sample.json' + njname = run_name + '.snp.json' + cjname = run_name + '.chr.json' + smname = run_name + '.sim' + gciname = run_name + '.gencall.imajor.bed' + gcsname = run_name + '.gencall.smajor.bed' + + sjson = sample_intensities(dbfile, run_name, sjname, args) + gcifile, * = gtc_to_bed(sjson, manifest_raw, gciname, args, async) + # Must use raw manifest for gtc_to_bed; manifest needs to be consistent with allele values encoded in GTC files. g2i requires an un-normalized manifest as input, carries out normalization itself, and writes normalized .bim files in output. + gcsfile = transpose_bed(gcifile, gcsname, args, async) + manifest_name = File.basename(manifest_raw, '.bpm.csv') + manifest_name = manifest_name+'.normalized.bpm.csv' + manifest = normalize_manifest(manifest_raw, manifest_name, args) + njson, cjson = parse_manifest(manifest, njname, cjname, args) + + # generate .sim file to compute intensity metrics + smargs = {:normalize => true }.merge(args) + smfile = gtc_to_sim(sjson, manifest, smname, smargs, async) + + gcsfile = update_annotation(gcsfile, sjson, njson, fam_dummy, + args, async) + + output = File.join(work_dir, 'gencall_qc') + qcargs = { + :run => run_name, + :sim => smfile + }.merge(args) + if (not vcf.empty?) and (not plex_manifest.empty?) + # use comma-separated lists of VCF/plex files in QC args + qcargs = qcargs.merge({ + :vcf => vcf.join(","), + :plex_manifest => plex_manifest.join(","), + :sample_json => sjson + }) + end + + gcquality = quality_control(dbfile, gcsfile, output, qcargs, async) + + end + + end + +end diff --git a/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_illuminus.rb b/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_illuminus.rb index a5eadcc50..5345b69cc 100644 --- a/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_illuminus.rb +++ b/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_illuminus.rb @@ -48,7 +48,7 @@ class GenotypeIlluminus < Percolate::Workflow - config: of custom pipeline database .ini file. Optional. - manifest: of the chip manifest file. Required. - - plex_manifest: containing paths to one or more qc plex manifest files. Required. + - plex_manifest: containing paths to one or more qc plex manifest files. If plex_manifest is supplied, vcf must also be given. - gender_method: name of a gender determination method described in methods.ini. Optional, defaults to 'Inferred' - chunk_size: number of SNPs to analyse in a single Illuminus job. @@ -61,8 +61,7 @@ class GenotypeIlluminus < Percolate::Workflow - nofilter: omit the prefilter on GenCall QC. Optional. If true, overrides the filterconfig argument. - fam_dummy: Dummy value for missing paternal/maternal ID or phenotype in Plink .fam output. Must be equal to 0 or -9. Optional, defaults to -9. - - vcf: containing paths to one or more VCF files for identity QC - - plex_manifest: containing paths to one or more plex manifest files for identity QC + - vcf: containing paths to one or more VCF files for identity QC. If vcf is supplied, plex_manifest must also be given. e.g. @@ -93,16 +92,15 @@ def run(dbfile, run_name, work_dir, args = {}) defaults = {} args = intern_keys(defaults.merge(args)) args = ensure_valid_args(args, :config, :manifest, :plex_manifest, - :queue, :memory, - :select, :chunk_size, :fam_dummy, - :gender_method, :filterconfig, :nofilter, - :vcf, :plex_manifest) + :queue, :memory, :select, :chunk_size, + :fam_dummy, :gender_method, + :filterconfig, :nofilter, :vcf) async_defaults = {:memory => 1024} async = lsf_args(args, async_defaults, :memory, :queue, :select) manifest_raw = args.delete(:manifest) - plex_manifest = args.delete(:plex_manifest) + plex_manifest = args.delete(:plex_manifest) || Array.new() chunk_size = args.delete(:chunk_size) || 2000 fam_dummy = args.delete(:fam_dummy) || -9 gender_method = args.delete(:gender_method) @@ -115,6 +113,12 @@ def run(dbfile, run_name, work_dir, args = {}) args.delete(:queue) args.delete(:select) + if vcf.empty? and (not plex_manifest.empty?) + raise ArgumentError, "Plex manifest must be accompanied by VCF" + elsif (not vcf.empty?) and plex_manifest.empty? + raise ArgumentError, "VCF must be accompanied by plex manifest" + end + ENV['PERL_INLINE_DIRECTORY'] = self.inline_dir work_dir = maybe_work_dir(work_dir) diff --git a/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_zcall.rb b/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_zcall.rb index aa55ae0e8..08612efad 100644 --- a/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_zcall.rb +++ b/src/ruby/genotyping-workflows/lib/genotyping/workflows/genotype_zcall.rb @@ -47,7 +47,6 @@ class GenotypeZCall < Percolate::Workflow config: of custom pipeline database .ini file. Optional. manifest: of the chip manifest file. Required. - plex_manifest: of the qc plex manifest file. Required. egt: of the .EGT intensity cluster file. Required. chunk_size: number of samples to analyse in a single job. Optional, defaults to 20. @@ -102,16 +101,17 @@ class GenotypeZCall < Percolate::Workflow def run(dbfile, run_name, work_dir, args = {}) defaults = {} args = intern_keys(defaults.merge(args)) - args = ensure_valid_args(args, :config, :manifest, :egt, :queue, - :memory, :select, :chunk_size, :fam_dummy, - :zstart, :ztotal, :filterconfig, :nofilter, - :nosim, :vcf, :plex_manifest) + args = ensure_valid_args(args, :config, :manifest, :plex_manifest, + :egt, :queue, :memory, :select, :chunk_size, + :fam_dummy, :zstart, :ztotal, + :filterconfig, :nofilter, + :nosim, :vcf) async_defaults = {:memory => 1024} async = lsf_args(args, async_defaults, :memory, :queue, :select) manifest_raw = args.delete(:manifest) - plex_manifest = args.delete(:plex_manifest) + plex_manifest = args.delete(:plex_manifest) || Array.new() egt_file = args.delete(:egt) chunk_size = args.delete(:chunk_size) || 10 fam_dummy = args.delete(:fam_dummy) || -9 @@ -127,6 +127,12 @@ def run(dbfile, run_name, work_dir, args = {}) args.delete(:queue) args.delete(:select) + if vcf.empty? and (not plex_manifest.empty?) + raise ArgumentError, "Plex manifest must be accompanied by VCF" + elsif (not vcf.empty?) and plex_manifest.empty? + raise ArgumentError, "VCF must be accompanied by plex manifest" + end + ENV['PERL_INLINE_DIRECTORY'] = self.inline_dir work_dir = maybe_work_dir(work_dir) diff --git a/src/ruby/genotyping-workflows/lib/genotyping/workflows/identity_qc.rb b/src/ruby/genotyping-workflows/lib/genotyping/workflows/identity_qc.rb deleted file mode 100644 index c5026d643..000000000 --- a/src/ruby/genotyping-workflows/lib/genotyping/workflows/identity_qc.rb +++ /dev/null @@ -1,112 +0,0 @@ -#-- encoding: UTF-8 -# -# Copyright (c) 2014 Genome Research Ltd. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -module Genotyping::Workflows - - class IdentityQC < Percolate::Workflow - include Genotyping - include Genotyping::Tasks::Metadata - include Genotyping::Tasks::Plink - include Genotyping::Tasks::QualityControl - include Genotyping::Tasks::Simtools # needed for gtc_to_bed - - description <<-DESC -Convert GTC input files to Plink binary format and run the identity QC metric. -Requires a populated pipeline database containing QC plex calls (eg. Sequenom -or Fluidigm) - DESC - - usage <<-USAGE -IdentityQC args - -Arguments: - -- db_file (String): The SQLite pipeline database file. -- run_name (String): The name of a pipeline run defined in the pipeline database. -- work_dir (String): The working directory, an absolute path. -- other arguments (keys and values): - - - ini: of custom pipeline database .ini file. Optional. - - manifest: of the bpm.csv manifest file. Required. - - min_snps: minimum number of SNPs shared between the QC plex and -Plink dataset. Optional. - - min_ident: number between 0 and 1; minimum identity with the QC -plex for a smple to be marked as a pass. Optional. - - memory: number of Mb to request for jobs. - - queue: An LSF queue hint. Optional, defaults to - 'normal'. - -e.g. - - library: genotyping - workflow: Genotyping::Workflows::IdentityQC - arguments: - - /work/my_project/my_analysis.db - - sample_batch_1 - - /work/my_project/pipeline/ - - config: /work/my_project/pipeline/pipedb.ini - queue: small - manifest: /genotyping/manifests/Human670-QuadCustom_v1_A.bpm.csv - -Returns: - -- boolean. - USAGE - - def run(dbfile, run_name, work_dir, args = {}) - - defaults = {} - args = intern_keys(defaults.merge(args)) - args = ensure_valid_args(args, :ini, :queue, :memory, :select, - :manifest, :min_snps, :min_ident, :db_file) - async_defaults = {:memory => 1024} - async = lsf_args(args, async_defaults, :memory, :queue, :select) - - manifest_raw = args.delete(:manifest) - inipath = args.delete(:ini) - dbfile = args.delete(:db_file) - min_snps = args.delete(:min_snps) || 8 - min_ident = args.delete(:min_ident) || 0.9 - args.delete(:memory) - args.delete(:queue) - args.delete(:select) - - work_dir = maybe_work_dir(work_dir) - log_dir = File.join(work_dir, 'log') - Dir.mkdir(log_dir) unless File.exist?(log_dir) - args = {:work_dir => work_dir, - :log_dir => log_dir}.merge(args) - maybe_version_log(log_dir) - - run_name = run_name.to_s; - - gcsjname = run_name + '.gencall.sample.json' - gciname = run_name + '.gencall.imajor.bed' - gcsname = run_name + '.gencall.smajor.bed' - gcsjson = sample_intensities(dbfile, run_name, gcsjname, args) - gcifile, * = gtc_to_bed(gcsjson, manifest_raw, gciname, args, async) - gcsfile = transpose_bed(gcifile, gcsname, args, async) - - id_args = {:ini => inipath, :min_snps => min_snps, - :min_ident => min_ident}.merge(args) - check_identity(dbfile, gcsfile, work_dir, id_args, async) - - end - - end # end class -end # end module diff --git a/src/ruby/genotyping-workflows/test/test_gencall_workflow.rb b/src/ruby/genotyping-workflows/test/test_gencall_workflow.rb new file mode 100644 index 000000000..6ebccf009 --- /dev/null +++ b/src/ruby/genotyping-workflows/test/test_gencall_workflow.rb @@ -0,0 +1,148 @@ +#-- encoding: UTF-8 +# +# Copyright (c) 2017 Genome Research Ltd. All rights reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +devpath = File.expand_path(File.join(File.dirname(__FILE__), '..')) +libpath = File.join(devpath, 'lib') +testpath = File.join(devpath, 'test') + +$:.unshift(libpath) unless $:.include?(libpath) + +require 'rubygems' +require 'test/unit' +require 'fileutils' +require 'json' + +require 'genotyping' +require File.join(testpath, 'test_helper') + +class TestGencallWorkflow < Test::Unit::TestCase + + include TestHelper + include Genotyping + include Genotyping::Tasks + + def initialize(name) + super(name) + @msg_host = Socket.gethostname + @msg_port = 11300 + end + + def test_genotype_gencall + + external_data = ENV['GENOTYPE_TEST_DATA'] + manifest = manifest_path + name = 'test_genotype_gencall' + + run_name = 'run1' + pipe_ini = File.join(data_path, 'genotyping.ini') + vcf = File.join(external_data, 'sequenom_abvc.vcf') + plex_0 = File.join(external_data, 'W30467_snp_set_info_GRCh37.tsv') + plex_1 = File.join(external_data, 'qc_fluidigm_snp_info_GRCh37.tsv') + # plex_1 not needed for workflow, but tests handling multiple plex args + + run_test_if((lambda {manifest} and method(:plinktools_diff_available?)), "Skipping #{name}") do + + work_dir = make_work_dir(name, data_path) + dbfile = File.join(work_dir, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile) + args_hash = {:manifest => manifest, + :plex_manifest => [plex_0, plex_1], + :config => pipe_ini, + :gender_method => 'Supplied', + :memory => 2048, + :queue => 'yesterday', + :vcf => [vcf, ] + } + args = [dbfile, run_name, work_dir, args_hash] + timeout = 1400 + log = 'percolate.log' + result = test_workflow(name, Genotyping::Workflows::GenotypeGencall, + timeout, work_dir, log, args) + assert(result) + + plink_name = run_name+'.gencall.smajor' + stem = File.join(work_dir, plink_name) + master = File.join(external_data, plink_name) + equiv = plink_equivalent?(stem, master, run_name, + {:work_dir => work_dir, + :log_dir => work_dir}) + assert(equiv) + Percolate.log.close + remove_work_dir(work_dir) if (result and equiv) + + end + end + + def test_genotype_gencall_invalid_args + external_data = ENV['GENOTYPE_TEST_DATA'] + manifest = manifest_path + name = 'test_genotype_gencall_invalid_args' + timeout = 1400 + run_name = 'run1' + log = 'percolate.log' + + pipe_ini = File.join(data_path, 'genotyping.ini') + vcf = File.join(external_data, 'sequenom_abvc.vcf') + plex_0 = File.join(external_data, 'W30467_snp_set_info_GRCh37.tsv') + plex_1 = File.join(external_data, 'qc_fluidigm_snp_info_GRCh37.tsv') + # plex_1 not needed for workflow, but tests handling multiple plex args + + run_test_if((lambda { manifest }), "Skipping #{name}") do + + ### invalid arguments: plex manifest without VCF + work_dir1 = make_work_dir(name+'.1', data_path) + dbfile1 = File.join(work_dir1, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile1) + args_hash = {:manifest => manifest, + :plex_manifest => [plex_0, plex_1], + :config => pipe_ini, + :gender_method => 'Supplied', + :memory => 2048, + :queue => 'yesterday', + :vcf => [ ] + } + args = [dbfile1, run_name, work_dir1, args_hash] + result1 = test_workflow(name,Genotyping::Workflows::GenotypeGencall, + timeout, work_dir1, log, args) + assert(result1 == false) + Percolate.log.close + remove_work_dir(work_dir1) if result1 == false + + ### invalid arguments: VCF without plex manifest + work_dir2 = make_work_dir(name+'.2', data_path) + dbfile2 = File.join(work_dir2, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile2) + args_hash = {:manifest => manifest, + :plex_manifest => [ ], + :config => pipe_ini, + :gender_method => 'Supplied', + :memory => 2048, + :queue => 'yesterday', + :vcf => [ vcf, ] + } + args = [dbfile2, run_name, work_dir2, args_hash] + result2 = test_workflow(name,Genotyping::Workflows::GenotypeGencall, + timeout, work_dir2, log, args) + assert(result2 == false) + Percolate.log.close + remove_work_dir(work_dir2) if result2 == false + + end + end + +end diff --git a/src/ruby/genotyping-workflows/test/test_helper.rb b/src/ruby/genotyping-workflows/test/test_helper.rb index 04befce82..dad569410 100644 --- a/src/ruby/genotyping-workflows/test/test_helper.rb +++ b/src/ruby/genotyping-workflows/test/test_helper.rb @@ -34,10 +34,6 @@ def manifest_path end end - def plex_path - File.join(data_path, 'W30467_snp_set_info_1000Genomes.tsv') - end - def egt_path if ENV['GENOTYPE_TEST_DATA'] Dir.glob(ENV['GENOTYPE_TEST_DATA']+"/*.egt").first @@ -85,7 +81,7 @@ def return_available?(value) else true end - end + end def wait_for(name, timeout, interval, &test) result = nil diff --git a/src/ruby/genotyping-workflows/test/test_identity_qc_workflow.rb b/src/ruby/genotyping-workflows/test/test_identity_qc_workflow.rb deleted file mode 100644 index 4f245ddbd..000000000 --- a/src/ruby/genotyping-workflows/test/test_identity_qc_workflow.rb +++ /dev/null @@ -1,73 +0,0 @@ -#-- encoding: UTF-8 -# -# Copyright (c) 2014 Genome Research Ltd. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -devpath = File.expand_path(File.join(File.dirname(__FILE__), '..')) -libpath = File.join(devpath, 'lib') -testpath = File.join(devpath, 'test') - -$:.unshift(libpath) unless $:.include?(libpath) - -require 'rubygems' -require 'test/unit' -require 'fileutils' -require 'json' - -require 'genotyping' -require File.join(testpath, 'test_helper') - -class TestIdentityQC < Test::Unit::TestCase - include TestHelper - include Genotyping - include Genotyping::Tasks - - def initialize(name) - super(name) - @msg_host = Socket.gethostname - @msg_port = 11300 - end - - def test_identity_qc - external_data = ENV['GENOTYPE_TEST_DATA'] - manifest = manifest_path - name = 'test_identity_qc' - - work_dir = make_work_dir(name, data_path) - dbfile = File.join(work_dir, name + '.db') - run_name = 'run1' - pipe_ini = File.join(data_path, 'genotyping.ini') - - FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile) - manifest = File.join(external_data, 'Human670-QuadCustom_v1_A.bpm.csv') - args_hash = {:ini => pipe_ini, - :manifest => manifest, - :memory => 2048, - :db_file => dbfile} - args = [dbfile, run_name, work_dir, args_hash] - timeout = 1400 - log = 'percolate.log' - result = test_workflow(name, Genotyping::Workflows::IdentityQC, - timeout, work_dir, log, args) - assert(result) - - Percolate.log.close - - remove_work_dir(work_dir) if (result) - end - - -end diff --git a/src/ruby/genotyping-workflows/test/test_illuminus_workflow.rb b/src/ruby/genotyping-workflows/test/test_illuminus_workflow.rb index 149daaa55..16dcecd63 100644 --- a/src/ruby/genotyping-workflows/test/test_illuminus_workflow.rb +++ b/src/ruby/genotyping-workflows/test/test_illuminus_workflow.rb @@ -46,29 +46,28 @@ def test_genotype_illuminus manifest = manifest_path name = 'test_genotype_illuminus' + run_name = 'run1' + pipe_ini = File.join(data_path, 'genotyping.ini') + fconfig = File.join(data_path, 'illuminus_test_prefilter.json') + vcf = File.join(external_data, 'sequenom_abvc.vcf') + plex_0 = File.join(external_data, 'W30467_snp_set_info_GRCh37.tsv') + plex_1 = File.join(external_data, 'qc_fluidigm_snp_info_GRCh37.tsv') + # plex_1 not needed for workflow, but tests handling multiple plex args + run_test_if((lambda { illuminus_available? && manifest } and method(:plinktools_diff_available?)), "Skipping #{name}") do + work_dir = make_work_dir(name, data_path) dbfile = File.join(work_dir, name + '.db') - run_name = 'run1' - pipe_ini = File.join(data_path, 'genotyping.ini') - FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile) - fconfig = File.join(data_path, 'illuminus_test_prefilter.json') - vcf = File.join(external_data, 'sequenom_abvc.vcf') - plex_0 = File.join(external_data, 'W30467_snp_set_info_GRCh37.tsv') - plex_1 = File.join(external_data, 'qc_fluidigm_snp_info_GRCh37.tsv') - # plex_1 not needed for workflow, but tests handling multiple plex args - args_hash = {:manifest => manifest, - :plex_manifest => plex_path, + :plex_manifest => [plex_0, plex_1], :config => pipe_ini, :filterconfig => fconfig, :gender_method => 'Supplied', :chunk_size => 10000, :memory => 2048, :queue => 'yesterday', - :vcf => [vcf, ], - :plex_manifest => [plex_0, plex_1] + :vcf => [vcf, ] } args = [dbfile, run_name, work_dir, args_hash] timeout = 1400 @@ -76,7 +75,6 @@ def test_genotype_illuminus result = test_workflow(name, Genotyping::Workflows::GenotypeIlluminus, timeout, work_dir, log, args) assert(result) - plink_name = run_name+'.illuminus' stem = File.join(work_dir, plink_name) master = File.join(external_data, plink_name) @@ -85,10 +83,69 @@ def test_genotype_illuminus :log_dir => work_dir}) assert(equiv) Percolate.log.close - remove_work_dir(work_dir) if (result and equiv) end end + def test_genotype_illuminus_invalid_args + external_data = ENV['GENOTYPE_TEST_DATA'] + manifest = manifest_path + name = 'test_genotype_illuminus_invalid_args' + timeout = 1400 + run_name = 'run1' + log = 'percolate.log' + + pipe_ini = File.join(data_path, 'genotyping.ini') + fconfig = File.join(data_path, 'illuminus_test_prefilter.json') + vcf = File.join(external_data, 'sequenom_abvc.vcf') + plex_0 = File.join(external_data, 'W30467_snp_set_info_GRCh37.tsv') + plex_1 = File.join(external_data, 'qc_fluidigm_snp_info_GRCh37.tsv') + # plex_1 not needed for workflow, but tests handling multiple plex args + + run_test_if((lambda { illuminus_available? && manifest }), "Skipping #{name}") do + + ### invalid arguments: plex manifest without VCF + work_dir1 = make_work_dir(name+'.1', data_path) + dbfile1 = File.join(work_dir1, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile1) + args_hash = {:manifest => manifest, + :plex_manifest => [plex_0, plex_1], + :config => pipe_ini, + :filterconfig => fconfig, + :gender_method => 'Supplied', + :chunk_size => 10000, + :memory => 2048, + :queue => 'yesterday', + :vcf => [ ] + } + args = [dbfile1, run_name, work_dir1, args_hash] + result1 = test_workflow(name,Genotyping::Workflows::GenotypeIlluminus, + timeout, work_dir1, log, args) + assert(result1 == false) + Percolate.log.close + remove_work_dir(work_dir1) if result1 == false + + ### invalid arguments: VCF without plex manifest + work_dir2 = make_work_dir(name+'.2', data_path) + dbfile2 = File.join(work_dir2, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile2) + args_hash = {:manifest => manifest, + :plex_manifest => [ ], + :config => pipe_ini, + :filterconfig => fconfig, + :gender_method => 'Supplied', + :chunk_size => 10000, + :memory => 2048, + :queue => 'yesterday', + :vcf => [ vcf, ] + } + args = [dbfile2, run_name, work_dir2, args_hash] + result2 = test_workflow(name,Genotyping::Workflows::GenotypeIlluminus, + timeout, work_dir2, log, args) + assert(result2 == false) + Percolate.log.close + remove_work_dir(work_dir2) if result2 == false + end + end end diff --git a/src/ruby/genotyping-workflows/test/test_zcall_workflow.rb b/src/ruby/genotyping-workflows/test/test_zcall_workflow.rb index 7d07f653e..6224a9084 100644 --- a/src/ruby/genotyping-workflows/test/test_zcall_workflow.rb +++ b/src/ruby/genotyping-workflows/test/test_zcall_workflow.rb @@ -65,7 +65,6 @@ def test_genotype_zcall # Only 1 zscore in range; faster but omits threshold evaluation # The evaluation is tested by test_zcall_tasks.rb args = [dbfile, run_name, work_dir, {:manifest => manifest, - :plex_manifest => plex_path, :egt => egt, :chunk_size => 3, :zstart => 6, @@ -91,6 +90,65 @@ def test_genotype_zcall Percolate.log.close remove_work_dir(work_dir) if result and equiv end + end + + def test_genotype_zcall_invalid_args + external_data = ENV['GENOTYPE_TEST_DATA'] + manifest = manifest_path + name = 'test_genotype_zcall_invalid_args' + timeout = 1400 + run_name = 'run1' + log = 'percolate.log' + + pipe_ini = File.join(data_path, 'genotyping.ini') + vcf = File.join(external_data, 'sequenom_abvc.vcf') + plex_0 = File.join(external_data, 'W30467_snp_set_info_GRCh37.tsv') + plex_1 = File.join(external_data, 'qc_fluidigm_snp_info_GRCh37.tsv') + # plex_1 not needed for workflow, but tests handling multiple plex args + + run_test_if((lambda { zcall_available? && manifest }), "Skipping #{name}") do + ### invalid arguments: plex manifest without VCF + work_dir1 = make_work_dir(name+'.1', data_path) + dbfile1 = File.join(work_dir1, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile1) + args_hash = {:manifest => manifest, + :plex_manifest => [plex_0, plex_1], + :config => pipe_ini, + :gender_method => 'Supplied', + :chunk_size => 10000, + :memory => 2048, + :queue => 'yesterday', + :vcf => [ ] + } + args = [dbfile1, run_name, work_dir1, args_hash] + result1 = test_workflow(name,Genotyping::Workflows::GenotypeZCall, + timeout, work_dir1, log, args) + assert(result1 == false) + Percolate.log.close + remove_work_dir(work_dir1) if result1 == false + + ### invalid arguments: VCF without plex manifest + work_dir2 = make_work_dir(name+'.2', data_path) + dbfile2 = File.join(work_dir2, name + '.db') + FileUtils.copy(File.join(external_data, 'genotyping.db'), dbfile2) + args_hash = {:manifest => manifest, + :plex_manifest => [ ], + :config => pipe_ini, + :gender_method => 'Supplied', + :chunk_size => 10000, + :memory => 2048, + :queue => 'yesterday', + :vcf => [ vcf, ] + } + args = [dbfile2, run_name, work_dir2, args_hash] + result2 = test_workflow(name,Genotyping::Workflows::GenotypeZCall, + timeout, work_dir2, log, args) + assert(result2 == false) + Percolate.log.close + remove_work_dir(work_dir2) if result2 == false + + end end + end