From 166a2d990b5c17fbe594b6a897f9f8b389aaf88b Mon Sep 17 00:00:00 2001
From: Veronique Legrand <vlegrand@pasteur.fr>
Date: Thu, 28 Apr 2022 18:03:29 +0200
Subject: [PATCH] work in progress; adding -p option to be aple to process PE
 separately in some cases

---
 src/ROCKparams.cpp | 5 ++++-
 src/ROCKparams.h   | 2 ++
 src/read_utils.cpp | 4 ++--
 src/read_utils.h   | 2 +-
 4 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/ROCKparams.cpp b/src/ROCKparams.cpp
index 680bb6e..f46477b 100755
--- a/src/ROCKparams.cpp
+++ b/src/ROCKparams.cpp
@@ -324,7 +324,7 @@ void ROCKparams::initFromMainOptsArgs(int argc,char ** argv) {
     // static int PE_separately=1;
     float proba=k_max_collision_proba;
 
-    while((i = getopt(argc, argv, "i:o:l:k:c:C:n:vhq:m:f:")) != -1) {
+    while((i = getopt(argc, argv, "i:o:l:k:c:C:n:vhpq:m:f:")) != -1) {
         switch(i) {
             case 0:
                 break;
@@ -369,6 +369,9 @@ void ROCKparams::initFromMainOptsArgs(int argc,char ** argv) {
             	char * t;
             	//cout<<optarg<<endl;
                 nb_k_mers=strtoul(optarg,&t,10);break; // number of distinct k-mers
+            case 'p':
+            	process_PE_separately=1;
+            	break;
             case 'v':
                 verbose_mode=1;
                 break;
diff --git a/src/ROCKparams.h b/src/ROCKparams.h
index bea282b..137a638 100755
--- a/src/ROCKparams.h
+++ b/src/ROCKparams.h
@@ -70,6 +70,7 @@ class ROCKparams{
     unsigned long nb_k_mers; // expected number of k-mers in input data if specified by the user.
     int k; // size of the k-mers
     int verbose_mode;
+    int process_PE_separately;
     std::string input_file,output_file;
 
     std::vector<IO_fq_files> single_files;
@@ -119,6 +120,7 @@ public:
         qual_thres.nucl_score_threshold=k_phred_32;
         qual_thres.k=k;
         verbose_mode=0;
+        process_PE_separately=0;
         cms_size=0;
         expected_collision_proba=0.0; //! collision probability that is computed at the beginning of ROCK from the expected number of distinct k-mers provided by the user.
         parms.max_filter_size=getNodePhysMemory()/100.0*90-defaultGRPMAXSize; // Prefer not to use all the machine's memory
diff --git a/src/read_utils.cpp b/src/read_utils.cpp
index 7f71a4f..5770ce6 100644
--- a/src/read_utils.cpp
+++ b/src/read_utils.cpp
@@ -149,7 +149,7 @@ void getDNASeqstr(FqBaseBackend* fq_files_be [],
 
 }
 
-void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2]) {
+void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2], int process_PE_separately) {
     int nb_expected_k_mers,nb_expected_k_mers_PE1,nb_expected_k_mers_PE2=0;
     nb_expected_k_mers_PE1=a_seqs[0].length+1-k;
     nbrKmerDecompo.idx_start_PE2=0;
@@ -162,7 +162,7 @@ void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKme
     read_p.getKMerNumbers(start_dna_str,a_seqs[0].length,nbrKmerDecompo.single_or_PE_val);
 
     if (a_seqs[1].length) { // case of PE reads
-    	nbrKmerDecompo.idx_start_PE2=nb_expected_k_mers_PE1;
+    	if (process_PE_separately) nbrKmerDecompo.idx_start_PE2=nb_expected_k_mers_PE1;
         start_dna_str=a_seqs[1].fq_record_buf+a_seqs[1].start_idx;
         read_p.getKMerNumbers(start_dna_str,a_seqs[1].length,nbrKmerDecompo.single_or_PE_val);
     }
diff --git a/src/read_utils.h b/src/read_utils.h
index aaf064f..c9b6aec 100644
--- a/src/read_utils.h
+++ b/src/read_utils.h
@@ -36,6 +36,6 @@ void getDNASeqstr(FqBaseBackend* [],
 
 void init_DnaSeqStr(DnaSeqStr * dna_seq);
 
-void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2]);
+void decomposeReadInKMerNums(ReadProcessor& read_p, T_read_numericValues& nbrKmerDecompo,int k,DnaSeqStr a_seqs[2],int process_PE_separately=0);
 
 #endif /* READ_UTILS_H_ */
-- 
GitLab