[med-svn] [Git][med-team/pftools][master] 6 commits: No NMU

Andreas Tille (@tille) gitlab at salsa.debian.org
Thu Sep 23 14:16:48 BST 2021



Andreas Tille pushed to branch master at Debian Med / pftools


Commits:
e47c78ff by Andreas Tille at 2021-09-23T14:12:30+02:00
No NMU

- - - - -
7914e430 by Andreas Tille at 2021-09-23T14:12:55+02:00
routine-update: New upstream version

- - - - -
b51b2b73 by Andreas Tille at 2021-09-23T14:12:57+02:00
New upstream version 3.2.8
- - - - -
ffa54868 by Andreas Tille at 2021-09-23T14:16:46+02:00
Update upstream source from tag 'upstream/3.2.8'

Update to upstream version '3.2.8'
with Debian dir de568aabc83a1a9f325f37bba39d658044ac9b5e
- - - - -
385129de by Andreas Tille at 2021-09-23T14:16:46+02:00
routine-update: Standards-Version: 4.6.0

- - - - -
dbbdfacd by Andreas Tille at 2021-09-23T14:26:08+02:00
Drop patch applied upstream

- - - - -


19 changed files:

- CMakeLists.txt
- + Docker/Dockerfile
- + Docker/README.docker
- README.md
- debian/changelog
- debian/control
- − debian/patches/0001-Harmonize-bin-env-path-Cleaning.patch
- debian/patches/series
- src/C/prg/pfscan.c
- src/C/utils/io.c
- src/C/utils/system.c
- src/Perl/fasta_to_fastq.pl
- src/Perl/make_iupac_cmp.pl
- src/Perl/scramble_fasta.pl
- src/Perl/sort_fasta.pl
- tests/examples/test_V3.sh.cmake
- tests/examples/test_V3_output.sh.cmake
- tests/examples/test_pfsearchV3_iupac.pl.cmake
- tests/examples/test_scan_search.pl.cmake


Changes:

=====================================
CMakeLists.txt
=====================================
@@ -1,10 +1,10 @@
 #########################################################################################
 # PfTools versioning
 #
-SET(VERSION "3.2.6")
+SET(VERSION "3.2.8")
 SET(MAJOR_VERSION "3")
 SET(MINOR_VERSION "2")
-SET(PATCH_VERSION "6")
+SET(PATCH_VERSION "8")
 SET(DATA_PATH "share/data"     CACHE STRING "Installation data folder" )
 SET(DOC_PATH  "share/doc"      CACHE STRING "Installation doc folder" )
 SET(MAN1_PATH "share/man/man1" CACHE STRING "Installation man1 folder" )
@@ -396,7 +396,7 @@ ADD_SUBDIRECTORY(data)
 #########################################################################################
 # Enabling TESTING
 include(CTest)
-SET(TESTS_DIRECTORY "${PROJECT_BINARY_DIR}/Tests" CACHE PATH "Directory for tests")
+SET(TESTS_DIRECTORY "${PROJECT_SOURCE_DIR}/Tests" CACHE PATH "Directory for tests")
 SET(TESTS_DATA_DIR "${PROJECT_SOURCE_DIR}/tests")
 IF (NOT EXISTS "${TESTS_DIRECTORY}" )
 	FILE(MAKE_DIRECTORY "${TESTS_DIRECTORY}" )


=====================================
Docker/Dockerfile
=====================================
@@ -0,0 +1,101 @@
+FROM ubuntu:20.04 AS compile
+
+ARG PFTOOLS_VERSION
+ARG BUILD_DATE
+ENV PFTOOLS_PATH=/var/lib/pftools
+
+RUN echo '# OS update' \
+	&& export DEBIAN_FRONTEND=noninteractive \
+	&& apt-get update -y \
+	&& apt-get install -y --no-install-recommends \
+      build-essential \
+      libpcre++-dev \
+      gfortran \
+      libgfortran5 \
+      ca-certificates \
+      git \
+      cmake \
+      zlib1g-dev \
+      libpng-dev \
+      libfile-slurp-perl \
+	&& echo '# Install Pftools V3' \
+	&& git clone --depth=1 "https://github.com/sib-swiss/pftools3.git" \
+	&& mkdir pftools3/build \
+	&& cd pftools3/build \
+	&& cmake .. -DCMAKE_INSTALL_PREFIX:PATH=$PFTOOLS_PATH -DCMAKE_BUILD_TYPE=Release -DUSE_GRAPHICS=OFF -DUSE_PDF=ON \
+	&& make \
+	&& make install \
+	&& make test \
+	&& gzip -9 $PFTOOLS_PATH/share/man/man5/*.5 $PFTOOLS_PATH/share/man/man1/*.1
+
+
+FROM ubuntu:20.04 AS binary
+
+ARG PFTOOLS_VERSION
+ARG BUILD_DATE
+ENV PFTOOLS_PATH=/var/lib/pftools
+
+# METADATA
+# Use Open Containers Initiative (OCI)
+# See https://rehansaeed.com/docker-labels-depth/
+# See https://github.com/opencontainers/image-spec/blob/master/annotations.md
+# Exist also another structured label initiative: http://label-schema.org/ superceded by OCI now
+LABEL org.opencontainers.image.title="pftools3 - A suite of tools to build and search generalized profiles"
+LABEL org.opencontainers.image.version=$PFTOOLS_VERSION
+LABEL org.opencontainers.image.vendor="SIB Swiss Institute of Bioinformatics"
+LABEL org.opencontainers.image.authors="sebastien.moretti at sib.swiss"
+LABEL org.opencontainers.image.url="https://github.com/sib-swiss/pftools3"
+LABEL org.opencontainers.image.documentation="https://github.com/sib-swiss/pftools3"
+LABEL org.opencontainers.image.licenses="GPL-2.0"
+LABEL org.opencontainers.image.description="pftools3 - A suite of tools to build and search generalized profiles"
+LABEL org.opencontainers.image.created=$BUILD_DATE
+
+COPY --from=compile $PFTOOLS_PATH/ $PFTOOLS_PATH/
+RUN echo '# OS update' \
+	&& export DEBIAN_FRONTEND=noninteractive \
+	&& apt-get update -y \
+	&& apt-get install -y --no-install-recommends \
+	   man-db \
+	   ca-certificates \
+	   libfile-slurp-perl \
+	   libc6 \
+	   libgcc1 \
+	   libgfortran5 \
+	   libpcre3 \
+	   libquadmath0 \
+	&& ln -s $PFTOOLS_PATH/bin/* /usr/local/bin/ \
+	&& ln -s $PFTOOLS_PATH/share/man/man5/* /usr/share/man/man5/ \
+	&& ln -s $PFTOOLS_PATH/share/man/man1/* /usr/share/man/man1/ \
+	&& mandb \
+	&& apt autoremove -y \
+	&& apt-get clean \
+	&& rm -fr /var/lib/apt/lists/* \
+	&& update-ca-certificates
+
+
+# SECURITY
+## Control root access
+ENV USER=pftools3
+RUN groupadd -g 1001 ${USER} && useradd -r -u 1001 -g ${USER} ${USER}
+USER ${USER}
+ENV HOME=/home/${USER}
+WORKDIR ${HOME}
+##Rest of Dockerfile with this user
+ENV LC_ALL="C"
+
+
+#TODO man pages do not work???
+# TEST
+RUN for pl in $PFTOOLS_PATH/bin/*.pl; do perl -cw $pl; done \
+	&& pfscanV3 -h \
+	&& pfscan -h || true \
+	&& echo \
+	&& pfsearchV3 -h \
+	&& pfsearch -h || true
+
+
+HEALTHCHECK CMD pfscanV3 -h || exit 1
+
+
+CMD ["bash"]
+


=====================================
Docker/README.docker
=====================================
@@ -0,0 +1,16 @@
+# Build Docker image
+export PFTOOLS_VERSION=3.2.6
+docker build -t pftools:$PFTOOLS_VERSION --no-cache=true --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') --build-arg PFTOOLS_VERSION=$PFTOOLS_VERSION -f Dockerfile .  2>&1 >pftools.Dockerfile.log
+
+
+# List Docker local images (imported or built)
+docker images
+
+
+# Inspect images
+docker inspect  pftools:$PFTOOLS_VERSION
+
+
+# Run pfscanV3 in the Docker image
+docker run --name pftools --rm -i -t pftools:$PFTOOLS_VERSION  pfscanV3
+


=====================================
README.md
=====================================
@@ -24,13 +24,12 @@ it was originally published in
   A generalized profile syntax for biomolecular sequence motifs
   and its function in automatic sequence interpretation.
   Proc Int Conf Intell Syst Mol Biol. 1994;2:53-61.
-  PubMed PMID: [7584418](https://www.ncbi.nlm.nih.gov/pubmed/7584418) .
+  PubMed PMID: [7584418](https://www.ncbi.nlm.nih.gov/pubmed/7584418).
 
 
 # Command-line tutorial
 
-In the doc/example subdirectory, the [test_V3.sh](https://raw.githubusercontent.com/sib-swiss/pftools3/master/doc/example/test_V3.sh) shell script is a good starting
-point for using pfsearchV3/pfscanV3
+After installation, in the share/examples/ subdirectory, the *test_V3.sh* shell script is a good starting point for using pfsearchV3/pfscanV3.
 
 # Algorithms description
 


=====================================
debian/changelog
=====================================
@@ -1,9 +1,13 @@
-pftools (3.2.6-1.1) UNRELEASED; urgency=medium
+pftools (3.2.8-1) UNRELEASED; urgency=medium
 
-  * Non-maintainer upload.
+  [ Steffen Moeller ]
   * Fix watchfile to detect new versions on github (routine-update)
 
- -- Steffen Moeller <moeller at debian.org>  Thu, 02 Sep 2021 15:07:41 +0200
+  [ Andreas Tille ]
+  * New upstream version
+  * Standards-Version: 4.6.0 (routine-update)
+
+ -- Andreas Tille <tille at debian.org>  Thu, 23 Sep 2021 14:12:55 +0200
 
 pftools (3.2.6-1) unstable; urgency=medium
 


=====================================
debian/control
=====================================
@@ -11,7 +11,7 @@ Build-Depends: debhelper-compat (= 13),
                libpcre3-dev,
                libreadline-dev,
                zlib1g-dev
-Standards-Version: 4.5.1
+Standards-Version: 4.6.0
 Vcs-Browser: https://salsa.debian.org/med-team/pftools
 Vcs-Git: https://salsa.debian.org/med-team/pftools.git
 Homepage: https://github.com/sib-swiss/pftools3


=====================================
debian/patches/0001-Harmonize-bin-env-path-Cleaning.patch deleted
=====================================
@@ -1,265 +0,0 @@
-From 342a8a5730c5b664741dff90a293f35818cb06d1 Mon Sep 17 00:00:00 2001
-From: smoretti <sebastien.moretti at sib.swiss>
-Date: Wed, 16 Dec 2020 18:08:06 +0100
-Subject: [PATCH] Harmonize bin/env path + Cleaning
-
----
- src/Perl/fasta_to_fastq.pl                    |  2 +-
- src/Perl/make_iupac_cmp.pl                    |  2 +-
- src/Perl/scramble_fasta.pl                    |  2 +-
- src/Perl/sort_fasta.pl                        |  2 +-
- tests/examples/test_V3.sh.cmake               | 68 +++++++++----------
- tests/examples/test_V3_output.sh.cmake        |  3 -
- tests/examples/test_pfsearchV3_iupac.pl.cmake |  2 +-
- tests/examples/test_scan_search.pl.cmake      |  2 +-
- 8 files changed, 40 insertions(+), 43 deletions(-)
-
---- a/src/Perl/fasta_to_fastq.pl
-+++ b/src/Perl/fasta_to_fastq.pl
-@@ -1,3 +1,4 @@
-+#!/usr/bin/env perl
- #Copyright (c) 2010 LUQMAN HAKIM BIN ABDUL HADI (csilhah at nus.edu.sg)
- #
- #Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
---- a/src/Perl/make_iupac_cmp.pl
-+++ b/src/Perl/make_iupac_cmp.pl
-@@ -1,4 +1,4 @@
--#!/bin/env perl
-+#!/usr/bin/env perl
- 
- use strict;
- use Getopt::Std;
---- a/src/Perl/scramble_fasta.pl
-+++ b/src/Perl/scramble_fasta.pl
-@@ -1,4 +1,4 @@
--#!/bin/env perl
-+#!/usr/bin/env perl
- 
- use strict;
- 
---- a/src/Perl/sort_fasta.pl
-+++ b/src/Perl/sort_fasta.pl
-@@ -1,4 +1,4 @@
--#!/bin/env perl
-+#!/usr/bin/env perl
- 
- use strict;
- use Getopt::Std;
---- a/tests/examples/test_V3.sh.cmake
-+++ b/tests/examples/test_V3.sh.cmake
-@@ -19,9 +19,9 @@ PFW=$<TARGET_FILE:pfw>
- PTOH=$<TARGET_FILE:ptoh>
- PTOF=$<TARGET_FILE:ptof>
- P2FT=$<TARGET_FILE:2ft> # NB: sh does not allow variable name starting with a digit
-- 
--SORT_PSA=@PERL_SCRIPT_DIR@/sort_fasta.pl # FIXME: use cmake syntax 
--MAKE_IUPAC_CMP=@PERL_SCRIPT_DIR@/make_iupac_cmp.pl # FIXME: use cmake syntax 
-+
-+SORT_PSA=@PERL_SCRIPT_DIR@/sort_fasta.pl # FIXME: use cmake syntax
-+MAKE_IUPAC_CMP=@PERL_SCRIPT_DIR@/make_iupac_cmp.pl # FIXME: use cmake syntax
- SCRAMBLE=@PERL_SCRIPT_DIR@/scramble_fasta.pl # FIXME: use cmake syntax
- 
- CMPDIR=@DATA_DIR@/Matrices
-@@ -29,15 +29,15 @@ TMPDIR=/tmp/test_V3
- mkdir -p $TMPDIR
- 
- #----------------------------------------------------------------------#
--# The PFTOOLS is a powerful software to align biological sequences. 
--# Owing to the 'generalized profile syntax', it allows the fine-tuning 
--# of an alignent scoring system, beyond what is feasible by most other 
--# software. Despite the PFTOOLS are crippled by a lot of legacy code, 
--# they are still extremely useful for precision work . 
-+# The PFTOOLS is a powerful software to align biological sequences.
-+# Owing to the 'generalized profile syntax', it allows the fine-tuning
-+# of an alignent scoring system, beyond what is feasible by most other
-+# software. Despite the PFTOOLS are crippled by a lot of legacy code,
-+# they are still extremely useful for precision work.
- #
- # Nota bene to use this script as a testsuite:
--# (1) The output order of pfsearch is reproducible, as well as the one of 
--#     pfsearchV3 with -t 1. 
-+# (1) The output order of pfsearch is reproducible, as well as the one of
-+#     pfsearchV3 with -t 1.
- # (2) Refrain using any pipe.
- #----------------------------------------------------------------------#
- 
-@@ -45,7 +45,7 @@ mkdir -p $TMPDIR
- # Searching for the occurence of the SH3 domain within the VAV oncogene,
- # using pfsearch V2 ...
- #----------------------------------------------------------------------#
--$PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq 
-+$PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq
- 
- #----------------------------------------------------------------------#
- # ...and using pfsearch V3:
-@@ -53,8 +53,8 @@ $PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq
- $PFSEARCHV3 -n -t 1 -f ./sh3.prf ./VAV_HUMAN.seq
- 
- #----------------------------------------------------------------------#
--# Create a database of sequences and a database of profiles, each one 
--# with two entries. 
-+# Create a database of sequences and a database of profiles, each one
-+# with two entries.
- #----------------------------------------------------------------------#
- cat ./VAV_HUMAN.seq ./VAV_RAT.seq > $TMPDIR/VAV.seq
- cat ./sh2.prf       ./sh3.prf     > $TMPDIR/SHX.prf
-@@ -79,10 +79,10 @@ $PFSEARCHV3 -f -n -t 2 -o 6 ./sh3.prf -f
- $PFSCANV3 -f -n -o 6 $TMPDIR/SHX.prf $TMPDIR/VAV.seq > $TMPDIR/SHX.pfscan3.hit
- 
- #----------------------------------------------------------------------#
--# All these commands produces exactly the same list of matched 
--# sequences, with the same raw scores and coordinates. 
-+# All these commands produces exactly the same list of matched
-+# sequences, with the same raw scores and coordinates.
- #
--# However the output order is not necessarily preserved here. 
-+# However the output order is not necessarily preserved here.
- #
- # Let's verify that the output are comparable after fixing FASTA headers
- #----------------------------------------------------------------------#
-@@ -95,7 +95,7 @@ diff $TMPDIR/SHX.pfscan2.out $TMPDIR/SHX
- diff $TMPDIR/SHX.pfscan2.out $TMPDIR/SHX.pfsearch3.out  # expecting no difference
- 
- #----------------------------------------------------------------------#
--# Pfsearch/pfscan V2 supports the following input formats for sequence: 
-+# Pfsearch/pfscan V2 supports the following input formats for sequence:
- # FASTA, Swiss-Prot and EMBL.
- #----------------------------------------------------------------------#
- $PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq     # FASTA
-@@ -105,10 +105,10 @@ $PFSEARCH ./sh3.prf ./GTPA_HUMAN.dat
- $PFSCAN   ./GTPA_HUMAN.dat ./sh3.prf       # SwissProt
- 
- $PFSEARCH  ./ecp.prf ./CVPBR322.embl       # EMBL
--$PFSCAN    ./CVPBR322.embl ./ecp.prf       # EMBL 
-+$PFSCAN    ./CVPBR322.embl ./ecp.prf       # EMBL
- 
- #----------------------------------------------------------------------#
--# Pfsearch/pfscan V3 supports the following input formats for sequence: 
-+# Pfsearch/pfscan V3 supports the following input formats for sequence:
- # FASTA and FASTQ.
- #----------------------------------------------------------------------#
- $PFSEARCHV3 -n -t 1 -f ./sh3.prf ./VAV_HUMAN.seq # FASTA
-@@ -117,7 +117,7 @@ cat ./CVPBR322.embl \
- | perl -ne 'if(/^ID +(\w+)/){print ">$1\n"}elsif(/^ /){s/[\s\d]+//g;print "$_\n";}' \
- > $TMPDIR/CVPBR322.fa  # Extract FASTA from EMBL
- $PFSEARCHV3 -n -t 1 -f ./ecp.prf $TMPDIR/CVPBR322.fa
--$PFSCANV3   -n -t 1 -f ./ecp.prf $TMPDIR/CVPBR322.fa 
-+$PFSCANV3   -n -t 1 -f ./ecp.prf $TMPDIR/CVPBR322.fa
- 
- $PFSEARCHV3 -n -t 1 -q ./hiv.prf ./hiv.fastq     # FASTQ
- $PFSCANV3   -n -t 1 -q ./hiv.prf ./hiv.fastq     # FASTQ
-@@ -136,8 +136,8 @@ $PFSEARCHV3 -n -fb ./ecp.prf $TMPDIR/CVP
- diff -b $TMPDIR/ecp.CVPBR322.2.hit $TMPDIR/ecp.CVPBR322.3.hit  # expecting no difference
- 
- #----------------------------------------------------------------------#
--# The different PSA (i.e FASTA) output formats differ by the content 
--# their headers. The usage of XPSA (-o 6) is strongly recommended, the 
-+# The different PSA (i.e FASTA) output formats differ by the content
-+# their headers. The usage of XPSA (-o 6) is strongly recommended, the
- # other formats being preserved for legacy.
- #----------------------------------------------------------------------#
- $PFSEARCHV3 -n -f -o 1 -N 15 ./sh3.prf ./VAV_HUMAN.seq | $SORT_PSA -
-@@ -147,10 +147,10 @@ $PFSEARCHV3 -n -f -o 4 -N 15 ./sh3.prf .
- $PFSEARCHV3 -n -f -o 6 -N 15 ./sh3.prf ./VAV_HUMAN.seq | $SORT_PSA - # recommended
- 
- #----------------------------------------------------------------------#
--# Multiple sequence alignment (MSA) can easily be produced from PSA 
-+# Multiple sequence alignment (MSA) can easily be produced from PSA
- # using psa2msa (V2)
- #----------------------------------------------------------------------#
--$PFSEARCHV3 -n -f -o 6 ./ecp.prf $TMPDIR/CVPBR322.fa | $SORT_PSA - | $PSA2MSA 
-+$PFSEARCHV3 -n -f -o 6 ./ecp.prf $TMPDIR/CVPBR322.fa | $SORT_PSA - | $PSA2MSA
- 
- #----------------------------------------------------------------------#
- # V3 has two new output formats: TSV and SAM
-@@ -169,15 +169,15 @@ $PFSEARCHV3 -n -t 1 -q    -o 8 ./hiv.prf
- $PFSEARCHV3 -n -t 1 -q -b -o 8 ./hiv.prf ./hiv.fastq         # FASTQ to SAM
- 
- #----------------------------------------------------------------------#
--# Index can optionaly be used to speed-up database upload for pfsearch. 
--# This should be especially usefull for repetitive database searches 
--# using the heuristic. 
-+# Index can optionaly be used to speed-up database upload for pfsearch.
-+# This should be especially usefull for repetitive database searches
-+# using the heuristic.
- #----------------------------------------------------------------------#
- 
- $PFINDEX -f -o $TMPDIR/CVPBR322.fa.idx $TMPDIR/CVPBR322.fa
- $PFSEARCHV3 -n -f                            -o 7 ./ecp.prf $TMPDIR/CVPBR322.fa | sort > $TMPDIR/A.out    # FASTA to TSV
- $PFSEARCHV3 -n -f -i $TMPDIR/CVPBR322.fa.idx -o 7 ./ecp.prf $TMPDIR/CVPBR322.fa | sort > $TMPDIR/B.out    # FASTA to TSV
--diff $TMPDIR/A.out $TMPDIR/B.out 
-+diff $TMPDIR/A.out $TMPDIR/B.out
- 
- $PFINDEX -q -o $TMPDIR/hiv.fastq.idx ./hiv.fastq
- $PFSEARCHV3 -n -q -b -o 8                          ./hiv.prf ./hiv.fastq | sort > $TMPDIR/A.out
-@@ -185,23 +185,23 @@ $PFSEARCHV3 -n -q -b -o 8 -i $TMPDIR/hiv
- diff $TMPDIR/A.out $TMPDIR/B.out
- 
- #----------------------------------------------------------------------#
--# Profile and/or sequence can be reversed on the fly. If both are 
-+# Profile and/or sequence can be reversed on the fly. If both are
- # reversed the match score is the same
- #----------------------------------------------------------------------#
- $PFSEARCHV3 -f -a       rand_dna.prf rand_dna.seq
- $PFSEARCHV3 -f -a -r -R rand_dna.prf rand_dna.seq
- 
- #----------------------------------------------------------------------#
--# There is a much better support of rev/comp search in DNA sequences, 
-+# There is a much better support of rev/comp search in DNA sequences,
- # featuring the full IUPAC code.
- # To illustrate these capabilities, let build a profile for bacterial
--# 16S sequence, starting from the Rfam seed RF00177.msa. First create 
-+# 16S sequence, starting from the Rfam seed RF00177.msa. First create
- # an adhoc substitution matrix
- #----------------------------------------------------------------------#
- $MAKE_IUPAC_CMP -M 20 -m -30 > $TMPDIR/iupac20-30.cmp
- 
- #----------------------------------------------------------------------#
--# ... let build a profile for bacterial 16S sequence, starting from 
-+# ... let build a profile for bacterial 16S sequence, starting from
- # the Rfam seed RF00177.msa.
- #----------------------------------------------------------------------#
- cat ./RF00177.msa \
-@@ -224,7 +224,7 @@ cat ./SRR9619541.sample.fastq \
- > $TMPDIR/permut.fa
- 
- # $PFCALIBRATEV3 -F $TMPDIR/permut.fa $TMPDIR/16S.prf.tmp > $TMPDIR/16S.prf
--# $PFSEARCHV3 -t 1 -n -q $TMPDIR/16S.prf $TMPDIR/small.sample.fastq 
-+# $PFSEARCHV3 -t 1 -n -q $TMPDIR/16S.prf $TMPDIR/small.sample.fastq
- 
- #----------------------------------------------------------------------#
- # Verify handling of characters not in the profile alphabet
-@@ -240,7 +240,7 @@ ACGTWACGT
- EOI
- $PFMAKE -m -3 -S 0.01 -F 100 $TMPDIR/ACGTAACGT.seq $CMPDIR/dna_50_40.cmp > $TMPDIR/ACGTAACGT.prf
- 
--$PFSEARCHV3 -fa -o 6 $TMPDIR/ACGTAACGT.prf $TMPDIR/ACGTAACGT.seq # raw_score=450 PSA=ACGTAACGT 
-+$PFSEARCHV3 -fa -o 6 $TMPDIR/ACGTAACGT.prf $TMPDIR/ACGTAACGT.seq # raw_score=450 PSA=ACGTAACGT
- $PFSEARCHV3 -fa -o 6 $TMPDIR/ACGTAACGT.prf $TMPDIR/ACGTWACGT.seq # raw_score=383 PSA=ACGTWACGT (not ACGTXACGT)
- 
- 
---- a/tests/examples/test_V3_output.sh.cmake
-+++ b/tests/examples/test_V3_output.sh.cmake
-@@ -13,6 +13,3 @@ mkdir -p $TMPDIR
- sh -ve ./test_V3.sh  > $TMPDIR/test_V3.out 2>/dev/null
- diff ./test_V3.out $TMPDIR/test_V3.out
- 
--
--
--
---- a/tests/examples/test_pfsearchV3_iupac.pl.cmake
-+++ b/tests/examples/test_pfsearchV3_iupac.pl.cmake
-@@ -1,4 +1,4 @@
--#!/bin/env perl
-+#!/usr/bin/env perl
- 
- use strict;
- 
---- a/tests/examples/test_scan_search.pl.cmake
-+++ b/tests/examples/test_scan_search.pl.cmake
-@@ -1,4 +1,4 @@
--#!/bin/env perl
-+#!/usr/bin/env perl
- 
- use strict;
- 


=====================================
debian/patches/series
=====================================
@@ -1,4 +1,3 @@
 spelling.patch
-0001-Harmonize-bin-env-path-Cleaning.patch
 fix_perl_interpreter.patch
 destdir_for_examples.patch


=====================================
src/C/prg/pfscan.c
=====================================
@@ -397,7 +397,7 @@ int main (int argc, char *argv[])
     exit(1);
   }
   else if (ProfileCount == 1) {
-    fputs("pfscanV3 is not meant to be used with a single profile, use pfsearchV3 to get better performance in such case.\n",stderr);
+    fputs("pfscanV3 is not meant to be used with a single profile, use pfsearchV3 to get better performance in such case.\n", stderr);
   }
 
   /* Create an array of pointer to Profiles separating pattern from matrix */
@@ -1017,7 +1017,7 @@ int main (int argc, char *argv[])
                 } else {
                     printf("PREFIX profile:<http://example.org/yourprofiledb>\n");
                 }
-                
+
             }
 
       /* Initialize the print mutex */


=====================================
src/C/utils/io.c
=====================================
@@ -16,7 +16,7 @@
 #include <string.h>
 #include "pfProfile.h"
 
-const char NormalizationModeName[3][16] = { 
+const char NormalizationModeName[3][16] = {
   "linear\0\0\0\0\0\0\0\0\0\0",
   "gle_zscore\0\0\0\0\0\0",
   "gle_zscave\0\0\0\0\0\0"
@@ -67,7 +67,7 @@ unsigned int out_profile = 0;
  * This structure is fed by the Line Analyzer which parses the input, transforms delimiting symbols
  * into '\0' end character and sets the starting pointer within the ProfileLine structure.
  */
-struct ProfileLine { 
+struct ProfileLine {
   char * command;
   char * subcommand;
   char * keywords[32];
@@ -89,7 +89,7 @@ static inline size_t GetLine(FILE * const stream, char * const restrict Destinat
     if (Destination[length-1] == '\n') Destination[--length] = '\0';
     return length;
   }
-  else 
+  else
     return 0;
 }
 
@@ -98,7 +98,7 @@ static inline size_t GetLine(FILE * const stream, char * const restrict Destinat
  */
 static inline char * FirstChar(const char * restrict Line, const uintptr_t MaxMemPoint)
 {
-  char * pos = (char*) Line; 
+  char * pos = (char*) Line;
   while ( (*pos == ' ') || (*pos == '\t') ) {
     if ( (uintptr_t) ++pos == MaxMemPoint) break;
   }
@@ -115,7 +115,7 @@ static inline char * CopyUptoSymbol(char * const restrict Destination, const cha
     if ( Line[i] == Symbol){
       return (char*) &Line[i+1];
     }
-    else 
+    else
       Destination[i] = Line[i];
   }
   return NULL;
@@ -131,7 +131,7 @@ static inline char * CopyUptoSymbolTerminated(char * const restrict Destination,
       Destination[i] = '\0';
       return (char*) &Line[i+1];
     }
-    else 
+    else
       Destination[i] = Line[i];
   }
   Destination[MaxLength] = '\0';
@@ -219,7 +219,7 @@ static inline size_t CountAndReplaceSymbol(char * const restrict String, const c
 #ifdef _DEBUG_VERBOSE_
     else {
       fputc((int) *pos,stdout);
-    } 
+    }
 #endif
     ++pos;
   }
@@ -262,7 +262,7 @@ static inline size_t CountSymbol(const char * const restrict String, const char
 #ifdef _DEBUG_VERBOSE_
     else {
       fputc((int) *pos,stdout);
-    } 
+    }
 #endif
     ++pos;
   }
@@ -281,7 +281,7 @@ static int AnalyzeLine(char * restrict currentLine, struct ProfileLine * const r
   const uintptr_t MaxMemPoint = (uintptr_t) &currentLine[LineSize-1];
 #ifdef _VERBOSE_
   if (out_profile) {
-    if (UseColor) 
+    if (UseColor)
       printf("\e[31;40mLine : %s\e[0m\n", currentLine);
     else
       printf("Line : %s\n", currentLine);
@@ -289,7 +289,7 @@ static int AnalyzeLine(char * restrict currentLine, struct ProfileLine * const r
 #endif
   /* Set Multiple line to false */
   *MultipleLine = false;
-  
+
   /* Clear result first */
   memset(prfLine, 0, sizeof(struct ProfileLine)-SUB_COMMAND_MAX_SIZE);
 
@@ -298,7 +298,7 @@ static int AnalyzeLine(char * restrict currentLine, struct ProfileLine * const r
   prfLine->command = Position;
   const _Bool isMatrix = (Position[0] == 'M' && Position[1] == 'A') ? true : false;
   prfLine->isMatrix = isMatrix;
-  
+
   /* Get to end of command and replace space by '\0' */
   while ( *Position != ' ' && (uintptr_t)Position <= MaxMemPoint) ++Position;
   while ( *Position == ' ' && (uintptr_t)Position <= MaxMemPoint) *Position++ = '\0';
@@ -321,12 +321,12 @@ static int AnalyzeLine(char * restrict currentLine, struct ProfileLine * const r
     } else {
 #ifdef _VERBOSE_
   if (out_profile) {
-    if (UseColor) 
+    if (UseColor)
       printf(" \e[31;40mMULTIPLE MA LINES DETECTED\e[0m");
     else
       printf(" MULTIPLE MA LINES DETECTED");
   }
-#endif 
+#endif
       prfLine->subcommand = previousSubCommand;
       *MultipleLine = true;
     }
@@ -432,12 +432,12 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
   StoredIntegerFormat IIPD_BOUNDARIES     [ INSERTION_BOUNDARIES_SIZE] __attribute__((aligned(16)));
   StoredIntegerFormat IMPD_ALPHABET       [      ALPHABET_MEMORY_SIZE] __attribute__((aligned(16)));
   TransitionScores IIPD_TRANSITIONS __attribute__((aligned(16)));
-  
+
   char currentLine[PROFILE_MAX_LINE_SIZE] __attribute__((aligned(16)));
-  
+
   struct ProfileLine AnalyzedLine;
 
-  union Scores DefaultScores = { 
+  union Scores DefaultScores = {
     Insertion : { IIPD_ALPHABET,
 		  IIPD_BOUNDARIES,
 		  &IIPD_TRANSITIONS,
@@ -449,7 +449,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
   union Scores WorkingScores;
   char * ProfileSequence = 0;
   size_t Line = *LineOffset, Alphabet_Length=0, Length=0;
-  
+
   int InsertionCounter=-1, MatchCounter=0;
   int res;
   _Bool LZCO = false;
@@ -457,24 +457,24 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
   char DefaultMatchSymbol;
   char DefaultInsertionSymbol;
 
-   
+
   /*
    * Initialize position-independent profile parameters
    *
    *   - general specification
    */
-  
+
   prf->isCircular         = false;
   prf->Length             = 0UL;
-	prf->isReversed         = false;
-	
+  prf->isReversed         = false;
+
   /*   - disjoint mode */
   prf->DisjointData.MDIS = 1;
   strcpy(prf->DisjointData.CDIS[0], "UNIQUE\0");
   strcpy(prf->DisjointData.CDIS[1], "PROTECT\0");
   prf->DisjointData.JDIP[0] = 0;
   prf->DisjointData.JDIP[1] = 2;
-  
+
 
   /*   - normalization modes */
   prf->NormalizationData.JNOR = 0;
@@ -492,22 +492,22 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 
   /*   - cut-off */
   prf->CutOffData.JCUT = 0;
-  
+
   /* Pattern */
   prf->Pattern = NULL;
-  
+
   InitializeDefault(&DefaultScores, &DefaultMatchSymbol, &DefaultInsertionSymbol);
-  
+
   memset(previousSubCommand, 0, sizeof(char)*SUB_COMMAND_MAX_SIZE);
-  
+
   /*
    * Read profile
    */
 #ifdef _VERBOSE_
   _Bool FirstCall = true;
 #endif
-  
-  while (!feof(prfStream)) {   
+
+  while (!feof(prfStream)) {
     const size_t length = GetLine(prfStream, currentLine, PROFILE_MAX_LINE_SIZE);
     if (length == 0) continue;
     ++Line;
@@ -530,7 +530,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
       fprintf(stderr,"Error %i in analysis at line %lu\n", res, Line);
       return 1;
     }
-    
+
     /* Header or matrix */
     if (!AnalyzedLine.isMatrix)
     {
@@ -543,9 +543,9 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 						prf->Type = PF_PATTERN;
 					}
 					else {
-						goto MissingType;  
+						goto MissingType;
 					}
-       } 
+       }
        else if ( (AnalyzedLine.command[0] == 'A' && AnalyzedLine.command[1] == 'C' ) ) {
           CopyUptoSymbol(prf->AC_Number, AnalyzedLine.subcommand, ';', 64);
        }
@@ -623,17 +623,17 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 
             Alphabet_Length = ALPHABET_SIZE;
             prf->Alphabet_Length = Alphabet_Length;
-            
+
           } else if (strcmp(AnalyzedLine.keywords[keys], "LENGTH")==0) {
             Length = (size_t) atoi(AnalyzedLine.values[keys]);
             prf->Length = Length;
-	               
+
             // Allocates memory
             prf->Sequence = (char*) malloc((Length+1)*sizeof(char));
 						if (prf->Sequence == NULL) goto AllocationError;
 						ProfileSequence = prf->Sequence;
 						memset(ProfileSequence, 0, (1+Length)*sizeof(char));
-	    
+
             if ( AllocateScores(&WorkingScores, Alphabet_Length, Length) != 0 ) goto AllocationError;
 
             /* Copy score pointers to profile */
@@ -677,7 +677,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
         if (JNOR >= MAXN) goto TooManyNormalization;
 	register SNormalizationItem * const nrmItem = &(nrm->Values[JNOR]);
         nrmItem->CNTX[0] = ' ';
-        
+
         for (size_t keys=0; keys<AnalyzedLine.counter;++keys) {
           if        (strcmp(AnalyzedLine.keywords[keys], "FUNCTION")==0) {
             char ctmp[] = "GRIBSKOV";
@@ -718,14 +718,14 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 								if ( endptr == NULL ) {
 										fprintf(stderr, "Line %lu : unable to convert %s to float\n", Line, AnalyzedLine.values[keys]);
 										return 1;
-								} 
+								}
 								if ( endptr == AnalyzedLine.values[keys] ) {
 										fprintf(stderr, "Line %lu : conversion error of %s to float\n"
 												"         : error code %i = %s",
 											Line, AnalyzedLine.values[keys], errno, strerror(errno));
-										
+
 										return 1;
-								} 
+								}
 							}
 						}
           }
@@ -760,7 +760,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
             const uintptr_t MaxMemory = (uintptr_t) pos + strlen(pos);
             const size_t count = 1 + CountAndReplaceSymbol(AnalyzedLine.values[keys], ',', MaxMemory);
             if (count > MAXN) goto TooManyScores;
-            
+
             for (size_t i=0; i<count; ++i) {
               char * newpos;
               ctItem->RCUT[i] = strtof(pos, &newpos);
@@ -769,7 +769,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 								return 1;
 							}
               while(*newpos != '\0') ++newpos;
-              pos = newpos + 1; 
+              pos = newpos + 1;
             }
             ctItem->JCNM = (int) count;
           } else if (strcmp(AnalyzedLine.keywords[keys], "MODE")==0) {
@@ -798,14 +798,14 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 						if ( key[0] == 'S' && key[1] == 'Y') {
 							if (key[3] == 'M') {
 								DefaultMatchSymbol = AnalyzedLine.values[keys][1];
-							} 
+							}
 							else if (key[3] == 'I') {
 								DefaultInsertionSymbol = AnalyzedLine.values[keys][1];
 							}
 						}
             else if ( key[0] == 'M' && key[1] == '0' ) {
               if ( ReadScore(AnalyzedLine.values[keys], &(DefaultScores.Match.Alphabet[0])) != 0 ) goto ReadError;
-            } 
+            }
             else if ( key[0] == 'M' && key[1] == '\0' ) {
               const char * pos = AnalyzedLine.values[keys];
               const uintptr_t MaxMemory = (uintptr_t) pos + strlen(pos);
@@ -814,7 +814,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
                 StoredIntegerFormat data;
                 if ( ReadScore(AnalyzedLine.values[keys], &data) != 0 ) goto ReadError;
                 for (size_t i=0; i<Alphabet_Length; ++i) DefaultScores.Match.Alphabet[i+1] = data;
-              } 
+              }
               else {
                 if ( ReadScores(AnalyzedLine.values[keys], &(DefaultScores.Match.Alphabet[1]), count) != 0 ) goto ReadError;
               }
@@ -883,7 +883,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
         /* Read the scores */
         for (size_t keys=0; keys<AnalyzedLine.counter;++keys) {
           const char * key = AnalyzedLine.keywords[keys];
-					if ( key[0] == 'S' && key[1] == 'Y' ) continue; 
+					if ( key[0] == 'S' && key[1] == 'Y' ) continue;
           StoredIntegerFormat *ptr;
           const size_t type = GetInsertionMemory(key, &WorkingScores.Insertion, &ptr);
           switch (type){
@@ -927,7 +927,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 //           fprintf(stderr, "Line %lu : implicit Insertion : %lu <= %lu\n", Line, InsertionCounter, MatchCounter);
 #ifdef _VERBOSE_
 	if (out_profile) {
-	  if (UseColor) 
+	  if (UseColor)
 	    puts(" \e[0;32m IMPLICIT INSERTION OF I\e[0m\n");
 	  else
 	    puts("  IMPLICIT INSERTION OF I\n");
@@ -938,7 +938,7 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
 	  memcpy(WorkingScores.Insertion.Transitions, DefaultScores.Insertion.Transitions, sizeof(TransitionScores));
 
 //        CopyPreviousInsertionProfile(&WorkingScores.Insertion);
-	  
+
 	  NextInsertionProfile(&WorkingScores.Insertion);
           ++InsertionCounter;
         }
@@ -992,14 +992,14 @@ static int internalReadProfile(FILE* prfStream, struct Profile * const prf, cons
       }
     }
   }
-  
-  /* 
+
+  /*
    * End of file reached without end of profile keyword. This typically happens when profile
    * has empty lines after the last end of profile keyword.
    * Let us check this and return here with special value -1.
-   */ 
+   */
   if (Length < 1) return -1;
-  
+
 END_OF_PROFILE:
   if (prf->Type == PF_MATRIX) {
     /* Insert possible missing I when profile starts with M */
@@ -1011,7 +1011,7 @@ END_OF_PROFILE:
       ++InsertionCounter;
     }
 
-    if (SetExtraTable) 
+    if (SetExtraTable)
     {
       register int ret;
       if ((ret = PrepareExtraTable(prf)) != 0) return ret;
@@ -1022,7 +1022,7 @@ END_OF_PROFILE:
       /* Copy default values */
       memcpy(WorkingScores.Match.Alphabet, DefaultScores.Match.Alphabet, (ALPHABET_MEMORY_SIZE)*sizeof(StoredIntegerFormat));
     }
-    
+
     /* CHECK CONSISTENCY */
     if (MatchCounter != Length) {
       if ( MatchCounter < Length )
@@ -1059,7 +1059,7 @@ END_OF_PROFILE:
       fprintf(stderr,
 	      "Warning: Disjointness parameter 2 (%i) out of bound. Parameter set to acceptable value.\n",
 	      prf->DisjointData.NDIP[1]);
-      prf->DisjointData.NDIP[1] = Length;    
+      prf->DisjointData.NDIP[1] = Length;
     }
 
     if (prf->DisjointData.NDIP[1] < prf->DisjointData.NDIP[0]) {
@@ -1068,18 +1068,18 @@ END_OF_PROFILE:
       prf->DisjointData.NDIP[0] = tmp;
     }
   }
-  
+
   *LineOffset = Line;
   return 0;
-  
+
   /*
    * ERRORS
    */
-  
+
 // MissingSymbol:
 //    fprintf(stderr, "Missing symbol %c at line %lu of %s\n\tLine: %s\n",Symbol,Line, FileName, prfLine);
 //    return 1;
-   
+
 MissingType:
    if (prf->Identification[0] != '\0') {
     fprintf(stderr, "Missing MATRIX or PATTERN keyword at line %lu of profile %s\n\tLine: %s\n", Line, prf->Identification, currentLine);
@@ -1087,7 +1087,7 @@ MissingType:
     fprintf(stderr, "Missing MATRIX or PATTERN keyword at line %lu of %s\n\tLine: %s\n", Line, FileName, currentLine);
    }
   goto FIN;
-   
+
 AlphabetSizeTooLarge:
    fprintf(stderr, "Alphabet size exceeds hard defined size: %u > %lu\n", ALPHABET_SIZE, prf->Alphabet_Length);
   goto FIN;
@@ -1097,9 +1097,9 @@ NormalizationError:
           Line, FileName);
   for (int i=0; i<KNOR; ++i) fprintf(stderr, "%s ", prf->NormalizationData.CNOR[i]);
   fputs("\n", stderr);
-  
+
  goto FIN;
-    
+
 TooManyNormalization:
   fprintf(stderr, "Too many normalization parameters at line %lu of %s\n\tMaximum is %i.\n", Line, FileName, 0);
   goto FIN;
@@ -1128,14 +1128,14 @@ AllocationError:
   fputs("Unable to allocate sufficient memory\n", stderr);
   if (prf->Sequence) free(prf->Sequence);
 	goto FIN;
-   
+
 WrongType:
   fprintf(stderr, "MA keyword should not appear in PATTERN profile at line %lu of %s\n", Line, FileName);
 	goto FIN;
-	
+
 NoLength:
 	fprintf(stderr, "Profile does not bear a LENGTH in GENERAL_SPEC option at line %lu of %s\n", Line, FileName);
-	
+
 FIN:
     return 1;
 }
@@ -1150,17 +1150,17 @@ static int ComplementAlphabet(struct Profile * const prf)
   Alphabet_Mapping[x - (unsigned char) 'A'] = Alphabet_Mapping[y - (unsigned char) 'A'];\
   Alphabet_Mapping[y - (unsigned char) 'A'] = ctmp;\
 }
-	memcpy(prf->Complement_Alphabet_Mapping, prf->Alphabet_Mapping, ALPHABET_SIZE+2); 
-  if (prf->Type == PF_MATRIX) { 
+	memcpy(prf->Complement_Alphabet_Mapping, prf->Alphabet_Mapping, ALPHABET_SIZE+2);
+  if (prf->Type == PF_MATRIX) {
     unsigned char * const restrict Alphabet_Mapping = prf->Complement_Alphabet_Mapping;
-		
+
 		SWAP_ALPHABET('A', 'T');
 		SWAP_ALPHABET('C', 'G');
 		SWAP_ALPHABET('M', 'K');
 		SWAP_ALPHABET('R', 'Y');
 		SWAP_ALPHABET('V', 'B');
 		SWAP_ALPHABET('H', 'D');
-		
+
 		return 0;
   }
   else {
@@ -1206,7 +1206,7 @@ int PrepareExtraTable(struct Profile * const prf)
     ScoreTuple * restrict const LastScores                         = lprf->Scores.Insertion.LastSequenceProtein;
     const int MLOW = NLOW/4*3;
     const size_t Length = lprf->Length;
-  
+
     if ( lprf->isCircular) {
       for (size_t i=0; i<=Length; ++i) {
 	register const size_t offset  = INSERTION_TRANSITIONS_SIZE*i;
@@ -1217,13 +1217,13 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], InsertionBoundaries[Boffset + _E0], InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], InsertionBoundaries[Boffset + _E0], InsertionBoundaries[Boffset + _IE]);
 	CHECK_AND_SET(InsertionScores[offset + _DX], InsertionBoundaries[Boffset + _E0], InsertionBoundaries[Boffset + _DE]);
-	
+
 	CHECK_AND_SET(FirstScores[i].To[MATCH]    , InsertionBoundaries[Boffset + _B0], InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(FirstScores[i].To[INSERTION], InsertionBoundaries[Boffset + _B0], InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(FirstScores[i].To[DELETION] , InsertionBoundaries[Boffset + _B0], InsertionBoundaries[Boffset + _BD]);
@@ -1232,11 +1232,11 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(LastScores[i].From[INSERTION], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _IE]);
 	CHECK_AND_SET(LastScores[i].From[DELETION] , InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _DE]);
       }
-    } 
+    }
     else {
       const size_t NDIP1 = lprf->DisjointData.NDIP[0];
       const size_t NDIP2 = lprf->DisjointData.NDIP[1];
-      
+
       for (size_t i=0; i<NDIP1; ++i) {
 	register const size_t offset  = INSERTION_TRANSITIONS_SIZE*i;
 	register const size_t Boffset = INSERTION_BOUNDARIES_SIZE*i;
@@ -1244,8 +1244,8 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], NLOW, InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], NLOW, InsertionBoundaries[Boffset + _IE]);
@@ -1266,8 +1266,8 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _IE]);
@@ -1288,8 +1288,8 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], NLOW, InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], NLOW, InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], NLOW, InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _IE]);
@@ -1324,15 +1324,15 @@ int PrepareExtraTable(struct Profile * const prf)
     ScoreTuple * restrict const LastScores                         = lprf->Scores.Insertion.LastSequenceProtein;
     const int MLOW = NLOW/4*3;
     const size_t Length = lprf->Length;
-  
+
     if ( lprf->isCircular) {
       fputs("No coverage on circular profile", stderr);
       return 1;
-    } 
+    }
     else {
       const size_t NDIP1 = lprf->DisjointData.NDIP[0];
       const size_t NDIP2 = lprf->DisjointData.NDIP[1];
-      
+
       for (size_t i=0; i<NDIP1; ++i) {
 	register const size_t offset  = INSERTION_TRANSITIONS_SIZE*i;
 	register const size_t Boffset = INSERTION_BOUNDARIES_SIZE*i;
@@ -1340,8 +1340,8 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], InsertionBoundaries[Boffset + _B1], InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], NLOW, InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], NLOW, InsertionBoundaries[Boffset + _IE]);
@@ -1362,8 +1362,8 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], NLOW, InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], NLOW, InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], NLOW, InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], NLOW, InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], NLOW, InsertionBoundaries[Boffset + _IE]);
@@ -1384,8 +1384,8 @@ int PrepareExtraTable(struct Profile * const prf)
 	CHECK_AND_SET(InsertionScores[offset + _XM], NLOW, InsertionBoundaries[Boffset + _BM]);
 	CHECK_AND_SET(InsertionScores[offset + _XI], NLOW, InsertionBoundaries[Boffset + _BI]);
 	CHECK_AND_SET(InsertionScores[offset + _XD], NLOW, InsertionBoundaries[Boffset + _BD]);
-	
-	// Minimize dummy element 
+
+	// Minimize dummy element
 	InsertionScores[offset + _DUMMY] = NLOW;
 	CHECK_AND_SET(InsertionScores[offset + _MX], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _ME]);
 	CHECK_AND_SET(InsertionScores[offset + _IX], InsertionBoundaries[Boffset + _E1], InsertionBoundaries[Boffset + _IE]);
@@ -1412,7 +1412,7 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
   struct Profile * const restrict outprf = _mm_malloc(sizeof(struct Profile), 16);
   if (outprf == NULL) return NULL;
   register const size_t prfLength = inprf->Length;
-  
+
   /* Copy parameters */
 #if 1
   memcpy(outprf, inprf, sizeof(struct Profile));
@@ -1431,7 +1431,7 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
 #endif
   outprf->DisjointData.NDIP[0] = (int) prfLength - inprf->DisjointData.NDIP[1] + 1;
   outprf->DisjointData.NDIP[1] = (int) prfLength - inprf->DisjointData.NDIP[0] + 1;
-  
+
   /* Allocates memory for profile sequence */
   char * Sequence = malloc(prfLength*sizeof(char));
   if (Sequence == NULL) {
@@ -1442,14 +1442,14 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
   for (size_t iprf=0; iprf<prfLength; ++iprf) {
     Sequence[iprf] = inprf->Sequence[prfLength-1-iprf];
   }
-  
+
   /* Allocates memory for score tables*/
   if (AllocateScores(&(outprf->Scores), inprf->Alphabet_Length, prfLength) != 0) {
     free(Sequence);
     _mm_free(outprf);
     return NULL;
   }
-  
+
   /* Transfer match and insertion alphabets */
   {
     register const size_t AlignedStep = inprf->Scores.Insertion.AlignStep;
@@ -1460,7 +1460,7 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
       outMatch     += AlignedStep;
       inMatch      -= AlignedStep;
     }
-    
+
     register const StoredIntegerFormat * restrict inInsertion = &inprf->Scores.Insertion.Alphabet[AlignedStep*(inprf->Length)];
     register StoredIntegerFormat * restrict outInsertion      = outprf->Scores.Insertion.Alphabet;
     for (size_t iprf=0; iprf<=prfLength; ++iprf) {
@@ -1469,7 +1469,7 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
       inInsertion  -= AlignedStep;
     }
   }
-  
+
   /* Transfer boundaries */
   register const StoredIntegerFormat (*inBoundaries)[INSERTION_BOUNDARIES_SIZE] = (const StoredIntegerFormat (*)[INSERTION_BOUNDARIES_SIZE]) inprf->Scores.Insertion.Boundaries;
   register StoredIntegerFormat (*outBoundaries)[INSERTION_BOUNDARIES_SIZE]      = (StoredIntegerFormat (*)[INSERTION_BOUNDARIES_SIZE]) outprf->Scores.Insertion.Boundaries;
@@ -1484,9 +1484,9 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
     outBoundaries[iprf][_ME] = inBoundaries[prfLength-iprf][_BM];
     outBoundaries[iprf][_BD] = inBoundaries[prfLength-iprf][_DE];
     outBoundaries[iprf][_DE] = inBoundaries[prfLength-iprf][_BD];
-    outBoundaries[iprf][_BE] = inBoundaries[prfLength-iprf][_BE];   
+    outBoundaries[iprf][_BE] = inBoundaries[prfLength-iprf][_BE];
   }
-  
+
   /* Transfer transitions */
   register const TransitionScores *inTransitions = (TransitionScores*) inprf->Scores.Insertion.Transitions;
   register TransitionScores *outTransitions      = (TransitionScores*) outprf->Scores.Insertion.Transitions;
@@ -1494,11 +1494,11 @@ struct Profile * ReverseProfile(const struct Profile * const restrict inprf)
      outTransitions[iprf].Element[_DD] = inTransitions[prfLength-iprf].Element[_DD];
      outTransitions[iprf].Element[_DI] = inTransitions[prfLength-iprf].Element[_ID];
      outTransitions[iprf].Element[_DM] = inTransitions[prfLength-iprf].Element[_MD];
-     
+
      outTransitions[iprf].Element[_MD] = inTransitions[prfLength-iprf].Element[_DM];
      outTransitions[iprf].Element[_MM] = inTransitions[prfLength-iprf].Element[_MM];
      outTransitions[iprf].Element[_MI] = inTransitions[prfLength-iprf].Element[_IM];
-     
+
      outTransitions[iprf].Element[_ID] = inTransitions[prfLength-iprf].Element[_DI];
      outTransitions[iprf].Element[_IM] = inTransitions[prfLength-iprf].Element[_MI];
      outTransitions[iprf].Element[_II] = inTransitions[prfLength-iprf].Element[_II];
@@ -1522,13 +1522,13 @@ int ReadProfile(const char * const restrict FileName, struct Profile * const prf
   if (prfStream == NULL) {
     return -1;
   }
-  
+
   /*
-   * Read all internal data 
+   * Read all internal data
    */
   /* Clean Profile structure */
   memset(newPrf, 0, sizeof(struct Profile));
-  while (!feof(prfStream)) {   
+  while (!feof(prfStream)) {
     /* Read one profile structure at a time*/
     const int res = internalReadProfile(prfStream, newPrf, SetExtraTable, FileName, &Line);
     ++nprf;
@@ -1541,7 +1541,7 @@ int ReadProfile(const char * const restrict FileName, struct Profile * const prf
       if (tmpPrf) {
 				/* Clean Profile structure */
 				memset(tmpPrf, 0, sizeof(struct Profile));
-				
+
 				tmpPrf->previous = newPrf;
 				newPrf->next = tmpPrf;
 				newPrf = tmpPrf;
@@ -1562,15 +1562,15 @@ int ReadProfile(const char * const restrict FileName, struct Profile * const prf
       else {
 				nprf = -1;
       }
-      break; 
+      break;
     }
   }
-  
+
   /*
-   * Close the file 
+   * Close the file
    */
   fclose(prfStream);
-  
+
   return nprf;
 }
 
@@ -1598,9 +1598,9 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
   if (prfStreamIn == NULL) {
     return 1;
   }
-  
+
   /*
-   * Write down the header data 
+   * Write down the header data
    */
   fprintf(prfStreamOut,
 	  "ID   %s; MATRIX.\n"
@@ -1609,7 +1609,7 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
 	  "DE   %s\n",
 	  prf->Identification, prf->AC_Number, prf->Date, prf->Description
 	 );
-  
+
   /*
    * Follow the initial profile and parse/reuse
    */
@@ -1617,8 +1617,8 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
   int res;
   _Bool MultipleLine;
   memset(previousSubCommand, 0, sizeof(char)*SUB_COMMAND_MAX_SIZE);
-  
-  while (!feof(prfStreamIn)) {   
+
+  while (!feof(prfStreamIn)) {
     const size_t length = GetLine(prfStreamIn, currentLine, PROFILE_MAX_LINE_SIZE);
     ++Line;
     if (length == 0) continue;
@@ -1626,12 +1626,12 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
     /* Make a copy */
     memcpy(currentLineCopy, currentLine, length+1);
     currentLineCopy[length] = '\0';
-    
+
     if ((res=AnalyzeLine(currentLine, &AnalyzedLine, &MultipleLine)) != 0) {
       fprintf(stderr,"Error %i in analysis at line %lu\n", res, Line);
       return 1;
     }
-    
+
     /* Header or matrix */
     if (!AnalyzedLine.isMatrix)
     {
@@ -1650,7 +1650,7 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
 	 CommentStorage[CommentStorageUsed++] = '\n';
 	 CommentStorage[CommentStorageUsed] = '\0';
        }
-       else if ( (AnalyzedLine.command[0] == 'D' && AnalyzedLine.command[1] == 'R' ) || 
+       else if ( (AnalyzedLine.command[0] == 'D' && AnalyzedLine.command[1] == 'R' ) ||
 	         (AnalyzedLine.command[0] == 'N' && AnalyzedLine.command[1] == 'R' ) ||
 	         (AnalyzedLine.command[0] == '3' && AnalyzedLine.command[1] == 'D' ) ||
 	         (AnalyzedLine.command[0] == 'P' && AnalyzedLine.command[1] == 'R' ) ||
@@ -1685,7 +1685,7 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
 	  const int Mode        = nrmItem->NNOR;
 	  const int Priority    = nrmItem->NNPR;
 	  const char * Text     = nrmItem->CNTX;
-	  
+
 	  fprintf(prfStreamOut, "MA   /NORMALIZATION: MODE=%i; FUNCTION=%s;", Mode, Function);
 	  for (int iCoef=1; iCoef<=nCoef; ++iCoef) {
 	      fprintf(prfStreamOut, " R%1.1i=%f;", iCoef, nrmItem->RNOP[iCoef-1]);
@@ -1707,7 +1707,7 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
 	  const unsigned int HScore  = cutItem->HCUT;
 	  const char * Text = cutItem->CCUT;
 	  const int nModes  = cutItem->JCNM;
-	  
+
 	  fprintf(prfStreamOut, "MA   /CUT_OFF: LEVEL=%i; SCORE=%i;", Level, RScore);
 	  if (HScore>0) {
 	      fprintf(prfStreamOut, " H_SCORE=%u;", HScore);
@@ -1747,27 +1747,27 @@ int WriteProfile(const char * const restrict FileNameIn, struct Profile * const
       else {
 	fprintf(stderr,"The following unknown line has been avoided\n->%s\n",currentLineCopy);
       }
-      
+
     }
   }
-  
+
   END_OF_PROFILE:
-  
+
   /*
-   * Write down the comments now 
+   * Write down the comments now
    */
   if (CommentStorageUsed>0) fputs(CommentStorage, prfStreamOut);
-  
+
   /*
-   * Write down the additional comments now 
+   * Write down the additional comments now
    */
   if (AdditionalComments) fputs(AdditionalComments, prfStreamOut);
-  
+
   /*
    * Terminate profile
    */
   fputs("//\n", prfStreamOut);
-  
+
   fclose(prfStreamIn);
   free(CommentStorage);
   return 0;
@@ -1784,12 +1784,12 @@ void FreeProfile(struct Profile * const prf, const _Bool IsPointer)
     _mm_free(nextPrf);
     nextPrf = tmpPrf;
   }
-  
+
   FreeScores(&(prf->Scores));
   free(prf->Sequence);
   FreeAverage(&prf->Average);
   if (prf->Pattern) free(prf->Pattern);
-  
+
   if (IsPointer) {
     _mm_free(prf);
   } else {
@@ -1804,9 +1804,9 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
   char currentLine[PROFILE_MAX_LINE_SIZE] __attribute__((aligned(16)));
   struct ProfileLine AnalyzedLine;
   _Bool MultipleLine;
-  
+
   memset(Data, 0, sizeof(struct UniProtMatch));
-  
+
   /*
    * Try to open the file, upon failure emmit error
    */
@@ -1814,8 +1814,8 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
   if (prfStream == NULL) {
     return -1;
   }
-  
-  
+
+
   /*
    * Count the number of UniProt statement
    */
@@ -1824,7 +1824,7 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
   long FirstAppearanceInFile = 0;
   size_t StartingLine = 0;
   while (!feof(prfStream)) {
-    const long FilePosition = ftell(prfStream); 
+    const long FilePosition = ftell(prfStream);
     const size_t length = GetLine(prfStream, currentLine, PROFILE_MAX_LINE_SIZE);
     if (length == 0) continue;
     if ((res=AnalyzeLine(currentLine, &AnalyzedLine, &MultipleLine)) != 0) {
@@ -1846,19 +1846,19 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
     }
     ++Line;
   }
-  
+
   /*
    * Allocate the memory to hold the data
    */
   char (* const UniqueIdentifier)[16] = (char (*)[16]) malloc(Count*16*sizeof(char));
   char (* const EntryName)[16] = (char(*)[16]) malloc(Count*16*sizeof(char));
   char * const State = (char*) malloc(Count*sizeof(char));
-  
+
   if (UniqueIdentifier == NULL || EntryName == NULL || State == NULL) {
       res = -2;
       goto FIN;
   }
-  
+
   /*
    * Fill in the data
    */
@@ -1874,9 +1874,9 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
   unsigned int Profile_partial = 0;
   unsigned int Profile_false_neg = 0;
   unsigned int Profile_false_pos = 0;
-  
+
   while (!feof(prfStream)) {
-    const long FilePosition = ftell(prfStream); 
+    const long FilePosition = ftell(prfStream);
     const size_t length = GetLine(prfStream, currentLine, PROFILE_MAX_LINE_SIZE);
     if (length == 0) continue;
     if ((res=AnalyzeLine(currentLine, &AnalyzedLine, &MultipleLine)) != 0) {
@@ -1915,7 +1915,7 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
 	      default:
 		Profile_unknown++;
 	    }
-	    
+
 	    ++lCount;
 	  }
 	 }
@@ -1927,7 +1927,7 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
     }
     ++Line;
   }
-    
+
   /*
    * Assign data to structure
    */
@@ -1940,18 +1940,18 @@ int ReadProfileMatch(const char * const restrict FileName, struct UniProtMatch *
   Data->Partial = Profile_partial;
   Data->False_negative = Profile_false_neg;
   Data->False_posistive = Profile_false_pos;
-  
+
   /*
-   * Close the file 
+   * Close the file
    */
   fclose(prfStream);
   return 0;
-  
+
  FIN1:
   FreeProfileMatch(Data);
  FIN:
   fclose(prfStream);
-  
+
   return res;
 }
 
@@ -1973,7 +1973,7 @@ void FreeProfileMatch(struct UniProtMatch * Data)
 	       "|                              PFDUMP v" PF_VERSION "                                   |\n"\
 	       "%----------------------------------------------------------------------------%\n"\
 	       "Built on " __DATE__ " at " __TIME__ ".\n"
-	       
+
 /* default value for header is 4 digits*/
 // #define INT_FORMAT "%4i"
 // #define NLOW_FORMAT "NLOW"
@@ -1999,13 +1999,13 @@ static unsigned int out_clean       = 0;
 static const struct option long_options[] =
 {
         /*
-	 * These options set a flag. 
+	 * These options set a flag.
 	 */
-	
-        /* 
-	 * These options don't set a flag. We distinguish them by their indices. 
+
+        /*
+	 * These options don't set a flag. We distinguish them by their indices..
 	 */
-	{"help",               		no_argument,       	0,	'h'},	
+	{"help",               		no_argument,       	0,	'h'},
 	{"all",     			no_argument,		0,	'A'},
 	{"alphabet",			no_argument,		0,	'a'},
 	{"color",			no_argument,		0,	'c'},
@@ -2029,10 +2029,10 @@ static void __attribute__((noreturn)) Usage(FILE * stream)
 	"   --color             [-c] : output profile reading with colors\n"
 	"   --reverse           [-r] : reverse profile\n"
 	"   --all               [-A] : output everything\n"
-	"   --tables            [-T] : output score tables\n" 
+	"   --tables            [-T] : output score tables\n"
 	"   --alphabet          [-a] : output alphabet\n"
 	"   --profile           [-p] : output profile reading\n"
-	"   --match-table       [-m] : output match table\n" 
+	"   --match-table       [-m] : output match table\n"
 	"   --insertion-table   [-i] : output insertion table\n"
 	"   --boundary-table    [-b] : output boundary table\n"
 	"   --transition-table  [-t] : output transition table\n"
@@ -2049,7 +2049,7 @@ int main(int argc, char *argv[])
   ////////////////////////////////////////////////////////////////////////////////////////////////
   // OPTIONS
   ////////////////////////////////////////////////////////////////////////////////////////////////
- 
+
   while (1) {
     /* getopt_long stores the option index here. */
     int option_index = 0;
@@ -2096,24 +2096,24 @@ int main(int argc, char *argv[])
   } else {
     ProfileFile = argv[optind];
   }
-  
+
   if (ReadProfile(ProfileFile, &prf, false) < 0) {
     FreeProfile(&prf, false);
     return 1;
   }
-  
+
   if (prf.Type == PF_PATTERN) {
     FreeProfile(&prf, false);
     return 0;
   }
-  
+
   if (out_clean) {
     const char Footer[] = "CC   Tests output with pfdump\n";
     WriteProfile(ProfileFile, &prf, Footer, stdout);
     FreeProfile(&prf, false);
     return 0;
   }
-  
+
   if (isReversed) {
     rprf = ReverseProfile(&prf);
     if (rprf == NULL) {fputs("Error while reversing profile\n",stderr); exit(1);}
@@ -2122,7 +2122,7 @@ int main(int argc, char *argv[])
     pprf = &prf;
   }
   PrepareExtraTable(pprf);
-  
+
   if (out_alphabet) {
     puts("Alphabet Mapping");
     for (size_t i=0; i<ALPHABET_SIZE; ++i) {
@@ -2132,10 +2132,10 @@ int main(int argc, char *argv[])
     puts("\n");
   }
   const size_t prfLength = pprf->Length + 1;
-  
+
   struct SMatch * const Match         = &pprf->Scores.Match;
   struct SInsertion * const Insertion = &pprf->Scores.Insertion;
-  
+
   if (out_match) {
     printf("Match matrix with alignment %lu\n\n",Match->AlignStep );
     printf("    | ");
@@ -2148,7 +2148,7 @@ int main(int argc, char *argv[])
       fputs(LINE, stdout);
     }
     fputs("\n", stdout);
-    
+
     for (size_t iprf=0; iprf<prfLength; ++iprf) {
       const StoredIntegerFormat * MatchLine = &Match->Alphabet[iprf*Match->AlignStep];
       printf("%3lu | ", iprf+1);
@@ -2205,11 +2205,11 @@ int main(int argc, char *argv[])
       fputs("\n", stdout);
     }
   }
-  
+
   if (out_boundaries) {
     printf("\nInsertion boundaries matrix with alignment %i\n\n", INSERTION_BOUNDARIES_SIZE );
     char Header[] = "     " SPACE "_B0" SPACE "_B1" SPACE "_E0" SPACE "_E1" SPACE "_BM" SPACE "_BI" SPACE "_BD" SPACE "_BE" SPACE "_ME" SPACE "_IE" SPACE "_DE\n";
-    
+
     fputs(Header, stdout);
     fputs("    |", stdout);
     for (size_t i=0; i<strlen(Header)-5; ++i) fputc('-', stdout);
@@ -2232,7 +2232,7 @@ int main(int argc, char *argv[])
     const TransitionScores * restrict InsertionLine = pprf->Scores.Insertion.Transitions;
     const ScoreTuple * const restrict FirstSeq      = pprf->Scores.Insertion.FirstSequenceProtein;
     const ScoreTuple * const restrict LastSeq       = pprf->Scores.Insertion.LastSequenceProtein;
-    
+
     #define PRINT_VALUE(x) { \
       if (x == NLOW) {\
 	printf(NLOW_FORMAT " ");\
@@ -2242,7 +2242,7 @@ int main(int argc, char *argv[])
 	printf(INT_FORMAT " ", x);\
       }\
     }
-    
+
     printf("\nInsertion transition matrix with alignment %i\n\n", INSERTION_TRANSITIONS_SIZE );
     char Header2[] = "     " SPACE "MATCH " SPACE SPACE "   " SPACE "  |" SPACE "INSERTION" SPACE SPACE SPACE "  |" SPACE "DELETION  " SPACE  SPACE SPACE\
 		    " |" SPACE "EXTRA   " SPACE SPACE "  |"\
@@ -2267,39 +2267,39 @@ int main(int argc, char *argv[])
       PRINT_VALUE(InsertionLine[iprf].From[MATCH].To[INSERTION]);
       PRINT_VALUE(InsertionLine[iprf].From[MATCH].To[DELETION]);
       PRINT_VALUE(InsertionLine[iprf].From[MATCH].To[EXTRA]);
-      
+
       PRINT_VALUE(InsertionLine[iprf].From[INSERTION].To[MATCH]);
       PRINT_VALUE(InsertionLine[iprf].From[INSERTION].To[INSERTION]);
       PRINT_VALUE(InsertionLine[iprf].From[INSERTION].To[DELETION]);
       PRINT_VALUE(InsertionLine[iprf].From[INSERTION].To[EXTRA]);
-      
+
       PRINT_VALUE(InsertionLine[iprf].From[DELETION].To[MATCH]);
       PRINT_VALUE(InsertionLine[iprf].From[DELETION].To[INSERTION]);
       PRINT_VALUE(InsertionLine[iprf].From[DELETION].To[DELETION]);
       PRINT_VALUE(InsertionLine[iprf].From[DELETION].To[EXTRA]);
-      
+
       fputs("  ",stdout);
-      
+
       PRINT_VALUE(InsertionLine[iprf].From[EXTRA].To[MATCH]);
       PRINT_VALUE(InsertionLine[iprf].From[EXTRA].To[INSERTION]);
       PRINT_VALUE(InsertionLine[iprf].From[EXTRA].To[DELETION]);
-      
+
       fputs("  ",stdout);
-      
+
       PRINT_VALUE(LastSeq[iprf].From[MATCH]);
       PRINT_VALUE(LastSeq[iprf].From[INSERTION]);
       PRINT_VALUE(LastSeq[iprf].From[DELETION]);
-      
+
       fputs("  ",stdout);
-      
+
       PRINT_VALUE(FirstSeq[iprf].To[MATCH]);
       PRINT_VALUE(FirstSeq[iprf].To[INSERTION]);
       PRINT_VALUE(FirstSeq[iprf].To[DELETION]);
-      
+
       fputs("\n", stdout);
     }
   }
-  
+
   FreeProfile(pprf, isReversed);
   return 0;
 }


=====================================
src/C/utils/system.c
=====================================
@@ -908,7 +908,7 @@ void getSystemInfo(SystemInfo * const info)
   for (size_t i=0; i<13; ++i) info->CPU_Vendor[i] = '\0';
   
   /* Available number of logical processor seen by OS */
-  info->nOverallCores = (unsigned int) sysconf(_SC_NPROCESSORS_CONF);
+  info->nOverallCores = (unsigned int) sysconf(_SC_NPROCESSORS_ONLN);
   const char NOBrand[] = "Not supported by this cpu"; 
   strcpy(info->CPU_Name, NOBrand);
   


=====================================
src/Perl/fasta_to_fastq.pl
=====================================
@@ -1,3 +1,4 @@
+#!/usr/bin/env perl
 #Copyright (c) 2010 LUQMAN HAKIM BIN ABDUL HADI (csilhah at nus.edu.sg)
 #
 #Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
@@ -12,7 +13,6 @@
 #LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
 #IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-#!/usr/bin/perl
 use strict;
 
 my $file = $ARGV[0];
@@ -20,26 +20,26 @@ open FILE, $file;
 
 my ($header, $sequence, $sequence_length, $sequence_quality);
 while(<FILE>) {
-        chomp $_;
-        if ($_ =~ /^>(.+)/) {
-                if($header ne "") {
-                        print "\@".$header."\n";
-                        print $sequence."\n";
-                        print "+"."\n";
-                        print $sequence_quality."\n";
-                }
-                $header = $1;
-		$sequence = "";
-		$sequence_length = "";
-		$sequence_quality = "";
+    chomp $_;
+    if ($_ =~ /^>(.+)/) {
+        if($header ne '') {
+            print "\@".$header."\n";
+            print $sequence."\n";
+            print "+"."\n";
+            print $sequence_quality."\n";
         }
-	else {
-		$sequence .= $_;
-		$sequence_length = length($_);
-		my $qual = "!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65";
-		my @qual = split //, $qual;
-		for(my $i=0; $i<$sequence_length; $i++) {$sequence_quality .= $qual[$i % length($qual)]}
-	}
+        $header = $1;
+        $sequence         = '';
+        $sequence_length  = '';
+        $sequence_quality = '';
+    }
+    else {
+        $sequence .= $_;
+        $sequence_length = length($_);
+        my $qual = "!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65";
+        my @qual = split //, $qual;
+        for(my $i=0; $i<$sequence_length; $i++) {$sequence_quality .= $qual[$i % length($qual)]}
+    }
 }
 close FILE;
 print "\@".$header."\n";


=====================================
src/Perl/make_iupac_cmp.pl
=====================================
@@ -1,4 +1,4 @@
-#!/bin/env perl
+#!/usr/bin/env perl
 
 use strict;
 use Getopt::Std;


=====================================
src/Perl/scramble_fasta.pl
=====================================
@@ -1,4 +1,4 @@
-#!/bin/env perl
+#!/usr/bin/env perl
 
 use strict;
 
@@ -13,7 +13,7 @@ usage:
 
    scramble_fasta.pl [options] fasta-file...
 
-This script produces"random" or "shuffled" sequences according to a
+This script produces "random" or "shuffled" sequences according to a
 model and to a set of parameters. All sequences are read and written
 in FASTA format. No distinction is made between DNA and protein
 sequences. All letter are converted to uppercase. Gaps are


=====================================
src/Perl/sort_fasta.pl
=====================================
@@ -1,4 +1,4 @@
-#!/bin/env perl
+#!/usr/bin/env perl
 
 use strict;
 use Getopt::Std;


=====================================
tests/examples/test_V3.sh.cmake
=====================================
@@ -19,9 +19,9 @@ PFW=$<TARGET_FILE:pfw>
 PTOH=$<TARGET_FILE:ptoh>
 PTOF=$<TARGET_FILE:ptof>
 P2FT=$<TARGET_FILE:2ft> # NB: sh does not allow variable name starting with a digit
- 
-SORT_PSA=@PERL_SCRIPT_DIR@/sort_fasta.pl # FIXME: use cmake syntax 
-MAKE_IUPAC_CMP=@PERL_SCRIPT_DIR@/make_iupac_cmp.pl # FIXME: use cmake syntax 
+
+SORT_PSA=@PERL_SCRIPT_DIR@/sort_fasta.pl # FIXME: use cmake syntax
+MAKE_IUPAC_CMP=@PERL_SCRIPT_DIR@/make_iupac_cmp.pl # FIXME: use cmake syntax
 SCRAMBLE=@PERL_SCRIPT_DIR@/scramble_fasta.pl # FIXME: use cmake syntax
 
 CMPDIR=@DATA_DIR@/Matrices
@@ -29,15 +29,15 @@ TMPDIR=/tmp/test_V3
 mkdir -p $TMPDIR
 
 #----------------------------------------------------------------------#
-# The PFTOOLS is a powerful software to align biological sequences. 
-# Owing to the 'generalized profile syntax', it allows the fine-tuning 
-# of an alignent scoring system, beyond what is feasible by most other 
-# software. Despite the PFTOOLS are crippled by a lot of legacy code, 
-# they are still extremely useful for precision work . 
+# The PFTOOLS is a powerful software to align biological sequences.
+# Owing to the 'generalized profile syntax', it allows the fine-tuning
+# of an alignent scoring system, beyond what is feasible by most other
+# software. Despite the PFTOOLS are crippled by a lot of legacy code,
+# they are still extremely useful for precision work.
 #
 # Nota bene to use this script as a testsuite:
-# (1) The output order of pfsearch is reproducible, as well as the one of 
-#     pfsearchV3 with -t 1. 
+# (1) The output order of pfsearch is reproducible, as well as the one of
+#     pfsearchV3 with -t 1.
 # (2) Refrain using any pipe.
 #----------------------------------------------------------------------#
 
@@ -45,7 +45,7 @@ mkdir -p $TMPDIR
 # Searching for the occurence of the SH3 domain within the VAV oncogene,
 # using pfsearch V2 ...
 #----------------------------------------------------------------------#
-$PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq 
+$PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq
 
 #----------------------------------------------------------------------#
 # ...and using pfsearch V3:
@@ -53,8 +53,8 @@ $PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq
 $PFSEARCHV3 -n -t 1 -f ./sh3.prf ./VAV_HUMAN.seq
 
 #----------------------------------------------------------------------#
-# Create a database of sequences and a database of profiles, each one 
-# with two entries. 
+# Create a database of sequences and a database of profiles, each one
+# with two entries.
 #----------------------------------------------------------------------#
 cat ./VAV_HUMAN.seq ./VAV_RAT.seq > $TMPDIR/VAV.seq
 cat ./sh2.prf       ./sh3.prf     > $TMPDIR/SHX.prf
@@ -79,10 +79,10 @@ $PFSEARCHV3 -f -n -t 2 -o 6 ./sh3.prf -f $TMPDIR/VAV.seq >> $TMPDIR/SHX.pfsearch
 $PFSCANV3 -f -n -o 6 $TMPDIR/SHX.prf $TMPDIR/VAV.seq > $TMPDIR/SHX.pfscan3.hit
 
 #----------------------------------------------------------------------#
-# All these commands produces exactly the same list of matched 
-# sequences, with the same raw scores and coordinates. 
+# All these commands produces exactly the same list of matched
+# sequences, with the same raw scores and coordinates.
 #
-# However the output order is not necessarily preserved here. 
+# However the output order is not necessarily preserved here.
 #
 # Let's verify that the output are comparable after fixing FASTA headers
 #----------------------------------------------------------------------#
@@ -95,7 +95,7 @@ diff $TMPDIR/SHX.pfscan2.out $TMPDIR/SHX.pfsearch2.out  # expecting no differenc
 diff $TMPDIR/SHX.pfscan2.out $TMPDIR/SHX.pfsearch3.out  # expecting no difference
 
 #----------------------------------------------------------------------#
-# Pfsearch/pfscan V2 supports the following input formats for sequence: 
+# Pfsearch/pfscan V2 supports the following input formats for sequence:
 # FASTA, Swiss-Prot and EMBL.
 #----------------------------------------------------------------------#
 $PFSEARCH -f ./sh3.prf ./VAV_HUMAN.seq     # FASTA
@@ -105,10 +105,10 @@ $PFSEARCH ./sh3.prf ./GTPA_HUMAN.dat       # SwissProt
 $PFSCAN   ./GTPA_HUMAN.dat ./sh3.prf       # SwissProt
 
 $PFSEARCH  ./ecp.prf ./CVPBR322.embl       # EMBL
-$PFSCAN    ./CVPBR322.embl ./ecp.prf       # EMBL 
+$PFSCAN    ./CVPBR322.embl ./ecp.prf       # EMBL
 
 #----------------------------------------------------------------------#
-# Pfsearch/pfscan V3 supports the following input formats for sequence: 
+# Pfsearch/pfscan V3 supports the following input formats for sequence:
 # FASTA and FASTQ.
 #----------------------------------------------------------------------#
 $PFSEARCHV3 -n -t 1 -f ./sh3.prf ./VAV_HUMAN.seq # FASTA
@@ -117,7 +117,7 @@ cat ./CVPBR322.embl \
 | perl -ne 'if(/^ID +(\w+)/){print ">$1\n"}elsif(/^ /){s/[\s\d]+//g;print "$_\n";}' \
 > $TMPDIR/CVPBR322.fa  # Extract FASTA from EMBL
 $PFSEARCHV3 -n -t 1 -f ./ecp.prf $TMPDIR/CVPBR322.fa
-$PFSCANV3   -n -t 1 -f ./ecp.prf $TMPDIR/CVPBR322.fa 
+$PFSCANV3   -n -t 1 -f ./ecp.prf $TMPDIR/CVPBR322.fa
 
 $PFSEARCHV3 -n -t 1 -q ./hiv.prf ./hiv.fastq     # FASTQ
 $PFSCANV3   -n -t 1 -q ./hiv.prf ./hiv.fastq     # FASTQ
@@ -136,8 +136,8 @@ $PFSEARCHV3 -n -fb ./ecp.prf $TMPDIR/CVPBR322.fa | sort -nr > $TMPDIR/ecp.CVPBR3
 diff -b $TMPDIR/ecp.CVPBR322.2.hit $TMPDIR/ecp.CVPBR322.3.hit  # expecting no difference
 
 #----------------------------------------------------------------------#
-# The different PSA (i.e FASTA) output formats differ by the content 
-# their headers. The usage of XPSA (-o 6) is strongly recommended, the 
+# The different PSA (i.e FASTA) output formats differ by the content
+# their headers. The usage of XPSA (-o 6) is strongly recommended, the
 # other formats being preserved for legacy.
 #----------------------------------------------------------------------#
 $PFSEARCHV3 -n -f -o 1 -N 15 ./sh3.prf ./VAV_HUMAN.seq | $SORT_PSA -
@@ -147,10 +147,10 @@ $PFSEARCHV3 -n -f -o 4 -N 15 ./sh3.prf ./VAV_HUMAN.seq | $SORT_PSA -
 $PFSEARCHV3 -n -f -o 6 -N 15 ./sh3.prf ./VAV_HUMAN.seq | $SORT_PSA - # recommended
 
 #----------------------------------------------------------------------#
-# Multiple sequence alignment (MSA) can easily be produced from PSA 
+# Multiple sequence alignment (MSA) can easily be produced from PSA
 # using psa2msa (V2)
 #----------------------------------------------------------------------#
-$PFSEARCHV3 -n -f -o 6 ./ecp.prf $TMPDIR/CVPBR322.fa | $SORT_PSA - | $PSA2MSA 
+$PFSEARCHV3 -n -f -o 6 ./ecp.prf $TMPDIR/CVPBR322.fa | $SORT_PSA - | $PSA2MSA
 
 #----------------------------------------------------------------------#
 # V3 has two new output formats: TSV and SAM
@@ -169,15 +169,15 @@ $PFSEARCHV3 -n -t 1 -q    -o 8 ./hiv.prf ./hiv.fastq         # FASTQ to SAM
 $PFSEARCHV3 -n -t 1 -q -b -o 8 ./hiv.prf ./hiv.fastq         # FASTQ to SAM
 
 #----------------------------------------------------------------------#
-# Index can optionaly be used to speed-up database upload for pfsearch. 
-# This should be especially usefull for repetitive database searches 
-# using the heuristic. 
+# Index can optionaly be used to speed-up database upload for pfsearch.
+# This should be especially usefull for repetitive database searches
+# using the heuristic.
 #----------------------------------------------------------------------#
 
 $PFINDEX -f -o $TMPDIR/CVPBR322.fa.idx $TMPDIR/CVPBR322.fa
 $PFSEARCHV3 -n -f                            -o 7 ./ecp.prf $TMPDIR/CVPBR322.fa | sort > $TMPDIR/A.out    # FASTA to TSV
 $PFSEARCHV3 -n -f -i $TMPDIR/CVPBR322.fa.idx -o 7 ./ecp.prf $TMPDIR/CVPBR322.fa | sort > $TMPDIR/B.out    # FASTA to TSV
-diff $TMPDIR/A.out $TMPDIR/B.out 
+diff $TMPDIR/A.out $TMPDIR/B.out
 
 $PFINDEX -q -o $TMPDIR/hiv.fastq.idx ./hiv.fastq
 $PFSEARCHV3 -n -q -b -o 8                          ./hiv.prf ./hiv.fastq | sort > $TMPDIR/A.out
@@ -185,23 +185,23 @@ $PFSEARCHV3 -n -q -b -o 8 -i $TMPDIR/hiv.fastq.idx ./hiv.prf ./hiv.fastq | sort
 diff $TMPDIR/A.out $TMPDIR/B.out
 
 #----------------------------------------------------------------------#
-# Profile and/or sequence can be reversed on the fly. If both are 
+# Profile and/or sequence can be reversed on the fly. If both are
 # reversed the match score is the same
 #----------------------------------------------------------------------#
 $PFSEARCHV3 -f -a       rand_dna.prf rand_dna.seq
 $PFSEARCHV3 -f -a -r -R rand_dna.prf rand_dna.seq
 
 #----------------------------------------------------------------------#
-# There is a much better support of rev/comp search in DNA sequences, 
+# There is a much better support of rev/comp search in DNA sequences,
 # featuring the full IUPAC code.
 # To illustrate these capabilities, let build a profile for bacterial
-# 16S sequence, starting from the Rfam seed RF00177.msa. First create 
+# 16S sequence, starting from the Rfam seed RF00177.msa. First create
 # an adhoc substitution matrix
 #----------------------------------------------------------------------#
 $MAKE_IUPAC_CMP -M 20 -m -30 > $TMPDIR/iupac20-30.cmp
 
 #----------------------------------------------------------------------#
-# ... let build a profile for bacterial 16S sequence, starting from 
+# ... let build a profile for bacterial 16S sequence, starting from
 # the Rfam seed RF00177.msa.
 #----------------------------------------------------------------------#
 cat ./RF00177.msa \
@@ -224,7 +224,7 @@ cat ./SRR9619541.sample.fastq \
 > $TMPDIR/permut.fa
 
 # $PFCALIBRATEV3 -F $TMPDIR/permut.fa $TMPDIR/16S.prf.tmp > $TMPDIR/16S.prf
-# $PFSEARCHV3 -t 1 -n -q $TMPDIR/16S.prf $TMPDIR/small.sample.fastq 
+# $PFSEARCHV3 -t 1 -n -q $TMPDIR/16S.prf $TMPDIR/small.sample.fastq
 
 #----------------------------------------------------------------------#
 # Verify handling of characters not in the profile alphabet
@@ -240,7 +240,7 @@ ACGTWACGT
 EOI
 $PFMAKE -m -3 -S 0.01 -F 100 $TMPDIR/ACGTAACGT.seq $CMPDIR/dna_50_40.cmp > $TMPDIR/ACGTAACGT.prf
 
-$PFSEARCHV3 -fa -o 6 $TMPDIR/ACGTAACGT.prf $TMPDIR/ACGTAACGT.seq # raw_score=450 PSA=ACGTAACGT 
+$PFSEARCHV3 -fa -o 6 $TMPDIR/ACGTAACGT.prf $TMPDIR/ACGTAACGT.seq # raw_score=450 PSA=ACGTAACGT
 $PFSEARCHV3 -fa -o 6 $TMPDIR/ACGTAACGT.prf $TMPDIR/ACGTWACGT.seq # raw_score=383 PSA=ACGTWACGT (not ACGTXACGT)
 
 


=====================================
tests/examples/test_V3_output.sh.cmake
=====================================
@@ -13,6 +13,3 @@ mkdir -p $TMPDIR
 sh -ve ./test_V3.sh  > $TMPDIR/test_V3.out 2>/dev/null
 diff ./test_V3.out $TMPDIR/test_V3.out
 
-
-
-


=====================================
tests/examples/test_pfsearchV3_iupac.pl.cmake
=====================================
@@ -1,4 +1,4 @@
-#!/bin/env perl
+#!/usr/bin/env perl
 
 use strict;
 


=====================================
tests/examples/test_scan_search.pl.cmake
=====================================
@@ -1,4 +1,4 @@
-#!/bin/env perl
+#!/usr/bin/env perl
 
 use strict;
 



View it on GitLab: https://salsa.debian.org/med-team/pftools/-/compare/5761b1891011ce5a977a2200f3ac07b4f6c2a6e6...dbbdfacd26cad62a03536d1a445167b6e79efaac

-- 
View it on GitLab: https://salsa.debian.org/med-team/pftools/-/compare/5761b1891011ce5a977a2200f3ac07b4f6c2a6e6...dbbdfacd26cad62a03536d1a445167b6e79efaac
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20210923/de4c600b/attachment-0001.htm>


More information about the debian-med-commit mailing list