bokulich-lab / RESCRIPt

REference Sequence annotation and CuRatIon Pipeline
BSD 3-Clause "New" or "Revised" License
89 stars 26 forks source link

Request for function to reverse complement #119

Closed jwdebelius closed 2 years ago

jwdebelius commented 3 years ago

I would really like the ability to reverse complement sequences in QIIME 2 without re-orienting against a reference. Is this appropriate for RESCRIPt (if so, I'm happy to issue the PR), or is it better for another more central plugin?

nbokulich commented 3 years ago

I'd be in favor of adding this as an option to orient-seqs. E.g., make the reference optional and expose an orientation parameter to reverse, complement, or reverse-complement? (maybe that's overthinking it/way too many options)

Or just a separate method is fine too... what do you think @mikerobeson ?

mikerobeson commented 2 years ago

I think would be a great idea @jwdebelius! I think I'd recommend it as an addition to orient-seqs, with the options that @nbokulich recommended, i.e. reverse, complement, or reverse-complement. I do not think this would create a problem of "too many parameters", I mean look at the iqtree plugin. 😄

🤔 Would it be worth also implementing the ability to specify feature IDs to be reverse-complimented. That is, there have been times when I only needed to reverse-compliment a handful of sequences within my dataset. But I guess this'd argue for a separate action? If so, perhaps we can rename the orient-seqs action as orient-seqs-against-reference and reverse-compliment? Maybe I am making things too complicated now.

But I am for adding to orient-seqs.

nbokulich commented 2 years ago

hey @jwdebelius any follow-up thoughts on this? have you already implemented this elsewhere? this would be a great addition to orient-seqs if you are still interested!

@mikerobeson the option to re-orient specific feature IDs is a neat idea! I do worry that could over-complicate the method though. A more transparent (though less convenient) work-around might be to filter to keep those IDs, re-orient with this method, then merge back in. Maybe let's start with the "simple" implementation and we could add this option later on if it is a common enough need.

jwdebelius commented 2 years ago

Sorry, I've been weirdly scattered. Yes, I have a version implemented in sidle right now, but could easily move it over. My initial pass is pretty simple, although looking at orient-seqs is a really different function.