Gk-arrays
Efficient read indexing
utils.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 /*
00105  * =============================================
00106  *
00107  * $Id: utils.h 397 2011-04-14 08:47:49Z nphilippe $
00108  *
00109  * =============================================
00110  */
00111  
00112 #ifndef UTILS_H
00113 #define UTILS_H
00114 
00115 #ifdef HAVE_CONFIG_H
00116 #  include <config.h>
00117 #endif
00118 #include <gkArraysTypes.h>
00119 #include <cstdlib>
00120 #include <stdexcept>
00121 #include <cassert>
00122 
00123 #ifndef NDEBUG
00124 #define PRINT_VAR(v) std::cerr << #v << " = " << v << std::endl;
00125 #define ASSERT_MSG(condition, message) \
00126   if (!(condition)) { std::cerr << message << std::endl; assert(condition); }
00127 #else
00128 #define ASSERT_MSG(condition, message) ((void)0)
00129 #define PRINT_VAR(v) ((void)0)
00130 
00131 #endif
00132 
00133 namespace gkarrays {
00134 
00135   template <typename T>
00136   inline T *Malloc() {
00137     T *ptr;
00138     if (!(ptr = (T *) malloc(sizeof(T)))) {
00139       throw std::bad_alloc();
00140     }
00141     return ptr;
00142   }
00143 
00144   template <typename T>
00145   inline T *Calloc(size_t nb) {
00146     T *ptr;
00147     if (!(ptr = (T *) calloc(nb, sizeof(T)))) {
00148       throw std::bad_alloc();
00149     }
00150     return ptr;
00151   }
00152 
00153   template <typename T>
00154   inline T *Realloc(T *ptr, size_t nb) {
00155     if (!(ptr = (T *) realloc((void *) ptr, nb * sizeof(T)))) {
00156       throw std::bad_alloc();
00157     }
00158     return ptr;
00159   }
00160 
00161   int comparUint(const void *a1, const void* a2);
00162 
00163   int comparUintSA(const void *a1, const void* a2);
00164 
00165   uint convNuc(char nuc);
00166 
00167   char intToNuc(uint c);
00168 
00176   void dnaFiltration(char *, uintSA);
00177 
00178   uintSA DNAtoInt(char *dna, uintSA dna_length);
00179 
00180   void intToDNA(uint64 code, uint dna_length, char *dna);
00181   
00196   uint64 factorsToInt(uintSA pos, uchar *dna, uint length);
00197 
00206   uint64 factorsToIntNoStranded(uintSA pos, uchar *dna, uint length);
00207 
00213   uint64 intRevcomp(uint64 factor,  uint length);
00214 
00220   inline uintSA complementaryNuc(int i){
00221     return i ^ 3;
00222   }
00223 
00224 }
00225 #endif
00226 
00227 // Local Variables:
00228 // mode:c++
00229 // End:
 All Classes Functions