CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
GEMeMap.cc
Go to the documentation of this file.
5 
6 GEMeMap::GEMeMap() : theVersion("") {}
7 
8 GEMeMap::GEMeMap(const std::string& version) : theVersion(version) {}
9 
11 
12 const std::string& GEMeMap::version() const { return theVersion; }
13 
15  // fed->amc->geb mapping to GEMDetId
16  for (auto imap : theChamberMap_) {
17  for (unsigned int ix = 0; ix < imap.fedId.size(); ix++) {
18  GEMROMapping::chamEC ec{imap.fedId[ix], imap.amcNum[ix], imap.gebId[ix]};
20  dc.detId = GEMDetId((imap.gemNum[ix] > 0) ? 1 : -1,
21  1,
22  abs(imap.gemNum[ix] / 1000),
23  abs(imap.gemNum[ix] / 100 % 10),
24  abs(imap.gemNum[ix] % 100),
25  0);
26  dc.vfatVer = imap.vfatVer[ix];
27  romap.add(ec, dc);
28  GEMROMapping::sectorEC amcEC = {imap.fedId[ix], imap.amcNum[ix]};
29  if (!romap.isValidAMC(amcEC))
30  romap.add(amcEC);
31  }
32  }
33 
34  // chamberType to vfatType
35  for (auto imap : theVFatMap_) {
36  for (unsigned int ix = 0; ix < imap.vfatAdd.size(); ix++) {
37  GEMDetId gemId((imap.gemNum[ix] > 0) ? 1 : -1,
38  1,
39  abs(imap.gemNum[ix] / 1000),
40  abs(imap.gemNum[ix] / 100 % 10),
41  abs(imap.gemNum[ix] % 100),
42  imap.iEta[ix]);
43 
45  ec.detId = gemId.chamberId();
46  ec.vfatAdd = imap.vfatAdd[ix] & chipIdMask_;
47 
49  dc.vfatType = imap.vfatType[ix];
50  dc.detId = gemId;
51  dc.localPhi = imap.localPhi[ix];
52 
53  romap.add(ec, dc);
54  romap.add(gemId.chamberId(), ec);
55  }
56  }
57  // channel mapping
58  for (auto imap : theStripMap_) {
59  for (unsigned int ix = 0; ix < imap.vfatType.size(); ix++) {
61  cMap.vfatType = imap.vfatType[ix];
62  cMap.chNum = imap.vfatCh[ix];
63 
65  sMap.vfatType = imap.vfatType[ix];
66  sMap.stNum = imap.vfatStrip[ix];
67 
68  romap.add(cMap, sMap);
69  romap.add(sMap, cMap);
70  }
71  }
72 }
73 
75  // 12 bits for vfat, 5 bits for geb, 8 bit long GLIB serial number
76  unsigned int fedId = 0;
77 
78  for (int st = GEMDetId::minStationId0; st <= GEMDetId::maxStationId; ++st) {
79  for (int re = -1; re <= 1; re = re + 2) {
80  uint8_t amcNum = 1; //amc
81  uint8_t gebId = 0;
82  int maxVFat = 0;
83  int maxLayerId = GEMDetId::maxLayerId;
84  int maxiEtaId = 0;
85  if (st == 0) {
86  maxVFat = maxVFatGE0_;
87  fedId = (re == 1 ? FEDNumbering::MINGE0FEDID + 1 : FEDNumbering::MINGE0FEDID);
88  maxLayerId = GEMDetId::maxLayerId0;
89  maxiEtaId = maxiEtaIdGE0_;
90  } else if (st == 1) {
91  maxVFat = maxVFatGE11_;
92  fedId = (re == 1 ? FEDNumbering::MINGEMFEDID + 1 : FEDNumbering::MINGEMFEDID);
93  maxiEtaId = maxiEtaIdGE11_;
94  } else if (st == 2) {
95  maxVFat = maxVFatGE21_;
97  maxiEtaId = maxiEtaIdGE21_;
98  }
99 
100  for (int ch = 1; ch <= GEMDetId::maxChamberId; ++ch) {
101  for (int ly = 1; ly <= maxLayerId; ++ly) {
102  GEMDetId gemId(re, 1, st, ly, ch, 0);
103 
105  ec.fedId = fedId;
106  ec.gebId = gebId;
107  ec.amcNum = amcNum;
108 
110  dc.detId = gemId;
111  dc.vfatVer = vfatVerV3_;
112  romap.add(ec, dc);
113 
114  GEMROMapping::sectorEC amcEC = {fedId, amcNum};
115  if (!romap.isValidAMC(amcEC))
116  romap.add(amcEC);
117 
118  uint16_t chipPos = 0;
119  for (int lphi = 0; lphi < maxVFat; ++lphi) {
120  for (int ieta = 1; ieta <= maxiEtaId; ++ieta) {
122  vec.vfatAdd = chipPos;
123  vec.detId = gemId;
124 
126  vdc.vfatType = vfatTypeV3_; // > 10 is vfat v3
127  vdc.detId = GEMDetId(re, 1, st, ly, ch, ieta);
128  vdc.localPhi = lphi;
129 
130  romap.add(vec, vdc);
131  romap.add(gemId.chamberId(), vec);
132 
133  chipPos++;
134  }
135  }
136 
137  // 5 bits for gebId
138  if (st > 0 && gebId == maxGEB1_) {
139  gebId = 0;
140  amcNum += 2; // only odd amc No. is used for GE11
141  } else if (st == 0 && gebId == maxGEBs_) {
142  gebId = 0;
143  amcNum++;
144  } else {
145  // 1 geb per chamber
146  gebId++;
147  }
148  }
149  }
150  }
151  }
152 
153  for (int i = 0; i < maxChan_; ++i) {
154  // only 1 vfat type for dummy map
156  cMap.vfatType = vfatTypeV3_;
157  cMap.chNum = i;
158 
160  sMap.vfatType = vfatTypeV3_;
161  sMap.stNum = i;
162 
163  romap.add(cMap, sMap);
164  romap.add(sMap, cMap);
165  }
166 }
std::vector< GEMChamberMap > theChamberMap_
Definition: GEMeMap.h:48
std::string theVersion
Definition: GEMeMap.h:53
static const int maxVFatGE0_
Definition: GEMeMap.h:66
static const int vfatVerV3_
Definition: GEMeMap.h:59
static const int maxiEtaIdGE0_
Definition: GEMeMap.h:69
void convert(GEMROMapping &romap)
Definition: GEMeMap.cc:14
unsigned int fedId
Definition: GEMROMapping.h:26
static const int maxChan_
Definition: GEMeMap.h:72
bool isValidAMC(const sectorEC &r) const
Definition: GEMROMapping.h:104
static constexpr int32_t maxLayerId0
Definition: GEMDetId.h:31
void convertDummy(GEMROMapping &romap)
Definition: GEMeMap.cc:74
std::vector< GEMStripMap > theStripMap_
Definition: GEMeMap.h:50
const std::string & version() const
Definition: GEMeMap.cc:12
static constexpr int32_t minStationId0
Definition: GEMDetId.h:24
static const int maxiEtaIdGE21_
Definition: GEMeMap.h:71
static constexpr int32_t maxStationId
Definition: GEMDetId.h:27
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr GEMDetId chamberId() const
Definition: GEMDetId.h:204
void add(sectorEC e)
Definition: GEMROMapping.h:106
GEMeMap()
Definition: GEMeMap.cc:6
std::vector< GEMVFatMap > theVFatMap_
Definition: GEMeMap.h:49
static const int maxGEBs_
Definition: GEMeMap.h:62
static constexpr int32_t maxLayerId
Definition: GEMDetId.h:32
static const int maxGEB1_
Definition: GEMeMap.h:63
static const int chipIdMask_
Definition: GEMeMap.h:61
static constexpr int32_t maxChamberId
Definition: GEMDetId.h:29
virtual ~GEMeMap()
Definition: GEMeMap.cc:10
static const int maxiEtaIdGE11_
Definition: GEMeMap.h:70
static const int maxVFatGE21_
Definition: GEMeMap.h:68
static const int vfatTypeV3_
Definition: GEMeMap.h:60
static const int maxVFatGE11_
Definition: GEMeMap.h:67