From a1be9d32719f836e85bcc17f202de52c25090c76 Mon Sep 17 00:00:00 2001 From: Graeme Stewart <graemes.cern@gmail.com> Date: Thu, 2 Feb 2017 22:04:35 +0100 Subject: [PATCH] InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD deleted from master --- .../InDetPrepRawDataToxAOD/cmt/requirements | 44 - .../InDetPrepRawDataToxAOD/doc/TRT.txt | 37 - .../share/InDetDxAOD.py | 425 ------- .../InDetPrepRawDataToxAOD/share/SCTxAOD.py | 201 ---- .../src/PixelPrepDataToxAOD.cxx | 1066 ----------------- .../src/PixelPrepDataToxAOD.h | 104 -- .../src/SCT_PrepDataToxAOD.cxx | 594 --------- .../src/SCT_PrepDataToxAOD.h | 87 -- .../src/TRT_PrepDataToxAOD.cxx | 342 ------ .../src/TRT_PrepDataToxAOD.h | 66 - .../InDetPrepRawDataToxAOD_entries.cxx | 18 - .../InDetPrepRawDataToxAOD_load.cxx | 4 - 12 files changed, 2988 deletions(-) delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/cmt/requirements delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/doc/TRT.txt delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/SCTxAOD.py delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.cxx delete mode 100644 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.h delete mode 100755 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_entries.cxx delete mode 100755 InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_load.cxx diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/cmt/requirements b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/cmt/requirements deleted file mode 100644 index 0fbff6f8bd2..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/cmt/requirements +++ /dev/null @@ -1,44 +0,0 @@ -package InDetPrepRawDataToxAOD - -author Alex Alonso - -public -use AtlasPolicy AtlasPolicy-* -use GaudiInterface GaudiInterface-* External - -private - -use InDetPrepRawData InDetPrepRawData-* InnerDetector/InDetRecEvent - -use InDetIdentifier InDetIdentifier-* InnerDetector/InDetDetDescr - -use TRT_ConditionsServices TRT_ConditionsServices-* InnerDetector/InDetConditions -use TRT_DriftFunctionTool TRT_DriftFunctionTool-* InnerDetector/InDetRecTools - -use TrkTruthData TrkTruthData-* Tracking/TrkEvent - -use AthenaBaseComps AthenaBaseComps-* Control -use Identifier Identifier-* DetectorDescription - -use xAODTracking xAODTracking-* Event/xAOD - -use InDetRawData InDetRawData-* InnerDetector/InDetRawEvent - -use InDetSimData InDetSimData-* InnerDetector/InDetRawEvent -use InDetSimEvent InDetSimEvent-* InnerDetector -#use GeoPrimitives GeoPrimitives-* DetectorDescription -#use EventPrimitives EventPrimitives-* Event -use TrkSurfaces TrkSurfaces-* Tracking/TrkDetDescr - - -use InDetReadoutGeometry InDetReadoutGeometry-* InnerDetector/InDetDetDescr - -use AtlasHepMC AtlasHepMC-* External -use AtlasCLHEP AtlasCLHEP-* External -use AtlasROOT AtlasROOT-* External - -public -apply_pattern component_library -apply_pattern declare_joboptions files="*.py" -library InDetPrepRawDataToxAOD *.cxx components/*.cxx - diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/doc/TRT.txt b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/doc/TRT.txt deleted file mode 100644 index 4795afa2ef1..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/doc/TRT.txt +++ /dev/null @@ -1,37 +0,0 @@ -This tools is inspired on: -MuonSpectrometer/MuonCnv/MuonPrepRawDataToxAOD - -To run, you have to have flag: - -rec.doAOD=True -InDetFlags.doxAOD.set_Value_and_Lock() - -Then, in: InnerDetector/InDetExample/InDetRecExample/share/WriteInDetAOD.py -Add: -if InDetFlags.doxAOD(): - InDetAODList += ['xAOD::PrepRawDataContainer_v1#TRT_DriftCircles'] - InDetAODList += ['xAOD::PrepRawDataAuxContainer_v1#TRT_DriftCirclesAux.'] - -In: InnerDetector/InDetExample/InDetRecExample/share/InDetxAODCreator.py - -from TRT_ConditionsServices.TRT_ConditionsServicesConf import -TRT_StrawNeighbourSvc -TRTStrawNeighbourSvc=TRT_StrawNeighbourSvc() -ServiceMgr += TRTStrawNeighbourSvc - -from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_CalDbSvc -TRTCalibDBSvc=TRT_CalDbSvc() -ServiceMgr += TRTCalibDBSvc - -from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import -TRT_PrepDataToxAOD -xAOD_TRT_PrepDataToxAOD = TRT_PrepDataToxAOD( name = -"xAOD_TRT_PrepDataToxAOD") -xAOD_TRT_PrepDataToxAOD.OutputLevel=DEBUG -print "Add TRT xAOD PrepRawData:" -print xAOD_TRT_PrepDataToxAOD -topSequence += xAOD_TRT_PrepDataToxAOD - - - - diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py deleted file mode 100644 index dc0beb3c002..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py +++ /dev/null @@ -1,425 +0,0 @@ -################# -### Steering options -################# -## Load common flags -from AthenaCommon.JobProperties import jobproperties as athCommonFlags -from DerivationFrameworkInDet.InDetCommon import * - -# Select active sub-systems -dumpPixInfo=True -dumpSctInfo=True -dumpTrtInfo=False - -# Thin hits to store only the ones on-track -thinHitsOnTrack=True - -# Thin track collection, if necessary -# Example (p_T > 1.0 GeV && delta_z0 < 5 mm): -# InDetTrackParticles.pt > 1*GeV && abs(DFCommonInDetTrackZ0AtPV) < 5.0 -thinTrackSelection = "InDetTrackParticles.pt > 0.1*GeV" - -# Bytestream errors (for sub-systems who have implemented it) -dumpBytestreamErrors=True - -# Unassociated hits decorations -dumpUnassociatedHits=True - -# Add LArCollisionTime augmentation tool -dumpLArCollisionTime=True - -# Force to do not dump truth info if set to False -# (otherwise determined by autoconf below) -dumpTruthInfo=True - -# Saves partial trigger information in the output stream (none otherwise) -dumpTriggerInfo=True - -# Print settings for main tools -printIdTrkDxAODConf = True - -# Create split-tracks if running on cosmics -makeSplitTracks = True and athCommonFlags.Beam.beamType() == 'cosmics' - -## Autoconfiguration adjustements -isIdTrkDxAODSimulation = False -if (globalflags.DataSource == 'geant4'): - isIdTrkDxAODSimulation = True - -if ( 'dumpTruthInfo' in dir() ): - dumpTruthInfo = dumpTruthInfo and isIdTrkDxAODSimulation - -if InDetFlags.doSLHC(): - dumpTrtInfo=False - -## Other settings -# Prefix for decoration, if any -prefixName = "" - -## More fine-tuning available for each tool/alg below (default value shown) - -################# -### Setup tools -################# -if dumpTrtInfo: - from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_StrawNeighbourSvc - TRTStrawNeighbourSvc=TRT_StrawNeighbourSvc() - ServiceMgr += TRTStrawNeighbourSvc - - from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_CalDbSvc - TRTCalibDBSvc=TRT_CalDbSvc() - ServiceMgr += TRTCalibDBSvc - - from TRT_ToT_Tools.TRT_ToT_ToolsConf import TRT_ToT_dEdx - TRT_dEdx_Tool = TRT_ToT_dEdx(name="TRT_ToT_dEdx") - ToolSvc += TRT_dEdx_Tool - -#Setup charge->ToT back-conversion to restore ToT info as well -if dumpPixInfo: - from AthenaCommon.AlgSequence import AlgSequence - topSequence = AlgSequence() - from PixelCalibAlgs.PixelCalibAlgsConf import PixelChargeToTConversion - PixelChargeToTConversionSetter = PixelChargeToTConversion(name = "PixelChargeToTConversionSetter") - topSequence += PixelChargeToTConversionSetter - if (printIdTrkDxAODConf): - print PixelChargeToTConversionSetter - print PixelChargeToTConversionSetter.properties() - -#Setup SCT extension efficiency algorithm if running pixel tracklets -#if InDetFlags.doTrackSegmentsPixel(): -# include ("SCTExtension/SCTExtensionAlg.py") - -#Setup split-tracks reconstruction in cosmic-mode and produce xAOD::TrackParticles -if makeSplitTracks: - # Set input/output container names - # Setup algorithm to create split tracks - from InDetTrackSplitterTool.InDetTrackSplitterToolConf import InDet__InDetTrackSplitterTool - splittertoolcomb= InDet__InDetTrackSplitterTool(name="SplitterTool", - TrackFitter=ToolSvc.InDetTrackFitter, - OutputUpperTracksName = "TracksUpperSplit", - OutputLowerTracksName = "TracksLowerSplit") - ToolSvc += splittertoolcomb - - from InDetTrackValidation.InDetTrackValidationConf import InDet__InDetSplittedTracksCreator - splittercomb=InDet__InDetSplittedTracksCreator(name='CombinedTrackSplitter', - TrackSplitterTool = splittertoolcomb, - TrackCollection = "Tracks", - OutputTrackCollection = "Tracks_split") - topSequence+=splittercomb - if (printIdTrkDxAODConf): - print splittercomb - print splittercomb.properties() - - # Create xAOD::TrackParticles out of them - from TrkParticleCreator.TrkParticleCreatorConf import Trk__TrackParticleCreatorTool - InDetxAODSplitParticleCreatorTool = Trk__TrackParticleCreatorTool(name = "InDetSplitxAODParticleCreatorTool", - Extrapolator = InDetExtrapolator, - TrackSummaryTool = InDetTrackSummaryToolSharedHits, - ForceTrackSummaryUpdate = False, - KeepParameters = True) - ToolSvc += InDetxAODSplitParticleCreatorTool - # The following adds truth information, but needs further testing - #include ("InDetRecExample/ConfiguredInDetTrackTruth.py") - #if isIdTrkDxAODSimulation: - # InDetSplitTracksTruth = ConfiguredInDetTrackTruth("Tracks_split",'SplitTrackDetailedTruth','SplitTrackTruth') - - xAODSplitTrackParticleCnvAlg = xAODMaker__TrackParticleCnvAlg('InDetSplitTrackParticles') - xAODSplitTrackParticleCnvAlg.xAODContainerName = 'InDetSplitTrackParticles' - xAODSplitTrackParticleCnvAlg.xAODTrackParticlesFromTracksContainerName = 'InDetSplitTrackParticles' - xAODSplitTrackParticleCnvAlg.TrackParticleCreator = InDetxAODSplitParticleCreatorTool - xAODSplitTrackParticleCnvAlg.TrackContainerName = 'Tracks_split' - xAODSplitTrackParticleCnvAlg.ConvertTrackParticles = False - xAODSplitTrackParticleCnvAlg.ConvertTracks = True - xAODSplitTrackParticleCnvAlg.AddTruthLink = False #isIdTrkDxAODSimulation - if (isIdTrkDxAODSimulation): - xAODSplitTrackParticleCnvAlg.TrackTruthContainerName = 'SplitTrackTruth' - xAODSplitTrackParticleCnvAlg.PrintIDSummaryInfo = True - topSequence += xAODSplitTrackParticleCnvAlg - - -################# -### Setup decorators tools -################# - -if dumpTrtInfo: - from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import TRT_PrepDataToxAOD - xAOD_TRT_PrepDataToxAOD = TRT_PrepDataToxAOD( name = "xAOD_TRT_PrepDataToxAOD") - ## Content steering Properties (default value shown as comment) - xAOD_TRT_PrepDataToxAOD.OutputLevel=INFO - xAOD_TRT_PrepDataToxAOD.UseTruthInfo = dumpTruthInfo - #xAOD_TRT_PrepDataToxAOD.WriteSDOs = True - - topSequence += xAOD_TRT_PrepDataToxAOD - if (printIdTrkDxAODConf): - print xAOD_TRT_PrepDataToxAOD - print xAOD_TRT_PrepDataToxAOD.properties() - -if dumpSctInfo: - from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import SCT_PrepDataToxAOD - xAOD_SCT_PrepDataToxAOD = SCT_PrepDataToxAOD( name = "xAOD_SCT_PrepDataToxAOD") - ## Content steering Properties (default value shown as comment) - xAOD_SCT_PrepDataToxAOD.OutputLevel=INFO - xAOD_SCT_PrepDataToxAOD.UseTruthInfo = dumpTruthInfo - xAOD_SCT_PrepDataToxAOD.WriteRDOinformation = False - #xAOD_SCT_PrepDataToxAOD.WriteSDOs = True - #xAOD_SCT_PrepDataToxAOD.WriteSiHits = True # if available - - topSequence += xAOD_SCT_PrepDataToxAOD - if (printIdTrkDxAODConf): - print xAOD_SCT_PrepDataToxAOD - print xAOD_SCT_PrepDataToxAOD.properties() - -if dumpPixInfo: - from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import PixelPrepDataToxAOD - xAOD_PixelPrepDataToxAOD = PixelPrepDataToxAOD( name = "xAOD_PixelPrepDataToxAOD") - ## Content steering Properties (default value shown as comment) - xAOD_PixelPrepDataToxAOD.OutputLevel = INFO - xAOD_PixelPrepDataToxAOD.UseTruthInfo = dumpTruthInfo - xAOD_PixelPrepDataToxAOD.WriteRDOinformation = False - xAOD_PixelPrepDataToxAOD.WriteNNinformation = False - #xAOD_PixelPrepDataToxAOD.WriteSDOs = True - #xAOD_PixelPrepDataToxAOD.WriteSiHits = True # if available - if InDetFlags.doSLHC(): - xAOD_PixelPrepDataToxAOD.WriteNNinformation=False - - topSequence += xAOD_PixelPrepDataToxAOD - if (printIdTrkDxAODConf): - print xAOD_PixelPrepDataToxAOD - print xAOD_PixelPrepDataToxAOD.properties() - - -################# -### Setup Augmentation tools -################# -augmentationTools=[] - -from AthenaCommon import CfgMgr - -# Set up stream auditor -from AthenaCommon.AppMgr import ServiceMgr as svcMgr -if not hasattr(svcMgr, 'DecisionSvc'): - svcMgr += CfgMgr.DecisionSvc() -svcMgr.DecisionSvc.CalcStats = True - - -# Add the TSOS augmentation tool to the derivation framework -from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__TrackStateOnSurfaceDecorator -DFTSOS = DerivationFramework__TrackStateOnSurfaceDecorator(name = "DFTrackStateOnSurfaceDecorator", - ContainerName = "InDetTrackParticles", - DecorationPrefix = prefixName, - StoreTRT = dumpTrtInfo, - StoreSCT = dumpSctInfo, - StorePixel = dumpPixInfo, - IsSimulation = isIdTrkDxAODSimulation, - OutputLevel = INFO) -if dumpTrtInfo: - #Add tool to calculate TRT-based dEdx - DFTSOS.TRT_ToT_dEdx = TRT_dEdx_Tool - -ToolSvc += DFTSOS -augmentationTools+=[DFTSOS] -if (printIdTrkDxAODConf): - print DFTSOS - print DFTSOS.properties() - -# If requested, decorate also split tracks (for cosmics) -if makeSplitTracks: - DFTSOS_SplitTracks = DerivationFramework__TrackStateOnSurfaceDecorator(name = "DFSplitTracksTrackStateOnSurfaceDecorator", - ContainerName = "InDetSplitTrackParticles", - DecorationPrefix = prefixName, - StoreTRT = dumpTrtInfo, - TrtMsosName = 'TRT_SplitTracks_MSOSs', - StoreSCT = dumpSctInfo, - SctMsosName = 'SCT_SplitTracks_MSOSs', - StorePixel = dumpPixInfo, - PixelMsosName = 'Pixel_SplitTracks_MSOSs', - IsSimulation = isIdTrkDxAODSimulation, - OutputLevel = INFO) - ToolSvc += DFTSOS_SplitTracks - augmentationTools += [DFTSOS_SplitTracks] - -# Add BS error augmentation tool -if dumpBytestreamErrors: - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__EventInfoBSErrDecorator - DFEI = DerivationFramework__EventInfoBSErrDecorator(name = "DFEventInfoBSErrDecorator", - ContainerName = "EventInfo", - DecorationPrefix = prefixName, - OutputLevel =INFO) - ToolSvc += DFEI - augmentationTools+=[DFEI] - if (printIdTrkDxAODConf): - print DFEI - print DFEI.properties() - -# Add Unassociated hits augmentation tool -if dumpUnassociatedHits: - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__UnassociatedHitsGetterTool - unassociatedHitsGetterTool = DerivationFramework__UnassociatedHitsGetterTool (name = 'unassociatedHitsGetter', - TrackCollection = "Tracks", - PixelClusters = "PixelClusters", - SCTClusterContainer = "SCT_Clusters", - TRTDriftCircleContainer = "TRT_DriftCircles") - ToolSvc += unassociatedHitsGetterTool - if (printIdTrkDxAODConf): - print unassociatedHitsGetterTool - print unassociatedHitsGetterTool.properties() - - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__UnassociatedHitsDecorator - unassociatedHitsDecorator = DerivationFramework__UnassociatedHitsDecorator (name ='unassociatedHitsDecorator', - UnassociatedHitsGetter = unassociatedHitsGetterTool, - ContainerName = "EventInfo", - DecorationPrefix = prefixName, - OutputLevel =INFO) - ToolSvc += unassociatedHitsDecorator - augmentationTools+=[unassociatedHitsDecorator] - if (printIdTrkDxAODConf): - print unassociatedHitsDecorator - print unassociatedHitsDecorator.properties() - -# Add LArCollisionTime augmentation tool -if dumpLArCollisionTime: - from LArCellRec.LArCollisionTimeGetter import LArCollisionTimeGetter - from RecExConfig.ObjKeyStore import cfgKeyStore - # We can only do this if we have the cell container. - if cfgKeyStore.isInInput ('CaloCellContainer', 'AllCalo'): - LArCollisionTimeGetter (topSequence) - - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__LArCollisionTimeDecorator - lArCollisionTimeDecorator = DerivationFramework__LArCollisionTimeDecorator (name ='lArCollisionTimeDecorator', - ContainerName = "EventInfo", - DecorationPrefix = prefixName+"LArCollTime_", - OutputLevel =INFO) - ToolSvc += lArCollisionTimeDecorator - augmentationTools+=[lArCollisionTimeDecorator] - if (printIdTrkDxAODConf): - print lArCollisionTimeDecorator - print lArCollisionTimeDecorator.properties() - - -#==================================================================== -# Skimming Tools -#==================================================================== -skimmingTools = [] - -#minimumbiasTrig = '(L1_RD0_FILLED)' -# -#if not IsMonteCarlo: -# from DerivationFrameworkTools.DerivationFrameworkToolsConf import DerivationFramework__xAODStringSkimmingTool -# TrigSkimmingTool = DerivationFramework__xAODStringSkimmingTool(name = "TrigSkimmingTool", expression = minimumbiasTrig) -# ToolSvc += TrigSkimmingTool -# skimmingTools.append(TrigSkimmingTool) -# print "InDetDxAOD.py TrigSkimmingTool: ", TrigSkimmingTool - -#==================================================================== -# Thinning Tools -#==================================================================== -thinningTools = [] - -# TrackParticles directly -from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__TrackParticleThinning -IDTRKThinningTool = DerivationFramework__TrackParticleThinning(name = "IDTRKThinningTool", - ThinningService = "IDTRKThinningSvc", - SelectionString = thinTrackSelection, - InDetTrackParticlesKey = "InDetTrackParticles", - ThinHitsOnTrack = thinHitsOnTrack) -ToolSvc += IDTRKThinningTool -thinningTools.append(IDTRKThinningTool) - -#==================================================================== -# Create the derivation Kernel and setup output stream -#==================================================================== -# Add the derivation job to the top AthAlgSeqeuence -# DerivationJob is COMMON TO ALL DERIVATIONS -DerivationFrameworkJob = CfgMgr.AthSequencer("MySeq2") -from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation -DerivationFrameworkJob += CfgMgr.DerivationFramework__DerivationKernel("DFTSOS_KERN", - AugmentationTools = augmentationTools, - SkimmingTools = skimmingTools, - ThinningTools = thinningTools, - OutputLevel = INFO) - -topSequence += DerivationFrameworkJob -if (printIdTrkDxAODConf): - print DerivationFrameworkJob - print DerivationFrameworkJob.properties() - -################# -### Steer output file content -################# -## Add service for metadata -ToolSvc += CfgMgr.xAODMaker__TriggerMenuMetaDataTool( -"TriggerMenuMetaDataTool" ) -svcMgr.MetaDataSvc.MetaDataTools += [ ToolSvc.TriggerMenuMetaDataTool ] - - -## Steer output file -from OutputStreamAthenaPool.MultipleStreamManager import MSMgr -from D2PDMaker.D2PDHelpers import buildFileName -from PrimaryDPDMaker.PrimaryDPDFlags import primDPD -streamName = primDPD.WriteDAOD_IDTRKVALIDStream.StreamName -fileName = buildFileName( primDPD.WriteDAOD_IDTRKVALIDStream ) -IDTRKVALIDStream = MSMgr.NewPoolRootStream( streamName, fileName ) -IDTRKVALIDStream.AcceptAlgs(["DFTSOS_KERN"]) -from AthenaServices.Configurables import ThinningSvc, createThinningSvc -augStream = MSMgr.GetStream( streamName ) -evtStream = augStream.GetEventStream() -svcMgr += createThinningSvc( svcName="IDTRKThinningSvc", outStreams=[evtStream] ) - -excludedAuxData = "-caloExtension.-cellAssociation.-clusterAssociation.-trackParameterCovarianceMatrices.-parameterX.-parameterY.-parameterZ.-parameterPX.-parameterPY.-parameterPZ.-parameterPosition" - -# Add generic event information -IDTRKVALIDStream.AddItem("xAOD::EventInfo#*") -IDTRKVALIDStream.AddItem("xAOD::EventAuxInfo#*") - -# Add track particles collection and traclets (if available) -IDTRKVALIDStream.AddItem("xAOD::TrackParticleContainer#InDetTrackParticles") -IDTRKVALIDStream.AddItem("xAOD::TrackParticleAuxContainer#InDetTrackParticlesAux."+excludedAuxData) -if InDetFlags.doTrackSegmentsPixel(): - IDTRKVALIDStream.AddItem("xAOD::TrackParticleContainer#InDetPixelTrackParticles") - IDTRKVALIDStream.AddItem("xAOD::TrackParticleAuxContainer#InDetPixelTrackParticlesAux."+excludedAuxData) -# Add split tracks, if requested -if makeSplitTracks: - IDTRKVALIDStream.AddItem("xAOD::TrackParticleContainer#InDetSplitTrackParticles") - IDTRKVALIDStream.AddItem("xAOD::TrackParticleAuxContainer#InDetSplitTrackParticlesAux."+excludedAuxData) - -# Add vertices -IDTRKVALIDStream.AddItem("xAOD::VertexContainer#PrimaryVertices") -IDTRKVALIDStream.AddItem("xAOD::VertexAuxContainer#PrimaryVerticesAux.-vxTrackAtVertex") - -# Add links and measurements -IDTRKVALIDStream.AddItem("xAOD::TrackStateValidationContainer#*") -IDTRKVALIDStream.AddItem("xAOD::TrackStateValidationAuxContainer#*") -IDTRKVALIDStream.AddItem("xAOD::TrackMeasurementValidationContainer#*") -IDTRKVALIDStream.AddItem("xAOD::TrackMeasurementValidationAuxContainer#*") - -# Add info about electrons and muons (are small containers) -IDTRKVALIDStream.AddItem("xAOD::MuonContainer#Muons") -IDTRKVALIDStream.AddItem("xAOD::MuonAuxContainer#MuonsAux.") -IDTRKVALIDStream.AddItem("xAOD::ElectronContainer#Electrons") -IDTRKVALIDStream.AddItem("xAOD::ElectronAuxContainer#ElectronsAux.") -IDTRKVALIDStream.AddItem("xAOD::TrackParticleContainer#GSFTrackParticles") -IDTRKVALIDStream.AddItem("xAOD::TrackParticleAuxContainer#GSFTrackParticlesAux."+excludedAuxData) - -# Add truth-related information -if dumpTruthInfo: - IDTRKVALIDStream.AddItem("xAOD::TruthParticleContainer#*") - IDTRKVALIDStream.AddItem("xAOD::TruthParticleAuxContainer#TruthParticlesAux.-caloExtension") - IDTRKVALIDStream.AddItem("xAOD::TruthVertexContainer#*") - IDTRKVALIDStream.AddItem("xAOD::TruthVertexAuxContainer#*") - IDTRKVALIDStream.AddItem("xAOD::TruthEventContainer#*") - IDTRKVALIDStream.AddItem("xAOD::TruthEventAuxContainer#*") - -# Add trigger information (including metadata) -if dumpTriggerInfo: - IDTRKVALIDStream.AddMetaDataItem("xAOD::TriggerMenuContainer#TriggerMenu") - IDTRKVALIDStream.AddMetaDataItem("xAOD::TriggerMenuAuxContainer#TriggerMenuAux.") - IDTRKVALIDStream.AddItem("TileCellContainer#MBTSContainer") - IDTRKVALIDStream.AddItem("xAOD::TrigDecision#xTrigDecision") - IDTRKVALIDStream.AddItem("BCM_RDO_Container#BCM_RDOs") - IDTRKVALIDStream.AddItem("xAOD::TrigNavigation#TrigNavigation") - IDTRKVALIDStream.AddItem("xAOD::TrigConfKeys#TrigConfKeys") - IDTRKVALIDStream.AddItem("HLT::HLTResult#HLTResult_HLT") - IDTRKVALIDStream.AddItem("xAOD::TrigDecisionAuxInfo#xTrigDecisionAux.") - IDTRKVALIDStream.AddItem("xAOD::TrigNavigationAuxInfo#TrigNavigationAux.") - -if (printIdTrkDxAODConf): - print IDTRKVALIDStream diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/SCTxAOD.py b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/SCTxAOD.py deleted file mode 100644 index 061bc41457e..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/SCTxAOD.py +++ /dev/null @@ -1,201 +0,0 @@ -################# -### Steering options -################# -## Load common flags -from AthenaCommon.JobProperties import jobproperties as athCommonFlags - -# Bytestream errors (for sub-systems who have implemented it) -dumpBytestreamErrors=True - -# Unassociated hits decorations -dumpUnassociatedHits=True - -# Force to do not dump truth info if set to False -# (otherwise determined by autoconf below) -dumpTruthInfo=True - -# Saves partial trigger information in the output stream (none otherwise) -dumpTriggerInfo=True - -# Print settings for main tools -printSctDxAODConf = True - -## Autoconfiguration adjustements -isSctDxAODSimulation = False -if (globalflags.DataSource == 'geant4'): - isSctDxAODSimulation = True - -if ( 'dumpTruthInfo' in dir() ): - dumpTruthInfo = dumpTruthInfo and isSctDxAODSimulation - -## Other settings -# Prefix for decoration, if any -prefixName = "" - -## More fine-tuning available for each tool/alg below (default value shown) - - -################# -### Setup decorators tools -################# - - - -from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import SCT_PrepDataToxAOD -xAOD_SCT_PrepDataToxAOD = SCT_PrepDataToxAOD( name = "xAOD_SCT_PrepDataToxAOD") - ## Content steering Properties (default value shown as comment) -xAOD_SCT_PrepDataToxAOD.OutputLevel=INFO -xAOD_SCT_PrepDataToxAOD.UseTruthInfo = dumpTruthInfo -xAOD_SCT_PrepDataToxAOD.WriteRDOinformation = True - #xAOD_SCT_PrepDataToxAOD.WriteSDOs = True - #xAOD_SCT_PrepDataToxAOD.WriteSiHits = True # if available - -topSequence += xAOD_SCT_PrepDataToxAOD -if (printSctDxAODConf): - print xAOD_SCT_PrepDataToxAOD - print xAOD_SCT_PrepDataToxAOD.properties() - - - -################# -### Setup derivation framework -################# -from AthenaCommon import CfgMgr - -# DerivationJob is COMMON TO ALL DERIVATIONS -DerivationFrameworkJob = CfgMgr.AthSequencer("MySeq2") - -# Set up stream auditor -from AthenaCommon.AppMgr import ServiceMgr as svcMgr -if not hasattr(svcMgr, 'DecisionSvc'): - svcMgr += CfgMgr.DecisionSvc() -svcMgr.DecisionSvc.CalcStats = True - - -# Add the TSOS augmentation tool to the derivation framework -augmentationTools=[] - -from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__TrackStateOnSurfaceDecorator -DFTSOS = DerivationFramework__TrackStateOnSurfaceDecorator(name = "DFTrackStateOnSurfaceDecorator", - ContainerName = "InDetTrackParticles", - DecorationPrefix = prefixName, - StoreTRT = False, - StoreSCT = True, - StorePixel = False, - IsSimulation = isSctDxAODSimulation, - OutputLevel = INFO) -ToolSvc += DFTSOS -augmentationTools+=[DFTSOS] - - -# Add BS error augmentation tool -if dumpBytestreamErrors: - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__EventInfoBSErrDecorator - DFEI = DerivationFramework__EventInfoBSErrDecorator(name = "DFEventInfoBSErrDecorator", - ContainerName = "EventInfo", - DecorationPrefix = prefixName, - OutputLevel =INFO) - ToolSvc += DFEI - augmentationTools+=[DFEI] - if (printSctDxAODConf): - print DFEI - print DFEI.properties() - -# Add Unassociated hits augmentation tool -if dumpUnassociatedHits: - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__UnassociatedHitsGetterTool - unassociatedHitsGetterTool = DerivationFramework__UnassociatedHitsGetterTool (name = 'unassociatedHitsGetter', - TrackCollection = "Tracks", - - PixelClusters = "PixelClusters", - SCTClusterContainer = "SCT_Clusters", - TRTDriftCircleContainer = "TRT_DriftCircles") - ToolSvc += unassociatedHitsGetterTool - if (printSctDxAODConf): - print unassociatedHitsGetterTool - print unassociatedHitsGetterTool.properties() - - from DerivationFrameworkInDet.DerivationFrameworkInDetConf import DerivationFramework__UnassociatedHitsDecorator - unassociatedHitsDecorator = DerivationFramework__UnassociatedHitsDecorator (name ='unassociatedHitsDecorator', - UnassociatedHitsGetter = unassociatedHitsGetterTool, - ContainerName = "EventInfo", - DecorationPrefix = prefixName, - OutputLevel =INFO) - ToolSvc += unassociatedHitsDecorator - augmentationTools+=[unassociatedHitsDecorator] - if (printSctDxAODConf): - print unassociatedHitsDecorator - print unassociatedHitsDecorator.properties() - - -# Add the derivation job to the top AthAlgSeqeuence -from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__CommonAugmentation -DerivationFrameworkJob += CfgMgr.DerivationFramework__CommonAugmentation("DFTSOS_KERN", - AugmentationTools = augmentationTools, - OutputLevel =INFO) - -topSequence += DerivationFrameworkJob -if (printSctDxAODConf): - print DerivationFrameworkJob - print DerivationFrameworkJob.properties() - -################# -### Steer output file content -################# - -from OutputStreamAthenaPool.MultipleStreamManager import MSMgr -from D2PDMaker.D2PDHelpers import buildFileName -from PrimaryDPDMaker.PrimaryDPDFlags import primDPD -streamName = primDPD.WriteDAOD_SCTVALIDStream.StreamName -fileName = buildFileName( primDPD.WriteDAOD_SCTVALIDStream ) -SCTVALIDStream = MSMgr.NewPoolRootStream( streamName, fileName ) -excludedAuxData = "-caloExtension.-cellAssociation.-clusterAssociation.-trackParameterCovarianceMatrices.-parameterX.-parameterY.-parameterZ.-parameterPX.-parameterPY.-parameterPZ.-parameterPosition" - -# Add generic event information -SCTVALIDStream.AddItem("xAOD::EventInfo#*") -SCTVALIDStream.AddItem("xAOD::EventAuxInfo#*") - -# Add track particles collection and traclets (if available) -SCTVALIDStream.AddItem("xAOD::TrackParticleContainer#InDetTrackParticles") -SCTVALIDStream.AddItem("xAOD::TrackParticleAuxContainer#InDetTrackParticlesAux."+excludedAuxData) - -# Add vertices -SCTVALIDStream.AddItem("xAOD::VertexContainer#PrimaryVertices") -SCTVALIDStream.AddItem("xAOD::VertexAuxContainer#PrimaryVerticesAux.-vxTrackAtVertex") - -# Add links and measurements -SCTVALIDStream.AddItem("xAOD::TrackStateValidationContainer#*") -SCTVALIDStream.AddItem("xAOD::TrackStateValidationAuxContainer#*") -SCTVALIDStream.AddItem("xAOD::TrackMeasurementValidationContainer#*") -SCTVALIDStream.AddItem("xAOD::TrackMeasurementValidationAuxContainer#*") - -# Add info about electrons and muons (are small containers) -SCTVALIDStream.AddItem("xAOD::MuonContainer#Muons") -SCTVALIDStream.AddItem("xAOD::MuonAuxContainer#MuonsAux.") -SCTVALIDStream.AddItem("xAOD::ElectronContainer#Electrons") -SCTVALIDStream.AddItem("xAOD::ElectronAuxContainer#ElectronsAux.") -SCTVALIDStream.AddItem("xAOD::TrackParticleContainer#GSFTrackParticles") -SCTVALIDStream.AddItem("xAOD::TrackParticleAuxContainer#GSFTrackParticlesAux."+excludedAuxData) - -# Add truth-related information -if dumpTruthInfo: - SCTVALIDStream.AddItem("xAOD::TruthParticleContainer#*") - SCTVALIDStream.AddItem("xAOD::TruthParticleAuxContainer#TruthParticlesAux.-caloExtension") - SCTVALIDStream.AddItem("xAOD::TruthVertexContainer#*") - SCTVALIDStream.AddItem("xAOD::TruthVertexAuxContainer#*") - SCTVALIDStream.AddItem("xAOD::TruthEventContainer#*") - SCTVALIDStream.AddItem("xAOD::TruthEventAuxContainer#*") - -# Add trigger information -if dumpTriggerInfo: - SCTVALIDStream.AddItem("TileCellContainer#MBTSContainer") - SCTVALIDStream.AddItem("xAOD::TrigDecision#xTrigDecision") - SCTVALIDStream.AddItem("BCM_RDO_Container#BCM_RDOs") - SCTVALIDStream.AddItem("xAOD::TrigNavigation#TrigNavigation") - SCTVALIDStream.AddItem("xAOD::TrigConfKeys#TrigConfKeys") - SCTVALIDStream.AddItem("HLT::HLTResult#HLTResult_HLT") - SCTVALIDStream.AddItem("xAOD::TrigDecisionAuxInfo#xTrigDecisionAux.") - SCTVALIDStream.AddItem("xAOD::TrigNavigationAuxInfo#TrigNavigationAux.") - -if (printSctDxAODConf): - print SCTVALIDStream diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx deleted file mode 100644 index 2824e53949a..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.cxx +++ /dev/null @@ -1,1066 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// PixelPrepDataToxAOD.cxx -// Implementation file for class PixelPrepDataToxAOD -/////////////////////////////////////////////////////////////////// - -#include "PixelPrepDataToxAOD.h" - -#include "InDetPrepRawData/PixelClusterContainer.h" - -#include "xAODTracking/TrackMeasurementValidation.h" -#include "xAODTracking/TrackMeasurementValidationContainer.h" -#include "xAODTracking/TrackMeasurementValidationAuxContainer.h" - -#include "Identifier/Identifier.h" -#include "InDetIdentifier/PixelID.h" -#include "InDetReadoutGeometry/PixelModuleDesign.h" - - -#include "TrkTruthData/PRD_MultiTruthCollection.h" -#include "HepMC/GenParticle.h" -#include "HepMC/GenVertex.h" -#include "InDetSimEvent/SiHit.h" -#include "InDetSimData/InDetSimDataCollection.h" - - -#include "TMath.h" -#include "CLHEP/Geometry/Point3D.h" - - -///////////////////////////////////////////////////////////////////// -// -// Constructor with parameters: -// -///////////////////////////////////////////////////////////////////// -PixelPrepDataToxAOD::PixelPrepDataToxAOD(const std::string &name, ISvcLocator *pSvcLocator) : - AthAlgorithm(name,pSvcLocator), - m_PixelHelper(0), - m_firstEventWarnings(true) -{ - // --- Steering and configuration flags - - declareProperty("UseTruthInfo", m_useTruthInfo=false); - declareProperty("WriteSDOs", m_writeSDOs = true); - declareProperty("WriteSiHits", m_writeSiHits = true); - declareProperty("WriteNNinformation", m_writeNNinformation = true); - declareProperty("WriteRDOinformation", m_writeRDOinformation = true); - - // --- Configuration keys - declareProperty("SiClusterContainer", m_clustercontainer = "PixelClusters"); - declareProperty("MC_SDOs", m_SDOcontainer = "PixelSDO_Map"); - declareProperty("MC_Hits", m_sihitContainer = "PixelHits"); - declareProperty("PRD_MultiTruth", m_multiTruth = "PRD_MultiTruthPixel"); - - // --- Services and Tools - -} - -///////////////////////////////////////////////////////////////////// -// -// Initialize method: -// -///////////////////////////////////////////////////////////////////// -StatusCode PixelPrepDataToxAOD::initialize() -{ - ATH_CHECK( detStore()->retrieve(m_PixelHelper, "PixelID") ); - - //make sure we don't write what we don't have - if (not m_useTruthInfo) { - m_writeSDOs = false; - m_writeSiHits = false; - } - - return StatusCode::SUCCESS; -} - -///////////////////////////////////////////////////////////////////// -// -// Execute method: -// -///////////////////////////////////////////////////////////////////// -StatusCode PixelPrepDataToxAOD::execute() -{ - //Mandatory. Require if the algorithm is scheduled. - const InDet::PixelClusterContainer* PixelClusterContainer = 0; - if( evtStore()->retrieve(PixelClusterContainer,m_clustercontainer).isFailure() ) { - ATH_MSG_ERROR("Cannot retrieve Pixel PrepDataContainer " << m_clustercontainer); - return StatusCode::FAILURE; - } - - // Optional. Normally only available in Hits files -- samples need to digitised and Hits need to be copied for this to work - const SiHitCollection* sihitCollection = 0; - if((m_writeNNinformation||m_writeSiHits)&&m_useTruthInfo) { - if ( evtStore()->contains<SiHitCollection>(m_sihitContainer) ) { - ATH_CHECK(evtStore()->retrieve(sihitCollection, m_sihitContainer)); - } else { - if (m_firstEventWarnings) { - ATH_MSG_WARNING("Si Hit cotainer no found (" << m_sihitContainer << "). Skipping it although requested."); - sihitCollection = 0; - } - } - } - - // Optional. On RDO - const InDetSimDataCollection* sdoCollection = 0; - if(m_writeSDOs) { - if ( evtStore()->contains<InDetSimDataCollection>(m_SDOcontainer) ) { - ATH_CHECK(evtStore()->retrieve(sdoCollection, m_SDOcontainer)); - } else { - if (m_firstEventWarnings) { - ATH_MSG_WARNING("SDO Collection not found (" << m_SDOcontainer << "). Skipping it although requested."); - sdoCollection = 0; - } - } - } - - // Optional. On ESD and AOD - const PRD_MultiTruthCollection* prdmtColl = 0; - if (m_useTruthInfo) { - if ( evtStore()->contains<PRD_MultiTruthCollection>(m_multiTruth) ) { - ATH_CHECK(evtStore()->retrieve(prdmtColl, m_multiTruth)); - } else { - ATH_MSG_WARNING("PRD Truth collection missing (" << m_multiTruth << "). Skipping it although requested."); - prdmtColl = 0; - } - } - - - // Create the xAOD container and its auxiliary store: - xAOD::TrackMeasurementValidationContainer* xaod = new xAOD::TrackMeasurementValidationContainer(); - CHECK( evtStore()->record( xaod, m_clustercontainer ) ); - xAOD::TrackMeasurementValidationAuxContainer* aux = new xAOD::TrackMeasurementValidationAuxContainer(); - CHECK( evtStore()->record( aux, m_clustercontainer + "Aux." ) ); - xaod->setStore( aux ); - - std::vector<unsigned int>* offsets = new std::vector<unsigned int>( m_PixelHelper->wafer_hash_max(), 0 ); - CHECK( evtStore()->record( offsets, m_clustercontainer + "Offsets" ) ); - - - // Loop over the container - unsigned int counter(0); - - for( const auto& clusterCollection : *PixelClusterContainer){ - - //Fill Offset container - (*offsets)[clusterCollection->identifyHash()] = counter; - - // skip empty collections - if( clusterCollection->empty() ) continue; - - // loop over collection and convert to xAOD - for( auto& prd : *clusterCollection ){ - ++counter; - - Identifier clusterId = prd->identify(); - if ( !clusterId.is_valid() ) { - ATH_MSG_WARNING("Pixel cluster identifier is not valid"); - } - - // create and add xAOD object - xAOD::TrackMeasurementValidation* xprd = new xAOD::TrackMeasurementValidation(); - xaod->push_back(xprd); - - //Set Identifier - xprd->setIdentifier( clusterId.get_compact() ); - - //Set Global Position - Amg::Vector3D gpos = prd->globalPosition(); - xprd->setGlobalPosition(gpos.x(),gpos.y(),gpos.z()); - - //Set Local Position - const Amg::Vector2D& locpos = prd->localPosition(); - - // Set local error matrix - xprd->setLocalPosition( locpos.x(), locpos.y() ); - - const Amg::MatrixX& localCov = prd->localCovariance(); - //std::cout << localCov << std::endl; - if(localCov.size() == 1){ - //std::cout << "Size == 1" << std::endl; - xprd->setLocalPositionError( localCov(0,0), 0., 0. ); - } else if(localCov.size() == 4){ - //std::cout << "Size == 2" << std::endl; - xprd->setLocalPositionError( localCov(0,0), localCov(1,1), localCov(0,1) ); - } else { - //std::cout << "Size == "<< localCov.size() << std::endl; - xprd->setLocalPositionError(0.,0.,0.); - } - - // Set vector of hit identifiers - std::vector< uint64_t > rdoIdentifierList; - for( const auto &hitIdentifier : prd->rdoList() ){ - rdoIdentifierList.push_back( hitIdentifier.get_compact() ); - //May want to addinformation about the individual hits here - } - xprd->setRdoIdentifierList(rdoIdentifierList); - - //Add pixel cluster properties - xprd->auxdata<int>("bec") = m_PixelHelper->barrel_ec(clusterId) ; - xprd->auxdata<int>("layer") = m_PixelHelper->layer_disk(clusterId) ; - xprd->auxdata<int>("phi_module") = m_PixelHelper->phi_module(clusterId) ; - xprd->auxdata<int>("eta_module") = m_PixelHelper->eta_module(clusterId) ; - - //xprd->auxdata<int>("col") = m_PixelHelper->eta_index(clusterId); - //xprd->auxdata<int>("row") = m_PixelHelper->phi_index(clusterId); - xprd->auxdata<int>("eta_pixel_index") = m_PixelHelper->eta_index(clusterId); - xprd->auxdata<int>("phi_pixel_index") = m_PixelHelper->phi_index(clusterId); - - - const InDet::SiWidth cw = prd->width(); - xprd->auxdata<int>("sizePhi") = (int)cw.colRow()[0]; - xprd->auxdata<int>("sizeZ") = (int)cw.colRow()[1]; - xprd->auxdata<int>("size") = (int)prd->rdoList().size(); - - xprd->auxdata<float>("charge") = prd->totalCharge(); - xprd->auxdata<int>("ToT") = prd->totalToT(); - xprd->auxdata<int>("LVL1A") = prd->LVL1A(); - - xprd->auxdata<char>("isFake") = (char)prd->isFake(); - xprd->auxdata<char>("gangedPixel") = (char)prd->gangedPixel(); - xprd->auxdata<int>("isSplit") = (int)prd->isSplit(); - xprd->auxdata<float>("splitProbability1") = prd->splitProbability1(); - xprd->auxdata<float>("splitProbability2") = prd->splitProbability2(); - - // Need to add something to Add the NN splitting information - if(m_writeNNinformation)addNNInformation( xprd, prd, 7, 7); - - // Add information for each contributing hit - if(m_writeRDOinformation) addRdoInformation(xprd, prd); - - - - // Add the Detector element ID -- not sure if needed as we have the informations above - const InDetDD::SiDetectorElement* de = prd->detectorElement(); - uint64_t detElementId(0); - if(de){ - Identifier detId = de->identify(); - if ( detId.is_valid() ) { - detElementId = detId.get_compact(); - } - } - xprd->auxdata<uint64_t>("detectorElementID") = detElementId; - - // Use the MultiTruth Collection to get a list of all true particle contributing to the cluster - if(prdmtColl){ - std::vector<int> barcodes; - //std::pair<PRD_MultiTruthCollection::const_iterator,PRD_MultiTruthCollection::const_iterator>; - auto range = prdmtColl->equal_range(clusterId); - for (auto i = range.first; i != range.second; ++i) { - barcodes.push_back( i->second.barcode() ); - } - xprd->auxdata< std::vector<int> >("truth_barcode") = barcodes; - } - - // Use the SDO Collection to get a list of all true particle contributing to the cluster per readout element - // Also get the energy deposited by each true particle per readout element - if( sdoCollection ){ - addSDOInformation( xprd, prd,sdoCollection); - } - - // Now Get the most detailed truth from the SiHits - // Note that this could get really slow if there are a lot of hits and clusters - if( sihitCollection ){ - if(m_writeSiHits) - addSiHitInformation( xprd, prd, sihitCollection); - if(m_writeNNinformation) - addNNTruthInfo( xprd, prd, sihitCollection ); - } - } - } - ATH_MSG_DEBUG( " recorded PixelPrepData objects: size " << xaod->size() ); - - m_firstEventWarnings = false; - - return StatusCode::SUCCESS; -} - - -void PixelPrepDataToxAOD::addSDOInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* prd, - const InDetSimDataCollection* sdoCollection ) const -{ - std::vector<int> sdo_word; - std::vector< std::vector< int > > sdo_depositsBarcode; - std::vector< std::vector< float > > sdo_depositsEnergy; - // find hit - for( const auto &hitIdentifier : prd->rdoList() ){ - auto pos = sdoCollection->find(hitIdentifier); - if( pos != sdoCollection->end() ) { - sdo_word.push_back( pos->second.word() ) ; - - std::vector< int > sdoDepBC; - std::vector< float > sdoDepEnergy; - for( auto deposit : pos->second.getdeposits() ){ - if(deposit.first){ - sdoDepBC.push_back( deposit.first->barcode()); - } else { - sdoDepBC.push_back( -1 ); - } - sdoDepEnergy.push_back( deposit.second ); - ATH_MSG_DEBUG(" SDO Energy Deposit " << deposit.second ) ; - } - sdo_depositsBarcode.push_back( sdoDepBC ); - sdo_depositsEnergy.push_back( sdoDepEnergy ); - } - } - xprd->auxdata< std::vector<int> >("sdo_words") = sdo_word; - xprd->auxdata< std::vector< std::vector<int> > >("sdo_depositsBarcode") = sdo_depositsBarcode; - xprd->auxdata< std::vector< std::vector<float> > >("sdo_depositsEnergy") = sdo_depositsEnergy; -} - - - -void PixelPrepDataToxAOD::addSiHitInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* prd, - const SiHitCollection* sihitCollection) const - - -{ - - std::vector<SiHit> matchingHits = findAllHitsCompatibleWithCluster( prd, sihitCollection ); - - int numHits = matchingHits.size(); - - std::vector<float> sihit_energyDeposit(numHits,0); - std::vector<float> sihit_meanTime(numHits,0); - std::vector<int> sihit_barcode(numHits,0); - std::vector<int> sihit_pdgid(numHits,0); - - std::vector<float> sihit_startPosX(numHits,0); - std::vector<float> sihit_startPosY(numHits,0); - std::vector<float> sihit_startPosZ(numHits,0); - - std::vector<float> sihit_endPosX(numHits,0); - std::vector<float> sihit_endPosY(numHits,0); - std::vector<float> sihit_endPosZ(numHits,0); - - int hitNumber(0); - const InDetDD::SiDetectorElement* de = prd->detectorElement(); - if(de){ - for ( auto sihit : matchingHits ) { - sihit_energyDeposit[hitNumber] = sihit.energyLoss() ; - sihit_meanTime[hitNumber] = sihit.meanTime() ; - sihit_barcode[hitNumber] = sihit.particleLink().barcode() ; - if(sihit.particleLink().isValid()){ - sihit_pdgid[hitNumber] = sihit.particleLink()->pdg_id(); - } - - // Convert Simulation frame into reco frame - const HepGeom::Point3D<double>& startPos=sihit.localStartPosition(); - - Amg::Vector2D pos= de->hitLocalToLocal( startPos.z(), startPos.y() ); - sihit_startPosX[hitNumber] = pos[0]; - sihit_startPosY[hitNumber] = pos[1]; - sihit_startPosZ[hitNumber] = startPos.x(); - - - const HepGeom::Point3D<double>& endPos=sihit.localEndPosition(); - pos= de->hitLocalToLocal( endPos.z(), endPos.y() ); - sihit_endPosX[hitNumber] = pos[0]; - sihit_endPosY[hitNumber] = pos[1]; - sihit_endPosZ[hitNumber] = endPos.x(); - ++hitNumber; - } - } - - xprd->auxdata<std::vector<float> >("sihit_energyDeposit") = sihit_energyDeposit; - xprd->auxdata<std::vector<float> >("sihit_meanTime") = sihit_meanTime; - xprd->auxdata<std::vector<int> >("sihit_barcode") = sihit_barcode; - xprd->auxdata<std::vector<int> >("sihit_pdgid") = sihit_pdgid; - - xprd->auxdata<std::vector<float> >("sihit_startPosX") = sihit_startPosX; - xprd->auxdata<std::vector<float> >("sihit_startPosY") = sihit_startPosY; - xprd->auxdata<std::vector<float> >("sihit_startPosZ") = sihit_startPosZ; - - xprd->auxdata<std::vector<float> >("sihit_endPosX") = sihit_endPosX; - xprd->auxdata<std::vector<float> >("sihit_endPosY") = sihit_endPosY; - xprd->auxdata<std::vector<float> >("sihit_endPosZ") = sihit_endPosZ; - - -} - - - - - - -std::vector<SiHit> PixelPrepDataToxAOD::findAllHitsCompatibleWithCluster( const InDet::PixelCluster* prd, - const SiHitCollection* collection) const -{ - ATH_MSG_VERBOSE( "Got " << collection->size() << " SiHits to look through" ); - std::vector<SiHit> matchingHits; - - // Check if we have detector element -- needed to find the local position of the SiHits - const InDetDD::SiDetectorElement* de = prd->detectorElement(); - if(!de) - return matchingHits; - - std::vector<const SiHit* > multiMatchingHits; - - for ( const auto& siHit : *collection) { - // Check if it is a Pixel hit - if( !siHit.isPixel() ) - continue; - - //Check if it is on the correct module - Identifier clusterId = prd->identify(); - - if( m_PixelHelper->barrel_ec(clusterId) != siHit.getBarrelEndcap() || - m_PixelHelper->layer_disk(clusterId)!= siHit.getLayerDisk() || - m_PixelHelper->phi_module(clusterId)!= siHit.getPhiModule() || - m_PixelHelper->eta_module(clusterId)!= siHit.getEtaModule() ) - continue; - - // Now we have all hits in the module that match lets check to see if they match the cluster - // Must be within +/- 1 hits of any hit in the cluster to be included - ATH_MSG_DEBUG("Hit is on the same module"); - - HepGeom::Point3D<double> averagePosition = siHit.localStartPosition() + siHit.localEndPosition(); - averagePosition *= 0.5; - Amg::Vector2D pos = de->hitLocalToLocal( averagePosition.z(), averagePosition.y() ); - InDetDD::SiCellId diode = de->cellIdOfPosition(pos); - - for( const auto &hitIdentifier : prd->rdoList() ){ - - ATH_MSG_DEBUG("Truth Phi " << diode.phiIndex() << " Cluster Phi " << m_PixelHelper->phi_index( hitIdentifier ) ); - ATH_MSG_DEBUG("Truth Eta " << diode.etaIndex() << " Cluster Eta " << m_PixelHelper->eta_index( hitIdentifier ) ); - - if( abs( int(diode.etaIndex()) - m_PixelHelper->eta_index( hitIdentifier ) ) <=1 - && abs( int(diode.phiIndex()) - m_PixelHelper->phi_index( hitIdentifier ) ) <=1 ) - { - multiMatchingHits.push_back(&siHit); - break; - } - } - } - - - //Now we will now make 1 SiHit for each true particle if the SiHits "touch" other - std::vector<const SiHit* >::iterator siHitIter = multiMatchingHits.begin(); - std::vector<const SiHit* >::iterator siHitIter2 = multiMatchingHits.begin(); - ATH_MSG_DEBUG( "Found " << multiMatchingHits.size() << " SiHit " ); - for ( ; siHitIter != multiMatchingHits.end(); siHitIter++) { - const SiHit* lowestXPos = *siHitIter; - const SiHit* highestXPos = *siHitIter; - - - // We will merge these hits - std::vector<const SiHit* > ajoiningHits; - ajoiningHits.push_back( *siHitIter ); - - siHitIter2 = siHitIter+1; - while ( siHitIter2 != multiMatchingHits.end() ) { - // Need to come from the same truth particle - - if( (*siHitIter)->particleLink().barcode() != (*siHitIter2)->particleLink().barcode() ){ - ++siHitIter2; - continue; - } - - // Check to see if the SiHits are compatible with each other. - if (fabs((highestXPos->localEndPosition().x()-(*siHitIter2)->localStartPosition().x()))<0.00005 && - fabs((highestXPos->localEndPosition().y()-(*siHitIter2)->localStartPosition().y()))<0.00005 && - fabs((highestXPos->localEndPosition().z()-(*siHitIter2)->localStartPosition().z()))<0.00005 ) - { - highestXPos = *siHitIter2; - ajoiningHits.push_back( *siHitIter2 ); - // Dont use hit more than once - siHitIter2 = multiMatchingHits.erase( siHitIter2 ); - }else if (fabs((lowestXPos->localStartPosition().x()-(*siHitIter2)->localEndPosition().x()))<0.00005 && - fabs((lowestXPos->localStartPosition().y()-(*siHitIter2)->localEndPosition().y()))<0.00005 && - fabs((lowestXPos->localStartPosition().z()-(*siHitIter2)->localEndPosition().z()))<0.00005) - { - lowestXPos = *siHitIter2; - ajoiningHits.push_back( *siHitIter2 ); - // Dont use hit more than once - siHitIter2 = multiMatchingHits.erase( siHitIter2 ); - } else { - ++siHitIter2; - } - } - - if( ajoiningHits.size() == 0){ - ATH_MSG_WARNING("This should really never happen"); - continue; - }else if(ajoiningHits.size() == 1){ - // Copy Si Hit ready to return - matchingHits.push_back( *ajoiningHits[0] ); - continue; - } else { - // Build new SiHit and merge information together. - ATH_MSG_DEBUG("Merging " << ajoiningHits.size() << " SiHits together." ); - - - float energyDep(0); - float time(0); - for( auto& siHit : ajoiningHits){ - energyDep += siHit->energyLoss(); - time += siHit->meanTime(); - } - time /= (float)ajoiningHits.size(); - - matchingHits.push_back( SiHit(lowestXPos->localStartPosition(), - highestXPos->localEndPosition(), - energyDep, - time, - (*siHitIter)->particleLink().barcode(), - 0, // 0 for pixel 1 for Pixel - (*siHitIter)->getBarrelEndcap(), - (*siHitIter)->getLayerDisk(), - (*siHitIter)->getEtaModule(), - (*siHitIter)->getPhiModule(), - (*siHitIter)->getSide() ) ); - ATH_MSG_DEBUG("Finished Merging " << ajoiningHits.size() << " SiHits together." ); - - } - } - - - return matchingHits; - -} - -void PixelPrepDataToxAOD::addRdoInformation(xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* pixelCluster ) const -{ - ATH_MSG_VERBOSE( " Starting creating input from cluster " ); - - - const std::vector<Identifier>& rdos = pixelCluster->rdoList(); - - const std::vector<float> chList = pixelCluster->chargeList(); - const std::vector<int> totList = pixelCluster->totList(); - - // std::vector<int> rowList; - // std::vector<int> colList; - std::vector<int> etaIndexList; - std::vector<int> phiIndexList; - - ATH_MSG_VERBOSE( "Number of RDOs: " << rdos.size() ); - - //Itererate over all elements hits in the cluster and fill the charge and tot matricies - std::vector<Identifier>::const_iterator rdosBegin = rdos.begin(); - std::vector<Identifier>::const_iterator rdosEnd = rdos.end(); - - ATH_MSG_VERBOSE(" Putting together the n. " << rdos.size() << " rdos into a matrix."); - - for (; rdosBegin!= rdosEnd; ++rdosBegin) - { - Identifier rId = *rdosBegin; - // rowList.push_back( m_PixelHelper->phi_index(rId) ); - // colList.push_back( m_PixelHelper->eta_index(rId) ); - phiIndexList.push_back( m_PixelHelper->phi_index(rId) ); - etaIndexList.push_back( m_PixelHelper->eta_index(rId) ); - }//end iteration on rdos - - - // xprd->auxdata< std::vector<int> >("rdo_row") = rowList; - // xprd->auxdata< std::vector<int> >("rdo_col") = colList; - xprd->auxdata< std::vector<int> >("rdo_phi_pixel_index") = phiIndexList; - xprd->auxdata< std::vector<int> >("rdo_eta_pixel_index") = etaIndexList; - xprd->auxdata< std::vector<float> >("rdo_charge") = chList; - xprd->auxdata< std::vector<int> >("rdo_tot") = totList; - -} - - -void PixelPrepDataToxAOD::addNNInformation(xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* pixelCluster, - const unsigned int sizeX, const unsigned int sizeY ) const -{ - ATH_MSG_VERBOSE( " Starting creating input from cluster " ); - - const InDetDD::SiDetectorElement* de = pixelCluster->detectorElement(); - if (de==0) { - ATH_MSG_ERROR("Could not get detector element"); - return; - } - - - const InDetDD::PixelModuleDesign* design(dynamic_cast<const InDetDD::PixelModuleDesign*>(&de->design())); - if (not design) { - ATH_MSG_WARNING("PixelModuleDesign was not retrieved in function 'addNNInformation'"); - return; - } - const std::vector<Identifier>& rdos = pixelCluster->rdoList(); - - const std::vector<float>& chList = pixelCluster->chargeList(); - const std::vector<int>& totList = pixelCluster->totList(); - - ATH_MSG_VERBOSE( "Number of RDOs: " << rdos.size() ); - ATH_MSG_VERBOSE( "Number of charges: " << chList.size() ); - ATH_MSG_VERBOSE( "Number of TOT: " << totList.size() ); - - - //Calculate the centre of the cluster - int phiPixelIndexMin, phiPixelIndexMax, etaPixelIndexMin, etaPixelIndexMax; - InDetDD::SiCellId cellIdWeightedPosition= getCellIdWeightedPosition( pixelCluster, &phiPixelIndexMin, &phiPixelIndexMax, &etaPixelIndexMin, &etaPixelIndexMax); - - if (!cellIdWeightedPosition.isValid()) - { - ATH_MSG_WARNING( "Weighted position is on invalid CellID." ); - } - - int etaPixelIndexWeightedPosition=cellIdWeightedPosition.etaIndex(); - int phiPixelIndexWeightedPosition=cellIdWeightedPosition.phiIndex(); - - - ATH_MSG_DEBUG(" weighted pos phiPixelIndex: " << phiPixelIndexWeightedPosition << " etaPixelIndex: " << etaPixelIndexWeightedPosition ); - - // SiLocalPosition PixelModuleDesign::positionFromColumnRow(const int column, const int row) const; - // - // Given row and column index of diode, returns position of diode center - // ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or - // rawLocalPositionOfCell method in SiDetectorElement. - // DEPRECATED (but used in numerous places) - // - // Comment by Hide (referring the original comment in the code) : 2015-02-04 - // I automatically replaced column to etaPixelIndex and row to phiPixelIndex here. It was bofore: - // InDetDD::SiLocalPosition siLocalPosition( design->positionFromColumnRow(columnWeightedPosition,rowWeightedPosition) ); - // - // Then I assume the argument of column/row in this function is in offline manner, not the real hardware column/row. - // - InDetDD::SiLocalPosition w = design->positionFromColumnRow(etaPixelIndexWeightedPosition,phiPixelIndexWeightedPosition); - - - double localEtaPixelIndexWeightedPosition = w.xEta(); - double localPhiPixelIndexWeightedPosition = w.xPhi(); - - int centralIndexX=(sizeX-1)/2; - int centralIndexY=(sizeY-1)/2; - - - - // Check to see if the cluster is too big for the NN - - if (abs(phiPixelIndexWeightedPosition-phiPixelIndexMin)>centralIndexX || - abs(phiPixelIndexWeightedPosition-phiPixelIndexMax)>centralIndexX) - { - ATH_MSG_DEBUG(" Cluster too large phiPixelIndexMin " << phiPixelIndexMin << " phiPixelIndexMax " << phiPixelIndexMax << " centralX " << centralIndexX); - //return; - } - - if (abs(etaPixelIndexWeightedPosition-etaPixelIndexMin)>centralIndexY || - abs(etaPixelIndexWeightedPosition-etaPixelIndexMax)>centralIndexY) - { - ATH_MSG_DEBUG(" Cluster too large etaPixelIndexMin" << etaPixelIndexMin << " etaPixelIndexMax " << etaPixelIndexMax << " centralY " << centralIndexY); - //return; - } - - std::vector< std::vector<float> > matrixOfToT (sizeX, std::vector<float>(sizeY,0) ); - std::vector< std::vector<float> > matrixOfCharge(sizeX, std::vector<float>(sizeY,0)); - std::vector<float> vectorOfPitchesY(sizeY,0.4); - - - //Itererate over all elements hits in the cluster and fill the charge and tot matrices - std::vector<Identifier>::const_iterator rdosBegin = rdos.begin(); - std::vector<Identifier>::const_iterator rdosEnd = rdos.end(); - auto charge = chList.begin(); - auto tot = totList.begin(); - - ATH_MSG_VERBOSE(" Putting together the n. " << rdos.size() << " rdos into a matrix."); - - for (; rdosBegin!= rdosEnd; ++rdosBegin) - { - - Identifier rId = *rdosBegin; - int absphiPixelIndex = m_PixelHelper->phi_index(rId)-phiPixelIndexWeightedPosition + centralIndexX; - int absetaPixelIndex = m_PixelHelper->eta_index(rId)-etaPixelIndexWeightedPosition + centralIndexY; - - ATH_MSG_VERBOSE( " Phi Index: " << m_PixelHelper->phi_index(rId) << " absphiPixelIndex: " << absphiPixelIndex << " eta Idx: " << m_PixelHelper->eta_index(rId) << " absetaPixelIndex: " << absetaPixelIndex << " charge " << *charge ); - - if (absphiPixelIndex <0 || absphiPixelIndex >= (int)sizeX) - { - ATH_MSG_DEBUG(" problem with index: " << absphiPixelIndex << " min: " << 0 << " max: " << sizeX); - continue; - } - - if (absetaPixelIndex <0 || absetaPixelIndex >= (int)sizeY) - { - ATH_MSG_DEBUG(" problem with index: " << absetaPixelIndex << " min: " << 0 << " max: " << sizeY); - continue; - } - - InDetDD::SiCellId cellId = de->cellIdFromIdentifier(*rdosBegin); - InDetDD::SiDiodesParameters diodeParameters = design->parameters(cellId); - float pitchY = diodeParameters.width().xEta(); - - if ( (not totList.empty()) && tot != totList.end()) { - matrixOfToT[absphiPixelIndex][absetaPixelIndex] =*tot; - ++tot; - } else matrixOfToT[absphiPixelIndex][absetaPixelIndex] = -1; - - if ( (not chList.empty()) && charge != chList.end()){ - matrixOfCharge[absphiPixelIndex][absetaPixelIndex]=*charge; - ++charge; - } else matrixOfCharge[absphiPixelIndex][absetaPixelIndex] = -1; - - if (pitchY > 0.1) - { - vectorOfPitchesY[absetaPixelIndex]=pitchY; - } - }//end iteration on rdos - - - ATH_MSG_VERBOSE( " End RDO LOOP " ); - - // Using the centre of the module and beam spot calculate - // the incidence angles of the tracks - const Amg::Vector2D& prdLocPos = pixelCluster->localPosition(); - InDetDD::SiLocalPosition centroid(prdLocPos); - - Amg::Vector3D globalPos = de->globalPosition(centroid); - Amg::Vector3D trackDir = globalPos; // - beamSpotPosition; - trackDir.normalize(); - - Amg::Vector3D module_normal = de->normal(); - Amg::Vector3D module_phiax = de->phiAxis(); - Amg::Vector3D module_etaax = de->etaAxis(); - - // Calculate the phi incidence angle - float trkphicomp = trackDir.dot(module_phiax); - float trketacomp = trackDir.dot(module_etaax); - float trknormcomp = trackDir.dot(module_normal); - double bowphi = atan2(trkphicomp,trknormcomp); - double boweta = atan2(trketacomp,trknormcomp); - double tanl = de->getTanLorentzAnglePhi(); - if(bowphi > TMath::Pi()/2) bowphi -= TMath::Pi(); - if(bowphi < -TMath::Pi()/2) bowphi += TMath::Pi(); - int readoutside = design->readoutSide(); - double angle = atan(tan(bowphi)-readoutside*tanl); - - - // Calculate the theta incidence angle - ATH_MSG_VERBOSE( " Angle theta bef corr: " << boweta ); - if (boweta>TMath::Pi()/2.) boweta-=TMath::Pi(); - if (boweta<-TMath::Pi()/2.) boweta+=TMath::Pi(); - - - ATH_MSG_VERBOSE(" Angle phi: " << angle << " theta: " << boweta ); - ATH_MSG_VERBOSE(" PhiPixelIndexWeightedPosition: " << phiPixelIndexWeightedPosition << " EtaPixelIndexWeightedPosition: " << etaPixelIndexWeightedPosition ); - - // store the matrixOfToT in a vector - std::vector<float> vectorOfCharge(sizeX*sizeY,0); - std::vector<float> vectorOfToT(sizeX*sizeY,0); - int counter(0); - for (unsigned int u=0;u<sizeX;u++) - { - for (unsigned int s=0;s<sizeY;s++) - { - vectorOfToT[counter] = matrixOfToT[u][s]; - vectorOfCharge[counter] = matrixOfCharge[u][s]; - ++counter; - } - } - - ATH_MSG_VERBOSE( "matrixOfToT converted in a std::vector<float> " ); - - ATH_MSG_VERBOSE( "... and saved " ); - // Add information to xAOD - xprd->auxdata< int >("NN_sizeX") = sizeX; - xprd->auxdata< int >("NN_sizeY") = sizeY; - - xprd->auxdata< float >("NN_phiBS") = angle; - xprd->auxdata< float >("NN_thetaBS") = boweta; - - xprd->auxdata< std::vector<float> >("NN_matrixOfToT") = vectorOfToT; - xprd->auxdata< std::vector<float> >("NN_matrixOfCharge") = vectorOfCharge; - xprd->auxdata< std::vector<float> >("NN_vectorOfPitchesY") = vectorOfPitchesY; - - - xprd->auxdata< int >("NN_etaPixelIndexWeightedPosition") = etaPixelIndexWeightedPosition; - xprd->auxdata< int >("NN_phiPixelIndexWeightedPosition") = phiPixelIndexWeightedPosition; - - xprd->auxdata< float >("NN_localEtaPixelIndexWeightedPosition") = localEtaPixelIndexWeightedPosition; - xprd->auxdata< float >("NN_localPhiPixelIndexWeightedPosition") = localPhiPixelIndexWeightedPosition; - - ATH_MSG_VERBOSE( "NN training Written" ); -} - -void PixelPrepDataToxAOD::addNNTruthInfo( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* pixelCluster, - const SiHitCollection* sihitCollection ) const -{ - - std::vector<SiHit> matchingHits = findAllHitsCompatibleWithCluster( pixelCluster, sihitCollection ); - - unsigned int numberOfSiHits = matchingHits.size(); - - std::vector<float> positionsX(numberOfSiHits,0); - std::vector<float> positionsY(numberOfSiHits,0); - - std::vector<float> positions_indexX(numberOfSiHits,0); - std::vector<float> positions_indexY(numberOfSiHits,0); - - std::vector<float> theta(numberOfSiHits,0); - std::vector<float> phi(numberOfSiHits,0); - - std::vector<int> barcode(numberOfSiHits,0); - std::vector<int> pdgid(numberOfSiHits,0); - std::vector<float> chargeDep(numberOfSiHits,0); - std::vector<float> truep(numberOfSiHits,0); - - std::vector<float> pathlengthX(numberOfSiHits,0); - std::vector<float> pathlengthY(numberOfSiHits,0); - std::vector<float> pathlengthZ(numberOfSiHits,0); - - std::vector<int> motherBarcode(numberOfSiHits,0); - std::vector<int> motherPdgid(numberOfSiHits,0); - - - - // Check if we have detector element -- needed to find the local position of the SiHits - const InDetDD::SiDetectorElement* de = pixelCluster->detectorElement(); - if(!de) - return; - - InDetDD::SiCellId cellIdWeightedPosition = getCellIdWeightedPosition( pixelCluster ); - - const InDetDD::PixelModuleDesign* design(dynamic_cast<const InDetDD::PixelModuleDesign*>(&de->design())); - if (not design) { - ATH_MSG_WARNING("PixelModuleDesign was not retrieved in function 'addNNTruthInfo'"); - return; - } - // lorentz shift correction - double shift = de->getLorentzCorrection(); - - unsigned hitNumber(0); - for( auto& siHit : matchingHits ){ - - HepGeom::Point3D<double> averagePosition = (siHit.localStartPosition() + siHit.localEndPosition()) * 0.5; - - ATH_MSG_VERBOSE("Truth Part X: " << averagePosition.y() << " shift " << shift << " Y: " << averagePosition.z() ); - - // position lorentz shift corrected - float YposC = averagePosition.y()-shift; - - if (fabs(YposC)>design->width()/2 && - fabs(averagePosition.y())<design->width()/2) - { - if (YposC>design->width()/2) - { - YposC=design->width()/2-1e-6; - } else if (YposC<-design->width()/2) - { - YposC=-design->width()/2+1e-6; - } - } - - positionsX[hitNumber] = YposC; - positionsY[hitNumber] = averagePosition.z(); - - HepGeom::Point3D<double> deltaPosition = siHit.localEndPosition() - siHit.localStartPosition(); - - pathlengthX[hitNumber] = deltaPosition.y(); - pathlengthY[hitNumber] = deltaPosition.z(); - pathlengthZ[hitNumber] = deltaPosition.x(); - - - - InDetDD::SiLocalPosition siLocalTruthPosition(averagePosition.z(),YposC ) ; - InDetDD::SiCellId cellIdOfTruthPosition =design->cellIdOfPosition(siLocalTruthPosition); - - int truthEtaIndex = cellIdOfTruthPosition.etaIndex(); - int truthPhiIndex = cellIdOfTruthPosition.phiIndex(); - - InDetDD::SiDiodesParameters diodeParameters = design->parameters(cellIdOfTruthPosition); - double pitchY = diodeParameters.width().xEta(); - double pitchX = diodeParameters.width().xPhi(); - - // pixel center - // SiLocalPosition PixelModuleDesign::positionFromColumnRow(const int column, const int row) const; - // - // Given row and column index of diode, returns position of diode center - // ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or - // rawLocalPositionOfCell method in SiDetectorElement. - // DEPRECATED (but used in numerous places) - // - // Comment by Hide (referring the original comment in the code) : 2015-02-04 - // I automatically replaced column to etaPixelIndex and row to phiPixelIndex here. It was bofore: - // InDetDD::SiLocalPosition siLocalPosition( design->positionFromColumnRow(truthColumn,truthRow) ); - // - // Then I assume the argument of column/row in this function is in offline manner, not the real hardware column/row. - // - InDetDD::SiLocalPosition siLocalPositionCenter(design->positionFromColumnRow(truthEtaIndex,truthPhiIndex)); - double pixelCenterY = siLocalPositionCenter.xEta(); - double pixelCenterX = siLocalPositionCenter.xPhi(); - - - // truth index - double truthIndexY = truthEtaIndex + (averagePosition.z() - pixelCenterY)/pitchY; - double truthIndexX = truthPhiIndex + (YposC - pixelCenterX)/pitchX; - - positions_indexX[hitNumber] = truthIndexX - cellIdWeightedPosition.phiIndex(); - positions_indexY[hitNumber] = truthIndexY - cellIdWeightedPosition.etaIndex(); - - HepGeom::Point3D<double> diffPositions = (siHit.localEndPosition() - siHit.localStartPosition()); - double bowphi = atan2( diffPositions.y(), diffPositions.x() ); - - - //Truth Track incident angle theta - theta[hitNumber] = atan2(diffPositions.z() ,diffPositions.x()); - //Truth track incident angle phi -- correct for lorentz angle - float tanlorentz = de->getTanLorentzAnglePhi(); - int readoutside = design->readoutSide(); - phi[hitNumber] = atan(tan(bowphi)-readoutside*tanlorentz); - - if(siHit.particleLink().isValid()){ - barcode[hitNumber] = siHit.particleLink().barcode(); - - auto particle = siHit.particleLink(); - pdgid[hitNumber] = particle->pdg_id(); - truep[hitNumber] = particle->momentum().rho(); - if ( particle->production_vertex() ){ - auto vertex = particle->production_vertex(); - if( vertex->particles_in_const_begin() != vertex->particles_in_const_end() ){ - motherBarcode[hitNumber] = (*vertex->particles_in_const_begin())->barcode(); - motherPdgid[hitNumber] = (*vertex->particles_in_const_begin())->pdg_id(); - } - } - } - chargeDep[hitNumber] = siHit.energyLoss() ; - - ++hitNumber; - } - - - xprd->auxdata< std::vector<float> >("NN_positionsX") = positionsX; - xprd->auxdata< std::vector<float> >("NN_positionsY") = positionsY; - - xprd->auxdata< std::vector<float> >("NN_positions_indexX") = positions_indexX; - xprd->auxdata< std::vector<float> >("NN_positions_indexY") = positions_indexY; - - xprd->auxdata< std::vector<float> >("NN_theta") = theta; - xprd->auxdata< std::vector<float> >("NN_phi") = phi; - - xprd->auxdata< std::vector<int> >("NN_barcode") = barcode; - xprd->auxdata< std::vector<int> >("NN_pdgid") = pdgid; - xprd->auxdata< std::vector<float> >("NN_energyDep") = chargeDep; - xprd->auxdata< std::vector<float> >("NN_trueP") = truep; - - xprd->auxdata< std::vector<int> >("NN_motherBarcode") = motherBarcode; - xprd->auxdata< std::vector<int> >("NN_motherPdgid") = motherPdgid; - - - xprd->auxdata< std::vector<float> >("NN_pathlengthX") = pathlengthX; - xprd->auxdata< std::vector<float> >("NN_pathlengthY") = pathlengthY; - xprd->auxdata< std::vector<float> >("NN_pathlengthZ") = pathlengthZ; - - -} - - - - -InDetDD::SiCellId PixelPrepDataToxAOD::getCellIdWeightedPosition( const InDet::PixelCluster* pixelCluster, - int *rphiPixelIndexMin, - int *rphiPixelIndexMax, - int *retaPixelIndexMin, - int *retaPixelIndexMax ) const -{ - - const InDetDD::SiDetectorElement* de = pixelCluster->detectorElement(); - if (de==0) { - ATH_MSG_ERROR("Could not get detector element"); - return InDetDD::SiCellId(); - } - - const InDetDD::PixelModuleDesign* design(dynamic_cast<const InDetDD::PixelModuleDesign*>(&de->design())); - if (not design) { - ATH_MSG_WARNING("PixelModuleDesign was not retrieved in function 'getCellIdWeightedPosition'"); - return InDetDD::SiCellId(); - } - const std::vector<Identifier>& rdos = pixelCluster->rdoList(); - - ATH_MSG_VERBOSE( "Number of RDOs: " << rdos.size() ); - const std::vector<float>& chList = pixelCluster->chargeList(); - - ATH_MSG_VERBOSE( "Number of charges: " << chList.size() ); - std::vector<Identifier>::const_iterator rdosBegin = rdos.begin(); - std::vector<Identifier>::const_iterator rdosEnd = rdos.end(); - - auto charge = chList.begin(); - - InDetDD::SiLocalPosition sumOfWeightedPositions(0,0,0); - double sumOfCharge=0; - - int phiPixelIndexMin = 99999; - int phiPixelIndexMax = -99999; - int etaPixelIndexMin = 99999; - int etaPixelIndexMax = -99999; - - for (; rdosBegin!= rdosEnd; ++rdosBegin, ++charge) - { - - Identifier rId = *rdosBegin; - int phiPixelIndex = m_PixelHelper->phi_index(rId); - int etaPixelIndex = m_PixelHelper->eta_index(rId); - - ATH_MSG_VERBOSE(" Adding pixel phiPixelIndex: " << phiPixelIndex << " etaPixelIndex: " << etaPixelIndex << " charge: " << *charge ); - - // SiLocalPosition PixelModuleDesign::positionFromColumnRow(const int column, const int row) const; - // - // Given row and column index of diode, returns position of diode center - // ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or - // rawLocalPositionOfCell method in SiDetectorElement. - // DEPRECATED (but used in numerous places) - // - // Comment by Hide (referring the original comment in the code): 2015-02-04 - // I automatically replaced column to etaPixelIndex and row to phiPixelIndex here. It was bofore: - // InDetDD::SiLocalPosition siLocalPosition( design->positionFromColumnRow(column,row) ); - // - // Then I assume the argument of column/row in this function is in offline manner, not the real hardware column/row. - // - InDetDD::SiLocalPosition siLocalPosition( design->positionFromColumnRow(etaPixelIndex,phiPixelIndex) ); - ATH_MSG_VERBOSE ( "Local Position: Row = " << siLocalPosition.xRow() << ", Col = " << siLocalPosition.xColumn() ); - - sumOfWeightedPositions += (*charge)*siLocalPosition; - sumOfCharge += (*charge); - - if (phiPixelIndex < phiPixelIndexMin) - phiPixelIndexMin = phiPixelIndex; - - if (phiPixelIndex > phiPixelIndexMax) - phiPixelIndexMax = phiPixelIndex; - - if (etaPixelIndex < etaPixelIndexMin) - etaPixelIndexMin = etaPixelIndex; - - if (etaPixelIndex > etaPixelIndexMax) - etaPixelIndexMax = etaPixelIndex; - - } - sumOfWeightedPositions /= sumOfCharge; - - ATH_MSG_VERBOSE ( "Wighted position: Row = " << sumOfWeightedPositions.xRow() << ", Col = " << sumOfWeightedPositions.xColumn() ); - - if(rphiPixelIndexMin) *rphiPixelIndexMin = phiPixelIndexMin; - if(rphiPixelIndexMax) *rphiPixelIndexMax = phiPixelIndexMax; - if(retaPixelIndexMin) *retaPixelIndexMin = etaPixelIndexMin; - if(retaPixelIndexMax) *retaPixelIndexMax = etaPixelIndexMax; - - //what you want to know is simple: - //just the phiPixelIndex and etaPixelIndex of this average position! - - InDetDD::SiCellId cellIdWeightedPosition=design->cellIdOfPosition(sumOfWeightedPositions); - - - return cellIdWeightedPosition; - -} - - - -///////////////////////////////////////////////////////////////////// -// -// Finalize method: -// -///////////////////////////////////////////////////////////////////// -StatusCode PixelPrepDataToxAOD::finalize() -{ - return StatusCode::SUCCESS; -} diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h deleted file mode 100644 index 98d86b9aba7..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/PixelPrepDataToxAOD.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// PixelPrepDataToxAOD.h -// Header file for class PixelPrepDataToxAOD -/////////////////////////////////////////////////////////////////// - -#ifndef PIXELPREPDATATOXAOD_H -#define PIXELPREPDATATOXAOD_H - -#include "AthenaBaseComps/AthAlgorithm.h" -#include "GaudiKernel/ServiceHandle.h" - -#include "InDetSimEvent/SiHitCollection.h" -#include "xAODTracking/TrackMeasurementValidation.h" - - -#include <string> - -class PixelID; -class SiHit; -class InDetSimDataCollection; - - -namespace InDet -{ - class PixelCluster; -} - -namespace InDetDD -{ - class SiCellId; -} - - - -class PixelPrepDataToxAOD : public AthAlgorithm { - -public: - // Constructor with parameters: - PixelPrepDataToxAOD(const std::string &name,ISvcLocator *pSvcLocator); - - // Basic algorithm methods: - virtual StatusCode initialize(); - virtual StatusCode execute(); - virtual StatusCode finalize(); - -private: - - void addSDOInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* prd, - const InDetSimDataCollection* sdoCollection ) const; - - - void addSiHitInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* prd, - const SiHitCollection* collection) const; - - std::vector<SiHit> findAllHitsCompatibleWithCluster(const InDet::PixelCluster* prd, - const SiHitCollection* collection) const; - - - void addNNTruthInfo( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* prd, - const SiHitCollection* collection ) const; - - void addNNInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* pixelCluster, - const unsigned int SizeX, - const unsigned int SizeY ) const; - - void addRdoInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::PixelCluster* pixelCluster) const; - - - - InDetDD::SiCellId getCellIdWeightedPosition( const InDet::PixelCluster* pixelCluster, - int *rrowMin = 0, - int *rrowMax = 0, - int *rcolMin = 0, - int *rcolMax = 0 ) const; - - - const PixelID *m_PixelHelper; - std::string m_clustercontainer; - std::string m_SDOcontainer; - std::string m_sihitContainer; - std::string m_multiTruth; - - bool m_useTruthInfo; - bool m_writeSDOs; - bool m_writeSiHits; - bool m_writeNNinformation; - bool m_writeRDOinformation; - - // -- Private members - bool m_firstEventWarnings; - -}; - - -#endif diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx deleted file mode 100644 index ca1efec6ef6..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.cxx +++ /dev/null @@ -1,594 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// SCT_PrepDataToxAOD.cxx -// Implementation file for class SCT_PrepDataToxAOD -/////////////////////////////////////////////////////////////////// - -#include "SCT_PrepDataToxAOD.h" - -#include "InDetPrepRawData/SCT_ClusterContainer.h" - -#include "xAODTracking/TrackMeasurementValidationContainer.h" -#include "xAODTracking/TrackMeasurementValidationAuxContainer.h" - -#include "Identifier/Identifier.h" -#include "InDetIdentifier/SCT_ID.h" - -#include "InDetRawData/SCT_RDO_Container.h" -#include "InDetRawData/SCT_RDO_Collection.h" - -#include "TrkTruthData/PRD_MultiTruthCollection.h" -#include "HepMC/GenParticle.h" -#include "InDetSimEvent/SiHit.h" -#include "InDetSimData/InDetSimDataCollection.h" - -#include "CLHEP/Geometry/Point3D.h" - - - -///////////////////////////////////////////////////////////////////// -// -// Constructor with parameters: -// -///////////////////////////////////////////////////////////////////// -SCT_PrepDataToxAOD::SCT_PrepDataToxAOD(const std::string &name, ISvcLocator *pSvcLocator) : - AthAlgorithm(name,pSvcLocator), - m_incidentSvc("IncidentSvc", name), - m_SCTHelper(0), - m_firstEventWarnings(true) -{ - // --- Steering and configuration flags - declareProperty("UseTruthInfo", m_useTruthInfo=false); - declareProperty("WriteRDOinformation", m_writeRDOinformation =true); - declareProperty("WriteSDOs", m_writeSDOs = true); - declareProperty("WriteSiHits", m_writeSiHits = true); - - // --- Configuration keys - declareProperty("SiClusterContainer", m_clustercontainer = "SCT_Clusters"); - declareProperty("MC_SDOs", m_SDOcontainer = "SCT_SDO_Map"); - declareProperty("MC_Hits", m_sihitContainer = "SCT_Hits"); - declareProperty("PRD_MultiTruth", m_multiTruth = "PRD_MultiTruthSCT"); - - // --- Services and Tools -} - -///////////////////////////////////////////////////////////////////// -// -// Initialize method: -// -///////////////////////////////////////////////////////////////////// -StatusCode SCT_PrepDataToxAOD::initialize() -{ - - CHECK ( detStore()->retrieve(m_SCTHelper, "SCT_ID") ); - - CHECK ( m_incidentSvc.retrieve() ); - // register to the incident service: - m_incidentSvc->addListener( this, IncidentType::EndEvent); - - //make sure we don't write what we don't have - if (not m_useTruthInfo) { - m_writeSDOs = false; - m_writeSiHits = false; - } - - return StatusCode::SUCCESS; -} - -///////////////////////////////////////////////////////////////////// -// -// Execute method: -// -///////////////////////////////////////////////////////////////////// -StatusCode SCT_PrepDataToxAOD::execute() -{ - const SCT_RDO_Container * rdoContainer(0); - - // the cluster ambiguity map - if ( m_writeRDOinformation ) { - if(!evtStore()->contains<SCT_RDO_Container>("SCT_RDOs")){ - if (m_firstEventWarnings) { - ATH_MSG_WARNING("RDO ASSOC: No SCT RDO container in StoreGate"); - } - } - else { - if(evtStore()->retrieve(rdoContainer,"SCT_RDOs").isFailure()) { - ATH_MSG_WARNING( "Failed to retrieve SCT RDO container" ); - } - } - - if ( rdoContainer != 0){ - - // get all the RIO_Collections in the container - - for( auto& collection: *rdoContainer ){ - - //get all the RDOs in the collection - for (auto& rdo : *collection) { - - if ( !rdo) { - ATH_MSG_WARNING( "Null SCT RDO. Skipping it"); - continue; - } - - Identifier rdoId = rdo->identify(); - - m_IDtoRAWDataMap.insert( std::pair< Identifier, const SCT_RDORawData*>( rdoId, rdo ) ); - } // collection - } // container - } // Have container; - } - ATH_MSG_DEBUG("Size of RDO map is "<<m_IDtoRAWDataMap.size()); - - // Mandatory. This is needed and required if this algorithm is scheduled. - const InDet::SCT_ClusterContainer* sctClusterContainer = 0; - if( evtStore()->retrieve(sctClusterContainer,m_clustercontainer).isFailure() ) { - ATH_MSG_ERROR("Cannot retrieve SCT PrepDataContainer " << m_clustercontainer); - return StatusCode::FAILURE; - } - - // Optional. Normally only available in Hits files -- samples need to digitised and Hits need to be copied for this to work - const SiHitCollection* sihitCollection = 0; - if (m_writeSiHits) { - if (evtStore()->contains<SiHitCollection>(m_sihitContainer)) { - ATH_CHECK(evtStore()->retrieve(sihitCollection, m_sihitContainer)); - } else { - if (m_firstEventWarnings) { - ATH_MSG_WARNING("SiHit collection not available (" << m_sihitContainer << "). Skipping although requested."); - sihitCollection = 0; - } - } - } - - // Optional. On RDO - const InDetSimDataCollection* sdoCollection = 0; - if (m_writeSDOs) { - if ( evtStore()->contains<InDetSimDataCollection>(m_SDOcontainer) ) { - ATH_CHECK(evtStore()->retrieve(sdoCollection, m_SDOcontainer)); - } else { - ATH_MSG_WARNING("SDO container not available (" << m_SDOcontainer << "). Skipping although requested."); - sdoCollection = 0; - } - } - - // Optional. On ESD and AOD - const PRD_MultiTruthCollection* prdmtColl = 0; - if (m_useTruthInfo) { - if ( evtStore()->contains<PRD_MultiTruthCollection>(m_multiTruth) ) { - ATH_CHECK(evtStore()->retrieve(prdmtColl, m_multiTruth)); - } else { - ATH_MSG_WARNING("MultiTruth container not available (" << m_multiTruth << "). Skipping although requested."); - prdmtColl = 0; - } - } - - - // Create the xAOD container and its auxiliary store: - xAOD::TrackMeasurementValidationContainer* xaod = new xAOD::TrackMeasurementValidationContainer(); - CHECK( evtStore()->record( xaod, m_clustercontainer ) ); - xAOD::TrackMeasurementValidationAuxContainer* aux = new xAOD::TrackMeasurementValidationAuxContainer(); - CHECK( evtStore()->record( aux, m_clustercontainer + "Aux." ) ); - xaod->setStore( aux ); - - std::vector<unsigned int>* offsets = new std::vector<unsigned int>( m_SCTHelper->wafer_hash_max(), 0 ); - CHECK( evtStore()->record( offsets, m_clustercontainer + "Offsets" ) ); - - // Loop over the container - unsigned int counter(0); - for( const auto& clusterCollection : *sctClusterContainer){ - - //Fill Offset container - (*offsets)[clusterCollection->identifyHash()] = counter; - - // skip empty collections - if( clusterCollection->empty() ) continue; - - - // loop over collection and convert to xAOD - for( auto& prd : *clusterCollection ){ - ++counter; - - Identifier clusterId = prd->identify(); - if ( !clusterId.is_valid() ) { - ATH_MSG_WARNING("SCT cluster identifier is not valid!"); - } - - // create and add xAOD object - xAOD::TrackMeasurementValidation* xprd = new xAOD::TrackMeasurementValidation(); - xaod->push_back(xprd); - - //Set Identifier - xprd->setIdentifier( clusterId.get_compact() ); - - //Set Global Position - Amg::Vector3D gpos = prd->globalPosition(); - xprd->setGlobalPosition(gpos.x(),gpos.y(),gpos.z()); - - //Set Local Position - const Amg::Vector2D& locpos = prd->localPosition(); - float locY(0.); - float locX = locpos.x(); - if ( !(std::isinf(locpos.y()) || std::isnan(locpos.y())) ){ - if (locpos.y()>=1e-07) - locY=locpos.y(); - } else { - locY = -9999.; - } - - // Set local error matrix - xprd->setLocalPosition(locX,locY); - - - - - const Amg::MatrixX& localCov = prd->localCovariance(); - if(localCov.size() == 1){ - xprd->setLocalPositionError( localCov(0,0), 0., 0. ); - } else if(localCov.size() == 4){ - xprd->setLocalPositionError( localCov(0,0), localCov(1,1), localCov(0,1) ); - } else { - xprd->setLocalPositionError(0.,0.,0.); - } - - // Set vector of hit identifiers - std::vector< uint64_t > rdoIdentifierList; - for( const auto &hitIdentifier : prd->rdoList() ){ - rdoIdentifierList.push_back( hitIdentifier.get_compact() ); - } - xprd->setRdoIdentifierList(rdoIdentifierList); - - //Add SCT specific information - const InDet::SiWidth cw = prd->width(); - xprd->auxdata<int>("size") = (int)cw.colRow()[0]; - xprd->auxdata<int>("hitsInThirdTimeBin") = (int)(prd->hitsInThirdTimeBin()); - - xprd->auxdata<int>("bec") = m_SCTHelper->barrel_ec(clusterId) ; - xprd->auxdata<int>("layer") = m_SCTHelper->layer_disk(clusterId) ; - xprd->auxdata<int>("phi_module") = m_SCTHelper->phi_module(clusterId) ; - xprd->auxdata<int>("eta_module") = m_SCTHelper->eta_module(clusterId) ; - xprd->auxdata<int>("side") = m_SCTHelper->side(clusterId) ; - - // Add the Detector element ID -- not sure if needed as we have the informations above - const InDetDD::SiDetectorElement* de = prd->detectorElement(); - uint64_t detElementId(0); - if(de){ - Identifier detId = de->identify(); - if ( detId.is_valid() ) { - detElementId = detId.get_compact(); - } - } - xprd->auxdata<uint64_t>("detectorElementID") = detElementId; - - //Add details about the individual hits - if(m_writeRDOinformation) - addRDOInformation(xprd, prd); - - - // Use the MultiTruth Collection to get a list of all true particle contributing to the cluster - if(prdmtColl){ - std::vector<int> barcodes; - //std::pair<PRD_MultiTruthCollection::const_iterator,PRD_MultiTruthCollection::const_iterator>; - auto range = prdmtColl->equal_range(clusterId); - for (auto i = range.first; i != range.second; ++i) { - barcodes.push_back( i->second.barcode() ); - } - xprd->auxdata< std::vector<int> >("truth_barcode") = barcodes; - } - - // Use the SDO Collection to get a list of all true particle contributing to the cluster per readout element - // Also get the energy deposited by each true particle per readout element - if( sdoCollection ){ - addSDOInformation( xprd, prd,sdoCollection); - } - - // Now Get the most detailed truth from the SiHits - // Note that this could get really slow if there are a lot of hits and clusters - if( sihitCollection ){ - addSiHitInformation( xprd, prd, sihitCollection); - } - } - } - ATH_MSG_DEBUG( " recorded SCT_PrepData objects: size " << xaod->size() ); - - m_firstEventWarnings = false; //disable one-time warnings - - return StatusCode::SUCCESS; -} - - - -void SCT_PrepDataToxAOD::addSDOInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::SCT_Cluster* prd, - const InDetSimDataCollection* sdoCollection ) const -{ - std::vector<int> sdo_word; - std::vector< std::vector< int > > sdo_depositsBarcode; - std::vector< std::vector< float > > sdo_depositsEnergy; - // find hit - for( const auto &hitIdentifier : prd->rdoList() ){ - auto pos = sdoCollection->find(hitIdentifier); - if( pos != sdoCollection->end() ) { - sdo_word.push_back( pos->second.word() ) ; - - std::vector< int > sdoDepBC; - std::vector< float > sdoDepEnergy; - for( auto deposit : pos->second.getdeposits() ){ - if(deposit.first){ - sdoDepBC.push_back( deposit.first->barcode()); - } else { - sdoDepBC.push_back( -1 ); - } - sdoDepEnergy.push_back( deposit.second ); - ATH_MSG_DEBUG(" SDO Energy Deposit " << deposit.second ) ; - } - sdo_depositsBarcode.push_back( sdoDepBC ); - sdo_depositsEnergy.push_back( sdoDepEnergy ); - } - } - xprd->auxdata< std::vector<int> >("sdo_words") = sdo_word; - xprd->auxdata< std::vector< std::vector<int> > >("sdo_depositsBarcode") = sdo_depositsBarcode; - xprd->auxdata< std::vector< std::vector<float> > >("sdo_depositsEnergy") = sdo_depositsEnergy; -} - - - -void SCT_PrepDataToxAOD::addSiHitInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::SCT_Cluster* prd, - const SiHitCollection* sihitCollection) const - - -{ - - std::vector<SiHit> matchingHits = findAllHitsCompatibleWithCluster( prd, sihitCollection ); - - int numHits = matchingHits.size(); - - std::vector<float> sihit_energyDeposit(numHits,0); - std::vector<float> sihit_meanTime(numHits,0); - std::vector<int> sihit_barcode(numHits,0); - - std::vector<float> sihit_startPosX(numHits,0); - std::vector<float> sihit_startPosY(numHits,0); - std::vector<float> sihit_startPosZ(numHits,0); - - std::vector<float> sihit_endPosX(numHits,0); - std::vector<float> sihit_endPosY(numHits,0); - std::vector<float> sihit_endPosZ(numHits,0); - - int hitNumber(0); - const InDetDD::SiDetectorElement* de = prd->detectorElement(); - if(de){ - for ( auto sihit : matchingHits ) { - sihit_energyDeposit[hitNumber] = sihit.energyLoss() ; - sihit_meanTime[hitNumber] = sihit.meanTime() ; - sihit_barcode[hitNumber] = sihit.particleLink().barcode() ; - - // Convert Simulation frame into reco frame - const HepGeom::Point3D<double>& startPos=sihit.localStartPosition(); - - Amg::Vector2D pos= de->hitLocalToLocal( startPos.z(), startPos.y() ); - sihit_startPosX[hitNumber] = pos[0]; - sihit_startPosY[hitNumber] = pos[1]; - sihit_startPosZ[hitNumber] = startPos.x(); - - - const HepGeom::Point3D<double>& endPos=sihit.localEndPosition(); - pos= de->hitLocalToLocal( endPos.z(), endPos.y() ); - sihit_endPosX[hitNumber] = pos[0]; - sihit_endPosY[hitNumber] = pos[1]; - sihit_endPosZ[hitNumber] = endPos.x(); - ++hitNumber; - } - } - - xprd->auxdata<std::vector<float> >("sihit_energyDeposit") = sihit_energyDeposit; - xprd->auxdata<std::vector<float> >("sihit_meanTime") = sihit_meanTime; - xprd->auxdata<std::vector<int> >("sihit_barcode") = sihit_barcode; - - xprd->auxdata<std::vector<float> >("sihit_startPosX") = sihit_startPosX; - xprd->auxdata<std::vector<float> >("sihit_startPosY") = sihit_startPosY; - xprd->auxdata<std::vector<float> >("sihit_startPosZ") = sihit_startPosZ; - - xprd->auxdata<std::vector<float> >("sihit_endPosX") = sihit_endPosX; - xprd->auxdata<std::vector<float> >("sihit_endPosY") = sihit_endPosY; - xprd->auxdata<std::vector<float> >("sihit_endPosZ") = sihit_endPosZ; - - -} - - - - - -std::vector<SiHit> SCT_PrepDataToxAOD::findAllHitsCompatibleWithCluster( const InDet::SCT_Cluster* prd, - const SiHitCollection* collection) const -{ - ATH_MSG_VERBOSE( "Got " << collection->size() << " SiHits to look through" ); - std::vector<SiHit> matchingHits; - - // Check if we have detector element -- needed to find the local position of the SiHits - const InDetDD::SiDetectorElement* de = prd->detectorElement(); - if(!de) - return matchingHits; - - std::vector<const SiHit* > multiMatchingHits; - - for ( const auto& siHit : *collection) { - // Check if it is a SCT hit - if( !siHit.isSCT() ) - continue; - - //Check if it is on the correct module - Identifier clusterId = prd->identify(); - - if( m_SCTHelper->barrel_ec(clusterId) != siHit.getBarrelEndcap() || - m_SCTHelper->layer_disk(clusterId)!= siHit.getLayerDisk() || - m_SCTHelper->phi_module(clusterId)!= siHit.getPhiModule() || - m_SCTHelper->eta_module(clusterId)!= siHit.getEtaModule() || - m_SCTHelper->side(clusterId) != siHit.getSide() ) - continue; - - // Now we have all hits in the module that match lets check to see if they match the cluster - // Must be within +/- 1 hits of any hit in the cluster to be included - ATH_MSG_DEBUG("Hit is on the same module"); - - HepGeom::Point3D<double> averagePosition = siHit.localStartPosition() + siHit.localEndPosition(); - averagePosition *= 0.5; - Amg::Vector2D pos = de->hitLocalToLocal( averagePosition.z(), averagePosition.y() ); - InDetDD::SiCellId diode = de->cellIdOfPosition(pos); - - for( const auto &hitIdentifier : prd->rdoList() ){ - //if( abs( int(diode.etaIndex()) - m_SCTHelper->eta_index( hitIdentifier ) ) <=1 ) - //if( abs( int(diode.phiIndex() - m_SCTHelper->phi_index( hitIdentifier ) ) <=1 ) - ATH_MSG_DEBUG("Truth Strip " << diode.phiIndex() << " Cluster Strip " << m_SCTHelper->strip( hitIdentifier ) ); - - if( abs( int(diode.phiIndex()) - m_SCTHelper->strip( hitIdentifier ) ) <=1) - { - multiMatchingHits.push_back(&siHit); - break; - } - } - } - - - //Now we will now make 1 SiHit for each true particle if the SiHits "touch" other - std::vector<const SiHit* >::iterator siHitIter = multiMatchingHits.begin(); - std::vector<const SiHit* >::iterator siHitIter2 = multiMatchingHits.begin(); - ATH_MSG_DEBUG( "Found " << multiMatchingHits.size() << " SiHit " ); - for ( ; siHitIter != multiMatchingHits.end(); siHitIter++) { - const SiHit* lowestXPos = *siHitIter; - const SiHit* highestXPos = *siHitIter; - - - // We will merge these hits - std::vector<const SiHit* > ajoiningHits; - ajoiningHits.push_back( *siHitIter ); - - siHitIter2 = siHitIter+1; - while ( siHitIter2 != multiMatchingHits.end() ) { - // Need to come from the same truth particle - if( (*siHitIter)->particleLink().barcode() != (*siHitIter2)->particleLink().barcode() ){ - ++siHitIter2; - continue; - } - - // Check to see if the SiHits are compatible with each other. - if (fabs((highestXPos->localEndPosition().x()-(*siHitIter2)->localStartPosition().x()))<0.00005 && - fabs((highestXPos->localEndPosition().y()-(*siHitIter2)->localStartPosition().y()))<0.00005 && - fabs((highestXPos->localEndPosition().z()-(*siHitIter2)->localStartPosition().z()))<0.00005 ) - { - highestXPos = *siHitIter2; - ajoiningHits.push_back( *siHitIter2 ); - // Dont use hit more than once - siHitIter2 = multiMatchingHits.erase( siHitIter2 ); - }else if (fabs((lowestXPos->localStartPosition().x()-(*siHitIter2)->localEndPosition().x()))<0.00005 && - fabs((lowestXPos->localStartPosition().y()-(*siHitIter2)->localEndPosition().y()))<0.00005 && - fabs((lowestXPos->localStartPosition().z()-(*siHitIter2)->localEndPosition().z()))<0.00005) - { - lowestXPos = *siHitIter2; - ajoiningHits.push_back( *siHitIter2 ); - // Dont use hit more than once - siHitIter2 = multiMatchingHits.erase( siHitIter2 ); - } else { - ++siHitIter2; - } - } - - if( ajoiningHits.size() == 0){ - ATH_MSG_WARNING("This should really never happen"); - continue; - }else if(ajoiningHits.size() == 1){ - // Copy Si Hit ready to return - matchingHits.push_back( *ajoiningHits[0] ); - continue; - } else { - // Build new SiHit and merge information together. - ATH_MSG_DEBUG("Merging " << ajoiningHits.size() << " SiHits together." ); - - - float energyDep(0); - float time(0); - for( auto& siHit : ajoiningHits){ - energyDep += siHit->energyLoss(); - time += siHit->meanTime(); - } - time /= (float)ajoiningHits.size(); - - matchingHits.push_back( SiHit(lowestXPos->localStartPosition(), - highestXPos->localEndPosition(), - energyDep, - time, - (*siHitIter)->particleLink().barcode(), - 1, // 0 for pixel 1 for SCT - (*siHitIter)->getBarrelEndcap(), - (*siHitIter)->getLayerDisk(), - (*siHitIter)->getEtaModule(), - (*siHitIter)->getPhiModule(), - (*siHitIter)->getSide() ) ); - } - } - - - return matchingHits; - -} - -void SCT_PrepDataToxAOD::addRDOInformation(xAOD::TrackMeasurementValidation* xprd, - const InDet::SCT_Cluster* prd) const{ - - - std::vector<int> strip; - std::vector<int> timebin; - std::vector<int> groupsize; - - for( const auto &hitIdentifier : prd->rdoList() ){ - auto result = m_IDtoRAWDataMap.find(hitIdentifier); - if( result != m_IDtoRAWDataMap.end() ){ - const SCT_RDORawData *sctRdo = result->second; - const SCT3_RawData* rdo3 = dynamic_cast<const SCT3_RawData*>(sctRdo); - int tbin(-1); - int gs(-1); - if (rdo3!=0){ - tbin = rdo3->getTimeBin(); - gs = rdo3->getGroupSize(); - } - timebin.push_back( tbin); - groupsize.push_back( gs); - strip.push_back(sctRdo->getStrip()); - } else { - timebin.push_back( -1 ); - strip.push_back( -1 ); - groupsize.push_back( -1 ); - } - } - - xprd->auxdata< std::vector<int> >("rdo_strip") = strip; - xprd->auxdata< std::vector<int> >("rdo_timebin") = timebin; - xprd->auxdata< std::vector<int> >("rdo_groupsize") = groupsize; - -} - -void SCT_PrepDataToxAOD::handle(const Incident& inc) { - - /// clear map of RDOs<->identifiers - if ( m_writeRDOinformation && inc.type() == IncidentType::EndEvent ){ - ATH_MSG_VERBOSE("'EndEvent' incident caught. Refreshing Cache."); - m_IDtoRAWDataMap.clear(); - } -} - - - - -///////////////////////////////////////////////////////////////////// -// -// Finalize method: -// -///////////////////////////////////////////////////////////////////// -StatusCode SCT_PrepDataToxAOD::finalize() -{ - return StatusCode::SUCCESS; -} diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h deleted file mode 100644 index d9821e973d4..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/SCT_PrepDataToxAOD.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// SCT_PrepDataToxAOD.h -// Header file for class SCT_PrepDataToxAOD -/////////////////////////////////////////////////////////////////// - -#ifndef SCT_PREPDATATOXAOD_H -#define SCT_PREPDATATOXAOD_H - -#include "AthenaBaseComps/AthAlgorithm.h" -#include "GaudiKernel/ServiceHandle.h" -#include "GaudiKernel/IIncidentListener.h" - -#include "InDetSimEvent/SiHitCollection.h" -#include "xAODTracking/TrackMeasurementValidation.h" - - -#include <string> - -class SCT_ID; -class SiHit; -class InDetSimDataCollection; -class SCT_RDORawData; -class Identifier; - -namespace InDet -{ - class SCT_Cluster; -} - - -class SCT_PrepDataToxAOD : public AthAlgorithm, virtual public IIncidentListener { - -public: - // Constructor with parameters: - SCT_PrepDataToxAOD(const std::string &name,ISvcLocator *pSvcLocator); - - // Basic algorithm methods: - virtual StatusCode initialize(); - virtual StatusCode execute(); - virtual StatusCode finalize(); - - virtual void handle(const Incident& inc); - -private: - - - void addSDOInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::SCT_Cluster* prd, - const InDetSimDataCollection* sdoCollection ) const; - - - void addSiHitInformation( xAOD::TrackMeasurementValidation* xprd, - const InDet::SCT_Cluster* prd, - const SiHitCollection* collection) const; - - std::vector<SiHit> findAllHitsCompatibleWithCluster(const InDet::SCT_Cluster* prd, - const SiHitCollection* collection) const; - - void addRDOInformation(xAOD::TrackMeasurementValidation*, const InDet::SCT_Cluster*) const; - - - ServiceHandle<IIncidentSvc> m_incidentSvc; //!< IncidentSvc to catch begin of event and end of envent - - const SCT_ID *m_SCTHelper; - std::string m_clustercontainer; - std::string m_SDOcontainer; - std::string m_sihitContainer; - std::string m_multiTruth; - - bool m_useTruthInfo; - bool m_writeRDOinformation; - bool m_writeSDOs; - bool m_writeSiHits; - - std::map< Identifier, const SCT_RDORawData* > m_IDtoRAWDataMap; - - // --- private members - bool m_firstEventWarnings; - -}; - - -#endif diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.cxx deleted file mode 100644 index 72e65dc383d..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.cxx +++ /dev/null @@ -1,342 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// TRT_PrepDataToxAOD.cxx -// Implementation file for class TRT_PrepDataToxAOD -/////////////////////////////////////////////////////////////////// - -#include "TRT_PrepDataToxAOD.h" - -#include "InDetPrepRawData/TRT_DriftCircleContainer.h" -//#include "EventPrimitives/EventPrimitivesHelpers.h" - -#include "xAODTracking/TrackMeasurementValidation.h" -#include "xAODTracking/TrackMeasurementValidationContainer.h" -#include "xAODTracking/TrackMeasurementValidationAuxContainer.h" - - -#include "Identifier/Identifier.h" -#include "InDetIdentifier/TRT_ID.h" - - -#include "TrkSurfaces/Surface.h" -#include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h" -#include "TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h" - -#include "TrkTruthData/PRD_MultiTruthCollection.h" -#include "InDetSimEvent/TRTUncompressedHitCollection.h" -#include "InDetSimData/InDetSimDataCollection.h" - - -///////////////////////////////////////////////////////////////////// -// -// Constructor with parameters: -// -///////////////////////////////////////////////////////////////////// -TRT_PrepDataToxAOD::TRT_PrepDataToxAOD(const std::string &name, ISvcLocator *pSvcLocator) : - AthAlgorithm(name,pSvcLocator), - m_driftFunctionTool("TRT_DriftFunctionTool"), - m_trtcaldbSvc("TRT_CalDbSvc", name), - m_neighbourSvc("TRT_StrawNeighbourSvc", name), - m_TRTStrawSummarySvc("InDetTRTStrawStatusSummarySvc",name), - m_TRTHelper(0), - m_firstEventWarnings(true) -{ - // --- Steering and configuration flags - declareProperty("UseTruthInfo", m_useTruthInfo=false); - declareProperty("WriteSDOs", m_writeSDOs = true); - - // --- Configuration keys - declareProperty("DriftCircleContainer", m_driftcirclecontainer="TRT_DriftCircles"); - declareProperty("MC_TRTUncompressedHit", m_SDOcontainer="TRT_SDO_Map"); - declareProperty("PRD_MultiTruth", m_multiTruth="PRD_MultiTruthTRT"); - - // --- Services and Tools - declareProperty("TRTDriftFunctionTool", m_driftFunctionTool); - declareProperty("TRTCalDbSvc", m_trtcaldbSvc); - declareProperty("NeighbourSvc", m_neighbourSvc); - declareProperty("TRTStrawSummarySvc", m_TRTStrawSummarySvc); - declareProperty("NeighbourSvc", m_neighbourSvc); - -} - -///////////////////////////////////////////////////////////////////// -// -// Initialize method: -// -///////////////////////////////////////////////////////////////////// -StatusCode TRT_PrepDataToxAOD::initialize() -{ - ATH_MSG_DEBUG("Initialize"); - - // --- Retrieve services and tools - CHECK ( detStore()->retrieve(m_TRTHelper, "TRT_ID") ); - - CHECK ( m_neighbourSvc.retrieve() ); - - CHECK ( m_trtcaldbSvc.retrieve() ); - - CHECK ( m_TRTStrawSummarySvc.retrieve() ); - - CHECK( m_driftFunctionTool.retrieve() ); - - return StatusCode::SUCCESS; -} - -///////////////////////////////////////////////////////////////////// -// -// Execute method: -// -///////////////////////////////////////////////////////////////////// -StatusCode TRT_PrepDataToxAOD::execute() -{ - //This is needed for the algorithm. If not there, it fails - const InDet::TRT_DriftCircleContainer* m_trtPrds = 0; - if( evtStore()->retrieve(m_trtPrds,m_driftcirclecontainer).isFailure() ) { - ATH_MSG_ERROR("Cannot retrieve TRT PrepDataContainer " << m_driftcirclecontainer); - return StatusCode::FAILURE; - } - - //This is optional for the algorithm. If not there, just print a one-time warning - // On ESD - const PRD_MultiTruthCollection* m_prdmtColl = 0; - if (m_useTruthInfo) { - if ( evtStore()->contains<PRD_MultiTruthCollection>(m_multiTruth) ) { - if ( evtStore()->retrieve(m_prdmtColl, m_multiTruth).isFailure() ) { - ATH_MSG_ERROR("ERROR in retrieving PRD MultiTruth collection although available (" << m_multiTruth << ")."); - return StatusCode::FAILURE; - } - } else { - if (m_firstEventWarnings) { - ATH_MSG_WARNING("PRD MultiTruth collection not available (" << m_multiTruth << "). Skipping this info although requested."); - m_prdmtColl = 0; - } - } - } - - //This is optional for the algorithm. If not there, just print a one-time warning - // On RDO - const InDetSimDataCollection* m_sdoCollection = 0; - if (m_useTruthInfo && m_writeSDOs) { - if ( evtStore()->contains<InDetSimDataCollection>(m_SDOcontainer) ) { - if ( evtStore()->retrieve(m_sdoCollection, m_SDOcontainer).isFailure() ) { - ATH_MSG_ERROR("ERROR in retrieving SDO container despite being available. Collection = " << m_SDOcontainer); - return StatusCode::FAILURE; - } - } else { - if (m_firstEventWarnings) { - ATH_MSG_WARNING("SDO Collection not available (" << m_SDOcontainer << "). Skipping this info although requested."); - m_sdoCollection = 0; - } - } - } - - - // Create the xAOD container and its auxiliary store: - xAOD::TrackMeasurementValidationContainer* xaod = new xAOD::TrackMeasurementValidationContainer(); - CHECK( evtStore()->record( xaod, m_driftcirclecontainer ) ); - xAOD::TrackMeasurementValidationAuxContainer* aux = new xAOD::TrackMeasurementValidationAuxContainer(); - CHECK( evtStore()->record( aux, m_driftcirclecontainer + "Aux." ) ); - xaod->setStore( aux ); - - std::vector<unsigned int>* offsets = new std::vector<unsigned int>( m_TRTHelper->straw_layer_hash_max() , 0 ); - CHECK( evtStore()->record( offsets, m_driftcirclecontainer + "Offsets" ) ); - - InDet::TRT_DriftCircleContainer::const_iterator it = m_trtPrds->begin(); - InDet::TRT_DriftCircleContainer::const_iterator it_end = m_trtPrds->end(); - unsigned int counter(0); - for( ; it!=it_end; ++it ) { - - //Fill Offset container - if( m_TRTHelper->straw_layer_hash_max() <= (*it)->identifyHash() ) - ATH_MSG_ERROR("My assumption about the maximum size of the hash was wrong"); - (*offsets)[ (*it)->identifyHash() ] = counter; - - // skip empty collections - if( (*it)->empty() ) continue; - - // loop over collection and convert to xAOD - for( const auto& prd : **it ){ - - ++counter; - - // create and add xAOD object - xAOD::TrackMeasurementValidation* xprd = new xAOD::TrackMeasurementValidation(); - xaod->push_back(xprd); - - Identifier surfaceID = prd->identify(); - - xprd->setIdentifier(surfaceID.get_compact()); - - - // Save ID info: - xprd->auxdata<int>("bec") = m_TRTHelper->barrel_ec( surfaceID ) ; - xprd->auxdata<int>("layer") = m_TRTHelper->layer_or_wheel(surfaceID ) ; - xprd->auxdata<int>("phi_module") = m_TRTHelper->phi_module( surfaceID ) ; - xprd->auxdata<int>("strawlayer") = m_TRTHelper->straw_layer( surfaceID ) ; - xprd->auxdata<int>("strawnumber") = m_TRTHelper->straw( surfaceID ) ; - int chip=0; - int board=-1; - m_neighbourSvc->getChip(surfaceID,chip); - if(abs(m_TRTHelper->barrel_ec(surfaceID))<2) - board=m_neighbourSvc->chipToBoardBarrel(chip,m_TRTHelper->layer_or_wheel(surfaceID)); - else if (chip<12) - board=0; - else { - chip=chip-20; - board=1; - } - xprd->auxdata<int>("board") = board ; - xprd->auxdata<int>("chip") = chip ; - - - //Set Local Position - const Amg::Vector2D& locpos = prd->localPosition(); - float locY(0.); - float locX = locpos.x(); - if ( !(std::isinf(locpos.y()) || std::isnan(locpos.y())) ){ - if (locpos.y()>=1e-07) - locY=locpos.y(); - } else { - locY = -9999.; - } - - // Set local error matrix - xprd->setLocalPosition(locX,locY); - - const Amg::MatrixX& localCov = prd->localCovariance(); - if(localCov.size() == 1){ - xprd->setLocalPositionError( localCov(0,0), 0., 0. ); - } else if(localCov.size() == 2){ - xprd->setLocalPositionError( localCov(0,0), localCov(1,1), localCov(0,1) ); - } else { - xprd->setLocalPositionError(0.,0.,0.); - } - - - //Set Global position - const Amg::Vector3D* gpos = prd->detectorElement()->surface(surfaceID).localToGlobal(prd->localPosition()); - if(gpos){ - xprd->setGlobalPosition(gpos->x(),gpos->y(),gpos->z()); - delete gpos; - } - - - //TRT hit bit word - unsigned int word = prd->getWord(); - - //TRTCond::RtRelation const *rtr = m_trtcaldbSvc->getRtRelation(surfaceID); - double tot = prd->timeOverThreshold(); - bool isvalid=false; - xprd->auxdata<float>("drifttime") = prd->driftTime(isvalid) ; - xprd->auxdata<int>("status") = isvalid; - xprd->auxdata<float>("tot") = tot ; - xprd->auxdata<char>("isHT") = prd->highLevel() ; - xprd->auxdata<float>("T0") = m_trtcaldbSvc->getT0(surfaceID) ; - - - // Save time info: - xprd->auxdata<float>("leadingEdge") = prd->rawDriftTime(); - - //Drift Time corrections - xprd->auxdata<float>("driftTimeToTCorrection") = m_driftFunctionTool->driftTimeToTCorrection(tot,surfaceID); - if(prd->highLevel()) - xprd->auxdata<float>("driftTimeHTCorrection") = m_driftFunctionTool->driftTimeHTCorrection(surfaceID); - else - xprd->auxdata<float>("driftTimeHTCorrection") = 0; - - - //HT Bit patterens - unsigned int theWord = word & 0x04020100; //HT bits mask - char highThreshold = 0; - //this is the agreed-upon binning for HT bit patterns... - if (theWord == 0x04000000) //pattern 1 - highThreshold = 1; - else if (theWord == 0x00020000) //pattern 2 - highThreshold = 2; - else if (theWord == 0x00000100) //pattern 3 - highThreshold = 3; - else if (theWord == 0x04020000) //pattern 4 - highThreshold = 4; - else if (theWord == 0x00020100) //pattern 5 - highThreshold = 5; - else if (theWord == 0x04000100) //pattern 6 - highThreshold = 6; - else if (theWord == 0x04020100) //pattern 7 - highThreshold = 7; - - xprd->auxdata<char>("highThreshold") = highThreshold; - - //Full bit patternword from the TRT - xprd->auxdata<unsigned int>("bitPattern") = word; - - char isArgonStraw = 0; - if (!m_TRTStrawSummarySvc.empty()) { - if (m_TRTStrawSummarySvc->getStatusHT(surfaceID) != TRTCond::StrawStatus::Good) { - isArgonStraw = 1; - } - } - xprd->auxdata<char>("isArgon") = isArgonStraw ; - - - // Use the MultiTruth Collection to get a list of all true particle contributing to the DC - if(m_prdmtColl){ - std::vector<int> barcodes; - auto range = m_prdmtColl->equal_range(surfaceID); - for (auto i = range.first; i != range.second; ++i) { - barcodes.push_back( i->second.barcode() ); - } - xprd->auxdata< std::vector<int> >("truth_barcode") = barcodes; - } - - if( m_sdoCollection ){ - // find hit - auto pos = m_sdoCollection->find(surfaceID); - int sdo_word = -1000000; - if( pos != m_sdoCollection->end() ) { - sdo_word = pos->second.word(); - } - xprd->auxdata<int>("sdo_word") = sdo_word; - } - - } - } - ATH_MSG_DEBUG( " recorded TRT_PrepData obejcts: size " << xaod->size() ); - - - - // Code to test that something was added to SG: - StatusCode sc = StatusCode::SUCCESS; - if (msgLvl(MSG::DEBUG)){ - const xAOD::TrackMeasurementValidationContainer* xaod2; - sc = evtStore()->retrieve(xaod2, m_driftcirclecontainer); - if (sc.isFailure()) { - ATH_MSG_DEBUG("Failed to retrieve " << m_driftcirclecontainer); - } - else ATH_MSG_DEBUG("xAOD info retreived " << m_driftcirclecontainer << "\t" << xaod2->size()); - - const xAOD::TrackMeasurementValidationAuxContainer* aux2; - sc = evtStore()->retrieve(aux2, (m_driftcirclecontainer+ "Aux.")); - if (sc.isFailure()) { - ATH_MSG_DEBUG("Failed to retrieve " << m_driftcirclecontainer<< "Aux."); - } - else ATH_MSG_DEBUG("xAOD info retrieved " << m_driftcirclecontainer << "Aux. \t"); - } - - // --- end of event. Disable one-time warnings - m_firstEventWarnings = false; - - return sc; -} - -///////////////////////////////////////////////////////////////////// -// -// Finalize method: -// -///////////////////////////////////////////////////////////////////// -StatusCode TRT_PrepDataToxAOD::finalize() -{ - return StatusCode::SUCCESS; -} diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.h b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.h deleted file mode 100644 index 8a3fd43579b..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/TRT_PrepDataToxAOD.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// TRT_PrepDataToxAOD.h -// Header file for class TRT_PrepDataToxAOD -/////////////////////////////////////////////////////////////////// - -#ifndef TRT_PREPDATATOXAOD_H -#define TRT_PREPDATATOXAOD_H - -#include "AthenaBaseComps/AthAlgorithm.h" -#include "GaudiKernel/ServiceHandle.h" -#include "GaudiKernel/ToolHandle.h" - -#include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h" -#include "TRT_ConditionsServices/ITRT_CalDbSvc.h" -#include "TRT_ConditionsServices/ITRT_StrawStatusSummarySvc.h" -#include "TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h" - - -#include <string> - -class TRT_ID; -class ITRT_CalDbSvc ; -class ITRT_DriftFunctionTool; -class ITRT_StrawSummarySvc; - - -class TRT_PrepDataToxAOD : public AthAlgorithm { - -public: - // Constructor with parameters: - TRT_PrepDataToxAOD(const std::string &name,ISvcLocator *pSvcLocator); - - // Basic algorithm methods: - virtual StatusCode initialize(); - virtual StatusCode execute(); - virtual StatusCode finalize(); - -private: - - // --- Steering and configuration flags - bool m_useTruthInfo; - bool m_writeSDOs; - - // --- Configuration keys - std::string m_driftcirclecontainer; - std::string m_SDOcontainer; - std::string m_multiTruth; - - // --- Services and Tools - ToolHandle< ITRT_DriftFunctionTool > m_driftFunctionTool ; //!< DriftFunctionTool - ServiceHandle<ITRT_CalDbSvc> m_trtcaldbSvc ; - ServiceHandle<ITRT_StrawNeighbourSvc> m_neighbourSvc ; - ServiceHandle<ITRT_StrawStatusSummarySvc> m_TRTStrawSummarySvc; - const TRT_ID *m_TRTHelper; - - // ---- Internal members - bool m_firstEventWarnings; - -}; - - -#endif diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_entries.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_entries.cxx deleted file mode 100755 index 5313b9af720..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_entries.cxx +++ /dev/null @@ -1,18 +0,0 @@ -#include "GaudiKernel/DeclareFactoryEntries.h" -#include "../TRT_PrepDataToxAOD.h" -#include "../SCT_PrepDataToxAOD.h" -#include "../PixelPrepDataToxAOD.h" - - -//using namespace InDet; - -DECLARE_ALGORITHM_FACTORY( TRT_PrepDataToxAOD ) -DECLARE_ALGORITHM_FACTORY( SCT_PrepDataToxAOD ) -DECLARE_ALGORITHM_FACTORY( PixelPrepDataToxAOD ) - -DECLARE_FACTORY_ENTRIES( InDetPrepRawDataToxAOD ) -{ - DECLARE_ALGORITHM( TRT_PrepDataToxAOD ) - DECLARE_ALGORITHM( SCT_PrepDataToxAOD ) - DECLARE_ALGORITHM( PixelPrepDataToxAOD ) -} diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_load.cxx b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_load.cxx deleted file mode 100755 index 249ab411bec..00000000000 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/src/components/InDetPrepRawDataToxAOD_load.cxx +++ /dev/null @@ -1,4 +0,0 @@ -#include "GaudiKernel/LoadFactoryEntries.h" - -LOAD_FACTORY_ENTRIES( InDetPrepRawDataToxAOD ) - -- GitLab