/* mathhdf.tm - MathLink template file for mathhdf.c, Version 1.0 */ :Evaluate: BeginPackage["HDF`"] :Evaluate: GetSDS::usage = "GetSDS[\"hdffile\"] returns the next SDS in hdffile. \ GetSDS[\"hdffile\",n] and GetSDS[\"hdffile\",\"label\"] return the nth \ dataset and dataset having \"label\", respectively. \ The result is returned as a multi-level list. A third parameter \ (positive integer) specifies the interleave, default 1. \ If eg. interleave is 2, then every second point is included, \ this may be useful in debugging with large multidimensional datasets. \ See also PutSDS, AddSDS." :Evaluate: PutSDS::usage = "PutSDS[\"hdffile\",data] writes data as a SDS to \ \"hdffile\", where data is a (possibly multi-level) list of numbers. \ See also AddSDS, GetSDS." :Evaluate: AddSDS::usage = "AddSDS[\"hdffile\",data] appends data as a SDS to \ \"hdffile\", where data is a (possibly multi-level) list of numbers. \ See also PutSDS, GetSDS." :Evaluate: MakeTensor::usage = "MakeTensor[x,{n,m,...}] makes a (n x m x ...) \ tensor out of single-level list x." :Evaluate: Begin["`Private`"] :Begin: :Function: internalGetSDS :Pattern: internalGetSDS[file_String,flag_Integer,nth_Integer,label_String,interleave_Integer] :Arguments: {file,flag,nth,label,interleave} :ArgumentTypes: {String, Integer, Integer, String, Integer} :ReturnType: Manual :End: :Begin: :Function: internalWriteSDS :Pattern: internalWriteSDS[file_String,PutAddflag_Integer,data_List] :Arguments: {file,PutAddflag,data} :ArgumentTypes: {String, Integer, Manual} :ReturnType: Manual :End: :Evaluate: MakeTensor[x_List,dims_List]:= \ Module[ {result=x},\ Scan[(result = Partition[result,#])&, Reverse[dims]];\ First[result] ] :Evaluate: toMultiList[x_List]:=\ MakeTensor[Drop[x,1+Round[First[x]]],Round /@ Take[x,{2,1+Round[First[x]]}]] :Evaluate: GetSDS[file_String]:= toMultiList[internalGetSDS[file,0,1,"",1]] :Evaluate: GetSDS[file_String,nth_Integer?Positive]:=\ toMultiList[internalGetSDS[file,-1,nth,"",1]] :Evaluate: GetSDS[file_String,nth_Integer?Positive,interleave_Integer?Positive]:=\ toMultiList[internalGetSDS[file,-1,nth,"",interleave]] :Evaluate: GetSDS[file_String,label_String]:= toMultiList[internalGetSDS[file,1,1,label,1]] :Evaluate: GetSDS[file_String,label_String,interleave_Integer?Positive]:= \ toMultiList[internalGetSDS[file,1,1,label,interleave]] :Evaluate: PutSDS[file_String,data_List]:= \ (internalWriteSDS[file,1,Flatten[{TensorRank[data],Dimensions[data],data}]]; Null) :Evaluate: AddSDS[file_String,data_List]:= \ (internalWriteSDS[file,0,Flatten[{TensorRank[data],Dimensions[data],data}]]; Null) :Evaluate: End[] :Evaluate: EndPackage[]