Exemple #1
0
    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"})
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)