@MohammadAlTurany MohammadAlTurany released this Oct 22, 2017 · 203 commits to master since this release

Assets 2


  • Bump minimum required cmake version to 3.9.4
  • Fix overlinking of libFairMQ
  • Add new FairMQFull, FairMQAll, FairMQInstall, and FairMQTests targets, see comments.
  • Add gtest, cotire, and FindPStreams modules
  • Link FairMQLogger into libFairMQ instead of its own shared library.
  • Add many comments


  • [breaking change] FairMQ headers are now installed to $CMAKE_INSTALL_PREFIX/include/fairmq.
  • [new feature] Introduce FairMQShmMonitor for shared memory monitoring & cleanup.
  • [new feature] Introduce FairMQUnmanagedRegion for allocating memory via transport (filled, transfered from and cleaned up by the user).
  • [new feature] Introduce fair::mq::PluginManager for loading fair::mq::Plugins from shared libraries. See the example plugin.
  • [new feature] Introduce fair::mq::PluginServices APIs to give FairMQ plugins the ability to control and configure the device.
  • [new feature] Introduce fair::mq::DeviceRunner helper as a more flexible alternative to the fairmq/runFairMQDevice.h header.
  • [bugfix] Fix monitor not cleaning up more than one region.
  • [bugfix] Avoid using placement new for allocating shm meta header that caused problems on some systems.
  • [bugfix] Fix example/advanced/Region being built only if Geant is found.
  • [bugfix] Fixed example9 memory leak.
  • [bugfix] Fix rate limiting in benchmarkSampler.
  • [enhancement] Refactor the transport interface:
    • Give transports Initialize() method with access to device config.
    • Avoid using global context in the transport.
    • Simplify shutdown procedure (no need for extra thread).
    • Move New*Message APIs up to the TransportFactory and provide facades at FairMQChannel and FairMQDevice.
  • [enhancement] Stop device if binding was unsuccessful (both static and dynamic).
  • [enhancement] FairMQDevice::InitTask runs now in the worker thread (same as other state handlers).
  • [enhancement] Extend shared memory transport configuration: segment size & name.
  • [enhancement] Refactor unit tests (googletest) and extend test coverage
  • [enhancement] Extend documentation
  • [enhancement] STL iterator interface for FairMQParts
  • [enhancement] FairMQDevice can generate an ID, if none provided.
  • [enhancement] Refactor FairMQEventManager to fair::mq::EventManager to support multiple subscribers.
  • [misc] Cleanup examples: serialization, Lmd.


  • IO Manager :
    Enabling the user to register branches based on arbitrary types. In particular, it is now possible to register stl containers as branch entries, extending the current TObject* or TCollection* APIs. (See Example/simulation/Tutorial2)
  • Fixed FairRootManager to return correct event time.


  • Migration of G4 simulation to multi-threading
  • Make FairLink not inherit from TObject
    -- reduce memory footprint for FairLinks by removing
    inheritance from TObject (which is not needed)
    -- remove virtual keyword from operators
    -- overall this will gain 24bytes per FairLink
    -- other smaller improvements: default destructor, inline trivial constructors
  • Remove data members / virtual functions from FairMultiLinkedData_Interface
    -- remove fVerbose data member which was not used
    -- remove fInserHistory member which is duplicated behind the link pointer
    -- make accessor to link pointer not virtual
  • Remove FairLink member + remove virtual functions from FairTimeStamp
  • Reduce size of FairLink to 15 byte
  • Avoid InheritsFrom function from ROOT
    -- This seemingly cosmetic change saves a lot of CPU time because ROOT triggered a lot of internal TClass generation stuff
    -- It is also not needed since the dynamic cast does the same job