FRDOutputModule

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#ifndef IOPool_Streamer_interface_FRDOutputModule_h
#define IOPool_Streamer_interface_FRDOutputModule_h

// CMSSW headers
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"

//#include "DataFormats/FEDRawData/interface/FEDRawData.h"
#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
#include "FWCore/Framework/interface/EventForOutput.h"
#include "FWCore/Framework/interface/LuminosityBlockForOutput.h"
#include "FWCore/Framework/interface/one/OutputModule.h"
//#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h"

class FRDOutputModule : public edm::one::OutputModule<edm::one::WatchLuminosityBlocks> {
public:
  explicit FRDOutputModule(edm::ParameterSet const& ps);
  ~FRDOutputModule() override;

  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

private:
  void write(edm::EventForOutput const& e) override;
  //void beginRun(edm::RunForOutput const&) override {}
  //void endRun(edm::RunForOutput const&) override {}
  void writeRun(const edm::RunForOutput&) override {}
  void writeLuminosityBlock(const edm::LuminosityBlockForOutput&) override {}

  void beginLuminosityBlock(edm::LuminosityBlockForOutput const&) override;
  void endLuminosityBlock(edm::LuminosityBlockForOutput const&) override;

  void finishFileWrite(unsigned int run, int ls);
  uint32_t adler32() const { return (adlerb_ << 16) | adlera_; }

  const edm::EDGetTokenT<FEDRawDataCollection> token_;

  const uint32_t frdVersion_;
  const uint32_t frdFileVersion_;
  std::string filePrefix_;
  std::string fileName_;

  int outfd_ = -1;
  uint32_t adlera_;
  uint32_t adlerb_;

  uint32_t perFileEventCount_;
  uint64_t perFileSize_;

  bool fileWritten_ = false;
};

#endif  // IOPool_Streamer_interface_FRDOutputModule_h