Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.

2018-08-06 LHCb v50r1

This version uses Gaudi v30r3 and LCG_93 with ROOT 6.12.06.

This version is released on `master` branch.

Built relative to LHCb v50r0, with the following changes:

New features

  • LoKiGen: add several new symbols for specific status of HepMC-particles, !1403 (@ibelyaev)
    Cherry-picked from !1399 in run2-patches

  • From ReDecay flag for MCParticle, !1193 (@dmuller)
    Cherry picked from !1186 in 2018-patches

  • LoKiCore : add new class Polarization, !1190 (@ibelyaev)
    Cherry-picked from !1188 in 2018-patches

Enhancements

  • Make RawBanks returned from RawEvent 'const', !1411 (@graven)

    • which implies changing the return type of LHCb::RawEvent::banks,
      from std::vector<RawBank*> to LHCb::span<const RawBank*>
      and fixing the fall-out
    • add const in lots of places
    • prefer auto over explicitly specifying the type, to make the
      code less dependent on concrete types, and more on behaviour
  • Minor updates to Kernel/PartProp, !1406 (@ibelyaev)
    Cherry-picked from !1400 in run2-patches

    • increase a bit precision for mass/lifetime printouts
    • allow specify negative values for lifetime (being intepreted as width in GeV). This is very useful for redefinition of the particle properties, and prevents bugs
    • print all redefined properties
    • add new qmtest
    • regenerate reference file
  • LoKiCore.functions: add (move from LoKiArrayFunctors) function PDGM, !1398 (@ibelyaev)
    Cherry picked from !1397 on run2-patches

  • Introduce VPFullCluster class, !1396 (@rquaglia)
    Introduction of a second VPClass named VPFullCluster which includes the vector among the private members.
    Needed to later fix the issue of tracking efficiencies for TDR->master merge.

  • Propagate XGBoost-based IsPhoton separation variable, !1390 (@deschamp)
    Cherry-picked from !1384 on 2018-patches

  • LHCbMath: add summation operators for WStatEntity, !1391 (@ibelyaev)
    Cherry picked from !1385 on run2-patches

  • LoKi::Dicts::CutValOps : add few more overloads for __switch__ method, !1392 (@ibelyaev)
    Cherry-picked from !1386 on run2-patches

  • Scifi fix assert, !1382 (@jvantilb)

    • Changed any_of to none_of in assert (none_of is better than all_of in case the range in empty).
    • Removed obsolete comment
  • LoKiGen: add more symbols : GMINTREE, GMAXTREE, GSUMTREE & GMULTTREE, !1376 (@ibelyaev)
    Cherry picked from !1375 on run2-patches

    Phys/LoKiGen: add new symbols

    • GMINTREE : e.g. "GMINTREE( GPT , 'mu+' == GABSID) > xxx * GeV" - it can mimic certains selection/tripping criteria and also L0Muon trigger
    • GMAXTREE
    • GSUMTREE : e.g. "GMINTREE( GPT , ( 'pi+' == GABSID ) | ( 'K+' == GABSID ) ) > xxx * GeV" - it mimics some popular stripping/Hlt2 cuts used by Charm and BnoC groups
    • GMULTTREE : "GMULTTREE( GPT , ( 'mu+' == GABSID ) ) > xxx * GeV * GeV " - it mimics L0DiMuon-TOS for eg. B-> ( J/psi -> mu mu ) X decays
  • Scifi add version property for decoding, !1364 (@jvantilb)
    The Gaudi::Property DecodingVersion is added to FTRawBankDecoder. The user can now decide which decoding version is needed. In case the decoding version is not compatible with the version in the raw banks, an exception is thrown.

    Fixes a problem introduced in MR !1326, which causes a crash for multithreading.

  • Remove header words from number of cluster estimate, !1363 (@jvantilb)
    The header word is now not counted anymore in the estimate for the number of FTClusters.

  • New and faster decoding versions, !1326 (@jvantilb) [LHCBSCIFI-101]
    Requires MR!10 from SIMCOND.

    Introduced new raw data format (v4 and v5). The new data format has no local headers for each SiPM anymore. This improves the decoding speed a lot. Also new is the partitioning (5 banks per quadrant instead of 1) and a global truncation header.

    For backwards compatibility, the decoding can still decode the old data formats (v2 and v3). The difference between v4 and v5 is that in v5 the adjacent clusters (that are split by the FE) are merged back and that very wide clusters are recovered into many adjacent clusters. These extra operations are not done in v4, which makes it a little bit faster at the costs of a reduction in tracking performance (possible these extra operations can be done on the TELL40 in the future). The encoding works only for the v5 format. To run the v4 decoding on v5 data, a flag is introduced in FTRawBankDecoder (ForceVersion4).

    At same time, the container format for the FTLiteClusters is changed from FastClusterContainer to MultiIndexedContainer.

  • New parameter in CaloDataType, !1358 (@vchekali)
    Add isPhotonXGB parameter, to be used by CaloHypoEstimator to store result of new photon/pi0 separation classifier.
    Cherry picked from !1348 in 2018-patches

  • Rich Pixel Cluster Optimisations, !1331 (@jonrob)
    Various improvements to the RichPixelCluster class.

    • Specific optimisation for size 1 clusters, which are the most common use case. heap allocations are now completely avoided in this case.
    • Various speed improvements to the builder classes, again mostly based around avoiding heap allocations as far as possible.
  • Add Track move constructor with key, !1347 (@sstahl)

  • Add bulk method for computing global positions for PD clusters., !1330 (@jonrob)

  • update L0 processor data handling, !1343 (@deschamp)
    Propagate the !1336 changes to master (except changes related to L0 monitoring - not needed for future)
    L0DU :

    • better handling in case of different sources for the same L0ProcessorData in L0ProcessorDataDecoder
      L0Calo :
    • fix minor bug (wrong format) in L0Candidate.h when building L0Processor data for SpdMult and SumEt from the L0Calo rawBank. The bug has no impact on default processing as L0ProcessorData are not build from the L0Calo rawbank but directly from the emulator.
    • L0CaloCandidatesFromRaw : produce (empty) L0ProcessorData in case there is no corresponding L0 candidate + add the possibility to plug/unplug processor data 'fiber' (e.g. for L0pi0s/HC switching)
  • RichDAQ - Cleans up a number of HPD/PMT specific definitions, !1329 (@jonrob)

  • Prepare Tagger enum for latest Flavour Tagging Tunings, !1320 (@kheinick)
    Add separated B2OC/B2CC tunings for OS taggers
    Same as merge request !1310 on 2018-patches

  • Use local instances of MagneticFieldGridReader in MagneticFieldSvc, !1314 (@jonrob)
    Fixes a minor annoyance with the MagneticFieldSvc which is messages sent from it were not respecting changes made to the message formatting. This was due to the timing of when the Reader instances where constructed. This MR fixes this by instead of having a single cache instance, use local instances instead. As the reader has no cached state, and is cheap to construct, this has no overhead.

  • Minor refactoring of GitCondDB Python helpers, !1316 (@clemenci)
    cherry-pick of the part of !1300 relevant for the master branch

  • Minor changes to RichTrackSegment::StateErrors constructors, !1312 (@jonrob)

  • Add slc6-gcc7 to PlatformInfo.cpp, !1292 (@clemenci)

  • RichDet Updates, !1288 (@jonrob)

    • Move rich() accessor from MaPMT specific to base DePD class.
    • Convert some DePD members from double to float to reduce memory footprint and better match the types as used downstream.
    • Increase the max number of samples in Rich1DTabFunc.
  • add RawBank::range() which return a span, !1260 (@graven)

  • Separate control-flow / work in FTRawBankDecoder, !1214 (@graven)

    • factor out control flow in two functions, reverse_each_module and for_each_quadrant.
    • reverse_each_module takes two iterators, and finds the partitions corresponding to a module, and the reverses each of these partitions partitions
    • for_each_quadrant takes a container and a container of offsets which defines partitions of that container. It calls, for each parittion, the callable with the first,last iterator of these partitions
    • replace the vector of partitionpoints with a boost::container::static_vector to avoid allocating memory on the heap
    • add some lamdas which bind common function arguments, so they don't have to be repeated...
    • move the verbose printout out of the main decoding loop (avoiding repeated checks on msgLevel) and instead provide a single loop which dumps the created clusters
  • Add Deuteron ProbNN definition, !1232 (@jonrob)
    Cherry picked from !1230 on 2018-patches

  • Introduced FT/UTDAQLib containing FT/UTDaqHelper code, !1219 (@sponce)
    This is abstracting and publicizing small parts of the raw bank decoding for the FT and UT (namely the cluster counting) so that it can be used by the GECFilter

  • Reproducible MDF content, !1217 (@rmatev)
    Ensures strict reproducibility of MDFs. It has no observable effect except for helping the testing in Moore.

    • Initialize padding bytes in HltSelRep event model
    • Reset packed data checksums on every event (much more useful for testing with streaming).
    • Add a script to dump the bytes of the raw events, decompressing the DstData bank as needed.

    Propagated from MR !1032 in 2018-patches

  • Add a constant function to access UT Sectors, !1163 (@mhadji)
    PrStoreUTHit was using findSector for each ut clusters, this function is a usual logn lower bound on a vector<pair<key, sector>>

    a second std::vector<sector*> was already there
    and created with an almost good order to be able to create some offsets during DeUTDetector::initialize and therefore doing an access with an almost constant complexity

Bug fixes

Code modernisations and cleanups

  • prefer std::optional over boost::optional, !1421 (@graven)

  • Prefer C++17 std::{optional,string_view} over boost::{optional,string_ref}, !1416 (@graven)

  • remove unused code from createODIN, !1417 (@graven)

  • Remove unused private typedefs, !1415 (@clemenci)
    exposed by change of warnings hiding default in gaudi/Gaudi!408

  • prefer std::variant over boost::variant, !1410 (@graven)

  • XmlTools: prefer c++17 variant,string_view over boost variant,string_ref, !1408, !1414 (@graven)

  • remove unused ConfigDBAccessSvc, the backend using Coral, !1401 (@graven)

  • Prepare for gaudi/Gaudi!709 and gaudi/Gaudi!577, !1387 (@clemenci)

    • use old PluginService version for Functor Cache if Gaudi uses the new version
    • modified custom property parsers to understand (optionally) quoted strings
  • Changed MDF compression to use ROOT ZLIB instead of the default, !1380 (@clemenci)
    In ROOT 6.14 the default changed from ZLIB to LZ4, and this change
    ensure reproducibility across versions of ROOT.

  • LoKiCore::Size: take advantage of the optional interface, !1368 (@graven)
    Instead of explicitly duplicating logic already implemented inside boost::optional, use the interface of optional as it is supposed to be used.

  • remove use of deprecated std::{binary,unary}_function, !1359 (@graven)
    std::binary_function and std::unary_function are deprecated in C++14, and have been removed in C++17.

  • Make CaloClusterizationTool const, !1295 (@cmarinbe)
    Propagate changes in Rec!1036 to ICaloClusterization.

  • Modernize DetDesc, !1264 (@graven)

    • remove inheritance from CommonMessaging in DetectorElement. It is not used (due to the fact that the automatic 'name' prefix in the output is not very usefull for DetectorElements.
    • prefer boost::string_ref over std::string in interface to avoid creating temporary strings
    • prefer compiler generated copy constructor
  • Adapted transport service to move to new counters, !1233 (@sponce)

  • Modernize MuonDet, !1263 (@graven)

    • avoid copying std::vector unnecessarily
    • prefer boost::lexical_cast over sprintf/sscanf
    • prefer std::accumulate over explicit loop
  • Modernize FSRNavigator, !1262 (@graven)

    • avoid making spurious string copies
    • prefer inheriting constructors
  • RawEvent::Bank: Add move c'tor and assignment and deprecated copy c'tor and assignment, !1261 (@graven)
    Deprecate old copy c'tor and assignment, as they are ill-defined (they result in both the current and 'old' object to have identical m_owns, which in case it is set to true will result in a double delete).
    Instead, add move c'tor and move assignment

  • Fix CondDBBrowser runtime and drop Qt4, !1244 (@clemenci)
    Propagated from !1241 on 2018-patches

    • cce24d06 Add runtime dependency on libxkbcommon.so
    • 005a884b Reformatted CondDBBrowser code with yapf
    • d2722bc9 Drop support for PyQt4 in CondDBBrowser
    • 1e4147c1 Update "about" dialog

Changes to tests

  • Hide eoslhcb SE directories from test comparisons, !1349 (@cattanem)

  • Add example script and test to convert (x)Digi file into MDF, !1325 (@chasse)