Development¶
Git workflow¶
We use a fork-based workflow. The steps are:
- Fork ShipSoft/FairShip on GitHub.
-
Clone your fork locally:
-
Add the official repository as a remote:
-
Keep your fork up to date:
-
Create a branch for your work:
-
Push and open a pull request:
Then open a PR from your fork to
ShipSoft/FairShipon GitHub.
Commit messages¶
- Write a short (< 72 characters) summary on the first line.
- Optionally add a blank line followed by a more detailed explanation.
- Code must at least compile before you open a PR.
C++ guidelines¶
See also the C++ Core Guidelines.
General¶
- NEVER use
using namespacein headers. - Prefer
static_cast,dynamic_cast, orreinterpret_castover C-style casts. - Prefer range-based for loops.
- Prefer STL containers over ROOT containers.
- Prefer smart pointers over raw pointers.
- Consider using
autoto reduce type verbosity.
FairRoot/FairShip specific¶
- Use
LOG(SEVERITY)macros instead ofstd::coutor legacyFairLoggermethods. - Use
TFile::Openrather than directTFileconstructors. - Prefer STL vectors and
RVecoverTVectorT. - Prefer
std::stringoverconst char*andTString.
Python guidelines¶
See also the Google Python Style Guide.
General¶
- ALWAYS use
ruff format(for new code) andruff check. - ALWAYS place import statements at the top of the file.
- NEVER run non-trivial code at module top-level scope; hide it behind
if __name__ == "__main__":. - Prefer iterating over containers to manual indexing.
- Prefer
argparseovergetopt. - Use f-strings or
str.format()rather than%-formatting.
FairRoot/FairShip specific¶
- Prefer STL vectors,
RVec, orGenVectoroverTVectorT. - Prefer STL containers or
RTensoroverTMatrix. - Use
len()instead of.size()and.GetEntries()(supported for STL containers,TCAs,TTrees, Pythia8 events, and many other data types).
Getting help¶
Contact ship-software@cern.ch.