Add option to log memory statistics during primer identifications
git-svn-id: https://www.grenoble.prabi.fr/svn/LECASofts/ecoPrimers/trunk@208 60f365c0-8329-0410-b2a4-ec073aeeaa1d
This commit is contained in:
BIN
src/ecoPrimer
Executable file
BIN
src/ecoPrimer
Executable file
Binary file not shown.
@ -97,8 +97,9 @@ static void ExitUsage(int stat)
|
|||||||
|
|
||||||
void initoptions(poptions_t options)
|
void initoptions(poptions_t options)
|
||||||
{
|
{
|
||||||
|
options->statistics=FALSE;
|
||||||
options->lmin=0; //< Amplifia minimal length
|
options->lmin=0; //< Amplifia minimal length
|
||||||
options->lmax=0; //< Amplifia maximal length
|
options->lmax=1000; //< Amplifia maximal length
|
||||||
options->error_max=3; //**< maximum error count in fuzzy search
|
options->error_max=3; //**< maximum error count in fuzzy search
|
||||||
options->primer_length=18; //**< minimal length of the primers
|
options->primer_length=18; //**< minimal length of the primers
|
||||||
options->restricted_taxid=NULL; //**< limit amplification below these taxid
|
options->restricted_taxid=NULL; //**< limit amplification below these taxid
|
||||||
@ -441,9 +442,15 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
initoptions(&options);
|
initoptions(&options);
|
||||||
|
|
||||||
while ((carg = getopt(argc, argv, "hcUDSd:l:L:e:i:r:q:3:s:x:t:O:")) != -1) {
|
while ((carg = getopt(argc, argv, "hvcUDSd:l:L:e:i:r:q:3:s:x:t:O:")) != -1) {
|
||||||
|
|
||||||
switch (carg) {
|
switch (carg) {
|
||||||
|
/* ---------------------------- */
|
||||||
|
case 'v': /* set in single strand mode */
|
||||||
|
/* ---------------------------- */
|
||||||
|
options.statistics=TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
/* -------------------- */
|
/* -------------------- */
|
||||||
case 'd': /* database name */
|
case 'd': /* database name */
|
||||||
/* -------------------- */
|
/* -------------------- */
|
||||||
|
15
src/libecoPCR/ecoError.P
Normal file
15
src/libecoPCR/ecoError.P
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ecoError.o ecoError.P : ecoError.c ecoPCR.h /usr/include/stdio.h \
|
||||||
|
/usr/include/_types.h /usr/include/sys/_types.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/machine/_types.h \
|
||||||
|
/usr/include/i386/_types.h /usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
|
||||||
|
/usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \
|
||||||
|
/usr/include/machine/signal.h /usr/include/i386/signal.h \
|
||||||
|
/usr/include/i386/_structs.h /usr/include/sys/_structs.h \
|
||||||
|
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
|
||||||
|
/usr/include/sys/resource.h /usr/include/machine/endian.h \
|
||||||
|
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
|
||||||
|
/usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h
|
15
src/libecoPCR/ecoIOUtils.P
Normal file
15
src/libecoPCR/ecoIOUtils.P
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ecoIOUtils.o ecoIOUtils.P : ecoIOUtils.c ecoPCR.h /usr/include/stdio.h \
|
||||||
|
/usr/include/_types.h /usr/include/sys/_types.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/machine/_types.h \
|
||||||
|
/usr/include/i386/_types.h /usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
|
||||||
|
/usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \
|
||||||
|
/usr/include/machine/signal.h /usr/include/i386/signal.h \
|
||||||
|
/usr/include/i386/_structs.h /usr/include/sys/_structs.h \
|
||||||
|
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
|
||||||
|
/usr/include/sys/resource.h /usr/include/machine/endian.h \
|
||||||
|
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
|
||||||
|
/usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h
|
15
src/libecoPCR/ecoMalloc.P
Normal file
15
src/libecoPCR/ecoMalloc.P
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ecoMalloc.o ecoMalloc.P : ecoMalloc.c ecoPCR.h /usr/include/stdio.h \
|
||||||
|
/usr/include/_types.h /usr/include/sys/_types.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/machine/_types.h \
|
||||||
|
/usr/include/i386/_types.h /usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
|
||||||
|
/usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \
|
||||||
|
/usr/include/machine/signal.h /usr/include/i386/signal.h \
|
||||||
|
/usr/include/i386/_structs.h /usr/include/sys/_structs.h \
|
||||||
|
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
|
||||||
|
/usr/include/sys/resource.h /usr/include/machine/endian.h \
|
||||||
|
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
|
||||||
|
/usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h
|
5
src/libecoPCR/ecodna.P
Normal file
5
src/libecoPCR/ecodna.P
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
ecodna.o ecodna.P : ecodna.c /usr/include/string.h /usr/include/_types.h \
|
||||||
|
/usr/include/sys/_types.h /usr/include/sys/cdefs.h \
|
||||||
|
/usr/include/machine/_types.h /usr/include/i386/_types.h ecoPCR.h \
|
||||||
|
/usr/include/stdio.h /usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h
|
5
src/libecoPCR/ecofilter.P
Normal file
5
src/libecoPCR/ecofilter.P
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
ecofilter.o ecofilter.P : ecofilter.c ecoPCR.h /usr/include/stdio.h \
|
||||||
|
/usr/include/_types.h /usr/include/sys/_types.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/machine/_types.h \
|
||||||
|
/usr/include/i386/_types.h /usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h
|
15
src/libecoPCR/econame.P
Normal file
15
src/libecoPCR/econame.P
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
econame.o econame.P : econame.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \
|
||||||
|
/usr/include/sys/_types.h /usr/include/sys/cdefs.h \
|
||||||
|
/usr/include/machine/_types.h /usr/include/i386/_types.h \
|
||||||
|
/usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/string.h /usr/include/stdlib.h /usr/include/available.h \
|
||||||
|
/usr/include/sys/wait.h /usr/include/sys/signal.h \
|
||||||
|
/usr/include/sys/appleapiopts.h /usr/include/machine/signal.h \
|
||||||
|
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
|
||||||
|
/usr/include/sys/_structs.h /usr/include/machine/_structs.h \
|
||||||
|
/usr/include/mach/i386/_structs.h /usr/include/sys/resource.h \
|
||||||
|
/usr/include/machine/endian.h /usr/include/i386/endian.h \
|
||||||
|
/usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h
|
15
src/libecoPCR/ecorank.P
Normal file
15
src/libecoPCR/ecorank.P
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ecorank.o ecorank.P : ecorank.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \
|
||||||
|
/usr/include/sys/_types.h /usr/include/sys/cdefs.h \
|
||||||
|
/usr/include/machine/_types.h /usr/include/i386/_types.h \
|
||||||
|
/usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/string.h /usr/include/stdlib.h /usr/include/available.h \
|
||||||
|
/usr/include/sys/wait.h /usr/include/sys/signal.h \
|
||||||
|
/usr/include/sys/appleapiopts.h /usr/include/machine/signal.h \
|
||||||
|
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
|
||||||
|
/usr/include/sys/_structs.h /usr/include/machine/_structs.h \
|
||||||
|
/usr/include/mach/i386/_structs.h /usr/include/sys/resource.h \
|
||||||
|
/usr/include/machine/endian.h /usr/include/i386/endian.h \
|
||||||
|
/usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h
|
19
src/libecoPCR/ecoseq.P
Normal file
19
src/libecoPCR/ecoseq.P
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
ecoseq.o ecoseq.P : ecoseq.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \
|
||||||
|
/usr/include/sys/_types.h /usr/include/sys/cdefs.h \
|
||||||
|
/usr/include/machine/_types.h /usr/include/i386/_types.h \
|
||||||
|
/usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/available.h /usr/include/sys/wait.h \
|
||||||
|
/usr/include/sys/signal.h /usr/include/sys/appleapiopts.h \
|
||||||
|
/usr/include/machine/signal.h /usr/include/i386/signal.h \
|
||||||
|
/usr/include/i386/_structs.h /usr/include/sys/_structs.h \
|
||||||
|
/usr/include/machine/_structs.h /usr/include/mach/i386/_structs.h \
|
||||||
|
/usr/include/sys/resource.h /usr/include/machine/endian.h \
|
||||||
|
/usr/include/i386/endian.h /usr/include/sys/_endian.h \
|
||||||
|
/usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h \
|
||||||
|
/usr/include/string.h /usr/include/zlib.h /usr/include/zconf.h \
|
||||||
|
/usr/include/sys/types.h /usr/include/unistd.h \
|
||||||
|
/usr/include/sys/unistd.h /usr/include/sys/select.h \
|
||||||
|
/usr/include/sys/_select.h
|
@ -144,6 +144,7 @@ ecoseq_t *readnext_ecoseq(FILE *f)
|
|||||||
if (comp_status != Z_OK)
|
if (comp_status != Z_OK)
|
||||||
ECOERROR(ECO_IO_ERROR,"I cannot uncompress sequence data");
|
ECOERROR(ECO_IO_ERROR,"I cannot uncompress sequence data");
|
||||||
|
|
||||||
|
// fprintf(stderr,"seq name : %30s seq size : %d\n",seq->DE,seq->SQ_length);
|
||||||
return seq;
|
return seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
src/libecoPCR/ecotax.P
Normal file
15
src/libecoPCR/ecotax.P
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ecotax.o ecotax.P : ecotax.c ecoPCR.h /usr/include/stdio.h /usr/include/_types.h \
|
||||||
|
/usr/include/sys/_types.h /usr/include/sys/cdefs.h \
|
||||||
|
/usr/include/machine/_types.h /usr/include/i386/_types.h \
|
||||||
|
/usr/include/inttypes.h \
|
||||||
|
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdint.h \
|
||||||
|
/usr/include/string.h /usr/include/stdlib.h /usr/include/available.h \
|
||||||
|
/usr/include/sys/wait.h /usr/include/sys/signal.h \
|
||||||
|
/usr/include/sys/appleapiopts.h /usr/include/machine/signal.h \
|
||||||
|
/usr/include/i386/signal.h /usr/include/i386/_structs.h \
|
||||||
|
/usr/include/sys/_structs.h /usr/include/machine/_structs.h \
|
||||||
|
/usr/include/mach/i386/_structs.h /usr/include/sys/resource.h \
|
||||||
|
/usr/include/machine/endian.h /usr/include/i386/endian.h \
|
||||||
|
/usr/include/sys/_endian.h /usr/include/libkern/_OSByteOrder.h \
|
||||||
|
/usr/include/libkern/i386/_OSByteOrder.h /usr/include/alloca.h \
|
||||||
|
/usr/include/machine/types.h /usr/include/i386/types.h
|
@ -70,7 +70,7 @@ typedef struct {
|
|||||||
uint32_t *strictcount;
|
uint32_t *strictcount;
|
||||||
uint32_t inseqcount;
|
uint32_t inseqcount;
|
||||||
uint32_t outseqcount;
|
uint32_t outseqcount;
|
||||||
uint32_t size;
|
uint64_t size;
|
||||||
} wordcount_t, *pwordcount_t;
|
} wordcount_t, *pwordcount_t;
|
||||||
|
|
||||||
|
|
||||||
@ -230,6 +230,7 @@ typedef struct {
|
|||||||
}taxontoamp_t, *ptaxontoamp_t;
|
}taxontoamp_t, *ptaxontoamp_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
bool_t statistics;
|
||||||
uint32_t lmin; //**< Amplifia minimal length
|
uint32_t lmin; //**< Amplifia minimal length
|
||||||
uint32_t lmax; //**< Amplifia maximal length
|
uint32_t lmax; //**< Amplifia maximal length
|
||||||
uint32_t error_max; //**< maximum error count in fuzzy search
|
uint32_t error_max; //**< maximum error count in fuzzy search
|
||||||
|
@ -8,6 +8,41 @@
|
|||||||
#include "ecoprimer.h"
|
#include "ecoprimer.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define RUSAGE_SELF 0
|
||||||
|
#define RUSAGE_CHILDREN -1
|
||||||
|
|
||||||
|
static double timeval_subtract (struct timeval *x, struct timeval *y);
|
||||||
|
|
||||||
|
|
||||||
|
/* Subtract the `struct timeval' values X and Y,
|
||||||
|
Return elapsed secondes as a double. */
|
||||||
|
|
||||||
|
double timeval_subtract (struct timeval *x, struct timeval *y)
|
||||||
|
{
|
||||||
|
struct timeval result;
|
||||||
|
|
||||||
|
/* Perform the carry for the later subtraction by updating y. */
|
||||||
|
if (x->tv_usec < y->tv_usec) {
|
||||||
|
int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
|
||||||
|
y->tv_usec -= 1000000 * nsec;
|
||||||
|
y->tv_sec += nsec;
|
||||||
|
}
|
||||||
|
if (x->tv_usec - y->tv_usec > 1000000) {
|
||||||
|
int nsec = (x->tv_usec - y->tv_usec) / 1000000;
|
||||||
|
y->tv_usec += 1000000 * nsec;
|
||||||
|
y->tv_sec -= nsec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the time remaining to wait.
|
||||||
|
tv_usec is certainly positive. */
|
||||||
|
result.tv_sec = x->tv_sec - y->tv_sec;
|
||||||
|
result.tv_usec = x->tv_usec - y->tv_usec;
|
||||||
|
|
||||||
|
return (double)result.tv_sec + (double)result.tv_usec/1e6;
|
||||||
|
}
|
||||||
|
|
||||||
pwordcount_t initCountTable(pwordcount_t table, uint32_t wordsize, uint32_t circular, uint32_t doublestrand,ecoseq_t *seq)
|
pwordcount_t initCountTable(pwordcount_t table, uint32_t wordsize, uint32_t circular, uint32_t doublestrand,ecoseq_t *seq)
|
||||||
{
|
{
|
||||||
@ -88,11 +123,26 @@ void addSeqToWordCountTable(pwordcount_t table, uint32_t wordsize, uint32_t circ
|
|||||||
pwordcount_t lookforStrictPrimer(pecodnadb_t database, uint32_t seqdbsize,
|
pwordcount_t lookforStrictPrimer(pecodnadb_t database, uint32_t seqdbsize,
|
||||||
uint32_t exampleCount,poptions_t options)
|
uint32_t exampleCount,poptions_t options)
|
||||||
{
|
{
|
||||||
|
struct rusage start;
|
||||||
|
struct rusage usage;
|
||||||
|
double seconde;
|
||||||
|
char *logfilename;
|
||||||
|
FILE *logfile;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
bool_t first=TRUE;
|
bool_t first=TRUE;
|
||||||
pwordcount_t strictprimers=NULL;
|
pwordcount_t strictprimers=NULL;
|
||||||
|
uint64_t totallength=0;
|
||||||
uint32_t sequenceQuorum = (uint32_t)floor((float)exampleCount * options->strict_quorum);
|
uint32_t sequenceQuorum = (uint32_t)floor((float)exampleCount * options->strict_quorum);
|
||||||
|
|
||||||
|
if (options->statistics)
|
||||||
|
{
|
||||||
|
asprintf(&logfilename,"ecoprimer_%d.log",getpid());
|
||||||
|
logfile = fopen(logfilename,"w");
|
||||||
|
fprintf(logfile,"# seq\tlength\tsize\ttime\tspeed\n");
|
||||||
|
fclose(logfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fprintf(stderr," Primers should be at least present in %d/%d example sequences\n",sequenceQuorum,exampleCount);
|
fprintf(stderr," Primers should be at least present in %d/%d example sequences\n",sequenceQuorum,exampleCount);
|
||||||
|
|
||||||
strictprimers = initCountTable(NULL,options->primer_length,
|
strictprimers = initCountTable(NULL,options->primer_length,
|
||||||
@ -101,10 +151,13 @@ pwordcount_t lookforStrictPrimer(pecodnadb_t database, uint32_t seqdbsize,
|
|||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
|
||||||
|
getrusage(RUSAGE_SELF,&start);
|
||||||
|
|
||||||
for (i=0;i<seqdbsize;i++)
|
for (i=0;i<seqdbsize;i++)
|
||||||
{
|
{
|
||||||
if (database[i]->isexample)
|
if (database[i]->isexample)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
strictprimers = initCountTable(strictprimers,options->primer_length,
|
strictprimers = initCountTable(strictprimers,options->primer_length,
|
||||||
@ -125,7 +178,19 @@ pwordcount_t lookforStrictPrimer(pecodnadb_t database, uint32_t seqdbsize,
|
|||||||
sequenceQuorum,
|
sequenceQuorum,
|
||||||
database[i]);
|
database[i]);
|
||||||
};
|
};
|
||||||
|
totallength+=database[i]->SQ_length;
|
||||||
|
getrusage(RUSAGE_SELF,&usage);
|
||||||
|
if (options->statistics)
|
||||||
|
{
|
||||||
|
asprintf(&logfilename,"ecoprimer_%d.log",getpid());
|
||||||
|
logfile = fopen(logfilename,"a");
|
||||||
|
seconde = timeval_subtract(&(usage.ru_utime),&(start.ru_utime)) +
|
||||||
|
timeval_subtract(&(usage.ru_stime),&(start.ru_stime));
|
||||||
|
fprintf(logfile,"%d\t%llu\t%lu\t%8.3f\t%8.3e\n",i,
|
||||||
|
totallength,strictprimers->size*sizeof(int64_t),
|
||||||
|
seconde,seconde/(double)totallength);
|
||||||
|
fclose(logfile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strictprimers->outseqcount++;
|
strictprimers->outseqcount++;
|
||||||
|
Reference in New Issue
Block a user