CMS 3D CMS Logo

TotemT1Organization.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Forward
4 // Class : TotemT1Organization
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: R. Capra
10 // Created: Tue May 16 10:14:34 CEST 2006
11 //
12 
13 // system include files
14 
15 // user include files
19 
20 #include "G4VPhysicalVolume.hh"
21 #include "G4VTouchable.hh"
22 #include "globals.hh"
23 
24 //
25 // constructors and destructor
26 //
28  _needUpdateData(false),
29  _currentUnitID(-1),
30  _currentPlane(-1),
31  _currentCSC(-1),
32  _currentLayer(-1),
33  _currentObjectType(Undefined) {
34 
35  edm::LogInfo("ForwardSim") << "Creating TotemT1Organization";
36 }
37 
39 }
40 
41 //
42 // member functions
43 //
44 
45 uint32_t TotemT1Organization :: getUnitID(const G4Step* aStep) const {
46  return const_cast<TotemT1Organization *>(this)->getUnitID(aStep);
47 }
48 
49 uint32_t TotemT1Organization :: getUnitID(const G4Step* aStep) {
50 
51  int currLAOT;
52  const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
53  G4VPhysicalVolume* physVol;
54  int ii =0;
55  for ( ii = 0; ii < touch->GetHistoryDepth(); ii++ ){
56  physVol = touch->GetVolume(ii);
57 
58 #ifdef SCRIVI
59  LogDebug("ForwardSim") << "physVol=" << physVol->GetName()
60  << ", level=" << ii << ", physVol->GetCopyNo()="
61  << physVol->GetCopyNo();
62 #endif
63 
64  if(physVol->GetName() == "TotemT1" &&
65  physVol->GetCopyNo()==1) _currentDetectorPosition = 1;
66  if(physVol->GetName() == "TotemT1" &&
67  physVol->GetCopyNo()==2) _currentDetectorPosition = 2;
68  }
69 
70  touch = aStep->GetPreStepPoint()->GetTouchable();
71  physVol=touch->GetVolume(0);
72 
73  currLAOT=physVol->GetCopyNo();
74  _currentObjectType=static_cast<ObjectType>(currLAOT%MaxObjectTypes);
76  _currentPlane=-1;
77  _currentCSC=-1;
78 
79  if (touch->GetVolume(1)) {
80  _currentCSC=touch->GetVolume(1)->GetCopyNo();
81  if (touch->GetVolume(2)) _currentPlane=touch->GetVolume(2)->GetCopyNo();
82  }
83 #ifdef SCRIVI
84  LogDebug("ForwardSim") << "CURRENT CSC "<<_currentCSC << "\n"
85  << "CURRENT PLANE "<<_currentPlane;
86 #endif
87  _needUpdateUnitID=true;
88  return getCurrentUnitID();
89 }
90 
92 
94 #ifdef SCRIVI
95  LogDebug("ForwardSim") << "getCurrentUnitID()=" << _currentUnitID;
96  << endl;
97 #endif
98  return _currentUnitID;
99 }
100 
102 
103 #ifdef SCRIVI
104  LogDebug("ForwardSim") << "_currentUnitID=" << currentUnitID;
105 #endif
106  _currentUnitID=currentUnitID;
107  _needUpdateData=true;
108 }
109 
111 
113 #ifdef SCRIVI
114  LogDebug("ForwardSim") << "getCurrentDetectorPosition()="
116 #endif
118 }
119 
120 void TotemT1Organization :: setCurrentDetectorPosition(int currentDetectorPosition) {
121 
122 #ifdef SCRIVI
123  LogDebug("ForwardSim") << "_currentDetectorPosition=" << currentDetectorPosition;
124 #endif
125  _currentDetectorPosition=currentDetectorPosition;
126  _needUpdateUnitID=true;
127 }
128 
130 
132 
133 #ifdef SCRIVI
134  LogDebug("ForwardSim") << "getCurrentPlane()=" << _currentPlane;
135 #endif
136  return _currentPlane;
137 }
138 
140 
141 #ifdef SCRIVI
142  LogDebug("ForwardSim") << "_currentPlane=" << currentPlane;
143 #endif
144  _currentPlane=currentPlane;
145  _needUpdateUnitID=true;
146 }
147 
149 
151 #ifdef SCRIVI
152  LogDebug("ForwardSim") << "getCurrentCSC()=" << _currentCSC;
153 #endif
154  return _currentCSC;
155 }
156 
158 
159 #ifdef SCRIVI
160  LogDebug("ForwardSim") << "_currentCSC=" << currentCSC;
161 #endif
162  _currentCSC=currentCSC;
163  _needUpdateUnitID=true;
164 }
165 
167 
169 #ifdef SCRIVI
170  LogDebug("ForwardSim") << "getCurrentLayer()=" << _currentLayer;
171 #endif
172  return _currentLayer;
173 }
174 
176 
177 #ifdef SCRIVI
178  LogDebug("ForwardSim") << "_currentLayer=" << currentLayer;
179 #endif
180  _currentLayer=currentLayer;
181  _needUpdateUnitID=true;
182 }
183 
185 
187 #ifdef SCRIVI
188  LogDebug("ForwardSim") << "getCurrentObjectType()=" << _currentObjectType;
189 #endif
190  return _currentObjectType;
191 }
192 
194 
195 #ifdef SCRIVI
196  LogDebug("ForwardSim") << "_currentObjectType=" << currentObjectType;
197 #endif
198  _currentObjectType=currentObjectType;
199  _needUpdateUnitID=true;
200 }
201 
203 
204  int result(static_cast<int>(objectType));
205  if (result<0 || result>=MaxObjectTypes) {
206  result = 0;
207  edm::LogInfo("ForwardSim") << "Invalid ObjectType value (" << objectType
208  << "). Now is \"Undefined\"";
209  }
210  return result;
211 }
212 
214  return fromObjectTypeToInt(objectType)+layer*MaxObjectTypes;
215 }
216 
217 
218 //
219 // private member functions
220 //
221 
223  if (_needUpdateUnitID) {
224 #ifdef SCRIVI
225  LogDebug("ForwardSim") << "UnitID update needed.";
226 #endif
227  const_cast<TotemT1Organization *>(this)->_FromDataToUnitID();
228  } else {
229 #ifdef SCRIVI
230  LogDebug("ForwardSim") << "UnitID update not needed.";
231 #endif
232  }
233 }
234 
236 
237  if (_needUpdateData) {
238 #ifdef SCRIVI
239  LogDebug("ForwardSim") << "Data update needed.";
240 #endif
241  const_cast<TotemT1Organization *>(this)->_FromUnitIDToData();
242  } else {
243 #ifdef SCRIVI
244  LogDebug("ForwardSim") << "Data update not needed.";
245 #endif
246  }
247 }
248 
250 
251  int currDP, currCSC, currOT, currPLA;
252  unsigned long currPL, currLA;
253 
254  // currDP: 0..4 (5)
255  // currPL: 0..infty
256  // currCSC: 0..6 (7)
257  // currLA: 0..infty
258  // currOT: 0..MaxObjectTypes-1 (MaxObjectTypes)
259 
260  currDP = (_currentUnitID/100000) % 5;// 3;
261  currCSC = (_currentUnitID/5)%7;
262  currOT = (_currentUnitID/(5*7))%MaxObjectTypes;
263  currPLA = _currentUnitID/(5*7*MaxObjectTypes);
264 
266  splitter.Split(currPLA,currPL,currLA);
267 
268 #ifdef SCRIVI
269  LogDebug("ForwardSim") << "currDP=" << currDP << ", currPL=" << currPL
270  << ", currCSC=" << currCSC << ", currLA=" << currLA
271  << ", currOT=" << currOT << ", currPLA=" << currPLA
272  << ", _currentUnitID=" << _currentUnitID;
273 #endif
274  _currentPlane=currPL-1;
275  _currentCSC=currCSC-1;
276  _currentLayer=currLA-1;
277  _currentObjectType=static_cast<ObjectType>(currOT);
278 
279  switch(currDP) {
280  case 0:
282  break;
283  case 1:
285  break;
286  case 2:
288  break;
289  case 3:
291  break;
292  case 4:
294  break;
295  }
296  _needUpdateData=false;
297 }
298 
300  int currDP, currPL, currCSC, currLA, currOT;
301 #ifdef SCRIVI
302  LogDebug("ForwardSim") << " CURRENT DETECTOR POSITION (0-3) "
304 #endif
305  switch(_currentDetectorPosition) {
306  case 0:
307  currDP=0;
308  break;
309  case 1:
310  currDP=1;
311  break;
312  case 2:
313  currDP=2;
314  break;
315  case 3:
316  currDP=3;
317  break;
318  case 4:
319  currDP=4;
320  break;
321  default:
323  currDP=0;
324  edm::LogInfo("ForwardSim") << "Invalid _currentDetectorPosition value ("
326  << "). Now is \"Undefined\"";
327  }
328 
329  if (_currentPlane<-1) {
330  edm::LogInfo("ForwardSim") << "Invalid _currentPlane value ("
331  << _currentPlane << "). Now is -1";
332  _currentPlane=-1;
333  }
334  currPL=_currentPlane+1;
335 
336  if (_currentCSC<-1 || _currentCSC>5) {
337  edm::LogInfo("ForwardSim") << "Invalid _currentCSC value (" << _currentCSC
338  << "). Now is -1";
339  _currentCSC=-1;
340  }
341  currCSC=_currentCSC+1;
342 
343  if (_currentLayer<-1) {
344  edm::LogInfo("ForwardSim") << "Invalid _currentLayer value ("
345  << _currentLayer << "). Now is -1";
346  _currentLayer=-1;
347  }
348  currLA=_currentLayer+1;
349 
351 
352  // currDP: 0..2 (3)
353  // currPL: 0..infty
354  // currCSC: 0..6 (7)
355  // currLA: 0..infty
356  // currOT: 0..MaxObjectTypes-1 (MaxObjectTypes)
357 
358  TotemNumberMerger merger;
359  int currPLA(merger.Merge(currPL,currLA));
360 
361  _currentUnitID=currDP*100000+5*(currCSC+7*(currOT+MaxObjectTypes*(currPLA)));
362 #ifdef SCRIVI
363  LogDebug("ForwardSim") << "currDP=" << currDP << ", currPL=" << currPL
364  << ", currCSC=" << currCSC << ", currLA=" << currLA
365  << ", currOT=" << currOT << ", currPLA=" << currPLA
366  << ", _currentUnitID=" << _currentUnitID;
367 #endif
368 
369  _needUpdateUnitID=false;
370 }
#define LogDebug(id)
void setCurrentObjectType(ObjectType currentObjectType)
def splitter(iterator, n)
Definition: confdb.py:12
uint32_t getUnitID(const G4Step *aStep) const override
void _checkDataUpdate(void) const
unsigned long Merge(unsigned long value1, unsigned long value2) const
void setCurrentDetectorPosition(int currentDetectorPosition)
void setCurrentLayer(int currentLayer)
void setCurrentUnitID(int currentUnitID)
void Split(unsigned long source, unsigned long &value1, unsigned long &value2) const
int getCurrentDetectorPosition(void) const
void _checkUnitIDUpdate(void) const
int getCurrentUnitID(void) const
int getCurrentPlane(void) const
int getCurrentCSC(void) const
void setCurrentPlane(int currentPlane)
ii
Definition: cuy.py:590
int getCurrentLayer(void) const
void setCurrentCSC(int currentCSC)
int fromObjectTypeToInt(ObjectType objectType)
ObjectType getCurrentObjectType(void) const