12 constexpr
int BSMax[]={11,19,26};
16 const std::string
Error=
"InvalidChannel";
25 s <<
"[" << system <<
"." << subSystem <<
"." << endcap <<
"."
26 <<
layer <<
"." << phi <<
"." << eta <<
".0]";
37 std::istringstream
s(offlineID);
45 if (
s.bad())
return 0;
56 if ( system!=2 && subSystem!=1 )
return Error;
80 if (bist<10)
s <<
"-B0";
82 s << bist <<
"-S0" << stav <<
"-";
84 if ( eta<=0 )
s <<
"C7";
87 if ( eta<0 )
s <<
"C6";
90 s <<
"-M" << abs(eta);
92 if ( eta>0 )
s <<
"A";
93 else if (eta<0)
s<<
"C";
98 if (eta!=0)
return Error;
100 if (endcap>0)
s <<
"A";
105 s <<
"-S0" << sector <<
"-M";
125 std::string
OnlineID(
const std::string& offlineID) {
154 std::istringstream
s(onlineID);
164 if (layer<=0 || layer>
NLayer )
return 0;
176 if (
c!=
'S' )
return 0;
178 int sect{}, insect{};
182 if (
c !=
'M' )
return 0;
184 if ( insect<=0 || insect>
NinSector )
return 0;
201 if (
s.bad() || layer<0 || layer>=
NLayer )
return 0;
203 if (
c!=
'B' )
return 0;
206 s >> bist >>
c >>
c >> stav;
207 if (
c!=
'S' || bist<=0 || bist>
BSMax[
layer] || stav<=0 || stav>2 )
209 phi=2*(bist-1)+stav-1;
227 s >>
c >>
c >>
c >>
c >>
c;
228 if (
c!=
'M' )
return 0;
230 if ( eta<0 || eta >
EtaMax)
return 0;
246 if (
s.bad())
return 0;
251 int system{}, subSystem{}, endcap{},
layer{}, phi{}, eta{};
264 system = ((hashID>>29)& 0x7)+2;
265 subSystem = ((hashID>>27)& 0x3)+1;
266 endcap = ((hashID>>25)& 0x3);
267 endcap = 2*(endcap-1);
268 layer = ((hashID>>23)& 0x3);
269 phi = ((hashID>>17)&0x3f);
270 eta = ((hashID>>13)& 0xf);
277 int system{}, subSystem{}, endcap{},
layer{}, phi{}, eta{};
283 int system{}, subSystem{}, endcap{},
layer{}, phi{}, eta{};
290 return HashID(system,subSystem,endcap,
layer,phi,eta);
303 endcap = (endcap+2)/2;
306 return (( system& 0x7)<<29)
307 + ((subSystem&0x3)<<27)
308 + (( endcap& 0x3)<<25)
309 + ((
layer& 0x3)<<23)
316 std::string newID(
Error);
321 if (
ID.at(0)==
'L' ) {
323 if (
pos!=std::string::npos ) {
325 if (
ch==
'0' )
ID.erase(
pos+1,1);
360 ID.replace(4,
pos-3,newID);
366 const std::string &newID(
Error);
368 if (
ID.at(0)==
'L' )
return ID;
369 std::istringstream in(
DCSID);
371 char c{},
c1{},
c2{};
372 in >>
c >> dum >>
c >>
c >>
c1 >>
b >>
c >>
c2 >>
s;
373 if (
c1!=
'B' ||
c2!=
'S' )
return newID;
376 if (sector==0) sector=Nsector;
377 else if (sector<0 || sector>=Nsector)
return Error;
381 std::ostringstream
out;
382 out <<
"S0" << sector;
401 std::cerr <<
"INFO: Opening data file " <<
filename << std::endl;
404 std::cerr <<
"ERROR: Cannot open data file " <<
filename << std::endl;
407 map.
m_hashIndex = std::make_unique<PixelConvert::Map::modulemap>();
408 map.
m_SNIndex = std::make_unique<PixelConvert::Map::modulemap>();
409 unsigned int hashID, SN;
417 std::cerr <<
"ERROR: error reading " <<
filename
418 <<
" after " << map.
m_hashIndex->size() <<
" entries"
422 }
else if (
f.eof() )
break;
423 map.
m_hashIndex->insert(std::make_pair(hashID,SN));
424 map.
m_SNIndex->insert(std::make_pair(SN,hashID));
426 std::cerr <<
"INFO: end of file " <<
filename
427 <<
" after " << map.
m_hashIndex->size() <<
" entries"
434 const unsigned int moduleID)
436 if ( moduleID>=510000 && moduleID<=519999 )