Gk-arrays
Efficient read indexing
gkArrays.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 GKARRAYS_H
00105 #define GKARRAYS_H
00106 
00107 #include <utility>
00108 #ifdef HAVE_CONFIG_H
00109 #  include <config.h>
00110 #endif
00111 #include "gkArraysTypes.h"
00112 #include "solArray.h"
00113 
00114 #include "sux/rank9b.h"
00115 #include "readsReader.h"
00116 
00117 namespace gkarrays {
00118 
00119   extern "C" {
00120     /* One can use this function to test the library availability */
00121     char *libGkArraysVersion();
00122   }
00123 
00124   class gkArrays {
00125   private:
00126     uchar *alltags; 
00127     uintSA nb_tags;
00128     SolArray *gkSA;
00129     SolArray *gkISA;
00130     SolArray *gkCFPS;
00131  
00132     uint threshold;
00133     bool use_bitvector;
00134     uint tag_length;
00135     uint64_t *read_lengths;
00136     rank9b *read_lengths_select;
00137     rank9b *read_lengths_rank;
00138 
00139     readsReader *reads;
00140 
00141     bool is_large;
00142     bool is_stranded;
00143     uint nb_threads;
00144 
00145   public:
00164     gkArrays(char *tags_file, uint threshold, bool use_bitvector=false, uint tag_length=0, bool stranded=false,uint nb_threads=1);
00165 
00185     gkArrays(char *tags_file1, char *tags_file2, uint threshold, bool use_bitvector=false, uint tag_length=0, bool stranded=false,uint nb_threads=1);
00186 
00187     ~gkArrays();
00188 
00194     static bool isDiscarded(uint actual_length, uint theoretical_length=0, uint k=0);
00195 
00206     uintSA convertPposToQpos(uintSA i);
00207 
00214     uintSA getEndPosOfTagNum(uint tag_num);
00215 
00221     uintSA getGkCFA(uintSA i);
00222 
00227     uintSA getGkCFALength();
00228 
00234     uintSA getGkISA(uintSA i);
00240     uintSA getGkSA(uintSA i);
00241 
00245     uintSA getGkSALength();
00246 
00251     uintSA getNbPposition(uintSA nb_reads);
00252 
00256     uint getNbTags();
00257 
00269     uint getNbTagsWithFactor(uint tag_num, uint pos_factor, bool multiplicity=0);
00270 
00275     uint getNbThreads();
00276 
00282     uint getPair(uint i);
00283 
00288     uintSA getPosInCommon(uint tag_num,uint pos_factor); 
00289     
00293     readsReader *getReads();
00294   
00301     uintSA getStartPosOfTagNum(uint tag_num);
00302 
00308     uintSA getStartQPosOfTagNum(uint tag_num);
00309   
00317     uint *getSupport(uint i);
00318 
00323     uint getSupportLength(uint i=0);
00324 
00329     char *getTag(uint i);
00330 
00335     uint getTagLength(uint i=0);
00336 
00343     char *getTagFactor(uint i, uint p, uint l);
00344 
00351     uint getTagNum(uintSA pos);
00352 
00360     std::pair<uint, uint> getTagNumAndPosFromAbsolutePos(uintSA pos);
00361 
00369     uint *getTagNumWithFactor(uint tag_num, uint pos_factor);
00370 
00381     std::pair <uint, uint> *getTagsWithFactor(uint tag_num, uint pos_factor);
00382 
00392     std::pair <uint, uint> *getTagsWithFactor(char *factor, uint factor_length,
00393                           uint &nb_fact);
00394 
00402     char *getTextFactor(uintSA pos, uint length);
00403 
00407     uint getThreshold();
00408   
00413     array_type getType();
00414 
00418     bool isLarge();
00419 
00424     bool isPposition(uintSA pos);
00425 
00431     bool isStranded();
00432 
00438     bool isTheFirstMemberOfPair(uint i);
00439 
00440     private:
00441 
00446     void init();
00447   };
00448 
00449 }
00450 #endif
00451 
00452 // Local Variables:
00453 // mode:c++
00454 // End:
 All Classes Functions