HERD Offline Software Naming and Coding Conventions¶
Definitions, of different naming conventions¶
see also https://devopedia.org/naming-conventions
Camel Case:
name consists of meaningful words or abbrs,
the first letter of every word, but the first, is capitalized, with no spaces or symbols between words.
Examples:
userAccount,fedEx,wordPerfect.in case the first word very short (1 letter), the second word starts with lowercase, e.g.
ibin,ntrack,
Pascal Case:
like the Camel Case, but all the word starts with uppercase.
Thus,
UserAccountis in Pascal Case but notuserAccount.
Screaming Case: This refers to names in uppercase, with underscore between words.
Example:
TAX_RATE.
Package: Naming and Directory Conventions¶
Package name: Pascal Case. e.g.:
DetectorSimulationorDetSimEach package may include sub-directories: src, ¡°include¡±, python, scripts, compact, g4macro, ¡
CMakeList.txtin the Package directory and defines all the building tools<PackageName>/: header files to be exported:*.hh(triditionally inincludedir)src/: implementation files:*.ccpython/: exported python package (for sniper):*.pyscripts/: python scripts for running and testingcompact/: DD4HEP compact detector descriptions, for detector geometry definitiong4macro/: GEANT4 runtime macro files*.g4mac
Coding Conventions¶
Naming¶
Namespaces: lower case, short
Class names: Pascal Case, e.g. SimulationAlg
Variables:
Data members are defined in the order of the type: public, protected and private.
Data members prefixed with m:
mEnergyStatic variables begin with s:
sCountConstants begin with k or in Screaming Case:
kGainRatioGlobal variables begin with g:
gEnv
Functions:
function names: Camel Case:
setEnergy()[under discussion] getter/setter functions should correlate with variables:
mEnergy/setEnergy()/energy()if complex returning object, or complex calculation, the getter starts with
get:getDetectorDescription()for simple type, e.g. numbers, strings, three vectors, ¡ getter w/o ¡°get¡± prefix:
energy(),position()
Locals and parameters: Camel Case :
nbytes,recoEnergy
Other¶
Header files:
One header file usually for one class, except internal class definitions
Avoid duplication in header files:
#pragma once
or traditional include guard if you prefer:
#ifndef NAMESPACE_CLASSNAME_H #define NAMESPACE_CLASSNAME_H ... #endif//NAMESPACE_CLASSNAME_H
Inline functions should be defined in the header files
Including external header files:
#include <package/header.h>Including local header files:
#include ¡°header.h¡±
Indention (for C++ code):
use spaces, avoid tabs
3 spaces for each level recommended
open braces
{shall stand in it¡¯s own line, unless in}else{(recommended)
Data members should be initialized in the constructors of the class.
Documentations in Comments¶
Line comments starts with
//Block comments:
/** * ... */
or
/* ... */
Each header file should have comments include the class definition, developer and e-mail.
Each function member and data member should have line comments in definition
Functions definitions shall have at least a brief introduction before them
Try to follow the doxygen rules: http://doxygen.nl/manual/docblocks.html
e.g.:
/**
* Get the total energy based on calo cell hits.
*
* @param algo select algorithm, 1=new, 0=old
*
*/
double getTotalEnergy(int algo)
{
// some calculation
}
Read more¶
a further detailed guide (but slight different) can be found in FCCSW: https://github.com/jlingema/FCCSW/blob/master/doc/CppCodingStyleGuidelines.md