CondTools
RPC
src
RPCLBLinkNameParser.cc
Go to the documentation of this file.
1
#include "
CondTools/RPC/interface/RPCLBLinkNameParser.h
"
2
3
#include <sstream>
4
#include <algorithm>
5
#include "
FWCore/Utilities/interface/Exception.h
"
6
7
void
RPCLBLinkNameParser::parse
(
std::string
const
&
name
,
RPCLBLink
& lb_link) {
8
lb_link.
reset
();
9
std::string::size_type
size
=
name
.size();
10
std::string::size_type
pos
(0),
next
(0);
11
int
tmp
;
12
13
std::istringstream
conv
;
14
15
// region
16
pos
=
name
.find(
"_R"
,
pos
);
17
if
(
pos
== std::string::npos || (
pos
+= 2) >=
size
)
18
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Expected _R[region], got "
<<
name
;
19
switch
(
name
.at(
pos
)) {
20
case
'B'
:
21
lb_link.
setRegion
(0);
22
break
;
23
case
'E'
:
24
lb_link.
setRegion
(1);
25
break
;
26
default
:
27
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Expected Region B or E, got "
<<
name
.at(
pos
) <<
" in "
<<
name
;
28
break
;
29
}
30
if
((++
pos
) >=
size
)
31
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Name too short: "
<<
name
;
32
33
// yoke
34
next
=
name
.find_first_not_of(
"+-0123456789"
,
pos
);
35
conv
.clear();
36
conv
.str(
name
.substr(
pos
,
next
-
pos
));
37
conv
>>
tmp
;
38
lb_link.
setYoke
(
tmp
);
39
pos
=
next
;
40
41
// sector
42
pos
=
name
.find(
"_S"
,
pos
);
43
if
(
pos
== std::string::npos || (
pos
+= 2) >=
size
)
44
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Expected _S[sector], got "
<<
name
;
45
next
=
name
.find_first_not_of(
"+-0123456789"
,
pos
);
46
conv
.clear();
47
conv
.str(
name
.substr(
pos
,
next
-
pos
));
48
conv
>>
tmp
;
49
lb_link.
setSector
(
tmp
);
50
pos
=
next
;
51
52
// (region) side
53
pos
=
name
.find(
'_'
,
pos
);
54
if
(
pos
== std::string::npos || (
pos
+= 2) >=
size
)
55
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Name too short: "
<<
name
;
56
switch
(
name
.at(
pos
)) {
57
case
'N'
:
58
lb_link.
setSide
(0);
59
break
;
60
case
'M'
:
61
lb_link.
setSide
(1);
62
break
;
63
case
'P'
:
64
lb_link.
setSide
(2);
65
break
;
66
default
:
67
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Expected Side N, M or P, got "
<<
name
.at(
pos
) <<
" in "
<<
name
;
68
break
;
69
}
70
if
((++
pos
) >=
size
)
71
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Name too short: "
<<
name
;
72
73
// wheelordisk
74
conv
.clear();
75
conv
.str(
name
.substr(
pos
, 1));
76
conv
>>
tmp
;
77
lb_link.
setWheelOrDisk
(
tmp
);
78
if
((++
pos
) >=
size
)
79
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Name too short: "
<<
name
;
80
81
// fibre
82
{
83
std::string
fibre(
"123ABCDE"
);
84
char
const
* tmpchar =
std::find
(&(fibre[0]), &(fibre[0]) + 8,
name
.at(
pos
));
85
lb_link.
setFibre
(tmpchar - &(fibre[0]));
86
}
87
if
((++
pos
) >=
size
)
88
return
;
89
90
// radial
91
next
=
name
.find(
"_CH"
,
pos
);
92
if
(
next
== std::string::npos)
93
next
=
size
;
94
if
(
next
-
pos
== 2) {
95
std::string
radial =
name
.substr(
pos
, 2);
96
if
(radial ==
"ab"
)
97
lb_link.
setRadial
(0);
98
else
if
(radial ==
"cd"
)
99
lb_link.
setRadial
(1);
100
}
101
102
if
(
next
==
size
)
103
return
;
104
105
// linkboard
106
pos
=
next
;
107
if
(
pos
+ 3 >=
size
)
108
throw
cms::Exception
(
"InvalidLinkBoardName"
) <<
"Name too short: "
<<
name
;
109
pos
+= 3;
110
next
=
name
.find_first_not_of(
"+-0123456789"
,
pos
);
111
conv
.clear();
112
conv
.str(
name
.substr(
pos
,
next
-
pos
));
113
conv
>>
tmp
;
114
lb_link.
setLinkBoard
(
tmp
);
115
}
116
117
RPCLBLink
RPCLBLinkNameParser::parse
(
std::string
const
&
name
) {
118
RPCLBLink
lb_link;
119
parse
(
name
, lb_link);
120
return
lb_link;
121
}
RPCLBLink::setWheelOrDisk
RPCLBLink & setWheelOrDisk(int wheelordisk=wildcard_)
RPCLBLinkNameParser::parse
static void parse(std::string const &name, RPCLBLink &lb_link)
Definition:
RPCLBLinkNameParser.cc:7
pos
Definition:
PixelAliasList.h:18
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition:
FindCaloHit.cc:19
createJobs.tmp
tmp
align.sh
Definition:
createJobs.py:716
trigger::size_type
uint16_t size_type
Definition:
TriggerTypeDefs.h:18
RPCLBLink::reset
void reset()
RPCLBLink::setSector
RPCLBLink & setSector(int sector=wildcard_)
RPCLBLink::setYoke
RPCLBLink & setYoke(int yoke=wildcard_)
RPCLBLink::setFibre
RPCLBLink & setFibre(int fibre=wildcard_)
RPCLBLinkNameParser.h
RPCLBLink::setLinkBoard
RPCLBLink & setLinkBoard(int linkboard=wildcard_)
RPCLBLink
Definition:
RPCLBLink.h:12
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition:
AlCaHLTBitMon_QueryRunRegistry.py:256
RPCLBLink::setSide
RPCLBLink & setSide(int side=wildcard_)
RPCLBLink::setRegion
RPCLBLink & setRegion(int region=wildcard_)
Exception
Definition:
hltDiff.cc:245
Skims_PA_cff.name
name
Definition:
Skims_PA_cff.py:17
Exception.h
RPCLBLink::setRadial
RPCLBLink & setRadial(int radial=wildcard_)
GetRecoTauVFromDQM_MC_cff.next
next
Definition:
GetRecoTauVFromDQM_MC_cff.py:31
findQualityFiles.size
size
Write out results.
Definition:
findQualityFiles.py:443
conv
EPOS::IO_EPOS conv
Definition:
ReggeGribovPartonMCHadronizer.cc:42
Generated for CMSSW Reference Manual by
1.8.16