CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripSpyUnpackerModule.cc
Go to the documentation of this file.
1 /*\ \file SiStripSpyUnpackerModule.cc
2  * \brief Source code for the spy unpacking plugin module.
3  */
4 
5 // CMSSW includes
16 
17 // Needed for the FED cabling
21 
22 // Needed for the FED raw data collection
24 
25 // For the digi stuff.
28 
29 // For the unpacking object.
32 
33 // Standard includes
34 #include <memory>
35 #include <utility>
36 #include <string>
37 #include "boost/cstdint.hpp"
38 
39 namespace sistrip { class SpyUnpacker; class SpyUtilities; }
40 class SiStripFedCabling;
41 
42 using edm::LogError;
43 using edm::LogInfo;
44 
45 
46 namespace sistrip {
47 
57  {
58  public:
60  virtual ~SpyUnpackerModule();
61  virtual void beginRun( edm::Run&, const edm::EventSetup& );
62  virtual void produce( edm::Event&, const edm::EventSetup& );
63  private:
64  static const char* msgLb_;
65 
66  // Data members
67  //--------------
68  // Configuration
69  std::vector<uint32_t> fed_ids_;
72  const bool storeCounters_;
73  const bool storeScopeRawDigis_;
74 
75  // Unpacking
77 
78  //utilities for cabling etc...
80 
81  }; // end of SpyUnpackerModule class.
82 
83 } // end of namespace sistrip.
84 
85 namespace sistrip {
86 
87  const char* SpyUnpackerModule::msgLb_ = "SiStripSpyUnpackerModule";
88 
90  fed_ids_( pset.getParameter< std::vector<uint32_t> >("FEDIDs")),
91  productLabel_(pset.getParameter<edm::InputTag>("InputProductLabel")),
92  allowIncompleteEvents_(pset.getParameter<bool>("AllowIncompleteEvents")),
93  storeCounters_(pset.getParameter<bool>("StoreCounters")),
94  storeScopeRawDigis_(pset.getParameter<bool>("StoreScopeRawDigis")),
95  unpacker_(NULL)
96  {
97 
98  if ((fed_ids_.size()==0)) {
99  LogInfo(msgLb_) << "No FED IDs specified, so will try to unpack all FEDs with data" << std::endl;
101  for ( uint32_t ifed = FEDNumbering::MINSiStripFEDID; ifed <= FEDNumbering::MAXSiStripFEDID; ifed++ ) {
102  fed_ids_.push_back( ifed );
103  }
104  } // end of FED ID specified check.
105 
106  if ( edm::isDebugEnabled() ) LogTrace(msgLb_) << "["<< __func__ << "]:" << " Constructing object...";
107 
109 
110  if (storeScopeRawDigis_) produces< edm::DetSetVector<SiStripRawDigi> >("ScopeRawDigis");
111 
112  if (storeCounters_) {
113  produces< std::vector<uint32_t> >("L1ACount");
114  produces< std::vector<uint32_t> >("TotalEventCount");
115  }
116 
117  produces<uint32_t>("GlobalRunNumber");
118 
119  } // end of SpyUnpackerModule constructor.
120 
122  if ( unpacker_ ) { delete unpacker_; }
123  if ( edm::isDebugEnabled() ) {
124  LogTrace("SiStripSpyUnpacker")
125  << "[sistrip::SpyUnpackerModule::" << __func__ << "]"
126  << " Destructing object...";
127  }
128  }
129 
131  }
132 
133 
134 
142 
143 
144  const SiStripFedCabling* lCabling = utility_.getCabling( setup );
145 
146  //retrieve FED raw data (by label, which is "source" by default)
148  event.getByLabel( productLabel_, buffers );
149 
150  //create container for digis
151  std::auto_ptr< edm::DetSetVector<SiStripRawDigi> > digis(new edm::DetSetVector<SiStripRawDigi>);
152 
153  //if necessary, create container for event counters
154  std::auto_ptr< std::vector<uint32_t> > pTotalCounts(new std::vector<uint32_t>);
155  std::auto_ptr< std::vector<uint32_t> > pL1ACounts(new std::vector<uint32_t>);
156  //and for run number
157  std::auto_ptr<uint32_t> pGlobalRun(new uint32_t);
158  //create digis
159  // Using FED IDs...
160  unpacker_->createDigis(*lCabling,
161  *buffers,
162  digis.get(),
163  fed_ids_,
164  pTotalCounts.get(),
165  pL1ACounts.get(),
166  pGlobalRun.get()
167  );
168 
169  // Add digis to event
170  if (storeScopeRawDigis_) event.put( digis, "ScopeRawDigis" );
171 
172  //add counters to event
173  if (storeCounters_) {
174  event.put(pTotalCounts, "TotalEventCount");
175  event.put(pL1ACounts, "L1ACount");
176  }
177 
178  //add global run to the event
179  event.put(pGlobalRun, "GlobalRunNumber");
180 
181  } // end of SpyUnpackerModule::produce method.
182 
183 
184 } // end of sistrip namespace
185 
std::vector< uint32_t > fed_ids_
Vector of FED IDs to examine (FEDs).
bool isDebugEnabled()
SpyUnpackerModule(const edm::ParameterSet &)
void createDigis(const SiStripFedCabling &, const FEDRawDataCollection &, RawDigis *pDigis, const std::vector< uint32_t > &ids, Counters *pTotalEventCounts, Counters *pL1ACounts, uint32_t *aRunRef)
Creates the scope mode digis for the supplied FED IDs or detIds and stores event counters.
const bool storeScopeRawDigis_
True = store the scope mode raw digis.
Unpacks spy channel data into scope mode-like digis.
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
#define NULL
Definition: scimark2.h:8
A plug-in module that takes a FEDRawDataCollection as input from the Event and creates EDProducts con...
const bool allowIncompleteEvents_
Allow inconsistent (by event count, APV address) event storage.
const bool storeCounters_
True = store L1ID and TotalEventCount by FED key.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
#define LogTrace(id)
virtual void produce(edm::Event &, const edm::EventSetup &)
Scope mode digis and event counter producer. Retrieves cabling map from EventSetup and FEDRawDataColl...
const edm::InputTag productLabel_
The product label of the FEDRawDataCollection input.
const SiStripFedCabling * getCabling(const edm::EventSetup &)
Updates the cabling object from the DB.
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
virtual void beginRun(edm::Run &, const edm::EventSetup &)
sistrip::SpyUnpackerModule SiStripSpyUnpackerModule
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
Definition: Run.h:33