[med-svn] [Git][med-team/proteinortho][master] 6 commits: New upstream version 6.0.7+dfsg

Andreas Tille gitlab at salsa.debian.org
Mon Sep 16 12:38:05 BST 2019



Andreas Tille pushed to branch master at Debian Med / proteinortho


Commits:
e3d760eb by Andreas Tille at 2019-09-16T10:41:53Z
New upstream version 6.0.7+dfsg
- - - - -
103ce999 by Andreas Tille at 2019-09-16T10:41:53Z
New upstream version

- - - - -
afb46e8e by Andreas Tille at 2019-09-16T10:41:54Z
Update upstream source from tag 'upstream/6.0.7+dfsg'

Update to upstream version '6.0.7+dfsg'
with Debian dir 1e9b2d7e350052776d074aaac6c7e7399ff39ef4
- - - - -
12c0b78f by Andreas Tille at 2019-09-16T10:41:54Z
debhelper-compat 12

- - - - -
073c997d by Andreas Tille at 2019-09-16T11:06:46Z
Use 2to3 to port to Python3

- - - - -
46b56795 by Andreas Tille at 2019-09-16T11:37:31Z
s/maxint/maxsize/g

- - - - -


20 changed files:

- CHANGELOG
- CHANGEUID
- Makefile
- README.md
- debian/changelog
- − debian/compat
- debian/control
- + debian/patches/2to3.patch
- + debian/patches/series
- manual.html
- proteinortho6.pl
- src/proteinortho2html.pl
- src/proteinortho2tree.pl
- src/proteinortho2xml.pl
- src/proteinortho_do_mcl.pl
- src/proteinortho_extract_from_graph.pl
- src/proteinortho_ffadj_mcs.py
- src/proteinortho_formatUsearch.pl
- src/proteinortho_grab_proteins.pl
- src/proteinortho_singletons.pl


Changes:

=====================================
CHANGELOG
=====================================
@@ -217,3 +217,7 @@
         proteinortho_grab_proteins.pl speedup for -exact and a given proteinortho file
         proteinortho6.pl replaced chomp with s/[\r\n]+$//
         proteinortho_clustering.cpp fix bug that only uses lapack if -pld is set, regardless of the value.
+    11. Sept (uid: 3813)
+	updated shebang of ffadj such that python2.7 is used directly (ffadj fails if called with higher version of python)
+	-p=blastp is now alias of blastp+ and legacy blast is now -p=blastp_legacy (blastn is equivalent)
+	Makefile: static now includes -lquadmath


=====================================
CHANGEUID
=====================================
@@ -1 +1 @@
-3697
+3813


=====================================
Makefile
=====================================
@@ -132,7 +132,7 @@ ifeq ($(USELAPACK),TRUE)
 ifeq ($(USEPRECOMPILEDLAPACK),TRUE)
 ifeq ($(STATIC),TRUE)
 	@echo "[ 20%] Building **proteinortho_clustering** with LAPACK (static linking)";
-	@$(CXX) $(CXXFLAGS) $(CXXFLAGS_PO) -fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -static -Wl,--allow-multiple-definition -llapack -lblas -lgfortran -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive && ([ $$? -eq 0 ] ) || ( \
+	@$(CXX) $(CXXFLAGS) $(CXXFLAGS_PO) -fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -static -Wl,--allow-multiple-definition -llapack -lblas -lgfortran -lquadmath -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive && ([ $$? -eq 0 ] ) || ( \
 		echo "......$(ORANGE)static linking failed, now I try dynamic linking.$(NC)"; \
 		$(CXX) $(CXXFLAGS) $(CXXFLAGS_PO) -fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -llapack -lblas -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive && ([ $$? -eq 0 ] && echo "......OK dynamic linking was successful for proteinortho_clustering!";) || ( \
 			echo "......$(ORANGE)dynamic linking failed too, now I try dynamic linking without -WL,-whole-archive (this should now work for OSX).$(NC)"; \


=====================================
README.md
=====================================
@@ -39,8 +39,8 @@ You can also send a mail to lechner at staff.uni-marburg.de.
 
 # Installation
 
- **Proteinortho comes with precompiled binaries of all executables (Linux/x86) so just run the proteinortho6.pl in the downloaded directory.**
-You could also move all executables to your favorite bin directory (e.g. with make install PREFIX=/home/paul/bin).
+ **Proteinortho comes with precompiled binaries of all executables (Linux/x86) so you should be able to run perl proteinortho6.pl in the downloaded directory.**
+You could also move all executables to your favorite directory (e.g. with make install PREFIX=/home/paul/bin).
 If you cannot execute the src/BUILD/Linux_x86_64/proteinortho_clustering, then you have to recompile with make, see the section 2. Building and installing proteinortho from source.
 
 <br>
@@ -73,6 +73,21 @@ If you need brew (see [here](https://brew.sh/index_de))
 
 <br>
 
+
+#### Easy installation with dpkg (root privileges are required)
+
+The deb package can be downloaded here: [https://packages.debian.org/unstable/proteinortho](https://packages.debian.org/unstable/proteinortho).
+Afterwards the deb package can be installed with `sudo dpkg -i proteinortho*deb`.
+
+<br>
+
+#### *(Easy installation with apt-get)*
+
+**! Disclamer: Work in progress !**
+*proteinortho will be released to stable with Debian 11 (~2021), then proteinortho can be installed with `sudo apt-get install proteinortho` (currently this installes the outdated version v5.16b)*
+
+<br>
+
 #### 1. Prerequisites
 
 Proteinortho uses standard software which is often installed already or is part of then package repositories and can thus easily be installed. The sources come with a precompiled version of Proteinortho for 64bit Linux.
@@ -94,7 +109,7 @@ Proteinortho uses standard software which is often installed already or is part
      - mmseqs2 (conda install mmseqs2, https://github.com/soedinglab/MMseqs2)
    - Perl v5.08 or higher (to test this, type perl -v in the command line)
    - Python v2.6.0 or higher to include synteny analysis (to test this, type 'python -V' in the command line) 
-   - Perl modules: Thread::Queue, File::Basename, Pod::Usage, threads (if you miss one just install with `cpan install Thread::Queue` )
+   - Perl standard modules (these should come with Perl): Thread::Queue, File::Basename, Pod::Usage, threads (if you miss one just install with `cpan install ...` )
 </details>
 
 <br>
@@ -113,9 +128,9 @@ Proteinortho uses standard software which is often installed already or is part
 
 #### 2. Building and installing proteinortho from source (linux and osx)
 
-  Here you <i>can</i> use a working lapack library, check this with 'dpkg --get-selections | grep lapack'. Install lapack e.g. with 'apt-get install libatlas3-base' or liblapack3.
+  Here you can use a working lapack library, check this with 'dpkg --get-selections | grep lapack'. Install lapack e.g. with 'apt-get install libatlas3-base' or liblapack3.
   
-  If you dont have one (or you have no root permissions), then 'make' will automatically compile a lapack (v3.8.0) for you !
+  If you dont have Lapack, then 'make' will automatically compiles Lapack v3.8.0 for you !
 
   Fetch the latest source code archive downloaded from <a href="https://gitlab.com/paulklemm_PHD/proteinortho/-/archive/master/proteinortho-master.zip">here</a> 
 <details> <summary>or from here (Click to expand)</summary>
@@ -281,7 +296,7 @@ Open `proteinorthoHelper.html` in your favorite browser or visit [lechnerlab.de/
     <details>
       <summary>show all algorithms (Click to expand)</summary>
       
-        - blastn,blastp,tblastx : legacy blast family (shell commands: blastall -) family. The suffix 'n' or 'p' indicates nucleotide or protein input files.
+        - blastn_legacy,blastp_legacy,tblastx_legacy : legacy blast family (shell commands: blastall -) family. The suffix 'n' or 'p' indicates nucleotide or protein input files.
 
         - blastn+,blastp+,tblastx+ : standard blast family (shell commands: blastn,blastp,tblastx)
         family. The suffix 'n' or 'p' indicates nucleotide or protein input files.


=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+proteinortho (6.0.7+dfsg-1) UNRELEASED; urgency=medium
+
+  * New upstream version
+  * debhelper-compat 12
+  * Use 2to3 to port to Python3
+
+ -- Andreas Tille <tille at debian.org>  Mon, 16 Sep 2019 12:41:53 +0200
+
 proteinortho (6.0.6+dfsg-1) unstable; urgency=medium
 
   [ Paul Klemm ]


=====================================
debian/compat deleted
=====================================
@@ -1 +0,0 @@
-12


=====================================
debian/control
=====================================
@@ -3,7 +3,7 @@ Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.
 Uploaders: Andreas Tille <tille at debian.org>
 Section: science
 Priority: optional
-Build-Depends: debhelper (>= 12~),
+Build-Depends: debhelper-compat (= 12),
                ncbi-blast+,
                liblapack-dev | libatlas-base-dev | liblapack.so,
                diamond-aligner


=====================================
debian/patches/2to3.patch
=====================================
@@ -0,0 +1,435 @@
+Description: Use 2to3 to port to Python3
+Author: Andreas Tille <tille at debian.org>
+Last-Update: Mon, 16 Sep 2019 12:41:53 +0200
+
+--- a/src/proteinortho_ffadj_mcs.py
++++ b/src/proteinortho_ffadj_mcs.py
+@@ -1,9 +1,9 @@
+-#!/usr/bin/env python2.7
++#!/usr/bin/python3
+ 
+-from sys import stdout, stderr, exit, argv, maxint
++from sys import stdout, stderr, exit, argv, maxsize
+ from copy import deepcopy
+ from bisect import bisect
+-from itertools import izip, product
++from itertools import product
+ from os.path import basename, dirname
+ from random import randint
+ from math import ceil
+@@ -46,7 +46,7 @@ class Run:
+         adjTerm = 0
+         if len(self.weight) > 1:
+             adjTerm = sum([self.weight[i] * self.weight[i+1] for i in
+-                xrange(len(self.weight)-1)])
++                range(len(self.weight)-1)])
+         edgeTerm = sum([w **2  for w in self.weight])
+ #        edgeTerm = max(self.weight)**2
+         return alpha * adjTerm + (1-alpha) * edgeTerm
+@@ -101,9 +101,9 @@ def readDistsAndOrder(data, edgeThreshol
+         if edgeWeight < edgeThreshold:
+             continue
+ 
+-        if not g1_chromosomes.has_key(chr1):
++        if chr1 not in g1_chromosomes:
+             g1_chromosomes[chr1] = set()
+-        if not g2_chromosomes.has_key(chr2):
++        if chr2 not in g2_chromosomes:
+             g2_chromosomes[chr2] = set()
+ 
+         g1_chromosomes[chr1].add(g1)
+@@ -124,19 +124,19 @@ def readDistsAndOrder(data, edgeThreshol
+ 
+     # add telomeres
+     for t1, t2 in product(tel1, tel2):
+-        if not res.has_key(t1):
++        if t1 not in res:
+             res[t1] = dict()
+         res[t1][t2] = (DIRECTION_BOTH_STRANDS, 1)
+ 
+-#    res[maxint] = dict([
+-#        (maxint, (DIRECTION_WATSON_STRAND, 1)), 
++#    res[maxsize] = dict([
++#        (maxsize, (DIRECTION_WATSON_STRAND, 1)), 
+ #        (0,      (DIRECTION_WATSON_STRAND, 1)), 
+-#        (maxint, (DIRECTION_CRICK_STRAND, 1)),
++#        (maxsize, (DIRECTION_CRICK_STRAND, 1)),
+ #        (0,      (DIRECTION_CRICK_STRAND, 1))])
+-#    res[maxint] = dict([
+-#        (maxint, (DIRECTION_WATSON_STRAND, 1)), 
++#    res[maxsize] = dict([
++#        (maxsize, (DIRECTION_WATSON_STRAND, 1)), 
+ #        (0,      (DIRECTION_WATSON_STRAND, 1)),
+-#        (maxint, (DIRECTION_CRICK_STRAND, 1)), 
++#        (maxsize, (DIRECTION_CRICK_STRAND, 1)), 
+ #        (0,      (DIRECTION_CRICK_STRAND, 1))])
+ 
+     return hasMultipleChromosomes, g1, g2, res
+@@ -148,20 +148,20 @@ def establish_linear_genome_order(chromo
+         g.append((k, -1))
+         telomeres.add((k, -1))
+         g.extend([(k, i) for i in sorted(chromosomes[k])])
+-        g.append((k, maxint))
+-        telomeres.add((k, maxint))
++        g.append((k, maxsize))
++        telomeres.add((k, maxsize))
+     return telomeres, g
+         
+ def insertIntoRunList(runs, runList):
+-    keys = map(lambda x: x.getWeight(alpha), runList)
++    keys = [x.getWeight(alpha) for x in runList]
+     for run in runs:
+         i = bisect(keys, run.getWeight(alpha))
+         keys.insert(i, run.getWeight(alpha))
+         runList.insert(i, run)
+ 
+ def checkMatching(g1, g2, g1_runs, g2_runs, runs, dist):
+-    g1pos = dict(izip(g1, xrange(len(g1))))
+-    g2pos = dict(izip(g2, xrange(len(g2))))
++    g1pos = dict(zip(g1, range(len(g1))))
++    g2pos = dict(zip(g2, range(len(g2))))
+ 
+ 
+     if len(g1) != len(g2):
+@@ -177,7 +177,7 @@ def checkMatching(g1, g2, g1_runs, g2_ru
+     r_counter = 0 
+     prev_run = None
+     c_adj = 0
+-    for i in xrange(len(g1)):
++    for i in range(len(g1)):
+         if not g1_runs[i]:
+             logging.error('Gene %s is not included in any run' %g1[i])
+             continue
+@@ -213,7 +213,7 @@ def checkMatching(g1, g2, g1_runs, g2_ru
+     missing_runs = all_included.symmetric_difference(runs)
+     if missing_runs:
+         logging.error(('Additional runs in runslist that are not part in the' + \
+-                ' matching: %s') %(map(str, missing_runs)))
++                ' matching: %s') %(list(map(str, missing_runs))))
+         
+     logging.info('Number of adjacencies is %s in matching of size %s.' %(c_adj,
+         len(g1)))
+@@ -222,7 +222,7 @@ def checkMatching(g1, g2, g1_runs, g2_ru
+         logging.error(('Sum of run lengths does not equal matching size! Sum ' + \
+                 'of run lengths: %s, matching size: %s') % (r_counter, len(g1)))
+ 
+-    for j in xrange(len(g2)):
++    for j in range(len(g2)):
+         if not g2_runs[j]:
+             logging.error('Gene %s is not included in any run' %g2[j])
+         if len(g2_runs[j]) > 1:
+@@ -262,8 +262,8 @@ def checkMatching(g1, g2, g1_runs, g2_ru
+                     'Weights: %s, run length: %s, run: %s') %(len(r.weight),
+                         g1pos[r.endG1] - g1pos[r.startG1], r)) 
+ 
+-        g1_chromosomes = set(map(lambda x: x[0], g1[g1pos[r.startG1]:g1pos[r.endG1]+1]))
+-        g2_chromosomes = set(map(lambda x: x[0], g2[g2pos[r.startG2]:g2pos[r.endG2]+1]))
++        g1_chromosomes = set([x[0] for x in g1[g1pos[r.startG1]:g1pos[r.endG1]+1]])
++        g2_chromosomes = set([x[0] for x in g2[g2pos[r.startG2]:g2pos[r.endG2]+1]])
+         if len(g1_chromosomes) != 1 and len(g2_chromosomes) != 1:
+             logging.error(('Number of chromosomes on G1 (#chrs: %s) or G2 ' + \
+                     '(#chrs: %s) in run %s is not 1 (Meaning that possibly' + \
+@@ -281,7 +281,7 @@ def checkMatching(g1, g2, g1_runs, g2_ru
+             run_ends[r.startG1] = (r.direction, r.endG2)
+             run_ends[r.endG1] = (r.direction, r.startG2)
+ 
+-    for i in xrange(len(g1)-1):
++    for i in range(len(g1)-1):
+         g1i = g1[i]
+         g1i2 = g1[i+1]
+         if g1i in run_ends and g1i2 in run_ends and run_ends[g1i][0] == \
+@@ -290,13 +290,13 @@ def checkMatching(g1, g2, g1_runs, g2_ru
+             g2i = run_ends[g1i][1]
+             g2i2 = run_ends[g1i2][1]
+             if direction == DIRECTION_CRICK_STRAND and g2pos[g2i] == g2pos[g2i2]-1:
+-                logging.error('Runs %s and %s could be merged, but are not!' % (map(str, g1_runs[i])[0], map(str, g1_runs[i+1])[0])) 
++                logging.error('Runs %s and %s could be merged, but are not!' % (list(map(str, g1_runs[i]))[0], list(map(str, g1_runs[i+1]))[0])) 
+             elif direction == DIRECTION_WATSON_STRAND and g2pos[g2i] == g2pos[g2i2]+1:
+-                logging.error('Runs %s and %s could be merged, but are not!' % (map(str, g1_runs[i])[0], map(str, g1_runs[i+1])[0]))
++                logging.error('Runs %s and %s could be merged, but are not!' % (list(map(str, g1_runs[i]))[0], list(map(str, g1_runs[i+1]))[0]))
+  
+ def getAllRuns(g1, g2, d):
+ 
+-    g2pos = dict(izip(g2, xrange(len(g2))))
++    g2pos = dict(zip(g2, range(len(g2))))
+ 
+     g1_runs = [set() for _ in g1]
+     g2_runs = [set() for _ in g2]
+@@ -305,7 +305,7 @@ def getAllRuns(g1, g2, d):
+     reportedRuns= list()
+ 
+ 
+-    for i in xrange(len(g1)):
++    for i in range(len(g1)):
+ 
+         curPos = g1[i] 
+         
+@@ -355,7 +355,7 @@ def getAllRuns(g1, g2, d):
+ 
+         # if no edge exists, nothing has to be done...
+         if e:
+-            for (g2_gene, (direction, weight)) in d[curPos].items():
++            for (g2_gene, (direction, weight)) in list(d[curPos].items()):
+                 if (direction, g2_gene) not in forbiddenRunStarts:
+                     j = g2pos[g2_gene] 
+                     if isinstance(direction, BothStrands):
+@@ -391,12 +391,12 @@ def replaceByNew(g1_runs, g2_runs, i, j,
+             break
+ 
+ def doMatching(g1, g2, g1_runs, g2_runs, m, runList):
+-    g1pos = dict(izip(g1, xrange(len(g1))))
+-    g2pos = dict(izip(g2, xrange(len(g2))))
++    g1pos = dict(zip(g1, range(len(g1))))
++    g2pos = dict(zip(g2, range(len(g2))))
+  
+     newRuns = set()
+ 
+-    for k in xrange(g1pos[m.endG1] - g1pos[m.startG1] + 1):
++    for k in range(g1pos[m.endG1] - g1pos[m.startG1] + 1):
+         i = g1pos[m.startG1] + k
+         j = g2pos[m.startG2] + k
+ 
+@@ -516,13 +516,13 @@ def doMatching(g1, g2, g1_runs, g2_runs,
+     insertIntoRunList(newRuns, runList)
+ 
+ def mergeRuns(mod_g1, g1, g2, g1_runs, g2_runs, runList, alreadyMatched):
+-    g1pos = dict(izip(g1, xrange(len(g1))))
+-    g2pos = dict(izip(g2, xrange(len(g2))))
++    g1pos = dict(zip(g1, range(len(g1))))
++    g2pos = dict(zip(g2, range(len(g2))))
+ 
+     newRuns = set()
+     wSrt = lambda x: x.getWeight(alpha)
+     mod_g1 = list(mod_g1)
+-    for x in xrange(len(mod_g1)):
++    for x in range(len(mod_g1)):
+         g1i = mod_g1[x]
+         i = g1pos[g1i]
+         if len(g1) < i+2:
+@@ -601,18 +601,18 @@ def removeSingleGenes(genome, genome_run
+ 
+ def findRandomRunSequence(g1, g2, dists, topXperCent):
+     g2dists = dict()
+-    for g1i, x in dists.items():
+-        for g2j, d in x.items():
++    for g1i, x in list(dists.items()):
++        for g2j, d in list(x.items()):
+             if g2j not in g2dists:
+                 g2dists[g2j] = dict()
+             g2dists[g2j][g1i] = d
+ 
+     # copy g1, g2 and dists map, because we'll modify it. Also remove all genes
+     # that do not contain edges.
+-    g1 = [x for x in g1 if dists.has_key(x) and len(dists[x])]
+-    g2 = [x for x in g2 if g2dists.has_key(x) and len(g2dists[x])]
++    g1 = [x for x in g1 if x in dists and len(dists[x])]
++    g2 = [x for x in g2 if x in g2dists and len(g2dists[x])]
+ 
+-    g1pos = dict(izip(g1, xrange(len(g1))))
++    g1pos = dict(zip(g1, range(len(g1))))
+ 
+     g1_runs, g2_runs, runs = getAllRuns(g1, g2, dists)
+     logging.info('Found %s runs.' %len(runs))
+@@ -621,7 +621,7 @@ def findRandomRunSequence(g1, g2, dists,
+     
+     res = set()
+     while runList:
+-        noOfAdjacencies = len(filter(lambda x: x.getWeight(alpha) and x.getWeight(alpha) or 0, runList))
++        noOfAdjacencies = len([x for x in runList if x.getWeight(alpha) and x.getWeight(alpha) or 0])
+         if noOfAdjacencies:
+             randPos = randint(1, ceil(noOfAdjacencies * topXperCent))
+         else:
+@@ -645,7 +645,7 @@ def findRandomRunSequence(g1, g2, dists,
+                 for g in del_g1.intersection(mod_g1):
+                     mod_g1.remove(g)
+ 
+-                g1pos = dict(izip(g1, xrange(len(g1))))
++                g1pos = dict(zip(g1, range(len(g1))))
+             # add new modification points
+             mod_g1.update(new_mod_g1)
+ 
+@@ -653,7 +653,7 @@ def findRandomRunSequence(g1, g2, dists,
+             if del_g2:
+                 logging.info('Zombie genes removed from G2: %s' %', '.join(map(str, del_g2)))
+                 for g2j in mod_g2:
+-                    for g1i, (d, _) in g2dists[g2j].items():
++                    for g1i, (d, _) in list(g2dists[g2j].items()):
+                         if g1i in g1:
+                             if d == DIRECTION_CRICK_STRAND:
+                                 mod_g1.add(g1i)
+@@ -665,8 +665,8 @@ def findRandomRunSequence(g1, g2, dists,
+                     runList, res)
+   
+     if res: 
+-        logging.info('Matching finished. Longest run size is %s.' %(max(map(len,
+-            res))))
++        logging.info('Matching finished. Longest run size is %s.' %(max(list(map(len,
++            res)))))
+     else:
+         logging.info('Matching finished, but no runs found. Empty input?')
+ 
+@@ -681,19 +681,19 @@ def repeatMatching(g1, g2, g1_mod, g2_mo
+     g2_runs_res = g2_runs
+     selectedRuns_res = list()
+ 
+-    g1pos = dict(izip(g1_mod, xrange(len(g1_mod))))
+-    g2pos = dict(izip(g2_mod, xrange(len(g2_mod))))
++    g1pos = dict(zip(g1_mod, range(len(g1_mod))))
++    g2pos = dict(zip(g2_mod, range(len(g2_mod))))
+ 
+ 
+     noReps = repMatching
+ 
+     while repMatching:
+-        for i in xrange(len(g1_runs)):
++        for i in range(len(g1_runs)):
+             run_set = g1_runs[i]
+             if len(run_set) != 1:
+                 logging.error(('Expected run, set length of 1, but was told' + \
+                         ' different: %s.') %(', '.join(map(str, run_set))))
+-            run = run_set.__iter__().next() 
++            run = next(run_set.__iter__()) 
+ 
+             g1i = g1_mod[i]
+ 
+@@ -720,11 +720,11 @@ def repeatMatching(g1, g2, g1_mod, g2_mo
+                     len(g1_mod), noReps-repMatching+2))
+ 
+         # remove runs that fall below min length of minCsSize
+-        ff = lambda x: len(x.__iter__().next()) >= minCsSize
+-        g1_mod = [g1_mod[i] for i in xrange(len(g1_mod)) if ff(g1_runs[i])]
+-        g2_mod = [g2_mod[i] for i in xrange(len(g2_mod)) if ff(g2_runs[i])]
+-        g1_runs = filter(ff, g1_runs)
+-        g2_runs = filter(ff, g2_runs)
++        ff = lambda x: len(next(x.__iter__())) >= minCsSize
++        g1_mod = [g1_mod[i] for i in range(len(g1_mod)) if ff(g1_runs[i])]
++        g2_mod = [g2_mod[i] for i in range(len(g2_mod)) if ff(g2_runs[i])]
++        g1_runs = list(filter(ff, g1_runs))
++        g2_runs = list(filter(ff, g2_runs))
+         selectedRuns = set([s for s in selectedRuns if len(s) >= minCsSize])
+ 
+         # stop if no runs were found matching the criteria
+@@ -736,10 +736,10 @@ def repeatMatching(g1, g2, g1_mod, g2_mo
+         logging.info('%s feasible runs retained.' %len(selectedRuns))
+ 
+         # reconciliate with result data
+-        g2pos = dict(izip(g2_mod, xrange(len(g2_mod))))
+-        g1pos = dict(izip(g1_mod, xrange(len(g1_mod))))
+-        g2pos_res = dict(izip(g2_mod_res, xrange(len(g2_mod_res))))
+-        g1pos_res = dict(izip(g1_mod_res, xrange(len(g1_mod_res))))
++        g2pos = dict(zip(g2_mod, range(len(g2_mod))))
++        g1pos = dict(zip(g1_mod, range(len(g1_mod))))
++        g2pos_res = dict(zip(g2_mod_res, range(len(g2_mod_res))))
++        g1pos_res = dict(zip(g1_mod_res, range(len(g1_mod_res))))
+         
+         chr_srt = lambda x, y: x[0] == y[0] and (x[1] < y[1] and -1 or 1) or (x[0] < y[0] and -1 or 1)
+         g1_mod_new = sorted(set(g1_mod_res + g1_mod), cmp=chr_srt)
+@@ -749,17 +749,17 @@ def repeatMatching(g1, g2, g1_mod, g2_mo
+ 
+         for g1i in g1_mod_new:
+             x = set()
+-            if g1pos_res.has_key(g1i):
++            if g1i in g1pos_res:
+                 x.update(g1_runs_res[g1pos_res[g1i]])
+-            if g1pos.has_key(g1i):
++            if g1i in g1pos:
+                 x.update(g1_runs[g1pos[g1i]])
+             g1_runs_new.append(x)
+ 
+         for g2j in g2_mod_new:
+             x = set()
+-            if g2pos_res.has_key(g2j):
++            if g2j in g2pos_res:
+                 x.update(g2_runs_res[g2pos_res[g2j]])
+-            if g2pos.has_key(g2j):
++            if g2j in g2pos:
+                 x.update(g2_runs[g2pos[g2j]])
+             g2_runs_new.append(x) 
+ 
+@@ -776,21 +776,21 @@ def repeatMatching(g1, g2, g1_mod, g2_mo
+ def printMatching(g1, g2, g1_runs, hasMultipleChromosomes, out):
+ 
+     if hasMultipleChromosomes:
+-        print >> f, 'Chr(G1)\tG1\tChr(G2)\tG2\tdirection\tedge weight'
++        print('Chr(G1)\tG1\tChr(G2)\tG2\tdirection\tedge weight', file=f)
+     else:
+-        print >> f, 'G1\tG2\tdirection\tedge weight'
++        print('G1\tG2\tdirection\tedge weight', file=f)
+ 
+-    g2pos = dict(izip(g2, xrange(len(g2))))
+-    g1pos = dict(izip(g1, xrange(len(g1))))
++    g2pos = dict(zip(g2, range(len(g2))))
++    g1pos = dict(zip(g1, range(len(g1))))
+ 
+ 
+     cur_index = dict()
+-    for i in xrange(len(g1_runs)):
++    for i in range(len(g1_runs)):
+         run_set = g1_runs[i]
+         for run in run_set:
+             g1i = g1[i]
+             j = 0
+-            if cur_index.has_key(run):
++            if run in cur_index:
+                 j = cur_index[run]
+             if run.direction == DIRECTION_CRICK_STRAND:
+                 g2j = g2[g2pos[run.startG2] + j]
+@@ -800,22 +800,22 @@ def printMatching(g1, g2, g1_runs, hasMu
+             direction = run.direction == DIRECTION_CRICK_STRAND and '1' or '-1'
+ 
+             g1i1 = g1i[1] == -1 and 'TELOMERE_START' or g1i[1]
+-            g1i1 = g1i[1] == maxint and 'TELOMERE_END' or g1i1
++            g1i1 = g1i[1] == maxsize and 'TELOMERE_END' or g1i1
+             g2j1 = g2j[1] == -1 and 'TELOMERE_START' or g2j[1]
+-            g2j1 = g2j[1] == maxint and 'TELOMERE_END' or g2j1
++            g2j1 = g2j[1] == maxsize and 'TELOMERE_END' or g2j1
+ 
+             if hasMultipleChromosomes:
+-                print >> f, '%s\t%s\t%s\t%s\t%s\t%s' %(g1i[0], g1i1, g2j[0],
+-                        g2j1, direction, run.weight[j])
++                print('%s\t%s\t%s\t%s\t%s\t%s' %(g1i[0], g1i1, g2j[0],
++                        g2j1, direction, run.weight[j]), file=f)
+             else:
+-                print >> f, '%s\t%s\t%s\t%s' %(g1i1, g2j1, direction,
+-                        run.weight[j])
++                print('%s\t%s\t%s\t%s' %(g1i1, g2j1, direction,
++                        run.weight[j]), file=f)
+ 
+             cur_index[run] = j+1
+ 
+ if __name__ == '__main__':
+     if len(argv) < 3 or len(argv) > 8:
+-        print '\tusage: %s <DIST FILE> <ALPHA> [ <EDGE WEIGHT THRESHOLD> --repeat-matching (-R) <NUMBER >= 2> --min-cs-size (-M) <NUMBER >= 1> ]' %argv[0]
++        print('\tusage: %s <DIST FILE> <ALPHA> [ <EDGE WEIGHT THRESHOLD> --repeat-matching (-R) <NUMBER >= 2> --min-cs-size (-M) <NUMBER >= 1> ]' %argv[0])
+         exit(1)
+    
+     repMatching= '--repeat-matching' in argv or '-R' in argv
+@@ -826,8 +826,8 @@ if __name__ == '__main__':
+         minCsSize = int(argv[pos+1])
+         argv = argv[:pos] + argv[pos+2:]
+         if not repMatching:
+-            print >> stderr, ('Argument --min-cs-size (-M) only valid in ' + \
+-                    'combination with --repeat-matching (-R)')
++            print(('Argument --min-cs-size (-M) only valid in ' + \
++                    'combination with --repeat-matching (-R)'), file=stderr)
+             exit(1)
+     else:
+         minCsSize = 1
+@@ -869,7 +869,7 @@ if __name__ == '__main__':
+     # sum of weights of adjacencies
+     wAdj = sum([r.getWeight(1) for r in selectedRuns])
+     # sum of weights of all edges of the matching
+-    wEdg = sum([sum(map(lambda x: x**2, r.weight)) for r in selectedRuns])
++    wEdg = sum([sum([x**2 for x in r.weight]) for r in selectedRuns])
+ 
+     edg = sum(map(len, selectedRuns))
+ 
+@@ -892,6 +892,6 @@ if __name__ == '__main__':
+             ' is %s with #edg = %s, adj(M) = %.3f and edg(M) = %.3f') %(bkp, edg,
+                 wAdj, wEdg))
+ 
+-    print '#bkp\t#edg\tadj\tedg'
+-    print '%s\t%s\t%.6f\t%.6f' %(bkp, edg, wAdj, wEdg)
++    print('#bkp\t#edg\tadj\tedg')
++    print('%s\t%s\t%.6f\t%.6f' %(bkp, edg, wAdj, wEdg))
+ 


=====================================
debian/patches/series
=====================================
@@ -0,0 +1 @@
+2to3.patch


=====================================
manual.html
=====================================
@@ -58,8 +58,8 @@ You can also send a mail to lechner at staff.uni-marburg.de.</p>
 
 <h1 id="installation">Installation</h1>
 
-<p><strong>Proteinortho comes with precompiled binaries of all executables (Linux/x86) so just run the proteinortho6.pl in the downloaded directory.</strong>
-You could also move all executables to your favorite bin directory (e.g. with make install PREFIX=/home/paul/bin).
+<p><strong>Proteinortho comes with precompiled binaries of all executables (Linux/x86) so you should be able to run perl proteinortho6.pl in the downloaded directory.</strong>
+You could also move all executables to your favorite directory (e.g. with make install PREFIX=/home/paul/bin).
 If you cannot execute the src/BUILD/Linux<em>x86</em>64/proteinortho_clustering, then you have to recompile with make, see the section 2. Building and installing proteinortho from source.</p>
 
 <p><br></p>
@@ -95,6 +95,20 @@ If you cannot execute the src/BUILD/Linux<em>x86</em>64/proteinortho_clustering,
 
 <p><br></p>
 
+<h4 id="easyinstallationwithdpkgrootprivilegesarerequired">Easy installation with dpkg (root privileges are required)</h4>
+
+<p>The deb package can be downloaded here: <a href="https://packages.debian.org/unstable/proteinortho">https://packages.debian.org/unstable/proteinortho</a>.
+Afterwards the deb package can be installed with <code>sudo dpkg -i proteinortho*deb</code>.</p>
+
+<p><br></p>
+
+<h4 id="easyinstallationwithaptget"><em>(Easy installation with apt-get)</em></h4>
+
+<p><strong>! Disclamer: Work in progress !</strong>
+<em>proteinortho will be released to stable with Debian 11 (~2021), then proteinortho can be installed with <code>sudo apt-get install proteinortho</code> (currently this installes the outdated version v5.16b)</em></p>
+
+<p><br></p>
+
 <h4 id="1prerequisites">1. Prerequisites</h4>
 
 <p>Proteinortho uses standard software which is often installed already or is part of then package repositories and can thus easily be installed. The sources come with a precompiled version of Proteinortho for 64bit Linux.</p>
@@ -128,7 +142,7 @@ If you cannot execute the src/BUILD/Linux<em>x86</em>64/proteinortho_clustering,
 
 <li><p>Python v2.6.0 or higher to include synteny analysis (to test this, type 'python -V' in the command line) </p></li>
 
-<li><p>Perl modules: Thread::Queue, File::Basename, Pod::Usage, threads (if you miss one just install with <code>cpan install Thread::Queue</code> )
+<li><p>Perl standard modules (these should come with Perl): Thread::Queue, File::Basename, Pod::Usage, threads (if you miss one just install with <code>cpan install ...</code> )
 </details></p></li>
 </ul>
 
@@ -154,9 +168,9 @@ If you cannot execute the src/BUILD/Linux<em>x86</em>64/proteinortho_clustering,
 
 <h4 id="2buildingandinstallingproteinorthofromsourcelinuxandosx">2. Building and installing proteinortho from source (linux and osx)</h4>
 
-<p>Here you <i>can</i> use a working lapack library, check this with 'dpkg --get-selections | grep lapack'. Install lapack e.g. with 'apt-get install libatlas3-base' or liblapack3.</p>
+<p>Here you can use a working lapack library, check this with 'dpkg --get-selections | grep lapack'. Install lapack e.g. with 'apt-get install libatlas3-base' or liblapack3.</p>
 
-<p>If you dont have one (or you have no root permissions), then 'make' will automatically compile a lapack (v3.8.0) for you !</p>
+<p>If you dont have Lapack, then 'make' will automatically compiles Lapack v3.8.0 for you !</p>
 
 <p>Fetch the latest source code archive downloaded from <a href="https://gitlab.com/paulklemm_PHD/proteinortho/-/archive/master/proteinortho-master.zip">here</a> 
 <details> <summary>or from here (Click to expand)</summary></p>
@@ -345,7 +359,7 @@ blast. 3 -> run the clustering.</p></li></ul>
 <p><details>
   <summary>show all algorithms (Click to expand)</summary></p>
 
-<pre><code>- blastn,blastp,tblastx : legacy blast family (shell commands: blastall -) family. The suffix 'n' or 'p' indicates nucleotide or protein input files.
+<pre><code>- blastn_legacy,blastp_legacy,tblastx_legacy : legacy blast family (shell commands: blastall -) family. The suffix 'n' or 'p' indicates nucleotide or protein input files.
 
 - blastn+,blastp+,tblastx+ : standard blast family (shell commands: blastn,blastp,tblastx)
 family. The suffix 'n' or 'p' indicates nucleotide or protein input files.


=====================================
proteinortho6.pl
=====================================
The diff for this file was not included because it is too large.

=====================================
src/proteinortho2html.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 #pk
 
 ##########################################################################################


=====================================
src/proteinortho2tree.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 
 ##########################################################################################
 #	  This file is part of proteinortho.


=====================================
src/proteinortho2xml.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 
 use strict;
 use warnings "all";


=====================================
src/proteinortho_do_mcl.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 #pk
 
 ##########################################################################################


=====================================
src/proteinortho_extract_from_graph.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 
 use warnings;
 use strict;


=====================================
src/proteinortho_ffadj_mcs.py
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python2.7
 
 from sys import stdout, stderr, exit, argv, maxint
 from copy import deepcopy


=====================================
src/proteinortho_formatUsearch.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 
 use warnings;
 use strict;


=====================================
src/proteinortho_grab_proteins.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 #pk
 
 ##########################################################################################


=====================================
src/proteinortho_singletons.pl
=====================================
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 use strict;
 use warnings "all";
 



View it on GitLab: https://salsa.debian.org/med-team/proteinortho/compare/1e3a8b8e4293c01d8302b126fbea38f0c1399f0b...46b56795faef96c95bb86901b1e453561560c447

-- 
View it on GitLab: https://salsa.debian.org/med-team/proteinortho/compare/1e3a8b8e4293c01d8302b126fbea38f0c1399f0b...46b56795faef96c95bb86901b1e453561560c447
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/20190916/62cd67ab/attachment-0001.html>


More information about the debian-med-commit mailing list