예제 #1
0
def main():
    global_var.init()
    args = make_args()
    check_environments(args)
    check_templates(args)
    check_qPCR(args)
    run(args)
예제 #2
0
            }

        # generate primers
        if id not in primers:
            primers[id] = {}
        primers[id]['PRIMER_PAIR_NUM_RETURNED'] = rank + 1
        primers[id][f'PRIMER_PAIR_{rank}_PENALTY'] = 0
        primers[id][f'PRIMER_LEFT_{rank}_SEQUENCE'] = seq_F
        primers[id][f'PRIMER_RIGHT_{rank}_SEQUENCE'] = seq_R
        primers[id][f'PRIMER_LEFT_{rank}'] = [-1, len(seq_F)]
        primers[id][f'PRIMER_RIGHT_{rank}'] = [-1, len(seq_R)]
        primers[id][f'PRIMER_LEFT_{rank}_TM'] = primer3.calcTm(
            transform_degenerate(seq_F))
        primers[id][f'PRIMER_RIGHT_{rank}_TM'] = primer3.calcTm(
            transform_degenerate(seq_R))
        primers[id][f'PRIMER_LEFT_{rank}_GC_PERCENT'] = calculate_GC(
            transform_degenerate(seq_F))
        primers[id][f'PRIMER_RIGHT_{rank}_GC_PERCENT'] = calculate_GC(
            transform_degenerate(seq_R))
        primers[id][f'PRIMER_PAIR_{rank}_PRODUCT_SIZE'] = -1
        primers[id]['SEQUENCE_RELATIVE_TARGET_START'] = 0

    return primers


if __name__ == "__main__":
    global_var.init()
    with open('tests/_internal_/query_check') as f:
        primers = make_primers(f.read())
        print(json.dumps(primers, indent=4))
예제 #3
0
def run():
    ###################  init #############################
    web_config = load()
    global_var.init()
    db_dir = web_config['templates_directory']

    ###################  Design primers ###################
    query_string = request.form['query']
    dbs = [db_dir + '/' + x for x in request.form['selected_dbs'].split(',')]
    if request.form['app-type'] == 'check':
        primers = make_primers.make_primers(query=query_string)
        if 'error' in primers:
            return json.dumps(
                {
                    'error':
                    '<p>' + primers['error'] + '</p>' +
                    '<p>Your inputs might be invalid; Check the \
                <a href="javascript:void(0)" data-toggle="modal" data-target="#input-help">manual</a> carefully \
                to ensure that your inputs are in correct formats</p>'
                },
                indent=4)
    else:
        if request.form['app-type'] == 'design':
            primer_num_return = request.form['retain']
        else:
            primer_num_return = request.form['primer_num_return']
        if make_sites.judge_input_type(query_string) == 'pos':
            sites = make_sites.build_by_pos(query=query_string, template_file=dbs[0], primer_type=request.form['region_type'], \
                primer_num_return=int(primer_num_return), size_min=int(request.form['product_size_min']), \
                    size_max=int(request.form['product_size_max']), pick_internal=bool(int(request.form['pick_internal'])), \
                        use_junction=bool(int(request.form['junction'])) )
        else:
            sites = make_sites.build_by_seq(query=query_string, primer_type=request.form['region_type'], \
                primer_num_return=int(primer_num_return), size_min=int(request.form['product_size_min']), \
                    size_max=int(request.form['product_size_max']), pick_internal=bool(int(request.form['pick_internal'])))
        if 'error' in sites:
            return json.dumps(
                {
                    'error':
                    '<p>' + sites['error'] + '</p>' +
                    '<p>Your inputs might be invalid; Check the \
                <a href="javascript:void(0)" data-toggle="modal" data-target="#input-help">manual</a> carefully \
                to ensure that your inputs are in correct formats</p>'
                },
                indent=4)
        primers = design_primer.multiple(sites,
                                         cpu=web_config['cpu'],
                                         monitor=False)

    ###################  Checking specificity  #############
    if request.form['app-type'] != 'design':
        primers = run_blast.run_blast_parallel(primers=primers, dbs=dbs, cpu=web_config['cpu'],\
            checking_size_max=int(request.form['checking_size_max']), checking_size_min=int(request.form['checking_size_min']), \
                report_amplicon_seq=bool(int(request.form['report_amplicon_seqs'])), Tm_diff=int(request.form['Tm_diff']), \
                    use_3_end=bool(int(request.form['use_3_end'])), monitor=False)
        primers = sort_primers.sort_rank(primers=primers, dbs=dbs, max_num_return=int(request.form['retain']), \
            use_isoforms=bool(int(request.form['isoform'])) )

    ###################  Checking multiplex  ###############
    dimers = {}
    if int(request.form['multiplex']) == 1:
        dimers = multiplex.extract_fake_pair(primers,
                                             Tm_diff=int(
                                                 request.form['Tm_diff']),
                                             cpu=web_config['cpu'],
                                             monitor=False)

    ###################  Output    #########################
    global_var.current_task = 'finish'
    return json.dumps({'meta':{'mode':request.form['app-type'], 'dbs':dbs, 'region_type': request.form['region_type'], \
         'check_multiplex': bool(int(request.form['multiplex']))}, 'primers':primers, 'dimers':dimers}, indent=4)