bokulich-lab/RESCRIPt

Request for function to reverse complement

Closed this issue · 4 comments

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?

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 ?

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.

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.

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.