MAUS_Development

MAUS DEVELOPMENT
A. Dobbs, Software Workshop, CM43
MANAGING THE CODE
 MAUS version controlled with Bazaar
 MAUS distributed using Launchpad: https://launchpad.net/maus
 Development code branch: bzr branch lp:maus/merge
 Release code branch: bzr branch lp:maus
 Merge branch managed by gatekeepers – “MAUS Maintainers”
R. Bayes, A. Dobbs, D. Rajaram, C. Rogers, Y. Karadzhov
 Release branch managed by gatekeepers – “MAUS release managers”
A. Dobbs, D. Rajaram, C. Rogers
 Automated test server (Jenkins): http://test.mice.rl.ac.uk/
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
2
DEVELOPMENT SUBGROUPS
 Core MAUS and API (A. Dobbs)
 Geometry and CDB (R. Bayes)
 Detectors:
 Global Tracking (M. Uchida)





CKOV (A. Liu)
EMR (F. Drilesma)
KL (M. Bogomilov)
TOF (D. Rajaram)
Tracker (P. Kyberd)
 G4BeamLine (J. Nugent)
28/10/2015
 Monte Carlo (C. Rogers)
 Online Reconstruction (C. Rogers)
 Unpacking (Y. Karadzhov)
……
MAUS DEVELOMENT, A. DOBBS, CM43
3
WRITING CODE FOR MAUS
 Clear
 Write for other people to understand (clever is not always better)
 Lots of comments explaining what you are doing throughout, sensible names
 Document all classes, members, functions with Doxygen comments
 Obey the Style Guide (pass the style tests)
 Reliable and Efficient





Do not tolerate compiler warnings, watch your build and fix
No (more) memory leaks
Fail with error message or throws, not seg faults
Modular code with well defined interfaces (Encapsulation principle)
As efficient as possible (e.g. consider loop structures carefully)
 Thoroughly Tested
 Unit tests (keep line coverage at 80% or more, check with cpplint and pylint)
 Integration tests
 Stress your code, look for ways to break it
 Documentation (Doxygen, User guide, Workbook, MICE note…)
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
4
COLLABORATIVE DEVELOPMENT
 Set up an account on Launchpad, add an ssh key, login from Bazaar locally
 Use ‘feature branches’
 Make a fresh copy of lp:maus/merge for every distinct job you are working on – don’t have a onesize fits all dev branch you do everything in
 Keep your branches up to date with the central merge branch (pull down changes
regularly):
bzr pull lp:maus/merge
or bzr merge lp:maus/merge
 Consider how the changes you make will affect others, now and later (e.g. you
improve an ugly interface but 5 five people’s analysis codes stop working – was it
worth it?)
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
5
SUBMITTING CODE FOR MERGE
 Push your feature branch to Launchpad
under your account:
bzr push lp:~username/maus/foo
 Run the code through Jenkins and iterate
until it passes (ask if you need an account
on the Jenkins server)
 Make sure to include integration tests – must be
called explicitly in the Configure part of your
Jenkins jobs, not part of install_build_test.bash
script
 Propose your branch for merging via
Launchpad
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
6
MAUS MAINTAINERS
 R. Bayes, A. Dobbs, D. Rajaram, C. Rogers, Y. Karadzhov
 Allowed to merge code into the central merge branch
 Responsible for only accepting suitable code for merging
 Responsible for any Jenkins breaks that occur as a result of their merge
 Responsible for preserving the branch commit history
 Pull down a clean copy of lp:maus/merge, merge in changes, then push back
 Do not pull changes from lp:maus/merge into a local dev branch then push this back – overwrites
commit history of merge branch
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
7
REMAINING STEP IV WORK
 Finish optimisation of final tracker track fit
 Complete efficiency and performance study of tracker software and publish
 Finish CKOV work
 Finish Global tracking and efficiency studies
 Add data quality check flags for all detectors
 Sort out any remaining issues with coordinate system translations
 Add event viewer to MAUS as a third party
 Expanded tests (focus on integration tests)
 Finish new Online Reconstruction framework
 Fix memory leaks and other remaining bugs (still finding them fairly regularly)
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
8
IDEAS
 C++11 support now on in merge branch (multithreading, smart pointers, auto,
lambdas…)
 May convert from Bazaar and Launchpad to Git and GitHub (better systems, price
in short term in porting code and learning new system)
 Possibly upgrade build system (SCons slow and less favoured, CMake used by
ROOT, GEANT4, same costs if covert as above)
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
9
MORE INFORMATION
 MAUS Developer Documentation wiki:
http://micewww.pp.rl.ac.uk/projects/maus/wiki/MAUSDevs
 Detailed guide to setting up and using bazaar, branching from the merge branch,
submitting code, etc: http://micewww.pp.rl.ac.uk/projects/maus/wiki/Bzr_usage
 Coding style: http://micewww.pp.rl.ac.uk/projects/maus/wiki/Coding_style
 Doxygen guide: http://www.stack.nl/~dimitri/doxygen/manual/index.html
28/10/2015
MAUS DEVELOMENT, A. DOBBS, CM43
10