From nicholas.stoler@gmail.com Wed Sep 06 12:39:18 2017 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dpXjq-003Gts-I5>; Wed, 06 Sep 2017 12:39:18 +0200 Received: from mail-vk0-f47.google.com ([209.85.213.47]) by relay1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:AES128-GCM-SHA256:128) (envelope-from ) id <1dpXjq-003m8q-A9>; Wed, 06 Sep 2017 12:39:18 +0200 Received: by mail-vk0-f47.google.com with SMTP id c82so3996532vkd.4 for ; Wed, 06 Sep 2017 03:39:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:from:date:message-id:subject:to; bh=h1HB1+X/NMvB9Xwld2oA9Kk9gCKgOIXai8ONEZKP0Bc=; b=HRQiudxoff2/rYYFFaS8UguVXa2y30yx/iISQ8yZehcwXWHItW2E5b9gEpLSkFgfBW MbHO5+GoWhlpajyhG5C8SQ4QzDw7ouW5jZATSDGqdZgSJgAumAl0tLnrfgCJX37oPXbH Rw+M0UwW8KjC7w/WwtiWrywi1e62Wn7lbwMYeZs2EYznrtrsJ37nYeHra01SM9SxK9Fb /lgNBL6QFWvjNezX1JY6CMyPD7vqyXIXC5PWNw0Al8cetlAj6kysyRT1UR/jFFbiJrXj oWuhsyWi6475ZtQE6xZrYT2iQVFyqq/Fy+5Bv7xsibP5behvikqFYuHjxmOGh6GEcU5l TVtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:from:date:message-id:subject :to; bh=h1HB1+X/NMvB9Xwld2oA9Kk9gCKgOIXai8ONEZKP0Bc=; b=dtDuMR9mHILQ6S4lchHwrcgmYtvDU/xlofNdaCKnWwfrPdL8685DJarsl5elxmLMO8 UKANeXJZOHtsV/z0jQXPDbGLeIjQLu542nY9/WDQMU2ogbfaVDYgHEdGrFIbeMXv7STU 6QbehS+0GoUbSHT+HVAPjFh9X5KVGV8srIye3py3kURF4iz9DeXdEovVqmzTs/NQXNYr pJ0iVesdcxSvjb6iNTahdzQYolP/uG1mMGnLSFaG9FsB+K1VjZgcvpTEiUYWfdnq62mP QhqTsTGBjy+/Oxg8YaCyUkHbutVS//06Kz5ysHPY4bWFBnI/VB2zWWHGl+ZJIX92K7+p 5hjg== X-Gm-Message-State: AHPjjUhX2UMkpp/RFy24005tM4GlpWwN4LDJliA7vq9eXh4louxQUGn8 uzs6QmE8SwaqVG45eiyWjIhtgyJTwpsyF3c= X-Google-Smtp-Source: ADKCNb5oSq1cBEXmSP61nCcHgoQnwZrrkwvZgqG8WfFONt91lYkXvo66gAxre8H2TPDVAtdaOVI9y5sNRJZ9JHnRQS0= X-Received: by 10.31.171.139 with SMTP id u133mr1301737vke.141.1504694355483; Wed, 06 Sep 2017 03:39:15 -0700 (PDT) MIME-Version: 1.0 Sender: nicholas.stoler@gmail.com Received: by 10.103.24.67 with HTTP; Wed, 6 Sep 2017 03:38:54 -0700 (PDT) From: Nick Mapsy Date: Wed, 6 Sep 2017 03:38:54 -0700 X-Google-Sender-Auth: d1mhGSRgTXYbQpdUm5Nv0mK0rJY Message-ID: To: seqan-dev@lists.fu-berlin.de Content-Type: multipart/alternative; boundary="001a11438e888ddf49055882f456" X-Originating-IP: 209.85.213.47 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1504694358-000004E8-B1ED7E0D/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000058, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-2.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SORBS_SPAM,SPF_PASS X-Spam-Checker-Version: SpamAssassin 3.4.1 on Palau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: [Seqan-dev] Getting a sequence as a char * X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Sep 2017 10:39:19 -0000 --001a11438e888ddf49055882f456 Content-Type: text/plain; charset="UTF-8" Hi, I'm just getting started with SeqAn (and C++), so I'm sure I'm missing something simple here. I've got a multiple sequence alignment working and producing an Align > object. Now all I need is to return the aligned sequences (with gaps) as C strings (char *) from the function. It seems like a simple thing, but after hours reading through the documentation of all the types and functions (and yes, Language Entity Types), I can't find the path from Align to char *. I found toCString(), but it takes a String, and I don't know how to get (gapped) Strings out of an Align. Thank you for any help, and hopefully I'm able to make use of this great library! Nick P.S. Here's what I've written so far: (I'm using SeqAn 1.4.1 on Ubuntu 16.04.) #include #include #include char **align(int nseq, char *seqs[]) { Align > align; resize(rows(align), nseq); for (int i = 0; i < nseq; i++) { assignSource(row(align, i), seqs[i]); } Score score(0, -1, -1, -2); globalMsaAlignment(align, score); for (int i = 0; i < nseq; i++) { seq[i] = toCString(row(align, i)); } return seqs; } --001a11438e888ddf49055882f456 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi, I'm just getting started = with SeqAn (and C++), so I'm sure I'm missing something simple here= .

I've got a multiple sequence alignment working and producing an=20 Align<String<Dna5> > object. Now all I need is to return the aligned sequences (with gaps) as C strings (char *) from the function.
=
It seems like a simple thing, but after hours reading through the=20 documentation of all the types and functions (and yes, Language Entity=20 Types), I can't find the path from Align to char *.

I foun= d toCString(), but it takes a String, and I don't know how to get (gapp= ed) Strings out of an Align.

Thank you for any= help, and hopefully I'm able to make use of this great library!
<= div>Nick

P.S. Here's what I've written so f= ar:
(I'm using SeqAn 1.4.1 on Ubuntu 16.04.)
#include <seqan/align.= h>
#include <seqan/sequence.h>
#include <seqan/graph_msa.= h>

char = **align(int nseq, char *seqs[]) {

=C2=A0=C2=A0=C2=A0 Align<String= <Dna5> > align;
=C2=A0=C2=A0=C2=A0 resize(rows(align), nseq);<= br>=C2=A0=C2=A0=C2=A0 for (int i =3D 0; i < nseq; i++) {
=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 assignSource(row(align, i), seqs[i]);
=C2= =A0=C2=A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 Score<int> score(0, -1, -= 1, -2);
=C2=A0=C2=A0=C2=A0 globalMsaAlignment(align, score);

=C2= =A0=C2=A0=C2=A0 for (int i =3D 0; i < nseq; i++) {
=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 seq[i] =3D toCString(row(align, i));
=C2=A0=C2= =A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 return seqs;
}
--001a11438e888ddf49055882f456-- From hannes.hauswedell@fu-berlin.de Fri Sep 08 17:18:06 2017 Received: from outpost1.zedat.fu-berlin.de ([130.133.4.66]) by list1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dqL2j-000Urh-9z>; Fri, 08 Sep 2017 17:18:05 +0200 Received: from inpost2.zedat.fu-berlin.de ([130.133.4.69]) by outpost.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dqL2j-003jtP-6Q>; Fri, 08 Sep 2017 17:18:05 +0200 Received: from celegans.imp.fu-berlin.de ([160.45.111.134]) by inpost2.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (envelope-from ) id <1dqL2j-003hRX-05>; Fri, 08 Sep 2017 17:18:05 +0200 From: Hannes Hauswedell To: seqan-dev@lists.fu-berlin.de Date: Fri, 08 Sep 2017 17:18:03 +0200 Message-ID: <3841593.RgPZFG1D0T@celegans.imp.fu-berlin.de> Organization: MPI MolGen / FU-Berlin In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Originating-IP: 160.45.111.134 X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1504883885-000004E8-4C96A1FD/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED, RP_MATCHES_RCVD, T_FILL_THIS_FORM_SHORT,URIBL_BLOCKED X-Spam-Checker-Version: SpamAssassin 3.4.1 on Tokelau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Getting a sequence as a char * X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Sep 2017 15:18:06 -0000 Hi Nick, Am Mittwoch, 6. September 2017, 03:38:54 schrieb Nick Mapsy: > Hi, I'm just getting started with SeqAn (and C++), so I'm sure I'm mi= ssing > something simple here. >=20 > I've got a multiple sequence alignment working and producing an > Align > object. Now all I need is to return the aligned > sequences (with gaps) as C strings (char *) from the function. Are you sure you want to be passing around these char** ? This is C++ a= fter=20 all and we have references :D > It seems like a simple thing, but after hours reading through the > documentation of all the types and functions (and yes, Language Entit= y > Types), I can't find the path from Align to char *. >=20 > I found toCString(), but it takes a String, and I don't know how to g= et > (gapped) Strings out of an Align. >=20 > Thank you for any help, and hopefully I'm able to make use of this gr= eat > library! You can create a CharString from the alignment row and then call toCStr= ing()=20 on the CharString. But, like I said, I would really recommend working w= ith=20 Strings and StringSets instead of pointers and []. > P.S. Here's what I've written so far: > (I'm using SeqAn 1.4.1 on Ubuntu 16.04.) Please update to SeqAn2 as SeqAn1 has been deprecated for a while now. = The=20 ubuntu package is called libseqan2-dev. It is available since Ubuntu 17= .04,=20 but can also be installed manually: http://seqan.readthedocs.io/en/master/Infrastructure/Use/Install.html#l= ibrary-package Best regards, Hannes --=20 Hannes Hauswedell Scientific staff & PhD candidate Freie Universit=C3=A4t Berlin / Max Planck Institute for Molecular Gene= tics address Institut f=C3=BCr Informatik Takustra=C3=9Fe 9 Room 019 14195 Berlin telephone +49 (0)30 838-75241 fax +49 (0)30 838-75218 e-mail hannes.hauswedell@[molgen.mpg.de|fu-berlin.de] From nicholas.stoler@gmail.com Sat Sep 09 00:56:13 2017 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dqSC5-001gY0-39>; Sat, 09 Sep 2017 00:56:13 +0200 Received: from mail-io0-f171.google.com ([209.85.223.171]) by relay1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:AES128-GCM-SHA256:128) (envelope-from ) id <1dqSC4-001u8n-NQ>; Sat, 09 Sep 2017 00:56:12 +0200 Received: by mail-io0-f171.google.com with SMTP id n69so7402887ioi.5 for ; Fri, 08 Sep 2017 15:56:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to; bh=MXB0FV7O8rvEdL1hK36wp0G46XfW1hcWt/8lyd2f+J8=; b=Ix2ky6HcWDgYPQkiXt3hH3nHdZt+kq+pcIU2Q7NmLEqeK8s8deEgLzMa98DX66DyG7 fY/MBAY9K6f0qpx9KTnggG5uKMGCxzx5w9kuPZ6wHD5ofDZllprK50B9h83u6rR+y/yz waKdcE+a4JY6omrVDgV8PI5Trbs9JtQYXcRo7NO5bIzPAM+iCSK38Al57Rm/CARgmbBC 1nmE4LhYsagGww3VZpKyMBhkzs6Uq3y4ztsgrPn0+RiwcQhMhMvhHRENNZMcpah1y/nT c4BlzA58qcN8GAJ00AKm0UzreHPXUx9mcq2S4UpYU2ilnfqLLL1ptOPMctgKeJ2oL51A hG/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to; bh=MXB0FV7O8rvEdL1hK36wp0G46XfW1hcWt/8lyd2f+J8=; b=Jultzm/SKlYQnPPIs0L/8PGALuHZXi1x5G2gkmTv4WnuGBa4gVOV2+ktPRniwMoKhi 8YLLoezcVzgw0N+s0/iXI6YuZEEA4xwfUW3tGOqOeRCCmOhuad6v3GA3NGkpKg8tXSt4 jOrvOQVlywDENrcpGa8VPH2m817mFVHjjUqq4K3lUhvK7/phTs0x/W7AMUK1NuxLQVfg p4JTx4vAWkltn2bPUQdNkg659see013FLcDW5tUd5NOc1pr0/vDkQGOfdn/dwXNQZ1zM LRVX6IbqPTWhKokr1DJtix4x5lOpUpXH8Ypv+flQwIhBYWiI4mCttdJubQH9Z5FqwTwa fpVw== X-Gm-Message-State: AHPjjUg4SyJQQAWz5FXvsaDSczhzoTxsaJVs4iWIJXZncYDw0ywdokyy zCxx9+g48Fh5OGjyJ1bRAEhsh/s6g88ecfw= X-Google-Smtp-Source: AOwi7QBKYzua9PvYJ2s5ibigwZaxws7oNpX5GkiJzksFIWN2HzrEZiLlK2BBOmwzzY/KlkK65sSHKM3eX2j36aLToI4= X-Received: by 10.107.48.2 with SMTP id w2mr5407809iow.301.1504911369384; Fri, 08 Sep 2017 15:56:09 -0700 (PDT) MIME-Version: 1.0 Sender: nicholas.stoler@gmail.com Received: by 10.2.25.70 with HTTP; Fri, 8 Sep 2017 15:55:48 -0700 (PDT) In-Reply-To: <3841593.RgPZFG1D0T@celegans.imp.fu-berlin.de> References: <3841593.RgPZFG1D0T@celegans.imp.fu-berlin.de> From: Nick Mapsy Date: Fri, 8 Sep 2017 15:55:48 -0700 X-Google-Sender-Auth: XSqZP9myqFz4X2aw5pSW2MsS-zA Message-ID: To: SeqAn Development Content-Type: multipart/alternative; boundary="001a11444008975f630558b57b62" X-Originating-IP: 209.85.223.171 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1504911373-000004E8-27BB11DC/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-2.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SORBS_SPAM,SPF_PASS,URIBL_BLOCKED X-Spam-Checker-Version: SpamAssassin 3.4.1 on Palau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Getting a sequence as a char * X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Sep 2017 22:56:13 -0000 --001a11444008975f630558b57b62 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Hannes, Thank you so much for your reply! I'm really lost here so I appreciate it a lot. Unfortunately I do need a char **, since I'm passing the data back to C code (actually, to Python ctypes). Thank you for the tip on going from the row to a CharString. Is there a function which can take my TRow and return a CharString? I couldn't find anything in the documentation. Instead, I found out that my TRow can act as a Gaps, which allowed me to use all the Gaps functions. That allowed me to reconstruct the alignment using isGap() and the unaligned sequences. Thank you, Nick P.S. My solution, in case anyone else runs into the same trouble: (I'm using SeqAn 2.2.0 now) #include #include #include #include #include #include using namespace seqan; char **align(int nseq, char *seqs[]) { Align> align; resize(rows(align), nseq); for (int i =3D 0; i < nseq; i++) { assignSource(row(align, i), seqs[i]); } globalMsaAlignment(align, EditDistanceScore()); // Convert the Align rows to char *'s and store back in seqs. typedef typename Row>>::Type TRow; for (int i =3D 0; i < nseq; i++) { // Each row is type TRow, but also functions as a Gaps. This is why isGap accepts it. TRow arow =3D row(align, i); int len =3D (int)length(arow); char *new_seq =3D (char *)malloc(sizeof(char) * len+1); int offset =3D 0; for (int j =3D 0; j < len; j++) { if (isGap(arow, j)) { new_seq[j] =3D '-'; offset--; } else { new_seq[j] =3D seqs[i][j+offset]; } } new_seq[len] =3D '\0'; seqs[i] =3D new_seq; } return seqs; } int main(int argc, char *argv[]) { for (int i =3D 1; i < argc; i++) { argv[i-1] =3D argv[i]; } char **aligned_seqs =3D align(argc-1, argv); for (int i =3D 0; i < argc-1; i++) { std::cout << aligned_seqs[i] << std::endl; } return 0; } On Fri, Sep 8, 2017 at 8:18 AM, Hannes Hauswedell < hannes.hauswedell@fu-berlin.de> wrote: > Hi Nick, > > Am Mittwoch, 6. September 2017, 03:38:54 schrieb Nick Mapsy: > > Hi, I'm just getting started with SeqAn (and C++), so I'm sure I'm > missing > > something simple here. > > > > I've got a multiple sequence alignment working and producing an > > Align > object. Now all I need is to return the aligned > > sequences (with gaps) as C strings (char *) from the function. > > Are you sure you want to be passing around these char** ? This is C++ aft= er > all and we have references :D > > > It seems like a simple thing, but after hours reading through the > > documentation of all the types and functions (and yes, Language Entity > > Types), I can't find the path from Align to char *. > > > > I found toCString(), but it takes a String, and I don't know how to get > > (gapped) Strings out of an Align. > > > > Thank you for any help, and hopefully I'm able to make use of this grea= t > > library! > > You can create a CharString from the alignment row and then call > toCString() > on the CharString. But, like I said, I would really recommend working wit= h > Strings and StringSets instead of pointers and []. > > > P.S. Here's what I've written so far: > > (I'm using SeqAn 1.4.1 on Ubuntu 16.04.) > > Please update to SeqAn2 as SeqAn1 has been deprecated for a while now. Th= e > ubuntu package is called libseqan2-dev. It is available since Ubuntu 17.0= 4, > but can also be installed manually: > http://seqan.readthedocs.io/en/master/Infrastructure/Use/ > Install.html#library-package > > Best regards, > Hannes > -- > Hannes Hauswedell > > Scientific staff & PhD candidate > Freie Universit=C3=A4t Berlin / Max Planck Institute for Molecular Geneti= cs > > address Institut f=C3=BCr Informatik > Takustra=C3=9Fe 9 > Room 019 > 14195 Berlin > telephone +49 (0)30 838-75241 > fax +49 (0)30 838-75218 > e-mail hannes.hauswedell@[molgen.mpg.de|fu-berlin.de] > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > --001a11444008975f630558b57b62 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hannes,

Thank you = so much for your reply! I'm really lost here so I appreciate it a lot.<= br>
Unfortunately I do need a char **, since I'm passing the d= ata back to C code (actually, to Python ctypes).

Thank you for= the tip on going from the row to a CharString. Is there a function which c= an take my TRow and return a CharString? I couldn't find anything in th= e documentation. Instead, I found out that my TRow can act as a Gaps, which= allowed me to use all the Gaps functions. That allowed me to reconstruct t= he alignment using isGap() and the unaligned sequences.

T= hank you,
Nick

P.S. My solution, in case anyone= else runs into the same trouble:
(I'm using SeqAn 2.2.0 now)<= br>
#include <iostrea= m>
#include <stdlib.h>
#include <seqan/align.h>
#in= clude <seqan/score.h>
#include <seqan/sequence.h>
#includ= e <seqan/graph_msa.h>

using namespace seqan;

char **ali= gn(int nseq, char *seqs[]) {

=C2=A0=C2=A0=C2=A0 Align<String<D= na5>> align;
=C2=A0=C2=A0=C2=A0 resize(rows(align), nseq);
=C2= =A0=C2=A0=C2=A0 for (int i =3D 0; i < nseq; i++) {
=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 assignSource(row(align, i), seqs[i]);
=C2=A0=C2= =A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 globalMsaAlignment(align, EditDistanc= eScore());

=C2=A0=C2=A0=C2=A0 // Convert the Align rows to char *= 9;s and store back in seqs.
=C2=A0=C2=A0=C2=A0 typedef typename Row<A= lign<String<Dna5>>>::Type TRow;
=C2=A0=C2=A0=C2=A0 for (i= nt i =3D 0; i < nseq; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 // Each row is type TRow, but also functions as a Gaps. This is why isG= ap accepts it.
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 TRow arow =3D = row(align, i);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int len =3D (i= nt)length(arow);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 char *new_se= q =3D (char *)malloc(sizeof(char) * len+1);
=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 int offset =3D 0;
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 for (int j =3D 0; j < len; j++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (isGap(arow, j)) {
=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 new_seq[j] =3D '-';
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 offset--;
=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else {
= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 new_seq[j] =3D seqs[i][j+offset];
=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 new_seq[= len] =3D '\0';
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 seqs[i= ] =3D new_seq;
=C2=A0=C2=A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 return seq= s;
}

int main(int argc, char *argv[]) {
=C2=A0=C2=A0=C2=A0 for= (int i =3D 1; i < argc; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 argv[i-1] =3D argv[i];
=C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0= char **aligned_seqs =3D align(argc-1, argv);
=C2=A0=C2=A0=C2=A0 for (in= t i =3D 0; i < argc-1; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 std::cout << aligned_seqs[i] << std::endl;
=C2=A0=C2=A0= =C2=A0 }
=C2=A0=C2=A0=C2=A0 return 0;
}



On Fri, Sep 8= , 2017 at 8:18 AM, Hannes Hauswedell <hannes.hauswedell@fu-be= rlin.de> wrote:
Hi Nick,
Am Mittwoch, 6. September 2017, 03:38:54 schrieb Nick Mapsy:
> Hi, I'm just getting started with SeqAn (and C++), so I'm sure= I'm missing
> something simple here.
>
> I've got a multiple sequence alignment working and producing an > Align<String<Dna5> > object. Now all I need is to return t= he aligned
> sequences (with gaps) as C strings (char *) from the function.

Are you sure you want to be passing around these char** ? This is C+= + after
all and we have references :D

> It seems like a simple thing, but after hours reading through the
> documentation of all the types and functions (and yes, Language Entity=
> Types), I can't find the path from Align to char *.
>
> I found toCString(), but it takes a String, and I don't know how t= o get
> (gapped) Strings out of an Align.
>
> Thank you for any help, and hopefully I'm able to make use of this= great
> library!

You can create a CharString from the alignment row and then call toC= String()
on the CharString. But, like I said, I would really recommend working with<= br> Strings and StringSets instead of pointers and [].

> P.S. Here's what I've written so far:
> (I'm using SeqAn 1.4.1 on Ubuntu 16.04.)

Please update to SeqAn2 as SeqAn1 has been deprecated for a while no= w. The
ubuntu package is called libseqan2-dev. It is available since Ubuntu 17.04,=
but can also be installed manually:
http://seqan.re= adthedocs.io/en/master/Infrastructure/Use/Install.html#library-pa= ckage

Best regards,
Hannes
--
Hannes Hauswedell

Scientific staff & PhD candidate
Freie Universit=C3=A4t Berlin / Max Planck Institute for Molecular Genetics=

address=C2=A0 =C2=A0 =C2=A0Institut f=C3=BCr Informatik
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Takustra=C3=9Fe 9
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Room 019
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 14195 Berlin
telephone=C2=A0 =C2=A0+49 (0)30 838-75241
fax=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0+49 (0)30 838-75218
e-mail=C2=A0 =C2=A0 =C2=A0 hannes.hauswedell@[molgen.mpg.de|fu-berlin.de]=

_______________________________________________
seqan-dev mailing list
seqan-dev@lists.fu-berlin.d= e
https://lists.fu-berlin.de/listinfo/seqan-dev<= br>

--001a11444008975f630558b57b62-- From Rene.Rahn@fu-berlin.de Mon Sep 18 11:16:35 2017 Received: from outpost9.zedat.fu-berlin.de ([130.133.4.95]) by list1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dtsAN-0027Bw-B9>; Mon, 18 Sep 2017 11:16:35 +0200 Received: from relay2.zedat.fu-berlin.de ([130.133.4.80]) by outpost.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dtsAN-0026Cw-7F>; Mon, 18 Sep 2017 11:16:35 +0200 Received: from cas2.campus.fu-berlin.de ([130.133.170.202]) by relay2.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1:AES256-SHA:256) (envelope-from ) id <1dtsAM-002IsK-Vo>; Mon, 18 Sep 2017 11:16:35 +0200 Received: from EX03A.campus.fu-berlin.de ([130.133.170.134]) by CAS2.campus.fu-berlin.de ([130.133.170.202]) with mapi id 14.03.0361.001; Mon, 18 Sep 2017 11:16:34 +0200 From: =?utf-8?B?UmFobiwgUmVuw6k=?= To: SeqAn Development Thread-Topic: [Seqan-dev] Getting a sequence as a char * Thread-Index: AQHTJvyELHQbNpaHvEuAB/XcCkE3RqKq+9OAgAB/5QCADtJqAA== Message-ID: <42CAA4C7-4EC9-489E-83ED-C574DF40EA61@fu-berlin.de> References: <3841593.RgPZFG1D0T@celegans.imp.fu-berlin.de> In-Reply-To: Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: multipart/alternative; boundary="_000_42CAA4C74EC9489E83EDC574DF40EA61fuberlinde_" MIME-Version: 1.0 Date: Mon, 18 Sep 2017 11:16:32 +0200 X-Original-Date: Mon, 18 Sep 2017 09:16:32 +0000 X-Originating-IP: 130.133.170.202 X-Original-X-Originating-IP: [130.133.170.208] X-ZEDAT-Hint: XA X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1505726195-000DA178-353FB052/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE, RP_MATCHES_RCVD,T_FILL_THIS_FORM_SHORT X-Spam-Checker-Version: SpamAssassin 3.4.1 on Kiribati.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Getting a sequence as a char * X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Sep 2017 09:16:36 -0000 --_000_42CAA4C74EC9489E83EDC574DF40EA61fuberlinde_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTmljaywNCg0KeW91IHNob3VsZCBiZSBhYmxlIHRvIHNpbXBseSBjb3B5IHRoZSBnYXBwZWQg c2VxdWVuY2UgaW50byBhIENoYXJTdHJpbmcuDQoNCkNoZWVycywNCg0KUmVuw6kNCk9uIDkuIFNl cCAyMDE3LCBhdCAwMDo1NSwgTmljayBNYXBzeSA8bm1hcHN5QGdtYWlsLmNvbTxtYWlsdG86bm1h cHN5QGdtYWlsLmNvbT4+IHdyb3RlOg0KDQpIaSBIYW5uZXMsDQoNClRoYW5rIHlvdSBzbyBtdWNo IGZvciB5b3VyIHJlcGx5ISBJJ20gcmVhbGx5IGxvc3QgaGVyZSBzbyBJIGFwcHJlY2lhdGUgaXQg YSBsb3QuDQoNClVuZm9ydHVuYXRlbHkgSSBkbyBuZWVkIGEgY2hhciAqKiwgc2luY2UgSSdtIHBh c3NpbmcgdGhlIGRhdGEgYmFjayB0byBDIGNvZGUgKGFjdHVhbGx5LCB0byBQeXRob24gY3R5cGVz KS4NCg0KVGhhbmsgeW91IGZvciB0aGUgdGlwIG9uIGdvaW5nIGZyb20gdGhlIHJvdyB0byBhIENo YXJTdHJpbmcuIElzIHRoZXJlIGEgZnVuY3Rpb24gd2hpY2ggY2FuIHRha2UgbXkgVFJvdyBhbmQg cmV0dXJuIGEgQ2hhclN0cmluZz8gSSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nIGluIHRoZSBkb2N1 bWVudGF0aW9uLiBJbnN0ZWFkLCBJIGZvdW5kIG91dCB0aGF0IG15IFRSb3cgY2FuIGFjdCBhcyBh IEdhcHMsIHdoaWNoIGFsbG93ZWQgbWUgdG8gdXNlIGFsbCB0aGUgR2FwcyBmdW5jdGlvbnMuIFRo YXQgYWxsb3dlZCBtZSB0byByZWNvbnN0cnVjdCB0aGUgYWxpZ25tZW50IHVzaW5nIGlzR2FwKCkg YW5kIHRoZSB1bmFsaWduZWQgc2VxdWVuY2VzLg0KDQpUaGFuayB5b3UsDQpOaWNrDQoNClAuUy4g TXkgc29sdXRpb24sIGluIGNhc2UgYW55b25lIGVsc2UgcnVucyBpbnRvIHRoZSBzYW1lIHRyb3Vi bGU6DQooSSdtIHVzaW5nIFNlcUFuIDIuMi4wIG5vdykNCg0KI2luY2x1ZGUgPGlvc3RyZWFtPg0K I2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHNlcWFuL2FsaWduLmg+DQojaW5jbHVkZSA8 c2VxYW4vc2NvcmUuaD4NCiNpbmNsdWRlIDxzZXFhbi9zZXF1ZW5jZS5oPg0KI2luY2x1ZGUgPHNl cWFuL2dyYXBoX21zYS5oPg0KDQp1c2luZyBuYW1lc3BhY2Ugc2VxYW47DQoNCmNoYXIgKiphbGln bihpbnQgbnNlcSwgY2hhciAqc2Vxc1tdKSB7DQoNCiAgICBBbGlnbjxTdHJpbmc8RG5hNT4+IGFs aWduOw0KICAgIHJlc2l6ZShyb3dzKGFsaWduKSwgbnNlcSk7DQogICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBuc2VxOyBpKyspIHsNCiAgICAgICAgYXNzaWduU291cmNlKHJvdyhhbGlnbiwgaSksIHNl cXNbaV0pOw0KICAgIH0NCg0KICAgIGdsb2JhbE1zYUFsaWdubWVudChhbGlnbiwgRWRpdERpc3Rh bmNlU2NvcmUoKSk7DQoNCiAgICAvLyBDb252ZXJ0IHRoZSBBbGlnbiByb3dzIHRvIGNoYXIgKidz IGFuZCBzdG9yZSBiYWNrIGluIHNlcXMuDQogICAgdHlwZWRlZiB0eXBlbmFtZSBSb3c8QWxpZ248 U3RyaW5nPERuYTU+Pj46OlR5cGUgVFJvdzsNCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5zZXE7 IGkrKykgew0KICAgICAgICAvLyBFYWNoIHJvdyBpcyB0eXBlIFRSb3csIGJ1dCBhbHNvIGZ1bmN0 aW9ucyBhcyBhIEdhcHMuIFRoaXMgaXMgd2h5IGlzR2FwIGFjY2VwdHMgaXQuDQogICAgICAgIFRS b3cgYXJvdyA9IHJvdyhhbGlnbiwgaSk7DQogICAgICAgIGludCBsZW4gPSAoaW50KWxlbmd0aChh cm93KTsNCiAgICAgICAgY2hhciAqbmV3X3NlcSA9IChjaGFyICopbWFsbG9jKHNpemVvZihjaGFy KSAqIGxlbisxKTsNCiAgICAgICAgaW50IG9mZnNldCA9IDA7DQogICAgICAgIGZvciAoaW50IGog PSAwOyBqIDwgbGVuOyBqKyspIHsNCiAgICAgICAgICAgIGlmIChpc0dhcChhcm93LCBqKSkgew0K ICAgICAgICAgICAgICAgIG5ld19zZXFbal0gPSAnLSc7DQogICAgICAgICAgICAgICAgb2Zmc2V0 LS07DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIG5ld19zZXFbal0gPSBz ZXFzW2ldW2orb2Zmc2V0XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBuZXdf c2VxW2xlbl0gPSAnXDAnOw0KICAgICAgICBzZXFzW2ldID0gbmV3X3NlcTsNCiAgICB9DQoNCiAg ICByZXR1cm4gc2VxczsNCn0NCg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgew0K ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7DQogICAgICAgIGFyZ3ZbaS0xXSA9 IGFyZ3ZbaV07DQogICAgfQ0KICAgIGNoYXIgKiphbGlnbmVkX3NlcXMgPSBhbGlnbihhcmdjLTEs IGFyZ3YpOw0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYy0xOyBpKyspIHsNCiAgICAgICAg c3RkOjpjb3V0IDw8IGFsaWduZWRfc2Vxc1tpXSA8PCBzdGQ6OmVuZGw7DQogICAgfQ0KICAgIHJl dHVybiAwOw0KfQ0KDQoNCk9uIEZyaSwgU2VwIDgsIDIwMTcgYXQgODoxOCBBTSwgSGFubmVzIEhh dXN3ZWRlbGwgPGhhbm5lcy5oYXVzd2VkZWxsQGZ1LWJlcmxpbi5kZTxtYWlsdG86aGFubmVzLmhh dXN3ZWRlbGxAZnUtYmVybGluLmRlPj4gd3JvdGU6DQpIaSBOaWNrLA0KDQpBbSBNaXR0d29jaCwg Ni4gU2VwdGVtYmVyIDIwMTcsIDAzOjM4OjU0IHNjaHJpZWIgTmljayBNYXBzeToNCj4gSGksIEkn bSBqdXN0IGdldHRpbmcgc3RhcnRlZCB3aXRoIFNlcUFuIChhbmQgQysrKSwgc28gSSdtIHN1cmUg SSdtIG1pc3NpbmcNCj4gc29tZXRoaW5nIHNpbXBsZSBoZXJlLg0KPg0KPiBJJ3ZlIGdvdCBhIG11 bHRpcGxlIHNlcXVlbmNlIGFsaWdubWVudCB3b3JraW5nIGFuZCBwcm9kdWNpbmcgYW4NCj4gQWxp Z248U3RyaW5nPERuYTU+ID4gb2JqZWN0LiBOb3cgYWxsIEkgbmVlZCBpcyB0byByZXR1cm4gdGhl IGFsaWduZWQNCj4gc2VxdWVuY2VzICh3aXRoIGdhcHMpIGFzIEMgc3RyaW5ncyAoY2hhciAqKSBm cm9tIHRoZSBmdW5jdGlvbi4NCg0KQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGJlIHBhc3Npbmcg YXJvdW5kIHRoZXNlIGNoYXIqKiA/IFRoaXMgaXMgQysrIGFmdGVyDQphbGwgYW5kIHdlIGhhdmUg cmVmZXJlbmNlcyA6RA0KDQo+IEl0IHNlZW1zIGxpa2UgYSBzaW1wbGUgdGhpbmcsIGJ1dCBhZnRl ciBob3VycyByZWFkaW5nIHRocm91Z2ggdGhlDQo+IGRvY3VtZW50YXRpb24gb2YgYWxsIHRoZSB0 eXBlcyBhbmQgZnVuY3Rpb25zIChhbmQgeWVzLCBMYW5ndWFnZSBFbnRpdHkNCj4gVHlwZXMpLCBJ IGNhbid0IGZpbmQgdGhlIHBhdGggZnJvbSBBbGlnbiB0byBjaGFyICouDQo+DQo+IEkgZm91bmQg dG9DU3RyaW5nKCksIGJ1dCBpdCB0YWtlcyBhIFN0cmluZywgYW5kIEkgZG9uJ3Qga25vdyBob3cg dG8gZ2V0DQo+IChnYXBwZWQpIFN0cmluZ3Mgb3V0IG9mIGFuIEFsaWduLg0KPg0KPiBUaGFuayB5 b3UgZm9yIGFueSBoZWxwLCBhbmQgaG9wZWZ1bGx5IEknbSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRo aXMgZ3JlYXQNCj4gbGlicmFyeSENCg0KWW91IGNhbiBjcmVhdGUgYSBDaGFyU3RyaW5nIGZyb20g dGhlIGFsaWdubWVudCByb3cgYW5kIHRoZW4gY2FsbCB0b0NTdHJpbmcoKQ0Kb24gdGhlIENoYXJT dHJpbmcuIEJ1dCwgbGlrZSBJIHNhaWQsIEkgd291bGQgcmVhbGx5IHJlY29tbWVuZCB3b3JraW5n IHdpdGgNClN0cmluZ3MgYW5kIFN0cmluZ1NldHMgaW5zdGVhZCBvZiBwb2ludGVycyBhbmQgW10u DQoNCj4gUC5TLiBIZXJlJ3Mgd2hhdCBJJ3ZlIHdyaXR0ZW4gc28gZmFyOg0KPiAoSSdtIHVzaW5n IFNlcUFuIDEuNC4xIG9uIFVidW50dSAxNi4wNC4pDQoNClBsZWFzZSB1cGRhdGUgdG8gU2VxQW4y IGFzIFNlcUFuMSBoYXMgYmVlbiBkZXByZWNhdGVkIGZvciBhIHdoaWxlIG5vdy4gVGhlDQp1YnVu dHUgcGFja2FnZSBpcyBjYWxsZWQgbGlic2VxYW4yLWRldi4gSXQgaXMgYXZhaWxhYmxlIHNpbmNl IFVidW50dSAxNy4wNCwNCmJ1dCBjYW4gYWxzbyBiZSBpbnN0YWxsZWQgbWFudWFsbHk6DQpodHRw Oi8vc2VxYW4ucmVhZHRoZWRvY3MuaW8vZW4vbWFzdGVyL0luZnJhc3RydWN0dXJlL1VzZS9JbnN0 YWxsLmh0bWwjbGlicmFyeS1wYWNrYWdlDQoNCkJlc3QgcmVnYXJkcywNCkhhbm5lcw0KLS0NCkhh bm5lcyBIYXVzd2VkZWxsDQoNClNjaWVudGlmaWMgc3RhZmYgJiBQaEQgY2FuZGlkYXRlDQpGcmVp ZSBVbml2ZXJzaXTDpHQgQmVybGluIC8gTWF4IFBsYW5jayBJbnN0aXR1dGUgZm9yIE1vbGVjdWxh ciBHZW5ldGljcw0KDQphZGRyZXNzICAgICBJbnN0aXR1dCBmw7xyIEluZm9ybWF0aWsNCiAgICAg ICAgICAgIFRha3VzdHJhw59lIDkNCiAgICAgICAgICAgIFJvb20gMDE5DQogICAgICAgICAgICAx NDE5NSBCZXJsaW4NCnRlbGVwaG9uZSAgICs0OSAoMCkzMCA4MzgtNzUyNDE8dGVsOiUyQjQ5JTIw JTI4MCUyOTMwJTIwODM4LTc1MjQxPg0KZmF4ICAgICAgICAgKzQ5ICgwKTMwIDgzOC03NTIxODx0 ZWw6JTJCNDklMjAlMjgwJTI5MzAlMjA4MzgtNzUyMTg+DQplLW1haWwgICAgICBoYW5uZXMuaGF1 c3dlZGVsbEBbbW9sZ2VuLm1wZy5kZTxodHRwOi8vbW9sZ2VuLm1wZy5kZS8+fGZ1LWJlcmxpbi5k ZTxodHRwOi8vZnUtYmVybGluLmRlLz5dDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fDQpzZXFhbi1kZXYgbWFpbGluZyBsaXN0DQpzZXFhbi1kZXZAbGlz dHMuZnUtYmVybGluLmRlPG1haWx0bzpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlPg0KaHR0 cHM6Ly9saXN0cy5mdS1iZXJsaW4uZGUvbGlzdGluZm8vc2VxYW4tZGV2DQoNCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpzZXFhbi1kZXYgbWFpbGluZyBs aXN0DQpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlPG1haWx0bzpzZXFhbi1kZXZAbGlzdHMu ZnUtYmVybGluLmRlPg0KaHR0cHM6Ly9saXN0cy5mdS1iZXJsaW4uZGUvbGlzdGluZm8vc2VxYW4t ZGV2DQoNCi0tLQ0KDQpSZW7DqSBSYWhuDQpQaC5ELiBTdHVkZW50IChkZS5OQkkgLSBDSUJJKQ0K LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRlbDogICgrNDkpIDMwIDgzOCA3Mjk3 NA0KTWFpbDogcmVuZS5yYWhuQGZ1LWJlcmxpbi5kZTxtYWlsdG86cmVuZS5yYWhuQGZ1LWJlcmxp bi5kZT4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpJbnN0aXR1dGUgb2YgQ29t cHV0ZXIgU2NpZW5jZQ0KQWxnb3JpdGhtaWMgQmlvaW5mb3JtYXRpY3MgKEFCSSkNCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGcmVpZSBVbml2ZXJzaXTDpHQgQmVybGluDQpUYWt1 c3RyYcOfZSA5DQoxNDE5NSBCZXJsaW4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQoNCg== --_000_42CAA4C74EC9489E83EDC574DF40EA61fuberlinde_ Content-Type: text/html; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3b3JkLXdy YXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJy ZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPg0KSGkgTmljaywNCjxkaXYgY2xhc3M9 IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPnlvdSBzaG91bGQgYmUgYWJs ZSB0byBzaW1wbHkgY29weSB0aGUgZ2FwcGVkIHNlcXVlbmNlIGludG8gYSBDaGFyU3RyaW5nLiZu YnNwOzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xh c3M9IiI+Q2hlZXJzLDwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4N CjxkaXYgY2xhc3M9IiI+UmVuw6kmbmJzcDs8YnIgY2xhc3M9IiI+DQo8ZGl2Pg0KPGJsb2NrcXVv dGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPk9uIDkuIFNlcCAyMDE3LCBh dCAwMDo1NSwgTmljayBNYXBzeSAmbHQ7PGEgaHJlZj0ibWFpbHRvOm5tYXBzeUBnbWFpbC5jb20i IGNsYXNzPSIiPm5tYXBzeUBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8L2Rpdj4NCjxiciBjbGFz cz0iQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBkaXI9 Imx0ciIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xh c3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+SGkg SGFubmVzLDxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NClRoYW5rIHlvdSBzbyBtdWNoIGZv ciB5b3VyIHJlcGx5ISBJJ20gcmVhbGx5IGxvc3QgaGVyZSBzbyBJIGFwcHJlY2lhdGUgaXQgYSBs b3QuPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0KPC9kaXY+DQpVbmZvcnR1bmF0ZWx5IEkg ZG8gbmVlZCBhIGNoYXIgKiosIHNpbmNlIEknbSBwYXNzaW5nIHRoZSBkYXRhIGJhY2sgdG8gQyBj b2RlIChhY3R1YWxseSwgdG8gUHl0aG9uIGN0eXBlcykuPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNz PSIiPg0KPC9kaXY+DQpUaGFuayB5b3UgZm9yIHRoZSB0aXAgb24gZ29pbmcgZnJvbSB0aGUgcm93 IHRvIGEgQ2hhclN0cmluZy4gSXMgdGhlcmUgYSBmdW5jdGlvbiB3aGljaCBjYW4gdGFrZSBteSBU Um93IGFuZCByZXR1cm4gYSBDaGFyU3RyaW5nPyBJIGNvdWxkbid0IGZpbmQgYW55dGhpbmcgaW4g dGhlIGRvY3VtZW50YXRpb24uIEluc3RlYWQsIEkgZm91bmQgb3V0IHRoYXQgbXkgVFJvdyBjYW4g YWN0IGFzIGEgR2Fwcywgd2hpY2ggYWxsb3dlZCBtZSB0byB1c2UgYWxsDQogdGhlIEdhcHMgZnVu Y3Rpb25zLiBUaGF0IGFsbG93ZWQgbWUgdG8gcmVjb25zdHJ1Y3QgdGhlIGFsaWdubWVudCB1c2lu ZyBpc0dhcCgpIGFuZCB0aGUgdW5hbGlnbmVkIHNlcXVlbmNlcy48YnIgY2xhc3M9IiI+DQo8ZGl2 IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KVGhhbmsgeW91LDxiciBjbGFzcz0iIj4N CjwvZGl2Pg0KPC9kaXY+DQpOaWNrPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0KPC9kaXY+ DQpQLlMuIE15IHNvbHV0aW9uLCBpbiBjYXNlIGFueW9uZSBlbHNlIHJ1bnMgaW50byB0aGUgc2Ft ZSB0cm91YmxlOjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KKEknbSB1c2luZyBTZXFBbiAyLjIuMCBu b3cpPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 Om1vbm9zcGFjZSxtb25vc3BhY2UiIGNsYXNzPSIiPiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDs8 YnIgY2xhc3M9IiI+DQojaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7PGJyIGNsYXNzPSIiPg0KI2lu Y2x1ZGUgJmx0O3NlcWFuL2FsaWduLmgmZ3Q7PGJyIGNsYXNzPSIiPg0KI2luY2x1ZGUgJmx0O3Nl cWFuL3Njb3JlLmgmZ3Q7PGJyIGNsYXNzPSIiPg0KI2luY2x1ZGUgJmx0O3NlcWFuL3NlcXVlbmNl LmgmZ3Q7PGJyIGNsYXNzPSIiPg0KI2luY2x1ZGUgJmx0O3NlcWFuL2dyYXBoX21zYS5oJmd0Ozxi ciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCnVzaW5nIG5hbWVzcGFjZSBzZXFhbjs8YnIgY2xh c3M9IiI+DQo8YnIgY2xhc3M9IiI+DQpjaGFyICoqYWxpZ24oaW50IG5zZXEsIGNoYXIgKnNlcXNb XSkgezxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBBbGln biZsdDtTdHJpbmcmbHQ7RG5hNSZndDsmZ3Q7IGFsaWduOzxiciBjbGFzcz0iIj4NCiZuYnNwOyZu YnNwOyZuYnNwOyByZXNpemUocm93cyhhbGlnbiksIG5zZXEpOzxiciBjbGFzcz0iIj4NCiZuYnNw OyZuYnNwOyZuYnNwOyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IG5zZXE7IGkmIzQzOyYjNDM7KSB7 PGJyIGNsYXNzPSIiPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 IGFzc2lnblNvdXJjZShyb3coYWxpZ24sIGkpLCBzZXFzW2ldKTs8YnIgY2xhc3M9IiI+DQombmJz cDsmbmJzcDsmbmJzcDsgfTxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNw OyZuYnNwOyBnbG9iYWxNc2FBbGlnbm1lbnQoYWxpZ24sIEVkaXREaXN0YW5jZVNjb3JlKCkpOzxi ciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyAvLyBDb252ZXJ0 IHRoZSBBbGlnbiByb3dzIHRvIGNoYXIgKidzIGFuZCBzdG9yZSBiYWNrIGluIHNlcXMuPGJyIGNs YXNzPSIiPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgdHlwZW5hbWUgUm93Jmx0O0FsaWdu Jmx0O1N0cmluZyZsdDtEbmE1Jmd0OyZndDsmZ3Q7OjpUeXBlIFRSb3c7PGJyIGNsYXNzPSIiPg0K Jm5ic3A7Jm5ic3A7Jm5ic3A7IGZvciAoaW50IGkgPSAwOyBpICZsdDsgbnNlcTsgaSYjNDM7JiM0 MzspIHs8YnIgY2xhc3M9IiI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgLy8gRWFjaCByb3cgaXMgdHlwZSBUUm93LCBidXQgYWxzbyBmdW5jdGlvbnMgYXMgYSBH YXBzLiBUaGlzIGlzIHdoeSBpc0dhcCBhY2NlcHRzIGl0LjxiciBjbGFzcz0iIj4NCiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBUUm93IGFyb3cgPSByb3coYWxpZ24s IGkpOzxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyBpbnQgbGVuID0gKGludClsZW5ndGgoYXJvdyk7PGJyIGNsYXNzPSIiPg0KJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNoYXIgKm5ld19zZXEgPSAoY2hhciAq KW1hbGxvYyhzaXplb2YoY2hhcikgKiBsZW4mIzQzOzEpOzxiciBjbGFzcz0iIj4NCiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQgb2Zmc2V0ID0gMDs8YnIgY2xh c3M9IiI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZm9yIChp bnQgaiA9IDA7IGogJmx0OyBsZW47IGomIzQzOyYjNDM7KSB7PGJyIGNsYXNzPSIiPg0KJm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IGlmIChpc0dhcChhcm93LCBqKSkgezxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyBuZXdfc2VxW2pdID0gJy0nOzxiciBjbGFzcz0iIj4NCiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBvZmZzZXQtLTs8YnIgY2xhc3M9IiI+DQombmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgfSBlbHNlIHs8YnIgY2xhc3M9IiI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsgbmV3X3NlcVtqXSA9IHNlcXNbaV1baiYjNDM7b2Zmc2V0XTs8YnIgY2xhc3M9IiI+DQombmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgfTxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyB9PGJyIGNsYXNzPSIiPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7IG5ld19zZXFbbGVuXSA9ICdcMCc7PGJyIGNsYXNzPSIiPg0KJm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNlcXNbaV0gPSBuZXdfc2VxOzxiciBjbGFz cz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0K Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBzZXFzOzxiciBjbGFzcz0iIj4NCn08YnIgY2xhc3M9 IiI+DQo8YnIgY2xhc3M9IiI+DQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7PGJy IGNsYXNzPSIiPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IGZvciAoaW50IGkgPSAxOyBpICZsdDsgYXJn YzsgaSYjNDM7JiM0MzspIHs8YnIgY2xhc3M9IiI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsgYXJndltpLTFdID0gYXJndltpXTs8YnIgY2xhc3M9IiI+DQombmJz cDsmbmJzcDsmbmJzcDsgfTxiciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBjaGFyICoq YWxpZ25lZF9zZXFzID0gYWxpZ24oYXJnYy0xLCBhcmd2KTs8YnIgY2xhc3M9IiI+DQombmJzcDsm bmJzcDsmbmJzcDsgZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBhcmdjLTE7IGkmIzQzOyYjNDM7KSB7 PGJyIGNsYXNzPSIiPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 IHN0ZDo6Y291dCAmbHQ7Jmx0OyBhbGlnbmVkX3NlcXNbaV0gJmx0OyZsdDsgc3RkOjplbmRsOzxi ciBjbGFzcz0iIj4NCiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyIGNsYXNzPSIiPg0KJm5ic3A7Jm5i c3A7Jm5ic3A7IHJldHVybiAwOzxiciBjbGFzcz0iIj4NCn08L3NwYW4+PGJyIGNsYXNzPSIiPg0K PGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFz cz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxk aXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+ DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiPjxiciBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBGcmks IFNlcCA4LCAyMDE3IGF0IDg6MTggQU0sIEhhbm5lcyBIYXVzd2VkZWxsIDxzcGFuIGRpcj0ibHRy IiBjbGFzcz0iIj4NCiZsdDs8YSBocmVmPSJtYWlsdG86aGFubmVzLmhhdXN3ZWRlbGxAZnUtYmVy bGluLmRlIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+aGFubmVzLmhhdXN3ZWRlbGxAZnUtYmVy bGluLmRlPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxiciBjbGFzcz0iIj4NCjxibG9ja3F1b3RlIGNs YXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFw eCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPg0KSGkgTmljayw8YnIgY2xhc3M9IiI+DQo8 c3BhbiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQpBbSBNaXR0d29jaCwgNi4gU2VwdGVtYmVyIDIw MTcsIDAzOjM4OjU0IHNjaHJpZWIgTmljayBNYXBzeTo8YnIgY2xhc3M9IiI+DQomZ3Q7IEhpLCBJ J20ganVzdCBnZXR0aW5nIHN0YXJ0ZWQgd2l0aCBTZXFBbiAoYW5kIEMmIzQzOyYjNDM7KSwgc28g SSdtIHN1cmUgSSdtIG1pc3Npbmc8YnIgY2xhc3M9IiI+DQomZ3Q7IHNvbWV0aGluZyBzaW1wbGUg aGVyZS48YnIgY2xhc3M9IiI+DQomZ3Q7PGJyIGNsYXNzPSIiPg0KJmd0OyBJJ3ZlIGdvdCBhIG11 bHRpcGxlIHNlcXVlbmNlIGFsaWdubWVudCB3b3JraW5nIGFuZCBwcm9kdWNpbmcgYW48YnIgY2xh c3M9IiI+DQomZ3Q7IEFsaWduJmx0O1N0cmluZyZsdDtEbmE1Jmd0OyAmZ3Q7IG9iamVjdC4gTm93 IGFsbCBJIG5lZWQgaXMgdG8gcmV0dXJuIHRoZSBhbGlnbmVkPGJyIGNsYXNzPSIiPg0KJmd0OyBz ZXF1ZW5jZXMgKHdpdGggZ2FwcykgYXMgQyBzdHJpbmdzIChjaGFyICopIGZyb20gdGhlIGZ1bmN0 aW9uLjxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCjwvc3Bhbj5BcmUgeW91IHN1cmUgeW91 IHdhbnQgdG8gYmUgcGFzc2luZyBhcm91bmQgdGhlc2UgY2hhcioqID8gVGhpcyBpcyBDJiM0Mzsm IzQzOyBhZnRlcjxiciBjbGFzcz0iIj4NCmFsbCBhbmQgd2UgaGF2ZSByZWZlcmVuY2VzIDpEPGJy IGNsYXNzPSIiPg0KPHNwYW4gY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KJmd0OyBJdCBzZWVtcyBs aWtlIGEgc2ltcGxlIHRoaW5nLCBidXQgYWZ0ZXIgaG91cnMgcmVhZGluZyB0aHJvdWdoIHRoZTxi ciBjbGFzcz0iIj4NCiZndDsgZG9jdW1lbnRhdGlvbiBvZiBhbGwgdGhlIHR5cGVzIGFuZCBmdW5j dGlvbnMgKGFuZCB5ZXMsIExhbmd1YWdlIEVudGl0eTxiciBjbGFzcz0iIj4NCiZndDsgVHlwZXMp LCBJIGNhbid0IGZpbmQgdGhlIHBhdGggZnJvbSBBbGlnbiB0byBjaGFyICouPGJyIGNsYXNzPSIi Pg0KJmd0OzxiciBjbGFzcz0iIj4NCiZndDsgSSBmb3VuZCB0b0NTdHJpbmcoKSwgYnV0IGl0IHRh a2VzIGEgU3RyaW5nLCBhbmQgSSBkb24ndCBrbm93IGhvdyB0byBnZXQ8YnIgY2xhc3M9IiI+DQom Z3Q7IChnYXBwZWQpIFN0cmluZ3Mgb3V0IG9mIGFuIEFsaWduLjxiciBjbGFzcz0iIj4NCiZndDs8 YnIgY2xhc3M9IiI+DQomZ3Q7IFRoYW5rIHlvdSBmb3IgYW55IGhlbHAsIGFuZCBob3BlZnVsbHkg SSdtIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhpcyBncmVhdDxiciBjbGFzcz0iIj4NCiZndDsgbGli cmFyeSE8YnIgY2xhc3M9IiI+DQo8YnIgY2xhc3M9IiI+DQo8L3NwYW4+WW91IGNhbiBjcmVhdGUg YSBDaGFyU3RyaW5nIGZyb20gdGhlIGFsaWdubWVudCByb3cgYW5kIHRoZW4gY2FsbCB0b0NTdHJp bmcoKTxiciBjbGFzcz0iIj4NCm9uIHRoZSBDaGFyU3RyaW5nLiBCdXQsIGxpa2UgSSBzYWlkLCBJ IHdvdWxkIHJlYWxseSByZWNvbW1lbmQgd29ya2luZyB3aXRoPGJyIGNsYXNzPSIiPg0KU3RyaW5n cyBhbmQgU3RyaW5nU2V0cyBpbnN0ZWFkIG9mIHBvaW50ZXJzIGFuZCBbXS48YnIgY2xhc3M9IiI+ DQo8c3BhbiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQomZ3Q7IFAuUy4gSGVyZSdzIHdoYXQgSSd2 ZSB3cml0dGVuIHNvIGZhcjo8YnIgY2xhc3M9IiI+DQomZ3Q7IChJJ20gdXNpbmcgU2VxQW4gMS40 LjEgb24gVWJ1bnR1IDE2LjA0Lik8YnIgY2xhc3M9IiI+DQo8YnIgY2xhc3M9IiI+DQo8L3NwYW4+ UGxlYXNlIHVwZGF0ZSB0byBTZXFBbjIgYXMgU2VxQW4xIGhhcyBiZWVuIGRlcHJlY2F0ZWQgZm9y IGEgd2hpbGUgbm93LiBUaGU8YnIgY2xhc3M9IiI+DQp1YnVudHUgcGFja2FnZSBpcyBjYWxsZWQg bGlic2VxYW4yLWRldi4gSXQgaXMgYXZhaWxhYmxlIHNpbmNlIFVidW50dSAxNy4wNCw8YnIgY2xh c3M9IiI+DQpidXQgY2FuIGFsc28gYmUgaW5zdGFsbGVkIG1hbnVhbGx5OjxiciBjbGFzcz0iIj4N CjxhIGhyZWY9Imh0dHA6Ly9zZXFhbi5yZWFkdGhlZG9jcy5pby9lbi9tYXN0ZXIvSW5mcmFzdHJ1 Y3R1cmUvVXNlL0luc3RhbGwuaHRtbCNsaWJyYXJ5LXBhY2thZ2UiIHJlbD0ibm9yZWZlcnJlciIg dGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSIiPmh0dHA6Ly9zZXFhbi5yZWFkdGhlZG9jcy5pby88d2Jy IGNsYXNzPSIiPmVuL21hc3Rlci9JbmZyYXN0cnVjdHVyZS9Vc2UvPHdiciBjbGFzcz0iIj5JbnN0 YWxsLmh0bWwjbGlicmFyeS1wYWNrYWdlPC9hPjxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4N CkJlc3QgcmVnYXJkcyw8YnIgY2xhc3M9IiI+DQpIYW5uZXM8YnIgY2xhc3M9IiI+DQotLTxiciBj bGFzcz0iIj4NCkhhbm5lcyBIYXVzd2VkZWxsPGJyIGNsYXNzPSIiPg0KPGJyIGNsYXNzPSIiPg0K U2NpZW50aWZpYyBzdGFmZiAmYW1wOyBQaEQgY2FuZGlkYXRlPGJyIGNsYXNzPSIiPg0KRnJlaWUg VW5pdmVyc2l0w6R0IEJlcmxpbiAvIE1heCBQbGFuY2sgSW5zdGl0dXRlIGZvciBNb2xlY3VsYXIg R2VuZXRpY3M8YnIgY2xhc3M9IiI+DQo8YnIgY2xhc3M9IiI+DQphZGRyZXNzJm5ic3A7ICZuYnNw OyAmbmJzcDtJbnN0aXR1dCBmw7xyIEluZm9ybWF0aWs8YnIgY2xhc3M9IiI+DQombmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBUYWt1c3RyYcOfZSA5PGJyIGNsYXNzPSIi Pg0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgUm9vbSAwMTk8YnIg Y2xhc3M9IiI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxNDE5 NSBCZXJsaW48YnIgY2xhc3M9IiI+DQp0ZWxlcGhvbmUmbmJzcDsgJm5ic3A7PGEgaHJlZj0idGVs OiUyQjQ5JTIwJTI4MCUyOTMwJTIwODM4LTc1MjQxIiB2YWx1ZT0iJiM0Mzs0OTMwODM4NzUyNDEi IGNsYXNzPSIiPiYjNDM7NDkgKDApMzAgODM4LTc1MjQxPC9hPjxiciBjbGFzcz0iIj4NCmZheCZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs8YSBocmVmPSJ0ZWw6JTJCNDklMjAlMjgw JTI5MzAlMjA4MzgtNzUyMTgiIHZhbHVlPSImIzQzOzQ5MzA4Mzg3NTIxOCIgY2xhc3M9IiI+JiM0 Mzs0OSAoMCkzMCA4MzgtNzUyMTg8L2E+PGJyIGNsYXNzPSIiPg0KZS1tYWlsJm5ic3A7ICZuYnNw OyAmbmJzcDsgaGFubmVzLmhhdXN3ZWRlbGxAWzxhIGhyZWY9Imh0dHA6Ly9tb2xnZW4ubXBnLmRl LyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+bW9sZ2VuLm1wZy48 d2JyIGNsYXNzPSIiPmRlPC9hPnw8YSBocmVmPSJodHRwOi8vZnUtYmVybGluLmRlLyIgcmVsPSJu b3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+ZnUtYmVybGluLmRlPC9hPl08YnIg Y2xhc3M9IiI+DQo8YnIgY2xhc3M9IiI+DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX188 d2JyIGNsYXNzPSIiPl9fX19fX19fX19fX19fX19fPGJyIGNsYXNzPSIiPg0Kc2VxYW4tZGV2IG1h aWxpbmcgbGlzdDxiciBjbGFzcz0iIj4NCjxhIGhyZWY9Im1haWx0bzpzZXFhbi1kZXZAbGlzdHMu ZnUtYmVybGluLmRlIiBjbGFzcz0iIj5zZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlPC9hPjxi ciBjbGFzcz0iIj4NCjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuZnUtYmVybGluLmRlL2xpc3RpbmZv L3NlcWFuLWRldiIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+aHR0 cHM6Ly9saXN0cy5mdS1iZXJsaW4uZGUvPHdiciBjbGFzcz0iIj5saXN0aW5mby9zZXFhbi1kZXY8 L2E+PGJyIGNsYXNzPSIiPg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY+DQo8YnIgY2xhc3M9IiI+DQo8 L2Rpdj4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJy IGNsYXNzPSIiPg0Kc2VxYW4tZGV2IG1haWxpbmcgbGlzdDxiciBjbGFzcz0iIj4NCjxhIGhyZWY9 Im1haWx0bzpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlIiBjbGFzcz0iIj5zZXFhbi1kZXZA bGlzdHMuZnUtYmVybGluLmRlPC9hPjxiciBjbGFzcz0iIj4NCmh0dHBzOi8vbGlzdHMuZnUtYmVy bGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPC9ibG9ja3F1 b3RlPg0KPC9kaXY+DQo8YnIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBzdHlsZT0i Y29sb3I6IHJnYigwLCAwLCAwKTsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGlnbjog c3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1zcGFj ZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDog MHB4OyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdl YmtpdC1saW5lLWJyZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPg0KPGRpdiBzdHls ZT0iY29sb3I6IHJnYigwLCAwLCAwKTsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsgdGV4dC1hbGln bjogc3RhcnQ7IHRleHQtaW5kZW50OiAwcHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aGl0ZS1z cGFjZTogbm9ybWFsOyB3b3JkLXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0 aDogMHB4OyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsg LXdlYmtpdC1saW5lLWJyZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPg0KPGRpdiBj bGFzcz0iIj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxm b250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS08L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0 eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVy IE5ldyIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0i b3JwaGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXci IGNsYXNzPSIiPlJlbsOpIFJhaG48L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAy OyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+ UGguRC4gU3R1ZGVudCAoZGUuTkJJIC0gQ0lCSSk8L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJv cnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIg Y2xhc3M9IiI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L2ZvbnQ+PC9kaXY+DQo8 ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9 IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPlRlbDogJm5ic3A7KCYjNDM7NDkp IDMwIDgzOCZuYnNwOzwvZm9udD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5l dyc7IiBjbGFzcz0iIj43Mjk3NDwvc3Bhbj48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGZvbnQgZmFj ZT0iQ291cmllciBOZXciIGNsYXNzPSIiPk1haWw6Jm5ic3A7PGEgaHJlZj0ibWFpbHRvOnJlbmUu cmFobkBmdS1iZXJsaW4uZGUiIGNsYXNzPSIiPnJlbmUucmFobkBmdS1iZXJsaW4uZGU8L2E+PC9m b250PjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9 IiI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L2ZvbnQ+PC9kaXY+DQo8L2Rpdj4N CjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9 IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5JbnN0aXR1dGUgb2YgQ29tcHV0ZXIgU2NpZW5jZTwvZm9u dD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxm b250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5BbGdvcml0aG1pYyBCaW9pbmZvcm1hdGlj cyAoQUJJKTwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsi IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLTwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7 IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5G cmVpZSBVbml2ZXJzaXTDpHQgQmVybGluPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFu czogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNz PSIiPlRha3VzdHJhw59lIDk8L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3 aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+MTQx OTUgQmVybGluPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAy OyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2 Pg0KPC9kaXY+DQo8YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg== --_000_42CAA4C74EC9489E83EDC574DF40EA61fuberlinde_-- From nicholas.stoler@gmail.com Sat Sep 23 00:44:36 2017 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (envelope-from ) id <1dvWgV-000CJD-NH>; Sat, 23 Sep 2017 00:44:35 +0200 Received: from mail-vk0-f49.google.com ([209.85.213.49]) by relay1.zedat.fu-berlin.de (Exim 4.85) for seqan-dev@lists.fu-berlin.de with esmtps (TLSv1.2:AES128-GCM-SHA256:128) (envelope-from ) id <1dvWgV-003Xa2-Bz>; Sat, 23 Sep 2017 00:44:35 +0200 Received: by mail-vk0-f49.google.com with SMTP id m140so1283789vka.10 for ; Fri, 22 Sep 2017 15:44:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to; bh=bE7W/ahPWBAXIPe+lGpVZMk996C/IiMiQmXfVW0rdeY=; b=V/4w3561K3wYQUlFgM8aXDx920Vp4fsGaDmvdKGLRtCF3/k2s9Wq+asTapKklq9dO1 lq8VHuTk9wHjgjhkZmLoRYTtwIvMRCXiwl6/0y+cNOW3HCVvngGYVyWURWZqnAP6D1Rz QsQpVJYCwsklC6icwpI6FBIriRaH+Gx1C142RalKDM/IUeGg56snHeu9/xEepAPE2Sq2 X8lqxU46AACW3a8yVbTyBuTNNpZdBjNznjIZnDL1pMxEt1wgxG+phDAmC/AcmnHMZyH4 kJqcFBeNYR/Zb3q4dujcigsXxnPBaZjcD9KMQFO1mWIBKt53ZHmUmybQJFj302xeeWvR 1J3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to; bh=bE7W/ahPWBAXIPe+lGpVZMk996C/IiMiQmXfVW0rdeY=; b=o2WvRezLX50i48Yx8fbsdCy4doXmfP/9zEZhmkjOteucGemwt2SCO1mlHMFzcCoU4Q A2RP3GWhyPqOeRhVmvacn8y1PfXnrWdb3HEBDI/UQGVCKWTmfjRbS4ZK5gDDvyKaYLkt clj0yFfWm2xuX+7PIdamNecvzMZWvWpndXyCF4fAJDu14GuhaPIhCl/nNbYEzYYylWQR j8nOsPKzcWXhS2JXMDMTf2a5ZfIzxjZdbbVkinhIZJyrb6oGANOJJGdf6TWgaOAWd7WE PjY+O7VmiyOcS73tpvtRPVwjmdc3sFKfBYg4nA3xaAhfMfLXz3yI1bzyuXxzUFB2bdPc uFcA== X-Gm-Message-State: AHPjjUgNJFgvY5//iKFfXM3PZvf4VnHwmBmDsZJf8sPLa4YkrQ9Q07oX bRiVpEMRyeEHO1obDGtZMQxG3IJ9Oshscxm75TtT X-Google-Smtp-Source: AOwi7QDIiZYd8ouzDdcGj9vwbdi1iGvw8tKC9qyiWe2JFpQMWKVuOt6j2Ztl1bThb6mDRQJMySuSyZRVcBudDqxoDEc= X-Received: by 10.31.16.232 with SMTP id 101mr639369vkq.158.1506120272660; Fri, 22 Sep 2017 15:44:32 -0700 (PDT) MIME-Version: 1.0 Sender: nicholas.stoler@gmail.com Received: by 10.103.147.212 with HTTP; Fri, 22 Sep 2017 15:44:30 -0700 (PDT) Received: by 10.103.147.212 with HTTP; Fri, 22 Sep 2017 15:44:30 -0700 (PDT) In-Reply-To: <42CAA4C7-4EC9-489E-83ED-C574DF40EA61@fu-berlin.de> References: <3841593.RgPZFG1D0T@celegans.imp.fu-berlin.de> <42CAA4C7-4EC9-489E-83ED-C574DF40EA61@fu-berlin.de> From: Nick Mapsy Date: Fri, 22 Sep 2017 18:44:30 -0400 X-Google-Sender-Auth: egZdj2m6mNRLOC1ou6tdF_tDrPM Message-ID: To: SeqAn Development Content-Type: multipart/alternative; boundary="001a114365c4d74cce0559cef311" X-Originating-IP: 209.85.213.49 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1506120275-000DA178-AA2EA3ED/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_PASS,URIBL_BLOCKED X-Spam-Checker-Version: SpamAssassin 3.4.1 on Palau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Getting a sequence as a char * X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Sep 2017 22:44:36 -0000 --001a114365c4d74cce0559cef311 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Ren=C3=A9, Thanks for the suggestion. I'd certainly like to get the gapped sequence directly. Unfortunately, I'm not sure exactly which function could do that, and what its input would be. Nick On Sep 18, 2017 5:16 AM, "Rahn, Ren=C3=A9" wrote: > Hi Nick, > > you should be able to simply copy the gapped sequence into a CharString. > > Cheers, > > Ren=C3=A9 > > On 9. Sep 2017, at 00:55, Nick Mapsy wrote: > > Hi Hannes, > > Thank you so much for your reply! I'm really lost here so I appreciate it > a lot. > > Unfortunately I do need a char **, since I'm passing the data back to C > code (actually, to Python ctypes). > > Thank you for the tip on going from the row to a CharString. Is there a > function which can take my TRow and return a CharString? I couldn't find > anything in the documentation. Instead, I found out that my TRow can act = as > a Gaps, which allowed me to use all the Gaps functions. That allowed me t= o > reconstruct the alignment using isGap() and the unaligned sequences. > > Thank you, > Nick > > P.S. My solution, in case anyone else runs into the same trouble: > (I'm using SeqAn 2.2.0 now) > > #include > #include > #include > #include > #include > #include > > using namespace seqan; > > char **align(int nseq, char *seqs[]) { > > Align> align; > resize(rows(align), nseq); > for (int i =3D 0; i < nseq; i++) { > assignSource(row(align, i), seqs[i]); > } > > globalMsaAlignment(align, EditDistanceScore()); > > // Convert the Align rows to char *'s and store back in seqs. > typedef typename Row>>::Type TRow; > for (int i =3D 0; i < nseq; i++) { > // Each row is type TRow, but also functions as a Gaps. This is > why isGap accepts it. > TRow arow =3D row(align, i); > int len =3D (int)length(arow); > char *new_seq =3D (char *)malloc(sizeof(char) * len+1); > int offset =3D 0; > for (int j =3D 0; j < len; j++) { > if (isGap(arow, j)) { > new_seq[j] =3D '-'; > offset--; > } else { > new_seq[j] =3D seqs[i][j+offset]; > } > } > new_seq[len] =3D '\0'; > seqs[i] =3D new_seq; > } > > return seqs; > } > > int main(int argc, char *argv[]) { > for (int i =3D 1; i < argc; i++) { > argv[i-1] =3D argv[i]; > } > char **aligned_seqs =3D align(argc-1, argv); > for (int i =3D 0; i < argc-1; i++) { > std::cout << aligned_seqs[i] << std::endl; > } > return 0; > } > > > On Fri, Sep 8, 2017 at 8:18 AM, Hannes Hauswedell < > hannes.hauswedell@fu-berlin.de> wrote: > >> Hi Nick, >> >> Am Mittwoch, 6. September 2017, 03:38:54 schrieb Nick Mapsy: >> > Hi, I'm just getting started with SeqAn (and C++), so I'm sure I'm >> missing >> > something simple here. >> > >> > I've got a multiple sequence alignment working and producing an >> > Align > object. Now all I need is to return the aligned >> > sequences (with gaps) as C strings (char *) from the function. >> >> Are you sure you want to be passing around these char** ? This is C++ >> after >> all and we have references :D >> >> > It seems like a simple thing, but after hours reading through the >> > documentation of all the types and functions (and yes, Language Entity >> > Types), I can't find the path from Align to char *. >> > >> > I found toCString(), but it takes a String, and I don't know how to ge= t >> > (gapped) Strings out of an Align. >> > >> > Thank you for any help, and hopefully I'm able to make use of this gre= at >> > library! >> >> You can create a CharString from the alignment row and then call >> toCString() >> on the CharString. But, like I said, I would really recommend working wi= th >> Strings and StringSets instead of pointers and []. >> >> > P.S. Here's what I've written so far: >> > (I'm using SeqAn 1.4.1 on Ubuntu 16.04.) >> >> Please update to SeqAn2 as SeqAn1 has been deprecated for a while now. T= he >> ubuntu package is called libseqan2-dev. It is available since Ubuntu >> 17.04, >> but can also be installed manually: >> http://seqan.readthedocs.io/en/master/Infrastructure/Use/Ins >> tall.html#library-package >> >> Best regards, >> Hannes >> -- >> Hannes Hauswedell >> >> Scientific staff & PhD candidate >> Freie Universit=C3=A4t Berlin / Max Planck Institute for Molecular Genet= ics >> >> address Institut f=C3=BCr Informatik >> Takustra=C3=9Fe 9 >> Room 019 >> 14195 Berlin >> telephone +49 (0)30 838-75241 >> fax +49 (0)30 838-75218 >> e-mail hannes.hauswedell@[molgen.mpg.de|fu-berlin.de] >> >> _______________________________________________ >> seqan-dev mailing list >> seqan-dev@lists.fu-berlin.de >> https://lists.fu-berlin.de/listinfo/seqan-dev >> > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > > > --- > > Ren=C3=A9 Rahn > Ph.D. Student (de.NBI - CIBI) > -------------------------------- > Tel: (+49) 30 838 <+49%2030%20838> 72974 > Mail: rene.rahn@fu-berlin.de > -------------------------------- > Institute of Computer Science > Algorithmic Bioinformatics (ABI) > -------------------------------- > Freie Universit=C3=A4t Berlin > Takustra=C3=9Fe 9 > 14195 Berlin > -------------------------------- > > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > > --001a114365c4d74cce0559cef311 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Ren=C3=A9,
Thanks for the suggestion. I'd certainly like= to get the gapped sequence directly. Unfortunately, I'm not sure exact= ly which function could do that, and what its input would be.

Nick

On Sep 18, 2017 5:16 AM, "Rahn, R= en=C3=A9" <Rene.Rahn@fu-b= erlin.de> wrote:
Hi Nick,

you should be able to simply copy the gapped sequence into a CharStrin= g.=C2=A0

Cheers,

Ren=C3=A9=C2=A0
On 9. Sep 2017, at 00:55, Nick Mapsy <nmapsy@gmail.com> wrote:

Hi Hannes,

Thank you so much for your reply! I'm really lost here so I appreciate = it a lot.

Unfortunately I do need a char **, since I'm passing the data back to C= code (actually, to Python ctypes).

Thank you for the tip on going from the row to a CharString. Is there a fun= ction which can take my TRow and return a CharString? I couldn't find a= nything in the documentation. Instead, I found out that my TRow can act as = a Gaps, which allowed me to use all the Gaps functions. That allowed me to reconstruct the alignment using isG= ap() and the unaligned sequences.

Thank you,
Nick

P.S. My solution, in case anyone else runs into the same trouble:
(I'm using SeqAn 2.2.0 now)

#include <iostream> #include <stdlib.h>
#include <seqan/align.h>
#include <seqan/score.h>
#include <seqan/sequence.h>
#include <seqan/graph_msa.h>

using namespace seqan;

char **align(int nseq, char *seqs[]) {

=C2=A0=C2=A0=C2=A0 Align<String<Dna5>> align;
=C2=A0=C2=A0=C2=A0 resize(rows(align), nseq);
=C2=A0=C2=A0=C2=A0 for (int i =3D 0; i < nseq; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 assignSource(row(align, i), seqs= [i]);
=C2=A0=C2=A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 globalMsaAlignment(align, EditDistanceScore());

=C2=A0=C2=A0=C2=A0 // Convert the Align rows to char *'s and store back= in seqs.
=C2=A0=C2=A0=C2=A0 typedef typename Row<Align<String<Dna5>>&= gt;::Type TRow;
=C2=A0=C2=A0=C2=A0 for (int i =3D 0; i < nseq; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Each row is type TRow, but al= so functions as a Gaps. This is why isGap accepts it.
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 TRow arow =3D row(align, i);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int len =3D (int)length(arow); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 char *new_seq =3D (char *)malloc= (sizeof(char) * len+1);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int offset =3D 0;
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (int j =3D 0; j < len; j+= +) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (isGa= p(arow, j)) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 new_seq[j] =3D '-';
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 offset--;
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else {=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 new_seq[j] =3D seqs[i][j+offset];
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 new_seq[len] =3D '\0'; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 seqs[i] =3D new_seq;
=C2=A0=C2=A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 return seqs;
}

int main(int argc, char *argv[]) {
=C2=A0=C2=A0=C2=A0 for (int i =3D 1; i < argc; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 argv[i-1] =3D argv[i];
=C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0 char **aligned_seqs =3D align(argc-1, argv);
=C2=A0=C2=A0=C2=A0 for (int i =3D 0; i < argc-1; i++) {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 std::cout << aligned_seqs[= i] << std::endl;
=C2=A0=C2=A0=C2=A0 }
=C2=A0=C2=A0=C2=A0 return 0;
}



On Fri, Sep 8, 2017 at 8:18 AM, Hannes Hauswedel= l <han= nes.hauswedell@fu-berlin.de> wrote:
Hi Nick,

Am Mittwoch, 6. September 2017, 03:38:54 schrieb Nick Mapsy:
> Hi, I'm just getting started with SeqAn (and C++), so I'm sure= I'm missing
> something simple here.
>
> I've got a multiple sequence alignment working and producing an > Align<String<Dna5> > object. Now all I need is to return t= he aligned
> sequences (with gaps) as C strings (char *) from the function.

Are you sure you want to be passing around these char** ? This is C+= + after
all and we have references :D

> It seems like a simple thing, but after hours reading through the
> documentation of all the types and functions (and yes, Language Entity=
> Types), I can't find the path from Align to char *.
>
> I found toCString(), but it takes a String, and I don't know how t= o get
> (gapped) Strings out of an Align.
>
> Thank you for any help, and hopefully I'm able to make use of this= great
> library!

You can create a CharString from the alignment row and then call toC= String()
on the CharString. But, like I said, I would really recommend working with<= br> Strings and StringSets instead of pointers and [].

> P.S. Here's what I've written so far:
> (I'm using SeqAn 1.4.1 on Ubuntu 16.04.)

Please update to SeqAn2 as SeqAn1 has been deprecated for a while no= w. The
ubuntu package is called libseqan2-dev. It is available since Ubuntu 17.04,=
but can also be installed manually:
http://seqan.re= adthedocs.io/en/master/Infrastructure/Use/Install.html#library-pa= ckage

Best regards,
Hannes
--
Hannes Hauswedell

Scientific staff & PhD candidate
Freie Universit=C3=A4t Berlin / Max Planck Institute for Molecular Genetics=

address=C2=A0 =C2=A0 =C2=A0Institut f=C3=BCr Informatik
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Takustra=C3=9Fe 9
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Room 019
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 14195 Berlin
telephone=C2=A0 =C2=A0+49 (0)30 838-75241
fax=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0+49 (0)30 838-75218 e-mail=C2=A0 =C2=A0 =C2=A0 hannes.hauswedell@[molgen.mpg.de|fu-berlin.de]

_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev<= br>

_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev

---

Ren=C3=A9 Rahn
Ph.D. Student (de.NBI - CIBI)
--------------------------------
Tel: =C2=A0(+49) 30 838=C2=A072974
--------------------------------
Institute of Computer Science
Algorithmic Bioinformatics (ABI)
--------------------------------
Freie Universit=C3=A4t Berlin
Takustra=C3=9Fe 9
14195 Berlin
--------------------------------


_______________________________________________
seqan-dev mailing list
seqan-dev@lists.fu-berlin.d= e
https://lists.fu-berlin.de/listinfo/seqan-dev<= br>
--001a114365c4d74cce0559cef311--