LhSoft 的功能单元:pacakge
- package是LHAASO软件的基本功能单元。使数据分析软件编写可以从package模块开始,而不全部从C++代码开始。
- package表现为一个名为xxxx的文件夹,具有相对固定的文件夹结构:
- 源文件(.cc) 文件夹 src
- 头文件 (.h) 文件夹 xxxx,(通常和pacakge名相同)
- 编译文件夹 cmt
- 宏(.py)文件夹 python,
- 编译产生的目标文件的文件夹, 名字根据系统而变
- 可执行宏文件文件夹 share
- 一个pacakge实现一个具体的功能,按照功能分为三种形式:Algorithm(算法),Service(服务),Tool(工具).
- 开发pacakge时,请参照以下规则,以及例子 http://svn.lhaaso.ihep.ac.cn/People/zhucg/tags/Examples/
进行。
- 开发pacakge的过程中参照 LhSoftSVN 说明,使用SVN将code管理起来。
可发布pacakge
- 个人开发的package被合作组官方采用,是个人和所在单位对合作组必须的贡献,也能够对pacakge进行全面debug
- 参照 LhSoftSVN 说明,维护pacakge的版本发展,便于官方发布。
- pacakge发布前的注意事项:
- 应当验证可以被python调用:有正确的python文件夹
- 应当验证可以被其他pacakge调用和链接:有正确的requirements文件内容
- 应当进行深度检验,证明package正确性
- 点击 LhSoftPerson 中pacakge的名字应能在相应网页中查到对pacakge的说明以及验证结果。
- 版本更替时,pacakge内的函数名应尽量保持稳定,如确实需要更改,建议如下:
- 如原函数仍可用,只是形参需要修改,那么保持原函数,增加重载函数。
- 原函数无法使用,一定删除原函数,再增加新函数。
- 用户返回的问题,应及时解决并在下一版本中更正,并收入下一个官方版本。
Package的编写规则
编写规则利于相互交流,自己开发的软件被更多人使用。
1. Package 命名规则
* package名由一个或多个首字母大写的完整单词组成,或者因名字过长,部分或全部单词采用易分辨的缩写代替,例如:DetectorSimulation or
DetSim.
* Service package 应当以Svc结尾, such as
DetcPosSvc , 应当以Tool结尾, such as
DetcPosTool
* package子目录通常包含: cmt,
PackageName, src, share, python. python目录内包含 python配置文件*.py,以便被python主程序调用。share目录通常包含python主程序
* package目录中除了子目录外,维护一个ChangeLog文件,对于每次pacakge的每次更新进行介绍,并描述使用方法
2. C++代码规则
* Data members begin with m_: m_energy
* Function members begin with the capital letter:
SetEnergy ()
* Functions should correlate with variables: m_energy/SetEenergy()/(Get)Energy()
* Each function are encouraged to be written not more than one screen.
* Try to follow the coding
LodeStar used.
3. Comments convention
* Each header file contains information, such as developer, e-mail, changelog
* Each function member and data member should have comments to tell what it is.
4. Log ouput rules: important
- 当程序运行中需要输出信息时,请不要用cout或者printf等C++方法,而是使用以下类似方法:
- LogDebug <<" ......" <<std::endl;
- LogFatal <<"......"<<std::endl;
- LodeStar 定义了6个级别的输出,分别为
-
#define LogTest SNIPERLOG(0)
-
#define LogDebug SNIPERLOG(2)
-
#define LogInfo SNIPERLOG(3)
-
#define LogWarn SNIPERLOG(4)
-
#define LogError SNIPERLOG(5)
-
#define LogFatal SNIPERLOG(6)
- 根据信息的性质,选择以上六个中的一个,实际运行中,可以设置输出级别从而限制输出的数量
- 使用时,需要 #include "SniperKernel/SniperLog.h"
Comments