def create_from_file(self, files={}, has_headers=False, fields=[], delimiter="\t", process_file=True): try: folder = get_temporary_folder() f = files["upload_file"] bed_file = f if process_file: new_bed = os.path.join(folder, "new_bed.bed") outfile = open(new_bed, "w") if f.endswith(".gz"): handle = gzip.open(f, "rt") else: handle = open(f) lookup = app.config["GENOME_DATABASES"][self.db].get( "ens_to_ucsc") with handle as csvfile: reader = csv.reader(csvfile, delimiter=delimiter) for row in reader: if reader.line_num == 1 and has_headers: continue out_arr = row[0:3] if lookup: out_arr[0] = lookup.get(out_arr[0], out_arr[0]) if len(fields) > 3: for field in fields[3:]: out_arr.append(row[field["position"] - 1]) outfile.write("\t".join(out_arr) + "\n") outfile.close() bed_file = new_bed #reorder the fields new_fields = [] for count, field in enumerate(fields[3:], start=1): field["position"] = count field["field"] = "f{}".format(count) new_fields.append(field) fields = new_fields gz_bed = os.path.join(self.get_tracks_folder(), "anno_{}.bed.gz".format(self.id)) os.system("sort -k1,1 -k2,2n {} | bgzip > {}".format( bed_file, gz_bed)) os.system("tabix -p bed {}".format(gz_bed)) self.set_data("fields", fields) self.set_data("bed_file", gz_bed) self.set_data("processing_file", False) self.update({"status": "complete"}) except Exception as e: self.data["processing_file"] = False app.logger.exception( "Unable to create annotataions from file {}".format(f)) self.update({"status": "failed"})
def create_gene_set_from_remote_file(genome, remote_location, name, description="", make_default=False): f_name = os.path.split(remote_location)[1] folder = get_temporary_folder() file_name = os.path.join(folder, f_name) command = "wget '{}' -O {}".format(remote_location, file_name) data = {"remote"} os.system(command) create_gene_set(genome, name, file_name, description, make_default) shutil.rmtree(folder)
def create_from_remote_file(genome, remote_location, name, type, description=""): f_name = os.path.split(remote_location)[1] folder = get_temporary_folder() file_name = os.path.join(folder, f_name) command = "wget '{}' -O {}".format(remote_location, file_name) data = {"remote"} os.system(command) create_annotation_set_from_bed(genome, file_name, type, name, description, data) shutil.rmtree(folder)
def create_node_thumbnail(tracks, images, config): folder = config.get("folder") if not folder: folder = get_temporary_folder() config["folder"] = folder out_config = os.path.join(folder, "config.json") config["images"] = images json = ujson.dumps({"tracks": tracks, "config": config}) out = open(out_config, "w") out.write(json) out.close() app_root = Path(app.root_path).parent os.environ["NODE_PATH"] = "/usr/local/lib/node_modules" cmd = "node {}/node/image_gen.js {}/config.json".format(app_root, folder) os.system(cmd) return folder
def create_from_avocato_output(self, output_dir=""): self.set_data("remote_avacato_dir", output_dir) remote_file = os.path.join(output_dir, "cell", "cell_all.csv") tf = get_temporary_folder() local_file = os.path.join(tf, "cell.csv") remote_file = shlex.quote(remote_file) os.system("wget {} -O {}".format(remote_file, local_file)) line_num = 0 headers = [] #work put headers with open(local_file) as f: for line in f: arr = line.strip().split(",") if line_num == 0: for c, item in enumerate(arr, start=1): headers.append({"name": item, "position": c}) line_num += 1 continue if line_num == 1: for c, item in enumerate(arr): type = "text" try: int(item) type = "integer" except: try: float(item) type = "double" except: pass headers[c]["datatype"] = type break self.add_data_file(has_headers=True, files={"upload_file": local_file}, fields=headers, delimiter=",") user = db.session.query(User).filter_by(id=self.owner).one() send_email(user, "Job Finished", "job_finished", url=self.get_url(external=True), type="Avacato Visualisation")
def create_thumbnail_preview(db): data = request.json vs = ViewSet(db, data["viewset_id"]) folder = get_temporary_folder() tn_det = data['thumbnail_details'] vs.data['thumbnail_details'] = tn_det vs.data["margin"] = tn_det['margin'] vs.data["annotation_sets"] = data["annotations"] tn = ThumbnailSet(db, height=int(tn_det['height']), width=int(tn_det['width'])) ids = list(range(1, 21)) gene_set = 0 if data.get("genes") and vs.db != "other": gene_set = 1 tn.draw_view_set(vs, specific_views=ids, folder=folder, gene_set=gene_set) images = [] url_folder = folder.replace("mlv", "") for i_id in ids: images.append("{}/tn{}.png".format(url_folder, i_id)) return ujson.dumps({"images": images, "success": True})
def create_test_thumbnails(db): '''creates test thumbnails ''' data = request.json tracks = data.get("tracks") #reverse the proxy for track in tracks: track['url'] = get_reverse_track_proxy(track['url']) annotation_sets = data.get("annotations") gene_set = data.get("genes") if gene_set: gene_set = 1 height = int(data.get("height", 100)) width = int(data.get("width", 200)) margin = int(data.get("margin", 0)) margin2 = int(data.get("margin2", 0)) #not yet implemented region_length = int(data.get("region_length", 0)) region_length2 = int(data.get("region_length2", 0)) half_rl = int(region_length / 2) half_rl2 = int(region_length2 / 2) locations = data.get("locations") double_view = data.get("double_view") if double_view: margin2 = margin + 10000 tn_set = ThumbnailSet(db, tracks=tracks, annotation_sets=annotation_sets, gene_set=gene_set, height=height, width=width) thumbnails = [] folder = get_temporary_folder() url_folder = folder.replace("/mlv", "") count = 1 for loc in locations: tram_lines = [loc['start'], loc['end']] if region_length: middle = int((loc['end'] - loc['start']) / 2) + loc['start'] st = middle - half_rl en = middle + half_rl else: st = loc['start'] - margin en = loc['end'] + margin stub = "tn" + str(count) if not double_view: tn_set.draw_thumbnail(loc['chr'], st, en, folder, stub, tram_lines=tram_lines) else: if region_length: middle = int((loc['end'] - loc['start']) / 2) + loc['start'] st = middle - half_rl en = middle + half_rl st2 = middle - half_rl2 en2 = middle + half_rl2 else: st = loc['start'] - margin en = loc['end'] + margin st2 = loc['start'] - margin2 en2 = loc['end'] + margin2 views = [{ "chrom": loc['chr'], "start": st, "end": en, 'tram_lines': tram_lines }, { "chrom": loc['chr'], "start": st2, "end": en2, 'tram_lines': tram_lines }] tn_set.draw_composite_thumbnail(views, folder, stub) thumbnails.append(os.path.join("/data", url_folder, stub + ".png")) count += 1 return ujson.dumps(thumbnails)