27 m_chronoStatSvc(
"ChronoStatSvc",
name )
47 if (m_extrapolator.retrieve().isFailure()) {
48 ATH_MSG_FATAL(
"Could not retrieve Tool " << m_extrapolator <<
". Exiting." );
49 return StatusCode::FAILURE;
51 if (m_extraprec.retrieve().isFailure()) {
52 ATH_MSG_FATAL(
"Could not retrieve Tool " << m_extraprec <<
". Exiting." );
53 return StatusCode::FAILURE;
57 return StatusCode::SUCCESS;
66 if (m_chronoStatSvc) m_chronoStatSvc->chronoPrint(
"MS::scan");
68 return StatusCode::SUCCESS;
76 const EventContext& ctx = Gaudi::Hive::currentContext();
78 if (!m_outerBoundary) {
79 m_trackingGeometry = m_extrapolator->trackingGeometry();
80 m_outerBoundary = &(m_trackingGeometry->highestTrackingVolume()->boundarySurfaces()[2]->surfaceRepresentation());
81 if (!m_outerBoundary) {
82 ATH_MSG_FATAL(
"Could not retrieve cylinder boundary from " << m_extrapolator <<
". Exiting." );
83 return StatusCode::FAILURE;
88 if (m_chronoStatSvc) m_chronoStatSvc->chronoStart(
"MS::scan");
91 std::vector<const TrackStateOnSurface*> material;
92 std::vector<const TrackStateOnSurface*> matPrec;
94 for (
unsigned int it = 0;
it < m_numScan+1;
it++) {
96 double z0 = m_minZ0 + (m_maxZ0-m_minZ0)/m_numScan *
it;
99 double theta = m_minTheta + (m_maxTheta-m_minTheta)/m_numScan*
it;
100 double p = m_minP + (m_maxP-m_minP)/m_numScan *
it;
106 material.clear(); matPrec.clear();
111 m_msentry = m_trackingGeometry->trackingVolume(
"Calo::Containers::Calorimeter");
115 m_extrapolator->extrapolateToVolume(
129 const std::vector<const Trk::TrackStateOnSurface*>* mmsentry = m_extrapolator->extrapolateM(ctx,
136 for (
const auto&
entry : *mmsentry) {
139 <<
entry->trackParameters()->position() <<
":"
140 <<
entry->trackParameters()->momentum().mag() - currPar->
momentum().mag());
144 currPar = (mmsentry->back()) ? mmsentry->back()->trackParameters() : msEntry;
146 const std::vector<const Trk::TrackStateOnSurface*>* peri = m_extrapolator->extrapolateM(ctx,
156 ATH_MSG_ERROR (
"Perigee pointer is null in CETmaterial.cxx");
158 return StatusCode::FAILURE;
160 for (
const auto&
entry : *peri) {
163 <<
entry->trackParameters()->position() <<
":"
164 <<
entry->trackParameters()->momentum().mag() - msEntry->
momentum().mag());
168 if (peri->back() && peri->back()->trackParameters()) {
170 << initialPerigee.parameters()[0] <<
","
171 << initialPerigee.parameters()[1] <<
","
172 << initialPerigee.parameters()[2] <<
","
173 << initialPerigee.parameters()[3] <<
","
174 << initialPerigee.momentum().mag() );
176 << peri->back()->trackParameters()->parameters()[0] <<
","
177 << peri->back()->trackParameters()->parameters()[1] <<
","
178 << peri->back()->trackParameters()->parameters()[2] <<
","
179 << peri->back()->trackParameters()->parameters()[3] <<
","
180 << peri->back()->trackParameters()->momentum().mag() );
182 ATH_MSG_ERROR(
"extrapolation to perigee failed for input parameters: " << msEntry->parameters() );
187 ATH_MSG_ERROR(
"extrapolation to MSentry failed for input parameters: " << currPar->parameters() );
195 if (m_checkStepWise) {
198 std::pair<std::unique_ptr<Trk::TrackParameters>,
const Trk::Layer*>
next = m_extrapolator->extrapolateToNextActiveLayerM(
211 if (m_doprecision && precPar && currPar ) {
213 const std::vector<const Trk::TrackStateOnSurface*>* nextPrec = m_extraprec->extrapolateM(
222 for (
const auto *
i : *nextPrec) {
231 if (!lay || !nextPrec || nextPrec->empty() || !nextPrec->back() )
break;
232 precPar = nextPrec->back()->trackParameters();
234 if (!material.empty())
for (
auto &
i : material) {
235 if (
i->materialEffectsOnTrack())
mat +=
i->materialEffectsOnTrack()->thicknessInX0();
238 currPar->parameters()[1]-precPar->parameters()[1]);
244 if (nextPar && m_printActive) {
248 if (!material.empty())
for (
auto &
i : material) {
249 if (
i->materialEffectsOnTrack()) matc +=
i->materialEffectsOnTrack()->thicknessInX0();
255 printMatPrec(
theta,
phi,nextPar,nextPar,matc,
id,
"unknown");
259 if (m_printMaterial) {
261 if (!material.empty())
for (
auto &
i : material) {
262 if (
i->materialEffectsOnTrack()) {
263 mat +=
i->materialEffectsOnTrack()->thicknessInX0();
269 const std::vector<const Trk::TrackStateOnSurface*>* destParameters = m_extrapolator->extrapolateM(
277 if (m_printMaterial) {
279 if (destParameters)
for (
const auto *destParameter : *destParameters) {
290 std::vector<const Trk::DetachedTrackingVolume*> detVols = m_extrapolator->trackingGeometry()->lowestDetachedTrackingVolumes(trPar->
position());
295 if (destParameters) {
303 if (!destParameters || destParameters->empty() ) {
304 ATH_MSG_ERROR(
"extrapolation to outer boundary failed for input parameters: " << initialPerigee.parameters() );
305 }
else if (destParameters->back()->trackParameters()) {
309 const std::vector<const Trk::TrackStateOnSurface*>* peri = m_extrapolator->extrapolateM(
310 ctx, *(destParameters->back()->trackParameters()),
318 for (
unsigned int i=0;
i< peri->size();
i++)
319 ATH_MSG_INFO(
"position:" <<
i <<
"," << (*peri)[
i]->trackParameters()->position() );
320 ATH_MSG_INFO(
"extrapolation to perigee:input: " << initialPerigee.parameters() );
321 ATH_MSG_INFO(
"extrapolation to perigee:output: " << peri->back()->trackParameters()->parameters() );
323 ATH_MSG_ERROR(
"extrapolation to perigee failed for input parameters: " << destParameters->back()->trackParameters()->parameters() );
329 delete destParameters;
333 if (m_chronoStatSvc) m_chronoStatSvc->chronoStop(
"MS::scan");
335 return StatusCode::SUCCESS;
342 std::ofstream myfilemat;
343 myfilemat.open (m_matTotFile,std::ios::app);
344 myfilemat<<
theta<<
" "<<
phi<<
" "<<
mat<<
" "<<dtheta<<
" "<<dphi<<std::endl;
350 std::ofstream myfilemat;
351 myfilemat.open(m_matScanFile,std::ios::app);
352 myfilemat <<
theta <<
" " <<
phi <<
" " <<
r <<
" " <<
z <<
" " <<
mat <<
" " <<
name << std::endl;
357 if (
name.empty()) {};
358 std::ofstream myfilemat;
359 myfilemat.open(m_matActiveFile,std::ios::app);
361 if (!m_th && !m_ph) {
366 delete m_next; m_next=nextPar->
clone();
371 *m_err = mdest->covariance()->inverse().eval();
378 if (m_err && m_id>0) {
379 myfilemat << m_th <<
" " << m_ph <<
" " << 1 <<
" " << m_id <<
" " << m_matSaved << std::endl;
380 myfilemat << m_next->parameters()[
Trk::locX] <<
" " << m_next->parameters()[
Trk::locY] <<
" " << m_next->parameters()[
Trk::phi]
386 myfilemat << m_th <<
" " << m_ph <<
" " << 0 <<
" " << m_id << std::endl;
387 myfilemat << m_next->parameters()[
Trk::locX] <<
" " << m_next->parameters()[
Trk::locY] <<
" " << m_next->parameters()[
Trk::phi]
394 delete m_next; m_next=nextPar->
clone();
400 *m_err = mdest->covariance()->inverse().eval();
411 delete m_next; m_next=nextPar->
clone();
416 *m_err = mdest->covariance()->inverse().eval();
423 std::ofstream myfilemat;
424 myfilemat.open(m_matCompFile,std::ios::app);
426 <<
" " <<
mat <<
" " << matApp <<
" " <<
dx <<
" " <<
dy << std::endl;