Gk-arrays
Efficient read indexing
|
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