CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
HGCSiliconDetIdToROC.cc
Go to the documentation of this file.
2 
4  const int rocMax(6), cellRows(4), cellColumn(2);
5  const int type[rocMax] = {0, 0, 1, 1, 2, 2};
6  const int start1[rocMax][cellColumn] = {{3, 2}, {1, 0}, {1, 2}, {3, 4}, {7, 6}, {5, 4}};
7  const int start2[rocMax] = {0, 0, 0, 1, 4, 4};
8 
9  // key = ROC #; value = vector of trigger cell U.V
10  for (int roc = 0; roc < rocMax; ++roc) {
11  std::vector<std::pair<int, int> > cells;
12  if (type[roc] == 1) {
13  for (int i1 = 0; i1 < cellColumn; ++i1) {
14  int u = start1[roc][i1];
15  int v = start2[roc] + u / 2;
16  for (int i2 = 0; i2 < cellRows; ++i2) {
17  cells.emplace_back(u, v);
18  ++u;
19  }
20  }
21  } else if (type[roc] == 2) {
22  for (int i1 = 0; i1 < cellColumn; ++i1) {
23  int v = start2[roc];
24  int u = start1[roc][i1];
25  for (int i2 = 0; i2 < cellRows; ++i2) {
26  cells.emplace_back(u, v);
27  ++v;
28  }
29  }
30  } else {
31  for (int i1 = 0; i1 < cellColumn; ++i1) {
32  int u = start2[roc];
33  int v = start1[roc][i1];
34  for (int i2 = 0; i2 < cellRows; ++i2) {
35  cells.emplace_back(u, v);
36  ++u;
37  ++v;
38  }
39  }
40  }
42  }
43 
44  // key = trigger cell U,V; value = roc #
45  for (auto const& itr : triggerIdFromROC_) {
46  for (auto cell : itr.second)
47  triggerIdToROC_[cell] = itr.first;
48  }
49 }
50 
51 int HGCSiliconDetIdToROC::getROCNumber(int triggerCellU, int triggerCellV, int type) const {
52  auto itr = triggerIdToROC_.find(std::make_pair(triggerCellU, triggerCellV));
53  int roc = ((itr == triggerIdToROC_.end()) ? -1 : ((type == 0) ? itr->second : (1 + itr->second) / 2));
54  return roc;
55 }
56 
57 std::vector<std::pair<int, int> > HGCSiliconDetIdToROC::getTriggerId(int roc, int type) const {
58  std::vector<std::pair<int, int> > list;
59  if (type == 0) {
60  auto itr = triggerIdFromROC_.find(roc);
61  return ((itr == triggerIdFromROC_.end()) ? list : itr->second);
62  } else {
63  for (int k = 0; k < 2; ++k) {
64  int rocx = 2 * roc + k - 1;
65  auto itr = triggerIdFromROC_.find(rocx);
66  if (itr != triggerIdFromROC_.end()) {
67  for (auto cell : itr->second)
68  list.emplace_back(cell);
69  }
70  }
71  return list;
72  }
73 }
74 
76  for (auto const& itr : triggerIdFromROC_) {
77  std::cout << "ROC " << itr.first << " with " << (itr.second).size() << " trigger cells:";
78  for (auto cell : itr.second)
79  std::cout << " (" << cell.first << "," << cell.second << ")";
80  std::cout << std::endl;
81  }
82  for (auto const& itr : triggerIdToROC_)
83  std::cout << "Trigger cell (" << (itr.first).first << "," << (itr.first).second << ") : ROC " << itr.second
84  << std::endl;
85 }
std::vector< std::pair< int, int > > getTriggerId(int roc, int type) const
std::map< std::pair< int, int >, int > triggerIdToROC_
caConstants::TupleMultiplicity const CAHitNtupletGeneratorKernelsGPU::HitToTuple const cms::cuda::AtomicPairCounter GPUCACell const *__restrict__ cells
std::map< int, std::vector< std::pair< int, int > > > triggerIdFromROC_
tuple cout
Definition: gather_cfg.py:144
tuple size
Write out results.
int getROCNumber(HGCalTriggerDetId const &id) const