Index: /issm/trunk-jpl/src/m/classes/organizer.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/organizer.m	(revision 13945)
+++ /issm/trunk-jpl/src/m/classes/organizer.m	(revision 13946)
@@ -10,5 +10,4 @@
 %      org = organizer(varargin)
 %
-%
 %   Examples:
 %      org = organizer('repository','Models/','prefix','AGU2015','steps',0);  %build an empty organizer object with a given repository
@@ -16,151 +15,151 @@
 classdef organizer
     properties (SetAccess=private) 
-		 % {{{
-		 currentstep   =0;
-	 end
+		% {{{
+		currentstep   =0;
+	end
     properties (SetAccess=public) 
-		 repository    ='./';
-		 prefix        ='model.';
-		 trunkprefix   ='';
-		 steps         =[];
-		 requestedsteps=[0];
-		 %}}}
-	 end
-	 methods
-		 function org=organizer(varargin) % {{{
+		repository    ='./';
+		prefix        ='model.';
+		trunkprefix   ='';
+		steps         =[];
+		requestedsteps=[0];
+		%}}}
+	end
+	methods
+		function org=organizer(varargin) % {{{
 
-			 %process options
-			 options=pairoptions(varargin{:});
+			%process options
+			options=pairoptions(varargin{:});
 
-			 %Get prefix
-			 prefix=getfieldvalue(options,'prefix','model.');
-			 if ~ischar(prefix),                            error('prefix is not a string'); end
-			 if ~strcmp(regexprep(prefix,'\s+',''),prefix), error('prefix should not have any white space'); end
-			 org.prefix=prefix;
+			%Get prefix
+			prefix=getfieldvalue(options,'prefix','model.');
+			if ~ischar(prefix),                            error('prefix is not a string'); end
+			if ~strcmp(regexprep(prefix,'\s+',''),prefix), error('prefix should not have any white space'); end
+			org.prefix=prefix;
 
-			 %Get repository
-			 repository=getfieldvalue(options,'repository','./');
-			 if ~ischar(repository),        error('repository is not a string'); end
-			 if exist(repository,'dir')~=7, error(['Directory ' repository ' not found']), end
-			 org.repository=repository;
+			%Get repository
+			repository=getfieldvalue(options,'repository','./');
+			if ~ischar(repository),        error('repository is not a string'); end
+			if exist(repository,'dir')~=7, error(['Directory ' repository ' not found']), end
+			org.repository=repository;
 
-			 %Get repository
-			 org.requestedsteps=getfieldvalue(options,'steps',0);
+			%Get steps
+			org.requestedsteps=getfieldvalue(options,'steps',0);
 
-			 %Get trunk prefix (only if provided by user)
-			 if exist(options,'trunkprefix'),
-				 trunkprefix=getfieldvalue(options,'trunkprefix','');
-				 if ~ischar(trunkprefix),                                 error('trunkprefix is not a string'); end
-				 if ~strcmp(regexprep(trunkprefix,'\s+',''),trunkprefix), error('trunkprefix should not have any white space'); end
-				 org.trunkprefix=trunkprefix;
-			 end
-		 end
-		 %}}}
-		 function disp(org) % {{{
-			 disp(sprintf('   Repository: ''%s''',org.repository));
-			 disp(sprintf('   Prefix:     ''%s''',org.prefix));
-			 if isempty(org.steps)
-				 disp('   no step');
-			 else
-				 for i=1:length(org.steps),
-					 disp(sprintf('   step #%2i: ''%s''',org.steps(i).id,org.steps(i).string));
-				 end
-			 end
-		 end
-		 %}}}
-		 function md=load(org,string),% {{{
+			%Get trunk prefix (only if provided by user)
+			if exist(options,'trunkprefix'),
+				trunkprefix=getfieldvalue(options,'trunkprefix','');
+				if ~ischar(trunkprefix),                                 error('trunkprefix is not a string'); end
+				if ~strcmp(regexprep(trunkprefix,'\s+',''),trunkprefix), error('trunkprefix should not have any white space'); end
+				org.trunkprefix=trunkprefix;
+			end
+		end
+		%}}}
+		function disp(org) % {{{
+			disp(sprintf('   Repository: ''%s''',org.repository));
+			disp(sprintf('   Prefix:     ''%s''',org.prefix));
+			if isempty(org.steps)
+				disp('   no step');
+			else
+				for i=1:length(org.steps),
+					disp(sprintf('   step #%2i: ''%s''',org.steps(i).id,org.steps(i).string));
+				end
+			end
+		end
+		%}}}
+		function md=load(org,string),% {{{
 
-			 %Get model path
-			 if ~ischar(string), error('argument provided is not a string'); end
-			 path=[org.repository '/' org.prefix string];
+			%Get model path
+			if ~ischar(string), error('argument provided is not a string'); end
+			path=[org.repository '/' org.prefix string];
 
-			 %figure out if the model is there
-			 if exist(path,'file'),
-				 struc=load(path,'-mat');
-				 name=char(fieldnames(struc));
-				 md=struc.(name);
-				 if nargout,
-					 varargout{1}=md;
-				 end
-			 else
-				 error(['Could not find ' path ]);
-			 end
-		 end%}}}
-		 function md=loadmodel(org,string),% {{{
+			%figure out if the model is there
+			if exist(path,'file'),
+				struc=load(path,'-mat');
+				name=char(fieldnames(struc));
+				md=struc.(name);
+				if nargout,
+					varargout{1}=md;
+				end
+			else
+				error(['Could not find ' path ]);
+			end
+		end%}}}
+		function md=loadmodel(org,string),% {{{
 
-			 %Get model path
-			 if ~ischar(string), error('argument provided is not a string'); end
-			 path=[org.repository '/' org.prefix string];
+			%Get model path
+			if ~ischar(string), error('argument provided is not a string'); end
+			path=[org.repository '/' org.prefix string];
 
-			 %figure out if the model is there, otherwise, we have to use the default path supplied by user.
-			 if exist(path,'file') | exist([path '.mat'],'file'),
-				 md=loadmodel(path);
-				 return;
-			 end
+			%figure out if the model is there, otherwise, we have to use the default path supplied by user.
+			if exist(path,'file') | exist([path '.mat'],'file'),
+				md=loadmodel(path);
+				return;
+			end
 
-			 %If we are here, the model has not been found. Try trunk prefix if provided
-			 if ~isempty(org.trunkprefix),
-				 path2=[org.repository '/' org.trunkprefix string];
-				 if ~exist(path2,'file'),
-					 error(['Could neither find ' path ', nor ' path2]);
-				 else
-					 disp(['--> Branching ' org.prefix ' from trunk ' org.trunkprefix]);
-					 md=loadmodel(path2);
-					 return;
-				 end
-			 else
-				 error(['Could not find ' path ]);
-			 end
-		 end%}}}
-		 function bool=perform(org,string) % {{{
+			%If we are here, the model has not been found. Try trunk prefix if provided
+			if ~isempty(org.trunkprefix),
+				path2=[org.repository '/' org.trunkprefix string];
+				if ~exist(path2,'file'),
+					error(['Could find neither ' path ', nor ' path2]);
+				else
+					disp(['--> Branching ' org.prefix ' from trunk ' org.trunkprefix]);
+					md=loadmodel(path2);
+					return;
+				end
+			else
+				error(['Could not find ' path ]);
+			end
+		end%}}}
+		function bool=perform(org,string) % {{{
 
-			 bool=false;
+			bool=false;
 
-			 %Some checks
-			 if ~ischar(string),                            error('Step provided should be a string'); end
-			 if ~strcmp(regexprep(string,'\s+',''),string), error('Step provided should not have any white space'); end
-			 if (org.currentstep>0 & ismember({string},{org.steps.string})) 
-				 error(['Step ' string ' already present. Change name']); 
-			 end
+			%Some checks
+			if ~ischar(string),                            error('Step provided should be a string'); end
+			if ~strcmp(regexprep(string,'\s+',''),string), error('Step provided should not have any white space'); end
+			if (org.currentstep>0 & ismember({string},{org.steps.string})) 
+				error(['Step ' string ' already present. Change name']); 
+			end
 
-			 %Add step
-			 org.steps(end+1).id=length(org.steps)+1;
-			 org.steps(end).string=string;
-			 org.currentstep=org.currentstep+1;
+			%Add step
+			org.steps(end+1).id=length(org.steps)+1;
+			org.steps(end).string=string;
+			org.currentstep=org.currentstep+1;
 
-			 %if requestedsteps = 0, print all steps in org 
-			 if any(org.requestedsteps==0),
-				 if org.currentstep==1,
-					 disp(sprintf('   prefix: %s',org.prefix));
-				 end
-				 disp(sprintf('   step #%2i : %s',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
-			 end
+			%if requestedsteps = 0, print all steps in org 
+			if any(org.requestedsteps==0),
+				if org.currentstep==1,
+					disp(sprintf('   prefix: %s',org.prefix));
+				end
+				disp(sprintf('   step #%2i : %s',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
+			end
 
-			 %Ok, now if currentstep is a member of steps, return true
-			 if ismember(org.currentstep,org.requestedsteps),
-				 disp(sprintf('\n   step #%i : %s\n',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
-				 bool=true;
-			 end
+			%Ok, now if currentstep is a member of steps, return true
+			if ismember(org.currentstep,org.requestedsteps),
+				disp(sprintf('\n   step #%i : %s\n',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
+				bool=true;
+			end
 
-			 %assign org back to calling workspace
-			 assignin('caller',inputname(1),org);
+			%assign org back to calling workspace
+			assignin('caller',inputname(1),org);
 
-		 end%}}}
-		 function savemodel(org,md) % {{{
+		end%}}}
+		function savemodel(org,md) % {{{
 
-			 %check
-			 if (org.currentstep==0), error('Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call'); end
-			 if (org.currentstep>length(org.steps)), error('Cannot save model because organizer (org) is not up to date!'); end
+			%check
+			if (org.currentstep==0), error('Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call'); end
+			if (org.currentstep>length(org.steps)), error('Cannot save model because organizer (org) is not up to date!'); end
 
-			 name=[org.repository '/' org.prefix org.steps(org.currentstep).string ];
-			 disp(['saving model as: ' name]);
+			name=[org.repository '/' org.prefix org.steps(org.currentstep).string ];
+			disp(['saving model as: ' name]);
 
-			 %check that md is a model
-			 if ~isa(md,'model'), warning('third argument is not a model'); end
-			 if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end
+			%check that md is a model
+			if ~isa(md,'model'), warning('second argument is not a model'); end
+			if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end
 
-			 %save model
-			 save(name,'md','-v7.3');
-		 end%}}}
+			%save model
+			save(name,'md','-v7.3');
+		end%}}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/organizer.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/organizer.py	(revision 13946)
+++ /issm/trunk-jpl/src/m/classes/organizer.py	(revision 13946)
@@ -0,0 +1,175 @@
+import os.path
+from collections import OrderedDict
+from pairoptions import *
+from loadvars import *
+from loadmodel import *
+from savevars import *
+
+class organizer(object):
+	"""
+	ORGANIZER class definition
+
+	   Supported options:
+	      repository: directory where all models will be saved
+	      prefix:     prefix for saved model names
+	      steps:      requested steps
+	      trunkprefix:prefix of previous run with a different prefix. Used to branch.
+
+	   Usage:
+	      org = organizer(varargin)
+
+	   Examples:
+	      org = organizer('repository','Models/','prefix','AGU2015','steps',0);  %build an empty organizer object with a given repository
+	"""
+
+	def __init__(self,*args):    # {{{
+		self._currentstep  =0
+		self.repository    ='./'
+		self.prefix        ='model.'
+		self.trunkprefix   =''
+		self.steps         =[]
+		self.requestedsteps=[0]
+
+		#process options
+		options=pairoptions(*args)
+
+		#Get prefix
+		prefix=options.getfieldvalue('prefix','model.')
+		if not isinstance(prefix,(str,unicode)):
+			raise TypeError("prefix is not a string")
+		if not strcmp(prefix,prefix.strip()) or len(prefix.split()) > 1:
+			raise TypeError("prefix should not have any white space")
+		self.prefix=prefix
+
+		#Get repository
+		repository=options.getfieldvalue('repository','./')
+		if not isinstance(repository(str,unicode)):
+			raise TypeError("repository is not a string")
+		if not os.path.isdir(repository):
+			raise IOError("Directory '%s' not found" % repository)
+		self.repository=repository
+
+		#Get steps
+		self.requestedsteps=options.getfieldvalue('steps',[0])
+
+		#Get trunk prefix (only if provided by user)
+		if options.exist('trunkprefix'):
+			trunkprefix=options.getfieldvalue('trunkprefix','')
+			if not isinstance(trunkprefix(str,unicode)):
+				raise TypeError("trunkprefix is not a string")
+			if not strcmp(trunkprefix,trunkprefix.strip()) or len(trunkprefix.split()) > 1:
+				raise TypeError("trunkprefix should not have any white space")
+			self.trunkprefix=trunkprefix
+	#}}}
+
+	def __repr__(self):    # {{{
+		s =""
+
+		s+="%s\n" % "   Repository: '%s'" % self.repository
+		s+="%s\n" % "   Prefix:     '%s'" % self.prefix
+		if not self.steps:
+			s+="%s\n" % "   no step"
+		else:
+			for step in self.steps:
+				s+="%s\n" % "   step #%2i: '%s'",step['id'],step['string']
+	#}}}
+
+	def load(self,string):    # {{{
+
+		#Get model path
+		if not isinstance(string,(str,unicode)):
+			raise TypeError("argument provided is not a string")
+		path=os.path.join(self.repository,self.prefix+string)
+
+		#figure out if the model is there
+		if os.path.exists(path):
+			struc=loadvars({},path)
+			name=name=[key for key in struc.iterkeys()]
+			md=struc.name[0]
+		else:
+			raise IOError("Could not find '%s'" % path)
+
+		return md
+	#}}}
+
+	def loadmodel(self,string):    # {{{
+
+		#Get model path
+		if not isinstance(string,(str,unicode)):
+			raise TypeError("argument provided is not a string")
+		path=os.path.join(self.repository,self.prefix+string)
+
+		#figure out if the model is there, otherwise, we have to use the default path supplied by user.
+		if os.path.exists(path):
+			md=loadmodel(path)
+			return md
+
+		#If we are here, the model has not been found. Try trunk prefix if provided
+		if self.trunkprefix:
+			path2=os.path.join(self.repository,self.trunkprefix+string)
+			if not os.path.exists(path2):
+				raise IOError("Could find neither '%s' nor '%s'" % (path,path2))
+			else:
+				print "--> Branching '%s' from trunk '%s'" % (self.prefix,self.trunkprefix)
+				md=loadmodel(path2)
+				return md
+		else:
+			raise IOerror("Could not find '%s'" % path)
+	#}}}
+
+	def perform(self,string):    # {{{
+
+		bool=False
+
+		#Some checks
+		if not isinstance(string,(str,unicode)):
+			raise TypeError("Step provided should be a string")
+		if not strcmp(string,string.strip()) or len(string.split()) > 1:
+			raise TypeError("Step provided should not have any white space")
+		if self._currentstep>0 and string in [step['string'] for step in self.steps]:
+			raise RuntimeError("Step '%s' already present. Change name" % string) 
+
+		#Add step
+		self.steps.append(OrderedDict())
+		self.steps[-1]['id']=len(self.steps)+1
+		self.steps[-1]['string']=string
+		self._currentstep+=1
+
+		#if requestedsteps = 0, print all steps in self 
+		if any(self.requestedsteps==0):
+			if self._currentstep==1:
+				print "   prefix: %s" % self.prefix
+			print "   step #%2i : %s" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
+
+		#Ok, now if _currentstep is a member of steps, return true
+		if self._currentstep in self.requestedsteps:
+			print "\n   step #%i : %s\n" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
+			bool=True
+
+		#assign self back to calling workspace
+		# (no need, since Python modifies class instance directly)
+
+		return bool
+	#}}}
+
+	def savemodel(self,md):    # {{{
+
+		#check
+		if self._currentstep==0:
+			raise RuntimeError("Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call")
+		if self._currentstep>len(self.steps):
+			raise RuntimeError("Cannot save model because organizer (org) is not up to date!")
+
+		name=os.path.join(self.repository,self.prefix+self.steps[self._currentstep-1]['string'])
+		print "saving model as: '%s'" % name
+
+		#check that md is a model
+		if not isinstance(md,model):
+			print("second argument is not a model")
+		if self._currentstep>len(self.steps):
+			raise RuntimeError("organizer error message: element with id %d not found" % self._currentstep)
+
+		#save model
+		savevars('md',md,name)
+	#}}}
+
Index: /issm/trunk-jpl/src/m/classes/verbose.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.py	(revision 13945)
+++ /issm/trunk-jpl/src/m/classes/verbose.py	(revision 13946)
@@ -17,5 +17,4 @@
 	      qmu         : sensitivity analysis
 	      autodiff    : AD analysis
-
 
 	   Usage:
