ATLAS Offline Software
Classes | Functions | Variables
PixelConvert Namespace Reference

Classes

struct  Map
 

Functions

std::string PackOfflineID (int system, int subSystem, int endcap, int layer, int phi, int eta)
 
int UnpackOfflineID (const std::string &offlineID, int &system, int &subSystem, int &endcap, int &layer, int &phi, int &eta)
 
std::string OnlineID (int system, int subSystem, int endcap, int layer, int phi, int eta)
 
std::string OnlineID (const std::string &offlineID)
 
std::string OnlineID (int hashID)
 
std::string OnlineIDfromDCSID (const std::string &DCSID)
 
int OfflineID (const std::string &onlineID, int &system, int &subSystem, int &endcap, int &layer, int &phi, int &eta)
 
std::string OfflineID (const std::string &onlineID)
 
int OfflineID (int hashID, int &system, int &subSystem, int &endcap, int &layer, int &phi, int &eta)
 
std::string OfflineID (int hashID)
 
int HashID (const std::string &ID)
 
int HashID (int system, int subSystem, int endcap, int layer, int phi, int eta)
 
std::string DCSID (const std::string &OnlineID)
 
int ReadMap (const std::string &filename, Map &map)
 
unsigned int GetID (const Map &map, const unsigned int moduleID)
 

Variables

const int NLayer =3
 
const int BSMax [] ={11,19,26}
 
const int EtaMax =6
 
const int NinSector =6
 
const int NinDisk =48
 
const std::string Error ="InvalidChannel"
 

Function Documentation

◆ DCSID()

std::string PixelConvert::DCSID ( const std::string &  OnlineID)

Definition at line 314 of file PixelConvert.cxx.

314  {
315  std::string ID=OnlineID;
316  std::string newID(Error);
317  size_t pos=0;
318  char ch{};
319  std::replace(ID.begin(), ID.end(), '-', '_');
320 
321  if ( ID.at(0)=='L' ) {
322  pos = ID.find('S'); // stave in DCS is S1/S2, not S01/S02
323  if ( pos!=std::string::npos ) {
324  ch = ID.at(pos+1);
325  if ( ch=='0' ) ID.erase(pos+1,1);
326  }
327  return ID;
328  }
329  pos=5; // do not rely a priori on
330  ch=ID.at(pos); // about input data being S0#
331  if ( ch=='0' ) {pos++; ch=ID.at(pos);} // or S#
332  switch (ch) {
333  case '1':
334  newID="B01_S2";
335  break;
336  case '2':
337  newID="B02_S1";
338  break;
339  case '3':
340  newID="B02_S2";
341  break;
342  case '4':
343  newID="B03_S1";
344  break;
345  case '5':
346  newID="B03_S2";
347  break;
348  case '6':
349  newID="B04_S1";
350  break;
351  case '7':
352  newID="B04_S2";
353  break;
354  case '8':
355  newID="B01_S1";
356  break;
357  default:
358  return newID;
359  }
360  ID.replace(4,pos-3,newID);
361  return ID;
362  }

◆ GetID()

unsigned int PixelConvert::GetID ( const Map map,
const unsigned int  moduleID 
)

Definition at line 433 of file PixelConvert.cxx.

435  {
436  if ( moduleID>=510000 && moduleID<=519999 )
437  return (*map.m_SNIndex)[moduleID];
438  else
439  return (*map.m_hashIndex)[moduleID];
440  }

◆ HashID() [1/2]

int PixelConvert::HashID ( const std::string &  ID)

Definition at line 282 of file PixelConvert.cxx.

282  {
283  int system{}, subSystem{}, endcap{}, layer{}, phi{}, eta{};
284  int success{};
285  if ( ID.at(0)=='[' ) // already offline ID
286  success=UnpackOfflineID(ID,system,subSystem,endcap,layer,phi,eta);
287  else // probably it is online ID
288  success=OfflineID(ID,system,subSystem,endcap,layer,phi,eta);
289  if (success)
290  return HashID(system,subSystem,endcap,layer,phi,eta);
291  else
292  return -1;
293  }

◆ HashID() [2/2]

int PixelConvert::HashID ( int  system,
int  subSystem,
int  endcap,
int  layer,
int  phi,
int  eta 
)

Definition at line 295 of file PixelConvert.cxx.

300  {
301  // if (endcap==0) eta+=6;
302  eta+=6;
303  endcap = (endcap+2)/2;
304  system = 0;
305  subSystem= 0;
306  return (( system& 0x7)<<29)
307  + ((subSystem&0x3)<<27)
308  + (( endcap& 0x3)<<25)
309  + (( layer& 0x3)<<23)
310  + (( phi&0x3f)<<17)
311  + (( eta& 0xf)<<13);
312  }

◆ OfflineID() [1/4]

std::string PixelConvert::OfflineID ( const std::string &  onlineID)

Definition at line 250 of file PixelConvert.cxx.

250  {
251  int system{}, subSystem{}, endcap{}, layer{}, phi{}, eta{};
252  if ( OfflineID(onlineID,system,subSystem,endcap,layer,phi,eta) )
253  return PackOfflineID(system,subSystem,endcap,layer,phi,eta);
254  else return Error;
255  }

◆ OfflineID() [2/4]

int PixelConvert::OfflineID ( const std::string &  onlineID,
int &  system,
int &  subSystem,
int &  endcap,
int &  layer,
int &  phi,
int &  eta 
)

Definition at line 147 of file PixelConvert.cxx.

153  {
154  std::istringstream s(onlineID);
155  system = 2; // ID
156  subSystem=1; // Pixel
157  char c1{}, c{};
158  s >> c1;
159  switch (c1) {
160  case 'D':
161  endcap=2;
162  eta=0;
163  s >> layer;
164  if (layer<=0 || layer>NLayer ) return 0;
165  layer--;
166  s >> c;
167  switch (c) {
168  case 'C': // change sign of endcap;
169  endcap=-endcap;
170  case 'A': // do nothing
171  break;
172  default: // invalid endcap
173  return 0;
174  }
175  s >> c >> c;
176  if ( c!='S' ) return 0;
177  {
178  int sect{}, insect{};
179  s >> sect;
180  if ( sect<=0 || sect>(NinDisk/NinSector)) return 0;
181  s >> c >> c;
182  if ( c != 'M' ) return 0;
183  s >> insect;
184  if ( insect<=0 || insect>NinSector ) return 0;
185  if (insect<=NinSector/2) { // facing IP
186  if ( endcap>0)
187  phi=NinSector*(sect-1)+2*(insect-1);
188  else
189  phi=NinSector*(sect-1)+NinSector-2*insect+1;
190  } else { // away from IP
191  if ( endcap>0)
192  phi=NinSector*(sect-1)+NinSector-2*(insect-NinSector/2)+1;
193  else
194  phi=NinSector*(sect-1)+2*(insect-NinSector/2-1);
195  }
196  }
197  break;
198  case 'L':
199  endcap=0;
200  s >> layer;
201  if ( s.bad() || layer<0 || layer>=NLayer ) return 0;
202  s >> c >> c;
203  if ( c!='B' ) return 0;
204  {
205  int bist{}, stav{};
206  s >> bist >> c >> c >> stav;
207  if ( c!='S' || bist<=0 || bist>BSMax[layer] || stav<=0 || stav>2 )
208  return 0;
209  phi=2*(bist-1)+stav-1;
210  // now set the right offset, so that phi=0 corresponds to
211  // B01-S01. This is different for different layers
212  switch (layer) {
213  case 0: // BLayer, first bistave corresponds to phi=1
214  phi+=1;
215  break;
216  case 1: // Layer1, first bistave corresponds to phi=0
217  break;
218  case 2: // Layer2, first bistave corresponds to phi=51
219  phi-=1;
220  break;
221  default:
222  return 0;
223  }
224  if (phi<0) phi+=2*BSMax[layer];
225  else if (phi>=2*BSMax[layer]) phi-=2*BSMax[layer];
226  }
227  s >> c >> c >> c >> c >> c;
228  if ( c!='M' ) return 0;
229  s >> eta;
230  if ( eta<0 || eta > EtaMax) return 0;
231  if (eta>0) {
232  s >> c;
233  switch (c) {
234  case 'C': // change sign of eta;
235  eta=-eta;
236  case 'A': // do nothing
237  break;
238  default: // invalid side
239  return 0;
240  }
241  }
242  break;
243  default:
244  return 0; // invalid endcap/barrel selection
245  }
246  if (s.bad()) return 0;
247  else return 1;
248  }

◆ OfflineID() [3/4]

std::string PixelConvert::OfflineID ( int  hashID)

Definition at line 276 of file PixelConvert.cxx.

276  {
277  int system{}, subSystem{}, endcap{}, layer{}, phi{}, eta{};
278  OfflineID(hashID,system,subSystem,endcap,layer,phi,eta);
279  return PackOfflineID(system,subSystem,endcap,layer,phi,eta);
280  }

◆ OfflineID() [4/4]

int PixelConvert::OfflineID ( int  hashID,
int &  system,
int &  subSystem,
int &  endcap,
int &  layer,
int &  phi,
int &  eta 
)

Definition at line 257 of file PixelConvert.cxx.

263  {
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);
271  // if (endcap==0) eta-=6;
272  eta-=6;
273  return 1;
274  }

◆ OnlineID() [1/3]

std::string PixelConvert::OnlineID ( const std::string &  offlineID)

Definition at line 125 of file PixelConvert.cxx.

125  {
126  int system{};
127  int subSystem{};
128  int endcap{};
129  int layer{};
130  int phi{};
131  int eta{};
132  if ( UnpackOfflineID(offlineID,system,subSystem,endcap,layer,phi,eta) )
133  return OnlineID(system,
134  subSystem,
135  endcap,
136  layer,
137  phi,
138  eta);
139  else return Error;
140  }

◆ OnlineID() [2/3]

std::string PixelConvert::OnlineID ( int  hashID)

Definition at line 142 of file PixelConvert.cxx.

142  {
143  return OnlineID(OfflineID(hashID));
144  }

◆ OnlineID() [3/3]

std::string PixelConvert::OnlineID ( int  system,
int  subSystem,
int  endcap,
int  layer,
int  phi,
int  eta 
)

Definition at line 49 of file PixelConvert.cxx.

54  {
55  std::ostringstream s;
56  if ( system!=2 && subSystem!=1 ) return Error; // not InDet/Pixel
57  if (layer<0 || layer>=NLayer) return Error; // invalid layer
58  switch (endcap) {
59  case 0:
60  if (phi<0 || phi>=2*BSMax[layer]) return Error; // invalid phi position
61  if (abs(eta)>EtaMax) return Error; // invalid eta position
62  {
63  // now set the right offset, so that phi=0 corresponds to
64  // B01-S01. This is different for different layers
65  switch (layer) {
66  case 0: // BLayer, first bistave corresponds to phi=1
67  phi-=1;
68  break;
69  case 1: // Layer1, first bistave corresponds to phi=0
70  break;
71  case 2: // Layer2, first bistave corresponds to phi=51
72  phi+=1;
73  break;
74  }
75  if (phi<0) phi+=2*BSMax[layer];
76  else if (phi>=2*BSMax[layer]) phi-=2*BSMax[layer];
77  int bist=phi/2+1;
78  int stav=phi%2+1;
79  s << "L" << layer;
80  if (bist<10) s << "-B0";
81  else s << "-B";
82  s << bist << "-S0" << stav << "-";
83  if ( stav==1 ) {
84  if ( eta<=0 ) s << "C7";
85  else s << "A6";
86  } else {
87  if ( eta<0 ) s << "C6";
88  else s << "A7";
89  }
90  s << "-M" << abs(eta);
91  }
92  if ( eta>0 ) s << "A";
93  else if (eta<0) s<< "C";
94  break;
95  case 2:
96  case -2:
97  if (phi<0 || phi>=NinDisk ) return Error; // invalid phi position
98  if (eta!=0) return Error; // invalid eta position
99  s << "D" << layer+1;
100  if (endcap>0) s << "A";
101  else s << "C";
102  {
103  int sector = phi/NinSector+1;
104  int inSector= phi%NinSector;
105  s << "-S0" << sector << "-M";
106  if (endcap>0) {
107  if ((inSector%2)==0) // A side, facing IP
108  s << inSector/2+1;
109  else // A side, away from IP
110  s << NinSector-(inSector/2);
111  } else {
112  if ((inSector%2)==0) // C side, away IP
113  s << inSector/2+4;
114  else
115  s << NinSector-3-inSector/2;
116  }
117  }
118  break;
119  default:
120  return Error; // invalid barrel/endcap selection
121  }
122  return s.str();
123  }

◆ OnlineIDfromDCSID()

std::string PixelConvert::OnlineIDfromDCSID ( const std::string &  DCSID)

Definition at line 364 of file PixelConvert.cxx.

364  {
365  std::string ID=DCSID;
366  const std::string &newID(Error);
367  std::replace(ID.begin(), ID.end(), '_', '-');
368  if ( ID.at(0)=='L' ) return ID;
369  std::istringstream in(DCSID);
370  int b{},s{},dum{};
371  char c{}, c1{}, c2{};
372  in >> c >> dum >> c >> c >> c1 >> b >> c >> c2 >> s;
373  if ( c1!='B' || c2!='S' ) return newID;
374  int sector=b*2-3+s;
375  int Nsector=NinDisk/NinSector;
376  if (sector==0) sector=Nsector;
377  else if (sector<0 || sector>=Nsector) return Error;
378  int start=ID.find('-',0)+1; // first '-' is before B
379  int stop =ID.find('-',start); // iterate twice to get third '-'
380  stop=ID.find('-',stop+1); // after sector ID
381  std::ostringstream out;
382  out << "S0" << sector;
383  ID.replace(start,stop-start,out.str());
384  return ID;
385  }

◆ PackOfflineID()

std::string PixelConvert::PackOfflineID ( int  system,
int  subSystem,
int  endcap,
int  layer,
int  phi,
int  eta 
)

Definition at line 18 of file PixelConvert.cxx.

23  {
24  std::ostringstream s;
25  s << "[" << system << "." << subSystem << "." << endcap << "."
26  << layer << "." << phi << "." << eta << ".0]";
27  return s.str();
28  }

◆ ReadMap()

int PixelConvert::ReadMap ( const std::string &  filename,
Map map 
)

Definition at line 398 of file PixelConvert.cxx.

400  {
401  std::cerr << "INFO: Opening data file " << filename << std::endl;
402  std::ifstream f(filename.c_str());
403  if ( !f.good() ) {
404  std::cerr << "ERROR: Cannot open data file " << filename << std::endl;
405  return -1;
406  }
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;
410  std::string dummy;
411  getline(f,dummy); // read header line
412  while (1) {
413  f >> dummy >> hashID >> dummy >> dummy >> SN
414  >> dummy >> dummy >> dummy >> dummy;
415  // std::cerr << "Read from " << filename << "\t" << hashID << "\t" << SN << std::endl;
416  if ( f.bad() ) {
417  std::cerr << "ERROR: error reading " << filename
418  << " after " << map.m_hashIndex->size() << " entries"
419  << std::endl;
420  f.close();
421  return -2;
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));
425  }
426  std::cerr << "INFO: end of file " << filename
427  << " after " << map.m_hashIndex->size() << " entries"
428  << std::endl;
429  f.close();
430  return 0;
431  }

◆ UnpackOfflineID()

int PixelConvert::UnpackOfflineID ( const std::string &  offlineID,
int &  system,
int &  subSystem,
int &  endcap,
int &  layer,
int &  phi,
int &  eta 
)

Definition at line 30 of file PixelConvert.cxx.

36  {
37  std::istringstream s(offlineID);
38  char c;
39  s >> c >> system;
40  s >> c >> subSystem;
41  s >> c >> endcap;
42  s >> c >> layer;
43  s >> c >> phi;
44  s >> c >> eta;
45  if (s.bad()) return 0;
46  else return 1;
47  }

Variable Documentation

◆ BSMax

constexpr int PixelConvert::BSMax ={11,19,26}
constexpr

Definition at line 12 of file PixelConvert.cxx.

◆ Error

const std::string PixelConvert::Error ="InvalidChannel"

Definition at line 16 of file PixelConvert.cxx.

◆ EtaMax

constexpr int PixelConvert::EtaMax =6
constexpr

Definition at line 13 of file PixelConvert.cxx.

◆ NinDisk

constexpr int PixelConvert::NinDisk =48
constexpr

Definition at line 15 of file PixelConvert.cxx.

◆ NinSector

constexpr int PixelConvert::NinSector =6
constexpr

Definition at line 14 of file PixelConvert.cxx.

◆ NLayer

constexpr int PixelConvert::NLayer =3
constexpr

Definition at line 11 of file PixelConvert.cxx.

replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
PixelConvert::NinDisk
const int NinDisk
Definition: PixelConvert.cxx:15
DCSID
struct _DCSID DCSID
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
extractSporadic.c1
c1
Definition: extractSporadic.py:134
PixelConvert::OfflineID
int OfflineID(const std::string &onlineID, int &system, int &subSystem, int &endcap, int &layer, int &phi, int &eta)
Definition: PixelConvert.cxx:147
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
PixelConvert::HashID
int HashID(const std::string &ID)
Definition: PixelConvert.cxx:282
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
PixelConvert::EtaMax
const int EtaMax
Definition: PixelConvert.cxx:13
PixelConvert::NinSector
const int NinSector
Definition: PixelConvert.cxx:14
PixelConvert::PackOfflineID
std::string PackOfflineID(int system, int subSystem, int endcap, int layer, int phi, int eta)
Definition: PixelConvert.cxx:18
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
python.xAODType.dummy
dummy
Definition: xAODType.py:4
PixelConvert::NLayer
const int NLayer
Definition: PixelConvert.cxx:11
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
compileRPVLLRates.c2
c2
Definition: compileRPVLLRates.py:361
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
PixelConvert::OnlineID
std::string OnlineID(int system, int subSystem, int endcap, int layer, int phi, int eta)
Definition: PixelConvert.cxx:49
_DCSID
Definition: ALFA_CLinkEvent.h:50
L1Topo::Error
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition: Error.h:16
PixelConvert::UnpackOfflineID
int UnpackOfflineID(const std::string &offlineID, int &system, int &subSystem, int &endcap, int &layer, int &phi, int &eta)
Definition: PixelConvert.cxx:30
python.compressB64.c
def c
Definition: compressB64.py:93
PixelConvert::BSMax
const int BSMax[]
Definition: PixelConvert.cxx:12