CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SiPixelDigiErrorsFromSoA.cc
Go to the documentation of this file.
1 #include <memory>
2 
23 
25 public:
27  ~SiPixelDigiErrorsFromSoA() 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 
40 
42  std::unique_ptr<SiPixelFedCablingTree> cabling_;
43 
44  const std::vector<int> tkerrorlist_;
45  const std::vector<int> usererrorlist_;
46 
47  const bool usePhase1_;
48 };
49 
51  : cablingToken_(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("CablingMapLabel")))),
52  digiErrorSoAGetToken_{consumes<SiPixelErrorsSoA>(iConfig.getParameter<edm::InputTag>("digiErrorSoASrc"))},
53  errorPutToken_{produces<edm::DetSetVector<SiPixelRawDataError>>()},
54  tkErrorPutToken_{produces<DetIdCollection>()},
55  userErrorPutToken_{produces<DetIdCollection>("UserErrorModules")},
56  disabledChannelPutToken_{produces<edmNew::DetSetVector<PixelFEDChannel>>()},
57  tkerrorlist_(iConfig.getParameter<std::vector<int>>("ErrorList")),
58  usererrorlist_(iConfig.getParameter<std::vector<int>>("UserErrorList")),
59  usePhase1_(iConfig.getParameter<bool>("UsePhase1")) {}
60 
63  desc.add<edm::InputTag>("digiErrorSoASrc", edm::InputTag("siPixelDigiErrorsSoA"));
64  // the configuration parameters here are named following those in SiPixelRawToDigi
65  desc.add<std::string>("CablingMapLabel", "")->setComment("CablingMap label");
66  desc.add<bool>("UsePhase1", false)->setComment("## Use phase1");
67  desc.add<std::vector<int>>("ErrorList", std::vector<int>{29})
68  ->setComment("## ErrorList: list of error codes used by tracking to invalidate modules");
69  desc.add<std::vector<int>>("UserErrorList", std::vector<int>{40})
70  ->setComment("## UserErrorList: list of error codes used by Pixel experts for investigation");
71  descriptions.addWithDefaultLabel(desc);
72 }
73 
75  // pack errors into collection
76 
77  // initialize cabling map or update if necessary
78  if (cablingWatcher_.check(iSetup)) {
79  // cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel)
80  const SiPixelFedCablingMap* cablingMap = &iSetup.getData(cablingToken_);
81  cabling_ = cablingMap->cablingTree();
82  LogDebug("map version:") << cabling_->version();
83  }
84 
85  const auto& digiErrors = iEvent.get(digiErrorSoAGetToken_);
86 
88  DetIdCollection tkerror_detidcollection{};
89  DetIdCollection usererror_detidcollection{};
90  edmNew::DetSetVector<PixelFEDChannel> disabled_channelcollection{};
91 
92  PixelDataFormatter formatter(cabling_.get(), usePhase1_); // for phase 1 & 0
93  const PixelDataFormatter::Errors* formatterErrors = digiErrors.formatterErrors();
94  assert(formatterErrors != nullptr);
95  auto errors = *formatterErrors; // make a copy
97 
98  auto size = digiErrors.size();
99  for (auto i = 0U; i < size; i++) {
100  SiPixelErrorCompact err = digiErrors.error(i);
101  if (err.errorType != 0) {
103  errors[err.rawId].push_back(error);
104  }
105  }
106 
107  formatter.unpackFEDErrors(errors,
108  tkerrorlist_,
110  errorcollection,
111  tkerror_detidcollection,
112  usererror_detidcollection,
113  disabled_channelcollection,
114  nodeterrors);
115 
116  const uint32_t dummydetid = 0xffffffff;
117  edm::DetSet<SiPixelRawDataError>& errorDetSet = errorcollection.find_or_insert(dummydetid);
118  errorDetSet.data = nodeterrors;
119 
120  iEvent.emplace(errorPutToken_, std::move(errorcollection));
121  iEvent.emplace(tkErrorPutToken_, std::move(tkerror_detidcollection));
122  iEvent.emplace(userErrorPutToken_, std::move(usererror_detidcollection));
123  iEvent.emplace(disabledChannelPutToken_, std::move(disabled_channelcollection));
124 }
125 
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
const edm::ESGetToken< SiPixelFedCablingMap, SiPixelFedCablingMapRcd > cablingToken_
const edm::EDPutTokenT< edm::DetSetVector< SiPixelRawDataError > > errorPutToken_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::EDPutTokenT< edmNew::DetSetVector< PixelFEDChannel > > disabledChannelPutToken_
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
const edm::EDGetTokenT< SiPixelErrorsSoA > digiErrorSoAGetToken_
assert(be >=bs)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool getData(T &iHolder) const
Definition: EventSetup.h:128
const edm::EDPutTokenT< DetIdCollection > tkErrorPutToken_
std::unique_ptr< SiPixelFedCablingTree > cabling_
int iEvent
Definition: GenABIO.cc:224
def move
Definition: eostools.py:511
const edm::EDPutTokenT< DetIdCollection > userErrorPutToken_
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::unique_ptr< SiPixelFedCablingTree > cablingTree() const
OrphanHandle< PROD > emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
Definition: Event.h:433
SiPixelDigiErrorsFromSoA(const edm::ParameterSet &iConfig)
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
~SiPixelDigiErrorsFromSoA() override=default
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
const std::vector< int > tkerrorlist_
collection_type data
Definition: DetSet.h:80
const std::vector< int > usererrorlist_
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
tuple size
Write out results.
std::vector< SiPixelRawDataError > DetErrors
Pixel error – collection of errors and error information.
edm::ESWatcher< SiPixelFedCablingMapRcd > cablingWatcher_
std::map< cms_uint32_t, DetErrors > Errors
#define LogDebug(id)