CMS 3D CMS Logo

Public Member Functions | Private Types | Private Member Functions | Private Attributes

FRDEventOutputModule< Consumer > Class Template Reference

#include <FRDEventOutputModule.h>

Inheritance diagram for FRDEventOutputModule< Consumer >:
edm::OutputModule

List of all members.

Public Member Functions

 FRDEventOutputModule (edm::ParameterSet const &ps)
 ~FRDEventOutputModule ()

Private Types

typedef unsigned int uint32

Private Member Functions

virtual void beginRun (edm::RunPrincipal const &)
virtual void endRun (edm::RunPrincipal const &)
virtual void write (edm::EventPrincipal const &e)
virtual void writeLuminosityBlock (edm::LuminosityBlockPrincipal const &)
virtual void writeRun (edm::RunPrincipal const &)

Private Attributes

std::string instance_
std::string label_
std::auto_ptr< Consumer > templateConsumer_

Detailed Description

template<class Consumer>
class FRDEventOutputModule< Consumer >

Definition at line 13 of file FRDEventOutputModule.h.


Member Typedef Documentation

template<class Consumer >
typedef unsigned int FRDEventOutputModule< Consumer >::uint32 [private]

Definition at line 15 of file FRDEventOutputModule.h.


Constructor & Destructor Documentation

template<class Consumer >
FRDEventOutputModule< Consumer >::FRDEventOutputModule ( edm::ParameterSet const &  ps) [explicit]

Consumers are suppose to provide: void doOutputEvent(const FRDEventMsgView& msg) void start() void stop()

Definition at line 40 of file FRDEventOutputModule.h.

                                                                              :
  edm::OutputModule(ps),
  templateConsumer_(new Consumer(ps)),
  label_(ps.getUntrackedParameter<std::string>("ProductLabel","source")),
  instance_(ps.getUntrackedParameter<std::string>("ProductInstance",""))
{
}
template<class Consumer >
FRDEventOutputModule< Consumer >::~FRDEventOutputModule ( )

Definition at line 49 of file FRDEventOutputModule.h.

{}

Member Function Documentation

template<class Consumer >
void FRDEventOutputModule< Consumer >::beginRun ( edm::RunPrincipal const &  ) [private, virtual]

Reimplemented from edm::OutputModule.

Definition at line 95 of file FRDEventOutputModule.h.

{
  templateConsumer_->start();
}
template<class Consumer >
void FRDEventOutputModule< Consumer >::endRun ( edm::RunPrincipal const &  ) [private, virtual]

Reimplemented from edm::OutputModule.

Definition at line 101 of file FRDEventOutputModule.h.

{
  templateConsumer_->stop();
}
template<class Consumer >
void FRDEventOutputModule< Consumer >::write ( edm::EventPrincipal const &  e) [private, virtual]

Implements edm::OutputModule.

Definition at line 52 of file FRDEventOutputModule.h.

References FEDRawData::data(), idDealer::description, edm::EventID::event(), event(), edm::EventBase::id(), UserOptions_cff::idx, edm::EventBase::luminosityBlock(), lumiQueryAPI::msg, edm::EventID::run(), and FEDRawData::size().

                                                                     {

  // serialize the FEDRawDataCollection into the format that we expect for
  // FRDEventMsgView objects (may be better ways to do this)
  edm::Event event(const_cast<edm::EventPrincipal&>(e), description());
  edm::Handle<FEDRawDataCollection> fedBuffers;
  event.getByLabel(label_, instance_, fedBuffers);

  // determine the expected size of the FRDEvent
  int expectedSize = (4 + 1024) * sizeof(uint32);
  for (int idx = 0; idx < 1024; ++idx) {
    FEDRawData singleFED = fedBuffers->FEDData(idx);
    expectedSize += singleFED.size();
    //if (singleFED.size() > 0) {
    //  std::cout << "FED #" << idx << " size = " << singleFED.size() << std::endl;
    //}
  }

  // build the FRDEvent into a temporary buffer
  boost::shared_array<unsigned char> workBuffer(new unsigned char[expectedSize + 256]);
  uint32 *bufPtr = (uint32*) workBuffer.get();
  *bufPtr++ = (uint32) 2;  // version number
  *bufPtr++ = (uint32) event.id().run();
  *bufPtr++ = (uint32) event.luminosityBlock();
  *bufPtr++ = (uint32) event.id().event();
  for (int idx = 0; idx < 1024; ++idx) {
    FEDRawData singleFED = fedBuffers->FEDData(idx);
    *bufPtr++ = singleFED.size();
  }
  for (int idx = 0; idx < 1024; ++idx) {
    FEDRawData singleFED = fedBuffers->FEDData(idx);
    if (singleFED.size() > 0) {
      memcpy(bufPtr, singleFED.data(), singleFED.size());
      *bufPtr += singleFED.size();
    }
  }

  // create the FRDEventMsgView and use the template consumer to write it out
  FRDEventMsgView msg(workBuffer.get());
  templateConsumer_->doOutputEvent(msg);
}
template<class Consumer >
virtual void FRDEventOutputModule< Consumer >::writeLuminosityBlock ( edm::LuminosityBlockPrincipal const &  ) [inline, private, virtual]

Implements edm::OutputModule.

Definition at line 32 of file FRDEventOutputModule.h.

{}
template<class Consumer >
virtual void FRDEventOutputModule< Consumer >::writeRun ( edm::RunPrincipal const &  ) [inline, private, virtual]

Implements edm::OutputModule.

Definition at line 31 of file FRDEventOutputModule.h.

{}

Member Data Documentation

template<class Consumer >
std::string FRDEventOutputModule< Consumer >::instance_ [private]

Definition at line 36 of file FRDEventOutputModule.h.

template<class Consumer >
std::string FRDEventOutputModule< Consumer >::label_ [private]

Definition at line 35 of file FRDEventOutputModule.h.

template<class Consumer >
std::auto_ptr<Consumer> FRDEventOutputModule< Consumer >::templateConsumer_ [private]

Definition at line 34 of file FRDEventOutputModule.h.