galaxy-commits
Threads by month
- ----- 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
- 15302 discussions
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
25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/6a065c0f350e
changeset: 3790:6a065c0f350e
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Mon May 17 10:58:16 2010 -0400
description:
Replace big selects that refresh on change with search+select.
diffstat:
static/scripts/galaxy.base.js | 53 +++++++++++++++++++++++++++++++++-
static/scripts/jquery.autocomplete.js | 2 +-
static/scripts/packed/galaxy.base.js | 2 +-
3 files changed, 52 insertions(+), 5 deletions(-)
diffs (99 lines):
diff -r 11951fe9c714 -r 6a065c0f350e static/scripts/galaxy.base.js
--- a/static/scripts/galaxy.base.js Sat May 15 13:12:38 2010 -0400
+++ b/static/scripts/galaxy.base.js Mon May 17 10:58:16 2010 -0400
@@ -155,7 +155,7 @@
if (min_length === undefined)
min_length = 20;
- $('select[refresh_on_change!="true"]').each( function() {
+ $('select').each( function() {
var select_elt = $(this);
// Skip if # of options < min length.
if (select_elt.find('option').length < min_length)
@@ -199,7 +199,7 @@
});
// Set initial text if it's empty.
- if ( text_input_elt.attr('value') == '' ) {
+ if ( start_value == '' || start_value == '?') {
text_input_elt.attr('value', 'Click to Search or Select');
}
@@ -231,9 +231,56 @@
}
}
};
+ text_input_elt.parents('form').submit( function() { submit_hook(); } );
- text_input_elt.parents('form').submit( function() { submit_hook(); } );
+ // Add custom event so that other objects can execute name --> value conversion whenever they want.
$(document).bind("convert_dbkeys", function() { submit_hook(); } );
+
+ // If select is refresh on change, mirror this behavior.
+ if (select_elt.attr('refresh_on_change') == 'true')
+ {
+ // Get refresh vals.
+ var refresh_vals = select_elt.attr('refresh_on_change_values');
+ if (refresh_vals !== undefined)
+ refresh_vals = refresh_vals.split(",")
+ text_input_elt.keyup( function( e )
+ {
+ if ( ( e.keyCode == 13 ) && // Return Key
+ ( return_key_pressed_for_autocomplete == true ) ) // Make sure return key was for autocomplete.
+ {
+ //
+ // If value entered can be matched to value, do so and refresh by submitting parent form.
+ //
+
+ // Get new value and see if it can be matched.
+ var cur_value = text_input_elt.attr('value');
+ var new_value = select_mapping[cur_value];
+ if (new_value !== null && new_value !== undefined)
+ {
+ // Do refresh if new value is refresh value or if there are no refresh values.
+ refresh = false;
+ if (refresh_vals !== undefined)
+ {
+ for (var i= 0; i < refresh_vals.length; i++ )
+ if (new_value == refresh_vals[i])
+ {
+ refresh = true;
+ break;
+ }
+ }
+ else
+ // Refresh for all values.
+ refresh = true;
+
+ if (refresh)
+ {
+ text_input_elt.attr('value', new_value);
+ text_input_elt.parents('form').submit();
+ }
+ }
+ }
+ });
+ }
});
}
diff -r 11951fe9c714 -r 6a065c0f350e static/scripts/jquery.autocomplete.js
--- a/static/scripts/jquery.autocomplete.js Sat May 15 13:12:38 2010 -0400
+++ b/static/scripts/jquery.autocomplete.js Mon May 17 10:58:16 2010 -0400
@@ -13,7 +13,7 @@
String.prototype.endsWith = function(str) {return (this.match(str+"$")==str)}
-
+// JG HACK: each autocomplete object should have its own return_key flag.
var return_key_pressed_for_autocomplete = false;
;(function($) {
diff -r 11951fe9c714 -r 6a065c0f350e static/scripts/packed/galaxy.base.js
--- a/static/scripts/packed/galaxy.base.js Sat May 15 13:12:38 2010 -0400
+++ b/static/scripts/packed/galaxy.base.js Mon May 17 10:58:16 2010 -0400
@@ -1,1 +1,1 @@
-$(document).ready(function(){replace_big_select_inputs()});$.fn.makeAbsolute=function(a){return this.each(function(){var b=$(this);var c=b.position();b.css({position:"absolute",marginLeft:0,marginTop:0,top:c.top,left:c.left,right:$(window).width()-(c.left+b.width())});if(a){b.remove().appendTo("body")}})};function ensure_popup_helper(){if($("#popup-helper").length===0){$("<div id='popup-helper'/>").css({background:"white",opacity:0,zIndex:15000,position:"absolute",top:0,left:0,width:"100%",height:"100%"}).appendTo("body").hide()}}function attach_popupmenu(b,d){var a=function(){d.unbind().hide();$("#popup-helper").unbind("click.popupmenu").hide()};var c=function(g){$("#popup-helper").bind("click.popupmenu",a).show();d.click(a).css({left:0,top:-1000}).show();var f=g.pageX-d.width()/2;f=Math.min(f,$(document).scrollLeft()+$(window).width()-$(d).width()-20);f=Math.max(f,$(document).scrollLeft()+20);d.css({top:g.pageY-5,left:f});return false};$(b).click(c)}function make_popupmen!
u(c,b){ensure_popup_helper();var a=$("<ul id='"+c.attr("id")+"-menu'></ul>");$.each(b,function(f,e){if(e){$("<li/>").html(f).click(e).appendTo(a)}else{$("<li class='head'/>").html(f).appendTo(a)}});var d=$("<div class='popmenu-wrapper'>");d.append(a).append("<div class='overlay-border'>").css("position","absolute").appendTo("body").hide();attach_popupmenu(c,d)}function make_popup_menus(){jQuery("div[popupmenu]").each(function(){var c={};$(this).find("a").each(function(){var b=$(this).attr("confirm"),d=$(this).attr("href"),e=$(this).attr("target");c[$(this).text()]=function(){if(!b||confirm(b)){var g=window;if(e=="_parent"){g=window.parent}else{if(e=="_top"){g=window.top}}g.location=d}}});var a=$("#"+$(this).attr("popupmenu"));make_popupmenu(a,c);$(this).remove();a.addClass("popup").show()})}function array_length(b){if(b.length){return b.length}var c=0;for(var a in b){c++}return c}function naturalSort(i,g){var n=/(-?[0-9\.]+)/g,j=i.toString().toLowerCase()||"",f=g.toString()!
.toLowerCase()||"",k=String.fromCharCode(0),l=j.replace(n,k+"$1"+k).sp
lit(k),e=f.replace(n,k+"$1"+k).split(k),d=(new Date(j)).getTime(),m=d?(new Date(f)).getTime():null;if(m){if(d<m){return -1}else{if(d>m){return 1}}}for(var h=0,c=Math.max(l.length,e.length);h<c;h++){oFxNcL=parseFloat(l[h])||l[h];oFyNcL=parseFloat(e[h])||e[h];if(oFxNcL<oFyNcL){return -1}else{if(oFxNcL>oFyNcL){return 1}}}return 0}function replace_big_select_inputs(a){if(typeof jQuery().autocomplete=="undefined"){return}if(a===undefined){a=20}$('select[refresh_on_change!="true"]').each(function(){var b=$(this);if(b.find("option").length<a){return}var c=b.attr("value");var d=$("<input type='text' class='text-and-autocomplete-select'></input>");d.attr("size",40);d.attr("name",b.attr("name"));d.attr("id",b.attr("id"));d.click(function(){var i=$(this).attr("value");$(this).attr("value","Loading...");$(this).showAllInCache();$(this).attr("value",i);$(this).select()});var h=[];var g={};b.children("option").each(function(){var j=$(this).text();var i=$(this).attr("value");h.push(j);g[j]!
=i;g[i]=i;if(i==c){d.attr("value",j)}});if(d.attr("value")==""){d.attr("value","Click to Search or Select")}h=h.sort(naturalSort);var f={selectFirst:false,autoFill:false,mustMatch:false,matchContains:true,max:1000,minChars:0,hideForLessThanMinChars:false};d.autocomplete(h,f);b.replaceWith(d);var e=function(){var j=d.attr("value");var i=g[j];if(i!==null&&i!==undefined){d.attr("value",i)}else{if(c!=""){d.attr("value",c)}else{d.attr("value","?")}}};d.parents("form").submit(function(){e()});$(document).bind("convert_dbkeys",function(){e()})})}function async_save_text(d,f,e,a,c,h,i,g,b){if(c===undefined){c=30}if(i===undefined){i=4}$("#"+d).live("click",function(){if($("#renaming-active").length>0){return}var l=$("#"+f),k=l.text(),j;if(h){j=$("<textarea></textarea>").attr({rows:i,cols:c}).text(k)}else{j=$("<input type='text'></input>").attr({value:k,size:c})}j.attr("id","renaming-active");j.blur(function(){$(this).remove();l.show();if(b){b(j)}});j.keyup(function(n){if(n.keyCode==!
=27){$(this).trigger("blur")}else{if(n.keyCode===13){var m={};m[a]=$(t
his).val();$(this).trigger("blur");$.ajax({url:e,data:m,error:function(){alert("Text editing for elt "+f+" failed")},success:function(o){l.text(o);if(b){b(j)}}})}}});if(g){g(j)}l.hide();j.insertAfter(l);j.focus();j.select();return})}function init_history_items(d,a,c){var b=function(){try{var e=$.jStore.store("history_expand_state");if(e){for(var g in e){$("#"+g+" div.historyItemBody").show()}}}catch(f){$.jStore.remove("history_expand_state")}if($.browser.mozilla){$("div.historyItemBody").each(function(){if(!$(this).is(":visible")){$(this).find("pre.peek").css("overflow","hidden")}})}d.each(function(){var j=this.id;var h=$(this).children("div.historyItemBody");var i=h.find("pre.peek");$(this).find(".historyItemTitleBar > .historyItemTitle").wrap("<a href='javascript:void(0);'></a>").click(function(){if(h.is(":visible")){if($.browser.mozilla){i.css("overflow","hidden")}h.slideUp("fast");if(!c){var k=$.jStore.store("history_expand_state");if(k){delete k[j];$.jStore.store("histo!
ry_expand_state",k)}}}else{h.slideDown("fast",function(){if($.browser.mozilla){i.css("overflow","auto")}});if(!c){var k=$.jStore.store("history_expand_state");if(k===undefined){k={}}k[j]=true;$.jStore.store("history_expand_state",k)}}return false})});$("#top-links > a.toggle").click(function(){var h=$.jStore.store("history_expand_state");if(h===undefined){h={}}$("div.historyItemBody:visible").each(function(){if($.browser.mozilla){$(this).find("pre.peek").css("overflow","hidden")}$(this).slideUp("fast");if(h){delete h[$(this).parent().attr("id")]}});$.jStore.store("history_expand_state",h)}).show()};if(a){b()}else{$.jStore.init("galaxy");$.jStore.engineReady(function(){b()})}}$(document).ready(function(){$("a[confirm]").click(function(){return confirm($(this).attr("confirm"))});if($.fn.tipsy){$(".tooltip").tipsy({gravity:"s"})}make_popup_menus()});
\ No newline at end of file
+$(document).ready(function(){replace_big_select_inputs()});$.fn.makeAbsolute=function(a){return this.each(function(){var b=$(this);var c=b.position();b.css({position:"absolute",marginLeft:0,marginTop:0,top:c.top,left:c.left,right:$(window).width()-(c.left+b.width())});if(a){b.remove().appendTo("body")}})};function ensure_popup_helper(){if($("#popup-helper").length===0){$("<div id='popup-helper'/>").css({background:"white",opacity:0,zIndex:15000,position:"absolute",top:0,left:0,width:"100%",height:"100%"}).appendTo("body").hide()}}function attach_popupmenu(b,d){var a=function(){d.unbind().hide();$("#popup-helper").unbind("click.popupmenu").hide()};var c=function(g){$("#popup-helper").bind("click.popupmenu",a).show();d.click(a).css({left:0,top:-1000}).show();var f=g.pageX-d.width()/2;f=Math.min(f,$(document).scrollLeft()+$(window).width()-$(d).width()-20);f=Math.max(f,$(document).scrollLeft()+20);d.css({top:g.pageY-5,left:f});return false};$(b).click(c)}function make_popupmen!
u(c,b){ensure_popup_helper();var a=$("<ul id='"+c.attr("id")+"-menu'></ul>");$.each(b,function(f,e){if(e){$("<li/>").html(f).click(e).appendTo(a)}else{$("<li class='head'/>").html(f).appendTo(a)}});var d=$("<div class='popmenu-wrapper'>");d.append(a).append("<div class='overlay-border'>").css("position","absolute").appendTo("body").hide();attach_popupmenu(c,d)}function make_popup_menus(){jQuery("div[popupmenu]").each(function(){var c={};$(this).find("a").each(function(){var b=$(this).attr("confirm"),d=$(this).attr("href"),e=$(this).attr("target");c[$(this).text()]=function(){if(!b||confirm(b)){var g=window;if(e=="_parent"){g=window.parent}else{if(e=="_top"){g=window.top}}g.location=d}}});var a=$("#"+$(this).attr("popupmenu"));make_popupmenu(a,c);$(this).remove();a.addClass("popup").show()})}function array_length(b){if(b.length){return b.length}var c=0;for(var a in b){c++}return c}function naturalSort(i,g){var n=/(-?[0-9\.]+)/g,j=i.toString().toLowerCase()||"",f=g.toString()!
.toLowerCase()||"",k=String.fromCharCode(0),l=j.replace(n,k+"$1"+k).sp
lit(k),e=f.replace(n,k+"$1"+k).split(k),d=(new Date(j)).getTime(),m=d?(new Date(f)).getTime():null;if(m){if(d<m){return -1}else{if(d>m){return 1}}}for(var h=0,c=Math.max(l.length,e.length);h<c;h++){oFxNcL=parseFloat(l[h])||l[h];oFyNcL=parseFloat(e[h])||e[h];if(oFxNcL<oFyNcL){return -1}else{if(oFxNcL>oFyNcL){return 1}}}return 0}function replace_big_select_inputs(a){if(typeof jQuery().autocomplete=="undefined"){return}if(a===undefined){a=20}$("select").each(function(){var b=$(this);if(b.find("option").length<a){return}var c=b.attr("value");var d=$("<input type='text' class='text-and-autocomplete-select'></input>");d.attr("size",40);d.attr("name",b.attr("name"));d.attr("id",b.attr("id"));d.click(function(){var j=$(this).attr("value");$(this).attr("value","Loading...");$(this).showAllInCache();$(this).attr("value",j);$(this).select()});var i=[];var h={};b.children("option").each(function(){var k=$(this).text();var j=$(this).attr("value");i.push(k);h[k]=j;h[j]=j;if(j==c){d.attr("!
value",k)}});if(c==""||c=="?"){d.attr("value","Click to Search or Select")}i=i.sort(naturalSort);var g={selectFirst:false,autoFill:false,mustMatch:false,matchContains:true,max:1000,minChars:0,hideForLessThanMinChars:false};d.autocomplete(i,g);b.replaceWith(d);var e=function(){var k=d.attr("value");var j=h[k];if(j!==null&&j!==undefined){d.attr("value",j)}else{if(c!=""){d.attr("value",c)}else{d.attr("value","?")}}};d.parents("form").submit(function(){e()});$(document).bind("convert_dbkeys",function(){e()});if(b.attr("refresh_on_change")=="true"){var f=b.attr("refresh_on_change_values");if(f!==undefined){f=f.split(",")}d.keyup(function(m){if((m.keyCode==13)&&(return_key_pressed_for_autocomplete==true)){var l=d.attr("value");var k=h[l];if(k!==null&&k!==undefined){refresh=false;if(f!==undefined){for(var j=0;j<f.length;j++){if(k==f[j]){refresh=true;break}}}else{refresh=true}if(refresh){d.attr("value",k);d.parents("form").submit()}}}})}})}function async_save_text(d,f,e,a,c,h,i,g,b!
){if(c===undefined){c=30}if(i===undefined){i=4}$("#"+d).live("click",f
unction(){if($("#renaming-active").length>0){return}var l=$("#"+f),k=l.text(),j;if(h){j=$("<textarea></textarea>").attr({rows:i,cols:c}).text(k)}else{j=$("<input type='text'></input>").attr({value:k,size:c})}j.attr("id","renaming-active");j.blur(function(){$(this).remove();l.show();if(b){b(j)}});j.keyup(function(n){if(n.keyCode===27){$(this).trigger("blur")}else{if(n.keyCode===13){var m={};m[a]=$(this).val();$(this).trigger("blur");$.ajax({url:e,data:m,error:function(){alert("Text editing for elt "+f+" failed")},success:function(o){l.text(o);if(b){b(j)}}})}}});if(g){g(j)}l.hide();j.insertAfter(l);j.focus();j.select();return})}function init_history_items(d,a,c){var b=function(){try{var e=$.jStore.store("history_expand_state");if(e){for(var g in e){$("#"+g+" div.historyItemBody").show()}}}catch(f){$.jStore.remove("history_expand_state")}if($.browser.mozilla){$("div.historyItemBody").each(function(){if(!$(this).is(":visible")){$(this).find("pre.peek").css("overflow","hidden")}}!
)}d.each(function(){var j=this.id;var h=$(this).children("div.historyItemBody");var i=h.find("pre.peek");$(this).find(".historyItemTitleBar > .historyItemTitle").wrap("<a href='javascript:void(0);'></a>").click(function(){if(h.is(":visible")){if($.browser.mozilla){i.css("overflow","hidden")}h.slideUp("fast");if(!c){var k=$.jStore.store("history_expand_state");if(k){delete k[j];$.jStore.store("history_expand_state",k)}}}else{h.slideDown("fast",function(){if($.browser.mozilla){i.css("overflow","auto")}});if(!c){var k=$.jStore.store("history_expand_state");if(k===undefined){k={}}k[j]=true;$.jStore.store("history_expand_state",k)}}return false})});$("#top-links > a.toggle").click(function(){var h=$.jStore.store("history_expand_state");if(h===undefined){h={}}$("div.historyItemBody:visible").each(function(){if($.browser.mozilla){$(this).find("pre.peek").css("overflow","hidden")}$(this).slideUp("fast");if(h){delete h[$(this).parent().attr("id")]}});$.jStore.store("history_expand_s!
tate",h)}).show()};if(a){b()}else{$.jStore.init("galaxy");$.jStore.eng
ineReady(function(){b()})}}$(document).ready(function(){$("a[confirm]").click(function(){return confirm($(this).attr("confirm"))});if($.fn.tipsy){$(".tooltip").tipsy({gravity:"s"})}make_popup_menus()});
\ No newline at end of file
1
0
25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/00a558d5ad25
changeset: 3788:00a558d5ad25
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Sat May 15 11:25:05 2010 -0400
description:
Enable images and binary datasets to work within the display framework. More work is needed to enable images to work well.
diffstat:
lib/galaxy/web/controllers/dataset.py | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diffs (20 lines):
diff -r 9ab8480354c7 -r 00a558d5ad25 lib/galaxy/web/controllers/dataset.py
--- a/lib/galaxy/web/controllers/dataset.py Fri May 14 11:25:03 2010 -0400
+++ b/lib/galaxy/web/controllers/dataset.py Sat May 15 11:25:05 2010 -0400
@@ -472,7 +472,15 @@
if dataset:
truncated, dataset_data = self.get_data( dataset, preview )
dataset.annotation = self.get_item_annotation_str( trans, dataset.history.user, dataset )
- return trans.fill_template_mako( "/dataset/display.mako", item=dataset, item_data=dataset_data, truncated=truncated )
+
+ # If data is binary or an image, stream without template; otherwise, use display template.
+ # TODO: figure out a way to display images in display template.
+ if isinstance(dataset.datatype, datatypes.binary.Binary) or isinstance(dataset.datatype, datatypes.images.Image):
+ mime = trans.app.datatypes_registry.get_mimetype_by_extension( dataset.extension.lower() )
+ trans.response.set_content_type( mime )
+ return open( dataset.file_name )
+ else:
+ return trans.fill_template_mako( "/dataset/display.mako", item=dataset, item_data=dataset_data, truncated=truncated )
else:
raise web.httpexceptions.HTTPNotFound()
1
0
25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/11951fe9c714
changeset: 3789:11951fe9c714
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Sat May 15 13:12:38 2010 -0400
description:
Better UI flow for changing an HDA's data type.
diffstat:
lib/galaxy/web/controllers/root.py | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diffs (11 lines):
diff -r 00a558d5ad25 -r 11951fe9c714 lib/galaxy/web/controllers/root.py
--- a/lib/galaxy/web/controllers/root.py Sat May 15 11:25:05 2010 -0400
+++ b/lib/galaxy/web/controllers/root.py Sat May 15 13:12:38 2010 -0400
@@ -276,6 +276,7 @@
return trans.show_error_message( "This dataset is currently being used as input or output. You cannot change datatype until the jobs have completed or you have canceled them." )
trans.app.datatypes_registry.change_datatype( data, params.datatype )
trans.sa_session.flush()
+ return trans.show_ok_message( "Changed the type of dataset '%s' to %s" % ( data.name, params.datatype ), refresh_frames=['history'] )
else:
return trans.show_error_message( "You are unable to change datatypes in this manner. Changing %s to %s is not allowed." % ( data.extension, params.datatype ) )
elif params.save:
1
0
25 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/9ab8480354c7
changeset: 3787:9ab8480354c7
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Fri May 14 11:25:03 2010 -0400
description:
Fixes for editing tool information and submitting a tool for approval in the community space.
diffstat:
lib/galaxy/webapps/community/controllers/common.py | 13 +++++++++
lib/galaxy/webapps/community/datatypes/__init__.py | 2 +-
templates/webapps/community/tool/edit_tool.mako | 30 +++++++++++-----------
3 files changed, 29 insertions(+), 16 deletions(-)
diffs (100 lines):
diff -r 48432330228e -r 9ab8480354c7 lib/galaxy/webapps/community/controllers/common.py
--- a/lib/galaxy/webapps/community/controllers/common.py Fri May 14 10:37:36 2010 -0400
+++ b/lib/galaxy/webapps/community/controllers/common.py Fri May 14 11:25:03 2010 -0400
@@ -43,6 +43,19 @@
message=message,
status='done' ) )
elif params.get( 'approval_button', False ):
+ if params.get( 'in_categories', False ):
+ in_categories = [ trans.sa_session.query( trans.app.model.Category ).get( x ) for x in util.listify( params.in_categories ) ]
+ trans.app.security_agent.set_entity_category_associations( tools=[ tool ], categories=in_categories )
+ else:
+ # There must not be any categories associated with the tool
+ trans.app.security_agent.set_entity_category_associations( tools=[ tool ], categories=[] )
+ user_description = util.restore_text( params.get( 'user_description', '' ) )
+ if user_description:
+ tool.user_description = user_description
+ else:
+ tool.user_description = ''
+ trans.sa_session.add( tool )
+ trans.sa_session.flush()
# Move the state from NEW to WAITING
event = trans.app.model.Event( state=trans.app.model.Tool.states.WAITING )
tea = trans.app.model.ToolEventAssociation( tool, event )
diff -r 48432330228e -r 9ab8480354c7 lib/galaxy/webapps/community/datatypes/__init__.py
--- a/lib/galaxy/webapps/community/datatypes/__init__.py Fri May 14 10:37:36 2010 -0400
+++ b/lib/galaxy/webapps/community/datatypes/__init__.py Fri May 14 11:25:03 2010 -0400
@@ -122,7 +122,7 @@
raise DatatypeVerificationError( 'Tool XML file does not conform to the specification. Missing required <tool> tag attribute: %s' % e )
rval.description = ''
desc_tag = root.find( 'description' )
- if desc_tag:
+ if desc_tag is not None:
description = desc_tag.text
if description:
rval.description = description.strip()
diff -r 48432330228e -r 9ab8480354c7 templates/webapps/community/tool/edit_tool.mako
--- a/templates/webapps/community/tool/edit_tool.mako Fri May 14 10:37:36 2010 -0400
+++ b/templates/webapps/community/tool/edit_tool.mako Fri May 14 11:25:03 2010 -0400
@@ -16,6 +16,13 @@
$(function(){
$("input:text:first").focus();
})
+ function confirmSubmit() {
+ if ( confirm( "After you have submitted your tool to be published, you will no longer be able to modify it. Click OK to submit it." ) ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
</script>
</%def>
@@ -89,9 +96,6 @@
%endif
<div style="clear: both"></div>
</div>
- <div class="form-row">
- <input type="submit" id="edit_tool_button" name="edit_tool_button" value="Save">
- </div>
</div>
</div>
<p/>
@@ -115,29 +119,25 @@
</div>
</div>
</div>
- </form>
- <p/>
- <div class="toolForm">
+ <p/>
%if tool.is_new():
- <div class="toolFormTitle">Get approval for publishing</div>
- <div class="toolFormBody">
- <form name="get_approval" id="get_approval" action="${h.url_for( controller='common', action='edit_tool' )}" method="post" >
- <input type="hidden" name="id" value="${trans.app.security.encode_id( tool.id )}"/>
- <input type="hidden" name="cntrller" value="${cntrller}"/>
+ <div class="toolForm">
+ <div class="toolFormTitle">Get approval for publishing</div>
+ <div class="toolFormBody">
<div class="form-row">
- <input type="submit" name="approval_button" value="Submit for approval"/>
+ <input type="submit" name="approval_button" id="approval_button" value="Submit for approval" onClick="return confirmSubmit()" />
</div>
<div class="form-row">
<div class="toolParamHelp" style="clear: both;">
Tools must be approved before they are made available to others in the community. After you have submitted
your tool to be published, you will no longer be able to modify it, so make sure the information above is
- correct and and save any changes before submitting for approval.
+ correct before submitting for approval.
</div>
</div>
- </form>
+ </div>
</div>
%endif
- </div>
+ </form>
%else:
${render_msg( "You are not allowed to edit this tool", "error" )}
%endif
1
0
20 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/48432330228e
changeset: 3786:48432330228e
user: Nate Coraor <nate(a)bx.psu.edu>
date: Fri May 14 10:37:36 2010 -0400
description:
Use PBS exit_status (if keep_completed is set) so we can detect PBS failures.
diffstat:
eggs.ini | 2 +-
lib/galaxy/jobs/runners/pbs.py | 133 ++++++++++++++++++++++++++--------------
2 files changed, 86 insertions(+), 49 deletions(-)
diffs (200 lines):
diff -r 5ead6e4c2ef4 -r 48432330228e eggs.ini
--- a/eggs.ini Fri May 14 10:19:12 2010 -0400
+++ b/eggs.ini Fri May 14 10:37:36 2010 -0400
@@ -17,7 +17,7 @@
DRMAA_python = 0.2
MySQL_python = 1.2.3c1
numpy = 1.3.0
-pbs_python = 2.9.4
+pbs_python = 2.9.8
psycopg2 = 2.0.13
pycrypto = 2.0.1
pysam = 0.1.1
diff -r 5ead6e4c2ef4 -r 48432330228e lib/galaxy/jobs/runners/pbs.py
--- a/lib/galaxy/jobs/runners/pbs.py Fri May 14 10:19:12 2010 -0400
+++ b/lib/galaxy/jobs/runners/pbs.py Fri May 14 10:37:36 2010 -0400
@@ -50,6 +50,19 @@
%s
"""
+# From pbs' job.h
+JOB_EXIT_STATUS = {
+ 0: "job exec successful",
+ -1: "job exec failed, before files, no retry",
+ -2: "job exec failed, after files, no retry",
+ -3: "job execution failed, do retry",
+ -4: "job aborted on MOM initialization",
+ -5: "job aborted on MOM init, chkpt, no migrate",
+ -6: "job aborted on MOM init, chkpt, ok migrate",
+ -7: "job restart failed",
+ -8: "exec() of user command failed",
+}
+
class PBSJobState( object ):
def __init__( self ):
"""
@@ -65,6 +78,7 @@
self.efile = None
self.runner_url = None
self.check_count = 0
+ self.stop_job = False
class PBSJobRunner( object ):
"""
@@ -193,8 +207,9 @@
pbs_options = self.determine_pbs_options( runner_url )
c = pbs.pbs_connect( pbs_server_name )
if c <= 0:
+ errno, text = pbs.error()
job_wrapper.fail( "Unable to queue job for execution. Resubmitting the job may succeed." )
- log.error( "Connection to PBS server for submit failed" )
+ log.error( "Connection to PBS server for submit failed: %s: %s" % ( errno, text ) )
return
# define job attributes
@@ -336,58 +351,78 @@
log.debug( "(%s/%s) Skipping state check because PBS server connection failed" % ( galaxy_job_id, job_id ) )
new_watched.append( pbs_job_state )
continue
- if statuses.has_key( job_id ):
+ try:
status = statuses[job_id]
- if status.job_state != old_state:
- log.debug("(%s/%s) job state changed from %s to %s" % ( galaxy_job_id, job_id, old_state, status.job_state ) )
- if status.job_state == "R" and not pbs_job_state.running:
- pbs_job_state.running = True
- pbs_job_state.job_wrapper.change_state( model.Job.states.RUNNING )
- if status.job_state == "R" and ( pbs_job_state.check_count % 20 ) == 0:
- # Every 20th time the job status is checked, do limit checks (if configured)
- if self.app.config.output_size_limit > 0:
- # Check the size of the job outputs
- fail = False
- for outfile, size in pbs_job_state.job_wrapper.check_output_sizes():
- if size > self.app.config.output_size_limit:
- pbs_job_state.fail_message = 'Job output grew too large (greater than %s), please try different job parameters or' \
- % nice_size( self.app.config.output_size_limit )
- log.warning( '(%s/%s) Dequeueing job due to output %s growing larger than %s limit' \
- % ( galaxy_job_id, job_id, os.path.basename( outfile ), nice_size( self.app.config.output_size_limit ) ) )
- self.work_queue.put( ( 'fail', pbs_job_state ) )
- fail = True
- break
- if fail:
- continue
- if self.job_walltime is not None:
- # Check the job's execution time
- if status.get( 'resources_used', False ):
- # resources_used may not be in the status for new jobs
- h, m, s = [ int( i ) for i in status.resources_used.walltime.split( ':' ) ]
- time_executing = timedelta( 0, s, 0, 0, m, h )
- if time_executing > self.job_walltime:
- pbs_job_state.fail_message = 'Job ran longer than maximum allowed execution time (%s), please try different job parameters or' \
- % self.app.config.job_walltime
- log.warning( '(%s/%s) Dequeueing job since walltime has been reached' \
- % ( galaxy_job_id, job_id ) )
- self.work_queue.put( ( 'fail', pbs_job_state ) )
- continue
- pbs_job_state.old_state = status.job_state
- new_watched.append( pbs_job_state )
- else:
+ except KeyError:
try:
- # recheck to make sure it wasn't a communication problem
+ # Recheck to make sure it wasn't a communication problem
self.check_single_job( pbs_server_name, job_id )
- log.warning( "(%s/%s) job was not in state check list, but was found with individual state check" % ( galaxy_job_id, job_id ) )
+ log.warning( "(%s/%s) PBS job was not in state check list, but was found with individual state check" % ( galaxy_job_id, job_id ) )
new_watched.append( pbs_job_state )
except:
errno, text = pbs.error()
- if errno != 15001:
- log.info("(%s/%s) state check resulted in error (%d): %s" % (galaxy_job_id, job_id, errno, text) )
+ if errno == 15001:
+ # 15001 == job not in queue
+ log.debug("(%s/%s) PBS job has left queue" % (galaxy_job_id, job_id) )
+ self.work_queue.put( ( 'finish', pbs_job_state ) )
+ else:
+ # Unhandled error, continue to monitor
+ log.info("(%s/%s) PBS state check resulted in error (%d): %s" % (galaxy_job_id, job_id, errno, text) )
new_watched.append( pbs_job_state )
- else:
- log.debug("(%s/%s) job has left queue" % (galaxy_job_id, job_id) )
- self.work_queue.put( ( 'finish', pbs_job_state ) )
+ continue
+ if status.job_state != old_state:
+ log.debug("(%s/%s) PBS job state changed from %s to %s" % ( galaxy_job_id, job_id, old_state, status.job_state ) )
+ if status.job_state == "R" and not pbs_job_state.running:
+ pbs_job_state.running = True
+ pbs_job_state.job_wrapper.change_state( model.Job.states.RUNNING )
+ if status.job_state == "R" and ( pbs_job_state.check_count % 20 ) == 0:
+ # Every 20th time the job status is checked, do limit checks (if configured)
+ if self.app.config.output_size_limit > 0:
+ # Check the size of the job outputs
+ fail = False
+ for outfile, size in pbs_job_state.job_wrapper.check_output_sizes():
+ if size > self.app.config.output_size_limit:
+ pbs_job_state.fail_message = 'Job output grew too large (greater than %s), please try different job parameters or' \
+ % nice_size( self.app.config.output_size_limit )
+ log.warning( '(%s/%s) Dequeueing job due to output %s growing larger than %s limit' \
+ % ( galaxy_job_id, job_id, os.path.basename( outfile ), nice_size( self.app.config.output_size_limit ) ) )
+ pbs_job_state.stop_job = True
+ self.work_queue.put( ( 'fail', pbs_job_state ) )
+ fail = True
+ break
+ if fail:
+ continue
+ if self.job_walltime is not None:
+ # Check the job's execution time
+ if status.get( 'resources_used', False ):
+ # resources_used may not be in the status for new jobs
+ h, m, s = [ int( i ) for i in status.resources_used.walltime.split( ':' ) ]
+ time_executing = timedelta( 0, s, 0, 0, m, h )
+ if time_executing > self.job_walltime:
+ pbs_job_state.fail_message = 'Job ran longer than maximum allowed execution time (%s), please try different job parameters or' \
+ % self.app.config.job_walltime
+ log.warning( '(%s/%s) Dequeueing job since walltime has been reached' \
+ % ( galaxy_job_id, job_id ) )
+ pbs_job_state.stop_job = True
+ self.work_queue.put( ( 'fail', pbs_job_state ) )
+ continue
+ elif status.job_state == "C":
+ # "keep_completed" is enabled in PBS, so try to check exit status
+ try:
+ assert int( status.exit_status ) == 0
+ log.debug("(%s/%s) PBS job has completed successfully" % ( galaxy_job_id, job_id ) )
+ except AssertionError:
+ pbs_job_state.fail_message = 'Job cannot be completed due to a cluster error. Please retry or'
+ log.error( '(%s/%s) PBS job failed: %s' % ( galaxy_job_id, job_id, JOB_EXIT_STATUS.get( int( status.exit_status ), 'Unknown error: %s' % status.exit_status ) ) )
+ self.work_queue.put( ( 'fail', pbs_job_state ) )
+ continue
+ except AttributeError:
+ # No exit_status, can't verify proper completion so we just have to assume success.
+ log.debug("(%s/%s) PBS job has completed" % ( galaxy_job_id, job_id ) )
+ self.work_queue.put( ( 'finish', pbs_job_state ) )
+ continue
+ pbs_job_state.old_state = status.job_state
+ new_watched.append( pbs_job_state )
# Replace the watch list with the updated version
self.watched = new_watched
@@ -411,9 +446,10 @@
log.debug("connection to PBS server %s for state check failed" % pbs_server_name )
failures.append( pbs_server_name )
continue
- stat_attrl = pbs.new_attrl(2)
+ stat_attrl = pbs.new_attrl(3)
stat_attrl[0].name = pbs.ATTR_state
stat_attrl[1].name = pbs.ATTR_used
+ stat_attrl[2].name = pbs.ATTR_exitstat
jobs = pbs.pbs_statjob( c, None, stat_attrl, None )
pbs.pbs_disconnect( c )
statuses.update( self.convert_statjob_to_bunches( jobs ) )
@@ -480,7 +516,8 @@
"""
Seperated out so we can use the worker threads for it.
"""
- self.stop_job( self.sa_session.query( self.app.model.Job ).get( pbs_job_state.job_wrapper.job_id ) )
+ if pbs_job_state.stop_job:
+ self.stop_job( self.sa_session.query( self.app.model.Job ).get( pbs_job_state.job_wrapper.job_id ) )
pbs_job_state.job_wrapper.fail( pbs_job_state.fail_message )
self.cleanup( ( pbs_job_state.ofile, pbs_job_state.efile, pbs_job_state.job_file ) )
1
0
20 May '10
details: http://www.bx.psu.edu/hg/galaxy/rev/b5391bd3e9c7
changeset: 3784:b5391bd3e9c7
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Fri May 14 10:15:48 2010 -0400
description:
Add GFF filtering tool. Tool filters GFF file based on an attribute value.
diffstat:
test-data/gff_filtering_in1.gff | 200 +++++++++++++++++++++++++++++++++++++++
test-data/gff_filtering_out1.gff | 46 ++++++++
tool_conf.xml.sample | 13 +-
tools/ngs_rna/gff_filtering.py | 137 ++++++++++++++++++++++++++
tools/ngs_rna/gff_filtering.xml | 58 +++++++++++
5 files changed, 449 insertions(+), 5 deletions(-)
diffs (481 lines):
diff -r e972d3f8413e -r b5391bd3e9c7 test-data/gff_filtering_in1.gff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/gff_filtering_in1.gff Fri May 14 10:15:48 2010 -0400
@@ -0,0 +1,200 @@
+chr1 Cufflinks exon 21199802 21199861 1000 + . gene_id "CUFF.1383"; transcript_id "CUFF.1383.1"; exon_number "1"; FPKM "5.0037092300"; frac "1.000000"; conf_lo "0.000000"; conf_hi "15.011128"; cov "0.284211";
+chr1 Cufflinks transcript 55716264 55716295 1000 . . gene_id "CUFF.5021"; transcript_id "CUFF.5021.1"; FPKM "29.7095235531"; frac "1.000000"; conf_lo "0.000000"; conf_hi "71.725135"; cov "1.687500";
+chr1 Cufflinks transcript 74904128 74904154 1000 . . gene_id "CUFF.7563"; transcript_id "CUFF.7563.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr1 Cufflinks exon 134487086 134487123 1000 . . gene_id "CUFF.11837"; transcript_id "CUFF.11837.1"; exon_number "1"; FPKM "25.0185461500"; frac "1.000000"; conf_lo "0.000000"; conf_hi "60.400113"; cov "1.421053";
+chr1 Cufflinks exon 136200923 136200959 1000 . . gene_id "CUFF.12099"; transcript_id "CUFF.12099.1"; exon_number "1"; FPKM "38.5420846095"; frac "1.000000"; conf_lo "0.000000"; conf_hi "83.046650"; cov "2.189189";
+chr1 Cufflinks transcript 138116837 138116866 1000 . . gene_id "CUFF.12557"; transcript_id "CUFF.12557.1"; FPKM "31.6901584567"; frac "1.000000"; conf_lo "0.000000"; conf_hi "76.506810"; cov "1.800000";
+chr1 Cufflinks exon 152240694 152240779 1000 . . gene_id "CUFF.13107"; transcript_id "CUFF.13107.1"; exon_number "1"; FPKM "16.5820596576"; frac "1.000000"; conf_lo "0.000000"; conf_hi "35.729373"; cov "0.941860";
+chr1 Cufflinks exon 157633998 157634024 1000 . . gene_id "CUFF.13967"; transcript_id "CUFF.13967.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr1 Cufflinks exon 167704819 167704854 1000 . . gene_id "CUFF.15347"; transcript_id "CUFF.15347.1"; exon_number "1"; FPKM "26.4084653806"; frac "1.000000"; conf_lo "0.000000"; conf_hi "63.755675"; cov "1.500000";
+chr1 Cufflinks transcript 184245403 184245429 1000 . . gene_id "CUFF.17679"; transcript_id "CUFF.17679.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr10 Cufflinks exon 12731734 12731826 1000 . . gene_id "CUFF.19287"; transcript_id "CUFF.19287.1"; exon_number "1"; FPKM "10.2226317602"; frac "1.000000"; conf_lo "0.000000"; conf_hi "24.679616"; cov "0.580645";
+chr10 Cufflinks transcript 42305464 42305515 1000 . . gene_id "CUFF.21709"; transcript_id "CUFF.21709.1"; FPKM "18.2827837250"; frac "1.000000"; conf_lo "0.000000"; conf_hi "44.138544"; cov "1.038462";
+chr10 Cufflinks exon 52431636 52431662 1000 . . gene_id "CUFF.22495"; transcript_id "CUFF.22495.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr10 Cufflinks transcript 62044837 62045189 1000 . . gene_id "CUFF.23531"; transcript_id "CUFF.23531.1"; FPKM "19.5178121606"; frac "1.000000"; conf_lo "9.264456"; conf_hi "29.771168"; cov "1.108611";
+chr10 Cufflinks transcript 75372919 75373002 1000 . . gene_id "CUFF.24985"; transcript_id "CUFF.24985.1"; FPKM "124.4970510798"; frac "1.000000"; conf_lo "71.411330"; conf_hi "177.582772"; cov "7.071429";
+chr10 Cufflinks transcript 80362428 80363292 1000 - . gene_id "CUFF.26065"; transcript_id "CUFF.26065.1"; FPKM "43.6170921216"; frac "1.000000"; conf_lo "32.260169"; conf_hi "54.974016"; cov "2.477449";
+chr10 Cufflinks exon 87908564 87908597 1000 + . gene_id "CUFF.27209"; transcript_id "CUFF.27209.1"; exon_number "2"; FPKM "11.4913582411"; frac "1.000000"; conf_lo "0.000000"; conf_hi "30.264098"; cov "0.652709";
+chr10 Cufflinks exon 89142681 89142707 1000 . . gene_id "CUFF.27307"; transcript_id "CUFF.27307.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr10 Cufflinks exon 93425781 93425807 1000 . . gene_id "CUFF.28101"; transcript_id "CUFF.28101.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr10 Cufflinks exon 108207916 108207986 1000 . . gene_id "CUFF.29319"; transcript_id "CUFF.29319.1"; exon_number "1"; FPKM "13.3902077986"; frac "1.000000"; conf_lo "0.000000"; conf_hi "32.326821"; cov "0.760563";
+chr10 Cufflinks transcript 117583959 117584039 1000 . . gene_id "CUFF.30522"; transcript_id "CUFF.30522.1"; FPKM "17.6056435870"; frac "1.000000"; conf_lo "0.000000"; conf_hi "37.934890"; cov "1.000000";
+chr11 Cufflinks transcript 3357264 3357347 1000 . . gene_id "CUFF.32520"; transcript_id "CUFF.32520.1"; FPKM "16.9768706018"; frac "1.000000"; conf_lo "0.000000"; conf_hi "36.580072"; cov "0.964286";
+chr11 Cufflinks transcript 5005248 5005351 1000 . . gene_id "CUFF.33024"; transcript_id "CUFF.33024.1"; FPKM "9.1413918625"; frac "1.000000"; conf_lo "0.000000"; conf_hi "22.069272"; cov "0.519231";
+chr11 Cufflinks transcript 7904565 7904642 1000 . . gene_id "CUFF.33508"; transcript_id "CUFF.33508.1"; FPKM "61.6484988869"; frac "1.000000"; conf_lo "22.882428"; conf_hi "100.414569"; cov "3.501633";
+chr11 Cufflinks exon 49932116 49932142 1000 . . gene_id "CUFF.37546"; transcript_id "CUFF.37546.1"; exon_number "1"; FPKM "17.6056435870"; frac "1.000000"; conf_lo "0.000000"; conf_hi "52.816931"; cov "1.000000";
+chr11 Cufflinks transcript 60046420 60046446 1000 . . gene_id "CUFF.39152"; transcript_id "CUFF.39152.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr11 Cufflinks exon 78140156 78140259 1000 . . gene_id "CUFF.43148"; transcript_id "CUFF.43148.1"; exon_number "1"; FPKM "54.8483511750"; frac "1.000000"; conf_lo "23.181641"; conf_hi "86.515061"; cov "3.115385";
+chr11 Cufflinks transcript 79846512 79846547 1000 . . gene_id "CUFF.43570"; transcript_id "CUFF.43570.1"; FPKM "26.4084653806"; frac "1.000000"; conf_lo "0.000000"; conf_hi "63.755675"; cov "1.500000";
+chr11 Cufflinks transcript 85583926 85583952 1000 . . gene_id "CUFF.44478"; transcript_id "CUFF.44478.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr11 Cufflinks transcript 98554214 98554301 1000 . . gene_id "CUFF.46823"; transcript_id "CUFF.46823.1"; FPKM "10.8034631102"; frac "1.000000"; conf_lo "0.000000"; conf_hi "26.081867"; cov "0.613636";
+chr11 Cufflinks transcript 100797512 100797539 1000 . . gene_id "CUFF.47191"; transcript_id "CUFF.47191.1"; FPKM "33.9537412036"; frac "1.000000"; conf_lo "0.000000"; conf_hi "81.971583"; cov "1.928571";
+chr11 Cufflinks exon 105616462 105616737 1000 . . gene_id "CUFF.48385"; transcript_id "CUFF.48385.1"; exon_number "1"; FPKM "18.9452034252"; frac "1.000000"; conf_lo "7.520816"; conf_hi "30.369591"; cov "1.076087";
+chr11 Cufflinks transcript 106985457 106985483 1000 . . gene_id "CUFF.48949"; transcript_id "CUFF.48949.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr11 Cufflinks exon 120257794 120257821 1000 . . gene_id "CUFF.51205"; transcript_id "CUFF.51205.1"; exon_number "1"; FPKM "50.9306118054"; frac "1.000000"; conf_lo "0.000000"; conf_hi "109.740217"; cov "2.892857";
+chr12 Cufflinks transcript 16542765 16542791 1000 . . gene_id "CUFF.52907"; transcript_id "CUFF.52907.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr12 Cufflinks exon 21319385 21319483 1000 . . gene_id "CUFF.53189"; transcript_id "CUFF.53189.1"; exon_number "1"; FPKM "9.6030783202"; frac "1.000000"; conf_lo "0.000000"; conf_hi "23.183882"; cov "0.545455";
+chr12 Cufflinks transcript 30469129 30469156 1000 . . gene_id "CUFF.53733"; transcript_id "CUFF.53733.1"; FPKM "33.9537412036"; frac "1.000000"; conf_lo "0.000000"; conf_hi "81.971583"; cov "1.928571";
+chr12 Cufflinks transcript 30557416 30557442 1000 . . gene_id "CUFF.53863"; transcript_id "CUFF.53863.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr12 Cufflinks exon 30701762 30702509 1000 . . gene_id "CUFF.53897"; transcript_id "CUFF.53897.1"; exon_number "1"; FPKM "48.9333329111"; frac "1.000000"; conf_lo "37.780391"; conf_hi "60.086275"; cov "2.779412";
+chr12 Cufflinks transcript 56895077 56895103 1000 . . gene_id "CUFF.55817"; transcript_id "CUFF.55817.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr12 Cufflinks transcript 81915713 81915797 1000 . . gene_id "CUFF.58203"; transcript_id "CUFF.58203.1"; FPKM "22.3695236165"; frac "1.000000"; conf_lo "0.000000"; conf_hi "44.739047"; cov "1.270588";
+chr12 Cufflinks transcript 118458135 118458232 1000 . . gene_id "CUFF.63640"; transcript_id "CUFF.63640.1"; FPKM "9.7010689153"; frac "1.000000"; conf_lo "0.000000"; conf_hi "23.420452"; cov "0.551020";
+chr13 Cufflinks exon 8262302 8262372 1000 . . gene_id "CUFF.64064"; transcript_id "CUFF.64064.1"; exon_number "1"; FPKM "13.3902077986"; frac "1.000000"; conf_lo "0.000000"; conf_hi "32.326821"; cov "0.760563";
+chr13 Cufflinks transcript 14110852 14110956 1000 . . gene_id "CUFF.64684"; transcript_id "CUFF.64684.1"; FPKM "13.5814964814"; frac "1.000000"; conf_lo "0.000000"; conf_hi "29.264058"; cov "0.771429";
+chr13 Cufflinks transcript 14146567 14146593 1000 . . gene_id "CUFF.64702"; transcript_id "CUFF.64702.1"; FPKM "17.6056435870"; frac "1.000000"; conf_lo "0.000000"; conf_hi "52.816931"; cov "1.000000";
+chr13 Cufflinks transcript 14564150 14564243 1000 . . gene_id "CUFF.64894"; transcript_id "CUFF.64894.1"; FPKM "15.1708205378"; frac "1.000000"; conf_lo "0.000000"; conf_hi "32.688575"; cov "0.861702";
+chr13 Cufflinks transcript 17823162 17823188 1000 . . gene_id "CUFF.65082"; transcript_id "CUFF.65082.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr13 Cufflinks transcript 29757640 29757666 1000 . . gene_id "CUFF.65972"; transcript_id "CUFF.65972.1"; FPKM "70.4225743482"; frac "1.000000"; conf_lo "0.000000"; conf_hi "140.845149"; cov "4.000000";
+chr13 Cufflinks transcript 42402998 42403051 1000 . . gene_id "CUFF.66816"; transcript_id "CUFF.66816.1"; FPKM "26.4084653806"; frac "1.000000"; conf_lo "0.000000"; conf_hi "56.902335"; cov "1.500000";
+chr13 Cufflinks transcript 42853325 42853406 1000 . . gene_id "CUFF.66850"; transcript_id "CUFF.66850.1"; FPKM "17.3909406165"; frac "1.000000"; conf_lo "0.000000"; conf_hi "37.472269"; cov "0.987805";
+chr13 Cufflinks exon 42990504 42990546 1000 . . gene_id "CUFF.66994"; transcript_id "CUFF.66994.1"; exon_number "1"; FPKM "33.1641193151"; frac "1.000000"; conf_lo "0.000000"; conf_hi "71.458746"; cov "1.883721";
+chr13 Cufflinks exon 49159496 49159569 1000 . . gene_id "CUFF.67788"; transcript_id "CUFF.67788.1"; exon_number "1"; FPKM "44.9657653777"; frac "1.000000"; conf_lo "10.974842"; conf_hi "78.956689"; cov "2.554054";
+chr13 Cufflinks exon 49243161 49243187 1000 + . gene_id "CUFF.67842"; transcript_id "CUFF.67842.1"; exon_number "2"; FPKM "17.3246767151"; frac "1.000000"; conf_lo "0.000000"; conf_hi "35.848677"; cov "0.984041";
+chr13 Cufflinks transcript 74671517 74671579 1000 . . gene_id "CUFF.70454"; transcript_id "CUFF.70454.1"; FPKM "18.8363155420"; frac "1.000000"; conf_lo "0.000000"; conf_hi "42.679570"; cov "1.069902";
+chr13 Cufflinks exon 100759121 100759147 1000 . . gene_id "CUFF.72728"; transcript_id "CUFF.72728.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr13 Cufflinks transcript 100200304 100200330 1000 . . gene_id "CUFF.73108"; transcript_id "CUFF.73108.1"; FPKM "123.2395051093"; frac "1.000000"; conf_lo "30.079196"; conf_hi "216.399814"; cov "7.000000";
+chr13 Cufflinks exon 107766857 107766915 1000 . . gene_id "CUFF.73428"; transcript_id "CUFF.73428.1"; exon_number "1"; FPKM "16.1136398932"; frac "1.000000"; conf_lo "0.000000"; conf_hi "38.901768"; cov "0.915254";
+chr13 Cufflinks transcript 115623552 115623640 1000 . . gene_id "CUFF.74362"; transcript_id "CUFF.74362.1"; FPKM "21.3641517686"; frac "1.000000"; conf_lo "0.000000"; conf_hi "42.728304"; cov "1.213483";
+chr14 Cufflinks transcript 31651249 31651275 1000 . . gene_id "CUFF.77182"; transcript_id "CUFF.77182.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr14 Cufflinks transcript 31949103 31949152 1000 . . gene_id "CUFF.77316"; transcript_id "CUFF.77316.1"; FPKM "85.5634278330"; frac "1.000000"; conf_lo "28.521143"; conf_hi "142.605713"; cov "4.860000";
+chr14 Cufflinks transcript 32190589 32190685 1000 . . gene_id "CUFF.77438"; transcript_id "CUFF.77438.1"; FPKM "14.7016199026"; frac "1.000000"; conf_lo "0.000000"; conf_hi "31.677588"; cov "0.835052";
+chr14 Cufflinks exon 55013239 55013265 1000 . . gene_id "CUFF.79372"; transcript_id "CUFF.79372.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr14 Cufflinks exon 55250464 55250514 1000 . . gene_id "CUFF.79616"; transcript_id "CUFF.79616.1"; exon_number "1"; FPKM "18.6412696804"; frac "1.000000"; conf_lo "0.000000"; conf_hi "45.004006"; cov "1.058824";
+chr14 Cufflinks exon 67604227 67604668 1000 . . gene_id "CUFF.81446"; transcript_id "CUFF.81446.1"; exon_number "1"; FPKM "123.6776546104"; frac "1.000000"; conf_lo "100.611653"; conf_hi "146.743656"; cov "7.024887";
+chr14 Cufflinks exon 75165582 75165744 1000 . . gene_id "CUFF.82088"; transcript_id "CUFF.82088.1"; exon_number "1"; FPKM "20.4139057543"; frac "1.000000"; conf_lo "4.982443"; conf_hi "35.845368"; cov "1.159509";
+chr15 Cufflinks transcript 8254591 8254734 1000 . . gene_id "CUFF.85556"; transcript_id "CUFF.85556.1"; FPKM "13.2042326903"; frac "1.000000"; conf_lo "0.000000"; conf_hi "26.408465"; cov "0.750000";
+chr15 Cufflinks transcript 34371407 34371433 1000 . . gene_id "CUFF.87246"; transcript_id "CUFF.87246.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr15 Cufflinks exon 65980225 65980255 1000 + . gene_id "CUFF.89502"; transcript_id "CUFF.89502.1"; exon_number "2"; FPKM "14.1193775302"; frac "1.000000"; conf_lo "0.000000"; conf_hi "30.423030"; cov "0.801980";
+chr15 Cufflinks transcript 85895971 85896018 1000 . . gene_id "CUFF.92834"; transcript_id "CUFF.92834.1"; FPKM "19.8063490354"; frac "1.000000"; conf_lo "0.000000"; conf_hi "47.816756"; cov "1.125000";
+chr15 Cufflinks exon 90828279 90828371 1000 . . gene_id "CUFF.93426"; transcript_id "CUFF.93426.1"; exon_number "1"; FPKM "15.3339476403"; frac "1.000000"; conf_lo "0.000000"; conf_hi "33.040065"; cov "0.870968";
+chr15 Cufflinks exon 99013431 99013472 1000 . . gene_id "CUFF.94604"; transcript_id "CUFF.94604.1"; exon_number "1"; FPKM "22.6358274691"; frac "1.000000"; conf_lo "0.000000"; conf_hi "54.647722"; cov "1.285714";
+chr15 Cufflinks transcript 102336976 102337075 1000 . . gene_id "CUFF.95298"; transcript_id "CUFF.95298.1"; FPKM "9.5070475370"; frac "1.000000"; conf_lo "0.000000"; conf_hi "22.952043"; cov "0.540000";
+chr16 Cufflinks transcript 10417989 10425202 1000 - . gene_id "CUFF.97232"; transcript_id "CUFF.97232.1"; FPKM "21.1642179587"; frac "1.000000"; conf_lo "0.000000"; conf_hi "44.805591"; cov "1.202127";
+chr16 Cufflinks transcript 40788986 40789084 1000 . . gene_id "CUFF.101774"; transcript_id "CUFF.101774.1"; FPKM "9.6030783202"; frac "1.000000"; conf_lo "0.000000"; conf_hi "23.183882"; cov "0.545455";
+chr16 Cufflinks transcript 57154027 57154067 1000 . . gene_id "CUFF.103364"; transcript_id "CUFF.103364.1"; FPKM "162.3154457537"; frac "1.000000"; conf_lo "75.554191"; conf_hi "249.076701"; cov "9.219512";
+chr16 Cufflinks exon 74862302 74862560 1000 . . gene_id "CUFF.105450"; transcript_id "CUFF.105450.1"; exon_number "1"; FPKM "11.0120241741"; frac "1.000000"; conf_lo "2.020744"; conf_hi "20.003304"; cov "0.625483";
+chr16 Cufflinks exon 91023578 91023669 1000 . . gene_id "CUFF.106912"; transcript_id "CUFF.106912.1"; exon_number "1"; FPKM "10.3337473228"; frac "1.000000"; conf_lo "0.000000"; conf_hi "24.947873"; cov "0.586957";
+chr16 Cufflinks transcript 98168779 98168914 1000 . . gene_id "CUFF.107834"; transcript_id "CUFF.107834.1"; FPKM "24.4666664555"; frac "1.000000"; conf_lo "5.971605"; conf_hi "42.961728"; cov "1.389706";
+chr17 Cufflinks exon 8483212 8483268 1000 . . gene_id "CUFF.108498"; transcript_id "CUFF.108498.1"; exon_number "1"; FPKM "50.0370923000"; frac "1.000000"; conf_lo "9.181978"; conf_hi "90.892207"; cov "2.842105";
+chr17 Cufflinks transcript 17478023 17478102 1000 . . gene_id "CUFF.109264"; transcript_id "CUFF.109264.1"; FPKM "23.7676188425"; frac "1.000000"; conf_lo "0.000000"; conf_hi "47.535238"; cov "1.350000";
+chr17 Cufflinks exon 24611086 24611151 1000 . . gene_id "CUFF.110088"; transcript_id "CUFF.110088.1"; exon_number "1"; FPKM "21.6069262205"; frac "1.000000"; conf_lo "0.000000"; conf_hi "46.556456"; cov "1.227273";
+chr17 Cufflinks exon 30355791 30355913 1000 . . gene_id "CUFF.111759"; transcript_id "CUFF.111759.1"; exon_number "1"; FPKM "19.3232673516"; frac "1.000000"; conf_lo "2.040012"; conf_hi "36.606523"; cov "1.097561";
+chr17 Cufflinks exon 31608702 31608787 1000 . . gene_id "CUFF.111943"; transcript_id "CUFF.111943.1"; exon_number "1"; FPKM "16.5820596576"; frac "1.000000"; conf_lo "0.000000"; conf_hi "35.729373"; cov "0.941860";
+chr17 Cufflinks transcript 32414547 32414573 1000 . . gene_id "CUFF.112117"; transcript_id "CUFF.112117.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr17 Cufflinks transcript 33245409 33245463 1000 . . gene_id "CUFF.112363"; transcript_id "CUFF.112363.1"; FPKM "17.2855409764"; frac "1.000000"; conf_lo "0.000000"; conf_hi "41.730987"; cov "0.981818";
+chr17 Cufflinks transcript 56750339 56750374 1000 . . gene_id "CUFF.115617"; transcript_id "CUFF.115617.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "105.633862"; cov "3.000000";
+chr17 Cufflinks transcript 57144800 57144939 1000 . . gene_id "CUFF.115679"; transcript_id "CUFF.115679.1"; FPKM "13.5814964814"; frac "1.000000"; conf_lo "0.000000"; conf_hi "27.162993"; cov "0.771429";
+chr17 Cufflinks exon 71694628 71694708 1000 . . gene_id "CUFF.117117"; transcript_id "CUFF.117117.1"; exon_number "1"; FPKM "23.4741914494"; frac "1.000000"; conf_lo "0.000000"; conf_hi "46.948383"; cov "1.333333";
+chr17 Cufflinks transcript 71698227 71698263 1000 . . gene_id "CUFF.117119"; transcript_id "CUFF.117119.1"; FPKM "25.6947230730"; frac "1.000000"; conf_lo "0.000000"; conf_hi "62.032549"; cov "1.459459";
+chr17 Cufflinks exon 87862079 87862105 1000 . . gene_id "CUFF.118851"; transcript_id "CUFF.118851.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr18 Cufflinks transcript 39571718 39571880 1000 . . gene_id "CUFF.123569"; transcript_id "CUFF.123569.1"; FPKM "20.4139057543"; frac "1.000000"; conf_lo "4.982443"; conf_hi "35.845368"; cov "1.159509";
+chr18 Cufflinks exon 46452826 46452864 1000 . . gene_id "CUFF.124197"; transcript_id "CUFF.124197.1"; exon_number "1"; FPKM "48.7540899334"; frac "1.000000"; conf_lo "0.000000"; conf_hi "97.508180"; cov "2.769231";
+chr18 Cufflinks exon 50151390 50151416 1000 . . gene_id "CUFF.124439"; transcript_id "CUFF.124439.1"; exon_number "1"; FPKM "17.5638395629"; frac "1.000000"; conf_lo "0.000000"; conf_hi "52.733298"; cov "0.997626";
+chr18 Cufflinks exon 65106749 65106787 1000 . . gene_id "CUFF.125675"; transcript_id "CUFF.125675.1"; exon_number "1"; FPKM "48.7540899334"; frac "1.000000"; conf_lo "0.000000"; conf_hi "97.508180"; cov "2.769231";
+chr18 Cufflinks transcript 65202282 65202424 1000 . . gene_id "CUFF.125729"; transcript_id "CUFF.125729.1"; FPKM "13.2965699818"; frac "1.000000"; conf_lo "0.000000"; conf_hi "26.593140"; cov "0.755245";
+chr18 Cufflinks exon 69735254 69735280 1000 . . gene_id "CUFF.126371"; transcript_id "CUFF.126371.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr19 Cufflinks transcript 5370466 5370492 1000 . . gene_id "CUFF.129319"; transcript_id "CUFF.129319.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr19 Cufflinks exon 17633088 17633203 1000 . . gene_id "CUFF.131333"; transcript_id "CUFF.131333.1"; exon_number "1"; FPKM "20.4893265884"; frac "1.000000"; conf_lo "2.163116"; conf_hi "38.815537"; cov "1.163793";
+chr19 Cufflinks transcript 41997624 41997859 1000 . . gene_id "CUFF.133569"; transcript_id "CUFF.133569.1"; FPKM "28.1988698132"; frac "1.000000"; conf_lo "13.125940"; conf_hi "43.271800"; cov "1.601695";
+chr19 Cufflinks transcript 53311236 53311262 1000 . . gene_id "CUFF.134885"; transcript_id "CUFF.134885.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr19 Cufflinks exon 56516515 56516684 1000 . . gene_id "CUFF.135203"; transcript_id "CUFF.135203.1"; exon_number "1"; FPKM "33.5542854247"; frac "1.000000"; conf_lo "14.181710"; conf_hi "52.926861"; cov "1.905882";
+chr2 Cufflinks transcript 3246910 3246936 1000 . . gene_id "CUFF.136019"; transcript_id "CUFF.136019.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr2 Cufflinks transcript 4543774 4543977 1000 . . gene_id "CUFF.136435"; transcript_id "CUFF.136435.1"; FPKM "37.2825393608"; frac "1.000000"; conf_lo "18.641270"; conf_hi "55.923809"; cov "2.117647";
+chr2 Cufflinks exon 7271328 7271354 1000 . . gene_id "CUFF.137407"; transcript_id "CUFF.137407.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr2 Cufflinks exon 11509202 11509287 1000 . . gene_id "CUFF.137559"; transcript_id "CUFF.137559.1"; exon_number "1"; FPKM "22.1094128768"; frac "1.000000"; conf_lo "0.000000"; conf_hi "44.218826"; cov "1.255814";
+chr2 Cufflinks transcript 30200331 30200938 1000 . . gene_id "CUFF.140289"; transcript_id "CUFF.140289.1"; FPKM "100.0741846001"; frac "1.000000"; conf_lo "82.383401"; conf_hi "117.764968"; cov "5.684211";
+chr2 Cufflinks transcript 49559781 49559842 1000 . . gene_id "CUFF.143035"; transcript_id "CUFF.143035.1"; FPKM "15.3339476403"; frac "1.000000"; conf_lo "0.000000"; conf_hi "37.019424"; cov "0.870968";
+chr2 Cufflinks transcript 78736720 78736746 1000 . . gene_id "CUFF.146383"; transcript_id "CUFF.146383.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr2 Cufflinks transcript 97470595 97470703 1000 . . gene_id "CUFF.148117"; transcript_id "CUFF.148117.1"; FPKM "17.4441239211"; frac "1.000000"; conf_lo "0.000000"; conf_hi "34.888248"; cov "0.990826";
+chr2 Cufflinks transcript 106644220 106644341 1000 . . gene_id "CUFF.148977"; transcript_id "CUFF.148977.1"; FPKM "27.2743167045"; frac "1.000000"; conf_lo "6.656871"; conf_hi "47.891762"; cov "1.549180";
+chr2 Cufflinks transcript 118960859 118961004 1000 . . gene_id "CUFF.150015"; transcript_id "CUFF.150015.1"; FPKM "9.7675145928"; frac "1.000000"; conf_lo "0.000000"; conf_hi "21.046069"; cov "0.554795";
+chr2 Cufflinks exon 125388931 125389219 1000 . . gene_id "CUFF.151331"; transcript_id "CUFF.151331.1"; exon_number "1"; FPKM "23.0274507817"; frac "1.000000"; conf_lo "10.718761"; conf_hi "35.336141"; cov "1.307958";
+chr2 Cufflinks transcript 145141669 145141755 1000 . . gene_id "CUFF.153993"; transcript_id "CUFF.153993.1"; FPKM "10.9276408471"; frac "1.000000"; conf_lo "0.000000"; conf_hi "26.381659"; cov "0.620690";
+chr2 Cufflinks exon 178035510 178035611 1000 . . gene_id "CUFF.158329"; transcript_id "CUFF.158329.1"; exon_number "1"; FPKM "9.3206348402"; frac "1.000000"; conf_lo "0.000000"; conf_hi "22.502003"; cov "0.529412";
+chr2 Cufflinks transcript 181047445 181047471 1000 . . gene_id "CUFF.158989"; transcript_id "CUFF.158989.1"; FPKM "17.6056435870"; frac "1.000000"; conf_lo "0.000000"; conf_hi "52.816931"; cov "1.000000";
+chr3 Cufflinks transcript 55664118 55664197 1000 . . gene_id "CUFF.163141"; transcript_id "CUFF.163141.1"; FPKM "11.8838094213"; frac "1.000000"; conf_lo "0.000000"; conf_hi "28.690054"; cov "0.675000";
+chr3 Cufflinks exon 66896354 66896433 1000 . . gene_id "CUFF.163935"; transcript_id "CUFF.163935.1"; exon_number "1"; FPKM "5.9419047106"; frac "1.000000"; conf_lo "0.000000"; conf_hi "17.825714"; cov "0.337500";
+chr3 Cufflinks transcript 80648745 80648771 1000 . . gene_id "CUFF.164995"; transcript_id "CUFF.164995.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr3 Cufflinks exon 107424385 107424452 1000 . . gene_id "CUFF.169311"; transcript_id "CUFF.169311.1"; exon_number "1"; FPKM "13.9809522603"; frac "1.000000"; conf_lo "0.000000"; conf_hi "33.753005"; cov "0.794118";
+chr3 Cufflinks transcript 130936639 130936898 1000 . . gene_id "CUFF.171349"; transcript_id "CUFF.171349.1"; FPKM "20.1110620975"; frac "1.000000"; conf_lo "7.983635"; conf_hi "32.238489"; cov "1.142308";
+chr3 Cufflinks exon 136592671 136592771 1000 . . gene_id "CUFF.171861"; transcript_id "CUFF.171861.1"; exon_number "1"; FPKM "32.9452142371"; frac "1.000000"; conf_lo "8.040973"; conf_hi "57.849455"; cov "1.871287";
+chr3 Cufflinks transcript 152641383 152641451 1000 . . gene_id "CUFF.172987"; transcript_id "CUFF.172987.1"; FPKM "20.6674946457"; frac "1.000000"; conf_lo "0.000000"; conf_hi "44.532262"; cov "1.173913";
+chr3 Cufflinks transcript 152861374 152861508 1000 . . gene_id "CUFF.173007"; transcript_id "CUFF.173007.1"; FPKM "24.6479010219"; frac "1.000000"; conf_lo "6.015839"; conf_hi "43.279963"; cov "1.400000";
+chr3 Cufflinks transcript 157698536 157698562 1000 . . gene_id "CUFF.173579"; transcript_id "CUFF.173579.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr4 Cufflinks exon 13715310 13715630 1000 . . gene_id "CUFF.174817"; transcript_id "CUFF.174817.1"; exon_number "1"; FPKM "19.2510308382"; frac "1.000000"; conf_lo "8.572480"; conf_hi "29.929581"; cov "1.093458";
+chr4 Cufflinks transcript 62063768 62063821 1000 . . gene_id "CUFF.179577"; transcript_id "CUFF.179577.1"; FPKM "26.3875633685"; frac "1.000000"; conf_lo "0.000000"; conf_hi "56.869362"; cov "1.498813";
+chr4 Cufflinks transcript 77180436 77180462 1000 . . gene_id "CUFF.181019"; transcript_id "CUFF.181019.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr4 Cufflinks transcript 102112070 102112096 1000 . . gene_id "CUFF.183381"; transcript_id "CUFF.183381.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr4 Cufflinks exon 117233771 117233830 1000 + . gene_id "CUFF.185373"; transcript_id "CUFF.185373.1"; exon_number "1"; FPKM "4.8015391601"; frac "1.000000"; conf_lo "0.000000"; conf_hi "14.404617"; cov "0.272727";
+chr4 Cufflinks exon 135563059 135563110 1000 . . gene_id "CUFF.189099"; transcript_id "CUFF.189099.1"; exon_number "1"; FPKM "18.2827837250"; frac "1.000000"; conf_lo "0.000000"; conf_hi "44.138544"; cov "1.038462";
+chr4 Cufflinks exon 147515029 147515097 1000 . . gene_id "CUFF.190627"; transcript_id "CUFF.190627.1"; exon_number "1"; FPKM "34.4458244094"; frac "1.000000"; conf_lo "3.636542"; conf_hi "65.255106"; cov "1.956522";
+chr5 Cufflinks exon 3949522 3949685 1000 . . gene_id "CUFF.192485"; transcript_id "CUFF.192485.1"; exon_number "1"; FPKM "23.1879208220"; frac "1.000000"; conf_lo "6.791585"; conf_hi "39.584257"; cov "1.317073";
+chr5 Cufflinks exon 22635516 22635542 1000 . . gene_id "CUFF.194445"; transcript_id "CUFF.194445.1"; exon_number "1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr5 Cufflinks exon 34172212 34172238 1000 . . gene_id "CUFF.196463"; transcript_id "CUFF.196463.1"; exon_number "1"; FPKM "17.6056435870"; frac "1.000000"; conf_lo "0.000000"; conf_hi "52.816931"; cov "1.000000";
+chr5 Cufflinks transcript 35362816 35362905 1000 . . gene_id "CUFF.196905"; transcript_id "CUFF.196905.1"; FPKM "10.5633861522"; frac "1.000000"; conf_lo "0.000000"; conf_hi "25.502270"; cov "0.600000";
+chr5 Cufflinks transcript 37083127 37083166 1000 . . gene_id "CUFF.197139"; transcript_id "CUFF.197139.1"; FPKM "23.7676188425"; frac "1.000000"; conf_lo "0.000000"; conf_hi "57.380108"; cov "1.350000";
+chr5 Cufflinks transcript 68089694 68089831 1000 . . gene_id "CUFF.199409"; transcript_id "CUFF.199409.1"; FPKM "17.2229122047"; frac "1.000000"; conf_lo "1.818271"; conf_hi "32.627553"; cov "0.978261";
+chr5 Cufflinks exon 98615179 98615254 1000 . . gene_id "CUFF.201693"; transcript_id "CUFF.201693.1"; exon_number "1"; FPKM "12.5092730750"; frac "1.000000"; conf_lo "0.000000"; conf_hi "30.200057"; cov "0.710526";
+chr5 Cufflinks exon 105915104 105915181 1000 . . gene_id "CUFF.202385"; transcript_id "CUFF.202385.1"; exon_number "1"; FPKM "12.1885224833"; frac "1.000000"; conf_lo "0.000000"; conf_hi "29.425696"; cov "0.692308";
+chr5 Cufflinks transcript 116136788 116136814 1000 . . gene_id "CUFF.204349"; transcript_id "CUFF.204349.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr5 Cufflinks exon 122819526 122819619 1000 . . gene_id "CUFF.205487"; transcript_id "CUFF.205487.1"; exon_number "1"; FPKM "25.2486782797"; frac "1.000000"; conf_lo "2.649470"; conf_hi "47.847887"; cov "1.434124";
+chr5 Cufflinks exon 132055557 132055583 1000 . . gene_id "CUFF.207163"; transcript_id "CUFF.207163.1"; exon_number "1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr5 Cufflinks transcript 145619548 145619710 1000 . . gene_id "CUFF.209965"; transcript_id "CUFF.209965.1"; FPKM "40.8278115086"; frac "1.000000"; conf_lo "19.004428"; conf_hi "62.651195"; cov "2.319018";
+chr6 Cufflinks exon 48466822 48466848 1000 . . gene_id "CUFF.215907"; transcript_id "CUFF.215907.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr6 Cufflinks exon 63803818 63803844 1000 . . gene_id "CUFF.217337"; transcript_id "CUFF.217337.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr6 Cufflinks transcript 77393088 77393138 1000 . . gene_id "CUFF.218387"; transcript_id "CUFF.218387.1"; FPKM "18.6412696804"; frac "1.000000"; conf_lo "0.000000"; conf_hi "45.004006"; cov "1.058824";
+chr6 Cufflinks transcript 82379452 82379478 1000 . . gene_id "CUFF.218947"; transcript_id "CUFF.218947.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr6 Cufflinks exon 83928984 83929105 1000 . . gene_id "CUFF.219317"; transcript_id "CUFF.219317.1"; exon_number "1"; FPKM "46.7559714935"; frac "1.000000"; conf_lo "19.761399"; conf_hi "73.750544"; cov "2.655738";
+chr6 Cufflinks exon 103658447 103658521 1000 . . gene_id "CUFF.221849"; transcript_id "CUFF.221849.1"; exon_number "1"; FPKM "19.0140950740"; frac "1.000000"; conf_lo "0.000000"; conf_hi "40.969681"; cov "1.080000";
+chr6 Cufflinks exon 113781332 113781358 1000 . . gene_id "CUFF.222775"; transcript_id "CUFF.222775.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr6 Cufflinks exon 118857949 118858148 1000 . . gene_id "CUFF.223543"; transcript_id "CUFF.223543.1"; exon_number "1"; FPKM "19.0140950740"; frac "1.000000"; conf_lo "5.569100"; conf_hi "32.459091"; cov "1.080000";
+chr6 Cufflinks transcript 124996314 124996340 1000 . . gene_id "CUFF.224545"; transcript_id "CUFF.224545.1"; FPKM "17.6056435870"; frac "1.000000"; conf_lo "0.000000"; conf_hi "52.816931"; cov "1.000000";
+chr6 Cufflinks transcript 127077329 127077364 1000 . . gene_id "CUFF.225409"; transcript_id "CUFF.225409.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "105.633862"; cov "3.000000";
+chr6 Cufflinks exon 136038245 136038304 1000 . . gene_id "CUFF.225521"; transcript_id "CUFF.225521.1"; exon_number "1"; FPKM "23.7676188425"; frac "1.000000"; conf_lo "0.000000"; conf_hi "51.212101"; cov "1.350000";
+chr7 Cufflinks exon 13845893 13845919 1000 . . gene_id "CUFF.227869"; transcript_id "CUFF.227869.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr7 Cufflinks exon 56060938 56061023 1000 . . gene_id "CUFF.232920"; transcript_id "CUFF.232920.1"; exon_number "1"; FPKM "11.0547064384"; frac "1.000000"; conf_lo "0.000000"; conf_hi "26.688422"; cov "0.627907";
+chr7 Cufflinks exon 71484947 71484992 1000 . . gene_id "CUFF.234766"; transcript_id "CUFF.234766.1"; exon_number "1"; FPKM "20.6674946457"; frac "1.000000"; conf_lo "0.000000"; conf_hi "49.895746"; cov "1.173913";
+chr7 Cufflinks transcript 71784522 71784548 1000 . . gene_id "CUFF.234810"; transcript_id "CUFF.234810.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr7 Cufflinks exon 72605044 72605070 1000 . . gene_id "CUFF.234948"; transcript_id "CUFF.234948.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr7 Cufflinks transcript 85554210 85554343 1000 . . gene_id "CUFF.235778"; transcript_id "CUFF.235778.1"; FPKM "17.7370289869"; frac "1.000000"; conf_lo "1.872548"; conf_hi "33.601510"; cov "1.007463";
+chr7 Cufflinks transcript 98723325 98723416 1000 . . gene_id "CUFF.237594"; transcript_id "CUFF.237594.1"; FPKM "10.3337473228"; frac "1.000000"; conf_lo "0.000000"; conf_hi "24.947873"; cov "0.586957";
+chr7 Cufflinks exon 104055491 104055589 1000 . . gene_id "CUFF.238474"; transcript_id "CUFF.238474.1"; exon_number "1"; FPKM "28.8092349606"; frac "1.000000"; conf_lo "5.286593"; conf_hi "52.331877"; cov "1.636364";
+chr7 Cufflinks exon 107603711 107603748 1000 . . gene_id "CUFF.239180"; transcript_id "CUFF.239180.1"; exon_number "1"; FPKM "25.0185461500"; frac "1.000000"; conf_lo "0.000000"; conf_hi "60.400113"; cov "1.421053";
+chr7 Cufflinks exon 133792511 133792572 1000 . . gene_id "CUFF.242136"; transcript_id "CUFF.242136.1"; exon_number "1"; FPKM "15.3339476403"; frac "1.000000"; conf_lo "0.000000"; conf_hi "37.019424"; cov "0.870968";
+chr8 Cufflinks exon 9970398 9970545 1000 . . gene_id "CUFF.245320"; transcript_id "CUFF.245320.1"; exon_number "1"; FPKM "22.4828826889"; frac "1.000000"; conf_lo "5.487421"; conf_hi "39.478345"; cov "1.277027";
+chr8 Cufflinks transcript 10425062 10425088 1000 . . gene_id "CUFF.245408"; transcript_id "CUFF.245408.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr8 Cufflinks transcript 13018897 13018981 1000 . . gene_id "CUFF.245840"; transcript_id "CUFF.245840.1"; FPKM "16.7771427124"; frac "1.000000"; conf_lo "0.000000"; conf_hi "36.149718"; cov "0.952941";
+chr8 Cufflinks transcript 14745123 14745149 1000 . . gene_id "CUFF.246146"; transcript_id "CUFF.246146.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr8 Cufflinks exon 29820895 29820930 1000 . . gene_id "CUFF.247504"; transcript_id "CUFF.247504.1"; exon_number "1"; FPKM "26.4084653806"; frac "1.000000"; conf_lo "0.000000"; conf_hi "63.755675"; cov "1.500000";
+chr8 Cufflinks transcript 36676568 36676665 1000 . . gene_id "CUFF.248480"; transcript_id "CUFF.248480.1"; FPKM "9.7010689153"; frac "1.000000"; conf_lo "0.000000"; conf_hi "23.420452"; cov "0.551020";
+chr8 Cufflinks transcript 50146533 50146584 1000 . . gene_id "CUFF.249617"; transcript_id "CUFF.249617.1"; FPKM "27.4241755875"; frac "1.000000"; conf_lo "0.000000"; conf_hi "59.090886"; cov "1.557692";
+chr8 Cufflinks exon 51010775 51010850 1000 . . gene_id "CUFF.249695"; transcript_id "CUFF.249695.1"; exon_number "1"; FPKM "18.7639096125"; frac "1.000000"; conf_lo "0.000000"; conf_hi "40.430606"; cov "1.065789";
+chr8 Cufflinks exon 63391023 63391095 1000 . . gene_id "CUFF.250329"; transcript_id "CUFF.250329.1"; exon_number "1"; FPKM "13.0233527904"; frac "1.000000"; conf_lo "0.000000"; conf_hi "31.441155"; cov "0.739726";
+chr8 Cufflinks transcript 73858591 73858706 1000 . . gene_id "CUFF.251697"; transcript_id "CUFF.251697.1"; FPKM "12.2935959530"; frac "1.000000"; conf_lo "0.000000"; conf_hi "26.489018"; cov "0.698276";
+chr8 Cufflinks transcript 75514699 75514725 1000 . . gene_id "CUFF.252263"; transcript_id "CUFF.252263.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr8 Cufflinks exon 86101515 86101548 1000 . . gene_id "CUFF.252891"; transcript_id "CUFF.252891.1"; exon_number "1"; FPKM "27.9619045206"; frac "1.000000"; conf_lo "0.000000"; conf_hi "67.506009"; cov "1.588235";
+chr8 Cufflinks transcript 93627215 93627241 1000 . . gene_id "CUFF.254225"; transcript_id "CUFF.254225.1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr8 Cufflinks exon 108148187 108148357 1000 . . gene_id "CUFF.255477"; transcript_id "CUFF.255477.1"; exon_number "1"; FPKM "11.1193538445"; frac "1.000000"; conf_lo "0.000000"; conf_hi "22.238708"; cov "0.631579";
+chr8 Cufflinks exon 108190587 108190664 1000 . . gene_id "CUFF.255507"; transcript_id "CUFF.255507.1"; exon_number "1"; FPKM "12.1885224833"; frac "1.000000"; conf_lo "0.000000"; conf_hi "29.425696"; cov "0.692308";
+chr8 Cufflinks exon 120931685 120931769 1000 . . gene_id "CUFF.257375"; transcript_id "CUFF.257375.1"; exon_number "1"; FPKM "16.7771427124"; frac "1.000000"; conf_lo "0.000000"; conf_hi "36.149718"; cov "0.952941";
+chr9 Cufflinks transcript 20449846 20449932 1000 . . gene_id "CUFF.260747"; transcript_id "CUFF.260747.1"; FPKM "234.9313045507"; frac "1.000000"; conf_lo "163.275950"; conf_hi "306.586659"; cov "13.344091";
+chr9 Cufflinks exon 25083606 25083643 1000 . . gene_id "CUFF.261551"; transcript_id "CUFF.261551.1"; exon_number "1"; FPKM "25.0185461500"; frac "1.000000"; conf_lo "0.000000"; conf_hi "60.400113"; cov "1.421053";
+chr9 Cufflinks transcript 27906894 27906964 1000 . . gene_id "CUFF.261925"; transcript_id "CUFF.261925.1"; FPKM "26.7804155972"; frac "1.000000"; conf_lo "0.000000"; conf_hi "53.560831"; cov "1.521127";
+chr9 Cufflinks transcript 34418034 34418065 1000 . . gene_id "CUFF.262975"; transcript_id "CUFF.262975.1"; FPKM "29.7095235531"; frac "1.000000"; conf_lo "0.000000"; conf_hi "71.725135"; cov "1.687500";
+chr9 Cufflinks exon 34710789 34710815 1000 . . gene_id "CUFF.263065"; transcript_id "CUFF.263065.1"; exon_number "1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr9 Cufflinks transcript 40823051 40823090 1000 . . gene_id "CUFF.263747"; transcript_id "CUFF.263747.1"; FPKM "23.7676188425"; frac "1.000000"; conf_lo "0.000000"; conf_hi "57.380108"; cov "1.350000";
+chr9 Cufflinks exon 59236547 59236671 1000 . . gene_id "CUFF.267045"; transcript_id "CUFF.267045.1"; exon_number "1"; FPKM "12.1905895442"; frac "1.000000"; conf_lo "0.000000"; conf_hi "25.808020"; cov "0.692425";
+chr9 Cufflinks transcript 66418162 66418188 1000 . . gene_id "CUFF.268423"; transcript_id "CUFF.268423.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr9 Cufflinks transcript 95913236 95913262 1000 . . gene_id "CUFF.270957"; transcript_id "CUFF.270957.1"; FPKM "35.2112871741"; frac "1.000000"; conf_lo "0.000000"; conf_hi "85.007567"; cov "2.000000";
+chr9 Cufflinks exon 103101949 103102030 1000 . . gene_id "CUFF.271979"; transcript_id "CUFF.271979.1"; exon_number "1"; FPKM "11.5939604110"; frac "1.000000"; conf_lo "0.000000"; conf_hi "27.990296"; cov "0.658537";
+chr9 Cufflinks transcript 105579135 105579173 1000 . . gene_id "CUFF.272347"; transcript_id "CUFF.272347.1"; FPKM "24.3770449667"; frac "1.000000"; conf_lo "0.000000"; conf_hi "58.851393"; cov "1.384615";
+chr9 Cufflinks exon 107445870 107445930 1000 . . gene_id "CUFF.272761"; transcript_id "CUFF.272761.1"; exon_number "1"; FPKM "38.9633095779"; frac "1.000000"; conf_lo "4.113466"; conf_hi "73.813153"; cov "2.213115";
+chr9 Cufflinks exon 113779194 113779220 1000 . . gene_id "CUFF.274445"; transcript_id "CUFF.274445.1"; exon_number "1"; FPKM "52.8169307611"; frac "1.000000"; conf_lo "0.000000"; conf_hi "113.804669"; cov "3.000000";
+chr9 Cufflinks transcript 120860476 120860606 1000 . . gene_id "CUFF.275115"; transcript_id "CUFF.275115.1"; FPKM "25.4005086867"; frac "1.000000"; conf_lo "6.199529"; conf_hi "44.601488"; cov "1.442748";
+chrX Cufflinks exon 10274057 10274087 1000 . . gene_id "CUFF.276147"; transcript_id "CUFF.276147.1"; exon_number "1"; FPKM "99.5432248142"; frac "1.000000"; conf_lo "21.405127"; conf_hi "177.681323"; cov "5.654052";
+chrX Cufflinks transcript 39881431 39881678 1000 . . gene_id "CUFF.277419"; transcript_id "CUFF.277419.1"; FPKM "42.1683560109"; frac "1.000000"; conf_lo "24.187709"; conf_hi "60.149003"; cov "2.395161";
+chrX Cufflinks transcript 90114645 90131913 1000 - . gene_id "CUFF.279771"; transcript_id "CUFF.279771.1"; FPKM "6.8891648819"; frac "1.000000"; conf_lo "0.000000"; conf_hi "20.667495"; cov "0.391304";
+chrX Cufflinks transcript 148249672 148249713 1000 . . gene_id "CUFF.282847"; transcript_id "CUFF.282847.1"; FPKM "56.5895686726"; frac "1.000000"; conf_lo "5.974320"; conf_hi "107.204818"; cov "3.214286";
+chrX Cufflinks transcript 148481505 148482455 1000 + . gene_id "CUFF.282965"; transcript_id "CUFF.282965.1"; FPKM "40.1706233958"; frac "1.000000"; conf_lo "16.978103"; conf_hi "63.363144"; cov "2.281690";
+chrX Cufflinks transcript 158986411 158986471 1000 . . gene_id "CUFF.283831"; transcript_id "CUFF.283831.1"; FPKM "15.5853238312"; frac "1.000000"; conf_lo "0.000000"; conf_hi "37.626300"; cov "0.885246";
\ No newline at end of file
diff -r e972d3f8413e -r b5391bd3e9c7 test-data/gff_filtering_out1.gff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/gff_filtering_out1.gff Fri May 14 10:15:48 2010 -0400
@@ -0,0 +1,46 @@
+chr10 Cufflinks transcript 62044837 62045189 1000 . . gene_id "CUFF.23531"; transcript_id "CUFF.23531.1"; FPKM "19.5178121606"; frac "1.000000"; conf_lo "9.264456"; conf_hi "29.771168"; cov "1.108611";
+chr10 Cufflinks transcript 75372919 75373002 1000 . . gene_id "CUFF.24985"; transcript_id "CUFF.24985.1"; FPKM "124.4970510798"; frac "1.000000"; conf_lo "71.411330"; conf_hi "177.582772"; cov "7.071429";
+chr10 Cufflinks transcript 80362428 80363292 1000 - . gene_id "CUFF.26065"; transcript_id "CUFF.26065.1"; FPKM "43.6170921216"; frac "1.000000"; conf_lo "32.260169"; conf_hi "54.974016"; cov "2.477449";
+chr11 Cufflinks transcript 7904565 7904642 1000 . . gene_id "CUFF.33508"; transcript_id "CUFF.33508.1"; FPKM "61.6484988869"; frac "1.000000"; conf_lo "22.882428"; conf_hi "100.414569"; cov "3.501633";
+chr11 Cufflinks exon 78140156 78140259 1000 . . gene_id "CUFF.43148"; transcript_id "CUFF.43148.1"; exon_number "1"; FPKM "54.8483511750"; frac "1.000000"; conf_lo "23.181641"; conf_hi "86.515061"; cov "3.115385";
+chr11 Cufflinks exon 105616462 105616737 1000 . . gene_id "CUFF.48385"; transcript_id "CUFF.48385.1"; exon_number "1"; FPKM "18.9452034252"; frac "1.000000"; conf_lo "7.520816"; conf_hi "30.369591"; cov "1.076087";
+chr12 Cufflinks exon 30701762 30702509 1000 . . gene_id "CUFF.53897"; transcript_id "CUFF.53897.1"; exon_number "1"; FPKM "48.9333329111"; frac "1.000000"; conf_lo "37.780391"; conf_hi "60.086275"; cov "2.779412";
+chr13 Cufflinks exon 49159496 49159569 1000 . . gene_id "CUFF.67788"; transcript_id "CUFF.67788.1"; exon_number "1"; FPKM "44.9657653777"; frac "1.000000"; conf_lo "10.974842"; conf_hi "78.956689"; cov "2.554054";
+chr13 Cufflinks transcript 100200304 100200330 1000 . . gene_id "CUFF.73108"; transcript_id "CUFF.73108.1"; FPKM "123.2395051093"; frac "1.000000"; conf_lo "30.079196"; conf_hi "216.399814"; cov "7.000000";
+chr14 Cufflinks transcript 31949103 31949152 1000 . . gene_id "CUFF.77316"; transcript_id "CUFF.77316.1"; FPKM "85.5634278330"; frac "1.000000"; conf_lo "28.521143"; conf_hi "142.605713"; cov "4.860000";
+chr14 Cufflinks exon 67604227 67604668 1000 . . gene_id "CUFF.81446"; transcript_id "CUFF.81446.1"; exon_number "1"; FPKM "123.6776546104"; frac "1.000000"; conf_lo "100.611653"; conf_hi "146.743656"; cov "7.024887";
+chr14 Cufflinks exon 75165582 75165744 1000 . . gene_id "CUFF.82088"; transcript_id "CUFF.82088.1"; exon_number "1"; FPKM "20.4139057543"; frac "1.000000"; conf_lo "4.982443"; conf_hi "35.845368"; cov "1.159509";
+chr16 Cufflinks transcript 57154027 57154067 1000 . . gene_id "CUFF.103364"; transcript_id "CUFF.103364.1"; FPKM "162.3154457537"; frac "1.000000"; conf_lo "75.554191"; conf_hi "249.076701"; cov "9.219512";
+chr16 Cufflinks exon 74862302 74862560 1000 . . gene_id "CUFF.105450"; transcript_id "CUFF.105450.1"; exon_number "1"; FPKM "11.0120241741"; frac "1.000000"; conf_lo "2.020744"; conf_hi "20.003304"; cov "0.625483";
+chr16 Cufflinks transcript 98168779 98168914 1000 . . gene_id "CUFF.107834"; transcript_id "CUFF.107834.1"; FPKM "24.4666664555"; frac "1.000000"; conf_lo "5.971605"; conf_hi "42.961728"; cov "1.389706";
+chr17 Cufflinks exon 8483212 8483268 1000 . . gene_id "CUFF.108498"; transcript_id "CUFF.108498.1"; exon_number "1"; FPKM "50.0370923000"; frac "1.000000"; conf_lo "9.181978"; conf_hi "90.892207"; cov "2.842105";
+chr17 Cufflinks exon 30355791 30355913 1000 . . gene_id "CUFF.111759"; transcript_id "CUFF.111759.1"; exon_number "1"; FPKM "19.3232673516"; frac "1.000000"; conf_lo "2.040012"; conf_hi "36.606523"; cov "1.097561";
+chr18 Cufflinks transcript 39571718 39571880 1000 . . gene_id "CUFF.123569"; transcript_id "CUFF.123569.1"; FPKM "20.4139057543"; frac "1.000000"; conf_lo "4.982443"; conf_hi "35.845368"; cov "1.159509";
+chr19 Cufflinks exon 17633088 17633203 1000 . . gene_id "CUFF.131333"; transcript_id "CUFF.131333.1"; exon_number "1"; FPKM "20.4893265884"; frac "1.000000"; conf_lo "2.163116"; conf_hi "38.815537"; cov "1.163793";
+chr19 Cufflinks transcript 41997624 41997859 1000 . . gene_id "CUFF.133569"; transcript_id "CUFF.133569.1"; FPKM "28.1988698132"; frac "1.000000"; conf_lo "13.125940"; conf_hi "43.271800"; cov "1.601695";
+chr19 Cufflinks exon 56516515 56516684 1000 . . gene_id "CUFF.135203"; transcript_id "CUFF.135203.1"; exon_number "1"; FPKM "33.5542854247"; frac "1.000000"; conf_lo "14.181710"; conf_hi "52.926861"; cov "1.905882";
+chr2 Cufflinks transcript 4543774 4543977 1000 . . gene_id "CUFF.136435"; transcript_id "CUFF.136435.1"; FPKM "37.2825393608"; frac "1.000000"; conf_lo "18.641270"; conf_hi "55.923809"; cov "2.117647";
+chr2 Cufflinks transcript 30200331 30200938 1000 . . gene_id "CUFF.140289"; transcript_id "CUFF.140289.1"; FPKM "100.0741846001"; frac "1.000000"; conf_lo "82.383401"; conf_hi "117.764968"; cov "5.684211";
+chr2 Cufflinks transcript 106644220 106644341 1000 . . gene_id "CUFF.148977"; transcript_id "CUFF.148977.1"; FPKM "27.2743167045"; frac "1.000000"; conf_lo "6.656871"; conf_hi "47.891762"; cov "1.549180";
+chr2 Cufflinks exon 125388931 125389219 1000 . . gene_id "CUFF.151331"; transcript_id "CUFF.151331.1"; exon_number "1"; FPKM "23.0274507817"; frac "1.000000"; conf_lo "10.718761"; conf_hi "35.336141"; cov "1.307958";
+chr3 Cufflinks transcript 130936639 130936898 1000 . . gene_id "CUFF.171349"; transcript_id "CUFF.171349.1"; FPKM "20.1110620975"; frac "1.000000"; conf_lo "7.983635"; conf_hi "32.238489"; cov "1.142308";
+chr3 Cufflinks exon 136592671 136592771 1000 . . gene_id "CUFF.171861"; transcript_id "CUFF.171861.1"; exon_number "1"; FPKM "32.9452142371"; frac "1.000000"; conf_lo "8.040973"; conf_hi "57.849455"; cov "1.871287";
+chr3 Cufflinks transcript 152861374 152861508 1000 . . gene_id "CUFF.173007"; transcript_id "CUFF.173007.1"; FPKM "24.6479010219"; frac "1.000000"; conf_lo "6.015839"; conf_hi "43.279963"; cov "1.400000";
+chr4 Cufflinks exon 13715310 13715630 1000 . . gene_id "CUFF.174817"; transcript_id "CUFF.174817.1"; exon_number "1"; FPKM "19.2510308382"; frac "1.000000"; conf_lo "8.572480"; conf_hi "29.929581"; cov "1.093458";
+chr4 Cufflinks exon 147515029 147515097 1000 . . gene_id "CUFF.190627"; transcript_id "CUFF.190627.1"; exon_number "1"; FPKM "34.4458244094"; frac "1.000000"; conf_lo "3.636542"; conf_hi "65.255106"; cov "1.956522";
+chr5 Cufflinks exon 3949522 3949685 1000 . . gene_id "CUFF.192485"; transcript_id "CUFF.192485.1"; exon_number "1"; FPKM "23.1879208220"; frac "1.000000"; conf_lo "6.791585"; conf_hi "39.584257"; cov "1.317073";
+chr5 Cufflinks transcript 68089694 68089831 1000 . . gene_id "CUFF.199409"; transcript_id "CUFF.199409.1"; FPKM "17.2229122047"; frac "1.000000"; conf_lo "1.818271"; conf_hi "32.627553"; cov "0.978261";
+chr5 Cufflinks exon 122819526 122819619 1000 . . gene_id "CUFF.205487"; transcript_id "CUFF.205487.1"; exon_number "1"; FPKM "25.2486782797"; frac "1.000000"; conf_lo "2.649470"; conf_hi "47.847887"; cov "1.434124";
+chr5 Cufflinks transcript 145619548 145619710 1000 . . gene_id "CUFF.209965"; transcript_id "CUFF.209965.1"; FPKM "40.8278115086"; frac "1.000000"; conf_lo "19.004428"; conf_hi "62.651195"; cov "2.319018";
+chr6 Cufflinks exon 83928984 83929105 1000 . . gene_id "CUFF.219317"; transcript_id "CUFF.219317.1"; exon_number "1"; FPKM "46.7559714935"; frac "1.000000"; conf_lo "19.761399"; conf_hi "73.750544"; cov "2.655738";
+chr6 Cufflinks exon 118857949 118858148 1000 . . gene_id "CUFF.223543"; transcript_id "CUFF.223543.1"; exon_number "1"; FPKM "19.0140950740"; frac "1.000000"; conf_lo "5.569100"; conf_hi "32.459091"; cov "1.080000";
+chr7 Cufflinks transcript 85554210 85554343 1000 . . gene_id "CUFF.235778"; transcript_id "CUFF.235778.1"; FPKM "17.7370289869"; frac "1.000000"; conf_lo "1.872548"; conf_hi "33.601510"; cov "1.007463";
+chr7 Cufflinks exon 104055491 104055589 1000 . . gene_id "CUFF.238474"; transcript_id "CUFF.238474.1"; exon_number "1"; FPKM "28.8092349606"; frac "1.000000"; conf_lo "5.286593"; conf_hi "52.331877"; cov "1.636364";
+chr8 Cufflinks exon 9970398 9970545 1000 . . gene_id "CUFF.245320"; transcript_id "CUFF.245320.1"; exon_number "1"; FPKM "22.4828826889"; frac "1.000000"; conf_lo "5.487421"; conf_hi "39.478345"; cov "1.277027";
+chr9 Cufflinks transcript 20449846 20449932 1000 . . gene_id "CUFF.260747"; transcript_id "CUFF.260747.1"; FPKM "234.9313045507"; frac "1.000000"; conf_lo "163.275950"; conf_hi "306.586659"; cov "13.344091";
+chr9 Cufflinks exon 107445870 107445930 1000 . . gene_id "CUFF.272761"; transcript_id "CUFF.272761.1"; exon_number "1"; FPKM "38.9633095779"; frac "1.000000"; conf_lo "4.113466"; conf_hi "73.813153"; cov "2.213115";
+chr9 Cufflinks transcript 120860476 120860606 1000 . . gene_id "CUFF.275115"; transcript_id "CUFF.275115.1"; FPKM "25.4005086867"; frac "1.000000"; conf_lo "6.199529"; conf_hi "44.601488"; cov "1.442748";
+chrX Cufflinks exon 10274057 10274087 1000 . . gene_id "CUFF.276147"; transcript_id "CUFF.276147.1"; exon_number "1"; FPKM "99.5432248142"; frac "1.000000"; conf_lo "21.405127"; conf_hi "177.681323"; cov "5.654052";
+chrX Cufflinks transcript 39881431 39881678 1000 . . gene_id "CUFF.277419"; transcript_id "CUFF.277419.1"; FPKM "42.1683560109"; frac "1.000000"; conf_lo "24.187709"; conf_hi "60.149003"; cov "2.395161";
+chrX Cufflinks transcript 148249672 148249713 1000 . . gene_id "CUFF.282847"; transcript_id "CUFF.282847.1"; FPKM "56.5895686726"; frac "1.000000"; conf_lo "5.974320"; conf_hi "107.204818"; cov "3.214286";
+chrX Cufflinks transcript 148481505 148482455 1000 + . gene_id "CUFF.282965"; transcript_id "CUFF.282965.1"; FPKM "40.1706233958"; frac "1.000000"; conf_lo "16.978103"; conf_hi "63.363144"; cov "2.281690";
diff -r e972d3f8413e -r b5391bd3e9c7 tool_conf.xml.sample
--- a/tool_conf.xml.sample Thu May 13 15:35:41 2010 -0400
+++ b/tool_conf.xml.sample Fri May 14 10:15:48 2010 -0400
@@ -237,11 +237,14 @@
<tool file="sr_mapping/PerM.xml" />
</section>
<section name="NGS: Expression Analysis" id="ngs-rna-tools">
- <tool file="ngs_rna/tophat_wrapper.xml" />
- <tool file="ngs_rna/cufflinks_wrapper.xml" />
- <tool file="ngs_rna/cuffcompare_wrapper.xml" />
- <tool file="ngs_rna/cuffdiff_wrapper.xml" />
- <tool file="ngs_rna/filter_transcripts_via_tracking.xml" />
+ <label text="RNA-seq" id="rna_seq" />
+ <tool file="ngs_rna/tophat_wrapper.xml" />
+ <tool file="ngs_rna/cufflinks_wrapper.xml" />
+ <tool file="ngs_rna/cuffcompare_wrapper.xml" />
+ <tool file="ngs_rna/cuffdiff_wrapper.xml" />
+ <label text="Filtering" id="filtering" />
+ <tool file="ngs_rna/filter_transcripts_via_tracking.xml" />
+ <tool file="ngs_rna/gff_filtering.xml" />
</section>
<section name="NGS: SAM Tools" id="samtools">
<tool file="samtools/sam_bitwise_flag_filter.xml" />
diff -r e972d3f8413e -r b5391bd3e9c7 tools/ngs_rna/gff_filtering.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ngs_rna/gff_filtering.py Fri May 14 10:15:48 2010 -0400
@@ -0,0 +1,137 @@
+#!/usr/bin/env python
+# This tool takes a gff file as input and creates filters on attributes based on certain properties.
+# The tool will skip over invalid lines within the file, informing the user about the number of lines skipped.
+# TODO: much of this code is copied from the Filter1 tool (filtering.py in this directory). The commonalities should be
+# abstracted and leveraged in each filtering tool.
+
+from __future__ import division
+import sys, re, os.path
+
+# Older py compatibility
+try:
+ set()
+except:
+ from sets import Set as set
+
+assert sys.version_info[:2] >= ( 2, 4 )
+
+def get_operands( filter_condition ):
+ # Note that the order of all_operators is important
+ items_to_strip = ['+', '-', '**', '*', '//', '/', '%', '<<', '>>', '&', '|', '^', '~', '<=', '<', '>=', '>', '==', '!=', '<>', ' and ', ' or ', ' not ', ' is ', ' is not ', ' in ', ' not in ']
+ for item in items_to_strip:
+ if filter_condition.find( item ) >= 0:
+ filter_condition = filter_condition.replace( item, ' ' )
+ operands = set( filter_condition.split( ' ' ) )
+ return operands
+
+def stop_err( msg ):
+ sys.stderr.write( msg )
+ sys.exit()
+
+in_fname = sys.argv[1]
+out_fname = sys.argv[2]
+attribute_type = sys.argv[3]
+attribute_name = sys.argv[4]
+cond_text = sys.argv[5]
+
+# Unescape if input has been escaped
+mapped_str = {
+ '__lt__': '<',
+ '__le__': '<=',
+ '__eq__': '==',
+ '__ne__': '!=',
+ '__gt__': '>',
+ '__ge__': '>=',
+ '__sq__': '\'',
+ '__dq__': '"',
+}
+for key, value in mapped_str.items():
+ cond_text = cond_text.replace( key, value )
+
+# Add attribute name to condition text.
+cond_text = attribute_name + cond_text
+
+# Attempt to determine if the condition includes executable stuff and, if so, exit
+secured = dir()
+operands = get_operands(cond_text)
+for operand in operands:
+ try:
+ check = int( operand )
+ except:
+ if operand in secured:
+ stop_err( "Illegal value '%s' in condition '%s'" % ( operand, cond_text ) )
+
+# Set up assignment.
+assignment = "%s = attributes[ '%s' ]" % ( attribute_name, attribute_name )
+
+# Set up type casting based on attribute type.
+type_cast = "%s = %s(%s)" % ( attribute_name, attribute_type, attribute_name)
+
+# Stats
+skipped_lines = 0
+first_invalid_line = 0
+invalid_line = None
+lines_kept = 0
+total_lines = 0
+out = open( out_fname, 'wt' )
+
+# Read and filter input file, skipping invalid lines
+code = '''
+for i, line in enumerate( file( in_fname ) ):
+ total_lines += 1
+ line = line.rstrip( '\\r\\n' )
+ if not line or line.startswith( '#' ):
+ skipped_lines += 1
+ if not invalid_line:
+ first_invalid_line = i + 1
+ invalid_line = line
+ continue
+ try:
+ # GTF format: chrom source, name, chromStart, chromEnd, score, strand, frame, attributes.
+ # Attributes format: name1 "value1" ; name2 "value2" ; ...
+ elems = line.split( '\t' )
+ attributes_list = elems[8].split(";")
+ attributes = {}
+ for name_value_pair in attributes_list:
+ pair = name_value_pair.strip().split(" ")
+ if pair == '':
+ continue
+ name = pair[0].strip()
+ if name == '':
+ continue
+ # Need to strip double quote from values
+ value = pair[1].strip(" \\"")
+ attributes[name] = value
+ %s
+ %s
+ if %s:
+ lines_kept += 1
+ print >> out, line
+ except:
+ skipped_lines += 1
+ if not invalid_line:
+ first_invalid_line = i + 1
+ invalid_line = line
+''' % ( assignment, type_cast, cond_text )
+
+valid_filter = True
+try:
+ exec code
+except Exception, e:
+ out.close()
+ if str( e ).startswith( 'invalid syntax' ):
+ valid_filter = False
+ stop_err( 'Filter condition "%s" likely invalid. See tool tips, syntax and examples.' % cond_text )
+ else:
+ stop_err( str( e ) )
+
+if valid_filter:
+ out.close()
+ valid_lines = total_lines - skipped_lines
+ print 'Filtering with %s, ' % ( cond_text )
+ if valid_lines > 0:
+ print 'kept %4.2f%% of %d lines.' % ( 100.0*lines_kept/valid_lines, total_lines )
+ else:
+ print 'Possible invalid filter condition "%s" or non-existent column referenced. See tool tips, syntax and examples.' % cond_text
+ if skipped_lines > 0:
+ print 'Skipped %d invalid lines starting at line #%d: "%s"' % ( skipped_lines, first_invalid_line, invalid_line )
diff -r e972d3f8413e -r b5391bd3e9c7 tools/ngs_rna/gff_filtering.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ngs_rna/gff_filtering.xml Fri May 14 10:15:48 2010 -0400
@@ -0,0 +1,58 @@
+<tool id="gff_filtering" name="Filter GFF" version="0.1">
+ <description>file on any attribute using simple expressions</description>
+ <command interpreter="python">
+ gff_filtering.py $input $out_file1 "$attribute_type" "$attribute_name" "$cond"
+ </command>
+ <inputs>
+ <param format="gff" name="input" type="data" label="Filter" help="Query missing? See TIP below."/>
+ <param name="attribute_name" size="40" type="text" label="Attribute name" help="">
+ <validator type="empty_field" message="Enter a valid attribute name."/>
+ </param>
+ <param name="attribute_type" type="select" label="Attribute type">
+ <option value="float">Float</option>
+ <option value="integer">Integer</option>
+ <option value="str">String</option>
+ </param>
+ <param name="cond" size="40" type="text" value=">0" label="With following condition" help="Double equal signs, ==, must be used as shown above. To filter for an arbitrary string, use the Select tool.">
+ <validator type="empty_field" message="Enter a valid filtering condition, see syntax and examples below."/>
+ </param>
+ </inputs>
+ <outputs>
+ <data format="input" name="out_file1" metadata_source="input"/>
+ </outputs>
+ <tests>
+ <test>
+ <param name="input" value="gff_filtering_in1.gff"/>
+ <param name="attribute_name" value="conf_lo"/>
+ <param name="attribute_type" value="float"/>
+ <param name="cond" value=">0"/>
+ <output name="out_file1" file="gff_filtering_out1.gff"/>
+ </test>
+ </tests>
+
+ <help>
+
+.. class:: warningmark
+
+Double equal signs, ==, must be used as *"equal to"* (e.g., **c1 == 'chr22'**)
+
+.. class:: infomark
+
+**TIP:** Attempting to apply a filtering condition may throw exceptions if the data type (e.g., string, integer) in every line of the attribute being filtered is not appropriate for the condition (e.g., attempting certain numerical calculations on strings). If an exception is thrown when applying the condition to a line, that line is skipped as invalid for the filter condition. The number of invalid skipped lines is documented in the resulting history item as a "Condition/data issue".
+
+.. class:: infomark
+
+**TIP:** If your data is not TAB delimited, use *Text Manipulation->Convert*
+
+-----
+
+**Syntax**
+
+The filter tool allows you to restrict the dataset using simple conditional statements.
+
+- Make sure that multi-character operators contain no white space ( e.g., **<=** is valid while **< =** is not valid )
+- When using 'equal-to' operator **double equal sign '==' must be used** ( e.g., **attribute_name=='chr1'** )
+- Non-numerical values must be included in single or double quotes ( e.g., **attribute_name=='XX22'** )
+
+</help>
+</tool>
1
0