Code: Difference between revisions

From Mu2eWiki
Jump to navigation Jump to search
 
(150 intermediate revisions by 7 users not shown)
Line 1: Line 1:
== Building code ==


* [[End of Life for Scientific Linux 7]] Instructions needed for June 2024 only.
* [[UPS to Spack Transition]] ongoing from spring 2024
* [[CodeEnvironment]] how to setup the linux environment
* [[GitIntro]] code management preliminaries for newcomers
* [[OfflineStatus]] which branch or tag of Mu2e Offline you should start from
* [[GitHubWorkflow]] - code repository checkout and commit procedures
* [[IncludeFiles]] - where to find include files
* [[Muse]] - Mu2e code setup and build scripts
* [[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


[http://mu2e.fnal.gov/atwork/computing/temp/v6_0_2.shtml example page for git documentation]
== Configuring executables ==
[[FclIntro|fcl]] - intro to fcl art job control language
** [[FclPaths|paths]] - which modules and what order
** [[FclIOModules|I/O modules]]
** [[MessageLogger|Message logger]]
* [[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


== Building code ==
== Modules, Products, and Services ==
 
* Modules
* Basic recipe for setup, checkout and build
** [[Modules|Modules]]
<pre>
** [[FclIOModules|I/O modules]]
source /cvmfs/fermilab.opensciencegrid.org/products/common/etc/setups
** [[FilterModules|Filter Modules]]
setup mu2e
* Products
git clone http://cdcvs.fnal.gov/projects/mu2eofflinesoftwaremu2eoffline/Offline.git
** [[ReadProducts|Reading products]]
- or -
** [[PrintProducts|Listing and printing]]
git clone ssh://p-mu2eofflinesoftwaremu2eoffline@cdcvs.fnal.gov/cvs/projects/mu2eofflinesoftwaremu2eoffline/Offline.git
** [[MakeProducts|Making data products]]
cd Offline
** [[Handles]]
git checkout -b work
** [[PhysicalVolumeInfoCollection]]
source setup.sh
** [[Provenance]]
scons -j 4
** [[CetMapVector|cet::map_vector]]
</pre>
** [[SchemaEvolution| Schema Evolution]]
* [[Git|git]] code repository management
* [[Geometry|Geometry]]
* [[scons]] code building tool
** [http://mu2e-docdb.fnal.gov/cgi-bin/ShowDocument?docid=1120 Units and Coordinate Systems]
* [[SatelliteRelease|Satellite Releases]] for building only the part of the code base you need
* [[Alignment]]
 
* Random numbers:  
== References for Writing Modules ==
* [http://mu2e.fnal.gov/atwork/computing_atwork/geometry/Geometry.shtml Mu2e Geometry: The Big Picture] (convert to wiki)
** Notes on the geometry files
* Using random numbers:  
** [[RandomNumbersBasic|Basic Instructions]]
** [[RandomNumbersBasic|Basic Instructions]]
** [[RandomNumbers|Complete Instructions]]
** [[RandomNumbers|Complete Instructions]]
* [[MagneticFieldMaps|Magnetic Field Maps]]  
* [[MagneticFieldMaps|Magnetic Field Maps]]  
* [[ConditionsData|Conditions Data]]
* [[ConditionsData|Conditions Data]]
* Products and modules
** [https://mu2einternalwiki.fnal.gov/wiki/CalibrationSets CalibrationSets]
** [[MakeProducts|Making data products]]
* [[Services|Services]]
** [[ProductNames|Which names need to match each other]]
** [[ArtServices|Framework services]]
** [[ListProducts|listing products and printing their contents]]
* [[SimpleConfig|SimpleConfig]]
** About handles
* [[Exceptions|Exceptions]]
** Inter-Product References: art::Ptr, art::PtrVector, art::Assns
* [[MessageLogger|Message logger]]
** cet::map_vector: a new class template
* [[PyWrap]] - wrap compiled c++ code so it can be used in python
* [[FilterModules|Filter Modules]]
* [https://cdcvs.fnal.gov/redmine/projects/art/wiki/ArtExitCodes art error codes]
* [[IOModules|I/O Modules]]
* [[Elastic Analysis Facility (EAF)|Elastic Analysis Facility (EAF)]]
* Services
** Services distributed with the framework.
** Deprecated art services
* Exceptions: Mu2e policy,  CMS guide to managing exceptions.
 
== Configuring fcl ==
* 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 ==
== Code Management ==


mu2e uses git for all code management. There is one main repository for code (with BTrk, the Kalman fit, in a separate respository) and a few smaller repositories for tools. Built releases are distributed worldwide, including remote institutions and the grids with the cvmfs distributed disk system. The code is built after every commit, and built and validated every night on the Jenkins build platform.
* [[Spack]] - setup and build tool to replace UPS and MRB
 
* [[SpackMaintenance]] - expert procedures and debugging
* [[GitMu2e|The Mu2e git page]]
* [[Legacy_Access_to_SL7]]
* Jenkins - a central build platform
* [[MuseMaintenance]] - Muse procedures for experts
** [[Jenkins|Jenkins overview]]
* [[ReleaseList]]
** [http://mu2e.fnal.gov/atwork/computing/ops/nightlyBuild/nightly.shtml  Jenkins Nightly build results]
* [[Git|git]] - overview and pointers to detailed and mu2e-specific instructions
* CVMFS - a distributed disk system to serve tagged, static code builds and products
* [[Validation]] - automatic and occasional procedures for validation
** [[Cvmfs#Using CVMFS|for users]]  
* [[GeantChecklist]] - validation of new geant versions
** [[Cvmfs#Installing CVMFS|installing at remote sites]]
* [[Jenkins]] - a central build platform
** [[Cvmfs#Adding CVMFS content|maintaining content]]  
* [[Cvmfs|CVMFS]] - a virtual disk mount containing our code
* [[Docker]] a portable software container to hold and run our environment and software
* [[CodeDistribution|Download]] - pull a local copy to remote institutions or laptops
* [[CodeDistribution|Download]] - pull a local copy to remote institutions or laptops
* [[BTrk]] - the KalMan fitter code is in this non-standard product
* [[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.
* [[CodeDebugging|Debugging]]
* [[GeantTips]]
* [https://en.wikipedia.org/wiki/ISO_8601 ISO 8601 time format]
* CMS code references:
** [https://twiki.cern.ch/twiki/bin/view/CMSPublic/WebHome Home]
** [https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBook Offline WorkBook]
** [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