BuildACell / txtlsim-python

Cell-free simulation toolbox in Python
BSD 3-Clause "New" or "Revised" License
4 stars 4 forks source link

Add component types as subclasses: mRNA, Protein, Small Molecule. #28

Open WilliamIX opened 6 years ago

WilliamIX commented 6 years ago

Currently these types are stored as strings inside component. It is better to do this via classes.

murrayrm commented 6 years ago

Seems OK, but not sure what the full set of subclasses are or when they are going to be used. Can you give an example?

WilliamIX commented 6 years ago

Per our discussion on the phone I am hoping to have component types be classes instead of strings or string prefixes (current method). Then, a mechanisms like RNAdegredation can search through all components/species and add reactions to degrade any with the class RNA (or a subclass there-of).

murrayrm commented 6 years ago

I agree that things like proteins can be classes, but I think it will be more complicated in terms of searching for which species will participate in a mechanism. Think about something like a protease that needs to look for a specific degradation tag sequence. It won't be enough to look for proteins. You need some what to identify that the specific degradation tag is present (this would be through the ctag component in the current implementation, which is copied to the name but is presumably not part of the class).

@zoltuz or @vipulsinghal02: Perhaps one of you can summarize how this type of mechanism is currently implemented in the MATLAB toolbox, so we can think through what we are going to need in terms of classes/properties?

WilliamIX commented 6 years ago

I think it would be easy for the Protein class to have an attribute "ctag" to denote degradation tags which could be true or false. Using strings to store information feels sloppy to me and is also a great way to accidentally get unexpected interactions just by choosing the wrong "name" for an object.

murrayrm commented 6 years ago

I agree you could add an attribute called ctag. I would let it be a string and not a Boolean, since we might use different degradation tags and which protease operates on the tag + the rates of degradation will depend on the tag.

Also, note that the species name for the protein probably has to have the ctag in it since Protein tetR, Protein tetR-LVA and Protein tetR-AAV are different species with some shared and some unique reactions.

I agree we want to be careful about using strings to represent things, but perhaps worth pointing out that this is the way biology does it (since the DNA/RNA sequence and protein sequence are what determines the function).

Finally, we should make sure that through all of this that we keep things extensible. It should be possible for a user to add a new tag-based degradation system without having to modify the txtl package directly.