docs: def coarse_grain(self, cg_type="CA_TRACE"):
          """ 
              Reduces the protein structure complexity to a few (pseudo-)atoms per residue.
  
              Parameters:
                - cg_type:      CA_TRACE (Ca-only) [Default]
                                ENCAD_3P (CA, O, SC Beads)
                                MARTINI (CA, O, SC Beads)
              
              Returns a new structure object.
          """
          
          # Import CG Types
          
          import CG_Models
          
          CG_Library = {  "CA_TRACE": CG_Models.CA_TRACE,
                          "ENCAD_3P": CG_Models.ENCAD_3P,
                          "MARTINI":  CG_Models.MARTINI   }
          
          CG_Method = CG_Library[cg_type]
          
          # Creates a brand new structure object
          from Bio.PDB.StructureBuilder import StructureBuilder
          
          structure_builder=StructureBuilder()
          
          cg_id = "CG_" + self.id
          structure_builder.init_structure(cg_id)
          structure_builder.init_seg(' ') # Empty SEGID
  
          for model in self:
              structure_builder.init_model(model.id)
              
              for chain in model:
                  structure_builder.init_chain(chain.id)
                  cur_chain = structure_builder.chain
  
                  for residue in chain:
                      cg_residue = CG_Method(residue)
                      cur_chain.add(cg_residue)
          
          cg_structure = structure_builder.get_structure()
          
          return cg_structure