ATLAS Offline Software
TGCCableInPP.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
11 
12 namespace MuonTGC_Cabling {
13 
14 // Constructor & Destructor
16  : TGCCable(TGCCable::InPP)
17 {
30 }
31 
33 {
42 
47 }
48 
49 
51  bool orChannel) const {
52  if(channelId){
53  if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::PPIn)
54  return getChannelOut(channelId,orChannel);
55  if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::PPOut)
56  return getChannelIn(channelId,orChannel);
57  }
58  return nullptr;
59 }
60 
62  bool orChannel) const {
63  if(ppout->isValid()==false) return nullptr;
64 
65  TGCId::ModuleType moduleType = ppout->getModuleType();
66 
67  int ndatabaseP = 1;
68  TGCDatabase* databaseP[2];
69  databaseP[0] = m_database[ppout->getRegionType()][moduleType];
70  // EI/FI
71  // wire(TGCId::WI) and strip(TGCId::SI) of a chamber
72  // use the same SLB chip
73  // The SLB chip is treated as TGCId::WI in TGCCableSLBToSSW.cxx
74  if(moduleType==TGCId::WI) {
75  databaseP[1] = m_database[ppout->getRegionType()][TGCId::SI];
76  ndatabaseP = 2;
77  }
78 
79  int id=-1, block=-1, channel=-1;
80  bool found = false;
81 
82  for(int idatabaseP=0; idatabaseP<ndatabaseP; idatabaseP++) {
83  // EI/FI
84  // wire(TGCId::WI) and strip(TGCId::SI) of a chamber
85  // use the same SLB chip
86  // The SLB chip is treated as TGCId::WI in TGCCableSLBToSSW.cxx
87  if(idatabaseP==1) {
88  moduleType = TGCId::SI;
89  }
90 
91  int indexIn[TGCDatabaseInPP::NIndexIn] =
92  {ppout->getId(), ppout->getBlock(), ppout->getChannel()};
93  int i = databaseP[idatabaseP]->getIndexDBIn(indexIn);
94  if(i<0) continue;
95 
96  if(orChannel==false){
97  // first channel
98  id = databaseP[idatabaseP]->getEntry(i,3);
99  block = databaseP[idatabaseP]->getEntry(i,4);
100  channel = databaseP[idatabaseP]->getEntry(i,5);
101  if(id==-1 && block==-1 && channel==-1) continue;
102  found = true;
103  break;
104  } else {
105  // ored channel
106  if(databaseP[idatabaseP]->getEntrySize(i)==9) {
107  id = databaseP[idatabaseP]->getEntry(i,6);
108  block = databaseP[idatabaseP]->getEntry(i,7);
109  channel = databaseP[idatabaseP]->getEntry(i,8);
110  found = true;
111  }
112  }
113  }
114 
115  if(!found) return nullptr;
116 
117  TGCChannelPPIn* ppin =
118  new TGCChannelPPIn(ppout->getSideType(),
119  moduleType,
120  ppout->getRegionType(),
121  ppout->getSector(),
122  id,
123  block,
124  channel);
125 
126  return ppin;
127 }
128 
130  bool orChannel) const {
131  if(ppin->isValid()==false) return nullptr;
132 
133  const int ppinChannel = ppin->getChannel();
134  const int ppinBlock = ppin->getBlock();
135  const int ppinId = ppin->getId();
136 
137  TGCDatabase* databaseP =
138  m_database[ppin->getRegionType()][ppin->getModuleType()];
139 
140  TGCChannelPPOut* ppout = nullptr;
141  const int MaxEntry = databaseP->getMaxEntry();
142  for(int i=0; i<MaxEntry; i++){
143  bool cond1 = (databaseP->getEntry(i,5)==ppinChannel)&&
144  (databaseP->getEntry(i,4)==ppinBlock)&&
145  (databaseP->getEntry(i,3)==ppinId);
146 
147  bool cond2 = (databaseP->getEntrySize(i)==9)&&
148  (databaseP->getEntry(i,8)==ppinChannel)&&
149  (databaseP->getEntry(i,7)==ppinBlock)&&
150  (databaseP->getEntry(i,6)==ppinId);
151 
152  if(cond1 || cond2) {
153  int id = databaseP->getEntry(i,0);
154  int block = databaseP->getEntry(i,1);
155  int channel = databaseP->getEntry(i,2);
156 
157  //TGCChannelSLBIn::CellType cellType = TGCChannelSLBIn::NoCellType;
158  int channelInSLB = -1;
159  bool adjacent = false;
160  TGCId::ModuleType moduleType = ppin->getModuleType();
161  if(block==0||block==2){//C,D
162  int lengthOfC = TGCChannelSLBIn::getLengthOfSLB(moduleType,
164  int lengthOfD = TGCChannelSLBIn::getLengthOfSLB(moduleType,
166  if(channel<lengthOfD){
167  int adjacentOfD = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,
169  //cellType = TGCChannelSLBIn::CellD;
170  channelInSLB = channel;
171  if(channelInSLB<adjacentOfD||channelInSLB>=lengthOfD-adjacentOfD)
172  adjacent = true;
173  } else {
174  int adjacentOfC = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,
176  //cellType = TGCChannelSLBIn::CellC;
177  channelInSLB = channel-lengthOfD;
178  if(channelInSLB<adjacentOfC||channelInSLB>=lengthOfC-adjacentOfC)
179  adjacent = true;
180  }
181  }
182  if(block==1||block==3){//A,B
183  int lengthOfA = TGCChannelSLBIn::getLengthOfSLB(moduleType,
185  int lengthOfB = TGCChannelSLBIn::getLengthOfSLB(moduleType,
187  if(channel<lengthOfB){
188  int adjacentOfB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,
190  //cellType = TGCChannelSLBIn::CellB;
191  channelInSLB = channel;
192  if(channelInSLB<adjacentOfB||channelInSLB>=lengthOfB-adjacentOfB)
193  adjacent = true;
194  } else {
195  int adjacentOfA = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,
197  //cellType = TGCChannelSLBIn::CellA;
198  channelInSLB = channel-lengthOfB;
199  if(channelInSLB<adjacentOfA||channelInSLB>=lengthOfA-adjacentOfA)
200  adjacent = true;
201  }
202  }
203 
204  if((moduleType == TGCId::SD) &&
205  (ppin->getRegionType() == TGCId::Endcap)){
206  // Strips of Middle doublets are ORed to the adjacent chamber
207  adjacent = cond2;
208  }
209 
210  if(adjacent==orChannel){
211  ppout = new TGCChannelPPOut(ppin->getSideType(),
212  ppin->getModuleType(),
213  ppin->getRegionType(),
214  ppin->getSector(),
215  id,
216  block,
217  channel);
218  break;
219  }
220  }
221  }
222 
223  return ppout;
224 }
225 
226 } //end of namespace
MuonTGC_Cabling::TGCChannelId::isValid
virtual bool isValid() const
Definition: TGCChannelId.h:34
MuonTGC_Cabling::TGCId::SI
@ SI
Definition: TGCId.h:47
MuonTGC_Cabling::TGCChannelPPOut
Definition: TGCChannelPPOut.h:14
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
MuonTGC_Cabling::TGCId::getSideType
SideType getSideType(void) const
Definition: TGCId.h:122
MuonTGC_Cabling::TGCChannelSLBIn::CellB
@ CellB
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCId::getRegionType
RegionType getRegionType(void) const
Definition: TGCId.h:126
MuonTGC_Cabling::TGCChannelSLBIn::CellC
@ CellC
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCCableInPP::m_database
TGCDatabase * m_database[TGCId::MaxRegionType][TGCId::MaxModuleType]
Definition: TGCCableInPP.h:36
InDet::adjacent
bool adjacent(unsigned int strip1, unsigned int strip2)
Definition: SCT_ClusteringTool.cxx:45
MuonTGC_Cabling::TGCCableInPP::getChannelIn
virtual TGCChannelId * getChannelIn(const TGCChannelId *ppout, bool orChannel=false) const
Definition: TGCCableInPP.cxx:61
MuonTGC_Cabling::TGCId::ModuleType
ModuleType
Definition: TGCId.h:47
MuonTGC_Cabling::TGCId::getModuleType
ModuleType getModuleType(void) const
Definition: TGCId.h:123
TGCChannelPPOut.h
TGCCableInPP.h
MuonTGC_Cabling::TGCCableInPP::~TGCCableInPP
virtual ~TGCCableInPP(void)
Definition: TGCCableInPP.cxx:32
MuonTGC_Cabling::TGCId::SD
@ SD
Definition: TGCId.h:47
MuonTGC_Cabling::TGCChannelId::getBlock
int getBlock() const
Definition: TGCChannelId.cxx:28
MuonTGC_Cabling::TGCCableInPP::getChannelOut
virtual TGCChannelId * getChannelOut(const TGCChannelId *ppin, bool orChannel=false) const
Definition: TGCCableInPP.cxx:129
MuonTGC_Cabling::TGCDatabase
Definition: TGCDatabase.h:15
MuonTGC_Cabling::TGCDatabaseInPP
Definition: TGCDatabaseInPP.h:14
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
TGCDatabaseInPP.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
MuonTGC_Cabling::TGCCableInPP::getChannel
virtual TGCChannelId * getChannel(const TGCChannelId *channelId, bool orChannel=false) const
Definition: TGCCableInPP.cxx:50
MuonTGC_Cabling::TGCId::WT
@ WT
Definition: TGCId.h:47
MuonTGC_Cabling
Definition: TGCCable.h:13
MuonTGC_Cabling::TGCCableInPP::TGCCableInPP
TGCCableInPP(void)
Definition: TGCCableInPP.h:31
MuonTGC_Cabling::TGCDatabase::getMaxEntry
virtual int getMaxEntry(void) const
Definition: TGCDatabase.cxx:36
MuonTGC_Cabling::TGCId::getId
int getId() const
Definition: TGCId.h:132
MuonTGC_Cabling::TGCCable
Definition: TGCCable.h:16
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
MuonTGC_Cabling::TGCDatabase::getEntrySize
virtual int getEntrySize(int entry) const
Definition: TGCDatabase.cxx:32
MuonTGC_Cabling::TGCChannelSLBIn::CellA
@ CellA
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCChannelSLBIn::getAdjacentOfSLB
static int getAdjacentOfSLB(TGCId::ModuleType moduleType, CellType cellType)
Definition: TGCChannelSLBIn.cxx:121
MuonTGC_Cabling::TGCId::ST
@ ST
Definition: TGCId.h:47
MuonTGC_Cabling::TGCId::getSector
virtual int getSector() const
Definition: TGCId.h:130
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
MuonTGC_Cabling::TGCChannelId::ChannelIdType::PPOut
@ PPOut
MuonTGC_Cabling::TGCChannelId
Definition: TGCChannelId.h:15
TGCChannelSLBIn.h
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
MuonTGC_Cabling::TGCChannelId::ChannelIdType::PPIn
@ PPIn
MuonTGC_Cabling::TGCChannelSLBIn::CellD
@ CellD
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCChannelPPIn
Definition: TGCChannelPPIn.h:14
TGCChannelPPIn.h
MuonTGC_Cabling::TGCChannelSLBIn::getLengthOfSLB
static int getLengthOfSLB(TGCId::ModuleType moduleType, CellType cellType)
Definition: TGCChannelSLBIn.cxx:94
MuonTGC_Cabling::TGCId::Forward
@ Forward
Definition: TGCId.h:53
MuonTGC_Cabling::TGCDatabaseInPP::NIndexIn
@ NIndexIn
Definition: TGCDatabaseInPP.h:31
MuonTGC_Cabling::TGCChannelId::getChannel
int getChannel() const
Definition: TGCChannelId.cxx:29