artdaq  v3_09_00
artdaq::SharedMemoryEventManager Class Reference

The SharedMemoryEventManager is a SharedMemoryManger which tracks events as they are built. More...

#include <artdaq/DAQrate/SharedMemoryEventManager.hh>

Inheritance diagram for artdaq::SharedMemoryEventManager:

Classes

struct  Config
 Configuration of the SharedMemoryEventManager. May be used for parameter validation More...
 

Public Types

typedef RawEvent::run_id_t run_id_t
 Copy RawEvent::run_id_t into local scope.
 
typedef RawEvent::subrun_id_t subrun_id_t
 Copy RawEvent::subrun_id_t into local scope.
 
typedef Fragment::sequence_id_t sequence_id_t
 Copy Fragment::sequence_id_t into local scope.
 
typedef std::map
< sequence_id_t, RawEvent_ptr > 
EventMap
 An EventMap is a map of RawEvent_ptr objects, keyed by sequence ID.
 
using Parameters = fhicl::WrappedTable< Config >
 Used for ParameterSet validation (if desired)
 

Public Member Functions

 SharedMemoryEventManager (const fhicl::ParameterSet &pset, fhicl::ParameterSet art_pset)
 SharedMemoryEventManager Constructor. More...
 
virtual ~SharedMemoryEventManager ()
 SharedMemoryEventManager Destructor.
 
bool AddFragment (FragmentPtr frag, size_t timeout_usec, FragmentPtr &outfrag)
 Copy a Fragment into the SharedMemoryEventManager. More...
 
RawDataType * WriteFragmentHeader (detail::RawFragmentHeader frag, bool dropIfNoBuffersAvailable=false)
 Get a pointer to a reserved memory area for the given Fragment header. More...
 
void DoneWritingFragment (detail::RawFragmentHeader frag)
 Used to indicate that the given Fragment is now completely in the buffer. Will check for buffer completeness, and unset the pending flag. More...
 
size_t GetIncompleteEventCount ()
 Returns the number of buffers which contain data but are not yet complete. More...
 
size_t GetPendingEventCount ()
 Returns the number of events which are complete but waiting on lower sequenced events to finish. More...
 
size_t GetLockedBufferCount ()
 Returns the number of buffers currently owned by this manager. More...
 
size_t GetArtEventCount ()
 Returns the number of events sent to art this run. More...
 
size_t GetFragmentCount (Fragment::sequence_id_t seqID, Fragment::type_t type=Fragment::InvalidFragmentType)
 Get the count of Fragments of a given type in an event. More...
 
size_t GetFragmentCountInBuffer (int buffer, Fragment::type_t type=Fragment::InvalidFragmentType)
 Get the count of Fragments of a given type in a buffer. More...
 
void RunArt (const std::shared_ptr< art_config_file > &config_file, const std::shared_ptr< std::atomic< pid_t >> &pid_out)
 Run an art instance, recording the return codes and restarting it until the end flag is raised.
 
void StartArt ()
 Start all the art processes.
 
pid_t StartArtProcess (fhicl::ParameterSet pset)
 Start one art process. More...
 
void ShutdownArtProcesses (std::set< pid_t > &pids)
 Shutdown a set of art processes. More...
 
void ReconfigureArt (fhicl::ParameterSet art_pset, run_id_t newRun=0, int n_art_processes=-1)
 Restart all art processes, using the given fhicl code to configure the new art processes. More...
 
bool endOfData ()
 Indicate that the end of input has been reached to the art processes. More...
 
void startRun (run_id_t runID)
 Start a Run. More...
 
run_id_t runID () const
 Get the current Run number. More...
 
bool endRun ()
 Send an EndOfRunFragment to the art thread. More...
 
void rolloverSubrun (sequence_id_t boundary, subrun_id_t subrun)
 Rollover the subrun after the specified event. More...
 
void rolloverSubrun ()
 Add a subrun transition immediately after the highest currently define sequence ID.
 
void sendMetrics ()
 Send metrics to the MetricManager, if one has been instantiated in the application.
 
void setRequestMode (detail::RequestMessageMode mode)
 Set the RequestMessageMode for all outgoing data requests. More...
 
void setOverwrite (bool overwrite)
 Set the overwrite flag (non-reliable data transfer) for the Shared Memory. More...
 
void AddInitFragment (FragmentPtr &frag)
 Set the stored Init fragment, if one has not yet been set already.
 
uint32_t GetBroadcastKey ()
 Gets the shared memory key of the broadcast SharedMemoryManager. More...
 
RawDataType * GetDroppedDataAddress (Fragment::fragment_id_t frag)
 Gets the address of the "dropped data" fragment. Used for testing. More...
 
void UpdateArtConfiguration (fhicl::ParameterSet art_pset)
 Updates the internally-stored copy of the art configuration. More...
 
void CheckPendingBuffers ()
 Check for buffers which are ready to be marked incomplete and released to art and issue tokens for any buffers which are avaialble.
 
subrun_id_t GetSubrunForSequenceID (Fragment::sequence_id_t seqID)
 Get the subrun number that the given Sequence ID would be assigned to. More...
 
subrun_id_t GetCurrentSubrun ()
 Get the current subrun number (Gets the last defined subrun) More...
 

Static Public Attributes

static const std::string FRAGMENTS_RECEIVED_STAT_KEY
 Key for Fragments Received MonitoredQuantity.
 
static const std::string EVENTS_RELEASED_STAT_KEY
 Key for the Events Released MonitoredQuantity.
 

Detailed Description

The SharedMemoryEventManager is a SharedMemoryManger which tracks events as they are built.

Definition at line 92 of file SharedMemoryEventManager.hh.

Constructor & Destructor Documentation

artdaq::SharedMemoryEventManager::SharedMemoryEventManager ( const fhicl::ParameterSet &  pset,
fhicl::ParameterSet  art_pset 
)

SharedMemoryEventManager Constructor.

Parameters
psetParameterSet used to configure SharedMemoryEventManager. See artdaq::SharedMemoryEventManager::Config for description of parameters
art_psetParameterSet used to configure art. See art::Config for description of expected document format

Definition at line 23 of file SharedMemoryEventManager.cc.

Member Function Documentation

bool artdaq::SharedMemoryEventManager::AddFragment ( FragmentPtr  frag,
size_t  timeout_usec,
FragmentPtr &  outfrag 
)

Copy a Fragment into the SharedMemoryEventManager.

Parameters
fragFragmentPtr object
timeout_usecTimeout for adding Fragment to the Shared Memory
[out]outfragRejected Fragment if timeout occurs
Returns
Whether the Fragment was successfully added

Definition at line 174 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::DoneWritingFragment ( detail::RawFragmentHeader  frag)

Used to indicate that the given Fragment is now completely in the buffer. Will check for buffer completeness, and unset the pending flag.

Parameters
fragFragment that is now completely in the buffer.

Definition at line 278 of file SharedMemoryEventManager.cc.

bool artdaq::SharedMemoryEventManager::endOfData ( )

Indicate that the end of input has been reached to the art processes.

Returns
True if the end proceeded correctly

Put the end-of-data marker onto the RawEvent queue (if possible), wait for the reader function to exit, and fill in the reader return value. This scenario returns true. If the end-of-data marker can not be pushed onto the RawEvent queue, false is returned.

Definition at line 721 of file SharedMemoryEventManager.cc.

bool artdaq::SharedMemoryEventManager::endRun ( )

Send an EndOfRunFragment to the art thread.

Returns
True if enqueue successful

Definition at line 849 of file SharedMemoryEventManager.cc.

size_t artdaq::SharedMemoryEventManager::GetArtEventCount ( )
inline

Returns the number of events sent to art this run.

Returns
The number of events sent to art this run

Definition at line 236 of file SharedMemoryEventManager.hh.

uint32_t artdaq::SharedMemoryEventManager::GetBroadcastKey ( )
inline

Gets the shared memory key of the broadcast SharedMemoryManager.

Returns
The shared memory key of the broadcast SharedMemoryManager

Definition at line 354 of file SharedMemoryEventManager.hh.

subrun_id_t artdaq::SharedMemoryEventManager::GetCurrentSubrun ( )
inline

Get the current subrun number (Gets the last defined subrun)

Returns
Number of the subrun that corresponds to events with the maximum possible sequence ID.

Definition at line 397 of file SharedMemoryEventManager.hh.

RawDataType* artdaq::SharedMemoryEventManager::GetDroppedDataAddress ( Fragment::fragment_id_t  frag)
inline

Gets the address of the "dropped data" fragment. Used for testing.

Parameters
fragFragment ID to get "dropped data" for
Returns
Pointer to the data payload of the "dropped data" fragment

Definition at line 361 of file SharedMemoryEventManager.hh.

size_t artdaq::SharedMemoryEventManager::GetFragmentCount ( Fragment::sequence_id_t  seqID,
Fragment::type_t  type = Fragment::InvalidFragmentType 
)

Get the count of Fragments of a given type in an event.

Parameters
seqIDSequence ID of Fragments
typeType of fragments to count. Use InvalidFragmentType to count all fragments (default)
Returns
Number of Fragments in event of given type

Definition at line 343 of file SharedMemoryEventManager.cc.

size_t artdaq::SharedMemoryEventManager::GetFragmentCountInBuffer ( int  buffer,
Fragment::type_t  type = Fragment::InvalidFragmentType 
)

Get the count of Fragments of a given type in a buffer.

Parameters
bufferBuffer to count
typeType of fragments to count. Use InvalidFragmentType to count all fragments (default)
Returns
Number of Fragments in buffer of given type

Definition at line 348 of file SharedMemoryEventManager.cc.

size_t artdaq::SharedMemoryEventManager::GetIncompleteEventCount ( )
inline

Returns the number of buffers which contain data but are not yet complete.

Returns
The number of buffers which contain data but are not yet complete

Definition at line 218 of file SharedMemoryEventManager.hh.

size_t artdaq::SharedMemoryEventManager::GetLockedBufferCount ( )
inline

Returns the number of buffers currently owned by this manager.

Returns
The number of buffers currently owned by this manager

Definition at line 230 of file SharedMemoryEventManager.hh.

size_t artdaq::SharedMemoryEventManager::GetPendingEventCount ( )
inline

Returns the number of events which are complete but waiting on lower sequenced events to finish.

Returns
The number of events which are complete but waiting on lower sequenced events to finish

Definition at line 224 of file SharedMemoryEventManager.hh.

artdaq::SharedMemoryEventManager::subrun_id_t artdaq::SharedMemoryEventManager::GetSubrunForSequenceID ( Fragment::sequence_id_t  seqID)

Get the subrun number that the given Sequence ID would be assigned to.

Parameters
seqIDSequence ID to check
Returns
Subrun number that the given sequence ID will be associated with

Definition at line 998 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::ReconfigureArt ( fhicl::ParameterSet  art_pset,
run_id_t  newRun = 0,
int  n_art_processes = -1 
)

Restart all art processes, using the given fhicl code to configure the new art processes.

Parameters
art_psetParameterSet used to configure art
newRunNew Run number for reconfigured art
n_art_processesNumber of art processes to start, -1 (default) leaves the number unchanged

Definition at line 690 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::rolloverSubrun ( sequence_id_t  boundary,
subrun_id_t  subrun 
)

Rollover the subrun after the specified event.

Parameters
boundarysequence ID of the boundary (Event with seqID == boundary will be in new subrun)
subrunSubrun number of subrun after boundary

Definition at line 877 of file SharedMemoryEventManager.cc.

run_id_t artdaq::SharedMemoryEventManager::runID ( ) const
inline

Get the current Run number.

Returns
The current Run number

Definition at line 305 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::setOverwrite ( bool  overwrite)
inline

Set the overwrite flag (non-reliable data transfer) for the Shared Memory.

Parameters
overwriteWhether to allow the writer to overwrite data that has not yet been read

Definition at line 343 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::setRequestMode ( detail::RequestMessageMode  mode)
inline

Set the RequestMessageMode for all outgoing data requests.

Parameters
modeMode to set

Definition at line 334 of file SharedMemoryEventManager.hh.

void artdaq::SharedMemoryEventManager::ShutdownArtProcesses ( std::set< pid_t > &  pids)

Shutdown a set of art processes.

Parameters
pidsPIDs of the art processes

Definition at line 554 of file SharedMemoryEventManager.cc.

pid_t artdaq::SharedMemoryEventManager::StartArtProcess ( fhicl::ParameterSet  pset)

Start one art process.

Parameters
psetParameterSet to send to this art process
Returns
pid_t of the started process

Definition at line 512 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::startRun ( run_id_t  runID)

Start a Run.

Parameters
runIDRun number of the new run

Definition at line 811 of file SharedMemoryEventManager.cc.

void artdaq::SharedMemoryEventManager::UpdateArtConfiguration ( fhicl::ParameterSet  art_pset)

Updates the internally-stored copy of the art configuration.

Parameters
art_psetParameterSet used to configure art

This method updates the internally-stored copy of the art configuration, but it does not restart art processes. So, if this method is called while art processes are running, it will have no effect until the next restart, such as the next Start of run. Typically, this method is intended to be called between runs, when no art processes are running.

Definition at line 1364 of file SharedMemoryEventManager.cc.

artdaq::RawDataType * artdaq::SharedMemoryEventManager::WriteFragmentHeader ( detail::RawFragmentHeader  frag,
bool  dropIfNoBuffersAvailable = false 
)

Get a pointer to a reserved memory area for the given Fragment header.

Parameters
fragFragment header (contains sequence ID and size information)
dropIfNoBuffersAvailableWhether to drop the fragment (instead of returning nullptr) when no buffers are available (Default: false)
Returns
Pointer to memory location for Fragment body (Header is copied into buffer here)

Definition at line 197 of file SharedMemoryEventManager.cc.


The documentation for this class was generated from the following files: