7 #include "CLHEP/Units/SystemOfUnits.h"
9 #include "Gaudi/Property.h"
21 ISvcLocator* pSvcLocator) :
50 IAlgTool *trigTool(0);
51 CHECK( toolSvc()->retrieveTool(
"CosmicTriggerTimeTool",trigTool) );
55 ATH_MSG_ERROR(
" Failed to dynamic cast CosmicTriggerTimeTool " );
56 return StatusCode::FAILURE;
59 return StatusCode::SUCCESS;
71 if(
m_mode ==
"TTRCavern" ) {
80 return StatusCode::SUCCESS;
86 double earliestMuonTime = -1.;
91 if(abs(
r.GetPDGCode()) == 13 ) {
93 if( (nMuons==1) or (
r.GetTime() < earliestMuonTime) ) {
95 earliestMuonTime =
r.GetTime();
110 <<
pos.y() <<
" " <<
pos.z() );
112 << cosThetaDir.y() <<
" " << cosThetaDir.z() );
122 CLHEP::Hep3Vector PointCritical;
125 double dXdY = cosThetaDir.x()/cosThetaDir.y();
126 double dZdY = cosThetaDir.z()/cosThetaDir.y();
128 double XCritical =
pos.x()-dXdY*
pos.y();
129 double YCritical = 0.0;
130 double ZCritical =
pos.z()-dZdY*
pos.y();
132 PointCritical = CLHEP::Hep3Vector(XCritical,YCritical,ZCritical);
134 PathCritical = sqrt(
pow(XCritical-
pos.x(),2) +
pow(YCritical-
pos.y(),2) +
135 pow(ZCritical-
pos.z(),2));
136 if( (YCritical-
pos.y())*cosThetaDir.y() < 0 ) {
137 ATH_MSG_WARNING(
"Backwards extrapolation?? pos.y(),cosThetaDir.y() = "
138 <<
pos.y()<<
"," << cosThetaDir.y() );
139 PathCritical = -1.0 * PathCritical;
143 double dXdZ = cosThetaDir.x()/cosThetaDir.z();
144 double dYdZ = cosThetaDir.y()/cosThetaDir.z();
146 double XCritical =
pos.x()-dXdZ*
pos.z();
147 double YCritical =
pos.y()-dYdZ*
pos.z();
148 double ZCritical = 0.0;
150 PointCritical = CLHEP::Hep3Vector(XCritical,YCritical,ZCritical);
152 PathCritical = sqrt(
pow(XCritical-
pos.x(),2) +
pow(YCritical-
pos.y(),2) +
153 pow(ZCritical-
pos.z(),2));
154 if( (ZCritical-
pos.z())*cosThetaDir.z() < 0 ) {
155 ATH_MSG_WARNING(
"Backwards extrapolation?? pos.z(),cosThetaDir.z() = "
156 <<
pos.z()<<
"," << cosThetaDir.z() );
157 PathCritical = -1.0 * PathCritical;
162 PathCritical = -1.*(
pos.x()*cosThetaDir.x() +
pos.y()*cosThetaDir.y() +
163 pos.z()*cosThetaDir.z());
164 PointCritical = CLHEP::Hep3Vector(
pos.x() + PathCritical*cosThetaDir.x(),
165 pos.y() + PathCritical*cosThetaDir.y(),
166 pos.z() + PathCritical*cosThetaDir.z());
170 return StatusCode::FAILURE;
176 ATH_MSG_DEBUG(
" Extrapolated muon xyz position " << PointCritical.x()<<
" "
177 << PointCritical.y()<<
" " << PointCritical.z());
182 ComTime* theComTime =
new ComTime(TTCTime,TimeCritical,PointCritical,cosThetaDir);
192 }
else if(
m_mode ==
"CollisionMode" ) {
197 return StatusCode::SUCCESS;
200 return StatusCode::SUCCESS;
202 return StatusCode::SUCCESS;