CMS 3D CMS Logo

SiPixelDigiErrorsFromSoAAlpaka.cc
Go to the documentation of this file.
1 #include <memory>
2 
23 
25 public:
26  explicit SiPixelDigiErrorsFromSoAAlpaka(const edm::ParameterSet& iConfig);
27  ~SiPixelDigiErrorsFromSoAAlpaka() override = default;
28 
29  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
30 
31 private:
32  void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override;
33 
41 
43  std::unique_ptr<SiPixelFedCablingTree> cabling_;
44 
45  const std::vector<int> tkerrorlist_;
46  const std::vector<int> usererrorlist_;
47 
48  const bool usePhase1_;
49 };
50 
52  : cablingToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("CablingMapLabel")))),
53  digiErrorsSoAGetToken_{consumes<SiPixelDigiErrorsHost>(iConfig.getParameter<edm::InputTag>("digiErrorSoASrc"))},
54  fmtErrorsGetToken_{consumes<SiPixelFormatterErrors>(iConfig.getParameter<edm::InputTag>("fmtErrorsSoASrc"))},
55  errorPutToken_{produces<edm::DetSetVector<SiPixelRawDataError>>()},
56  tkErrorPutToken_{produces<DetIdCollection>()},
57  userErrorPutToken_{produces<DetIdCollection>("UserErrorModules")},
58  disabledChannelPutToken_{produces<edmNew::DetSetVector<PixelFEDChannel>>()},
59  tkerrorlist_(iConfig.getParameter<std::vector<int>>("ErrorList")),
60  usererrorlist_(iConfig.getParameter<std::vector<int>>("UserErrorList")),
61  usePhase1_(iConfig.getParameter<bool>("UsePhase1")) {}
62 
65  desc.add<edm::InputTag>("digiErrorSoASrc", edm::InputTag("siPixelDigis"));
66  desc.add<edm::InputTag>("fmtErrorsSoASrc", edm::InputTag("siPixelDigis"));
67  // the configuration parameters here are named following those in SiPixelRawToDigi
68  desc.add<std::string>("CablingMapLabel", "")->setComment("CablingMap label");
69  desc.add<bool>("UsePhase1", false)->setComment("## Use phase1");
70  desc.add<std::vector<int>>("ErrorList", std::vector<int>{29})
71  ->setComment("## ErrorList: list of error codes used by tracking to invalidate modules");
72  desc.add<std::vector<int>>("UserErrorList", std::vector<int>{40})
73  ->setComment("## UserErrorList: list of error codes used by Pixel experts for investigation");
74  descriptions.addWithDefaultLabel(desc);
75 }
76 
78  // pack errors into collection
79 
80  // initialize cabling map or update if necessary
81  if (cablingWatcher_.check(iSetup)) {
82  // cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel)
83  const SiPixelFedCablingMap* cablingMap = &iSetup.getData(cablingToken_);
84  cabling_ = cablingMap->cablingTree();
85  LogDebug("map version:") << cabling_->version();
86  }
87 
88  const auto& digiErrors = iEvent.get(digiErrorsSoAGetToken_);
89  const auto& formatterErrors = iEvent.get(fmtErrorsGetToken_);
90 
92  DetIdCollection tkerror_detidcollection{};
93  DetIdCollection usererror_detidcollection{};
94  edmNew::DetSetVector<PixelFEDChannel> disabled_channelcollection{};
95 
96  PixelDataFormatter formatter(cabling_.get(), usePhase1_); // for phase 1 & 0
97  auto errors = formatterErrors; // make a copy
99 
100  // if (digiErrors.view().size() > 0) { // TODO: need to know if this size will be useful or not and how to use it
101  uint32_t size = digiErrors.view().metadata().size();
102  for (auto i = 0U; i < size; i++) {
103  SiPixelErrorCompact err = digiErrors.view()[i].pixelErrors();
104  if (err.errorType != 0) {
106  errors[err.rawId].push_back(error);
107  }
108  }
109  // }
110 
111  formatter.unpackFEDErrors(errors,
112  tkerrorlist_,
114  errorcollection,
115  tkerror_detidcollection,
116  usererror_detidcollection,
117  disabled_channelcollection,
118  nodeterrors);
119 
120  const uint32_t dummydetid = 0xffffffff;
121  edm::DetSet<SiPixelRawDataError>& errorDetSet = errorcollection.find_or_insert(dummydetid);
122  errorDetSet.data = nodeterrors;
123 
124  iEvent.emplace(errorPutToken_, std::move(errorcollection));
125  iEvent.emplace(tkErrorPutToken_, std::move(tkerror_detidcollection));
126  iEvent.emplace(userErrorPutToken_, std::move(usererror_detidcollection));
127  iEvent.emplace(disabledChannelPutToken_, std::move(disabled_channelcollection));
128 }
129 
size
Write out results.
std::unique_ptr< SiPixelFedCablingTree > cabling_
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::unique_ptr< SiPixelFedCablingTree > cablingTree() const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::ESWatcher< SiPixelFedCablingMapRcd > cablingWatcher_
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::EDGetTokenT< SiPixelFormatterErrors > fmtErrorsGetToken_
const edm::EDGetTokenT< SiPixelDigiErrorsHost > digiErrorsSoAGetToken_
const edm::EDPutTokenT< DetIdCollection > userErrorPutToken_
const edm::EDPutTokenT< edm::DetSetVector< SiPixelRawDataError > > errorPutToken_
const edm::ESGetToken< SiPixelFedCablingMap, SiPixelFedCablingMapRcd > cablingToken_
SiPixelDigiErrorsFromSoAAlpaka(const edm::ParameterSet &iConfig)
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
collection_type data
Definition: DetSet.h:80
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
HLT enums.
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
Definition: errors.py:1
~SiPixelDigiErrorsFromSoAAlpaka() override=default
const edm::EDPutTokenT< DetIdCollection > tkErrorPutToken_
std::vector< SiPixelRawDataError > DetErrors
def move(src, dest)
Definition: eostools.py:511
const edm::EDPutTokenT< edmNew::DetSetVector< PixelFEDChannel > > disabledChannelPutToken_
Pixel error – collection of errors and error information.
#define LogDebug(id)