Skip to content

Commit

Permalink
Merge pull request #25250 from Dr15Jones/globalGctDigiToRaw
Browse files Browse the repository at this point in the history
Converted GctDigiToRaw to global module
  • Loading branch information
cmsbuild committed Nov 20, 2018
2 parents 0e1eec6 + cb539ef commit bcef1f8
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 61 deletions.
73 changes: 28 additions & 45 deletions EventFilter/GctRawToDigi/plugins/GctDigiToRaw.cc
Expand Up @@ -42,13 +42,12 @@ GctDigiToRaw::GctDigiToRaw(const edm::ParameterSet& iConfig) :
packRctCalo_(iConfig.getUntrackedParameter<bool>("packRctCalo", true)),
fedId_(iConfig.getParameter<int>("gctFedId")),
verbose_(iConfig.getUntrackedParameter<bool>("verbose",false)),
counter_(0),
formatTranslator_()
counter_(0)
{
LogDebug("GCT") << "GctDigiToRaw will pack FED Id " << fedId_;

//register the products
produces<FEDRawDataCollection>();
tokenPut_ = produces<FEDRawDataCollection>();
const edm::InputTag rctInputTag = iConfig.getParameter<edm::InputTag>("rctInputLabel");
const edm::InputTag gctInputTag = iConfig.getParameter<edm::InputTag>("gctInputLabel");
const std::string& gctInputLabelStr = gctInputTag.label();
Expand All @@ -73,30 +72,25 @@ GctDigiToRaw::GctDigiToRaw(const edm::ParameterSet& iConfig) :
}


GctDigiToRaw::~GctDigiToRaw()
{
// do anything here that needs to be done at destruction time
// (e.g. close files, deallocate resources etc.)
}


//
// member functions
//

// ------------ method called to produce the data ------------
void
GctDigiToRaw::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
GctDigiToRaw::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const
{
using namespace edm;

counter_++; // To "simulate" bunch crossings for now...
unsigned int bx = counter_ % 3564; // What's the proper way of doing this?
auto counter = counter_++; // To "simulate" bunch crossings for now...
unsigned int bx = counter % 3564; // What's the proper way of doing this?
EventNumber_t eventNumber = iEvent.id().event();

// digi to block converter
// Supply bx and EvID to the packer so it can make internal capture block headers.
formatTranslator_.setPackingBxId(bx);
formatTranslator_.setPackingEventId(eventNumber);
GctFormatTranslateMCLegacy formatTranslator;
formatTranslator.setPackingBxId(bx);
formatTranslator.setPackingEventId(eventNumber);

// get GCT digis
edm::Handle<L1GctEmCandCollection> isoEm;
Expand Down Expand Up @@ -151,10 +145,10 @@ GctDigiToRaw::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
}

// create the raw data collection
std::unique_ptr<FEDRawDataCollection> rawColl(new FEDRawDataCollection());
FEDRawDataCollection rawColl;

// get the GCT buffer
FEDRawData& fedRawData=rawColl->FEDData(fedId_);
FEDRawData& fedRawData=rawColl.FEDData(fedId_);

// set the size & make pointers to the header, beginning of payload, and footer.
unsigned int rawSize = 88; // MUST BE MULTIPLE OF 8! (slink packets are 64 bit, but using 8-bit data struct).
Expand All @@ -170,37 +164,37 @@ GctDigiToRaw::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
fedHeader.set(pHeader, 1, eventNumber, bx, fedId_); // what should the bx_ID be?

// Pack GCT jet output digis
formatTranslator_.writeGctOutJetBlock(pPayload,
cenJets.product(),
forJets.product(),
tauJets.product(),
hfRingSums.product(),
hfBitCounts.product(),
htMiss.product());
formatTranslator.writeGctOutJetBlock(pPayload,
cenJets.product(),
forJets.product(),
tauJets.product(),
hfRingSums.product(),
hfBitCounts.product(),
htMiss.product());

pPayload += 36; //advance payload pointer

// Pack GCT EM and energy sums digis.
formatTranslator_.writeGctOutEmAndEnergyBlock(pPayload,
isoEm.product(),
nonIsoEm.product(),
etTotal.product(),
etHad.product(),
etMiss.product());
formatTranslator.writeGctOutEmAndEnergyBlock(pPayload,
isoEm.product(),
nonIsoEm.product(),
etTotal.product(),
etHad.product(),
etMiss.product());

pPayload += 28; //advance payload pointer

// Pack RCT EM Cands
if(packRctEmThisEvent)
{
formatTranslator_.writeRctEmCandBlocks(pPayload, rctEm.product());
formatTranslator.writeRctEmCandBlocks(pPayload, rctEm.product());
pPayload+=232; //advance payload pointer
}

// Pack RCT Calo Regions
if(packRctCaloThisEvent)
{
formatTranslator_.writeAllRctCaloRegionBlock(pPayload, rctCalo.product());
formatTranslator.writeAllRctCaloRegionBlock(pPayload, rctCalo.product());
}

// Write CDF footer (exactly as told by Marco Zanetti)
Expand All @@ -211,11 +205,11 @@ GctDigiToRaw::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
if (verbose_) { print(fedRawData); }

// Put the collection in the event.
iEvent.put(std::move(rawColl));
iEvent.emplace(tokenPut_,std::move(rawColl));
}


void GctDigiToRaw::print(FEDRawData& data) {
void GctDigiToRaw::print(FEDRawData& data) const {

const unsigned char * d = data.data();

Expand All @@ -227,17 +221,6 @@ void GctDigiToRaw::print(FEDRawData& data) {
}


// ------------ method called once each job just before starting event loop ------------
void
GctDigiToRaw::beginJob()
{
}

// ------------ method called once each job just after ending the event loop ------------
void
GctDigiToRaw::endJob() {
}

/// make this a plugin
DEFINE_FWK_MODULE(GctDigiToRaw);

26 changes: 10 additions & 16 deletions EventFilter/GctRawToDigi/plugins/GctDigiToRaw.h
Expand Up @@ -25,7 +25,7 @@

// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/EDProducer.h"
#include "FWCore/Framework/interface/global/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
Expand All @@ -38,17 +38,14 @@
// class decleration
//

class GctDigiToRaw : public edm::EDProducer {
class GctDigiToRaw : public edm::global::EDProducer<> {
public:
explicit GctDigiToRaw(const edm::ParameterSet&);
~GctDigiToRaw() override;

private: // methods
void beginJob() override;
void produce(edm::Event&, const edm::EventSetup&) override;
void endJob() override ;
void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const final;

void print(FEDRawData& data);
void print(FEDRawData& data) const;

private: // members

Expand All @@ -67,22 +64,19 @@ class GctDigiToRaw : public edm::EDProducer {
edm::EDGetTokenT<L1GctJetCountsCollection> tokenGctJetCounts_;
edm::EDGetTokenT<L1CaloEmCollection> tokenCaloEm_;
edm::EDGetTokenT<L1CaloRegionCollection> tokenCaloRegion_;

edm::EDPutTokenT<FEDRawDataCollection> tokenPut_;
// pack flags
bool packRctEm_;
bool packRctCalo_;
const bool packRctEm_;
const bool packRctCalo_;

// FED numbers
int fedId_;
const int fedId_;

// print out for each event
bool verbose_;
const bool verbose_;

// counter events
int counter_;

// digi to block converter
GctFormatTranslateMCLegacy formatTranslator_;
mutable std::atomic<int> counter_;

};

Expand Down

0 comments on commit bcef1f8

Please sign in to comment.