科研文件整理与编程习惯

1. 科研目录配置

1.1 根目录

对于台式机与笔记本,根目录为~/Documents/,如:/Users/yao/Documents
对于超算集群服务器,根目录为大容量用户根目录,如:

ada:/scratch/user/hengkai.yao/
ls5:/scratch/06660/hengkai/
normal:/home/hengkai/

1.2 一级目录

一级目录设置4个主目录,全部大写:

<rootpath>/SOFTWARE #软件、模式等工具包
<rootpath>/DATA #非本人生成的数据
<rootpath>/WORK #工作目录
<rootpath>/pub #分享和公开目录

1.3 二级目录

1.3.1 SOFTWARE

<rootpath>/SOFTWARE/Matlab/Packages/ROMS_matlab
<rootpath>/SOFTWARE/Matlab/Toolboxes
<rootpath>/SOFTWARE/Python/tutorial
<rootpath>/SOFTWARE/ROMS/Roms_tools
<rootpath>/SOFTWARE/WRF/Packages
...

1.3.2 DATA

<rootpath>/DATA/AVISO
<rootpath>/DATA/ETOPO1
<rootpath>/DATA/ETOPO2
<rootpath>/DATA/ARGO
<rootpath>/DATA/JAMSTEC
<rootpath>/DATA/CESM
<rootpath>/DATA/CMEMS
<rootpath>/DATA/GSHHG

1.3.3 WORK

<rootpath>/WORK/Models
<rootpath>/WORK/Papers
<rootpath>/WORK/Projects
<rootpath>/WORK/trials

1.3.3.1 WORK/Models 三级目录

四级目录为具体模式,五级目录为某一类文件,六级目录为某一个项目,七级目录可包含archive存档目录。
五级目录中通常包含src,run,doc等。

<rootpath>/WORK/Models/CRCM
<rootpath>/WORK/Models/CRESM
<rootpath>/WORK/Models/WPS
<rootpath>/WORK/Models/WRF
<rootpath>/WORK/Models/ROMS/atm
<rootpath>/WORK/Models/ROMS/bry
<rootpath>/WORK/Models/ROMS/grid/kuro03
<rootpath>/WORK/Models/ROMS/ini/kuro03
<rootpath>/WORK/Models/ROMS/input
<rootpath>/WORK/Models/ROMS/nudg
<rootpath>/WORK/Models/ROMS/run/kuro03
<rootpath>/WORK/Models/ROMS/src

1.3.3.2 /WORK/Projects

根文件夹:01_Project_name
一级文件夹:01_Code、02_Output、03_Figure

  1. Code-涉及到的程序:如-cal.m 和 -plot.m
  2. Output-涉及到中间过程保存的变量:如.mat
  3. Figure-涉及到的画出的图片
  4. 一级文件夹下可包含old文件夹,存放可能存在错误的文件

2. 文件命名规则

  1. 起始项为数据来源:如 OFES10_
  2. 中间项为变量内容:如 heat_flux_
  3. 中二项为执行动作:如 cal_
  4. 结尾项为版本次数:如 01,当01版本下出现更多子版本时,使用 01_01_
  5. 后缀项为扩展名:.m.png.mat.fig

Tips:

  • 命名对应的-cal.m-plot.m-.mat-.png应统一版本次数“01”“02”
  • 图片输出格式最好为.png,投稿论文使用.pdf
  • -cal.m要在末尾save .mat文件给Output文件夹,一个-cal文件通常只save一个.mat文件

3. 编程习惯

3.1 一个良好的编程题头习惯

  • 动词+名词:程序简介:Purpose:
  • 生成时间:create on 2017-08-04,by Hengkai Yao,@Laoshan OUC
  • 修改时间:revise on 2017-10-07
  • 程序的题头应充分写明程序的作用,涉及的输入输出变量,变更事项及修改时间,新文件版本应完全拷贝前一版本的文件后再做修改

3.2 一个良好的对齐习惯

  • 使用Ctl+I只能对齐
  • 确定在系统默认的10号字大小下
  • 使用同一字母数字大小的字体,如 YaHei Consolas Hybrid
  • 使用空格隔开字母、数字、符号等、

3.3 一个良好的变量名习惯

  • 驼峰式,小写开头,大小写混合
  • 循环:iLevel,nLevel;jPosition,nPosition
  • 单个变量+No:tableNo
  • 常量、全局变量用全部大写及下划线
  • 结构体:大写开头,大小写混合,如Segment.length.
  • 函数:全小写,但Compute、Find、Initialize、is应大写开头,大小写混合

3.4 一个良好的m文件编辑习惯

  • 模块化,不宜超过两页80列
  • 多次调用封装函数,单次调用只作为子函数
  • 每个函数都写一个测试脚本
  • 在嵌套式循环的时候应该在end行加上注释
  • 在文件开始部分的注释中为重要变量编写文档
  • 在语句行注释的最后为常数编写文档
  • 应该避免复杂的条件表示式,而采用临时逻辑变量进行替代
  • 在if else 结构的时候,发生较频繁的事件应该放在if 部分,例外情况放在else部分
  • 浮点常数应该在小数点前面写上一个阿拉伯数据
  • clc;clear;close all在一般的M文件开头,写这三个东西
  • 文件结束应在屏幕输出结束提示'Program finished.',最后发送一条邮件给自己,以便知道程序运行结束。

一个function的例子:

    %================================================================
    % 功能:  求圆孔的夫琅禾费衍射光强分布
    % 参数:  CircleHoleFD为圆孔结构体,包含圆孔衍射相关信息;
    %          theta为衍射场的次波方向,可以为向量,求取各方向的光强
    % 返回值: I为衍射光强分布
    % 主要思路:使用夫琅禾费单缝衍射公式计算
    % 备注:   入射角只考虑一个维度的
    % 调用方法:见CalcCircleHoleFD_Test文件
    % 日期:   2011/7/12 20:37
    %================================================================
function vonz = func_zsurf(var, zfield, zval, dbm)
%----------------------------------------------------------------
% Description : Extract variable at specified z-surface (depth or isopycnal). 
%                  This is a slightly modified version of sigma2z.m taken from
%                  Francois Colas (belongs to ROMS TOOLS or not??).
%
% Input  : 1. var    (3D ZYX Matrix) - variable to be extracted 
%          2. zfield (3D ZYX Matrix) - extract based on this field  (can be +ve/-ve)
%          3. zval   (scalar)        - extract var on zfield=zval surface  (    "  )
%          4. dbm    (scalar,optional) - debug mode, 1 for debugging and 0 for not.
%                                       (overrides the global variable "dbmod").
%
% Global  : dbmod  (scalar) - debug mode, 1 for debugging and 0 for not
%                                                                            
% Output : vonz (2D YX Matrix): variable on specified Z-surface
%
%
% Based on   : sigma2z.m ( c/o Francois Colas )
% Written By : UCLA ROMS Team (jaison@atmos.ucla.edu)
% Written On : June/11/2008
% Copyright @ UCLA ROMS Team
% Tool       : Eddy Tracker
% Version    : 1.0
%
%----------------------------------------------------------------

Ref: http://blog.sciencenet.cn/blog-437026-779476.html

鸣谢

特别感谢郭师兄的大力帮助!

另附一篇NATURE发表的“The key to a happy lab life is in the manual”(“如何做一只快乐的科研狗”)
以及一篇文章作者Mariam Aly所在实验室的Manual

p.s.

有时matlab不识别文件路径中的减号“-”,建议都用下划线"_"。

Last modification:October 20th, 2019 at 07:30 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment