Return the PDB ID. If one was passed in to the constructor, this takes precedence, otherwise the header is
           parsed to try to find an ID. The header does not always contain a PDB ID in regular PDB files and appears to
           always have an ID of 'XXXX' in biological units so the constructor override is useful.

def get_pdb_id(self):
        '''Return the PDB ID. If one was passed in to the constructor, this takes precedence, otherwise the header is
           parsed to try to find an ID. The header does not always contain a PDB ID in regular PDB files and appears to
           always have an ID of 'XXXX' in biological units so the constructor override is useful.'''
        if self.pdb_id:
            return self.pdb_id
        else:
            header = self.parsed_lines["HEADER"]
            assert(len(header) <= 1)
            if header:
                self.pdb_id = header[0][62:66]
                return self.pdb_id
        return None