7 #include "CLHEP/Units/SystemOfUnits.h"
9 #include "Gaudi/Property.h"
21 ISvcLocator* pSvcLocator) :
50 CHECK( service(
"ToolSvc",toolSvc ) );
52 IAlgTool *trigTool(0);
53 CHECK( toolSvc->retrieveTool(
"CosmicTriggerTimeTool",trigTool) );
57 ATH_MSG_ERROR(
" Failed to dynamic cast CosmicTriggerTimeTool " );
58 return StatusCode::FAILURE;
61 return StatusCode::SUCCESS;
73 if(
m_mode ==
"TTRCavern" ) {
82 return StatusCode::SUCCESS;
88 double earliestMuonTime = -1.;
92 for(
auto it : *coll) {
94 if(abs(
it.GetPDGCode()) == 13 ) {
96 if( (nMuons==1) or (
it.GetTime() < earliestMuonTime) ) {
99 earliestMuonTime =
it.GetTime();
114 <<
pos.y() <<
" " <<
pos.z() );
116 << cosThetaDir.y() <<
" " << cosThetaDir.z() );
126 CLHEP::Hep3Vector PointCritical;
129 double dXdY = cosThetaDir.x()/cosThetaDir.y();
130 double dZdY = cosThetaDir.z()/cosThetaDir.y();
132 double XCritical =
pos.x()-dXdY*
pos.y();
133 double YCritical = 0.0;
134 double ZCritical =
pos.z()-dZdY*
pos.y();
136 PointCritical = CLHEP::Hep3Vector(XCritical,YCritical,ZCritical);
138 PathCritical = sqrt(
pow(XCritical-
pos.x(),2) +
pow(YCritical-
pos.y(),2) +
139 pow(ZCritical-
pos.z(),2));
140 if( (YCritical-
pos.y())*cosThetaDir.y() < 0 ) {
141 ATH_MSG_WARNING(
"Backwards extrapolation?? pos.y(),cosThetaDir.y() = "
142 <<
pos.y()<<
"," << cosThetaDir.y() );
143 PathCritical = -1.0 * PathCritical;
147 double dXdZ = cosThetaDir.x()/cosThetaDir.z();
148 double dYdZ = cosThetaDir.y()/cosThetaDir.z();
150 double XCritical =
pos.x()-dXdZ*
pos.z();
151 double YCritical =
pos.y()-dYdZ*
pos.z();
152 double ZCritical = 0.0;
154 PointCritical = CLHEP::Hep3Vector(XCritical,YCritical,ZCritical);
156 PathCritical = sqrt(
pow(XCritical-
pos.x(),2) +
pow(YCritical-
pos.y(),2) +
157 pow(ZCritical-
pos.z(),2));
158 if( (ZCritical-
pos.z())*cosThetaDir.z() < 0 ) {
159 ATH_MSG_WARNING(
"Backwards extrapolation?? pos.z(),cosThetaDir.z() = "
160 <<
pos.z()<<
"," << cosThetaDir.z() );
161 PathCritical = -1.0 * PathCritical;
166 PathCritical = -1.*(
pos.x()*cosThetaDir.x() +
pos.y()*cosThetaDir.y() +
167 pos.z()*cosThetaDir.z());
168 PointCritical = CLHEP::Hep3Vector(
pos.x() + PathCritical*cosThetaDir.x(),
169 pos.y() + PathCritical*cosThetaDir.y(),
170 pos.z() + PathCritical*cosThetaDir.z());
174 return StatusCode::FAILURE;
180 ATH_MSG_DEBUG(
" Extrapolated muon xyz position " << PointCritical.x()<<
" "
181 << PointCritical.y()<<
" " << PointCritical.z());
186 ComTime* theComTime =
new ComTime(TTCTime,TimeCritical,PointCritical,cosThetaDir);
196 }
else if(
m_mode ==
"CollisionMode" ) {
201 return StatusCode::SUCCESS;
204 return StatusCode::SUCCESS;
206 return StatusCode::SUCCESS;
215 return StatusCode::SUCCESS;