sumatra_v1.0.36+ds/0000755000175000017500000000000013645063743013500 5ustar pierrepierresumatra_v1.0.36+ds/global.mk0000644000175000017500000000050713446631207015266 0ustar pierrepierre LIBSUMAPATH = -L./sumalibs LIBSUMA = ./sumalibs/libsuma.a CC=gcc LDFLAGS= ifeq ($(CC),gcc) CFLAGS = -O3 -s -DOMP_SUPPORT -w else CFLAGS = -O3 -w endif default: all %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< $(LIB) ######## # # libraries compilation # ######## ./sumalibs/libsuma.a: $(MAKE) -C ./sumalibs sumatra_v1.0.36+ds/Makefile0000644000175000017500000000122113446717316015135 0ustar pierrepierrePREFIX=/usr/local CFLAGS=-I$(PREFIX)/include EXEC = sumatra SUMATRA_SRC = sumatra.c \ mtcompare_sumatra.c SUMATRA_OBJ = $(patsubst %.c,%.o,$(SUMATRA_SRC)) SRCS = $(SUMATRA_SRC) LIB = -lsuma -lz -lm include ./global.mk all: $(EXEC) ######## # # sumatra compilation # ######## # executable compilation and link sumatra: $(SUMATRA_OBJ) $(CC) $(LDFLAGS) -o $@ -pthread $(SUMATRA_OBJ) $(LIBSUMAPATH) $(LIB) ######## # # project management # ######## clean: rm -f $(SUMATRA_OBJ) rm -f $(EXEC) $(MAKE) -C ./sumalibs clean install: all install -d $(DESTDIR)$(PREFIX)/bin/ install -m 755 $(EXEC) $(DESTDIR)$(PREFIX)/bin/ sumatra_v1.0.36+ds/sumatra.h0000644000175000017500000000043613446710765015332 0ustar pierrepierre/* * sumatra.h * * Created on: 8 ao�t 2010 * Author: coissac */ #ifndef SUMATRA_H_ #define SUMATRA_H_ #include "libfasta/sequence.h" void printResults(fastaSeqPtr seq1, fastaSeqPtr seq2, double score, BOOL extradata, int64_t pairs, BOOL print); #endif /* SUMATRA_H_ */ sumatra_v1.0.36+ds/Licence_CeCILL_V2-en.txt0000644000175000017500000005115112551720621017616 0ustar pierrepierre CeCILL FREE SOFTWARE LICENSE AGREEMENT Notice This Agreement is a Free Software license agreement that is the result of discussions between its authors in order to ensure compliance with the two main principles guiding its drafting: * firstly, compliance with the principles governing the distribution of Free Software: access to source code, broad rights granted to users, * secondly, the election of a governing law, French law, with which it is conformant, both as regards the law of torts and intellectual property law, and the protection that it offers to both authors and holders of the economic rights over software. The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) license are: Commissariat l'Energie Atomique - CEA, a public scientific, technical and industrial research establishment, having its principal place of business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. Centre National de la Recherche Scientifique - CNRS, a public scientific and technological establishment, having its principal place of business at 3 rue Michel-Ange, 75794 Paris cedex 16, France. Institut National de Recherche en Informatique et en Automatique - INRIA, a public scientific and technological establishment, having its principal place of business at Domaine de Voluceau, Rocquencourt, BP 105, 78153 Le Chesnay cedex, France. Preamble The purpose of this Free Software license agreement is to grant users the right to modify and redistribute the software governed by this license within the framework of an open source distribution model. The exercising of these rights is conditional upon certain obligations for users so as to preserve this status for all subsequent redistributions. In consideration of access to the source code and the rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors only have limited liability. In this respect, the risks associated with loading, using, modifying and/or developing or reproducing the software by the user are brought to the user's attention, given its Free Software status, which may make it complicated to use, with the result that its use is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the suitability of the software as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions of security. This Agreement may be freely reproduced and published, provided it is not altered, and that no provisions are either added or removed herefrom. This Agreement may apply to any or all software for which the holder of the economic rights decides to submit the use thereof to its provisions. Article 1 - DEFINITIONS For the purpose of this Agreement, when the following expressions commence with a capital letter, they shall have the following meaning: Agreement: means this license agreement, and its possible subsequent versions and annexes. Software: means the software in its Object Code and/or Source Code form and, where applicable, its documentation, "as is" when the Licensee accepts the Agreement. Initial Software: means the Software in its Source Code and possibly its Object Code form and, where applicable, its documentation, "as is" when it is first distributed under the terms and conditions of the Agreement. Modified Software: means the Software modified by at least one Contribution. Source Code: means all the Software's instructions and program lines to which access is required so as to modify the Software. Object Code: means the binary files originating from the compilation of the Source Code. Holder: means the holder(s) of the economic rights over the Initial Software. Licensee: means the Software user(s) having accepted the Agreement. Contributor: means a Licensee having made at least one Contribution. Licensor: means the Holder, or any other individual or legal entity, who distributes the Software under the Agreement. Contribution: means any or all modifications, corrections, translations, adaptations and/or new functions integrated into the Software by any or all Contributors, as well as any or all Internal Modules. Module: means a set of sources files including their documentation that enables supplementary functions or services in addition to those offered by the Software. External Module: means any or all Modules, not derived from the Software, so that this Module and the Software run in separate address spaces, with one calling the other when they are run. Internal Module: means any or all Module, connected to the Software so that they both execute in the same address space. GNU GPL: means the GNU General Public License version 2 or any subsequent version, as published by the Free Software Foundation Inc. Parties: mean both the Licensee and the Licensor. These expressions may be used both in singular and plural form. Article 2 - PURPOSE The purpose of the Agreement is the grant by the Licensor to the Licensee of a non-exclusive, transferable and worldwide license for the Software as set forth in Article 5 hereinafter for the whole term of the protection granted by the rights over said Software. Article 3 - ACCEPTANCE 3.1 The Licensee shall be deemed as having accepted the terms and conditions of this Agreement upon the occurrence of the first of the following events: * (i) loading the Software by any or all means, notably, by downloading from a remote server, or by loading from a physical medium; * (ii) the first time the Licensee exercises any of the rights granted hereunder. 3.2 One copy of the Agreement, containing a notice relating to the characteristics of the Software, to the limited warranty, and to the fact that its use is restricted to experienced users has been provided to the Licensee prior to its acceptance as set forth in Article 3.1 hereinabove, and the Licensee hereby acknowledges that it has read and understood it. Article 4 - EFFECTIVE DATE AND TERM 4.1 EFFECTIVE DATE The Agreement shall become effective on the date when it is accepted by the Licensee as set forth in Article 3.1. 4.2 TERM The Agreement shall remain in force for the entire legal term of protection of the economic rights over the Software. Article 5 - SCOPE OF RIGHTS GRANTED The Licensor hereby grants to the Licensee, who accepts, the following rights over the Software for any or all use, and for the term of the Agreement, on the basis of the terms and conditions set forth hereinafter. Besides, if the Licensor owns or comes to own one or more patents protecting all or part of the functions of the Software or of its components, the Licensor undertakes not to enforce the rights granted by these patents against successive Licensees using, exploiting or modifying the Software. If these patents are transferred, the Licensor undertakes to have the transferees subscribe to the obligations set forth in this paragraph. 5.1 RIGHT OF USE The Licensee is authorized to use the Software, without any limitation as to its fields of application, with it being hereinafter specified that this comprises: 1. permanent or temporary reproduction of all or part of the Software by any or all means and in any or all form. 2. loading, displaying, running, or storing the Software on any or all medium. 3. entitlement to observe, study or test its operation so as to determine the ideas and principles behind any or all constituent elements of said Software. This shall apply when the Licensee carries out any or all loading, displaying, running, transmission or storage operation as regards the Software, that it is entitled to carry out hereunder. 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS The right to make Contributions includes the right to translate, adapt, arrange, or make any or all modifications to the Software, and the right to reproduce the resulting software. The Licensee is authorized to make any or all Contributions to the Software provided that it includes an explicit notice that it is the author of said Contribution and indicates the date of the creation thereof. 5.3 RIGHT OF DISTRIBUTION In particular, the right of distribution includes the right to publish, transmit and communicate the Software to the general public on any or all medium, and by any or all means, and the right to market, either in consideration of a fee, or free of charge, one or more copies of the Software by any means. The Licensee is further authorized to distribute copies of the modified or unmodified Software to third parties according to the terms and conditions set forth hereinafter. 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION The Licensee is authorized to distribute true copies of the Software in Source Code or Object Code form, provided that said distribution complies with all the provisions of the Agreement and is accompanied by: 1. a copy of the Agreement, 2. a notice relating to the limitation of both the Licensor's warranty and liability as set forth in Articles 8 and 9, and that, in the event that only the Object Code of the Software is redistributed, the Licensee allows future Licensees unhindered access to the full Source Code of the Software by indicating how to access it, it being understood that the additional cost of acquiring the Source Code shall not exceed the cost of transferring the data. 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE When the Licensee makes a Contribution to the Software, the terms and conditions for the distribution of the resulting Modified Software become subject to all the provisions of this Agreement. The Licensee is authorized to distribute the Modified Software, in source code or object code form, provided that said distribution complies with all the provisions of the Agreement and is accompanied by: 1. a copy of the Agreement, 2. a notice relating to the limitation of both the Licensor's warranty and liability as set forth in Articles 8 and 9, and that, in the event that only the object code of the Modified Software is redistributed, the Licensee allows future Licensees unhindered access to the full source code of the Modified Software by indicating how to access it, it being understood that the additional cost of acquiring the source code shall not exceed the cost of transferring the data. 5.3.3 DISTRIBUTION OF EXTERNAL MODULES When the Licensee has developed an External Module, the terms and conditions of this Agreement do not apply to said External Module, that may be distributed under a separate license agreement. 5.3.4 COMPATIBILITY WITH THE GNU GPL The Licensee can include a code that is subject to the provisions of one of the versions of the GNU GPL in the Modified or unmodified Software, and distribute that entire code under the terms of the same version of the GNU GPL. The Licensee can include the Modified or unmodified Software in a code that is subject to the provisions of one of the versions of the GNU GPL, and distribute that entire code under the terms of the same version of the GNU GPL. Article 6 - INTELLECTUAL PROPERTY 6.1 OVER THE INITIAL SOFTWARE The Holder owns the economic rights over the Initial Software. Any or all use of the Initial Software is subject to compliance with the terms and conditions under which the Holder has elected to distribute its work and no one shall be entitled to modify the terms and conditions for the distribution of said Initial Software. The Holder undertakes that the Initial Software will remain ruled at least by this Agreement, for the duration set forth in Article 4.2. 6.2 OVER THE CONTRIBUTIONS The Licensee who develops a Contribution is the owner of the intellectual property rights over this Contribution as defined by applicable law. 6.3 OVER THE EXTERNAL MODULES The Licensee who develops an External Module is the owner of the intellectual property rights over this External Module as defined by applicable law and is free to choose the type of agreement that shall govern its distribution. 6.4 JOINT PROVISIONS The Licensee expressly undertakes: 1. not to remove, or modify, in any manner, the intellectual property notices attached to the Software; 2. to reproduce said notices, in an identical manner, in the copies of the Software modified or not. The Licensee undertakes not to directly or indirectly infringe the intellectual property rights of the Holder and/or Contributors on the Software and to take, where applicable, vis--vis its staff, any and all measures required to ensure respect of said intellectual property rights of the Holder and/or Contributors. Article 7 - RELATED SERVICES 7.1 Under no circumstances shall the Agreement oblige the Licensor to provide technical assistance or maintenance services for the Software. However, the Licensor is entitled to offer this type of services. The terms and conditions of such technical assistance, and/or such maintenance, shall be set forth in a separate instrument. Only the Licensor offering said maintenance and/or technical assistance services shall incur liability therefor. 7.2 Similarly, any Licensor is entitled to offer to its licensees, under its sole responsibility, a warranty, that shall only be binding upon itself, for the redistribution of the Software and/or the Modified Software, under terms and conditions that it is free to decide. Said warranty, and the financial terms and conditions of its application, shall be subject of a separate instrument executed between the Licensor and the Licensee. Article 8 - LIABILITY 8.1 Subject to the provisions of Article 8.2, the Licensee shall be entitled to claim compensation for any direct loss it may have suffered from the Software as a result of a fault on the part of the relevant Licensor, subject to providing evidence thereof. 8.2 The Licensor's liability is limited to the commitments made under this Agreement and shall not be incurred as a result of in particular: (i) loss due the Licensee's total or partial failure to fulfill its obligations, (ii) direct or consequential loss that is suffered by the Licensee due to the use or performance of the Software, and (iii) more generally, any consequential loss. In particular the Parties expressly agree that any or all pecuniary or business loss (i.e. loss of data, loss of profits, operating loss, loss of customers or orders, opportunity cost, any disturbance to business activities) or any or all legal proceedings instituted against the Licensee by a third party, shall constitute consequential loss and shall not provide entitlement to any or all compensation from the Licensor. Article 9 - WARRANTY 9.1 The Licensee acknowledges that the scientific and technical state-of-the-art when the Software was distributed did not enable all possible uses to be tested and verified, nor for the presence of possible defects to be detected. In this respect, the Licensee's attention has been drawn to the risks associated with loading, using, modifying and/or developing and reproducing the Software which are reserved for experienced users. The Licensee shall be responsible for verifying, by any or all means, the suitability of the product for its requirements, its good working order, and for ensuring that it shall not cause damage to either persons or properties. 9.2 The Licensor hereby represents, in good faith, that it is entitled to grant all the rights over the Software (including in particular the rights set forth in Article 5). 9.3 The Licensee acknowledges that the Software is supplied "as is" by the Licensor without any other express or tacit warranty, other than that provided for in Article 9.2 and, in particular, without any warranty as to its commercial value, its secured, safe, innovative or relevant nature. Specifically, the Licensor does not warrant that the Software is free from any error, that it will operate without interruption, that it will be compatible with the Licensee's own equipment and software configuration, nor that it will meet the Licensee's requirements. 9.4 The Licensor does not either expressly or tacitly warrant that the Software does not infringe any third party intellectual property right relating to a patent, software or any other property right. Therefore, the Licensor disclaims any and all liability towards the Licensee arising out of any or all proceedings for infringement that may be instituted in respect of the use, modification and redistribution of the Software. Nevertheless, should such proceedings be instituted against the Licensee, the Licensor shall provide it with technical and legal assistance for its defense. Such technical and legal assistance shall be decided on a case-by-case basis between the relevant Licensor and the Licensee pursuant to a memorandum of understanding. The Licensor disclaims any and all liability as regards the Licensee's use of the name of the Software. No warranty is given as regards the existence of prior rights over the name of the Software or as regards the existence of a trademark. Article 10 - TERMINATION 10.1 In the event of a breach by the Licensee of its obligations hereunder, the Licensor may automatically terminate this Agreement thirty (30) days after notice has been sent to the Licensee and has remained ineffective. 10.2 A Licensee whose Agreement is terminated shall no longer be authorized to use, modify or distribute the Software. However, any licenses that it may have granted prior to termination of the Agreement shall remain valid subject to their having been granted in compliance with the terms and conditions hereof. Article 11 - MISCELLANEOUS 11.1 EXCUSABLE EVENTS Neither Party shall be liable for any or all delay, or failure to perform the Agreement, that may be attributable to an event of force majeure, an act of God or an outside cause, such as defective functioning or interruptions of the electricity or telecommunications networks, network paralysis following a virus attack, intervention by government authorities, natural disasters, water damage, earthquakes, fire, explosions, strikes and labor unrest, war, etc. 11.2 Any failure by either Party, on one or more occasions, to invoke one or more of the provisions hereof, shall under no circumstances be interpreted as being a waiver by the interested Party of its right to invoke said provision(s) subsequently. 11.3 The Agreement cancels and replaces any or all previous agreements, whether written or oral, between the Parties and having the same purpose, and constitutes the entirety of the agreement between said Parties concerning said purpose. No supplement or modification to the terms and conditions hereof shall be effective as between the Parties unless it is made in writing and signed by their duly authorized representatives. 11.4 In the event that one or more of the provisions hereof were to conflict with a current or future applicable act or legislative text, said act or legislative text shall prevail, and the Parties shall make the necessary amendments so as to comply with said act or legislative text. All other provisions shall remain effective. Similarly, invalidity of a provision of the Agreement, for any reason whatsoever, shall not cause the Agreement as a whole to be invalid. 11.5 LANGUAGE The Agreement is drafted in both French and English and both versions are deemed authentic. Article 12 - NEW VERSIONS OF THE AGREEMENT 12.1 Any person is authorized to duplicate and distribute copies of this Agreement. 12.2 So as to ensure coherence, the wording of this Agreement is protected and may only be modified by the authors of the License, who reserve the right to periodically publish updates or new versions of the Agreement, each with a separate number. These subsequent versions may address new issues encountered by Free Software. 12.3 Any Software distributed under a given version of the Agreement may only be subsequently distributed under the same version of the Agreement or a subsequent version, subject to the provisions of Article 5.3.4. Article 13 - GOVERNING LAW AND JURISDICTION 13.1 The Agreement is governed by French law. The Parties agree to endeavor to seek an amicable solution to any disagreements or disputes that may arise during the performance of the Agreement. 13.2 Failing an amicable solution within two (2) months as from their occurrence, and unless emergency proceedings are necessary, the disagreements or disputes shall be referred to the Paris Courts having jurisdiction, by the more diligent Party. Version 2.0 dated 2006-09-05. sumatra_v1.0.36+ds/sumatra_user_manual.pdf0000644000175000017500000020130013447150557020236 0ustar pierrepierre%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xێ}$!88c;\8crٖ^ϒzYhrWua_oP,ڮЍ]۪~2^G}#DQ:{ kW%|5 7fݦ܌a銶lơi /Ҷ*ۢ3U]T)Ǥ ꄖ6X7Ŧl6q6'i:ӿ.akV.&;9,Jϯ|;_8@͛(8C, (|GO:G<`NBעtA#MH`w6Trw$e8>wrnc" u(f""'%+2K׳l̜2B'n wDFuc&G~a(?s`)v<"5/g9X !YN9 +^6QJ'3z1dY|.p} uM1n1LeriR)d߆V]o6cQ}s5ʲ/m%ˑYv\p ^JL͆K5w2Ԉ;9 ; hʬh2h`ƃWޞ).-T;Ѓ6(H5*dI`:x!@ 㒆dbboͲc=ˑnbg#!`Kncc"h6^XB"AbCbX8%Õ HuWM5f@"Z;teUzuD'$})& Bܑȁ̚`IB xJ3YW7C <4risCف>£׃:9 .JTs Ʉ޷gplVe)I${r9ʟ凣v}؞||O1Z=V22ث8f$z1rHlNQ3DG a"zH+8TiwtM XzU .A0Dptža"@֚{QI).C^*u?66M,]h|<"ƥe 0)@P ёp6Y.PB>|G5`j}S4!@1\jD10@EDas y2bGS!9#T$y J8Ȃ 1"km2C 6K#9+cmٛm`X,e K52% zDNQ!wl&FwqaA3+L|@&$']Iݵ4 FrѼ9wJ  C|:'&GuiSESW]`'_bItUڡ.߄`/{)l:_^0;*˲]z˞I,7aF۬bcC۴,wÐNie#3,sFab[axDYGFh:Я_9rӢUj M]҅.OSg9:!̽/\v 8oSLU^R|L\@mWհ;50q \\ŷ}yK·͔)E7WGI|WrD q0=I^IW "lB.d400e!!斅o[Vl;\|fDo?I<fQ1ަp~Z^ JG O-[SV%esS1fAHKIRǙM}G߇c9o]:NI[aЖՖHڢ*}GT=B9n^i[m1i:yXKʥ]:ǪCǤ ꄖ6{ŘNbA46mwHT{ ä ꄖ=nai>vA;0Z/gytJ*I`r%[=K9 ,`J^<_ʘCk.RqÑ9pk/9ۯn}9`F fV3'_D|X}ӗ&caiS_vM5A޽/_Dc6vYǮNTpZ#qMSNʪv :Mz':>$JRڲw).!%e7&Ox^I,.)=_G\UL!d\^xArsƽ-eKh> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT2 17 0 R /TT1 8 0 R >> >> endobj 9 0 obj [ 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R ] endobj 18 0 obj << /Length 19 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 19 0 obj 2612 endobj 7 0 obj [ /ICCBased 18 0 R ] endobj 21 0 obj << /Length 22 0 R /Filter /FlateDecode >> stream x[r}hI'!>fnV((<1eIY%/ku#eNc!;=S)ڡNlʮ0ԉ`L!78%oc9U'IF"r3_P(H "ƶqOTYH瞬lʡ"%~nv-jʪ-D=\Hnb>,v%nl@%u"ZQth4#;ۏ N#A#bNǠ5I%CߜuG^7CYUEtƥvL7#2B+sr.zū)`H|z`ewM$,"HPê2Xm]8rHLYI%3X&\'/]ֱ#%@' 32@$ëH8.)Md\`fvqO)bPL29:W "qX )/ڠ0r'nzba'3mƔeGX%)Eh)o / k˪nzo:TIYUH*HQ!I)E=C 5\b', @UYF݄:DU aY& 20r smfB ƌYdz1P?#y3/3j)|b- Z 1gHnff諐bK%X:!2N#h}v! Bp1޺ ,;+gIjlĢA!Sz0ȗˮYXBno֘/iN34¤Ll߶=3,v(vJa%'?N y܀c r9l/-SJy˳[S'nk_ζіffoƃ$9t׭[ V*m2[jGrn+hݲ!C\eْTm,I y@F[#^|%?pS,NpʱF!:EߎҼf𮪪80d6 .YsfG{ ~T'x}bg?9ҮRDIQ770ߘ3oTs=oU?xjzx?Y][jK_ϙܤ +,pbe{t5r~n\f} ~ \ 1c._n8暟3ѐ0Xտ$z{g)_R +>Oid~(D` ~K9$4 H }E$'FF=H: FĎAArGT"Upp/^znNw/LyPR(D<`Qߒ!D/K5CKd\B\Ihի]&#"-Q+"RLQ*?$ $u4JI%L&)y~$@9$(])$ߐr?#b1%8EvCƔzcד>8<,H#sJ' BSɻKERU?ﲼ> $I]o(䅜f+Y2G ͂RZ}-Nm.J;Z'mWiI-hY(OX}E阖JkgY4gn N;3/5qbgO(W|+Yu}5582' '='g%LH/fD#|XiQ*29ҒqbЕ$+ jJ})}Y G.[6h"3Iozu%R nS?<物-o!c 38\|6GY M9cC7 ܘQ,|r؏X]ؽS+bT2*RDOeoDvNWr?}Gۡ@z1wnѿ5//e++H(ۦK~CP0K1qSaH!mrɛ]x֎,|m}MIbYSL~,Ha*Iʒe c $"DoIԬllokw*۫/USK*{!U b@At|!fid+\^4G$E_[)&MhxY|;R/8Z-!g"=:9v1?÷}U ~?ZCy^L^7~>75uq 6)d77 ou nn%C=C5;=}typ:V>yѻawrEaޣhw;~Nydw ܝRl ʐ &&ݔf;x32,tEQplMV;GN3!'O?>n;.]:4Cgm?muYI3e3.k+o`eVNީلHm"NhTɀ8dcY;=\Y"ahhZnZtYv,TBtyuIELŶ_CkfsF!!ZLf0* Z:x,Zejq5^cU R`jB6'5%BDT&¨1afcH+6r =ĊΓE>XmCGja8GQ'ZfO+V8 H&.d*,[><8[γgWSfDfl0%h)S rGS^mS"b9\N==w[MPx*LE_NO6A*1=:=4ov}ͣ0~~s<.t>MW5 t{oM6*ٽ+=jIFPbǾj߀4`Tj5`|ll=pI@|lPm@& !HGCgE" I(5ȝ`K-2$Lh$t?c$^zEO^{44#oveB',棟̳}XHzt|g nR8G!Npo؊-Zyd|j&:H= endstream endobj 22 0 obj 3670 endobj 20 0 obj << /Type /Page /Parent 3 0 R /Resources 23 0 R /Contents 21 0 R /MediaBox [0 0 595 842] >> endobj 23 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R /TT2 17 0 R /TT4 25 0 R >> >> endobj 27 0 obj << /Length 28 0 R /Filter /FlateDecode >> stream xZmwۺ _A:kʒ(Jb'=:o{ӴΚۺvtkҽ=|H+v>md $' g*R(DSVܾG1N{wi|DcU]eRTu嵒&ФnL Lk-(EVU` !+S5%KLd=͓{Dq2"De]^d%UB"Sz L1(zYfu-hrFL]M[IsUub*nժzliEYA \J )")1) A7nD'0?zGwoB'bwNC>P OȻLŨ8G^yڄ D^ƣ"/c}enYôg.y"/c# gmūh2q̬?"U75g&3s9RV|_U_e8^9k&"}~/դZ ґ 7: ,270OA2|bp){:(|A&_9lf^:/fqDiO&i,sGhz?`2o vIapYALzN66*b8_!YIf6'ػ؋vme5Y NC\y==},$*@YHZBlyʔ'^Bg@4ͽ{O ?=.p@.ZSs ߼/s=MO.wMT, ,"QB}=tuj+TA|>=* IlGEm]Q"_9WPl]Qw| N6Nf4t2Wx‰{:S3=õ[1D . z /7,${LR~$:Ud%X "ܱ:7|I훡OjC/1`\a8ŢI@ عsfy] ǕiD3 Vbh4i";0@p؅]cYdzYPc~YDenQeV-EFo&+)^mhAEE}p.WR2C!mFꄅsŔP Ӊ:Rs(N^ͰMզMeFBZ#VUG͏P; 2'/.ߋ|A2w4(L MRaT1PjR9#4h-9Z@ěUdUf '9Bc STNò p(\ؕT5جjK/B2S&2Сi|%MJ^T,HDᛙՓ纊({(4嗫y:% ){ȞA ^$ΰm ; nE+i[ 1UAS(tP9R#~C]J}zoޑJT{:Vϯ^Y[;u5T[RxJzd=5w\/t=O +nocJJ~ r@HWˇ&tټRƦ$kHً$ݹkYb2I=:I*7- F3+#G@tZŬ^36#~4k8-.,F$zPT̃ImOu8p6&^,Ӵ!r)c5 X~vt61}R\ghuyx9N0}/1=ȵi8S3Ѷ;5ۅއg0/&3hV S+<h:l/GYc֏~o{~n. s6PmT`oz-`uvY?o$n,ޠxni;#>UJD{3;ģ{G+%g|[l`0 /dl *x^Pi& *a_Ag|;_*$)nh$W->R9Iq!n?< endstream endobj 28 0 obj 2839 endobj 26 0 obj << /Type /Page /Parent 3 0 R /Resources 29 0 R /Contents 27 0 R /MediaBox [0 0 595 842] >> endobj 29 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT4 25 0 R /TT2 17 0 R /TT1 8 0 R >> >> endobj 31 0 obj << /Length 32 0 R /Filter /FlateDecode >> stream xrIհ KN*-,bX]6d `gIs4 `fJ ?̐ch8y.i ŬIwm^|.vSU'2U;X |z)l`6izXѤ%74^,gj^V{J`tS䀹E懟÷ii>K̃C&މL?^Uh)Kb4X‘PeNx'vR1GL Z&7AX O]1Z 2sG.0k~#‰H1U&Qn W51r ؃dn,V.%3ZyՖSKp9Z$+J%J X(o#J paI{Ip!Hw2LFZ"ks rwum"2KBT mbYNNۇ`Z9j'&N ucBGeaSU+6Mt[tgfP2)b6 ,}_aV.rP"דe2Pj9#b (`9)@)bvmhYz0RhW}L Md"?oÐ4ȁ-$VUCP?QatɄN1qZ70A"hk,^Aրl:lR^gU\$8"W1U7K[q52xFP{MeQPVVM_&7&Ȳȏemf%YR{XdgoE*2 ȶ1 x]@&1 ]It#)n`Jŀ1ww.YbK::a0!]slSa>)WHwP7XUopF˜C;l:.NjT^E,0ghvb'bZ:EĂx8SCX! LQ,{CqLVA') 2Vם^6="xٳ3~0Zǚ0%c"vФ$h+JuJ~τP·';Lϖ'8(Q"(3ْΘOT!)%n+Vh0hv+j|Ha;9gUW"HP3USt|,_X(zNQ,0nOR~]=dVY6U(ziڧfq  ĉ<]^#-u3oC Ꞌ+ dC!ID"aV #ЏEL')8z]L/N4U3N\E~hhm.SCԺJ\“n<Ö7AWU2h:sstt?D.@ދG÷/t.*͸)nm#nޜLsd} _%$&hI蹐 `pq:ěd>h ɚG`oI{R:fnݛm{NO-v#͛i"b*7*1|MȦ;URas; _k΍d7zI 6u~itp%d;I|$v$0\wH#t..A{P$K4er1wC|I{"y"N]َW,97w/,X :ݪ\<嘓yJb> %Apq 0NW3=rԋ14VT9fCqs pcd6U1H)b6UXo_f%`.") |i+uկEB/rPNG40Q y#lxN3:KC_(:rg&wxT;XkWčFI"&%E zi/Ž whc>&hU$OtJvrQ bqK&( [GKA4෢Q̔2 Pe3_UJقD?QU4<@@x0j#NR B_SHݾkGl@Cn6e:zUVv"F6 _\6;VgB7M; UI88 *3Eh8A:*\XV}28JҪ~q ].p}E_4p_ L&yO8ۛs||o$C>HdaErT|o593+ $ +V%ǧJ dhN"oYL9KIrȫ>E0$ Q6/wUAGN¥E3-L>bJt <(kClKΈGNJk!g}V"`A%Yvt1 endstream endobj 32 0 obj 3423 endobj 30 0 obj << /Type /Page /Parent 3 0 R /Resources 33 0 R /Contents 31 0 R /MediaBox [0 0 595 842] >> endobj 33 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT2 17 0 R /TT5 34 0 R /TT1 8 0 R >> >> endobj 3 0 obj << /Type /Pages /MediaBox [0 0 595 842] /Count 4 /Kids [ 2 0 R 20 0 R 26 0 R 30 0 R ] >> endobj 35 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 16 0 obj << /A 36 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [342.633 218.6218 517.2716 231.4347] >> endobj 36 0 obj << /Type /Action /S /URI /URI 37 0 R >> endobj 37 0 obj (mailto:celine.mercier@metabarcoding.org) endobj 15 0 obj << /A 38 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [379.9957 236.2396 402.4308 249.0525] >> endobj 38 0 obj << /Type /Action /S /URI /URI 39 0 R >> endobj 39 0 obj (http://hpc.sourceforge.net/) endobj 14 0 obj << /A 40 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [30.43069 283.4872 316.4441 296.3001] >> endobj 40 0 obj << /Type /Action /S /URI /URI 41 0 R >> endobj 41 0 obj (https://git.metabarcoding.org/obitools/sumatra/wikis/home) endobj 13 0 obj << /A 42 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [30.43069 463.6689 79.61779 476.4818] >> endobj 42 0 obj << /Type /Action /S /URI /URI 43 0 R >> endobj 43 0 obj (http://www.mothur.org/) endobj 12 0 obj << /A 44 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [490.3445 481.2867 514.0058 494.0996] >> endobj 44 0 obj << /Type /Action /S /URI /URI 45 0 R >> endobj 45 0 obj (http://micans.org/mcl/) endobj 11 0 obj << /A 46 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [443.6098 569.3755 472.8894 582.1884] >> endobj 46 0 obj << /Type /Action /S /URI /URI 47 0 R >> endobj 47 0 obj (http://www-leca.ujf-grenoble.fr/?lang=en) endobj 10 0 obj << /A 48 0 R /Border [ 0 0 0 ] /Type /Annot /Subtype /Link /Rect [30.43069 663.8708 167.5189 676.6837] >> endobj 48 0 obj << /Type /Action /S /URI /URI 49 0 R >> endobj 49 0 obj (file:///Users/celinemercier/Documents/workspace/sumatra/metabarcoding.org/sumatra) endobj 8 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FHJILA+Helvetica /FontDescriptor 50 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 222 /Widths [ 278 0 0 0 0 889 0 0 333 333 0 0 278 333 278 278 556 0 556 556 556 556 0 0 0 556 278 0 0 0 0 0 1015 667 667 722 722 667 611 778 722 278 0 0 556 833 722 778 667 0 722 667 611 722 0 944 667 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 ] >> endobj 50 0 obj << /Type /FontDescriptor /FontName /FHJILA+Helvetica /Flags 32 /FontBBox [-951 -481 1445 1122] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 98 /XHeight 523 /StemH 85 /AvgWidth 441 /MaxWidth 1500 /FontFile2 51 0 R >> endobj 51 0 obj << /Length 52 0 R /Length1 20512 /Filter /FlateDecode >> stream x|w|TU9ֹ{oL&!@ƐF"AzSBYaRYD"XBU JeUpQꊮ[s{Ν!gfr{ys=fy5# 3~| ~7qYɺ!qb@Υ!=eԙɺ8Bw ~o=P&ULU?&_Os>&`8ߡ~;H*шv(#j;Zm@ A V=vvC~d?+_ Ym!ciG/c'ع_THx~MB~ E-bwhP3{07c?fm'xX>ާN7yjO xտ{o_mǒY@f0w0 ߲f^-ydȎv4-Cget3p/2\·o%v| GYW G4J2\%;tf;/GW|XX ,bEDCНh`2WY5VV3-br\_n7kVr9~ jqpF4A8ZAq6hl*Ia,,ajIHg [bmك.P{݌vmyu}XZ4N =naY-fѠը%(zUjZ#ZH.Chx8uӕqrJ++WbCg T aPEU!ڡ+JY `~vL q֚iUe‡)Uq7nE/+[]Vgp W:tX}u;lcphx=<#Vh'zD3)480Qʌoh%轌PU}WKիo8J5'i{Khmj ےe xYW#hg@Kis6!26I:ݲҊ_/7Qc^OsmR!G NYCj>>hM؎TCaw.kGUC2wӽMC%HB)W\Ce%*U4&6pblz opw'74dOU p]w\9rz1e"Cշ6W[U 0 Gַmhr[ -^<zŻ(JpKяF!&K—Pם(< LJk\ @aõÁ /ၼR|-s͐{.ǀM@pf(&Y <븕aЯ(!J >D\"*(KWi-J~tHU!&4# Ě6ȩu!7<Ӌ|PÓ(J!={~( π2.BBO!*Bi>=oioW2(5!Dhs5s)|_-aƪ6^V} MEZ^ۦ?oe8f\ml:kZ4iϭío4s;p +AFKbv;bDC;Bgh'P\\ z ~ШN9Ơ1 Tɮi{ȕ~ીg΋YnH$$ ]|8 kH^3UQSG8Mt5&^ӛmz;55ULUIz]JO%礊2w: *;2.#АU_;.w`Ҋņ9~ Q^ LwcWÍ "Px4f28C  IF1n|n C)‚|&LEP oM7C73g>vc{w-\8j…#遵p̀(8HϬ֞!1p\J2~cx}}*QeGU0-ɸ.*ei=xpG,#c|o+*rs0xn3p4dSٵ/\W+sXB?]ZrFߊTA{3*kD#2[= 6 thJtZV HڒhF| L3Y5[nƖ&Ek. ~8xŗg~ALi,nFem(&!HOF؋EC0žjk:.oo##gd s.P6]rWVG{vB;nkZ#D6R~7cP$nA$IA8ʖDR+󭡖s.H 2CqxZxL #Q|qf;Σr.9Gp#Qm6 @ΏXf͎WpF9O50:JԾZ|GUtT@[` 6î*El:GH) E(x(54l&8%O2=2hH0 MASRb3Ǎ^"^Lh…v,xu/s'?-W/2}ӏQt{ ֎"Ƿȷ b8y~WJz֣sC8^b \?/ \(ݛ𗤤ֆ a8Q^(d/zj&HP*ԄITj RO '"SN_(Ey&E D7.>Ta2pڏ_.ye儒I.Fw-vf;p]ׯpY^\T;yPQ{1˜-`5#2'&f΋7F@1CrdX?s-ZBqs6] ZhVRIֽ %?Kۆf:~R16O5EV@ĺy&٤Lf풽wiyM,[8׽$RLa;*0ڗ._i: s%ƞ4HKsB4Ļ!ɹAՅ7Fl7sjU&I~k`Jj4aZm͍ۖ˲II<'/stUhˀgn)uqü,ωoo8aY# g9 .VsӸ·]]QF8}ҡH˅Uqhci?͇D,v(|>Q.%5?t͘1I$EF_f!]0 ͐`&ޤIaG10S~l Ls ])7ݿ\:և]$yҭoc6.w7p?|[~8֧{| T޿jcϙwq@U`8sFudz+{NOo3t5l!|DCp=MfiԮj4IDT ՘aI  )Z1*9&Wj& iɩn Br18p*bVSsF+AيV4{oX`s![ \Ff ̚u,X/nH~ YKPLug BI: =/cAfhgAH_è/*ܐ+]e ٜv|`e 18X1 J?Vʼn0l\bM^Pш B:y KjW~G-A'56xvĆegPk<%1ڽu+B\_Ƌrjzjc 3mKlDo3j)l2Y)UvB$b|v<0n`\6Rϙ Θl`':)C]M^ x4n $< L^#f }/%ʘmVd"U>IY!s.-jhۂM'! ͔4A] !HCOkO'ܑvr~%1Lyiu<μ@l̀}8"#9pK1A@Cq3Dr"0 CÞްQ4Th'Oo }~fv ÆU ; 3ccQ5q=s̜WXVF6Ҵ%R&MDOJ1A֘^T Clk%?LZ?WiLl ZxyQQ06f۾i5xO)g?! np֢ .9 ۍE2b56a/ށî#xBýa/^L<;jYi`3|Ql[q O(ŵpopնJaƺ2y󐋢*]JTKtQL%b*ySLŝ $t*K7C*T&2ZLAzxc/=:lrY۟/ɟ[uWWސ/v?pyl,^ KI>n,ձ>Hо馅E&R(" +> aZI$Iê,\eӫ@[mOP9 F`BHq]跐 ǿ39$Ӽ>y.^|'wS/v&ֳzefZ*S=[T=7 ktne'æ2'rcO2 DƙfYoXfa#԰Tn&[ Owbb$inv.xLtyCwJIxz ԭPEA ? VPpXwvssL]'ɮ]3ߝ9ahN`Ԧ˒Je'ϬuOfܞ;6tW~hNb5|ks݉Uq?9>6""]a62!H7?UuäA7M'tSRS$8[3<- ;CC$hLMa{1Q8ۙ-8˺fL D>e#DH$3U,%mud`gHUggAYA3y e s$QGJLhDauaA*EBη۔ZXj1 ̺cAϞ|cj~u˘lZ~_ne`|qu3{qMw?4U9)eS_~o#ew ¼k1q}H Hit0a;Eu ]OS.XBl|K6rGZ|`y|jc _yìvR:G,z  ajz^rx bbR\!"')^=U^I3˅'FfE`^{[N&xJoZu @ZbF NjFu\pE,f55N` di +KƖ^RW XM{0כh1,/DhK\2,FbA<1'!B^8l :~*܎(7T`DQ ܢCQ[VN/I0O40]5 &q *A- Ye,/=l2艦=xL/_z[.=!+ GK}o oD]^~RE^J> v,el$ӊ);øHDRP1 "II<P>XeMk};3dTb+Ť`) **6cݜ!w6l N˛9!wnk<eAi4ͳ5>czHcMUiջcz봞n#Gnsb'aiPn+oxތ/Q!\0)G8^N0J>Zm+ːcPKkgu{l%M$Vf/g w  Rk(FqE S{?;=Ky0C,˭e+^=i>Eq,;ѽ;;xc [- c.A@p톨 Ҋ啢v^,YR'`LXҙ K J1m` |b QX-v TK{aΒg8sΤZ⚸E@I&so߄''M ؼ ؂^ ym갰ɳs)i#Iz+%DH|pGR!SD|41i@3` f¦wj7}^] UZ]C$ V4Tdg?g7ـRf &W PW\⻶JLkrk7> o~Jvi^Cl]#=N4Ֆ=5cE2#j< B c`/{g^^2Xo)iycv`:fq:ׂS$E,Xz!-@l4U'pѳ@dx+]ɀoa~+6cToۿaWYp!<5&1ObPd{"K^lP=ݑqȭĖR|L^I%deq&˖\9]T78sn ;J$.ߥ!@ &A#e{\>15l|JsAbTHhޔc'4Hv.Yq)uhrHtdG(%~/hލG͋_b5\_ حsleP4]B]|ݨO; Z%o?-iнfdBN^0kD`lXRLc,3RG260G?|+faN #5o q!eWYEq e 6&0tlO-9(?-v Jæ_;B,1jx\ eRE$0hn*_ 13QP1d)y!rB ?\xU"GarG^xwia5;N8mI2#8Bqc:pő-65墲`t% PK)xM/AаML U=JVB'bqŮ2$;\Xnmmm.Il-S\/DA]gG(:(T&\ސS"=ڽZx'̘4P,}56&+ Mkrwo0{oIJK=.,$a J-vC5x]YSvٛoMSZ3jēIofG1rxfߥz xA$OXG-M\haO \.\9 M#iRؙ9:1K[wОi:Y (tß,+'im'ޅH Ie7xfq .qa]<%^`Ѣ-^N鴒VEN[겆I[&l*\FJJEAhA6ЍK&V Q!|YΠ^ظ9xOk~.8k^b.0!3>Q< Cu07kNĀǨVAuDT <`,E GJ=67\61 v"+}RE]&nj8?)C͝W!ZU- 电-{w;MWl&H$U&mѕw#{H'LN2X>crF:<l1פ;^Տ?zm`7WYQn0k+3N2,z V{%; K+)~^ݻ7b,~%c{#>Q]bVcF%>0XNPsg[c-,De-NӒg.S8xāvYRLvp6^Oſ_<R~#*Vأl WC !I ]=t۞|̟l~W<Pn*F1SN:fpٕI'O/,IQ;gA`Cf .Xv{('qwaXiex%tZkzKޙܳ]V+prR(ÐKd`|巁m̠kګ>vPT>}XC|E+PЪn~B2IL i??7_?%͖W\jcNNUĘ}>`h\Pb3՛ jfxium}e3ԡZi+[Žɑh;9v-VZuᲹA٭ͣ6'gp/9c5PI 0<؛N\j`h&+,Lfv1<w)i&Bl `;PKշ/.3Ld O6? yN{c_^Z>Oe?Hy{w6ctxe1_Fz<̀9f>Fg5]oR`O[)@\f]tt*Ve7蕲1쯰b,M$5w0h̾,Pp 7`Eu< (a,ܾ/F ^pjrm>uŘ\@?ax/B@_pbnϿ3gN^@L&+I9 wv4}f?cv 3~YF5{HnUp/&E51AUt,jtKF仛&ϝ>qrr.e Ł hP+Q@}G 4 h-6V@g>2  4 h-6V@g>zd Ł hP+Q@wv}|z=i=^=չY=@o:ӣףߣ[7ݣQGG_zUzuzMzmz]:7wP!=Qޣ>G={{OQأ>G}r=zԧգ~wuT(Qݣ>G=zԛz/QW^a.ULu endstream endobj 52 0 obj 13906 endobj 25 0 obj << /Type /Font /Subtype /TrueType /BaseFont /CUFKNN+Consolas /FontDescriptor 53 0 R /ToUnicode 54 0 R /FirstChar 33 /LastChar 97 /Widths [ 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 ] >> endobj 54 0 obj << /Length 55 0 R /Filter /FlateDecode >> stream x]͊0F~ -!J$93`Ô,C>c+qy&3-]|cIȊ۾44n]_,WN9c`ziWUs,9=>ҳoS?_;{||ٸ6(֧q2GV:fGGXZj6ǺSsQy6ESWMxZ@}0Fx T2K~&5H'HR ^dXQ+ 4 [a AAxâ ¨\J,ހ¨JPm*[) F[\0djr )5\ jrt"V `"r {шdU*Zx.0qU@kJ?PY ht"h9~hxQ)SDNa66! K7A؄t$SÁP#ys0Sx:L)`eM&K'"0Y[Ѓd h #bQ JD/0JW+LSvqè?->8 endstream endobj 55 0 obj 604 endobj 53 0 obj << /Type /FontDescriptor /FontName /CUFKNN+Consolas /Flags 5 /FontBBox [-432 -302 677 1011] /ItalicAngle 0 /Ascent 743 /Descent -257 /CapHeight 638 /StemV 0 /Leading 171 /XHeight 490 /AvgWidth 550 /MaxWidth 550 /FontFile2 56 0 R >> endobj 56 0 obj << /Length 57 0 R /Length1 20476 /Filter /FlateDecode >> stream x|y|EvU$3&!3I29$drA/ ,d94*JVXUD 4쾿/o}=xD$ fE9) CҧqƤi BIS7!&5srڄ~N}͚ϣLLm+y>+MĞ봊3gC!͡2@ FO`Ke'u+j|/) Z5:Nx{T9EJD9YkPs Ȃʂ- ,dqK7e,n7Y\ůEϲ&IWdqY?YC;Y|+odqI_+Y](/e7Y\_e,"egYgTd,>YY|$e,}Y'we,ޖiY[śxC'eqBeqL,,ɢ],b,dE,'WeGe,^KxQd,vb,vYls"geYb,FY<%'eAOb,b,YQYJYrY<"eLKd,b,b,b,b,fY4b,b,>YLE,&ɢQe zYLE,je1^d1V5#jYTb,FʢR(E,JdQ,."Y"[Yd"Se.HE,Rd, ,d(Ydѯ Ri ,'Hq>‘>@DvU:p8.C v%ǥ^ @+ۅ]a"WCwvd̀/v"<^X8/̇0WIfh`Ga?7h:f f1;l69rR|c uIڬZa|ҸʰG 3F_-̪YD9&ŗVW(b(' is!u҂ʼʜJG0ݥ.8$Lp>E:>!4i= >:"Dmi|]]0kD]}qF$ݜܜ8t+6;~tӯ~qp?9~teN?r?8};Nr%N_s]NN9}o.p+/8<8}O\A99} 9]NpziN8ũӛt N9:p:vW`62pϩS+''}rzN9eN/qz.N/pOvpzvN8m-崙36qzFNOqzNOpZi紆cVsjqÂrZi%szÜⴌRNK8=i1ErZi>yri6Yfrzfpj44NS9Mtɜ8Mi"N&pTi 9yqstyt4ԜTDN'ʉ8(n 7:+ Ogp \~~||| |\t/_> >>* ;|| >>>oS[@&ppl:q:p8kAh\@~B^%a_^^v/;?;6`+xhV9f-a=Þ6O' z`xܣ%l `3 3 @1d3em}&a +#~twh3%VCXx ozܛKuK8ח^kPN$#E"drFtSI*GjV*V8E5kHhN3%nS]\ʴ!n TΜ5{ؙ3gؙgfU?Ma=Bf60kY; pU ~X䙱P-X\i݀n7߁ouW5*p | |._.|8|| >>gww)-xx8 ǀׁ0ph^@Z'x^^^^v/;v`x <l6OO':`-8hV+,rK` X<,eB`>0 f3f`:0 L&M$4〱@ 0QHʀR(FÁdt?)@2`D HS'+MN{T1]s2Hf"R gd;KNwUt=wWCH[ʟݗ5*SJyO_S.'%ϻok; 9B⃰FrKʳ(W4˒zxi$S p KІd{;dYHd.Ay p>! +ɣd5y!y\{B%,.Kc9Rawuz5Ov+gdGZC|MnODG}h0%G14IVզ٤)[x(!+bK$1R-#X`djĬ +/0nJ*/ O*y&N"md?9H^C.~z6byW {@'_oWar%%CP(#=,1y!oS4yCM#gswr$_oQP'7;?:)56JӒV~E@ntwz1 b*Zm y]fc V q5N唂X-\eh‡%Ur-*{gz;z-PR:KwN UǡiU|t!!UU.-9խ}p=*PȢ K ')~!!K )@:oD FI=ޡIa90sHaA l X,njf-K:8 l<:5g,bjkPRKjan \mA{FW9Co0C-;ױ|Js,W! ")h{R@拸u _jgu,{hd#$v2=VcMb^N]JFZ䍔WamYԞykͨ/T !*"'JЅ\$Xb^CeڣįFaVD N(.SDYԓ,vRf~eZz!uoFZjVrO]h~:5'>F$T7T/hn/ThTu@ 0 st`kn t?0gz3#` h$0D|!M4V1!oL1f$)"!$X "03҈'I'_WfED א$" g!Mh G7$apL.ER,W:ԂL5M/M-mv.S7WGv_<={|r RᅵR 5>ַ&X}lbI tà A1u W撬u}etejY)cs h1Jjk=)%`ؓz 4)R CŪ.0Ŝ3PѠz`]̰)kg&&#&O yIr+[1V쨭/4K'u`cW,AP *j)1UZz9z U QUJR|@Q6eGa hnι*ԓTy;(Q*}uu*eOO_l[riL2È+FN}Fx;w]S%ڨk{Gqt}α~*Lr7J'5uj?S׼># 3/aQ{x6o^wIvjgg^ٵ Roz++`2 &xcQZYr'ں[\]ܢXeHlŽIc$zvF5y@I}!PO2-`7$}Mlhlɹ MLPS{zTu@k&nRz%'Md+^=!alBqcCKVg5w_1ij#=3nɣM{6F!r"V$(@KЛu´~u9G.̬.=f2ӳ϶Kj?N$& ΛR*\t;''<9/mx}i]QtGBV m4iӪ &wIhz9둛]B-Htx[+50&Qxi (6WiѵӀ^`>:fdXVMX RX hOF<缳VV:>3y#sGnXpځZj^<2|s3z鄱4h2 KL)Y>cxC<4L#Se$&|u:)1#Z/7.%&xO$K۩.(++xљCDm7nOAU)DV:#zZ6F(BQؑ #:+_4扉.dȕqÛ2]U=%ǣo٢aܘД!(_ě娟HvoaDy*Kh(X`rZ"Y?v:j#(fTWS{ȇ\!%dL+O4ztHxr{ZPȸ w)zܾ`ۜYc?vFW{ch}G+`<Lؙ b .ꩾnsQ0?²_Uԩ|QW+kώ"eg~eDsnCNv_P {}mEWrKJfzjUbrrxyxxI򺇷Fc"uc:6uIcj`8et\{M`lq'Œb$"h:ͥ;uIUu4@7Fbs(`ǁd%k/%81q P>GJ-#@ d:=M8QJ h@S:܀RKPtc v6=fc.`qm4A?g 0){ZQY],W"/WUT*3{75<$jxӓGzf{OZ_LvO>R~~I@]y@qBriZ8j!~"7(wޘԨC=&&#YLٽ,ڀX1,5cD >GQf;4_ zcR3mB9gCy˿īܣ0߸߲X8ϦdF5j{GZ3sFUEm),5VхWI[sc|^kYY=RQZ0luxi"ҪԽR l}:?t~WX33 Z#ܒO_}Yג^w_СII=,֬J+)?2Whb$[Dmt]?iDw Ca=F9 T-tjKgE\l2z. !{Jv5EO{߸oooY}p,Mb a책NT,],('_<)l l\z(>=>IgS])^R\k7+n2c3c#(NU{~Q66w`پ\ ^v⑱2WŬ1(DHߦיs"1Ta #= %J'< b3[i}*4e7?9a|g=0ap}vAGrt劗&8: yes?_=[5hNg/,hok.UjKȩd?ih-z&u=} 7>QШXW}x27lS0`D+&7 x;h')Iڊj Z_?R[w/6PTٽ٦~j*X^b\T<4ӏ Jٵ΃eSSH!G Ch3R)M} D]7Ʃ%ҡC𺡖jԞ9995~mGY*bC` [T6vqwYޑ&M7"!jy׍(ې]XV`Td=(8/+$6*&^002]oxj  N/%Y5S5&oMN_Lnn,?ׁ[DiSd{=FTO|gٯvKЭ3gHx`~ww-Lm`=}xb=#'^:@=ožl;fi!mvıKKJݺw93݇ylu=-La3 35$TaO&nHZQ)U̱l M7$ak5ک5_-մcm?<#3|:GRRyzzu:FAFoox _xYw"1ހgEm)zZ)VKZ#*Mُ]_`G'# wx \PQjxX99O|>ԲW*|bX\أiꞀܴ5|yNJyOZVlD/*<:{ZVYJ)?fGKmvp* x_*Gk5Į0,^&Y,%Ui,$81!jGk~[JD͟' %M{WNܽK|#wK A--@wQġ $f-  ox3ZRno&(j_`ٳ{$hJ~.oaUXWl HM(gv7rz{SK2a0“'637-9 JSobY/hnʺԟ=}GG҅bI$E Ul%^Bh syC^ jحb1qI1"C3Fg?3'W3Eʠv&b]8HS<)9sR?&((9-&00&|Ϲbn l0TQħV`| t`pLk8? f F qkQ]Q!̠g$f⸮WÝnחdOű[,wؘRwt7삒SS^rSnbys׈gglr5f ui<2{@ i&b1 ږNt/8ᮡk?8$ +#Bi5f5ʗ,R+VXM m|],bۗ^vݍ~bF*T%v_qhUSŏRa T仏 T1ݨht_mt:S4+Pw:<vamw~8~SI C- X|Џ[,zaMdqP+W!gXMvo҇CLZeXo Cj<<Skͽ`J4b5!?;SlI0dShb>_h,Q2ɈnӿbJŸYk7H6sK,N6?]0B)A{9~]zE9QSd8.\[;DFXR "EA+c,ɜp>cR:/<%yDL+T9TXֺo_p5'&WeYs::lP(}^IJܗm*hrYkLb&60xVp{g-FeT{t{}Ao}v_y[ xUL* cь=bS!~8i)XSZac Lj. MpV[īDʛ(_^;Qk.,,BKWFD8sĸ W-][n'f瑻T2V{O8$f3wiIiLdIr5^*e6쫱MkbgV"{V_ژlR_A,|c֌X:pꪾ >r+ >|i}3ʼntȧixxZs L-I Y62urmp&O_:b^ьM񚄢ƞCz*(J@gI5"M }؞ю~kXzpBEkKw;Xw{pk0z"?D!ҋ=h ?CpWk0˯`\+$+;eohغ9aņgd\tt¾7]_?0ε>!*Uz4 [6ׇW))NUz.5rpԩ 5 wF.m{[Žމm.gQAa@pz2uAt4i1k@;Yg7viImHjWv;|ٚ A`Wݔ?Mⱥs'o2%4 p3}tAM%ycƥK ˗UK9g𼽃MʚS[@3B F'W92*g@Д]FdO W7fxvѦRֹly|m?zŜ4U!k*Jn:wsIACy(}~/;8~c}R] u/s746'(/$pprkŦ2GjZ[1f<گiM}WM×~?+ʔ&HHy6Kߜe<9f:ˋ D\i]eV6[! `j"ACaFŖ6,/A޹Wewhh2їʼfGaSݗ'GlȾslP.ﲛKmE e"N^U/+B:[t/MvExr#vA:j%㝻CVCJe6cVlp;GF(UQ(Om虃F)5Qq㴮Za/Mf͸r@Pvcpw7(zvv`jLin4؏-Cr+ Fm>yjC endstream endobj 57 0 obj 12589 endobj 34 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ALPZMA+Helvetica-Oblique /FontDescriptor 58 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 222 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 556 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 0 556 556 0 556 556 222 0 500 222 833 556 556 0 0 333 500 278 0 0 722 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 ] >> endobj 58 0 obj << /Type /FontDescriptor /FontName /ALPZMA+Helvetica-Oblique /Flags 96 /FontBBox [-933 -481 1571 1138] /ItalicAngle -6 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 98 /XHeight 523 /StemH 85 /AvgWidth -441 /MaxWidth 1500 /FontFile2 59 0 R >> endobj 59 0 obj << /Length 60 0 R /Length1 11360 /Filter /FlateDecode >> stream xZ tTU= UJzEe$A(B*9&! D(Fl "*ȠTU$"EPI" Bw;vjVT}_U%.Z^뿗޽Cjͪ5LM$RIyeC-WZzEe'){(g"qGmÒt@>n;G8j*{ʩan2"h #IYɬ榳P6%ST 5,뤱r^QrNSβ4Q[)r5N4bv$*Owzc&;id$=}3 H>D=T;U:&%hQhi3gEj` gOi1Ӕ6P1GO.7W9j4ADs3,%o(^b'͟4uS`sN H3[b>iI'-7wG[ͻ < ӓ{͋S:VHϳs-q:tfTs?!^SPi`66BQ|=ya(hMl@=1)5y8exmM-NNLjNL-JNF|Elm6EhcP]n.HtZ'{uYZ 3k9d'{R';f=ttNmd-m "#DNjԘɎ<,<$0@wjqqc # Q?}Yc٥#qelqǕ^7"?Y)8ذ^cWX5 }uFGS_ TQU]GбZoTP\ˋǩ>xhV*X_[{ZU#mVWlUj[׀~H4ԡT:3,\%i9ʒ0{n+s]/|ݣEvK3t4t^~zgm6ų&$rTz첻~9C)߬w *BO(~Mi$jI_sn͢tZkdeDž0nD[PrC)[ j"ֹ4L_f܍KfHm#vLtwmihvS.Ζ5l7lfMW{\̉i%m6tAC_3"_GqqoŽ}$ &=҄BNX/|&LwWKy~VZEлstHdfbl4+` q7]8Y.#_'kvB! kBpNxCJ|Hmk h[$Y`Nmn(cyzL'db_@X(alle1ց?%BBhނĊid\ l!z}D|LYJY*hGiXџg<+,Qk.HYdP-5-5%9)1:Ģ`F0D"#B !AV#K(n-PI)Z\JdTeT`+8]%iÛ޴y޴B14&3C[ ,EBkJOS`-|؍uU(vGQc]03>3{4r#/Mo1B#ڊ8D{bGR{aRSsu>pUz3!3bCNThSУ\րu*(!`)bUd^a9Mbw {8ϥuZۨi4^Rjq(eb3cJJ3:0mqBgp}$23fAlhR8WfyfHD5DAMsY] hZFkF,^>eajVV^VL*)Yh*u `з斕὚Bc  9-ÆY?]zav twUU= q7>lx^塗\A=%7xRȿy̫v(gN4`\)&0hR\v6tv. {։?L`NW1=жEՇxC/w /g:?[!^= aɎj$+:’dυ=_NOp}sՕ})bjךlǯϚȧ?g%zIUpO¸M?c2spC3FxMc1ɐ86c3E4MYK cSf@q}!xoj+^= t-@Ct-@t-@t-@t-@t-@t-@ׂfHmH }u #dүef:~ɾ_1nZ?(zѻް[g.S,ȝ8%fř Z[D365ZzU* 3es(+]0rpx@bmmmmmmmmޚQ[؊l`+[ Vl`+[ VЌ/٧i24MV<<'Bn,l< 9?4pE到=G1Ujmn̛ؖswzSy=o.Ϙ.޺Orڷ`R$o<Pgb?Y,E7"|&ijb7sKC` a! ̅0/8ݶv֨c@tykC׷?2zf O5>vEUKX5_æ̻꛻ KCV{S,T))[53г*ɵw7z;=J KJ𛞘S`9*jI!3Y?{mQtw ZS%]:nGתٿ/.U7Bs~4^G[u]] #J(}v>ge$DQccN |(pH]K4r(|i:>G<.iUfi|BČ5fu>Y>m)SG n}5c}F>8ggOŲ<$tȞ؛stEXRwzU tϺ)8RRRRRw,iλ wEth̐]d˘Qtoy1# F^&SIGUVx$}=[Q$Ư"< l Xb HZ%b X+%b/a XR]q\ç1ipzb=\XW+>W+{\ ۆ d"94T2;~-)g?sGb>!u‡[[>e[\=Xz76חƠxx`@oȧMXA>A>p σ(P'4[WFSJHLȶSћaxFٯHS)4v2Ot/ܷcW9߮IIaYY yr r.%؈Ia/Ju?߮&|Wk&݄wnL` l2M&6&7}HŒnĬ>VDE1Y`L,70v-asغ9Ƥ0ӆLY1h۝#˕x׵_?Jʇr˭ȸ!i~u7gOn+Jʰ?kK(͏Y](yv $xOwhELpF3)/̚^;ik1 6<8>"bO4.rCr[{aL\pΰ n5}_7Z)#v!mx`0,*X 4YRVw8]xxsom>P?!nI>{Xq~ $fɳhI,1m87ृw :1מN]!fFFu7>VVn-+ kj3$DZcge'Ʒo='~Ode\mMn/vv/<0/\ي@RO^(rpteD9~Gم/VLAiԒiӋk7̜֬Qv”*CA'; qB0Iӻ/ IC!:z6~ar. B=g HgH? =u@d@r@j@zj? (G?_? l@_~UҫO?}M v endstream endobj 60 0 obj 6271 endobj 17 0 obj << /Type /Font /Subtype /TrueType /BaseFont /LPTEFT+Helvetica-Bold /FontDescriptor 61 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 121 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 722 667 611 0 722 278 0 0 0 0 0 778 0 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 0 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 0 778 556 556 ] >> endobj 61 0 obj << /Type /FontDescriptor /FontName /LPTEFT+Helvetica-Bold /Flags 32 /FontBBox [-1018 -481 1436 1159] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 720 /StemV 149 /XHeight 532 /StemH 127 /AvgWidth 621 /MaxWidth 1500 /FontFile2 62 0 R >> endobj 62 0 obj << /Length 63 0 R /Length1 12392 /Filter /FlateDecode >> stream xz XTZ:W+apQ "Ay9zv=yݬ;6Ͽֱ̲G2՟k"zη{ww]keKnGjѨff[<$]vYJGB3k-fS7}Q(-{ !z^9BƹmsChBOdxΎE˖ґUn\x眡rH,j[>?: iE}&vyײt s;Ǎ)!׎V"9ZdBCrb%_H>3+<I=J[K"ޮAr ɥ$T?Q.!QsJN Pdˀ V)*N\}8MP|Ά| ʓ2Yq)rJaIy9L T_n uZ~?9` 3>{/wDYNS3X\gKn >Y{ 8hݛF)d)xǻ1h`[sѝ`?A"gu6<ŹZgq|H`q(:EQI3~Ϻs%Ag=*wm !l>Ox;G2L# d L%CHs!hR$!ǐFk(?GQh s^CWPWV)$eM1ʺF&_cFDۋjW\n(mw:JہZ}[:Lm+HG'ΞA¶v G{ﲣ[+=7:JzQCV-u4)-:}JIc夯1}M%5F+%t~]1b"-{ ()F1}BB.x})`? :w G?#ր9c9r~>18}D odA[_.|G vNT%"=C_WQ:ycP:{7ڃU`/2*tXMt& Xә OAXh?z۱'[ <6`8z]AWAbpq5x:p/¿; pyFi| n)9nڨpF;S>*N'n ~GH3Lf av2Dv&ncog\ ^N2~qb%*hvN4 o6w@{kE$D '? yGS }gB[ [HNJt%;qv56&:b6 VV)rϱ MaZ(kZ}LMҎ6hAV:>y F15PMa&Q;VN8l~( =N#_}SE51w_@[IG5V҇6gt+/n$J(Qem=e>u N$նRu6hчQ6QY >`)u4PmcY0K w!Ӛ v吻]D vӚPPɣ$499ø`ҷ@'GPϜ<& LQJthbd%}rEZ~kf<kH蜶.^"D*m]d% D itDɺ3ҏ5?{$,0۠8(lpPͰz*lRLBA{OS:Vv5mojv-,jB)+=S+aT 5}kK|BIJ|w je s o9xHP+֬&zzHuhOOTu4xc3 ?"U~a ;V4[ Oz ἛA{StG!\ L mpop <.t¥s A߇Q:|S ᪛A:(S 5>BIF7 ·ÜB xn$FXvx~s|(ț׷-~#[o򶛂|0 <&y:Myb?=lzC^=)cB&Cy!@f[>%yCe!̧cz(/zf5i й!!Lr} x29C޸Bdž*od)!S0Zt ;n3첣`/ ;lG_N/R>>2}}=igWew&/)+ew#cpˣr1/b)X&)c02 h@~u jM  efdkZn) /~ڟedR?}8cgyh!]t׍袴"*?3#-} bʼnߡm8fWUu2R5V1[GԽHd<@e\bzǶipZu?*,@`=+ד3.1^SI_g?yG[Rc;16{ Z&yG= RWtr (U/#z WBU)X8:S9"DU &x0Qh8W0 #%q]آerB0燆LY}y70@ X!A}\%4RR&ceEM)Y>j]1I[ \wLJY⻁T/#Œldρ0(C2y2 f{ο8zG^8+C$Br8k{ &ڃٯ+.OEˠ2̑f EieQ<ʍr#1엇TCũG9(}.sv+AmFN~3g^{V<.ϟ8s8p?߯< x/x"s>x ^)a,NJsnLjWϏV&ix}-Y ?Gb85( S2RLDGLQ<ݴ=]k&۞hɴz O9#ӏc_>i73Ckb ?BC&G4S\ 83ٳ8Ni4X1G" `*,࢒uym؆_ lar2zA\ 6OZ⁡zr]9q{ pF= #$ɍ>fo~~qZĖɱ _>y 8e EGGoeir読(ZE%wRvV|M7%/Ql/s{͙zBgqc ]};Wu:7211'g7)TUHenEXc&V[|`yfvBX$& ѠlPpLkdr;C?0uߝIO,~jM /;~f V:6[&^Ra,"ƩPiK.bxXN{y!d$ ?W &6 aG",`1lj l/Oܳ0>w߳i"hk9c# lYf<ȃC exᰜ4-Tw[6F"*Clh6δş0_|ijLeM C6!{Zج;谰(g獺(hqU\ljRY5l[(8l;}?= &XВnaۇ$UHA0~oQ>̯uәB  uFP:x [/D~`ݗ-n[[y⤬aNQ.LNj >x'!ETf+k, cJ3xr4 E3S@mCbeVf0@+כ~ >  GN6TVjiIL(gߧK4c90}e. <m s5Ih:3yv&q`3(HdEor=̬*2SZ/-X~/0 ӎL:pqNuM$v ߜq\Hφ۽ە;R|}0QE-=..)~kv;~+ϚC/5k?ÿ,=ee"\I mDR.1#4i5Ba-K ))9ēa6JvTM?2-8t;R4ֵhy]L液 v4zvl GWgU(x~m&qU 7fx ąjĹ0^uu$=U_Ml*%/+  {,+ѷB@P(&\׳e_cߒ}̟+eKәDy\]εMz>젷fs&c &f8ccSL rJ%! lց?+7 G )xUq5VҦP JF gd> HەP/-FowuZ ZS9qeqE y ,B,ic xO%^b ^ĻY*9 a ~*ra3Cx803M߱j RWo` V@@ ]>tKVԷ[C,Nx+VFv%}pW -F]f ؚX1bWC6&p\dh En==0}(j׃s ΅[i%L6_D:L6Bs6.5.dfyrS fCmnK6dBnvM ' lCW nq<ō%uN(NY0W|_r,.x֘'pDnfc|D ѐ6cUQ{X_L Rg0 -ǯ466ih>OMNS$t)M&1Z,2lqׁ.jVe].2WmmHݷzuwj*MFop$"f8f޽{~g|C j "$#dh NPdjڣq(e6vkdIVc;vN`c0d<9::\ ! =:>=1X.Yߐ/bmڸYǎaW]v W`pYx xk`ͺ =دTX1iQhk[@ O#&{hk,bAb] 7fdf?bk~?w<|3uR-OroiXˆl/ui~!Dp5ǓsT A +C)]*sޏ̻>G?Mu N|p!L}JV0.~5ř5kfų4Y!p)~uQOJe0MjZؕJErVtT Ɛ,:IMTCuw4w;m7>Κ/d &' Мgfm-_ ^l9ٔ P$%^s<6sࡪ`?8si3?U6oVV<1d펏z#6~+`K^a_Zv}rPnUj_K9̙@4#wG@N&?;`o% |  !Z!A!G#9 <i~'ݢ ~kJm!v$;|u<12OzyİJHS,dCo9 !L`a?dQ+\=&sT :9 G^'zNXO\K&efz37LqΖ.a>5ګ٬?`wR*%_>)& b2 r0F)_y*]bD, VgEP~,<9^^-!=a O%0-쐁x&(hdd*J E=ӤRE)tڅ*fYy=m"#]A%ٿIKV"x_Įo˸2UT/7ì/-}Lt+V-#GU53Jf/j_6N΅sIV"JÜCo}'(2%5u-h .ʁ:m ]cXGǏIII9=wTZr F7mLyݘttۘ1iyTG7oLcҀϨI1&pLZ~D}$wIKďdL1ƤoG<{ƤAYA` endstream endobj 63 0 obj 7928 endobj 64 0 obj (sumatra_user_manual) endobj 65 0 obj (Mac OS X 10.13.6 Quartz PDFContext) endobj 66 0 obj (MacDown) endobj 67 0 obj (D:20190328135143Z00'00') endobj 68 0 obj () endobj 69 0 obj [ ] endobj 1 0 obj << /Title 64 0 R /Producer 65 0 R /Creator 66 0 R /CreationDate 67 0 R /ModDate 67 0 R /Keywords 68 0 R /AAPL:Keywords 69 0 R >> endobj xref 0 70 0000000000 65535 f 0000064538 00000 n 0000003554 00000 n 0000017531 00000 n 0000000022 00000 n 0000003534 00000 n 0000003672 00000 n 0000006585 00000 n 0000019351 00000 n 0000003781 00000 n 0000019073 00000 n 0000018836 00000 n 0000018617 00000 n 0000018398 00000 n 0000018144 00000 n 0000017920 00000 n 0000017685 00000 n 0000055621 00000 n 0000003849 00000 n 0000006564 00000 n 0000010388 00000 n 0000006621 00000 n 0000010367 00000 n 0000010495 00000 n 0000000000 00000 n 0000034298 00000 n 0000013553 00000 n 0000010617 00000 n 0000013532 00000 n 0000013660 00000 n 0000017302 00000 n 0000013782 00000 n 0000017281 00000 n 0000017409 00000 n 0000048368 00000 n 0000017635 00000 n 0000017806 00000 n 0000017862 00000 n 0000018042 00000 n 0000018098 00000 n 0000018266 00000 n 0000018322 00000 n 0000018520 00000 n 0000018576 00000 n 0000018739 00000 n 0000018795 00000 n 0000018958 00000 n 0000019014 00000 n 0000019195 00000 n 0000019251 00000 n 0000020029 00000 n 0000020279 00000 n 0000034276 00000 n 0000035418 00000 n 0000034718 00000 n 0000035398 00000 n 0000035666 00000 n 0000048346 00000 n 0000048978 00000 n 0000049238 00000 n 0000055600 00000 n 0000056042 00000 n 0000056300 00000 n 0000064319 00000 n 0000064340 00000 n 0000064378 00000 n 0000064431 00000 n 0000064457 00000 n 0000064499 00000 n 0000064518 00000 n trailer << /Size 70 /Root 35 0 R /Info 1 0 R /ID [ <589256a4329caca62b388a0e811075b2> <589256a4329caca62b388a0e811075b2> ] >> startxref 64682 %%EOF sumatra_v1.0.36+ds/mtcompare_sumatra.h0000644000175000017500000000052112551720621017360 0ustar pierrepierre/* * mtcompare_sumatra.h * * Created on: 12 mars 2013 * Author: celinemercier */ #ifndef MTCOMPARE_SUMATRA_H_ #define MTCOMPARE_SUMATRA_H_ int mt_compare_sumatra(fastaSeqCount *db1, fastaSeqCount *db2, double threshold, BOOL normalize, int reference, BOOL lcsmode, BOOL extradata, int n); #endif /* MTCOMPARE_SUMATRA_H_ */ sumatra_v1.0.36+ds/._sumatra_user_manual.md0000644000175000017500000000051513447147416020307 0ustar pierrepierreMac OS X  2MATTRMicom.apple.lastuseddate#PSY7com.apple.metadata:kMDLabel_4kmwnkmrs25m5pq7tbhdg2hcj4yӜ\L]p)Vl,˜); =E6S. K* d I 5nzԼsa ЊQ(]G >I?|:n:sumatra_v1.0.36+ds/sumatra.c0000644000175000017500000004051013645051167015315 0ustar pierrepierre/** * FileName: sumatra.c * Authors: Eric Coissac, Celine Mercier * Description: computation of pairwise similarities of DNA sequences * **/ #include "sumatra.h" #include #include #include #include #include #include #include "libfasta/sequence.h" #include "liblcs/upperband.h" #include "liblcs/sse_banded_LCS_alignment.h" #include "libutils/utilities.h" #include "mtcompare_sumatra.h" #define VERSION "1.0.36" /* ----------------------------------------------- */ /* printout help */ /* ----------------------------------------------- */ #define PP fprintf(stdout, static void PrintHelp() { PP "-----------------------------------------------------------------------------------------------------------------------------\n"); PP " SUMATRA Version %s\n", VERSION); PP "-----------------------------------------------------------------------------------------------------------------------------\n"); PP " Synopsis : sumatra computes all the pairwise LCS (Longest Common Subsequence) scores\n"); PP " of one nucleotide dataset or between two nucleotide datasets.\n"); PP " Usage: sumatra [options] [dataset2]\n"); PP "-----------------------------------------------------------------------------------------------------------------------------\n"); PP " Options:\n\n"); PP " -h : [H]elp - print help\n\n"); PP " -l : Reference sequence length is the shortest. \n\n"); PP " -L : Reference sequence length is the largest. \n\n"); PP " -a : Reference sequence length is the alignment length (default). \n\n"); PP " -n : Score is normalized by reference sequence length (default).\n\n"); PP " -r : Raw score, not normalized. \n\n"); PP " -d : Score is expressed in distance (default: score is expressed in similarity). \n\n"); PP " -t ##.## : Score threshold. If the score is normalized and expressed in similarity (default),\n"); PP " it is an identity, e.g. 0.95 for an identity of 95%%. If the score is normalized\n"); PP " and expressed in distance, it is (1.0 - identity), e.g. 0.05 for an identity of 95%%.\n"); PP " If the score is not normalized and expressed in similarity, it is the length of the\n"); PP " Longest Common Subsequence. If the score is not normalized and expressed in distance,\n"); PP " it is (reference length - LCS length).\n"); PP " Only sequence pairs with a similarity above ##.## are printed. Default: 0.00 \n"); PP " (no threshold).\n\n"); PP " -p ## : Number of threads used for computation (default=1).\n\n"); PP " -g : n's are replaced with a's (default: sequences with n's are discarded).\n"); PP " -x : Adds four extra columns with the count and length of both sequences.\n"); PP "-----------------------------------------------------------------------------------------------------------------------------\n"); PP " First argument : the nucleotide dataset to analyze (or nothing \n"); PP " if there is only one dataset and the standard \n"); PP " input should be used). \n\n"); PP " Second argument : optionally the second nucleotide dataset\n"); PP "-----------------------------------------------------------------------------------------------------------------------------\n"); PP " Results table description : \n"); PP " column 1 : Identifier sequence 1\n"); PP " column 2 : Identifier sequence 2\n"); PP " column 3 : Score\n"); PP " column 4 : Count of sequence 1 (only with option -x)\n"); PP " column 5 : Count of sequence 2 (only with option -x)\n"); PP " column 6 : Length of sequence 1 (only with option -x)\n"); PP " column 7 : Length of sequence 2 (only with option -x)\n"); PP "-----------------------------------------------------------------------------------------------------------------------------\n"); PP " http://metabarcoding.org/sumatra\n"); PP "-----------------------------------------------------------------------------------------------------------------------------\n\n"); } #undef PP /* ----------------------------------------------- */ /* printout usage and exit */ /* ----------------------------------------------- */ #define PP fprintf(stderr, static void ExitUsage(stat) int stat; { PP "usage: sumatra [-l|L|a|n|r|d|g|x] [-t threshold_value] [-p number of threads] [dataset1] [dataset2]\n"); PP "type \"sumatra -h\" for help\n"); if (stat) exit(stat); } #undef PP void printResults(fastaSeqPtr seq1,fastaSeqPtr seq2, double score, BOOL extradata, int64_t pairs, BOOL print) { static struct timeval start; static struct timeval lastprint; static BOOL first=TRUE; static uint64_t aligned=0; struct timeval current; double fraction; time_t fulltime; time_t remaintime; double elapsedtime; int32_t day; int32_t hour; int32_t minute; int32_t seconde; aligned++; if (first) { first=FALSE; gettimeofday(&start,NULL); lastprint=start; } gettimeofday(¤t,NULL); if (current.tv_sec!=lastprint.tv_sec) { lastprint=current; fraction = (double)aligned/(double)pairs; elapsedtime = difftime(current.tv_sec,start.tv_sec); fulltime = elapsedtime / fraction; remaintime = (time_t)difftime(fulltime,(time_t)elapsedtime); fprintf(stderr, "Computed %lld / %lld -> %5.2lf%%", aligned, pairs, fraction*100. ); seconde = fulltime % 60; minute = fulltime / 60; hour = minute / 60; minute = minute % 60; day = hour / 24; hour = hour % 24; if (day) fprintf(stderr, ", estimated computation time = %3d days %02d:%02d:%02d", day, hour, minute, seconde ); else fprintf(stderr, ", estimated computation time = %02d:%02d:%02d", hour, minute, seconde ); seconde = remaintime % 60; minute = remaintime / 60; hour = minute / 60; minute = minute % 60; day = hour / 24; hour = hour % 24; if (day) fprintf(stderr, ", about %3d days %02d:%02d:%02d remaining \r", day, hour, minute, seconde ); else fprintf(stderr, ", about %02d:%02d:%02d remaining \r", hour, minute, seconde ); } if (print) { if (extradata) printf("%s\t%s\t%lf\t%d\t%d\t%d\t%d\n", seq1->accession_id, seq2->accession_id, score, seq1->count, seq2->count, seq1->length, seq2->length ); else printf("%s\t%s\t%lf\n", seq1->accession_id, seq2->accession_id, score); } } int compare1(fastaSeqCount db1, double threshold, BOOL normalize, int reference, BOOL lcsmode, BOOL extradata) { BOOL always = TRUE; int64_t pairs = (int64_t)(db1.count - 1) * (int64_t)db1.count /2; BOOL print; double score, scoreG; int32_t i,j; char* s1; char* s2; int l1; int l2; int16_t* iseq1; int16_t* iseq2; int16_t* address; int sizeForSeqs; int lmax, lmin; int LCSmin; fprintf(stderr,"Pairwise alignments of one dataset against itself\n"); fprintf(stderr,"Count of alignments to do : %lld\n",pairs); if (threshold > 0) { fprintf(stderr,"Computing for scores > %lf\n",threshold); always = FALSE; } calculateMaxAndMinLenDB(db1, &lmax, &lmin); sizeForSeqs = prepareTablesForSumathings(lmax, lmin, threshold, normalize, reference, lcsmode, &address, &iseq1, &iseq2); for (i=0; i < db1.count; i++) // ...?? db1.count - 1 probably for (j=i+1; j < db1.count; j++) { print = FALSE; filtersSumatra(db1.fastaSeqs+i, db1.fastaSeqs+j, threshold, normalize, reference, lcsmode, &score, &LCSmin); if (score >= 0) // identical sequences print = TRUE; else if (always || (score == -1.0)) // filter passed or no threshold { s1 = (db1.fastaSeqs+i)->sequence; l1 = (db1.fastaSeqs+i)->length; s2 = (db1.fastaSeqs+j)->sequence; l2 = (db1.fastaSeqs+j)->length; /* fprintf(stderr, "\n%s", s1); fprintf(stderr, "\n%s", s2); fprintf(stderr, "\n%f", threshold); fprintf(stderr, "\n%d", normalize); fprintf(stderr, "\n%d", reference); fprintf(stderr, "\n%d\n", lcsmode); */ // score = generic_sse_banded_lcs_align(s1, s2, threshold, normalize, reference, lcsmode); // fprintf(stderr, "\nscore generic = %f", scoreG); score = alignForSumathings(s1, iseq1, s2, iseq2, l1, l2, normalize, reference, lcsmode, address, sizeForSeqs, LCSmin); // fprintf(stderr, "\nscore = %f\n", score); // if (scoreG != score) // { // fprintf(stderr, "\nscores differents\n"); // exit(1); // } print = always || (((normalize || lcsmode) && (score >= threshold)) || ((!lcsmode && !normalize) && (score <= threshold))); if (print && !lcsmode && normalize) score = 1.0 - score; } printResults(db1.fastaSeqs+i, db1.fastaSeqs+j, score, extradata, pairs, print); } free(iseq1-sizeForSeqs+lmax); free(iseq2-sizeForSeqs+lmax); return 0; } int compare2(fastaSeqCount db1, fastaSeqCount db2, double threshold, BOOL normalize, int reference, BOOL lcsmode, BOOL extradata) { BOOL always = TRUE; int64_t pairs = (int64_t)(db1.count) * (int64_t)(db2.count); BOOL print; double score; int32_t i,j; char* s1; char* s2; int l1; int l2; int16_t* iseq1; int16_t* iseq2; int16_t* address; int sizeForSeqs; int lmax; int lmax1; int lmin; int lmin1; int LCSmin; fprintf(stderr,"Pairwise alignments of two datasets\n"); fprintf(stderr,"Count of alignments to do : %lld\n",pairs); if (threshold > 0) { fprintf(stderr,"Computing for scores > %lf\n",threshold); always = FALSE; } calculateMaxAndMinLenDB(db1, &lmax, &lmin); calculateMaxAndMinLenDB(db2, &lmax1, &lmin1); if (lmax1 > lmax) lmax = lmax1; if (lmin1 < lmin) lmin = lmin1; sizeForSeqs = prepareTablesForSumathings(lmax, lmin, threshold, normalize, reference, lcsmode, &address, &iseq1, &iseq2); for (i=0; i < db1.count; i++) for (j=0; j < db2.count; j++) { print = FALSE; filtersSumatra(db1.fastaSeqs+i, db2.fastaSeqs+j, threshold, normalize, reference, lcsmode, &score, &LCSmin); if (score >= 0) // identical sequences print = TRUE; else if (always || (score == -1.0)) // filter passed or no threshold { s1 = (db1.fastaSeqs+i)->sequence; l1 = (db1.fastaSeqs+i)->length; s2 = (db2.fastaSeqs+j)->sequence; l2 = (db2.fastaSeqs+j)->length; score = alignForSumathings(s1, iseq1, s2, iseq2, l1, l2, normalize, reference, lcsmode, address, sizeForSeqs, LCSmin); print = always || (((normalize || lcsmode) && (score >= threshold)) || ((!lcsmode && !normalize) && (score <= threshold))); if (print && !lcsmode && normalize) score = 1.0 - score; // TODO isn't that already done? } printResults(db1.fastaSeqs+i, db2.fastaSeqs+j, score, extradata, pairs, print); } free(iseq1-sizeForSeqs+lmax); free(iseq2-sizeForSeqs+lmax); return 0; } int main(int argc, char **argv) { int32_t carg = 0; int32_t errflag = 0; BOOL normalize = TRUE; BOOL lcsmode = TRUE; int reference = ALILEN; BOOL extradata = FALSE; BOOL onlyATGC = TRUE; double threshold = 0.0; int ndb = 0; int nproc = 1; fastaSeqCount db1; fastaSeqCount db2; while ((carg = getopt(argc, argv, "hlLanrdt:p:gx")) != -1) { switch (carg) { /* -------------------- */ case 'h': /* help */ /* -------------------- */ PrintHelp(); exit(0); break; /* -------------------------------------------------- */ case 'l': /* Normalize LCS/Error by the shortest sequence length*/ /* -------------------------------------------------- */ reference=MINLEN; break; /* -------------------------------------------------- */ case 'L': /* Normalize LCS/Error by the largest sequence length */ /* -------------------------------------------------- */ reference=MAXLEN; break; /* -------------------------------------------------- */ case 'a': /* Normalize LCS/Error by the alignment length */ /* -------------------------------------------------- */ reference=ALILEN; break; /* -------------------------------------------------- */ case 'n': /* Normalize LCS by the reference length */ /* -------------------------------------------------- */ normalize=TRUE; break; /* -------------------------------------------------- */ case 'r': /* No normalization */ /* -------------------------------------------------- */ normalize=FALSE; break; /* -------------------------------------------------- */ case 'd': /* Score is expressed in distance */ /* -------------------------------------------------- */ lcsmode=FALSE; break; /* ------------------------------------------------------------------- */ case 't': /* Prints only pairs with similarity higher than (threshold) */ /* ------------------------------------------------------------------- */ sscanf(optarg,"%lf",&threshold); break; /* -------------------------------------------------- */ case 'p': /* number of processors to use */ /* -------------------------------------------------- */ sscanf(optarg,"%d",&nproc); break; /* -------------------------------------------------- */ case 'x': /* Print extra data (node weight, lseq1, lseq2) */ /* -------------------------------------------------- */ extradata=TRUE; break; /* -------------------------------------------------- */ case 'g': /* replace n's with a's in sequences */ /* -------------------------------------------------- */ onlyATGC=FALSE; break; case '?': /* bad option */ errflag++; break; } } ndb = argc - optind; if (errflag) ExitUsage(errflag); fprintf(stderr,"===============================================================\n"); fprintf(stderr," SUMATRA version %s\n",VERSION); #ifdef __SSE2__ fprintf(stderr,"Alignment using SSE2 code\n"); #else fprintf(stderr,"Alignment using standard code, SSE2 unavailable\n"); #endif fprintf(stderr,"===============================================================\n"); if (normalize && (threshold > 1.0)) { fprintf(stderr, "\nERROR : Please specify a threshold included between 0.0 and 1.0 when normalizing scores.\n\n"); exit(1); } fprintf(stderr,"Reading dataset 1..."); db1 = seq_readAllSeq2(argv[optind], TRUE, onlyATGC); fprintf(stderr,"\n%d sequences\n",db1.count); if (!onlyATGC) (void)cleanDB(db1); addCounts(&db1); if (threshold>0) (void)hashDB(db1); optind++; if (ndb == 2) { fprintf(stderr,"Reading dataset 2..."); db2 = seq_readAllSeq2(argv[optind], TRUE, onlyATGC); fprintf(stderr,"\n%d sequences\n",db2.count); if (!onlyATGC) (void)cleanDB(db2); addCounts(&db2); if (threshold>0) (void)hashDB(db2); } if (!lcsmode && normalize && (threshold > 0)) threshold = 1.0 - threshold; if (ndb==1) { if (nproc==1) compare1(db1, threshold, normalize, reference, lcsmode, extradata); else mt_compare_sumatra(&db1, NULL, threshold, normalize, reference, lcsmode, extradata, nproc); } else { if (nproc==1) compare2(db1, db2, threshold, normalize, reference, lcsmode, extradata); else mt_compare_sumatra(&db1, &db2, threshold, normalize, reference, lcsmode, extradata, nproc); } fprintf(stderr,"\nDone.\n\n"); return 0; } sumatra_v1.0.36+ds/Licence_CeCILL_V2-fr.txt0000644000175000017500000005173312551720621017631 0ustar pierrepierre CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL Avertissement Ce contrat est une licence de logiciel libre issue d'une concertation entre ses auteurs afin que le respect de deux grands principes prside sa rdaction: * d'une part, le respect des principes de diffusion des logiciels libres: accs au code source, droits tendus confrs aux utilisateurs, * d'autre part, la dsignation d'un droit applicable, le droit franais, auquel elle est conforme, tant au regard du droit de la responsabilit civile que du droit de la proprit intellectuelle et de la protection qu'il offre aux auteurs et titulaires des droits patrimoniaux sur un logiciel. Les auteurs de la licence CeCILL (pour Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) sont: Commissariat l'Energie Atomique - CEA, tablissement public de recherche caractre scientifique, technique et industriel, dont le sige est situ 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris. Centre National de la Recherche Scientifique - CNRS, tablissement public caractre scientifique et technologique, dont le sige est situ 3 rue Michel-Ange, 75794 Paris cedex 16. Institut National de Recherche en Informatique et en Automatique - INRIA, tablissement public caractre scientifique et technologique, dont le sige est situ Domaine de Voluceau, Rocquencourt, BP 105, 78153 Le Chesnay cedex. Prambule Ce contrat est une licence de logiciel libre dont l'objectif est de confrer aux utilisateurs la libert de modification et de redistribution du logiciel rgi par cette licence dans le cadre d'un modle de diffusion en logiciel libre. L'exercice de ces liberts est assorti de certains devoirs la charge des utilisateurs afin de prserver ce statut au cours des redistributions ultrieures. L'accessibilit au code source et les droits de copie, de modification et de redistribution qui en dcoulent ont pour contrepartie de n'offrir aux utilisateurs qu'une garantie limite et de ne faire peser sur l'auteur du logiciel, le titulaire des droits patrimoniaux et les concdants successifs qu'une responsabilit restreinte. A cet gard l'attention de l'utilisateur est attire sur les risques associs au chargement, l'utilisation, la modification et/ou au dveloppement et la reproduction du logiciel par l'utilisateur tant donn sa spcificit de logiciel libre, qui peut le rendre complexe manipuler et qui le rserve donc des dveloppeurs ou des professionnels avertis possdant des connaissances informatiques approfondies. Les utilisateurs sont donc invits charger et tester l'adquation du logiciel leurs besoins dans des conditions permettant d'assurer la scurit de leurs systmes et/ou de leurs donnes et, plus gnralement, l'utiliser et l'exploiter dans les mmes conditions de scurit. Ce contrat peut tre reproduit et diffus librement, sous rserve de le conserver en l'tat, sans ajout ni suppression de clauses. Ce contrat est susceptible de s'appliquer tout logiciel dont le titulaire des droits patrimoniaux dcide de soumettre l'exploitation aux dispositions qu'il contient. Article 1 - DEFINITIONS Dans ce contrat, les termes suivants, lorsqu'ils seront crits avec une lettre capitale, auront la signification suivante: Contrat: dsigne le prsent contrat de licence, ses ventuelles versions postrieures et annexes. Logiciel: dsigne le logiciel sous sa forme de Code Objet et/ou de Code Source et le cas chant sa documentation, dans leur tat au moment de l'acceptation du Contrat par le Licenci. Logiciel Initial: dsigne le Logiciel sous sa forme de Code Source et ventuellement de Code Objet et le cas chant sa documentation, dans leur tat au moment de leur premire diffusion sous les termes du Contrat. Logiciel Modifi: dsigne le Logiciel modifi par au moins une Contribution. Code Source: dsigne l'ensemble des instructions et des lignes de programme du Logiciel et auquel l'accs est ncessaire en vue de modifier le Logiciel. Code Objet: dsigne les fichiers binaires issus de la compilation du Code Source. Titulaire: dsigne le ou les dtenteurs des droits patrimoniaux d'auteur sur le Logiciel Initial. Licenci: dsigne le ou les utilisateurs du Logiciel ayant accept le Contrat. Contributeur: dsigne le Licenci auteur d'au moins une Contribution. Concdant: dsigne le Titulaire ou toute personne physique ou morale distribuant le Logiciel sous le Contrat. Contribution: dsigne l'ensemble des modifications, corrections, traductions, adaptations et/ou nouvelles fonctionnalits intgres dans le Logiciel par tout Contributeur, ainsi que tout Module Interne. Module: dsigne un ensemble de fichiers sources y compris leur documentation qui permet de raliser des fonctionnalits ou services supplmentaires ceux fournis par le Logiciel. Module Externe: dsigne tout Module, non driv du Logiciel, tel que ce Module et le Logiciel s'excutent dans des espaces d'adressage diffrents, l'un appelant l'autre au moment de leur excution. Module Interne: dsigne tout Module li au Logiciel de telle sorte qu'ils s'excutent dans le mme espace d'adressage. GNU GPL: dsigne la GNU General Public License dans sa version 2 ou toute version ultrieure, telle que publie par Free Software Foundation Inc. Parties: dsigne collectivement le Licenci et le Concdant. Ces termes s'entendent au singulier comme au pluriel. Article 2 - OBJET Le Contrat a pour objet la concession par le Concdant au Licenci d'une licence non exclusive, cessible et mondiale du Logiciel telle que dfinie ci-aprs l'article 5 pour toute la dure de protection des droits portant sur ce Logiciel. Article 3 - ACCEPTATION 3.1 L'acceptation par le Licenci des termes du Contrat est rpute acquise du fait du premier des faits suivants: * (i) le chargement du Logiciel par tout moyen notamment par tlchargement partir d'un serveur distant ou par chargement partir d'un support physique; * (ii) le premier exercice par le Licenci de l'un quelconque des droits concds par le Contrat. 3.2 Un exemplaire du Contrat, contenant notamment un avertissement relatif aux spcificits du Logiciel, la restriction de garantie et la limitation un usage par des utilisateurs expriments a t mis disposition du Licenci pralablement son acceptation telle que dfinie l'article 3.1 ci dessus et le Licenci reconnat en avoir pris connaissance. Article 4 - ENTREE EN VIGUEUR ET DUREE 4.1 ENTREE EN VIGUEUR Le Contrat entre en vigueur la date de son acceptation par le Licenci telle que dfinie en 3.1. 4.2 DUREE Le Contrat produira ses effets pendant toute la dure lgale de protection des droits patrimoniaux portant sur le Logiciel. Article 5 - ETENDUE DES DROITS CONCEDES Le Concdant concde au Licenci, qui accepte, les droits suivants sur le Logiciel pour toutes destinations et pour la dure du Contrat dans les conditions ci-aprs dtailles. Par ailleurs, si le Concdant dtient ou venait dtenir un ou plusieurs brevets d'invention protgeant tout ou partie des fonctionnalits du Logiciel ou de ses composants, il s'engage ne pas opposer les ventuels droits confrs par ces brevets aux Licencis successifs qui utiliseraient, exploiteraient ou modifieraient le Logiciel. En cas de cession de ces brevets, le Concdant s'engage faire reprendre les obligations du prsent alina aux cessionnaires. 5.1 DROIT D'UTILISATION Le Licenci est autoris utiliser le Logiciel, sans restriction quant aux domaines d'application, tant ci-aprs prcis que cela comporte: 1. la reproduction permanente ou provisoire du Logiciel en tout ou partie par tout moyen et sous toute forme. 2. le chargement, l'affichage, l'excution, ou le stockage du Logiciel sur tout support. 3. la possibilit d'en observer, d'en tudier, ou d'en tester le fonctionnement afin de dterminer les ides et principes qui sont la base de n'importe quel lment de ce Logiciel; et ceci, lorsque le Licenci effectue toute opration de chargement, d'affichage, d'excution, de transmission ou de stockage du Logiciel qu'il est en droit d'effectuer en vertu du Contrat. 5.2 DROIT D'APPORTER DES CONTRIBUTIONS Le droit d'apporter des Contributions comporte le droit de traduire, d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel et le droit de reproduire le logiciel en rsultant. Le Licenci est autoris apporter toute Contribution au Logiciel sous rserve de mentionner, de faon explicite, son nom en tant qu'auteur de cette Contribution et la date de cration de celle-ci. 5.3 DROIT DE DISTRIBUTION Le droit de distribution comporte notamment le droit de diffuser, de transmettre et de communiquer le Logiciel au public sur tout support et par tout moyen ainsi que le droit de mettre sur le march titre onreux ou gratuit, un ou des exemplaires du Logiciel par tout procd. Le Licenci est autoris distribuer des copies du Logiciel, modifi ou non, des tiers dans les conditions ci-aprs dtailles. 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION Le Licenci est autoris distribuer des copies conformes du Logiciel, sous forme de Code Source ou de Code Objet, condition que cette distribution respecte les dispositions du Contrat dans leur totalit et soit accompagne: 1. d'un exemplaire du Contrat, 2. d'un avertissement relatif la restriction de garantie et de responsabilit du Concdant telle que prvue aux articles 8 et 9, et que, dans le cas o seul le Code Objet du Logiciel est redistribu, le Licenci permette aux futurs Licencis d'accder facilement au Code Source complet du Logiciel en indiquant les modalits d'accs, tant entendu que le cot additionnel d'acquisition du Code Source ne devra pas excder le simple cot de transfert des donnes. 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE Lorsque le Licenci apporte une Contribution au Logiciel, les conditions de distribution du Logiciel Modifi en rsultant sont alors soumises l'intgralit des dispositions du Contrat. Le Licenci est autoris distribuer le Logiciel Modifi, sous forme de code source ou de code objet, condition que cette distribution respecte les dispositions du Contrat dans leur totalit et soit accompagne: 1. d'un exemplaire du Contrat, 2. d'un avertissement relatif la restriction de garantie et de responsabilit du Concdant telle que prvue aux articles 8 et 9, et que, dans le cas o seul le code objet du Logiciel Modifi est redistribu, le Licenci permette aux futurs Licencis d'accder facilement au code source complet du Logiciel Modifi en indiquant les modalits d'accs, tant entendu que le cot additionnel d'acquisition du code source ne devra pas excder le simple cot de transfert des donnes. 5.3.3 DISTRIBUTION DES MODULES EXTERNES Lorsque le Licenci a dvelopp un Module Externe les conditions du Contrat ne s'appliquent pas ce Module Externe, qui peut tre distribu sous un contrat de licence diffrent. 5.3.4 COMPATIBILITE AVEC LA LICENCE GNU GPL Le Licenci peut inclure un code soumis aux dispositions d'une des versions de la licence GNU GPL dans le Logiciel modifi ou non et distribuer l'ensemble sous les conditions de la mme version de la licence GNU GPL. Le Licenci peut inclure le Logiciel modifi ou non dans un code soumis aux dispositions d'une des versions de la licence GNU GPL et distribuer l'ensemble sous les conditions de la mme version de la licence GNU GPL. Article 6 - PROPRIETE INTELLECTUELLE 6.1 SUR LE LOGICIEL INITIAL Le Titulaire est dtenteur des droits patrimoniaux sur le Logiciel Initial. Toute utilisation du Logiciel Initial est soumise au respect des conditions dans lesquelles le Titulaire a choisi de diffuser son oeuvre et nul autre n'a la facult de modifier les conditions de diffusion de ce Logiciel Initial. Le Titulaire s'engage ce que le Logiciel Initial reste au moins rgi par le Contrat et ce, pour la dure vise l'article 4.2. 6.2 SUR LES CONTRIBUTIONS Le Licenci qui a dvelopp une Contribution est titulaire sur celle-ci des droits de proprit intellectuelle dans les conditions dfinies par la lgislation applicable. 6.3 SUR LES MODULES EXTERNES Le Licenci qui a dvelopp un Module Externe est titulaire sur celui-ci des droits de proprit intellectuelle dans les conditions dfinies par la lgislation applicable et reste libre du choix du contrat rgissant sa diffusion. 6.4 DISPOSITIONS COMMUNES Le Licenci s'engage expressment: 1. ne pas supprimer ou modifier de quelque manire que ce soit les mentions de proprit intellectuelle apposes sur le Logiciel; 2. reproduire l'identique lesdites mentions de proprit intellectuelle sur les copies du Logiciel modifi ou non. Le Licenci s'engage ne pas porter atteinte, directement ou indirectement, aux droits de proprit intellectuelle du Titulaire et/ou des Contributeurs sur le Logiciel et prendre, le cas chant, l'gard de son personnel toutes les mesures ncessaires pour assurer le respect des dits droits de proprit intellectuelle du Titulaire et/ou des Contributeurs. Article 7 - SERVICES ASSOCIES 7.1 Le Contrat n'oblige en aucun cas le Concdant la ralisation de prestations d'assistance technique ou de maintenance du Logiciel. Cependant le Concdant reste libre de proposer ce type de services. Les termes et conditions d'une telle assistance technique et/ou d'une telle maintenance seront alors dtermins dans un acte spar. Ces actes de maintenance et/ou assistance technique n'engageront que la seule responsabilit du Concdant qui les propose. 7.2 De mme, tout Concdant est libre de proposer, sous sa seule responsabilit, ses licencis une garantie, qui n'engagera que lui, lors de la redistribution du Logiciel et/ou du Logiciel Modifi et ce, dans les conditions qu'il souhaite. Cette garantie et les modalits financires de son application feront l'objet d'un acte spar entre le Concdant et le Licenci. Article 8 - RESPONSABILITE 8.1 Sous rserve des dispositions de l'article 8.2, le Licenci a la facult, sous rserve de prouver la faute du Concdant concern, de solliciter la rparation du prjudice direct qu'il subirait du fait du Logiciel et dont il apportera la preuve. 8.2 La responsabilit du Concdant est limite aux engagements pris en application du Contrat et ne saurait tre engage en raison notamment: (i) des dommages dus l'inexcution, totale ou partielle, de ses obligations par le Licenci, (ii) des dommages directs ou indirects dcoulant de l'utilisation ou des performances du Logiciel subis par le Licenci et (iii) plus gnralement d'un quelconque dommage indirect. En particulier, les Parties conviennent expressment que tout prjudice financier ou commercial (par exemple perte de donnes, perte de bnfices, perte d'exploitation, perte de clientle ou de commandes, manque gagner, trouble commercial quelconque) ou toute action dirige contre le Licenci par un tiers, constitue un dommage indirect et n'ouvre pas droit rparation par le Concdant. Article 9 - GARANTIE 9.1 Le Licenci reconnat que l'tat actuel des connaissances scientifiques et techniques au moment de la mise en circulation du Logiciel ne permet pas d'en tester et d'en vrifier toutes les utilisations ni de dtecter l'existence d'ventuels dfauts. L'attention du Licenci a t attire sur ce point sur les risques associs au chargement, l'utilisation, la modification et/ou au dveloppement et la reproduction du Logiciel qui sont rservs des utilisateurs avertis. Il relve de la responsabilit du Licenci de contrler, par tous moyens, l'adquation du produit ses besoins, son bon fonctionnement et de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens. 9.2 Le Concdant dclare de bonne foi tre en droit de concder l'ensemble des droits attachs au Logiciel (comprenant notamment les droits viss l'article 5). 9.3 Le Licenci reconnat que le Logiciel est fourni "en l'tat" par le Concdant sans autre garantie, expresse ou tacite, que celle prvue l'article 9.2 et notamment sans aucune garantie sur sa valeur commerciale, son caractre scuris, innovant ou pertinent. En particulier, le Concdant ne garantit pas que le Logiciel est exempt d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible avec l'quipement du Licenci et sa configuration logicielle ni qu'il remplira les besoins du Licenci. 9.4 Le Concdant ne garantit pas, de manire expresse ou tacite, que le Logiciel ne porte pas atteinte un quelconque droit de proprit intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout autre droit de proprit. Ainsi, le Concdant exclut toute garantie au profit du Licenci contre les actions en contrefaon qui pourraient tre diligentes au titre de l'utilisation, de la modification, et de la redistribution du Logiciel. Nanmoins, si de telles actions sont exerces contre le Licenci, le Concdant lui apportera son aide technique et juridique pour sa dfense. Cette aide technique et juridique est dtermine au cas par cas entre le Concdant concern et le Licenci dans le cadre d'un protocole d'accord. Le Concdant dgage toute responsabilit quant l'utilisation de la dnomination du Logiciel par le Licenci. Aucune garantie n'est apporte quant l'existence de droits antrieurs sur le nom du Logiciel et sur l'existence d'une marque. Article 10 - RESILIATION 10.1 En cas de manquement par le Licenci aux obligations mises sa charge par le Contrat, le Concdant pourra rsilier de plein droit le Contrat trente (30) jours aprs notification adresse au Licenci et reste sans effet. 10.2 Le Licenci dont le Contrat est rsili n'est plus autoris utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les licences qu'il aura concdes antrieurement la rsiliation du Contrat resteront valides sous rserve qu'elles aient t effectues en conformit avec le Contrat. Article 11 - DISPOSITIONS DIVERSES 11.1 CAUSE EXTERIEURE Aucune des Parties ne sera responsable d'un retard ou d'une dfaillance d'excution du Contrat qui serait d un cas de force majeure, un cas fortuit ou une cause extrieure, telle que, notamment, le mauvais fonctionnement ou les interruptions du rseau lectrique ou de tlcommunication, la paralysie du rseau lie une attaque informatique, l'intervention des autorits gouvernementales, les catastrophes naturelles, les dgts des eaux, les tremblements de terre, le feu, les explosions, les grves et les conflits sociaux, l'tat de guerre... 11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou plusieurs occasions de se prvaloir d'une ou plusieurs dispositions du Contrat, ne pourra en aucun cas impliquer renonciation par la Partie intresse s'en prvaloir ultrieurement. 11.3 Le Contrat annule et remplace toute convention antrieure, crite ou orale, entre les Parties sur le mme objet et constitue l'accord entier entre les Parties sur cet objet. Aucune addition ou modification aux termes du Contrat n'aura d'effet l'gard des Parties moins d'tre faite par crit et signe par leurs reprsentants dment habilits. 11.4 Dans l'hypothse o une ou plusieurs des dispositions du Contrat s'avrerait contraire une loi ou un texte applicable, existants ou futurs, cette loi ou ce texte prvaudrait, et les Parties feraient les amendements ncessaires pour se conformer cette loi ou ce texte. Toutes les autres dispositions resteront en vigueur. De mme, la nullit, pour quelque raison que ce soit, d'une des dispositions du Contrat ne saurait entraner la nullit de l'ensemble du Contrat. 11.5 LANGUE Le Contrat est rdig en langue franaise et en langue anglaise, ces deux versions faisant galement foi. Article 12 - NOUVELLES VERSIONS DU CONTRAT 12.1 Toute personne est autorise copier et distribuer des copies de ce Contrat. 12.2 Afin d'en prserver la cohrence, le texte du Contrat est protg et ne peut tre modifi que par les auteurs de la licence, lesquels se rservent le droit de publier priodiquement des mises jour ou de nouvelles versions du Contrat, qui possderont chacune un numro distinct. Ces versions ultrieures seront susceptibles de prendre en compte de nouvelles problmatiques rencontres par les logiciels libres. 12.3 Tout Logiciel diffus sous une version donne du Contrat ne pourra faire l'objet d'une diffusion ultrieure que sous la mme version du Contrat ou une version postrieure, sous rserve des dispositions de l'article 5.3.4. Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE 13.1 Le Contrat est rgi par la loi franaise. Les Parties conviennent de tenter de rgler l'amiable les diffrends ou litiges qui viendraient se produire par suite ou l'occasion du Contrat. 13.2 A dfaut d'accord amiable dans un dlai de deux (2) mois compter de leur survenance et sauf situation relevant d'une procdure d'urgence, les diffrends ou litiges seront ports par la Partie la plus diligente devant les Tribunaux comptents de Paris. Version 2.0 du 2006-09-05. sumatra_v1.0.36+ds/sumatra_user_manual.md0000644000175000017500000001626513447147416020103 0ustar pierrepierre# Sumatra: fast and exact comparison of sequences [metabarcoding.org/sumatra](metabarcoding.org/sumatra) ## Introduction With the development of next-generation sequencing, efficient tools are needed to handle millions of sequences in reasonable amounts of time. Sumatra is a program developed by the [LECA](http://www-leca.ujf-grenoble.fr/?lang=en). Sumatra aims to compare sequences in a way that is fast and exact at the same time. This tool has been developed to be adapted to the type of data generated by DNA metabarcoding, i.e. entirely sequenced, short markers. Sumatra computes the pairwise alignment scores from one dataset or between two datasets, with the possibility to specify a similarity threshold under which pairs of sequences that have a lower similarity are not reported. The output can then go through a classification process with programs such as [MCL](http://micans.org/mcl/) or [MOTHUR](http://www.mothur.org/). Currently, Sumatra is available as a program that you can download and install on Unix-like machines. ## Download and installation of Sumatra ### Download Sumatra can be downloaded from the metabarcoding.org GitLab. The archive of the latest tagged version can be downloaded on the GitLab wiki page: [https://git.metabarcoding.org/obitools/sumatra/wikis/home](https://git.metabarcoding.org/obitools/sumatra/wikis/home) The versions downloaded this way are for Unix-like systems compatible with SIMD SSE2 instructions and POSIX threads. Pre-compiled versions of GCC for OS X can be found [here](http://hpc.sourceforge.net/), that might be helpful if you encounter problems compiling the programs. Send an email at for other versions, or if you have any inquiries. ### Installation Untar the archive, go into the newly created directory and compile: ``` tar –zxvf sumatra_v[x.x.xx].tar.gz cd sumatra_v[x.x.xx] make -C sumalibs install make install ``` ## Documentation Sumatra computes the pairwise alignment scores from one dataset or between two datasets, with the possibility to specify a similarity threshold under which pairs of sequences that have a lower similarity are not reported. The output can then go through a classification process with programs such as MCL or MOTHUR. ### Using Sumatra #### Input If there is one dataset, the input can be either the standard input (stdin), or a file in FASTA format. If there are two datasets to compare, the input must be two files in FASTA format. #### Usage ``` sumatra [-l|L|a|n|r|d|g|x] [-t threshold_value] [-p number of threads] [dataset1] [dataset2] ``` First argument: the sequence dataset in fasta format to analyse. Second argument: optionally the second sequence dataset in fasta format. #### For help: ``` sumatra -h ``` #### Examples ``` sumatra -t 0.97 my_dataset.fasta > pairs_of_seqs_with_similarity_>_97%.txt ``` ``` sumatra -d -r -t 2 my_dataset.fasta > pairs_of_seqs_with_distance_<=_2_differences.txt ``` #### Options ``` -h : Print the help. -l : Reference sequence length is the shortest. -L : Reference sequence length is the largest. -a : Reference sequence length is the alignment length (default). -n : Score is normalized by reference sequence length (default). -r : Raw score, not normalized. -d : Score is expressed in distance (default: score is expressed in similarity). -t ##.## : Score threshold. If the score is normalized and expressed in similarity (default), it is an identity, e.g. 0.95 for an identity of 95%. If the score is normalized and expressed in distance, it is (1.0 - identity), e.g. 0.05 for an identity of 95%. If the score is not normalized and expressed in similarity, it is the length of the Longest Common Subsequence. If the score is not normalized and expressed in distance, it is (reference length - LCS length). Only sequence pairs with a similarity above ##.## are printed. Default: 0.00 (no threshold). -p ## : Number of threads used for computation (default=1). -g : n's are replaced with a's (default: sequences with n's are discarded). -x : Adds four extra columns with the count and length of both sequences. ``` #### Output Results table description: ``` column 1 : Identifier sequence 1 column 2 : Identifier sequence 2 column 3 : Score column 4 : Count of sequence 1 (only with option -x) column 5 : Count of sequence 2 (only with option -x) column 6 : Length of sequence 1 (only with option -x) column 7 : Length of sequence 2 (only with option -x) ``` Example: ``` GQ245026_1 GQ245022_1 0.730769 GQ245026_1 GQ245021_1 0.702128 GQ245026_1 GQ245019_1 0.593220 GQ245026_1 GQ245017_1 0.631579 GQ245026_1 GQ245016_1 0.590164 GQ245026_1 GQ245014_1 0.653846 GQ245026_1 GQ245009_1 0.642857 GQ245026_1 GQ245008_1 0.660714 GQ245026_1 GQ245007_1 0.547170 GQ245022_1 GQ244830_1 0.651515 GQ245022_1 GQ244829_1 0.666667 GQ245022_1 GQ244828_1 0.980000 GQ245022_1 GQ244827_1 0.722222 GQ245022_1 GQ244826_1 0.901961 ``` ### How Sumatra works Each pair of sequences presenting a similarity above or equal to the chosen threshold is printed. #### Similarity computation ##### Similarity indice A good way to evaluate the similarities between full-length sequences is to use indices based on the length of the Longest Common Subsequence (LCS), and in particular, a good similarity indice is the length of the LCS divided by the length of the shortest alignment representing this LCS, giving an identity percentage. This is the similarity indice used by Sumatra by default. Other similarity indices are available through the options. ##### Fast computation of the similarity *Lossless k-mer filter.* Since we are usually interested in higly similar sequences, Sumatra uses similarity thresholds under which similarities are not reported. A lossless filtering step enables to only align couples of sequences that potentially have an identity greater than the chosen threshold. This filter is based on the number of overlapping k-mers that the sequences must share in order to have an identity at least equal to the threshold. With typical DNA metabarcoding datasets (a few millions sequences of 50-300 bp and threshold around 90-95% id), we empirically determined that the most efficient filtering was achieved with 4-mers and 5-mers. *Alignment within a diagonal band.* Alignments are computed using a Needleman-Wunsch algorithm. In the scoring system used, matches are rewarded by one point, and mismatches and insertions/deletions are not penalised. The computation of the length of the LCS and the length of the alignment by the NWS algorithm has a quadratic complexity in time. It is responsible for most of the computation time. At high identity thresholds, the alignment computation can be done only in a diagonal band of the alignment matrix, gaining a considerable amount of time depending on the threshold. *Parallelization.* There are two levels of parallelization implemented in Sumatra. Both the filtering and the alignments steps are optimized with the use of Simple Instruction Multiple Data instructions (SIMD). Since 4-mers enable to work easily with SIMD instructions, we implemented a 4-mer filter. Moreover, the program can be run on multiple threads. sumatra_v1.0.36+ds/mtcompare_sumatra.c0000644000175000017500000001757513446710765017410 0ustar pierrepierre/* * mtcompare.c * * Created on: 17 ao�t 2010 * Authors: Eric Coissac, Celine Mercier */ #include #include #include #include #include "sumatra.h" #include "libfasta/sequence.h" #include "libutils/utilities.h" #include "liblcs/upperband.h" #include "liblcs/sse_banded_LCS_alignment.h" typedef struct { int32_t tocompute; // next line to compute int64_t computed; // count of alignment computed int32_t thread_count; // count of active thread int32_t tokill; pthread_t *threads; pthread_mutex_t m_tocompute; pthread_mutex_t m_thread_count; pthread_mutex_t m_incharge; pthread_mutex_t m_print; pthread_mutex_t m_tokill; pthread_mutex_t m_finished; int32_t lineset; int64_t pairs; fastaSeqCount *db1; fastaSeqCount *db2; BOOL normalize; BOOL lcsmode; int reference; BOOL extradata; BOOL always; double threshold; int16_t** addresses; int16_t** iseqs1; int16_t** iseqs2; int sizeForSeqs; } thread_control_t; void printLine(fastaSeqPtr seq1, fastaSeqPtr seq2, int32_t seqcount, double *score, BOOL extradata, int64_t pairs) { int j; for (j=0; j < seqcount; j++,seq2++,score++) printResults(seq1,seq2,*score,extradata,pairs,(*score >=0)); } void *computeline(void* c) { thread_control_t *control=(thread_control_t*)c; int32_t line; int32_t start; int32_t end; int32_t threadid; int32_t i,j; double *score; double *scores; fastaSeqPtr db2; fastaSeqPtr db1; fastaSeqPtr sq2; fastaSeqPtr sq1; char* s1; int l1; int LCSmin; threadid = control->thread_count++; pthread_mutex_unlock(&(control->m_thread_count)); db1 = control->db1->fastaSeqs; if (control->db2) { end = control->db2->count; db2 = control->db2->fastaSeqs; } else { end = control->db1->count; db2 = control->db1->fastaSeqs; } scores = (double*)malloc(end * sizeof(double)); while (control->tocompute < control->db1->count) { pthread_mutex_lock(&(control->m_tocompute)); line = control->tocompute; pthread_mutex_unlock(&(control->m_incharge)); if (line < control->db1->count) { for (i=0,sq1=db1+line; i < control->lineset && (i+line) < control->db1->count; i++,sq1++) { s1 = sq1->sequence; l1 = sq1->length; start = (control->db2) ? 0:line+i+1; for (score=scores,j=start; j < end ; j++,score++) { sq2=db2+j; filtersSumatra(sq1, sq2, control->threshold, control->normalize, control->reference, control->lcsmode, score, &LCSmin); if (control->always || (*score == -1.0)) { *score = alignForSumathings(s1, *((control->iseqs1)+threadid), sq2->sequence, *((control->iseqs2)+threadid), l1, sq2->length, control->normalize, control->reference, control->lcsmode, *((control->addresses)+threadid), control->sizeForSeqs, LCSmin); if (!control->always && (((*score < control->threshold) && (control->lcsmode || control->normalize)) || ((!control->lcsmode && !control->normalize) && (*score > control->threshold)))) *score = -1.0; else if (!control->lcsmode && control->normalize) *score = 1.0 - *score; } else if (*score == -2.0) *score = -1.0; } pthread_mutex_lock(&(control->m_print)); printLine(sq1,db2+start,end-start,scores,control->extradata,control->pairs); pthread_mutex_unlock(&(control->m_print)); } } } pthread_mutex_unlock(&(control->m_incharge)); free(scores); pthread_mutex_lock(&(control->m_finished)); control->tokill=threadid; pthread_mutex_unlock(&(control->m_tokill)); return (void*)threadid; } int mt_compare_sumatra(fastaSeqCount *db1, fastaSeqCount *db2, double threshold, BOOL normalize, int reference, BOOL lcsmode, BOOL extradata, int n) { int64_t pairs; thread_control_t control; int32_t i; int lmax, lmax1; int lmin, lmin1; if (db2==NULL) { fprintf(stderr,"Pairwise alignment of one database against itself\n"); pairs = (int64_t)(db1->count - 1) * (int64_t)db1->count /2; } else { fprintf(stderr,"Pairwise alignment of two databases\n"); pairs = (int64_t)db1->count * (int64_t)db2->count; } fprintf(stderr,"Count of alignment to do : %lld\n",pairs); control.addresses = (int16_t**) malloc(n*sizeof(int16_t*)); control.iseqs1 = (int16_t**) malloc(n*sizeof(int16_t*)); control.iseqs2 = (int16_t**) malloc(n*sizeof(int16_t*)); calculateMaxAndMinLenDB(*db1, &lmax, &lmin); if (!(db2==NULL)) { calculateMaxAndMinLenDB(*db2, &lmax1, &lmin1); if (lmax1 > lmax) lmax = lmax1; if (lmin1 < lmin) lmin = lmin1; } for (i=0; i < n; i++) control.sizeForSeqs = prepareTablesForSumathings(lmax, lmin, threshold, normalize, reference, lcsmode, (control.addresses)+i, (control.iseqs1)+i, (control.iseqs2)+i); control.db1 = db1; control.db2 = db2; control.tocompute = 0; control.normalize = normalize; control.reference = reference; control.extradata = extradata; control.threshold = threshold; control.lcsmode = lcsmode; control.computed = 0; control.thread_count = 0; control.pairs = pairs; if (n > control.db1->count/2) n = control.db1->count/2; control.lineset = control.db1->count / n / 2; if (threshold > 0) { fprintf(stderr,"Compute exact LCS only for score > %lf\n", threshold); control.always = FALSE; } else control.always=TRUE; if (pthread_mutex_init(&(control.m_thread_count),NULL)) { fprintf(stderr,"m_thread_count mutex init error\n"); exit(1); } if (pthread_mutex_init(&(control.m_tocompute),NULL)) { fprintf(stderr,"m_tocompute mutex init error\n"); exit(1); } if (pthread_mutex_init(&(control.m_incharge),NULL)) { fprintf(stderr,"m_incharge mutex init error\n"); exit(1); } if (pthread_mutex_init(&(control.m_print),NULL)) { fprintf(stderr,"m_print mutex init error\n"); exit(1); } if (pthread_mutex_init(&(control.m_tokill),NULL)) { fprintf(stderr,"m_tokill mutex init error\n"); exit(1); } if (pthread_mutex_init(&(control.m_finished),NULL)) { fprintf(stderr,"m_finished mutex init error\n"); exit(1); } control.threads = (pthread_t*)malloc(n * sizeof(pthread_t)); if (!control.threads) { fprintf(stderr,"Cannot allocate memory for threads\n"); exit(2); } pthread_mutex_lock(&(control.m_thread_count)); pthread_mutex_lock(&(control.m_tocompute)); pthread_mutex_lock(&(control.m_incharge)); pthread_mutex_unlock(&(control.m_print)); pthread_mutex_lock(&(control.m_tokill)); pthread_mutex_unlock(&(control.m_finished)); fprintf(stderr,"\n"); for (i=0; i < n; i++) { fprintf(stderr,"Initializing thread..."); if (pthread_create(control.threads+i,NULL,computeline,&control)) { fprintf(stderr," : thread %d Error\n",i); exit(3); } pthread_mutex_lock(&(control.m_thread_count)); fprintf(stderr," : thread %d Ok\n",control.thread_count); } pthread_mutex_unlock(&(control.m_thread_count)); for (control.tocompute=0; control.tocompute < db1->count+1; control.tocompute+=control.lineset) { pthread_mutex_unlock(&(control.m_tocompute)); pthread_mutex_lock(&(control.m_incharge)); } pthread_mutex_unlock(&(control.m_tocompute)); fprintf(stderr,"\n"); for (i=0; i < n; i++) { pthread_mutex_lock(&(control.m_tokill)); fprintf(stderr,"Joining thread %d...",control.tokill); pthread_mutex_unlock(&(control.m_tocompute)); pthread_join(control.threads[control.tokill],NULL); fprintf(stderr," : Ok\n"); pthread_mutex_unlock(&(control.m_finished)); } // Freeing for (i=0; i < n; i++) { free((*((control.iseqs1)+i))-(control.sizeForSeqs)+lmax); free((*((control.iseqs2)+i))-(control.sizeForSeqs)+lmax); } free(control.iseqs1); free(control.iseqs2); if ((reference == ALILEN) && ((lcsmode && normalize) || (!lcsmode))) { for (i=0; i < n; i++) free(*((control.addresses)+i)); free(control.addresses); } return 0; } sumatra_v1.0.36+ds/README.md0000644000175000017500000000011113170202311014723 0ustar pierrepierre[See the wiki](https://git.metabarcoding.org/obitools/sumatra/wikis/home)sumatra_v1.0.36+ds/._sumatra_user_manual.pdf0000644000175000017500000000041213447150557020454 0ustar pierrepierreMac OS X  2 ATTR :com.apple.lastuseddate#PS*$com.apple.metadata:_kMDItemUserTags{ќ\δ~bplist00