galaxy-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
May 2010
- 2 participants
- 158 discussions

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/0539d58e383a
changeset: 3800:0539d58e383a
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Fri May 21 14:41:20 2010 -0400
description:
Enable display framework to handle unicode characters in item titles and enable pages to have unicode characters in titles.
diffstat:
lib/galaxy/web/controllers/page.py | 6 +++---
templates/display_common.mako | 20 +++++++++++++-------
2 files changed, 16 insertions(+), 10 deletions(-)
diffs (53 lines):
diff -r e5bbcf6ebf6c -r 0539d58e383a lib/galaxy/web/controllers/page.py
--- a/lib/galaxy/web/controllers/page.py Fri May 21 13:43:50 2010 -0400
+++ b/lib/galaxy/web/controllers/page.py Fri May 21 14:41:20 2010 -0400
@@ -296,8 +296,8 @@
return self.sharing( trans, **kwargs )
session.flush()
- # Build grid
- grid = self._page_list( trans, *args, **kwargs )
+ # Build grid HTML and make sure to encode in utf-8 to support unicode characters.
+ grid = unicode( self._page_list( trans, *args, **kwargs ), 'utf-8' )
# Build list of pages shared with user.
shared_by_others = trans.sa_session \
@@ -313,7 +313,7 @@
@web.expose
def list_published( self, trans, *args, **kwargs ):
- grid = self._all_published_list( trans, *args, **kwargs )
+ grid = unicode( self._all_published_list( trans, *args, **kwargs ), 'utf-8' )
if 'async' in kwargs:
return grid
else:
diff -r e5bbcf6ebf6c -r 0539d58e383a templates/display_common.mako
--- a/templates/display_common.mako Fri May 21 13:43:50 2010 -0400
+++ b/templates/display_common.mako Fri May 21 14:41:20 2010 -0400
@@ -19,13 +19,19 @@
<%def name="get_item_name( item )">
<%
# Start with exceptions, end with default.
- if type( item ) is model.Page:
- return item.title
- elif type( item ) is model.Visualization:
- return item.title
- if hasattr( item, 'get_display_name'):
- return item.get_display_name()
- return item.name
+ if type( item ) is model.Page:
+ item_name = item.title
+ elif type( item ) is model.Visualization:
+ item_name = item.title
+ elif hasattr( item, 'get_display_name'):
+ item_name = item.get_display_name()
+ else:
+ item_name = item.name
+
+ # Encode in unicode.
+ if type( item_name ) is str:
+ item_name = unicode( item_name, 'utf-8' )
+ return item_name
%>
</%def>
1
0

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/e5bbcf6ebf6c
changeset: 3799:e5bbcf6ebf6c
user: fubar: ross Lazarus at gmail period com
date: Fri May 21 13:43:50 2010 -0400
description:
Unreverted js changes from JG - for some strange reason they break the tool upload form here although functional tests seem fine
diffstat:
lib/galaxy/datatypes/interval.py | 50 ++++++++++++++++++++++++++++---------
lib/galaxy/tools/__init__.py | 2 +
tools/rgenetics/rgEigPCA.xml | 3 +-
tools/rgenetics/rgHaploView.xml | 6 ++--
tools/rgenetics/rgtest_one_tool.sh | 7 +++-
5 files changed, 49 insertions(+), 19 deletions(-)
diffs (163 lines):
diff -r 3ad722e3c101 -r e5bbcf6ebf6c lib/galaxy/datatypes/interval.py
--- a/lib/galaxy/datatypes/interval.py Thu May 20 17:00:12 2010 -0400
+++ b/lib/galaxy/datatypes/interval.py Fri May 21 13:43:50 2010 -0400
@@ -140,28 +140,32 @@
else:
empty_line_count += 1
+
def get_estimated_display_viewport( self, dataset ):
"""Return a chrom, start, stop tuple for viewing a file."""
if dataset.has_data() and dataset.state == dataset.states.OK:
try:
c, s, e = dataset.metadata.chromCol, dataset.metadata.startCol, dataset.metadata.endCol
c, s, e = int(c)-1, int(s)-1, int(e)-1
-
+ try:
+ skipme = int(dataset.metadata.comment_lines)
+ except:
+ skipme = 0
peek = []
for idx, line in enumerate(file(dataset.file_name)):
if line[0] != '#':
peek.append( line.rstrip( '\n\r' ).split() )
- if idx > 10:
+ if idx > 100 and idx > skipme: # viewport should have at least 100 features
break
- chr, start, stop = peek[0][c], int( peek[0][s] ), int( peek[0][e] )
+ chr, start, stop = peek[skipme][c], int( peek[skipme][s] ), int( peek[skipme][e] )
- for p in peek[1:]:
+ for p in peek[(skipme+1):]:
if p[0] == chr:
start = min( start, int( p[s] ) )
stop = max( stop, int( p[e] ) )
except Exception, exc:
- #log.error( 'Viewport generation error -> %s ' % str(exc) )
+ log.error( 'Viewport generation error -> %s ' % str(exc) )
(chr, start, stop) = 'chr1', 1, 1000
return (chr, str( start ), str( stop ))
else:
@@ -864,20 +868,42 @@
Tabular.__init__( self, **kwd )
self.add_display_app( 'ucsc', 'display at UCSC', 'as_ucsc_display_file', 'ucsc_links' )
self.add_display_app( 'gbrowse', 'display in Gbrowse', 'as_gbrowse_display_file', 'gbrowse_links' )
+
def get_estimated_display_viewport( self, dataset ):
- value = ( "", "", "" )
num_check_lines = 100 # only check up to this many non empty lines
+ vstart = None
+ vend = 0
+ vwig_chr = '?'
+ value = None
for i, line in enumerate( file( dataset.file_name ) ):
line = line.rstrip( '\r\n' )
- if line and line.startswith( "browser" ):
- chr_info = line.split()[-1]
- wig_chr, coords = chr_info.split( ":" )
- start, end = coords.split( "-" )
- value = ( wig_chr, start, end )
- break
+ if line:
+ if line.startswith( "browser" ):
+ chr_info = line.split()[-1]
+ wig_chr, coords = chr_info.split( ":" )
+ start, end = coords.split( "-" )
+ value = ( wig_chr, start, end )
+ break
+ # variableStep chrom=chr20
+ if line and (line.lower().startswith( "variablestep" ) or line.lower().startswith( "fixedstep" )):
+ c = line.split("chr")[-1]
+ c = c.split()[0]
+ vwig_chr = 'chr%s' % c
+ else:
+ try:
+ offset = line.split()[0]
+ offset = int(offset)
+ vend = max(vend,offset)
+ if not vstart:
+ vstart = offset # first
+ except:
+ pass
if i > num_check_lines:
break
+ if value == None:
+ value = (vwig_chr, vstart, vend)
return value
+
def _get_viewer_range( self, dataset ):
"""Retrieve the chromosome, start, end for an external viewer."""
if dataset.has_data:
diff -r 3ad722e3c101 -r e5bbcf6ebf6c lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py Thu May 20 17:00:12 2010 -0400
+++ b/lib/galaxy/tools/__init__.py Fri May 21 13:43:50 2010 -0400
@@ -563,6 +563,7 @@
attributes = {}
attributes['compare'] = attrib.pop( 'compare', 'diff' ).lower() #method of comparison
attributes['lines_diff'] = int( attrib.pop( 'lines_diff', '0' ) ) # allow a few lines (dates etc) to vary in logs
+ attributes['delta'] = int( attrib.pop( 'delta', '10000' ) ) # allow a file size to vary if sim_size compare
attributes['sort'] = util.string_as_bool( attrib.pop( 'sort', False ) )
attributes['extra_files'] = []
for extra in output_elem.findall( 'extra_files' ):
@@ -573,6 +574,7 @@
assert extra_value is not None, 'extra_files requires a value attribute'
extra_attributes = {}
extra_attributes['compare'] = extra.get( 'compare', 'diff' ).lower() #method of comparison
+ extra_attributes['delta'] = extra.get( 'delta', '0' ) # allow a file size to vary if sim_size compare
extra_attributes['lines_diff'] = int( extra.get( 'lines_diff', '0' ) ) # allow a few lines (dates etc) to vary in logs
extra_attributes['sort'] = util.string_as_bool( extra.get( 'sort', False ) )
attributes['extra_files'].append( ( extra_type, extra_value, extra_name, extra_attributes ) )
diff -r 3ad722e3c101 -r e5bbcf6ebf6c tools/rgenetics/rgEigPCA.xml
--- a/tools/rgenetics/rgEigPCA.xml Thu May 20 17:00:12 2010 -0400
+++ b/tools/rgenetics/rgEigPCA.xml Fri May 21 13:43:50 2010 -0400
@@ -48,8 +48,7 @@
<param name="t" value="2" />
<param name="s" value="2" />
<output name='out_file1' file='rgtestouts/rgEigPCA/rgEigPCAtest1.html' ftype='html' compare='diff' lines_diff='195'>
- <extra_files type="file" name='rgEigPCAtest1_PCAPlot.pdf' value="rgtestouts/rgEigPCA/rgEigPCAtest1_PCAPlot.pdf" compare="diff"
- lines_diff="27"/>
+ <extra_files type="file" name='rgEigPCAtest1_PCAPlot.pdf' value="rgtestouts/rgEigPCA/rgEigPCAtest1_PCAPlot.pdf" compare="sim_size" delta="30000"/>
</output>
<output name='pca' file='rgtestouts/rgEigPCA/rgEigPCAtest1.txt' compare='diff'/>
</test>
diff -r 3ad722e3c101 -r e5bbcf6ebf6c tools/rgenetics/rgHaploView.xml
--- a/tools/rgenetics/rgHaploView.xml Thu May 20 17:00:12 2010 -0400
+++ b/tools/rgenetics/rgHaploView.xml Fri May 21 13:43:50 2010 -0400
@@ -101,9 +101,9 @@
<param name='infoTrack' value='noinfo' />
<param name='hires' value='lo' />
<param name='memsize' value='2048' />
- <output name='out_file1' file='rgtestouts/rgHaploView/rgHaploViewtest1.html' ftype='html' lines_diff="16">
- <extra_files type="file" name='alljoin.pdf' value="rgtestouts/rgHaploView/alljoin.pdf" compare="diff" lines_diff="3625"/>
- <extra_files type="file" name='allnup.pdf' value="rgtestouts/rgHaploView/allnup.pdf" compare="diff" lines_diff="3675" />
+ <output name='out_file1' file='rgtestouts/rgHaploView/rgHaploViewtest1.html' ftype='html' lines_diff="18">
+ <extra_files type="file" name='alljoin.pdf' value="rgtestouts/rgHaploView/alljoin.pdf" compare="sim_size" delta="3000"/>
+ <extra_files type="file" name='allnup.pdf' value="rgtestouts/rgHaploView/allnup.pdf" compare="sim_size" delta="3000" />
<extra_files type="file" name='Log_rgHaploViewtest1.txt' value="rgtestouts/rgHaploView/Log_rgHaploViewtest1.txt" compare="diff" lines_diff="20"/>
<extra_files type="file" name='rgHaploViewtest1.ped.TESTS' value="rgtestouts/rgHaploView/rgHaploViewtest1.ped.TESTS" compare="diff"
lines_diff="20"/>
diff -r 3ad722e3c101 -r e5bbcf6ebf6c tools/rgenetics/rgtest_one_tool.sh
--- a/tools/rgenetics/rgtest_one_tool.sh Thu May 20 17:00:12 2010 -0400
+++ b/tools/rgenetics/rgtest_one_tool.sh Fri May 21 13:43:50 2010 -0400
@@ -6,7 +6,8 @@
*)
esac
GALAXYROOT=`pwd`
-PATHTOGALAXY='/opt/galaxy' # whatever
+#PATHTOGALAXY='/opt/galaxy' # whatever
+PATHTOGALAXY='/share/shared/galaxy' # whatever
echo "using $GALAXYROOT"
# change this as needed for your local install
INPATH="${GALAXYROOT}/test-data"
@@ -56,7 +57,9 @@
echo "now doing $TOOL"
OUTPATH="$OROOT/$TOOL"
rm -rf $OUTPATH/*
-python $TOOLPATH/$TOOL.py -i "$INPATH/tinywga" -o $NPRE -s ${OUTPATH}/${NPRE}.html -p $OUTPATH
+CMD="python $TOOLPATH/$TOOL.py -i $INPATH/tinywga -o $NPRE -s ${OUTPATH}/${NPRE}.html -p $OUTPATH"
+echo "doing $CMD"
+$CMD
# rgQC.py -i '$input_file.extra_files_path/$input_file.metadata.base_name' -o "$out_prefix"
# -s '$html_file' -p '$html_file.files_path'
#
1
0

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/3ad722e3c101
changeset: 3798:3ad722e3c101
user: Nate Coraor <nate(a)bx.psu.edu>
date: Thu May 20 17:00:12 2010 -0400
description:
add multiprocess.sh example script for running multiple galaxy processes. instructions coming later.
diffstat:
contrib/multiproccess.sh | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diffs (30 lines):
diff -r e59720d5c6b8 -r 3ad722e3c101 contrib/multiproccess.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/multiproccess.sh Thu May 20 17:00:12 2010 -0400
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# copy this script to the top level galaxy directory and modify the following
+# for your environment
+
+web_server_names=(web{0..2}) # server names: web0 web1 web2
+runner_server_names=(runner0) # server name: runner0
+
+web_config='universe_wsgi.webapp.ini'
+runner_config='universe_wsgi.runner.ini'
+
+# actually do the requested action
+
+if [ -z "$1" ]; then
+ echo "usage: multiprocess.sh <--daemon|--stop-daemon>"
+ exit 1
+fi
+
+for server_name in ${web_server_names[@]}; do
+ echo "[$server_name]"
+ python ./scripts/paster.py serve $web_config --server-name=$server_name --pid-file=$server_name.pid --log-file=$server_name.log $@
+done
+for server_name in ${runner_server_names[@]}; do
+ echo "[$server_name]"
+ python ./scripts/paster.py serve $runner_config --server-name=$server_name --pid-file=$server_name.pid --log-file=$server_name.log $@
+done
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/e59720d5c6b8
changeset: 3797:e59720d5c6b8
user: rc
date: Thu May 20 15:36:07 2010 -0400
description:
added more options to the sff converter tool
diffstat:
tools/filters/sff_extractor.xml | 27 ++++++++++++++++++++++-----
1 files changed, 22 insertions(+), 5 deletions(-)
diffs (39 lines):
diff -r 218cfbba30ce -r e59720d5c6b8 tools/filters/sff_extractor.xml
--- a/tools/filters/sff_extractor.xml Thu May 20 14:16:08 2010 -0400
+++ b/tools/filters/sff_extractor.xml Thu May 20 15:36:07 2010 -0400
@@ -1,13 +1,30 @@
<tool id="Sff_extractor" name="SFF converter" version="1.0.0">
<description></description>
- <command interpreter="python">sff_extract.py -s $out_file1 -q $out_file2 -x $out_file3 $input</command>
- <inputs>
+ <command interpreter="python">
+ #if str($fastq_output) == "fastq_false" #sff_extract.py $clip --seq_file=$out_file3 --qual_file=$out_file4 --xml_file=$out_file2 $input
+ #elif str($fastq_output) == "fastq_true" #sff_extract.py $clip --fastq --seq_file=$out_file1 --xml_file=$out_file2 $input
+ #end if#
+ </command>
+ <inputs>
<param format="sff" name="input" type="data" label="Extract from this dataset"/>
+ <param name="clip" type="select" label="Completely remove ends with low qual and/or adaptor sequence">
+ <option value="">No</option>
+ <option value="--clip">Yes</option>
+ </param>
+ <param name="fastq_output" type="boolean" truevalue="fastq_true" falsevalue="fastq_false" checked="False" label="Do you want FASTQ file instead of FASTA + FASTA quality file?" />
</inputs>
<outputs>
- <data format="fasta" name="out_file1" />
- <data format="qual" name="out_file2" />
- <data format="xml" name="out_file3" />
+ <data format="fastq" name="out_file1" >
+ <filter>fastq_output is True</filter>
+ </data>
+ <data format="xml" name="out_file2">
+ </data>
+ <data format="fasta" name="out_file3">
+ <filter>fastq_output is False</filter>
+ </data>
+ <data format="qual" name="out_file4">
+ <filter>fastq_output is False</filter>
+ </data>
</outputs>
<help>
**What it does**
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/218cfbba30ce
changeset: 3796:218cfbba30ce
user: fubar: ross Lazarus at gmail period com
date: Thu May 20 14:16:08 2010 -0400
description:
Added ldindep datatype to datatypes sample
Added snpwga tool sections to tool_conf.sample.main - need these
diffstat:
datatypes_conf.xml.sample | 4 ++++
tool_conf.xml.main | 28 ++++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 0 deletions(-)
diffs (57 lines):
diff -r b7cc7a53364c -r 218cfbba30ce datatypes_conf.xml.sample
--- a/datatypes_conf.xml.sample Thu May 20 14:10:39 2010 -0400
+++ b/datatypes_conf.xml.sample Thu May 20 14:16:08 2010 -0400
@@ -206,6 +206,9 @@
<!-- genome graphs ucsc file - first col is always marker then numeric values to plot -->
<datatype extension="gg" type="galaxy.datatypes.genetics:GenomeGraphs"/>
<!-- part of linkage format pedigree -->
+ <!-- information redundancy (LD) filtered plink pbed -->
+ <datatype extension="ldindep" type="galaxy.datatypes.genetics:ldIndep" display_in_upload="true">
+ </datatype>
<datatype extension="malist" type="galaxy.datatypes.genetics:MAlist" display_in_upload="true"/>
<!-- linkage format pedigree (separate .map file) -->
<datatype extension="lped" type="galaxy.datatypes.genetics:Lped" display_in_upload="true">
@@ -215,6 +218,7 @@
<!-- plink compressed file - has bed extension unfortunately -->
<datatype extension="pbed" type="galaxy.datatypes.genetics:Pbed" display_in_upload="true">
<converter file="pbed_to_lped_converter.xml" target_datatype="lped"/>
+ <converter file="pbed_ldreduced_converter.xml" target_datatype="ldindep"/>
</datatype>
<datatype extension="pheno" type="galaxy.datatypes.genetics:Pheno"/>
<!-- phenotype file - plink format -->
diff -r b7cc7a53364c -r 218cfbba30ce tool_conf.xml.main
--- a/tool_conf.xml.main Thu May 20 14:10:39 2010 -0400
+++ b/tool_conf.xml.main Thu May 20 14:16:08 2010 -0400
@@ -328,4 +328,32 @@
<tool file="genetrack/genetrack_indexer.xml" />
<tool file="genetrack/genetrack_peak_prediction.xml" />
</section>
+ <section name="SNP/WGA: Data; Filters" id="rgdat">
+ <label text="Data: Import and upload" id="rgimport" />
+ <tool file="data_source/upload.xml"/>
+ <tool file="data_source/access_libraries.xml" />
+ <tool file="data_source/hapmapmart.xml" />
+ <label text="Data: Filter and Clean" id="rgfilter" />
+ <tool file="rgenetics/rgClean.xml"/>
+ <tool file="rgenetics/rgPedSub.xml"/>
+ <tool file="rgenetics/rgLDIndep.xml"/>
+ <label text="Simulate" id="rgsim" />
+ <tool file="rgenetics/rgfakePhe.xml"/>
+ <tool file="rgenetics/rgfakePed.xml"/>
+ </section>
+ <section name="SNP/WGA: QC; LD; Plots" id="rgqcplot">
+ <label text="QC; Eigenstrat" id="rgvisual" />
+ <tool file="rgenetics/rgQC.xml"/>
+ <tool file="rgenetics/rgEigPCA.xml"/>
+ <label text="LD; Manhattan/QQ; GRR" id="rgld" />
+ <tool file="rgenetics/rgHaploView.xml"/>
+ <tool file="rgenetics/rgManQQ.xml"/>
+ <tool file="rgenetics/rgGRR.xml"/>
+ </section>
+ <section name="SNP/WGA: Statistical Models" id="rgmodel">
+ <tool file="rgenetics/rgCaCo.xml"/>
+ <tool file="rgenetics/rgTDT.xml"/>
+ <tool file="rgenetics/rgGLM.xml"/>
+ <tool file="rgenetics/rgManQQ.xml"/>
+ </section>
</toolbox>
1
0

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/b7cc7a53364c
changeset: 3795:b7cc7a53364c
user: fubar: ross Lazarus at gmail period com
date: Thu May 20 14:10:39 2010 -0400
description:
Once more with even more feeling - welcome.html restored restored
diffstat:
static/welcome.html | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diffs (15 lines):
diff -r d79e9b48a0a3 -r b7cc7a53364c static/welcome.html
--- a/static/welcome.html Thu May 20 14:07:10 2010 -0400
+++ b/static/welcome.html Thu May 20 14:10:39 2010 -0400
@@ -8,9 +8,9 @@
<body>
<div class="document">
<div class="warningmessagelarge">
- <strong>Welcome to the <a href="http://rgenetics.org">Rgenetics</a> development site</strong>
+ <strong>Hello world! It's running...</strong>
<hr>
- This is a volatile and experimental resource - use the <a href="http://usegalaxy.org">main galaxy</a> for real research
+ To customize this page edit <code>static/welcome.html</code>
</div>
<br/>
<img src="images/noodles.png" alt="WWFSMD?" style="display: block; margin-left: auto; margin-right: auto;" />
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/d79e9b48a0a3
changeset: 3794:d79e9b48a0a3
user: fubar: ross Lazarus at gmail period com
date: Thu May 20 14:07:10 2010 -0400
description:
eeesh. hgignore for welcome.html didn't
diffstat:
static/welcome.html | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diffs (15 lines):
diff -r 5469b917d3fb -r d79e9b48a0a3 static/welcome.html
--- a/static/welcome.html Thu May 20 12:41:51 2010 -0400
+++ b/static/welcome.html Thu May 20 14:07:10 2010 -0400
@@ -8,9 +8,9 @@
<body>
<div class="document">
<div class="warningmessagelarge">
- <strong>Hello world! It's running...</strong>
+ <strong>Welcome to the <a href="http://rgenetics.org">Rgenetics</a> development site</strong>
<hr>
- To customize this page edit <code>static/welcome.html</code>
+ This is a volatile and experimental resource - use the <a href="http://usegalaxy.org">main galaxy</a> for real research
</div>
<br/>
<img src="images/noodles.png" alt="WWFSMD?" style="display: block; margin-left: auto; margin-right: auto;" />
1
0

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/5469b917d3fb
changeset: 3793:5469b917d3fb
user: fubar: ross Lazarus at gmail period com
date: Thu May 20 12:41:51 2010 -0400
description:
Removed redundant code from rgEigPCA.py now that it takes a pre-converted ldindep dataset.
diffstat:
tools/rgenetics/rgEigPCA.py | 67 +--------------------------------------------
1 files changed, 1 insertions(+), 66 deletions(-)
diffs (84 lines):
diff -r 2d49a94c8d28 -r 5469b917d3fb tools/rgenetics/rgEigPCA.py
--- a/tools/rgenetics/rgEigPCA.py Thu May 20 12:38:35 2010 -0400
+++ b/tools/rgenetics/rgEigPCA.py Thu May 20 12:41:51 2010 -0400
@@ -195,71 +195,6 @@
print >> sys.stdout, rlog
-def getInfiles(basename=None,infpath=None,outfpath=None,plinke='plink',forcerebuild=False):
- """
- openOrMakeLDreduced(basename,newfpath,plinke='plink',forcerebuild=False)
- ingeno = getLDreduced(infile,plinke)
- gbase,gext = os.path.splitext(ingeno)
- if gext == '.bed':
- inmap = '%s.bim' % gbase
- inped = '%s.fam' % gbase
- elif gext == '.ped':
- inmap = '%s.map' % gbase
- inped = '%s.ped' % gbase
- elif gext == '.tped':
- inmap = '%s.tmap' % gbase
- inped = '%s.tfam' % gbase
- """
- base,kind = getLDreducedFname(basename,infpath=infpath,outfpath=outfpath,plinke=plinke,forcerebuild=forcerebuild)
- assert kind in ['lped','pbed','tped'],'## kind=%s - not lped,pbed,tped' % str(kind)
- if kind=='lped':
- return '%s.ped' % base,'%s.map' % base,'%s.ped' % base
- elif kind=='pbed':
- return '%s.bed' % base,'%s.bim' % base,'%s.fam' % base
- elif kind == 'tped':
- return '%s.tped' % base,'%s.tmap' % base,'%s.tfam' % base
-
-
-def getInfilesOld(infile=None):
- """given a basename, find the best input files
- """
- mapexts = ['.map','.bim','.pedsnp']
- mapexts += [x.upper() for x in mapexts] # ya never know
- genoexts = ['.ped','.bed','.pedsnp']
- genoexts += [x.upper() for x in genoexts]
- indexts = ['.ped','.fam','.pedind']
- indexts += [x.upper() for x in indexts]
- flist = glob.glob('%s*' % infile) # this should list all available rgenetics data files
- exts = set([os.path.splitext(x)[-1] for x in flist]) # expect ['.ped','.map'] etc
- mapext = None
- genoext = None
- indext = None
- for e in mapexts:
- if e in exts:
- mapext = e
- inmap = '%s%s' % (infile,e)
- break
- for e in genoexts:
- if e in exts:
- genoext = e
- ingeno = '%s%s' % (infile,e)
- break
- for e in indexts:
- if e in exts:
- indext = e
- inped = '%s%s' % (infile,e)
- break
- if mapext == None:
- print '### no map (%s) file found - cannot run eigensoft' % ','.join(mapexts)
- sys.exit(1)
- if indext == None:
- print '### no ind (%s) file found - cannot run eigensoft' % ','.join(indexts)
- sys.exit(1)
- if genoext == None:
- print '### no geno (%s) file found - cannot run eigensoft' % ','.join(genoexts)
- sys.exit(1)
- return ingeno,inmap,inped
-
def getfSize(fpath,outpath):
"""
format a nice file size string
@@ -331,7 +266,7 @@
ofname = sys.argv[5]
progname = os.path.basename(sys.argv[0])
infile = sys.argv[1]
- infpath,base_name = os.path.split(infile) # can't leave anything here - readonly on PSU - so leave in outdir instead
+ infpath,base_name = os.path.split(infile) # now takes precomputed or autoconverted ldreduced dataset
title = sys.argv[2].translate(trantab) # must replace all of these for urls containing title
outfile1 = sys.argv[3]
newfilepath = sys.argv[4]
1
0

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/2d49a94c8d28
changeset: 3792:2d49a94c8d28
user: fubar: ross Lazarus at gmail period com
date: Thu May 20 12:38:35 2010 -0400
description:
More tweaks to some snp/wga composite output test comparisons - all png/pdf should be sim_size rather than lines_diff
Updated test outputs for snp/wga tools
Testing a new hgignore so welcome.html should not be overwritten
diffstat:
lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py | 119 +
lib/galaxy/datatypes/converters/pbed_ldreduced_converter.xml | 18 +
lib/galaxy/datatypes/genetics.py | 51 +-
static/welcome.html | 6 +-
test-data/rgtestouts/rgEigPCA/Rplots.pdf | 46 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.R | 2 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.html | 31 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_PCAPlot.pdf | 50 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.pdf | 0
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.ps | 2 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eval.xls | 2 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_log.txt | 6 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls | 80 +-
test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls.par | 6 +-
test-data/rgtestouts/rgGRR/Log_rgGRRtest1.txt | 18 +-
test-data/rgtestouts/rgGRR/rgGRRtest1.html | 37 +-
test-data/rgtestouts/rgGRR/rgGRRtest1.svg | 529 ++-
test-data/rgtestouts/rgGRR/rgGRRtest1_table.xls | 1562 +++++-----
test-data/rgtestouts/rgHaploView/1_rgHaploViewtest1.pdf | 0
test-data/rgtestouts/rgHaploView/1_rgHaploViewtest1.png | 0
test-data/rgtestouts/rgHaploView/2_HapMap_YRI_22.pdf | 0
test-data/rgtestouts/rgHaploView/2_HapMap_YRI_22.png | 0
test-data/rgtestouts/rgHaploView/Chromosome22YRI.LD.PNG | 0
test-data/rgtestouts/rgHaploView/Log_rgHaploViewtest1.txt | 16 +-
test-data/rgtestouts/rgHaploView/alljoin.pdf | 0
test-data/rgtestouts/rgHaploView/allnup.pdf | 0
test-data/rgtestouts/rgHaploView/rgHaploViewtest1.html | 16 +-
test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped.LD.PNG | 0
test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped.TAGS | 18 +-
test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped.TESTS | 14 +-
test-data/rgtestouts/rgQC/FQNormtinywga_s_het_cum.jpg | 0
test-data/rgtestouts/rgQC/FQNormtinywga_s_het_cum.pdf | 182 +-
test-data/rgtestouts/rgQC/Ranked_Subject_Missing_Genotype.xls | 36 +-
test-data/rgtestouts/rgQC/SubjectDetails_rgQCtest1.xls | 72 +-
test-data/rgtestouts/rgQC/ldp_tinywga.bed | 2 +-
test-data/rgtestouts/rgQC/ldp_tinywga.bim | 10 +-
test-data/rgtestouts/rgQC/ldp_tinywga.log | 18 +-
test-data/rgtestouts/rgQC/rgQCtest1.html | 208 +-
test-data/rgtestouts/rgQC/tinywga.het | 80 +-
test-data/rgtestouts/rgQC/tinywga.log | 6 +-
test-data/rgtestouts/rgQC/tinywga.prune.in | 10 +-
test-data/rgtestouts/rgQC/tinywga.prune.out | 10 +-
test-data/rgtestouts/rgQC/tinywga_All_3x3.pdf | 0
test-data/rgtestouts/rgQC/tinywga_All_Paged-0.jpg | 0
test-data/rgtestouts/rgQC/tinywga_All_Paged-1.jpg | 0
test-data/rgtestouts/rgQC/tinywga_All_Paged-2.jpg | 0
test-data/rgtestouts/rgQC/tinywga_All_Paged-3.jpg | 0
test-data/rgtestouts/rgQC/tinywga_All_Paged-4.jpg | 0
test-data/rgtestouts/rgQC/tinywga_All_Paged.pdf | 0
test-data/rgtestouts/rgQC/tinywga_fracmiss.jpg | 0
test-data/rgtestouts/rgQC/tinywga_fracmiss.pdf | 50 +-
test-data/rgtestouts/rgQC/tinywga_fracmiss_cum.jpg | 0
test-data/rgtestouts/rgQC/tinywga_fracmiss_cum.pdf | 52 +-
test-data/rgtestouts/rgQC/tinywga_s_het.jpg | 0
test-data/rgtestouts/rgQC/tinywga_s_het.pdf | 343 +-
test-data/rgtestouts/rgQC/tinywga_s_het_cum.jpg | 0
test-data/rgtestouts/rgQC/tinywga_s_het_cum.pdf | 182 +-
test/functional/test_toolbox.py | 2 +-
tools/rgenetics/rgEigPCA.xml | 2 +-
tools/rgenetics/rgGRR.xml | 2 +-
tools/rgenetics/rgLDIndep.xml | 4 +-
tools/rgenetics/rgQC.xml | 10 +-
tools/rgenetics/rgutils.py | 81 -
63 files changed, 2104 insertions(+), 1887 deletions(-)
diffs (truncated from 5382 to 3000 lines):
diff -r 7f95e51e06f7 -r 2d49a94c8d28 lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/converters/pbed_ldreduced_converter.py Thu May 20 12:38:35 2010 -0400
@@ -0,0 +1,119 @@
+# converter for ldreduced rgenetics datatype
+# used for grr and eigenstrat - shellfish if we get around to it
+#
+
+import os,sys,tempfile,subprocess,time
+
+from galaxy import eggs
+
+prog="pbed_ldreduced_converter.py"
+
+galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
+<title></title>
+<link rel="stylesheet" href="/static/style/base.css" type="text/css" />
+</head>
+<body>
+<div class="document">
+"""
+
+plinke = 'plink'
+
+
+def timenow():
+ """return current time as a string
+ """
+ return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
+
+
+def pruneLD(plinktasks=[],cd='./',vclbase = []):
+ """
+ """
+ fplog,plog = tempfile.mkstemp()
+ alog = []
+ alog.append('## Rgenetics: http://rgenetics.org Galaxy Tools rgQC.py Plink pruneLD runner\n')
+ for task in plinktasks: # each is a list
+ vcl = vclbase + task
+ sto = file(plog,'w')
+ x = subprocess.Popen(' '.join(vcl),shell=True,stdout=sto,stderr=sto,cwd=cd)
+ retval = x.wait()
+ sto.close()
+ try:
+ lplog = file(plog,'r').readlines()
+ lplog = [x for x in lplog if x.find('Pruning SNP') == -1]
+ alog += lplog
+ alog.append('\n')
+ os.unlink(plog) # no longer needed
+ except:
+ alog.append('### %s Strange - no std out from plink when running command line\n%s\n' % (timenow(),' '.join(vcl)))
+ return alog
+
+
+def makeLDreduced(basename,infpath=None,outfpath=None,plinke='plink',forcerebuild=False,returnFname=False,
+ winsize="60", winmove="40", r2thresh="0.1" ):
+ """ not there so make and leave in output dir for post job hook to copy back into input extra files path for next time
+ """
+ ldr = basename # we store ld reduced and thinned data
+ ldreduced = os.path.join(outfpath,ldr) # note where this is going
+ outbase = os.path.join(outfpath,basename)
+ inbase = os.path.join(infpath)
+ loglines = []
+ ldbedname = '%s.bed' % ldreduced
+ bedname = '%s.bed' % basename
+ ldbedfn = os.path.join(infpath,ldbedname)
+ bedfn = os.path.join(infpath,bedname)
+ bmap = os.path.join(infpath,'%s.bim' % basename)
+ plinktasks = []
+ vclbase = [plinke,'--noweb']
+ plinktasks += [['--bfile',inbase,'--indep-pairwise %s %s %s' % (winsize,winmove,r2thresh),'--out %s' % outbase],
+ ['--bfile',inbase,'--extract %s.prune.in --make-bed --out %s' % (outbase, outbase)]]
+ vclbase = [plinke,'--noweb']
+ loglines = pruneLD(plinktasks=plinktasks,cd=outfpath,vclbase = vclbase)
+
+def main():
+ """
+ need to work with rgenetics composite datatypes
+ so in and out are html files with data in extrafiles path
+ <command interpreter="python">
+ pbed_ldreduced_converter.py '$input1.extra_files_path/$input1.metadata.base_name' '$winsize' '$winmove' '$r2thresh'
+ '$output1' '$output1.files_path' 'plink'
+ </command>
+ """
+ nparm = 7
+ if len(sys.argv) < nparm:
+ sys.stderr.write('## %s called with %s - needs %d parameters \n' % (prog,sys.argv,nparm))
+ sys.exit(1)
+ inpedfilepath = sys.argv[1]
+ base_name = os.path.split(inpedfilepath)[-1]
+ winsize = sys.argv[2]
+ winmove = sys.argv[3]
+ r2thresh = sys.argv[4]
+ outhtmlname = sys.argv[5]
+ outfilepath = sys.argv[6]
+ try:
+ os.makedirs(outfilepath)
+ except:
+ pass
+ plink = sys.argv[7]
+ makeLDreduced(base_name,infpath=inpedfilepath,outfpath=outfilepath,plinke=plink,forcerebuild=False,returnFname=False,
+ winsize=winsize,winmove=winmove,r2thresh=r2thresh)
+ f = file(outhtmlname,'w')
+ f.write(galhtmlprefix % prog)
+ flist = os.listdir(outfilepath)
+ s1 = '## Rgenetics: http://rgenetics.org Galaxy Tools %s %s' % (prog,timenow()) # becomes info
+ s2 = 'Input %s, winsize=%s, winmove=%s, r2thresh=%s' % (base_name,winsize,winmove,r2thresh)
+ print '%s %s' % (s1,s2)
+ f.write('<div>%s\n%s\n<ol>' % (s1,s2))
+ for i, data in enumerate( flist ):
+ f.write('<li><a href="%s">%s</a></li>\n' % (os.path.split(data)[-1],os.path.split(data)[-1]))
+ f.write("</div></body></html>")
+ f.close()
+
+
+if __name__ == "__main__":
+ main()
+
diff -r 7f95e51e06f7 -r 2d49a94c8d28 lib/galaxy/datatypes/converters/pbed_ldreduced_converter.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/datatypes/converters/pbed_ldreduced_converter.xml Thu May 20 12:38:35 2010 -0400
@@ -0,0 +1,18 @@
+<tool id="pbed2ldindepconvert" name="Convert plink pbed to ld reduced format" version="0.01">
+ <!-- <description>__NOT_USED_CURRENTLY_FOR_CONVERTERS__</description> -->
+ <!-- Used on the metadata edit page. -->
+ <command interpreter="python">
+ pbed_ldreduced_converter.py '$input1.extra_files_path/$input1.metadata.base_name' '60' '55' '0.1' '$output1' '$output1.files_path' 'plink'
+ </command>
+ <inputs>
+ <page>
+ <param format="pbed" name="input1" type="data" label="Choose a compressed Plink binary format genotype file"/>
+ </page>
+ </inputs>
+ <outputs>
+ <data format="ldindep" name="output1" metadata_source="input1"/>
+ </outputs>
+ <help>
+ </help>
+</tool>
+
diff -r 7f95e51e06f7 -r 2d49a94c8d28 lib/galaxy/datatypes/genetics.py
--- a/lib/galaxy/datatypes/genetics.py Wed May 19 10:28:41 2010 -0400
+++ b/lib/galaxy/datatypes/genetics.py Thu May 20 12:38:35 2010 -0400
@@ -349,18 +349,6 @@
return True
-class ldIndep(Rgenetics):
- """
- LD (a good measure of redundancy of information) depleted Plink Binary compressed 2bit/geno
- """
- file_ext="ldreduced"
-
- def __init__( self, **kwd ):
- Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s_INDEP.bim', substitute_name_with_metadata = 'base_name', is_binary = True )
- self.add_composite_file( '%s_INDEP.bed', substitute_name_with_metadata = 'base_name', is_binary = True )
- self.add_composite_file( '%s_INDEP.fam', substitute_name_with_metadata = 'base_name', is_binary = True )
-
class SNPMatrix(Rgenetics):
"""
@@ -396,8 +384,8 @@
def __init__( self, **kwd ):
Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s.ped', description = 'Pedigree File', substitute_name_with_metadata = 'base_name', is_binary = True )
- self.add_composite_file( '%s.map', description = 'Map File', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s.ped', description = 'Pedigree File', substitute_name_with_metadata = 'base_name', is_binary = False )
+ self.add_composite_file( '%s.map', description = 'Map File', substitute_name_with_metadata = 'base_name', is_binary = False )
class Pphe(Rgenetics):
@@ -408,7 +396,7 @@
def __init__( self, **kwd ):
Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s.pphe', description = 'Plink Phenotype File', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s.pphe', description = 'Plink Phenotype File', substitute_name_with_metadata = 'base_name', is_binary = False )
@@ -432,7 +420,8 @@
def __init__( self, **kwd ):
Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s.phe', description = 'Phenotype File', substitute_name_with_metadata = 'base_name' )
+ self.add_composite_file( '%s.phe', description = 'Phenotype File', substitute_name_with_metadata = 'base_name',
+ is_binary = False )
@@ -445,7 +434,8 @@
def __init__( self, **kwd ):
Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s.fped', description = 'FBAT format pedfile', substitute_name_with_metadata = 'base_name' )
+ self.add_composite_file( '%s.fped', description = 'FBAT format pedfile', substitute_name_with_metadata = 'base_name',
+ is_binary = False )
class Pbed(Rgenetics):
@@ -456,9 +446,24 @@
def __init__( self, **kwd ):
Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s.bim', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s.bim', substitute_name_with_metadata = 'base_name', is_binary = False )
self.add_composite_file( '%s.bed', substitute_name_with_metadata = 'base_name', is_binary = True )
- self.add_composite_file( '%s.fam', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s.fam', substitute_name_with_metadata = 'base_name', is_binary = False )
+
+class ldIndep(Rgenetics):
+ """
+ LD (a good measure of redundancy of information) depleted Plink Binary compressed 2bit/geno
+ This is really a plink binary, but some tools work better with less redundancy so are constrained to
+ these files
+ """
+ file_ext="ldreduced"
+
+ def __init__( self, **kwd ):
+ Rgenetics.__init__(self, **kwd)
+ self.add_composite_file( '%s.bim', substitute_name_with_metadata = 'base_name', is_binary = False )
+ self.add_composite_file( '%s.bed', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s.fam', substitute_name_with_metadata = 'base_name', is_binary = False )
+
class Eigenstratgeno(Rgenetics):
"""
@@ -470,9 +475,9 @@
def __init__( self, **kwd ):
Rgenetics.__init__(self, **kwd)
- self.add_composite_file( '%s.eigenstratgeno', substitute_name_with_metadata = 'base_name', is_binary = True )
- self.add_composite_file( '%s.ind', substitute_name_with_metadata = 'base_name', is_binary = True )
- self.add_composite_file( '%s.map', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s.eigenstratgeno', substitute_name_with_metadata = 'base_name', is_binary = False )
+ self.add_composite_file( '%s.ind', substitute_name_with_metadata = 'base_name', is_binary = False )
+ self.add_composite_file( '%s.map', substitute_name_with_metadata = 'base_name', is_binary = False )
@@ -524,7 +529,7 @@
def __init__( self, **kwd ):
Html.__init__(self,**kwd)
self.add_composite_file( '%s.pheno', description = 'Phenodata tab text file',
- substitute_name_with_metadata = 'base_name', is_binary=True)
+ substitute_name_with_metadata = 'base_name', is_binary=False)
def generate_primary_file( self, dataset = None ):
"""
diff -r 7f95e51e06f7 -r 2d49a94c8d28 static/welcome.html
--- a/static/welcome.html Wed May 19 10:28:41 2010 -0400
+++ b/static/welcome.html Thu May 20 12:38:35 2010 -0400
@@ -8,12 +8,12 @@
<body>
<div class="document">
<div class="warningmessagelarge">
- <strong>Welcome to the <a href="http://rgenetics.org">Rgenetics</a> development site</strong>
+ <strong>Hello world! It's running...</strong>
<hr>
- This is a volatile and experimental resource - use the <a href="http://usegalaxy.org">main galaxy</a> for real research
+ To customize this page edit <code>static/welcome.html</code>
</div>
<br/>
- <img src="images/Armitagep_manhattan.png" alt="One click manhattan plot anyone?" style="display: block; margin-left: auto; margin-right: auto;" />
+ <img src="images/noodles.png" alt="WWFSMD?" style="display: block; margin-left: auto; margin-right: auto;" />
<hr/>
This project is supported in part by <a target="_blank" class="reference" href="http://www.nsf.gov">NSF</a>, <a target="_blank" class="reference" href="http://www.genome.gov">NHGRI</a>, and <a target="_blank" class="reference" href="http://www.huck.psu.edu">the Huck Institutes of the Life Sciences</a>.
</div>
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/Rplots.pdf
--- a/test-data/rgtestouts/rgEigPCA/Rplots.pdf Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/Rplots.pdf Thu May 20 12:38:35 2010 -0400
@@ -2,8 +2,8 @@
%âãÏÓ\r
1 0 obj
<<
-/CreationDate (D:20100509212343)
-/ModDate (D:20100509212343)
+/CreationDate (D:20100519151448)
+/ModDate (D:20100519151448)
/Title (R Graphics Output)
/Producer (R 2.10.1)
/Creator (R)
@@ -34,42 +34,10 @@
5 0 obj
<<
/Type /Encoding
-/BaseEncoding /PDFDocEncoding
-/Differences [
- 0/.notdef 1/.notdef 2/.notdef 3/.notdef 4/.notdef 5/.notdef 6/.notdef 7/.notdef
- 8/.notdef 9/.notdef 10/.notdef 11/.notdef 12/.notdef 13/.notdef 14/.notdef 15/.notdef
- 16/.notdef 17/.notdef 18/.notdef 19/.notdef 20/.notdef 21/.notdef 22/.notdef 23/.notdef
- 24/.notdef 25/.notdef 26/.notdef 27/.notdef 28/.notdef 29/.notdef 30/.notdef 31/.notdef
- 32/space 33/exclam 34/quotedbl 35/numbersign 36/dollar 37/percent 38/ampersand 39/quoteright
- 40/parenleft 41/parenright 42/asterisk 43/plus 44/comma 45/minus 46/period 47/slash
- 48/zero 49/one 50/two 51/three 52/four 53/five 54/six 55/seven
- 56/eight 57/nine 58/colon 59/semicolon 60/less 61/equal 62/greater 63/question
- 64/at 65/A 66/B 67/C 68/D 69/E 70/F 71/G
- 72/H 73/I 74/J 75/K 76/L 77/M 78/N 79/O
- 80/P 81/Q 82/R 83/S 84/T 85/U 86/V 87/W
- 88/X 89/Y 90/Z 91/bracketleft 92/backslash 93/bracketright 94/asciicircum 95/underscore
- 96/quoteleft 97/a 98/b 99/c 100/d 101/e 102/f 103/g
- 104/h 105/i 106/j 107/k 108/l 109/m 110/n 111/o
- 112/p 113/q 114/r 115/s 116/t 117/u 118/v 119/w
- 120/x 121/y 122/z 123/braceleft 124/bar 125/braceright 126/asciitilde 127/.notdef
- 128/.notdef 129/.notdef 130/.notdef 131/.notdef 132/.notdef 133/.notdef 134/.notdef 135/.notdef
- 136/.notdef 137/.notdef 138/.notdef 139/.notdef 140/.notdef 141/.notdef 142/.notdef 143/.notdef
- 144/dotlessi 145/grave 146/acute 147/circumflex 148/tilde 149/macron 150/breve 151/dotaccent
- 152/dieresis 153/.notdef 154/ring 155/cedilla 156/.notdef 157/hungarumlaut 158/ogonek 159/caron
- 160/space 161/exclamdown 162/cent 163/sterling 164/Euro 165/yen 166/Scaron 167/section
- 168/scaron 169/copyright 170/ordfeminine 171/guillemotleft 172/logicalnot 173/hyphen 174/registered 175/macron
- 176/degree 177/plusminus 178/twosuperior 179/threesuperior 180/Zcaron 181/mu 182/paragraph 183/periodcentered
- 184/zcaron 185/onesuperior 186/ordmasculine 187/guillemotright 188/OE 189/oe 190/Ydieresis 191/questiondown
- 192/Agrave 193/Aacute 194/Acircumflex 195/Atilde 196/Adieresis 197/Aring 198/AE 199/Ccedilla
- 200/Egrave 201/Eacute 202/Ecircumflex 203/Edieresis 204/Igrave 205/Iacute 206/Icircumflex 207/Idieresis
- 208/Eth 209/Ntilde 210/Ograve 211/Oacute 212/Ocircumflex 213/Otilde 214/Odieresis 215/multiply
- 216/Oslash 217/Ugrave 218/Uacute 219/Ucircumflex 220/Udieresis 221/Yacute 222/Thorn 223/germandbls
- 224/agrave 225/aacute 226/acircumflex 227/atilde 228/adieresis 229/aring 230/ae 231/ccedilla
- 232/egrave 233/eacute 234/ecircumflex 235/edieresis 236/igrave 237/iacute 238/icircumflex 239/idieresis
- 240/eth 241/ntilde 242/ograve 243/oacute 244/ocircumflex 245/otilde 246/odieresis 247/divide
- 248/oslash 249/ugrave 250/uacute 251/ucircumflex 252/udieresis 253/yacute 254/thorn 255/ydieresis
-
-]
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus 96/quoteleft
+144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space]
>>
endobj
xref
@@ -87,5 +55,5 @@
/Root 2 0 R
>>
startxref
-3154
+618
%%EOF
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.R
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.R Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.R Thu May 20 12:38:35 2010 -0400
@@ -16,4 +16,4 @@
legend("top",legend=llist,pch=glist,col=glist,title="Sample")
grid(nx = 10, ny = 10, col = "lightgray", lty = "dotted")
dev.off()
-#R script autogenerated by rgenetics/rgutils.py on 09/05/2010 21:23:43
+#R script autogenerated by rgenetics/rgutils.py on 19/05/2010 15:14:48
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.html
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.html Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1.html Thu May 20 12:38:35 2010 -0400
@@ -9,27 +9,30 @@
</head>
<body>
<div class="document">
-<h4>Output from rgEigPCA.py run at 09/05/2010 21:23:43<br/>
+<h4>Output from rgEigPCA.py run at 19/05/2010 15:14:48<br/>
</h4>
-newfilepath=/share/shared/galaxy/test-data/rgtestouts/rgEigPCA, rexe=R(click on the image below to see a much higher quality PDF version)<table border="0" cellpadding="10" cellspacing="10"><tr><td>
+newfilepath=/opt/galaxy/test-data/rgtestouts/rgEigPCA, rexe=R(click on the image below to see a much higher quality PDF version)<table border="0" cellpadding="10" cellspacing="10"><tr><td>
<a href="rgEigPCAtest1_PCAPlot.pdf"><img src="rgEigPCAtest1_PCAPlot.pdf.png" alt="Samples plotted in first 2 eigenvector space" hspace="10" align="left" /></a></td></tr></table><br/>
-<div class="document">All Files:<ol><li><a href="rgEigPCAtest1.html">rgEigPCAtest1.html </a></li>
-<li><a href="rgEigPCAtest1_pca.xls.par">rgEigPCAtest1_pca.xls.par (338 B)</a></li>
+<div class="document">All Files:<ol><li><a href="Rplots.pdf">Rplots.pdf (813 B)</a></li>
+<li><a href="rgEigPCAtest1.R">rgEigPCAtest1.R (1.6 KB)</a></li>
+<li><a href="rgEigPCAtest1.html">rgEigPCAtest1.html </a></li>
<li><a href="rgEigPCAtest1.txt">rgEigPCAtest1.txt (3.3 KB)</a></li>
-<li><a href="rgEigPCAtest1_log.txt">rgEigPCAtest1_log.txt (6.1 KB)</a></li>
-<li><a href="rgEigPCAtest1_PCAPlot.pdf">rgEigPCAtest1_PCAPlot.pdf (10.4 KB)</a></li>
+<li><a href="rgEigPCAtest1_PCAPlot.pdf">rgEigPCAtest1_PCAPlot.pdf (7.9 KB)</a></li>
+<li><a href="rgEigPCAtest1_PCAPlot.pdf.png">rgEigPCAtest1_PCAPlot.pdf.png (27.1 KB)</a></li>
+<li><a href="rgEigPCAtest1_eigensoftplot.pdf.pdf">rgEigPCAtest1_eigensoftplot.pdf.pdf (2.1 KB)</a></li>
+<li><a href="rgEigPCAtest1_eigensoftplot.pdf.ps">rgEigPCAtest1_eigensoftplot.pdf.ps (13.6 KB)</a></li>
+<li><a href="rgEigPCAtest1_eigensoftplot.pdf.xtxt">rgEigPCAtest1_eigensoftplot.pdf.xtxt (257 B)</a></li>
<li><a href="rgEigPCAtest1_eval.xls">rgEigPCAtest1_eval.xls (507 B)</a></li>
-<li><a href="rgEigPCAtest1_pca.xls">rgEigPCAtest1_pca.xls (1.2 KB)</a></li>
-<li><a href="rgEigPCAtest1.R">rgEigPCAtest1.R (1.6 KB)</a></li>
-<li><a href="Rplots.pdf">Rplots.pdf (3.3 KB)</a></li>
+<li><a href="rgEigPCAtest1_log.txt">rgEigPCAtest1_log.txt (6.0 KB)</a></li>
+<li><a href="rgEigPCAtest1_pca.xls">rgEigPCAtest1_pca.xls (1.3 KB)</a></li>
<li><a href="rgEigPCAtest1_pca.xls.evec">rgEigPCAtest1_pca.xls.evec (3.3 KB)</a></li>
-<li><a href="rgEigPCAtest1_PCAPlot.pdf.png">rgEigPCAtest1_PCAPlot.pdf.png (27.1 KB)</a></li>
+<li><a href="rgEigPCAtest1_pca.xls.par">rgEigPCAtest1_pca.xls.par (311 B)</a></li>
</ol></div><div class="document">Log rgEigPCAtest1_log.txt contents follow below<p/><pre>parameter file: rgEigPCAtest1_pca.xls.par
### THE INPUT PARAMETERS
##PARAMETER NAME: VALUE
-genotypename: /share/shared/galaxy/test-data/tinywga.ped
-snpname: /share/shared/galaxy/test-data/tinywga.map
-indivname: /share/shared/galaxy/test-data/tinywga.ped
+genotypename: /opt/galaxy/test-data/tinywga.bed
+snpname: /opt/galaxy/test-data/tinywga.bim
+indivname: /opt/galaxy/test-data/tinywga.fam
evecoutname: rgEigPCAtest1_pca.xls.evec
evaloutname: rgEigPCAtest1_eval.xls
altnormstyle: NO
@@ -153,5 +156,5 @@
Correlation between eigenvector 3 (of 4) and Case/Control status is 0.193
Correlation between eigenvector 4 (of 4) and Case/Control status is -0.069
</pre></div>If you need to rerun this analysis, the command line used was
-smartpca.perl -i /share/shared/galaxy/test-data/tinywga.ped -a /share/shared/galaxy/test-data/tinywga.map -b /share/shared/galaxy/test-data/tinywga.ped -o rgEigPCAtest1_pca.xls -p rgEigPCAtest1_eigensoftplot.pdf -e rgEigPCAtest1_eval.xls -l rgEigPCAtest1_log.txt -k 4 -m 2 -t 2 -s 2
+smartpca.perl -i /opt/galaxy/test-data/tinywga.bed -a /opt/galaxy/test-data/tinywga.bim -b /opt/galaxy/test-data/tinywga.fam -o rgEigPCAtest1_pca.xls -p rgEigPCAtest1_eigensoftplot.pdf -e rgEigPCAtest1_eval.xls -l rgEigPCAtest1_log.txt -k 4 -m 2 -t 2 -s 2
<p/></div></body></html>
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_PCAPlot.pdf
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_PCAPlot.pdf Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_PCAPlot.pdf Thu May 20 12:38:35 2010 -0400
@@ -2,8 +2,8 @@
%âãÏÓ\r
1 0 obj
<<
-/CreationDate (D:20100509212343)
-/ModDate (D:20100509212343)
+/CreationDate (D:20100519151448)
+/ModDate (D:20100519151448)
/Title (R Graphics Output)
/Producer (R 2.10.1)
/Creator (R)
@@ -410,42 +410,10 @@
8 0 obj
<<
/Type /Encoding
-/BaseEncoding /PDFDocEncoding
-/Differences [
- 0/.notdef 1/.notdef 2/.notdef 3/.notdef 4/.notdef 5/.notdef 6/.notdef 7/.notdef
- 8/.notdef 9/.notdef 10/.notdef 11/.notdef 12/.notdef 13/.notdef 14/.notdef 15/.notdef
- 16/.notdef 17/.notdef 18/.notdef 19/.notdef 20/.notdef 21/.notdef 22/.notdef 23/.notdef
- 24/.notdef 25/.notdef 26/.notdef 27/.notdef 28/.notdef 29/.notdef 30/.notdef 31/.notdef
- 32/space 33/exclam 34/quotedbl 35/numbersign 36/dollar 37/percent 38/ampersand 39/quoteright
- 40/parenleft 41/parenright 42/asterisk 43/plus 44/comma 45/minus 46/period 47/slash
- 48/zero 49/one 50/two 51/three 52/four 53/five 54/six 55/seven
- 56/eight 57/nine 58/colon 59/semicolon 60/less 61/equal 62/greater 63/question
- 64/at 65/A 66/B 67/C 68/D 69/E 70/F 71/G
- 72/H 73/I 74/J 75/K 76/L 77/M 78/N 79/O
- 80/P 81/Q 82/R 83/S 84/T 85/U 86/V 87/W
- 88/X 89/Y 90/Z 91/bracketleft 92/backslash 93/bracketright 94/asciicircum 95/underscore
- 96/quoteleft 97/a 98/b 99/c 100/d 101/e 102/f 103/g
- 104/h 105/i 106/j 107/k 108/l 109/m 110/n 111/o
- 112/p 113/q 114/r 115/s 116/t 117/u 118/v 119/w
- 120/x 121/y 122/z 123/braceleft 124/bar 125/braceright 126/asciitilde 127/.notdef
- 128/.notdef 129/.notdef 130/.notdef 131/.notdef 132/.notdef 133/.notdef 134/.notdef 135/.notdef
- 136/.notdef 137/.notdef 138/.notdef 139/.notdef 140/.notdef 141/.notdef 142/.notdef 143/.notdef
- 144/dotlessi 145/grave 146/acute 147/circumflex 148/tilde 149/macron 150/breve 151/dotaccent
- 152/dieresis 153/.notdef 154/ring 155/cedilla 156/.notdef 157/hungarumlaut 158/ogonek 159/caron
- 160/space 161/exclamdown 162/cent 163/sterling 164/Euro 165/yen 166/Scaron 167/section
- 168/scaron 169/copyright 170/ordfeminine 171/guillemotleft 172/logicalnot 173/hyphen 174/registered 175/macron
- 176/degree 177/plusminus 178/twosuperior 179/threesuperior 180/Zcaron 181/mu 182/paragraph 183/periodcentered
- 184/zcaron 185/onesuperior 186/ordmasculine 187/guillemotright 188/OE 189/oe 190/Ydieresis 191/questiondown
- 192/Agrave 193/Aacute 194/Acircumflex 195/Atilde 196/Adieresis 197/Aring 198/AE 199/Ccedilla
- 200/Egrave 201/Eacute 202/Ecircumflex 203/Edieresis 204/Igrave 205/Iacute 206/Icircumflex 207/Idieresis
- 208/Eth 209/Ntilde 210/Ograve 211/Oacute 212/Ocircumflex 213/Otilde 214/Odieresis 215/multiply
- 216/Oslash 217/Ugrave 218/Uacute 219/Ucircumflex 220/Udieresis 221/Yacute 222/Thorn 223/germandbls
- 224/agrave 225/aacute 226/acircumflex 227/atilde 228/adieresis 229/aring 230/ae 231/ccedilla
- 232/egrave 233/eacute 234/ecircumflex 235/edieresis 236/igrave 237/iacute 238/icircumflex 239/idieresis
- 240/eth 241/ntilde 242/ograve 243/oacute 244/ocircumflex 245/otilde 246/odieresis 247/divide
- 248/oslash 249/ugrave 250/uacute 251/ucircumflex 252/udieresis 253/yacute 254/thorn 255/ydieresis
-
-]
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 45/minus 96/quoteleft
+144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space]
>>
endobj
9 0 obj <<
@@ -473,8 +441,8 @@
0000000293 00000 n
0000007168 00000 n
0000007363 00000 n
-0000010156 00000 n
-0000010252 00000 n
+0000007620 00000 n
+0000007716 00000 n
trailer
<<
/Size 11
@@ -482,5 +450,5 @@
/Root 2 0 R
>>
startxref
-10354
+7818
%%EOF
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.pdf
Binary file test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.pdf has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.ps
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.ps Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eigensoftplot.pdf.ps Thu May 20 12:38:35 2010 -0400
@@ -1,6 +1,6 @@
%!PS-Adobe-2.0
%%Creator: gnuplot 4.0 patchlevel 0
-%%CreationDate: Thu Mar 25 21:01:24 2010
+%%CreationDate: Wed May 19 15:14:48 2010
%%DocumentFonts: (atend)
%%BoundingBox: 50 50 554 770
%%Orientation: Landscape
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eval.xls
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eval.xls Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_eval.xls Thu May 20 12:38:35 2010 -0400
@@ -24,6 +24,7 @@
0.000000
0.000000
0.000000
+ 0.000000
-0.000000
-0.000000
-0.000000
@@ -36,4 +37,3 @@
-0.000000
-0.000000
-0.000000
- -0.000000
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_log.txt
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_log.txt Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_log.txt Thu May 20 12:38:35 2010 -0400
@@ -1,9 +1,9 @@
parameter file: rgEigPCAtest1_pca.xls.par
### THE INPUT PARAMETERS
##PARAMETER NAME: VALUE
-genotypename: /share/shared/galaxy/test-data/tinywga.ped
-snpname: /share/shared/galaxy/test-data/tinywga.map
-indivname: /share/shared/galaxy/test-data/tinywga.ped
+genotypename: /opt/galaxy/test-data/tinywga.bed
+snpname: /opt/galaxy/test-data/tinywga.bim
+indivname: /opt/galaxy/test-data/tinywga.fam
evecoutname: rgEigPCAtest1_pca.xls.evec
evaloutname: rgEigPCAtest1_eval.xls
altnormstyle: NO
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls Thu May 20 12:38:35 2010 -0400
@@ -3,43 +3,43 @@
7.7400
7.2550
4.2710
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
- 0.0000 0.0000 0.0000 0.0000
+ 0.3015 0.2159 0.0173 0.3393
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.0268 -0.0008 0.3404 -0.0369
+ 0.3015 0.2159 0.0173 0.3393
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.0268 -0.0008 0.3404 -0.0369
+ 0.3015 0.2159 0.0173 0.3393
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.0268 -0.0008 0.3404 -0.0369
+ 0.3015 0.2159 0.0173 0.3393
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.0268 -0.0008 0.3404 -0.0369
+ 0.3015 0.2159 0.0173 0.3393
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.0268 -0.0008 0.3404 -0.0369
+ 0.3015 0.2159 0.0173 0.3393
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.0268 -0.0008 0.3404 -0.0369
+ 0.3015 0.2159 0.0173 0.3393
+ -0.1608 -0.0349 0.0222 0.1244
+ -0.1027 0.2939 -0.1091 -0.1832
+ 0.2593 -0.1916 -0.2862 -0.1609
+ 0.0302 0.2348 0.0136 0.1216
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.3015 0.2159 0.0173 0.3393
+ -0.1608 -0.0349 0.0222 0.1244
+ -0.1027 0.2939 -0.1091 -0.1832
+ 0.2593 -0.1916 -0.2862 -0.1609
+ -0.2453 -0.0165 -0.0856 0.0221
+ -0.2493 -0.2867 -0.1811 0.1404
+ 0.3015 0.2159 0.0173 0.3393
+ -0.1027 0.2939 -0.1091 -0.1832
+ 0.2593 -0.1916 -0.2862 -0.1609
+ 0.0302 0.2348 0.0136 0.1216
+ -0.2453 -0.0165 -0.0856 0.0221
+ -0.2453 -0.0165 -0.0856 0.0221
+ 0.3015 0.2159 0.0173 0.3393
+ 0.2593 -0.1916 -0.2862 -0.1609
+ 0.0302 0.2348 0.0136 0.1216
+ 0.2593 -0.1916 -0.2862 -0.1609
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls.par
--- a/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls.par Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgEigPCA/rgEigPCAtest1_pca.xls.par Thu May 20 12:38:35 2010 -0400
@@ -1,6 +1,6 @@
-genotypename: /share/shared/galaxy/test-data/tinywga.ped
-snpname: /share/shared/galaxy/test-data/tinywga.map
-indivname: /share/shared/galaxy/test-data/tinywga.ped
+genotypename: /opt/galaxy/test-data/tinywga.bed
+snpname: /opt/galaxy/test-data/tinywga.bim
+indivname: /opt/galaxy/test-data/tinywga.fam
evecoutname: rgEigPCAtest1_pca.xls.evec
evaloutname: rgEigPCAtest1_eval.xls
altnormstyle: NO
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgGRR/Log_rgGRRtest1.txt
--- a/test-data/rgtestouts/rgGRR/Log_rgGRRtest1.txt Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgGRR/Log_rgGRRtest1.txt Thu May 20 12:38:35 2010 -0400
@@ -1,14 +1,14 @@
-Reading genotypes for 40 subjects and 5 markers
+Reading genotypes for 40 subjects and 25 markers
Calculating 780 pairs...
Estimated time is 0.00 to 0.00 seconds ...
-T1: 0.00482821464539 T2: 0.0623338222504 T3: 0.000771522521973 TOT: 0.0691449642181 0 pairs with no (or not enough) comparable genotypes (0.0%)
-Relstate dupe: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-Relstate parentchild: mean(mean)=1.73 sdev(mean)=0.20, mean(sdev)=0.38 sdev(sdev)=0.23
-Relstate sibpairs: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-Relstate halfsibs: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-Relstate parents: mean(mean)=1.63 sdev(mean)=0.20, mean(sdev)=0.54 sdev(sdev)=0.22
-Relstate unrelated: mean(mean)=1.55 sdev(mean)=0.24, mean(sdev)=0.59 sdev(sdev)=0.24
-Relstate unknown: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+T1: 0.00254368782043 T2: 0.018296957016 T3: 0.000444173812866 TOT: 0.022047996521 0 pairs with no (or not enough) comparable genotypes (0.0%)
+Relstate dupe (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+Relstate parentchild (n=26): mean(mean)=1.68 sdev(mean)=0.19, mean(sdev)=0.39 sdev(sdev)=0.19
+Relstate sibpairs (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+Relstate halfsibs (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+Relstate parents (n=40): mean(mean)=1.46 sdev(mean)=0.25, mean(sdev)=0.55 sdev(sdev)=0.17
+Relstate unrelated (n=714): mean(mean)=1.44 sdev(mean)=0.21, mean(sdev)=0.58 sdev(sdev)=0.15
+Relstate unknown (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
780 pairs are available of 780
Outliers: 0
Plotting ...
\ No newline at end of file
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgGRR/rgGRRtest1.html
--- a/test-data/rgtestouts/rgGRR/rgGRRtest1.html Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgGRR/rgGRRtest1.html Thu May 20 12:38:35 2010 -0400
@@ -9,39 +9,26 @@
</head>
<body>
<div class="document">
-<h4><div>Output from rgGRR.py run at 09/05/2010 21:23:42<br>
+<h4><div>Output from rgGRR.py run at 19/05/2010 15:14:41<br>
</h4>
If you need to rerun this analysis, the command line was
-<pre>'/share/shared/galaxy/tools/rgenetics/rgGRR.py' '/share/shared/galaxy/test-data/tinywga' 'tinywga' '/share/shared/galaxy/test-data/rgtestouts/rgGRR/rgGRRtest1.html' '/share/shared/galaxy/test-data/rgtestouts/rgGRR' 'rgGRRtest1' '100' '6' 'true'</pre>
+<pre>'/opt/galaxy/tools/rgenetics/rgGRR.py' '/opt/galaxy/test-data/tinywga' 'tinywga' '/opt/galaxy/test-data/rgtestouts/rgGRR/rgGRRtest1.html' '/opt/galaxy/test-data/rgtestouts/rgGRR' 'rgGRRtest1' '100' '6'</pre>
</div> <embed src="rgGRRtest1.svg" type="image/svg+xml" width="1150" height="600" /><div><h4>Click the links below to save output files and plots</h4><br><ol>
<li><a href="rgGRRtest1.svg" type="image/svg+xml" >rgGRR Plot (requires SVG)</a></li>
<li><a href="rgGRRtest1_table.xls">Mean by SD alleles shared - 780 rows</a></li>
+<li><a href="rgGRRtest1.html">rgGRRtest1.html</a></li>
<li><a href="Log_rgGRRtest1.txt">Log_rgGRRtest1.txt</a></li>
-<li><a href="rgGRRtest1.html">rgGRRtest1.html</a></li>
-</ol></div><div><h2>Outliers in tab delimited files linked above are also listed below</h2></div><div><hr><h3>Log from this job (also stored in Log_rgGRRtest1.txt)</h3><pre>Reading genotypes for 40 subjects and 5 markers
-
+</ol></div><div><h2>Outliers in tab delimited files linked above are also listed below</h2></div><div><hr><h3>Log from this job (also stored in Log_rgGRRtest1.txt)</h3><pre>Reading genotypes for 40 subjects and 25 markers
Calculating 780 pairs...
-
Estimated time is 0.00 to 0.00 seconds ...
-
-T1: 0.00482821464539 T2: 0.0623338222504 T3: 0.000771522521973 TOT: 0.0691449642181 0 pairs with no (or not enough) comparable genotypes (0.0%)
-
-Relstate dupe: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-
-Relstate parentchild: mean(mean)=1.73 sdev(mean)=0.20, mean(sdev)=0.38 sdev(sdev)=0.23
-
-Relstate sibpairs: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-
-Relstate halfsibs: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-
-Relstate parents: mean(mean)=1.63 sdev(mean)=0.20, mean(sdev)=0.54 sdev(sdev)=0.22
-
-Relstate unrelated: mean(mean)=1.55 sdev(mean)=0.24, mean(sdev)=0.59 sdev(sdev)=0.24
-
-Relstate unknown: mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
-
+T1: 0.00254368782043 T2: 0.018296957016 T3: 0.000444173812866 TOT: 0.022047996521 0 pairs with no (or not enough) comparable genotypes (0.0%)
+Relstate dupe (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+Relstate parentchild (n=26): mean(mean)=1.68 sdev(mean)=0.19, mean(sdev)=0.39 sdev(sdev)=0.19
+Relstate sibpairs (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+Relstate halfsibs (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
+Relstate parents (n=40): mean(mean)=1.46 sdev(mean)=0.25, mean(sdev)=0.55 sdev(sdev)=0.17
+Relstate unrelated (n=714): mean(mean)=1.44 sdev(mean)=0.21, mean(sdev)=0.58 sdev(sdev)=0.15
+Relstate unknown (n=0): mean(mean)=nan sdev(mean)=0.00, mean(sdev)=nan sdev(sdev)=0.00
780 pairs are available of 780
-
Outliers: 0
-
Plotting ...</pre><hr></div></body></html>
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgGRR/rgGRRtest1.svg
--- a/test-data/rgtestouts/rgGRR/rgGRRtest1.svg Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgGRR/rgGRRtest1.svg Thu May 20 12:38:35 2010 -0400
@@ -17,7 +17,7 @@
var style = {"font-family":"Arial,Helvetica", "fill":"black", "font-size":12};
var dist = 12;
var yOffset = 4;
-
+
//A checkBox for each relationship type dupe,parentchild,sibpair,halfsib,parents,unrel,unkn
checkBoxes["dupe"] = new checkBox("dupe","checkboxes",20,40,"cbRect","cbCross",true,"Duplicate",style,dist,yOffset,undefined,hideShowLayer);
checkBoxes["parentchild"] = new checkBox("parentchild","checkboxes",20,60,"cbRect","cbCross",true,"Parent-Child",style,dist,yOffset,undefined,hideShowLayer);
@@ -28,7 +28,7 @@
checkBoxes["unknown"] = new checkBox("unknown","checkboxes",20,160,"cbRect","cbCross",true,"Unknown",style,dist,yOffset,undefined,hideShowLayer);
}
-
+
function hideShowLayer(id, status, label) {
var vis = "hidden";
if (status) {
@@ -36,7 +36,7 @@
}
document.getElementById(id).setAttributeNS(null, 'visibility', vis);
}
-
+
function showBTT(evt, rel, mm, dm, md, dd, n, mg, dg, lg, hg) {
var x = parseInt(evt.pageX)-250;
var y = parseInt(evt.pageY)-110;
@@ -133,7 +133,7 @@
document.getElementById("otRmean").textContent = "relmean="+rmean;
document.getElementById("otRsdev").textContent = "relsdev="+rsdev;
document.getElementById("otHead").setAttribute('fill', fill);
-
+
var tt = document.getElementById("otTip");
tt.setAttribute("transform", "translate("+x+","+y+")");
tt.setAttribute('visibility', 'visible');
@@ -147,7 +147,7 @@
document.getElementById("otTip").setAttributeNS(null, 'visibility', 'hidden');
}
- ]]>
+ ]]>
</script>
<defs>
<!-- symbols for check boxes -->
@@ -179,7 +179,7 @@
<!-- Grid Lines -->
<g style="fill:none; stroke:#dddddd; stroke-width:1; stroke-dasharray:2,2; text-anchor:end; shape-rendering:crispEdges">
-
+
<!-- Vertical grid lines -->
<line x1="125" y1="0" x2="115" y2="600" />
<line x1="230" y1="0" x2="230" y2="600" />
@@ -215,16 +215,16 @@
<rect x="120" y="135" width="10" height="10" fill="gold" stroke="gold" stroke-width="1" cursor="pointer"/>
<rect x="120" y="155" width="10" height="10" fill="gray" stroke="gray" stroke-width="1" cursor="pointer"/>
<text x="15" y="195" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore gt 15</text>
- <circle cx="125" cy="192" r="6" style="stroke:red; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
+ <circle cx="125" cy="192" r="6" style="stroke:red; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
<text x="15" y="215" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore 4 to 15</text>
- <circle cx="125" cy="212" r="3" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
+ <circle cx="125" cy="212" r="3" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
<text x="15" y="235" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore lt 4</text>
- <circle cx="125" cy="232" r="2" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
+ <circle cx="125" cy="232" r="2" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
<g id="checkboxes">
</g>
</g>
-
+
<g style='fill:black; stroke:none' font-size="17" font-family="Arial">
<!-- X Axis Labels -->
<text x="480" y="660">Mean Alleles Shared</text>
@@ -232,7 +232,7 @@
<text x="277" y="630" >1.25</text>
<text x="564" y="630" >1.5</text>
<text x="842" y="630" >1.75</text>
- <text x="1140" y="630" >2.0</text>
+ <text x="1140" y="630" >2.0</text>
</g>
<g transform="rotate(270)" style="fill:black; stroke:none" font-size="17" font-family="Arial">
@@ -247,103 +247,492 @@
<!-- Plot Title -->
<g style="fill:black; stroke:none" font-size="18" font-family="Arial">
- <text x="425" y="-30">rgGRRtest1 (40 subjects, 5 snp)</text>
+ <text x="425" y="-30">rgGRRtest1 (40 subjects, 25 snp)</text>
</g>
<!-- One group/layer of points for each relationship type -->
<g id="unrelated" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;" cursor="pointer">
-<circle cx="-287" cy="25" r="2" onmouseover="showOTT(evt, 5, '13,2,0,0', '1344,1,12,13', 0.75, 0.96, 4, 1.55, 0.59)" onmouseout="hideOTT(evt)" />
-<circle cx="575" cy="0" r="2"
- onmouseover="showBTT(evt, 5, 1.50, 0.00, 1.00, 0.00, 11, 2, 0, 2, 2)"
+<circle cx="276" cy="202" r="2"
+ onmouseover="showBTT(evt, 5, 1.24, 0.00, 0.66, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="919" cy="331" r="2"
- onmouseover="showBTT(evt, 5, 1.80, 0.00, 0.45, 0.00, 143, 2, 0, 2, 2)"
+<circle cx="479" cy="134" r="2"
+ onmouseover="showBTT(evt, 5, 1.42, 0.00, 0.78, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="690" cy="63" r="2"
- onmouseover="showBTT(evt, 5, 1.60, 0.00, 0.89, 0.00, 20, 2, 0, 2, 2)"
+<circle cx="874" cy="338" r="2"
+ onmouseover="showBTT(evt, 5, 1.76, 0.00, 0.44, 0.00, 12, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="862" cy="300" r="2"
- onmouseover="showBTT(evt, 5, 1.75, 0.00, 0.50, 0.00, 34, 2, 0, 2, 2)"
+<circle cx="230" cy="212" r="2"
+ onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.65, 0.00, 7, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="575" cy="253" r="2"
- onmouseover="showBTT(evt, 5, 1.50, 0.00, 0.58, 0.00, 28, 2, 0, 2, 2)"
+<circle cx="827" cy="325" r="2"
+ onmouseover="showBTT(evt, 5, 1.72, 0.00, 0.46, 0.00, 22, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="287" cy="25" r="2"
- onmouseover="showBTT(evt, 5, 1.25, 0.00, 0.96, 0.00, 21, 2, 0, 2, 2)"
+<circle cx="183" cy="152" r="2" onmouseover="showOTT(evt, 5, '1340,9,0,0', '1345,12,0,0', 1.16, 0.75, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="873" cy="338" r="2"
+ onmouseover="showBTT(evt, 5, 1.76, 0.00, 0.44, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="287" cy="300" r="2"
- onmouseover="showBTT(evt, 5, 1.25, 0.00, 0.50, 0.00, 9, 2, 0, 2, 2)"
+<circle cx="598" cy="208" r="2" onmouseover="showOTT(evt, 5, '117,2,0,0', '1334,12,0,0', 1.52, 0.65, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="799" cy="317" r="2" onmouseover="showOTT(evt, 5, '105,3,0,0', '13,2,0,0', 1.70, 0.47, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="506" cy="50" r="2"
+ onmouseover="showBTT(evt, 5, 1.44, 0.00, 0.92, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="459" cy="271" r="2"
- onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.55, 0.00, 80, 2, 0, 2, 2)"
+<circle cx="550" cy="293" r="2"
+ onmouseover="showBTT(evt, 5, 1.48, 0.00, 0.51, 0.00, 7, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="230" cy="-57" r="2"
- onmouseover="showBTT(evt, 5, 1.20, 0.00, 1.10, 0.00, 15, 2, 0, 2, 2)"
+<circle cx="414" cy="83" r="2" onmouseover="showOTT(evt, 5, '101,3,0,0', '1340,9,0,0', 1.36, 0.86, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="230" cy="80" r="2"
+ onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.87, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="459" cy="63" r="2"
- onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.89, 0.00, 61, 2, 0, 2, 2)"
+<circle cx="92" cy="144" r="2" onmouseover="showOTT(evt, 5, '1334,12,0,0', '1344,1,12,13', 1.08, 0.76, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="414" cy="258" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.57, 0.00, 6, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
+<circle cx="1099" cy="474" r="2"
+ onmouseover="showBTT(evt, 5, 1.96, 0.00, 0.21, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="46" cy="194" r="2" onmouseover="showOTT(evt, 5, '1341,11,0,0', '1345,12,0,0', 1.04, 0.68, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="479" cy="169" r="2" onmouseover="showOTT(evt, 5, '13,3,0,0', '1341,1,11,12', 1.42, 0.72, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
<circle cx="1150" cy="600" r="2"
- onmouseover="showBTT(evt, 5, 2.00, 0.00, 0.00, 0.00, 41, 2, 0, 2, 2)"
+ onmouseover="showBTT(evt, 5, 2.00, 0.00, 0.00, 0.00, 7, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="0" cy="175" r="2"
- onmouseover="showBTT(evt, 5, 1.00, 0.00, 0.71, 0.00, 5, 2, 0, 2, 2)"
+<circle cx="600" cy="293" r="2" onmouseover="showOTT(evt, 5, '112,3,0,0', '13,2,0,0', 1.52, 0.51, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="183" cy="187" r="2" onmouseover="showOTT(evt, 5, '112,1,3,2', '1341,12,0,0', 1.16, 0.69, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="450" cy="300" r="2" onmouseover="showOTT(evt, 5, '13,2,0,0', '1334,10,0,0', 1.39, 0.50, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="322" cy="65" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.89, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="230" cy="98" r="2"
- onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.84, 0.00, 46, 2, 0, 2, 2)"
+<circle cx="459" cy="141" r="2"
+ onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.76, 0.00, 5, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="230" cy="331" r="2"
- onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.45, 0.00, 7, 2, 0, 2, 2)"
+<circle cx="766" cy="311" r="2"
+ onmouseover="showBTT(evt, 5, 1.67, 0.00, 0.48, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="0" cy="0" r="2"
- onmouseover="showBTT(evt, 5, 1.00, 0.00, 1.00, 0.00, 13, 2, 0, 2, 2)"
+<circle cx="95" cy="102" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '13,1,3,2', 1.08, 0.83, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="700" cy="300" r="2"
+ onmouseover="showBTT(evt, 5, 1.61, 0.00, 0.50, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="690" cy="271" r="2"
- onmouseover="showBTT(evt, 5, 1.60, 0.00, 0.55, 0.00, 176, 2, 0, 2, 2)"
+<circle cx="527" cy="294" r="2"
+ onmouseover="showBTT(evt, 5, 1.46, 0.00, 0.51, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="-229" cy="-57" r="2"
- onmouseover="showBTT(evt, 5, 0.80, 0.00, 1.10, 0.00, 3, 2, 0, 2, 2)"
+<circle cx="800" cy="317" r="2" onmouseover="showOTT(evt, 5, '12,3,0,0', '13,2,0,0', 1.70, 0.47, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="431" cy="211" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '1341,11,0,0', 1.37, 0.65, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="275" cy="101" r="2" onmouseover="showOTT(evt, 5, '117,2,0,0', '1340,9,0,0', 1.24, 0.83, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="414" cy="145" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.76, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="368" cy="60" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.90, 0.00, 6, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="321" cy="193" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.68, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="414" cy="217" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.64, 0.00, 12, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="550" cy="244" r="2" onmouseover="showOTT(evt, 5, '105,2,0,0', '13,2,0,0', 1.48, 0.59, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="367" cy="314" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.48, 0.00, 6, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="598" cy="294" r="2"
+ onmouseover="showBTT(evt, 5, 1.52, 0.00, 0.51, 0.00, 12, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="183" cy="89" r="2" onmouseover="showOTT(evt, 5, '112,2,0,0', '1334,2,12,13', 1.16, 0.85, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="414" cy="113" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.81, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="184" cy="225" r="2" onmouseover="showOTT(evt, 5, '101,3,0,0', '1345,12,0,0', 1.16, 0.62, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="670" cy="297" r="2"
+ onmouseover="showBTT(evt, 5, 1.58, 0.00, 0.50, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="383" cy="143" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '1341,12,0,0', 1.33, 0.76, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="367" cy="223" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.63, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="275" cy="132" r="2"
+ onmouseover="showBTT(evt, 5, 1.24, 0.00, 0.78, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="287" cy="235" r="2"
+ onmouseover="showBTT(evt, 5, 1.25, 0.00, 0.61, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="644" cy="296" r="2"
+ onmouseover="showBTT(evt, 5, 1.56, 0.00, 0.51, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="368" cy="185" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.69, 0.00, 9, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="828" cy="325" r="2"
+ onmouseover="showBTT(evt, 5, 1.72, 0.00, 0.46, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="958" cy="371" r="2" onmouseover="showOTT(evt, 5, '1340,12,0,0', '1341,1,11,12', 1.83, 0.38, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="414" cy="179" r="2" onmouseover="showOTT(evt, 5, '13,1,3,2', '1341,12,0,0', 1.36, 0.70, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="239" cy="205" r="2"
+ onmouseover="showBTT(evt, 5, 1.21, 0.00, 0.66, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="450" cy="206" r="2"
+ onmouseover="showBTT(evt, 5, 1.39, 0.00, 0.66, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="368" cy="223" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.63, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="643" cy="250" r="2"
+ onmouseover="showBTT(evt, 5, 1.56, 0.00, 0.58, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="782" cy="314" r="2"
+ onmouseover="showBTT(evt, 5, 1.68, 0.00, 0.48, 0.00, 9, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="229" cy="253" r="2"
+ onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.58, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="506" cy="250" r="2"
+ onmouseover="showBTT(evt, 5, 1.44, 0.00, 0.58, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="950" cy="367" r="2"
+ onmouseover="showBTT(evt, 5, 1.83, 0.00, 0.39, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="184" cy="89" r="2"
+ onmouseover="showBTT(evt, 5, 1.16, 0.00, 0.85, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="736" cy="306" r="2"
+ onmouseover="showBTT(evt, 5, 1.64, 0.00, 0.49, 0.00, 7, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="383" cy="217" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '1344,1,12,13', 1.33, 0.64, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="735" cy="306" r="2"
+ onmouseover="showBTT(evt, 5, 1.64, 0.00, 0.49, 0.00, 24, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="552" cy="294" r="2"
+ onmouseover="showBTT(evt, 5, 1.48, 0.00, 0.51, 0.00, 25, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="275" cy="72" r="2"
+ onmouseover="showBTT(evt, 5, 1.24, 0.00, 0.88, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="505" cy="296" r="2" onmouseover="showOTT(evt, 5, '1334,12,0,0', '1340,12,0,0', 1.44, 0.51, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="551" cy="294" r="2" onmouseover="showOTT(evt, 5, '117,1,3,2', '1341,12,0,0', 1.48, 0.51, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="276" cy="132" r="2" onmouseover="showOTT(evt, 5, '101,3,0,0', '1334,2,12,13', 1.24, 0.78, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="460" cy="175" r="2"
+ onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.71, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="143" cy="89" r="2"
+ onmouseover="showBTT(evt, 5, 1.13, 0.00, 0.85, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="506" cy="296" r="2"
+ onmouseover="showBTT(evt, 5, 1.44, 0.00, 0.51, 0.00, 35, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="-138" cy="-7" r="2" onmouseover="showOTT(evt, 5, '1340,9,0,0', '1344,1,12,13', 0.88, 1.01, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="349" cy="219" r="2" onmouseover="showOTT(evt, 5, '117,3,0,0', '13,2,0,0', 1.30, 0.63, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="0" cy="166" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '1340,9,0,0', 1.00, 0.72, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="735" cy="258" r="2"
+ onmouseover="showBTT(evt, 5, 1.64, 0.00, 0.57, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="814" cy="321" r="2"
+ onmouseover="showBTT(evt, 5, 1.71, 0.00, 0.46, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="459" cy="253" r="2"
+ onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.58, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="143" cy="232" r="2" onmouseover="showOTT(evt, 5, '1334,2,12,13', '1341,1,11,12', 1.13, 0.61, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="431" cy="303" r="2"
+ onmouseover="showBTT(evt, 5, 1.37, 0.00, 0.49, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="479" cy="102" r="2"
+ onmouseover="showBTT(evt, 5, 1.42, 0.00, 0.83, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="690" cy="300" r="2"
+ onmouseover="showBTT(evt, 5, 1.60, 0.00, 0.50, 0.00, 18, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="322" cy="193" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.68, 0.00, 7, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="-184" cy="152" r="2"
+ onmouseover="showBTT(evt, 5, 0.84, 0.00, 0.75, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="766" cy="143" r="2" onmouseover="showOTT(evt, 5, '1334,1,10,11', '1341,1,11,12', 1.67, 0.76, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="335" cy="149" r="2"
+ onmouseover="showBTT(evt, 5, 1.29, 0.00, 0.75, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="919" cy="355" r="2"
+ onmouseover="showBTT(evt, 5, 1.80, 0.00, 0.41, 0.00, 16, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="383" cy="311" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '112,3,0,0', 1.33, 0.48, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="597" cy="294" r="2"
+ onmouseover="showBTT(evt, 5, 1.52, 0.00, 0.51, 0.00, 15, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="0" cy="212" r="2" onmouseover="showOTT(evt, 5, '13,3,0,0', '1334,2,12,13', 1.00, 0.65, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="527" cy="247" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '117,1,3,2', 1.46, 0.59, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="138" cy="239" r="2"
+ onmouseover="showBTT(evt, 5, 1.12, 0.00, 0.60, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="459" cy="80" r="2"
+ onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.87, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="46" cy="276" r="2" onmouseover="showOTT(evt, 5, '13,3,0,0', '1341,12,0,0', 1.04, 0.54, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="138" cy="-7" r="2"
+ onmouseover="showBTT(evt, 5, 1.12, 0.00, 1.01, 0.00, 2, 3, 0, 3, 3)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="505" cy="209" r="2"
+ onmouseover="showBTT(evt, 5, 1.44, 0.00, 0.65, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="46" cy="159" r="2" onmouseover="showOTT(evt, 5, '101,2,0,0', '1340,9,0,0', 1.04, 0.73, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="575" cy="246" r="2" onmouseover="showOTT(evt, 5, '1341,1,11,12', '1344,1,12,13', 1.50, 0.59, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="184" cy="119" r="2" onmouseover="showOTT(evt, 5, '117,3,0,0', '1340,9,0,0', 1.16, 0.80, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="0" cy="80" r="2"
+ onmouseover="showBTT(evt, 5, 1.00, 0.00, 0.87, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="0" cy="52" r="2" onmouseover="showOTT(evt, 5, '117,1,3,2', '1340,9,0,0', 1.00, 0.91, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="322" cy="157" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.74, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="383" cy="261" r="2"
+ onmouseover="showBTT(evt, 5, 1.33, 0.00, 0.56, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="-138" cy="164" r="2"
+ onmouseover="showBTT(evt, 5, 0.88, 0.00, 0.73, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="966" cy="375" r="2"
+ onmouseover="showBTT(evt, 5, 1.84, 0.00, 0.37, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="335" cy="185" r="2"
+ onmouseover="showBTT(evt, 5, 1.29, 0.00, 0.69, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="622" cy="294" r="2"
+ onmouseover="showBTT(evt, 5, 1.54, 0.00, 0.51, 0.00, 11, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="575" cy="131" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '1344,1,12,13', 1.50, 0.78, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="622" cy="247" r="2"
+ onmouseover="showBTT(evt, 5, 1.54, 0.00, 0.59, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="413" cy="145" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.76, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="335" cy="321" r="2"
+ onmouseover="showBTT(evt, 5, 1.29, 0.00, 0.46, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="781" cy="314" r="2"
+ onmouseover="showBTT(evt, 5, 1.68, 0.00, 0.48, 0.00, 12, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="383" cy="178" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '12,3,0,0', 1.33, 0.70, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="92" cy="257" r="2"
+ onmouseover="showBTT(evt, 5, 1.08, 0.00, 0.57, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="138" cy="100" r="2"
+ onmouseover="showBTT(evt, 5, 1.12, 0.00, 0.83, 0.00, 6, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="368" cy="265" r="2" onmouseover="showOTT(evt, 5, '1340,12,0,0', '1344,1,12,13', 1.32, 0.56, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="-191" cy="49" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '1340,9,0,0', 0.83, 0.92, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="414" cy="306" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.49, 0.00, 16, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="479" cy="249" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '1334,1,10,11', 1.42, 0.58, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="450" cy="250" r="2"
+ onmouseover="showBTT(evt, 5, 1.39, 0.00, 0.58, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="321" cy="275" r="2" onmouseover="showOTT(evt, 5, '101,3,0,0', '105,3,0,0', 1.28, 0.54, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="92" cy="54" r="2"
+ onmouseover="showBTT(evt, 5, 1.08, 0.00, 0.91, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="597" cy="248" r="2"
+ onmouseover="showBTT(evt, 5, 1.52, 0.00, 0.59, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="239" cy="167" r="2"
+ onmouseover="showBTT(evt, 5, 1.21, 0.00, 0.72, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="479" cy="297" r="2"
+ onmouseover="showBTT(evt, 5, 1.42, 0.00, 0.50, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="92" cy="304" r="2" onmouseover="showOTT(evt, 5, '13,3,0,0', '1334,12,0,0', 1.08, 0.49, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="1011" cy="401" r="2" onmouseover="showOTT(evt, 5, '112,3,0,0', '1334,10,0,0', 1.88, 0.33, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="413" cy="306" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.49, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="184" cy="375" r="2" onmouseover="showOTT(evt, 5, '13,3,0,0', '1334,10,0,0', 1.16, 0.37, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="191" cy="178" r="2"
+ onmouseover="showBTT(evt, 5, 1.17, 0.00, 0.70, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="575" cy="293" r="2"
+ onmouseover="showBTT(evt, 5, 1.50, 0.00, 0.51, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="0" cy="131" r="2" onmouseover="showOTT(evt, 5, '1340,9,0,0', '1341,1,11,12', 1.00, 0.78, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="191" cy="217" r="2"
+ onmouseover="showBTT(evt, 5, 1.17, 0.00, 0.64, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="138" cy="164" r="2"
+ onmouseover="showBTT(evt, 5, 1.12, 0.00, 0.73, 0.00, 7, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="643" cy="296" r="2"
+ onmouseover="showBTT(evt, 5, 1.56, 0.00, 0.51, 0.00, 41, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="322" cy="325" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.46, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="552" cy="248" r="2"
+ onmouseover="showBTT(evt, 5, 1.48, 0.00, 0.59, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="690" cy="253" r="2"
+ onmouseover="showBTT(evt, 5, 1.60, 0.00, 0.58, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="718" cy="303" r="2"
+ onmouseover="showBTT(evt, 5, 1.62, 0.00, 0.49, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="551" cy="248" r="2" onmouseover="showOTT(evt, 5, '105,3,0,0', '117,3,0,0', 1.48, 0.59, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="414" cy="180" r="2"
+ onmouseover="showBTT(evt, 5, 1.36, 0.00, 0.70, 0.00, 10, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="230" cy="141" r="2"
+ onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.76, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="367" cy="265" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.56, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="643" cy="209" r="2"
+ onmouseover="showBTT(evt, 5, 1.56, 0.00, 0.65, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="275" cy="165" r="2"
+ onmouseover="showBTT(evt, 5, 1.24, 0.00, 0.72, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="276" cy="165" r="2"
+ onmouseover="showBTT(evt, 5, 1.24, 0.00, 0.72, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="1103" cy="479" r="2"
+ onmouseover="showBTT(evt, 5, 1.96, 0.00, 0.20, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="552" cy="171" r="2" onmouseover="showOTT(evt, 5, '117,2,0,0', '1344,1,12,13', 1.48, 0.71, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="92" cy="215" r="2" onmouseover="showOTT(evt, 5, '112,2,0,0', '1334,10,0,0', 1.08, 0.64, 25, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="459" cy="300" r="2"
+ onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.50, 0.00, 19, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="49" cy="105" r="2" onmouseover="showOTT(evt, 5, '13,2,0,0', '1344,1,12,13', 1.04, 0.82, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="287" cy="194" r="2"
+ onmouseover="showBTT(evt, 5, 1.25, 0.00, 0.68, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="597" cy="208" r="2"
+ onmouseover="showBTT(evt, 5, 1.52, 0.00, 0.65, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="199" cy="209" r="2" onmouseover="showOTT(evt, 5, '13,2,0,0', '1345,12,0,0', 1.17, 0.65, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="287" cy="334" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '1341,12,0,0', 1.25, 0.44, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="322" cy="231" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.61, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="527" cy="167" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '117,1,3,2', 1.46, 0.72, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="199" cy="133" r="2" onmouseover="showOTT(evt, 5, '117,1,3,2', '13,2,0,0', 1.17, 0.78, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="230" cy="175" r="2"
+ onmouseover="showBTT(evt, 5, 1.20, 0.00, 0.71, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="431" cy="138" r="2" onmouseover="showOTT(evt, 5, '105,1,3,2', '1345,12,0,0', 1.37, 0.77, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="459" cy="212" r="2"
+ onmouseover="showBTT(evt, 5, 1.40, 0.00, 0.65, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="143" cy="155" r="2"
+ onmouseover="showBTT(evt, 5, 1.12, 0.00, 0.74, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="183" cy="225" r="2"
+ onmouseover="showBTT(evt, 5, 1.16, 0.00, 0.62, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="431" cy="254" r="2" onmouseover="showOTT(evt, 5, '101,1,3,2', '1334,12,0,0', 1.38, 0.58, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="574" cy="166" r="2" onmouseover="showOTT(evt, 5, '12,3,0,0', '1341,1,11,12', 1.50, 0.72, 24, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="321" cy="65" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.89, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="184" cy="152" r="2"
+ onmouseover="showBTT(evt, 5, 1.16, 0.00, 0.75, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="276" cy="241" r="2"
+ onmouseover="showBTT(evt, 5, 1.24, 0.00, 0.60, 0.00, 3, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="418" cy="163" r="2" onmouseover="showOTT(evt, 5, '13,2,0,0', '1341,1,11,12', 1.36, 0.73, 22, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="506" cy="209" r="2"
+ onmouseover="showBTT(evt, 5, 1.44, 0.00, 0.65, 0.00, 5, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="749" cy="307" r="2"
+ onmouseover="showBTT(evt, 5, 1.65, 0.00, 0.49, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="649" cy="295" r="2"
+ onmouseover="showBTT(evt, 5, 1.57, 0.00, 0.51, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="368" cy="314" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.48, 0.00, 8, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="249" cy="240" r="2" onmouseover="showOTT(evt, 5, '117,2,0,0', '13,2,0,0', 1.22, 0.60, 23, 1.44, 0.58)" onmouseout="hideOTT(evt)" />
+<circle cx="322" cy="125" r="2"
+ onmouseover="showBTT(evt, 5, 1.28, 0.00, 0.79, 0.00, 8, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="250" cy="197" r="2"
+ onmouseover="showBTT(evt, 5, 1.22, 0.00, 0.67, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="368" cy="151" r="2"
+ onmouseover="showBTT(evt, 5, 1.32, 0.00, 0.75, 0.00, 4, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="287" cy="157" r="2"
+ onmouseover="showBTT(evt, 5, 1.25, 0.00, 0.74, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
</g>
<g id="parents" style="stroke:lightgreen; fill:lightgreen; fill-opacity:1.0; stroke-width:1;" cursor="pointer">
-<circle cx="287" cy="25" r="2" onmouseover="showOTT(evt, 4, '13,2,0,0', '13,3,0,0', 1.25, 0.96, 4, 1.63, 0.54)" onmouseout="hideOTT(evt)" />
-<circle cx="919" cy="331" r="2"
- onmouseover="showBTT(evt, 4, 1.80, 0.00, 0.45, 0.00, 12, 2, 0, 2, 2)"
+<circle cx="874" cy="338" r="2" onmouseover="showOTT(evt, 4, '117,2,0,0', '117,3,0,0', 1.76, 0.44, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="827" cy="325" r="2"
+ onmouseover="showBTT(evt, 4, 1.72, 0.00, 0.46, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="690" cy="63" r="2"
- onmouseover="showBTT(evt, 4, 1.60, 0.00, 0.89, 0.00, 2, 2, 0, 2, 2)"
+<circle cx="643" cy="296" r="2"
+ onmouseover="showBTT(evt, 4, 1.56, 0.00, 0.51, 0.00, 4, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
+<circle cx="230" cy="175" r="2" onmouseover="showOTT(evt, 4, '112,2,0,0', '112,3,0,0', 1.20, 0.71, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="276" cy="165" r="2" onmouseover="showOTT(evt, 4, '1334,11,0,0', '1334,12,0,0', 1.24, 0.72, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="549" cy="200" r="2" onmouseover="showOTT(evt, 4, '13,2,0,0', '13,3,0,0', 1.48, 0.67, 23, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="966" cy="375" r="2" onmouseover="showOTT(evt, 4, '1334,10,0,0', '1334,12,0,0', 1.84, 0.37, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
<circle cx="1150" cy="600" r="2"
- onmouseover="showBTT(evt, 4, 2.00, 0.00, 0.00, 0.00, 3, 2, 0, 2, 2)"
+ onmouseover="showBTT(evt, 4, 2.00, 0.00, 0.00, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="459" cy="271" r="2"
- onmouseover="showBTT(evt, 4, 1.40, 0.00, 0.55, 0.00, 6, 2, 0, 2, 2)"
+<circle cx="183" cy="187" r="2"
+ onmouseover="showBTT(evt, 4, 1.16, 0.00, 0.69, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="459" cy="63" r="2"
- onmouseover="showBTT(evt, 4, 1.40, 0.00, 0.89, 0.00, 3, 2, 0, 2, 2)"
+<circle cx="781" cy="314" r="2"
+ onmouseover="showBTT(evt, 4, 1.68, 0.00, 0.48, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="230" cy="98" r="2" onmouseover="showOTT(evt, 4, '1340,2,11,12', '1340,9,0,0', 1.20, 0.84, 5, 1.63, 0.54)" onmouseout="hideOTT(evt)" />
-<circle cx="690" cy="271" r="2"
- onmouseover="showBTT(evt, 4, 1.60, 0.00, 0.55, 0.00, 12, 2, 0, 2, 2)"
+<circle cx="735" cy="306" r="2"
+ onmouseover="showBTT(evt, 4, 1.64, 0.00, 0.49, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="322" cy="231" r="2" onmouseover="showOTT(evt, 4, '1334,11,0,0', '1334,13,0,0', 1.28, 0.61, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="506" cy="296" r="2" onmouseover="showOTT(evt, 4, '1340,11,0,0', '1340,9,0,0', 1.44, 0.51, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="367" cy="314" r="2" onmouseover="showOTT(evt, 4, '1334,1,10,11', '1334,12,0,0', 1.32, 0.48, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="183" cy="225" r="2" onmouseover="showOTT(evt, 4, '1334,1,10,11', '1334,2,12,13', 1.16, 0.62, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="735" cy="258" r="2" onmouseover="showOTT(evt, 4, '105,2,0,0', '105,3,0,0', 1.64, 0.57, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="184" cy="152" r="2" onmouseover="showOTT(evt, 4, '1340,2,11,12', '1340,9,0,0', 1.16, 0.75, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="183" cy="89" r="2" onmouseover="showOTT(evt, 4, '1334,11,0,0', '1334,2,12,13', 1.16, 0.85, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="184" cy="225" r="2" onmouseover="showOTT(evt, 4, '1340,12,0,0', '1340,9,0,0', 1.16, 0.62, 25, 1.46, 0.55)" onmouseout="hideOTT(evt)" />
+<circle cx="92" cy="215" r="2"
+ onmouseover="showBTT(evt, 4, 1.08, 0.00, 0.64, 0.00, 2, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="597" cy="294" r="2"
+ onmouseover="showBTT(evt, 4, 1.52, 0.00, 0.51, 0.00, 6, 2, 0, 2, 2)"
+ onmouseout="hideBTT(evt)" />
+<circle cx="335" cy="149" r="2"
+ onmouseover="showBTT(evt, 4, 1.29, 0.00, 0.75, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
</g>
<g id="parentchild" style="stroke:dodgerblue; fill:dodgerblue; fill-opacity:1.0; stroke-width:1;" cursor="pointer">
-<circle cx="919" cy="331" r="2"
- onmouseover="showBTT(evt, 1, 1.80, 0.00, 0.45, 0.00, 4, 2, 0, 2, 2)"
+<circle cx="699" cy="300" r="2" onmouseover="showOTT(evt, 1, '13,1,3,2', '13,2,0,0', 1.61, 0.50, 23, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="874" cy="338" r="2" onmouseover="showOTT(evt, 1, '1340,12,0,0', '1340,2,11,12', 1.76, 0.44, 25, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="966" cy="375" r="2" onmouseover="showOTT(evt, 1, '117,1,3,2', '117,3,0,0', 1.84, 0.37, 25, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="622" cy="294" r="2" onmouseover="showOTT(evt, 1, '101,1,3,2', '101,3,0,0', 1.54, 0.51, 24, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="690" cy="300" r="2" onmouseover="showOTT(evt, 1, '1334,1,10,11', '1334,11,0,0', 1.60, 0.50, 25, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="527" cy="294" r="2" onmouseover="showOTT(evt, 1, '105,1,3,2', '105,2,0,0', 1.46, 0.51, 24, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="479" cy="297" r="2" onmouseover="showOTT(evt, 1, '1341,1,11,12', '1341,11,0,0', 1.42, 0.50, 24, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="1150" cy="600" r="2"
+ onmouseover="showBTT(evt, 1, 2.00, 0.00, 0.00, 0.00, 5, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="862" cy="300" r="2"
- onmouseover="showBTT(evt, 1, 1.75, 0.00, 0.50, 0.00, 3, 2, 0, 2, 2)"
+<circle cx="690" cy="299" r="2" onmouseover="showOTT(evt, 1, '117,1,3,2', '117,2,0,0', 1.60, 0.50, 25, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="827" cy="325" r="2"
+ onmouseover="showBTT(evt, 1, 1.72, 0.00, 0.46, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="575" cy="253" r="2" onmouseover="showOTT(evt, 1, '13,1,3,2', '13,2,0,0', 1.50, 0.58, 4, 1.73, 0.38)" onmouseout="hideOTT(evt)" />
-<circle cx="1150" cy="600" r="2"
- onmouseover="showBTT(evt, 1, 2.00, 0.00, 0.00, 0.00, 7, 2, 0, 2, 2)"
+<circle cx="552" cy="294" r="2"
+ onmouseover="showBTT(evt, 1, 1.48, 0.00, 0.51, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="459" cy="271" r="2"
- onmouseover="showBTT(evt, 1, 1.40, 0.00, 0.55, 0.00, 3, 2, 0, 2, 2)"
+<circle cx="965" cy="375" r="2" onmouseover="showOTT(evt, 1, '1334,12,0,0', '1334,2,12,13', 1.84, 0.37, 25, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="643" cy="296" r="2"
+ onmouseover="showBTT(evt, 1, 1.56, 0.00, 0.51, 0.00, 3, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
-<circle cx="690" cy="271" r="2"
- onmouseover="showBTT(evt, 1, 1.60, 0.00, 0.55, 0.00, 8, 2, 0, 2, 2)"
+<circle cx="718" cy="303" r="2" onmouseover="showOTT(evt, 1, '1341,1,11,12', '1341,12,0,0', 1.62, 0.49, 24, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
+<circle cx="597" cy="294" r="2"
+ onmouseover="showBTT(evt, 1, 1.52, 0.00, 0.51, 0.00, 2, 2, 0, 2, 2)"
onmouseout="hideBTT(evt)" />
+<circle cx="575" cy="293" r="2" onmouseover="showOTT(evt, 1, '105,1,3,2', '105,3,0,0', 1.50, 0.51, 24, 1.68, 0.39)" onmouseout="hideOTT(evt)" />
</g>
<g id="unknown" style="stroke:gray; fill:gray; fill-opacity:1.0; stroke-width:1;" cursor="pointer">
</g>
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgGRR/rgGRRtest1_table.xls
--- a/test-data/rgtestouts/rgGRR/rgGRRtest1_table.xls Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgGRR/rgGRRtest1_table.xls Thu May 20 12:38:35 2010 -0400
@@ -1,781 +1,781 @@
-fid1 iid1 fid2 iid2 mean sdev zmean zsdev geno relcode
-101_1 101_2 1.400000 0.894427 1.351962 -1.627597 5 5
-101_1 101_3 1.400000 0.894427 0.105472 0.511563 5 5
-101_1 105_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 105_2 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 105_3 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 112_1 1.400000 0.894427 -0.219631 1.712469 5 5
-101_1 112_2 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 112_3 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 117_1 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 117_2 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 117_3 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 12_1 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 12_2 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 12_3 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 13_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 13_2 1.400000 0.894427 -0.219631 1.712469 5 5
-101_1 13_3 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 1334_1 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 1334_10 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 1334_11 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 1334_12 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 1334_13 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 1334_2 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 1340_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 1340_10 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 1340_11 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 1340_12 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 1340_2 1.400000 0.894427 -1.260908 -0.397216 5 5
-101_1 1340_9 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 1341_1 1.400000 0.894427 0.821646 -0.397216 5 5
-101_1 1341_11 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 1341_12 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_1 1341_13 1.400000 0.894427 -0.219631 1.712469 5 5
-101_1 1341_14 1.400000 0.894427 -0.219631 1.712469 5 5
-101_1 1341_2 1.400000 0.894427 -0.219631 1.712469 5 5
-101_1 1344_1 1.400000 0.894427 -1.260908 1.532838 5 5
-101_1 1344_12 1.400000 0.894427 -1.260908 -0.397216 5 5
-101_1 1344_13 1.400000 0.894427 -1.260908 -0.397216 5 5
-101_1 1345_12 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_2 101_3 1.400000 0.894427 -0.132290 0.048238 5 5
-101_2 105_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-101_2 105_2 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 105_3 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 112_1 1.400000 0.894427 0.196880 1.267018 5 5
-101_2 112_2 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 112_3 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 117_1 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 117_2 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 117_3 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 12_1 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 12_2 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 12_3 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 13_1 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 13_2 1.400000 0.894427 -0.219631 1.712469 5 5
-101_2 13_3 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 1334_1 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 1334_10 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 1334_11 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 1334_12 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 1334_13 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 1334_2 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 1340_1 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 1340_10 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 1340_11 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 1340_12 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 1340_2 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_2 1340_9 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-101_2 1341_11 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-101_2 1341_13 1.400000 0.894427 0.196880 1.267018 5 5
-101_2 1341_14 1.400000 0.894427 0.196880 1.267018 5 5
-101_2 1341_2 1.400000 0.894427 0.196880 1.267018 5 5
-101_2 1344_1 1.400000 0.894427 -0.636142 1.267018 5 5
-101_2 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_2 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_2 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-101_3 105_1 1.400000 0.894427 -1.260908 1.532838 5 5
-101_3 105_2 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 105_3 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 112_1 1.400000 0.894427 -1.469163 1.023277 5 5
-101_3 112_2 1.400000 0.894427 -2.302185 1.712469 5 5
-101_3 112_3 1.400000 0.894427 0.196880 -0.195857 5 5
-101_3 117_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 117_2 1.400000 0.894427 1.029902 -0.619941 5 5
-101_3 117_3 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 12_1 1.400000 0.894427 1.029902 -0.619941 5 5
-101_3 12_2 1.400000 0.894427 1.029902 -0.619941 5 5
-101_3 12_3 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 13_1 1.400000 0.894427 0.196880 -0.195857 5 5
-101_3 13_2 1.400000 0.894427 -1.260908 1.532838 5 5
-101_3 13_3 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 1334_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 1334_10 1.400000 0.894427 0.196880 -0.195857 5 5
-101_3 1334_11 1.400000 0.894427 -2.302185 1.712469 5 5
-101_3 1334_12 1.400000 0.894427 -0.636142 1.267018 5 5
-101_3 1334_13 1.400000 0.894427 -1.469163 -0.619941 5 5
-101_3 1334_2 1.400000 0.894427 -0.636142 1.267018 5 5
-101_3 1340_1 1.400000 0.894427 -1.469163 -0.619941 5 5
-101_3 1340_10 1.400000 0.894427 -1.469163 -0.619941 5 5
-101_3 1340_11 1.400000 0.894427 -1.469163 -0.619941 5 5
-101_3 1340_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 1340_2 1.400000 0.894427 -2.302185 0.476644 5 5
-101_3 1340_9 1.400000 0.894427 -0.636142 1.267018 5 5
-101_3 1341_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-101_3 1341_11 1.400000 0.894427 -2.302185 1.712469 5 5
-101_3 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-101_3 1341_13 1.400000 0.894427 -1.469163 1.023277 5 5
-101_3 1341_14 1.400000 0.894427 -1.469163 1.023277 5 5
-101_3 1341_2 1.400000 0.894427 -1.469163 1.023277 5 5
-101_3 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-101_3 1344_12 1.400000 0.894427 -2.302185 0.476644 5 5
-101_3 1344_13 1.400000 0.894427 -2.302185 0.476644 5 5
-101_3 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-105_1 105_2 1.400000 0.894427 0.105472 0.511563 5 5
-105_1 105_3 1.400000 0.894427 0.105472 0.511563 5 5
-105_1 112_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 112_2 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 112_3 1.400000 0.894427 -0.219631 1.712469 5 5
-105_1 117_1 1.400000 0.894427 -1.260908 -0.397216 5 5
-105_1 117_2 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 117_3 1.400000 0.894427 -1.260908 -0.397216 5 5
-105_1 12_1 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 12_2 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 12_3 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 13_1 1.400000 0.894427 -0.219631 1.712469 5 5
-105_1 13_2 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 13_3 1.400000 0.894427 -1.260908 -0.397216 5 5
-105_1 1334_1 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1334_10 1.400000 0.894427 -0.219631 1.712469 5 5
-105_1 1334_11 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1334_12 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 1334_13 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1334_2 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 1340_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1340_10 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1340_11 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1340_12 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1340_2 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1340_9 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 1341_1 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1341_11 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1341_12 1.400000 0.894427 -0.219631 1.712469 5 5
-105_1 1341_13 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1341_14 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1341_2 1.400000 0.894427 -0.219631 -0.070847 5 5
-105_1 1344_1 1.400000 0.894427 -1.260908 1.532838 5 5
-105_1 1344_12 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1344_13 1.400000 0.894427 0.821646 -0.397216 5 5
-105_1 1345_12 1.400000 0.894427 -0.219631 1.712469 5 5
-105_2 105_3 1.400000 0.894427 1.883560 -2.485480 5 5
-105_2 112_1 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 112_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 112_3 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 117_1 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 117_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 117_3 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 12_1 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 12_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 12_3 1.400000 0.894427 1.862924 -2.506901 5 5
-105_2 13_1 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 13_2 1.400000 0.894427 0.821646 -0.397216 5 5
-105_2 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1334_1 1.400000 0.894427 1.862924 -2.506901 5 5
-105_2 1334_10 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1334_11 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1334_12 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1334_13 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1334_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1340_1 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1340_10 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1340_11 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1340_12 1.400000 0.894427 1.862924 -2.506901 5 5
-105_2 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1340_9 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1341_1 1.400000 0.894427 1.862924 -2.506901 5 5
-105_2 1341_11 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-105_2 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-105_2 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-105_2 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 112_1 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 112_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 112_3 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 117_1 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 117_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 117_3 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 12_1 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 12_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 12_3 1.400000 0.894427 1.862924 -2.506901 5 5
-105_3 13_1 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 13_2 1.400000 0.894427 0.821646 -0.397216 5 5
-105_3 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1334_1 1.400000 0.894427 1.862924 -2.506901 5 5
-105_3 1334_10 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1334_11 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1334_12 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1334_13 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1334_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1340_1 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1340_10 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1340_11 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1340_12 1.400000 0.894427 1.862924 -2.506901 5 5
-105_3 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1340_9 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1341_1 1.400000 0.894427 1.862924 -2.506901 5 5
-105_3 1341_11 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-105_3 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-105_3 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-105_3 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 112_2 1.400000 0.894427 0.354770 0.285726 5 5
-112_1 112_3 1.400000 0.894427 -0.642422 0.715736 5 5
-112_1 117_1 1.400000 0.894427 -0.636142 1.267018 5 5
-112_1 117_2 1.400000 0.894427 -0.636142 1.267018 5 5
-112_1 117_3 1.400000 0.894427 -0.636142 1.267018 5 5
-112_1 12_1 1.400000 0.894427 -0.636142 1.267018 5 5
-112_1 12_2 1.400000 0.894427 -0.636142 1.267018 5 5
-112_1 12_3 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 13_1 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 13_2 1.400000 0.894427 1.862924 -2.506901 5 5
-112_1 13_3 1.400000 0.894427 -0.636142 1.267018 5 5
-112_1 1334_1 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1334_10 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 1334_11 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1334_12 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1334_13 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 1334_2 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1340_1 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 1340_10 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 1340_11 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 1340_12 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1340_2 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_1 1340_9 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1341_11 1.400000 0.894427 1.029902 -0.619941 5 5
-112_1 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-112_1 1341_13 1.400000 0.894427 1.862924 -2.506901 5 5
-112_1 1341_14 1.400000 0.894427 1.862924 -2.506901 5 5
-112_1 1341_2 1.400000 0.894427 1.862924 -2.506901 5 5
-112_1 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-112_1 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_1 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_1 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 112_3 1.400000 0.894427 -1.140216 1.652064 5 5
-112_2 117_1 1.400000 0.894427 -1.469163 1.023277 5 5
-112_2 117_2 1.400000 0.894427 -1.469163 2.115187 5 5
-112_2 117_3 1.400000 0.894427 -1.469163 1.023277 5 5
-112_2 12_1 1.400000 0.894427 -1.469163 2.115187 5 5
-112_2 12_2 1.400000 0.894427 -1.469163 2.115187 5 5
-112_2 12_3 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 13_1 1.400000 0.894427 -0.636142 1.267018 5 5
-112_2 13_2 1.400000 0.894427 0.821646 -0.397216 5 5
-112_2 13_3 1.400000 0.894427 -1.469163 1.023277 5 5
-112_2 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 1334_10 1.400000 0.894427 -0.636142 1.267018 5 5
-112_2 1334_11 1.400000 0.894427 1.862924 -2.506901 5 5
-112_2 1334_12 1.400000 0.894427 0.196880 1.267018 5 5
-112_2 1334_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_2 1334_2 1.400000 0.894427 0.196880 1.267018 5 5
-112_2 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_2 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_2 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_2 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 1340_9 1.400000 0.894427 0.196880 1.267018 5 5
-112_2 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 1341_11 1.400000 0.894427 1.862924 -2.506901 5 5
-112_2 1341_12 1.400000 0.894427 -0.636142 1.267018 5 5
-112_2 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-112_2 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-112_2 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-112_2 1344_1 1.400000 0.894427 -1.469163 2.115187 5 5
-112_2 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-112_2 1345_12 1.400000 0.894427 -0.636142 1.267018 5 5
-112_3 117_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_3 117_2 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 117_3 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_3 12_1 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 12_2 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 12_3 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 13_1 1.400000 0.894427 1.862924 -2.506901 5 5
-112_3 13_2 1.400000 0.894427 -0.219631 -0.070847 5 5
-112_3 13_3 1.400000 0.894427 -0.636142 -0.195857 5 5
-112_3 1334_1 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 1334_10 1.400000 0.894427 1.862924 -2.506901 5 5
-112_3 1334_11 1.400000 0.894427 -0.636142 1.267018 5 5
-112_3 1334_12 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 1334_13 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1334_2 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 1340_1 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1340_10 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1340_11 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1340_12 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 1340_2 1.400000 0.894427 -0.636142 1.267018 5 5
-112_3 1340_9 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-112_3 1341_11 1.400000 0.894427 -0.636142 1.267018 5 5
-112_3 1341_12 1.400000 0.894427 1.862924 -2.506901 5 5
-112_3 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-112_3 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-112_3 1344_12 1.400000 0.894427 -0.636142 1.267018 5 5
-112_3 1344_13 1.400000 0.894427 -0.636142 1.267018 5 5
-112_3 1345_12 1.400000 0.894427 1.862924 -2.506901 5 5
-117_1 117_2 1.400000 0.894427 -0.642422 0.715736 5 5
-117_1 117_3 1.400000 0.894427 1.351962 -1.627597 5 5
-117_1 12_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 12_2 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 12_3 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 13_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_1 13_2 1.400000 0.894427 -1.260908 1.532838 5 5
-117_1 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1334_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_1 1334_11 1.400000 0.894427 -1.469163 1.023277 5 5
-117_1 1334_12 1.400000 0.894427 -1.469163 1.023277 5 5
-117_1 1334_13 1.400000 0.894427 1.029902 -0.619941 5 5
-117_1 1334_2 1.400000 0.894427 -1.469163 1.023277 5 5
-117_1 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_1 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_1 1340_11 1.400000 0.894427 1.029902 -0.619941 5 5
-117_1 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1340_9 1.400000 0.894427 -1.469163 1.023277 5 5
-117_1 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1341_11 1.400000 0.894427 -1.469163 1.023277 5 5
-117_1 1341_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_1 1341_13 1.400000 0.894427 -0.636142 1.267018 5 5
-117_1 1341_14 1.400000 0.894427 -0.636142 1.267018 5 5
-117_1 1341_2 1.400000 0.894427 -0.636142 1.267018 5 5
-117_1 1344_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-117_1 1345_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_2 117_3 1.400000 0.894427 -0.132290 0.048238 5 5
-117_2 12_1 1.400000 0.894427 1.862924 -2.506901 5 5
-117_2 12_2 1.400000 0.894427 1.862924 -2.506901 5 5
-117_2 12_3 1.400000 0.894427 0.196880 -0.195857 5 5
-117_2 13_1 1.400000 0.894427 1.029902 -0.619941 5 5
-117_2 13_2 1.400000 0.894427 -1.260908 1.532838 5 5
-117_2 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-117_2 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_2 1334_10 1.400000 0.894427 1.029902 -0.619941 5 5
-117_2 1334_11 1.400000 0.894427 -1.469163 2.115187 5 5
-117_2 1334_12 1.400000 0.894427 0.196880 1.267018 5 5
-117_2 1334_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_2 1334_2 1.400000 0.894427 0.196880 1.267018 5 5
-117_2 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_2 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_2 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_2 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-117_2 1340_2 1.400000 0.894427 -1.469163 1.023277 5 5
-117_2 1340_9 1.400000 0.894427 0.196880 1.267018 5 5
-117_2 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_2 1341_11 1.400000 0.894427 -1.469163 2.115187 5 5
-117_2 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-117_2 1341_13 1.400000 0.894427 -0.636142 1.267018 5 5
-117_2 1341_14 1.400000 0.894427 -0.636142 1.267018 5 5
-117_2 1341_2 1.400000 0.894427 -0.636142 1.267018 5 5
-117_2 1344_1 1.400000 0.894427 -1.469163 2.115187 5 5
-117_2 1344_12 1.400000 0.894427 -1.469163 1.023277 5 5
-117_2 1344_13 1.400000 0.894427 -1.469163 1.023277 5 5
-117_2 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-117_3 12_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 12_2 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 12_3 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 13_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_3 13_2 1.400000 0.894427 -1.260908 1.532838 5 5
-117_3 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1334_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_3 1334_11 1.400000 0.894427 -1.469163 1.023277 5 5
-117_3 1334_12 1.400000 0.894427 -1.469163 1.023277 5 5
-117_3 1334_13 1.400000 0.894427 1.029902 -0.619941 5 5
-117_3 1334_2 1.400000 0.894427 -1.469163 1.023277 5 5
-117_3 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_3 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_3 1340_11 1.400000 0.894427 1.029902 -0.619941 5 5
-117_3 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1340_9 1.400000 0.894427 -1.469163 1.023277 5 5
-117_3 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1341_11 1.400000 0.894427 -1.469163 1.023277 5 5
-117_3 1341_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-117_3 1341_13 1.400000 0.894427 -0.636142 1.267018 5 5
-117_3 1341_14 1.400000 0.894427 -0.636142 1.267018 5 5
-117_3 1341_2 1.400000 0.894427 -0.636142 1.267018 5 5
-117_3 1344_1 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-117_3 1345_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_1 12_2 1.400000 0.894427 1.351962 -1.627597 5 5
-12_1 12_3 1.400000 0.894427 -0.642422 0.715736 5 5
-12_1 13_1 1.400000 0.894427 1.029902 -0.619941 5 5
-12_1 13_2 1.400000 0.894427 -1.260908 1.532838 5 5
-12_1 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-12_1 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-12_1 1334_10 1.400000 0.894427 1.029902 -0.619941 5 5
-12_1 1334_11 1.400000 0.894427 -1.469163 2.115187 5 5
-12_1 1334_12 1.400000 0.894427 0.196880 1.267018 5 5
-12_1 1334_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_1 1334_2 1.400000 0.894427 0.196880 1.267018 5 5
-12_1 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_1 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_1 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_1 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-12_1 1340_2 1.400000 0.894427 -1.469163 1.023277 5 5
-12_1 1340_9 1.400000 0.894427 0.196880 1.267018 5 5
-12_1 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-12_1 1341_11 1.400000 0.894427 -1.469163 2.115187 5 5
-12_1 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-12_1 1341_13 1.400000 0.894427 -0.636142 1.267018 5 5
-12_1 1341_14 1.400000 0.894427 -0.636142 1.267018 5 5
-12_1 1341_2 1.400000 0.894427 -0.636142 1.267018 5 5
-12_1 1344_1 1.400000 0.894427 -1.469163 2.115187 5 5
-12_1 1344_12 1.400000 0.894427 -1.469163 1.023277 5 5
-12_1 1344_13 1.400000 0.894427 -1.469163 1.023277 5 5
-12_1 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-12_2 12_3 1.400000 0.894427 -0.132290 0.048238 5 5
-12_2 13_1 1.400000 0.894427 1.029902 -0.619941 5 5
-12_2 13_2 1.400000 0.894427 -1.260908 1.532838 5 5
-12_2 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-12_2 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-12_2 1334_10 1.400000 0.894427 1.029902 -0.619941 5 5
-12_2 1334_11 1.400000 0.894427 -1.469163 2.115187 5 5
-12_2 1334_12 1.400000 0.894427 0.196880 1.267018 5 5
-12_2 1334_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_2 1334_2 1.400000 0.894427 0.196880 1.267018 5 5
-12_2 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_2 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_2 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-12_2 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-12_2 1340_2 1.400000 0.894427 -1.469163 1.023277 5 5
-12_2 1340_9 1.400000 0.894427 0.196880 1.267018 5 5
-12_2 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-12_2 1341_11 1.400000 0.894427 -1.469163 2.115187 5 5
-12_2 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-12_2 1341_13 1.400000 0.894427 -0.636142 1.267018 5 5
-12_2 1341_14 1.400000 0.894427 -0.636142 1.267018 5 5
-12_2 1341_2 1.400000 0.894427 -0.636142 1.267018 5 5
-12_2 1344_1 1.400000 0.894427 -1.469163 2.115187 5 5
-12_2 1344_12 1.400000 0.894427 -1.469163 1.023277 5 5
-12_2 1344_13 1.400000 0.894427 -1.469163 1.023277 5 5
-12_2 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 13_1 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 13_2 1.400000 0.894427 0.821646 -0.397216 5 5
-12_3 13_3 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1334_1 1.400000 0.894427 1.862924 -2.506901 5 5
-12_3 1334_10 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1334_11 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1334_12 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1334_13 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1334_2 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1340_1 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1340_10 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1340_11 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1340_12 1.400000 0.894427 1.862924 -2.506901 5 5
-12_3 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1340_9 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1341_1 1.400000 0.894427 1.862924 -2.506901 5 5
-12_3 1341_11 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-12_3 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-12_3 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-12_3 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 13_2 1.400000 0.894427 -1.141018 0.842492 5 5
-13_1 13_3 1.400000 0.894427 -1.639614 0.715736 5 5
-13_1 1334_1 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 1334_10 1.400000 0.894427 1.862924 -2.506901 5 5
-13_1 1334_11 1.400000 0.894427 -0.636142 1.267018 5 5
-13_1 1334_12 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 1334_13 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1334_2 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 1340_1 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1340_10 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1340_11 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1340_12 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 1340_2 1.400000 0.894427 -0.636142 1.267018 5 5
-13_1 1340_9 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-13_1 1341_11 1.400000 0.894427 -0.636142 1.267018 5 5
-13_1 1341_12 1.400000 0.894427 1.862924 -2.506901 5 5
-13_1 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-13_1 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-13_1 1344_12 1.400000 0.894427 -0.636142 1.267018 5 5
-13_1 1344_13 1.400000 0.894427 -0.636142 1.267018 5 5
-13_1 1345_12 1.400000 0.894427 1.862924 -2.506901 5 5
-13_2 13_3 1.400000 0.894427 -1.896159 1.943496 5 5
-13_2 1334_1 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1334_10 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_2 1334_11 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1334_12 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1334_13 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_2 1334_2 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1340_1 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_2 1340_10 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_2 1340_11 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_2 1340_12 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1340_2 1.400000 0.894427 -1.260908 -0.397216 5 5
-13_2 1340_9 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1341_1 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1341_11 1.400000 0.894427 0.821646 -0.397216 5 5
-13_2 1341_12 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_2 1341_13 1.400000 0.894427 1.862924 -2.506901 5 5
-13_2 1341_14 1.400000 0.894427 1.862924 -2.506901 5 5
-13_2 1341_2 1.400000 0.894427 1.862924 -2.506901 5 5
-13_2 1344_1 1.400000 0.894427 -3.343462 1.532838 5 5
-13_2 1344_12 1.400000 0.894427 -1.260908 -0.397216 5 5
-13_2 1344_13 1.400000 0.894427 -1.260908 -0.397216 5 5
-13_2 1345_12 1.400000 0.894427 -0.219631 -0.070847 5 5
-13_3 1334_1 1.400000 0.894427 0.196880 -0.195857 5 5
-13_3 1334_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-13_3 1334_11 1.400000 0.894427 -1.469163 1.023277 5 5
-13_3 1334_12 1.400000 0.894427 -1.469163 1.023277 5 5
-13_3 1334_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-13_3 1334_2 1.400000 0.894427 -1.469163 1.023277 5 5
-13_3 1340_1 1.400000 0.894427 1.029902 -0.619941 5 5
-13_3 1340_10 1.400000 0.894427 1.029902 -0.619941 5 5
-13_3 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-13_3 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-13_3 1340_2 1.400000 0.894427 -1.469163 -0.619941 5 5
-13_3 1340_9 1.400000 0.894427 -1.469163 1.023277 5 5
-13_3 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-13_3 1341_11 1.400000 0.894427 -1.469163 1.023277 5 5
-13_3 1341_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-13_3 1341_13 1.400000 0.894427 -0.636142 1.267018 5 5
-13_3 1341_14 1.400000 0.894427 -0.636142 1.267018 5 5
-13_3 1341_2 1.400000 0.894427 -0.636142 1.267018 5 5
-13_3 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-13_3 1344_12 1.400000 0.894427 -1.469163 -0.619941 5 5
-13_3 1344_13 1.400000 0.894427 -1.469163 -0.619941 5 5
-13_3 1345_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_1 1334_10 1.400000 0.894427 0.354770 0.285726 5 5
-1334_1 1334_11 1.400000 0.894427 -0.642422 0.715736 5 5
-1334_1 1334_12 1.400000 0.894427 -0.132290 0.048238 5 5
-1334_1 1334_13 1.400000 0.894427 0.875635 -0.416708 5 5
-1334_1 1334_2 1.400000 0.894427 -0.132290 0.048238 5 5
-1334_1 1340_1 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1340_10 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1340_11 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1340_12 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_1 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_1 1340_9 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_1 1341_1 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_1 1341_11 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_1 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_1 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_1 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_1 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_1 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_10 1334_11 1.400000 0.894427 -1.140216 1.652064 5 5
-1334_10 1334_12 1.400000 0.894427 0.875635 -0.416708 5 5
-1334_10 1334_13 1.400000 0.894427 -0.132290 0.048238 5 5
-1334_10 1334_2 1.400000 0.894427 0.875635 -0.416708 5 5
-1334_10 1340_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_10 1340_10 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_10 1340_11 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_10 1340_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_10 1340_2 1.400000 0.894427 -0.636142 1.267018 5 5
-1334_10 1340_9 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_10 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_10 1341_11 1.400000 0.894427 -0.636142 1.267018 5 5
-1334_10 1341_12 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_10 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_10 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_10 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_10 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-1334_10 1344_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1334_10 1344_13 1.400000 0.894427 -0.636142 1.267018 5 5
-1334_10 1345_12 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_11 1334_12 1.400000 0.894427 -0.132290 1.652064 5 5
-1334_11 1334_13 1.400000 0.894427 -1.140216 0.048238 5 5
-1334_11 1334_2 1.400000 0.894427 -0.132290 1.652064 5 5
-1334_11 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_11 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_11 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_11 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_11 1340_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_11 1340_9 1.400000 0.894427 0.196880 1.267018 5 5
-1334_11 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_11 1341_11 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_11 1341_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1334_11 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_11 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_11 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_11 1344_1 1.400000 0.894427 -1.469163 2.115187 5 5
-1334_11 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_11 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_11 1345_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1334_12 1334_13 1.400000 0.894427 -1.140216 0.048238 5 5
-1334_12 1334_2 1.400000 0.894427 1.351962 -1.627597 5 5
-1334_12 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_12 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_12 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_12 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_12 1340_2 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_12 1340_9 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_12 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_12 1341_11 1.400000 0.894427 0.196880 1.267018 5 5
-1334_12 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_12 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_12 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_12 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_12 1344_1 1.400000 0.894427 -3.135207 2.115187 5 5
-1334_12 1344_12 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_12 1344_13 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_12 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_13 1334_2 1.400000 0.894427 -1.639614 0.715736 5 5
-1334_13 1340_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_13 1340_10 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_13 1340_11 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_13 1340_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_13 1340_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_13 1340_9 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_13 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_13 1341_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_13 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_13 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_13 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_13 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_13 1344_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_13 1344_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_13 1344_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_13 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_2 1340_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_2 1340_10 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_2 1340_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1334_2 1340_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_2 1340_2 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_2 1340_9 1.400000 0.894427 1.862924 -2.506901 5 5
-1334_2 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1334_2 1341_11 1.400000 0.894427 0.196880 1.267018 5 5
-1334_2 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_2 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_2 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_2 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1334_2 1344_1 1.400000 0.894427 -3.135207 2.115187 5 5
-1334_2 1344_12 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_2 1344_13 1.400000 0.894427 -1.469163 1.023277 5 5
-1334_2 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_1 1340_10 1.400000 0.894427 1.351962 -1.627597 5 5
-1340_1 1340_11 1.400000 0.894427 -0.132290 0.048238 5 5
-1340_1 1340_12 1.400000 0.894427 0.875635 -0.416708 5 5
-1340_1 1340_2 1.400000 0.894427 -1.140216 0.048238 5 5
-1340_1 1340_9 1.400000 0.894427 -1.639614 0.715736 5 5
-1340_1 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_1 1341_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_1 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_1 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_1 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_1 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_1 1344_1 1.400000 0.894427 -2.302185 0.476644 5 5
-1340_1 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_1 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_1 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_10 1340_11 1.400000 0.894427 -0.132290 0.048238 5 5
-1340_10 1340_12 1.400000 0.894427 0.875635 -0.416708 5 5
-1340_10 1340_2 1.400000 0.894427 -1.140216 0.048238 5 5
-1340_10 1340_9 1.400000 0.894427 -1.140216 0.048238 5 5
-1340_10 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_10 1341_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_10 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_10 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_10 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_10 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_10 1344_1 1.400000 0.894427 -2.302185 0.476644 5 5
-1340_10 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_10 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_10 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_11 1340_12 1.400000 0.894427 0.875635 -0.416708 5 5
-1340_11 1340_2 1.400000 0.894427 0.354770 0.285726 5 5
-1340_11 1340_9 1.400000 0.894427 -1.140216 0.048238 5 5
-1340_11 1341_1 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_11 1341_11 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_11 1341_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_11 1341_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_11 1341_14 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_11 1341_2 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_11 1344_1 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_11 1344_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_11 1344_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_11 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_12 1340_2 1.400000 0.894427 -0.642422 0.715736 5 5
-1340_12 1340_9 1.400000 0.894427 -0.132290 0.048238 5 5
-1340_12 1341_1 1.400000 0.894427 1.862924 -2.506901 5 5
-1340_12 1341_11 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_12 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_12 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_12 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_12 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_12 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-1340_12 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_12 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_12 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_2 1340_9 1.400000 0.894427 -2.148141 1.384838 5 5
-1340_2 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_2 1341_11 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_2 1341_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1340_2 1341_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_2 1341_14 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_2 1341_2 1.400000 0.894427 -0.636142 -0.195857 5 5
-1340_2 1344_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_2 1344_12 1.400000 0.894427 1.862924 -2.506901 5 5
-1340_2 1344_13 1.400000 0.894427 1.862924 -2.506901 5 5
-1340_2 1345_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1340_9 1341_1 1.400000 0.894427 0.196880 -0.195857 5 5
-1340_9 1341_11 1.400000 0.894427 0.196880 1.267018 5 5
-1340_9 1341_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_9 1341_13 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_9 1341_14 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_9 1341_2 1.400000 0.894427 1.029902 -0.619941 5 5
-1340_9 1344_1 1.400000 0.894427 -3.135207 2.115187 5 5
-1340_9 1344_12 1.400000 0.894427 -1.469163 1.023277 5 5
-1340_9 1344_13 1.400000 0.894427 -1.469163 1.023277 5 5
-1340_9 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1341_1 1341_11 1.400000 0.894427 -0.642422 0.715736 5 5
-1341_1 1341_12 1.400000 0.894427 0.354770 0.285726 5 5
-1341_1 1341_13 1.400000 0.894427 0.875635 -0.416708 5 5
-1341_1 1341_14 1.400000 0.894427 0.875635 -0.416708 5 5
-1341_1 1341_2 1.400000 0.894427 0.875635 -0.416708 5 5
-1341_1 1344_1 1.400000 0.894427 -1.469163 1.023277 5 5
-1341_1 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1341_1 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1341_1 1345_12 1.400000 0.894427 1.029902 -0.619941 5 5
-1341_11 1341_12 1.400000 0.894427 -1.140216 1.652064 5 5
-1341_11 1341_13 1.400000 0.894427 0.875635 -0.416708 5 5
-1341_11 1341_14 1.400000 0.894427 0.875635 -0.416708 5 5
-1341_11 1341_2 1.400000 0.894427 0.875635 -0.416708 5 5
-1341_11 1344_1 1.400000 0.894427 -1.469163 2.115187 5 5
-1341_11 1344_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1341_11 1344_13 1.400000 0.894427 0.196880 -0.195857 5 5
-1341_11 1345_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1341_12 1341_13 1.400000 0.894427 -0.132290 0.048238 5 5
-1341_12 1341_14 1.400000 0.894427 -0.132290 0.048238 5 5
-1341_12 1341_2 1.400000 0.894427 -0.132290 0.048238 5 5
-1341_12 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-1341_12 1344_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1341_12 1344_13 1.400000 0.894427 -0.636142 1.267018 5 5
-1341_12 1345_12 1.400000 0.894427 1.862924 -2.506901 5 5
-1341_13 1341_14 1.400000 0.894427 1.883560 -2.485480 5 5
-1341_13 1341_2 1.400000 0.894427 1.351962 -1.627597 5 5
-1341_13 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-1341_13 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-1341_13 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-1341_13 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1341_14 1341_2 1.400000 0.894427 1.351962 -1.627597 5 5
-1341_14 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-1341_14 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-1341_14 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-1341_14 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1341_2 1344_1 1.400000 0.894427 -2.302185 1.712469 5 5
-1341_2 1344_12 1.400000 0.894427 -0.636142 -0.195857 5 5
-1341_2 1344_13 1.400000 0.894427 -0.636142 -0.195857 5 5
-1341_2 1345_12 1.400000 0.894427 0.196880 -0.195857 5 5
-1344_1 1344_12 1.400000 0.894427 -0.642422 0.715735 5 5
-1344_1 1344_13 1.400000 0.894427 -0.642422 0.715735 5 5
-1344_1 1345_12 1.400000 0.894427 -2.302185 1.712469 5 5
-1344_12 1344_13 1.400000 0.894427 1.883560 -2.485480 5 5
-1344_12 1345_12 1.400000 0.894427 -0.636142 1.267018 5 5
-1344_13 1345_12 1.400000 0.894427 -0.636142 1.267018 5 5
+fid1_iid1 fid2_iid2 mean sdev zmean zsdev geno relcode pid1 mid1 pid2 mid2
+101_1 101_2 1.200000 0.577350 1.693329 -2.011511 25 parentchild 3 2 0 0
+101_1 101_3 1.200000 0.577350 -0.717628 0.612530 25 parentchild 3 2 0 0
+101_1 105_1 1.200000 0.577350 0.670010 -0.504142 25 unrelated 3 2 3 2
+101_1 105_2 1.200000 0.577350 0.870921 -0.566551 25 unrelated 3 2 0 0
+101_1 105_3 1.200000 0.577350 1.071833 -0.655899 25 unrelated 3 2 0 0
+101_1 112_1 1.200000 0.577350 -0.736371 0.779435 25 unrelated 3 2 3 2
+101_1 112_2 1.200000 0.577350 -0.937282 0.679102 25 unrelated 3 2 0 0
+101_1 112_3 1.200000 0.577350 -0.535459 -0.655899 25 unrelated 3 2 0 0
+101_1 117_1 1.200000 0.577350 0.067275 0.077804 25 unrelated 3 2 3 2
+101_1 117_2 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 0 0
+101_1 117_3 1.200000 0.577350 0.469098 0.077804 25 unrelated 3 2 0 0
+101_1 12_1 1.200000 0.577350 0.469098 -0.467230 25 unrelated 3 2 3 2
+101_1 12_2 1.200000 0.577350 0.469098 -0.467230 25 unrelated 3 2 0 0
+101_1 12_3 1.200000 0.577350 1.071833 -0.655899 25 unrelated 3 2 0 0
+101_1 13_1 1.200000 0.577350 -0.133637 -0.504142 25 unrelated 3 2 3 2
+101_1 13_2 1.200000 0.577350 -0.255930 0.042025 25 unrelated 3 2 0 0
+101_1 13_3 1.200000 0.577350 1.071832 -0.655899 25 unrelated 3 2 0 0
+101_1 1334_1 1.200000 0.577350 -0.133636 0.045908 25 unrelated 3 2 10 11
+101_1 1334_10 1.200000 0.577350 -0.334548 -0.566551 25 unrelated 3 2 0 0
+101_1 1334_11 1.200000 0.577350 -0.937282 0.679102 25 unrelated 3 2 0 0
+101_1 1334_12 1.200000 0.577350 -0.334548 -0.007823 25 unrelated 3 2 0 0
+101_1 1334_13 1.200000 0.577350 -0.133636 -0.504142 25 unrelated 3 2 0 0
+101_1 1334_2 1.200000 0.577350 -0.736370 1.194476 25 unrelated 3 2 12 13
+101_1 1340_1 1.200000 0.577350 -0.535459 -0.084293 25 unrelated 3 2 9 10
+101_1 1340_10 1.200000 0.577350 -0.535459 -0.084293 25 unrelated 3 2 0 0
+101_1 1340_11 1.200000 0.577350 -0.133636 -0.504142 25 unrelated 3 2 0 0
+101_1 1340_12 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 0 0
+101_1 1340_2 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 11 12
+101_1 1340_9 1.200000 0.577350 -2.142751 0.999931 25 unrelated 3 2 0 0
+101_1 1341_1 1.200000 0.577350 0.163363 -0.455013 25 unrelated 3 2 11 12
+101_1 1341_11 1.200000 0.577350 -0.334549 0.481281 25 unrelated 3 2 0 0
+101_1 1341_12 1.200000 0.577350 -0.937282 -0.925605 25 unrelated 3 2 0 0
+101_1 1341_13 1.200000 0.577350 -0.736371 0.779435 25 unrelated 3 2 0 0
+101_1 1341_14 1.200000 0.577350 -0.736371 0.779435 25 unrelated 3 2 0 0
+101_1 1341_2 1.200000 0.577350 -0.736371 0.779435 25 unrelated 3 2 13 14
+101_1 1344_1 1.200000 0.577350 -0.535459 0.413356 25 unrelated 3 2 12 13
+101_1 1344_12 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 0 0
+101_1 1344_13 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 0 0
+101_1 1345_12 1.200000 0.577350 -0.736370 -0.774446 25 unrelated 3 2 0 0
+101_2 101_3 1.200000 0.577350 0.236040 -0.228179 25 parents 0 0 0 0
+101_2 105_1 1.200000 0.577350 0.670010 -0.504142 25 unrelated 0 0 3 2
+101_2 105_2 1.200000 0.577350 0.943250 -0.598443 25 unrelated 0 0 0 0
+101_2 105_3 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+101_2 112_1 1.200000 0.577350 -0.599751 0.780517 25 unrelated 0 0 3 2
+101_2 112_2 1.200000 0.577350 -0.792626 0.696771 25 unrelated 0 0 0 0
+101_2 112_3 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+101_2 117_1 1.200000 0.577350 0.171750 0.062100 25 unrelated 0 0 3 2
+101_2 117_2 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 0 0
+101_2 117_3 1.200000 0.577350 0.557499 0.042491 25 unrelated 0 0 0 0
+101_2 12_1 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 3 2
+101_2 12_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+101_2 12_3 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+101_2 13_1 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 3 2
+101_2 13_2 1.200000 0.577350 -0.255930 0.042025 25 unrelated 0 0 0 0
+101_2 13_3 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+101_2 1334_1 1.200000 0.577350 -0.021125 0.042491 25 unrelated 0 0 10 11
+101_2 1334_10 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 0 0 0 0
+101_2 1334_11 1.200000 0.577350 -0.792626 0.696771 25 unrelated 0 0 0 0
+101_2 1334_12 1.200000 0.577350 -0.214001 0.002982 25 unrelated 0 0 0 0
+101_2 1334_13 1.200000 0.577350 -0.021126 -0.483424 25 unrelated 0 0 0 0
+101_2 1334_2 1.200000 0.577350 -0.599751 1.178851 25 unrelated 0 0 12 13
+101_2 1340_1 1.200000 0.577350 -0.406876 -0.057030 25 unrelated 0 0 9 10
+101_2 1340_10 1.200000 0.577350 -0.406876 -0.057030 25 unrelated 0 0 0 0
+101_2 1340_11 1.200000 0.577350 -0.021126 -0.483424 25 unrelated 0 0 0 0
+101_2 1340_12 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+101_2 1340_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 11 12
+101_2 1340_9 1.200000 0.577350 -1.949876 1.086115 25 unrelated 0 0 0 0
+101_2 1341_1 1.200000 0.577350 0.268187 -0.455013 25 unrelated 0 0 11 12
+101_2 1341_11 1.200000 0.577350 -0.214002 0.471641 25 unrelated 0 0 0 0
+101_2 1341_12 1.200000 0.577350 -0.792626 -0.816040 25 unrelated 0 0 0 0
+101_2 1341_13 1.200000 0.577350 -0.599751 0.780517 25 unrelated 0 0 0 0
+101_2 1341_14 1.200000 0.577350 -0.599751 0.780517 25 unrelated 0 0 0 0
+101_2 1341_2 1.200000 0.577350 -0.599751 0.780517 25 unrelated 0 0 13 14
+101_2 1344_1 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 12 13
+101_2 1344_12 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+101_2 1344_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+101_2 1345_12 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 0 0 0 0
+101_3 105_1 1.200000 0.577350 -1.540017 1.879362 25 unrelated 0 0 3 2
+101_3 105_2 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+101_3 105_3 1.200000 0.577350 -0.792627 -0.242861 25 unrelated 0 0 0 0
+101_3 112_1 1.200000 0.577350 -0.599750 0.780517 25 unrelated 0 0 3 2
+101_3 112_2 1.200000 0.577350 -0.792626 2.157894 25 unrelated 0 0 0 0
+101_3 112_3 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 0 0
+101_3 117_1 1.200000 0.577350 -0.599751 1.178851 25 unrelated 0 0 3 2
+101_3 117_2 1.200000 0.577350 1.329000 -0.816040 25 unrelated 0 0 0 0
+101_3 117_3 1.200000 0.577350 0.171750 0.062100 25 unrelated 0 0 0 0
+101_3 12_1 1.200000 0.577350 2.486250 -2.592124 25 unrelated 0 0 3 2
+101_3 12_2 1.200000 0.577350 2.486250 -2.592124 25 unrelated 0 0 0 0
+101_3 12_3 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+101_3 13_1 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 3 2
+101_3 13_2 1.200000 0.577350 -0.255930 0.546459 25 unrelated 0 0 0 0
+101_3 13_3 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+101_3 1334_1 1.200000 0.577350 -0.021126 -0.483424 25 unrelated 0 0 10 11
+101_3 1334_10 1.200000 0.577350 -0.599750 -0.693367 25 unrelated 0 0 0 0
+101_3 1334_11 1.200000 0.577350 -0.792626 2.157894 25 unrelated 0 0 0 0
+101_3 1334_12 1.200000 0.577350 -0.599751 0.345553 25 unrelated 0 0 0 0
+101_3 1334_13 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+101_3 1334_2 1.200000 0.577350 -0.985501 1.388993 25 unrelated 0 0 12 13
+101_3 1340_1 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 9 10
+101_3 1340_10 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+101_3 1340_11 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+101_3 1340_12 1.200000 0.577350 -0.599750 -0.693367 25 unrelated 0 0 0 0
+101_3 1340_2 1.200000 0.577350 -0.599751 0.345552 25 unrelated 0 0 11 12
+101_3 1340_9 1.200000 0.577350 -0.406876 1.948414 25 unrelated 0 0 0 0
+101_3 1341_1 1.200000 0.577350 -1.339106 0.413355 25 unrelated 0 0 11 12
+101_3 1341_11 1.200000 0.577350 -1.371251 1.881413 25 unrelated 0 0 0 0
+101_3 1341_12 1.200000 0.577350 -1.564126 0.158748 25 unrelated 0 0 0 0
+101_3 1341_13 1.200000 0.577350 -0.599750 0.780517 25 unrelated 0 0 0 0
+101_3 1341_14 1.200000 0.577350 -0.599750 0.780517 25 unrelated 0 0 0 0
+101_3 1341_2 1.200000 0.577350 -0.599750 0.780517 25 unrelated 0 0 13 14
+101_3 1344_1 1.200000 0.577350 -0.792626 2.157893 25 unrelated 0 0 12 13
+101_3 1344_12 1.200000 0.577350 -0.599751 0.345552 25 unrelated 0 0 0 0
+101_3 1344_13 1.200000 0.577350 -0.599751 0.345552 25 unrelated 0 0 0 0
+101_3 1345_12 1.200000 0.577350 -1.371251 0.327238 25 unrelated 0 0 0 0
+105_1 105_2 1.200000 0.577350 -1.155984 0.612530 25 parentchild 3 2 0 0
+105_1 105_3 1.200000 0.577350 -0.936806 0.621689 25 parentchild 3 2 0 0
+105_1 112_1 1.200000 0.577350 -1.540017 1.127651 25 unrelated 3 2 3 2
+105_1 112_2 1.200000 0.577350 -0.133636 1.738452 25 unrelated 3 2 0 0
+105_1 112_3 1.200000 0.577350 -1.339105 0.859974 25 unrelated 3 2 0 0
+105_1 117_1 1.200000 0.577350 0.067275 0.991299 25 unrelated 3 2 3 2
+105_1 117_2 1.200000 0.577350 -1.138194 0.991299 25 unrelated 3 2 0 0
+105_1 117_3 1.200000 0.577350 -0.736371 0.779434 25 unrelated 3 2 0 0
+105_1 12_1 1.200000 0.577350 -1.540017 1.879362 25 unrelated 3 2 3 2
+105_1 12_2 1.200000 0.577350 -1.540017 1.879362 25 unrelated 3 2 0 0
+105_1 12_3 1.200000 0.577350 -0.535459 0.859974 25 unrelated 3 2 0 0
+105_1 13_1 1.200000 0.577350 -1.740928 1.738452 25 unrelated 3 2 3 2
+105_1 13_2 1.200000 0.577350 -1.094517 0.648831 25 unrelated 3 2 0 0
+105_1 13_3 1.200000 0.577350 -0.937282 0.679103 25 unrelated 3 2 0 0
+105_1 1334_1 1.200000 0.577350 -0.937283 1.102364 25 unrelated 3 2 10 11
+105_1 1334_10 1.200000 0.577350 -1.138194 0.991300 25 unrelated 3 2 0 0
+105_1 1334_11 1.200000 0.577350 -0.133636 1.738452 25 unrelated 3 2 0 0
+105_1 1334_12 1.200000 0.577350 -1.138194 0.991300 25 unrelated 3 2 0 0
+105_1 1334_13 1.200000 0.577350 -0.937282 0.213207 25 unrelated 3 2 0 0
+105_1 1334_2 1.200000 0.577350 -1.540016 1.879362 25 unrelated 3 2 12 13
+105_1 1340_1 1.200000 0.577350 -1.339106 0.859974 25 unrelated 3 2 9 10
+105_1 1340_10 1.200000 0.577350 -1.339106 0.859974 25 unrelated 3 2 0 0
+105_1 1340_11 1.200000 0.577350 -0.937282 0.213207 25 unrelated 3 2 0 0
+105_1 1340_12 1.200000 0.577350 -0.334548 -0.566551 25 unrelated 3 2 0 0
+105_1 1340_2 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 11 12
+105_1 1340_9 1.200000 0.577350 -2.946397 2.337655 25 unrelated 3 2 0 0
+105_1 1341_1 1.200000 0.577350 0.582657 -0.481725 25 unrelated 3 2 11 12
+105_1 1341_11 1.200000 0.577350 0.469098 0.077804 25 unrelated 3 2 0 0
+105_1 1341_12 1.200000 0.577350 -0.535459 1.268636 25 unrelated 3 2 0 0
+105_1 1341_13 1.200000 0.577350 -1.540017 1.127651 25 unrelated 3 2 0 0
+105_1 1341_14 1.200000 0.577350 -1.540017 1.127651 25 unrelated 3 2 0 0
+105_1 1341_2 1.200000 0.577350 -1.540017 1.127651 25 unrelated 3 2 13 14
+105_1 1344_1 1.200000 0.577350 0.268187 1.397944 25 unrelated 3 2 12 13
+105_1 1344_12 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 0 0
+105_1 1344_13 1.200000 0.577350 0.469098 -0.467231 25 unrelated 3 2 0 0
+105_1 1345_12 1.200000 0.577350 -0.334549 1.325597 25 unrelated 3 2 0 0
+105_2 105_3 1.200000 0.577350 0.722984 0.122716 25 parents 0 0 0 0
+105_2 112_1 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 3 2
+105_2 112_2 1.200000 0.577350 -0.214001 0.471641 25 unrelated 0 0 0 0
+105_2 112_3 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+105_2 117_1 1.200000 0.577350 0.750376 -0.528970 25 unrelated 0 0 3 2
+105_2 117_2 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 0 0
+105_2 117_3 1.200000 0.577350 1.521875 -0.969867 25 unrelated 0 0 0 0
+105_2 12_1 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 3 2
+105_2 12_2 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 0 0
+105_2 12_3 1.200000 0.577350 0.943251 -0.598443 25 unrelated 0 0 0 0
+105_2 13_1 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 3 2
+105_2 13_2 1.200000 0.577350 0.163363 0.111360 25 unrelated 0 0 0 0
+105_2 13_3 1.200000 0.577350 0.943249 -0.598444 25 unrelated 0 0 0 0
+105_2 1334_1 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 10 11
+105_2 1334_10 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+105_2 1334_11 1.200000 0.577350 -0.214001 0.471641 25 unrelated 0 0 0 0
+105_2 1334_12 1.200000 0.577350 -0.021126 0.042491 25 unrelated 0 0 0 0
+105_2 1334_13 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+105_2 1334_2 1.200000 0.577350 -0.792626 1.101688 25 unrelated 0 0 12 13
+105_2 1340_1 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 9 10
+105_2 1340_10 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 0 0
+105_2 1340_11 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+105_2 1340_12 1.200000 0.577350 1.907625 -1.394354 25 unrelated 0 0 0 0
+105_2 1340_2 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 11 12
+105_2 1340_9 1.200000 0.577350 -1.371251 1.163511 25 unrelated 0 0 0 0
+105_2 1341_1 1.200000 0.577350 1.272743 -0.774447 25 unrelated 0 0 11 12
+105_2 1341_11 1.200000 0.577350 0.364624 0.524595 25 unrelated 0 0 0 0
+105_2 1341_12 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 0 0 0 0
+105_2 1341_13 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 0 0
+105_2 1341_14 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 0 0
+105_2 1341_2 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 13 14
+105_2 1344_1 1.200000 0.577350 0.171750 0.062100 25 unrelated 0 0 12 13
+105_2 1344_12 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 0 0
+105_2 1344_13 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 0 0
+105_2 1345_12 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+105_3 112_1 1.200000 0.577350 0.943249 -0.057030 25 unrelated 0 0 3 2
+105_3 112_2 1.200000 0.577350 -0.406876 -0.057030 25 unrelated 0 0 0 0
+105_3 112_3 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+105_3 117_1 1.200000 0.577350 -0.599751 -0.138508 25 unrelated 0 0 3 2
+105_3 117_2 1.200000 0.577350 -0.214002 0.002982 25 unrelated 0 0 0 0
+105_3 117_3 1.200000 0.577350 0.171749 0.062100 25 unrelated 0 0 0 0
+105_3 12_1 1.200000 0.577350 -0.599752 -0.138508 25 unrelated 0 0 3 2
+105_3 12_2 1.200000 0.577350 -0.599752 -0.138508 25 unrelated 0 0 0 0
+105_3 12_3 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 0 0
+105_3 13_1 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 3 2
+105_3 13_2 1.200000 0.577350 1.211597 -0.732039 25 unrelated 0 0 0 0
+105_3 13_3 1.200000 0.577350 -0.406876 -0.057030 25 unrelated 0 0 0 0
+105_3 1334_1 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 10 11
+105_3 1334_10 1.200000 0.577350 0.943250 -0.598444 25 unrelated 0 0 0 0
+105_3 1334_11 1.200000 0.577350 -0.406876 -0.057030 25 unrelated 0 0 0 0
+105_3 1334_12 1.200000 0.577350 1.329000 -0.816040 25 unrelated 0 0 0 0
+105_3 1334_13 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+105_3 1334_2 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 12 13
+105_3 1340_1 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 9 10
+105_3 1340_10 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+105_3 1340_11 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+105_3 1340_12 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+105_3 1340_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 11 12
+105_3 1340_9 1.200000 0.577350 -0.406876 -0.057030 25 unrelated 0 0 0 0
+105_3 1341_1 1.200000 0.577350 -0.133637 -0.504142 25 unrelated 0 0 11 12
+105_3 1341_11 1.200000 0.577350 0.171749 0.062100 25 unrelated 0 0 0 0
+105_3 1341_12 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 0 0
+105_3 1341_13 1.200000 0.577350 0.943249 -0.057030 25 unrelated 0 0 0 0
+105_3 1341_14 1.200000 0.577350 0.943249 -0.057030 25 unrelated 0 0 0 0
+105_3 1341_2 1.200000 0.577350 0.943249 -0.057030 25 unrelated 0 0 13 14
+105_3 1344_1 1.200000 0.577350 -1.178375 0.471641 25 unrelated 0 0 12 13
+105_3 1344_12 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+105_3 1344_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+105_3 1345_12 1.200000 0.577350 0.171749 -0.460872 25 unrelated 0 0 0 0
+112_1 112_2 1.200000 0.577350 0.220453 0.351043 25 parentchild 3 2 0 0
+112_1 112_3 1.200000 0.577350 -1.042010 0.617297 25 parentchild 3 2 0 0
+112_1 117_1 1.200000 0.577350 -1.564126 1.758837 25 unrelated 3 2 3 2
+112_1 117_2 1.200000 0.577350 -1.178376 0.471641 25 unrelated 3 2 0 0
+112_1 117_3 1.200000 0.577350 -0.792626 0.696771 25 unrelated 3 2 0 0
+112_1 12_1 1.200000 0.577350 -0.406876 0.846466 25 unrelated 3 2 3 2
+112_1 12_2 1.200000 0.577350 -0.406876 0.846466 25 unrelated 3 2 0 0
+112_1 12_3 1.200000 0.577350 0.943249 -0.598443 25 unrelated 3 2 0 0
+112_1 13_1 1.200000 0.577350 0.557499 0.042491 25 unrelated 3 2 3 2
+112_1 13_2 1.200000 0.577350 2.469478 -2.533568 25 unrelated 3 2 0 0
+112_1 13_3 1.200000 0.577350 -0.214002 1.284973 25 unrelated 3 2 0 0
+112_1 1334_1 1.200000 0.577350 0.943249 -0.598443 25 unrelated 3 2 10 11
+112_1 1334_10 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 3 2 0 0
+112_1 1334_11 1.200000 0.577350 1.328999 -0.816040 25 unrelated 3 2 0 0
+112_1 1334_12 1.200000 0.577350 0.364625 -0.460872 25 unrelated 3 2 0 0
+112_1 1334_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 3 2 0 0
+112_1 1334_2 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 3 2 12 13
+112_1 1340_1 1.200000 0.577350 1.714749 -1.159963 25 unrelated 3 2 9 10
+112_1 1340_10 1.200000 0.577350 1.714749 -1.159963 25 unrelated 3 2 0 0
+112_1 1340_11 1.200000 0.577350 0.557499 -0.483423 25 unrelated 3 2 0 0
+112_1 1340_12 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 3 2 0 0
+112_1 1340_2 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 3 2 11 12
+112_1 1340_9 1.200000 0.577350 1.328999 -0.816040 25 unrelated 3 2 0 0
+112_1 1341_1 1.200000 0.577350 -0.736370 1.194477 25 unrelated 3 2 11 12
+112_1 1341_11 1.200000 0.577350 0.364624 -0.460872 25 unrelated 3 2 0 0
+112_1 1341_12 1.200000 0.577350 -1.371252 0.763887 25 unrelated 3 2 0 0
+112_1 1341_13 1.200000 0.577350 2.679125 -3.967559 25 unrelated 3 2 0 0
+112_1 1341_14 1.200000 0.577350 2.679125 -3.967559 25 unrelated 3 2 0 0
+112_1 1341_2 1.200000 0.577350 2.679125 -3.967559 25 unrelated 3 2 13 14
+112_1 1344_1 1.200000 0.577350 -2.142751 1.988253 25 unrelated 3 2 12 13
+112_1 1344_12 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 3 2 0 0
+112_1 1344_13 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 3 2 0 0
+112_1 1345_12 1.200000 0.577350 -1.564126 1.023334 25 unrelated 3 2 0 0
+112_2 112_3 1.200000 0.577350 -1.062477 0.950221 25 parents 0 0 0 0
+112_2 117_1 1.200000 0.577350 -1.757001 2.285255 25 unrelated 0 0 3 2
+112_2 117_2 1.200000 0.577350 -1.371251 1.881413 25 unrelated 0 0 0 0
+112_2 117_3 1.200000 0.577350 -0.985502 1.388993 25 unrelated 0 0 0 0
+112_2 12_1 1.200000 0.577350 -0.599751 2.221902 25 unrelated 0 0 3 2
+112_2 12_2 1.200000 0.577350 -0.599751 2.221902 25 unrelated 0 0 0 0
+112_2 12_3 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+112_2 13_1 1.200000 0.577350 -0.792626 1.476572 25 unrelated 0 0 3 2
+112_2 13_2 1.200000 0.577350 1.001950 -0.618478 25 unrelated 0 0 0 0
+112_2 13_3 1.200000 0.577350 -0.406876 1.239757 25 unrelated 0 0 0 0
+112_2 1334_1 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 10 11
+112_2 1334_10 1.200000 0.577350 -1.757001 0.435984 25 unrelated 0 0 0 0
+112_2 1334_11 1.200000 0.577350 2.679125 -3.967559 25 unrelated 0 0 0 0
+112_2 1334_12 1.200000 0.577350 -0.985501 1.007515 25 unrelated 0 0 0 0
+112_2 1334_13 1.200000 0.577350 -0.792626 0.253184 25 unrelated 0 0 0 0
+112_2 1334_2 1.200000 0.577350 -1.371251 1.881413 25 unrelated 0 0 12 13
+112_2 1340_1 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 9 10
+112_2 1340_10 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+112_2 1340_11 1.200000 0.577350 -0.792626 0.253184 25 unrelated 0 0 0 0
+112_2 1340_12 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+112_2 1340_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 11 12
+112_2 1340_9 1.200000 0.577350 -0.021126 2.335479 25 unrelated 0 0 0 0
+112_2 1341_1 1.200000 0.577350 -0.937282 1.102365 25 unrelated 0 0 11 12
+112_2 1341_11 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 0 0
+112_2 1341_12 1.200000 0.577350 -2.721377 1.023334 25 unrelated 0 0 0 0
+112_2 1341_13 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+112_2 1341_14 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+112_2 1341_2 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 13 14
+112_2 1344_1 1.200000 0.577350 -1.564126 3.000713 25 unrelated 0 0 12 13
+112_2 1344_12 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+112_2 1344_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+112_2 1345_12 1.200000 0.577350 -2.914252 1.163511 25 unrelated 0 0 0 0
+112_3 117_1 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 3 2
+112_3 117_2 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+112_3 117_3 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+112_3 12_1 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 3 2
+112_3 12_2 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+112_3 12_3 1.200000 0.577350 -0.021124 -0.483424 25 unrelated 0 0 0 0
+112_3 13_1 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 3 2
+112_3 13_2 1.200000 0.577350 0.373011 -0.455013 25 unrelated 0 0 0 0
+112_3 13_3 1.200000 0.577350 -0.792626 -0.816040 25 unrelated 0 0 0 0
+112_3 1334_1 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 10 11
+112_3 1334_10 1.200000 0.577350 2.100499 -1.686657 25 unrelated 0 0 0 0
+112_3 1334_11 1.200000 0.577350 -1.178376 0.895341 25 unrelated 0 0 0 0
+112_3 1334_12 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 0 0
+112_3 1334_13 1.200000 0.577350 1.907625 -1.394355 25 unrelated 0 0 0 0
+112_3 1334_2 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 12 13
+112_3 1340_1 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 9 10
+112_3 1340_10 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+112_3 1340_11 1.200000 0.577350 1.907625 -1.394355 25 unrelated 0 0 0 0
+112_3 1340_12 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+112_3 1340_2 1.200000 0.577350 0.557499 0.507014 25 unrelated 0 0 11 12
+112_3 1340_9 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+112_3 1341_1 1.200000 0.577350 0.268187 -0.455013 25 unrelated 0 0 11 12
+112_3 1341_11 1.200000 0.577350 -0.599750 1.178850 25 unrelated 0 0 0 0
+112_3 1341_12 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+112_3 1341_13 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+112_3 1341_14 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+112_3 1341_2 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 13 14
+112_3 1344_1 1.200000 0.577350 -0.792626 0.696771 25 unrelated 0 0 12 13
+112_3 1344_12 1.200000 0.577350 0.557499 0.507014 25 unrelated 0 0 0 0
+112_3 1344_13 1.200000 0.577350 0.557499 0.507014 25 unrelated 0 0 0 0
+112_3 1345_12 1.200000 0.577350 0.943249 -0.598444 25 unrelated 0 0 0 0
+117_1 117_2 1.200000 0.577350 -0.410778 0.566247 25 parentchild 3 2 0 0
+117_1 117_3 1.200000 0.577350 0.851686 -0.082493 25 parentchild 3 2 0 0
+117_1 12_1 1.200000 0.577350 -0.406875 1.239757 25 unrelated 3 2 3 2
+117_1 12_2 1.200000 0.577350 -0.406875 1.239757 25 unrelated 3 2 0 0
+117_1 12_3 1.200000 0.577350 -0.599751 1.178851 25 unrelated 3 2 0 0
+117_1 13_1 1.200000 0.577350 -0.985501 1.007515 25 unrelated 3 2 3 2
+117_1 13_2 1.200000 0.577350 -1.304164 1.380495 25 unrelated 3 2 0 0
+117_1 13_3 1.200000 0.577350 -0.214000 0.895341 25 unrelated 3 2 0 0
+117_1 1334_1 1.200000 0.577350 -0.214001 1.284973 25 unrelated 3 2 10 11
+117_1 1334_10 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 3 2 0 0
+117_1 1334_11 1.200000 0.577350 -1.757001 2.285255 25 unrelated 3 2 0 0
+117_1 1334_12 1.200000 0.577350 -0.792626 0.253184 25 unrelated 3 2 0 0
+117_1 1334_13 1.200000 0.577350 0.557499 -0.483424 25 unrelated 3 2 0 0
+117_1 1334_2 1.200000 0.577350 -1.564126 1.023334 25 unrelated 3 2 12 13
+117_1 1340_1 1.200000 0.577350 -0.985502 1.007515 25 unrelated 3 2 9 10
+117_1 1340_10 1.200000 0.577350 -0.985502 1.007515 25 unrelated 3 2 0 0
+117_1 1340_11 1.200000 0.577350 0.557499 -0.483424 25 unrelated 3 2 0 0
+117_1 1340_12 1.200000 0.577350 0.364624 -0.460872 25 unrelated 3 2 0 0
+117_1 1340_2 1.200000 0.577350 0.364625 -0.460872 25 unrelated 3 2 11 12
+117_1 1340_9 1.200000 0.577350 -2.142751 2.310417 25 unrelated 3 2 0 0
+117_1 1341_1 1.200000 0.577350 1.272744 -0.774446 25 unrelated 3 2 11 12
+117_1 1341_11 1.200000 0.577350 -1.178376 1.284973 25 unrelated 3 2 0 0
+117_1 1341_12 1.200000 0.577350 0.171749 -0.460872 25 unrelated 3 2 0 0
+117_1 1341_13 1.200000 0.577350 -1.564126 1.758837 25 unrelated 3 2 0 0
+117_1 1341_14 1.200000 0.577350 -1.564126 1.758837 25 unrelated 3 2 0 0
+117_1 1341_2 1.200000 0.577350 -1.564126 1.758837 25 unrelated 3 2 13 14
+117_1 1344_1 1.200000 0.577350 1.714749 -1.159963 25 unrelated 3 2 12 13
+117_1 1344_12 1.200000 0.577350 0.364625 -0.460872 25 unrelated 3 2 0 0
+117_1 1344_13 1.200000 0.577350 0.364625 -0.460872 25 unrelated 3 2 0 0
+117_1 1345_12 1.200000 0.577350 0.364624 -0.460872 25 unrelated 3 2 0 0
+117_2 117_3 1.200000 0.577350 1.209928 -0.670439 25 parents 0 0 0 0
+117_2 12_1 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 3 2
+117_2 12_2 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 0 0
+117_2 12_3 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+117_2 13_1 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 3 2
+117_2 13_2 1.200000 0.577350 -1.094518 0.156935 25 unrelated 0 0 0 0
+117_2 13_3 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 0 0
+117_2 1334_1 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 10 11
+117_2 1334_10 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+117_2 1334_11 1.200000 0.577350 -1.371251 1.881413 25 unrelated 0 0 0 0
+117_2 1334_12 1.200000 0.577350 0.364625 0.524595 25 unrelated 0 0 0 0
+117_2 1334_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+117_2 1334_2 1.200000 0.577350 -0.406876 1.605361 25 unrelated 0 0 12 13
+117_2 1340_1 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 0 0 9 10
+117_2 1340_10 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 0 0 0 0
+117_2 1340_11 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+117_2 1340_12 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+117_2 1340_2 1.200000 0.577350 0.364624 0.524596 25 unrelated 0 0 11 12
+117_2 1340_9 1.200000 0.577350 -0.985502 1.745055 25 unrelated 0 0 0 0
+117_2 1341_1 1.200000 0.577350 0.067275 -0.467231 25 unrelated 0 0 11 12
+117_2 1341_11 1.200000 0.577350 -0.792626 2.157893 25 unrelated 0 0 0 0
+117_2 1341_12 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+117_2 1341_13 1.200000 0.577350 -1.178376 0.471641 25 unrelated 0 0 0 0
+117_2 1341_14 1.200000 0.577350 -1.178376 0.471641 25 unrelated 0 0 0 0
+117_2 1341_2 1.200000 0.577350 -1.178376 0.471641 25 unrelated 0 0 13 14
+117_2 1344_1 1.200000 0.577350 0.171750 0.943729 25 unrelated 0 0 12 13
+117_2 1344_12 1.200000 0.577350 0.364624 0.524596 25 unrelated 0 0 0 0
+117_2 1344_13 1.200000 0.577350 0.364624 0.524596 25 unrelated 0 0 0 0
+117_2 1345_12 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 0 0
+117_3 12_1 1.200000 0.577350 0.364624 0.062100 25 unrelated 0 0 3 2
+117_3 12_2 1.200000 0.577350 0.364624 0.062100 25 unrelated 0 0 0 0
+117_3 12_3 1.200000 0.577350 0.171750 0.062100 25 unrelated 0 0 0 0
+117_3 13_1 1.200000 0.577350 -0.214002 0.002982 25 unrelated 0 0 3 2
+117_3 13_2 1.200000 0.577350 -0.675224 0.399109 25 unrelated 0 0 0 0
+117_3 13_3 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+117_3 1334_1 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 10 11
+117_3 1334_10 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+117_3 1334_11 1.200000 0.577350 -0.985502 1.388993 25 unrelated 0 0 0 0
+117_3 1334_12 1.200000 0.577350 -0.021126 0.507013 25 unrelated 0 0 0 0
+117_3 1334_13 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+117_3 1334_2 1.200000 0.577350 -0.792626 1.476572 25 unrelated 0 0 12 13
+117_3 1340_1 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 9 10
+117_3 1340_10 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+117_3 1340_11 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+117_3 1340_12 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+117_3 1340_2 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 11 12
+117_3 1340_9 1.200000 0.577350 -1.371251 1.534184 25 unrelated 0 0 0 0
+117_3 1341_1 1.200000 0.577350 0.469098 -0.467231 25 unrelated 0 0 11 12
+117_3 1341_11 1.200000 0.577350 -0.406876 1.605361 25 unrelated 0 0 0 0
+117_3 1341_12 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 0 0 0 0
+117_3 1341_13 1.200000 0.577350 -0.792626 0.696771 25 unrelated 0 0 0 0
+117_3 1341_14 1.200000 0.577350 -0.792626 0.696771 25 unrelated 0 0 0 0
+117_3 1341_2 1.200000 0.577350 -0.792626 0.696771 25 unrelated 0 0 13 14
+117_3 1344_1 1.200000 0.577350 0.943249 -0.598444 25 unrelated 0 0 12 13
+117_3 1344_12 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+117_3 1344_13 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+117_3 1345_12 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+12_1 12_2 1.200000 0.577350 1.693329 -2.011511 25 parentchild 3 2 0 0
+12_1 12_3 1.200000 0.577350 0.220453 0.351043 25 parentchild 3 2 0 0
+12_1 13_1 1.200000 0.577350 1.714749 -1.159963 25 unrelated 3 2 3 2
+12_1 13_2 1.200000 0.577350 -0.255930 0.546459 25 unrelated 3 2 0 0
+12_1 13_3 1.200000 0.577350 1.329000 -0.816040 25 unrelated 3 2 0 0
+12_1 1334_1 1.200000 0.577350 0.171750 -0.460872 25 unrelated 3 2 10 11
+12_1 1334_10 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 3 2 0 0
+12_1 1334_11 1.200000 0.577350 -0.599751 2.221902 25 unrelated 3 2 0 0
+12_1 1334_12 1.200000 0.577350 -0.406876 0.418047 25 unrelated 3 2 0 0
+12_1 1334_13 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 3 2 0 0
+12_1 1334_2 1.200000 0.577350 -0.792626 1.476572 25 unrelated 3 2 12 13
+12_1 1340_1 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 3 2 9 10
+12_1 1340_10 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 3 2 0 0
+12_1 1340_11 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 3 2 0 0
+12_1 1340_12 1.200000 0.577350 -0.406876 -0.598444 25 unrelated 3 2 0 0
+12_1 1340_2 1.200000 0.577350 -0.406876 0.418047 25 unrelated 3 2 11 12
+12_1 1340_9 1.200000 0.577350 -0.214001 1.988253 25 unrelated 3 2 0 0
+12_1 1341_1 1.200000 0.577350 -1.138194 0.557661 25 unrelated 3 2 11 12
+12_1 1341_11 1.200000 0.577350 -1.178375 1.988253 25 unrelated 3 2 0 0
+12_1 1341_12 1.200000 0.577350 -1.371251 0.327238 25 unrelated 3 2 0 0
+12_1 1341_13 1.200000 0.577350 -0.406876 0.846466 25 unrelated 3 2 0 0
+12_1 1341_14 1.200000 0.577350 -0.406876 0.846466 25 unrelated 3 2 0 0
+12_1 1341_2 1.200000 0.577350 -0.406876 0.846466 25 unrelated 3 2 13 14
+12_1 1344_1 1.200000 0.577350 -0.599751 2.221902 25 unrelated 3 2 12 13
+12_1 1344_12 1.200000 0.577350 -0.406876 0.418047 25 unrelated 3 2 0 0
+12_1 1344_13 1.200000 0.577350 -0.406876 0.418047 25 unrelated 3 2 0 0
+12_1 1345_12 1.200000 0.577350 -1.178376 0.471641 25 unrelated 3 2 0 0
+12_2 12_3 1.200000 0.577350 1.047613 -0.536780 25 parents 0 0 0 0
+12_2 13_1 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 3 2
+12_2 13_2 1.200000 0.577350 -0.255930 0.546459 25 unrelated 0 0 0 0
+12_2 13_3 1.200000 0.577350 1.329000 -0.816040 25 unrelated 0 0 0 0
+12_2 1334_1 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 10 11
+12_2 1334_10 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+12_2 1334_11 1.200000 0.577350 -0.599751 2.221902 25 unrelated 0 0 0 0
+12_2 1334_12 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 0 0
+12_2 1334_13 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+12_2 1334_2 1.200000 0.577350 -0.792626 1.476572 25 unrelated 0 0 12 13
+12_2 1340_1 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 0 0 9 10
+12_2 1340_10 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 0 0 0 0
+12_2 1340_11 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+12_2 1340_12 1.200000 0.577350 -0.406876 -0.598444 25 unrelated 0 0 0 0
+12_2 1340_2 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 11 12
+12_2 1340_9 1.200000 0.577350 -0.214001 1.988253 25 unrelated 0 0 0 0
+12_2 1341_1 1.200000 0.577350 -1.138194 0.557661 25 unrelated 0 0 11 12
+12_2 1341_11 1.200000 0.577350 -1.178375 1.988253 25 unrelated 0 0 0 0
+12_2 1341_12 1.200000 0.577350 -1.371251 0.327238 25 unrelated 0 0 0 0
+12_2 1341_13 1.200000 0.577350 -0.406876 0.846466 25 unrelated 0 0 0 0
+12_2 1341_14 1.200000 0.577350 -0.406876 0.846466 25 unrelated 0 0 0 0
+12_2 1341_2 1.200000 0.577350 -0.406876 0.846466 25 unrelated 0 0 13 14
+12_2 1344_1 1.200000 0.577350 -0.599751 2.221902 25 unrelated 0 0 12 13
+12_2 1344_12 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 0 0
+12_2 1344_13 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 0 0
+12_2 1345_12 1.200000 0.577350 -1.178376 0.471641 25 unrelated 0 0 0 0
+12_3 13_1 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 3 2
+12_3 13_2 1.200000 0.577350 1.211598 -0.732039 25 unrelated 0 0 0 0
+12_3 13_3 1.200000 0.577350 1.521874 -0.969866 25 unrelated 0 0 0 0
+12_3 1334_1 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 10 11
+12_3 1334_10 1.200000 0.577350 -0.599752 -0.693367 25 unrelated 0 0 0 0
+12_3 1334_11 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+12_3 1334_12 1.200000 0.577350 -0.599752 -0.693367 25 unrelated 0 0 0 0
+12_3 1334_13 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+12_3 1334_2 1.200000 0.577350 -0.985501 0.594245 25 unrelated 0 0 12 13
+12_3 1340_1 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 9 10
+12_3 1340_10 1.200000 0.577350 1.136125 -0.693367 25 unrelated 0 0 0 0
+12_3 1340_11 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+12_3 1340_12 1.200000 0.577350 0.943250 -0.598443 25 unrelated 0 0 0 0
+12_3 1340_2 1.200000 0.577350 0.943250 -0.598443 25 unrelated 0 0 11 12
+12_3 1340_9 1.200000 0.577350 -0.406876 0.846466 25 unrelated 0 0 0 0
+12_3 1341_1 1.200000 0.577350 0.268186 0.999931 25 unrelated 0 0 11 12
+12_3 1341_11 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+12_3 1341_12 1.200000 0.577350 -1.564126 0.158748 25 unrelated 0 0 0 0
+12_3 1341_13 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+12_3 1341_14 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+12_3 1341_2 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 13 14
+12_3 1344_1 1.200000 0.577350 -1.178376 1.284973 25 unrelated 0 0 12 13
+12_3 1344_12 1.200000 0.577350 0.943250 -0.598443 25 unrelated 0 0 0 0
+12_3 1344_13 1.200000 0.577350 0.943250 -0.598443 25 unrelated 0 0 0 0
+12_3 1345_12 1.200000 0.577350 -1.757001 -0.036923 25 unrelated 0 0 0 0
+13_1 13_2 1.200000 0.577350 -0.365038 0.561147 25 parentchild 3 2 0 0
+13_1 13_3 1.200000 0.577350 -0.831601 0.617297 25 parentchild 3 2 0 0
+13_1 1334_1 1.200000 0.577350 -0.021126 -0.483424 25 unrelated 3 2 10 11
+13_1 1334_10 1.200000 0.577350 0.557500 -0.483423 25 unrelated 3 2 0 0
+13_1 1334_11 1.200000 0.577350 -0.792626 1.476572 25 unrelated 3 2 0 0
+13_1 1334_12 1.200000 0.577350 0.557500 -0.483423 25 unrelated 3 2 0 0
+13_1 1334_13 1.200000 0.577350 0.750375 -0.528970 25 unrelated 3 2 0 0
+13_1 1334_2 1.200000 0.577350 0.171750 -0.460872 25 unrelated 3 2 12 13
+13_1 1340_1 1.200000 0.577350 0.750375 -0.528970 25 unrelated 3 2 9 10
+13_1 1340_10 1.200000 0.577350 0.750375 -0.528970 25 unrelated 3 2 0 0
+13_1 1340_11 1.200000 0.577350 0.750375 -0.528970 25 unrelated 3 2 0 0
+13_1 1340_12 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 3 2 0 0
+13_1 1340_2 1.200000 0.577350 -0.599751 0.345553 25 unrelated 3 2 11 12
+13_1 1340_9 1.200000 0.577350 0.750375 0.002982 25 unrelated 3 2 0 0
+13_1 1341_1 1.200000 0.577350 -1.339105 0.413356 25 unrelated 3 2 11 12
+13_1 1341_11 1.200000 0.577350 -1.371251 1.163511 25 unrelated 3 2 0 0
+13_1 1341_12 1.200000 0.577350 -0.406875 0.846467 25 unrelated 3 2 0 0
+13_1 1341_13 1.200000 0.577350 0.557499 0.042491 25 unrelated 3 2 0 0
+13_1 1341_14 1.200000 0.577350 0.557499 0.042491 25 unrelated 3 2 0 0
+13_1 1341_2 1.200000 0.577350 0.557499 0.042491 25 unrelated 3 2 13 14
+13_1 1344_1 1.200000 0.577350 -1.564126 1.758837 25 unrelated 3 2 12 13
+13_1 1344_12 1.200000 0.577350 -0.599751 0.345553 25 unrelated 3 2 0 0
+13_1 1344_13 1.200000 0.577350 -0.599751 0.345553 25 unrelated 3 2 0 0
+13_1 1345_12 1.200000 0.577350 -0.214000 0.895341 25 unrelated 3 2 0 0
+13_2 13_3 1.200000 0.577350 0.066668 0.700690 25 parents 0 0 0 0
+13_2 1334_1 1.200000 0.577350 1.001950 -0.618478 25 unrelated 0 0 10 11
+13_2 1334_10 1.200000 0.577350 -0.255930 -0.535772 25 unrelated 0 0 0 0
+13_2 1334_11 1.200000 0.577350 1.001950 -0.618478 25 unrelated 0 0 0 0
+13_2 1334_12 1.200000 0.577350 0.582657 -0.481725 25 unrelated 0 0 0 0
+13_2 1334_13 1.200000 0.577350 0.792305 -0.535772 25 unrelated 0 0 0 0
+13_2 1334_2 1.200000 0.577350 0.163363 -0.455013 25 unrelated 0 0 12 13
+13_2 1340_1 1.200000 0.577350 1.840538 -1.302285 25 unrelated 0 0 9 10
+13_2 1340_10 1.200000 0.577350 1.840538 -1.302285 25 unrelated 0 0 0 0
+13_2 1340_11 1.200000 0.577350 0.792305 -0.535772 25 unrelated 0 0 0 0
+13_2 1340_12 1.200000 0.577350 0.163363 -0.455013 25 unrelated 0 0 0 0
+13_2 1340_2 1.200000 0.577350 0.163363 -0.455013 25 unrelated 0 0 11 12
+13_2 1340_9 1.200000 0.577350 1.001950 -0.618478 25 unrelated 0 0 0 0
+13_2 1341_1 1.200000 0.577350 -0.389342 1.030303 25 unrelated 0 0 11 12
+13_2 1341_11 1.200000 0.577350 0.163363 -0.455013 25 unrelated 0 0 0 0
+13_2 1341_12 1.200000 0.577350 -1.094517 0.648831 25 unrelated 0 0 0 0
+13_2 1341_13 1.200000 0.577350 2.469478 -2.533568 25 unrelated 0 0 0 0
+13_2 1341_14 1.200000 0.577350 2.469478 -2.533568 25 unrelated 0 0 0 0
+13_2 1341_2 1.200000 0.577350 2.469478 -2.533568 25 unrelated 0 0 13 14
+13_2 1344_1 1.200000 0.577350 -1.933105 1.702849 25 unrelated 0 0 12 13
+13_2 1344_12 1.200000 0.577350 0.163363 -0.455013 25 unrelated 0 0 0 0
+13_2 1344_13 1.200000 0.577350 0.163363 -0.455013 25 unrelated 0 0 0 0
+13_2 1345_12 1.200000 0.577350 -1.304164 0.504855 25 unrelated 0 0 0 0
+13_3 1334_1 1.200000 0.577350 0.750375 0.002982 25 unrelated 0 0 10 11
+13_3 1334_10 1.200000 0.577350 -1.371251 -1.394354 25 unrelated 0 0 0 0
+13_3 1334_11 1.200000 0.577350 -0.406876 1.239757 25 unrelated 0 0 0 0
+13_3 1334_12 1.200000 0.577350 -1.757001 -0.575128 25 unrelated 0 0 0 0
+13_3 1334_13 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+13_3 1334_2 1.200000 0.577350 -2.142751 0.471641 25 unrelated 0 0 12 13
+13_3 1340_1 1.200000 0.577350 0.750375 0.002982 25 unrelated 0 0 9 10
+13_3 1340_10 1.200000 0.577350 0.750375 0.002982 25 unrelated 0 0 0 0
+13_3 1340_11 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+13_3 1340_12 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+13_3 1340_2 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 11 12
+13_3 1340_9 1.200000 0.577350 -1.564126 1.758837 25 unrelated 0 0 0 0
+13_3 1341_1 1.200000 0.577350 -0.133636 0.965314 25 unrelated 0 0 11 12
+13_3 1341_11 1.200000 0.577350 -0.985501 0.594245 25 unrelated 0 0 0 0
+13_3 1341_12 1.200000 0.577350 -1.949876 -0.264085 25 unrelated 0 0 0 0
+13_3 1341_13 1.200000 0.577350 -0.214002 1.284973 25 unrelated 0 0 0 0
+13_3 1341_14 1.200000 0.577350 -0.214002 1.284973 25 unrelated 0 0 0 0
+13_3 1341_2 1.200000 0.577350 -0.214002 1.284973 25 unrelated 0 0 13 14
+13_3 1344_1 1.200000 0.577350 -0.406875 1.239757 25 unrelated 0 0 12 13
+13_3 1344_12 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+13_3 1344_13 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+13_3 1345_12 1.200000 0.577350 -1.757000 -0.036923 25 unrelated 0 0 0 0
+1334_1 1334_10 1.200000 0.577350 -1.042011 0.617297 25 parentchild 10 11 0 0
+1334_1 1334_11 1.200000 0.577350 -0.410778 0.566247 25 parentchild 10 11 0 0
+1334_1 1334_12 1.200000 0.577350 -0.575534 -0.430191 25 parents 10 11 0 0
+1334_1 1334_13 1.200000 0.577350 0.236040 -0.228179 25 parents 10 11 0 0
+1334_1 1334_2 1.200000 0.577350 -1.224792 0.456602 25 parents 10 11 12 13
+1334_1 1340_1 1.200000 0.577350 1.521875 -0.969867 25 unrelated 10 11 9 10
+1334_1 1340_10 1.200000 0.577350 1.521875 -0.969867 25 unrelated 10 11 0 0
+1334_1 1340_11 1.200000 0.577350 0.364624 -0.460872 25 unrelated 10 11 0 0
+1334_1 1340_12 1.200000 0.577350 1.714749 -1.159963 25 unrelated 10 11 0 0
+1334_1 1340_2 1.200000 0.577350 0.943249 -0.598444 25 unrelated 10 11 11 12
+1334_1 1340_9 1.200000 0.577350 -0.406876 0.846466 25 unrelated 10 11 0 0
+1334_1 1341_1 1.200000 0.577350 1.071833 1.268636 25 unrelated 10 11 11 12
+1334_1 1341_11 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 10 11 0 0
+1334_1 1341_12 1.200000 0.577350 -0.792626 1.101689 25 unrelated 10 11 0 0
+1334_1 1341_13 1.200000 0.577350 0.943249 -0.598443 25 unrelated 10 11 0 0
+1334_1 1341_14 1.200000 0.577350 0.943249 -0.598443 25 unrelated 10 11 0 0
+1334_1 1341_2 1.200000 0.577350 0.943249 -0.598443 25 unrelated 10 11 13 14
+1334_1 1344_1 1.200000 0.577350 -1.178376 1.284973 25 unrelated 10 11 12 13
+1334_1 1344_12 1.200000 0.577350 0.943249 -0.598444 25 unrelated 10 11 0 0
+1334_1 1344_13 1.200000 0.577350 0.943249 -0.598444 25 unrelated 10 11 0 0
+1334_1 1345_12 1.200000 0.577350 -0.985501 1.007515 25 unrelated 10 11 0 0
+1334_10 1334_11 1.200000 0.577350 -1.549421 0.551090 25 parents 0 0 0 0
+1334_10 1334_12 1.200000 0.577350 1.534557 -1.039272 25 parents 0 0 0 0
+1334_10 1334_13 1.200000 0.577350 1.047613 -0.536780 25 parents 0 0 0 0
+1334_10 1334_2 1.200000 0.577350 0.885298 -0.430191 25 parents 0 0 12 13
+1334_10 1340_1 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 9 10
+1334_10 1340_10 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+1334_10 1340_11 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1334_10 1340_12 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+1334_10 1340_2 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 11 12
+1334_10 1340_9 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+1334_10 1341_1 1.200000 0.577350 0.067275 -0.467230 25 unrelated 0 0 11 12
+1334_10 1341_11 1.200000 0.577350 -1.178376 0.895341 25 unrelated 0 0 0 0
+1334_10 1341_12 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 0 0
+1334_10 1341_13 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+1334_10 1341_14 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 0 0
+1334_10 1341_2 1.200000 0.577350 -0.406876 -0.598443 25 unrelated 0 0 13 14
+1334_10 1344_1 1.200000 0.577350 -1.371251 0.327238 25 unrelated 0 0 12 13
+1334_10 1344_12 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 0 0
+1334_10 1344_13 1.200000 0.577350 -0.021126 0.507014 25 unrelated 0 0 0 0
+1334_10 1345_12 1.200000 0.577350 1.521875 -0.969866 25 unrelated 0 0 0 0
+1334_11 1334_12 1.200000 0.577350 -0.900162 1.047688 25 parents 0 0 0 0
+1334_11 1334_13 1.200000 0.577350 -0.737848 0.392257 25 parents 0 0 0 0
+1334_11 1334_2 1.200000 0.577350 -1.224792 1.807009 25 parents 0 0 12 13
+1334_11 1340_1 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 9 10
+1334_11 1340_10 1.200000 0.577350 0.364624 -0.460872 25 unrelated 0 0 0 0
+1334_11 1340_11 1.200000 0.577350 -0.792626 0.253184 25 unrelated 0 0 0 0
+1334_11 1340_12 1.200000 0.577350 -0.214002 -0.528970 25 unrelated 0 0 0 0
+1334_11 1340_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 11 12
+1334_11 1340_9 1.200000 0.577350 -0.021126 2.335479 25 unrelated 0 0 0 0
+1334_11 1341_1 1.200000 0.577350 -0.937282 1.102365 25 unrelated 0 0 11 12
+1334_11 1341_11 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 0 0
+1334_11 1341_12 1.200000 0.577350 -2.721377 1.023334 25 unrelated 0 0 0 0
+1334_11 1341_13 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1334_11 1341_14 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1334_11 1341_2 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 13 14
+1334_11 1344_1 1.200000 0.577350 -1.564126 3.000713 25 unrelated 0 0 12 13
+1334_11 1344_12 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+1334_11 1344_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+1334_11 1345_12 1.200000 0.577350 -2.914252 1.163511 25 unrelated 0 0 0 0
+1334_12 1334_13 1.200000 0.577350 0.722984 -0.347713 25 parents 0 0 0 0
+1334_12 1334_2 1.200000 0.577350 0.851685 -0.082493 25 parentchild 0 0 12 13
+1334_12 1340_1 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 0 0 9 10
+1334_12 1340_10 1.200000 0.577350 -0.214001 -0.528970 25 unrelated 0 0 0 0
+1334_12 1340_11 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+1334_12 1340_12 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 0 0
+1334_12 1340_2 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 11 12
+1334_12 1340_9 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 0 0
+1334_12 1341_1 1.200000 0.577350 -0.736370 -0.774446 25 unrelated 0 0 11 12
+1334_12 1341_11 1.200000 0.577350 -0.406876 1.239757 25 unrelated 0 0 0 0
+1334_12 1341_12 1.200000 0.577350 0.943249 -0.598444 25 unrelated 0 0 0 0
+1334_12 1341_13 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 0 0
+1334_12 1341_14 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 0 0
+1334_12 1341_2 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 13 14
+1334_12 1344_1 1.200000 0.577350 -1.757001 1.254873 25 unrelated 0 0 12 13
+1334_12 1344_12 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 0 0
+1334_12 1344_13 1.200000 0.577350 -0.406876 0.418047 25 unrelated 0 0 0 0
+1334_12 1345_12 1.200000 0.577350 0.750376 -0.528970 25 unrelated 0 0 0 0
+1334_13 1334_2 1.200000 0.577350 -0.621190 0.600391 25 parentchild 0 0 12 13
+1334_13 1340_1 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 9 10
+1334_13 1340_10 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+1334_13 1340_11 1.200000 0.577350 2.679125 -3.967559 25 unrelated 0 0 0 0
+1334_13 1340_12 1.200000 0.577350 0.943249 -0.598443 25 unrelated 0 0 0 0
+1334_13 1340_2 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 11 12
+1334_13 1340_9 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 0 0
+1334_13 1341_1 1.200000 0.577350 0.268187 -0.455013 25 unrelated 0 0 11 12
+1334_13 1341_11 1.200000 0.577350 -0.214002 0.471641 25 unrelated 0 0 0 0
+1334_13 1341_12 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 0 0
+1334_13 1341_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+1334_13 1341_14 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+1334_13 1341_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 13 14
+1334_13 1344_1 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 12 13
+1334_13 1344_12 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1334_13 1344_13 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1334_13 1345_12 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+1334_2 1340_1 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 12 13 9 10
+1334_2 1340_10 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 12 13 0 0
+1334_2 1340_11 1.200000 0.577350 0.557499 -0.483423 25 unrelated 12 13 0 0
+1334_2 1340_12 1.200000 0.577350 -0.792626 0.696771 25 unrelated 12 13 0 0
+1334_2 1340_2 1.200000 0.577350 -0.792626 1.476572 25 unrelated 12 13 11 12
+1334_2 1340_9 1.200000 0.577350 1.328999 -0.816040 25 unrelated 12 13 0 0
+1334_2 1341_1 1.200000 0.577350 -1.540016 0.243836 25 unrelated 12 13 11 12
+1334_2 1341_11 1.200000 0.577350 -0.792626 2.157893 25 unrelated 12 13 0 0
+1334_2 1341_12 1.200000 0.577350 0.171750 -0.460872 25 unrelated 12 13 0 0
+1334_2 1341_13 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 12 13 0 0
+1334_2 1341_14 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 12 13 0 0
+1334_2 1341_2 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 12 13 13 14
+1334_2 1344_1 1.200000 0.577350 -2.142751 1.988253 25 unrelated 12 13 12 13
+1334_2 1344_12 1.200000 0.577350 -0.792626 1.476572 25 unrelated 12 13 0 0
+1334_2 1344_13 1.200000 0.577350 -0.792626 1.476572 25 unrelated 12 13 0 0
+1334_2 1345_12 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 12 13 0 0
+1340_1 1340_10 1.200000 0.577350 1.693329 -2.011511 25 parentchild 9 10 0 0
+1340_1 1340_11 1.200000 0.577350 0.885298 -0.430191 25 parents 9 10 0 0
+1340_1 1340_12 1.200000 0.577350 0.398354 -0.247774 25 parents 9 10 0 0
+1340_1 1340_2 1.200000 0.577350 0.398354 -0.247774 25 parents 9 10 11 12
+1340_1 1340_9 1.200000 0.577350 -0.831601 0.617297 25 parentchild 9 10 0 0
+1340_1 1341_1 1.200000 0.577350 -0.133636 1.365911 25 unrelated 9 10 11 12
+1340_1 1341_11 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 9 10 0 0
+1340_1 1341_12 1.200000 0.577350 -0.792626 1.101689 25 unrelated 9 10 0 0
+1340_1 1341_13 1.200000 0.577350 1.714749 -1.159963 25 unrelated 9 10 0 0
+1340_1 1341_14 1.200000 0.577350 1.714749 -1.159963 25 unrelated 9 10 0 0
+1340_1 1341_2 1.200000 0.577350 1.714749 -1.159963 25 unrelated 9 10 13 14
+1340_1 1344_1 1.200000 0.577350 -1.564126 1.023334 25 unrelated 9 10 12 13
+1340_1 1344_12 1.200000 0.577350 0.557499 -0.483424 25 unrelated 9 10 0 0
+1340_1 1344_13 1.200000 0.577350 0.557499 -0.483424 25 unrelated 9 10 0 0
+1340_1 1345_12 1.200000 0.577350 -0.985501 1.007514 25 unrelated 9 10 0 0
+1340_10 1340_11 1.200000 0.577350 0.885298 -0.430191 25 parents 0 0 0 0
+1340_10 1340_12 1.200000 0.577350 0.398354 -0.247774 25 parents 0 0 0 0
+1340_10 1340_2 1.200000 0.577350 0.398354 -0.247774 25 parents 0 0 11 12
+1340_10 1340_9 1.200000 0.577350 0.236040 -0.228179 25 parents 0 0 0 0
+1340_10 1341_1 1.200000 0.577350 -0.133636 1.365911 25 unrelated 0 0 11 12
+1340_10 1341_11 1.200000 0.577350 -0.599751 -0.693367 25 unrelated 0 0 0 0
+1340_10 1341_12 1.200000 0.577350 -0.792626 1.101689 25 unrelated 0 0 0 0
+1340_10 1341_13 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 0 0
+1340_10 1341_14 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 0 0
+1340_10 1341_2 1.200000 0.577350 1.714749 -1.159963 25 unrelated 0 0 13 14
+1340_10 1344_1 1.200000 0.577350 -1.564126 1.023334 25 unrelated 0 0 12 13
+1340_10 1344_12 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 0 0
+1340_10 1344_13 1.200000 0.577350 0.557499 -0.483424 25 unrelated 0 0 0 0
+1340_10 1345_12 1.200000 0.577350 -0.985501 1.007514 25 unrelated 0 0 0 0
+1340_11 1340_12 1.200000 0.577350 0.722984 -0.347713 25 parents 0 0 0 0
+1340_11 1340_2 1.200000 0.577350 0.220453 0.351043 25 parentchild 0 0 11 12
+1340_11 1340_9 1.200000 0.577350 -0.088589 -0.247773 25 parents 0 0 0 0
+1340_11 1341_1 1.200000 0.577350 0.268187 -0.455013 25 unrelated 0 0 11 12
+1340_11 1341_11 1.200000 0.577350 -0.214002 0.471641 25 unrelated 0 0 0 0
+1340_11 1341_12 1.200000 0.577350 0.364625 -0.460872 25 unrelated 0 0 0 0
+1340_11 1341_13 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+1340_11 1341_14 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 0 0
+1340_11 1341_2 1.200000 0.577350 0.557499 -0.483423 25 unrelated 0 0 13 14
+1340_11 1344_1 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 12 13
+1340_11 1344_12 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1340_11 1344_13 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1340_11 1345_12 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+1340_12 1340_2 1.200000 0.577350 0.430865 0.235726 25 parentchild 0 0 11 12
+1340_12 1340_9 1.200000 0.577350 -1.224791 0.456602 25 parents 0 0 0 0
+1340_12 1341_1 1.200000 0.577350 1.875479 -1.349462 25 unrelated 0 0 11 12
+1340_12 1341_11 1.200000 0.577350 0.750375 -0.528970 25 unrelated 0 0 0 0
+1340_12 1341_12 1.200000 0.577350 0.171750 -0.460872 25 unrelated 0 0 0 0
+1340_12 1341_13 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 0 0
+1340_12 1341_14 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 0 0
+1340_12 1341_2 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 13 14
+1340_12 1344_1 1.200000 0.577350 -0.599751 -0.138508 25 unrelated 0 0 12 13
+1340_12 1344_12 1.200000 0.577350 1.521875 -0.969867 25 unrelated 0 0 0 0
+1340_12 1344_13 1.200000 0.577350 1.521875 -0.969867 25 unrelated 0 0 0 0
+1340_12 1345_12 1.200000 0.577350 -0.021126 -0.483423 25 unrelated 0 0 0 0
+1340_2 1340_9 1.200000 0.577350 -1.224791 1.183231 25 parents 11 12 0 0
+1340_2 1341_1 1.200000 0.577350 0.870921 -0.566551 25 unrelated 11 12 11 12
+1340_2 1341_11 1.200000 0.577350 1.136124 -0.693367 25 unrelated 11 12 0 0
+1340_2 1341_12 1.200000 0.577350 -0.985501 0.139601 25 unrelated 11 12 0 0
+1340_2 1341_13 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 11 12 0 0
+1340_2 1341_14 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 11 12 0 0
+1340_2 1341_2 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 11 12 13 14
+1340_2 1344_1 1.200000 0.577350 0.557499 -0.483423 25 unrelated 11 12 12 13
+1340_2 1344_12 1.200000 0.577350 2.679125 -3.967559 25 unrelated 11 12 0 0
+1340_2 1344_13 1.200000 0.577350 2.679125 -3.967559 25 unrelated 11 12 0 0
+1340_2 1345_12 1.200000 0.577350 -1.178377 0.002982 25 unrelated 11 12 0 0
+1340_9 1341_1 1.200000 0.577350 -2.142751 1.397943 25 unrelated 0 0 11 12
+1340_9 1341_11 1.200000 0.577350 -0.985502 2.080189 25 unrelated 0 0 0 0
+1340_9 1341_12 1.200000 0.577350 -1.178376 0.895341 25 unrelated 0 0 0 0
+1340_9 1341_13 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1340_9 1341_14 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 0 0
+1340_9 1341_2 1.200000 0.577350 1.328999 -0.816040 25 unrelated 0 0 13 14
+1340_9 1344_1 1.200000 0.577350 -2.721377 3.000713 25 unrelated 0 0 12 13
+1340_9 1344_12 1.200000 0.577350 -1.371251 1.163511 25 unrelated 0 0 0 0
+1340_9 1344_13 1.200000 0.577350 -1.371251 1.163511 25 unrelated 0 0 0 0
+1340_9 1345_12 1.200000 0.577350 -1.371251 1.163511 25 unrelated 0 0 0 0
+1341_1 1341_11 1.200000 0.577350 -1.375162 0.584859 25 parentchild 11 12 0 0
+1341_1 1341_12 1.200000 0.577350 -0.279272 0.538074 25 parentchild 11 12 0 0
+1341_1 1341_13 1.200000 0.577350 -0.690506 1.210137 25 parents 11 12 0 0
+1341_1 1341_14 1.200000 0.577350 -0.690506 1.210137 25 parents 11 12 0 0
+1341_1 1341_2 1.200000 0.577350 -0.690506 1.210137 25 parents 11 12 13 14
+1341_1 1344_1 1.200000 0.577350 0.268187 0.088380 25 unrelated 11 12 12 13
+1341_1 1344_12 1.200000 0.577350 0.870921 -0.566551 25 unrelated 11 12 0 0
+1341_1 1344_13 1.200000 0.577350 0.870921 -0.566551 25 unrelated 11 12 0 0
+1341_1 1345_12 1.200000 0.577350 0.670011 -0.504142 25 unrelated 11 12 0 0
+1341_11 1341_12 1.200000 0.577350 -1.549421 0.551090 25 parents 0 0 0 0
+1341_11 1341_13 1.200000 0.577350 0.236040 -0.228179 25 parents 0 0 0 0
+1341_11 1341_14 1.200000 0.577350 0.236040 -0.228179 25 parents 0 0 0 0
+1341_11 1341_2 1.200000 0.577350 0.236040 -0.228179 25 parents 0 0 13 14
+1341_11 1344_1 1.200000 0.577350 -0.985502 2.080189 25 unrelated 0 0 12 13
+1341_11 1344_12 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+1341_11 1344_13 1.200000 0.577350 1.136124 -0.693367 25 unrelated 0 0 0 0
+1341_11 1345_12 1.200000 0.577350 -1.949876 0.679840 25 unrelated 0 0 0 0
+1341_12 1341_13 1.200000 0.577350 -1.224792 0.836001 25 parents 0 0 0 0
+1341_12 1341_14 1.200000 0.577350 -1.224792 0.836001 25 parents 0 0 0 0
+1341_12 1341_2 1.200000 0.577350 -1.224792 0.836001 25 parents 0 0 13 14
+1341_12 1344_1 1.200000 0.577350 -0.792626 0.696770 25 unrelated 0 0 12 13
+1341_12 1344_12 1.200000 0.577350 -0.985501 0.139601 25 unrelated 0 0 0 0
+1341_12 1344_13 1.200000 0.577350 -0.985501 0.139601 25 unrelated 0 0 0 0
+1341_12 1345_12 1.200000 0.577350 2.486250 -2.592123 25 unrelated 0 0 0 0
+1341_13 1341_14 1.200000 0.577350 2.183816 -3.275103 25 parents 0 0 0 0
+1341_13 1341_2 1.200000 0.577350 1.693329 -2.011511 25 parentchild 0 0 13 14
+1341_13 1344_1 1.200000 0.577350 -2.142751 1.988253 25 unrelated 0 0 12 13
+1341_13 1344_12 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 0 0
+1341_13 1344_13 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 0 0
+1341_13 1345_12 1.200000 0.577350 -1.564126 1.023334 25 unrelated 0 0 0 0
+1341_14 1341_2 1.200000 0.577350 1.693329 -2.011511 25 parentchild 0 0 13 14
+1341_14 1344_1 1.200000 0.577350 -2.142751 1.988253 25 unrelated 0 0 12 13
+1341_14 1344_12 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 0 0
+1341_14 1344_13 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 0 0 0 0
+1341_14 1345_12 1.200000 0.577350 -1.564126 1.023334 25 unrelated 0 0 0 0
+1341_2 1344_1 1.200000 0.577350 -2.142751 1.988253 25 unrelated 13 14 12 13
+1341_2 1344_12 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 13 14 0 0
+1341_2 1344_13 1.200000 0.577350 -0.021125 -0.483423 25 unrelated 13 14 0 0
+1341_2 1345_12 1.200000 0.577350 -1.564126 1.023334 25 unrelated 13 14 0 0
+1344_1 1344_12 1.200000 0.577350 -0.621190 0.600391 25 parentchild 12 13 0 0
+1344_1 1344_13 1.200000 0.577350 -0.621190 0.600391 25 parentchild 12 13 0 0
+1344_1 1345_12 1.200000 0.577350 -0.599751 0.780517 25 unrelated 12 13 0 0
+1344_12 1344_13 1.200000 0.577350 2.183816 -3.275103 25 parents 0 0 0 0
+1344_12 1345_12 1.200000 0.577350 -1.178377 0.002982 25 unrelated 0 0 0 0
+1344_13 1345_12 1.200000 0.577350 -1.178377 0.002982 25 unrelated 0 0 0 0
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/1_rgHaploViewtest1.pdf
Binary file test-data/rgtestouts/rgHaploView/1_rgHaploViewtest1.pdf has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/1_rgHaploViewtest1.png
Binary file test-data/rgtestouts/rgHaploView/1_rgHaploViewtest1.png has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/2_HapMap_YRI_22.pdf
Binary file test-data/rgtestouts/rgHaploView/2_HapMap_YRI_22.pdf has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/2_HapMap_YRI_22.png
Binary file test-data/rgtestouts/rgHaploView/2_HapMap_YRI_22.png has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/Chromosome22YRI.LD.PNG
Binary file test-data/rgtestouts/rgHaploView/Chromosome22YRI.LD.PNG has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/Log_rgHaploViewtest1.txt
--- a/test-data/rgtestouts/rgHaploView/Log_rgHaploViewtest1.txt Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgHaploView/Log_rgHaploViewtest1.txt Thu May 20 12:38:35 2010 -0400
@@ -1,7 +1,7 @@
-PATH=/share/apps:/share/shared/lx26-amd64/bin:/udd/rerla/bin:/share/shared/lx26-amd64/bin:/opt/gridengine/bin/lx26-amd64:/opt/gridengine/bin/lx26-amd64:/usr/kerberos/bin:/usr/java/latest/bin:/usr/local/bin:/bin:/usr/bin:/opt/eclipse:/opt/ganglia/bin:/opt/ganglia/sbin:/opt/maven/bin:/opt/openmpi/bin/:/opt/rocks/bin:/opt/rocks/sbin:/opt/gridengine/bin:/opt/gridengine:/bin/lx26-amd64:/usr/X11R6/bin
+PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/rerla/bin
## rgHaploView.py looking for 10 rs (['rs2283802', 'rs2267000', 'rs16997606', 'rs4820537', 'rs3788347'])## rgHaploView.py: wrote 10 markers, 40 subjects for region
-## executing java -jar /share/shared/galaxy/tool-data/rg/bin/haploview.jar -n -memory 2048 -pairwiseTagging -pedfile /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped -info /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info -tagrsqcounts -tagrsqcutoff 0.8 -ldcolorscheme RSQ -log /share/shared/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng -chromosome 22 returned 0
+## executing java -jar /opt/galaxy/tool-data/rg/bin/haploview.jar -n -memory 2048 -pairwiseTagging -pedfile /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped -info /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info -tagrsqcounts -tagrsqcutoff 0.8 -ldcolorscheme RSQ -log /opt/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng -chromosome 22 returned 0
## executing mogrify -resize 800x400! *.PNG returned 0
## executing convert -resize 800x400! rgHaploViewtest1.ped.LD.PNG rgHaploViewtest1.tmp.png returned 0
## executing convert -pointsize 25 -fill maroon -draw "text 10,300 'rgHaploViewtest1'" rgHaploViewtest1.tmp.png 1_rgHaploViewtest1.png returned 0
@@ -12,16 +12,16 @@
## executing pdfjoin "*.pdf" --fitpaper true --outfile alljoin.pdf returned 0
## executing pdfnup alljoin.pdf --nup 1x2 --outfile allnup.pdf returned 0
*****************************************************
-Haploview 4.2 Java Version: 1.6.0_13
+Haploview 4.2 Java Version: 1.6.0_03
*****************************************************
-Arguments: -n -pairwiseTagging -pedfile /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped -info /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info -tagrsqcounts -tagrsqcutoff 0.8 -ldcolorscheme RSQ -log /share/shared/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng -chromosome 22
+Arguments: -n -pairwiseTagging -pedfile /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped -info /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info -tagrsqcounts -tagrsqcutoff 0.8 -ldcolorscheme RSQ -log /opt/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng -chromosome 22
Max LD comparison distance = 200000kb
-Using data file: /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped
-Using marker information file: /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info
+Using data file: /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped
+Using marker information file: /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info
10 out of 10 markers passed the MAF threshold.
10 out of 10 markers passed the Mendel threshold.
10 out of 10 markers passed the genotyping threshold.
@@ -33,11 +33,11 @@
Writing output to rgHaploViewtest1.ped.TESTS
Writing output to rgHaploViewtest1.ped.CHAPS
*****************************************************
-Haploview 4.2 Java Version: 1.6.0_13
+Haploview 4.2 Java Version: 1.6.0_03
*****************************************************
-Arguments: -n -chromosome 22 -panel YRI -hapmapDownload -startpos 21784 -endpos 21905 -ldcolorscheme RSQ -log /share/shared/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng
+Arguments: -n -chromosome 22 -panel YRI -hapmapDownload -startpos 21784 -endpos 21905 -ldcolorscheme RSQ -log /opt/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng
Max LD comparison distance = 200000kb
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/alljoin.pdf
Binary file test-data/rgtestouts/rgHaploView/alljoin.pdf has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/allnup.pdf
Binary file test-data/rgtestouts/rgHaploView/allnup.pdf has changed
diff -r 7f95e51e06f7 -r 2d49a94c8d28 test-data/rgtestouts/rgHaploView/rgHaploViewtest1.html
--- a/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.html Wed May 19 10:28:41 2010 -0400
+++ b/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.html Thu May 20 12:38:35 2010 -0400
@@ -23,13 +23,13 @@
<li><a href="rgHaploViewtest1.ped.LD.PNG">rgHaploViewtest1.ped.LD.PNG - rgHaploViewtest1.ped.LD.PNG</a></li>
<li><a href="rgHaploViewtest1.ped.TAGS">rgHaploViewtest1.ped.TAGS - rgHaploViewtest1.ped.TAGS Tagger output</a></li>
<li><a href="rgHaploViewtest1.ped.TESTS">rgHaploViewtest1.ped.TESTS - rgHaploViewtest1.ped.TESTS Tagger output</a></li>
-</ol><br></div><div><hr>Job Log follows below (see Log_rgHaploViewtest1.txt)<pre>PATH=/share/apps:/share/shared/lx26-amd64/bin:/udd/rerla/bin:/share/shared/lx26-amd64/bin:/opt/gridengine/bin/lx26-amd64:/opt/gridengine/bin/lx26-amd64:/usr/kerberos/bin:/usr/java/latest/bin:/usr/local/bin:/bin:/usr/bin:/opt/eclipse:/opt/ganglia/bin:/opt/ganglia/sbin:/opt/maven/bin:/opt/openmpi/bin/:/opt/rocks/bin:/opt/rocks/sbin:/opt/gridengine/bin:/opt/gridengine:/bin/lx26-amd64:/usr/X11R6/bin
+</ol><br></div><div><hr>Job Log follows below (see Log_rgHaploViewtest1.txt)<pre>PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/rerla/bin
## rgHaploView.py looking for 10 rs (['rs2283802', 'rs2267000', 'rs16997606', 'rs4820537', 'rs3788347'])## rgHaploView.py: wrote 10 markers, 40 subjects for region
-## executing java -jar /share/shared/galaxy/tool-data/rg/bin/haploview.jar -n -memory 2048 -pairwiseTagging -pedfile /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped -info /share/shared/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info -tagrsqcounts -tagrsqcutoff 0.8 -ldcolorscheme RSQ -log /share/shared/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng -chromosome 22 returned 0
+## executing java -jar /opt/galaxy/tool-data/rg/bin/haploview.jar -n -memory 2048 -pairwiseTagging -pedfile /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.ped -info /opt/galaxy/test-data/rgtestouts/rgHaploView/rgHaploViewtest1.info -tagrsqcounts -tagrsqcutoff 0.8 -ldcolorscheme RSQ -log /opt/galaxy/test-data/tinywga.log -maxDistance 200000 -compressedpng -chromosome 22 returned 0
## executing mogrify -resize 800x400! *.PNG returned 0
@@ -51,7 +51,7 @@
1
0

25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/7f95e51e06f7
changeset: 3791:7f95e51e06f7
user: fubar: ross Lazarus at gmail period com
date: Wed May 19 10:28:41 2010 -0400
description:
Added ldIndep datatype to genetics.py and datatypes_conf for ld reduced datasets - these are pbed
files that have had one of each pair of redundant SNP in high LD with each other removed for GRR and ancestry PCA
where the redundancy adds no additional information but slows things down
Added converter for pbed to ldindep to converters and to datatypes_conf
Adjusted rgGRR and rgEigPCA tools to use these
diffstat:
lib/galaxy/datatypes/genetics.py | 13 +
static/welcome.html | 6 +-
tools/rgenetics/rgEigPCA.py | 118 +-
tools/rgenetics/rgEigPCA.xml | 4 +-
tools/rgenetics/rgEigPCA_code.py | 69 +-
tools/rgenetics/rgGRR.py | 2178 ++++++++++++++++++------------------
tools/rgenetics/rgGRR.xml | 7 +-
tools/rgenetics/rgGRR_code.py | 60 +-
tools/rgenetics/rgtest_one_tool.sh | 2 +-
tools/rgenetics/rgutils.py | 155 +-
10 files changed, 1346 insertions(+), 1266 deletions(-)
diffs (2954 lines):
diff -r 6a065c0f350e -r 7f95e51e06f7 lib/galaxy/datatypes/genetics.py
--- a/lib/galaxy/datatypes/genetics.py Mon May 17 10:58:16 2010 -0400
+++ b/lib/galaxy/datatypes/genetics.py Wed May 19 10:28:41 2010 -0400
@@ -349,6 +349,19 @@
return True
+class ldIndep(Rgenetics):
+ """
+ LD (a good measure of redundancy of information) depleted Plink Binary compressed 2bit/geno
+ """
+ file_ext="ldreduced"
+
+ def __init__( self, **kwd ):
+ Rgenetics.__init__(self, **kwd)
+ self.add_composite_file( '%s_INDEP.bim', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s_INDEP.bed', substitute_name_with_metadata = 'base_name', is_binary = True )
+ self.add_composite_file( '%s_INDEP.fam', substitute_name_with_metadata = 'base_name', is_binary = True )
+
+
class SNPMatrix(Rgenetics):
"""
BioC SNPMatrix Rgenetics data collections
diff -r 6a065c0f350e -r 7f95e51e06f7 static/welcome.html
--- a/static/welcome.html Mon May 17 10:58:16 2010 -0400
+++ b/static/welcome.html Wed May 19 10:28:41 2010 -0400
@@ -8,12 +8,12 @@
<body>
<div class="document">
<div class="warningmessagelarge">
- <strong>Hello world! It's running...</strong>
+ <strong>Welcome to the <a href="http://rgenetics.org">Rgenetics</a> development site</strong>
<hr>
- To customize this page edit <code>static/welcome.html</code>
+ This is a volatile and experimental resource - use the <a href="http://usegalaxy.org">main galaxy</a> for real research
</div>
<br/>
- <img src="images/noodles.png" alt="WWFSMD?" style="display: block; margin-left: auto; margin-right: auto;" />
+ <img src="images/Armitagep_manhattan.png" alt="One click manhattan plot anyone?" style="display: block; margin-left: auto; margin-right: auto;" />
<hr/>
This project is supported in part by <a target="_blank" class="reference" href="http://www.nsf.gov">NSF</a>, <a target="_blank" class="reference" href="http://www.genome.gov">NHGRI</a>, and <a target="_blank" class="reference" href="http://www.huck.psu.edu">the Huck Institutes of the Life Sciences</a>.
</div>
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgEigPCA.py
--- a/tools/rgenetics/rgEigPCA.py Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgEigPCA.py Wed May 19 10:28:41 2010 -0400
@@ -1,5 +1,5 @@
"""
-run smartpca
+run smartpca
This uses galaxy code developed by Dan to deal with
arbitrary output files using an html dataset with it's own
@@ -25,8 +25,8 @@
5 different input formats are supported. See ../CONVERTF/README
for documentation on using the convertf program to convert between formats.
-The syntax of smartpca is "../bin/smartpca -p parfile". We illustrate
-how parfile works via a toy example (see example.perl in this directory).
+The syntax of smartpca is "../bin/smartpca -p parfile". We illustrate
+how parfile works via a toy example (see example.perl in this directory).
This example takes input in EIGENSTRAT format. The syntax of how to take input
in other formats is analogous to the convertf program, see ../CONVERTF/README.
@@ -56,9 +56,9 @@
numoutevec: number of eigenvectors to output. Default is 10.
numoutlieriter: maximum number of outlier removal iterations.
Default is 5. To turn off outlier removal, set this parameter to 0.
-numoutlierevec: number of principal components along which to
+numoutlierevec: number of principal components along which to
remove outliers during each outlier removal iteration. Default is 10.
-outliersigmathresh: number of standard deviations which an individual must
+outliersigmathresh: number of standard deviations which an individual must
exceed, along one of the top (numoutlierevec) principal components, in
order for that individual to be removed as an outlier. Default is 6.0.
outlieroutname: output logfile of outlier individuals removed. If not specified,
@@ -78,17 +78,17 @@
Default is 0 (no LD correction). If desiring LD correction, we recommend 2.
maxdistldregress: If doing LD correction, this is the maximum genetic distance
(in Morgans) for previous SNPs used in LD correction. Default is no maximum.
-poplistname: If wishing to infer eigenvectors using only individuals from a
- subset of populations, and then project individuals from all populations
+poplistname: If wishing to infer eigenvectors using only individuals from a
+ subset of populations, and then project individuals from all populations
onto those eigenvectors, this input file contains a list of population names,
- one population name per line, which will be used to infer eigenvectors.
- It is assumed that the population of each individual is specified in the
+ one population name per line, which will be used to infer eigenvectors.
+ It is assumed that the population of each individual is specified in the
indiv file. Default is to use individuals from all populations.
phylipoutname: output file containing an fst matrix which can be used as input
to programs in the PHYLIP package, such as the "fitch" program for
constructing phylogenetic trees.
noxdata: if set to YES, all SNPs on X chr are excluded from the data set.
- The smartpca default for this parameter is YES, since different variances
+ The smartpca default for this parameter is YES, since different variances
for males vs. females on X chr may confound PCA analysis.
nomalexhet: if set to YES, any het genotypes on X chr for males are changed
to missing data. The smartpca default for this parameter is YES.
@@ -96,11 +96,11 @@
Same format as example.snp. Cannot be used if input is in
PACKEDPED or PACKEDANCESTRYMAP format.
popsizelimit: If set to a positive integer, the result is that only the first
- popsizelimit individuals from each population will be included in the
- analysis. It is assumed that the population of each individual is specified
+ popsizelimit individuals from each population will be included in the
+ analysis. It is assumed that the population of each individual is specified
in the indiv file. Default is to use all individuals in the analysis.
-The next 5 optional parameters allow the user to output genotype, snp and
+The next 5 optional parameters allow the user to output genotype, snp and
indiv files which will be identical to the input files except that:
Any individuals set to Ignore in the input indiv file will be
removed from the data set (see ../CONVERTF/README)
@@ -112,22 +112,11 @@
snpoutname: output snp file
indivoutname: output indiv file
outputgroup: see documentation in ../CONVERTF/README
-
-
"""
import sys,os,time,subprocess,string,glob
-from rgutils import RRun, galhtmlprefix, galhtmlpostfix, timenow, smartpca, rexe
-
+from rgutils import RRun, galhtmlprefix, galhtmlpostfix, timenow, smartpca, rexe, plinke
verbose = False
-mapexts = ['.map','.bim','.pedsnp']
-mapexts += [x.upper() for x in mapexts] # ya never know
-genoexts = ['.ped','.bed','.pedsnp']
-genoexts += [x.upper() for x in genoexts]
-indexts = ['.ped','.fam','.pedind']
-indexts += [x.upper() for x in indexts]
-
-
def makePlot(eigpca='test.pca',title='test',pdfname='test.pdf',h=8,w=10,nfp=None,rexe=''):
"""
the eigenvec file has a # row with the eigenvectors, then subject ids, eigenvecs and lastly
@@ -205,9 +194,43 @@
print >> sys.stdout, '\n'.join(R)
print >> sys.stdout, rlog
-def getInfiles(infile=None):
+
+def getInfiles(basename=None,infpath=None,outfpath=None,plinke='plink',forcerebuild=False):
+ """
+ openOrMakeLDreduced(basename,newfpath,plinke='plink',forcerebuild=False)
+ ingeno = getLDreduced(infile,plinke)
+ gbase,gext = os.path.splitext(ingeno)
+ if gext == '.bed':
+ inmap = '%s.bim' % gbase
+ inped = '%s.fam' % gbase
+ elif gext == '.ped':
+ inmap = '%s.map' % gbase
+ inped = '%s.ped' % gbase
+ elif gext == '.tped':
+ inmap = '%s.tmap' % gbase
+ inped = '%s.tfam' % gbase
+ """
+ base,kind = getLDreducedFname(basename,infpath=infpath,outfpath=outfpath,plinke=plinke,forcerebuild=forcerebuild)
+ assert kind in ['lped','pbed','tped'],'## kind=%s - not lped,pbed,tped' % str(kind)
+ if kind=='lped':
+ return '%s.ped' % base,'%s.map' % base,'%s.ped' % base
+ elif kind=='pbed':
+ return '%s.bed' % base,'%s.bim' % base,'%s.fam' % base
+ elif kind == 'tped':
+ return '%s.tped' % base,'%s.tmap' % base,'%s.tfam' % base
+
+
+def getInfilesOld(infile=None):
+ """given a basename, find the best input files
+ """
+ mapexts = ['.map','.bim','.pedsnp']
+ mapexts += [x.upper() for x in mapexts] # ya never know
+ genoexts = ['.ped','.bed','.pedsnp']
+ genoexts += [x.upper() for x in genoexts]
+ indexts = ['.ped','.fam','.pedind']
+ indexts += [x.upper() for x in indexts]
flist = glob.glob('%s*' % infile) # this should list all available rgenetics data files
- exts = [os.path.splitext(x)[-1] for x in flist] # expect ['.ped','.map'] etc
+ exts = set([os.path.splitext(x)[-1] for x in flist]) # expect ['.ped','.map'] etc
mapext = None
genoext = None
indext = None
@@ -234,7 +257,7 @@
sys.exit(1)
if genoext == None:
print '### no geno (%s) file found - cannot run eigensoft' % ','.join(genoexts)
- sys.exit(1)
+ sys.exit(1)
return ingeno,inmap,inped
def getfSize(fpath,outpath):
@@ -252,18 +275,18 @@
elif n > 0:
size = ' (%d B)' % (int(n))
return size
-
+
def runEigen():
""" run the smartpca prog - documentation follows
- smartpca.perl -i fakeped_100.eigenstratgeno -a fakeped_100.map -b fakeped_100.ind -p fakeped_100 -e fakeped_100.eigenvals -l
+ smartpca.perl -i fakeped_100.eigenstratgeno -a fakeped_100.map -b fakeped_100.ind -p fakeped_100 -e fakeped_100.eigenvals -l
fakeped_100.eigenlog -o fakeped_100.eigenout
DOCUMENTATION OF smartpca.perl program:
-This program calls the smartpca program (see ../POPGEN/README).
-For this to work, the bin directory containing smartpca MUST be in your path.
+This program calls the smartpca program (see ../POPGEN/README).
+For this to work, the bin directory containing smartpca MUST be in your path.
See ./example.perl for a toy example.
../bin/smartpca.perl
@@ -279,7 +302,7 @@
-l example.log : output logfile
-m maxiter : (Default is 5) maximum number of outlier removal iterations.
To turn off outlier removal, set -m 0.
--t topk : (Default is 10) number of principal components along which
+-t topk : (Default is 10) number of principal components along which
to remove outliers during each outlier removal iteration.
-s sigma : (Default is 6.0) number of standard deviations which an
individual must exceed, along one of topk top principal
@@ -293,9 +316,9 @@
<command interpreter="python">
rgEigPCA.py "$i.extra_files_path/$i.metadata.base_name" "$title" "$out_file1"
- "$out_file1.files_path" "$k" "$m" "$t" "$s" "$pca"
+ "$out_file1.files_path" "$k" "$m" "$t" "$s" "$pca"
</command>
-
+
"""
if len(sys.argv) < 9:
print 'Need an input genotype file root, a title, a temp id and the temp file path for outputs,'
@@ -305,9 +328,10 @@
print >> sys.stdout, 'rgEigPCA.py got %s' % (' '.join(sys.argv))
skillme = ' %s' % string.punctuation
trantab = string.maketrans(skillme,'_'*len(skillme))
- ofname = sys.argv[5]
+ ofname = sys.argv[5]
progname = os.path.basename(sys.argv[0])
infile = sys.argv[1]
+ infpath,base_name = os.path.split(infile) # can't leave anything here - readonly on PSU - so leave in outdir instead
title = sys.argv[2].translate(trantab) # must replace all of these for urls containing title
outfile1 = sys.argv[3]
newfilepath = sys.argv[4]
@@ -328,8 +352,8 @@
eigentitle = os.path.join(newfilepath,title)
explanations=['Samples plotted in first 2 eigenvector space','Principle components','Eigenvalues',
'Smartpca log (contents shown below)']
- rplotname = 'PCAPlot.pdf'
- eigenexts = [rplotname, "pca.xls", "eval.xls"]
+ rplotname = 'PCAPlot.pdf'
+ eigenexts = [rplotname, "pca.xls", "eval.xls"]
newfiles = ['%s_%s' % (title,x) for x in eigenexts] # produced by eigenstrat
rplotout = os.path.join(newfilepath,newfiles[0]) # for R plots
eigenouts = [x for x in newfiles]
@@ -342,15 +366,12 @@
os.makedirs(newfilepath)
except:
pass
- ingeno,inmap,inped = getInfiles(infile=infile) # figure out what input files to feed smartpca
- # this is a mess. todo clean up - should each datatype have it's own directory? Yes
- # probably. Then titles are universal - but userId libraries are separate.
- smartCL = '%s -i %s -a %s -b %s -o %s -p %s -e %s -l %s -k %s -m %s -t %s -s %s' % \
- (smartpca,ingeno, inmap, inped, eigenouts[1],'%s_eigensoftplot.pdf' % title,eigenouts[2],eigenlogf, \
+ smartCL = '%s -i %s.bed -a %s.bim -b %s.fam -o %s -p %s -e %s -l %s -k %s -m %s -t %s -s %s' % \
+ (smartpca,infile, infile, infile, eigenouts[1],'%s_eigensoftplot.pdf' % title,eigenouts[2],eigenlogf, \
eigen_k, eigen_m, eigen_t, eigen_s)
env = os.environ
- p=subprocess.Popen(smartCL,shell=True,cwd=newfilepath)
- retval = p.wait()
+ p=subprocess.Popen(smartCL,shell=True,cwd=newfilepath)
+ retval = p.wait()
# copy the eigenvector output file needed for adjustment to the user's eigenstrat library directory
elog = file(os.path.join(newfilepath,eigenlogf),'r').read()
eeigen = os.path.join(newfilepath,'%s.evec' % eigenouts[1]) # need these for adjusting
@@ -360,7 +381,7 @@
eigpcaRes = ''
file(eigpca,'w').write(eigpcaRes)
makePlot(eigpca=eigpca,pdfname=newfiles[0],title=title,nfp=newfilepath,rexe=rexe)
- s = 'Output from %s run at %s<br/>\n' % (progname,timenow())
+ s = 'Output from %s run at %s<br/>\n' % (progname,timenow())
lf.write('<h4>%s</h4>\n' % s)
lf.write('newfilepath=%s, rexe=%s' % (newfilepath,rexe))
lf.write('(click on the image below to see a much higher quality PDF version)')
@@ -370,9 +391,10 @@
lf.write('<a href="%s"><img src="%s" alt="%s" hspace="10" align="left" /></a></td></tr></table><br/>\n' \
% (newfiles[0],thumbnail,explanations[0]))
allfiles = os.listdir(newfilepath)
+ allfiles.sort()
sizes = [getfSize(x,newfilepath) for x in allfiles]
- allfiles = ['<li><a href="%s">%s %s</a></li>\n' % (x,x,sizes[i]) for i,x in enumerate(allfiles)] # html list
- lf.write('<div class="document">All Files:<ol>%s</ol></div>' % ''.join(allfiles))
+ lallfiles = ['<li><a href="%s">%s %s</a></li>\n' % (x,x,sizes[i]) for i,x in enumerate(allfiles)] # html list
+ lf.write('<div class="document">All Files:<ol>%s</ol></div>' % ''.join(lallfiles))
lf.write('<div class="document">Log %s contents follow below<p/>' % eigenlogf)
lf.write('<pre>%s</pre></div>' % elog) # the eigenlog
s = 'If you need to rerun this analysis, the command line used was\n%s\n<p/>' % (smartCL)
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgEigPCA.xml
--- a/tools/rgenetics/rgEigPCA.xml Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgEigPCA.xml Wed May 19 10:28:41 2010 -0400
@@ -10,7 +10,7 @@
<inputs>
<param name="i" type="data" label="Input genotype data file"
- size="120" format="eigenstratgeno,lped,pbed" />
+ size="120" format="ldindep" />
<param name="title" type="text" value="Ancestry PCA" label="Title for outputs from this run"
size="80" />
<param name="k" type="integer" value="4" label="Number of principal components to output"
@@ -35,7 +35,7 @@
<tests>
<test>
- <param name='i' value='tinywga' ftype='pbed' >
+ <param name='i' value='tinywga' ftype='ldindep' >
<metadata name='base_name' value='tinywga' />
<composite_data value='tinywga.bim' />
<composite_data value='tinywga.bed' />
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgEigPCA_code.py
--- a/tools/rgenetics/rgEigPCA_code.py Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgEigPCA_code.py Wed May 19 10:28:41 2010 -0400
@@ -1,27 +1,42 @@
-from galaxy import datatypes,model
-import sys,time,string
-
-def timenow():
- """return current time as a string
- """
- return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
-
-def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr):
- """Sets the name of the html output file
- """
- indatname = inp_data['i'].name
- job_name = param_dict.get( 'title', 'Eigenstrat run' )
- job_name = job_name.encode()
- killme = string.punctuation + string.whitespace
- trantab = string.maketrans(killme,'_'*len(killme))
- job_name = job_name.translate(trantab)
- info = '%s rgEigPCA2 on %s at %s' % (job_name,indatname,timenow())
- exts = ['html','txt']
- for i,ofname in enumerate(['out_file1','pca']):
- data = out_data[ofname]
- ext = exts[i]
- newname = '%s.%s' % (job_name,ext)
- data.name = newname
- data.info = info
- out_data[ofname] = data
- app.model.context.flush()
+from galaxy import datatypes,model
+import sys,time,string,shutil,os
+
+def timenow():
+ """return current time as a string
+ """
+ return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
+
+def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr):
+ """Sets the name of the html output file
+ if we created a set of ldreduced files, we need to move them into the input files_path
+ so it doesn't need to be done again
+ """
+ indat = inp_data['i']
+ indatname = indat.name
+ base_name = indat.metadata.base_name
+ todir = indat.extra_files_path # where the ldreduced stuff should be
+ job_name = param_dict.get( 'title', 'Eigenstrat run' )
+ job_name = job_name.encode()
+ killme = string.punctuation + string.whitespace
+ trantab = string.maketrans(killme,'_'*len(killme))
+ job_name = job_name.translate(trantab)
+ info = '%s rgEigPCA2 on %s at %s' % (job_name,indatname,timenow())
+ exts = ['html','txt']
+ for i,ofname in enumerate(['out_file1','pca']):
+ data = out_data[ofname]
+ ext = exts[i]
+ newname = '%s.%s' % (job_name,ext)
+ data.name = newname
+ data.info = info
+ out_data[ofname] = data
+ if i == 0:
+ fromdir = data.extra_files_path
+ ldfname = '%s_INDEP_THIN' % base_name # we store ld reduced and thinned data
+ ldout = os.path.join(todir,ldfname)
+ ldin = os.path.join(fromdir,ldfname)
+ if os.path.exists('%s.bed' % ldin) and not os.path.exists('%s.bed' % ldout): # copy ldreduced to input for next time
+ for ext in ['bim','bed','fam']:
+ src = '%s.%s' % (ldin,ext)
+ dest = '%s.%s' % (ldout,ext)
+ shutil.copy(src,dest)
+ app.model.context.flush()
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgGRR.py
--- a/tools/rgenetics/rgGRR.py Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgGRR.py Wed May 19 10:28:41 2010 -0400
@@ -1,1089 +1,1089 @@
-"""
-# july 2009: Need to see outliers so need to draw them last?
-# could use clustering on the zscores to guess real relationships for unrelateds
-# but definitely need to draw last
-# added MAX_SHOW_ROWS to limit the length of the main report page
-# Changes for Galaxy integration
-# added more robust knuth method for one pass mean and sd
-# no difference really - let's use scipy.mean() and scipy.std() instead...
-# fixed labels and changed to .xls for outlier reports so can open in excel
-# interesting - with a few hundred subjects, 5k gives good resolution
-# and 100k gives better but not by much
-# TODO remove non autosomal markers
-# TODO it would be best if label had the zmean and zsd as these are what matter for
-# outliers rather than the group mean/sd
-# mods to rgGRR.py from channing CVS which John Ziniti has rewritten to produce SVG plots
-# to make a Galaxy tool - we need the table of mean and SD for interesting pairs, the SVG and the log
-# so the result should be an HTML file
-
-# rgIBS.py
-# use a random subset of markers for a quick ibs
-# to identify sample dups and closely related subjects
-# try snpMatrix and plink and see which one works best for us?
-# abecasis grr plots mean*sd for every subject to show clusters
-# mods june 23 rml to avoid non-autosomal markers
-# we seem to be distinguishing parent-child by gender - 2 clouds!
-
-
-snpMatrix from David Clayton has:
-ibs.stats function to calculate the identity-by-state stats of a group of samples
-Description
-Given a snp.matrix-class or a X.snp.matrix-class object with N samples, calculates some statistics
-about the relatedness of every pair of samples within.
-
-Usage
-ibs.stats(x)
-8 ibs.stats
-Arguments
-x a snp.matrix-class or a X.snp.matrix-class object containing N samples
-Details
-No-calls are excluded from consideration here.
-Value
-A data.frame containing N(N - 1)/2 rows, where the row names are the sample name pairs separated
-by a comma, and the columns are:
-Count count of identical calls, exclusing no-calls
-Fraction fraction of identical calls comparied to actual calls being made in both samples
-Warning
-In some applications, it may be preferable to subset a (random) selection of SNPs first - the
-calculation
-time increases as N(N - 1)M/2 . Typically for N = 800 samples and M = 3000 SNPs, the
-calculation time is about 1 minute. A full GWA scan could take hours, and quite unnecessary for
-simple applications such as checking for duplicate or related samples.
-Note
-This is mostly written to find mislabelled and/or duplicate samples.
-Illumina indexes their SNPs in alphabetical order so the mitochondria SNPs comes first - for most
-purpose it is undesirable to use these SNPs for IBS purposes.
-TODO: Worst-case S4 subsetting seems to make 2 copies of a large object, so one might want to
-subset before rbind(), etc; a future version of this routine may contain a built-in subsetting facility
-"""
-import sys,os,time,random,string,copy,optparse
-
-try:
- set
-except NameError:
- from Sets import Set as set
-
-from rgutils import timenow,pruneLD,plinke,openOrMakeLDreduced
-
-import plinkbinJZ
-
-
-opts = None
-verbose = False
-
-showPolygons = False
-
-class NullDevice:
- def write(self, s):
- pass
-
-tempstderr = sys.stderr # save
-sys.stderr = NullDevice()
-# need to avoid blather about deprecation and other strange stuff from scipy
-# the current galaxy job runner assumes that
-# the job is in error if anything appears on sys.stderr
-# grrrrr. James wants to keep it that way instead of using the
-# status flag for some strange reason. Presumably he doesn't use R or (in this case, scipy)
-import numpy
-import scipy
-from scipy import weave
-
-
-sys.stderr=tempstderr
-
-
-PROGNAME = os.path.split(sys.argv[0])[-1]
-X_AXIS_LABEL = 'Mean Alleles Shared'
-Y_AXIS_LABEL = 'SD Alleles Shared'
-LEGEND_ALIGN = 'topleft'
-LEGEND_TITLE = 'Relationship'
-DEFAULT_SYMBOL_SIZE = 1.0 # default symbol size
-DEFAULT_SYMBOL_SIZE = 0.5 # default symbol size
-
-### Some colors for R/rpy
-R_BLACK = 1
-R_RED = 2
-R_GREEN = 3
-R_BLUE = 4
-R_CYAN = 5
-R_PURPLE = 6
-R_YELLOW = 7
-R_GRAY = 8
-
-### ... and some point-styles
-
-###
-PLOT_HEIGHT = 600
-PLOT_WIDTH = 1150
-
-
-#SVG_COLORS = ('black', 'darkblue', 'blue', 'deepskyblue', 'firebrick','maroon','crimson')
-#SVG_COLORS = ('cyan','dodgerblue','mediumpurple', 'fuchsia', 'red','gold','gray')
-SVG_COLORS = ('cyan','dodgerblue','mediumpurple','forestgreen', 'lightgreen','gold','gray')
-# dupe,parentchild,sibpair,halfsib,parents,unrel,unkn
-#('orange', 'red', 'green', 'chartreuse', 'blue', 'purple', 'gray')
-
-OUTLIERS_HEADER = 'Mean\tSdev\tZ(mean)\tZ(sdev)\tFID1\tIID1\tFID2\tIID2\tMean(Rel_Mean)\tSdev(Rel_Mean)\tMean(Rel_Sdev)\tSdev(Rel_Sdev)\n'
-OUTLIERS_HEADER_list = ['Mean','Sdev','ZMean','ZSdev','FID1','IID1','FID2','IID2',
-'RGMean_M','RGMean_SD','RGSD_M','RGSD_SD']
-TABLE_HEADER='fid1 iid1\tfid2 iid2\tmean\tsdev\tzmean\tzsdev\tgeno\trelcode\n'
-
-
-### Relationship codes, text, and lookups/mappings
-N_RELATIONSHIP_TYPES = 7
-REL_DUPE, REL_PARENTCHILD, REL_SIBS, REL_HALFSIBS, REL_RELATED, REL_UNRELATED, REL_UNKNOWN = range(N_RELATIONSHIP_TYPES)
-REL_LOOKUP = {
- REL_DUPE: ('dupe', R_BLUE, 1),
- REL_PARENTCHILD: ('parentchild', R_YELLOW, 1),
- REL_SIBS: ('sibpairs', R_RED, 1),
- REL_HALFSIBS: ('halfsibs', R_GREEN, 1),
- REL_RELATED: ('parents', R_PURPLE, 1),
- REL_UNRELATED: ('unrelated', R_CYAN, 1),
- REL_UNKNOWN: ('unknown', R_GRAY, 1),
- }
-OUTLIER_STDEVS = {
- REL_DUPE: 2,
- REL_PARENTCHILD: 2,
- REL_SIBS: 2,
- REL_HALFSIBS: 2,
- REL_RELATED: 2,
- REL_UNRELATED: 3,
- REL_UNKNOWN: 2,
- }
-# note now Z can be passed in
-
-REL_STATES = [REL_LOOKUP[r][0] for r in range(N_RELATIONSHIP_TYPES)]
-REL_COLORS = SVG_COLORS
-REL_POINTS = [REL_LOOKUP[r][2] for r in range(N_RELATIONSHIP_TYPES)]
-
-DEFAULT_MAX_SAMPLE_SIZE = 10000
-
-REF_COUNT_HOM1 = 3
-REF_COUNT_HET = 2
-REF_COUNT_HOM2 = 1
-MISSING = 0
-MAX_SHOW_ROWS = 100 # framingham has millions - delays showing output page - so truncate and explain
-MARKER_PAIRS_PER_SECOND_SLOW = 15000000.0
-MARKER_PAIRS_PER_SECOND_FAST = 70000000.0
-
-
-galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
-<title></title>
-<link rel="stylesheet" href="/static/style/base.css" type="text/css" />
-</head>
-<body>
-<div class="document">
-"""
-
-
-SVG_HEADER = '''<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.2//EN" "http://www.w3.org/Graphics/SVG/1.2/DTD/svg12.dtd">
-
-<svg width="1280" height="800"
- xmlns="http://www.w3.org/2000/svg" version="1.2"
- xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1280 800" onload="init()">
-
- <script type="text/ecmascript" xlink:href="/static/scripts/checkbox_and_radiobutton.js"/>
- <script type="text/ecmascript" xlink:href="/static/scripts/helper_functions.js"/>
- <script type="text/ecmascript" xlink:href="/static/scripts/timer.js"/>
- <script type="text/ecmascript">
- <![CDATA[
- var checkBoxes = new Array();
- var radioGroupBandwidth;
- var colours = ['%s','%s','%s','%s','%s','%s','%s'];
- function init() {
- var style = {"font-family":"Arial,Helvetica", "fill":"black", "font-size":12};
- var dist = 12;
- var yOffset = 4;
-
- //A checkBox for each relationship type dupe,parentchild,sibpair,halfsib,parents,unrel,unkn
- checkBoxes["dupe"] = new checkBox("dupe","checkboxes",20,40,"cbRect","cbCross",true,"Duplicate",style,dist,yOffset,undefined,hideShowLayer);
- checkBoxes["parentchild"] = new checkBox("parentchild","checkboxes",20,60,"cbRect","cbCross",true,"Parent-Child",style,dist,yOffset,undefined,hideShowLayer);
- checkBoxes["sibpairs"] = new checkBox("sibpairs","checkboxes",20,80,"cbRect","cbCross",true,"Sib-pairs",style,dist,yOffset,undefined,hideShowLayer);
- checkBoxes["halfsibs"] = new checkBox("halfsibs","checkboxes",20,100,"cbRect","cbCross",true,"Half-sibs",style,dist,yOffset,undefined,hideShowLayer);
- checkBoxes["parents"] = new checkBox("parents","checkboxes",20,120,"cbRect","cbCross",true,"Parents",style,dist,yOffset,undefined,hideShowLayer);
- checkBoxes["unrelated"] = new checkBox("unrelated","checkboxes",20,140,"cbRect","cbCross",true,"Unrelated",style,dist,yOffset,undefined,hideShowLayer);
- checkBoxes["unknown"] = new checkBox("unknown","checkboxes",20,160,"cbRect","cbCross",true,"Unknown",style,dist,yOffset,undefined,hideShowLayer);
-
- }
-
- function hideShowLayer(id, status, label) {
- var vis = "hidden";
- if (status) {
- vis = "visible";
- }
- document.getElementById(id).setAttributeNS(null, 'visibility', vis);
- }
-
- function showBTT(evt, rel, mm, dm, md, dd, n, mg, dg, lg, hg) {
- var x = parseInt(evt.pageX)-250;
- var y = parseInt(evt.pageY)-110;
- switch(rel) {
- case 0:
- fill = colours[rel];
- relt = "dupe";
- break;
- case 1:
- fill = colours[rel];
- relt = "parentchild";
- break;
- case 2:
- fill = colours[rel];
- relt = "sibpairs";
- break;
- case 3:
- fill = colours[rel];
- relt = "halfsibs";
- break;
- case 4:
- fill = colours[rel];
- relt = "parents";
- break;
- case 5:
- fill = colours[rel];
- relt = "unrelated";
- break;
- case 6:
- fill = colours[rel];
- relt = "unknown";
- break;
- default:
- fill = "cyan";
- relt = "ERROR_CODE: "+rel;
- }
-
- document.getElementById("btRel").textContent = "GROUP: "+relt;
- document.getElementById("btMean").textContent = "mean="+mm+" +/- "+dm;
- document.getElementById("btSdev").textContent = "sdev="+dm+" +/- "+dd;
- document.getElementById("btPair").textContent = "npairs="+n;
- document.getElementById("btGeno").textContent = "ngenos="+mg+" +/- "+dg+" (min="+lg+", max="+hg+")";
- document.getElementById("btHead").setAttribute('fill', fill);
-
- var tt = document.getElementById("btTip");
- tt.setAttribute("transform", "translate("+x+","+y+")");
- tt.setAttribute('visibility', 'visible');
- }
-
- function showOTT(evt, rel, s1, s2, mean, sdev, ngeno, rmean, rsdev) {
- var x = parseInt(evt.pageX)-150;
- var y = parseInt(evt.pageY)-180;
-
- switch(rel) {
- case 0:
- fill = colours[rel];
- relt = "dupe";
- break;
- case 1:
- fill = colours[rel];
- relt = "parentchild";
- break;
- case 2:
- fill = colours[rel];
- relt = "sibpairs";
- break;
- case 3:
- fill = colours[rel];
- relt = "halfsibs";
- break;
- case 4:
- fill = colours[rel];
- relt = "parents";
- break;
- case 5:
- fill = colours[rel];
- relt = "unrelated";
- break;
- case 6:
- fill = colours[rel];
- relt = "unknown";
- break;
- default:
- fill = "cyan";
- relt = "ERROR_CODE: "+rel;
- }
-
- document.getElementById("otRel").textContent = "PAIR: "+relt;
- document.getElementById("otS1").textContent = "s1="+s1;
- document.getElementById("otS2").textContent = "s2="+s2;
- document.getElementById("otMean").textContent = "mean="+mean;
- document.getElementById("otSdev").textContent = "sdev="+sdev;
- document.getElementById("otGeno").textContent = "ngenos="+ngeno;
- document.getElementById("otRmean").textContent = "relmean="+rmean;
- document.getElementById("otRsdev").textContent = "relsdev="+rsdev;
- document.getElementById("otHead").setAttribute('fill', fill);
-
- var tt = document.getElementById("otTip");
- tt.setAttribute("transform", "translate("+x+","+y+")");
- tt.setAttribute('visibility', 'visible');
- }
-
- function hideBTT(evt) {
- document.getElementById("btTip").setAttributeNS(null, 'visibility', 'hidden');
- }
-
- function hideOTT(evt) {
- document.getElementById("otTip").setAttributeNS(null, 'visibility', 'hidden');
- }
-
- ]]>
- </script>
- <defs>
- <!-- symbols for check boxes -->
- <symbol id="cbRect" overflow="visible">
- <rect x="-5" y="-5" width="10" height="10" fill="white" stroke="dimgray" stroke-width="1" cursor="pointer"/>
- </symbol>
- <symbol id="cbCross" overflow="visible">
- <g pointer-events="none" stroke="black" stroke-width="1">
- <line x1="-3" y1="-3" x2="3" y2="3"/>
- <line x1="3" y1="-3" x2="-3" y2="3"/>
- </g>
- </symbol>
- </defs>
-
-<desc>Developer Works Dynamic Scatter Graph Scaling Example</desc>
-
-<!-- Now Draw the main X and Y axis -->
-<g style="stroke-width:1.0; stroke:black; shape-rendering:crispEdges">
- <!-- X Axis top and bottom -->
- <path d="M 100 100 L 1250 100 Z"/>
- <path d="M 100 700 L 1250 700 Z"/>
-
- <!-- Y Axis left and right -->
- <path d="M 100 100 L 100 700 Z"/>
- <path d="M 1250 100 L 1250 700 Z"/>
-</g>
-
-<g transform="translate(100,100)">
-
- <!-- Grid Lines -->
- <g style="fill:none; stroke:#dddddd; stroke-width:1; stroke-dasharray:2,2; text-anchor:end; shape-rendering:crispEdges">
-
- <!-- Vertical grid lines -->
- <line x1="125" y1="0" x2="115" y2="600" />
- <line x1="230" y1="0" x2="230" y2="600" />
- <line x1="345" y1="0" x2="345" y2="600" />
- <line x1="460" y1="0" x2="460" y2="600" />
- <line x1="575" y1="0" x2="575" y2="600" style="stroke-dasharray:none;" />
- <line x1="690" y1="0" x2="690" y2="600" />
- <line x1="805" y1="0" x2="805" y2="600" />
- <line x1="920" y1="0" x2="920" y2="600" />
- <line x1="1035" y1="0" x2="1035" y2="600" />
-
- <!-- Horizontal grid lines -->
- <line x1="0" y1="60" x2="1150" y2="60" />
- <line x1="0" y1="120" x2="1150" y2="120" />
- <line x1="0" y1="180" x2="1150" y2="180" />
- <line x1="0" y1="240" x2="1150" y2="240" />
- <line x1="0" y1="300" x2="1150" y2="300" style="stroke-dasharray:none;" />
- <line x1="0" y1="360" x2="1150" y2="360" />
- <line x1="0" y1="420" x2="1150" y2="420" />
- <line x1="0" y1="480" x2="1150" y2="480" />
- <line x1="0" y1="540" x2="1150" y2="540" />
- </g>
-
- <!-- Legend -->
- <g style="fill:black; stroke:none" font-size="12" font-family="Arial" transform="translate(25,25)">
- <rect width="160" height="270" style="fill:none; stroke:black; shape-rendering:crispEdges" />
- <text x="5" y="20" style="fill:black; stroke:none;" font-size="13" font-weight="bold">Given Pair Relationship</text>
- <rect x="120" y="35" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <rect x="120" y="55" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <rect x="120" y="75" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <rect x="120" y="95" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <rect x="120" y="115" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <rect x="120" y="135" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <rect x="120" y="155" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
- <text x="15" y="195" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore gt 15</text>
- <circle cx="125" cy="192" r="6" style="stroke:red; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
- <text x="15" y="215" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore 4 to 15</text>
- <circle cx="125" cy="212" r="3" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
- <text x="15" y="235" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore lt 4</text>
- <circle cx="125" cy="232" r="2" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
- <g id="checkboxes">
- </g>
- </g>
-
-
- <g style='fill:black; stroke:none' font-size="17" font-family="Arial">
- <!-- X Axis Labels -->
- <text x="480" y="660">Mean Alleles Shared</text>
- <text x="0" y="630" >1.0</text>
- <text x="277" y="630" >1.25</text>
- <text x="564" y="630" >1.5</text>
- <text x="842" y="630" >1.75</text>
- <text x="1140" y="630" >2.0</text>
- </g>
-
- <g transform="rotate(270)" style="fill:black; stroke:none" font-size="17" font-family="Arial">
- <!-- Y Axis Labels -->
- <text x="-350" y="-40">SD Alleles Shared</text>
- <text x="-20" y="-10" >1.0</text>
- <text x="-165" y="-10" >0.75</text>
- <text x="-310" y="-10" >0.5</text>
- <text x="-455" y="-10" >0.25</text>
- <text x="-600" y="-10" >0.0</text>
- </g>
-
-<!-- Plot Title -->
-<g style="fill:black; stroke:none" font-size="18" font-family="Arial">
- <text x="425" y="-30">%s</text>
-</g>
-
-<!-- One group/layer of points for each relationship type -->
-'''
-
-SVG_FOOTER = '''
-<!-- End of Data -->
-</g>
-<g id="btTip" visibility="hidden" style="stroke-width:1.0; fill:black; stroke:none;" font-size="10" font-family="Arial">
- <rect width="250" height="110" style="fill:silver" rx="2" ry="2"/>
- <rect id="btHead" width="250" height="20" rx="2" ry="2" />
- <text id="btRel" y="14" x="85">unrelated</text>
- <text id="btMean" y="40" x="4">mean=1.5 +/- 0.04</text>
- <text id="btSdev" y="60" x="4">sdev=0.7 +/- 0.03</text>
- <text id="btPair" y="80" x="4">npairs=1152</text>
- <text id="btGeno" y="100" x="4">ngenos=4783 +/- 24 (min=1000, max=5000)</text>
-</g>
-
-<g id="otTip" visibility="hidden" style="stroke-width:1.0; fill:black; stroke:none;" font-size="10" font-family="Arial">
- <rect width="150" height="180" style="fill:silver" rx="2" ry="2"/>
- <rect id="otHead" width="150" height="20" rx="2" ry="2" />
- <text id="otRel" y="14" x="40">sibpairs</text>
- <text id="otS1" y="40" x="4">s1=fid1,iid1</text>
- <text id="otS2" y="60" x="4">s2=fid2,iid2</text>
- <text id="otMean" y="80" x="4">mean=1.82</text>
- <text id="otSdev" y="100" x="4">sdev=0.7</text>
- <text id="otGeno" y="120" x="4">ngeno=4487</text>
- <text id="otRmean" y="140" x="4">relmean=1.85</text>
- <text id="otRsdev" y="160" x="4">relsdev=0.65</text>
-</g>
-</svg>
-'''
-
-OUTLIERS_HEADER = 'Mean\tSdev\tZ(mean)\tZ(sdev)\tFID1\tIID1\tFID2\tIID2\tMean(Mean)\tSdev(Mean)\tMean(Sdev)\tSdev(Sdev)\n'
-
-DEFAULT_MAX_SAMPLE_SIZE = 5000
-
-REF_COUNT_HOM1 = 3
-REF_COUNT_HET = 2
-REF_COUNT_HOM2 = 1
-MISSING = 0
-
-MARKER_PAIRS_PER_SECOND_SLOW = 15000000
-MARKER_PAIRS_PER_SECOND_FAST = 70000000
-
-POLYGONS = {
- REL_UNRELATED: ((1.360, 0.655), (1.385, 0.730), (1.620, 0.575), (1.610, 0.505)),
- REL_HALFSIBS: ((1.630, 0.500), (1.630, 0.550), (1.648, 0.540), (1.648, 0.490)),
- REL_SIBS: ((1.660, 0.510), (1.665, 0.560), (1.820, 0.410), (1.820, 0.390)),
- REL_PARENTCHILD: ((1.650, 0.470), (1.650, 0.490), (1.750, 0.440), (1.750, 0.420)),
- REL_DUPE: ((1.970, 0.000), (1.970, 0.150), (2.000, 0.150), (2.000, 0.000)),
- }
-
-def distance(point1, point2):
- """ Calculate the distance between two points
- """
- (x1,y1) = [float(d) for d in point1]
- (x2,y2) = [float(d) for d in point2]
- dx = abs(x1 - x2)
- dy = abs(y1 - y2)
- return math.sqrt(dx**2 + dy**2)
-
-def point_inside_polygon(x, y, poly):
- """ Determine if a point (x,y) is inside a given polygon or not
- poly is a list of (x,y) pairs.
-
- Taken from: http://www.ariel.com.au/a/python-point-int-poly.html
- """
-
- n = len(poly)
- inside = False
-
- p1x,p1y = poly[0]
- for i in range(n+1):
- p2x,p2y = poly[i % n]
- if y > min(p1y,p2y):
- if y <= max(p1y,p2y):
- if x <= max(p1x,p2x):
- if p1y != p2y:
- xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
- if p1x == p2x or x <= xinters:
- inside = not inside
- p1x,p1y = p2x,p2y
- return inside
-
-def readMap(pedfile):
- """
- """
- mapfile = pedfile.replace('.ped', '.map')
- marker_list = []
- if os.path.exists(mapfile):
- print 'readMap: %s' % (mapfile)
- fh = file(mapfile, 'r')
- for line in fh:
- marker_list.append(line.strip().split())
- fh.close()
- print 'readMap: %s markers' % (len(marker_list))
- return marker_list
-
-def calcMeanSD(useme):
- """
- A numerically stable algorithm is given below. It also computes the mean.
- This algorithm is due to Knuth,[1] who cites Welford.[2]
- n = 0
- mean = 0
- M2 = 0
-
- foreach x in data:
- n = n + 1
- delta = x - mean
- mean = mean + delta/n
- M2 = M2 + delta*(x - mean) // This expression uses the new value of mean
- end for
-
- variance_n = M2/n
- variance = M2/(n - 1)
- """
- mean = 0.0
- M2 = 0.0
- sd = 0.0
- n = len(useme)
- if n > 1:
- for i,x in enumerate(useme):
- delta = x - mean
- mean = mean + delta/(i+1) # knuth uses n+=1 at start
- M2 = M2 + delta*(x - mean) # This expression uses the new value of mean
- variance = M2/(n-1) # assume is sample so lose 1 DOF
- sd = pow(variance,0.5)
- return mean,sd
-
-
-def doIBSpy(ped=None,basename='',outdir=None,logf=None,
- nrsSamples=10000,title='title',pdftoo=0,Zcutoff=2.0):
- #def doIBS(pedName, title, nrsSamples=None, pdftoo=False):
- """ started with snpmatrix but GRR uses actual IBS counts and sd's
- """
- repOut = [] # text strings to add to the html display
- refallele = {}
- tblf = '%s_table.xls' % (title)
- tbl = file(os.path.join(outdir,tblf), 'w')
- tbl.write(TABLE_HEADER)
- svgf = '%s.svg' % (title)
- svg = file(os.path.join(outdir,svgf), 'w')
-
- nMarkers = len(ped._markers)
- if nMarkers < 5:
- print sys.stderr, '### ERROR - %d is too few markers for reliable estimation in %s - terminating' % (nMarkers,PROGNAME)
- sys.exit(1)
- nSubjects = len(ped._subjects)
- nrsSamples = min(nMarkers, nrsSamples)
- if opts and opts.use_mito:
- markers = range(nMarkers)
- nrsSamples = min(len(markers), nrsSamples)
- sampleIndexes = sorted(random.sample(markers, nrsSamples))
- else:
- autosomals = ped.autosomal_indices()
- nrsSamples = min(len(autosomals), nrsSamples)
- sampleIndexes = sorted(random.sample(autosomals, nrsSamples))
-
- print ''
- print 'Getting random.sample of %s from %s total' % (nrsSamples, nMarkers)
- npairs = (nSubjects*(nSubjects-1))/2 # total rows in table
- newfiles=[svgf,tblf]
- explanations = ['rgGRR Plot (requires SVG)','Mean by SD alleles shared - %d rows' % npairs]
- # these go with the output file links in the html file
- s = 'Reading genotypes for %s subjects and %s markers\n' % (nSubjects, nrsSamples)
- logf.write(s)
- minUsegenos = nrsSamples/2 # must have half?
- nGenotypes = nSubjects*nrsSamples
- stime = time.time()
- emptyRows = set()
- genos = numpy.zeros((nSubjects, nrsSamples), dtype=int)
- for s in xrange(nSubjects):
- nValid = 0
- #getGenotypesByIndices(self, s, mlist, format)
- genos[s] = ped.getGenotypesByIndices(s, sampleIndexes, format='ref')
- nValid = sum([1 for g in genos[s] if g])
- if not nValid:
- emptyRows.add(s)
- sub = ped.getSubject(s)
- print 'All missing for row %d (%s)' % (s, sub)
- logf.write('All missing for row %d (%s)\n' % (s, sub))
- rtime = time.time() - stime
- if verbose:
- print '@@Read %s genotypes in %s seconds' % (nGenotypes, rtime)
-
-
- ### Now the expensive part. For each pair of subjects, we get the mean number
- ### and standard deviation of shared alleles over all of the markers where both
- ### subjects have a known genotype. Identical subjects should have mean shared
- ### alleles very close to 2.0 with a standard deviation very close to 0.0.
- tot = nSubjects*(nSubjects-1)/2
- nprog = tot/10
- nMarkerpairs = tot * nrsSamples
- estimatedTimeSlow = nMarkerpairs/MARKER_PAIRS_PER_SECOND_SLOW
- estimatedTimeFast = nMarkerpairs/MARKER_PAIRS_PER_SECOND_FAST
-
- pairs = []
- pair_data = {}
- means = [] ## Mean IBS for each pair
- ngenoL = [] ## Count of comparable genotypes for each pair
- sdevs = [] ## Standard dev for each pair
- rels = [] ## A relationship code for each pair
- zmeans = [0.0 for x in xrange(tot)] ## zmean score for each pair for the relgroup
- zstds = [0.0 for x in xrange(tot)] ## zstd score for each pair for the relgrp
- skip = set()
- ndone = 0 ## How many have been done so far
-
- logf.write('Calculating %d pairs...\n' % (tot))
- logf.write('Estimated time is %2.2f to %2.2f seconds ...\n' % (estimatedTimeFast, estimatedTimeSlow))
-
- t1sum = 0
- t2sum = 0
- t3sum = 0
- now = time.time()
- scache = {}
- _founder_cache = {}
- C_CODE = """
- #include "math.h"
- int i;
- int sumibs = 0;
- int ssqibs = 0;
- int ngeno = 0;
- float mean = 0;
- float M2 = 0;
- float delta = 0;
- float sdev=0;
- float variance=0;
- for (i=0; i<nrsSamples; i++) {
- int a1 = g1[i];
- int a2 = g2[i];
- if (a1 != 0 && a2 != 0) {
- ngeno += 1;
- int shared = 2-abs(a1-a2);
- delta = shared - mean;
- mean = mean + delta/ngeno;
- M2 += delta*(shared-mean);
- // yes that second time, the updated mean is used see calcmeansd above;
- //printf("%d %d %d %d %d %d\\n", i, a1, a2, ngeno, shared, squared);
- }
- }
- if (ngeno > 1) {
- variance = M2/(ngeno-1);
- sdev = sqrt(variance);
- //printf("OK: %d %3.2f %3.2f\\n", ngeno, mean, sdev);
- }
- //printf("%d %d %d %1.2f %1.2f\\n", ngeno, sumibs, ssqibs, mean, sdev);
- result[0] = ngeno;
- result[1] = mean;
- result[2] = sdev;
- return_val = ngeno;
- """
- started = time.time()
- for s1 in xrange(nSubjects):
- if s1 in emptyRows:
- continue
- (fid1,iid1,did1,mid1,sex1,phe1,iid1,d_sid1,m_sid1) = scache.setdefault(s1, ped.getSubject(s1))
-
- isFounder1 = _founder_cache.setdefault(s1, (did1==mid1))
- g1 = genos[s1]
-
- for s2 in xrange(s1+1, nSubjects):
- if s2 in emptyRows:
- continue
- t1s = time.time()
-
- (fid2,iid2,did2,mid2,sex2,phe2,iid2,d_sid2,m_sid2) = scache.setdefault(s2, ped.getSubject(s2))
-
- g2 = genos[s2]
- isFounder2 = _founder_cache.setdefault(s2, (did2==mid2))
-
- # Determine the relationship for this pair
- relcode = REL_UNKNOWN
- if (fid2 == fid1):
- if iid1 == iid2:
- relcode = REL_DUPE
- elif (did2 == did1) and (mid2 == mid1) and did1 != mid1:
- relcode = REL_SIBS
- elif (iid1 == mid2) or (iid1 == did2) or (iid2 == mid1) or (iid2 == did1):
- relcode = REL_PARENTCHILD
- elif (str(did1) != '0' and (did2 == did1)) or (str(mid1) != '0' and (mid2 == mid1)):
- relcode = REL_HALFSIBS
- else:
- # People in the same family should be marked as some other
- # form of related. In general, these people will have a
- # pretty random spread of similarity. This distinction is
- # probably not very useful most of the time
- relcode = REL_RELATED
- else:
- ### Different families
- relcode = REL_UNRELATED
-
- t1e = time.time()
- t1sum += t1e-t1s
-
-
- ### Calculate sum(2-abs(a1-a2)) and sum((2-abs(a1-a2))**2) and count
- ### the number of contributing genotypes. These values are not actually
- ### calculated here, but instead are looked up in a table for speed.
- ### FIXME: This is still too slow ...
- result = [0.0, 0.0, 0.0]
- ngeno = weave.inline(C_CODE, ['g1', 'g2', 'nrsSamples', 'result'])
- if ngeno >= minUsegenos:
- _, mean, sdev = result
- means.append(mean)
- sdevs.append(sdev)
- ngenoL.append(ngeno)
- pairs.append((s1, s2))
- rels.append(relcode)
- else:
- skip.add(ndone) # signal no comparable genotypes for this pair
- ndone += 1
- t2e = time.time()
- t2sum += t2e-t1e
- t3e = time.time()
- t3sum += t3e-t2e
-
- logme = [ 'T1: %s' % (t1sum), 'T2: %s' % (t2sum), 'T3: %s' % (t3sum),'TOT: %s' % (t3e-now),
- '%s pairs with no (or not enough) comparable genotypes (%3.1f%%)' % (len(skip),
- float(len(skip))/float(tot)*100)]
- logf.write('%s\n' % '\t'.join(logme))
- ### Calculate mean and standard deviation of scores on a per relationship
- ### type basis, allowing us to flag outliers for each particular relationship
- ### type
- relstats = {}
- relCounts = {}
- outlierFiles = {}
- for relCode, relInfo in REL_LOOKUP.items():
- relName, relColor, relStyle = relInfo
- useme = [means[x] for x in xrange(len(means)) if rels[x] == relCode]
- relCounts[relCode] = len(useme)
- mm = scipy.mean(useme)
- ms = scipy.std(useme)
- useme = [sdevs[x] for x in xrange(len(sdevs)) if rels[x] == relCode]
- sm = scipy.mean(useme)
- ss = scipy.std(useme)
- relstats[relCode] = {'sd':(sm,ss), 'mean':(mm,ms)}
- logf.write('Relstate %s: mean(mean)=%3.2f sdev(mean)=%3.2f, mean(sdev)=%3.2f sdev(sdev)=%3.2f\n' % (relName, mm, ms, sm, ss))
-
- ### now fake z scores for each subject like abecasis recommends max(|zmu|,|zsd|)
- ### within each group, for each pair, z=(groupmean-pairmean)/groupsd
- available = len(means)
- logf.write('%d pairs are available of %d\n' % (available, tot))
- ### s = '\nOutliers:\nrelationship\tzmean\tzsd\tped1\tped2\tmean\tsd\trmeanmean\trmeansd\trsdmean\trsdsd\n'
- ### logf.write(s)
- pairnum = 0
- offset = 0
- nOutliers = 0
- cexs = []
- outlierRecords = dict([(r, []) for r in range(N_RELATIONSHIP_TYPES)])
- zsdmax = 0
- for s1 in range(nSubjects):
- if s1 in emptyRows:
- continue
- (fid1,iid1,did1,mid1,sex1,aff1,ok1,d_sid1,m_sid1) = scache[s1]
- for s2 in range(s1+1, nSubjects):
- if s2 in emptyRows:
- continue
- if pairnum not in skip:
- ### Get group stats for this relationship
- (fid2,iid2,did2,mid2,sex2,aff2,ok2,d_sid2,m_sid2) = scache[s2]
- try:
- r = rels[offset]
- except IndexError:
- logf.write('###OOPS offset %d available %d pairnum %d len(rels) %d', offset, available, pairnum, len(rels))
- rmm,rmd = relstats[r]['mean'] # group mean, group meansd alleles shared
- rdm,rdd = relstats[r]['sd'] # group sdmean, group sdsd alleles shared
-
- try:
- zsd = (sdevs[offset] - rdm)/rdd # distance from group mean in group sd units
- except:
- zsd = 1
- if abs(zsd) > zsdmax:
- zsdmax = zsd # keep for sort scaling
- try:
- zmean = (means[offset] - rmm)/rmd # distance from group mean
- except:
- zmean = 1
- zmeans[offset] = zmean
- zstds[offset] = zsd
- pid=(s1,s2)
- zrad = max(zsd,zmean)
- if zrad < 4:
- zrad = 2
- elif 4 < zrad < 15:
- zrad = 3 # to 9
- else: # > 15 6=24+
- zrad=zrad/4
- zrad = min(zrad,6) # scale limit
- zrad = max(2,max(zsd,zmean)) # as > 2, z grows
- pair_data[pid] = (zmean,zsd,r,zrad)
- if max(zsd,zmean) > Zcutoff: # is potentially interesting
- mean = means[offset]
- sdev = sdevs[offset]
- outlierRecords[r].append((mean, sdev, zmean, zsd, fid1, iid1, fid2, iid2, rmm, rmd, rdm, rdd))
- nOutliers += 1
- tbl.write('%s_%s\t%s_%s\t%f\t%f\t%f\t%f\t%d\t%s\n' % \
- (fid1, iid1, fid2, iid2, mean, sdev, zmean,zsd, ngeno, relcode))
- offset += 1
- pairnum += 1
- logf.write( 'Outliers: %s\n' % (nOutliers))
-
- ### Write outlier files for each relationship type
- repOut.append('<h2>Outliers in tab delimited files linked above are also listed below</h2>')
- lzsd = round(numpy.log10(zsdmax)) + 1
- scalefactor = 10**lzsd
- for relCode, relInfo in REL_LOOKUP.items():
- relName, _, _ = relInfo
- outliers = outlierRecords[relCode]
- if not outliers:
- continue
- outliers = [(scalefactor*int(abs(x[3]))+ int(abs(x[2])),x) for x in outliers] # decorate
- outliers.sort()
- outliers.reverse() # largest deviation first
- outliers = [x[1] for x in outliers] # undecorate
- nrows = len(outliers)
- truncated = 0
- if nrows > MAX_SHOW_ROWS:
- s = '<h3>%s outlying pairs (top %d of %d) from %s</h3><table border="0" cellpadding="3">' % (relName,
- MAX_SHOW_ROWS,nrows,title)
- truncated = nrows - MAX_SHOW_ROWS
- else:
- s = '<h3>%s outlying pairs (n=%d) from %s</h3><table border="0" cellpadding="3">' % (relName,nrows,title)
- repOut.append(s)
- fhname = '%s_rgGRR_%s_outliers.xls' % (title, relName)
- fhpath = os.path.join(outdir,fhname)
- fh = open(fhpath, 'w')
- newfiles.append(fhname)
- explanations.append('%s Outlier Pairs %s, N=%d, Cutoff SD=%f' % (relName,title,len(outliers),Zcutoff))
- fh.write(OUTLIERS_HEADER)
- s = ''.join(['<th>%s</th>' % x for x in OUTLIERS_HEADER_list])
- repOut.append('<tr align="center">%s</tr>' % s)
- for n,rec in enumerate(outliers):
- #(mean, sdev, zmean, zsd, fid1, iid1, fid2, iid2, rmm, rmd, rdm, rdd) = rec
- fh.write('%f\t%f\t%f\t%f\t%s\t%s\t%s\t%s\t%f\t%f\t%f\t%f\n' % tuple(rec))
- # (mean, sdev, zmean, zsd, fid1, iid1, fid2, iid2, rmm, rmd, rdm, rdd))
- s = '''<td>%f</td><td>%f</td><td>%f</td><td>%f</td><td>%s</td><td>%s</td>
- <td>%s</td><td>%s</td><td>%f</td><td>%f</td><td>%f</td><td>%f</td>''' % tuple(rec)
- if n < MAX_SHOW_ROWS:
- repOut.append('<tr align="center">%s</tr>' % s)
- if truncated > 0:
- repOut.append('<H2>WARNING: %d rows truncated - see outlier file for all %d rows</H2>' % (truncated,
- nrows))
- fh.close()
- repOut.append('</table><p>')
-
- ### Now, draw the plot in jpeg and svg formats, and optionally in the PDF format
- ### if requested
- logf.write('Plotting ...')
- pointColors = [REL_COLORS[rel] for rel in rels]
- pointStyles = [REL_POINTS[rel] for rel in rels]
-
- mainTitle = '%s (%s subjects, %d snp)' % (title, nSubjects, nrsSamples)
- svg.write(SVG_HEADER % (SVG_COLORS[0],SVG_COLORS[1],SVG_COLORS[2],SVG_COLORS[3],SVG_COLORS[4],
- SVG_COLORS[5],SVG_COLORS[6],SVG_COLORS[0],SVG_COLORS[0],SVG_COLORS[1],SVG_COLORS[1],
- SVG_COLORS[2],SVG_COLORS[2],SVG_COLORS[3],SVG_COLORS[3],SVG_COLORS[4],SVG_COLORS[4],
- SVG_COLORS[5],SVG_COLORS[5],SVG_COLORS[6],SVG_COLORS[6],mainTitle))
- #rpy.r.jpeg(filename='%s.jpg' % (title), width=1600, height=1200, pointsize=12, quality=100, bg='white')
- #rpy.r.par(mai=(1,1,1,0.5))
- #rpy.r('par(xaxs="i",yaxs="i")')
- #rpy.r.plot(means, sdevs, main=mainTitle, ylab=Y_AXIS_LABEL, xlab=X_AXIS_LABEL, cex=cexs, col=pointColors, pch=pointStyles, xlim=(0,2), ylim=(0,2))
- #rpy.r.legend(LEGEND_ALIGN, legend=REL_STATES, pch=REL_POINTS, col=REL_COLORS, title=LEGEND_TITLE)
- #rpy.r.grid(nx=10, ny=10, col='lightgray', lty='dotted')
- #rpy.r.dev_off()
-
- ### We will now go through each relationship type to partition plot points
- ### into "bulk" and "outlier" groups. Bulk points will represent common
- ### mean/sdev pairs and will cover the majority of the points in the plot --
- ### they will use generic tooltip informtion about all of the pairs
- ### represented by that point. "Outlier" points will be uncommon pairs,
- ### with very specific information in their tooltips. It would be nice to
- ### keep hte total number of plotted points in the SVG representation to
- ### ~10000 (certainly less than 100000?)
- pointMap = {}
- orderedRels = [y[1] for y in reversed(sorted([(relCounts.get(x, 0),x) for x in REL_LOOKUP.keys()]))]
- # do we really want this? I want out of zone points last and big
- for relCode in orderedRels:
- svgColor = SVG_COLORS[relCode]
- relName, relColor, relStyle = REL_LOOKUP[relCode]
- svg.write('<g id="%s" style="stroke:%s; fill:%s; fill-opacity:1.0; stroke-width:1;" cursor="pointer">\n' % (relName, svgColor, svgColor))
- pMap = pointMap.setdefault(relCode, {})
- nPoints = 0
- rpairs=[]
- rgenos=[]
- rmeans=[]
- rsdevs=[]
- rz = []
- for x,rel in enumerate(rels): # all pairs
- if rel == relCode:
- s1,s2 = pairs[x]
- pid=(s1,s2)
- zmean,zsd,r,zrad = pair_data[pid][:4]
- rpairs.append(pairs[x])
- rgenos.append(ngenoL[x])
- rmeans.append(means[x])
- rsdevs.append(sdevs[x])
- rz.append(zrad)
- ### Now add the svg point group for this relationship to the svg file
- for x in range(len(rmeans)):
- svgX = '%d' % ((rmeans[x] - 1.0) * PLOT_WIDTH) # changed so mean scale is 1-2
- svgY = '%d' % (PLOT_HEIGHT - (rsdevs[x] * PLOT_HEIGHT)) # changed so sd scale is 0-1
- s1, s2 = rpairs[x]
- (fid1,uid1,did1,mid1,sex1,phe1,iid1,d_sid1,m_sid1) = scache[s1]
- (fid2,uid2,did2,mid2,sex2,phe2,iid2,d_sid2,m_sid2) = scache[s2]
- ngenos = rgenos[x]
- nPoints += 1
- point = pMap.setdefault((svgX, svgY), [])
- point.append((rmeans[x], rsdevs[x], fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, ngenos,rz[x]))
- for (svgX, svgY) in pMap:
- points = pMap[(svgX, svgY)]
- svgX = int(svgX)
- svgY = int(svgY)
- if len(points) > 1:
- mmean,dmean = calcMeanSD([p[0] for p in points])
- msdev,dsdev = calcMeanSD([p[1] for p in points])
- mgeno,dgeno = calcMeanSD([p[-1] for p in points])
- mingeno = min([p[-1] for p in points])
- maxgeno = max([p[-1] for p in points])
- svg.write("""<circle cx="%d" cy="%d" r="2"
- onmouseover="showBTT(evt, %d, %1.2f, %1.2f, %1.2f, %1.2f, %d, %d, %d, %d, %d)"
- onmouseout="hideBTT(evt)" />\n""" % (svgX, svgY, relCode, mmean, dmean, msdev, dsdev, len(points), mgeno, dgeno, mingeno, maxgeno))
- else:
- mean, sdev, fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, ngenos, zrad = points[0][:12]
- rmean = float(relstats[relCode]['mean'][0])
- rsdev = float(relstats[relCode]['sd'][0])
- if zrad < 4:
- zrad = 2
- elif 4 < zrad < 9:
- zrad = 3 # to 9
- else: # > 9 5=15+
- zrad=zrad/3
- zrad = min(zrad,5) # scale limit
- if zrad <= 3:
- svg.write('<circle cx="%d" cy="%d" r="%s" onmouseover="showOTT(evt, %d, \'%s,%s,%s,%s\', \'%s,%s,%s,%s\', %1.2f, %1.2f, %s, %1.2f, %1.2f)" onmouseout="hideOTT(evt)" />\n' % (svgX, svgY, zrad, relCode, fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, mean, sdev, ngenos, rmean, rsdev))
- else: # highlight pairs a long way from expectation by outlining circle in red
- svg.write("""<circle cx="%d" cy="%d" r="%s" style="stroke:red; fill:%s; fill-opacity:1.0; stroke-width:1;"
- onmouseover="showOTT(evt, %d, \'%s,%s,%s,%s\', \'%s,%s,%s,%s\', %1.2f, %1.2f, %s, %1.2f, %1.2f)"
- onmouseout="hideOTT(evt)" />\n""" % \
- (svgX, svgY, zrad, svgColor, relCode, fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, mean, sdev, ngenos, rmean, rsdev))
- svg.write('</g>\n')
-
- ### Create a pdf as well if indicated on the command line
- ### WARNING! for framingham share, with about 50M pairs, this is a 5.5GB pdf!
-## if pdftoo:
-## pdfname = '%s.pdf' % (title)
-## rpy.r.pdf(pdfname, 6, 6)
-## rpy.r.par(mai=(1,1,1,0.5))
-## rpy.r('par(xaxs="i",yaxs="i")')
-## rpy.r.plot(means, sdevs, main='%s, %d snp' % (title, nSamples), ylab=Y_AXIS_LABEL, xlab=X_AXIS_LABEL, cex=cexs, col=pointColors, pch=pointStyles, xlim=(0,2), ylim=(0,2))
-## rpy.r.legend(LEGEND_ALIGN, legend=REL_STATES, pch=REL_POINTS, col=REL_COLORS, title=LEGEND_TITLE)
-## rpy.r.grid(nx=10, ny=10, col='lightgray', lty='dotted')
-## rpy.r.dev_off()
-
- ### Draw polygons
- if showPolygons:
- svg.write('<g id="polygons" cursor="pointer">\n')
- for rel, poly in POLYGONS.items():
- points = ' '.join(['%s,%s' % ((p[0]-1.0)*float(PLOT_WIDTH), (PLOT_HEIGHT - p[1]*PLOT_HEIGHT)) for p in poly])
- svg.write('<polygon points="%s" fill="transparent" style="stroke:%s; stroke-width:1"/>\n' % (points, SVG_COLORS[rel]))
- svg.write('</g>\n')
-
-
- svg.write(SVG_FOOTER)
- svg.close()
- return newfiles,explanations,repOut
-
-def doIBS(n=100):
- """parse parameters from galaxy
- expect 'input pbed path' 'basename' 'outpath' 'title' 'logpath' 'n'
- <command interpreter="python">
- rgGRR.py $i.extra_files_path/$i.metadata.base_name "$i.metadata.base_name"
- '$out_file1' '$out_file1.files_path' "$title1" '$n' '$Z' '$force'
- </command>
-
- """
- u="""<command interpreter="python">
- rgGRR.py $i.extra_files_path/$i.metadata.base_name "$i.metadata.base_name"
- '$out_file1' '$out_file1.files_path' "$title" '$n' '$Z' '$force'
- </command>"""
-
- if len(sys.argv) < 9:
- print >> sys.stdout, 'Need pbed inpath, basename, out_htmlname, outpath, title, logpath, nSNP, Zcutoff on command line please'
- print >> sys.stdout, u
- sys.exit(1)
- ts = '%s%s' % (string.punctuation,string.whitespace)
- ptran = string.maketrans(ts,'_'*len(ts))
- inpath = sys.argv[1]
- ldpath = os.path.split(inpath)[0]
- basename = sys.argv[2]
- outhtml = sys.argv[3]
- newfilepath = sys.argv[4]
- title = sys.argv[5].translate(ptran)
- logfname = 'Log_%s.txt' % title
- logpath = os.path.join(newfilepath,logfname) # log was a child - make part of html extra_files_path zoo
- n = int(sys.argv[6])
- try:
- Zcutoff = float(sys.argv[7])
- except:
- Zcutoff = 2.0
- if sys.argv[7].lower()=='true':
- forcerebuild = True
- else:
- forcerebuild = False
- try:
- os.makedirs(newfilepath)
- except:
- pass
- logf = file(logpath,'w')
- efp,ibase_name = os.path.split(inpath) # need to use these for outputs in files_path
- ped,loglines = openOrMakeLDreduced(basename,ldpath,plinke,forcerebuild)
- if ped == None:
- print >> sys.stderr, '## doIBSpy problem - cannot open %s or %s - cannot run' % (ldreduced,basename)
- sys.exit(1)
- if len(loglines) > 0:
- logf.write('### first time for this input file - log from creating an ld reduced and thinned data set:\n')
- logf.write(''.join(loglines))
- logf.write('\n')
- newfiles,explanations,repOut = doIBSpy(ped=ped,basename=basename,outdir=newfilepath,
- logf=logf,nrsSamples=n,title=title,pdftoo=0,Zcutoff=Zcutoff)
- logf.close()
- logfs = file(logpath,'r').readlines()
- lf = file(outhtml,'w')
- lf.write(galhtmlprefix % PROGNAME)
- # this is a mess. todo clean up - should each datatype have it's own directory? Yes
- # probably. Then titles are universal - but userId libraries are separate.
- s = '<div>Output from %s run at %s<br>\n' % (PROGNAME,timenow())
- lf.write('<h4>%s</h4>\n' % s)
- fixed = ["'%s'" % x for x in sys.argv] # add quotes just in case
- s = 'If you need to rerun this analysis, the command line was\n<pre>%s</pre>\n</div>' % (' '.join(fixed))
- lf.write(s)
- # various ways of displaying svg - experiments related to missing svg mimetype on test (!)
- #s = """<object data="%s" type="image/svg+xml" width="%d" height="%d">
- # <embed src="%s" type="image/svg+xml" width="%d" height="%d" />
- # </object>""" % (newfiles[0],PLOT_WIDTH,PLOT_HEIGHT,newfiles[0],PLOT_WIDTH,PLOT_HEIGHT)
- s = """ <embed src="%s" type="image/svg+xml" width="%d" height="%d" />""" % (newfiles[0],PLOT_WIDTH,PLOT_HEIGHT)
- #s = """ <iframe src="%s" type="image/svg+xml" width="%d" height="%d" />""" % (newfiles[0],PLOT_WIDTH,PLOT_HEIGHT)
- lf.write(s)
- lf.write('<div><h4>Click the links below to save output files and plots</h4><br><ol>\n')
- for i in range(len(newfiles)):
- if i == 0:
- lf.write('<li><a href="%s" type="image/svg+xml" >%s</a></li>\n' % (newfiles[i],explanations[i]))
- else:
- lf.write('<li><a href="%s">%s</a></li>\n' % (newfiles[i],explanations[i]))
- flist = os.listdir(newfilepath)
- for fname in flist:
- if not fname in newfiles:
- lf.write('<li><a href="%s">%s</a></li>\n' % (fname,fname))
- lf.write('</ol></div>')
- lf.write('<div>%s</div>' % ('\n'.join(repOut))) # repOut is a list of tables
- lf.write('<div><hr><h3>Log from this job (also stored in %s)</h3><pre>%s</pre><hr></div>' % (logfname,'\n'.join(logfs)))
- lf.write('</body></html>\n')
- lf.close()
- logf.close()
-
-if __name__ == '__main__':
- doIBS()
+"""
+# july 2009: Need to see outliers so need to draw them last?
+# could use clustering on the zscores to guess real relationships for unrelateds
+# but definitely need to draw last
+# added MAX_SHOW_ROWS to limit the length of the main report page
+# Changes for Galaxy integration
+# added more robust knuth method for one pass mean and sd
+# no difference really - let's use scipy.mean() and scipy.std() instead...
+# fixed labels and changed to .xls for outlier reports so can open in excel
+# interesting - with a few hundred subjects, 5k gives good resolution
+# and 100k gives better but not by much
+# TODO remove non autosomal markers
+# TODO it would be best if label had the zmean and zsd as these are what matter for
+# outliers rather than the group mean/sd
+# mods to rgGRR.py from channing CVS which John Ziniti has rewritten to produce SVG plots
+# to make a Galaxy tool - we need the table of mean and SD for interesting pairs, the SVG and the log
+# so the result should be an HTML file
+
+# rgIBS.py
+# use a random subset of markers for a quick ibs
+# to identify sample dups and closely related subjects
+# try snpMatrix and plink and see which one works best for us?
+# abecasis grr plots mean*sd for every subject to show clusters
+# mods june 23 rml to avoid non-autosomal markers
+# we seem to be distinguishing parent-child by gender - 2 clouds!
+
+
+snpMatrix from David Clayton has:
+ibs.stats function to calculate the identity-by-state stats of a group of samples
+Description
+Given a snp.matrix-class or a X.snp.matrix-class object with N samples, calculates some statistics
+about the relatedness of every pair of samples within.
+
+Usage
+ibs.stats(x)
+8 ibs.stats
+Arguments
+x a snp.matrix-class or a X.snp.matrix-class object containing N samples
+Details
+No-calls are excluded from consideration here.
+Value
+A data.frame containing N(N - 1)/2 rows, where the row names are the sample name pairs separated
+by a comma, and the columns are:
+Count count of identical calls, exclusing no-calls
+Fraction fraction of identical calls comparied to actual calls being made in both samples
+Warning
+In some applications, it may be preferable to subset a (random) selection of SNPs first - the
+calculation
+time increases as N(N - 1)M/2 . Typically for N = 800 samples and M = 3000 SNPs, the
+calculation time is about 1 minute. A full GWA scan could take hours, and quite unnecessary for
+simple applications such as checking for duplicate or related samples.
+Note
+This is mostly written to find mislabelled and/or duplicate samples.
+Illumina indexes their SNPs in alphabetical order so the mitochondria SNPs comes first - for most
+purpose it is undesirable to use these SNPs for IBS purposes.
+TODO: Worst-case S4 subsetting seems to make 2 copies of a large object, so one might want to
+subset before rbind(), etc; a future version of this routine may contain a built-in subsetting facility
+"""
+import sys,os,time,random,string,copy,optparse
+
+try:
+ set
+except NameError:
+ from Sets import Set as set
+
+from rgutils import timenow,plinke
+
+import plinkbinJZ
+
+
+opts = None
+verbose = False
+
+showPolygons = False
+
+class NullDevice:
+ def write(self, s):
+ pass
+
+tempstderr = sys.stderr # save
+sys.stderr = NullDevice()
+# need to avoid blather about deprecation and other strange stuff from scipy
+# the current galaxy job runner assumes that
+# the job is in error if anything appears on sys.stderr
+# grrrrr. James wants to keep it that way instead of using the
+# status flag for some strange reason. Presumably he doesn't use R or (in this case, scipy)
+import numpy
+import scipy
+from scipy import weave
+
+
+sys.stderr=tempstderr
+
+
+PROGNAME = os.path.split(sys.argv[0])[-1]
+X_AXIS_LABEL = 'Mean Alleles Shared'
+Y_AXIS_LABEL = 'SD Alleles Shared'
+LEGEND_ALIGN = 'topleft'
+LEGEND_TITLE = 'Relationship'
+DEFAULT_SYMBOL_SIZE = 1.0 # default symbol size
+DEFAULT_SYMBOL_SIZE = 0.5 # default symbol size
+
+### Some colors for R/rpy
+R_BLACK = 1
+R_RED = 2
+R_GREEN = 3
+R_BLUE = 4
+R_CYAN = 5
+R_PURPLE = 6
+R_YELLOW = 7
+R_GRAY = 8
+
+### ... and some point-styles
+
+###
+PLOT_HEIGHT = 600
+PLOT_WIDTH = 1150
+
+
+#SVG_COLORS = ('black', 'darkblue', 'blue', 'deepskyblue', 'firebrick','maroon','crimson')
+#SVG_COLORS = ('cyan','dodgerblue','mediumpurple', 'fuchsia', 'red','gold','gray')
+SVG_COLORS = ('cyan','dodgerblue','mediumpurple','forestgreen', 'lightgreen','gold','gray')
+# dupe,parentchild,sibpair,halfsib,parents,unrel,unkn
+#('orange', 'red', 'green', 'chartreuse', 'blue', 'purple', 'gray')
+
+OUTLIERS_HEADER_list = ['Mean','Sdev','ZMean','ZSdev','FID1','IID1','FID2','IID2','RelMean_M','RelMean_SD','RelSD_M','RelSD_SD','PID1','MID1','PID2','MID2','Ped']
+OUTLIERS_HEADER = '\t'.join(OUTLIERS_HEADER_list)
+TABLE_HEADER='fid1_iid1\tfid2_iid2\tmean\tsdev\tzmean\tzsdev\tgeno\trelcode\tpid1\tmid1\tpid2\tmid2\n'
+
+
+### Relationship codes, text, and lookups/mappings
+N_RELATIONSHIP_TYPES = 7
+REL_DUPE, REL_PARENTCHILD, REL_SIBS, REL_HALFSIBS, REL_RELATED, REL_UNRELATED, REL_UNKNOWN = range(N_RELATIONSHIP_TYPES)
+REL_LOOKUP = {
+ REL_DUPE: ('dupe', R_BLUE, 1),
+ REL_PARENTCHILD: ('parentchild', R_YELLOW, 1),
+ REL_SIBS: ('sibpairs', R_RED, 1),
+ REL_HALFSIBS: ('halfsibs', R_GREEN, 1),
+ REL_RELATED: ('parents', R_PURPLE, 1),
+ REL_UNRELATED: ('unrelated', R_CYAN, 1),
+ REL_UNKNOWN: ('unknown', R_GRAY, 1),
+ }
+OUTLIER_STDEVS = {
+ REL_DUPE: 2,
+ REL_PARENTCHILD: 2,
+ REL_SIBS: 2,
+ REL_HALFSIBS: 2,
+ REL_RELATED: 2,
+ REL_UNRELATED: 3,
+ REL_UNKNOWN: 2,
+ }
+# note now Z can be passed in
+
+REL_STATES = [REL_LOOKUP[r][0] for r in range(N_RELATIONSHIP_TYPES)]
+REL_COLORS = SVG_COLORS
+REL_POINTS = [REL_LOOKUP[r][2] for r in range(N_RELATIONSHIP_TYPES)]
+
+DEFAULT_MAX_SAMPLE_SIZE = 10000
+
+REF_COUNT_HOM1 = 3
+REF_COUNT_HET = 2
+REF_COUNT_HOM2 = 1
+MISSING = 0
+MAX_SHOW_ROWS = 100 # framingham has millions - delays showing output page - so truncate and explain
+MARKER_PAIRS_PER_SECOND_SLOW = 15000000.0
+MARKER_PAIRS_PER_SECOND_FAST = 70000000.0
+
+
+galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
+<title></title>
+<link rel="stylesheet" href="/static/style/base.css" type="text/css" />
+</head>
+<body>
+<div class="document">
+"""
+
+
+SVG_HEADER = '''<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.2//EN" "http://www.w3.org/Graphics/SVG/1.2/DTD/svg12.dtd">
+
+<svg width="1280" height="800"
+ xmlns="http://www.w3.org/2000/svg" version="1.2"
+ xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1280 800" onload="init()">
+
+ <script type="text/ecmascript" xlink:href="/static/scripts/checkbox_and_radiobutton.js"/>
+ <script type="text/ecmascript" xlink:href="/static/scripts/helper_functions.js"/>
+ <script type="text/ecmascript" xlink:href="/static/scripts/timer.js"/>
+ <script type="text/ecmascript">
+ <![CDATA[
+ var checkBoxes = new Array();
+ var radioGroupBandwidth;
+ var colours = ['%s','%s','%s','%s','%s','%s','%s'];
+ function init() {
+ var style = {"font-family":"Arial,Helvetica", "fill":"black", "font-size":12};
+ var dist = 12;
+ var yOffset = 4;
+
+ //A checkBox for each relationship type dupe,parentchild,sibpair,halfsib,parents,unrel,unkn
+ checkBoxes["dupe"] = new checkBox("dupe","checkboxes",20,40,"cbRect","cbCross",true,"Duplicate",style,dist,yOffset,undefined,hideShowLayer);
+ checkBoxes["parentchild"] = new checkBox("parentchild","checkboxes",20,60,"cbRect","cbCross",true,"Parent-Child",style,dist,yOffset,undefined,hideShowLayer);
+ checkBoxes["sibpairs"] = new checkBox("sibpairs","checkboxes",20,80,"cbRect","cbCross",true,"Sib-pairs",style,dist,yOffset,undefined,hideShowLayer);
+ checkBoxes["halfsibs"] = new checkBox("halfsibs","checkboxes",20,100,"cbRect","cbCross",true,"Half-sibs",style,dist,yOffset,undefined,hideShowLayer);
+ checkBoxes["parents"] = new checkBox("parents","checkboxes",20,120,"cbRect","cbCross",true,"Parents",style,dist,yOffset,undefined,hideShowLayer);
+ checkBoxes["unrelated"] = new checkBox("unrelated","checkboxes",20,140,"cbRect","cbCross",true,"Unrelated",style,dist,yOffset,undefined,hideShowLayer);
+ checkBoxes["unknown"] = new checkBox("unknown","checkboxes",20,160,"cbRect","cbCross",true,"Unknown",style,dist,yOffset,undefined,hideShowLayer);
+
+ }
+
+ function hideShowLayer(id, status, label) {
+ var vis = "hidden";
+ if (status) {
+ vis = "visible";
+ }
+ document.getElementById(id).setAttributeNS(null, 'visibility', vis);
+ }
+
+ function showBTT(evt, rel, mm, dm, md, dd, n, mg, dg, lg, hg) {
+ var x = parseInt(evt.pageX)-250;
+ var y = parseInt(evt.pageY)-110;
+ switch(rel) {
+ case 0:
+ fill = colours[rel];
+ relt = "dupe";
+ break;
+ case 1:
+ fill = colours[rel];
+ relt = "parentchild";
+ break;
+ case 2:
+ fill = colours[rel];
+ relt = "sibpairs";
+ break;
+ case 3:
+ fill = colours[rel];
+ relt = "halfsibs";
+ break;
+ case 4:
+ fill = colours[rel];
+ relt = "parents";
+ break;
+ case 5:
+ fill = colours[rel];
+ relt = "unrelated";
+ break;
+ case 6:
+ fill = colours[rel];
+ relt = "unknown";
+ break;
+ default:
+ fill = "cyan";
+ relt = "ERROR_CODE: "+rel;
+ }
+
+ document.getElementById("btRel").textContent = "GROUP: "+relt;
+ document.getElementById("btMean").textContent = "mean="+mm+" +/- "+dm;
+ document.getElementById("btSdev").textContent = "sdev="+dm+" +/- "+dd;
+ document.getElementById("btPair").textContent = "npairs="+n;
+ document.getElementById("btGeno").textContent = "ngenos="+mg+" +/- "+dg+" (min="+lg+", max="+hg+")";
+ document.getElementById("btHead").setAttribute('fill', fill);
+
+ var tt = document.getElementById("btTip");
+ tt.setAttribute("transform", "translate("+x+","+y+")");
+ tt.setAttribute('visibility', 'visible');
+ }
+
+ function showOTT(evt, rel, s1, s2, mean, sdev, ngeno, rmean, rsdev) {
+ var x = parseInt(evt.pageX)-150;
+ var y = parseInt(evt.pageY)-180;
+
+ switch(rel) {
+ case 0:
+ fill = colours[rel];
+ relt = "dupe";
+ break;
+ case 1:
+ fill = colours[rel];
+ relt = "parentchild";
+ break;
+ case 2:
+ fill = colours[rel];
+ relt = "sibpairs";
+ break;
+ case 3:
+ fill = colours[rel];
+ relt = "halfsibs";
+ break;
+ case 4:
+ fill = colours[rel];
+ relt = "parents";
+ break;
+ case 5:
+ fill = colours[rel];
+ relt = "unrelated";
+ break;
+ case 6:
+ fill = colours[rel];
+ relt = "unknown";
+ break;
+ default:
+ fill = "cyan";
+ relt = "ERROR_CODE: "+rel;
+ }
+
+ document.getElementById("otRel").textContent = "PAIR: "+relt;
+ document.getElementById("otS1").textContent = "s1="+s1;
+ document.getElementById("otS2").textContent = "s2="+s2;
+ document.getElementById("otMean").textContent = "mean="+mean;
+ document.getElementById("otSdev").textContent = "sdev="+sdev;
+ document.getElementById("otGeno").textContent = "ngenos="+ngeno;
+ document.getElementById("otRmean").textContent = "relmean="+rmean;
+ document.getElementById("otRsdev").textContent = "relsdev="+rsdev;
+ document.getElementById("otHead").setAttribute('fill', fill);
+
+ var tt = document.getElementById("otTip");
+ tt.setAttribute("transform", "translate("+x+","+y+")");
+ tt.setAttribute('visibility', 'visible');
+ }
+
+ function hideBTT(evt) {
+ document.getElementById("btTip").setAttributeNS(null, 'visibility', 'hidden');
+ }
+
+ function hideOTT(evt) {
+ document.getElementById("otTip").setAttributeNS(null, 'visibility', 'hidden');
+ }
+
+ ]]>
+ </script>
+ <defs>
+ <!-- symbols for check boxes -->
+ <symbol id="cbRect" overflow="visible">
+ <rect x="-5" y="-5" width="10" height="10" fill="white" stroke="dimgray" stroke-width="1" cursor="pointer"/>
+ </symbol>
+ <symbol id="cbCross" overflow="visible">
+ <g pointer-events="none" stroke="black" stroke-width="1">
+ <line x1="-3" y1="-3" x2="3" y2="3"/>
+ <line x1="3" y1="-3" x2="-3" y2="3"/>
+ </g>
+ </symbol>
+ </defs>
+
+<desc>Developer Works Dynamic Scatter Graph Scaling Example</desc>
+
+<!-- Now Draw the main X and Y axis -->
+<g style="stroke-width:1.0; stroke:black; shape-rendering:crispEdges">
+ <!-- X Axis top and bottom -->
+ <path d="M 100 100 L 1250 100 Z"/>
+ <path d="M 100 700 L 1250 700 Z"/>
+
+ <!-- Y Axis left and right -->
+ <path d="M 100 100 L 100 700 Z"/>
+ <path d="M 1250 100 L 1250 700 Z"/>
+</g>
+
+<g transform="translate(100,100)">
+
+ <!-- Grid Lines -->
+ <g style="fill:none; stroke:#dddddd; stroke-width:1; stroke-dasharray:2,2; text-anchor:end; shape-rendering:crispEdges">
+
+ <!-- Vertical grid lines -->
+ <line x1="125" y1="0" x2="115" y2="600" />
+ <line x1="230" y1="0" x2="230" y2="600" />
+ <line x1="345" y1="0" x2="345" y2="600" />
+ <line x1="460" y1="0" x2="460" y2="600" />
+ <line x1="575" y1="0" x2="575" y2="600" style="stroke-dasharray:none;" />
+ <line x1="690" y1="0" x2="690" y2="600" />
+ <line x1="805" y1="0" x2="805" y2="600" />
+ <line x1="920" y1="0" x2="920" y2="600" />
+ <line x1="1035" y1="0" x2="1035" y2="600" />
+
+ <!-- Horizontal grid lines -->
+ <line x1="0" y1="60" x2="1150" y2="60" />
+ <line x1="0" y1="120" x2="1150" y2="120" />
+ <line x1="0" y1="180" x2="1150" y2="180" />
+ <line x1="0" y1="240" x2="1150" y2="240" />
+ <line x1="0" y1="300" x2="1150" y2="300" style="stroke-dasharray:none;" />
+ <line x1="0" y1="360" x2="1150" y2="360" />
+ <line x1="0" y1="420" x2="1150" y2="420" />
+ <line x1="0" y1="480" x2="1150" y2="480" />
+ <line x1="0" y1="540" x2="1150" y2="540" />
+ </g>
+
+ <!-- Legend -->
+ <g style="fill:black; stroke:none" font-size="12" font-family="Arial" transform="translate(25,25)">
+ <rect width="160" height="270" style="fill:none; stroke:black; shape-rendering:crispEdges" />
+ <text x="5" y="20" style="fill:black; stroke:none;" font-size="13" font-weight="bold">Given Pair Relationship</text>
+ <rect x="120" y="35" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <rect x="120" y="55" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <rect x="120" y="75" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <rect x="120" y="95" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <rect x="120" y="115" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <rect x="120" y="135" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <rect x="120" y="155" width="10" height="10" fill="%s" stroke="%s" stroke-width="1" cursor="pointer"/>
+ <text x="15" y="195" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore gt 15</text>
+ <circle cx="125" cy="192" r="6" style="stroke:red; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
+ <text x="15" y="215" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore 4 to 15</text>
+ <circle cx="125" cy="212" r="3" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
+ <text x="15" y="235" style="fill:black; stroke:none" font-size="12" font-family="Arial" >Zscore lt 4</text>
+ <circle cx="125" cy="232" r="2" style="stroke:gold; fill:gold; fill-opacity:1.0; stroke-width:1;"/>
+ <g id="checkboxes">
+ </g>
+ </g>
+
+
+ <g style='fill:black; stroke:none' font-size="17" font-family="Arial">
+ <!-- X Axis Labels -->
+ <text x="480" y="660">Mean Alleles Shared</text>
+ <text x="0" y="630" >1.0</text>
+ <text x="277" y="630" >1.25</text>
+ <text x="564" y="630" >1.5</text>
+ <text x="842" y="630" >1.75</text>
+ <text x="1140" y="630" >2.0</text>
+ </g>
+
+ <g transform="rotate(270)" style="fill:black; stroke:none" font-size="17" font-family="Arial">
+ <!-- Y Axis Labels -->
+ <text x="-350" y="-40">SD Alleles Shared</text>
+ <text x="-20" y="-10" >1.0</text>
+ <text x="-165" y="-10" >0.75</text>
+ <text x="-310" y="-10" >0.5</text>
+ <text x="-455" y="-10" >0.25</text>
+ <text x="-600" y="-10" >0.0</text>
+ </g>
+
+<!-- Plot Title -->
+<g style="fill:black; stroke:none" font-size="18" font-family="Arial">
+ <text x="425" y="-30">%s</text>
+</g>
+
+<!-- One group/layer of points for each relationship type -->
+'''
+
+SVG_FOOTER = '''
+<!-- End of Data -->
+</g>
+<g id="btTip" visibility="hidden" style="stroke-width:1.0; fill:black; stroke:none;" font-size="10" font-family="Arial">
+ <rect width="250" height="110" style="fill:silver" rx="2" ry="2"/>
+ <rect id="btHead" width="250" height="20" rx="2" ry="2" />
+ <text id="btRel" y="14" x="85">unrelated</text>
+ <text id="btMean" y="40" x="4">mean=1.5 +/- 0.04</text>
+ <text id="btSdev" y="60" x="4">sdev=0.7 +/- 0.03</text>
+ <text id="btPair" y="80" x="4">npairs=1152</text>
+ <text id="btGeno" y="100" x="4">ngenos=4783 +/- 24 (min=1000, max=5000)</text>
+</g>
+
+<g id="otTip" visibility="hidden" style="stroke-width:1.0; fill:black; stroke:none;" font-size="10" font-family="Arial">
+ <rect width="150" height="180" style="fill:silver" rx="2" ry="2"/>
+ <rect id="otHead" width="150" height="20" rx="2" ry="2" />
+ <text id="otRel" y="14" x="40">sibpairs</text>
+ <text id="otS1" y="40" x="4">s1=fid1,iid1</text>
+ <text id="otS2" y="60" x="4">s2=fid2,iid2</text>
+ <text id="otMean" y="80" x="4">mean=1.82</text>
+ <text id="otSdev" y="100" x="4">sdev=0.7</text>
+ <text id="otGeno" y="120" x="4">ngeno=4487</text>
+ <text id="otRmean" y="140" x="4">relmean=1.85</text>
+ <text id="otRsdev" y="160" x="4">relsdev=0.65</text>
+</g>
+</svg>
+'''
+
+
+DEFAULT_MAX_SAMPLE_SIZE = 5000
+
+REF_COUNT_HOM1 = 3
+REF_COUNT_HET = 2
+REF_COUNT_HOM2 = 1
+MISSING = 0
+
+MARKER_PAIRS_PER_SECOND_SLOW = 15000000
+MARKER_PAIRS_PER_SECOND_FAST = 70000000
+
+POLYGONS = {
+ REL_UNRELATED: ((1.360, 0.655), (1.385, 0.730), (1.620, 0.575), (1.610, 0.505)),
+ REL_HALFSIBS: ((1.630, 0.500), (1.630, 0.550), (1.648, 0.540), (1.648, 0.490)),
+ REL_SIBS: ((1.660, 0.510), (1.665, 0.560), (1.820, 0.410), (1.820, 0.390)),
+ REL_PARENTCHILD: ((1.650, 0.470), (1.650, 0.490), (1.750, 0.440), (1.750, 0.420)),
+ REL_DUPE: ((1.970, 0.000), (1.970, 0.150), (2.000, 0.150), (2.000, 0.000)),
+ }
+
+def distance(point1, point2):
+ """ Calculate the distance between two points
+ """
+ (x1,y1) = [float(d) for d in point1]
+ (x2,y2) = [float(d) for d in point2]
+ dx = abs(x1 - x2)
+ dy = abs(y1 - y2)
+ return math.sqrt(dx**2 + dy**2)
+
+def point_inside_polygon(x, y, poly):
+ """ Determine if a point (x,y) is inside a given polygon or not
+ poly is a list of (x,y) pairs.
+
+ Taken from: http://www.ariel.com.au/a/python-point-int-poly.html
+ """
+
+ n = len(poly)
+ inside = False
+
+ p1x,p1y = poly[0]
+ for i in range(n+1):
+ p2x,p2y = poly[i % n]
+ if y > min(p1y,p2y):
+ if y <= max(p1y,p2y):
+ if x <= max(p1x,p2x):
+ if p1y != p2y:
+ xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
+ if p1x == p2x or x <= xinters:
+ inside = not inside
+ p1x,p1y = p2x,p2y
+ return inside
+
+def readMap(pedfile):
+ """
+ """
+ mapfile = pedfile.replace('.ped', '.map')
+ marker_list = []
+ if os.path.exists(mapfile):
+ print 'readMap: %s' % (mapfile)
+ fh = file(mapfile, 'r')
+ for line in fh:
+ marker_list.append(line.strip().split())
+ fh.close()
+ print 'readMap: %s markers' % (len(marker_list))
+ return marker_list
+
+def calcMeanSD(useme):
+ """
+ A numerically stable algorithm is given below. It also computes the mean.
+ This algorithm is due to Knuth,[1] who cites Welford.[2]
+ n = 0
+ mean = 0
+ M2 = 0
+
+ foreach x in data:
+ n = n + 1
+ delta = x - mean
+ mean = mean + delta/n
+ M2 = M2 + delta*(x - mean) // This expression uses the new value of mean
+ end for
+
+ variance_n = M2/n
+ variance = M2/(n - 1)
+ """
+ mean = 0.0
+ M2 = 0.0
+ sd = 0.0
+ n = len(useme)
+ if n > 1:
+ for i,x in enumerate(useme):
+ delta = x - mean
+ mean = mean + delta/(i+1) # knuth uses n+=1 at start
+ M2 = M2 + delta*(x - mean) # This expression uses the new value of mean
+ variance = M2/(n-1) # assume is sample so lose 1 DOF
+ sd = pow(variance,0.5)
+ return mean,sd
+
+
+def doIBSpy(ped=None,basename='',outdir=None,logf=None,
+ nrsSamples=10000,title='title',pdftoo=0,Zcutoff=2.0):
+ #def doIBS(pedName, title, nrsSamples=None, pdftoo=False):
+ """ started with snpmatrix but GRR uses actual IBS counts and sd's
+ """
+ repOut = [] # text strings to add to the html display
+ refallele = {}
+ tblf = '%s_table.xls' % (title)
+ tbl = file(os.path.join(outdir,tblf), 'w')
+ tbl.write(TABLE_HEADER)
+ svgf = '%s.svg' % (title)
+ svg = file(os.path.join(outdir,svgf), 'w')
+
+ nMarkers = len(ped._markers)
+ if nMarkers < 5:
+ print sys.stderr, '### ERROR - %d is too few markers for reliable estimation in %s - terminating' % (nMarkers,PROGNAME)
+ sys.exit(1)
+ nSubjects = len(ped._subjects)
+ nrsSamples = min(nMarkers, nrsSamples)
+ if opts and opts.use_mito:
+ markers = range(nMarkers)
+ nrsSamples = min(len(markers), nrsSamples)
+ sampleIndexes = sorted(random.sample(markers, nrsSamples))
+ else:
+ autosomals = ped.autosomal_indices()
+ nrsSamples = min(len(autosomals), nrsSamples)
+ sampleIndexes = sorted(random.sample(autosomals, nrsSamples))
+
+ print ''
+ print 'Getting random.sample of %s from %s total' % (nrsSamples, nMarkers)
+ npairs = (nSubjects*(nSubjects-1))/2 # total rows in table
+ newfiles=[svgf,tblf]
+ explanations = ['rgGRR Plot (requires SVG)','Mean by SD alleles shared - %d rows' % npairs]
+ # these go with the output file links in the html file
+ s = 'Reading genotypes for %s subjects and %s markers\n' % (nSubjects, nrsSamples)
+ logf.write(s)
+ minUsegenos = nrsSamples/2 # must have half?
+ nGenotypes = nSubjects*nrsSamples
+ stime = time.time()
+ emptyRows = set()
+ genos = numpy.zeros((nSubjects, nrsSamples), dtype=int)
+ for s in xrange(nSubjects):
+ nValid = 0
+ #getGenotypesByIndices(self, s, mlist, format)
+ genos[s] = ped.getGenotypesByIndices(s, sampleIndexes, format='ref')
+ nValid = sum([1 for g in genos[s] if g])
+ if not nValid:
+ emptyRows.add(s)
+ sub = ped.getSubject(s)
+ print 'All missing for row %d (%s)' % (s, sub)
+ logf.write('All missing for row %d (%s)\n' % (s, sub))
+ rtime = time.time() - stime
+ if verbose:
+ print '@@Read %s genotypes in %s seconds' % (nGenotypes, rtime)
+
+
+ ### Now the expensive part. For each pair of subjects, we get the mean number
+ ### and standard deviation of shared alleles over all of the markers where both
+ ### subjects have a known genotype. Identical subjects should have mean shared
+ ### alleles very close to 2.0 with a standard deviation very close to 0.0.
+ tot = nSubjects*(nSubjects-1)/2
+ nprog = tot/10
+ nMarkerpairs = tot * nrsSamples
+ estimatedTimeSlow = nMarkerpairs/MARKER_PAIRS_PER_SECOND_SLOW
+ estimatedTimeFast = nMarkerpairs/MARKER_PAIRS_PER_SECOND_FAST
+
+ pairs = []
+ pair_data = {}
+ means = [] ## Mean IBS for each pair
+ ngenoL = [] ## Count of comparable genotypes for each pair
+ sdevs = [] ## Standard dev for each pair
+ rels = [] ## A relationship code for each pair
+ zmeans = [0.0 for x in xrange(tot)] ## zmean score for each pair for the relgroup
+ zstds = [0.0 for x in xrange(tot)] ## zstd score for each pair for the relgrp
+ skip = set()
+ ndone = 0 ## How many have been done so far
+
+ logf.write('Calculating %d pairs...\n' % (tot))
+ logf.write('Estimated time is %2.2f to %2.2f seconds ...\n' % (estimatedTimeFast, estimatedTimeSlow))
+
+ t1sum = 0
+ t2sum = 0
+ t3sum = 0
+ now = time.time()
+ scache = {}
+ _founder_cache = {}
+ C_CODE = """
+ #include "math.h"
+ int i;
+ int sumibs = 0;
+ int ssqibs = 0;
+ int ngeno = 0;
+ float mean = 0;
+ float M2 = 0;
+ float delta = 0;
+ float sdev=0;
+ float variance=0;
+ for (i=0; i<nrsSamples; i++) {
+ int a1 = g1[i];
+ int a2 = g2[i];
+ if (a1 != 0 && a2 != 0) {
+ ngeno += 1;
+ int shared = 2-abs(a1-a2);
+ delta = shared - mean;
+ mean = mean + delta/ngeno;
+ M2 += delta*(shared-mean);
+ // yes that second time, the updated mean is used see calcmeansd above;
+ //printf("%d %d %d %d %d %d\\n", i, a1, a2, ngeno, shared, squared);
+ }
+ }
+ if (ngeno > 1) {
+ variance = M2/(ngeno-1);
+ sdev = sqrt(variance);
+ //printf("OK: %d %3.2f %3.2f\\n", ngeno, mean, sdev);
+ }
+ //printf("%d %d %d %1.2f %1.2f\\n", ngeno, sumibs, ssqibs, mean, sdev);
+ result[0] = ngeno;
+ result[1] = mean;
+ result[2] = sdev;
+ return_val = ngeno;
+ """
+ started = time.time()
+ for s1 in xrange(nSubjects):
+ if s1 in emptyRows:
+ continue
+ (fid1,iid1,did1,mid1,sex1,phe1,iid1,d_sid1,m_sid1) = scache.setdefault(s1, ped.getSubject(s1))
+
+ isFounder1 = _founder_cache.setdefault(s1, (did1==mid1))
+ g1 = genos[s1]
+
+ for s2 in xrange(s1+1, nSubjects):
+ if s2 in emptyRows:
+ continue
+ t1s = time.time()
+
+ (fid2,iid2,did2,mid2,sex2,phe2,iid2,d_sid2,m_sid2) = scache.setdefault(s2, ped.getSubject(s2))
+
+ g2 = genos[s2]
+ isFounder2 = _founder_cache.setdefault(s2, (did2==mid2))
+
+ # Determine the relationship for this pair
+ relcode = REL_UNKNOWN
+ if (fid2 == fid1):
+ if iid1 == iid2:
+ relcode = REL_DUPE
+ elif (did2 == did1) and (mid2 == mid1) and did1 != mid1:
+ relcode = REL_SIBS
+ elif (iid1 == mid2) or (iid1 == did2) or (iid2 == mid1) or (iid2 == did1):
+ relcode = REL_PARENTCHILD
+ elif (str(did1) != '0' and (did2 == did1)) or (str(mid1) != '0' and (mid2 == mid1)):
+ relcode = REL_HALFSIBS
+ else:
+ # People in the same family should be marked as some other
+ # form of related. In general, these people will have a
+ # pretty random spread of similarity. This distinction is
+ # probably not very useful most of the time
+ relcode = REL_RELATED
+ else:
+ ### Different families
+ relcode = REL_UNRELATED
+
+ t1e = time.time()
+ t1sum += t1e-t1s
+
+
+ ### Calculate sum(2-abs(a1-a2)) and sum((2-abs(a1-a2))**2) and count
+ ### the number of contributing genotypes. These values are not actually
+ ### calculated here, but instead are looked up in a table for speed.
+ ### FIXME: This is still too slow ...
+ result = [0.0, 0.0, 0.0]
+ ngeno = weave.inline(C_CODE, ['g1', 'g2', 'nrsSamples', 'result'])
+ if ngeno >= minUsegenos:
+ _, mean, sdev = result
+ means.append(mean)
+ sdevs.append(sdev)
+ ngenoL.append(ngeno)
+ pairs.append((s1, s2))
+ rels.append(relcode)
+ else:
+ skip.add(ndone) # signal no comparable genotypes for this pair
+ ndone += 1
+ t2e = time.time()
+ t2sum += t2e-t1e
+ t3e = time.time()
+ t3sum += t3e-t2e
+
+ logme = [ 'T1: %s' % (t1sum), 'T2: %s' % (t2sum), 'T3: %s' % (t3sum),'TOT: %s' % (t3e-now),
+ '%s pairs with no (or not enough) comparable genotypes (%3.1f%%)' % (len(skip),
+ float(len(skip))/float(tot)*100)]
+ logf.write('%s\n' % '\t'.join(logme))
+ ### Calculate mean and standard deviation of scores on a per relationship
+ ### type basis, allowing us to flag outliers for each particular relationship
+ ### type
+ relstats = {}
+ relCounts = {}
+ outlierFiles = {}
+ for relCode, relInfo in REL_LOOKUP.items():
+ relName, relColor, relStyle = relInfo
+ useme = [means[x] for x in xrange(len(means)) if rels[x] == relCode]
+ relCounts[relCode] = len(useme)
+ mm = scipy.mean(useme)
+ ms = scipy.std(useme)
+ useme = [sdevs[x] for x in xrange(len(sdevs)) if rels[x] == relCode]
+ sm = scipy.mean(useme)
+ ss = scipy.std(useme)
+ relstats[relCode] = {'sd':(sm,ss), 'mean':(mm,ms)}
+ s = 'Relstate %s (n=%d): mean(mean)=%3.2f sdev(mean)=%3.2f, mean(sdev)=%3.2f sdev(sdev)=%3.2f\n' % \
+ (relName,relCounts[relCode], mm, ms, sm, ss)
+ logf.write(s)
+
+ ### now fake z scores for each subject like abecasis recommends max(|zmu|,|zsd|)
+ ### within each group, for each pair, z=(groupmean-pairmean)/groupsd
+ available = len(means)
+ logf.write('%d pairs are available of %d\n' % (available, tot))
+ ### s = '\nOutliers:\nrelationship\tzmean\tzsd\tped1\tped2\tmean\tsd\trmeanmean\trmeansd\trsdmean\trsdsd\n'
+ ### logf.write(s)
+ pairnum = 0
+ offset = 0
+ nOutliers = 0
+ cexs = []
+ outlierRecords = dict([(r, []) for r in range(N_RELATIONSHIP_TYPES)])
+ zsdmax = 0
+ for s1 in range(nSubjects):
+ if s1 in emptyRows:
+ continue
+ (fid1,iid1,did1,mid1,sex1,aff1,ok1,d_sid1,m_sid1) = scache[s1]
+ for s2 in range(s1+1, nSubjects):
+ if s2 in emptyRows:
+ continue
+ if pairnum not in skip:
+ ### Get group stats for this relationship
+ (fid2,iid2,did2,mid2,sex2,aff2,ok2,d_sid2,m_sid2) = scache[s2]
+ try:
+ r = rels[offset]
+ except IndexError:
+ logf.write('###OOPS offset %d available %d pairnum %d len(rels) %d', offset, available, pairnum, len(rels))
+ notfound = ('?',('?','0','0'))
+ relInfo = REL_LOOKUP.get(r,notfound)
+ relName, relColor, relStyle = relInfo
+ rmm,rmd = relstats[r]['mean'] # group mean, group meansd alleles shared
+ rdm,rdd = relstats[r]['sd'] # group sdmean, group sdsd alleles shared
+
+ try:
+ zsd = (sdevs[offset] - rdm)/rdd # distance from group mean in group sd units
+ except:
+ zsd = 1
+ if abs(zsd) > zsdmax:
+ zsdmax = zsd # keep for sort scaling
+ try:
+ zmean = (means[offset] - rmm)/rmd # distance from group mean
+ except:
+ zmean = 1
+ zmeans[offset] = zmean
+ zstds[offset] = zsd
+ pid=(s1,s2)
+ zrad = max(zsd,zmean)
+ if zrad < 4:
+ zrad = 2
+ elif 4 < zrad < 15:
+ zrad = 3 # to 9
+ else: # > 15 6=24+
+ zrad=zrad/4
+ zrad = min(zrad,6) # scale limit
+ zrad = max(2,max(zsd,zmean)) # as > 2, z grows
+ pair_data[pid] = (zmean,zsd,r,zrad)
+ if max(zsd,zmean) > Zcutoff: # is potentially interesting
+ mean = means[offset]
+ sdev = sdevs[offset]
+ outlierRecords[r].append((mean, sdev, zmean, zsd, fid1, iid1, fid2, iid2, rmm, rmd, rdm, rdd,did1,mid1,did2,mid2))
+ nOutliers += 1
+ tbl.write('%s_%s\t%s_%s\t%f\t%f\t%f\t%f\t%d\t%s\t%s\t%s\t%s\t%s\n' % \
+ (fid1, iid1, fid2, iid2, mean, sdev, zmean,zsd, ngeno, relName, did1,mid1,did2,mid2))
+ offset += 1
+ pairnum += 1
+ logf.write( 'Outliers: %s\n' % (nOutliers))
+
+ ### Write outlier files for each relationship type
+ repOut.append('<h2>Outliers in tab delimited files linked above are also listed below</h2>')
+ lzsd = round(numpy.log10(zsdmax)) + 1
+ scalefactor = 10**lzsd
+ for relCode, relInfo in REL_LOOKUP.items():
+ relName, _, _ = relInfo
+ outliers = outlierRecords[relCode]
+ if not outliers:
+ continue
+ outliers = [(scalefactor*int(abs(x[3]))+ int(abs(x[2])),x) for x in outliers] # decorate
+ outliers.sort()
+ outliers.reverse() # largest deviation first
+ outliers = [x[1] for x in outliers] # undecorate
+ nrows = len(outliers)
+ truncated = 0
+ if nrows > MAX_SHOW_ROWS:
+ s = '<h3>%s outlying pairs (top %d of %d) from %s</h3><table border="0" cellpadding="3">' % \
+ (relName,MAX_SHOW_ROWS,nrows,title)
+ truncated = nrows - MAX_SHOW_ROWS
+ else:
+ s = '<h3>%s outlying pairs (n=%d) from %s</h3><table border="0" cellpadding="3">' % (relName,nrows,title)
+ repOut.append(s)
+ fhname = '%s_rgGRR_%s_outliers.xls' % (title, relName)
+ fhpath = os.path.join(outdir,fhname)
+ fh = open(fhpath, 'w')
+ newfiles.append(fhname)
+ explanations.append('%s Outlier Pairs %s, N=%d, Cutoff SD=%f' % (relName,title,len(outliers),Zcutoff))
+ fh.write(OUTLIERS_HEADER)
+ s = ''.join(['<th>%s</th>' % x for x in OUTLIERS_HEADER_list])
+ repOut.append('<tr align="center">%s</tr>' % s)
+ for n,rec in enumerate(outliers):
+ #(mean, sdev, zmean, zsd, fid1, iid1, fid2, iid2, rmm, rmd, rdm, rdd) = rec
+ s = '%f\t%f\t%f\t%f\t%s\t%s\t%s\t%s\t%f\t%f\t%f\t%f\t%s\t%s\t%s\t%s\t' % tuple(rec)
+ fh.write('%s%s\n' % (s,relName))
+ # (mean, sdev, zmean, zsd, fid1, iid1, fid2, iid2, rmm, rmd, rdm, rdd, did1,mid1,did2,mid2))
+ s = '''<td>%f</td><td>%f</td><td>%f</td><td>%f</td><td>%s</td><td>%s</td>
+ <td>%s</td><td>%s</td><td>%f</td><td>%f</td><td>%f</td><td>%f</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>''' % tuple(rec)
+ s = '%s<td>%s</td>' % (s,relName)
+ if n < MAX_SHOW_ROWS:
+ repOut.append('<tr align="center">%s</tr>' % s)
+ if truncated > 0:
+ repOut.append('<H2>WARNING: %d rows truncated - see outlier file for all %d rows</H2>' % (truncated,
+ nrows))
+ fh.close()
+ repOut.append('</table><p>')
+
+ ### Now, draw the plot in jpeg and svg formats, and optionally in the PDF format
+ ### if requested
+ logf.write('Plotting ...')
+ pointColors = [REL_COLORS[rel] for rel in rels]
+ pointStyles = [REL_POINTS[rel] for rel in rels]
+
+ mainTitle = '%s (%s subjects, %d snp)' % (title, nSubjects, nrsSamples)
+ svg.write(SVG_HEADER % (SVG_COLORS[0],SVG_COLORS[1],SVG_COLORS[2],SVG_COLORS[3],SVG_COLORS[4],
+ SVG_COLORS[5],SVG_COLORS[6],SVG_COLORS[0],SVG_COLORS[0],SVG_COLORS[1],SVG_COLORS[1],
+ SVG_COLORS[2],SVG_COLORS[2],SVG_COLORS[3],SVG_COLORS[3],SVG_COLORS[4],SVG_COLORS[4],
+ SVG_COLORS[5],SVG_COLORS[5],SVG_COLORS[6],SVG_COLORS[6],mainTitle))
+ #rpy.r.jpeg(filename='%s.jpg' % (title), width=1600, height=1200, pointsize=12, quality=100, bg='white')
+ #rpy.r.par(mai=(1,1,1,0.5))
+ #rpy.r('par(xaxs="i",yaxs="i")')
+ #rpy.r.plot(means, sdevs, main=mainTitle, ylab=Y_AXIS_LABEL, xlab=X_AXIS_LABEL, cex=cexs, col=pointColors, pch=pointStyles, xlim=(0,2), ylim=(0,2))
+ #rpy.r.legend(LEGEND_ALIGN, legend=REL_STATES, pch=REL_POINTS, col=REL_COLORS, title=LEGEND_TITLE)
+ #rpy.r.grid(nx=10, ny=10, col='lightgray', lty='dotted')
+ #rpy.r.dev_off()
+
+ ### We will now go through each relationship type to partition plot points
+ ### into "bulk" and "outlier" groups. Bulk points will represent common
+ ### mean/sdev pairs and will cover the majority of the points in the plot --
+ ### they will use generic tooltip informtion about all of the pairs
+ ### represented by that point. "Outlier" points will be uncommon pairs,
+ ### with very specific information in their tooltips. It would be nice to
+ ### keep hte total number of plotted points in the SVG representation to
+ ### ~10000 (certainly less than 100000?)
+ pointMap = {}
+ orderedRels = [y[1] for y in reversed(sorted([(relCounts.get(x, 0),x) for x in REL_LOOKUP.keys()]))]
+ # do we really want this? I want out of zone points last and big
+ for relCode in orderedRels:
+ svgColor = SVG_COLORS[relCode]
+ relName, relColor, relStyle = REL_LOOKUP[relCode]
+ svg.write('<g id="%s" style="stroke:%s; fill:%s; fill-opacity:1.0; stroke-width:1;" cursor="pointer">\n' % (relName, svgColor, svgColor))
+ pMap = pointMap.setdefault(relCode, {})
+ nPoints = 0
+ rpairs=[]
+ rgenos=[]
+ rmeans=[]
+ rsdevs=[]
+ rz = []
+ for x,rel in enumerate(rels): # all pairs
+ if rel == relCode:
+ s1,s2 = pairs[x]
+ pid=(s1,s2)
+ zmean,zsd,r,zrad = pair_data[pid][:4]
+ rpairs.append(pairs[x])
+ rgenos.append(ngenoL[x])
+ rmeans.append(means[x])
+ rsdevs.append(sdevs[x])
+ rz.append(zrad)
+ ### Now add the svg point group for this relationship to the svg file
+ for x in range(len(rmeans)):
+ svgX = '%d' % ((rmeans[x] - 1.0) * PLOT_WIDTH) # changed so mean scale is 1-2
+ svgY = '%d' % (PLOT_HEIGHT - (rsdevs[x] * PLOT_HEIGHT)) # changed so sd scale is 0-1
+ s1, s2 = rpairs[x]
+ (fid1,uid1,did1,mid1,sex1,phe1,iid1,d_sid1,m_sid1) = scache[s1]
+ (fid2,uid2,did2,mid2,sex2,phe2,iid2,d_sid2,m_sid2) = scache[s2]
+ ngenos = rgenos[x]
+ nPoints += 1
+ point = pMap.setdefault((svgX, svgY), [])
+ point.append((rmeans[x], rsdevs[x], fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, ngenos,rz[x]))
+ for (svgX, svgY) in pMap:
+ points = pMap[(svgX, svgY)]
+ svgX = int(svgX)
+ svgY = int(svgY)
+ if len(points) > 1:
+ mmean,dmean = calcMeanSD([p[0] for p in points])
+ msdev,dsdev = calcMeanSD([p[1] for p in points])
+ mgeno,dgeno = calcMeanSD([p[-1] for p in points])
+ mingeno = min([p[-1] for p in points])
+ maxgeno = max([p[-1] for p in points])
+ svg.write("""<circle cx="%d" cy="%d" r="2"
+ onmouseover="showBTT(evt, %d, %1.2f, %1.2f, %1.2f, %1.2f, %d, %d, %d, %d, %d)"
+ onmouseout="hideBTT(evt)" />\n""" % (svgX, svgY, relCode, mmean, dmean, msdev, dsdev, len(points), mgeno, dgeno, mingeno, maxgeno))
+ else:
+ mean, sdev, fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, ngenos, zrad = points[0][:12]
+ rmean = float(relstats[relCode]['mean'][0])
+ rsdev = float(relstats[relCode]['sd'][0])
+ if zrad < 4:
+ zrad = 2
+ elif 4 < zrad < 9:
+ zrad = 3 # to 9
+ else: # > 9 5=15+
+ zrad=zrad/3
+ zrad = min(zrad,5) # scale limit
+ if zrad <= 3:
+ svg.write('<circle cx="%d" cy="%d" r="%s" onmouseover="showOTT(evt, %d, \'%s,%s,%s,%s\', \'%s,%s,%s,%s\', %1.2f, %1.2f, %s, %1.2f, %1.2f)" onmouseout="hideOTT(evt)" />\n' % (svgX, svgY, zrad, relCode, fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, mean, sdev, ngenos, rmean, rsdev))
+ else: # highlight pairs a long way from expectation by outlining circle in red
+ svg.write("""<circle cx="%d" cy="%d" r="%s" style="stroke:red; fill:%s; fill-opacity:1.0; stroke-width:1;"
+ onmouseover="showOTT(evt, %d, \'%s,%s,%s,%s\', \'%s,%s,%s,%s\', %1.2f, %1.2f, %s, %1.2f, %1.2f)"
+ onmouseout="hideOTT(evt)" />\n""" % \
+ (svgX, svgY, zrad, svgColor, relCode, fid1, iid1, did1, mid1, fid2, iid2, did2, mid2, mean, sdev, ngenos, rmean, rsdev))
+ svg.write('</g>\n')
+
+ ### Create a pdf as well if indicated on the command line
+ ### WARNING! for framingham share, with about 50M pairs, this is a 5.5GB pdf!
+## if pdftoo:
+## pdfname = '%s.pdf' % (title)
+## rpy.r.pdf(pdfname, 6, 6)
+## rpy.r.par(mai=(1,1,1,0.5))
+## rpy.r('par(xaxs="i",yaxs="i")')
+## rpy.r.plot(means, sdevs, main='%s, %d snp' % (title, nSamples), ylab=Y_AXIS_LABEL, xlab=X_AXIS_LABEL, cex=cexs, col=pointColors, pch=pointStyles, xlim=(0,2), ylim=(0,2))
+## rpy.r.legend(LEGEND_ALIGN, legend=REL_STATES, pch=REL_POINTS, col=REL_COLORS, title=LEGEND_TITLE)
+## rpy.r.grid(nx=10, ny=10, col='lightgray', lty='dotted')
+## rpy.r.dev_off()
+
+ ### Draw polygons
+ if showPolygons:
+ svg.write('<g id="polygons" cursor="pointer">\n')
+ for rel, poly in POLYGONS.items():
+ points = ' '.join(['%s,%s' % ((p[0]-1.0)*float(PLOT_WIDTH), (PLOT_HEIGHT - p[1]*PLOT_HEIGHT)) for p in poly])
+ svg.write('<polygon points="%s" fill="transparent" style="stroke:%s; stroke-width:1"/>\n' % (points, SVG_COLORS[rel]))
+ svg.write('</g>\n')
+
+
+ svg.write(SVG_FOOTER)
+ svg.close()
+ return newfiles,explanations,repOut
+
+def doIBS(n=100):
+ """parse parameters from galaxy
+ expect 'input pbed path' 'basename' 'outpath' 'title' 'logpath' 'n'
+ <command interpreter="python">
+ rgGRR.py $i.extra_files_path/$i.metadata.base_name "$i.metadata.base_name"
+ '$out_file1' '$out_file1.files_path' "$title1" '$n' '$Z'
+ </command>
+
+ """
+ u="""<command interpreter="python">
+ rgGRR.py $i.extra_files_path/$i.metadata.base_name "$i.metadata.base_name"
+ '$out_file1' '$out_file1.files_path' "$title1" '$n' '$Z'
+ </command>
+ """
+
+
+ if len(sys.argv) < 7:
+ print >> sys.stdout, 'Need pbed inpath, basename, out_htmlname, outpath, title, logpath, nSNP, Zcutoff on command line please'
+ print >> sys.stdout, u
+ sys.exit(1)
+ ts = '%s%s' % (string.punctuation,string.whitespace)
+ ptran = string.maketrans(ts,'_'*len(ts))
+ inpath = sys.argv[1]
+ ldinpath = os.path.split(inpath)[0]
+ basename = sys.argv[2]
+ outhtml = sys.argv[3]
+ newfilepath = sys.argv[4]
+ title = sys.argv[5].translate(ptran)
+ logfname = 'Log_%s.txt' % title
+ logpath = os.path.join(newfilepath,logfname) # log was a child - make part of html extra_files_path zoo
+ n = int(sys.argv[6])
+ try:
+ Zcutoff = float(sys.argv[7])
+ except:
+ Zcutoff = 2.0
+ try:
+ os.makedirs(newfilepath)
+ except:
+ pass
+ logf = file(logpath,'w')
+ efp,ibase_name = os.path.split(inpath) # need to use these for outputs in files_path
+ ped = plinkbinJZ.BPed(inpath)
+ ped.parse(quick=True)
+ if ped == None:
+ print >> sys.stderr, '## doIBSpy problem - cannot open %s or %s - cannot run' % (ldreduced,basename)
+ sys.exit(1)
+ newfiles,explanations,repOut = doIBSpy(ped=ped,basename=basename,outdir=newfilepath,
+ logf=logf,nrsSamples=n,title=title,pdftoo=0,Zcutoff=Zcutoff)
+ logf.close()
+ logfs = file(logpath,'r').readlines()
+ lf = file(outhtml,'w')
+ lf.write(galhtmlprefix % PROGNAME)
+ # this is a mess. todo clean up - should each datatype have it's own directory? Yes
+ # probably. Then titles are universal - but userId libraries are separate.
+ s = '<div>Output from %s run at %s<br>\n' % (PROGNAME,timenow())
+ lf.write('<h4>%s</h4>\n' % s)
+ fixed = ["'%s'" % x for x in sys.argv] # add quotes just in case
+ s = 'If you need to rerun this analysis, the command line was\n<pre>%s</pre>\n</div>' % (' '.join(fixed))
+ lf.write(s)
+ # various ways of displaying svg - experiments related to missing svg mimetype on test (!)
+ #s = """<object data="%s" type="image/svg+xml" width="%d" height="%d">
+ # <embed src="%s" type="image/svg+xml" width="%d" height="%d" />
+ # </object>""" % (newfiles[0],PLOT_WIDTH,PLOT_HEIGHT,newfiles[0],PLOT_WIDTH,PLOT_HEIGHT)
+ s = """ <embed src="%s" type="image/svg+xml" width="%d" height="%d" />""" % (newfiles[0],PLOT_WIDTH,PLOT_HEIGHT)
+ #s = """ <iframe src="%s" type="image/svg+xml" width="%d" height="%d" />""" % (newfiles[0],PLOT_WIDTH,PLOT_HEIGHT)
+ lf.write(s)
+ lf.write('<div><h4>Click the links below to save output files and plots</h4><br><ol>\n')
+ for i in range(len(newfiles)):
+ if i == 0:
+ lf.write('<li><a href="%s" type="image/svg+xml" >%s</a></li>\n' % (newfiles[i],explanations[i]))
+ else:
+ lf.write('<li><a href="%s">%s</a></li>\n' % (newfiles[i],explanations[i]))
+ flist = os.listdir(newfilepath)
+ for fname in flist:
+ if not fname in newfiles:
+ lf.write('<li><a href="%s">%s</a></li>\n' % (fname,fname))
+ lf.write('</ol></div>')
+ lf.write('<div>%s</div>' % ('\n'.join(repOut))) # repOut is a list of tables
+ lf.write('<div><hr><h3>Log from this job (also stored in %s)</h3><pre>%s</pre><hr></div>' % (logfname,''.join(logfs)))
+ lf.write('</body></html>\n')
+ lf.close()
+ logf.close()
+
+if __name__ == '__main__':
+ doIBS()
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgGRR.xml
--- a/tools/rgenetics/rgGRR.xml Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgGRR.xml Wed May 19 10:28:41 2010 -0400
@@ -3,18 +3,15 @@
<description>Pairwise Allele Sharing</description>
<command interpreter="python">
rgGRR.py $i.extra_files_path/$i.metadata.base_name "$i.metadata.base_name"
- '$out_file1' '$out_file1.files_path' "$title1" '$n' '$Z' '$force'
+ '$out_file1' '$out_file1.files_path' "$title1" '$n' '$Z'
</command>
<inputs>
<param name="i" type="data" label="Genotype data file from your current history"
- format="pbed" />
+ format="ldindep" />
<param name='title1' type='text' size="80" value='rgGRR' label="Title for this job"/>
<param name="n" type="integer" label="N snps to use (0=all)" value="5000" />
<param name="Z" type="float" label="Z score cutoff for outliers (eg 2)" value="6"
help="2 works but for very large numbers of pairs, you might want to see less than 5%" />
- <param name="force" type="boolean" checked="false" truevalue="true" falsevalue="false"
- label="Force rebuild LD reduced data set" value="false"
- help="You probably DO NOT want to do this!" />
</inputs>
<outputs>
<data format="html" name="out_file1" />
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgGRR_code.py
--- a/tools/rgenetics/rgGRR_code.py Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgGRR_code.py Wed May 19 10:28:41 2010 -0400
@@ -1,23 +1,37 @@
-from galaxy import datatypes,model
-import sys,time,string
-
-def timenow():
- """return current time as a string
- """
- return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
-
-def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr):
- """Sets the name of the html output file
- """
- killme = string.punctuation + string.whitespace
- trantab = string.maketrans(killme,'_'*len(killme))
- job_name = param_dict.get( 'title1', 'rgGRR' )
- newname = '%s.html' % job_name.translate(trantab)
- indatname = inp_data['i'].name
- info = '%s Mean allele sharing on %s at %s' % (job_name,indatname,timenow())
- ofname = 'out_file1'
- data = out_data[ofname]
- data.name = newname
- data.info = info
- out_data[ofname] = data
- app.model.context.flush()
+from galaxy import datatypes,model
+import sys,time,string,os,shutil
+
+def timenow():
+ """return current time as a string
+ """
+ return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
+
+def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr):
+ """Sets the name of the html output file
+ """
+ killme = string.punctuation + string.whitespace
+ trantab = string.maketrans(killme,'_'*len(killme))
+ job_name = param_dict.get( 'title1', 'rgGRR' )
+ job_name = job_name.encode()
+ newname = '%s.html' % job_name.translate(trantab)
+ indatname = inp_data['i'].name
+ info = '%s Mean allele sharing on %s at %s' % (job_name,indatname,timenow())
+ ofname = 'out_file1'
+ data = out_data[ofname]
+ data.name = newname
+ data.info = info
+ out_data[ofname] = data
+ fromdir = data.extra_files_path
+ indat = inp_data['i']
+ indatname = indat.name
+ base_name = indat.metadata.base_name
+ todir = indat.extra_files_path # where the ldreduced stuff should be
+ ldfname = '%s_INDEP_THIN' % base_name # we store ld reduced and thinned data
+ ldout = os.path.join(todir,ldfname)
+ ldin = os.path.join(fromdir,ldfname)
+ if os.path.exists('%s.bed' % ldin) and not os.path.exists('%s.bed' % ldout): # copy ldreduced to input for next time
+ for ext in ['bim','bed','fam']:
+ src = '%s.%s' % (ldin,ext)
+ dest = '%s.%s' % (ldout,ext)
+ shutil.copy(src,dest)
+ app.model.context.flush()
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgtest_one_tool.sh
--- a/tools/rgenetics/rgtest_one_tool.sh Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgtest_one_tool.sh Wed May 19 10:28:41 2010 -0400
@@ -68,7 +68,7 @@
echo "now doing $TOOL"
OUTPATH="$OROOT/$TOOL"
rm -rf $OUTPATH/*
-cmd="$TOOLPATH/$TOOL.py "$INPATH/tinywga" "tinywga" $OUTPATH/${NPRE}.html $OUTPATH "$NPRE" '100' '6'"
+cmd="$TOOLPATH/$TOOL.py "$INPATH/tinywga" "tinywga" $OUTPATH/${NPRE}.html $OUTPATH "$NPRE" '100' '6' 'true'"
echo "Doing $cmd"
python $TOOLPATH/$TOOL.py "$INPATH/tinywga" "tinywga" $OUTPATH/${NPRE}.html $OUTPATH "$NPRE" '100' '6'
# rgGRR.py $i.extra_files_path/$i.metadata.base_name "$i.metadata.base_name"
diff -r 6a065c0f350e -r 7f95e51e06f7 tools/rgenetics/rgutils.py
--- a/tools/rgenetics/rgutils.py Mon May 17 10:58:16 2010 -0400
+++ b/tools/rgenetics/rgutils.py Wed May 19 10:28:41 2010 -0400
@@ -1,5 +1,5 @@
-# utilities for rgenetics
-#
+# utilities for rgenetics
+#
# copyright 2009 ross lazarus
# released under the LGPL
#
@@ -48,13 +48,13 @@
in a temporary directory
move everything, r script and all back to outdir which will be an html file
-
+
# test
- RRun(rcmd=['print("hello cruel world")','q()'],title='test')
+ RRun(rcmd=['print("hello cruel world")','q()'],title='test')
"""
rlog = []
print '### rexe = %s' % rexe
- assert os.path.isfile(rexe)
+ assert os.path.isfile(rexe)
rname = '%s.R' % title
stoname = '%s.R.log' % title
rfname = rname
@@ -90,17 +90,17 @@
else:
flist = os.listdir('.')
flist.sort
- flist = [(x,x) for x in flist]
+ flist = [(x,x) for x in flist]
for i,x in enumerate(flist):
if x == rname:
flist[i] = (x,'R script for %s' % title)
elif x == stoname:
- flist[i] = (x,'R log for %s' % title)
+ flist[i] = (x,'R log for %s' % title)
if False and rmoutdir:
os.removedirs(outdir)
return rlog,flist # for html layout
-
-
+
+
def RRun(rcmd=[],outdir=None,title='myR',tidy=True):
@@ -109,10 +109,10 @@
in a temporary directory
move everything, r script and all back to outdir which will be an html file
-
+
# test
- RRun(rcmd=['print("hello cruel world")','q()'],title='test')
- echo "a <- c(5, 5); b <- c(0.5, 0.5)" | cat - RScript.R | R --slave \ --vanilla
+ RRun(rcmd=['print("hello cruel world")','q()'],title='test')
+ echo "a <- c(5, 5); b <- c(0.5, 0.5)" | cat - RScript.R | R --slave \ --vanilla
suggested by http://tolstoy.newcastle.edu.au/R/devel/05/09/2448.html
"""
killme = string.punctuation + string.whitespace
@@ -149,29 +149,29 @@
rlog.insert(0,'Nonzero exit code = %d' % retval) # indicate failure
flist = os.listdir(outdir)
flist.sort
- flist = [(x,x) for x in flist]
+ flist = [(x,x) for x in flist]
for i,x in enumerate(flist):
if x == rname:
flist[i] = (x,'R script for %s' % title)
elif x == stoname:
- flist[i] = (x,'R log for %s' % title)
+ flist[i] = (x,'R log for %s' % title)
if tidy and tempout: # we used a temp one - fix that
flist = os.listdir(outdir)
for f in flist:
if os.path.isdir(f):
- flist2 = os.listdir(f)
+ flist2 = os.listdir(f)
for f2 in flist2:
- os.unlink(os.path.abspath(f2))
+ os.unlink(os.path.abspath(f2))
else:
os.unlink(os.path.abspath(f))
- os.rmdir(outdir)
+ os.rmdir(outdir)
return rlog,flist # for html layout
-
+
def runPlink(bfn='bar',ofn='foo',logf=None,plinktasks=[],cd='./',vclbase = []):
"""run a series of plink tasks and append log results to stdout
vcl has a list of parameters for the spawnv
common settings can all go in the vclbase list and are added to each plinktask
- """
+ """
# root for all
fplog,plog = tempfile.mkstemp()
if type(logf) == type(' '): # open otherwise assume is file - ugh I'm in a hurry
@@ -201,10 +201,10 @@
so lots more is perhaps less efficient - each window computational cost is
ON^2 unless the code is smart enough to avoid unecessary computation where
allele frequencies make it impossible to see ld > the r^2 cutoff threshold
- So, do a window and move forward 20?
- The fine Plink docs at http://pngu.mgh.harvard.edu/~purcell/plink/summary.shtml#prune
+ So, do a window and move forward 20?
+ The fine Plink docs at http://pngu.mgh.harvard.edu/~purcell/plink/summary.shtml#prune
reproduced below
-
+
Sometimes it is useful to generate a pruned subset of SNPs that are in approximate linkage equilibrium with each other. This can be achieved via two commands: --indep which prunes based on the variance inflation factor (VIF), which recursively removes SNPs within a sliding window; second, --indep-pairwise which is similar, except it is based only on pairwise genotypic correlation.
Hint The output of either of these commands is two lists of SNPs: those that are pruned out and those that are not. A separate command using the --extract or --exclude option is necessary to actually perform the pruning.
@@ -217,22 +217,22 @@
plink.prune.in
plink.prune.out
-Each is a simlpe list of SNP IDs; both these files can subsequently be specified as the argument for
+Each is a simlpe list of SNP IDs; both these files can subsequently be specified as the argument for
a --extract or --exclude command.
-The parameters for --indep are: window size in SNPs (e.g. 50), the number of SNPs to shift the
+The parameters for --indep are: window size in SNPs (e.g. 50), the number of SNPs to shift the
window at each step (e.g. 5), the VIF threshold. The VIF is 1/(1-R^2) where R^2 is the multiple correlation coefficient for a SNP being regressed on all other SNPs simultaneously. That is, this considers the correlations between SNPs but also between linear combinations of SNPs. A VIF of 10 is often taken to represent near collinearity problems in standard multiple regression analyses (i.e. implies R^2 of 0.9). A VIF of 1 would imply that the SNP is completely independent of all other SNPs. Practically, values between 1.5 and 2 should probably be used; particularly in small samples, if this threshold is too low and/or the window size is too large, too many SNPs may be removed.
The second procedure is performed:
plink --file data --indep-pairwise 50 5 0.5
-This generates the same output files as the first version; the only difference is that a
+This generates the same output files as the first version; the only difference is that a
simple pairwise threshold is used. The first two parameters (50 and 5) are the same as above (window size and step); the third parameter represents the r^2 threshold. Note: this represents the pairwise SNP-SNP metric now, not the multiple correlation coefficient; also note, this is based on the genotypic correlation, i.e. it does not involve phasing.
To give a concrete example: the command above that specifies 50 5 0.5 would a) consider a
window of 50 SNPs, b) calculate LD between each pair of SNPs in the window, b) remove one of a pair of SNPs if the LD is greater than 0.5, c) shift the window 5 SNPs forward and repeat the procedure.
-To make a new, pruned file, then use something like (in this example, we also convert the
+To make a new, pruned file, then use something like (in this example, we also convert the
standard PED fileset to a binary one):
plink --file data --extract plink.prune.in --make-bed --out pruneddata
"""
@@ -254,7 +254,7 @@
except:
alog.append('### %s Strange - no std out from plink when running command line\n%s\n' % (timenow(),' '.join(vcl)))
return alog
-
+
def readMap(mapfile=None,allmarkers=False,rsdict={},c=None,spos=None,epos=None):
"""abstract out - keeps reappearing
"""
@@ -280,65 +280,84 @@
mfile.close()
return markers,snpcols,rslist,rsdict
-def openOrMakeLDreduced(basename,newfpath,plinke='plink',forcerebuild=False):
- """ move out of the way - highly specific plink function to create or open
- an ld reduced and thinned data set for one of the ibs/grr methods..
- this should be part of the plinkJZ stuff - or bought in here maybe
+def getLDreducedFname(basename,infpath=None,outfpath=None,plinke='plink',forcerebuild=False):
+ """stub to get only the filename - not the Ped object
+ """
+ ldreduced,ftype = openLDreduced(basename,infpath=infpath,outfpath=outfpath,plinke=plinke,forcerebuild=forcerebuild,returnFname=True)
+ return ldreduced,ftype
+
+def openLDreduced(basename,infpath=None,outfpath=None,plinke='plink',forcerebuild=False,returnFname=False):
+ """ if file exists, return it else make and return
"""
ldr = '%s_INDEP_THIN' % basename # we store ld reduced and thinned data
- ldreduced = os.path.join(newfpath,ldr)
+ ldreduced = os.path.join(infpath,ldr)
ped = None
loglines = []
- vclbase = []
ldbedname = '%s.bed' % ldreduced
ldpedname = '%s.ped' % ldreduced
bedname = '%s.bed' % basename
pedname = '%s.ped' % basename
- ldbedfn = os.path.join(newfpath,ldbedname)
- ldpedfn = os.path.join(newfpath,ldpedname)
- bedfn = os.path.join(newfpath,bedname)
- pedfn = os.path.join(newfpath,pedname)
- bmap = os.path.join(newfpath,'%s.bim' % basename)
- pmap = os.path.join(newfpath,'%s.map' % basename)
+ ldbedfn = os.path.join(outfpath,ldbedname)
+ ldpedfn = os.path.join(outfpath,ldpedname)
+ bedfn = os.path.join(outfpath,bedname)
+ pedfn = os.path.join(outfpath,pedname)
+ bmap = os.path.join(outfpath,'%s.bim' % basename)
+ pmap = os.path.join(outfpath,'%s.map' % basename)
if not forcerebuild:
if os.path.exists(ldbedfn): # joy. already done
+ if returnFname:
+ return ldreduced,'pbed'
ped = plinkbinJZ.BPed(ldreduced)
ped.parse(quick=True)
return ped,loglines
- if os.path.exists(ldpedfn): # why bother - for completeness I guess
- ped = plinkbinJZ.LPed(ldreduced)
- ped.parse()
- return ped,loglines
- if os.path.exists(bedfn): # run ld prune and thin and save these for next time
- nsnp = len(open(bmap,'r').readlines())
- plinktasks = [['--bfile',basename,'--indep-pairwise 50 40 0.2','--out %s' % basename],
- ['--bfile',basename,'--extract %s.prune.in --make-bed --out %s_INDEP' % (basename, basename)]]
+ ped,loglines = makeLDreduced(basename,infpath=infpath,outfpath=outfpath,plinke=plinke,forcerebuild=forcerebuild,returnFname=returnFname)
+ return ped,loglines
+
+def makeLDreduced(basename,infpath=None,outfpath=None,plinke='plink',forcerebuild=False,returnFname=False):
+ """ not there so make and leave in output dir for post job hook to copy back into input extra files path for next time
+ """
+ ldr = '%s_INDEP_THIN' % basename # we store ld reduced and thinned data
+ ldreduced = os.path.join(outfpath,ldr) # note where this is going
+ outbase = os.path.join(outfpath,basename)
+ inbase = os.path.join(infpath,basename)
+ ped = None
+ loglines = []
+ ldbedname = '%s.bed' % ldreduced
+ ldpedname = '%s.ped' % ldreduced
+ bedname = '%s.bed' % basename
+ pedname = '%s.ped' % basename
+ ldbedfn = os.path.join(infpath,ldbedname)
+ ldpedfn = os.path.join(infpath,ldpedname)
+ bedfn = os.path.join(infpath,bedname)
+ pedfn = os.path.join(infpath,pedname)
+ bmap = os.path.join(infpath,'%s.bim' % basename)
+ pmap = os.path.join(infpath,'%s.map' % basename)
+ thin = '0.1' # 10%
+ winsize = '50'
+ winmove = '40'
+ r2thresh = '0.2'
+ plinktasks = []
+ nsnp = None
+ if (not os.path.exists(bedfn)) and os.path.exists(pedfn): # setup make pbed
+ plinktasks = [['--file',inbase,'--make-bed','--out',inbase],] # setup conversion
+ nsnp = len(open(pmap,'r').readlines())
+ if os.path.exists(bedfn) or nsnp: # run ld prune and thin and save these for next time
+ if not nsnp:
+ nsnp = len(open(bmap,'r').readlines())
+ vclbase = [plinke,'--noweb']
+ plinktasks += [['--bfile',inbase,'--indep-pairwise %s %s %s' % (winsize,winmove,r2thresh),'--out %s' % outbase],
+ ['--bfile',inbase,'--extract %s.prune.in --make-bed --out %s_INDEP' % (outbase, outbase)]]
if nsnp < 100: # if 9 snps --thin 0.1 will happily return 0 snps
- plinktasks += [['--bfile %s_INDEP --make-bed --out %s' % (basename,ldreduced)],]
+ plinktasks += [['--bfile %s_INDEP --make-bed --out %s' % (outbase,ldreduced)],]
else: # thin rather than copy
- plinktasks += [['--bfile',basename,'--extract %s.prune.in --make-bed --out %s' % (basename, ldreduced)]]
+ plinktasks += [['--bfile %s_INDEP --thin %s --make-bed --out %s' % (outbase,thin,ldreduced),]]
# subset of ld independent markers for eigenstrat and other requirements
vclbase = [plinke,'--noweb']
- loglines = pruneLD(plinktasks=plinktasks,cd=newfpath,vclbase = vclbase)
+ loglines = pruneLD(plinktasks=plinktasks,cd=outfpath,vclbase = vclbase)
+ if returnFname:
+ return ldreduced,'pbed'
ped = plinkbinJZ.BPed(ldreduced)
ped.parse(quick=True)
return ped,loglines
- if pedname and os.path.exists(pedfn): # screw it - return a bed - quicker to process
- nsnp = len(open(pmap,'r').readlines())
- if nsnp > 100:
- plinktasks = [['--file',basename,'--make-bed','--out',basename],
- ['--bfile',basename,'--indep-pairwise 50 40 0.2','--out %s' % basename],
- ['--bfile',basename,'--extract %s.prune.in --make-bed --out %s_INDEP' % (basename, basename)],
- ['--bfile %s_INDEP --thin 0.1 --recode --out %s' % (bedname,ldreduced),]]
- else: # no thin step
- plinktasks = [['--file',basename,'--make-bed','--out',basename],
- ['--bfile',basename,'--indep-pairwise 50 40 0.2','--out %s' % basename],
- ['--bfile',basename,'--extract %s.prune.in --make-bed --out %s' % (basename, ldreduced)]]
+ raise Exception('InputNotFound','No input pbed or lped found in %s' % inpath)
- # subset of ld independent markers for eigenstrat and other requirements
- vclbase = [plinke,'--noweb']
- loglines = pruneLD(plinktasks=plinktasks,cd=newfpath,vclbase = vclbase)
- ped = plinkbinJZ.BPed(os.path.splitext(ldbedfn)[0])
- ped.parse(quick=True)
- return ped,loglines
-
1
0