#!/usr/bin/env python

def loadIndex(file="index.ndx",filtering="System Prot-Masses",verbose=0):
	ndxfile=open(file,"r")
	groups={}
	
	for line in ndxfile:
		if line[0]=="[":
			groupname=line.split("[")[1].split("]")[0]
			if verbose:
				print "Reading",groupname,
			groups[groupname]=[]
		else:
			nrs=line.split()
			for nr in nrs:
				groups[groupname].append(int(nr))
	
	if verbose:
		print ""
		print "Groups successfuly read from ndx file."
	ndxfile.close()
	
	groupsplit={}
	
	
	for key in groups.keys():
		groupsplit[key]=[]
		groups[key].sort()
		first=None
		for nr in groups[key]:
			if first==None:
				first=nr
				prev=nr
				last=nr
				continue
			if nr==prev+1:
				last=nr
				prev=nr
			else:
				groupsplit[key].append((first,last))
				first=nr
				prev=nr
				last=nr
		groupsplit[key].append((first,last))
			
	groupstring={}
	
	for key in groupsplit.keys():
		strkey=key.strip()
		groupstring[strkey]=""
		init=True
		for elem in groupsplit[key]:
			if init==True:
				init=False
			else:
				groupstring[strkey]+=" or "
				
			if elem[0]==elem[1]:
				groupstring[strkey]+="index %d"%elem[0]
			else:
				groupstring[strkey]+="index %d-%d"%elem
		
	fl=filtering.split()
	
	keysort=groupstring.keys()
	keysort.sort(key=str.lower)
	if verbose:
		print "Filtering out:",
	for f in fl:
		print f,
	if verbose:
		print ""
	
	for key in keysort:
		if key not in fl:
			if verbose:
				print "Importing selection "+key,
			cmd.select(key.strip(),groupstring[key])
		else:
			if verbose:
				print ""
				print "Omitting selection "+key
	
	if verbose:
		"Loading index file complete."
	cmd.deselect()
	

cmd.extend("loadIndex",loadIndex)