Ejemplo n.º 1
0
    def post(self):
        try:
            args = chart_parser.parse_args()
            selected_genes = args["gene_set"]
            selected_dataset = args["dataset_identifier"]
            selected_charttype = args["chart_type"]
            print args["chart_type"]

            request_to_handle = request.accept_mimetypes.best_match(['application/pdf', 'text/html'])

            if request_to_handle == 'application/pdf':
                accept = "pdf"
            else:
                accept = "html"

            chart_resource = nc.sample_distribution_for_genes(selected_dataset, selected_genes,
                                                              title=selected_dataset,
                                                              chart_type=selected_charttype,
                                                              chart_rendering=accept)

            # returns the write rendering based on generator [bokeh with bokehjs or matplot with mpld3]
            if accept == "html":
                if chart_resource["generator"] == "bokeh":
                    return cr.BokehResource(chart_resource["chart"]), 201
                if chart_resource["generator"] == "matplot":
                    return cr.MatPlotLibResource(chart_resource["chart"]), 201

            if accept == "pdf":
                filename = ig.get_generated_guid_as_string() + ".pdf"
                file_path = APP_CONFIG["domain"] + APP_CONFIG["static_documents"]
                chart_resource["chart"].savefig("." + APP_CONFIG["static_documents"] + filename)
                return cr.StringApiResource(file_path + filename), 201
        except:
            return cr.StringApiResource("Chart creation failed"), 400
Ejemplo n.º 2
0
def normalize_gene_counts(data, method, threshold=None, target_identifier="", experiment_identifier=""):
    # if exists -> get from db
    processing_result = cn.bioconductor_normalization(data, method)

    new_intern_identifier = identifier_generator.get_generated_guid_as_string()
    hdf_storage.store_hdf(processing_result.frame, new_intern_identifier)
    print("compressed pytable storage done")
    package = mr.get_package_by_name_and_version(processing_result.package,
                                                 processing_result.version).public_identifier
    dataset = dr.create_data_set(new_intern_identifier, package + "_" + target_identifier, "genes normalized dataset",
                                 package_identifier=package,
                                 experiment_identifier=experiment_identifier)
    print("new dataset saved")
    #er.link_dataset_to_experiment(experiment_identifier, dataset.public_identifier)
    print("new dataset linked")
    return dataset
Ejemplo n.º 3
0
    def post(self):
        args = job_parser.parse_args()
        if args.local:
            try:
                print args.compare_datasets
                if args.compare_datasets is not None:
                    return cr.MatPlotLibResource(dp.plot_comparison(args.compare_datasets, args.features, args.chart_type))
            except:
                return cr.StringApiResource("There was an issue when comparing data sets, check for identifiers or if the lists are equal")

        method = args.method_identifier
        dataset = args.dataset_identifier
        min_distance = args.min_distance
        min_samples = args.min_samples
        print(args.experiment_identifier)
        res = pr.create_mining_task(method + "_" + dataset + "_" + ig.get_generated_guid_as_string(),
                                    method, dataset, min_sample=min_samples, min_distance=min_distance,
                                    experiment_identifier=args.experiment_identifier)

        return cr.JsonResource(eto.JobView(res).to_json()), 201
Ejemplo n.º 4
0
    def post(self):
        args = dataset_parser.parse_args()
        print("dataset post received")
        # upload new dataset
        if args.dataset_identifier is None:
            print("creating new data set")
            new_file = args.file

            filename = secure_filename(new_file.filename)
            print("uploaded" + filename)
            intern_identifier = ig.get_generated_guid_as_string()
            new_file.save(filename)

            try:
                with open(filename, "rb") as fl:
                    frame = dr.get_data_frame_from_csv(fl)

                    intern_location = dr.store_data_frame_to_hdf(frame, intern_identifier)
                    # raw counts by default
                    data_entity = dr.create_data_set(intern_identifier,
                                                     public_identifier=filename,
                                                     dataset_type="raw gene counts",
                                                     experiment_identifier="raw_data_container")  # For demo -> add exp identifier
                    server_hash = ig.md5_for_file(fl)
                print(filename + " is saved")

                print("file removed")
                return cr.JsonResource(
                    {"filename": filename, "intern_identifier": data_entity.intern_identifier,
                     "public_identifier": data_entity.public_identifier, "server_md5": server_hash}), 201
            except IntegrityError:
                return cr.StringApiResource("Public identifier already taken"), 409
            except:
                return cr.StringApiResource("An error has occured, check if your data set comply with the expected format"), 400
            finally:
                if filename is not None:
                    os.remove(filename)
        else:
            # a new dataset is created based on source
            try:
                print("pre-processing existing dataset")
                source_data = args.dataset_identifier
                print("source data : " + source_data)
                # target_data = args.target_dataset_identifier
                # TODO link to experiment identifier!
                # experiment_identifier = args.experiment_identifier
                method_identifier = args.preprocessing_method_identifier

                print("source " + source_data + "method " + method_identifier)

                path = APP_CONFIG["application_files_location"] + APP_CONFIG["application_store_name"]
                df = dr.get_data_frame_from_hdf(source_data, path)
                print("data frame is loaded")
                new_data_set = ed.normalize_gene_counts(df, method_identifier,
                                                        target_identifier=source_data,
                                                        experiment_identifier=args.experiment_identifier)

                return cr.JsonResource(eto.SummaryDatasetView(new_data_set).to_json()), 201
            except Exception as e:
                print(e.__str__())
                return cr.StringApiResource("Explosion! Tool down..."), 400