14 #include "TRT_G4Utilities/TRTParameters.hh"
17 #include "G4AffineTransform.hh"
18 #include "G4NavigationHistory.hh"
20 #include "G4StepPoint.hh"
21 #include "G4ThreeVector.hh"
22 #include "G4TouchableHandle.hh"
23 #include "G4TouchableHistory.hh"
35 m_testLocalCoordinatesOfHits(0),
36 m_numberOfStrawsInPlanesAB(0),
37 m_numberOfStrawsInPlaneC(0),
38 m_numberOfWheelsAB(0),
39 m_numberOfStrawsInSectorsAB(0),
40 m_numberOfStrawsInSectorC(0),
41 m_initialStrawIDInSectorsAB(0),
42 m_initialStrawIDInSectorC(0),
43 m_numberOfStrawsInIDSectorsAB(0),
44 m_numberOfStrawsInIDSectorC(0),
46 m_pSensitiveDetector(pSensitiveDet),
53 if (
m_verboseLevel>5) { G4cout <<
"##### Constructor TRTProcessingOfEndCapHits" << G4endl; }
59 if (
m_verboseLevel>5) { G4cout <<
"##### Constructor TRTProcessingOfEndCapHits done" << G4endl; }
74 if (
m_verboseLevel>5) { G4cout <<
"######### Method TRTProcessingOfEndCapHits::Initialize" << G4endl; }
81 if (
m_verboseLevel>5) { G4cout <<
"######### Method TRTProcessingOfEndCapHits::Initialize done" << G4endl; }
90 G4Track* pTrack = pStep->GetTrack();
94 G4StepPoint* pPreStepPoint = pStep->GetPreStepPoint();
95 G4StepPoint* pPostStepPoint = pStep->GetPostStepPoint();
97 G4TouchableHandle pTouchableHandle = pPreStepPoint->GetTouchableHandle();
100 int strawID = pTouchableHandle->GetReplicaNumber(
depth++);
105 sectorID = pTouchableHandle->GetReplicaNumber(
depth++);
107 int planeID = pTouchableHandle->GetReplicaNumber(
depth++);
109 int wheelID = pTouchableHandle->GetReplicaNumber(
depth);
111 G4ThreeVector globalPreStepPoint = pPreStepPoint->GetPosition();
115 if (globalPreStepPoint.z() > 0.)
137 G4ThreeVector globalPostStepPoint = pPostStepPoint->GetPosition();
139 const G4TouchableHistory* pTouchableHistory =
140 static_cast<const G4TouchableHistory*
>(pPreStepPoint->GetTouchable());
142 const G4AffineTransform& topTransform = pTouchableHistory->GetHistory()->
145 G4ThreeVector localPreStepPoint = topTransform.TransformPoint(globalPreStepPoint);
146 G4ThreeVector localPostStepPoint = topTransform.TransformPoint(globalPostStepPoint);
148 double preStepX = localPreStepPoint.x();
149 double preStepY = localPreStepPoint.y();
150 double preStepZ = localPreStepPoint.z();
151 double postStepX = localPostStepPoint.x();
152 double postStepY = localPostStepPoint.y();
153 double postStepZ = localPostStepPoint.z();
158 double preStepR = std::sqrt(preStepX * preStepX + preStepY * preStepY);
159 double postStepR = std::sqrt(postStepX * postStepX + postStepY * postStepY);
161 if (preStepR > 2.0000001 || postStepR > 2.0000001)
167 std::cout <<
"!!!!! End-caps. Error in local coordinates of hits!" << std::endl;
168 std::cout <<
" endCapID=" << endCapID <<
" wheelID=" << wheelID
169 <<
" planeID=" << planeID <<
" strawID=" << strawID
170 <<
" trackID=" << trHelp.
GetUniqueID() << std::endl;
171 std::cout <<
" particleEncoding=" << particleEncoding;
173 if (kineticEnergy < 0.0001)
174 std::cout <<
" kineticEnergy=" << kineticEnergy * 1000000. <<
" eV";
175 else if (kineticEnergy < 0.1)
176 std::cout <<
" kineticEnergy=" << kineticEnergy * 1000. <<
" keV";
177 else if (kineticEnergy >= 100.)
178 std::cout <<
" kineticEnergy=" << kineticEnergy / 1000. <<
" GeV";
179 else if (kineticEnergy >= 100000.)
180 std::cout <<
" kineticEnergy=" << kineticEnergy / 1000000. <<
" TeV";
182 std::cout <<
" kineticEnergy=" << kineticEnergy <<
" MeV";
185 std::cout <<
" energyDeposit=" <<
energyDeposit * 1000. <<
" eV"
188 std::cout <<
" energyDeposit=" <<
energyDeposit / 1000. <<
" MeV"
191 std::cout <<
" energyDeposit=" <<
energyDeposit <<
" keV" << std::endl;
193 std::cout <<
" preStepX=" << preStepX <<
" mm preStepY=" << preStepY
194 <<
" mm preStepR=" << preStepR <<
" mm" << std::endl;
195 std::cout <<
" postStepX=" << postStepX <<
" mm postStepY=" << postStepY
196 <<
" mm postStepR=" << postStepR <<
" mm" << std::endl << std::endl;
200 double preStepGlobalTime = pPreStepPoint->GetGlobalTime();
201 double postStepGlobalTime = pPostStepPoint->GetGlobalTime();
202 double globalTime = (preStepGlobalTime + postStepGlobalTime) / 2.;
205 int numberOfStrawsInPlane;
206 int numberOfStrawsInIDSector;
229 strawID = (3*numberOfStrawsInPlane/2 - strawID - 1) % numberOfStrawsInPlane;
233 sectorID = strawID / numberOfStrawsInIDSector;
234 strawID %= numberOfStrawsInIDSector;
243 hitID += (wheelID << 15);
244 hitID += (sectorID << 10);
245 hitID += (planeID << 5);
248 EventContext
const* eventContext{
nullptr};
250 eventContext = &eventInfo->GetEventContext();