CMS 3D CMS Logo

RPCReadOutMapping.cc
Go to the documentation of this file.
2 
9 
11 
12 #include <iostream>
13 
14 using namespace edm;
15 
17 
19  IMAP im = theFeds.find(dccId);
20  const DccSpec &ddc = (*im).second;
21  return (im != theFeds.end()) ? &ddc : nullptr;
22 }
23 
25 
26 std::vector<const DccSpec *> RPCReadOutMapping::dccList() const {
27  std::vector<const DccSpec *> result;
28  result.reserve(theFeds.size());
29  for (IMAP im = theFeds.begin(); im != theFeds.end(); im++) {
30  result.push_back(&(im->second));
31  }
32  return result;
33 }
34 
35 std::pair<int, int> RPCReadOutMapping::dccNumberRange() const {
36  if (theFeds.empty())
37  return std::make_pair(0, -1);
38  else {
39  IMAP first = theFeds.begin();
40  IMAP last = theFeds.end();
41  last--;
42  return std::make_pair(first->first, last->first);
43  }
44 }
45 
46 std::vector<std::pair<LinkBoardElectronicIndex, LinkBoardPackedStrip> > RPCReadOutMapping::rawDataFrame(
47  const StripInDetUnit &stripInDetUnit) const {
48  std::vector<std::pair<LinkBoardElectronicIndex, LinkBoardPackedStrip> > result;
49  LinkBoardElectronicIndex eleIndex = {0, 0, 0, 0};
50 
51  const uint32_t &rawDetId = stripInDetUnit.first;
52  const int &stripInDU = stripInDetUnit.second;
53 
54  for (IMAP im = theFeds.begin(); im != theFeds.end(); im++) {
55  const DccSpec &dccSpec = (*im).second;
56  const std::vector<TriggerBoardSpec> &triggerBoards = dccSpec.triggerBoards();
57  for (std::vector<TriggerBoardSpec>::const_iterator it = triggerBoards.begin(); it != triggerBoards.end(); it++) {
58  const TriggerBoardSpec &triggerBoard = (*it);
59  typedef std::vector<const LinkConnSpec *> LINKS;
60  LINKS linkConns = triggerBoard.enabledLinkConns();
61  for (LINKS::const_iterator ic = linkConns.begin(); ic != linkConns.end(); ic++) {
62  const LinkConnSpec &link = **ic;
63  const std::vector<LinkBoardSpec> &boards = link.linkBoards();
64  for (std::vector<LinkBoardSpec>::const_iterator ib = boards.begin(); ib != boards.end(); ib++) {
65  const LinkBoardSpec &board = (*ib);
66 
67  eleIndex.dccId = dccSpec.id();
68  eleIndex.dccInputChannelNum = triggerBoard.dccInputChannelNum();
69  eleIndex.tbLinkInputNum = link.triggerBoardInputNumber();
70  eleIndex.lbNumInLink = board.linkBoardNumInLink();
71 
72  const std::vector<FebConnectorSpec> &febs = board.febs();
73  for (std::vector<FebConnectorSpec>::const_iterator ifc = febs.begin(); ifc != febs.end(); ifc++) {
74  const FebConnectorSpec &febConnector = (*ifc);
75  if (febConnector.rawId() != rawDetId)
76  continue;
77  int febInLB = febConnector.linkBoardInputNum();
78  for (int istrip = 0; istrip < febConnector.nstrips(); istrip++) {
79  int stripPinInFeb = febConnector.cablePinNum(istrip);
80  if (febConnector.chamberStripNum(istrip) == stripInDU) {
81  result.push_back(std::make_pair(eleIndex, LinkBoardPackedStrip(febInLB, stripPinInFeb)));
82  }
83  }
84  }
85  }
86  }
87  }
88  }
89  return result;
90 }
91 
93  //FIXME after debugging change to dcc(ele.dccId)->triggerBoard(ele.dccInputChannelNum)->...
95  if (dcc) {
97  if (tb) {
98  const LinkConnSpec *lc = tb->linkConn(ele.tbLinkInputNum);
99  if (lc) {
100  const LinkBoardSpec *lb = lc->linkBoard(ele.lbNumInLink);
101  return lb;
102  }
103  }
104  }
105  return nullptr;
106 }
107 
109  const LinkBoardPackedStrip &lbstrip) const {
110  uint32_t detUnit = 0;
111  int stripInDU = 0;
112  int febInLB = lbstrip.febInLB();
113  int stripPinInFeb = lbstrip.stripPinInFeb();
114 
115  const FebConnectorSpec *feb = location.feb(febInLB);
116  if (feb) {
117  detUnit = feb->rawId();
118  const ChamberStripSpec strip = feb->strip(stripPinInFeb);
119  if (strip.chamberStripNumber > -1) {
120  stripInDU = strip.chamberStripNumber;
121  } else {
122  // LogWarning("detUnitFrame")<<"problem with stip for febInLB: "<<febInLB
123  // <<" strip pin: "<< stripPinInFeb
124  // <<" strip pin: "<< stripPinInFeb;
125  LogDebug("") << "problem with stip for febInLB: " << febInLB << " strip pin: " << stripPinInFeb
126  << " strip pin: " << stripPinInFeb << " for linkBoard: " << location.print(3);
127  }
128  } else {
129  // LogWarning("detUnitFrame")<<"problem with detUnit for febInLB: ";
130  LogDebug("") << "problem with detUnit for febInLB: " << febInLB << " for linkBoard: " << location.print(1);
131  }
132  return std::make_pair(detUnit, stripInDU);
133 }
134 
135 //
136 // ALL BELOW IS TEMPORARY, TO BE REMOVED !!!!
137 //
138 
139 std::pair<LinkBoardElectronicIndex, int> RPCReadOutMapping::getRAWSpecForCMSChamberSrip(uint32_t detId,
140  int strip,
141  int dccInputChannel) const {
142  LinkBoardElectronicIndex linkboard;
143  linkboard.dccId = 790;
144  linkboard.dccInputChannelNum = dccInputChannel;
145 
146  for (int k = 0; k < 18; k++) {
147  linkboard.tbLinkInputNum = k;
148  for (int j = 0; j < 3; j++) {
149  linkboard.lbNumInLink = j;
150  const LinkBoardSpec *location = this->location(linkboard);
151  if (location) {
152  for (int i = 1; i < 7; i++) {
153  const FebConnectorSpec *feb = location->feb(i);
154  if (feb && feb->rawId() == detId) {
155  for (int l = 1; l < 17; l++) {
156  int pin = l;
157  const ChamberStripSpec aStrip = feb->strip(pin);
158  if (aStrip.cmsStripNumber == strip) {
159  int bitInLink = (i - 1) * 16 + l - 1;
160  std::pair<LinkBoardElectronicIndex, int> stripInfo(linkboard, bitInLink);
161  return stripInfo;
162  }
163  }
164  }
165  }
166  }
167  }
168  }
169  RPCDetId aDet(detId);
170  std::cout << "Strip: " << strip << " not found for detector: " << aDet << std::endl;
171  std::pair<LinkBoardElectronicIndex, int> dummyStripInfo(linkboard, -99);
172  return dummyStripInfo;
173 }
174 
175 std::vector<const LinkBoardSpec *> RPCReadOutMapping::getLBforChamber(const std::string &name) const {
176  std::vector<const LinkBoardSpec *> vLBforChamber;
177 
178  LinkBoardElectronicIndex linkboard;
179  linkboard.dccId = 790;
180  linkboard.dccInputChannelNum = 1;
181  linkboard.tbLinkInputNum = 1;
182  linkboard.lbNumInLink = 0;
183  const LinkBoardSpec *location = this->location(linkboard);
184 
185  for (int k = 0; k < 18; k++) {
186  linkboard.dccInputChannelNum = 1;
187  linkboard.tbLinkInputNum = k;
188  for (int j = 0; j < 3; j++) {
189  linkboard.lbNumInLink = j;
190  int febInputNum = 1;
191  location = this->location(linkboard);
192  if (location) {
193  //location->print();
194  for (int j = 0; j < 6; j++) {
195  const FebConnectorSpec *feb = location->feb(febInputNum + j);
196  if (feb) {
197  //feb->print();
198  std::string chName = feb->chamber().chamberLocationName();
199  if (chName == name) {
200  vLBforChamber.push_back(location);
201  //feb->chamber().print();
202  break;
203  }
204  }
205  }
206  }
207  }
208  }
209  return vLBforChamber;
210 }
const LinkBoardSpec * linkBoard(int linkBoardNumInLink) const
LB served by this link, identified by its position in link.
Definition: LinkConnSpec.cc:18
RPCReadOutMapping(const std::string &version="")
std::string print(int depth=0) const
debud printout
const std::vector< LinkBoardSpec > & linkBoards() const
Definition: LinkConnSpec.h:25
int dccInputChannelNum() const
input channel number to DCC
uint32_t rawId() const
DetUnit to which data belongs.
std::map< int, DccSpec >::const_iterator IMAP
const LinkConnSpec * linkConn(int tbInputNumber) const
link attached to this TB with given input number
const int nstrips() const
location
10.6 INPUT and workflows
Definition: relval_nano.py:81
const ChamberLocationSpec & chamber() const
const TriggerBoardSpec * triggerBoard(int channelNumber) const
TB attached to channel.
Definition: DccSpec.cc:19
int linkBoardInputNum() const
this FEB channel in LinkBoard
std::vector< const LinkBoardSpec * > getLBforChamber(const std::string &name) const
const std::vector< FebConnectorSpec > & febs() const
Definition: LinkBoardSpec.h:36
int triggerBoardInputNumber() const
this link input number in TriggerBoard
Definition: LinkConnSpec.h:20
virtual const LinkBoardSpec * location(const LinkBoardElectronicIndex &ele) const
conversion between electronic and detector indexing
std::map< int, DccSpec > theFeds
const DccSpec * dcc(int dccId) const
FED identified by ID.
void add(const DccSpec &dcc)
attach FED to map
int linkBoardNumInLink() const
this LB number in link
Definition: LinkBoardSpec.h:26
std::vector< const DccSpec * > dccList() const
all FEDs in map
unsigned dccId(DetId const &, EcalElectronicsMapping const *)
const FebConnectorSpec * feb(int febInputNum) const
get Feb by its connection number to this board
Definition: LinkBoardSpec.cc:9
const ChamberStripSpec strip(int pinNumber) const
strip info for input pin
std::pair< LinkBoardElectronicIndex, int > getRAWSpecForCMSChamberSrip(uint32_t detId, int strip, int dccInputChannel) const
std::vector< std::pair< LinkBoardElectronicIndex, LinkBoardPackedStrip > > rawDataFrame(const StripInDetUnit &duFrame) const
connection "paths" that lead from one digi to one strip
virtual StripInDetUnit detUnitFrame(const LinkBoardSpec &location, const LinkBoardPackedStrip &packedStrip) const
convert strip location as in raw data (LB and LBchannel) to detUnit frame
std::pair< int, int > dccNumberRange() const
Range of FED IDs in map (min and max id)
std::string chamberLocationName() const
const int chamberStripNum(int istrip) const
HLT enums.
std::vector< const LinkConnSpec * > enabledLinkConns() const
not masked links belonging to this TB
const int cablePinNum(int istrip) const
const std::vector< TriggerBoardSpec > & triggerBoards() const
Definition: DccSpec.h:26
int id() const
id of FED
Definition: DccSpec.h:22
std::pair< uint32_t, int > StripInDetUnit
first member is DetUnit ID, second strip in DetUnit frame
ib
Definition: cuy.py:661
#define LogDebug(id)