From 29f95816f885e1673de2c85f9a458dcdcee17cc4 Mon Sep 17 00:00:00 2001
From: fabrice <fabrice.allain@pasteur.fr>
Date: Wed, 10 Feb 2016 19:31:04 +0100
Subject: [PATCH] Moving nb_c selection criteria in mapfilter object

---
 ariaec/econverter.py  |   4 ++--
 ariaec/econverter.pyc | Bin 26555 -> 26563 bytes
 ariaec/maplot.py      |  48 +++++++++++++++++++-----------------------
 ariaec/maplot.pyc     | Bin 5575 -> 5092 bytes
 ariaec/protmap.py     |  12 ++++++++++-
 ariaec/protmap.pyc    | Bin 44719 -> 44991 bytes
 ariaec/setup.py       |   7 +++---
 ariaec/setup.pyc      | Bin 7849 -> 7771 bytes
 8 files changed, 39 insertions(+), 32 deletions(-)

diff --git a/ariaec/econverter.py b/ariaec/econverter.py
index 12cb50b..43be5f8 100644
--- a/ariaec/econverter.py
+++ b/ariaec/econverter.py
@@ -609,13 +609,13 @@ class AriaEcXMLConverter(AriaXMLConverter):
         self.write_dist_xml(restraint_dict, xml_file)
         return xml_file, pair_list
 
-    def write_maplist_restraints(self, maplist, nb_c, targetmap):
+    def write_maplist_restraints(self, maplist, targetmap):
         out = ([], [])
 
         for maptype in maplist:
             logger.info("Writing %s ARIA XML distance restraints" % maptype)
             outfile, pairlist = self.write_map_restraint(
-                maplist[maptype]['contactmap'], nb_c,
+                maplist[maptype]['contactmap'], maplist[maptype]["nb_c"],
                 targetmap, listname=maptype,
                 scoremap=maplist[maptype].get("scoremap"))
             out[0].append(outfile)
diff --git a/ariaec/econverter.pyc b/ariaec/econverter.pyc
index 6bbbd21a23bd32173f036d4b551e8226d50e9e95..e26b3b94245c0af6e890d9401b7cd155d7e93ef7 100644
GIT binary patch
delta 253
zcmdmep7HQ`Mt0`Uyj%xrc5h^#>Q~Rqz`(!`#9Tn^oWRIXybQ=l2ctA5hFWHZipdN$
zj0`TZ-3+xX3?&Q<S&R%Rj0`m_3}VfU42(5E0Va?Fpnzlw6N4m-$qZyNF{H47BvM#m
zDzcbC9H7Q#W~LaR@vL?XwQLMEKv6aZ$t<8^uq0y*Pz-7$JA(~Kngb%u2GYw|D9jKJ
w6b#njoE+$H#w5x(xy9d26y%E_ejrf-V&x_l<YX3?On&0OlTmE*yZ~8o020G6Z~y=R

delta 247
zcmX?no^khiMt0`Uyj(S>wrpgd>Q~Rgz`(!(#9Tn^oWRIXJP*i72ctA5hFTVeif)D)
zMh2JIW`<f;h7tybEJlVDMur+z2C-&F2F4no024?7P(U(;i9xak$YW+mVFn4Lu)t)p
zfI=(`Kn=~zOff)X*%)fs8ERM<Qp|wbvVh9iK$46#KtZTcYz#Iad3K02J6O6<m?0b}
y7_7lDInv*3@)Un(DUj2H_<=+TJCMjtEXc_$E(sE4WMG*5#(yUx-{xfjvf=<P9WS{6

diff --git a/ariaec/maplot.py b/ariaec/maplot.py
index e6e84fa..faf3c25 100644
--- a/ariaec/maplot.py
+++ b/ariaec/maplot.py
@@ -88,8 +88,8 @@ class AriaEcContactMap(object):
             logger.error("First contact map should be a valid file")
             sys.exit(1)
 
-        nb_c = int(len(self.protein.aa_sequence.sequence) *
-                   self.settings.setup.config.get("n_factor"))
+        # nb_c = int(len(self.protein.aa_sequence.sequence) *
+        #            self.settings.setup.config.get("n_factor"))
         plotparams = {k: self.settings.contactmap.config.get(k, None)
                       for k in ('size_fig', 'plot_ext', 'plot_dpi')}
         outdir = self.settings.outdir
@@ -109,8 +109,11 @@ class AriaEcContactMap(object):
                     mergecontactmap = mergemaps.get("contactmap")
                     for mapt in self.allresmap.keys():
                         if mapt != self.reftype:
+                            # TODO: DON'T WORK !!!!
+                            logger.info("Merging %s with %s map" % (
+                                mergetype, mapt))
                             up_map = self.allresmap[mapt]["contactmap"]
-                            up_map[:] = up_map.add(mergecontactmap)
+                            up_map[:] = up_map[:] + mergecontactmap[:]
                             mergekey = "%s_%s" % (mapt, mergetype)
                             self.allresmap[mergekey] = {}
                             self.allresmap[mergekey]["contactmap"] = up_map
@@ -127,29 +130,22 @@ class AriaEcContactMap(object):
                 continue
 
             scoremap = self.allresmap[mapt].get('scoremap', None)
-            if self.allresmap[mapt].get("contactmap") is not None and \
-                    self.allresmap[mapt].get("scoremap") is not None:
-
-                if not self.settings.contactmap.args.get("nofilter"):
-                    # Get top contact map/list
-                    cmpmap = self.allresmap[mapt]["contactmap"].topmap(
-                        self.allresmap[mapt]["scoremap"], nb_c)
-                    cmplist = self.allresmap[mapt]['scoremap'].sortedset(
-                        human_idx=True)[:nb_c]
-                else:
-                    cmpmap = self.allresmap[mapt]["contactmap"]
-                    cmplist = self.allresmap[mapt]['scoremap'].sortedset(
-                        human_idx=True)
-            elif self.allresmap[mapt].get("contactmap") is not None:
-                # If no score given, use all contact list
-
-                cmpmap = self.allresmap[mapt]["contactmap"]
-                cmplist = self.allresmap[mapt]['contactmap'].contact_list(
-                    human_idx=True)
-            else:
-                logger.warning("%s map doesn't have any score related. Can't "
-                               "define top list related to this map" % mapt)
-                continue
+            # if self.allresmap[mapt].get("contactmap") is not None and \
+            #         self.allresmap[mapt].get("scoremap") is not None:
+            #     Get top contact map/list
+            #     cmpmap = self.allresmap[mapt]["contactmap"].topmap(
+            #         self.allresmap[mapt]["scoremap"], nb_c)
+            #     cmplist = self.allresmap[mapt]['scoremap'].sortedset(
+            #         human_idx=True)[:nb_c]
+            # elif self.allresmap[mapt].get("contactmap") is not None:
+            #     If no score given, use all contact list
+            cmpmap = self.allresmap[mapt]["contactmap"]
+            cmplist = self.allresmap[mapt]['contactmap'].contact_list(
+                human_idx=True)
+            # else:
+            #     logger.warning("%s map doesn't have any score related. Can't "
+            #                    "define top list related to this map" % mapt)
+            #     continue
 
             # TODO: only one function for output files
             # Write contact list in txt file
diff --git a/ariaec/maplot.pyc b/ariaec/maplot.pyc
index 9485feeaeea2116ee0f066de2f444a57e1df944f..87aacf7ef15a713f3eee8a8d13dd536a03ee12be 100644
GIT binary patch
delta 1055
zcmZ`&O-~b16g{^yoql&ZrF@iPQ(KTiDd5LSATfrmF@mHkL}UOvC`vnoCeFyB5sAjQ
zcw0CA1k+#ON*BbKC|i}pH4FU%-Zw2uNKD>L-`sodIp^JX`=Ru6SW|w-!oQxr(+(6p
z3Bce-xl5>1pmn6oD_5TbYXmckJ-{5tY?I*nu@6`(tUO%pWbcQi!3x66gE6&3MVt@y
z7Y`MOaYdMYa5R{`Faxk6UQHZk0c$>qcKqTf(6>7X6KMKS`=)jTn3VBMIw)ao0F5tj
z0+?O=2sa2P=n)mLp`oUGH3e8BGA_{}I3ce%<9&wFc-_HUqiBLzp1_U3Y1_$ScSAvK
zLACj8X_!NjhI8z&huKIvD#$?E%pmPX;Y5*j!pQdWrf6P}DXx%kH-;)YQceuh4CqwH
zyz1$#1(jE2OILYSHi5=~Zyz&K;KW+Q$JS0a>#xl<#XC-13QF26Hn?T3$b~X_*Du>$
zI$PN8vUdk!F_ftutE~C&K(fKZo!-0psf2gZ#F>CK2D1pe%q=9>fD{~ulaLgSF0a_(
zn{8kBh&T%Oi67zKRK280J;qLWS5o3}5QCBO?y<_H|8?A^^vIgzBMF_9iVo|t%9v;E
zoZO__p4!4qMIq_yqUY<hqr6wasm{1w?#!!MK9c}Pyvf8XQfcd0<yGPFoG(tal;}3K
zp2cRUzlZ-WH&$!w)y?(XP(8O(weQQ{hs%$}`}mNU(yt}P88SB^Uz7YQUJ@_$St_+Y
z>tzz7Ms_UD(Vbe=UR_#wv}rG|*mXO~q0YzBgKFKjRSw*)ZLf;A#tbFJcVk2t$p&2!
zFOqw7AdId%qzbz$R}4{{42n^LpS-WfmnEGBC`%eeDNLF#9X2RMp`iHMb(1VH)qPLw
YrLJqYn160Yd`eZc4Y{2XrS3O>05O`<asU7T

delta 1539
zcmaJ>O>7%Q6#m9*um69OG)WWErEZAx<0Pe&0!mR3ITS8MDJVh+%;H(MUWawPJE5sq
z%Se_27fy3Q6-O@IK<3^92QDD>))R*cgpfEPj$C*%u^TrMm3DV#-n{p{?|pA(e_#4(
z)inOermi%<H-9$r697u|8XqzQ3yHxa<A%`^6^Lbg0l0a%D{xoQXL=chI|bK-n*d)>
z#z}g+F?<d*82C9H0ek~H%4&`x&Z8S2&10kJvWoW2sPy7zD`qq#<TdaagmLg`@HpJG
zj>&;vKqI2OLsNbipXn`v1N{j6f1`>a1rjLv6QxDv)=l8>KEecc-v0sJB*LTyDx+n>
z-_|i@xK(9W-YJAB9XzL(X&in!^mo_M2cg_VH-j*vtqbV24ERSw7_!dtIm~vm2(xfE
z5T-TLEGqmt6+=mg{F!bJO$=ef9Ja_=aW8`w3Sg^q6s2dcvmK>p&jSwUjbo1yi?l&3
zNSBqz!aSzbFf{f23CR}8b1$Z}J%2BzwB39{Qi?p5R0}S*lXJavjFJvHQBg|GrJ>N>
z!l@0d6g8ohg#Vd&I*3GlVsE@bQ;KMCeJn<)=Uznb1cma>hB4LQZgDKJGP}=%)6u*{
zePQHcbxY_xItBLBAPVs8F;G>euBJDn{L53(6xSC{C@8c^2x{bI@MWd`87hx;(pvHt
z5f+t*VL_efFh4roD?0zUDpYKYA;VYYugU3&YjLFo?O)Nya*eKpjHjy9A;SCLMjq$U
z_ovSyOu4=U>U>zzsjE8aGvHM^Z(73RyVf@hrq0L9n(R2u@)%8Z;V*&fJImKkZGbFP
zc4*>D7FEU5vqy5?sB8}YNFA`ONYMYqt2OMpX#0crGFO=#WG}oEyhY~4!1~y}ZSl4f
zcuT^%Wq;yWws+SG>TTb#d}rSl4qvxkx799p8col!MEkb2-wecPn+%q?)znDxVRpN)
zLBPA4>T{7kl~?3aZilT6_H$LXW{{=n38BV)#}jE9ZMzmYodd_KJDTfgA-~F>dsjKy
zoQoWdcl@SsYW21!sFpyOWFj(DfJo9bX!}GqaD<4`>TUnP5gD2c-D`@nh?C)t?R!n{
zru;2`l}*TJ3(E=R?|oFO%Qp&l*=6}-;fVby-z<I*i%hY3CciCOMv)cdgW}mTt>+^%
zks_OBldM4FB+IaQ+NLp*WC><O<=@5YOvu+t-<Z1uy!)#BtF&hxsOgrxHu3d;(`7q(

diff --git a/ariaec/protmap.py b/ariaec/protmap.py
index 2c4d6c4..e7770cd 100644
--- a/ariaec/protmap.py
+++ b/ariaec/protmap.py
@@ -1154,13 +1154,23 @@ class MapFilter:
                            outprefix=outprefix, clashlist=clashlist)
 
         # Contactmap always filtered
+        # TODO: could set a treshold instead of n_factor
+        nb_c = int(len(mapdict["contactmap"].sequence) * int(
+            self.settings.get("n_factor")))
+        nb_c = nb_c if nb_c < len(mapdict["contactmap"].contactset()) else len(
+            mapdict["contactmap"].contactset())
+        mapdict["nb_c"] = nb_c
+
         logger.info("Update %s contactmap" % mtype)
         mapdict["contactmap"].remove(clash_list)
 
         if mapdict["scoremap"] is not None:
             logger.info("Update %s scoremap" % mtype)
             mapdict["scoremap"].remove(clash_list)
-
+            # Get nb_c top maps
+            logger.info("Select top %d contacts according to scoremap" % nb_c)
+            mapdict["contactmap"] = mapdict["contactmap"].topmap(mapdict["scoremap"],
+                                                                 nb_c)
         if mapdict["distmap"] is not None:
             logger.info("Update %s distmap" % mtype)
             mapdict["distmap"].remove(clash_list)
diff --git a/ariaec/protmap.pyc b/ariaec/protmap.pyc
index 54569b1adf071f90fae56777a2dd4412ab5688a0..8db6c48e6cb3a4ed54deb7dbb53520b93340ab44 100644
GIT binary patch
delta 660
zcmZuuO=}ZT6g~H)8JpPBe2megh_eY~5xWpKLKj6r7b3_6mu-zRu{5=lka;Ve5+Mt>
z%0pcEL2Y(zQ6xXW4=B`y;KH4V{Q>S=xe&a!Gqx6lxrh7SIp?1D-n{;%-hNkB>gQzk
zUG&EK^1NmP$Z}n}NeIuSfF)opgJs6-J|0JuhF=+}7eA;!1wDa?;O9|p=P)4XDMUb<
z&{psZvcsRvwN^w_{8ygG079++y@p~g_%9v%B%_E~eGKh!_%<Si(tym&y49EH0-}t}
zBGH{d*{@(FgWfNd7)puZKyc_t6es0$JTg|uOg?WsjER9tZaEuZzdLo1adsw^j3^%o
zVZ~uc>}u4eNB#B7)OYU@pvU={gT>oTPj`BHOcu8my-<F@jjrF+EvFhfUMJ8jSZ#LQ
zYfOZNBW&n(dM)O{I&U{xcUqoybf@c7{lCW0X?iU3mxCo{oY-J~zdS>>IlZAPU)kuM
z7kDagLEt(=%{EUq9;V#)WIk8s&Heebc`%%$1@m|~H$7IOGF7QaS(T@}%8?)!<!H1w
zbS&C6w0T#36z@WMhwu8#>}_sYAGmXO&7-aQ#3yO5O4<&YSK2f6?K!$KTHU^={s5&d
BmoWeU

delta 324
zcmdmgpK1MFCN}2Jyj<#88`-YR)evT2VBi8`=LANE;z>*l4CxFEwVVu@K#~hgax>Jh
zGNg!aW}5egF_oPmi-RFWkfDZ&L9CgPfw6{>Aw`HmGK-&~hLZs%Aj}|{BF>P_$xsx@
zR07c<f}#Vc0HGs~fdOQSC|pzD<o*RxLU0oy^1&Jso8=d}F-~q+B*jwA$iOgp<|3KN
z&lbrt3QT5MT*77v^n!-)<VlMsO#UbyJ-H#4b#nU>UPiykQ<pe!GYc{bG6^sWGKw&5
z{;))Wjq%uI!PQkv#~CMIkcwkH3^Z-h<PWP?vmF4kf{smIxJHNPG>GX9G&JZi<K%TE
R$&+o?IxyO9u3hWI1OPvkQ1Ac%

diff --git a/ariaec/setup.py b/ariaec/setup.py
index 3ef69fc..1f7ebb4 100644
--- a/ariaec/setup.py
+++ b/ariaec/setup.py
@@ -152,10 +152,11 @@ class AriaEcSetup:
 
         # --------------------------- XML restraints ------------------------- #
         # Setting contact number limit for map restraints (native, ec, ...)
-        nb_c = int(len(self.protein.aa_sequence.sequence) *
-                   self.settings.setup.config.get("n_factor"))
+        # nb_c = int(len(self.protein.aa_sequence.sequence) *
+        #            self.settings.setup.config.get("n_factor"))
+
         dist_files, pair_lists = self.converter.write_maplist_restraints(
-            self.allresmap, nb_c, self.targetmap)
+            self.allresmap, self.targetmap)
 
         # --------------------------- XML SEQ file --------------------------- #
         seq_file = self.converter.write_xmlseq(self.protein.seqfile_path)
diff --git a/ariaec/setup.pyc b/ariaec/setup.pyc
index 2c203fc610f2eb1c46dc83d36a578f3c6613219d..d391fe1f93828eeb4157994a6c5b300272ec3926 100644
GIT binary patch
delta 529
zcmYk2%S#(k6o=0p=Z@xOhNMu9rbz2Z(1j0Lb&-M~(nX}D*K7&~4Q3V&7{knH8c0@w
zE=4%f?nGRr3lW)i)0Mc;g%#|!-BoJ;05@IsoB_eb{rJv<ANStRFMs8YuDe9^w0UA&
z>&XZJ#Ochh3h?eE{?Y5g!jhaNew5?Hb2%ie;IACj3rzqg0nP-lWJ3-^TZ3f{S`u1D
z*rA2VP<p|cg0_HGcUbD+nBW*tc?$h*2X~{7^JFx4JCgGr&Z}Kev7ps+ANU-a<dh?!
zsYB%%REF^;nv)hR<wgQC_C*9g;`^G2U@bY0o#df7z=FA}cSl5DaASTK#w&WGdVyb4
zn9Gy;y@a~E?%OMCn^nKO=6mWbuOt{ThQeBUDpp`!WGvuO+LI;H<G_0KPfjkA`Z}TL
zZrN&%L>0NkUs`O`>;>1|bk#KXXBbQPI<x(x!P;hwF&sh|vQe%zR2_e3s;0+1Nho`s
z?Wy;;I#7}uRA1uRz)r>{Q+yAVV$3mkngd?Mi@}umfIkO!j9H$%!D{xMvBx@%SJ^)C
Q32(FCB6?giwX{fz|2O-0SpWb4

delta 568
zcmZXPJ#W)c6o$`Dd@r$^G*&{@(mJT>M;giy3aBj-87c%~pc1+*0}^QnNg826T-h#F
zAW?^^TU9;|R4_5X!U96xDrN@6z{WsV#1CL$gL8r^Au-%XkKcRz9{bz*HzgJSnX(pE
z->WZ1+5&(ioeMVw1XBvX8yg~zWjRmWlSSf3IV$qe4>@h%2XnGG23rD-(&<X*0Jte|
zPxT}RoxjNhY{lV547v)sM{vd(Y$kdG2Dmo33hLu<%s-If32>*uJ@elkb<;I>|NBNO
z4)r{A&BLW<p+ip13OWYVC!juw@2rB%!%|@iOPTTLxAj;g6ZCJb%4)S1dVcgU`7$Of
zET)SIgY#RJ8kW<q#A_7xql7Ua9AS!)=$ZXlsLM2<XR(>VLWwl&Cv5n)!$zg%wL<C(
zwC0f%qmQwKW7*SvS6CMrm#~rz<O=EA=xg?uoGFurym;APZ|DV{xyF&nQG2a%(f2)H
z&v8D_Sbj2m@Aw0@ZN^E)9YU|;Zgs7#+xT?2Wv_E43DqEI1o}QYPFZ^N{0YO6-GL^V
w=FiX>MsKf&gH9;6amU$J=QzEJqq*y9k97_=b3@_<KF{r&@np=7Wkp*20Y|8M;{X5v

-- 
GitLab