Processing frame

The art::ProcessingFrame class encapsulates contextual information related to the processing of user modules. It is exposed to shared and replicated modules, but not legacy modules. Its purpose is to constrain the places at which contextual information can (and should) be accessed. For shared and replicated modules, it is the preferred way of creating a service handle:

void MyAnalyzer::analyze(art::Event const& e, art::ProcessingFrame const& frame)
  auto sh = frame.serviceHandle<MyService const>(); // 'sh' is of type art::ServiceHandle<MyService const>

This interface also allows art the ability to create and provide replicated services (not yet supported) in a fairly seamless way.

Schedule ID

In rare circumstances, it may be necessary for users to know the ID of the schedule that is active on a given thread. For this reason, the ProcessingFrame::scheduleID() member function exists, whose return type is art::ScheduleID. Legacy modules can glean the active schedule ID by calling the base-class member function scheduleID(). Note that except for the event-level call, the ScheduleID value will be invalid for legacy modules.