Commit 47190424 authored by aknecht2's avatar aknecht2
Browse files

Added bed & peak file saving functionality to the database class. Updated...

Added bed & peak file saving functionality to the database class.  Updated testing script to use unittests.  Updated experiment_from_samples script to only print out unique values.  Added list of current tools to conf.
parent 716ec5b1
......@@ -22,6 +22,18 @@ system_commands = [
"awk"
]
# Current align tools
align_tools = [
"bwa",
"bowtie2"
]
# Current peak callign tools
peak_tools = [
"spp",
"macs2"
]
# File extensions
file_extensions = {
"genome_index": ["fa", "fna"],
......
from pymongo import MongoClient
import pymongo.errors
import gridfs
import sys
import traceback
import os
from pprint import pprint
......@@ -19,10 +21,131 @@ class MongoDB(object):
self.gfs = gridfs.GridFS(self.db)
return
def load_bed(self, collection, result_id, bed_file, attributes={}):
def delete_result(self, result_id):
# Make sure result exists
cursor = self.db.results.find({
"_id": result_id
})
if cursor.count() == 1:
result = cursor.next()
self.gfs.delete(result["gridfs_id"])
self.db[result["result_type"]].delete_many({"result_id": result["_id"]})
self.db.results.delete_one({"_id": result["_id"]})
else:
print "result_id %s doesn't exist." % (result_id,)
return
def create_result(self, output_file, control_ids, experiment_ids, result_type, additional_data = {}, gfs_attributes = {}):
# Make sure output_file exists
if os.path.isfile(output_file):
# Make sure that all control_ids & experiment_ids are valid
valid_controls = [self.is_valid_experiment(cid) for cid in control_ids]
valid_experiments = [self.is_valid_experiment(eid) for eid in experiment_ids]
if all(valid_controls) and all(valid_experiments):
# First, we load the output file into gfs
with open(output_file, "r") as rh:
# Calling put returns the gfs id
gridfs_id = self.gfs.put(rh, filename=os.path.basename(output_file), **gfs_attributes)
# Now, we create the actual result entry by combining all necessary info
result_entry = {
"gridfs_id": gridfs_id,
"control_ids": control_ids,
"experiment_ids": experiment_ids,
"result_type": result_type
}
# Add additional attributes into the result_entry
result_entry.update(additional_data)
# Insert the entry into the database, and return the id
result = self.db.results.insert_one(result_entry)
return (True, "Result created successfully.", result.inserted_id)
else:
msg = "Not all input ids are valid. The following are invalid:"
for id_list, valid_list in zip([control_ids, experiment_ids], [valid_controls, valid_experiments]):
for i, valid in enumerate(valid_list):
if not valid:
msg += id_list[i] + ", "
else:
msg = "Specified output_file %s does not exist." % (output_file,)
return (False, msg, None)
def save_bed(self, bed_file, control_ids, experiment_ids, additional_data = {}):
# Create result_entry for bed_file
valid, msg, result_id = self.create_result(bed_file, control_ids, experiment_ids, "bed", additional_data, gfs_attributes = {"file_type": "bed"})
if valid:
# Now we load the actual bed data into the bed collection.
# Data is in a six column format
# chr, start, end, name, score, strand
# Load data using a list comprehension over lines,
# then insert with insert_many()
with open(bed_file, "r") as rh:
bed_data = [
{
"result_id": result_id,
"chr": line_info[0],
"start": line_info[1],
"end": line_info[2],
"name": line_info[3],
"score": line_info[4],
"strand": line_info[5]
}
for line in rh.readlines()
for line_info in (line.split(),)
]
try:
self.db.bed.insert_many(bed_data)
return (True, "Bed file successfully inserted.", result_id)
except pymongo.errors.OperationFailure as e:
valid = False
msg = "Error inserting bed_file %s: %s" % (bed_file, e)
return (valid, msg, None)
def save_peak(self, peak_file, control_ids, experiment_ids, additional_data = {}):
# Create result_entry for peak_file
valid, msg, result_id = self.create_result(peak_file, control_ids, experiment_ids, "peak", additional_data, gfs_attributes = {"file_type": os.path.splitext(peak_file)[1][1:]})
if valid:
# Now we load the actual peak data into the collection
# Data is in a 10 column format
# chr, start, end, name, score, strand, signal_value, p_value, q_value, summit
with open(peak_file, "r") as rh:
peak_data = [
{
"result_id": result_id,
"chr": line_info[0],
"start": line_info[1],
"end": line_info[2],
"name": line_info[3],
"score": line_info[4],
"strand": line_info[5],
"signal_value": line_info[6],
"p_value": line_info[7],
"q_value": line_info[8],
"summit": line_info[9]
}
for line in rh.readlines()
for line_info in (line.split(),)
]
try:
self.db.peak.insert_many(peak_data)
return (True, "Peak file successfully inserted.", result_id)
except pymongo.errors.OperationFailure as e:
valid = False
msg = "Error inserting peak_file %s: %s" % (peak_file, e)
return (valid, msg, None)
def is_valid_experiment(self, experiment_id):
try:
cursor = self.db.experiments.find({
"target": {"$exists": True},
"revoked_files.0": {"$exists": False},
"@id": "/experiments/%s/" % (experiment_id,)
})
if cursor.count() == 1:
return True
except pymongo.errors.OperationFailure as e:
print "Error with experiment_id %s: %s" % (experiment_id, e)
return False
def check_valid_samples(self):
cursor = self.db.experiments.aggregate([
{
......@@ -74,95 +197,82 @@ class MongoDB(object):
valid = True
msg = ""
data = {}
# First, check to make sure the target experiment exists.
check = self.db.experiments.find({
"@id": "/experiments/%s/" % (experiment_id,)
})
if check.count() == 1:
# Next, we check that all metadata is defined
check2 = self.db.experiments.find({
# First, check to make sure the target experiment is valid
if self.is_valid_experiment(experiment_id):
# Next, we check that there is a least 1 possible control
check3 = self.db.experiments.find({
"target": {"$exists": True},
"revoked_files.0": {"$exists": False},
"assembly.0": {"$exists": True},
"assembly.1": {"$exists": False},
"possible_controls.0": {"$exists": True},
"@id": "/experiments/%s/" % (experiment_id,)
})
if check2.count() == 1:
# Next, we check that there is a least 1 possible control
check3 = self.db.experiments.find({
"target": {"$exists": True},
"revoked_files.0": {"$exists": False},
"assembly.0": {"$exists": True},
"assembly.1": {"$exists": False},
"possible_controls.0": {"$exists": True},
"@id": "/experiments/%s/" % (experiment_id,)
})
if check3.count() == 1:
# Complicated aggregtaion pipeline does the following steps:
# 1. Find the experiment that matches the given id
# 2. Join samples into the collection by exp_id
# 3. Iterate through possible_controls
# 4. Join possible_control data into control_exps
# 5. Iterate through control_exps
# 6. Join samples into the control_exps by exp_id
# 7. Re-aggregate all data into arrays
pipeline = [
{
"$match": {
"target": {"$exists": True},
"revoked_files.0": {"$exists": False},
"assembly.0": {"$exists": True},
"assembly.1": {"$exists": False},
"possible_controls.0": {"$exists": True},
"@id": "/experiments/%s/" % (experiment_id,)
}
},
{
"$lookup": {
"from": "samples",
"localField": "uuid",
"foreignField": "experiment_id",
"as": "samples"
}
},
{
"$unwind": "$possible_controls"
},
{
"$lookup": {
"from": "samples",
"localField": "possible_controls.uuid",
"foreignField": "experiment_id",
"as": "possible_controls.samples"
}
},
{
"$group": {
"_id": "$_id",
"possible_controls": {"$push": "$possible_controls"},
"samples": {"$push": "$samples"}
}
if check3.count() == 1:
# Complicated aggregtaion pipeline does the following steps:
# 1. Find the experiment that matches the given id
# 2. Join samples into the collection by exp_id
# 3. Iterate through possible_controls
# 4. Join possible_control data into control_exps
# 5. Iterate through control_exps
# 6. Join samples into the control_exps by exp_id
# 7. Re-aggregate all data into arrays
pipeline = [
{
"$match": {
"target": {"$exists": True},
"revoked_files.0": {"$exists": False},
"assembly.0": {"$exists": True},
"assembly.1": {"$exists": False},
"possible_controls.0": {"$exists": True},
"@id": "/experiments/%s/" % (experiment_id,)
}
]
cursor = self.db.experiments.aggregate(pipeline)
# We should have only 1 document
document = cursor.next()
control_inputs = [sample for control in document["possible_controls"] for sample in control["samples"] if ("file_type" in sample and sample["file_type"] == "fastq")]
experiment_inputs = [sample for sample in document["samples"][0] if ("file_type" in sample and sample["file_type"] == "fastq")]
if (len(control_inputs) > 0 and len(experiment_inputs) > 0):
msg = "Succesfully retrieved input files for experiment with id '%s'.\n" % (experiment_id,)
data = {
"control": control_inputs,
"experiment": experiment_inputs
},
{
"$lookup": {
"from": "samples",
"localField": "uuid",
"foreignField": "experiment_id",
"as": "samples"
}
else:
valid = False
msg = "Experiment with id '%s' has %s possible control inputs, and %s possible experiment inputs.\n" % (experiment_id, len(control_inputs), len(experiment_inputs))
},
{
"$unwind": "$possible_controls"
},
{
"$lookup": {
"from": "samples",
"localField": "possible_controls.uuid",
"foreignField": "experiment_id",
"as": "possible_controls.samples"
}
},
{
"$group": {
"_id": "$_id",
"possible_controls": {"$push": "$possible_controls"},
"samples": {"$push": "$samples"}
}
}
]
cursor = self.db.experiments.aggregate(pipeline)
# We should have only 1 document
document = cursor.next()
control_inputs = [sample for control in document["possible_controls"] for sample in control["samples"] if ("file_type" in sample and sample["file_type"] == "fastq")]
experiment_inputs = [sample for sample in document["samples"][0] if ("file_type" in sample and sample["file_type"] == "fastq")]
if (len(control_inputs) > 0 and len(experiment_inputs) > 0):
msg = "Succesfully retrieved input files for experiment with id '%s'.\n" % (experiment_id,)
data = {
"control": control_inputs,
"experiment": experiment_inputs
}
else:
valid = False
msg = "Experiment with id '%s' does not have possible_controls.\n" % (experiment_id,)
msg = "Experiment with id '%s' has %s possible control inputs, and %s possible experiment inputs.\n" % (experiment_id, len(control_inputs), len(experiment_inputs))
else:
valid = False
msg = "Experiment with id '%s' does not have all required metadata (target exists and no revoked_files).\n" % (experiment_id,)
msg = "Experiment with id '%s' does not have possible_controls.\n" % (experiment_id,)
else:
valid = False
msg = "Experiment with id '%s' does not exist.\n" % (experiment_id,)
msg = "Experiment with id '%s' is not valid! It may not exist, or it may be missing required metadata.\n" % (experiment_id,)
return (valid, msg, data)
import chipathlon.db
import argparse
parser = argparse.ArgumentParser(description="Download target file.")
parser.add_argument("-u", "--url", dest="url", required=True, help="Target url.")
parser.add_argument("-p", "--path", dest="path", required=True, help="Local path to file.")
parser.add_argument("-t", "--url_type", dest="url_type", default="ftp://", help="Type of url to access.")
parser.add_argument("-r", "--retries", dest="retries", default=3, type=int, help="Number of retries.")
parser.add_argument("-n", "--overwrite", dest="overwrite", default=True, action="store_false", help="Dont' overwrite local file if exists.")
parser.add_argument("-m", "--md5", dest="md5", help="Check md5 value against passed value.")
parser = argparse.ArgumentParser(description="Insert a bed file into the database.")
parser.add_argument("-p", "--password", dest="password", required=True, help="Database user password.")
parser.add_argument("-u", "--username", dest="username", required=True, help="Database user.")
parser.add_argument("-h", "--host", dest="host", required=True, help="Database host.")
parser.add_argument("-f", "--file", dest="file", required=True, help="Path to bed file.")
parser.add_argument("-c", "--controls", dest="control_ids", required=True, nargs="+", help="List of control ids.")
parser.add_argument("-e", "--experiments", dest="experiment_ids", required=True, nargs="+", help="List of experiment/signal ids.")
parser.add_argument("-a", "--additional", dest="additional")
args = parser.parse_args()
CM000663.2 10156 10192 ILLUMINA-EAS45_4:10:21:17425:9246:0:1:1 31 -
CM000663.2 16085 16121 ILLUMINA-EAS45_4:10:65:15288:19407:0:1:1 31 -
CM000663.2 16209 16245 ILLUMINA-EAS45_4:10:71:11512:18151:0:1:1 31 +
CM000663.2 16214 16250 ILLUMINA-EAS45_4:10:69:9718:1469:0:1:1 31 -
CM000663.2 16292 16328 ILLUMINA-EAS45_4:10:16:10396:12291:0:1:1 31 -
CM000663.2 17470 17506 ILLUMINA-EAS45_4:10:107:13943:1438:0:1:1 35 +
CM000663.2 52035 52071 ILLUMINA-EAS45_4:10:111:16911:20203:0:1:1 31 +
CM000663.2 56453 56489 ILLUMINA-EAS45_4:10:29:10212:2358:0:1:1 31 +
CM000663.2 58786 58822 ILLUMINA-EAS45_4:10:120:15723:20738:0:1:1 31 -
CM000663.2 59025 59061 ILLUMINA-EAS45_4:10:61:7767:18212:0:1:1 31 +
CM000663.2 62163 62199 ILLUMINA-EAS45_4:10:81:10371:7594:0:1:1 42 +
CM000663.2 69558 69594 ILLUMINA-EAS45_4:10:10:15951:7741:0:1:1 31 +
CM000663.2 77105 77141 ILLUMINA-EAS45_4:10:16:15838:10961:0:1:1 31 +
CM000663.2 79585 79621 ILLUMINA-EAS45_4:10:31:15325:5400:0:1:1 31 -
CM000663.2 82635 82671 ILLUMINA-EAS45_4:10:117:10450:20899:0:1:1 31 -
CM000663.2 82708 82744 ILLUMINA-EAS45_4:10:37:12603:13930:0:1:1 31 +
CM000663.2 86070 86106 ILLUMINA-EAS45_4:10:75:15948:19373:0:1:1 31 -
CM000663.2 87949 87985 ILLUMINA-EAS45_4:10:86:12777:16822:0:1:1 31 -
CM000663.2 88354 88390 ILLUMINA-EAS45_4:10:40:16842:7075:0:1:1 31 +
CM000663.2 93278 93314 ILLUMINA-EAS45_4:10:102:2128:8520:0:1:1 31 +
CM000663.2 96581 96617 ILLUMINA-EAS45_4:10:11:17897:18562:0:1:1 31 +
CM000663.2 96583 96619 ILLUMINA-EAS45_4:10:64:6470:7060:0:1:1 31 -
CM000663.2 106798 106834 ILLUMINA-EAS45_4:10:54:13448:13431:0:1:1 31 -
CM000663.2 120220 120256 ILLUMINA-EAS45_4:10:42:15212:18079:0:1:1 31 -
CM000663.2 120249 120285 ILLUMINA-EAS45_4:10:44:8552:17683:0:1:1 31 +
CM000663.2 122846 122882 ILLUMINA-EAS45_4:10:9:10228:20532:0:1:1 40 +
CM000663.2 125380 125416 ILLUMINA-EAS45_4:10:37:6089:9670:0:1:1 31 -
CM000663.2 126148 126184 ILLUMINA-EAS45_4:10:3:1970:1708:0:1:1 31 +
CM000663.2 127524 127560 ILLUMINA-EAS45_4:10:70:4160:14245:0:1:1 31 +
CM000663.2 128640 128676 ILLUMINA-EAS45_4:10:34:7239:18333:0:1:1 31 +
CM000663.2 128716 128752 ILLUMINA-EAS45_4:10:117:19323:14404:0:1:1 31 -
CM000663.2 133406 133442 ILLUMINA-EAS45_4:10:50:11699:9351:0:1:1 31 -
CM000663.2 137782 137818 ILLUMINA-EAS45_4:10:57:11060:18224:0:1:1 31 +
CM000663.2 144899 144935 ILLUMINA-EAS45_4:10:114:9239:9270:0:1:1 31 -
CM000663.2 180746 180782 ILLUMINA-EAS45_4:10:104:7020:9868:0:1:1 31 +
CM000663.2 180790 180826 ILLUMINA-EAS45_4:10:42:17029:2428:0:1:1 31 +
CM000663.2 182012 182048 ILLUMINA-EAS45_4:10:65:9106:15166:0:1:1 31 -
CM000663.2 184459 184495 ILLUMINA-EAS45_4:10:88:14748:6331:0:1:1 42 -
CM000663.2 186825 186861 ILLUMINA-EAS45_4:10:94:14095:17782:0:1:1 31 +
CM000663.2 186866 186902 ILLUMINA-EAS45_4:10:19:9482:3268:0:1:1 31 +
CM000663.2 191032 191068 ILLUMINA-EAS45_4:10:110:1476:14010:0:1:1 31 +
CM000663.2 191330 191366 ILLUMINA-EAS45_4:10:8:19815:6561:0:1:1 31 +
CM000663.2 261997 262033 ILLUMINA-EAS45_4:10:114:8651:17849:0:1:1 31 +
CM000663.2 262715 262751 ILLUMINA-EAS45_4:10:110:1291:3125:0:1:1 31 -
CM000663.2 264674 264710 ILLUMINA-EAS45_4:10:4:13875:8818:0:1:1 31 -
CM000663.2 267970 268006 ILLUMINA-EAS45_4:10:50:5101:3057:0:1:1 31 +
CM000663.2 267977 268013 ILLUMINA-EAS45_4:10:34:1506:10692:0:1:1 31 +
CM000663.2 267983 268019 ILLUMINA-EAS45_4:10:45:3903:12330:0:1:1 31 +
CM000663.2 268438 268474 ILLUMINA-EAS45_4:10:7:8311:2869:0:1:1 31 +
CM000663.2 268501 268537 ILLUMINA-EAS45_4:10:100:14883:13903:0:1:1 31 +
CM000663.2 268518 268554 ILLUMINA-EAS45_4:10:76:3270:10518:0:1:1 31 -
CM000663.2 270693 270729 ILLUMINA-EAS45_4:10:65:18005:6231:0:1:1 31 -
CM000663.2 273905 273941 ILLUMINA-EAS45_4:10:79:4360:11889:0:1:1 31 -
CM000663.2 274397 274433 ILLUMINA-EAS45_4:10:43:14007:11437:0:1:1 31 -
CM000663.2 276290 276326 ILLUMINA-EAS45_4:10:59:9478:7683:0:1:1 31 +
CM000663.2 279256 279292 ILLUMINA-EAS45_4:10:19:10551:3406:0:1:1 31 +
CM000663.2 281363 281399 ILLUMINA-EAS45_4:10:22:18865:20154:0:1:0 31 +
CM000663.2 281371 281407 ILLUMINA-EAS45_4:10:77:3406:20771:0:1:1 31 +
CM000663.2 281859 281895 ILLUMINA-EAS45_4:10:35:15202:13583:0:1:1 31 -
CM000663.2 284329 284365 ILLUMINA-EAS45_4:10:116:8491:11510:0:1:1 31 +
CM000663.2 288905 288941 ILLUMINA-EAS45_4:10:63:5047:3717:0:1:1 31 -
CM000663.2 289433 289469 ILLUMINA-EAS45_4:10:24:5928:11680:0:1:1 40 -
CM000663.2 291810 291846 ILLUMINA-EAS45_4:10:79:7725:4321:0:1:1 31 +
CM000663.2 297536 297572 ILLUMINA-EAS45_4:10:59:16132:2005:0:1:1 31 +
CM000663.2 509436 509472 ILLUMINA-EAS45_4:10:54:12910:15282:0:1:1 31 +
CM000663.2 511660 511696 ILLUMINA-EAS45_4:10:5:7558:1706:0:1:1 31 -
CM000663.2 516589 516625 ILLUMINA-EAS45_4:10:77:13748:8619:0:1:1 31 +
CM000663.2 525096 525132 ILLUMINA-EAS45_4:10:109:2411:2534:0:1:1 31 -
CM000663.2 526743 526779 ILLUMINA-EAS45_4:10:105:19554:8986:0:1:1 31 -
CM000663.2 531155 531191 ILLUMINA-EAS45_4:10:11:5889:17692:0:1:1 31 +
CM000663.2 533774 533810 ILLUMINA-EAS45_4:10:80:19344:11717:0:1:1 31 +
CM000663.2 591168 591204 ILLUMINA-EAS45_4:10:114:19794:16457:0:1:1 31 +
CM000663.2 591169 591205 ILLUMINA-EAS45_4:10:119:12527:18471:0:1:1 31 -
CM000663.2 591350 591386 ILLUMINA-EAS45_4:10:109:11715:10684:0:1:1 31 +
CM000663.2 591788 591824 ILLUMINA-EAS45_4:10:88:8653:2536:0:1:1 31 -
CM000663.2 597750 597786 ILLUMINA-EAS45_4:10:46:9393:12090:0:1:1 32 -
CM000663.2 603507 603543 ILLUMINA-EAS45_4:10:8:10579:11116:0:1:1 31 +
CM000663.2 603517 603553 ILLUMINA-EAS45_4:10:100:13723:17986:0:1:1 31 +
CM000663.2 603522 603558 ILLUMINA-EAS45_4:10:83:16210:1015:0:1:1 42 -
CM000663.2 605578 605614 ILLUMINA-EAS45_4:10:37:6324:12178:0:1:1 31 -
CM000663.2 609128 609164 ILLUMINA-EAS45_4:10:82:7426:15461:0:1:1 31 +
CM000663.2 609338 609374 ILLUMINA-EAS45_4:10:64:13784:10330:0:1:1 31 -
CM000663.2 612974 613010 ILLUMINA-EAS45_4:10:71:12695:3519:0:1:1 31 +
CM000663.2 613088 613124 ILLUMINA-EAS45_4:10:80:14090:7941:0:1:1 31 +
CM000663.2 613090 613126 ILLUMINA-EAS45_4:10:5:18877:20621:0:1:1 31 +
CM000663.2 627499 627535 ILLUMINA-EAS45_4:10:86:11145:6432:0:1:1 31 -
CM000663.2 629060 629096 ILLUMINA-EAS45_4:10:42:3539:4395:0:1:1 42 +
CM000663.2 629595 629631 ILLUMINA-EAS45_4:10:85:7505:14939:0:1:1 31 -
CM000663.2 629905 629941 ILLUMINA-EAS45_4:10:41:3894:1917:0:1:1 35 -
CM000663.2 629906 629942 ILLUMINA-EAS45_4:10:100:1219:7398:0:1:1 31 +
CM000663.2 629906 629942 ILLUMINA-EAS45_4:10:117:13273:7805:0:1:1 31 -
CM000663.2 629907 629943 ILLUMINA-EAS45_4:10:62:6557:6527:0:1:1 31 +
CM000663.2 629907 629943 ILLUMINA-EAS45_4:10:9:14497:3249:0:1:1 31 -
CM000663.2 629908 629944 ILLUMINA-EAS45_4:10:119:5487:8356:0:1:1 31 +
CM000663.2 629908 629944 ILLUMINA-EAS45_4:10:33:13375:16342:0:1:1 31 -
CM000663.2 629909 629945 ILLUMINA-EAS45_4:10:6:8915:13373:0:1:1 31 +
CM000663.2 629909 629945 ILLUMINA-EAS45_4:10:113:4640:10892:0:1:1 31 -
CM000663.2 629910 629946 ILLUMINA-EAS45_4:10:120:5972:7258:0:1:1 31 +
CM000663.2 629910 629946 ILLUMINA-EAS45_4:10:116:8227:18746:0:1:1 31 -
CM000663.2 629911 629947 ILLUMINA-EAS45_4:10:13:2582:9971:0:1:1 31 +
CM000663.2 629911 629947 ILLUMINA-EAS45_4:10:18:4161:4433:0:1:1 31 -
CM000663.2 629912 629948 ILLUMINA-EAS45_4:10:37:8037:10004:0:1:1 31 +
CM000663.2 629912 629948 ILLUMINA-EAS45_4:10:100:2435:9062:0:1:1 31 -
CM000663.2 629913 629949 ILLUMINA-EAS45_4:10:16:8350:5059:0:1:1 31 +
CM000663.2 629913 629949 ILLUMINA-EAS45_4:10:35:16802:13269:0:1:1 31 -
CM000663.2 629914 629950 ILLUMINA-EAS45_4:10:21:11188:18959:0:1:1 31 +
CM000663.2 629914 629950 ILLUMINA-EAS45_4:10:83:6490:8081:0:1:1 31 -
CM000663.2 629915 629951 ILLUMINA-EAS45_4:10:87:6230:14656:0:1:1 31 +
CM000663.2 629915 629951 ILLUMINA-EAS45_4:10:43:16623:8200:0:1:1 31 -
CM000663.2 629916 629952 ILLUMINA-EAS45_4:10:62:13505:13342:0:1:1 31 +
CM000663.2 629916 629952 ILLUMINA-EAS45_4:10:73:15959:13647:0:1:1 31 -
CM000663.2 629917 629953 ILLUMINA-EAS45_4:10:114:18391:17021:0:1:1 31 +
CM000663.2 629917 629953 ILLUMINA-EAS45_4:10:83:11858:5537:0:1:1 31 -
CM000663.2 629918 629954 ILLUMINA-EAS45_4:10:37:3248:18433:0:1:1 31 +
CM000663.2 629918 629954 ILLUMINA-EAS45_4:10:44:13095:6065:0:1:1 31 -
CM000663.2 629919 629955 ILLUMINA-EAS45_4:10:3:7616:5538:0:1:1 31 +
CM000663.2 629919 629955 ILLUMINA-EAS45_4:10:19:6295:4913:0:1:1 31 -
CM000663.2 629920 629956 ILLUMINA-EAS45_4:10:105:3022:15194:0:1:1 31 +
CM000663.2 629920 629956 ILLUMINA-EAS45_4:10:113:3566:4161:0:1:1 31 -
CM000663.2 629921 629957 ILLUMINA-EAS45_4:10:45:1834:6614:0:1:1 31 +
CM000663.2 629921 629957 ILLUMINA-EAS45_4:10:22:11487:8320:0:1:1 31 -
CM000663.2 629922 629958 ILLUMINA-EAS45_4:10:103:7510:15478:0:1:1 31 +
CM000663.2 629922 629958 ILLUMINA-EAS45_4:10:112:9219:4400:0:1:1 31 -
CM000663.2 629923 629959 ILLUMINA-EAS45_4:10:113:8889:3858:0:1:1 31 +
CM000663.2 629923 629959 ILLUMINA-EAS45_4:10:14:7884:7145:0:1:1 31 -
CM000663.2 629924 629960 ILLUMINA-EAS45_4:10:116:7321:2659:0:1:1 31 +
CM000663.2 629924 629960 ILLUMINA-EAS45_4:10:54:3264:18281:0:1:1 31 -
CM000663.2 629925 629961 ILLUMINA-EAS45_4:10:44:6370:1639:0:1:1 31 +
CM000663.2 629925 629961 ILLUMINA-EAS45_4:10:52:17300:7003:0:1:1 31 -
CM000663.2 629926 629962 ILLUMINA-EAS45_4:10:6:5981:15795:0:1:1 31 +
CM000663.2 629926 629962 ILLUMINA-EAS45_4:10:10:12868:16163:0:1:1 31 -
CM000663.2 629927 629963 ILLUMINA-EAS45_4:10:118:13937:1228:0:1:1 31 +
CM000663.2 629927 629963 ILLUMINA-EAS45_4:10:14:10007:15603:0:1:1 31 -
CM000663.2 629928 629964 ILLUMINA-EAS45_4:10:103:3823:18262:0:1:1 31 +
CM000663.2 629928 629964 ILLUMINA-EAS45_4:10:109:8734:12792:0:1:1 31 -
CM000663.2 629929 629965 ILLUMINA-EAS45_4:10:47:12586:17804:0:1:1 31 +
CM000663.2 629929 629965 ILLUMINA-EAS45_4:10:59:10947:8256:0:1:1 31 -
CM000663.2 629930 629966 ILLUMINA-EAS45_4:10:115:10788:3388:0:1:1 31 +
CM000663.2 629930 629966 ILLUMINA-EAS45_4:10:39:13835:18313:0:1:1 31 -
CM000663.2 629931 629967 ILLUMINA-EAS45_4:10:104:17465:11233:0:1:1 31 +
CM000663.2 629931 629967 ILLUMINA-EAS45_4:10:41:7321:2119:0:1:1 31 -
CM000663.2 629932 629968 ILLUMINA-EAS45_4:10:107:14212:20106:0:1:1 31 +
CM000663.2 629932 629968 ILLUMINA-EAS45_4:10:118:15067:3550:0:1:1 31 -
CM000663.2 629933 629969 ILLUMINA-EAS45_4:10:2:13252:5295:0:1:1 31 +
CM000663.2 629933 629969 ILLUMINA-EAS45_4:10:102:7881:16909:0:1:1 31 -
CM000663.2 629934 629970 ILLUMINA-EAS45_4:10:59:5428:2504:0:1:1 31 +
CM000663.2 629934 629970 ILLUMINA-EAS45_4:10:114:16485:15896:0:1:1 31 -
CM000663.2 629935 629971 ILLUMINA-EAS45_4:10:10:8997:10980:0:1:1 31 +
CM000663.2 629935 629971 ILLUMINA-EAS45_4:10:11:12525:16308:0:1:1 31 -
CM000663.2 629936 629972 ILLUMINA-EAS45_4:10:10:11767:2354:0:1:1 31 +
CM000663.2 629936 629972 ILLUMINA-EAS45_4:10:17:15856:4532:0:1:1 31 -
CM000663.2 629937 629973 ILLUMINA-EAS45_4:10:34:15567:16740:0:1:1 31 +
CM000663.2 629937 629973 ILLUMINA-EAS45_4:10:119:14242:4623:0:1:1 31 -
CM000663.2 629938 629974 ILLUMINA-EAS45_4:10:115:12522:15229:0:1:1 31 +
CM000663.2 629938 629974 ILLUMINA-EAS45_4:10:19:17731:17294:0:1:1 31 -
CM000663.2 630177 630213 ILLUMINA-EAS45_4:10:90:5654:10917:0:1:1 40 +
CM000663.2 630193 630229 ILLUMINA-EAS45_4:10:62:8861:16907:0:1:1 31 +
CM000663.2 630291 630327 ILLUMINA-EAS45_4:10:96:7923:3529:0:1:1 40 -
CM000663.2 630315 630351 ILLUMINA-EAS45_4:10:4:4275:10890:0:1:1 31 +
CM000663.2 630481 630517 ILLUMINA-EAS45_4:10:61:2679:7122:0:1:1 31 +
CM000663.2 630523 630559 ILLUMINA-EAS45_4:10:90:7256:5585:0:1:1 40 +
CM000663.2 630552 630588 ILLUMINA-EAS45_4:10:29:7936:20570:0:1:1 31 -
CM000663.2 630564 630600 ILLUMINA-EAS45_4:10:29:18413:12107:0:1:1 31 +
CM000663.2 630652 630688 ILLUMINA-EAS45_4:10:75:8257:7333:0:1:1 31 -
CM000663.2 630666 630702 ILLUMINA-EAS45_4:10:30:8444:7708:0:1:1 31 -
CM000663.2 630667 630703 ILLUMINA-EAS45_4:10:92:14240:9403:0:1:1 40 +
CM000663.2 631164 631200 ILLUMINA-EAS45_4:10:56:9383:10217:0:1:1 31 +
CM000663.2 631177 631213 ILLUMINA-EAS45_4:10:71:9353:4938:0:1:1 31 -
CM000663.2 631183 631219 ILLUMINA-EAS45_4:10:106:8091:17382:0:1:1 31 -
CM000663.2 631357 631393 ILLUMINA-EAS45_4:10:24:10602:20496:0:1:1 40 -
CM000663.2 631395 631431 ILLUMINA-EAS45_4:10:20:12429:4978:0:1:1 40 +
CM000663.2 631636 631672 ILLUMINA-EAS45_4:10:90:19645:18175:0:1:0 31 -
CM000663.2 631660 631696 ILLUMINA-EAS45_4:10:72:9309:7886:0:1:1 31 -
CM000663.2 632070 632106 ILLUMINA-EAS45_4:10:16:7260:14070:0:1:1 31 +
CM000663.2 632070 632106 ILLUMINA-EAS45_4:10:1:18980:8816:0:1:1 31 -
CM000663.2 632072 632108 ILLUMINA-EAS45_4:10:23:12646:17141:0:1:1 31 +
CM000663.2 632072 632108 ILLUMINA-EAS45_4:10:3:2317:12509:0:1:1 31 -
CM000663.2 632469 632505 ILLUMINA-EAS45_4:10:101:13274:11972:0:1:1 31 +
CM000663.2 632483 632519 ILLUMINA-EAS45_4:10:28:19678:17603:0:1:1 31 -
CM000663.2 632841 632877 ILLUMINA-EAS45_4:10:119:16847:18636:0:1:1 31 -
CM000663.2 633010 633046 ILLUMINA-EAS45_4:10:15:4434:14498:0:1:1 31 +
CM000663.2 633160 633196 ILLUMINA-EAS45_4:10:73:14046:3036:0:1:1 31 +
CM000663.2 633328 633364 ILLUMINA-EAS45_4:10:39:1409:4087:0:1:0 40 +
CM000663.2 633637 633673 ILLUMINA-EAS45_4:10:32:1799:17004:0:1:1 31 +
CM000663.2 633682 633718 ILLUMINA-EAS45_4:10:29:4043:5995:0:1:1 31 +
CM000663.2 633707 633743 ILLUMINA-EAS45_4:10:56:13525:11957:0:1:1 31 -
CM000663.2 633875 633911 ILLUMINA-EAS45_4:10:53:11273:19748:0:1:0 31 +
CM000663.2 633993 634029 ILLUMINA-EAS45_4:10:7:12470:16606:0:1:1 31 +
CM000663.2 633993 634029 ILLUMINA-EAS45_4:10:111:3224:11873:0:1:1 31 -
CM000663.2 633994 634030 ILLUMINA-EAS45_4:10:17:13003:17506:0:1:1 31 +
CM000663.2 633994 634030 ILLUMINA-EAS45_4:10:112:18665:14492:0:1:1 31 -
CM000663.2 633995 634031 ILLUMINA-EAS45_4:10:120:13440:9796:0:1:1 31 +
CM000663.2 633995 634031 ILLUMINA-EAS45_4:10:14:17150:18542:0:1:1 31 -
CM000663.2 633996 634032 ILLUMINA-EAS45_4:10:118:17751:14363:0:1:1 31 +
CM000663.2 633996 634032 ILLUMINA-EAS45_4:10:22:13191:6752:0:1:1 31 -
CM000663.2 633997 634033 ILLUMINA-EAS45_4:10:65:12292:11845:0:1:1 31 +
CM000663.2 633997 634033 ILLUMINA-EAS45_4:10:116:4277:2564:0:1:1 31 -
CM000663.2 633998 634034 ILLUMINA-EAS45_4:10:1:18514:17377:0:1:1 31 +
CM000663.2 633998 634034 ILLUMINA-EAS45_4:10:36:15479:7888:0:1:1 31 -
CM000663.2 633999 634035 ILLUMINA-EAS45_4:10:13:2559:14734:0:1:1 31 +
CM000663.2 633999 634035 ILLUMINA-EAS45_4:10:55:12776:18709:0:1:1 31 -
CM000663.2 634000 634036 ILLUMINA-EAS45_4:10:115:14961:14787:0:1:1 31 +
CM000663.2 634000 634036 ILLUMINA-EAS45_4:10:113:14192:13588:0:1:1 31 -
CM000663.2 634001 634037 ILLUMINA-EAS45_4:10:6:16326:2629:0:1:1 31 +
CM000663.2 634001 634037 ILLUMINA-EAS45_4:10:42:10311:6395:0:1:1 31 -
CM000663.2 634002 634038 ILLUMINA-EAS45_4:10:48:14090:14263:0:1:1 31 +
CM000663.2 634002 634038 ILLUMINA-EAS45_4:10:59:6618:6891:0:1:1 31 -
CM000663.2 634003 634039 ILLUMINA-EAS45_4:10:6:9848:2824:0:1:1 31 +
CM000663.2 634003 634039 ILLUMINA-EAS45_4:10:2:14730:10261:0:1:1 31 -
CM000663.2 634004 634040 ILLUMINA-EAS45_4:10:81:7957:12899:0:1:1 31 +
CM000663.2 634004 634040 ILLUMINA-EAS45_4:10:17:6196:4128:0:1:1 31 -
CM000663.2 634005 634041 ILLUMINA-EAS45_4:10:20:11476:5583:0:1:1 31 +
CM000663.2 634005 634041 ILLUMINA-EAS45_4:10:104:11937:10546:0:1:1 31 -
CM000663.2 634006 634042 ILLUMINA-EAS45_4:10:104:13338:16163:0:1:1 31 +
CM000663.2 634006 634042 ILLUMINA-EAS45_4:10:108:8755:12854:0:1:1 31 -
CM000663.2 634007 634043 ILLUMINA-EAS45_4:10:68:14214:7761:0:1:1 31 +
CM000663.2 634007 634043 ILLUMINA-EAS45_4:10:50:6206:9828:0:1:1 31 -
CM000663.2 634008 634044 ILLUMINA-EAS45_4:10:73:13409:7380:0:1:1 31 +
CM000663.2 634008 634044 ILLUMINA-EAS45_4:10:16:15920:7361:0:1:1 31 -
CM000663.2 634009 634045 ILLUMINA-EAS45_4:10:42:14181:5105:0:1:1 31 +
CM000663.2 634009 634045 ILLUMINA-EAS45_4:10:104:14650:6860:0:1:1 31 -
CM000663.2 634010 634046 ILLUMINA-EAS45_4:10:101:10165:9152:0:1:1 31 +
CM000663.2 634010 634046 ILLUMINA-EAS45_4:10:64:8370:15937:0:1:1 31 -
CM000663.2 634011 634047 ILLUMINA-EAS45_4:10:5:15064:6602:0:1:1 31 +
CM000663.2 634011 634047 ILLUMINA-EAS45_4:10:77:11369:10778:0:1:1 31 -
CM000663.2 634012 634048 ILLUMINA-EAS45_4:10:47:12854:7257:0:1:1 31 +
CM000663.2 634012 634048 ILLUMINA-EAS45_4:10:105:9229:11291:0:1:1 31 -
CM000663.2 634013 634049 ILLUMINA-EAS45_4:10:63:4653:9335:0:1:1 31 +
CM000663.2 634013 634049 ILLUMINA-EAS45_4:10:23:11238:12480:0:1:1 31 -
CM000663.2 634014 634050 ILLUMINA-EAS45_4:10:59:10480:4917:0:1:1 31 +
CM000663.2 634014 634050 ILLUMINA-EAS45_4:10:71:4723:16161:0:1:1 31 -
CM000663.2 634015 634051 ILLUMINA-EAS45_4:10:103:10991:18631:0:1:1 31 +
CM000663.2 634015 634051 ILLUMINA-EAS45_4:10:64:11551:2619:0:1:1 31 -
CM000663.2 634016 634052 ILLUMINA-EAS45_4:10:22:5364:14191:0:1:1 31 +
CM000663.2 634016 634052 ILLUMINA-EAS45_4:10:4:8877:8291:0:1:1 31 -
CM000663.2 634017 634053 ILLUMINA-EAS45_4:10:112:11585:8996:0:1:1 31 +
CM000663.2 634017 634053 ILLUMINA-EAS45_4:10:80:15833:19142:0:1:1 31 -
CM000663.2 634018 634054 ILLUMINA-EAS45_4:10:43:14305:13080:0:1:1 31 +
CM000663.2 634018 634054 ILLUMINA-EAS45_4:10:6:8526:9204:0:1:1 31 -
CM000663.2 634019 634055 ILLUMINA-EAS45_4:10:10:4209:11095:0:1:1 31 +
CM000663.2 634019 634055 ILLUMINA-EAS45_4:10:38:15602:14952:0:1:1 31 -
CM000663.2 634020 634056 ILLUMINA-EAS45_4:10:51:11094:16382:0:1:1 31 +
CM000663.2 634020 634056 ILLUMINA-EAS45_4:10:2:16577:18249:0:1:1 31 -
CM000663.2 634021 634057 ILLUMINA-EAS45_4:10:69:6783:10858:0:1:1 31 +
CM000663.2 634021 634057 ILLUMINA-EAS45_4:10:106:9774:20834:0:1:1 31 -
CM000663.2 634022 634058 ILLUMINA-EAS45_4:10:13:12849:12781:0:1:1 31 -
CM000663.2 634023 634059 ILLUMINA-EAS45_4:10:36:13057:17095:0:1:1 31 +
CM000663.2 634023 634059 ILLUMINA-EAS45_4:10:42:2667:10181:0:1:1 31 -
CM000663.2 634024 634060 ILLUMINA-EAS45_4:10:48:11193:16275:0:1:1 31 +
CM000663.2 634024 634060 ILLUMINA-EAS45_4:10:100:16921:8457:0:1:1 31 -
CM000663.2 634025 634061 ILLUMINA-EAS45_4:10:87:11629:4628:0:1:1 31 +
CM000663.2 634025 634061 ILLUMINA-EAS45_4:10:113:5953:18114:0:1:1 31 -
CM000663.2 634026 634062 ILLUMINA-EAS45_4:10:62:16933:1793:0:1:1 31 +
CM000663.2 634026 634062 ILLUMINA-EAS45_4:10:20:6742:8599:0:1:1 31 -
CM000663.2 634027 634063 ILLUMINA-EAS45_4:10:10:6275:14540:0:1:1 31 +
CM000663.2 634027 634063 ILLUMINA-EAS45_4:10:22:10556:5924:0:1:1 31 -
CM000663.2 634028 634064 ILLUMINA-EAS45_4:10:11:7466:7632:0:1:1 31 +
CM000663.2 634028 634064 ILLUMINA-EAS45_4:10:13:15716:4058:0:1:1 31 -
CM000663.2 634086 634122 ILLUMINA-EAS45_4:10:96:11274:17047:0:1:1 40 -
CM000663.2 634242 634278 ILLUMINA-EAS45_4:10:41:1267:2469:0:1:1 31 +
CM000663.2 634326 634362 ILLUMINA-EAS45_4:10:42:5257:15745:0:1:1 31 +
CM000663.2 634391 634427 ILLUMINA-EAS45_4:10:102:1793:5461:0:1:1 31 -
CM000663.2 634399 634435 ILLUMINA-EAS45_4:10:78:13700:16588:0:1:1 31 -
CM000663.2 634416 634452 ILLUMINA-EAS45_4:10:56:2011:4897:0:1:1 31 -
CM000663.2 634421 634457 ILLUMINA-EAS45_4:10:32:6468:11213:0:1:1 31 -
CM000663.2 634789 634825 ILLUMINA-EAS45_4:10:11:18093:7834:0:1:1 31 -