CMS 3D CMS Logo

CTPPSPixelRawToDigi.cc
Go to the documentation of this file.
1 /*
2  * adapting to CTPPS pixel detector March 2017 - F.Ferro
3  */
4 
6 
10 
12 
17 
19 
21 
22 using namespace std;
23 
25  : config_(conf)
26 
27 {
28  FEDRawDataCollection_ = consumes<FEDRawDataCollection>(config_.getParameter<edm::InputTag>("inputLabel"));
29 
30  produces<edm::DetSetVector<CTPPSPixelDigi>>();
31 
32  includeErrors_ = config_.getParameter<bool>("includeErrors");
33  mappingLabel_ = config_.getParameter<std::string>("mappingLabel");
34 
35  if (includeErrors_) {
36  produces<edm::DetSetVector<CTPPSPixelDataError>>();
37  }
38 }
39 
41  edm::LogInfo("CTPPSPixelRawToDigi") << " CTPPSPixelRawToDigi destructor!";
42 }
43 
46  desc.add<bool>("includeErrors", true);
47  desc.add<edm::InputTag>("inputLabel", edm::InputTag("rawDataCollector"));
48  desc.add<std::string>("mappingLabel", "RPix");
49  descriptions.add("ctppsPixelDigis", desc);
50 }
51 
54  ev.getByToken(FEDRawDataCollection_, buffers);
55 
57 
58  bool data_exist = false;
60  const FEDRawData& tempRawData = buffers->FEDData(fed);
61  if (tempRawData.size() != 0) {
62  data_exist = true;
63  break;
64  }
65  }
67  auto collection = std::make_unique<edm::DetSetVector<CTPPSPixelDigi>>();
68 
69  auto errorcollection = std::make_unique<edm::DetSetVector<CTPPSPixelDataError>>();
70 
71  if (data_exist) {
72  es.get<CTPPSPixelDAQMappingRcd>().get(mapping);
73 
74  fedIds_ = mapping->fedIds();
75 
76  CTPPSPixelDataFormatter formatter(mapping->ROCMapping);
77  formatter.setErrorStatus(includeErrors_);
78 
79  bool errorsInEvent = false;
81 
82  for (auto aFed = fedIds_.begin(); aFed != fedIds_.end(); ++aFed) {
83  int fedId = *aFed;
84 
85  edm::LogInfo("CTPPSPixelRawToDigi") << " PRODUCE DIGI FOR FED: " << dec << fedId << endl;
86 
89  const FEDRawData& fedRawData = buffers->FEDData(fedId);
90 
91  formatter.interpretRawData(errorsInEvent, fedId, fedRawData, *collection, errors);
92 
93  if (includeErrors_) {
94  for (auto const& is : errors) {
95  uint32_t errordetid = is.first;
97  if (errordetid == RPixErrorChecker::dummyDetId) {
98  nodeterrors.insert(nodeterrors.end(), errors[errordetid].begin(), errors[errordetid].end());
99  } else {
100  edm::DetSet<CTPPSPixelDataError>& errorDetSet = errorcollection->find_or_insert(errordetid);
101  errorDetSet.data.insert(errorDetSet.data.end(), is.second.begin(), is.second.end());
102  }
103  }
104  }
105  }
106 
107  if (includeErrors_) {
108  errorcollection->find_or_insert(RPixErrorChecker::dummyDetId).data = nodeterrors;
109  }
110  if (errorsInEvent)
111  LogDebug("CTPPSPixelRawToDigi") << "Error words were stored in this event";
112  }
114  ev.put(std::move(collection));
115 
116  if (includeErrors_) {
117  ev.put(std::move(errorcollection));
118  }
119 }
120 
#define LogDebug(id)
void setErrorStatus(bool theErrorStatus)
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
std::set< unsigned int > fedIds() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::ParameterSet config_
CTPPSPixelRawToDigi(const edm::ParameterSet &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::map< uint32_t, DetErrors > Errors
bool ev
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
static constexpr Word32 dummyDetId
std::set< unsigned int > fedIds_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< CTPPSPixelDataError > DetErrors
std::map< CTPPSPixelFramePosition, CTPPSPixelROCInfo > ROCMapping
void interpretRawData(bool &errorsInEvent, int fedId, const FEDRawData &data, Collection &digis, Errors &errors)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
collection_type data
Definition: DetSet.h:81
T get() const
Definition: EventSetup.h:73
void produce(edm::Event &, const edm::EventSetup &) override
get data, convert to digis attach againe to Event
edm::EDGetTokenT< FEDRawDataCollection > FEDRawDataCollection_
def move(src, dest)
Definition: eostools.py:511