10#include "Identifier/Identifier.h"
73 ATH_MSG_DEBUG(
"initialize() successful in " << name() <<
", retrieved: ..., locR_cut = " <<
m_locR_cut <<
" mm." );
74 return StatusCode::SUCCESS;
84 return StatusCode::SUCCESS;
92 StatusCode
sc = StatusCode::SUCCESS;
95 return StatusCode::FAILURE;
97 int runNumber = (int) eventInfo->runNumber();
102 int lumiBlock0 =eventInfo->lumiBlock();
105 if (not rdoContainer.
isValid()) {
107 return StatusCode::FAILURE;
110 if (not trkCollection.
isValid()) {
112 return StatusCode::FAILURE;
119 ATH_MSG_DEBUG (
"Couldn't retrieve VertexContainer with key: PrimaryVertices");
120 return StatusCode::SUCCESS;
123 int countVertices(0);
126 if ( vx-> nTrackParticles() >= 3) countVertices++;
129 if (countVertices < 1) {
130 ATH_MSG_INFO(
"no vertices with at least 3 tracks found" );
131 return StatusCode::SUCCESS;
135 int countRDOhitsInEvent(0);
138 if (not TRTCollection)
continue;
140 countRDOhitsInEvent++;
143 if (countRDOhitsInEvent>100000) {
144 ATH_MSG_INFO(
"N RDO hits in event greater than 100000: " << countRDOhitsInEvent <<
", exiting" );
148 if (trkCollection->size() > 10) {
149 ATH_MSG_INFO(
"N tracks greater than 10: " << trkCollection->size() <<
", exiting" );
158 std::vector<Identifier> holeIdentifiers;
159 std::vector<Identifier> holeIdentifiersWithHits;
163 const Trk::Perigee* perigee = (*trackIt)->perigeeParameters();
164 if ( not perigee ) {
ATH_MSG_ERROR(
"Trk::Perigee missing" );
continue; }
165 if ( std::abs(perigee->
pT())/CLHEP::GeV < 1. )
continue;
168 if ( not trackStates ) {
ATH_MSG_ERROR(
"Trk::TrackStateOnSurface empty" );
continue; }
170 int n_pixel_hits(0), n_sct_hits(0), n_trt_hits(0);
172 if ( *trackStatesIt ==
nullptr ) {
ATH_MSG_ERROR(
"*trackStatesIt == 0" );
continue; }
180 if (n_pixel_hits<2 || n_sct_hits < 6 || n_trt_hits<15)
continue;
188 if ( *trackStatesIt ==
nullptr ) {
ATH_MSG_ERROR(
"*trackStatesIt == 0" );
continue; }
193 if ( not driftCircleOnTrack )
continue;
201 double unbiased_locR = unbiased_track_parameters->parameters()[
Trk::locR];
202 if ( std::abs(unbiased_locR) >
m_locR_cut )
continue;
205 if ( driftCircle ==
nullptr ) {
ATH_MSG_ERROR(
"driftCircle == 0" );
continue; }
210 if (driftCircle->highLevel()) (*m_accumulateHits)[(
index[0]>0)?0:1][
index[2]][
index[5]][3]++;
217 if (
holes==
nullptr )
continue;
223 if (!track_parameters) {
ATH_MSG_WARNING(
"m_trt_hole_finder track_parameters missing" );
continue; }
226 if ( !(
m_TRTHelper->is_trt(
id)) ) {
ATH_MSG_ERROR(
"m_trt_hole_finder returned something that is not a TRT hole" );
continue; }
231 holeIdentifiers.push_back(
id );
242 if (TRTCollection==
nullptr)
continue;
247 if ((*trtIt)->highLevel()) (*m_accumulateHits)[(
index[0]>0)?0:1][
index[2]][
index[5]][2]++;
249 if (std::find(holeIdentifiers.begin(), holeIdentifiers.end(),
id) != holeIdentifiers.end())
250 holeIdentifiersWithHits.push_back(
id );
258 for (
unsigned int i=0; i<holeIdentifiers.size(); i++) {
266 if (std::find(holeIdentifiersWithHits.begin(), holeIdentifiersWithHits.end(),
id) != holeIdentifiersWithHits.end())
290 FILE *f = fopen(fileName,
"w");
292 ATH_MSG_ERROR(
"InDet::TRT_StrawStatus::reportResults: Cannot open " << fileName <<
" for write" );
293 return StatusCode::FAILURE;
295 fprintf(f,
"%d %d %d %d %d %d %d %d %d \n", 0, 0, 0, 0, 0, 0, 0, 0,
m_nEvents);
296 for (
size_t i=0; i<2; i++)
for (
size_t j=0; j<32; j++)
for (
size_t k=0; k<
nAllStraws; k++) {
297 int side = (i>0)?-1:1;
298 if (k>=1642) side *= 2;
299 fprintf(f,
"%d %zu %zu", side, j, k);
304 return StatusCode::SUCCESS;
308 ATH_MSG_INFO(
"InDet::TRT_StrawStatus::printDetailedInformation() " );
310 snprintf(fileName, 299,
"%s.%07d_printDetailedInformation.txt",
m_fileName.value().c_str(),
m_runNumber);
311 FILE *f = fopen(fileName,
"w");
312 for (std::vector<Identifier>::const_iterator it =
m_TRTHelper->straw_layer_begin(); it !=
m_TRTHelper->straw_layer_end(); ++it ) {
313 for (
int i=0; i<=
m_TRTHelper->straw_max( *it); i++) {
321 ATH_MSG_INFO(
"if the code crashes on the next line, there is a problem with m_TRTStrawStatusSummarySvc not being loaded " );
322 ATH_MSG_INFO(
"in that case, running with reco turned on normally solves the problem, know of no better solution at the moment" );
323 ATH_MSG_INFO(
"if you do not need the detailed print information, you can also just set printDetailedInformation to 0 to avoid this crash" );
329 for (
int j=0; j<6; j++) fprintf(f,
"%d ",
index[j]);
330 fprintf(f,
"%d %d %d %d %d\n", chip, HVpad, status, statusTemporary, statusPermanent);
340 int strawLayerNumber =
m_TRTHelper->straw_layer(
id);
344 const int numberOfStraws[74] = { 0, 15, 31, 47, 63, 79, 96, 113, 130, 147, 164, 182, 200, 218, 236, 254, 273, 292, 311, 329,
345 348, 368, 388, 408, 428, 448, 469, 490, 511, 532, 553, 575, 597, 619, 641, 663, 686, 709, 732, 755, 778, 802, 826, 849,
346 872, 896, 920, 944, 968, 993, 1018, 1043, 1068, 1093, 1119, 1145, 1171, 1197, 1223, 1250, 1277, 1304, 1331, 1358, 1386, 1414, 1442, 1470, 1498, 1527, 1556, 1585, 1614, 1642 };
349 if (layerNumber==1) strawLayerNumber+= 19;
350 else if (layerNumber==2) strawLayerNumber+= 43;
351 straw = ( numberOfStraws[strawLayerNumber+1] - strawNumber -1 );
353 int board = layerNumber;
354 if (board<6) { board *= 2;
if (strawLayerNumber>7) board++; }
356 straw = board * 192 + strawNumber * 8 + strawLayerNumber % 8 ;
360 index[1] = layerNumber;
362 index[3] = strawLayerNumber;
363 index[4] = strawNumber;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
An STL vector of pointers that by default owns its pointed-to elements.
Handle class for reading from StoreGate.
This is an Identifier helper class for the TRT subdetector.
const size_t nEndcapStraws
const size_t nBarrelStraws
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Specific class to represent the pixel measurements.
Specific class to represent the SCT measurements.
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
virtual const TRT_DriftCircle * prepRawData() const override final
returns the PrepRawData - is a TRT_DriftCircle in this scope
std::unique_ptr< ACCHITS_t > m_accumulateHits
SG::ReadHandleKey< xAOD::VertexContainer > m_vxContainerKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
StatusCode finalize()
standard Athena-Algorithm method
ToolHandle< Trk::ITrackHoleSearchTool > m_trt_hole_finder
StatusCode reportResults()
Gaudi::Property< int > m_printDetailedInformation
ServiceHandle< ITRT_DCS_ConditionsSvc > m_DCSSvc
void myStrawIndex(Identifier id, int *index)
function that returns straw index (in range 0-5481; 0-1641 for barrel, the rest for endcap) same conv...
TRT_StrawStatus(const std::string &name, ISvcLocator *pSvcLocator)
Standard Athena-Algorithm Constructor.
StatusCode initialize()
standard Athena-Algorithm method
ServiceHandle< ITRT_HWMappingSvc > m_mapSvc
const TRT_ID * m_TRTHelper
ToolHandle< ITRT_StrawStatusSummaryTool > m_TRTStrawStatusSummaryTool
Gaudi::Property< double > m_locR_cut
std::atomic< int > m_printStatusCount
void printDetailedInformation()
int m_nEvents
returns index of hardware units: board, chip, pad private fix for now, will call TRTStrawNeighbourSvc...
SG::ReadHandleKey< DataVector< Trk::Track > > m_tracksName
~TRT_StrawStatus()
Default Destructor.
PublicToolHandle< Trk::IUpdator > m_updator
Gaudi::Property< int > m_skipBusyEvents
Gaudi::Property< std::string > m_fileName
ServiceHandle< ITRT_StrawNeighbourSvc > m_TRTStrawNeighbourSvc
StatusCode execute()
standard Athena-Algorithm method
SG::ReadHandleKey< TRT_RDO_Container > m_rdoContainerKey
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
double pT() const
Access method for transverse momentum.
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
represents the track state (measurement, material, fit parameters and quality) at a surface.
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Hole
A hole on the track - this is defined in the following way.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
Vertex_v1 Vertex
Define the latest version of the vertex class.