diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py index 6cf303488b70f74f52b061c851f71c1ccd0cd3af..4d1129310290ee10bff8d32ed3810702f2838d03 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py @@ -9,6 +9,8 @@ doInDetGlobalTrackMonAlg = True doInDetGlobalPrimaryVertexMonAlg = True +doInDetGlobalBeamSpotMonAlg = True + from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalTrackMonAlg from InDetGlobalMonitoringRun3Test.InDetGlobalTrackMonAlgCfg import InDetGlobalTrackMonAlgCfg @@ -16,12 +18,14 @@ from InDetGlobalMonitoringRun3Test.InDetGlobalTrackMonAlgCfg import InDetGlobalT from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalPrimaryVertexMonAlg from InDetGlobalMonitoringRun3Test.InDetGlobalPrimaryVertexMonAlgCfg import InDetGlobalPrimaryVertexMonAlgCfg +from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalBeamSpotMonAlg +from InDetGlobalMonitoringRun3Test.InDetGlobalBeamSpotMonAlgCfg import InDetGlobalBeamSpotMonAlgCfg -from InDetRecExample.InDetKeys import InDetKeys - +from InDetRecExample.InDetKeys import InDetKeys +from AthenaMonitoring.DQMonFlags import DQMonFlags kwargsInDetGlobalTrackMonAlg = { - 'DoIBL' : True, #InDetFlags.doIBL(), #Turn on/off IBL histograms + 'DoIBL' : True, #InDetFlags.doIBL(), #Turn on/off IBL histograms 'TrackName' : 'CombinedInDetTracks', #InDetKeys.Tracks() 'TrackName2' : 'CombinedInDetTracks', # 'TrackName3' : 'CombinedInDetTracks', # @@ -34,7 +38,14 @@ kwargsInDetGlobalPrimaryVertexMonAlg = { 'doEnhancedMonitoring' : False # InDetFlags.doMonitoringPrimaryVertexingEnhanced() } -from AthenaMonitoring.DQMonFlags import DQMonFlags +kwargsInDetGlobalBeamSpotMonAlg = { + 'BeamSpotKey' : 'BeamSpotData', #InDetKeys.BeamSpotData(), + 'vxContainerName' : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(), + 'trackContainerName' : 'InDetTrackParticles', #InDetKeys.xAODTrackParticleContainer(), + 'useBeamspot' : True, # InDetFlags.useBeamConstraint() + 'vxContainerWithBeamConstraint' : False # InDetFlags.useBeamConstraint() +} + # old magic from AthenaMonitoring import AthMonitorCfgHelperOld @@ -62,9 +73,18 @@ if doInDetGlobalTrackMonAlg: InDetGlobalTrackMonAlgCfg(helper, inDetGlobalTrackMonAlg, **kwargsInDetGlobalTrackMonAlg) if doInDetGlobalPrimaryVertexMonAlg: - myInDetGlobalPrimaryVertexMonAlg = helper.addAlgorithm(InDetGlobalPrimaryVertexMonAlg, 'InDetGlobalPrimaryVertexMonAlg') + inDetGlobalPrimaryVertexMonAlg = helper.addAlgorithm(InDetGlobalPrimaryVertexMonAlg, 'InDetGlobalPrimaryVertexMonAlg') for k, v in kwargsInDetGlobalPrimaryVertexMonAlg.items(): - setattr(myInDetGlobalPrimaryVertexMonAlg, k, v) - InDetGlobalPrimaryVertexMonAlgCfg(helper, myInDetGlobalPrimaryVertexMonAlg, **kwargsInDetGlobalPrimaryVertexMonAlg) + setattr(inDetGlobalPrimaryVertexMonAlg, k, v) + + InDetGlobalPrimaryVertexMonAlgCfg(helper, inDetGlobalPrimaryVertexMonAlg, **kwargsInDetGlobalPrimaryVertexMonAlg) + + +if doInDetGlobalBeamSpotMonAlg: + inDetGlobalBeamSpotMonAlg = helper.addAlgorithm(InDetGlobalBeamSpotMonAlg, 'InDetGlobalBeamSpotMonAlg') + for k, v in kwargsInDetGlobalBeamSpotMonAlg.items(): + setattr(inDetGlobalBeamSpotMonAlg, k, v) + + InDetGlobalBeamSpotMonAlgCfg(helper, inDetGlobalBeamSpotMonAlg, **kwargsInDetGlobalBeamSpotMonAlg) topSequence += helper.result() diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h index 3533eb9af3f2f010e55e7ae8f5627e35c24e571b..224e80a663636cc78d81bc47be5d5b677fc0b996 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h @@ -14,7 +14,7 @@ // InDetAlignmentMonitoring under the name InDetAlignMonBeamSpot. // // Written in March 2008 by Juerg Beringer (LBNL) -// Adapted to AthenaMT 2020 by Per Johansson (Sheffield University) +// Adapted to AthenaMT 2020 by Per Johansson (Sheffield University) and Leonid Serkin (ICTP) // // ******************************************************************************** @@ -22,32 +22,12 @@ #define InDetGlobalBeamSpotMonAlg_H #include "AthenaMonitoring/AthMonitorAlgorithm.h" -#include "AthenaMonitoringKernel/Monitored.h" #include "StoreGate/ReadHandleKey.h" -#include <algorithm> - -// tracking -#include "TrkToolInterfaces/ITrackHoleSearchTool.h" -#include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h" -#include "TrkTrack/TrackCollection.h" -#include "TrkTrackSummary/TrackSummary.h" -#include "TrkMeasurementBase/MeasurementBase.h" -#include "TrkRIO_OnTrack/RIO_OnTrack.h" -#include "InDetReadoutGeometry/SiDetectorElement.h" -#include "InDetRIO_OnTrack/SiClusterOnTrack.h" -#include "TrkToolInterfaces/ITrackSummaryTool.h" // xAOD #include "xAODTracking/TrackParticleContainer.h" #include "xAODTracking/VertexContainer.h" -#include "xAODTracking/Vertex.h" - -//for Amg::error helper function: -#include "EventPrimitives/EventPrimitives.h" -#include "EventPrimitives/EventPrimitivesHelpers.h" - -#include "InDetConditionsSummaryService/IInDetConditionsTool.h" // Beam condition include(s): #include "BeamSpotConditionsData/BeamSpotData.h" @@ -55,32 +35,28 @@ //#include <vector> #include <string> -//namespace Trk { -// class ITrackHoleSearchTool;/ -//} - class InDetGlobalBeamSpotMonAlg : public AthMonitorAlgorithm { - + public: - + InDetGlobalBeamSpotMonAlg( const std::string & name, ISvcLocator* pSvcLocator); virtual ~InDetGlobalBeamSpotMonAlg(); virtual StatusCode initialize() override; virtual StatusCode fillHistograms(const EventContext& ctx) const override; std::string findComponentString(int bec, int ld) const; - + private: - + SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }; std::string m_stream; - + bool m_useBeamspot; SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerName{this,"vxContainerName","PrimaryVertices","Vertex Container for Global Beamspot Monitoring"}; bool m_vxContainerWithBeamConstraint; - + SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackContainerName{this,"trackContainerName","InDetTrackParticles","TrackParticle container for Global Beamspot Monitoring"}; - + std::string m_histFolder; std::string m_triggerChainName; unsigned int m_minTracksPerVtx; diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h index f1b2221c12fc3f05e605d959d94da868d1bc208c..84337da5068c473a4fb56a62e69191395bbbb334 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h @@ -17,72 +17,61 @@ #define InDetGlobalPrimaryVertexMonAlg_H #include "AthenaMonitoring/AthMonitorAlgorithm.h" -#include "AthenaMonitoringKernel/Monitored.h" // tracking vertex #include "StoreGate/ReadHandleKey.h" #include "xAODTracking/VertexContainer.h" -#include "xAODTracking/Vertex.h" - -#include <string> -#include <algorithm> - -//for Amg::error helper function: -#include "EventPrimitives/EventPrimitivesHelpers.h" //Standard c++ #include <string> -#include <map> -#include <vector> - - //------------------------------ namespace Trk { + class Vertex; class VxCandidate; } class InDetGlobalPrimaryVertexMonAlg : public AthMonitorAlgorithm { - + public: - + InDetGlobalPrimaryVertexMonAlg( const std::string & name, ISvcLocator* pSvcLocator ); virtual ~InDetGlobalPrimaryVertexMonAlg(); virtual StatusCode initialize() override; virtual StatusCode fillHistograms( const EventContext& ctx ) const override; std::string findComponentString(int bec, int ld) const; - - + + private: - + SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerName{this,"vxContainerName","PrimaryVertices","Primary Vertices for Global Monitoring"}; SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerNameWithoutBeamConstraint{this,"vxContainerNameWithOutBeamConstraint","VxPrimaryCandidateWithBeamConstraint","Vertices without beam constraint for Global Monitoring"}; SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerNameSplit{this,"vxContainerNameSplit","VxPrimaryCandidateSplitStream","Split Vertices for Global Monitoring"}; - + int m_splitVertexTrkInvFraction; ///< store inverse of the fraction of input tracks used for probe vertex (1:N) float m_distanceSplitVxMatch; ///< store maximum distance for matching split vertices to original non-BC vertex /** store metric to be used for split vertex matching in selection efficiency - * Values currently implemented: - * 0: dummy metric; returns zero distance - * 1: simple delta-z metric - * 2: 3-D distance divided by the error (dominated by Delta z) - * 3: quadratic sum of distances divided by their errors in the 3 directions. Expected RMS = 1. Default. - */ - + * Values currently implemented: + * 0: dummy metric; returns zero distance + * 1: simple delta-z metric + * 2: 3-D distance divided by the error (dominated by Delta z) + * 3: quadratic sum of distances divided by their errors in the 3 directions. Expected RMS = 1. Default. + */ + int m_splitMatchingMetric; bool m_doEnhancedMonitoring; // trigger the enhanced monitoring (to be activated by InDetFlags.doMonitoringPrimaryVertexingEnhanced because split vertexing and vertexing with no beam constraint need to be run as well) - -// Helper functions + + // Helper functions /** Returns matching distance between split and original vertex. - * @param splitVx pointer to split vertex - * @param originalVx pointer to original non-BC vertex - * @return distance for matching split to original Vertex - */ - double GetSplitMatchDistance(const xAOD::Vertex* splitVx, const xAOD::Vertex* originalVx); - + * @param splitVx pointer to split vertex + * @param originalVx pointer to original non-BC vertex + * @return distance for matching split to original Vertex + */ + double getSplitMatchDistance(const xAOD::Vertex* splitVx, const xAOD::Vertex* originalVx); + }; #endif diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h index 9324bd880dd95f093ac1b0fdb2fb9e56d34d5e42..178c499e7afdf1f9058a81f0b5415119cb145ee9 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h @@ -19,42 +19,30 @@ #include "AthenaMonitoring/AthMonitorAlgorithm.h" #include "AthenaMonitoringKernel/Monitored.h" -#include "PixelGeoModel/IBLParameterSvc.h" +#include "GaudiKernel/EventContext.h" +#include "PixelGeoModel/IBLParameterSvc.h" +#include "InDetPrepRawData/PixelClusterContainer.h" //Detector Managers #include "AtlasDetDescr/AtlasDetectorID.h" -#include "InDetIdentifier/PixelID.h" -#include "InDetIdentifier/SCT_ID.h" -#include "InDetIdentifier/TRT_ID.h" - #include "InDetConditionsSummaryService/IInDetConditionsTool.h" #include "StoreGate/ReadHandleKey.h" -#include "InDetPrepRawData/PixelClusterContainer.h" //------------TrackMon------------ -#include <algorithm> #include "TrkToolInterfaces/ITrackHoleSearchTool.h" #include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h" +#include "TrkTrack/Track.h" #include "TrkTrack/TrackCollection.h" + #include "TrkTrackSummary/TrackSummary.h" -#include "TrkMeasurementBase/MeasurementBase.h" -#include "TrkRIO_OnTrack/RIO_OnTrack.h" -#include "InDetReadoutGeometry/SiDetectorElement.h" -#include "InDetRIO_OnTrack/SiClusterOnTrack.h" #include "TrkToolInterfaces/ITrackSummaryTool.h" - - -//for Amg::error helper function: -#include "EventPrimitives/EventPrimitivesHelpers.h" - //Standard c++ #include <string> -#include <map> -#include <vector> +#include <memory> @@ -69,8 +57,13 @@ namespace InDet { } -class InDetGlobalTrackMonAlg : public AthMonitorAlgorithm { +//namespace Trk { +// class ITrackSummaryTool; +//} + +class InDetGlobalTrackMonAlg : public AthMonitorAlgorithm { + public: InDetGlobalTrackMonAlg( const std::string& name, ISvcLocator* pSvcLocator ); @@ -78,70 +71,66 @@ class InDetGlobalTrackMonAlg : public AthMonitorAlgorithm { virtual StatusCode initialize() override; virtual StatusCode fillHistograms( const EventContext& ctx ) const override; std::string findComponentString(int bec, int ld) const; - - + + // Functions to fill individual sets of histograms - void FillForwardTracks( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); - void FillEtaPhi( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); - void FillHits( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); - void FillTIDE(); - void FillHoles( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); - void FillHitMaps( const Trk::Track *track ); - void FillHoleMaps( const Trk::Track *track ); - + void fillForwardTracks( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); + void fillEtaPhi( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); + void fillHits( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); + void fillTIDE(); + void fillHoles( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ); + void fillHitMaps( const Trk::Track *track ); + void fillHoleMaps( const Trk::Track *track ); + private: - + ToolHandle <Trk::ITrackHoleSearchTool> m_holes_search_tool; // new - - ToolHandle<InDet::IInDetTrackSelectionTool> m_trackSelTool; // baseline - ToolHandle< InDet::IInDetTrackSelectionTool > m_tight_trackSelTool; //tightw - - - - ToolHandle<IInDetConditionsTool> m_pixelCondSummaryTool{this, "PixelConditionsSummaryTool", "PixelConditionsSummaryTool", "Tool to retrieve Pixel Conditions summary"}; - - PublicToolHandle <Trk::ITrackSummaryTool> m_trkSummaryTool - {this,"TrackSummaryTool","Trk::TrackSummaryTool/InDetTrackSummaryTool",""}; - - - - + + ToolHandle <InDet::IInDetTrackSelectionTool> m_trackSelTool; // baseline + ToolHandle <InDet::IInDetTrackSelectionTool > m_tight_trackSelTool; //tightw + + ToolHandle <IInDetConditionsTool> m_pixelCondSummaryTool{this, "PixelConditionsSummaryTool", "PixelConditionsSummaryTool", "Tool to retrieve Pixel Conditions summary"}; + + ToolHandle <Trk::ITrackSummaryTool> m_trkSummaryTool{this,"TrackSummaryTool","Trk::TrackSummaryTool/InDetTrackSummaryTool",""}; + + + const AtlasDetectorID* m_atlasid; //tracks only - + // the TRT ID helper const TRT_ID *m_trtID; - + // the SCT ID helper const SCT_ID *m_sctID; - + // the Pixel ID helper const PixelID *m_pixelID; - - + + SG::ReadHandleKey<InDet::PixelClusterContainer> m_clustersKey{this, "ClusterName", "PixelClusters", "pixel cluster data key" }; SG::ReadHandleKey<TrackCollection> m_tracksKey {this,"TrackName", "CombinedInDetTracks", "track data key"}; SG::ReadHandleKey<TrackCollection> m_CombinedTracksName{this,"TrackName2","CombinedInDetTracks", "track data key"}; SG::ReadHandleKey<TrackCollection> m_ForwardTracksName {this,"TrackName3","CombinedInDetTracks", "track data key"}; - - + + ServiceHandle <IBLParameterSvc> m_IBLParameterSvc; - - - + + + //Switch if LB accounting should be done bool m_doLumiblock; - + // Switch for hole searching bool m_doHolePlots; bool m_DoHoles_Search; // Switch for hitmaps bool m_doHitMaps; - + bool m_doTide; bool m_doTideResiduals; bool m_doForwardTracks; bool m_doIBL; - + }; #endif diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py index 140658e67644f517574a3b35368eb2a13deb3374..89b5e2e1f360320a206757d4c35272e1f25f338a 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py @@ -2,16 +2,17 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -'''@file InDetGlobalBeamSpotMonAlgCfg.py -@author PerJohansson -@date November 2019 +""" +@file InDetGlobalBeamSpotMonAlgCfg.py +@author Leonid Serkin and Per Johansson +@date April 2020 @brief Configuration for Run 3 based on InDetGlobalBeamSpotMonTool.cxx -''' +""" def InDetGlobalBeamSpotMonAlgCfg(helper, alg, **kwargs): '''Function to configures some algorithms in the monitoring system.''' - - #Values + + # Values set by default here m_useBeamspot = True expert = True m_vxContainerWithBeamConstraint = False @@ -19,7 +20,7 @@ def InDetGlobalBeamSpotMonAlgCfg(helper, alg, **kwargs): # this creates a "trackGroup" called "alg" which will put its histograms into the subdirectory "BeamSpot" bsGroup = helper.addGroup(alg, 'BeamSpot') pathbs = '/InDetGlobal/BeamSpot' - + # Histograms for track-based beam spot monitoring: varName = 'm_trkD0,m_trkD0Phi;trkDPhi' bsGroup.defineHistogram(varName,type="TH2F",title="DCA vs Phi; #varphi (rad);d_{0} (#mum)", path=pathbs, xbins=100, xmin=-3.5, xmax=3.5, ybins=100, ymin=-1000, ymax=1000) diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py index e501b6ca1d83bd95edd121b7e2438433379acfb4..58807dec5e6aa53aee2fb781192e8396f6f4ae58 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py @@ -13,71 +13,72 @@ def InDetGlobalMonitoringRun3TestConfig(flags): from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator acc = ComponentAccumulator() - + # run on RAW only if flags.DQ.Environment in ('online', 'tier0', 'tier0Raw'): -## from InDetRecExample.InDetKeys import InDetKeys ## not sure it works now - + ## from InDetRecExample.InDetKeys import InDetKeys ## not sure it works now + ########### here begins InDetGlobalTrackMonAlg ########### kwargsInDetGlobalTrackMonAlg = { 'DoIBL' : True, #InDetFlags.doIBL(), #Turn on/off IBL histograms 'TrackName' : 'CombinedInDetTracks', #Until new config ready - 'TrackName2' : 'CombinedInDetTracks', #Until new config ready - 'TrackName3' : 'CombinedInDetTracks', #Until new config ready + 'TrackName2' : 'CombinedInDetTracks', #Until new config ready + 'TrackName3' : 'CombinedInDetTracks', #Until new config ready } - + from AthenaMonitoring import AthMonitorCfgHelper helper = AthMonitorCfgHelper(flags, "InDetGlobalMonitoringRun3Test") - + from AthenaConfiguration.ComponentFactory import CompFactory -# from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalTrackMonAlg + # from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalTrackMonAlg from InDetGlobalMonitoringRun3Test.InDetGlobalTrackMonAlgCfg import InDetGlobalTrackMonAlgCfg inDetGlobalTrackMonAlg = helper.addAlgorithm(CompFactory.InDetGlobalTrackMonAlg, 'InDetGlobalTrackMonAlg') for k, v in kwargsInDetGlobalTrackMonAlg.items(): setattr(inDetGlobalTrackMonAlg, k, v) + inDetGlobalTrackMonAlg.TrackSelectionTool.UseTrkTrackTools = True inDetGlobalTrackMonAlg.TrackSelectionTool.CutLevel = "TightPrimary" inDetGlobalTrackMonAlg.TrackSelectionTool.maxNPixelHoles = 1 inDetGlobalTrackMonAlg.TrackSelectionTool.minPt = 5000 -# InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool -# InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.Extrapolator = InDetExtrapolator -# + # InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool + # InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.Extrapolator = InDetExtrapolator + # inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.UseTrkTrackTools = True inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.CutLevel = "TightPrimary" inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.minPt = 5000 -# InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool -# InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator = InDetExtrapolator - + # InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool + # InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator = InDetExtrapolator + # Run 3 configs - stolen from SCT from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround inDetGlobalTrackMonAlg.TrackSelectionTool.TrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags)) inDetGlobalTrackMonAlg.TrackSelectionTool.Extrapolator = acc.getPublicTool("InDetExtrapolator") inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.TrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags)) - inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator = acc.getPublicTool("InDetExtrapolator") - + inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator = acc.getPublicTool("InDetExtrapolator") + InDetGlobalTrackMonAlgCfg(helper, inDetGlobalTrackMonAlg, **kwargsInDetGlobalTrackMonAlg) ########### here ends InDetGlobalTrackMonAlg ########### - - + + ########### here begins InDetGlobalPrimaryVertexMonAlg ########### from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalPrimaryVertexMonAlg from InDetGlobalMonitoringRun3Test.InDetGlobalPrimaryVertexMonAlgCfg import InDetGlobalPrimaryVertexMonAlgCfg - + myInDetGlobalPrimaryVertexMonAlg = helper.addAlgorithm(InDetGlobalPrimaryVertexMonAlg, 'InDetGlobalPrimaryVertexMonAlg') - + kwargsInDetGlobalPrimaryVertexMonAlg = { - 'vxContainerName' : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(), - 'vxContainerNameWithOutBeamConstraint' : 'VxPrimaryCandidateWithBeamConstraint', #InDetKeys.PrimaryVerticesWithoutBeamConstraint(), - 'vxContainerNameSplit' : 'VxPrimaryCandidateSplitStream', #InDetKeys.PrimaryVerticesSplitStream(), - 'doEnhancedMonitoring' : True # InDetFlags.doMonitoringPrimaryVertexingEnhanced() - } - + 'vxContainerName' : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(), + 'vxContainerNameWithOutBeamConstraint' : 'VxPrimaryCandidateWithBeamConstraint', #InDetKeys.PrimaryVerticesWithoutBeamConstraint(), + 'vxContainerNameSplit' : 'VxPrimaryCandidateSplitStream', #InDetKeys.PrimaryVerticesSplitStream(), + 'doEnhancedMonitoring' : True # InDetFlags.doMonitoringPrimaryVertexingEnhanced() + } + for k, v in kwargsInDetGlobalPrimaryVertexMonAlg.items(): setattr(kwargsInDetGlobalPrimaryVertexMonAlg, k, v) - + InDetGlobalPrimaryVertexMonAlgCfg(helper, myInDetGlobalPrimaryVertexMonAlg, **kwargsInDetGlobalPrimaryVertexMonAlg) ########### here ends InDetGlobalPrimaryVertexMonAlg ########### @@ -86,17 +87,17 @@ def InDetGlobalMonitoringRun3TestConfig(flags): from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalBeamSpotMonAlg from InDetGlobalMonitoringRun3Test.InDetGlobalBeamSpotMonAlgCfg import InDetGlobalBeamSpotMonAlgCfg - + myInDetGlobalBeamSpotMonAlg = helper.addAlgorithm(InDetGlobalBeamSpotMonAlg, 'InDetGlobalBeamSpotMonAlg') - + kwargsInDetGlobalBeamSpotMonAlg = { - 'BeamSpotKey' : 'BeamSpotData', #InDetKeys.BeamSpotData(), - 'vxContainerName' : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(), - 'trackContainerName' : 'InDetTrackParticles', #InDetKeys.xAODTrackParticleContainer(), - 'useBeamspot' : True, # InDetFlags.useBeamConstraint() - 'vxContainerWithBeamConstraint' : False # InDetFlags.useBeamConstraint() - } - + 'BeamSpotKey' : 'BeamSpotData', #InDetKeys.BeamSpotData(), + 'vxContainerName' : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(), + 'trackContainerName' : 'InDetTrackParticles', #InDetKeys.xAODTrackParticleContainer(), + 'useBeamspot' : True, # InDetFlags.useBeamConstraint() + 'vxContainerWithBeamConstraint' : False # InDetFlags.useBeamConstraint() + } + for k, v in kwargsInDetGlobalBeamSpotMonAlg.items(): setattr(kwargsInDetGlobalBeamSpotMonAlg, k, v) diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py index ca57742d083b1988db88b2686da806dbbb803a12..c14bda114924f8a64620521eb699eaa7daa0e9c2 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py @@ -1,15 +1,17 @@ +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# + """ @file InDetGlobalPrimaryVertexMonAlgCfg.py -@author Leonid Serkin -@date March 2020 +@author Leonid Serkin and Per Johansson +@date April 2020 @brief Configuration for Run 3 based on InDetGlobalPrimaryVertexMonTool.cxx """ -from math import pi -def InDetGlobalPrimaryVertexMonAlgCfg(helper, alg, **kwargs): +from math import pi as M_PI - # values - M_PI = math.pi +def InDetGlobalPrimaryVertexMonAlgCfg(helper, alg, **kwargs): # this creates a "pvGroup" called "alg" which will put its histograms into the subdirectory "PrimaryVertex" pvGroup = helper.addGroup(alg, 'PrimaryVertex') diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py index 7907acda53683a5f9172bcd2db56a6270632b6e2..6e77516ec5c894e5cb1aee0f78c75f6dd00d46ba 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py @@ -1,10 +1,15 @@ +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# + """ @file InDetGlobalTrackMonAlgCfg.py -@author Leonid Serkin -@date March 2020 +@author Leonid Serkin and Per Johansson +@date April 2020 @brief Configuration for Run 3 based on InDetGlobalTrackMonTool.cxx """ -from math import pi + +from math import pi as M_PI def InDetGlobalTrackMonAlgCfg(helper, alg, **kwargs): @@ -12,14 +17,14 @@ def InDetGlobalTrackMonAlgCfg(helper, alg, **kwargs): m_doIBL = True m_nBinsEta = 50 m_nBinsPhi = 50 - m_trackBin = 100 + m_trackBin = 75 m_c_etaRange = 2.5 m_c_etaTrackletsMin = 2.4 m_c_etaTrackletsMax = 2.7 m_c_etaRangeTRT = 2.0 m_c_range_LB = 3000 m_trackMax = 75 - M_PI = math.pi + #M_PI = math.pi # this creates a "trackGroup" called "alg" which will put its histograms into the subdirectory "Track" trackGroup = helper.addGroup(alg, 'Track') diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx index 01e9669319274fc9cb195d5c693594c96f63d63a..e4764edc45714a05f35b1f9eff19ea98a6788932 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx @@ -2,12 +2,13 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ + /** @file InDetGlobalBeamSpotMonAlg.cxx * Implementation of inner detector global beamspot monitoring tool * *@authors - * Per Johansson <Per.Johansson@cern.ch> @n * Leonid Serkin <lserkin@cern.ch> @n + * Per Johansson <Per.Johansson@cern.ch> @n * * based on InDetGlobalBeamSpotMonTool.cxx * @@ -25,6 +26,8 @@ #include "xAODTracking/TrackParticleAuxContainer.h" #include <sstream> +#include <cmath> + InDetGlobalBeamSpotMonAlg::InDetGlobalBeamSpotMonAlg( const std::string & name, ISvcLocator* pSvcLocator) : @@ -71,8 +74,8 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx ) float beamTiltY = 0.; float scaleFactor = 1.; if (m_useBeamspot) { - - + + auto beamSpotHandle = SG::ReadCondHandle(m_beamSpotKey, ctx); // check for tracks @@ -115,76 +118,71 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx ) // Track monitoring int nTracks = 0; - xAOD::TrackParticleContainer::const_iterator itrack = trackCollection->begin(); - xAOD::TrackParticleContainer::const_iterator itrack_end = trackCollection->end(); - - for ( ; itrack!= itrack_end; ++itrack) - { - - const xAOD::TrackParticle* tpb = (*itrack); - - if ( !tpb ) - { - ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track pointer in collection" ); - continue; - } - - - const Trk::Perigee* perigee = &(tpb->perigeeParameters()); - - if ( !perigee ) - { - ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track->perigeeParameters pointer " ); - continue; - } - + //range based for-loop + for (const xAOD::TrackParticle* tpb: *trackCollection) { + + if ( !tpb ) + { + ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track pointer in collection" ); + continue; + } + + + const Trk::Perigee* perigee = &(tpb->perigeeParameters()); + + if ( !perigee ) + { + ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track->perigeeParameters pointer " ); + continue; + } + + + + float theta = perigee->parameters()[Trk::theta]; + float qOverPt = perigee->parameters()[Trk::qOverP]/sin(theta); + float charge = perigee->charge(); + float z0 = perigee->parameters()[Trk::z0]; + float phi0 = perigee->parameters()[Trk::phi0]; + float d0 = perigee->parameters()[Trk::d0]; + float pT = 0; + + if ( qOverPt != 0 ){ + pT = (1/qOverPt)*(charge); + // For all tracks + auto pT_m = Monitored::Scalar<float>("m_trkPt", pT/1000); + fill(bsGroup, pT_m); + // Select tracks to use for remaining histograms + if (pT<m_minTrackPt) continue; + } + + nTracks++; + + auto trkDPhi_m = Monitored::Scalar<float>("m_trkD0Phi", phi0); + auto trkD_m = Monitored::Scalar<float>("m_trkD0", d0*1e3); + fill(bsGroup, trkD_m, trkDPhi_m); + + // Currently we do the direct calculation of d0corr. We could + // also use an extrapolator to calculate d0 wrt a + // Trk::StraightLineSurface constructed along the beam line. + if(m_useBeamspot){ - float theta = perigee->parameters()[Trk::theta]; - float qOverPt = perigee->parameters()[Trk::qOverP]/sin(theta); - float charge = perigee->charge(); - float z0 = perigee->parameters()[Trk::z0]; - float phi0 = perigee->parameters()[Trk::phi0]; - float d0 = perigee->parameters()[Trk::d0]; - float pT = 0; + float trkbeamlineTiltX=tpb->beamlineTiltX(); + float trkbeamlineTiltY=tpb->beamlineTiltY(); + float trkbeamspotx=tpb->vx(); + float trkbeamspoty=tpb->vy(); + float trkbeamspotz=tpb->vz(); - if ( qOverPt != 0 ){ - pT = (1/qOverPt)*(charge); - // For all tracks - auto pT_m = Monitored::Scalar<float>("m_trkPt", pT/1000); - fill(bsGroup, pT_m); - - // Select tracks to use for remaining histograms - if (pT<m_minTrackPt) continue; - } + float beamX = (beamSpotX-trkbeamspotx) + std::tan(beamTiltX-trkbeamlineTiltX) * (z0-beamSpotZ+trkbeamspotz); + float beamY = (beamSpotY-trkbeamspoty) + std::tan(beamTiltY-trkbeamlineTiltY) * (z0-beamSpotZ+trkbeamspotz); + float d0corr = d0 - ( -std::sin(phi0)*beamX + std::cos(phi0)*beamY ); - nTracks++; - - auto trkDPhi_m = Monitored::Scalar<float>("m_trkD0Phi", phi0); - auto trkD_m = Monitored::Scalar<float>("m_trkD0", d0*1e3); - fill(bsGroup, trkD_m, trkDPhi_m); - // Currently we do the direct calculation of d0corr. We could - // also use an extrapolator to calculate d0 wrt a - // Trk::StraightLineSurface constructed along the beam line. - if(m_useBeamspot){ - - float trkbeamlineTiltX=tpb->beamlineTiltX(); - float trkbeamlineTiltY=tpb->beamlineTiltY(); - float trkbeamspotx=tpb->vx(); - float trkbeamspoty=tpb->vy(); - float trkbeamspotz=tpb->vz(); - - float beamX = (beamSpotX-trkbeamspotx) + tan(beamTiltX-trkbeamlineTiltX) * (z0-beamSpotZ+trkbeamspotz); - float beamY = (beamSpotY-trkbeamspoty) + tan(beamTiltY-trkbeamlineTiltY) * (z0-beamSpotZ+trkbeamspotz); - float d0corr = d0 - ( -sin(phi0)*beamX + cos(phi0)*beamY ); - - - auto trkDPhiCorr_m = Monitored::Scalar<float>("m_trkD0PhiCorr", phi0); - auto trkDCorr_m = Monitored::Scalar<float>("m_trkD0Corr", d0corr*1e3); - fill(bsGroup, trkDPhiCorr_m, trkDCorr_m); - } - } // track iterator + auto trkDPhiCorr_m = Monitored::Scalar<float>("m_trkD0PhiCorr", phi0); + auto trkDCorr_m = Monitored::Scalar<float>("m_trkD0Corr", d0corr*1e3); + fill(bsGroup, trkDPhiCorr_m, trkDCorr_m); + } + } // track iterator auto trkNPt_m = Monitored::Scalar<float>("m_trkNPt", nTracks); fill(bsGroup,trkNPt_m); @@ -193,40 +191,42 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx ) // without beam constraint if (! m_vxContainerWithBeamConstraint) { ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: vxContainerWithBeamConstraint is " << m_vxContainerWithBeamConstraint ); - - // Basic primary vertex monitoring - auto vxContainer = SG::makeHandle(m_vxContainerName, ctx); - if (!vxContainer.isValid()) { + // Basic primary vertex monitoring + auto handle_vxContainer = SG::makeHandle(m_vxContainerName, ctx); + auto vertexContainer = handle_vxContainer.cptr(); + + if (!handle_vxContainer.isValid()) { ATH_MSG_DEBUG ("InDetGlobalBeamSpotMonAlg: Could not retrieve primary vertex container with key "+ m_vxContainerName.key()); return StatusCode::SUCCESS; } - auto pvN_m = Monitored::Scalar<float>("m_pvN", vxContainer->size()-1); // exclude dummy vertex + auto pvN_m = Monitored::Scalar<float>("m_pvN", vertexContainer->size()-1); // exclude dummy vertex fill(bsGroup, pvN_m); int nPriVtx = 0; int nPileupVtx = 0; - for (xAOD::VertexContainer::const_iterator vxIter = vxContainer->begin(); vxIter != vxContainer->end(); ++vxIter) { - if ( !(*vxIter) ) continue; + for(const auto & vtx : *vertexContainer) { + + if ( !vtx ) continue; // Count different types of vertices - if ((*vxIter)->vertexType() == xAOD::VxType::PriVtx) nPriVtx++; - if ((*vxIter)->vertexType() == xAOD::VxType::PileUp) nPileupVtx++; + if (vtx->vertexType() == xAOD::VxType::PriVtx) nPriVtx++; + if (vtx->vertexType() == xAOD::VxType::PileUp) nPileupVtx++; // Select primary vertex - if ((*vxIter)->vertexType() != xAOD::VxType::PriVtx) continue; - if ((*vxIter)->numberDoF() <= 0) continue; + if (vtx->vertexType() != xAOD::VxType::PriVtx) continue; + if (vtx->numberDoF() <= 0) continue; - if ((*vxIter)->nTrackParticles() < m_minTracksPerVtx) continue; + if (vtx->nTrackParticles() < m_minTracksPerVtx) continue; // Found good VxCandidate to monitor - now fill histograms - float x = (*vxIter)->position().x(); - float y = (*vxIter)->position().y(); - float z = (*vxIter)->position().z(); - float beamX = beamSpotX + tan(beamTiltX) * (z-beamSpotZ); - float beamY = beamSpotY + tan(beamTiltY) * (z-beamSpotZ); + float x = vtx->position().x(); + float y = vtx->position().y(); + float z = vtx->position().z(); + float beamX = beamSpotX + std::tan(beamTiltX) * (z-beamSpotZ); + float beamY = beamSpotY + std::tan(beamTiltY) * (z-beamSpotZ); float beamZ = beamSpotZ; auto pvXbeam_m = Monitored::Scalar<float>("m_pvXbeam", (x-beamX)*scaleFactor); @@ -234,23 +234,23 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx ) auto pvYbeam_m = Monitored::Scalar<float>("m_pvYbeam", (y-beamY)*scaleFactor); fill(bsGroup, pvYbeam_m); - + auto pvZbeam_m = Monitored::Scalar<float>("m_pvZbeam", z-beamZ); fill(bsGroup, pvZbeam_m); - auto pvErrX_m = Monitored::Scalar<float>("m_pvErrX", Amg::error( (*vxIter)->covariancePosition(), Trk::x)); + auto pvErrX_m = Monitored::Scalar<float>("m_pvErrX", Amg::error( vtx->covariancePosition(), Trk::x)); fill(bsGroup, pvErrX_m); - auto pvErrY_m = Monitored::Scalar<float>("m_pvErrY", Amg::error( (*vxIter)->covariancePosition(), Trk::y)); + auto pvErrY_m = Monitored::Scalar<float>("m_pvErrY", Amg::error( vtx->covariancePosition(), Trk::y)); fill(bsGroup, pvErrY_m); - auto pvErrZ_m = Monitored::Scalar<float>("m_pvErrZ", Amg::error( (*vxIter)->covariancePosition(), Trk::z)); + auto pvErrZ_m = Monitored::Scalar<float>("m_pvErrZ", Amg::error( vtx->covariancePosition(), Trk::z)); fill(bsGroup, pvErrZ_m); - auto pvNTracks_m = Monitored::Scalar<float>("m_pvNTracks", (*vxIter)->nTrackParticles()); + auto pvNTracks_m = Monitored::Scalar<float>("m_pvNTracks", vtx->nTrackParticles()); fill(bsGroup, pvNTracks_m); - - auto pvChiSqDof_m = Monitored::Scalar<float>("m_pvChiSqDof", (*vxIter)->chiSquared() / (*vxIter)->numberDoF()); + + auto pvChiSqDof_m = Monitored::Scalar<float>("m_pvChiSqDof", vtx->chiSquared() / vtx->numberDoF()); fill(bsGroup, pvChiSqDof_m); auto pvX_m = Monitored::Scalar<float>("m_pvX", x); @@ -259,10 +259,10 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx ) fill(bsGroup, pvX_m, pvZ_m); fill(bsGroup, pvY_m, pvZ_m); fill(bsGroup, pvY_m, pvX_m); - + // Histograms on original tracks used for primary vertex - for (unsigned int trkIter=0; trkIter!=(*vxIter)->nTrackParticles(); ++trkIter) { - const xAOD::TrackParticle* tp = (*vxIter)->trackParticle(trkIter); + for (unsigned int trkIter=0; trkIter!=vtx->nTrackParticles(); ++trkIter) { + const xAOD::TrackParticle* tp = vtx->trackParticle(trkIter); if(!tp){ ATH_MSG_DEBUG ("InDetGlobalBeamSpotMonAlg: Could not retrieve track particle."); continue; @@ -283,4 +283,3 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx ) return StatusCode::SUCCESS; } - diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx index f8a1c82ba6539d8a9c1c0c4ee67be4ecb19060d1..5c4cc7da7f88864fd46449f2b564e310d65ceba1 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx @@ -8,6 +8,7 @@ * *@author * Leonid Serkin <lserkin@cern.ch> @n + * Per Johansson <Per.Johansson@cern.ch> @n * * based on InDetGlobalPrimaryVertexMonTool.cxx * @@ -21,15 +22,8 @@ #include "EventPrimitives/EventPrimitivesHelpers.h" -//Root -#include "TMath.h" - //Standard c++ -#include <algorithm> #include <vector> -#include <string> -#include <cmath> -#include <functional> InDetGlobalPrimaryVertexMonAlg::InDetGlobalPrimaryVertexMonAlg( const std::string& name, ISvcLocator* pSvcLocator ) : @@ -73,86 +67,89 @@ StatusCode InDetGlobalPrimaryVertexMonAlg::fillHistograms( const EventContext& c auto pvGroup = getGroup("PrimaryVertex"); // retrieving vertices - auto vxContainer = SG::makeHandle(m_vxContainerName, ctx); // another way to access ?? + auto handle_vxContainer = SG::makeHandle(m_vxContainerName, ctx); // another way to access ?? - if (!vxContainer.isPresent()) { + if (!handle_vxContainer.isPresent()) { ATH_MSG_DEBUG ("InDetGlobalPrimaryVertexMonAlg: StoreGate doesn't contain primary vertex container with key "+m_vxContainerName.key()); return StatusCode::SUCCESS; } - if (!vxContainer.isValid()) { + if (!handle_vxContainer.isValid()) { ATH_MSG_ERROR ("InDetGlobalPrimaryVertexMonAlg: Could not retrieve primary vertex container with key "+m_vxContainerName.key()); return StatusCode::RECOVERABLE; } - + auto vertexContainer = handle_vxContainer.cptr(); + + // Total number of vertices (primary and pile up) - int PvN = vxContainer->size()-1; // exclude dummy vertex - auto PvN_m = Monitored::Scalar<int>( "m_PvN", PvN); - fill(pvGroup, PvN_m); + int pvN = vertexContainer->size()-1; // exclude dummy vertex + auto pvN_m = Monitored::Scalar<int>( "m_PvN", pvN); + fill(pvGroup, pvN_m); int nPriVtx = 0; int nPileupVtx = 0; - - for (xAOD::VertexContainer::const_iterator vxIter = vxContainer->begin(); vxIter != vxContainer->end(); ++vxIter) - { + + for(const auto & vtx : *vertexContainer) { + + if ( !vtx ) continue; // Count different types of vertices - if ((*vxIter)->vertexType() == xAOD::VxType::PriVtx) nPriVtx++; - if ((*vxIter)->vertexType() == xAOD::VxType::PileUp) nPileupVtx++; + if (vtx->vertexType() == xAOD::VxType::PriVtx) nPriVtx++; + if (vtx->vertexType() == xAOD::VxType::PileUp) nPileupVtx++; // Select primary vertex - if ((*vxIter)->vertexType() != xAOD::VxType::PriVtx) continue; - if ((*vxIter)->numberDoF() <= 0) continue; + if (vtx->vertexType() != xAOD::VxType::PriVtx) continue; + if (vtx->numberDoF() <= 0) continue; - float PvX = (*vxIter)->position().x(); - auto PvX_m = Monitored::Scalar<float>( "m_PvX", PvX); - fill(pvGroup, PvX_m); + float pvX = vtx->position().x(); + auto pvX_m = Monitored::Scalar<float>( "m_PvX", pvX); + fill(pvGroup, pvX_m); - float PvY = (*vxIter)->position().y(); - auto PvY_m = Monitored::Scalar<float>( "m_PvY", PvY); - fill(pvGroup, PvY_m); + float pvY = vtx->position().y(); + auto pvY_m = Monitored::Scalar<float>( "m_PvY", pvY); + fill(pvGroup, pvY_m); - float PvZ = (*vxIter)->position().z(); - auto PvZ_m = Monitored::Scalar<float>( "m_PvZ", PvZ); - fill(pvGroup, PvZ_m); + float pvZ = vtx->position().z(); + auto pvZ_m = Monitored::Scalar<float>( "m_PvZ", pvZ); + fill(pvGroup, pvZ_m); - float PvErrX = Amg::error( (*vxIter)->covariancePosition(), Trk::x); - auto PvErrX_m = Monitored::Scalar<float>( "m_PvErrX", PvErrX); - fill(pvGroup, PvErrX_m); + float pvErrX = Amg::error( vtx->covariancePosition(), Trk::x); + auto pvErrX_m = Monitored::Scalar<float>( "m_PvErrX", pvErrX); + fill(pvGroup, pvErrX_m); - float PvErrY = Amg::error( (*vxIter)->covariancePosition(), Trk::y); - auto PvErrY_m = Monitored::Scalar<float>( "m_PvErrY", PvErrY); - fill(pvGroup, PvErrY_m); + float pvErrY = Amg::error( vtx->covariancePosition(), Trk::y); + auto pvErrY_m = Monitored::Scalar<float>( "m_PvErrY", pvErrY); + fill(pvGroup, pvErrY_m); - float PvErrZ = Amg::error( (*vxIter)->covariancePosition(), Trk::z); - auto PvErrZ_m = Monitored::Scalar<float>( "m_PvErrZ", PvErrZ); - fill(pvGroup, PvErrZ_m); + float pvErrZ = Amg::error( vtx->covariancePosition(), Trk::z); + auto pvErrZ_m = Monitored::Scalar<float>( "m_PvErrZ", pvErrZ); + fill(pvGroup, pvErrZ_m); - float PvChiSqDoF = (*vxIter)->chiSquared() / (*vxIter)->numberDoF() ; - auto PvChiSqDoF_m = Monitored::Scalar<float>( "m_PvChiSqDoF", PvChiSqDoF); - fill(pvGroup, PvChiSqDoF_m); + float pvChiSqDoF = vtx->chiSquared() / vtx->numberDoF() ; + auto pvChiSqDoF_m = Monitored::Scalar<float>( "m_PvChiSqDoF", pvChiSqDoF); + fill(pvGroup, pvChiSqDoF_m); - auto & trackparticles = (*vxIter)->trackParticleLinks(); + auto & trackparticles = vtx->trackParticleLinks(); - int PvNTracks = trackparticles.size() ; - auto PvNTracks_m = Monitored::Scalar<int>( "m_PvNTracks", PvNTracks); - fill(pvGroup, PvNTracks_m); + int pvNTracks = trackparticles.size() ; + auto pvNTracks_m = Monitored::Scalar<int>( "m_PvNTracks", pvNTracks); + fill(pvGroup, pvNTracks_m); // original tracks used for primary vertex - for (auto trackparticle : trackparticles ) - { + for (const auto & trackparticle : trackparticles) + { const Trk::Perigee & measuredPerigee = (*trackparticle)->perigeeParameters(); - float PvTrackEta = measuredPerigee.eta() ; - auto PvTrackEta_m = Monitored::Scalar<float>( "m_PvTrackEta", PvTrackEta); - fill(pvGroup, PvTrackEta_m); + float pvTrackEta = measuredPerigee.eta() ; + auto pvTrackEta_m = Monitored::Scalar<float>( "m_PvTrackEta", pvTrackEta); + fill(pvGroup, pvTrackEta_m); - float PvTrackPt = measuredPerigee.pT()/1000. ; // Histo is in GeV - auto PvTrackPt_m = Monitored::Scalar<float>( "m_PvTrackPt", PvTrackPt); - fill(pvGroup, PvTrackPt_m); + float pvTrackPt = measuredPerigee.pT()/1000. ; // Histo is in GeV + auto pvTrackPt_m = Monitored::Scalar<float>( "m_PvTrackPt", pvTrackPt); + fill(pvGroup, pvTrackPt_m); } diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx index 483ca7fe29a10201523a5d4d8258f190612a768f..ba8303f256a82a1a308be5140163d3371174c0ab 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx @@ -8,6 +8,7 @@ * *@author * Leonid Serkin <lserkin@cern.ch> @n + * Per Johansson <Per.Johansson@cern.ch> @n * * based on InDetGlobalTrackMonTool.cxx * @@ -16,16 +17,14 @@ //main header #include "InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h" -//Root -#include "TMath.h" - //Standard c++ -#include <algorithm> #include <vector> -#include <string> -#include <cmath> -#include <functional> +#include <memory> +// Id includes +#include "InDetIdentifier/PixelID.h" +#include "InDetIdentifier/SCT_ID.h" +#include "InDetIdentifier/TRT_ID.h" @@ -70,40 +69,34 @@ StatusCode InDetGlobalTrackMonAlg::initialize() { ATH_CHECK( detStore()->retrieve(m_atlasid, "AtlasID") ); - m_pixelID = 0; + m_pixelID = nullptr; if (detStore()->retrieve(m_pixelID, "PixelID").isFailure()) { ATH_MSG_DEBUG("InDetGlobalMonitoringRun3Test: Could not get Pixel ID helper"); m_doHitMaps = false; } - m_sctID = 0; + m_sctID = nullptr; if (detStore()->retrieve(m_sctID, "SCT_ID").isFailure()) { ATH_MSG_DEBUG("InDetGlobalMonitoringRun3Test: Could not get SCT ID helper"); m_doHitMaps = false; } - m_trtID = 0; + m_trtID = nullptr; if (detStore()->retrieve(m_trtID, "TRT_ID").isFailure()) { ATH_MSG_DEBUG("InDetGlobalMonitoringRun3Test: Could not get TRT ID helper"); m_doHitMaps = false; } - ATH_CHECK( m_pixelCondSummaryTool.retrieve() ); // maybe not needed + ATH_CHECK( m_pixelCondSummaryTool.retrieve() ); - - if (m_IBLParameterSvc.retrieve().isFailure()) { - if(msgLvl(MSG::FATAL)) msg(MSG::FATAL) << "Could not retrieve " << m_IBLParameterSvc << endmsg; - return StatusCode::FAILURE; - } else { - if(msgLvl(MSG::INFO)) msg(MSG::INFO) << "Retrieved tool " << m_IBLParameterSvc << endmsg; - } + ATH_CHECK( m_IBLParameterSvc.retrieve() ); m_doIBL = m_IBLParameterSvc->containsIBL(); if (!m_trackSelTool.empty() ) ATH_CHECK( m_trackSelTool.retrieve() ); if (!m_tight_trackSelTool.empty()) ATH_CHECK( m_tight_trackSelTool.retrieve() ); - + if (!m_holes_search_tool.empty()) ATH_CHECK( m_holes_search_tool.retrieve()); ATH_CHECK( m_CombinedTracksName.initialize() ); @@ -125,11 +118,11 @@ StatusCode InDetGlobalTrackMonAlg::fillHistograms( const EventContext& ctx ) con // For histogram naming auto trackGroup = getGroup("Track"); - + // m_manager->lumiBlockNumber() // not used anymore, now use int lb = GetEventInfo(ctx)->lumiBlock(); auto lb_m = Monitored::Scalar<int>( "m_lb", lb ); - + // retrieving tracks auto combined_tracks = SG::makeHandle(m_CombinedTracksName, ctx); @@ -149,207 +142,202 @@ StatusCode InDetGlobalTrackMonAlg::fillHistograms( const EventContext& ctx ) con int nNoTRText = 0; - TrackCollection::const_iterator itrack = combined_tracks->begin(); - TrackCollection::const_iterator itrack_end = combined_tracks->end(); - - for ( ; itrack!= itrack_end; ++itrack) - { - - const Trk::Track * track = (*itrack); - if ( !track || track->perigeeParameters() == 0 ) - { - ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track pointer in collection" ); - continue; - } - - // not sure it works now.... - // Skip tracks that are not inside out - //if ( ( m_dataType == AthenaMonManager::collisions || m_dataType == AthenaMonManager::userDefined ) - // && ! track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) ) - // continue; - - - // Loose primary tracks - if ( !m_trackSelTool->accept(*track) ) + for (const Trk::Track* track: *combined_tracks) { + + if ( !track || track->perigeeParameters() == 0 ) + { + ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track pointer in collection" ); continue; - - // Create a new summary or get copy of the cached one - std::unique_ptr<const Trk::TrackSummary> summary(m_trkSummaryTool->createSummary( * track ) ); - - if ( !summary ) - { - ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL pointer to track summary" ); - continue; - } - - nBase++; - - - // =================================== // - // Fill hits BEGINS - int numberOfPixelHits = ( summary->get(Trk::numberOfPixelHits) >= 0 ) ? summary->get(Trk::numberOfPixelHits) : 0 ; - int numberOfPixelDeadSensors = ( summary->get(Trk::numberOfPixelDeadSensors) >= 0 ) ? summary->get(Trk::numberOfPixelDeadSensors ) : 0 ; - int pixHits = numberOfPixelHits + numberOfPixelDeadSensors; - - int numberOfSCTHits = ( summary->get(Trk::numberOfSCTHits) >= 0 ) ? summary->get(Trk::numberOfSCTHits) : 0 ; - int numberOfSCTDeadSensors = ( summary->get(Trk::numberOfSCTDeadSensors) >= 0 ) ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ; - int sctHits = numberOfSCTHits + numberOfSCTDeadSensors; - - int trtHits = summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTDeadStraws); - - - const Trk::Perigee *perigee = track->perigeeParameters(); - if ( !perigee ) - { - ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track->perigeeParameters pointer " ); - continue; - } - - float eta_perigee = perigee->eta(); - float phi_perigee = perigee->parameters()[Trk::phi0]; - - auto eta_perigee_m = Monitored::Scalar<float>( "m_eta_perigee", eta_perigee); - auto phi_perigee_m = Monitored::Scalar<float>( "m_phi_perigee", phi_perigee); - fill(trackGroup, eta_perigee_m, phi_perigee_m); // Trk_Base_eta_phi - - - if ( m_doIBL ) - { - int numberOfInnermostPixelLayerHits = summary->get( Trk::numberOfInnermostPixelLayerHits ); - auto numberOfInnermostPixelLayerHits_m = Monitored::Scalar<int>( "m_numberOfInnermostPixelLayerHits", numberOfInnermostPixelLayerHits); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfInnermostPixelLayerHits_m); - - fill(trackGroup, lb_m, numberOfInnermostPixelLayerHits_m); - } - - auto pixHits_m = Monitored::Scalar<int>( "m_pixHits", pixHits ); - fill(trackGroup, eta_perigee_m, phi_perigee_m, pixHits_m); - fill(trackGroup, lb_m, pixHits_m); - - auto numberOfPixelDeadSensors_m = Monitored::Scalar<int>( "m_numberOfPixelDeadSensors", numberOfPixelDeadSensors ); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelDeadSensors_m); - - int numberOfPixelSharedHits = ( summary->get(Trk::numberOfPixelSharedHits) >= 0 ) ? summary->get(Trk::numberOfPixelSharedHits) : 0 ; - auto numberOfPixelSharedHits_m = Monitored::Scalar<int>( "m_numberOfPixelSharedHits", numberOfPixelSharedHits); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSharedHits_m); - - int numberOfPixelHoles = summary->get(Trk::numberOfPixelHoles) >= 0 ? summary->get(Trk::numberOfPixelHoles) : 0; - auto numberOfPixelHoles_m = Monitored::Scalar<int>( "m_numberOfPixelHoles", numberOfPixelHoles); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelHoles_m); - - int numberOfPixelSplitHits = ( summary->get(Trk::numberOfPixelSplitHits) >= 0 ) ? summary->get(Trk::numberOfPixelSplitHits) : 0 ; - auto numberOfPixelSplitHits_m = Monitored::Scalar<int>( "m_numberOfPixelSplitHits", numberOfPixelSplitHits); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSplitHits_m); - - auto sctHits_m = Monitored::Scalar<int>( "m_sctHits", sctHits ); - fill(trackGroup, eta_perigee_m, phi_perigee_m, sctHits_m); - fill(trackGroup, lb_m, sctHits_m); - - auto numberOfSCTDeadSensors_m = Monitored::Scalar<int>( "m_numberOfSCTDeadSensors", numberOfSCTDeadSensors ); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTDeadSensors_m); - - int numberOfSCTSharedHits = ( summary->get(Trk::numberOfSCTSharedHits) >= 0 ) ? summary->get(Trk::numberOfSCTSharedHits) : 0 ; - auto numberOfSCTSharedHits_m = Monitored::Scalar<int>( "m_numberOfSCTSharedHits", numberOfSCTSharedHits); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTSharedHits_m); - - int numberOfSCTHoles = summary->get(Trk::numberOfSCTHoles) >= 0 ? summary->get(Trk::numberOfSCTHoles) : 0; - auto numberOfSCTHoles_m = Monitored::Scalar<int>( "m_numberOfSCTHoles", numberOfSCTHoles); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTHoles_m); - - auto trtHits_m = Monitored::Scalar<int>( "m_trtHits", trtHits ); - fill(trackGroup, eta_perigee_m, phi_perigee_m, trtHits_m); - fill(trackGroup, lb_m, trtHits_m); - - int numberOfTRTDeadStraws = ( summary->get(Trk::numberOfTRTDeadStraws) >= 0 ) ? summary->get(Trk::numberOfTRTDeadStraws) : 0 ; - auto numberOfTRTDeadStraws_m = Monitored::Scalar<int>( "m_numberOfTRTDeadStraws", numberOfTRTDeadStraws); - fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfTRTDeadStraws_m); - - // Fill hits ENDS - // =================================== // - - // =================================== // - // FillEtaPhi BEGINS - - int InnermostPixelLayerHit = 0; - int NextToInnermostPixelLayerHit = 0; - if ( m_doIBL ) - { - // no IBL hit but a hit is expected - if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1; - auto InnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_InnermostPixelLayerHit", InnermostPixelLayerHit); - fill(trackGroup, eta_perigee_m, phi_perigee_m, InnermostPixelLayerHit_m); - - - // no b-layer hit but a hit is expected - if ( summary->get( Trk::expectNextToInnermostPixelLayerHit ) && !summary->get( Trk::numberOfNextToInnermostPixelLayerHits ) ) NextToInnermostPixelLayerHit = 1 ; - auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit); - fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m); - - } - else - { - if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1; - NextToInnermostPixelLayerHit = InnermostPixelLayerHit; - auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit); - fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m); - - } - - // No TRT extension - int noTRTHits = 0; - if ( summary->get(Trk::numberOfTRTHits) == 0 ) noTRTHits = 1; - auto noTRTHits_m = Monitored::Scalar<int>( "m_noTRTHits", noTRTHits); - fill(trackGroup, eta_perigee_m, phi_perigee_m, noTRTHits_m); - - - // Tight track selection - int track_pass_tight = 0; - if ( m_tight_trackSelTool -> accept(*track) ) track_pass_tight = 1; // tight selection - auto track_pass_tight_m = Monitored::Scalar<int>( "m_track_pass_tight", track_pass_tight); - fill(trackGroup, eta_perigee_m, phi_perigee_m, track_pass_tight_m); - - // =================================== // - // FillEtaPhi ENDS - - int NoIBL = 0; - if ( m_doIBL ) - { - // no IBL hit but a hit is expected - if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) NoIBL = 1; - if (NoIBL == 1) nNoIBL++; - auto NoIBL_m = Monitored::Scalar<int>( "m_NoIBL_LB", NoIBL); - fill(trackGroup, lb_m, NoIBL_m); - } - - int NoBL = 0; - if ( summary->get( ( m_doIBL ) ? Trk::expectNextToInnermostPixelLayerHit : Trk::expectInnermostPixelLayerHit ) && !summary->get( ( m_doIBL ) ? Trk::numberOfNextToInnermostPixelLayerHits : Trk::numberOfInnermostPixelLayerHits ) ) NoBL = 1; - if (NoBL == 1) nNoBL++; - auto NoBL_m = Monitored::Scalar<int>( "m_NoBL_LB", NoBL); - fill(trackGroup, lb_m, NoBL_m); - - int NoTRText = 0; - if ( summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTOutliers) == 0 ) NoTRText = 1; - if (NoTRText == 1) nNoTRText++; - auto NoTRText_m = Monitored::Scalar<int>( "m_NoTRText_LB", NoTRText); - fill(trackGroup, lb_m, NoTRText_m); - - - if ( m_tight_trackSelTool -> accept(*track) ) - { - nTight++; - } - - - // FillHitMaps is false for now - // FillHoles is false for now - - - } // end of track loop + } + + // not sure it works now.... + // Skip tracks that are not inside out + //if ( ( m_dataType == AthenaMonManager::collisions || m_dataType == AthenaMonManager::userDefined ) + // && ! track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) ) + // continue; + + + // Loose primary tracks + if ( !m_trackSelTool->accept(*track) ) + continue; + + // Create a new summary or get copy of the cached one + std::unique_ptr<const Trk::TrackSummary> summary(m_trkSummaryTool->createSummary( * track ) ); + + if ( !summary ) + { + ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL pointer to track summary" ); + continue; + } + + nBase++; + + + // =================================== // + // Fill hits BEGINS + int numberOfPixelHits = ( summary->get(Trk::numberOfPixelHits) >= 0 ) ? summary->get(Trk::numberOfPixelHits) : 0 ; + int numberOfPixelDeadSensors = ( summary->get(Trk::numberOfPixelDeadSensors) >= 0 ) ? summary->get(Trk::numberOfPixelDeadSensors ) : 0 ; + int pixHits = numberOfPixelHits + numberOfPixelDeadSensors; + + int numberOfSCTHits = ( summary->get(Trk::numberOfSCTHits) >= 0 ) ? summary->get(Trk::numberOfSCTHits) : 0 ; + int numberOfSCTDeadSensors = ( summary->get(Trk::numberOfSCTDeadSensors) >= 0 ) ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ; + int sctHits = numberOfSCTHits + numberOfSCTDeadSensors; + + int trtHits = summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTDeadStraws); + + + const Trk::Perigee *perigee = track->perigeeParameters(); + if ( !perigee ) + { + ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track->perigeeParameters pointer " ); + continue; + } + + float eta_perigee = perigee->eta(); + float phi_perigee = perigee->parameters()[Trk::phi0]; + + auto eta_perigee_m = Monitored::Scalar<float>( "m_eta_perigee", eta_perigee); + auto phi_perigee_m = Monitored::Scalar<float>( "m_phi_perigee", phi_perigee); + fill(trackGroup, eta_perigee_m, phi_perigee_m); // Trk_Base_eta_phi + + + if ( m_doIBL ) + { + int numberOfInnermostPixelLayerHits = summary->get( Trk::numberOfInnermostPixelLayerHits ); + auto numberOfInnermostPixelLayerHits_m = Monitored::Scalar<int>( "m_numberOfInnermostPixelLayerHits", numberOfInnermostPixelLayerHits); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfInnermostPixelLayerHits_m); + + fill(trackGroup, lb_m, numberOfInnermostPixelLayerHits_m); + } + + auto pixHits_m = Monitored::Scalar<int>( "m_pixHits", pixHits ); + fill(trackGroup, eta_perigee_m, phi_perigee_m, pixHits_m); + fill(trackGroup, lb_m, pixHits_m); + + auto numberOfPixelDeadSensors_m = Monitored::Scalar<int>( "m_numberOfPixelDeadSensors", numberOfPixelDeadSensors ); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelDeadSensors_m); + + int numberOfPixelSharedHits = ( summary->get(Trk::numberOfPixelSharedHits) >= 0 ) ? summary->get(Trk::numberOfPixelSharedHits) : 0 ; + auto numberOfPixelSharedHits_m = Monitored::Scalar<int>( "m_numberOfPixelSharedHits", numberOfPixelSharedHits); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSharedHits_m); + + int numberOfPixelHoles = summary->get(Trk::numberOfPixelHoles) >= 0 ? summary->get(Trk::numberOfPixelHoles) : 0; + auto numberOfPixelHoles_m = Monitored::Scalar<int>( "m_numberOfPixelHoles", numberOfPixelHoles); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelHoles_m); + + int numberOfPixelSplitHits = ( summary->get(Trk::numberOfPixelSplitHits) >= 0 ) ? summary->get(Trk::numberOfPixelSplitHits) : 0 ; + auto numberOfPixelSplitHits_m = Monitored::Scalar<int>( "m_numberOfPixelSplitHits", numberOfPixelSplitHits); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSplitHits_m); + + auto sctHits_m = Monitored::Scalar<int>( "m_sctHits", sctHits ); + fill(trackGroup, eta_perigee_m, phi_perigee_m, sctHits_m); + fill(trackGroup, lb_m, sctHits_m); + + auto numberOfSCTDeadSensors_m = Monitored::Scalar<int>( "m_numberOfSCTDeadSensors", numberOfSCTDeadSensors ); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTDeadSensors_m); + + int numberOfSCTSharedHits = ( summary->get(Trk::numberOfSCTSharedHits) >= 0 ) ? summary->get(Trk::numberOfSCTSharedHits) : 0 ; + auto numberOfSCTSharedHits_m = Monitored::Scalar<int>( "m_numberOfSCTSharedHits", numberOfSCTSharedHits); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTSharedHits_m); + + int numberOfSCTHoles = summary->get(Trk::numberOfSCTHoles) >= 0 ? summary->get(Trk::numberOfSCTHoles) : 0; + auto numberOfSCTHoles_m = Monitored::Scalar<int>( "m_numberOfSCTHoles", numberOfSCTHoles); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTHoles_m); + + auto trtHits_m = Monitored::Scalar<int>( "m_trtHits", trtHits ); + fill(trackGroup, eta_perigee_m, phi_perigee_m, trtHits_m); + fill(trackGroup, lb_m, trtHits_m); + + int numberOfTRTDeadStraws = ( summary->get(Trk::numberOfTRTDeadStraws) >= 0 ) ? summary->get(Trk::numberOfTRTDeadStraws) : 0 ; + auto numberOfTRTDeadStraws_m = Monitored::Scalar<int>( "m_numberOfTRTDeadStraws", numberOfTRTDeadStraws); + fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfTRTDeadStraws_m); + + // Fill hits ENDS + // =================================== // + + // =================================== // + // FillEtaPhi BEGINS + + int InnermostPixelLayerHit = 0; + int NextToInnermostPixelLayerHit = 0; + if ( m_doIBL ) + { + // no IBL hit but a hit is expected + if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1; + auto InnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_InnermostPixelLayerHit", InnermostPixelLayerHit); + fill(trackGroup, eta_perigee_m, phi_perigee_m, InnermostPixelLayerHit_m); + + + // no b-layer hit but a hit is expected + if ( summary->get( Trk::expectNextToInnermostPixelLayerHit ) && !summary->get( Trk::numberOfNextToInnermostPixelLayerHits ) ) NextToInnermostPixelLayerHit = 1 ; + auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit); + fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m); + + } + else + { + if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1; + NextToInnermostPixelLayerHit = InnermostPixelLayerHit; + auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit); + fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m); + + } + + // No TRT extension + int noTRTHits = 0; + if ( summary->get(Trk::numberOfTRTHits) == 0 ) noTRTHits = 1; + auto noTRTHits_m = Monitored::Scalar<int>( "m_noTRTHits", noTRTHits); + fill(trackGroup, eta_perigee_m, phi_perigee_m, noTRTHits_m); + + + // Tight track selection + int track_pass_tight = 0; + if ( m_tight_trackSelTool -> accept(*track) ) track_pass_tight = 1; // tight selection + auto track_pass_tight_m = Monitored::Scalar<int>( "m_track_pass_tight", track_pass_tight); + fill(trackGroup, eta_perigee_m, phi_perigee_m, track_pass_tight_m); + + // =================================== // + // FillEtaPhi ENDS + + int NoIBL = 0; + if ( m_doIBL ) + { + // no IBL hit but a hit is expected + if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) NoIBL = 1; + if (NoIBL == 1) nNoIBL++; + auto NoIBL_m = Monitored::Scalar<int>( "m_NoIBL_LB", NoIBL); + fill(trackGroup, lb_m, NoIBL_m); + } + + int NoBL = 0; + if ( summary->get( ( m_doIBL ) ? Trk::expectNextToInnermostPixelLayerHit : Trk::expectInnermostPixelLayerHit ) && !summary->get( ( m_doIBL ) ? Trk::numberOfNextToInnermostPixelLayerHits : Trk::numberOfInnermostPixelLayerHits ) ) NoBL = 1; + if (NoBL == 1) nNoBL++; + auto NoBL_m = Monitored::Scalar<int>( "m_NoBL_LB", NoBL); + fill(trackGroup, lb_m, NoBL_m); + + int NoTRText = 0; + if ( summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTOutliers) == 0 ) NoTRText = 1; + if (NoTRText == 1) nNoTRText++; + auto NoTRText_m = Monitored::Scalar<int>( "m_NoTRText_LB", NoTRText); + fill(trackGroup, lb_m, NoTRText_m); + + + if ( m_tight_trackSelTool -> accept(*track) ) + { + nTight++; + } + + + // FillHitMaps is false for now + // FillHoles is false for now + + + } // end of track loop // Filling per-event histograms auto nBase_m = Monitored::Scalar<int>( "m_nBase", nBase); fill(trackGroup, nBase_m); - + auto nBaseLB_m = Monitored::Scalar<int>( "m_nBase_LB", nBase); fill(trackGroup, lb_m, nBaseLB_m);