[Seqinr-commits] r2045 - pkg/src
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Mon Jul 3 19:35:33 CEST 2017
Author: jeanlobry
Date: 2017-07-03 19:35:32 +0200 (Mon, 03 Jul 2017)
New Revision: 2045
Modified:
pkg/src/kaks.c
Log:
adding the new argument rmgap to kaks
Modified: pkg/src/kaks.c
===================================================================
--- pkg/src/kaks.c 2017-07-03 17:35:05 UTC (rev 2044)
+++ pkg/src/kaks.c 2017-07-03 17:35:32 UTC (rev 2045)
@@ -8,13 +8,13 @@
int fastlwl(char **, int, int, double **, double **, double **, double **, double **, double **, double **, double **,
double **, double **, double **, double **, double **,double **, double **,double **,double **, double **,double **,double **, double **,double **);
-SEXP kaks(SEXP sequences, SEXP nbseq, SEXP debugkaks)
+SEXP kaks(SEXP sequences, SEXP nbseq, SEXP debugkaks, SEXP gaprm)
{
char **seqIn; /* local working copy of sequences */
char **seq; /* pointer to original sequences from R object */
double *tl0[64], *tl1[64], *tl2[64], *tti0[64], *tti1[64], *tti2[64], *ttv0[64], *ttv1[64], *ttv2[64];
int i, j, totseqs, lgseq, n;
- int debugon;
+ int debugon, option;
double *rl[21];
double **ka, **ks, **vka, **vks;
double **l0, **l2,**l4;
@@ -75,6 +75,7 @@
debugon = INTEGER_VALUE(debugkaks);
totseqs = INTEGER_VALUE(nbseq);
+ option = INTEGER_VALUE(gaprm);
if(debugon) Rprintf("C> mode degug is on at C level with %d sequences\n", totseqs);
@@ -196,7 +197,7 @@
PROTECT(ra0 = NEW_NUMERIC(totseqs*totseqs));
PROTECT(ra2 = NEW_NUMERIC(totseqs*totseqs));
PROTECT(ra4 = NEW_NUMERIC(totseqs*totseqs));
- PROTECT(rb0 = NEW_NUMERIC(totseqs*totseqs));
+ PROTECT(rb0 = NEW_NUMERIC(totseqs*totseqs));
PROTECT(rb2 = NEW_NUMERIC(totseqs*totseqs));
PROTECT(rb4 = NEW_NUMERIC(totseqs*totseqs));
@@ -258,7 +259,7 @@
/* */
/******************************************************************************/
- reresh(seqIn,totseqs,0);
+ reresh(seqIn, totseqs, option); /* seqIn est modifié par reresh */
for(i = 0 ; i < totseqs ; i++){
if(debugon) Rprintf("reresh-->%s<--\n", seqIn[i]);
@@ -1073,58 +1074,61 @@
void reresh(char** seq, int nbseq, int option){
-/* Si option = 0, toutes les positions avec au moins un gap sont eliminees */
-
+/* Si option = 0, toutes les positions avec au moins un gap sont éliminées.
+ Sinon, seules les positions avec uniquement des gaps sont éliminées */
int lgseq, l, drapeau, i, j, k;
char **seqref;
- seqref = (char **) R_alloc(nbseq, sizeof(char *));
-
- lgseq = strlen(seq[1]);
+/* Allocation dynamique du tableau seqref de l'alignement */
- for(i = 0 ; i < nbseq ; i++){
- seqref[i] = (char*) R_alloc(lgseq + 1, sizeof(char));
- }
+ seqref = (char **) R_alloc(nbseq, sizeof(char *));
+ lgseq = strlen(seq[1]);
+ for(i = 0 ; i < nbseq ; i++){
+ seqref[i] = (char*) R_alloc(lgseq + 1, sizeof(char));
+ }
+ l = -1; /* position de la colonne courante dans seqref */
+ if (option == 0){
+ for(i = 0 ; i < lgseq ; i++){
+ drapeau = 0; /* 0 si pas de gap */
+ for(j = 0 ; j < nbseq; j++){
+ if (*(seq[j] + i) == '-') drapeau = 1;
+ }
+ if (drapeau == 0){ /* on recopie la colonne i de seq dans la colonne l de seqref */
+ l++;
+ for(k = 0 ; k < nbseq ; k++) *(seqref[k] + l) = *(seq[k] + i);
+ }
+ }
+ }
+ else{
+ for(i = 0 ; i < lgseq ; i++){
+ drapeau = 0; /* 1 au premier non gap */
+ for(j = 0 ; j < nbseq ; j++){
+ if (*(seq[j] + i) != '-') {
+ drapeau = 1;
+ break;
+ }
+ }
+ if (drapeau == 1){ /* on recopie la colonne i de seq dans la colonne l de seqref */
+ l++;
+ for(k = 0 ; k < nbseq ; k++) *(seqref[k] + l) = *(seq[k] + i);
+ }
+ }
+ }
- l=-1;
- if (option==0){
- for(i=0;i<lgseq;i++){
- drapeau=0;
- for(j=0;j<nbseq;j++){
- if (*(seq[j]+i)=='-') drapeau=1;
- }
- if (drapeau==0){
- l++;
- for(k=0;k<nbseq;k++) *(seqref[k]+l)=*(seq[k]+i);
- }
- }
- }
- else{
- for(i=0;i<lgseq;i++){
- drapeau=0;
- for(j=0;j<nbseq;j++){
- if (*(seq[j]+i)!='-') {
- drapeau=1;
- break;
- }
- }
- if (drapeau==1){
- l++;
- for(k=0;k<nbseq;k++) *(seqref[k]+l)=*(seq[k]+i);
- }
- }
- }
- for(i=0;i<nbseq;i++){
- for (j=l+1;j<lgseq;j++) {
- *(seqref[i]+j)='\0';
- }
- }
- for (i=0;i<nbseq;i++) {
- for (j=0;j<lgseq;j++){
- *(seq[i]+j)=*(seqref[i]+j);
- }
- }
+/* Ajout de caractères nuls en fin d'alignement dans seqref */
+ for(i = 0 ; i < nbseq ; i++){
+ for(j = l + 1 ; j < lgseq ; j++) {
+ *(seqref[i] + j) = '\0';
+ }
+ }
+
+/* Recopie de seqref dans seq */
+ for(i = 0 ; i < nbseq ; i++) {
+ for(j = 0 ; j < lgseq ; j++){
+ *(seq[i] + j) = *(seqref[i] + j);
+ }
+ }
}
More information about the Seqinr-commits
mailing list