Answers.Body: <p><em>This is a copy-paste nearly verbatim of comments so that the question has an answer</em></p>
  
  <p>What you are trying to do is find what genes are in what homology cluster. This is common problem and there are many solution each with some issues. </p>
  
  <p>Uniprot90 is indeed a cluster of homologues but it is too limited. Whereas you require clusters that span all the domains (universal).</p>
  
  <h3>COG</h3>
  
  <p>The nearly original grouping, is COG (cluster of orthologous genes). It is really handy for this but aren't really available from Uniprot and NCBI (its curator) has been phasing COGs out. In Uniprot records, they are <em>patchily</em> present as its derivative eggNOG (which has varying degrees of "scope", LUCA being the universal one):</p>
  
  <pre><code>&lt;dbReference type="eggNOG" id="COG0451"&gt;
  &lt;property type="taxonomic scope" value="LUCA"/&gt;
  &lt;/dbReference&gt;
  </code></pre>
  
  <h3>Pfam</h3>
  
  <p>Another option that is well mapped and always present when possible in Uniprot entries is <a href="https://pfam.xfam.org/" rel="nofollow noreferrer">Pfam</a> ids. These are domain family annotations and are also good option. It is a <em>domain</em> fold group. So domains within protein with homologous folds are grouped into one. If a protein has two known domains, it will have two Pfam entries —repeat proteins have loads, but most protein have one domain. In Uniprot XML you will find these are:</p>
  
  <pre><code>&lt;dbReference type="Pfam" id="PF01370"&gt;
  </code></pre>
  
  <p>Similarly there is InterPro, which is more narrow than Pfam, but generally overlaps.</p>
  
  <h3>DIY</h3>
  
  <p>Then there's always the option of making your own psi-Blast motif on the NCBI website (setting high number of hits, setting the database to refseq or even PDB and doing a few iterations), saving the motif pattern (PSSM) and using local blast with it.</p>
  
  <h3>Caveats</h3>
  
  <p>In general you may however encounter these pitfalls:</p>
  
  <ol>
  <li>you may have two protein clusters that share a single id</li>
  <li>you have gene fusions (one protein, 2 domains of interest). In Pfam the protein will have two ids, with COGs or similar, you'd have only an anamalous length to go by.</li>
  <li>you may have wished to find analogues (i.e. two protein that arose independently that have the same role (a lot of ribosomal protein are simply structural). No homology clustering scheme can find these.  Say a bacterium has evolved to have a different protein with that role, yet as it has never been studied it is a domain of unknown function (guilt by association is the common strategy, but that is beyond your scope here).</li>
  <li>you have a very small protein which is poorly conserved</li>
  </ol>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-01-07T21:44:58.037Z
Answers.LastActivityDate: 2020-01-07T21:44:58.037Z
Answers.UserDisplayName: Matteo Ferla
Body: <h2><a href="https://i.sstatic.net/cnOA0.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/cnOA0.png" alt="Subchains view."></a></h2>
  
  <p>I'm trying to programmatically construct a name for each protein subchain in any ribosome from Uniprot in accordance with Ban et. al's 2014 proposal (excerpt given below) using PDB's and Uniprot's APIs.
  This is to be a part of a bigger ribosomal analysis suite released next year and we would like to standardize the names as much as possible.
  Ban et. al's proposal: [<a href="https://bangroup.ethz.ch/research/nomenclature-of-ribosomal-proteins.html]" rel="nofollow noreferrer">https://bangroup.ethz.ch/research/nomenclature-of-ribosomal-proteins.html]</a></p>
  
  <hr>
  
  <p>I'm however not remotely a biologist (I work in compilers) and <strong><em>would really appreciate some clarification on the way nomenclature works across domains of life and how homology plays into it.</em></strong> 
  This is my <em>naive</em> approach thus far: </p>
  
  <ul>
  <li>I get a ribosome from PDB let's say (<em>3J9M</em> or <em>5MYJ</em> or any other for that matter) and split it into protein subchains. So on the order of 20-80 proteins.</li>
  <li>For each protein subchain, I can get all the information in the world on it from Uniprot: names, sequence, organisms containing it, publications, synonymous names, you name it...</li>
  <li>Right now (again, naively) for those proteins that <em>don't already have a new name assigned to them</em>, I take name-synonyms that PDB has plenty of (from various publications, I assume) and scan them with regexes (ex.<code>/[LS]\d{1,2}/g</code>) for things like <code>"L8"</code> or <code>"S15"</code>. </li>
  <li>Thus, for each subchain, I end up with something like <code>"L15"</code> or <code>"S28"</code> in multiple copies (depending on the abundance of synonymous entries in PDB).</li>
  <li>The rut i'm in right now is this: having something like <code>"L15"</code> to match it to a new "Ban-nomenclature" name: they provide the nomenclature look-up tables in terms of these three "historical" naming conventions(i.e "human", "yeast", "bacteria") and a taxonomic range while all the I have is the ribosomal structure(ex `` from which I got the subchain. I'm sure there's plenty of information that I can get </li>
  </ul>
  
  <p>Could somebody elucidate to me which assumptions I can and cannot make in this field and how exactly to use the <em>taxonomic range</em>? </p>
  
  <p>Say, (i) can I assume that all archean names are the same as bacterial homologs?
  If I draw a eukaryotic cytoplasmic ribosome, do I match its subchains against yeast column or human column (since both are eukaryotic)?</p>
  
  <hr>
  
  <p>Somebody suggested that I start grouping these subchains based on sequence, not on a domain and I do have access to each protein's sequence, but I am not sure how to go about it. I was thinking to get each of Ban's new names' <strong>UniRef90</strong> cluster, let's say, and then start checking which cluster a given subchain belongs to. </p>
  
  <p>But I'm obviously guessing at this point. Any advice or pointers are very appreciated. </p>
  
  <h2> <a href="https://i.sstatic.net/TlcEE.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/TlcEE.png" alt="Excerpt from Ban"></a></h2>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-01-06T08:05:09.030Z
Comments.Text: Uniprot90 is too limited, you'll likely get better results from  pfam id (domain family annotation) —that is, part of your proteins will be annotated in a group and fusion protein (if any) will have two annotations. Alternatively, (original) COG groupings are really handy for this but aren't available from Uniprot. Then there's always the option of making your own psi-Blast motif on the NCBI website (there's a tactic to it for best results though) and using local blast with it.
Comments.UserDisplayName: Matteo Ferla
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-01-06T22:36:07.013Z
Comments.Text: @MatteoFerla thanks a ton, this is super informative! A bit too dense, actually. 
  Rolling with your first suggestion: as i understand it, a "new name" (ex. *"uS15"*) would be represented by a Pfam-group of homologs and then for a given protein with an old-name i would track it to its Pfam group?
Comments.UserDisplayName: rtviii
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-01-06T23:56:49.943Z
Comments.Text: Yes. Correct. What you are trying to do is find what genes are in what cluster, which is straightforward. You have given a researched questions as per guidelines, however, there is honestly too much to read for my lazy self (I skimmed and do not care to read the paper, which from the title reminds me of the [XKCD about standard](https://xkcd.com/927/)), so I am bound to be missing something. But here are my thoughts of 4 pitfalls: (cont'd)
Comments.UserDisplayName: Matteo Ferla
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2020-01-06T23:59:20.823Z
Comments.Text: (A) you may have two protein clusters that have a single PFAM, (B) you have gene fusions (one protein, 2 domains of interest), (C) the a names are meant to cover analogues, i.e. two protein that arose independently that have the same role (a lot of ribosomal protein are simply structural), (D) you have a very small protein which is poorly conserved, (E) a bacterium has evolved to have a different protein with that role, yet as it has never been studied it is a domain of unknown function (guilt by association is the common strategy, but that is beyond your scope here).
Comments.UserDisplayName: Matteo Ferla
Tags: <python><uniprot><ribosomal><nomenclature><sequence>
Title: Infer the new (Ban et. al) ribosomal nomenlature (ex. uL53 ) from the ribosomal protein's sequence
ThreadText: # Infer the new (Ban et. al) ribosomal nomenlature (ex. uL53 ) from the ribosomal protein's sequence
  
  (Asked by: username_0 on 2020-01-04)
  
  ## [Subchains view.](https://i.sstatic.net/cnOA0.png)
  
  I'm trying to programmatically construct a name for each protein subchain in any ribosome from Uniprot in accordance with Ban et. al's 2014 proposal (excerpt given below) using PDB's and Uniprot's APIs.
  This is to be a part of a bigger ribosomal analysis suite released next year and we would like to standardize the names as much as possible.
  Ban et. al's proposal: [<https://bangroup.ethz.ch/research/nomenclature-of-ribosomal-proteins.html]>
  
  ---
  
  I'm however not remotely a biologist (I work in compilers) and ***would really appreciate some clarification on the way nomenclature works across domains of life and how homology plays into it.***
  This is my *naive* approach thus far:
  
  * I get a ribosome from PDB let's say (*3J9M* or *5MYJ* or any other for that matter) and split it into protein subchains. So on the order of 20-80 proteins.
  * For each protein subchain, I can get all the information in the world on it from Uniprot: names, sequence, organisms containing it, publications, synonymous names, you name it...
  * Right now (again, naively) for those proteins that *don't already have a new name assigned to them*, I take name-synonyms that PDB has plenty of (from various publications, I assume) and scan them with regexes (ex.`/[LS]\d{1,2}/g`) for things like `"L8"` or `"S15"`.
  * Thus, for each subchain, I end up with something like `"L15"` or `"S28"` in multiple copies (depending on the abundance of synonymous entries in PDB).
  * The rut i'm in right now is this: having something like `"L15"` to match it to a new "Ban-nomenclature" name: they provide the nomenclature look-up tables in terms of these three "historical" naming conventions(i.e "human", "yeast", "bacteria") and a taxonomic range while all the I have is the ribosomal structure(ex `` from which I got the subchain. I'm sure there's plenty of information that I can get
  
  Could somebody elucidate to me which assumptions I can and cannot make in this field and how exactly to use the *taxonomic range*?
  
  Say, (i) can I assume that all archean names are the same as bacterial homologs?
  If I draw a eukaryotic cytoplasmic ribosome, do I match its subchains against yeast column or human column (since both are eukaryotic)?
  
  ---
  
  Somebody suggested that I start grouping these subchains based on sequence, not on a domain and I do have access to each protein's sequence, but I am not sure how to go about it. I was thinking to get each of Ban's new names' **UniRef90** cluster, let's say, and then start checking which cluster a given subchain belongs to.
  
  But I'm obviously guessing at this point. Any advice or pointers are very appreciated.
  
  ## [Excerpt from Ban](https://i.sstatic.net/TlcEE.png)
  
  **Tags:** python, uniprot, ribosomal, nomenclature, sequence
  
  > **Comments:**
  > **username_1**: Uniprot90 is too limited, you'll likely get better results from  pfam id (domain family annotation) —that is, part of your proteins will be annotated in a group and fusion protein (if any) will have two annotations. Alternatively, (original) COG groupings are really handy for this but aren't available from Uniprot. Then there's always the option of making your own psi-Blast motif on the NCBI website (there's a tactic to it for best results though) and using local blast with it.  
  > **username_0**: @username_1 thanks a ton, this is super informative! A bit too dense, actually.  Rolling with your first suggestion: as i understand it, a "new name" (ex. *"uS15"*) would be represented by a Pfam-group of homologs and then for a given protein with an old-name i would track it to its Pfam group?  
  > **username_1**: Yes. Correct. What you are trying to do is find what genes are in what cluster, which is straightforward. You have given a researched questions as per guidelines, however, there is honestly too much to read for my lazy self (I skimmed and do not care to read the paper, which from the title reminds me of the [XKCD about standard](https://xkcd.com/927/)), so I am bound to be missing something. But here are my thoughts of 4 pitfalls: (cont'd)  
  > **username_1**: (A) you may have two protein clusters that have a single PFAM, (B) you have gene fusions (one protein, 2 domains of interest), (C) the a names are meant to cover analogues, i.e. two protein that arose independently that have the same role (a lot of ribosomal protein are simply structural), (D) you have a very small protein which is poorly conserved, (E) a bacterium has evolved to have a different protein with that role, yet as it has never been studied it is a domain of unknown function (guilt by association is the common strategy, but that is beyond your scope here).  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2020-01-07. Score: 1 | Accepted answer
  
  *This is a copy-paste nearly verbatim of comments so that the question has an answer*
  
  What you are trying to do is find what genes are in what homology cluster. This is common problem and there are many solution each with some issues.
  
  Uniprot90 is indeed a cluster of homologues but it is too limited. Whereas you require clusters that span all the domains (universal).
  
  ### COG
  
  The nearly original grouping, is COG (cluster of orthologous genes). It is really handy for this but aren't really available from Uniprot and NCBI (its curator) has been phasing COGs out. In Uniprot records, they are *patchily* present as its derivative eggNOG (which has varying degrees of "scope", LUCA being the universal one):
  
  ```
  <dbReference type="eggNOG" id="COG0451">
  <property type="taxonomic scope" value="LUCA"/>
  </dbReference>
  
  ```
  
  ### Pfam
  
  Another option that is well mapped and always present when possible in Uniprot entries is [Pfam](https://pfam.xfam.org/) ids. These are domain family annotations and are also good option. It is a *domain* fold group. So domains within protein with homologous folds are grouped into one. If a protein has two known domains, it will have two Pfam entries —repeat proteins have loads, but most protein have one domain. In Uniprot XML you will find these are:
  
  ```
  <dbReference type="Pfam" id="PF01370">
  
  ```
  
  Similarly there is InterPro, which is more narrow than Pfam, but generally overlaps.
  
  ### DIY
  
  Then there's always the option of making your own psi-Blast motif on the NCBI website (setting high number of hits, setting the database to refseq or even PDB and doing a few iterations), saving the motif pattern (PSSM) and using local blast with it.
  
  ### Caveats
  
  In general you may however encounter these pitfalls:
  
  1. you may have two protein clusters that share a single id
  2. you have gene fusions (one protein, 2 domains of interest). In Pfam the protein will have two ids, with COGs or similar, you'd have only an anamalous length to go by.
  3. you may have wished to find analogues (i.e. two protein that arose independently that have the same role (a lot of ribosomal protein are simply structural). No homology clustering scheme can find these. Say a bacterium has evolved to have a different protein with that role, yet as it has never been studied it is a domain of unknown function (guilt by association is the common strategy, but that is beyond your scope here).
  4. you have a very small protein which is poorly conserved
  
  
  ---
  
  