Package in LhSoft

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

  1. 当程序运行中需要输出信息时,请不要用cout或者printf等C++方法,而是使用以下类似方法:
    1. LogDebug <<" ......" <<std::endl;
    2. LogFatal <<"......"<<std::endl;
  2. LodeStar 定义了6个级别的输出,分别为
    1. #define LogTest SNIPERLOG(0) #define LogDebug SNIPERLOG(2) #define LogInfo SNIPERLOG(3) #define LogWarn SNIPERLOG(4) #define LogError SNIPERLOG(5) #define LogFatal SNIPERLOG(6)
  3. 根据信息的性质,选择以上六个中的一个,实际运行中,可以设置输出级别从而限制输出的数量
  4. 使用时,需要 #include "SniperKernel/SniperLog.h"

-- 祝 成光 - 2020-04-09

Comments


Edit | Attach | Watch | Print version | History: r7 < r6 < r5 < r4 < r3 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r6 - 2020-04-15 - ZhuChengguang
 
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback