galaxy-commits
  Threads by month 
                
            - ----- 2025 -----
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2024 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2023 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2022 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2021 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2020 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2019 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2018 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2017 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2016 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2015 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2014 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2013 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2012 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2011 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2010 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 
- 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