2016-11-30 RecSys v21r0

This version uses Gaudi v28r0, LHCb v42r0 and Lbcom v20r0 (and LCG_86 with ROOT 6.08.00)

This version is released on master branch.

Packaging changes

[MR !268] Migrate Phys/LoKiTracks from Phys to Rec/LoKiTrack in Rec
[MR !261] Move QuarticSolver.h to RichRecUtils to allow sharing with future algorithms
[MR !210] Split up Rich/RichRecBase into 4 smaller packages
RichRecUtils - Small utilities.
RichRecEvent - The XML based transient event model used in the RICH Reco.
RichRecInterfaces - Tool interfaces
RichRecBase - tool and algorithm base classes.

Algorithm improvements

[MR !379] Simplify LumiSequence: prefer single decoder, single filter
Prefer single decoder instance, used in four sequences, over cloning four identical instances, configured identically except for their instance name
Prefer single filter instance, used in four sequences, over cloning four identical instances, configured identically except for their instance name
Prefer direct member initialization
[MR !346]Merge UpgradeTracking into Master
This release contains all updates made to upgrade tracking that are used in tracking performance update note.
UpgradeTracking branch was removed after this merge
[MR !306] Don't use Track.flags to check for backwardness in BeamGasVertexMonitor
Now, determine backwardness as done in the FastVeloTracking by looking at the hits.
[MR !295, !289 !280, !247] Backport several small improvements from RichFuture to the current algorithms
[MR !255] Backport RichRadCorrLocalPositions updates from RichFuture
[MR !267] Update Tf/PatAlgorithms to use make_array introduced in LHCbKernel with LHCb!342

New functionality

[MR !278] Propagated option for simplified geometry through upgrade tracking configuration
Setting `TrackSys().ExpertTracking = [ "simplifiedGeometry" ]` switches on the simplified geometry for the fast and best stage in the upgrade tracking.
Off by default for now.
[MR !250] Fix the MuonIDAlgLite to take into account the upgrade geometry.
[MR !208] Added CaloCluster saturation and barycenter info in NeutralProtoParticle
This will allow to replay the Calo Correction starting from ProtoP info, i.e. without the full reconstruction
[MR !226] Added TrackSTEPExtrapolator
Added a new variant of the Runge-Kutta as used by ATLAS.
[MR !211] PatFitParams: added files 'PatLongLivedParams' to determine parameters/resolutions for PatLongLivedTracking

Bug fixes

[MR !366] Fix MCParticle cloning in TrackIPResolutionCheckerNT.cpp
Bug exposed by LHCb!430
[MR !358] Fixed PVResolution
Several issues with column types in tuples
Increased track size array from 100 to 500 (was running out of space every tenth event in 2015 data used in tests)
Many optimisations (copying tracks twice just to count number of left/right was not ideal)
[MR !358] In VeloOccupancyMontior fixed coverity error about Time of check/Time of use when doing mkdir (now one operation)
[MR !339] VeloTrackMonitorNT: Fix untested StatusCodes and unprotected debug()s.
Plus some flyby modernisation

Monitoring changes

[MR !374] TrackMonitors: added options for IT+TT the CCE scan taken on 2016-10-25
[MR !358] Fixed VeloTrackMonitor to work with online tracks
so that the 2nd metal layer effects monitoring histograms are produced in the BrunelOnline environment (uses lite not full clusters in fits)
[MR !302] Minor debug updates to Rich/RichRecTools
[MR !301] Various minor debugging updates to current Rich/RichRecPhotonTools
[MR !299] Improved ostream overloading for Rich PhotonSpectra

Changes to tests

[MR !239] Update tests to remove obsolete exclusions and add forward compatibility with next Gaudi release
[MR !227] Remove obsolete configurables test, was checking integrity of SVN project recursive checkout

Code modernizations and cleanups

[MR !319, !360, !238, !231 !220] Modernize Calo
Follow changes in LHCb which add const to interfaces (see LHCb!412)
Update forward declarations following LHCb!231
Remove unused header inclusion of "Event/TrackFunctor.h"
Remove CVS/SVN keywords
Prefer range-based for loops
Prefer emplace_back
Prefer std::unique_ptr over raw pointer + explicit delete
Prefer nullptr
Avoid C-style casts
Re-order logic to take advantage of short-circuiting
Prefer direct member initialization
Prefer auto
Prefer assignment to vector over explicit series of push_back
Prefer assignment of std::initializer list over clear + series of push_backs
Prefer std::max over a macro
Prefer static const for static, constant data
Do not cast if not needed
Prefer extends over explicit virtual inheritance
Add const
Do not implement derived classes that just invoke their base class version
Prefer STL algorithms
Add final to classes
Prefer override over virtual
Remove explicit destructors when the implicit destructor is sufficient
Prefer getIfExists over exists + get
Prefer SmartIF
Prefer call-back handler over explicit syncing in initialize
Do not explicitly invoke default constructors in constructor
Replace obsolete std::auto_ptr with std::unique_ptr
Consolidate applications of calibrations into 'apply'
Prefer struct over class with all public members
Remove deprecated std::unary_function
[MR !221] Modernize CaloPIDs
Replace BOOST_STATIC_ASSERT with static_assert
Replace INHERITS with std::is_base_of
Do not invoke default constructors in constructors
[MR !315, !320] Modernize FastVelo
Prefer implicit destructors
Prefer direct member initialization
Prefer STL algorithms over raw loops
Prefer range-based for loops
Avoid C-style casts
Prefer auto
Add override instead of virtual
Add final
Removed the algorithms that are unused elsewhere in LHCb code: FastVeloDecoding, FastSTDecoding, FastValidateWithTT and the associated tool FastTTValidateTool
[MR !318, !326] Modernize LumiAlgs
Prefer struct for Interfaces
Use DeclareInterface, extends
Add final
Prefer implicit destructors
Remove SVN/CVS keywords
Remove virtual functions which only call baseclass implementations
Prefer override
Prefer direct member initialization
Prefer insert over loop with push_back
Prefer getIfExists over exists/get
Prefer range-based for loops
Update lumi2reader reference to follow these changes
[MR !252, !275, !277, !279] Modernize Muon
Change memory layout: use vectors of values instead of vectors of pointers to values allocated on the heap. Carefully reserve all vectors to ensure that the addresses of the values are stable.
Add const when possible
Prefer struct over class for interfaces with only public methods
Prefer DeclareInterfaceID
Remove obsolete SVN keywords
When returning 'owning pointers' do so using std::unique_ptr
Add final
MuonLogHit: replace vector of either one or two pointers with std::pair
Prefer implicit destructors
Prefer STL algorithms over raw loops
Prefer auto
Minimize scope of variables
In 'factory functions' return the created object instead of using an OUT parameter and returning a StatusCode
[MR !317] Modernize MuonID
Prefer direct member initialization
Add const
Prefer implicit destructors
Remove SVN/CVS keywords
Prefer inheritance from extends over virtual inheritance
Prefer struct for interface
Prefer emplace_back over push_back
Prefer std::unique_ptr over raw pointer + explicit delete
Prefer STL algorithms over raw loops
Prefer range-based for loops
Prefer auto
[MR !361] Modernize PatPV
Prefer struct for classes with only public data/methods
Remove SVN/CVS keywords
Prefer direct member initialization
Remove trivial destructors
Prefer range-based loops
Add final
[MR !359] Cleanup PrCounter2 and PrTTCounter
Fix some untested ```StatusCode```s
Remove unnecessary member variables
Fix uninitialised variable bug
Move member initialisations to declaration
Remove trivial destructor
[MR !215] Do not duplicate finalize pure virtual
finalize is already pure virtual in IAlgTool -- no need to repeat so in IPrCounter (which inherits from IAlgTool)
[MR !216] Modernize PrMCTools
Do not explicilty implement functions the compiler will generate implicitly
Do not keep variables with a lifetime scope of an event as members
Prefer std::unique_ptr over raw pointer and delete
Default arguments should be specified in declaration, not definition
Prefer override over virtual
Do not keep constants as member variable, but as static const in an anonymous namepsace
Prefer range-based for loops
Prefer for loop over while
Prefer getIfExists over exists/get combo
Do not check for duplicates while inserting (which is quadratic) but use sort / unique (which is logarithmic)
[MR !371] Clean up some final/override statements in Rich packages
[MR !343] RichRecBase: use unsigned long long for photon tallies
[MR !283] Remove an obsolete setting of a job options location in RichRecSys
[MR !270] Clean up the RICH photon predicted signal tool
[MR !356] Modernize TrackFitEvent
Prefer implicit destructors
Prefer direct member initialization
Remove unneccessary static
Prefer STL algorithms
Prefer range-based loops
Add final
[MR !362] Modernize TrackMonitors
Add final
Remove unneeded gsl_math include
Prefer implicit destructors
Prefer STL algorithms
Prefer lambda for predicates
Prefer auto
[MR !222] Modernize TrackProjectors
Prefer direct member initialization
Prefer auto
Do explicitly implement destructor which are implicitly generated
Remove obsolete SVN keywords
Prefer STL algorithms over for loops
When modifying a property, use setProperty instead of direct assignment
Add constexpr
Prefer struct over class with only public members
[MR !224] Modernize TrackTools
DelegatingTrackSelector: delegate constructor to baseclass
Prefer override over virtual
Prefer inheritance from extends<> over virtual public inheritance
Remove use of boost::assign
Do not expliciitly implement destructors which would be generated implicitly
[MR !316, !223] Modernize TrackUtils
Prefer (implicit) std::initializer_list over boost::assign
Prefer implicit destructors
Prefer STL algorithms over raw loops
Prefer SmartIF instead of raw pointers to Services
Prefer range-based loops
Prefer override over virtual
Prefer lambda over boost::lambda
Prefer single std::sort over two std::stable_sort
Prefer (implicit) std::initializer_list over boost::assign
Add final if possible
Remove SVN keywords
Prefer vector assignment over set of push_backs
Replace BOOST_FOREACH with STL algorithms
[MR !314] Remove unused IFunctionTool interface and modernize PtTransporter
[MR !287] Fix struct/class mismatch and minor code modernisations in Tf/TsaAlgorithms, Tr/TrackTools, Tr/TrackCheckers
[MR !358] Modernize VeloRecMonitors
Removed empty destructor
Simplified constructors
Used auto
Removed unused variables
Better array initialisation
Used C++11 lambdas rather than boost lambda and bind.
Remove m_binary and replace with LHCb::Math::sqrt_12
Initialise all pointers in class to nullptr explicitly
Removed $Id: lines from headers
Removed WIN32 #pragmas
Removed commented out subroutines
[MR !328] Fix missing overrides warnings
[MR !292 !274] Remove unused variables exposed by LHCb!387 and LHCb!337
[MR !286] Removed unused include, deprecated in gaudi/Gaudi!182
[MR !245] Fix a few clang warnings

Code changes to follow changes in LHCb and Gaudi

[MR !378] Prepare for update to RICH 1D interpolator (in LHCb!451)
[MR !352] Adapt to the new re-entrant TransportSvc calls (in LHCb!422)
[MR !277] Fix class/struct mismatches introduced by MRs LHCb!337, LHCb!338
Also initialise nullptr at declaration, remove empty finalize
[MR !237] Prepare for DetDesc modernization
Do not commit to the specific return type of DetDesc::services -- only to its semantics
[MR !231] Follow modernization of CaloInterfaces in LHCb!291
Do not request CaloInterfaces link library
Do not include CaloUtil.h
[MR !229] Adapt to HPD->PD name changes in LHCb!289
[MR !210] Adapt to Split up of Rich/RichKernel (see LHCb!239)