Mercurial > hg > ltpda
diff m-toolbox/classes/@ltpda_uoh/fromFile.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@ltpda_uoh/fromFile.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,111 @@ +% Construct a ltpda_ob from a file +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: fromFile +% +% DESCRIPTION: Construct a ltpda_ob from a file +% +% CALL: obj = obj.fromFile(filename) +% obj = obj.fromFile(pl) +% +% VERSION: $Id: fromFile.m,v 1.25 2011/10/05 09:50:55 ingo Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function objs = fromFile(obj, pli) + + VERSION = '$Id: fromFile.m,v 1.25 2011/10/05 09:50:55 ingo Exp $'; + + % Which file type are we dealing with? + if ischar(pli) + pli = plist('filename', pli); + end + + % get filename + filename = find(pli, 'filename'); + + % Get the correct parameter set + [path, name, ext] = fileparts(filename); + + % Load a MAT file if the file extension doesn't exist + if isempty(ext) + ext = '.mat'; + filename = strcat(filename, ext); + pli.pset('filename', filename); + end + + % Some display information + import utils.const.* + utils.helper.msg(msg.PROC1, 'load file: %s%s', name, ext); + + switch ext + + case '.fil' + objs = obj.fromLISO(pli); + + case '.mat' + ii = obj.getInfo(class(obj), 'From MAT File'); + ii.setMversion([VERSION '-->' ii.mversion]); + + % Combine input and default plist + pl = combine(pli, ii.plists); + + % Load MAT-File + objs = load(filename); + + fn = fieldnames(objs); + + if (numel(fn) == 1) && (isstruct(objs.(fn{1}))) + % If the read object have only one entry and the this entry is a + % struct then we assume that the struct is a LTPDA object. + + objs = objs.(fn{1}); + + scl = utils.helper.classFromStruct(objs); + if isempty(scl) + if isfield(objs, 'class') + scl = objs.class; + else + error('### The structure does not match any LTPDA object.'); + end + end + if ~strcmp(class(obj), scl) + error('### The structure does not match the chosen LTPDA object constructor. It seems to be a [%s] object.', scl) + end + fcn_name = [class(obj) '.update_struct']; + if ~isempty(objs(1).hist) && ~isempty(objs(1).hist.plistUsed) + struct_ver = sscanf(objs(1).hist.plistUsed.creator.ltpda_version, '%s.%s.%s'); + else + struct_ver = '1.0'; + end + objs = feval(fcn_name, objs, struct_ver); + objs = feval(class(obj), objs); + + elseif (numel(fn) == 1) && (isa(objs.(fn{1}), 'ltpda_obj')) + % If the read object have only one entry and this entry is a LTPDA + % object then return this LTPDA object. + objs = objs.(fn{1}); + + else + objs = obj.fromDataInMAT(objs, pl); + end + + case '.xml' + ii = obj.getInfo(class(obj), 'From XML File'); + ii.setMversion([VERSION '-->' ii.mversion]); + + root_node = xmlread(filename); + objs = utils.xml.xmlread(root_node, class(obj)); + + otherwise + % we load an ascii file + + if pli.isparam('complex_type') + objs = obj.fromComplexDatafile(pli); + else + objs = obj.fromDatafile(pli); + end + + end + +end +