#!/bin/bash # compile java program with javac # usage: # myjava xxx.java # copyright @ http://scriptdemo.blogspot.com if [ $# -eq 0 ]; then sed -n '2,4p' myjava exit else srcfile=$1 nf=`echo ${srcfile} | awk -F. '{print NF}'` if [ $nf -eq 1 ]; then exefilename=${srcfile} srcfile=${srcfilename}.java elif [ $nf -eq 2 ]; then exefilename=`echo ${srcfile} | awk -F. '{print $1}'` else myjava exit fi if [ -e ${srcfile} ]; then javac ${srcfile} java -classpath . ${exefilename} elif [ -e ${exefilename} ];then java -classpath . ${exefilename} else echo "${srcfile} can\'t be found in current directory!" exit fi fi |
Sunday, January 30, 2011
compile java program with javac
Tuesday, January 18, 2011
compile java program with gcj
#!/bin/bash # compile java program with gcj # usage: # mygcj myMain.java [otherJavaFiles] # copyright @ http://scriptdemo.blogspot.com if [ $# -eq 0 ]; then sed -n '2,4p' mygcj exit else numfile=$# IsMain=1 myfiles="" for srcfile in $* do nf=`echo ${srcfile} | awk -F. '{print NF}'` if [ $nf -eq 1 ]; then srcfilename=${srcfile} srcfile=${srcfilename}.java elif [ $nf -eq 2 ]; then srcfilename=`echo ${srcfile} | awk -F. '{print $1}'` fi [ ! -e ${srcfile} ] && echo "${srcfile} can\'t be found in current directory!" && exit if [ $IsMain -eq 1 ]; then mainfile=$srcfilename; IsMain=0 fi myfiles="${myfiles} ${srcfile}" done gcj ${myfiles} --main=${mainfile} -o ${mainfile} fi |
Friday, January 7, 2011
Write netcdf file using matlab native functions
Check the help page from Mathworks for new version Matlab
Please leave your comments to help improve the code in the future. Your help is greatly appreciated! function SaveNcVarMatlab(ncfile,ncvar,MagicTag,myValue,myDType) % to save a variable to a netcdf file using native matlab netcdf-functions % Usage: SaveNcVarMatlab(nc-filename,nc-varname,MagicTag,myValue,[myDType]) % e.g., % 1: to save a 4D data % SaveNcVarMatlab('mask.nc','tmask',{'t','z','y','x'},4D-data,'float'); % if the nc-file exist, the code will try to append data to old % file as long as the dimensions of input data is consistent % with existing one. If necessary, new dimensions will be added % automatically. % 2: to add an attribute to an variable in existing nc file % SaveNcVarMatlab('mask.nc','tmask','att','long_name','mask at t-point') % Will overwrite existing one automatically. If no value set to % the attribute, the code will try to delete that attribute. % 3: add/delete a global attribute, similar to the second example % but won't use ncvar here. % Note: % Overwriting an existing variable is possible but disabled in % this version. Also unlimited dimension is not considered % here. % copyright @ http://scriptdemo.blogspot.com % ref: matlab netcdf help if nargin<4 help SaveNcVarMatlab; return; end if iscell(MagicTag) if nargin~=5 help SaveNcVarMatlab return end elseif ischar(MagicTag) if ischar(myValue) tmpstr=myValue; clear myValue myValue.name=tmpstr; clear tmpstr if nargin==5 myValue.value=myDType; else myValue.value=''; end elseif isstruct(myValue) if ~isfield(myValue,'name') help SaveNcVarMatlab; return; else if ~isfield(myValue,'value') if nargin==5 myValue.value=myDType; else myValue.value=''; end end end elseif ~isstruct(myValue) disp('Not valid value for myValue.') help SaveNcVarMatlab return end end % to support my work, please keep the "creator" global attribute mycreatorstr='SaveNcVarMatlab.m from http://scriptdemo.blogspot.com'; if iscell(MagicTag) % add values [ncfid,IsAppend,OldNC,IsOldVar,OldVar]=CheckNCExist(ncfile,ncvar); if length(MagicTag)==1 myValue=reshape(myValue,[],1); vardiminput=length(myValue); else vardiminput=size(myValue); end if IsAppend for nd=1:length(MagicTag) if sum(ismember(OldNC.dimname,MagicTag{nd}))==0 myDim.name{nd}=MagicTag{nd}; myDim.len(nd)=vardiminput(nd); myDim.IsNew(nd)=1; else dim_loc=find(ismember(OldNC.dimname,MagicTag{nd})==1); if OldNC.dimlen(dim_loc)~=vardiminput(nd) disp(['The length of input dimension ',MagicTag{nd},' is not the same as the exist one']) return % should consider unlimite dimension in the future else myDim.name{nd}=MagicTag{nd}; myDim.ID(nd)=OldNC.dimid(dim_loc); myDim.IsNew(nd)=0; end end end else for nd=1:length(MagicTag) myDim.name{nd}=MagicTag{nd}; myDim.len(nd)=vardiminput(nd); myDim.IsNew(nd)=1; end end if IsOldVar % support overwrite??? netcdf.abort(ncfid); return else if IsAppend netcdf.reDef(ncfid); end % define some new dimension for nd=1:length(myDim.name) if myDim.IsNew(nd) myDim.ID(nd)=netcdf.defDim(ncfid,myDim.name{nd},myDim.len(nd)); end end myvarid=netcdf.defVar(ncfid,ncvar,myDType,fliplr(myDim.ID)); netcdf.putAtt(ncfid,netcdf.getConstant('NC_GLOBAL'),'creator',mycreatorstr); netcdf.endDef(ncfid); %netcdf.putVar(ncid,varid,start,count,stride,data) myValue=permute(myValue,length(size(myValue)):-1:1); netcdf.putVar(ncfid,myvarid,myValue); end elseif ischar(MagicTag) [ncfid,IsAppend,OldNC,IsOldVar,OldVar]=CheckNCExist(ncfile,ncvar); if IsAppend switch lower(MagicTag) case {'a','attribute','var_attribute','vatt','att'} if IsOldVar OldVar=GetVAtts(ncfid,OldVar); netcdf.reDef(ncfid); if isfield(OldVar,'attname') if ~isstruct(myValue) %delete attribute if sum(ismember(OldVar.attname,myValue))==1 netcdf.delAtt(ncfid,OldVar.varid,myValue); else disp(['attribute: ',myValue,' not exist. Nothing is done']) netcdf.abort(ncfid); return; end else if sum(ismember(OldVar.attname,myValue.name))==1 %netcdf.delAtt(ncfid,OldVar.varid,myValue.name); if isempty(myValue.value) netcdf.delAtt(ncfid,OldVar.varid,myValue.name); else % overwrite old one automatically netcdf.putAtt(ncfid,OldVar.varid,myValue.name,myValue.value); end else %new attribute if ~isempty(myValue.value) netcdf.putAtt(ncfid,OldVar.varid,myValue.name,myValue.value); end end end else %new attribute if ~isempty(myValue.value) netcdf.putAtt(ncfid,OldVar.varid,myValue.name,myValue.value); end end else disp(['var: ',ncvar,' isn''t exist in ',ncfile]); netcdf.abort(ncfid); return end case {'ga','global_attribute','gatt'} OldNC=GetGAtts(ncfid,OldNC); netcdf.reDef(ncfid); if ~isstruct(myValue) if isfield(OldNC,'attname') if sum(ismember(OldNC.attname,myValue))==1 netcdf.delAtt(ncfid,netcdf.getConstant('GLOBAL'),myValue); else disp(['attribute: ',myValue,' not exist. Nothing is done']) netcdf.abort(ncfid); return; end else disp('No global attributes available.') netcdf.abort(ncfid); return; end else if isfield(OldNC,'attname') if sum(ismember(OldNC.attname,myValue.name))==1 netcdf.delAtt(ncfid,netcdf.getConstant('GLOBAL'),myValue.name); if ~isempty(myValue.value) netcdf.putAtt(ncfid,netcdf.getConstant('NC_GLOBAL'),myValue.name,myValue.value); end else %new global attribute if ~isempty(myValue.value) netcdf.putAtt(ncfid,netcdf.getConstant('NC_GLOBAL'),myValue.name,myValue.value); end end else % also new global attribute if ~isempty(myValue.value) netcdf.putAtt(ncfid,netcdf.getConstant('NC_GLOBAL'),myValue.name,myValue.value); else netcdf.abort(ncfid); return; end end end otherwise disp(['Not defined attribute type: MagicTag: ',MagicTag]) netcdf.abort(ncfid); return; end else netcdf.abort(ncfid); disp([ncfile,' dos not exist, global attribute can''t be added.']) return end netcdf.putAtt(ncfid,netcdf.getConstant('NC_GLOBAL'),'creator',mycreatorstr); netcdf.endDef(ncfid); else disp('Not valid value for MagicTag') return; end %close the file netcdf.close(ncfid); end function [ncfid,IsAppend,OldNC,IsOldVar,OldVar]=CheckNCExist(ncfile,ncvar) IsAppend=0; IsOldVar=0; if exist(ncfile,'file') disp([ncfile,' already exist, try the append mode']); IsAppend=1; end % Open the nc file if IsAppend ncfid=netcdf.open(ncfile,'NC_WRITE'); [OldNC.numdims, OldNC.numvars, OldNC.numGAtt, unlimdimID] = netcdf.inq(ncfid); for NDim=1:OldNC.numdims [OldNC.dimname{NDim}, OldNC.dimlen(NDim)] = netcdf.inqDim(ncfid,NDim-1); OldNC.dimid(NDim)=NDim-1; end for NVar=1:OldNC.numvars [tmpvarname, tmpvarxtype,tmpvardims, tmpvarnumatts] = netcdf.inqVar(ncfid,NVar-1); if strcmp(tmpvarname,ncvar) IsOldVar=1; OldVar.varid=NVar-1; OldVar.varname=tmpvarname; OldVar.varxtype=tmpvarxtype; OldVar.vardimids=tmpvardims; OldVar.numatts=tmpvarnumatts; break; end end if IsOldVar==0 OldVar=nan; end else ncfid=netcdf.create(ncfile,'NC_NOCLOBBER'); OldNC=nan; OldVar=nan; end end function OldVar=GetVAtts(ncfid,OldVar) for numA=1:OldVar.numatts OldVar.attname{numA}=netcdf.inqAttName(ncfid,OldVar.varid,numA-1); % OldVar.attid(numA)=netcdf.inqAttID(ncfid,varid,OldVar.attname{numA}); end end function OldNC=GetGAtts(ncfid,OldNC) for numA=1:OldNC.numGAtt OldNC.attname{numA}= netcdf.inqAttName(ncfid,netcdf.getConstant('NC_GLOBAL'),numA-1); end end |
Monday, January 3, 2011
Post process the html file for blogger using vi script
"function to post-process the html file created by TOhtml for blogger "copyright @ http://scriptdemo.blogspot.com :if exists("TOblogger_loaded") : delfun TOblogger : delfun RePlaceSpace :endif :function TOblogger() :set nowrap :1,$ call RePlaceSpace() :endfunction :function RePlaceSpace() :let line = getline(".") :if line =~ "^\ " : let line = substitute(line,"^\ ",'\ ',"g") : while line =~ " " : let line = substitute(line,' \ ','\ \ ',"g") : endwhile : call setline(".",line) :endif :unlet line :endfunction :let TOblogger_loaded = 1 |
To use it, you need to open the html file first, then
:source TOblogger.vim #using the path if necessary
:call TOblogger()
and save your new html file using :w
Enjoy!
[UPDATED] read netcdf file using native matlab functions
check the ncread for new version matlab from Mathworks.
The attributes of scale factor, offset value and missing value are considered in this version.
The attributes of scale factor, offset value and missing value are considered in this version.
function ncvardata=GetNcVarMatlab(ncfile,ncvar,RangeStr) % to read a variable from the netcdf file using native matlab netcdf-functions % Usage: vardata=GetNcVarMatlab(nc-filename,nc-varname,Dimension-Range) % e.g., % mydata=GetNcVarMatlab('mask.nc','tmask','1:1,1:46,1:400,1:568'); % RangeStr here is similar to the output of ncdump % note: by default, variable will be converted into the class of double, % and the missing value will be converted into nan. % copyright @ http://scriptdemo.blogspot.com IsDebug=0; IsMissingNaN=1; % convert missing values into NaN if ~exist(ncfile,'file') error([ncfile,' can not been found']); return end ncfid=netcdf.open(ncfile,'NC_NOWRITE'); % get dimension length [numdims, numvars, numglobalatts, unlimdimID] = netcdf.inq(ncfid); for NDim=1:numdims [dimname{NDim}, dimlen(NDim)] = netcdf.inqDim(ncfid,NDim-1); end %var infor varid=netcdf.inqVarID(ncfid,ncvar); [varname,varxtype,vardimids,NumAtts]=netcdf.inqVar(ncfid,varid); numdims=length(vardimids); % some variables may have less dimensions %check scale_factor & off_set IsRescale=0; IsMissing=0; myScale=1; myOffSet=0.0; for numA=1:NumAtts tmpattname=netcdf.inqAttName(ncfid,varid,numA-1); switch lower(tmpattname) case {'scale_factor','scalefactor'} IsRescale=1; myscale=netcdf.getAtt(ncfid,varid,tmpattname); case {'add_offset','off_set','offset'} IsRescale=1; myoffset=netcdf.getAtt(ncfid,varid,tmpattname); case {'missing_value','missingvalue','missing'} IsMissing=1; mymissing=netcdf.getAtt(ncfid,varid,tmpattname); otherwise % do nothing end end if IsRescale==1 if (myscale==1 & myoffset==0) IsRescale=0; end else if ~exist('myscale','var') myscale=1; end if ~exist('myoffset','var') myoffset=0; end end if ~exist('RangeStr','var') RangeStr=':'; for nd=2:numdims RangeStr=[RangeStr,',:']; end end IndC=strfind(RangeStr,',');% index of commas if length(IndC)~=numdims-1 disp(['Input dimension range is not correct, should be: ',num2str(numdims),'-d']); return end startstr=''; countstr=''; stridestr=''; for nn=1:length(IndC)+1 if nn==1 tmpstr=RangeStr(1:IndC(1)-1); elseif nn<numdims tmpstr=RangeStr(IndC(nn-1)+1:IndC(nn)-1); else tmpstr=RangeStr(IndC(nn-1)+1:end); end [tmpstart,tmpcount,tmpstride]=GetIndFromStr(tmpstr,':',dimlen(vardimids(numdims-nn+1)+1)); if nn==1 startstr=[num2str(tmpstart),'],']; countstr=[num2str(tmpcount),'],']; stridestr=[num2str(tmpstride),']']; elseif nn==numdims startstr=[',[',num2str(tmpstart),',',startstr]; countstr=['[',num2str(tmpcount),',',countstr]; stridestr=['[',num2str(tmpstride),',',stridestr]; else startstr=[num2str(tmpstart),',',startstr]; countstr=[num2str(tmpcount),',',countstr]; stridestr=[num2str(tmpstride),',',stridestr]; end end if IsDebug disp(['ncvardata=netcdf.getVar(ncfid,varid',startstr,countstr,stridestr,');']); end eval(['ncvardata=netcdf.getVar(ncfid,varid',startstr,countstr,stridestr,');']); netcdf.close(ncfid); ncvardata=permute(ncvardata,length(size(ncvardata)):-1:1); if IsRescale==1 %convert all data type into double if ~strcmp(class(ncvardata),'double') ncvardata=double(ncvardata); end if IsMissing if IsMissingNaN==1; % convert missing values into NaN ncvardata(ncvardata==mymissing)=nan; ncvardata=ncvardata*double(myscale)+double(myoffset); else disp(['missing value for ',ncvar,' is ',num2str(mymissing)]); %IndValid=find(ncvardata~=mymissing); length(IndValid) %ncvardata(IndValid)=ncvardata(IndValid)*double(myscale)+double(myoffset); ncvardata(ncvardata~=mymissing)=ncvardata(ncvardata~=mymissing)*double(myscale)+double(myoffset); end else ncvardata=ncvardata*double(myscale)+double(myoffset); end else ncvardata=double(ncvardata); end function [numstart,numcount,numstride]=GetIndFromStr(tmpstr,ctag,Ndim) % Read the numbers from the special string IsDebug=0; IndC=strfind(tmpstr,ctag); if isempty(IndC) numstart=str2double(tmpstr)-1; numcount=1; numstride=1; else switch length(IndC) case {1} switch IndC case {1} % : and :num if strcmp(tmpstr,':') numstart=0; numcount=Ndim; numstride=1; else if strcmp(tmpstr(2:end),'end') numstart=0; numcount=Ndim; numstride=1; else numstart=0; numcount=str2double(tmpstr(2:end))-1; numstride=1; end end case {length(tmpstr)} if strcmp(tmpstr,':') numstart=0; numcount=Ndim; numstride=1; return else numstart=str2double(tmpstr(1:IndC-1))-1; numcount=Ndim-numstart; numstride=1; end otherwise numstart=str2double(tmpstr(1:IndC-1))-1; if strcmp(tmpstr(IndC+1:end),'end') numend=Ndim; else numend=str2double(tmpstr(IndC+1:end)); end numcount=numend-numstart; numstride=1; end case {2} % num0:stride:num1 if IndC(1)==1 numstart=0; else numstart=str2double(tmpstr(1:IndC(1)-1))-1; end if IndC(2)==IndC(1)+1 numstride=1; else numstride=str2double(tmpstr(IndC(1)+1:IndC(2)-1)); end if IndC(2)==length(tmpstr) numend=Ndim-1; else if strcmp(tmpstr(IndC(2)+1:end),'end') numend=Ndim-1; else numend=str2double(tmpstr(IndC(2)+1:end))-1; end end numcount=floor((numend-numstart)/numstride)+1; numend=numstart+(numcount-1)*(numStride); otherwise error('Not defined range type') end end if IsDebug disp(['tmpstr=',tmpstr]) disp(['start:',num2str(numstart), ' stride:',num2str(numstride),' count:',num2str(numcount)]) end |
Subscribe to:
Posts (Atom)