Author: bugman Date: Sun Mar 10 16:11:03 2013 New Revision: 18741 URL: http://svn.gna.org/viewcvs/relax?rev=18741&view=rev Log: Created the generic_fns.mol_res_spin.generate_spin_id_unique() function. This will return a truly unique spin ID string based on the current molecule, residue, and spin data structure. Modified: trunk/generic_fns/mol_res_spin.py Modified: trunk/generic_fns/mol_res_spin.py URL: http://svn.gna.org/viewcvs/relax/trunk/generic_fns/mol_res_spin.py?rev=18741&r1=18740&r2=18741&view=diff ============================================================================== --- trunk/generic_fns/mol_res_spin.py (original) +++ trunk/generic_fns/mol_res_spin.py Sun Mar 10 16:11:03 2013 @@ -1732,6 +1732,52 @@ # Return the spin id string. return id + + +def generate_spin_id_unique(pipe_cont=None, pipe_name=None, mol=None, res=None, spin=None): + """Generate a list of spin ID variants for the given set of molecule, residue and spin indices. + + @keyword pipe_cont: The data pipe object. + @type pipe_cont: PipeContainer instance + @keyword pipe_name: The data pipe name. + @type pipe_name: str + @keyword mol: The molecule container. + @type mol: MoleculeContainer instance + @keyword res: The residue container. + @type res: ResidueContainer instance + @keyword spin: The spin container. + @type spin: SpinContainer instance + @return: The unique spin ID. + @rtype: str + """ + + # The data pipe. + if pipe_cont == None: + pipe_cont = pipes.get_pipe(pipe_name) + + # Unique info. + unique_res_name = True + if res.name != None and mol._res_name_count[res.name] > 1: + unique_res_name = False + unique_res_num = True + if res.num != None and mol._res_num_count[res.num] > 1: + unique_res_num = False + unique_spin_name = True + if spin.name != None and res._spin_name_count[spin.name] > 1: + unique_spin_name = False + unique_spin_num = True + if spin.num != None and res._spin_num_count[spin.num] > 1: + unique_spin_num = False + + # The unique ID. + if unique_res_name and unique_spin_num: + return generate_spin_id(pipe_cont=pipe_cont, mol_name=mol.name, res_name=res.name, spin_num=spin.num) + if unique_res_name and unique_spin_name: + return generate_spin_id(pipe_cont=pipe_cont, mol_name=mol.name, res_name=res.name, spin_name=spin.name) + if unique_res_num and unique_spin_name: + return generate_spin_id(pipe_cont=pipe_cont, mol_name=mol.name, res_num=res.num, spin_name=spin.name) + if unique_res_num and unique_spin_num: + return generate_spin_id(pipe_cont=pipe_cont, mol_name=mol.name, res_num=res.num, spin_num=spin.num) def get_molecule_ids(selection=None): @@ -3636,7 +3682,7 @@ # Generate the spin id. if return_id: - spin_id = generate_spin_id(pipe_cont=dp, mol_name=mol.name, res_num=res.num, res_name=res.name, spin_num=spin.num, spin_name=spin.name) + spin_id = generate_spin_id(pipe_cont=dp, mol=mol, res=res, spin=spin) # Yield the data. if full_info and return_id: