Project

General

Profile

Developing With LArSoft » History » Version 85

Katherine Lato, 08/10/2017 11:45 AM

1 3 Lynn Garren
{{>toc}}
2 3 Lynn Garren
3 52 Katherine Lato
h1(count). Developing With LArSoft
4 1 Katherine Lato
5 52 Katherine Lato
h2(count). Quick links for Developing with LArSoft
6 36 Katherine Lato
7 35 Katherine Lato
* " LArSoft repositories packages and dependencies ":https://cdcvs.fnal.gov/redmine/projects/larsoft/wiki/_LArSoft_repositories_packages_and_dependencies_
8 45 Katherine Lato
* "Concepts in LArSoft":http://larsoft.org/important-concepts-in-larsoft/
9 1 Katherine Lato
10 52 Katherine Lato
h2(count). Designing
11 30 Katherine Lato
12 41 Katherine Lato
To design LArSoft code, it's important to understand the core LArSoft suite and all the components used by it. Reference the items below when designing new software.
13 34 Erica Snider
14 52 Katherine Lato
h3(count). LArSoft architecture and design principles
15 1 Katherine Lato
16 61 Gianluca Petrillo
* "Latest architecture document as PDF download":https://cdcvs.fnal.gov/redmine/projects/larsoft-architecture/repository/revisions/master/raw/output/LArSoftArchitecture.pdf
17 76 Katherine Lato
* "Design principles on larsoft.org":http://larsoft.org/important-concepts-in-larsoft/design/
18 1 Katherine Lato
19 85 Katherine Lato
h3(count). LArSoft packages and repositories
20 1 Katherine Lato
21 1 Katherine Lato
  * [[ LArSoft repositories, packages and dependencies ]]
22 85 Katherine Lato
  * [[ LArSoft Geometry Package ]]
23 1 Katherine Lato
24 63 Gianluca Petrillo
h3(count). The _art_ framework
25 29 Katherine Lato
26 66 Katherine Lato
  * "_art_ documentation on WordPress":http://art.fnal.gov for general information 
27 66 Katherine Lato
  * "_art_ documentation in Redmine":https://cdcvs.fnal.gov/redmine/projects/art/wiki for code specific information
28 66 Katherine Lato
  * "_art_ workbook":http://art.fnal.gov/art-workbook/ for examples and tutorials
29 64 Katherine Lato
  * [[Using art in LArSoft]]
30 1 Katherine Lato
31 78 Katherine Lato
h3(count). _gallery_
32 78 Katherine Lato
33 78 Katherine Lato
_gallery_ provides lightweight access to event data in art/ROOT files outside the art event processing framework executable. It is not an alternative framework; rather, it provides a library that can be used to write programs that need to read (but not write) art/ROOT files. Information is available at: http://art.fnal.gov/gallery/
34 78 Katherine Lato
35 52 Katherine Lato
h3(count). External packages
36 1 Katherine Lato
37 67 Katherine Lato
These are package written and maintained by the general physics and computing communities for 
38 1 Katherine Lato
39 36 Katherine Lato
|_.Package|_.Namespace|_.Short description|_.Location of headers|
40 36 Katherine Lato
|"C++":http://www.cplusplus.com/reference/|@std::@|\2. Extensions to base C++ that are part of the standard language|
41 36 Katherine Lato
|"ROOT":https://root.cern.ch|See below|Data-analysis tools|@$ROOT_INC@|
42 36 Katherine Lato
|"CLHEP":http://proj-clhep.web.cern.ch/proj-clhep/|@CLHEP::@|Class Library for High-Energy Physics|@$CLHEP_INC/CLHEP@|
43 36 Katherine Lato
|"Geant4":http://geant4.web.cern.ch/geant4/|See below|Detector simulations|@$G4INCLUDE@|
44 36 Katherine Lato
|"GENIE":http://www.genie-mc.org/|@genie::@|Neutrino Monte-Carlo Generator|@$GENIE_INC/GENIE@|
45 36 Katherine Lato
|"boost":http://www.boost.org/|@boost::@|General programming tools for C++|@$BOOST_INC/boost@|
46 65 Katherine Lato
|[[messagefacility:|Message Facility wiki documentation]]|@mf::@|Service for console messages|@$MESSAGEFACILITY_INC@|
47 72 Gianluca Petrillo
|[[art:wiki#Job-configuration|FHiCL Configuration]]|@fhicl::@|Configuration language and parsing tools|@$FHICLCPP_INC@|
48 42 Katherine Lato
|[[NuSoft and LArSoft|nutools and LArSoft]]|@simb::@ ...|Neutrino platform tools|@$NUTOOLS_INC@|
49 20 Katherine Lato
50 42 Katherine Lato
51 36 Katherine Lato
ROOT and Geant4 do not use namespaces. In general, ROOT classes begin with "T" (e.g., "TTree":http://root.cern.ch/root/html522/TTree.html, "TH1":http://root.cern.ch/root/html522/TH1.html) while "Geant4 classes":http://geant4www.triumf.ca/lxr/ begin with "G4" (e.g., "G4Track":http://geant4www.triumf.ca/lxr/source//track/include/G4Track.hh, "G4Step":http://geant4www.triumf.ca/lxr/source//track/include/G4Step.hh). Exception: Some of the newer ROOT sub-packages have namespaces (such as @ROOT::Math::@, @ROOT::Fit::@, @ROOT::Minuit2::@, @Reflex::@, @TMVA::@).
52 20 Katherine Lato
53 36 Katherine Lato
Some of these packages duplicate functionality; e.g., 4-vectors are implemented in both "ROOT":http://root.cern.ch/root/html522/TLorentzVector.html and "CLHEP":http://proj-clhep.web.cern.ch/proj-clhep/doc/CLHEP_2_1_2_2/doxygen/html/LorentzVector_8h.html. Given a choice, use a package that's higher in the above tables over one that's lower; e.g., choose ROOT classes over their CLHEP equivalents.
54 36 Katherine Lato
55 52 Katherine Lato
h2(count). Writing code
56 1 Katherine Lato
57 47 Katherine Lato
Whether you are writing new code or modifying existing code, please follow the guidelines listed below. There are also development tools and techniques available that can make coding easier.
58 47 Katherine Lato
59 52 Katherine Lato
h3(count). Guidelines
60 47 Katherine Lato
61 80 Katherine Lato
# [[The rules and guidelines|Coding guidelines]]
62 84 Katherine Lato
# [[Code documentation requirements and guidelines]]
63 80 Katherine Lato
# [[Process for contributing code to LArSoft]]
64 80 Katherine Lato
# [[Writing LArSoft service|Guidelines on writing (and using) services in LArSoft]] _(in general)_
65 80 Katherine Lato
# [[Writing LArSoft algorithms|Guidelines on writing (and using) algorithms in LArSoft]] _(not specific to any algorithm)_
66 80 Katherine Lato
# [[Guidelines on using the geometry]]
67 80 Katherine Lato
# [[LArSoft examples|Examples!]]
68 80 Katherine Lato
# [[Some C++ good practices|some C++ suggestions]]
69 1 Katherine Lato
70 60 Katherine Lato
---
71 60 Katherine Lato
72 83 Gianluca Petrillo
h3(count). How to...
73 83 Gianluca Petrillo
74 83 Gianluca Petrillo
* ... [[Use associations|create and use associations]]
75 83 Gianluca Petrillo
76 83 Gianluca Petrillo
---
77 83 Gianluca Petrillo
78 79 Gianluca Petrillo
h3(count). [[Tips on updating your code after LArSoft release]]
79 79 Gianluca Petrillo
80 79 Gianluca Petrillo
---
81 79 Gianluca Petrillo
82 52 Katherine Lato
h3(count). Tools and techniques
83 47 Katherine Lato
84 75 Gianluca Petrillo
h4(count). Documenting and browsing code
85 75 Gianluca Petrillo
86 75 Gianluca Petrillo
* "LArSoft Doxygen":http://nusoft.fnal.gov/larsoft/doxsvn/html/index.html - comments in the code are incorporated into documentation using "the Doxygen tool.":http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html
87 75 Gianluca Petrillo
* "LXR Cross Referencer":http://cdcvs.fnal.gov/lxr/ -  general purpose source code indexer and cross-referencer that provides web-based browsing of source code with links to the definition and usage of any identifier. Supports multiple languages. Includes LArSoft code. Note, pages may take several seconds to load.
88 75 Gianluca Petrillo
89 52 Katherine Lato
h4(count). git and git flow
90 47 Katherine Lato
91 67 Katherine Lato
* [[LArSoft_git_Guidelines|git guidelines]]
92 57 Katherine Lato
* [[cet-is-public:git flow quick start]]
93 67 Katherine Lato
* [[cet-is-public:GitTipsAndTricks|Git Tips and Tricks]]
94 67 Katherine Lato
_(for the purposes of LArSoft development, please please ignore anything other than how to use various git commands to do specific tasks - and especially ignore the workflow advices)_
95 57 Katherine Lato
96 52 Katherine Lato
h4(count). Profiling
97 1 Katherine Lato
98 48 Katherine Lato
* [[memory profiling tools]]
99 48 Katherine Lato
* [[time profiling tools]]
100 48 Katherine Lato
* [[profiling utilities]]
101 48 Katherine Lato
102 52 Katherine Lato
h4(count). Debugging
103 48 Katherine Lato
104 56 Katherine Lato
* [[Debugging LArSoft with Allinea]] 
105 56 Katherine Lato
* [[Debugging LArSoft]] with RogueWave TotalView. (*TotalView is no longer being paid for. Please use Allinea above instead.*)
106 55 Katherine Lato
* [[Debugging with gdb]]
107 60 Katherine Lato
108 60 Katherine Lato
---
109 1 Katherine Lato
110 52 Katherine Lato
h2(count). Building
111 1 Katherine Lato
112 67 Katherine Lato
h3(count). Using the build system
113 1 Katherine Lato
114 36 Katherine Lato
  * *[[Quick Links|Look for experiment specific guides to using and developing LArSoft code ]]*
115 71 Katherine Lato
  *  Choose the correct release from the [[LArSoft release list|List of LArSoft Releases and Release Notes]]. 
116 73 Gianluca Petrillo
  * [[UpdatingToNewRelease|What to do when there is a new release ]] (a.k.a. **[[UpdatingToNewRelease|update LArSoft version]]**)
117 67 Katherine Lato
  
118 67 Katherine Lato
To get write access to the repositories, speak to the offline coordinator for your experiment. If you have a question, send email to larsoft-team@fnal.gov.
119 44 Lynn Garren
120 67 Katherine Lato
h3(count). Understanding CMakeLists.txt and product_deps files
121 67 Katherine Lato
122 1 Katherine Lato
* [[cet-is-public:Cetbuildtools cmake modules]]:  such as @cet_make@ and @cet_add_compiler_flags@. Used in @CMakeLists.txt@ files throughout LArSoft
123 1 Katherine Lato
* [[cet-is-public:Art cmake modules]]: such as @art_make@ and @simple_plugin@. Used in @CMakeLists.txt@ files throughout LArSoft
124 1 Katherine Lato
* [[cet-is-public:Defining products in the CET build environment]]: explains the @product_deps@ file
125 1 Katherine Lato
* [[cet-is-public:AddingProductDependencies|Adding Product Dependencies]]: how to edit the @product_deps@ and @CMakeLists.txt@ files to add dependencies
126 1 Katherine Lato
* [[cet-is-public:CodeTips|Various helpful tips for coding in the CET C++ environment]]: things you hope you never need to know
127 1 Katherine Lato
* [[cet-is-public:Building your own code with cmake]]:  pointer to a _really_ simple example
128 1 Katherine Lato
129 67 Katherine Lato
h3(count). mrb (multi-repository build) tool
130 67 Katherine Lato
131 67 Katherine Lato
* "mrb user guide":https://cdcvs.fnal.gov/redmine/projects/mrb/wiki/MrbUserGuide
132 67 Katherine Lato
* "mrb reference guide":https://cdcvs.fnal.gov/redmine/projects/mrb/wiki/MrbRefereceGuide
133 67 Katherine Lato
* "Documentation for buildtool":https://cdcvs.fnal.gov/redmine/projects/cet-is-public/wiki/Buildtool_script
134 67 Katherine Lato
** mrb calls @buildtool@ (from the @cetbuildtools@ product) to perform the build. 
135 67 Katherine Lato
136 67 Katherine Lato
h3(count). ups
137 67 Katherine Lato
138 77 Katherine Lato
* "Getting Started with UPS":https://cdcvs.fnal.gov/redmine/projects/ups/wiki/Getting_Started_Using_UPS and "About UPS":https://cdcvs.fnal.gov/redmine/projects/cet-is-public/wiki/AboutUPS 
139 67 Katherine Lato
* [[cet-is-public:AboutQualifiers|About qualifiers]]:  the things after "-q" in setup <prod> <ver> -q <qual>
140 67 Katherine Lato
* "More Relocatable UPS Documentation":https://cdcvs.fnal.gov/redmine/projects/ups/wiki/Documentation
141 36 Katherine Lato
142 38 Katherine Lato
h2(count). Testing
143 1 Katherine Lato
144 76 Katherine Lato
High-level description of testing is available at "larsoft.org":http://larsoft.org/larsoft-testing/
145 38 Katherine Lato
146 38 Katherine Lato
h3(count). LArSoft Continuous Integration (CI) system
147 36 Katherine Lato
148 52 Katherine Lato
  * "High-level description of CI":http://larsoft.org/continuous-integration/
149 82 Vito Di Benedetto
  * "CI results display page":http://lar-ci-history.fnal.gov/LarCI/app
150 82 Vito Di Benedetto
  * [[lar_ci:| LAr-Continuous-Integration subproject wiki]]
151 1 Katherine Lato
152 67 Katherine Lato
h2(count). Submitting for next release
153 36 Katherine Lato
154 52 Katherine Lato
After designing, coding, building and testing a piece of software, submit it to the LArSoft development branch so it is included in a new release.
155 42 Katherine Lato
156 42 Katherine Lato
* [[Getting new code into a LArSoft release]]  _(Procedures and policies for making changes to LArSoft releases)_
157 81 Katherine Lato
158 81 Katherine Lato
Also look at  [[Process for contributing code to LArSoft]].