47 : tPixelDigi_(consumes(conf.getParameter<
edm::
InputTag>(
"src"))),
48 tPutPixelDigi_(produces<
edm::DetSetVector<
PixelDigi>>()),
49 nrows_(conf.getParameter<int32_t>(
"nrows")),
50 ncols_(conf.getParameter<int32_t>(
"ncols")),
51 nrocs_(conf.getParameter<int32_t>(
"nrocs")),
52 iters_(conf.getParameter<int32_t>(
"iters")),
53 fakeAdc_(conf.getParameter<uint32_t>(
"fakeAdc")) {
58 <<
" number of columns not divisible with"
59 <<
" number of ROCs\n";
66 <<
" too many columns per ROC"
67 <<
" or too many iterations set\n"
68 <<
" Ncol/Nrocs+2*iters should not be"
69 <<
" more than " <<
sizeof(
uint64_t) * 8 <<
"\n";
72 std::vector<int32_t> k1(conf.
getParameter<std::vector<int32_t>>(
"kernel1"));
73 std::vector<int32_t> k2(conf.
getParameter<std::vector<int32_t>>(
"kernel2"));
79 for (
int j = 0;
j <
w;
j++) {
96 desc.add<int32_t>(
"nrows", 160);
97 desc.add<int32_t>(
"ncols", 416);
98 desc.add<int32_t>(
"nrocs", 8);
99 desc.add<int32_t>(
"iters", 1);
100 desc.add<std::vector<int32_t>>(
"kernel1", {7, 7, 7});
101 desc.add<std::vector<int32_t>>(
"kernel2", {2, 7, 2});
102 desc.add<uint32_t>(
"fakeAdc", 100);
110 auto outputDigis = std::make_unique<edm::DetSetVector<PixelDigi>>();
113 const int arrSize =
nrocs_ * rocSize;
119 for (
auto const& ds : inputDigi) {
120 auto rawId = ds.detId();
122 detDigis = &(outputDigis->find_or_insert(rawId));
124 memset(imap, 0, arrSize *
sizeof(
uint64_t));
125 for (
auto const& di : ds) {
134 (*detDigis).data.emplace_back(di.row(), di.column(), di.adc(), 0);
137 std::memcpy(map1, imap, arrSize *
sizeof(
uint64_t));
138 memset(map2, 0, arrSize *
sizeof(
uint64_t));
146 for (
int row = 0; row <
nrows_; row++,
i++,
o++) {
169 unsigned char valid = 0;
170 unsigned char const validMask = (1 <<
ksize_) - 1;
180 for (
int row = 0; row <
nrows_; row++,
o++) {
181 if ((
valid & validMask) != 0) {
186 v ^= (kernel[
ii] <<
jj);