Commit 6c018b40 by Celine Mercier

ecopcr: fixed and improved the options to keep nuclotides around the

amplicon
parent 694d1934
...@@ -107,14 +107,20 @@ def addOptions(parser): ...@@ -107,14 +107,20 @@ def addOptions(parser):
help="Defines the method used for estimating the Tm (melting temperature) between the primers and their corresponding " help="Defines the method used for estimating the Tm (melting temperature) between the primers and their corresponding "
"target sequences. SANTALUCIA: 1, or OWCZARZY: 2. Default: 1.") "target sequences. SANTALUCIA: 1, or OWCZARZY: 2. Default: 1.")
group.add_argument('--keep-primers', '-p',
action="store_true",
dest="ecopcr:keep-primers",
default=False,
help="Whether to keep the primers attached to the output sequences (default: the primers are cut out).")
group.add_argument('--keep-nucs', '-D', group.add_argument('--keep-nucs', '-D',
action="store", action="store",
dest="ecopcr:keep-nucs", dest="ecopcr:keep-nucs",
metavar="<INTEGER>", metavar="<N>",
type=int, type=int,
default=0, default=0,
help="Keeps the specified number of nucleotides on each side of the in silico amplified sequences, " help="Keeps N nucleotides on each side of the in silico amplified sequences, "
"(already including the amplified DNA fragment plus the two target sequences of the primers).") "not including the primers (implying that primers are automatically kept if N > 0).")
group.add_argument('--kingdom-mode', '-k', group.add_argument('--kingdom-mode', '-k',
action="store_true", action="store_true",
...@@ -185,7 +191,7 @@ def run(config): ...@@ -185,7 +191,7 @@ def run(config):
config['ecopcr']['min-length'], config['ecopcr']['max-length'], \ config['ecopcr']['min-length'], config['ecopcr']['max-length'], \
restrict_to_taxids_p, ignore_taxids_p, \ restrict_to_taxids_p, ignore_taxids_p, \
config['ecopcr']['circular'], config['ecopcr']['salt-concentration'], config['ecopcr']['salt-correction-method'], \ config['ecopcr']['circular'], config['ecopcr']['salt-concentration'], config['ecopcr']['salt-correction-method'], \
config['ecopcr']['keep-nucs'], config['ecopcr']['kingdom-mode']) < 0: config['ecopcr']['keep-nucs'], config['ecopcr']['keep-primers'], config['ecopcr']['kingdom-mode']) < 0:
raise Exception("Error running ecopcr") raise Exception("Error running ecopcr")
# Save command config in DMS comments # Save command config in DMS comments
......
...@@ -23,6 +23,7 @@ cdef extern from "obi_ecopcr.h" nogil: ...@@ -23,6 +23,7 @@ cdef extern from "obi_ecopcr.h" nogil:
double salt_concentration, double salt_concentration,
int salt_correction_method, int salt_correction_method,
int keep_nucleotides, int keep_nucleotides,
bint keep_primers,
bint kingdom_mode) bint kingdom_mode)
major = 3 major = 3
minor = 0 minor = 0
serial= '0-beta3' serial= '0-beta4'
version ="%d.%02d.%s" % (major,minor,serial) version ="%d.%02d.%s" % (major,minor,serial)
...@@ -77,7 +77,8 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode); ...@@ -77,7 +77,8 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode);
* @param err2 The number of errors in the second primer. * @param err2 The number of errors in the second primer.
* @param strand The DNA strand direction of the amplicon (R(everse) or D(irect)). * @param strand The DNA strand direction of the amplicon (R(everse) or D(irect)).
* @param kingdom_mode Whether the kingdom or the superkingdom informations should be printed to the output. * @param kingdom_mode Whether the kingdom or the superkingdom informations should be printed to the output.
* @param keep_nucleotides Number of nucleotides kept on each side of the amplicon. * @param keep_nucleotides Number of nucleotides kept on each side of the amplicon (not including the primers if they are kept).
* @param keep_primers Whether to keep the primers.
* @param i_id_column A pointer on the input sequence identifier column. * @param i_id_column A pointer on the input sequence identifier column.
* @param o_id_column A pointer on the output sequence identifier column. * @param o_id_column A pointer on the output sequence identifier column.
* @param o_ori_seq_len_column A pointer on the original sequence length column. * @param o_ori_seq_len_column A pointer on the original sequence length column.
...@@ -124,6 +125,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view, ...@@ -124,6 +125,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view,
int32_t err1, int32_t err2, int32_t err1, int32_t err2,
char strand, bool kingdom_mode, char strand, bool kingdom_mode,
int keep_nucleotides, int keep_nucleotides,
bool keep_primers,
OBIDMS_column_p i_id_column, OBIDMS_column_p o_id_column, OBIDMS_column_p o_ori_seq_len_column, OBIDMS_column_p i_id_column, OBIDMS_column_p o_id_column, OBIDMS_column_p o_ori_seq_len_column,
OBIDMS_column_p o_amplicon_column, OBIDMS_column_p o_amplicon_length_column, OBIDMS_column_p o_amplicon_column, OBIDMS_column_p o_amplicon_length_column,
OBIDMS_column_p o_taxid_column, OBIDMS_column_p o_rank_column, OBIDMS_column_p o_name_column, OBIDMS_column_p o_taxid_column, OBIDMS_column_p o_rank_column, OBIDMS_column_p o_name_column,
...@@ -328,6 +330,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view, ...@@ -328,6 +330,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view,
int32_t err1, int32_t err2, int32_t err1, int32_t err2,
char strand, bool kingdom_mode, char strand, bool kingdom_mode,
int keep_nucleotides, int keep_nucleotides,
bool keep_primers,
OBIDMS_column_p i_id_column, OBIDMS_column_p o_id_column, OBIDMS_column_p o_ori_seq_len_column, OBIDMS_column_p i_id_column, OBIDMS_column_p o_id_column, OBIDMS_column_p o_ori_seq_len_column,
OBIDMS_column_p o_amplicon_column, OBIDMS_column_p o_amplicon_length_column, OBIDMS_column_p o_amplicon_column, OBIDMS_column_p o_amplicon_length_column,
OBIDMS_column_p o_taxid_column, OBIDMS_column_p o_rank_column, OBIDMS_column_p o_name_column, OBIDMS_column_p o_taxid_column, OBIDMS_column_p o_rank_column, OBIDMS_column_p o_name_column,
...@@ -382,7 +385,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view, ...@@ -382,7 +385,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view,
oligo2[o1->patlen] = 0; oligo2[o1->patlen] = 0;
error2 = err1; error2 = err1;
if (keep_nucleotides == 0) if (!keep_primers)
amplicon+=o2->patlen; amplicon+=o2->patlen;
else else
{ {
...@@ -401,7 +404,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view, ...@@ -401,7 +404,7 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view,
oligo2[o2->patlen] = 0; oligo2[o2->patlen] = 0;
error2 = err2; error2 = err2;
if (keep_nucleotides==0) if (!keep_primers)
amplicon+=o1->patlen; amplicon+=o1->patlen;
else else
{ {
...@@ -411,16 +414,11 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view, ...@@ -411,16 +414,11 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view,
} }
ecoComplementSequence(oligo2); ecoComplementSequence(oligo2);
if (keep_nucleotides == 0) if (!keep_primers)
amplicon[amplicon_len]=0; amplicon[amplicon_len]=0;
else else
{ {
amplicon_len = ldelta+rdelta+amplicon_len; amplicon_len = ldelta+rdelta+amplicon_len;
for (i=0; i<ldelta; i++)
amplicon[i]|=32;
for (i=1; i<=rdelta; i++)
amplicon[amplicon_len-i]|=32;
amplicon[amplicon_len] = 0; amplicon[amplicon_len] = 0;
} }
...@@ -659,6 +657,7 @@ int obi_ecopcr(const char* i_dms_name, ...@@ -659,6 +657,7 @@ int obi_ecopcr(const char* i_dms_name,
double salt, double salt,
int saltmethod, int saltmethod,
int keep_nucleotides, int keep_nucleotides,
bool keep_primers,
bool kingdom_mode) bool kingdom_mode)
{ {
...@@ -717,6 +716,9 @@ int obi_ecopcr(const char* i_dms_name, ...@@ -717,6 +716,9 @@ int obi_ecopcr(const char* i_dms_name,
signal(SIGINT, sig_handler); signal(SIGINT, sig_handler);
if (keep_nucleotides > 0)
keep_primers = true;
if (circular) if (circular)
{ {
circular = strlen(primer1); circular = strlen(primer1);
...@@ -1076,6 +1078,7 @@ int obi_ecopcr(const char* i_dms_name, ...@@ -1076,6 +1078,7 @@ int obi_ecopcr(const char* i_dms_name,
erri, errj, erri, errj,
'D', kingdom_mode, 'D', kingdom_mode,
keep_nucleotides, keep_nucleotides,
keep_primers,
i_id_column, o_id_column, o_ori_seq_len_column, i_id_column, o_id_column, o_ori_seq_len_column,
o_amplicon_column, o_amplicon_length_column, o_amplicon_column, o_amplicon_length_column,
o_taxid_column, o_rank_column, o_name_column, o_taxid_column, o_rank_column, o_name_column,
...@@ -1163,6 +1166,7 @@ int obi_ecopcr(const char* i_dms_name, ...@@ -1163,6 +1166,7 @@ int obi_ecopcr(const char* i_dms_name,
erri, errj, erri, errj,
'R', kingdom_mode, 'R', kingdom_mode,
keep_nucleotides, keep_nucleotides,
keep_primers,
i_id_column, o_id_column, o_ori_seq_len_column, i_id_column, o_id_column, o_ori_seq_len_column,
o_amplicon_column, o_amplicon_length_column, o_amplicon_column, o_amplicon_length_column,
o_taxid_column, o_rank_column, o_name_column, o_taxid_column, o_rank_column, o_name_column,
......
...@@ -93,8 +93,8 @@ ...@@ -93,8 +93,8 @@
* @param salt_concentration The salt concentration used for estimating the Tm. * @param salt_concentration The salt concentration used for estimating the Tm.
* @param salt_correction_method The method used for estimating the Tm (melting temperature) between the primers and their corresponding * @param salt_correction_method The method used for estimating the Tm (melting temperature) between the primers and their corresponding
* target sequences. SANTALUCIA: 1, or OWCZARZY: 2. * target sequences. SANTALUCIA: 1, or OWCZARZY: 2.
* @param keep_nucleotides The number of nucleotides to keep on each side of the in silico amplified sequences * @param keep_nucleotides The number of nucleotides to keep on each side of the in silico amplified sequences, not including primers (primers automatically entirely kept if > 0).
* (already including the amplified DNA fragment plus the two target sequences of the primers). * @param keep_primers Whether primers are kept attached to the output sequences.
* @param kingdom_mode Whether the kingdom or the superkingdom informations should be printed to the output. * @param kingdom_mode Whether the kingdom or the superkingdom informations should be printed to the output.
* *
* @returns A value indicating the success of the operation. * @returns A value indicating the success of the operation.
...@@ -121,6 +121,7 @@ int obi_ecopcr(const char* i_dms_name, ...@@ -121,6 +121,7 @@ int obi_ecopcr(const char* i_dms_name,
double salt_concentration, double salt_concentration,
int salt_correction_method, int salt_correction_method,
int keep_nucleotides, int keep_nucleotides,
bool keep_primers,
bool kingdom_mode); bool kingdom_mode);
#endif /* OBI_ECOPCR_H_ */ #endif /* OBI_ECOPCR_H_ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment