Exemple #1
0
    def get(self, request, slug, *args, **kwargs):

        job_no = request.path_info.split("job")[-1]

        results_folder = "%s/enrich/%s" % (get_path()[0], str(job_no))
        par_name = "%s/parameter_file" % results_folder

        if os.path.isfile(par_name):

            parameters = get_parameter_dict(par_name)

            tf = parameters['tf']
            mode = parameters['mode']

            centrimo_raw = "%s/%s/%s_centrimo.txt" % (results_folder, tf, tf)
            t_head = get_table(centrimo_raw)[0]
            t_body = get_table(centrimo_raw)[1]
            job_no = results_folder.split("/")[-1]
            display_img = '/static/files/enrich/%s/%s/' % (job_no, tf)

            data = {'display_img': display_img, 'tf': tf, 'mode': mode,
                                        't_body': t_body, 't_head': t_head}

            return render(request, 'MATOM/assess_by_enrichment_results.html', context=data)
        else:
            return render(request, '404.html')
Exemple #2
0
    def get(self, request, slug, *args, **kwargs):

        job_no = request.path_info.split("job")[-1]
        print job_no

        results_folder = "%s/score/%s" % (get_path()[0], str(job_no))
        par_name = "%s/parameter_file" % results_folder

        if os.path.isfile(par_name):

            parameters = get_parameter_dict(par_name)

            tf = parameters['tf']
            mode = parameters['mode']
            score_method = parameters['score']

            data = self.plot_info(mode, tf, score_method, results_folder)

            return render(request, 'MATOM/assess_by_score_results.html', context=data)
        else:
            return render(request, '404.html')
Exemple #3
0
    def post(self, request, *args, **kwargs):
        # print "checking here"
        form = self.form_class(request.POST)
        if form.is_valid():

            print "then here"
            # print request.FILES['uploaded_motif']
            query_string = request.POST.get('search')
            #selected_project_id = query_string

            tf_details_dict = {
            }

            entry_query = get_query(query_string, ['tf_name', 'alt_tf_name', ])
            found_entries = TranscriptionFactor.objects.filter(entry_query)

            if len(found_entries) == 1:
                tf_class_id = found_entries[0].tf_id
                Tf_exists = Matrix.objects.filter(tf_id=tf_class_id).exists()

                chip_seq_exist = ChipSeq.objects.filter(tf_id=tf_class_id).exists()

                pbm_exitst = Pbm.objects.filter(tf_id=tf_class_id).exists()

                # TODO: Most of these should be in the models since they query DB. Keep business logic out

                import re
                if chip_seq_exist:
                    chipid = ChipSeq.objects.filter(tf_id=tf_class_id)[0].chip_id
                    chip_data = ChipData.objects.filter(chip_id=chipid).all()
                    chip_summary = []
                    for tf in chip_data:
                        a = str(tf.raw)
                        raw_file = re.split(r'([A-Z][a-z]*)', str(a))
                        cell_line = ''.join([raw_file[9], raw_file[10]])
                        lab = raw_file[7]

                        chip_summary.append([a, cell_line, lab])
                else:
                    chip_summary = []

                if pbm_exitst:
                    pbmid = Pbm.objects.filter(tf_id=tf_class_id)[0].pbm_id
                    pbm_data = PbmData.objects.filter(pbm_id=pbmid).all()
                    pbm_summary = []
                    for tf in pbm_data:
                        a = str(tf.source)

                        pbm_summary.append([a])
                else:
                    pbm_summary = []

                # Write  a function, that uses these data to get the summary information.
                #results_folder = '%s/MATOM/static/files/temp' % BASE_DIR
                #results_folder = '%s/www/MARS/static/files/%s' % (home, method)
                results_folder = "%stemp" % get_path()[0]
                mkdir_p(results_folder)

                if Tf_exists:

                    meme_out = '%s/temp.meme' % results_folder

                    with open(meme_out, "w") as out_file:
                        print "Lets get mmeme"
                        out_file.write(meme_head)

                    run_get_meme_id(tf_class_id, meme_out)

                    raw_out_file = '%s/temp_ic.txt' % results_folder

                    motif_ic.get_motif_summary_tfid(meme_out, raw_out_file, meme_path, results_folder)

                    t_head = get_table(raw_out_file)[0]
                    t_body = get_table(raw_out_file)[1]
                else:
                    t_head = []
                    t_body = []

                data = {'t_body': t_body, 't_head': t_head, 'chip_summary': chip_summary, 'pbm_summary': pbm_summary}

                return render(request, template_name='MATOM/search_summary.html', context=data)

            elif len(found_entries) == 0:
                return redirect('/search/')
            else:
                for items in found_entries:
                    if found_entries is not None:
                        tf_details_dict[items.tf_id] = items.tf_name



            #data = serializers.serialize('json', found_entries)

            request.session['selected_project_id'] = tf_details_dict

            # tf = request.POST.get('tf').lower()
            # score_method = request.POST.get("score")
            # mode = request.POST.get('mode')
            # formats = request.POST.get('formats')
            # pasted_motif = request.POST.get('test_motif')
            # uploaded_motif = self.request.FILES.get('uploaded_motif')
            # uploaded_chip = self.request.FILES.get('uploaded_chipseq')
            # data = {
            #     'found_entries': found_entries
            # }

            #form_html = render_to_string('search/search_results.html', context=data, request=request)

            #return {'success': True, 'form_html': form_html}

            return redirect('/search/select/')

        ctx = {}
        ctx.update(csrf(request))
        form_html = render_crispy_form(form, context=ctx)
        print "We got the form up and running"
        return {'success': False, 'form_html': form_html}
Exemple #4
0
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST, request.FILES)
        meme_error = None
        if request.is_ajax():
            print "We got here "
            mode = request.POST.get('mode')
            tf = request.POST.get('tf').lower()
            pasted_motif = request.POST.get('test_motif')
            uploaded_motif = self.request.FILES.get('uploaded_motif')
            formats = request.POST.get('formats')
            if formats:
                if formats == 'upload' and uploaded_motif is None:
                    formats = False
                    print "Uploaded"
                if formats == 'paste' and pasted_motif == "":
                    formats = False
                    print "pasted"
            uploaded_chip = self.request.FILES.get('uploaded_chipseq')
            tf_exists = Matrix.objects.filter(motif_name=tf).exists()

            if tf != "":
                if tf_exists or formats:
                    static_files = get_path(method="enrich")[0]
                    results_folder = static_files
                    motif_present_and_correct = self.handle_motifs(tf, pasted_motif, formats, results_folder, tf_exists)
                    if not motif_present_and_correct:
                        if tf_exists:
                            tf_class_id = MATOM.models.get_tf(tf)[0]
                            chipseq_exists = ChipSeq.objects.filter(tf_id=tf_class_id).exists()
                            chip_okay = self.process_chip(chipseq_exists, tf, results_folder)
                            if chip_okay:
                                chip_seq_list = chip_okay
                                results_folder_path = '%s/%s' % (results_folder, tf)
                                user_motif = "%s/%s/%s.meme" % (results_folder, tf, tf)

                                if mode == "CENTRIMO":

                                    run_centrimo(tf, chip_seq_list, user_motif, results_folder_path, figure=True)

                                    meme_file = "%s/%s/%s.meme" % (results_folder, tf, tf)
                                    meme_out_file = "%s/%s/%s_ranked_by_%s.meme" % (results_folder, tf, tf, mode.lower())
                                    centrimo_raw = "%s/%s/%s_centrimo_norm.txt" % (results_folder, tf, tf)
                                    utils.extract_scored_meme(meme_file, meme_out_file, utils.get_dict(centrimo_raw))
                                    centrimo_raw = "%s/%s/%s_centrimo.txt" % (results_folder, tf, tf)
                                    t_head = get_table(centrimo_raw)[0]
                                    t_body = get_table(centrimo_raw)[1]
                                    job_no = results_folder.split("/")[-1]
                                    display_img = '/static/files/enrich/%s/%s/%s_centrimo' % (job_no, tf, tf)

                                    data = {'display_img': display_img, 'tf': tf, 'mode': mode,
                                        't_body': t_body, 't_head': t_head}

                                    form_html = render_to_string('MATOM/assess_by_enrichment_results.html',
                                                             context=data, request=request)
                                    ctx = {}
                                    ctx.update(csrf(request))

                                    par_name = "%s/parameter_file" % results_folder
                                    create_parameter_file(par_name, tf, mode)

                                    return {'success': True, 'form_html': form_html, 'success_url': '/enrichment/job%s' % job_no}
                                else:
                                    meme_error = 'NOT_AVAILABLE'
                                    #context = {'message': error_message, 'form': form, 'tf': tf}
                                    #return render(request, 'MATOM/assess_by_enrichment.html', context)

                            else:
                                meme_error = "BED_ERROR"
                        else:
                            meme_error = 'NO_CHIP'
                    else:
                        meme_error = motif_present_and_correct
                else:
                    meme_error = "NO_TF"
            else:
                meme_error = "REQUIRED"

        if os.path.exists(self.static_files):
            import shutil
            shutil.rmtree(self.static_files)

        ctx = {}
        ctx.update(csrf(request))
        form_html = render_crispy_form(form, context=ctx)
        return {'success': False, 'form_html': form_html, 'error_message': self.error_message, 'meme_error': meme_error}
Exemple #5
0
    def post(self, request, *args, **kwargs):
        """

        """
        #static_files = self.static_files
        if request.method == 'POST':
            meme_error = None
            print "pased here"
            form = self.form_class(request.POST, request.FILES)
            if request.is_ajax():
                print "This is ajax"
                mode = request.POST.get('mode')
                tf = request.POST.get('tf')
                formats = request.POST.get('formats')
                pasted_motif = request.POST.get('test_motif')

                uploaded_motif = self.request.FILES.get('uploaded_motif')
                tf_exists = Matrix.objects.filter(motif_name=tf).exists()
                print formats
                if formats:
                    if formats == 'upload' and uploaded_motif is None:
                        formats = False
                        print "Uploaded"
                    if formats == 'paste' and pasted_motif == "":
                        formats = False
                        print "pasted"
                # Ensure some form of motif has been entered by the user
                # pasted_motif is not u"" or uploaded_motif
                if tf != "":
                    if tf_exists or formats:
                        static_files = get_path(method="compare")[0]
                        results_folder = static_files
                        motif_present_and_correct = self.handle_motifs(tf, pasted_motif, formats, results_folder, tf_exists)

                        if not motif_present_and_correct:
                            if mode == "FISIM":
                                meme_file = "%s/%s/%s.meme" % (results_folder, tf, tf)
                                file_path = "%s/%s" % (results_folder, tf)
                                run_fisim(tf, meme_file, file_path, figure=True)

                                meme_out_file = "%s/%s/%s_ranked_by_fisim.meme" % (results_folder, tf, tf)
                                raw_file = "%s/%s/%s.fisim" % (results_folder, tf, tf)
                                # TODO: These are not being properly ranked, check it out
                                utils.extract_scored_meme(meme_file, meme_out_file, utils.get_dict(raw_file))
                                raw_out_file = "%s/%s/%s_ic.txt" % (results_folder, tf, tf)
                                motif_ic.get_motif_summary(meme_file, raw_file, tf, raw_out_file, meme_path, results_folder)
                                t_head = get_table(raw_out_file)[0]
                                t_body = get_table(raw_out_file)[1]
                            else:
                                meme_file = "%s/%s/%s.meme" % (results_folder, tf, tf)
                                file_path = "%s/%s" % (results_folder, tf)
                                run_tomtom(tf, meme_file, file_path, figure=True)
                                meme_out_file = "%s/%s/%s_ranked_by_tomtom.meme" % (results_folder, tf, tf)
                                raw_file = "%s/%s/%s.tomtom" % (results_folder, tf, tf)
                                needed_dict = utils.get_dict(raw_file)
                                utils.extract_scored_meme(meme_file, meme_out_file, needed_dict)
                                raw_out_file = "%s/%s/%s_ic.txt" % (results_folder, tf, tf)
                                motif_ic.get_motif_summary(meme_file, raw_file, tf, raw_out_file, meme_path, results_folder)
                                t_head = get_table(raw_out_file)[0]
                                t_body = get_table(raw_out_file)[1]
                            job_no = results_folder.split("/")[-1]
                            display_img = '/static/files/compare/%s/%s/%s_%s.png' % (job_no, tf, tf, mode.lower())
                            data = {'tf': tf, 'mode': mode, 'display_img': display_img, 't_body': t_body, 't_head': t_head}

                            form_html = render_to_string('MATOM/assess_by_comparison_results.html', context=data, request=request)
                            ctx = {}
                            ctx.update(csrf(request))
                            par_name = "%s/parameter_file" % results_folder
                            create_parameter_file(par_name, tf, mode)
                            return {'success': True, 'form_html': form_html, 'success_url': '/comparison/job%s' % job_no}
                        else:
                            meme_error = motif_present_and_correct
                    else:
                        meme_error = "NO_TF"
                else:
                    meme_error = 'REQUIRED'
            if os.path.exists(self.static_files):
                import shutil
                shutil.rmtree(self.static_files)
            ctx = {}
            ctx.update(csrf(request))
            form_html = render_crispy_form(form, context=ctx)
            return {'success': False, 'form_html': form_html, 'error_message': self.error_message,
                    'meme_error': meme_error}
Exemple #6
0
    def post(self, request, *args, **kwargs):
        static_files = get_path("score")[0]
        job_no = static_files.split("/")[-1]

        meme_error = "ERROR"
        # print "checking here"
        form = self.form_class(request.POST, request.FILES)
        if request.is_ajax():
            print "then here"
            # print request.FILES['uploaded_motif']
            tf = request.POST.get('tf').lower()
            score_method = request.POST.get("score")
            mode = request.POST.get('mode')
            formats = request.POST.get('formats')
            pasted_motif = request.POST.get('test_motif')
            uploaded_motif = self.request.FILES.get('uploaded_motif')
            uploaded_chip = self.request.FILES.get('uploaded_chipseq')
            data = request.POST.get('data')
            if formats:
                if formats == 'upload' and uploaded_motif is None:
                    formats = False
                    print "Uploaded"
                if formats == 'paste' and pasted_motif == "":
                    formats = False
                    print "pasted"
            tf_exists = Matrix.objects.filter(motif_name=tf).exists()
            # pasted_motif is not u"" or uploaded_motif
            #print job_no
            if tf != "":
                #static_files = get_path("score")[0]

                #print static_files

                if tf_exists or formats:
                    results_folder = static_files
                    print "TF exists or formats"
                    motif_present_and_correct = self.handle_motifs(tf, pasted_motif, formats, results_folder, tf_exists)
                    print motif_present_and_correct

                    if not motif_present_and_correct:
                        print "Motif is all good"
                        if tf_exists:
                            print "and there is a TF"
                            tf_class_id = MATOM.models.get_tf(tf)[0]
                            chipseq_exists = ChipSeq.objects.filter(tf_id=tf_class_id).exists()

                            if data == "ChIP-seq":
                                print "So we got here"
                                chip_okay = self.process_chip(chipseq_exists, tf, results_folder)
                                if not chipseq_exists and not chip_okay:
                                    meme_error = "NO_CHIP"
                                else:
                                    if chip_okay:
                                        chip_seq_list = chip_okay

                                        results_folder_path = '%s/%s' % (static_files, tf)

                                        print results_folder_path
                                        user_motif = "%s/%s/%s.meme" % (static_files, tf, tf)
                                        files_path = '%s/%s/%s' % (results_folder, tf, tf)

                                        if mode == "ASSESS":
                                            Assess_by_score.run_all(tf, score_method, user_motif,
                                                                    chip_seq_list, results_folder_path)

                                            score_ext = Assess_by_score.score_extensions[score_method]

                                            utils.extract_scored_meme(files_path + ".meme",
                                                                      files_path + "_assess_ranked_by_" + score_ext + "_auc.meme",
                                                                      utils.get_dict_assess(files_path + "." + score_ext, "AUC"))

                                            # data = self.plot_info(mode, tf, score_method, results_folder)
                                            # form_html = render_to_string('MATOM/assess_by_score_results.html',
                                            #                              context=data, request=request)
                                            par_name = "%s/parameter_file" % results_folder
                                            create_parameter_file(par_name, tf, mode, score_method)
                                            # 'form_html': form_html
                                            return {'success': True, 'success_url': '/score/job%s' % job_no}
                                        else:
                                            run_gimme.run_gimme(tf, user_motif, chip_seq_list, results_folder_path, figure=True)

                                            utils.extract_scored_meme(files_path + ".meme", files_path + "_gimme_ranked_by_" +
                                                                      mode.lower() + "_auc.meme",
                                                                      utils.get_dict_assess(files_path + "." +
                                                                                            mode.lower(), "AUC"))
                                            par_name = "%s/parameter_file" % results_folder
                                            create_parameter_file(par_name, tf, mode, score_method)
                                            return {'success': True, 'success_url': '/score/job%s' % job_no}
                                            #meme_error = "NOT_AVAILABLE"
                                    else:
                                        meme_error = "BED_ERROR"
                            else:

                                pbm_exists = Pbm.objects.filter(tf_id=tf_class_id).exists()
                                if pbm_exists:
                                    print "We got to PBM"
                                    pbm_list = glob.glob('%s/Data/PBM/%s/*' % (BASE_DIR, tf.capitalize()))
                                    pbm_list_clean = []
                                    for pbms in pbm_list:
                                        if Assess_by_score_pbm.get_pbm_possitives(pbms) > 10:
                                            pbm_list_clean.append(pbms)
                                    if len(pbm_list_clean) > 0:
                                        print "And pbm all good"
                                        user_motif = "%s/%s/%s.meme" % (static_files, tf, tf)
                                        results_folder_path = '%s/%s' % (static_files, tf)

                                        Assess_by_score_pbm.run_all_pbm(tf, score_method, user_motif,
                                                                        pbm_list_clean, results_folder_path)

                                        files_path = '%s/%s/%s' % (results_folder, tf, tf)

                                        score_ext = Assess_by_score.score_extensions[score_method]
                                        utils.extract_scored_meme(files_path + ".meme",
                                                                      files_path + "_assess_ranked_by_" + score_ext + "_auc.meme",
                                                                      utils.get_dict_assess(files_path + "." + score_ext, "AUC"))

                                        # data = self.plot_info(mode, tf, score_method, results_folder)
                                        # form_html = render_to_string('MATOM/assess_by_score_results.html',
                                        #                              context=data, request=request)
                                        par_name = "%s/parameter_file" % results_folder
                                        create_parameter_file(par_name, tf, mode, score_method)
                                        # 'form_html': form_html,

                                        return {'success': True, 'success_url': '/score/job%s' % job_no}
                                    else:
                                        meme_error = 'NO_PBM'
                                else:
                                    meme_error = 'NO_PBM'
                        else:
                            meme_error = "NO_CHIP"
                    else:
                        meme_error = motif_present_and_correct
                else:
                    meme_error = "NO_TF"
            else:
                meme_error = "REQUIRED"
        #os.removedirs(self.static_files)
        if os.path.exists(static_files):
            import shutil
            print "We had to delete"
            shutil.rmtree(static_files)
        ctx = {}
        ctx.update(csrf(request))
        form_html = render_crispy_form(form, context=ctx)
        return {'success': False, 'form_html': form_html, 'error_message': self.error_message, 'meme_error': meme_error}
Exemple #7
0
    def post(self, request, *args, **kwargs):
        # print "checking here"
        form = self.form_class(request.POST)
        print form.is_valid()

        # TODO: Assuming for now that the form is valid

        #if form.is_valid():
        # print request.FILES['uploaded_motif']

        tf_class_id = request.POST.get('tf_choices')

        #Now lets validate available options

        Tf_exists = Matrix.objects.filter(tf_id=tf_class_id).exists()

        chip_seq_exist = ChipSeq.objects.filter(tf_id=tf_class_id).exists()

        pbm_exitst = Pbm.objects.filter(tf_id=tf_class_id).exists()

        # TODO: Most of these should be in the models since they query DB. Keep business logic out

        import re
        if chip_seq_exist:
            chipid = ChipSeq.objects.filter(tf_id=tf_class_id)[0].chip_id
            chip_data = ChipData.objects.filter(chip_id=chipid).all()
            chip_summary = []
            for tf in chip_data:
                a = str(tf.raw)
                raw_file = re.split(r'([A-Z][a-z]*)', str(a))
                cell_line = ''.join([raw_file[9], raw_file[10]])
                lab = raw_file[7]

                chip_summary.append([a, cell_line, lab])
        else:
            chip_summary = []

        if pbm_exitst:
            pbmid = Pbm.objects.filter(tf_id=tf_class_id)[0].pbm_id
            pbm_data = PbmData.objects.filter(pbm_id=pbmid).all()
            pbm_summary = []
            for tf in pbm_data:
                a = str(tf.source)

                pbm_summary.append([a])
        else:
            pbm_summary = []

        # Write  a function, that uses these data to get the summary information.
        results_folder = "%s/temp" % get_path()[0]
        print results_folder


        if Tf_exists:

            meme_out = '%stemp.meme' % results_folder

            with open(meme_out, "w") as out_file:
                print "Lets get mmeme"
                out_file.write(meme_head)

            run_get_meme_id(tf_class_id, meme_out)

            raw_out_file = '%s/temp_ic.txt' % results_folder

            motif_ic.get_motif_summary_tfid(meme_out, raw_out_file, meme_path, results_folder)

            t_head = get_table(raw_out_file)[0]
            t_body = get_table(raw_out_file)[1]
        else:
            t_head = []
            t_body = []

        data = {'t_body': t_body, 't_head': t_head, 'chip_summary': chip_summary, 'pbm_summary': pbm_summary}

        return render(request, template_name='MATOM/search_summary.html', context=data)