CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends
RPCReadOutMapping Class Reference

#include <RPCReadOutMapping.h>

Inheritance diagram for RPCReadOutMapping:
RPCReadOutMappingWithFastSearch

Public Types

typedef std::pair< uint32_t, int > StripInDetUnit
 first member is DetUnit ID, second strip in DetUnit frame More...
 

Public Member Functions

void add (const DccSpec &dcc)
 attach FED to map More...
 
const DccSpecdcc (int dccId) const
 FED identified by ID. More...
 
std::vector< const DccSpec * > dccList () const
 all FEDs in map More...
 
std::pair< int, int > dccNumberRange () const
 Range of FED IDs in map (min and max id) More...
 
virtual StripInDetUnit detUnitFrame (const LinkBoardSpec &location, const LinkBoardPackedStrip &packedStrip) const
 convert strip location as in raw data (LB and LBchannel) to detUnit frame More...
 
std::vector< const LinkBoardSpec * > getLBforChamber (const std::string &name) const
 
std::pair< LinkBoardElectronicIndex, int > getRAWSpecForCMSChamberSrip (uint32_t detId, int strip, int dccInputChannel) const
 
virtual const LinkBoardSpeclocation (const LinkBoardElectronicIndex &ele) const
 conversion between electronic and detector indexing More...
 
std::vector< std::pair< LinkBoardElectronicIndex, LinkBoardPackedStrip > > rawDataFrame (const StripInDetUnit &duFrame) const
 connection "paths" that lead from one digi to one strip More...
 
 RPCReadOutMapping (const std::string &version="")
 
const std::string & version () const
 version as string More...
 
virtual ~RPCReadOutMapping ()
 

Private Types

typedef std::map< int, DccSpec >::const_iterator IMAP
 

Private Member Functions

template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Private Attributes

std::map< int, DccSpectheFeds
 
std::string theVersion
 

Friends

class boost::serialization::access
 
template<typename CondSerializationT , typename Enabled >
struct cond::serialization::access
 

Detailed Description

Description: Class to map read-out channels to physical RPC strips

Definition at line 22 of file RPCReadOutMapping.h.

Member Typedef Documentation

◆ IMAP

typedef std::map<int, DccSpec>::const_iterator RPCReadOutMapping::IMAP
private

Definition at line 62 of file RPCReadOutMapping.h.

◆ StripInDetUnit

typedef std::pair<uint32_t, int> RPCReadOutMapping::StripInDetUnit

first member is DetUnit ID, second strip in DetUnit frame

Definition at line 25 of file RPCReadOutMapping.h.

Constructor & Destructor Documentation

◆ RPCReadOutMapping()

RPCReadOutMapping::RPCReadOutMapping ( const std::string &  version = "")

Definition at line 16 of file RPCReadOutMapping.cc.

16 : theVersion(version) {}
const std::string & version() const
version as string
std::string theVersion

◆ ~RPCReadOutMapping()

virtual RPCReadOutMapping::~RPCReadOutMapping ( )
inlinevirtual

Definition at line 28 of file RPCReadOutMapping.h.

28 {}

Member Function Documentation

◆ add()

void RPCReadOutMapping::add ( const DccSpec dcc)

attach FED to map

Definition at line 24 of file RPCReadOutMapping.cc.

References dcc(), DccSpec::id(), and theFeds.

Referenced by RPCEMap::convert(), counter.Counter::register(), SequenceTypes._TaskBase::remove(), and SequenceTypes._TaskBase::replace().

24 { theFeds[dcc.id()] = dcc; }
std::map< int, DccSpec > theFeds
const DccSpec * dcc(int dccId) const
FED identified by ID.
int id() const
id of FED
Definition: DccSpec.h:22

◆ dcc()

const DccSpec * RPCReadOutMapping::dcc ( int  dccId) const

FED identified by ID.

Definition at line 18 of file RPCReadOutMapping.cc.

References ecaldqm::dccId(), and theFeds.

Referenced by add(), and location().

18  {
19  IMAP im = theFeds.find(dccId);
20  const DccSpec &ddc = (*im).second;
21  return (im != theFeds.end()) ? &ddc : nullptr;
22 }
std::map< int, DccSpec > theFeds
unsigned dccId(DetId const &, EcalElectronicsMapping const *)
std::unordered_map< int, SiPixelFedCablingTree::PixelFEDCabling >::const_iterator IMAP

◆ dccList()

std::vector< const DccSpec * > RPCReadOutMapping::dccList ( ) const

all FEDs in map

Definition at line 26 of file RPCReadOutMapping.cc.

References mps_fire::result, and theFeds.

Referenced by popcon::RPCEMapSourceHandler::Compare2EMaps(), RPCReadOutMappingWithFastSearch::init(), RPCLinkSynchroStat::init(), and omtf::translateOmtf2Pact().

26  {
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 }
std::map< int, DccSpec > theFeds
std::unordered_map< int, SiPixelFedCablingTree::PixelFEDCabling >::const_iterator IMAP

◆ dccNumberRange()

std::pair< int, int > RPCReadOutMapping::dccNumberRange ( ) const

Range of FED IDs in map (min and max id)

Definition at line 35 of file RPCReadOutMapping.cc.

References dqmdumpme::first, dqmdumpme::last, and theFeds.

Referenced by popcon::RPCEMapSourceHandler::Compare2EMaps().

35  {
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 }
std::map< int, DccSpec > theFeds
std::unordered_map< int, SiPixelFedCablingTree::PixelFEDCabling >::const_iterator IMAP

◆ detUnitFrame()

RPCReadOutMapping::StripInDetUnit RPCReadOutMapping::detUnitFrame ( const LinkBoardSpec location,
const LinkBoardPackedStrip packedStrip 
) const
virtual

convert strip location as in raw data (LB and LBchannel) to detUnit frame

Reimplemented in RPCReadOutMappingWithFastSearch.

Definition at line 113 of file RPCReadOutMapping.cc.

References LinkBoardSpec::feb(), LinkBoardPackedStrip::febInLB(), location(), LogDebug, LinkBoardSpec::print(), FebConnectorSpec::rawId(), digitizers_cfi::strip, FebConnectorSpec::strip(), and LinkBoardPackedStrip::stripPinInFeb().

Referenced by RPCReadOutMappingWithFastSearch::detUnitFrame(), and RPCRecordFormatter::recordUnpack().

114  {
115  uint32_t detUnit = 0;
116  int stripInDU = 0;
117  int febInLB = lbstrip.febInLB();
118  int stripPinInFeb = lbstrip.stripPinInFeb();
119 
120  const FebConnectorSpec *feb = location.feb(febInLB);
121  if (feb) {
122  detUnit = feb->rawId();
123  const ChamberStripSpec strip = feb->strip(stripPinInFeb);
124  if (strip.chamberStripNumber > -1) {
125  stripInDU = strip.chamberStripNumber;
126  } else {
127  // LogWarning("detUnitFrame")<<"problem with stip for febInLB: "<<febInLB
128  // <<" strip pin: "<< stripPinInFeb
129  // <<" strip pin: "<< stripPinInFeb;
130  LogDebug("") << "problem with stip for febInLB: " << febInLB << " strip pin: " << stripPinInFeb
131  << " strip pin: " << stripPinInFeb << " for linkBoard: " << location.print(3);
132  }
133  } else {
134  // LogWarning("detUnitFrame")<<"problem with detUnit for febInLB: ";
135  LogDebug("") << "problem with detUnit for febInLB: " << febInLB << " for linkBoard: " << location.print(1);
136  }
137  return std::make_pair(detUnit, stripInDU);
138 }
std::string print(int depth=0) const
debud printout
uint32_t rawId() const
DetUnit to which data belongs.
virtual const LinkBoardSpec * location(const LinkBoardElectronicIndex &ele) const
conversion between electronic and detector indexing
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
#define LogDebug(id)

◆ getLBforChamber()

std::vector< const LinkBoardSpec * > RPCReadOutMapping::getLBforChamber ( const std::string &  name) const

Definition at line 180 of file RPCReadOutMapping.cc.

References FebConnectorSpec::chamber(), ChamberLocationSpec::chamberLocationName(), LinkBoardElectronicIndex::dccId, LinkBoardElectronicIndex::dccInputChannelNum, LinkBoardSpec::feb(), dqmiolumiharvest::j, dqmdumpme::k, LinkBoardElectronicIndex::lbNumInLink, location(), Skims_PA_cff::name, AlCaHLTBitMon_QueryRunRegistry::string, and LinkBoardElectronicIndex::tbLinkInputNum.

180  {
181  std::vector<const LinkBoardSpec *> vLBforChamber;
182 
183  LinkBoardElectronicIndex linkboard;
184  linkboard.dccId = 790;
185  linkboard.dccInputChannelNum = 1;
186  linkboard.tbLinkInputNum = 1;
187  linkboard.lbNumInLink = 0;
188  const LinkBoardSpec *location = this->location(linkboard);
189 
190  for (int k = 0; k < 18; k++) {
191  linkboard.dccInputChannelNum = 1;
192  linkboard.tbLinkInputNum = k;
193  for (int j = 0; j < 3; j++) {
194  linkboard.lbNumInLink = j;
195  int febInputNum = 1;
196  location = this->location(linkboard);
197  if (location) {
198  //location->print();
199  for (int j = 0; j < 6; j++) {
200  const FebConnectorSpec *feb = location->feb(febInputNum + j);
201  if (feb) {
202  //feb->print();
203  std::string chName = feb->chamber().chamberLocationName();
204  if (chName == name) {
205  vLBforChamber.push_back(location);
206  //feb->chamber().print();
207  break;
208  }
209  }
210  }
211  }
212  }
213  }
214  return vLBforChamber;
215 }
const ChamberLocationSpec & chamber() const
virtual const LinkBoardSpec * location(const LinkBoardElectronicIndex &ele) const
conversion between electronic and detector indexing
const FebConnectorSpec * feb(int febInputNum) const
get Feb by its connection number to this board
Definition: LinkBoardSpec.cc:9
std::string chamberLocationName() const

◆ getRAWSpecForCMSChamberSrip()

std::pair< LinkBoardElectronicIndex, int > RPCReadOutMapping::getRAWSpecForCMSChamberSrip ( uint32_t  detId,
int  strip,
int  dccInputChannel 
) const

Definition at line 144 of file RPCReadOutMapping.cc.

References ChamberStripSpec::cmsStripNumber, gather_cfg::cout, LinkBoardElectronicIndex::dccId, LinkBoardElectronicIndex::dccInputChannelNum, LinkBoardSpec::feb(), mps_fire::i, dqmiolumiharvest::j, dqmdumpme::k, MainPageGenerator::l, LinkBoardElectronicIndex::lbNumInLink, location(), FebConnectorSpec::rawId(), digitizers_cfi::strip, FebConnectorSpec::strip(), and LinkBoardElectronicIndex::tbLinkInputNum.

146  {
147  LinkBoardElectronicIndex linkboard;
148  linkboard.dccId = 790;
149  linkboard.dccInputChannelNum = dccInputChannel;
150 
151  for (int k = 0; k < 18; k++) {
152  linkboard.tbLinkInputNum = k;
153  for (int j = 0; j < 3; j++) {
154  linkboard.lbNumInLink = j;
155  const LinkBoardSpec *location = this->location(linkboard);
156  if (location) {
157  for (int i = 1; i < 7; i++) {
158  const FebConnectorSpec *feb = location->feb(i);
159  if (feb && feb->rawId() == detId) {
160  for (int l = 1; l < 17; l++) {
161  int pin = l;
162  const ChamberStripSpec aStrip = feb->strip(pin);
163  if (aStrip.cmsStripNumber == strip) {
164  int bitInLink = (i - 1) * 16 + l - 1;
165  std::pair<LinkBoardElectronicIndex, int> stripInfo(linkboard, bitInLink);
166  return stripInfo;
167  }
168  }
169  }
170  }
171  }
172  }
173  }
174  RPCDetId aDet(detId);
175  std::cout << "Strip: " << strip << " not found for detector: " << aDet << std::endl;
176  std::pair<LinkBoardElectronicIndex, int> dummyStripInfo(linkboard, -99);
177  return dummyStripInfo;
178 }
uint32_t rawId() const
DetUnit to which data belongs.
virtual const LinkBoardSpec * location(const LinkBoardElectronicIndex &ele) const
conversion between electronic and detector indexing
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

◆ location()

const LinkBoardSpec * RPCReadOutMapping::location ( const LinkBoardElectronicIndex ele) const
virtual

conversion between electronic and detector indexing

Reimplemented in RPCReadOutMappingWithFastSearch.

Definition at line 97 of file RPCReadOutMapping.cc.

References dcc(), LinkBoardElectronicIndex::dccId, LinkBoardElectronicIndex::dccInputChannelNum, LinkBoardElectronicIndex::lbNumInLink, LinkConnSpec::linkBoard(), TriggerBoardSpec::linkConn(), LinkBoardElectronicIndex::tbLinkInputNum, and DccSpec::triggerBoard().

Referenced by detUnitFrame(), getLBforChamber(), getRAWSpecForCMSChamberSrip(), and RPCRecordFormatter::recordUnpack().

97  {
98  //FIXME after debugging change to dcc(ele.dccId)->triggerBoard(ele.dccInputChannelNum)->...
100  if (dcc) {
102  if (tb) {
103  const LinkConnSpec *lc = tb->linkConn(ele.tbLinkInputNum);
104  if (lc) {
105  const LinkBoardSpec *lb = lc->linkBoard(ele.lbNumInLink);
106  return lb;
107  }
108  }
109  }
110  return nullptr;
111 }
const LinkBoardSpec * linkBoard(int linkBoardNumInLink) const
LB served by this link, identified by its position in link.
Definition: LinkConnSpec.cc:18
const LinkConnSpec * linkConn(int tbInputNumber) const
link attached to this TB with given input number
const TriggerBoardSpec * triggerBoard(int channelNumber) const
TB attached to channel.
Definition: DccSpec.cc:19
const DccSpec * dcc(int dccId) const
FED identified by ID.

◆ rawDataFrame()

std::vector< std::pair< LinkBoardElectronicIndex, LinkBoardPackedStrip > > RPCReadOutMapping::rawDataFrame ( const StripInDetUnit duFrame) const

connection "paths" that lead from one digi to one strip

Definition at line 46 of file RPCReadOutMapping.cc.

References l1ctLayer1_cff::boards, FebConnectorSpec::cablePinNum(), FebConnectorSpec::chamberStripNum(), LinkBoardElectronicIndex::dccId, LinkBoardElectronicIndex::dccInputChannelNum, TriggerBoardSpec::dccInputChannelNum(), TriggerBoardSpec::enabledLinkConns(), LinkBoardSpec::febs(), cuy::ib, DccSpec::id(), LinkBoardElectronicIndex::lbNumInLink, FebConnectorSpec::linkBoardInputNum(), LinkBoardSpec::linkBoardNumInLink(), LinkConnSpec::linkBoards(), FebConnectorSpec::nstrips(), FebConnectorSpec::rawId(), mps_fire::result, LinkBoardElectronicIndex::tbLinkInputNum, theFeds, LinkConnSpec::triggerBoardInputNumber(), and DccSpec::triggerBoards().

Referenced by RPCRecordFormatter::recordPack().

47  {
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  int febCheck = 0;
74  for (std::vector<FebConnectorSpec>::const_iterator ifc = febs.begin(); ifc != febs.end(); ifc++) {
75  const FebConnectorSpec &febConnector = (*ifc);
76  febCheck++;
77  if (febConnector.rawId() != rawDetId)
78  continue;
79  int febInLB = febConnector.linkBoardInputNum();
80  /* if (febInLB != febCheck) {
81  edm::LogError("rawDataFrame") << " problem with febInLB: " <<febInLB<<" "<<febCheck;
82  } */
83  for (int istrip = 0; istrip < febConnector.nstrips(); istrip++) {
84  int stripPinInFeb = febConnector.cablePinNum(istrip);
85  if (febConnector.chamberStripNum(istrip) == stripInDU) {
86  result.push_back(std::make_pair(eleIndex, LinkBoardPackedStrip(febInLB, stripPinInFeb)));
87  }
88  }
89  }
90  }
91  }
92  }
93  }
94  return result;
95 }
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.
const int nstrips() const
int linkBoardInputNum() const
this FEB channel in LinkBoard
const std::vector< FebConnectorSpec > & febs() const
Definition: LinkBoardSpec.h:36
int triggerBoardInputNumber() const
this link input number in TriggerBoard
Definition: LinkConnSpec.h:20
std::map< int, DccSpec > theFeds
int linkBoardNumInLink() const
this LB number in link
Definition: LinkBoardSpec.h:26
std::unordered_map< int, SiPixelFedCablingTree::PixelFEDCabling >::const_iterator IMAP
const int chamberStripNum(int istrip) const
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
ib
Definition: cuy.py:661

◆ serialize()

template<class Archive >
void RPCReadOutMapping::serialize ( Archive &  ar,
const unsigned int  version 
)
private

◆ version()

const std::string& RPCReadOutMapping::version ( ) const
inline

version as string

Definition at line 43 of file RPCReadOutMapping.h.

References theVersion.

Referenced by RPCUnpackingModule::beginRun(), validation.Sample::datasetpattern(), and validation.Sample::filename().

43 { return theVersion; }
std::string theVersion

Friends And Related Function Documentation

◆ boost::serialization::access

friend class boost::serialization::access
friend

Definition at line 66 of file RPCReadOutMapping.h.

◆ cond::serialization::access

template<typename CondSerializationT , typename Enabled >
friend struct cond::serialization::access
friend

Definition at line 66 of file RPCReadOutMapping.h.

Member Data Documentation

◆ theFeds

std::map<int, DccSpec> RPCReadOutMapping::theFeds
private

Definition at line 63 of file RPCReadOutMapping.h.

Referenced by add(), dcc(), dccList(), dccNumberRange(), and rawDataFrame().

◆ theVersion

std::string RPCReadOutMapping::theVersion
private

Definition at line 64 of file RPCReadOutMapping.h.

Referenced by version().