CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RPCEMap.h
Go to the documentation of this file.
1 #ifndef RPCEMap_H
2 #define RPCEMap_H
3 
5 
7 #include <map>
8 #include <vector>
9 #include <utility>
10 #include <string>
11 #include <iostream>
12 #include <boost/cstdint.hpp>
13 
14 class RPCEMap {
15 public:
16 
17  RPCEMap(const std::string & version = "")
18  : theVersion(version) { }
19 
20  virtual ~RPCEMap(){}
21 
23 
24  struct dccItem {
25  int theId;
26  int nTBs;
27 
29 };
30  struct tbItem {
31  int theNum;
32  int nLinks;
33 
35 };
36  struct linkItem {
38  int nLBs;
39 
41 };
42  struct lbItem {
43  bool theMaster;
45  int theCode;
46  int nFebs;
47 
49 };
50  struct febItem {
54  int theAlgo;
55 
57 };
58 
59  std::vector<dccItem> theDccs;
60  std::vector<tbItem> theTBs;
61  std::vector<linkItem> theLinks;
62  std::vector<lbItem> theLBs;
63  std::vector<febItem> theFebs;
64 
65  RPCReadOutMapping const* convert() const {
67  int diskOffset=4;
68  int year=atoi(theVersion.substr(6,4).c_str());
69  int month=atoi(theVersion.substr(3,2).c_str());
70  if (year < 2012 || (year==2012 && month<11)) diskOffset=3;
71  int lastTB=0;
72  int lastLink=0;
73  int lastLB=0;
74  int lastFeb=0;
75  for (unsigned int idcc=0; idcc<theDccs.size(); idcc++) {
76  DccSpec dcc(theDccs[idcc].theId);
77  for (int itb=lastTB; itb<lastTB+theDccs[idcc].nTBs; itb++) {
78  TriggerBoardSpec tb(theTBs[itb].theNum);
79  for (int ilink=lastLink; ilink<lastLink+theTBs[itb].nLinks; ilink++) {
80  LinkConnSpec lc(theLinks[ilink].theTriggerBoardInputNumber);
81  for (int ilb=lastLB; ilb<lastLB+theLinks[ilink].nLBs; ilb++) {
82  LinkBoardSpec lb(theLBs[ilb].theMaster,theLBs[ilb].theLinkBoardNumInLink,theLBs[ilb].theCode);
83  for (int ifeb=lastFeb; ifeb<lastFeb+theLBs[ilb].nFebs; ifeb++) {
84  int sector=(theFebs[ifeb].theChamber)%100;
85  char subsector=((theFebs[ifeb].theChamber)/100)%10-2;
86  char febZRadOrnt=((theFebs[ifeb].theChamber)/1000)%5;
87  char febZOrnt=((theFebs[ifeb].theChamber)/5000)%2;
88  char diskOrWheel=((theFebs[ifeb].theChamber)/10000)%10-diskOffset;
89  char layer=((theFebs[ifeb].theChamber)/100000)%10;
90  char barrelOrEndcap=(theFebs[ifeb].theChamber)/1000000;
91  ChamberLocationSpec chamber={diskOrWheel,layer,sector,subsector,febZOrnt,febZRadOrnt,barrelOrEndcap};
92  char cmsEtaPartition=(theFebs[ifeb].thePartition)/1000;
93  char positionInCmsEtaPartition=((theFebs[ifeb].thePartition)%1000)/100;
94  char localEtaPartition=((theFebs[ifeb].thePartition)%100)/10;
95  char positionInLocalEtaPartition=(theFebs[ifeb].thePartition)%10;
96  FebLocationSpec afeb={cmsEtaPartition,positionInCmsEtaPartition,localEtaPartition,positionInLocalEtaPartition};
97  FebConnectorSpec febConnector(theFebs[ifeb].theLinkBoardInputNum,chamber,afeb);
98  febConnector.addStrips(theFebs[ifeb].theAlgo);
99  lb.add(febConnector);
100 // std::cout<<"End of FEB"<<std::endl;
101  }
102  lc.add(lb);
103  lastFeb+=theLBs[ilb].nFebs;
104  }
105  tb.add(lc);
106  lastLB+=theLinks[ilink].nLBs;
107  }
108  dcc.add(tb);
109  lastLink+=theTBs[itb].nLinks;
110  }
111  cabling->add(dcc);
112  lastTB+=theDccs[idcc].nTBs;
113  }
114  return cabling;
115 };
116 
117 private:
118 
119 
121 };
122 
123 #endif // RPCEMap_H
124 
int theTriggerBoardInputNumber
Definition: RPCEMap.h:37
int theLinkBoardInputNum
Definition: RPCEMap.h:51
void add(const FebConnectorSpec &feb)
attach feb
Definition: LinkBoardSpec.cc:8
std::vector< tbItem > theTBs
Definition: RPCEMap.h:60
COND_SERIALIZABLE
Definition: RPCEMap.h:115
void addStrips(int algo)
add strip info
void add(const LinkBoardSpec &lb)
attach LinkBoard to this link
Definition: LinkConnSpec.cc:16
void add(const LinkConnSpec &lc)
attach connection to TB
int theLinkBoardNumInLink
Definition: RPCEMap.h:44
std::vector< dccItem > theDccs
Definition: RPCEMap.h:59
std::vector< febItem > theFebs
Definition: RPCEMap.h:63
void add(const DccSpec &dcc)
attach FED to map
void add(const TriggerBoardSpec &tb)
attach TB to DCC. The channel is defined by TB
Definition: DccSpec.cc:34
int thePartition
Definition: RPCEMap.h:52
std::vector< linkItem > theLinks
Definition: RPCEMap.h:61
bool theMaster
Definition: RPCEMap.h:43
std::vector< lbItem > theLBs
Definition: RPCEMap.h:62
RPCEMap(const std::string &version="")
Definition: RPCEMap.h:17
std::string theVersion
Definition: RPCEMap.h:22
RPCReadOutMapping const * convert() const
Definition: RPCEMap.h:65
virtual ~RPCEMap()
Definition: RPCEMap.h:20