60 likes | 150 Views
Project packaging. Proposal to restructure LHCb, Lbcom , Rec projects. Motivation. Original idea: LHCb contains all exported header files and linker libraries /Event, / Det , /Kernel etc. All other projects only contain component libraries Structure according to application dependencies
E N D
Project packaging Proposal to restructureLHCb, Lbcom, Rec projects
Motivation • Original idea: • LHCb contains all exported header files and linker libraries • /Event, /Det, /Kernel etc. • All other projects only contain component libraries • Structure according to application dependencies • Boole -> Lbcom, Brunel -> Lbcom+Rec, DaVinci -> Lbcom+Rec+Analysis • No intra or inter-project package dependencies • Avoids intricate dependency tree, easier maintenance • In practice: • LHCb became very bloated • Split DaVinci/Moore base classes to separate Phys project • Intra-project build dependencies do exist • e.g. TrackFitEvent • Inter- and intra-project run-time dependencies exist • e.g. algorithms in Rec use Tools in Lbcom, algorithms in package A use tools in package B • Impossible to set up unit tests within individual projects • Separation sometimes artificial • e.g. OTDAQ in LHCb (exports headers), VeloDAQ in Lbcom (components)
Proposed refactoring of LHCb, Lbcom, Rec • https://savannah.cern.ch/task/?41815 • LHCb: • All classes needed for event data I/O (Event/*) • All classes needed to read the geometry (Det/*) • All classes needed to decode RawEvent • Configurablesneeded by all applications (LHCbApp...) • Interfaces needed by above (LHCbKernel etc.) • Interfaces and components needed by Gauss • LoKiGen, SimComponents • Lbcom: • Becomes very lightweight. DAQ packages from Lbcom will be moved to LHCb, keeping in Lbcom (or even Boole) where possible the stuff that does the encoding • Rec: • Move to Rec all interfaces currently in LHCb for which no implementation exists in LHCb/Lbcom/Gauss
Changes to Rec • Move all reconstruction related interfaces to Recproject • https://savannah.cern.ch/task/?41815 • Can be moved straight away • Muon/MuonInterfaces • Rich/RichRecBase • Tf/PatKernel • Tr/TrackKernel • Require some minor repackaging • Tf/TfKernel • Tf/TsaKernel • Tr/TrackInterfaces • Add Lbcom dependency if needed • e.g. to test Brunel monitoring configurable which uses algorithms shared with Boole • Should be OK since Lbcom more stable than Rec
RawEvent decoding consolidation • Consolidate all RawEvent decoder packages into a single project • Logically belong together • Possibility of single configurable for decoding, with knowledge of history of RawEvent locations in different processingshttps://savannah.cern.ch/task/?19106 • Simplifies unit testing • Move everything to LHCb • Could be done tomorrow • Bloats LHCb a little bit more • Requires some consolidation to avoid moving too much, e.g. • https://savannah.cern.ch/task/?40913 (RichAlgorithms+RichDAQ) • https://savannah.cern.ch/task/?40844 (HltDAQ split) • L0DU/L0Muon/L0Calo do a lot more than decoding • Emulation could be moved to HLT project • (Why not move everything toLbcom?) • Logically better, since RawEvent not known to Gauss • Not an option because DstConf needs to know about RawConf • Also, many xxDAQ packages export header files used in other projects
Proposal for new project for applications that need only LHCb • Use case: • Application that only depends on LHCb, and needs updates to code in an LHCb package • e.g. Tools/EventIndexer • Not addressed by SetupProject LHCb with new AppConfig • Create a new project with LHCb dependency for such applications • One project containing several applications? • c.f. Erasmus or Urania • Or one project per application? • OK if few use cases? • Does it always contain application code, or does code reside in LHCb and project is released only in case patch is needed? • Are there implications for Production if different versions of an application are in different projects?