76 coral::AttributeList conditionData;
78 std::cout << std::endl <<
"RPCEMapSourceHandler: start to build RPC e-Map..." << std::flush << std::endl << std::endl;
82 coral::IQuery* query1 = schema.newQuery();
83 query1->addToTableList(
"DCCBOARD");
84 query1->addToOutputList(
"DCCBOARD.DCCBOARDID",
"DCCBOARDID");
85 query1->addToOutputList(
"DCCBOARD.FEDNUMBER",
"FEDNUMBER");
86 query1->addToOrderList(
"FEDNUMBER");
87 condition =
"DCCBOARD.DCCBOARDID>0";
88 query1->setCondition(condition, conditionData);
90 coral::ICursor& cursor1 = query1->execute();
92 std::pair<int, int> tmp_tbl;
93 std::vector<std::pair<int, int> > theDAQ;
94 while (cursor1.next()) {
96 const coral::AttributeList& row = cursor1.currentRow();
97 tmp_tbl.first = row[
"DCCBOARDID"].data<
long long>();
98 tmp_tbl.second = row[
"FEDNUMBER"].data<
long long>();
99 theDAQ.push_back(tmp_tbl);
103 for (
unsigned int iFED = 0; iFED < theDAQ.size(); iFED++) {
104 thisDcc.
theId = theDAQ[iFED].second;
105 std::vector<std::pair<int, int> > theTB;
108 coral::IQuery* query2 = schema.newQuery();
109 query2->addToTableList(
"TRIGGERBOARD");
110 query2->addToOutputList(
"TRIGGERBOARD.TRIGGERBOARDID",
"TRIGGERBOARDID");
111 query2->addToOutputList(
"TRIGGERBOARD.DCCINPUTCHANNELNUM",
"DCCCHANNELNUM");
112 query2->addToOrderList(
"DCCCHANNELNUM");
113 condition =
"TRIGGERBOARD.DCCBOARD_DCCBOARDID=" +
IntToString(theDAQ[iFED].
first);
114 query2->setCondition(condition, conditionData);
115 coral::ICursor& cursor2 = query2->execute();
117 while (cursor2.next()) {
120 const coral::AttributeList& row = cursor2.currentRow();
121 tmp_tbl.first = row[
"TRIGGERBOARDID"].data<
long long>();
122 tmp_tbl.second = row[
"DCCCHANNELNUM"].data<
long long>();
123 theTB.push_back(tmp_tbl);
126 for (
unsigned int iTB = 0; iTB < theTB.size(); iTB++) {
127 thisTB.
theNum = theTB[iTB].second;
128 std::vector<std::pair<int, int> > theLink;
131 coral::IQuery* query3 = schema.newQuery();
132 query3->addToTableList(
"BOARDBOARDCONN");
133 query3->addToOutputList(
"BOARDBOARDCONN.BOARD_BOARDID",
"BOARDID");
134 query3->addToOutputList(
"BOARDBOARDCONN.COLLECTORBOARDINPUTNUM",
"TBINPUTNUM");
135 query3->addToOrderList(
"TBINPUTNUM");
136 condition =
"BOARDBOARDCONN.BOARD_COLLECTORBOARDID=" +
IntToString(theTB[iTB].
first);
137 query3->setCondition(condition, conditionData);
138 coral::ICursor& cursor3 = query3->execute();
140 while (cursor3.next()) {
142 const coral::AttributeList& row = cursor3.currentRow();
143 tmp_tbl.first = row[
"BOARDID"].data<
long long>();
144 tmp_tbl.second = row[
"TBINPUTNUM"].data<
long long>();
145 theLink.push_back(tmp_tbl);
148 for (
unsigned int iLink = 0; iLink < theLink.size(); iLink++) {
149 int boardId = theLink[iLink].first;
151 std::vector<std::pair<int, std::string> > theLB;
152 std::pair<int, std::string> tmpLB;
155 coral::IQuery* query4 = schema.newQuery();
156 query4->addToTableList(
"BOARD");
157 query4->addToOutputList(
"BOARD.NAME",
"NAME");
159 query4->setCondition(condition, conditionData);
160 coral::ICursor& cursor4 = query4->execute();
162 while (cursor4.next()) {
164 const coral::AttributeList& row = cursor4.currentRow();
165 tmpLB.first = theLink[iLink].first;
167 theLB.push_back(tmpLB);
171 coral::IQuery* query5 = schema.newQuery();
172 query5->addToTableList(
"LINKBOARD");
173 query5->addToTableList(
"BOARD");
174 query5->addToOutputList(
"LINKBOARD.LINKBOARDID",
"LINKBOARDID");
175 query5->addToOutputList(
"BOARD.NAME",
"NAME");
176 query5->addToOrderList(
"LINKBOARDID");
178 " AND BOARD.BOARDID=LINKBOARD.LINKBOARDID AND LINKBOARD.MASTERID<>LINKBOARD.LINKBOARDID";
179 query5->setCondition(condition, conditionData);
180 coral::ICursor& cursor5 = query5->execute();
181 while (cursor5.next()) {
183 const coral::AttributeList& row = cursor5.currentRow();
184 tmpLB.first = row[
"LINKBOARDID"].data<
long long>();
186 theLB.push_back(tmpLB);
189 for (
unsigned int iLB = 0; iLB < theLB.size(); iLB++) {
193 int slength = theName.length();
195 int wheel = atoi((theName.substr(6, 1)).c_str());
197 std::string char2 = theName.substr(slength - 7, 1);
198 int num3 = atoi((theName.substr(slength - 6, 1)).c_str());
199 std::string char4 = theName.substr(slength - 5, 1);
200 bool itsS1to9 = (theName.substr(slength - 11, 1) ==
"S");
208 int sector = atoi((theName.substr(slength - n1, n2)).c_str());
211 std::string char4Val[9] = {
"0",
"1",
"2",
"3",
"A",
"B",
"C",
"D",
"E"};
212 for (
int i = 0;
i < 2;
i++)
213 if (char1 == char1Val[
i])
215 for (
int i = 0;
i < 3;
i++)
216 if (char2 == char2Val[
i])
218 for (
int i = 0;
i < 9;
i++)
219 if (char4 == char4Val[
i])
221 thisLB.
theCode = n3 + num3 * 10 + n2 * 100 + n1 * 1000 +
wheel * 10000 + sector * 100000;
222 std::vector<FEBStruct> theFEB;
224 coral::IQuery* query6 = schema.newQuery();
225 query6->addToTableList(
"FEBLOCATION");
226 query6->addToTableList(
"FEBCONNECTOR");
227 query6->addToOutputList(
"FEBLOCATION.FEBLOCATIONID",
"FEBLOCATIONID");
228 query6->addToOutputList(
"FEBLOCATION.CL_CHAMBERLOCATIONID",
"CHAMBERLOCATIONID");
229 query6->addToOutputList(
"FEBCONNECTOR.FEBCONNECTORID",
"FEBCONNECTORID");
230 query6->addToOutputList(
"FEBLOCATION.FEBLOCALETAPARTITION",
"LOCALETAPART");
231 query6->addToOutputList(
"FEBLOCATION.POSINLOCALETAPARTITION",
"POSINLOCALETAPART");
232 query6->addToOutputList(
"FEBLOCATION.FEBCMSETAPARTITION",
"CMSETAPART");
233 query6->addToOutputList(
"FEBLOCATION.POSINCMSETAPARTITION",
"POSINCMSETAPART");
234 query6->addToOutputList(
"FEBCONNECTOR.LINKBOARDINPUTNUM",
"LINKBOARDINPUTNUM");
235 query6->addToOrderList(
"FEBLOCATIONID");
236 query6->addToOrderList(
"FEBCONNECTORID");
238 " AND FEBLOCATION.FEBLOCATIONID=FEBCONNECTOR.FL_FEBLOCATIONID";
239 query6->setCondition(condition, conditionData);
240 coral::ICursor& cursor6 = query6->execute();
242 while (cursor6.next()) {
245 const coral::AttributeList& row = cursor6.currentRow();
246 tmpFEB.febId = row[
"FEBLOCATIONID"].data<
long long>();
247 tmpFEB.chamberId = row[
"CHAMBERLOCATIONID"].data<
long long>();
248 tmpFEB.connectorId = row[
"FEBCONNECTORID"].data<
long long>();
249 tmpFEB.localEtaPart = row[
"LOCALETAPART"].data<
std::string>();
250 tmpFEB.posInLocalEtaPart = row[
"POSINLOCALETAPART"].data<
short>();
251 tmpFEB.cmsEtaPart = row[
"CMSETAPART"].data<
std::string>();
252 tmpFEB.posInCmsEtaPart = row[
"POSINCMSETAPART"].data<
short>();
253 tmpFEB.lbInputNum = row[
"LINKBOARDINPUTNUM"].data<
short>();
254 theFEB.push_back(tmpFEB);
257 for (
unsigned int iFEB = 0; iFEB < theFEB.size(); iFEB++) {
260 std::string localEtaVal[6] = {
"Forward",
"Central",
"Backward",
"A",
"B",
"C"};
261 char localEtaPartition = 0;
262 for (
int i = 0;
i < 6;
i++)
263 if (
temp == localEtaVal[
i])
264 localEtaPartition =
i + 1;
265 char positionInLocalEtaPartition = theFEB[iFEB].posInLocalEtaPart;
266 temp = theFEB[iFEB].cmsEtaPart;
267 std::string cmsEtaVal[6] = {
"1",
"2",
"3",
"A",
"B",
"C"};
268 char cmsEtaPartition = 0;
269 for (
int i = 0;
i < 6;
i++)
270 if (
temp == cmsEtaVal[
i])
271 cmsEtaPartition =
i + 1;
272 char positionInCmsEtaPartition = theFEB[iFEB].posInCmsEtaPart;
273 thisFeb.
thePartition = positionInLocalEtaPartition + 10 * localEtaPartition +
274 100 * positionInCmsEtaPartition + 1000 * cmsEtaPartition;
277 coral::IQuery* query7 = schema.newQuery();
278 query7->addToTableList(
"CHAMBERLOCATION");
279 query7->addToOutputList(
"CHAMBERLOCATION.DISKORWHEEL",
"DISKORWHEEL");
280 query7->addToOutputList(
"CHAMBERLOCATION.LAYER",
"LAYER");
281 query7->addToOutputList(
"CHAMBERLOCATION.SECTOR",
"SECTOR");
282 query7->addToOutputList(
"CHAMBERLOCATION.SUBSECTOR",
"SUBSECTOR");
283 query7->addToOutputList(
"CHAMBERLOCATION.CHAMBERLOCATIONNAME",
"NAME");
284 query7->addToOutputList(
"CHAMBERLOCATION.FEBZORNT",
"FEBZORNT");
285 query7->addToOutputList(
"CHAMBERLOCATION.FEBRADORNT",
"FEBRADORNT");
286 query7->addToOutputList(
"CHAMBERLOCATION.BARRELORENDCAP",
"BARRELORENDCAP");
287 condition =
"CHAMBERLOCATION.CHAMBERLOCATIONID=" +
IntToString(theFEB[iFEB].chamberId);
288 query7->setCondition(condition, conditionData);
289 coral::ICursor& cursor7 = query7->execute();
291 while (cursor7.next()) {
292 const coral::AttributeList& row = cursor7.currentRow();
293 char diskOrWheel = row[
"DISKORWHEEL"].data<
short>() + 3;
294 char layer = row[
"LAYER"].data<
short>();
295 int sector = row[
"SECTOR"].data<
short>();
306 std::string subsVal[5] = {
"--",
"-",
"",
"+",
"++"};
308 for (
int i = 0;
i < 5;
i++)
309 if (
temp == subsVal[
i])
316 char febZRadOrnt = 0;
318 for (
int i = 0;
i < 3;
i++)
319 if (
temp == febZRVal[
i])
322 char barrelOrEndcap = 0;
323 if (
temp ==
"Barrel")
325 thisFeb.
theChamber = sector + 100 * subsector + 1000 * febZRadOrnt + 5000 * febZOrnt +
326 10000 * diskOrWheel + 100000 *
layer + 1000000 * barrelOrEndcap;
330 coral::IQuery* query8 = schema.newQuery();
331 query8->addToTableList(
"CHAMBERSTRIP");
332 query8->addToOutputList(
"CHAMBERSTRIP.CABLECHANNELNUM",
"CABLECHANNELNUM");
333 query8->addToOutputList(
"CHAMBERSTRIP.CHAMBERSTRIPNUMBER",
"CHAMBERSTRIPNUM");
335 query8->addToOrderList(
"CABLECHANNELNUM");
336 condition =
"CHAMBERSTRIP.FC_FEBCONNECTORID=" +
IntToString(theFEB[iFEB].connectorId);
337 query8->setCondition(condition, conditionData);
338 coral::ICursor& cursor8 = query8->execute();
342 int firstChamberStrip = 0;
344 int lastChamberStrip = 0;
346 while (cursor8.next()) {
347 const coral::AttributeList& row = cursor8.currentRow();
348 lastChamberStrip = row[
"CHAMBERSTRIPNUM"].data<
int>();
349 lastPin = row[
"CABLECHANNELNUM"].data<
short>();
351 firstChamberStrip = lastChamberStrip;
358 if (firstPin == 1 && lastPin == nstrips) {
360 }
else if (firstPin == 2 && lastPin == nstrips + 1) {
362 }
else if (firstPin == 3 && lastPin == nstrips + 2) {
364 }
else if (firstPin == 2 && lastPin == nstrips + 2) {
367 std::cout <<
" Unknown algo : " << firstPin <<
" " << lastPin << std::endl;
369 if ((lastPin - firstPin) * (lastChamberStrip - firstChamberStrip) < 0)
371 thisFeb.
theAlgo =
algo + 100 * firstChamberStrip + 10000 * nstrips;
374 thisLB.
nFebs = nfebs;
377 thisLink.
nLBs = nlbs;
387 std::cout << std::endl <<
"Building RPC e-Map done!" << std::flush << std::endl << std::endl;
int theTriggerBoardInputNumber
std::string IntToString(int num)
std::vector< tbItem > theTBs
void start(bool readOnly=true)
Transaction & transaction()
int theLinkBoardNumInLink
constexpr std::array< uint8_t, layerIndexSize > layer
std::vector< dccItem > theDccs
std::vector< febItem > theFebs
coral::ISchema & nominalSchema()
std::vector< linkItem > theLinks
cond::persistency::Session session
std::vector< lbItem > theLBs