125{
126 G4StepPoint* pPreStepPoint = pStep->GetPreStepPoint();
127
128 G4TouchableHandle pTouchableHandle = pPreStepPoint->GetTouchableHandle();
130
131 int gasID = pTouchableHandle->GetReplicaNumber();
132 int strawID = pTouchableHandle->GetReplicaNumber(
depth++);
133 int ringID = pTouchableHandle->GetReplicaNumber(
depth++);
134 int moduleID = pTouchableHandle->GetReplicaNumber(
depth);
135
136 int hitID = gasID % 2;
137
138 G4Track* pTrack = pStep->GetTrack();
139
140 TrackHelper trHelp(pTrack);
141
142 G4ThreeVector globalPreStepPoint = pPreStepPoint->GetPosition();
143
144 G4StepPoint* pPostStepPoint = pStep->GetPostStepPoint();
145 G4ThreeVector globalPostStepPoint = pPostStepPoint->GetPosition();
146
147
148 const G4TouchableHistory* pTouchableHistory =
149 static_cast<const G4TouchableHistory*>(pPreStepPoint->GetTouchable());
150
151 const G4AffineTransform& topTransform = pTouchableHistory->GetHistory()->
152 GetTopTransform();
153
154 G4ThreeVector localPreStepPoint = topTransform.TransformPoint(globalPreStepPoint);
155 G4ThreeVector localPostStepPoint = topTransform.TransformPoint(globalPostStepPoint);
156
157 double preStepZ = localPreStepPoint.z();
158 double postStepZ = localPostStepPoint.z();
159
160
161 double preStepX = localPreStepPoint.x();
162 double preStepY = localPreStepPoint.y();
163
164 double postStepX = localPostStepPoint.x();
165 double postStepY = localPostStepPoint.y();
166
168 {
169 double preStepR = std::sqrt(preStepX * preStepX + preStepY * preStepY);
170 double postStepR = std::sqrt(postStepX * postStepX + postStepY * postStepY);
171
172 if (preStepR > 2.0000001 || postStepR > 2.0000001)
173 {
177
178 std::cout << "!!!!! Barrel. Error in local coordinates of hits!" << std::endl;
179 std::cout << " barrelID=" << hitID << " ringID=" << ringID
180 << " moduleID=" << moduleID << " strawID=" << strawID
181 << " trackID=" << trHelp.GetUniqueID() << std::endl;
182 std::cout << " particleEncoding=" << particleEncoding;
183
184 if (kineticEnergy < 0.0001)
185 std::cout << " kineticEnergy=" << kineticEnergy * 1000000. << " eV";
186 else if (kineticEnergy < 0.1)
187 std::cout << " kineticEnergy=" << kineticEnergy * 1000. << " keV";
188 else if (kineticEnergy >= 100.)
189 std::cout << " kineticEnergy=" << kineticEnergy / 1000. << " GeV";
190 else if (kineticEnergy >= 100000.)
191 std::cout << " kineticEnergy=" << kineticEnergy / 1000000. << " TeV";
192 else
193 std::cout << " kineticEnergy=" << kineticEnergy << " MeV";
194
195 if (energyDeposit < 0.1)
196 std::cout <<
" energyDeposit=" <<
energyDeposit * 1000. <<
" eV"
197 << std::endl;
198 else if (energyDeposit >= 100.)
199 std::cout <<
" energyDeposit=" <<
energyDeposit / 1000. <<
" MeV"
200 << std::endl;
201 else
202 std::cout <<
" energyDeposit=" <<
energyDeposit <<
" keV" << std::endl;
203
204 std::cout << " preStepX=" << preStepX << " mm preStepY=" << preStepY
205 << " mm preStepR=" << preStepR << " mm" << std::endl;
206 std::cout << " postStepX=" << postStepX << " mm postStepY=" << postStepY
207 << " mm postStepR=" << postStepR << " mm" << std::endl << std::endl;
208 }
209 }
210
211 double preStepGlobalTime = pPreStepPoint->GetGlobalTime();
212 double postStepGlobalTime = pPostStepPoint->GetGlobalTime();
213 double globalTime = (preStepGlobalTime + postStepGlobalTime) / 2.;
214
215 int layerID;
216
219 else
221
222 hitID <<= 20;
223 hitID += (ringID << 15);
224 hitID += (moduleID << 10);
225 hitID += (layerID << 5);
226 hitID += strawID;
227
230 m_pSensitiveDetector->m_partLink = trHelp.GenerateParticleLink(eventInfo ? eventInfo->GetEventStore() :
nullptr);
238
239 return true;
240}
int GetLayerID2(const int &, int &) const
int GetLayerID1(const int &, int &) const
std::string depth
tag string for intendation