Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TGCCableInASD.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
10 
11 namespace MuonTGC_Cabling {
12 
13 // Constructor & Destructor
15  : TGCCable(TGCCable::InASD) {
16  m_database[TGCId::Endcap][TGCId::WD] = std::make_unique<TGCDatabaseASDToPP>(filename,"EWD");
17  m_database[TGCId::Endcap][TGCId::WT] = std::make_unique<TGCDatabaseASDToPP>(filename,"EWT");
18  m_database[TGCId::Endcap][TGCId::SD] = std::make_unique<TGCDatabaseASDToPP>(filename,"ESD");
19  m_database[TGCId::Endcap][TGCId::ST] = std::make_unique<TGCDatabaseASDToPP>(filename,"EST");
20  m_database[TGCId::Endcap][TGCId::WI] = std::make_unique<TGCDatabaseASDToPP>(filename,"EWI");
21  m_database[TGCId::Endcap][TGCId::SI] = std::make_unique<TGCDatabaseASDToPP>(filename,"ESI");
22  m_database[TGCId::Forward][TGCId::WD] = std::make_unique<TGCDatabaseASDToPP>(filename,"FWD");
23  m_database[TGCId::Forward][TGCId::WT] = std::make_unique<TGCDatabaseASDToPP>(filename,"FWT");
24  m_database[TGCId::Forward][TGCId::SD] = std::make_unique<TGCDatabaseASDToPP>(filename,"FSD");
25  m_database[TGCId::Forward][TGCId::ST] = std::make_unique<TGCDatabaseASDToPP>(filename,"FST");
26  m_database[TGCId::Forward][TGCId::WI] = std::make_unique<TGCDatabaseASDToPP>(filename,"FWI");
27  m_database[TGCId::Forward][TGCId::SI] = std::make_unique<TGCDatabaseASDToPP>(filename,"FSI");
28 }
29 
31  bool orChannel) const {
32  if(channelId){
33  if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::ASDIn)
34  return getChannelOut(channelId,orChannel);
35  if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::ASDOut)
36  return getChannelIn(channelId,orChannel);
37  }
38  return nullptr;
39 }
40 
42  bool orChannel) const {
43  if(orChannel) return nullptr;
44  if(asdout->isValid()==false) return nullptr;
45 
46  TGCDatabase* databaseP = m_database[asdout->getRegionType()][asdout->getModuleType()].get();
47 
48  TGCChannelASDIn* asdin = nullptr;
49 
50  // sector ASDIn [1..48, 1..24], ASDOut [0..47, 0..23]
51  int sector;
52  if(asdout->isEndcap() && !asdout->isInner()){
53  sector = asdout->getSector()-1;
54  if(sector<=0) sector += TGCId::NUM_ENDCAP_SECTOR;
55  } else {
56  sector = asdout->getSector();
57  if(sector<=0) sector += TGCId::NUM_FORWARD_SECTOR;
58  }
59 
60  // chamber ASDIn [1(F),1,2,3,4,5(E)], ASDOut [0(F),4,3,2,1,0(E)]
61  int chamber;
62  if(asdout->isEndcap() && !asdout->isInner()){
63  chamber = 5-asdout->getChamber();
64  } else {
65  chamber = asdout->getChamber()+1;
66  }
67 
68  int channel=-1;
69  // channel ASDIn [1..32(S),1..n(W chamber)], ASDOut [0..31(S),n..0(W sector)]
70  if(asdout->isWire()){
71  // Endcap Triplet chamberId start from 1 in ASDOut
72  int dbChamber = asdout->getChamber();
73  if(asdout->isEndcap() && asdout->isTriplet()) dbChamber = dbChamber-1;
74  int indexIn[TGCDatabaseASDToPP::NIndexIn] =
75  {asdout->getLayer(), dbChamber, asdout->getChannel()};
76  int i = databaseP->getIndexDBIn(indexIn);
77  if(i<0) return nullptr;
78  channel = databaseP->getEntry(i,7)+1;
79  } else {
80  if(( asdout->isBackward() && asdout->isAside()) ||
81  (!asdout->isBackward() && asdout->isCside()))
82  channel = 32-asdout->getChannel();
83  else
84  channel = asdout->getChannel()+1;
85  }
86  if(channel==-1) return nullptr;
87 
88  asdin = new TGCChannelASDIn(asdout->getSideType(),
89  asdout->getSignalType(),
90  asdout->getRegionType(),
91  sector,
92  asdout->getLayer(),
93  chamber,
94  channel);
95 
96  return asdin;
97 }
98 
100  bool orChannel) const {
101  if(orChannel) return nullptr;
102  if(asdin->isValid()==false) return nullptr;
103 
104  const bool asdinisEndcap = asdin->isEndcap();
105  const bool asdinisTriplet = asdin->isTriplet();
106  const int asdinLayer = asdin->getLayer();
107  const int asdinChannel = asdin->getChannel();
108 
109  TGCDatabase* databaseP = m_database[asdin->getRegionType()][asdin->getModuleType()].get();
110 
111  TGCChannelASDOut* asdout = nullptr;
112 
113  // sector ASDIn [1..48, 1..24], ASDOut [2..47.0.1, 1..23.0]
114  int sector;
115  if(asdin->isEndcap()) {
116  if(!asdin->isInner()){
117  // Endcap
118  sector = (asdin->getSector()+1) % TGCId::NUM_ENDCAP_SECTOR;
119  } else {
120  // EI
121  sector = (asdin->getSector()) % TGCId::NUM_INNER_SECTOR;
122  }
123  } else {
124  if(!asdin->isInner()){
125  // Forward
126  sector = (asdin->getSector()) % TGCId::NUM_FORWARD_SECTOR;
127  } else {
128  // FI
129  sector = (asdin->getSector()) % TGCId::NUM_INNER_SECTOR;
130  }
131  }
132 
133  // chamber ASDIn [1(F),1,2,3,4,5(E)], ASDOut [0(F),4,3,2,1,0(E)]
134  int chamber;
135  if(asdin->isEndcap()&&!asdin->isInner()){
136  chamber = 5-asdin->getChamber();
137  } else {
138  chamber = asdin->getChamber()-1;
139  }
140 
141  int channel=-1;
142  // channel ASDIn [1..32(S),1..n(W chamber)], ASDOut [0..31(S),n..0(W sector)]
143  if(asdin->isWire()){
144  const int MaxEntry = databaseP->getMaxEntry();
145  for(int i=0; i<MaxEntry; i++){
146  // Endcap Triplet chamberId start from 1 in ASDOut
147  int dbChamber = chamber;
148  if(asdinisEndcap&&asdinisTriplet)
149  dbChamber = dbChamber-1;
150 
151  int dbChannel = asdinChannel-1;
152  if(databaseP->getEntry(i,7)==dbChannel &&
153  databaseP->getEntry(i,1)==dbChamber &&
154  databaseP->getEntry(i,0)==asdinLayer) {
155  channel = databaseP->getEntry(i,6);
156  break;
157  }
158  }
159  } else {
160  // asdin->isBackward() can not be used because this method rely on sector number for asdout
161  bool is_Backward = false;
162  if(asdin->isEndcap()){
163  if(!asdin->isInner()) {
164  if(asdin->isAside()) is_Backward = (sector%2==1);
165  else is_Backward = (sector%2==0);
166  } else {
167  // EI
168  // Special case of EI11
169  if(sector == 15) {
170  if(asdin->isAside()) is_Backward = false;
171  else is_Backward = true;
172  } else if(sector == 16) {
173  if(asdin->isAside()) is_Backward = true;
174  else is_Backward = false;
175  } else {
176  // A-side phi0 F: phi1 F: phi2 B
177  // C-side phi0 B: phi1 B: phi2 F
178  if(asdin->isAside()) is_Backward = (sector%3==2);
179  else is_Backward = (sector%3!=2);
180  }
181  }
182  } else {
183  if(asdin->isAside()) is_Backward = true; //All Backward for A-side
184  }
185  if(( is_Backward && asdin->isAside()) ||
186  (!is_Backward && asdin->isCside()))
187  channel = 32-asdin->getChannel();
188  else
189  channel = asdin->getChannel()-1;
190  }
191  if(channel==-1) return nullptr;
192 
193  asdout = new TGCChannelASDOut(asdin->getSideType(),
194  asdin->getSignalType(),
195  asdin->getRegionType(),
196  sector,
197  asdin->getLayer(),
198  chamber,
199  channel);
200 
201  return asdout;
202 }
203 
204 
205 } //end of namespace
MuonTGC_Cabling::TGCId::getChamber
int getChamber() const
Definition: TGCId.h:130
MuonTGC_Cabling::TGCId::isEndcap
bool isEndcap() const
Definition: TGCId.h:141
MuonTGC_Cabling::TGCChannelId::isValid
virtual bool isValid() const
Definition: TGCChannelId.h:34
MuonTGC_Cabling::TGCId::SI
@ SI
Definition: TGCId.h:47
TGCChannelASDOut.h
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
MuonTGC_Cabling::TGCId::getSideType
SideType getSideType(void) const
Definition: TGCId.h:121
MuonTGC_Cabling::TGCId::getSignalType
SignalType getSignalType(void) const
Definition: TGCId.h:123
MuonTGC_Cabling::TGCCableInASD::getChannelOut
virtual TGCChannelId * getChannelOut(const TGCChannelId *asdin, bool orChannel=false) const
Definition: TGCCableInASD.cxx:99
calibdata.chamber
chamber
Definition: calibdata.py:32
MuonTGC_Cabling::TGCChannelASDIn
Definition: TGCChannelASDIn.h:14
MuonTGC_Cabling::TGCId::getRegionType
RegionType getRegionType(void) const
Definition: TGCId.h:125
MuonTGC_Cabling::TGCChannelId::ChannelIdType::ASDOut
@ ASDOut
MuonTGC_Cabling::TGCId::isAside
bool isAside() const
Definition: TGCId.h:133
MuonTGC_Cabling::TGCId::getModuleType
ModuleType getModuleType(void) const
Definition: TGCId.h:122
MuonTGC_Cabling::TGCDatabaseASDToPP::NIndexIn
@ NIndexIn
Definition: TGCDatabaseASDToPP.h:31
MuonTGC_Cabling::TGCChannelId::ChannelIdType::ASDIn
@ ASDIn
MuonTGC_Cabling::TGCId::NUM_INNER_SECTOR
static constexpr int NUM_INNER_SECTOR
Definition: TGCId.h:42
MuonTGC_Cabling::TGCCableInASD::getChannelIn
virtual TGCChannelId * getChannelIn(const TGCChannelId *asdout, bool orChannel=false) const
Definition: TGCCableInASD.cxx:41
MuonTGC_Cabling::TGCId::isTriplet
bool isTriplet() const
Definition: TGCId.h:137
MuonTGC_Cabling::TGCId::SD
@ SD
Definition: TGCId.h:47
MuonTGC_Cabling::TGCId::NUM_FORWARD_SECTOR
static constexpr int NUM_FORWARD_SECTOR
Definition: TGCId.h:41
MuonTGC_Cabling::TGCDatabase
Definition: TGCDatabase.h:15
MuonTGC_Cabling::TGCCableInASD::getChannel
virtual TGCChannelId * getChannel(const TGCChannelId *channelId, bool orChannel=false) const
Definition: TGCCableInASD.cxx:30
MuonTGC_Cabling::TGCDatabase::getIndexDBIn
virtual int getIndexDBIn(int *indexIn) const
Definition: TGCDatabase.cxx:52
MuonTGC_Cabling::TGCDatabase::getEntry
virtual int getEntry(int entry, int column) const
Definition: TGCDatabase.cxx:28
lumiFormat.i
int i
Definition: lumiFormat.py:85
MuonTGC_Cabling::TGCCableInASD::TGCCableInASD
TGCCableInASD(void)
Definition: TGCCableInASD.h:27
MuonTGC_Cabling::TGCId::WT
@ WT
Definition: TGCId.h:47
MuonTGC_Cabling
Definition: TGCCable.h:13
MuonTGC_Cabling::TGCDatabase::getMaxEntry
virtual int getMaxEntry(void) const
Definition: TGCDatabase.cxx:36
MuonTGC_Cabling::TGCCableInASD::m_database
std::array< std::array< std::unique_ptr< TGCDatabase >, TGCId::MaxModuleType >, TGCId::MaxRegionType > m_database
Definition: TGCCableInASD.h:32
MuonTGC_Cabling::TGCCable
Definition: TGCCable.h:16
MuonTGC_Cabling::TGCChannelId::isBackward
bool isBackward() const
Definition: TGCChannelId.cxx:76
MuonTGC_Cabling::TGCId::WD
@ WD
Definition: TGCId.h:47
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:122
MuonTGC_Cabling::TGCId::Endcap
@ Endcap
Definition: TGCId.h:53
MuonTGC_Cabling::TGCId::WI
@ WI
Definition: TGCId.h:47
TGCCableInASD.h
MuonTGC_Cabling::TGCId::ST
@ ST
Definition: TGCId.h:47
MuonTGC_Cabling::TGCId::isWire
bool isWire() const
Definition: TGCId.h:136
MuonTGC_Cabling::TGCId::getSector
virtual int getSector() const
Definition: TGCId.h:129
MuonTGC_Cabling::TGCId::isCside
bool isCside() const
Definition: TGCId.h:134
MuonTGC_Cabling::TGCId::isInner
bool isInner() const
Definition: TGCId.h:139
MuonTGC_Cabling::TGCChannelId
Definition: TGCChannelId.h:15
MuonTGC_Cabling::TGCId::NUM_ENDCAP_SECTOR
static constexpr int NUM_ENDCAP_SECTOR
Definition: TGCId.h:40
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
MuonTGC_Cabling::TGCChannelId::getLayer
int getLayer() const
Definition: TGCChannelId.cxx:27
MuonTGC_Cabling::TGCChannelASDOut
Definition: TGCChannelASDOut.h:12
TGCDatabaseASDToPP.h
MuonTGC_Cabling::TGCId::Forward
@ Forward
Definition: TGCId.h:53
MuonTGC_Cabling::TGCChannelId::getChannel
int getChannel() const
Definition: TGCChannelId.cxx:29
TGCChannelASDIn.h