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.;
90 for(
auto it : *coll) {
92 if(abs(
it.GetPDGCode()) == 13 ) {
94 if( (nMuons==1) or (
it.GetTime() < earliestMuonTime) ) {
97 earliestMuonTime =
it.GetTime();
112 <<
pos.y() <<
" " <<
pos.z() );
114 << cosThetaDir.y() <<
" " << cosThetaDir.z() );
124 CLHEP::Hep3Vector PointCritical;
127 double dXdY = cosThetaDir.x()/cosThetaDir.y();
128 double dZdY = cosThetaDir.z()/cosThetaDir.y();
130 double XCritical =
pos.x()-dXdY*
pos.y();
131 double YCritical = 0.0;
132 double ZCritical =
pos.z()-dZdY*
pos.y();
134 PointCritical = CLHEP::Hep3Vector(XCritical,YCritical,ZCritical);
136 PathCritical = sqrt(
pow(XCritical-
pos.x(),2) +
pow(YCritical-
pos.y(),2) +
137 pow(ZCritical-
pos.z(),2));
138 if( (YCritical-
pos.y())*cosThetaDir.y() < 0 ) {
139 ATH_MSG_WARNING(
"Backwards extrapolation?? pos.y(),cosThetaDir.y() = "
140 <<
pos.y()<<
"," << cosThetaDir.y() );
141 PathCritical = -1.0 * PathCritical;
145 double dXdZ = cosThetaDir.x()/cosThetaDir.z();
146 double dYdZ = cosThetaDir.y()/cosThetaDir.z();
148 double XCritical =
pos.x()-dXdZ*
pos.z();
149 double YCritical =
pos.y()-dYdZ*
pos.z();
150 double ZCritical = 0.0;
152 PointCritical = CLHEP::Hep3Vector(XCritical,YCritical,ZCritical);
154 PathCritical = sqrt(
pow(XCritical-
pos.x(),2) +
pow(YCritical-
pos.y(),2) +
155 pow(ZCritical-
pos.z(),2));
156 if( (ZCritical-
pos.z())*cosThetaDir.z() < 0 ) {
157 ATH_MSG_WARNING(
"Backwards extrapolation?? pos.z(),cosThetaDir.z() = "
158 <<
pos.z()<<
"," << cosThetaDir.z() );
159 PathCritical = -1.0 * PathCritical;
164 PathCritical = -1.*(
pos.x()*cosThetaDir.x() +
pos.y()*cosThetaDir.y() +
165 pos.z()*cosThetaDir.z());
166 PointCritical = CLHEP::Hep3Vector(
pos.x() + PathCritical*cosThetaDir.x(),
167 pos.y() + PathCritical*cosThetaDir.y(),
168 pos.z() + PathCritical*cosThetaDir.z());
172 return StatusCode::FAILURE;
178 ATH_MSG_DEBUG(
" Extrapolated muon xyz position " << PointCritical.x()<<
" "
179 << PointCritical.y()<<
" " << PointCritical.z());
184 ComTime* theComTime =
new ComTime(TTCTime,TimeCritical,PointCritical,cosThetaDir);
194 }
else if(
m_mode ==
"CollisionMode" ) {
199 return StatusCode::SUCCESS;
202 return StatusCode::SUCCESS;
204 return StatusCode::SUCCESS;