Uses the Rosetta->ATOM injective map to construct an injective mapping from ATOM->Rosetta.
           We do not extend the injection to include ATOM residues which have no corresponding Rosetta residue.
             e.g. atom_sequence_to_rosetta_mapping[c].map.get('A  45 ') will return None if there is no corresponding Rosetta residue
           those residues to None.
           Likewise, if a PDB chain c is not present in the Rosetta model then atom_sequence_to_rosetta_mapping[c].map.get(s) returns None.

def get_atom_sequence_to_rosetta_map(self):
        '''Uses the Rosetta->ATOM injective map to construct an injective mapping from ATOM->Rosetta.
           We do not extend the injection to include ATOM residues which have no corresponding Rosetta residue.
             e.g. atom_sequence_to_rosetta_mapping[c].map.get('A  45 ') will return None if there is no corresponding Rosetta residue
           those residues to None.
           Likewise, if a PDB chain c is not present in the Rosetta model then atom_sequence_to_rosetta_mapping[c].map.get(s) returns None.
        '''
        if not self.rosetta_to_atom_sequence_maps and self.rosetta_sequences:
            raise Exception('The PDB to Rosetta mapping has not been determined. Please call construct_pdb_to_rosetta_residue_map first.')

        atom_sequence_to_rosetta_mapping = {}
        for chain_id, mapping in self.rosetta_to_atom_sequence_maps.iteritems():
            chain_mapping = {}
            for k in mapping:
                chain_mapping[k[1]] = k[0]
            atom_sequence_to_rosetta_mapping[chain_id] = SequenceMap.from_dict(chain_mapping)

        # Add empty maps for missing chains
        for chain_id, sequence in self.atom_sequences.iteritems():
            if not atom_sequence_to_rosetta_mapping.get(chain_id):
                atom_sequence_to_rosetta_mapping[chain_id] = SequenceMap()

        return atom_sequence_to_rosetta_mapping