Code: Difference between revisions

From Mu2eWiki
Jump to navigation Jump to search
No edit summary
 
(171 intermediate revisions by 7 users not shown)
Line 1: Line 1:
<table>
<tr>
<td width=25%>__TOC__</td>
<td width=3%></td>
<td>
''mu2e simulation, reconstruction, and analysis code is available as one git repository.  The code is primarily c++, built with scons, with bash scripting, and some perl and python.  Our code depends heavily on external packages such as art and root.  Executables, assembled from shared objects and plug-in modules,  are controlled by fcl scripts.  Pre-built releases are published and available world-wide on cvmfs.''
</td>
<td width=3%></td>
</tr>
</table>
== Building code ==
== Building code ==


* For quick cut and paste...
* [[End of Life for Scientific Linux 7]] Instructions needed for June 2024 only.
checking out the main repository, ''with kerberos authentication for committing'':
* [[UPS to Spack Transition]] ongoing from spring 2024
<nowiki>git clone ssh://p-mu2eofflinesoftwaremu2eoffline@cdcvs.fnal.gov/cvs/projects/mu2eofflinesoftwaremu2eoffline/Offline.git</nowiki>
* [[CodeEnvironment]] how to setup the linux environment
checking out the main repository, ''readonly'':
* [[GitIntro]] code management preliminaries for newcomers
<nowiki>git clone http://cdcvs.fnal.gov/projects/mu2eofflinesoftwaremu2eoffline/Offline.git</nowiki>
* [[OfflineStatus]] which branch or tag of Mu2e Offline you should start from
* git
* [[GitHubWorkflow]] - code repository checkout and commit procedures
* scons
* [[IncludeFiles]] - where to find include files
* Satellite Releases - building only the part of the code base you need
* [[Muse]] - Mu2e code setup and build scripts
*    Base releases and test releases.
* [[scons]] - internal commercial build tool, called by Muse
* [[Building Offline with cmake]] - DAQ is building Offline using a different commercial tool.
* [[CodeDebugging|Debugging]] code debugging tools and tips
* [https://www.github.com/Mu2e Mu2e github organization]
* [[UPS|UPS]] - using the Fermilab UPS product setup
* [[Redmine]] - a few pieces of code are still in the redmine git repository
* [[CVS]] - a few pieces of code are still in the CVS repository


== References and How-to's ==
== Configuring executables ==
* Mu2e Geometry: The Big Picture
*  [[FclIntro|fcl]] - intro to fcl art job control language
** Notes on the geometry files
** [[FclPaths|paths]] - which modules and what order
* Using random numbers:
** [[FclIOModules|I/O modules]]
** Basic Instructions
** [[MessageLogger|Message logger]]
** Complete Instructions
* [[SearchPaths|Search paths]] - how data, fcl, and other control files are found
* [[SimpleConfig|SimpleConfig]] - another way to input parameters to an executable
* [[Simulation|Simulation]] - an overview
** [[SimulationFCL]] - fcl procedures for MDC2020 and later
** [[Generators]] - generating the first particle
*** [[CORSIKA]] cosmic ray simulation
** [[Staging|Staging]] - how and why of running the simulation in stages
** [[TimeSim|Time simulation]] - adding lifetimes
** [[BunchIntensity|Bunch intensity]] - simulating bunch-to-bunch variations
** [[Mixing|Mixing]] - mixing background and signal simulation
** [[RunNumbers]] - how run numbers ranges are used
* Other applications
** [[EventDisplays]]
** [[Ntuples]] - data access at the interactive level
** [[MachineLearning|Machine learning]] - neural networks


* Magnetic Field Maps.
== Modules, Products, and Services ==
* Conditions Data
* Modules
* products and modules
** [[Modules|Modules]]
** Which names need to match each other.
** [[FclIOModules|I/O modules]]
** The Mantra for making data products.
** [[FilterModules|Filter Modules]]
** listing products and printing their contents
* Products
*   What are Services?
** [[ReadProducts|Reading products]]
**       Services distributed with the framework.
** [[PrintProducts|Listing and printing]]
**           Deprecated art services
** [[MakeProducts|Making data products]]
*   About handles.
** [[Handles]]
*   Filter Modules.
** [[PhysicalVolumeInfoCollection]]
*   Inter-Product References: art::Ptr, art::PtrVector, art::Assns
** [[Provenance]]
*   cet::map_vector: a new class template
** [[CetMapVector|cet::map_vector]]
*   Exceptions: Mu2e policy,  CMS guide to managing exceptions.
** [[SchemaEvolution| Schema Evolution]]
* [[Geometry|Geometry]]
** [http://mu2e-docdb.fnal.gov/cgi-bin/ShowDocument?docid=1120 Units and Coordinate Systems]
* [[Alignment]]
* Random numbers:  
** [[RandomNumbersBasic|Basic Instructions]]
** [[RandomNumbers|Complete Instructions]]
* [[MagneticFieldMaps|Magnetic Field Maps]]
* [[ConditionsData|Conditions Data]]
** [https://mu2einternalwiki.fnal.gov/wiki/CalibrationSets CalibrationSets]
* [[Services|Services]]
** [[ArtServices|Framework services]]
* [[SimpleConfig|SimpleConfig]]
* [[Exceptions|Exceptions]]
* [[MessageLogger|Message logger]]
* [[PyWrap]] - wrap compiled c++ code so it can be used in python
* [https://cdcvs.fnal.gov/redmine/projects/art/wiki/ArtExitCodes art error codes]
* [[Elastic Analysis Facility (EAF)|Elastic Analysis Facility (EAF)]]


== Configuring fcl ==
== Code Management ==
* SimpleConfig
*    Run-time Configuration (.fcl files)
*  Trigger_paths, end_paths and reconstruction on demand.
*    Configuring input and output modules
*    Search path for some run-time files.
*    Using and configuring the message logger


== Code Management ==
* [[Spack]] - setup and build tool to replace UPS and MRB
* [[GitMu2e|The Mu2e git page]]
* [[SpackMaintenance]] - expert procedures and debugging
* Jenkins - a central build platform
* [[Legacy_Access_to_SL7]]
** [[JenkinsMaintenance|Jenkins maintenance]]
* [[MuseMaintenance]] - Muse procedures for experts
** [http://mu2e.fnal.gov/atwork/computing/ops/nightlyBuild/nightly.shtml  Jenkins Nightly build results]
* [[ReleaseList]]
* CVMFS - a distributed disk system to serve tagged, static code builds and products
* [[Git|git]] - overview and pointers to detailed and mu2e-specific instructions
** [[CVMFSuser|for users]]  
* [[Validation]] - automatic and occasional procedures for validation
** [[CVMFSmaintainers|maintaining content]]  
* [[GeantChecklist]] - validation of new geant versions
** [[CVMFSremote|installing at remote sites]]  
* [[Jenkins]] - a central build platform
* [[DownloadCode|Download]] - pull a local copy to remote institutions or laptops
* [[Cvmfs|CVMFS]] - a virtual disk mount containing our code
* [[BTrk]] - the KalMan fitter code is in this non-standard product
* [[Docker]] a portable software container to hold and run our environment and software
* [[CodeDistribution|Download]] - pull a local copy to remote institutions or laptops
* [[Scisoft|scisoft]] - server for product manifests
* [[BTrk]] - (deprecated) the Kalman fitter code is in this non-standard product
* [[KinKal]] - a repo and UPS product containing the core track Kalman fit code
* [[CVS]]
* [[CodeDepencyGraph]] - how to make the code dependency graph
* [[DAQ]] [https://cdcvs.fnal.gov/redmine/projects/mu2edaq/wiki DAQ redmine]
* [[RootBuild|building root]]
* [https://cdcvs.fnal.gov/redmine/projects/artutilscripts/repository/revisions/master/raw/tools/checkPrerequisites checkPrerequisites tool] - check linux has rpms needed by art
* [[SconsUPS]] - how to build a new version of scons, packaged for UPS
* [[Pyana]] - setting up python analysis packages
* [[Github_CI_Maintenance|Github CI Maintenance]] - information about the CI repo, used by Jenkins for build tests


== Standards and Practices ==
== Standards and Practices ==
*  Editors: Emacs,  vim;  policy of not using tab characters.
* [[CodingStandards]] - an overview of code issues
* CMS code references: Home Offline WorkBook SW Guide
* [[CodeTools]] - code formatting and checking tools
* Units and Coordinate Systems
* [[MagicNumbers|Magic numbers]] - where to get value of pi, etc.
 
[[Editors|Editors]] - tips on editors and policy of not using tab characters.
== Tutorials ==
* [[CodeDebugging|Debugging]]
* Testing the ROOT display
* [[GeantTips]]
* Testing the Geant4 based event display
* [https://en.wikipedia.org/wiki/ISO_8601 ISO 8601 time format]
* Notes on dynamic libraries
* CMS code references:
* The First Step: the art workbook
** [https://twiki.cern.ch/twiki/bin/view/CMSPublic/WebHome Home]
* Running G4 within art: The first examples.
** [https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBook Offline WorkBook]
* Mu2e maintained FAQs: C++ FAQ,  Unix/Linux FAQ,  ROOT FAQ,  Geant4 Notes
** [https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuide SW Guide]
* FAQs
** [[CppFAQ|c++]]
** [[LinuxFAQ|linux]]
** [[RootFAQ|root]]
** [http://thbecker.net/articles/rvalue_references/section_01.html move semantics and r-value references]


== External Packages ==
== External Packages ==
* UPS/UPD as used by Mu2e  
* [[UPS| UPS]] [https://cdcvs.fnal.gov/redmine/projects/ups/wiki/ReferenceManual/ manual] [https://cdcvs.fnal.gov/redmine/projects/ups/wiki/Getting_Started_Using_UPS getting started]
* Setting up ROOT by itself
* Mu2e [https://github.com/Mu2e github] [https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/repository redmine] [http://cdcvs.fnal.gov/lxr lab LXR] [http://cdcvs.fnal.gov/lxr/mu2eofflinesoftware/index.html Mu2e LXR] [https://lxr.sourceforge.io/en/index.php LXR project]
* Mu2e code    
* [https://web.fnal.gov/project/ArtDoc/Pages/home.aspx art]  [https://web.fnal.gov/project/ArtDoc/SitePages/documentation.aspx doc] [https://github.com/art-framework-suite github] [https://cdcvs.fnal.gov/redmine/projects/art redmine] [https://cdcvs.fnal.gov/redmine/projects/art/repository/revisions/master/show/art browser] [https://listserv.fnal.gov/scripts/wa.exe?A0=ART-USERS art-users] [https://cdcvs.fnal.gov/redmine/projects/cet-is-public/wiki/AboutQualifiers product flags] [https://cdcvs.fnal.gov/redmine/projects/art/wiki/ArtExitCodes error codes]
* art    
* [https://gcc.gnu.org/projects/cxx-status.html gcc features development] [https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.iso gcc library dependence]
* CMS Framework    
* [https://indico.fnal.gov/category/1191/ recent art stakeholders meetings]; [https://cdcvs.fnal.gov/redmine/projects/art/wiki/Stakeholder_meeting_presentations older art stakeholders meetings]
* Root (v5.28)
* [https://cdcvs.fnal.gov/redmine/projects/artdaq/wiki artdaq wiki]
*  Geant4 DOxygen(v9.4.p01)
* [http://rpubs.com/paterno/303233 Paterno memory profiling instructions]
* Geant4 LXR
* [http://valgrind.org valgrind]]
* CLHEP(v.2.2.0.4)
* [https://cdcvs.fnal.gov/redmine/projects/art/wiki/Getting_started_with_MAP_and_DDT MAP and DDT debuggers]
* HepPDT
* [https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuide CMS Framework] [http://cmslxr.fnal.gov/lxr/ LXR]
* fhicl-cpp
* [https://cdcvs.fnal.gov/redmine/projects/larsoft/wiki/SetupCMSbotScriptsYourOrg CMS github PR] [https://cdcvs.fnal.gov/redmine/projects/larsoft/wiki/Maintaining_CMSbot_scripts_and_Jenkins_jobs more info]
* cetlib
* [https://root.cern.ch/root/ root] [https://root.cern.ch/guides/reference-guide docs]
* Message Facility
* [http://geant4.web.cern.ch/geant4/ geant] [https://web.fnal.gov/project/Geant4/SitePages/Home.aspx at Fermilab]  [http://www-geant4.kek.jp/Reference/9.4.p01/Geant4 DOxygen(v9.4.p01)] [http://www-geant4.kek.jp/LXR/ LXR]
* cpp0x
* [[Geant4Examples]] How to run the standard Geant4 examples on the Mu2e interactive machines.
* BTrk
* [http://public.muonsinc.com/Projects/G4beamline.aspx G4Beamline]  [http://mu2e-docdb.fnal.gov/cgi-bin/ShowDocument?docid=1490 Mu2e manual]
* LXR browsers for many Fermilab projects
* [http://proj-clhep.web.cern.ch/proj-clhep/ CLHEP] [http://proj-clhep.web.cern.ch/proj-clhep/doc/CLHEP_2_2_0_4/html/ CLHEP(v.2.2.0.4)]
* The art redmine wiki,  art-users archive
* [http://lcgapp.cern.ch/project/simu/HepPDT/ HepPDT]
* Other external software used by Mu2e with links to documentation.
* [https://cdcvs.fnal.gov/redmine/projects/fhicl/wiki fhicl] [https://cdcvs.fnal.gov/redmine/projects/fhicl-cpp/repository  fhicl-cpp]
 
* [https://cdcvs.fnal.gov/redmine/projects/cetlib cetlib] [https://cdcvs.fnal.gov/redmine/projects/cetlib/repository  browser] [https://fnalssi.github.io/cetmodules/ cetmodules]
* [https://cdcvs.fnal.gov/redmine/projects/messagefacility Message Facility] [https://cdcvs.fnal.gov/redmine/projects/messagefacility/repository browser]
* [https://cdcvs.fnal.gov/redmine/projects/cpp0x cpp0x] [https://cdcvs.fnal.gov/redmine/projects/cpp0x/repository browser]
* [http://www.boost.org/ boost]  [http://www.boost.org/doc/libs/1_47_0 browser]
* [[BTrk]] [https://github.com/KFTrack/BTrk browser]
* [https://cdcvs.fnal.gov/lxr/ LXR browsers] for many Fermilab projects
* [[Scons|scons]]
* [http://mu2e.fnal.gov/atwork/computing_atwork/mu2emars.shtml MARS] (password protected)
[[Category:Computing]]
[[Category:Computing]]
[[Category:Computing/Code]]
[[Category:Code]]

Latest revision as of 16:15, 23 August 2024

Building code

Configuring executables

Modules, Products, and Services

Code Management

Standards and Practices

External Packages