DUNE ¡so(ware ¡architecture ¡ DUNE ¡SW ¡and ¡compuEng ¡ David ¡Adams ¡ BNL ¡ February ¡9, ¡2016 ¡
Goals ¡for ¡so(ware ¡ Comprehensibility ¡ Non-‑expert ¡(and ¡expert) ¡users ¡should ¡be ¡able ¡to ¡understand ¡ • o What ¡is ¡possible ¡to ¡do ¡with ¡our ¡SW ¡ o What ¡a ¡parEcular ¡job ¡does ¡given ¡its ¡configuraEon ¡(i.e. ¡top-‑level ¡FCL ¡file) ¡ o How ¡to ¡reconfigure ¡a ¡job ¡to ¡do ¡something ¡different ¡ o How ¡to ¡add ¡new ¡capabiliEes ¡to ¡the ¡SW ¡ The ¡above ¡should ¡be ¡intuiEve ¡and ¡as ¡easy ¡as ¡reasonably ¡possible ¡ • Extensibility ¡ Should ¡be ¡easy ¡to ¡add ¡new ¡capabiliEes ¡to ¡the ¡SW ¡ • o New ¡ways ¡to ¡carry ¡out ¡old ¡acEons ¡(e.g. ¡a ¡new ¡ZS ¡algorithm) ¡ o And ¡new ¡unforeseen ¡acEons, ¡e.g. ¡wirecell ¡approach ¡ Portability ¡ SW ¡should ¡run ¡and ¡be ¡developed ¡on ¡many ¡plaWorms ¡ • o To ¡use ¡exisEng ¡resources ¡for ¡producEons ¡and ¡development ¡ Most ¡or ¡all ¡capabiliEes ¡available ¡outside ¡of ¡art ¡jobs ¡ • o Other ¡frameworks, ¡Root, ¡user ¡main, ¡… ¡ D. ¡Adams, ¡BNL ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡and ¡compuEng ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡architecture ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡February ¡9, ¡2016 ¡ 2 ¡
AcEons ¡and ¡components ¡ DUNE ¡SW ¡is ¡(and ¡will ¡be ¡more) ¡complex ¡ Many ¡stages ¡of ¡simulaEon ¡and ¡reconstrucEon ¡ • Many ¡acEons ¡to ¡carry ¡out ¡in ¡each ¡stage ¡ • Many ¡alternaEves ¡for ¡each ¡acEon ¡ • o AlternaEve ¡may ¡be ¡a ¡separate ¡implementaEon ¡(different ¡code) ¡ o Or ¡different ¡configuraEon ¡(different ¡parameter ¡values) ¡ Hierarchy ¡of ¡acEons ¡(one ¡acEon ¡carries ¡out ¡others) ¡ • Map ¡each ¡acEon ¡to ¡an ¡abstract ¡interface ¡(see ¡following) ¡ AlternaEve ¡can ¡be ¡a ¡separate ¡implementaEons ¡ • Allow ¡configuraEon ¡of ¡each ¡implementaEon ¡ In ¡the ¡ art ¡world, ¡construct ¡from ¡an ¡FCL ¡block ¡ • Other ¡FWs ¡could ¡use ¡FCL ¡or ¡some ¡other ¡configuraEon ¡language ¡ • o Easiest ¡to ¡use ¡FCL ¡but ¡could ¡be ¡alternate ¡ctor ¡e.g. ¡from ¡python ¡ Code ¡for ¡each ¡acEon ¡should ¡reside ¡in ¡a ¡separate ¡component ¡ Natural ¡for ¡each ¡component ¡to ¡be ¡a ¡C++ ¡class ¡ • Simple ¡acEon ¡with ¡no ¡configuraEon ¡can ¡be ¡a ¡funcEon ¡ • D. ¡Adams, ¡BNL ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡and ¡compuEng ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡architecture ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡February ¡9, ¡2016 ¡ 3 ¡
Abstract ¡interfaces ¡ Favor ¡abstract ¡interface ¡for ¡each ¡idenEfied ¡acEon ¡ So ¡a ¡second ¡implementaEon ¡of ¡the ¡acEon ¡can ¡be ¡plugged ¡in ¡without ¡ • any ¡change ¡to ¡the ¡client ¡code ¡ Client ¡has ¡no ¡physical ¡dependence ¡on ¡the ¡code ¡for ¡the ¡ • implementaEon(s) ¡ o No ¡include ¡of ¡header ¡ o No ¡need ¡to ¡list ¡library ¡in ¡CMakeLists.txt ¡ – Users ¡now ¡expend ¡a ¡lot ¡of ¡effort ¡finding ¡required ¡libraries ¡ Interface ¡class ¡provides ¡clean ¡specificaEon ¡of ¡the ¡interface ¡ • o ImplementaEon ¡may ¡have ¡extra ¡methods ¡(helpers, ¡etc.) ¡ Separate ¡design ¡forums ¡ • o Public ¡interface ¡can ¡and ¡should ¡be ¡presented ¡in ¡public ¡forum ¡ o Users ¡can ¡make ¡private ¡or ¡shared ¡implementaEons ¡ Drawbacks ¡ Client ¡may ¡need ¡to ¡specify ¡dependencies ¡at ¡run ¡Eme ¡ • Need ¡to ¡maintain ¡two ¡classes ¡ • o But ¡interface ¡can ¡be ¡pure ¡virtual ¡ è ¡no ¡library ¡ D. ¡Adams, ¡BNL ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡and ¡compuEng ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡architecture ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡February ¡9, ¡2016 ¡ 4 ¡
Job ¡configuraEon ¡ Job ¡configuraEon ¡specifies ¡how ¡data ¡is ¡to ¡be ¡(or ¡was) ¡processed ¡ InformaEon ¡is ¡in ¡environment ¡and ¡on ¡command ¡line ¡ • Environment ¡specifies ¡which ¡release ¡is ¡used ¡ • For ¡larso( ¡(command ¡ lar ), ¡CL ¡specifies ¡top-‑level ¡FCL ¡file ¡ • o Typically ¡opEons ¡to ¡override ¡input ¡data ¡file, ¡# ¡events, ¡output ¡file ¡names ¡ Most ¡of ¡the ¡job ¡specificaEon ¡is ¡in ¡this ¡top-‑level ¡FCL ¡file ¡ • Very ¡important ¡that ¡FCL ¡is ¡comprehensible, ¡extensible ¡and ¡portable ¡ • o Documents ¡what ¡was ¡done ¡in ¡a ¡producEon ¡job ¡ – Along ¡with ¡dunetpc ¡version ¡ o User ¡should ¡find ¡it ¡easy ¡to ¡create ¡their ¡own ¡configuraEon ¡starEng ¡from ¡a ¡ producEon ¡example ¡or ¡from ¡scratch ¡ Very ¡useful ¡if ¡FCL ¡configuraEon ¡can ¡be ¡used ¡outside ¡ art ¡ So ¡high-‑level ¡acEons ¡can ¡easily ¡be ¡carried ¡out ¡in ¡same ¡way ¡ • May ¡be ¡excepEons ¡where ¡a ¡different ¡FW ¡requires ¡a ¡different ¡ • configuraEon ¡language ¡but ¡prefer ¡to ¡avoid ¡this ¡ D. ¡Adams, ¡BNL ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡and ¡compuEng ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡architecture ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡February ¡9, ¡2016 ¡ 5 ¡
art ¡categories ¡of ¡so(ware ¡components ¡ art ¡Module ¡ Singleton ¡instanEated ¡by ¡FW ¡from ¡FCL ¡ • Called ¡by ¡FW ¡once ¡for ¡each ¡event ¡ • Reads ¡and ¡writes ¡event ¡data ¡ • Cannot ¡easily ¡be ¡used ¡outside ¡art ¡ • art ¡Service ¡ Singleton ¡instanEated ¡by ¡FW ¡from ¡FCL ¡ • Shared ¡instance ¡called ¡by ¡clients ¡(e.g. ¡modules) ¡ • Can ¡be ¡used ¡outside ¡art ¡ • o Issues ¡for ¡run-‑dependent ¡services ¡that ¡use ¡art ¡callbacks ¡ UElity ¡ InstanEated ¡and ¡called ¡by ¡client ¡ • Typically ¡no ¡FCL ¡and ¡no ¡sharing ¡ • Easily ¡used ¡inside ¡or ¡outside ¡art ¡ • D. ¡Adams, ¡BNL ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡and ¡compuEng ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡DUNE ¡SW ¡architecture ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡February ¡9, ¡2016 ¡ 6 ¡
Recommend
More recommend