Gk-arrays
Efficient read indexing
readsReader.h
00001 /******************************************************************************
00002 *                                                                             *
00003 *  Copyright © 2010-2013 -- IRB/INSERM                                        *
00004 *                           (Institut de Recherches en Biothérapie /          *
00005 *                           Institut National de la Santé et de la Recherche  *
00006 *                           Médicale)                                         *
00007 *                           LIFL/INRIA                                        *
00008 *                           (Laboratoire d'Informatique Fondamentale de       *
00009 *                           Lille / Institut National de Recherche en         *
00010 *                           Informatique et Automatique)                      *
00011 *                           LIRMM/CNRS                                        *
00012 *                           (Laboratoire d'Informatique, de Robotique et de   *
00013 *                           Microélectronique de Montpellier /                *
00014 *                           Centre National de la Recherche Scientifique)     *
00015 *                           LITIS                                             *
00016 *                           (Laboratoire d'Informatique, du Traitement de     *
00017 *                           l'Information et des Systèmes).                   *
00018 *                                                                             *
00019 *                                                                             *
00020 *  Auteurs/Authors: Nicolas PHILIPPE <nicolas.philippe@lirmm.fr>              *
00021 *                   Mikaël SALSON    <mikael.salson@lifl.fr>                  *
00022 *                   Thierry LECROQ   <thierry.lecroq@univ-rouen.fr>           *
00023 *                   Martine LÉONARD  <Martine.Leonard@univ-rouen.fr>          *
00024 *                   Éric RIVALS      <eric.rivals@lirmm.fr>                   *
00025 *                                                                             *
00026 *  Programmeurs                                                               *
00027 *      /Progammers: Nicolas PHILIPPE <nicolas.philippe@lirmm.fr>              *
00028 *                   Mikaël SALSON    <mikael.salson@lifl.fr>                  *
00029 *                   Jérôme AUDOUX    <jerome.audoux@etud.univ-montp2.fr>      *
00030 *  with additional contribution for the packaging of:                         *
00031 *                   Alban MANCHERON  <alban.mancheron@lirmm.fr>               *
00032 *                                                                             *
00033 *  Contact:         Gk-Arrays list   <crac-gkarrays@lists.gforge.inria.fr>    *
00034 *                                                                             *
00035 *  -------------------------------------------------------------------------  *
00036 *                                                                             *
00037 *  Ce fichier fait partie de la librairie Gk-arrays.                          *
00038 *                                                                             *
00039 *  La librairie Gk-arrays  a  pour objectif d'indexer de grands ensembles de  *
00040 *  lectures de séquences issues du séquençage haut-débit.                     *
00041 *                                                                             *
00042 *  Ce logiciel est régi par la licence CeCILL-C soumise au droit français et  *
00043 *  respectant les principes  de diffusion des logiciels libres.  Vous pouvez  *
00044 *  utiliser, modifier et/ou redistribuer ce programme sous les conditions de  *
00045 *  la licence CeCILL-C telle que diffusée par le CEA, le CNRS et l'INRIA sur  *
00046 *  le site "http://www.cecill.info".                                          *
00047 *                                                                             *
00048 *  En contrepartie de l'accessibilité au code source et des droits de copie,  *
00049 *  de modification et de redistribution accordés par cette licence, il n'est  *
00050 *  offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,  *
00051 *  seule une responsabilité  restreinte pèse  sur l'auteur du programme,  le  *
00052 *  titulaire des droits patrimoniaux et les concédants successifs.            *
00053 *                                                                             *
00054 *  À  cet égard  l'attention de  l'utilisateur est  attirée sur  les risques  *
00055 *  associés  au chargement,  à  l'utilisation,  à  la modification  et/ou au  *
00056 *  développement  et à la reproduction du  logiciel par  l'utilisateur étant  *
00057 *  donné  sa spécificité  de logiciel libre,  qui peut le rendre  complexe à  *
00058 *  manipuler et qui le réserve donc à des développeurs et des professionnels  *
00059 *  avertis  possédant  des  connaissances  informatiques  approfondies.  Les  *
00060 *  utilisateurs  sont donc  invités  à  charger  et  tester  l'adéquation du  *
00061 *  logiciel  à leurs besoins  dans des conditions  permettant  d'assurer  la  *
00062 *  sécurité de leurs systêmes et ou de leurs données et,  plus généralement,  *
00063 *  à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.         *
00064 *                                                                             *
00065 *  Le fait  que vous puissiez accéder  à cet en-tête signifie  que vous avez  *
00066 *  pris connaissance de la licence CeCILL-C, et que vous en avez accepté les  *
00067 *  termes.                                                                    *
00068 *                                                                             *
00069 *  -------------------------------------------------------------------------  *
00070 *                                                                             *
00071 *  This File is part of the Gk-arrays library.                                *
00072 *                                                                             *
00073 *  The Gk-arrays library aims at indexing k-factors from a huge set of        *
00074 *  sequencing reads.                                                          *
00075 *                                                                             *
00076 *  This software is governed by the CeCILL-C license under French law and     *
00077 *  abiding by the rules of distribution of free software. You can use,        *
00078 *  modify and/ or redistribute the software under the terms of the CeCILL-C   *
00079 *  license as circulated by CEA, CNRS and INRIA at the following URL          *
00080 *  "http://www.cecill.info".                                                  *
00081 *                                                                             *
00082 *  As a counterpart to the access to the source code and rights to copy,      *
00083 *  modify and redistribute granted by the license, users are provided only    *
00084 *  with a limited warranty and the software's author, the holder of the       *
00085 *  economic rights, and the successive licensors have only limited            *
00086 *  liability.                                                                 *
00087 *                                                                             *
00088 *  In this respect, the user's attention is drawn to the risks associated     *
00089 *  with loading, using, modifying and/or developing or reproducing the        *
00090 *  software by the user in light of its specific status of free software,     *
00091 *  that may mean that it is complicated to manipulate, and that also          *
00092 *  therefore means that it is reserved for developers and experienced         *
00093 *  professionals having in-depth computer knowledge. Users are therefore      *
00094 *  encouraged to load and test the software's suitability as regards their    *
00095 *  requirements in conditions enabling the security of their systems and/or   *
00096 *  data to be ensured and, more generally, to use and operate it in the same  *
00097 *  conditions as regards security.                                            *
00098 *                                                                             *
00099 *  The fact that you are presently reading this means that you have had       *
00100 *  knowledge of the CeCILL-C license and that you accept its terms.           *
00101 *                                                                             *
00102 ******************************************************************************/
00103 
00104 #ifndef READSREADER_H
00105 #define READSREADER_H
00106 
00107 #include <iterator>
00108 #include <zlib.h>
00109 #include "kseq/kseq.h"
00110 
00111 KSEQ_INIT(gzFile, gzread)
00112 
00113 namespace gkarrays {
00120   class readIterator: public std::iterator<std::forward_iterator_tag, kseq_t> {
00121   bool warningsVisible;
00122   public:
00126   virtual ~readIterator(){}
00127 
00131   virtual readIterator& operator++() = 0;
00132 
00136   virtual kseq_t& operator*() = 0;
00137 
00141   virtual size_t getLength() = 0;
00142 
00146   virtual char *getName() = 0;
00147 
00151   virtual char *getQuality() = 0;
00152 
00156   virtual uint getReadNumber() = 0;
00157 
00161   virtual char *getSequence() = 0;
00162 
00166   virtual bool isFinished() = 0;
00167 
00172   bool printWarnings();
00173 
00177   void setPrintWarnings(bool isVisible);
00178   };
00179 
00186   class singleReadIterator: public readIterator {
00187   uint k;
00188   uint length;
00189   kseq_t *seq;
00190   bool finished;
00191   bool filenameConstructor;
00192   gzFile readsFile;
00193   bool autoDiscard; // if autoDiscard is true, the iterator will skip bad reads
00194   uint tagNumber;
00195   public:
00206   singleReadIterator(char* filename, uint k=0, uint length=0, bool printWarnings=false, bool autoDiscard=true, bool autoFirstIteration=true);
00207 
00214   singleReadIterator(kseq_t* seq, uint k=0, uint length=0);
00215 
00219   singleReadIterator(const singleReadIterator& mit);
00220 
00224   ~singleReadIterator();
00225 
00229   virtual readIterator& operator++();
00233   virtual singleReadIterator operator++(int);
00234 
00235   virtual bool operator==(const singleReadIterator& rhs);
00236   virtual bool operator!=(const singleReadIterator& rhs);
00237   virtual kseq_t& operator*();
00238 
00242   virtual char *getName();
00243 
00247   virtual char *getQuality();
00248 
00252   virtual char *getSequence();
00253 
00257   virtual uint getReadNumber();
00258 
00262   virtual size_t getLength();
00263 
00267   virtual bool isFinished();
00268 
00272   bool isDiscarded();
00273 
00277   void setAutoDiscard(bool value);
00278 
00279   };
00280 
00287   class pairedEndReadIterator: public readIterator {
00288   singleReadIterator *readIterator1;
00289   singleReadIterator *readIterator2;
00290   bool is_it1CurrentIterator;
00291   uint k;
00292   uint length;
00293 
00294   public:
00303   pairedEndReadIterator(char* filename1, char* filename2, uint k=0, uint length=0, bool printWarnings=false);
00304 
00308   pairedEndReadIterator(const pairedEndReadIterator& mit);
00309   
00313   virtual ~pairedEndReadIterator();
00314 
00318   virtual readIterator& operator++();
00322   virtual pairedEndReadIterator operator++(int);
00323   virtual bool operator==(const pairedEndReadIterator& rhs);
00324   virtual bool operator!=(const pairedEndReadIterator& rhs);
00325   virtual kseq_t& operator*();
00326 
00330   virtual size_t getLength();
00331 
00335   virtual char *getName();
00336 
00340   readIterator& getPair();
00341 
00345   virtual char *getQuality();
00346 
00350   virtual uint getReadNumber();
00351 
00355   virtual char *getSequence();
00356 
00360   virtual bool isFinished();
00361   
00366   bool isTheFirstMemberOfPair();
00367 
00368   private:
00369 
00373   singleReadIterator *getCurrentReadIterator();
00374   };
00375 
00381   class readsReader {
00382 
00383   char *filename1;
00384   char *filename2; // in case of paired end;
00385   uint k;
00386   uint length;
00387   bool is_pairedEnd;
00388 
00389   public :
00400   readsReader(char *filename, uint k=0, uint length=0);
00401 
00413   readsReader(char *filename1, char *filename2, uint k=0, uint length=0); 
00414 
00419   readIterator *begin(bool printWarnings=false);
00420 
00424   bool isPairedEnd();
00425 
00426   };
00427 }
00428 
00429 #endif
 All Classes Functions