diff --git a/DQM/SiStripMonitorClient/BuildFile.xml b/DQM/SiStripMonitorClient/BuildFile.xml index 4bcc076a374c0..83f7065545021 100644 --- a/DQM/SiStripMonitorClient/BuildFile.xml +++ b/DQM/SiStripMonitorClient/BuildFile.xml @@ -1,10 +1,12 @@ + + @@ -12,4 +14,6 @@ - + + + diff --git a/DQM/SiStripMonitorClient/data/sistrip_qualitytest_config_tier0.xml b/DQM/SiStripMonitorClient/data/sistrip_qualitytest_config_tier0.xml index 5735937ab8fd7..56fbceb59b598 100644 --- a/DQM/SiStripMonitorClient/data/sistrip_qualitytest_config_tier0.xml +++ b/DQM/SiStripMonitorClient/data/sistrip_qualitytest_config_tier0.xml @@ -1,6 +1,7 @@ MeanWithinExpected + 0 0.05 0.3 1.0 @@ -12,6 +13,7 @@ MeanWithinExpected + 0 0.05 0.3 1.0 @@ -23,6 +25,7 @@ MeanWithinExpected + 0 0.05 0.3 1.0 @@ -46,6 +49,7 @@ CompareToMedian + 0 0.1 5. 0 @@ -57,6 +61,7 @@ CompareToMedian + 0 0.1 5. 0 @@ -121,53 +126,6 @@ 0 10.0 - - ContentsXRange - 0.85 - 0.95 - 0.0 - 800.0 - - - ContentsXRange - 0.80 - 0.90 - 5.0 - 35.0 - - - ContentsXRange - 0.85 - 0.95 - 0 - 10.0 - - - ContentsXRange - 0.85 - 0.95 - 0 - 200.0 - - - ContentsXRange - 0.85 - 0.95 - 0.7 - 1.1 - - - MeanWithinExpected - 0.75 - 0.90 - 1.0 - 0 - 0 - 1 - 0 - 0.5 - 50000.0 - MeanWithinExpectedRange:nFEDErrors @@ -204,22 +162,4 @@ MeanWithinExpectedRange:StoNTID - - XrangeWithin:NumberOfTracks - - - XrangeWithin:GoodTrackNumberOfRecHitsPerTrack - - - XrangeWithin:GoodTrackChi2oNDF - - - XrangeWithin:GoodTrackPt - - - XrangeWithin:FractionOfGoodTracks - - - MeanWithinExpected:TrackSeed - diff --git a/DQM/SiStripMonitorClient/interface/SiStripCertificationInfo.h b/DQM/SiStripMonitorClient/interface/SiStripCertificationInfo.h index ac08867d824fc..5182a183ab494 100644 --- a/DQM/SiStripMonitorClient/interface/SiStripCertificationInfo.h +++ b/DQM/SiStripMonitorClient/interface/SiStripCertificationInfo.h @@ -72,12 +72,7 @@ class SiStripCertificationInfo: public edm::EDAnalyzer { void resetSiStripCertificationMEs(); void fillSiStripCertificationMEs(edm::EventSetup const& eSetup); - void bookTrackingCertificationMEs(); - void resetTrackingCertificationMEs(); - void fillTrackingCertificationMEs(edm::EventSetup const& eSetup); - void fillDummySiStripCertification(); - void fillDummyTrackingCertification(); void fillSiStripCertificationMEsAtLumi(); @@ -95,12 +90,8 @@ class SiStripCertificationInfo: public edm::EDAnalyzer { MonitorElement * SiStripCertification; MonitorElement * SiStripCertificationMap; std::map SubDetMEsMap; - std::map TrackingMEsMap; MonitorElement * SiStripCertificationSummaryMap; - MonitorElement * TrackingCertification; - - bool trackingCertificationBooked_; bool sistripCertificationBooked_; unsigned long long m_cacheID_; diff --git a/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h b/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h index 1283391b27902..1930e32137001 100644 --- a/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h +++ b/DQM/SiStripMonitorClient/interface/SiStripQualityChecker.h @@ -44,15 +44,7 @@ class SiStripQualityChecker { std::string detectorTag; }; - struct TrackingMEs{ - std::string HistoName; - MonitorElement* TrackingFlag; - float LowerCut; - float UpperCut; - }; - void fillDetectorStatus(DQMStore* dqm_store, const edm::ESHandle< SiStripDetCabling >& cabling); - void fillTrackingStatus(DQMStore* dqm_store); void fillSubDetStatus(DQMStore* dqm_store,const edm::ESHandle< SiStripDetCabling >& cabling, SubDetMEs& mes, unsigned int xbin,float& gflag); void getModuleStatus(DQMStore* dqm_store, std::vector& layer_mes, int& errdet); @@ -60,11 +52,9 @@ class SiStripQualityChecker { void initialiseBadModuleList(); void fillDetectorStatusAtLumi(DQMStore* dqm_store); - void fillTrackingStatusAtLumi(DQMStore* dqm_store); std::map SubDetMEsMap; std::map SubDetFolderMap; - std::map TrackingMEsMap; MonitorElement* DetFractionReportMap; MonitorElement* SToNReportMap; @@ -81,7 +71,6 @@ class SiStripQualityChecker { edm::ParameterSet pSet_; bool bookedStripStatus_; - bool bookedTrackingStatus_; int globalStatusFilling_; bool useGoodTracks_; diff --git a/DQM/SiStripMonitorClient/interface/SiStripUtility.h b/DQM/SiStripMonitorClient/interface/SiStripUtility.h index b91e216f565e1..0795f17411e18 100644 --- a/DQM/SiStripMonitorClient/interface/SiStripUtility.h +++ b/DQM/SiStripMonitorClient/interface/SiStripUtility.h @@ -38,7 +38,7 @@ class SiStripUtility static void getSubDetectorTag(uint32_t det_id, std::string& subdet_tag, const TrackerTopology* tTopo); static void setBadModuleFlag(std::string & hname, uint16_t& flg); static void getBadModuleStatus(uint16_t flag, std::string& message); - static void getTopFolderPath(DQMStore* dqm_store, std::string type, std::string& path); + static void getTopFolderPath(DQMStore* dqm_store, std::string top_dir, std::string& path); }; #endif diff --git a/DQM/SiStripMonitorClient/python/SiStripSourceConfigTier0_cff.py b/DQM/SiStripMonitorClient/python/SiStripSourceConfigTier0_cff.py index 6266e7d2ffb65..457fc7769a73a 100644 --- a/DQM/SiStripMonitorClient/python/SiStripSourceConfigTier0_cff.py +++ b/DQM/SiStripMonitorClient/python/SiStripSourceConfigTier0_cff.py @@ -103,34 +103,6 @@ MonitorTrackResiduals.errorReplyHlt = cms.bool( False ) MonitorTrackResiduals.andOrHlt = cms.bool(True) -# Clone for TrackingMonitor for all PDs but MinBias and Jet #### -import DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi -TrackerCollisionTrackMonCommon = DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi.TrackerCollisionTrackMon.clone() -TrackerCollisionTrackMonCommon.FolderName = 'Tracking/TrackParameters' -TrackerCollisionTrackMonCommon.andOr = cms.bool( False ) -TrackerCollisionTrackMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -TrackerCollisionTrackMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -TrackerCollisionTrackMonCommon.andOrDcs = cms.bool( False ) -TrackerCollisionTrackMonCommon.errorReplyDcs = cms.bool( True ) - -# Clone for TrackingMonitor for MinBias ### -import DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi -TrackerCollisionTrackMonMB = DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi.TrackerCollisionTrackMon.clone() -TrackerCollisionTrackMonMB.FolderName = 'Tracking/TrackParameters' -TrackerCollisionTrackMonMB.andOr = cms.bool( False ) -TrackerCollisionTrackMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -TrackerCollisionTrackMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -TrackerCollisionTrackMonMB.andOrDcs = cms.bool( False ) -TrackerCollisionTrackMonMB.errorReplyDcs = cms.bool( True ) -TrackerCollisionTrackMonMB.dbLabel = cms.string("SiStripDQMTrigger") -TrackerCollisionTrackMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -TrackerCollisionTrackMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") -TrackerCollisionTrackMonMB.hltDBKey = cms.string("Tracker_MB") -TrackerCollisionTrackMonMB.errorReplyHlt = cms.bool( False ) -TrackerCollisionTrackMonMB.andOrHlt = cms.bool(True) - -from DQM.TrackingMonitor.TrackingMonitorSeedNumber_cff import * - # DQM Services dqmInfoSiStrip = cms.EDAnalyzer("DQMEventInfo", subSystemFolder = cms.untracked.string('SiStrip') @@ -146,209 +118,22 @@ # APV Phase Producer from DPGAnalysis.SiStripTools.apvcyclephaseproducerfroml1ts2011_cfi import * -# LogMessageMonitor #### -from DQM.TrackingMonitor.LogMessageMonitor_cff import * -### LocalReco -# Clone for all PDs but MinBias #### -LocalRecoLogMessageMonCommon = DQM.TrackingMonitor.LogMessageMonitor_cff.LocalRecoLogMessageMon.clone() -LocalRecoLogMessageMonCommon.andOr = cms.bool( False ) -LocalRecoLogMessageMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -LocalRecoLogMessageMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -LocalRecoLogMessageMonCommon.andOrDcs = cms.bool( False ) -LocalRecoLogMessageMonCommon.errorReplyDcs = cms.bool( True ) - -# Clone for MinBias ### -LocalRecoLogMessageMonMB = DQM.TrackingMonitor.LogMessageMonitor_cff.LocalRecoLogMessageMon.clone() -LocalRecoLogMessageMonMB.andOr = cms.bool( False ) -LocalRecoLogMessageMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -LocalRecoLogMessageMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -LocalRecoLogMessageMonMB.andOrDcs = cms.bool( False ) -LocalRecoLogMessageMonMB.errorReplyDcs = cms.bool( True ) -LocalRecoLogMessageMonMB.dbLabel = cms.string("SiStripDQMTrigger") -LocalRecoLogMessageMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -LocalRecoLogMessageMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") -LocalRecoLogMessageMonMB.hltDBKey = cms.string("Tracker_MB") -LocalRecoLogMessageMonMB.errorReplyHlt = cms.bool( False ) -LocalRecoLogMessageMonMB.andOrHlt = cms.bool(True) - -### Clusterizer -# Clone for all PDs but MinBias #### -ClusterizerLogMessageMonCommon = DQM.TrackingMonitor.LogMessageMonitor_cff.ClusterizerLogMessageMon.clone() -ClusterizerLogMessageMonCommon.andOr = cms.bool( False ) -ClusterizerLogMessageMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -ClusterizerLogMessageMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -ClusterizerLogMessageMonCommon.andOrDcs = cms.bool( False ) -ClusterizerLogMessageMonCommon.errorReplyDcs = cms.bool( True ) - -# Clone for MinBias ### -ClusterizerLogMessageMonMB = DQM.TrackingMonitor.LogMessageMonitor_cff.ClusterizerLogMessageMon.clone() -ClusterizerLogMessageMonMB.andOr = cms.bool( False ) -ClusterizerLogMessageMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -ClusterizerLogMessageMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -ClusterizerLogMessageMonMB.andOrDcs = cms.bool( False ) -ClusterizerLogMessageMonMB.errorReplyDcs = cms.bool( True ) -ClusterizerLogMessageMonMB.dbLabel = cms.string("SiStripDQMTrigger") -ClusterizerLogMessageMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -ClusterizerLogMessageMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") -ClusterizerLogMessageMonMB.hltDBKey = cms.string("Tracker_MB") -ClusterizerLogMessageMonMB.errorReplyHlt = cms.bool( False ) -ClusterizerLogMessageMonMB.andOrHlt = cms.bool(True) - -### Seeding -# Clone for all PDs but MinBias #### -SeedingLogMessageMonCommon = DQM.TrackingMonitor.LogMessageMonitor_cff.SeedingLogMessageMon.clone() -SeedingLogMessageMonCommon.andOr = cms.bool( False ) -SeedingLogMessageMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -SeedingLogMessageMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -SeedingLogMessageMonCommon.andOrDcs = cms.bool( False ) -SeedingLogMessageMonCommon.errorReplyDcs = cms.bool( True ) - -# Clone for MinBias ### -SeedingLogMessageMonMB = DQM.TrackingMonitor.LogMessageMonitor_cff.SeedingLogMessageMon.clone() -SeedingLogMessageMonMB.andOr = cms.bool( False ) -SeedingLogMessageMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -SeedingLogMessageMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -SeedingLogMessageMonMB.andOrDcs = cms.bool( False ) -SeedingLogMessageMonMB.errorReplyDcs = cms.bool( True ) -SeedingLogMessageMonMB.dbLabel = cms.string("SiStripDQMTrigger") -SeedingLogMessageMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -SeedingLogMessageMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") -SeedingLogMessageMonMB.hltDBKey = cms.string("Tracker_MB") -SeedingLogMessageMonMB.errorReplyHlt = cms.bool( False ) -SeedingLogMessageMonMB.andOrHlt = cms.bool(True) - -### TrackCandidate -# Clone for all PDs but MinBias #### -TrackCandidateLogMessageMonCommon = DQM.TrackingMonitor.LogMessageMonitor_cff.TrackCandidateLogMessageMon.clone() -TrackCandidateLogMessageMonCommon.andOr = cms.bool( False ) -TrackCandidateLogMessageMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -TrackCandidateLogMessageMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -TrackCandidateLogMessageMonCommon.andOrDcs = cms.bool( False ) -TrackCandidateLogMessageMonCommon.errorReplyDcs = cms.bool( True ) - -# Clone for MinBias ### -TrackCandidateLogMessageMonMB = DQM.TrackingMonitor.LogMessageMonitor_cff.TrackCandidateLogMessageMon.clone() -TrackCandidateLogMessageMonMB.andOr = cms.bool( False ) -TrackCandidateLogMessageMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -TrackCandidateLogMessageMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -TrackCandidateLogMessageMonMB.andOrDcs = cms.bool( False ) -TrackCandidateLogMessageMonMB.errorReplyDcs = cms.bool( True ) -TrackCandidateLogMessageMonMB.dbLabel = cms.string("SiStripDQMTrigger") -TrackCandidateLogMessageMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -TrackCandidateLogMessageMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") -TrackCandidateLogMessageMonMB.hltDBKey = cms.string("Tracker_MB") -TrackCandidateLogMessageMonMB.errorReplyHlt = cms.bool( False ) -TrackCandidateLogMessageMonMB.andOrHlt = cms.bool(True) - -### TrackFinder -# Clone for all PDs but MinBias #### -TrackFinderLogMessageMonCommon = DQM.TrackingMonitor.LogMessageMonitor_cff.TrackFinderLogMessageMon.clone() -TrackFinderLogMessageMonCommon.andOr = cms.bool( False ) -TrackFinderLogMessageMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -TrackFinderLogMessageMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -TrackFinderLogMessageMonCommon.andOrDcs = cms.bool( False ) -TrackFinderLogMessageMonCommon.errorReplyDcs = cms.bool( True ) - -# Clone for MinBias ### -TrackFinderLogMessageMonMB = DQM.TrackingMonitor.LogMessageMonitor_cff.TrackFinderLogMessageMon.clone() -TrackFinderLogMessageMonMB.andOr = cms.bool( False ) -TrackFinderLogMessageMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) -TrackFinderLogMessageMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) -TrackFinderLogMessageMonMB.andOrDcs = cms.bool( False ) -TrackFinderLogMessageMonMB.errorReplyDcs = cms.bool( True ) -TrackFinderLogMessageMonMB.dbLabel = cms.string("SiStripDQMTrigger") -TrackFinderLogMessageMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -TrackFinderLogMessageMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") -TrackFinderLogMessageMonMB.hltDBKey = cms.string("Tracker_MB") -TrackFinderLogMessageMonMB.errorReplyHlt = cms.bool( False ) -TrackFinderLogMessageMonMB.andOrHlt = cms.bool(True) - -# dEdx monitor #### -from DQM.TrackingMonitor.dEdxAnalyzer_cff import * -import DQM.TrackingMonitor.dEdxAnalyzer_cfi -# Clone for all PDs but MinBias #### -dEdxMonCommon = DQM.TrackingMonitor.dEdxAnalyzer_cfi.dEdxAnalyzer.clone() - -# Clone for MinBias #### -dEdxMonMB = DQM.TrackingMonitor.dEdxAnalyzer_cfi.dEdxAnalyzer.clone() -dEdxMonMB.dEdxParameters.andOr = cms.bool( False ) -dEdxMonMB.dEdxParameters.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -dEdxMonMB.dEdxParameters.hltPaths = cms.vstring("HLT_ZeroBias_*") -dEdxMonMB.dEdxParameters.hltDBKey = cms.string("Tracker_MB") -dEdxMonMB.dEdxParameters.errorReplyHlt = cms.bool( False ) -dEdxMonMB.dEdxParameters.andOrHlt = cms.bool(True) - -# Clone for SingleMu #### -dEdxMonMU = DQM.TrackingMonitor.dEdxAnalyzer_cfi.dEdxAnalyzer.clone() -dEdxMonMU.dEdxParameters.andOr = cms.bool( False ) -dEdxMonMU.dEdxParameters.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) -dEdxMonMU.dEdxParameters.hltPaths = cms.vstring("HLT_SingleMu40_Eta2p1_*") -dEdxMonMU.dEdxParameters.errorReplyHlt = cms.bool( False ) -dEdxMonMU.dEdxParameters.andOrHlt = cms.bool(True) - - # temporary patch in order to have BXlumi from RecoLuminosity.LumiProducer.lumiProducer_cff import * -# temporary test in order to temporary produce the "goodPrimaryVertexCollection" -# define with a new name if changes are necessary, otherwise simply include -# it from CommonTools/ParticleFlow/python/goodOfflinePrimaryVertices_cfi.py -# uncomment when necessary -from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector -from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices -trackingDQMgoodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone() -trackingDQMgoodOfflinePrimaryVertices.filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ) -trackingDQMgoodOfflinePrimaryVertices.src=cms.InputTag('offlinePrimaryVertices') -trackingDQMgoodOfflinePrimaryVertices.filter = cms.bool(False) - # Sequence SiStripDQMTier0 = cms.Sequence( APVPhases*consecutiveHEs*siStripFEDCheck*siStripFEDMonitor*SiStripMonitorDigi*SiStripMonitorClusterBPTX *SiStripMonitorTrackCommon*MonitorTrackResiduals - # dEdx monitoring -# *RefitterForDedxDQMDeDx * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO * dEdxMonCommon - * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO * dEdxMonCommon - -# # temporary patch in order to have BXlumi -# * lumiProducer - # temporary test in order to have the "goodPrimaryVertexCollection" -# * trackingDQMgoodOfflinePrimaryVertices - *TrackerCollisionTrackMonCommon - *TrackMonStep0*TrackMonStep1*TrackMonStep2*TrackMonStep3*TrackMonStep4*TrackMonStep5*TrackMonStep6*TrackMonStep9*TrackMonStep10 - # MessageLog - * LocalRecoLogMessageMonCommon * ClusterizerLogMessageMonCommon * SeedingLogMessageMonCommon * TrackCandidateLogMessageMonCommon * TrackFinderLogMessageMonCommon *dqmInfoSiStrip) SiStripDQMTier0Common = cms.Sequence( APVPhases*consecutiveHEs*siStripFEDCheck*siStripFEDMonitor*SiStripMonitorDigi*SiStripMonitorClusterBPTX *SiStripMonitorTrackCommon - # dEdx monitoring -# *RefitterForDedxDQMDeDx * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO * dEdxMonCommon - * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO * dEdxMonCommon - -# # temporary patch in order to have BXlumi -# * lumiProducer -# # temporary test in order to have the "goodPrimaryVertexCollection" -# * trackingDQMgoodOfflinePrimaryVertices - *TrackerCollisionTrackMonCommon - *TrackMonStep0*TrackMonStep1*TrackMonStep2*TrackMonStep3*TrackMonStep4*TrackMonStep5*TrackMonStep6*TrackMonStep9*TrackMonStep10 - # MessageLog - * LocalRecoLogMessageMonCommon * ClusterizerLogMessageMonCommon * SeedingLogMessageMonCommon * TrackCandidateLogMessageMonCommon * TrackFinderLogMessageMonCommon *dqmInfoSiStrip) SiStripDQMTier0MinBias = cms.Sequence( APVPhases*consecutiveHEs*siStripFEDCheck*siStripFEDMonitor*SiStripMonitorDigi*SiStripMonitorClusterBPTX *SiStripMonitorTrackMB*MonitorTrackResiduals - # dEdx monitoring -# *RefitterForDedxDQMDeDx * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO * dEdxMonMB - * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO * dEdxMonMB - -# * lumiProducer -# # temporary test in order to have the "goodPrimaryVertexCollection" -# * trackingDQMgoodOfflinePrimaryVertices - *TrackerCollisionTrackMonMB - *TrackMonStep0*TrackMonStep1*TrackMonStep2*TrackMonStep3*TrackMonStep4*TrackMonStep5*TrackMonStep6*TrackMonStep9*TrackMonStep10 - # MessageLog - * LocalRecoLogMessageMonMB * ClusterizerLogMessageMonMB * SeedingLogMessageMonMB * TrackCandidateLogMessageMonMB * TrackFinderLogMessageMonMB *dqmInfoSiStrip) diff --git a/DQM/SiStripMonitorClient/src/SiStripCertificationInfo.cc b/DQM/SiStripMonitorClient/src/SiStripCertificationInfo.cc index bb6811d7a9ffa..d0947e6163ed7 100644 --- a/DQM/SiStripMonitorClient/src/SiStripCertificationInfo.cc +++ b/DQM/SiStripMonitorClient/src/SiStripCertificationInfo.cc @@ -35,7 +35,6 @@ SiStripCertificationInfo::SiStripCertificationInfo(edm::ParameterSet const& pSet edm::LogInfo( "SiStripCertificationInfo") << "SiStripCertificationInfo::Deleting SiStripCertificationInfo "; // get back-end interface dqmStore_ = edm::Service().operator->(); - trackingCertificationBooked_ = false; sistripCertificationBooked_ = false; } SiStripCertificationInfo::~SiStripCertificationInfo() { @@ -81,9 +80,7 @@ void SiStripCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup con } bookSiStripCertificationMEs(); - bookTrackingCertificationMEs(); fillDummySiStripCertification(); - fillDummyTrackingCertification(); } // @@ -168,38 +165,6 @@ void SiStripCertificationInfo::bookSiStripCertificationMEs() { } } // -// -- Book MEs for SiStrip Sertification fractions -// -void SiStripCertificationInfo::bookTrackingCertificationMEs() { - if (!trackingCertificationBooked_) { - std::string tracking_dir = ""; - SiStripUtility::getTopFolderPath(dqmStore_, "Tracking", tracking_dir); - if (tracking_dir.size() > 0) { - dqmStore_->setCurrentFolder(tracking_dir+"/EventInfo"); - TrackingCertification = dqmStore_->bookFloat("CertificationSummary"); - - dqmStore_->setCurrentFolder(tracking_dir+"/EventInfo/CertificationContents"); - - std::string type; - MonitorElement* me; - type = "Rate"; - me = dqmStore_->bookFloat("Track"+type); - TrackingMEsMap.insert(std::pair(type,me)); - - type = "Chi2"; - me = dqmStore_->bookFloat("Track"+type); - TrackingMEsMap.insert(std::pair(type,me)); - - type = "RecHits"; - me = dqmStore_->bookFloat("Track"+type); - TrackingMEsMap.insert(std::pair(type,me)); - - trackingCertificationBooked_ = true; - dqmStore_->cd(); - } - } -} -// // -- Analyze // void SiStripCertificationInfo::analyze(edm::Event const& event, edm::EventSetup const& eSetup) { @@ -208,11 +173,11 @@ void SiStripCertificationInfo::analyze(edm::Event const& event, edm::EventSetup // -- End Luminosity Block // void SiStripCertificationInfo::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& iSetup) { + std::cout << "[SiStripCertificationInfo::endLuminosityBlock] " << std::endl; edm::LogInfo( "SiStripDaqInfo") << "SiStripDaqInfo::endLuminosityBlock"; if (nFEDConnected_ > 0) { fillSiStripCertificationMEsAtLumi(); - fillTrackingCertificationMEs(iSetup); } } @@ -224,45 +189,7 @@ void SiStripCertificationInfo::endRun(edm::Run const& run, edm::EventSetup const if (nFEDConnected_ > 0) { fillSiStripCertificationMEs(eSetup); - fillTrackingCertificationMEs(eSetup); - } -} -// -// --Fill Tracking Certification -// -void SiStripCertificationInfo::fillTrackingCertificationMEs(edm::EventSetup const& eSetup) { - if (!trackingCertificationBooked_) { - edm::LogError("SiStripCertificationInfo") << " SiStripCertificationInfo::fillTrackingCertificationMEs : MEs missing "; - return; } - std::string tk_dir = ""; - SiStripUtility::getTopFolderPath(dqmStore_, "Tracking", tk_dir); - if (tk_dir.size() == 0) { - fillDummyTrackingCertification(); - return; - } - - std::vector all_mes = dqmStore_->getContents(tk_dir+"/EventInfo/reportSummaryContents"); - float fval = 1.0; - for (std::vector::const_iterator it = all_mes.begin(); - it!= all_mes.end(); it++) { - MonitorElement * me = (*it); - if (!me) continue; - if (me->kind() == MonitorElement::DQM_KIND_REAL) { - std::string name = me->getName(); - float val = me->getFloatValue(); - for (std::map::const_iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - std::string type = it->first; - if (name.find(type) != std::string::npos) { - it->second->Fill(val); - break; - } - } - fval *= val; - } - } - TrackingCertification->Fill(fval); } // // --Fill SiStrip Certification @@ -347,19 +274,6 @@ void SiStripCertificationInfo::fillSiStripCertificationMEs(edm::EventSetup const SiStripCertification->Fill(fminf(fraction_global,ston_frac_global)); } // -// --Reset Tracking Certification -// -void SiStripCertificationInfo::resetTrackingCertificationMEs() { - if (!trackingCertificationBooked_) bookTrackingCertificationMEs(); - if (trackingCertificationBooked_) { - TrackingCertification->Reset(); - for (std::map::const_iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - it->second->Reset(); - } - } -} -// // --Fill SiStrip Certification // void SiStripCertificationInfo::resetSiStripCertificationMEs() { @@ -394,20 +308,6 @@ void SiStripCertificationInfo::fillDummySiStripCertification() { } } // -// -- Fill Dummy Tracking Certification -// -void SiStripCertificationInfo::fillDummyTrackingCertification() { - resetTrackingCertificationMEs(); - if (trackingCertificationBooked_) { - TrackingCertification->Fill(-1.0); - for (std::map::const_iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - it->second->Fill(-1.0); - } - - } -} -// // --Fill SiStrip Certification // void SiStripCertificationInfo::fillSiStripCertificationMEsAtLumi() { diff --git a/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc b/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc index 72632666154a1..8087fedc35f20 100644 --- a/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc +++ b/DQM/SiStripMonitorClient/src/SiStripQualityChecker.cc @@ -28,7 +28,6 @@ SiStripQualityChecker::SiStripQualityChecker(edm::ParameterSet const& ps):pSet_( " Creating SiStripQualityChecker " << "\n" ; bookedStripStatus_ = false; - bookedTrackingStatus_ = false; SubDetFolderMap.insert(std::pair("TIB", "TIB")); SubDetFolderMap.insert(std::pair("TOB", "TOB")); @@ -47,54 +46,6 @@ SiStripQualityChecker::SiStripQualityChecker(edm::ParameterSet const& ps):pSet_( } tkDetMap_=edm::Service().operator->(); - TrackingMEs tracking_mes; - edm::ParameterSet TkPSet; - - TkPSet = pSet_.getParameter("TrackRatePSet"); - tracking_mes.TrackingFlag = 0; - tracking_mes.HistoName = TkPSet.getParameter("Name"); - tracking_mes.LowerCut = TkPSet.getParameter("LowerCut"); - tracking_mes.UpperCut = TkPSet.getParameter("UpperCut"); - TrackingMEsMap.insert(std::pair("Rate", tracking_mes)); - - TkPSet = pSet_.getParameter("TrackChi2PSet"); - tracking_mes.TrackingFlag = 0; - tracking_mes.HistoName = TkPSet.getParameter("Name"); - tracking_mes.LowerCut = TkPSet.getParameter("LowerCut"); - tracking_mes.UpperCut = TkPSet.getParameter("UpperCut"); - TrackingMEsMap.insert(std::pair("Chi2", tracking_mes)); - - TkPSet = pSet_.getParameter("TrackHitPSet"); - tracking_mes.TrackingFlag = 0; - tracking_mes.HistoName = TkPSet.getParameter("Name"); - tracking_mes.LowerCut = TkPSet.getParameter("LowerCut"); - tracking_mes.UpperCut = TkPSet.getParameter("UpperCut"); - TrackingMEsMap.insert(std::pair("RecHits", tracking_mes)); - -// // LS analysis -// TkPSet = pSet_.getParameter("TrackRateLSPSet"); -// tracking_mes.TrackingFlag = 0; -// tracking_mes.HistoName = TkPSet.getParameter("Name"); -// tracking_mes.LowerCut = TkPSet.getParameter("LowerCut"); -// tracking_mes.UpperCut = TkPSet.getParameter("UpperCut"); -// TrackingMEsLSMap.insert(std::pair("Rate", tracking_mes)); -// -// TkPSet = pSet_.getParameter("TrackChi2LSPSet"); -// tracking_mes.TrackingFlag = 0; -// tracking_mes.HistoName = TkPSet.getParameter("Name"); -// tracking_mes.LowerCut = TkPSet.getParameter("LowerCut"); -// tracking_mes.UpperCut = TkPSet.getParameter("UpperCut"); -// TrackingMEsLSMap.insert(std::pair("Chi2", tracking_mes)); -// -// TkPSet = pSet_.getParameter("TrackHitLSPSet"); -// tracking_mes.TrackingFlag = 0; -// tracking_mes.HistoName = TkPSet.getParameter("Name"); -// tracking_mes.LowerCut = TkPSet.getParameter("LowerCut"); -// tracking_mes.UpperCut = TkPSet.getParameter("UpperCut"); -// TrackingMEsLSMap.insert(std::pair("RecHits", tracking_mes)); - - useGoodTracks_ = pSet_.getUntrackedParameter("UseGoodTracks", false); - if (useGoodTracks_) edm::LogInfo("SiStripQualityChecker") << " use GoodTrack histograms for certification " << "\n" ; } // // -- Destructor @@ -172,38 +123,6 @@ void SiStripQualityChecker::bookStatus(DQMStore* dqm_store) { } bookedStripStatus_ = true; } - if (!bookedTrackingStatus_) { - dqm_store->cd(); - std::string tracking_dir = ""; - SiStripUtility::getTopFolderPath(dqm_store, "Tracking", tracking_dir); - if (tracking_dir.size() == 0) tracking_dir = "Tracking"; - dqm_store->setCurrentFolder(tracking_dir+"/EventInfo"); - - TrackSummaryReportGlobal = dqm_store->bookFloat("reportSummary"); - - std::string hname, htitle; - hname = "reportSummaryMap"; - htitle = "Tracking Report Summary Map"; - - TrackSummaryReportMap = dqm_store->book2D(hname, htitle, 3,0.5,3.5,1,0.5,1.5); - TrackSummaryReportMap->setAxisTitle("Track Quality Type", 1); - TrackSummaryReportMap->setAxisTitle("QTest Flag", 2); - TrackSummaryReportMap->setBinLabel(1,"Rate"); - TrackSummaryReportMap->setBinLabel(2,"Chi2"); - TrackSummaryReportMap->setBinLabel(3,"RecHits"); - - dqm_store->setCurrentFolder(tracking_dir+"/EventInfo/reportSummaryContents"); - int ibin = 0; - for (std::map::iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - ibin++; - std::string name = it->first; - it->second.TrackingFlag = dqm_store->bookFloat("Track"+name); - TrackSummaryReportMap->setBinLabel(ibin,name); - } - bookedTrackingStatus_ = true; - dqm_store->cd(); - } } // // -- Fill Dummy Status @@ -215,38 +134,20 @@ void SiStripQualityChecker::fillDummyStatus(){ for (std::map::const_iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) { SubDetMEs local_mes = it->second; - local_mes.DetFraction->Fill(-1.0); - local_mes.SToNFlag->Fill(-1.0); - local_mes.SummaryFlag->Fill(-1.0); + local_mes.SummaryFlag -> Fill(-1.0); + local_mes.DetFraction -> Fill(-1.0); + local_mes.SToNFlag -> Fill(-1.0); } for (int xbin = 1; xbin < SummaryReportMap->getNbinsX()+1; xbin++) { for (int ybin = 1; ybin < SummaryReportMap->getNbinsY()+1; ybin++) { - DetFractionReportMap->Fill(xbin, ybin, -1.0); - SToNReportMap->Fill(xbin, ybin, -1.0); - SummaryReportMap->Fill(xbin, ybin, -1.0); + SummaryReportMap -> Fill(xbin, ybin, -1.0); + DetFractionReportMap -> Fill(xbin, ybin, -1.0); + SToNReportMap -> Fill(xbin, ybin, -1.0); } } SummaryReportGlobal->Fill(-1.0); } - if (bookedTrackingStatus_) { - TrackSummaryReportGlobal->Fill(-1.0); - for (int xbin = 1; xbin < TrackSummaryReportMap->getNbinsX()+1; xbin++) { - for (int ybin = 1; ybin < TrackSummaryReportMap->getNbinsY()+1; ybin++) { - TrackSummaryReportMap->Fill(xbin, ybin, -1.0); - } - } - for (std::map::iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - it->second.TrackingFlag->Fill(-1.0); - } - /* - for (std::map::iterator it = TrackingMEsLSMap.begin(); - it != TrackingMEsLSMap.end(); it++) { - it->second.TrackingFlag->Fill(-1.0); - } - */ - } } // // -- Reset Status @@ -256,41 +157,25 @@ void SiStripQualityChecker::resetStatus() { for (std::map::const_iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) { SubDetMEs local_mes = it->second; - local_mes.DetFraction->Reset(); - local_mes.SToNFlag->Reset(); - local_mes.SummaryFlag->Reset(); + local_mes.DetFraction -> Reset(); + local_mes.SummaryFlag -> Reset(); + local_mes.SToNFlag -> Reset(); } - + SummaryReportMap->Reset(); DetFractionReportMap->Reset(); SToNReportMap->Reset(); - SummaryReportMap->Reset(); SummaryReportGlobal->Reset(); } - if (bookedTrackingStatus_) { - TrackSummaryReportGlobal->Reset(); - TrackSummaryReportMap->Reset(); - for (std::map::iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - it->second.TrackingFlag->Reset(); - } - /* - for (std::map::iterator it = TrackingMEsLSMap.begin(); - it != TrackingMEsLSMap.end(); it++) { - it->second.TrackingFlag->Reset(); - } - */ - } } // // -- Fill Status // void SiStripQualityChecker::fillStatus(DQMStore* dqm_store, const edm::ESHandle< SiStripDetCabling >& cabling, const edm::EventSetup& eSetup) { - if (!bookedStripStatus_ || !bookedTrackingStatus_) bookStatus(dqm_store); + if (!bookedStripStatus_) bookStatus(dqm_store); fillDummyStatus(); fillDetectorStatus(dqm_store, cabling); - fillTrackingStatus(dqm_store); int faulty_moduleflag = pSet_.getUntrackedParameter("PrintFaultyModuleList", false); if (faulty_moduleflag) fillFaultyModuleStatus(dqm_store, eSetup); @@ -326,63 +211,13 @@ void SiStripQualityChecker::fillDetectorStatus(DQMStore* dqm_store, const edm::E dqm_store->cd(); } // -// -- Fill Tracking Status -// -void SiStripQualityChecker::fillTrackingStatus(DQMStore* dqm_store) { - - dqm_store->cd(); - std::string dir = "Tracking"; - if (!SiStripUtility::goToDir(dqm_store, dir)) return; - dir = "TrackParameters"; - if (!SiStripUtility::goToDir(dqm_store, dir)) return; - - std::vector meVec1; - std::vector meVec2; - if (useGoodTracks_){ - meVec1 = dqm_store->getContents(dqm_store->pwd()+"/GeneralProperties/GoodTracks"); - meVec2 = dqm_store->getContents(dqm_store->pwd()+"/HitProperties/GoodTracks"); - }else{ - meVec1 = dqm_store->getContents(dqm_store->pwd()+"/GeneralProperties"); - meVec2 = dqm_store->getContents(dqm_store->pwd()+"/HitProperties"); - } - std::vector meVec(meVec1.size() + meVec2.size()); - std::merge(meVec1.begin(), meVec1.end(), meVec2.begin(), meVec2.end(), meVec.begin()); - - float gstatus = 1.0; - for (std::vector::const_iterator itME = meVec.begin(); itME != meVec.end(); itME++) { - MonitorElement * me = (*itME); - if (!me) continue; - std::vector qt_reports = me->getQReports(); - if (qt_reports.size() == 0) continue; - std::string name = me->getName(); - - float status = 1.0; - - int ibin = 0; - for (std::map::const_iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - ibin++; - std::string hname = it->second.HistoName; - if (name.find(hname) != std::string::npos) { - status = qt_reports[0]->getQTresult(); - it->second.TrackingFlag->Fill(status); - fillStatusHistogram(TrackSummaryReportMap, ibin, 1, status); - break; - } - } - gstatus = gstatus * status; - } - TrackSummaryReportGlobal->Fill(gstatus); - dqm_store->cd(); -} -// // -- Fill Sub detector Reports // void SiStripQualityChecker::fillSubDetStatus(DQMStore* dqm_store, - const edm::ESHandle< SiStripDetCabling >& cabling, - SubDetMEs& mes, unsigned int xbin, float& gflag) { + const edm::ESHandle< SiStripDetCabling >& cabling, + SubDetMEs& mes, unsigned int xbin, float& gflag) { + int status_flag = pSet_.getUntrackedParameter("GlobalStatusFilling", 1); - if (status_flag < 1) return; std::vector subDirVec = dqm_store->getSubdirs(); @@ -433,7 +268,7 @@ void SiStripQualityChecker::fillSubDetStatus(DQMStore* dqm_store, fillStatusHistogram(SToNReportMap, xbin, ybin, ston_stat); fillStatusHistogram(DetFractionReportMap, xbin, ybin, eff_fac); if (ston_stat < 0) fillStatusHistogram(SummaryReportMap, xbin, ybin, eff_fac); - else fillStatusHistogram(SummaryReportMap, xbin, ybin, ston_stat*eff_fac); + else fillStatusHistogram(SummaryReportMap, xbin, ybin, ston_stat*eff_fac); tot_ndet += ndet; tot_errdet += errdet; @@ -616,20 +451,23 @@ void SiStripQualityChecker::initialiseBadModuleList() { // -- Fill Status information and the lumi block // void SiStripQualityChecker::fillStatusAtLumi(DQMStore* dqm_store){ - if (!bookedStripStatus_ || !bookedTrackingStatus_) bookStatus(dqm_store); + if (!bookedStripStatus_) bookStatus(dqm_store); fillDummyStatus(); fillDetectorStatusAtLumi(dqm_store); - fillTrackingStatusAtLumi(dqm_store); } // // Fill Detector Status MEs at the Lumi block // void SiStripQualityChecker::fillDetectorStatusAtLumi(DQMStore* dqm_store){ + + + dqm_store->cd(); std::string rdir = "ReadoutView"; if (!SiStripUtility::goToDir(dqm_store, rdir)) return; std::string fullpath = dqm_store->pwd() - + "/FedSummary/PerLumiSection/" + // + "/FedSummary/PerLumiSection/" + + "/PerLumiSection/" + "lumiErrorFraction"; MonitorElement* me = dqm_store->get(fullpath); if (me && me->kind() == MonitorElement::DQM_KIND_TH1F) { @@ -643,9 +481,9 @@ void SiStripQualityChecker::fillDetectorStatusAtLumi(DQMStore* dqm_store){ float fraction = 1.0 - th1->GetBinContent(ibin); global_fraction += fraction; dets++; - iPos->second.DetFraction->Fill(fraction); - iPos->second.SToNFlag->Fill(-1.0); - iPos->second.SummaryFlag->Fill(fraction); + iPos->second.DetFraction -> Fill(fraction); + iPos->second.SToNFlag -> Fill(-1.0); + iPos->second.SummaryFlag -> Fill(fraction); } } global_fraction = global_fraction/dets; @@ -653,54 +491,3 @@ void SiStripQualityChecker::fillDetectorStatusAtLumi(DQMStore* dqm_store){ } dqm_store->cd(); } -// -// Fill Tracking Status MEs at the Lumi block -// -void SiStripQualityChecker::fillTrackingStatusAtLumi(DQMStore* dqm_store){ - dqm_store->cd(); - std::string dir = "Tracking"; - if (!SiStripUtility::goToDir(dqm_store, dir)) return; - dir = "TrackParameters"; - if (!SiStripUtility::goToDir(dqm_store, dir)) return; - - std::vector meVec1; - std::vector meVec2; - if (useGoodTracks_){ - meVec1 = dqm_store->getContents(dqm_store->pwd()+"/LSanalysis"); - // meVec2 = dqm_store->getContents(dqm_store->pwd()+"/HitProperties/LSanalysis"); - }else{ - meVec1 = dqm_store->getContents(dqm_store->pwd()+"/GeneralProperties"); - meVec2 = dqm_store->getContents(dqm_store->pwd()+"/HitProperties"); - } - std::vector meVec(meVec1.size() + meVec2.size()); - std::merge(meVec1.begin(), meVec1.end(), meVec2.begin(), meVec2.end(), meVec.begin()); - - float gstatus = 1.0; - for (std::vector::const_iterator itME = meVec.begin(); itME != meVec.end(); itME++) { - MonitorElement * me = (*itME); - if (!me) continue; - std::string name = me->getName(); - - float status = -1.0; - int ibin = 0; - for (std::map::const_iterator it = TrackingMEsMap.begin(); - it != TrackingMEsMap.end(); it++) { - ibin++; - std::string hname = it->second.HistoName+"lumiFlag_"; - float lower_cut = it->second.LowerCut; - float upper_cut = it->second.UpperCut; - if (name.find(hname) != std::string::npos) { - if (me->getMean() <= lower_cut || me->getMean() > upper_cut) status = 0.0; - else status = 1.0; - it->second.TrackingFlag->Fill(status); - fillStatusHistogram(TrackSummaryReportMap, ibin, 1, status); - break; - } else { - } - } - if (status == -1.0) gstatus = -1.0; - else gstatus = gstatus * status; - } - TrackSummaryReportGlobal->Fill(gstatus); - dqm_store->cd(); -} diff --git a/DQM/SiStripMonitorClient/src/SiStripUtility.cc b/DQM/SiStripMonitorClient/src/SiStripUtility.cc index 6000ac11304bd..43d39d54529f5 100644 --- a/DQM/SiStripMonitorClient/src/SiStripUtility.cc +++ b/DQM/SiStripMonitorClient/src/SiStripUtility.cc @@ -301,36 +301,20 @@ void SiStripUtility::getBadModuleStatus(uint16_t flag, std::string & message){ // // -- Set Event Info Folder // -void SiStripUtility::getTopFolderPath(DQMStore * dqm_store, std::string type, std::string& path) { - if (type != "SiStrip" && type != "Tracking") return; +void SiStripUtility::getTopFolderPath(DQMStore * dqm_store, std::string top_dir, std::string& path) { + path = ""; dqm_store->cd(); - if (type == "SiStrip") { - if (dqm_store->dirExists(type)) { - dqm_store->cd(type); - path = dqm_store->pwd(); - } else { - if (SiStripUtility::goToDir(dqm_store, type)) { - std::string mdir = "MechanicalView"; - if (SiStripUtility::goToDir(dqm_store, mdir)) { - path = dqm_store->pwd(); - path = path.substr(0, path.find(mdir)-1); - } + if (dqm_store->dirExists(top_dir)) { + dqm_store->cd(top_dir); + path = dqm_store->pwd(); + } else { + if (SiStripUtility::goToDir(dqm_store, top_dir)) { + std::string mdir = "MechanicalView"; + if (SiStripUtility::goToDir(dqm_store, mdir)) { + path = dqm_store->pwd(); + path = path.substr(0, path.find(mdir)-1); } } - } else if (type == "Tracking") { - std::string top_dir = "Tracking"; - if (dqm_store->dirExists(top_dir)) { - dqm_store->cd(top_dir); - path = dqm_store->pwd(); - } else { - if (SiStripUtility::goToDir(dqm_store, top_dir)) { - std::string tdir = "TrackParameters"; - if (SiStripUtility::goToDir(dqm_store, tdir)) { - path = dqm_store->pwd(); - path = path.substr(0, path.find(tdir)-1); - } - } - } } } diff --git a/DQM/TrackingMonitor/interface/TrackAnalyzer.h b/DQM/TrackingMonitor/interface/TrackAnalyzer.h index 4212652c123d4..2a8939d138323 100644 --- a/DQM/TrackingMonitor/interface/TrackAnalyzer.h +++ b/DQM/TrackingMonitor/interface/TrackAnalyzer.h @@ -22,6 +22,8 @@ Monitoring source for general quantities related to tracks. #include "DQMServices/Core/interface/MonitorElement.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" class DQMStore; @@ -33,6 +35,7 @@ class TrackAnalyzer TrackAnalyzer(const edm::ParameterSet&, edm::ConsumesCollector& iC); virtual ~TrackAnalyzer(); virtual void beginJob(DQMStore * dqmStore_); + virtual void beginRun(DQMStore * dqmStore_); virtual void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::Track& track); @@ -42,22 +45,29 @@ class TrackAnalyzer void setLumiFlag(); private: - + void initHistos(); void fillHistosForState(const edm::EventSetup& iSetup, const reco::Track & track, std::string sname); - void bookHistosForState(std::string sname, DQMStore * dqmStore_); - void doTrackerSpecificInitialization(DQMStore * dqmStore_); - void doTrackerSpecificFillHists(const reco::Track & track); + void bookHistosForState(std::string sname,DQMStore * dqmStore_); + void bookHistosForHitProperties(DQMStore * dqmStore_); + void bookHistosForLScertification(DQMStore * dqmStore_); + void bookHistosForBeamSpot(DQMStore * dqmStore_); + void bookHistosForTrackerSpecific(DQMStore * dqmStore_); + void fillHistosForHitProperties(const edm::EventSetup& iSetup, const reco::Track & track, std::string sname); + void fillHistosForLScertification(const edm::EventSetup& iSetup, const reco::Track & track, std::string sname); + void fillHistosForTrackerSpecific(const reco::Track & track); // ----------member data --------------------------- + std::string TopFolder_; edm::EDGetTokenT beamSpotToken_; + edm::EDGetTokenT pvToken_; edm::ParameterSet conf_; bool doTrackerSpecific_; bool doAllPlots_; bool doBSPlots_; - bool doGoodTrackPlots_; + bool doPVPlots_; bool doDCAPlots_; bool doGeneralPropertiesPlots_; bool doMeasurementStatePlots_; @@ -65,16 +75,17 @@ class TrackAnalyzer bool doRecHitVsPhiVsEtaPerTrack_; // ADD by Mia bool doLayersVsPhiVsEtaPerTrack_; - bool doGoodTrackRecHitVsPhiVsEtaPerTrack_; - bool doGoodTrackLayersVsPhiVsEtaPerTrack_; - bool doGoodTrack2DChi2Plots_; - + bool doTrackRecHitVsPhiVsEtaPerTrack_; + bool doTrackLayersVsPhiVsEtaPerTrack_; + bool doTrack2DChi2Plots_; + bool doRecHitsPerTrackProfile_; // ADD by Mia in order to clean the tracking MEs // do not plot *Theta* and TrackPx* and TrackPy* bool doThetaPlots_; bool doTrackPxPyPlots_; // ADD by Mia in order to not plot DistanceOfClosestApproach w.r.t. (0,0,0) // the DistanceOfClosestApproach w.r.t. the beam-spot is already shown in DistanceOfClosestApproachToBS + bool doDCAwrtPVPlots_; bool doDCAwrt000Plots_; bool doLumiAnalysis_; @@ -82,201 +93,185 @@ class TrackAnalyzer // ADD by Mia in order to turnON test MEs bool doTestPlots_; - MonitorElement* NumberOfRecHitsPerTrack; - MonitorElement* NumberOfRecHitsFoundPerTrack; - MonitorElement* NumberOfRecHitsLostPerTrack; - MonitorElement* NumberOfLayersPerTrack; - MonitorElement* NumberOfRecHitVsPhiVsEtaPerTrack; - MonitorElement* NumberOfLayersVsPhiVsEtaPerTrack; - MonitorElement* Chi2; - MonitorElement* Chi2Prob; - MonitorElement* Chi2oNDF; - MonitorElement* DistanceOfClosestApproach; - MonitorElement* DistanceOfClosestApproachToBS; - MonitorElement* DistanceOfClosestApproachVsTheta; - MonitorElement* DistanceOfClosestApproachVsPhi; - MonitorElement* DistanceOfClosestApproachToBSVsPhi; - MonitorElement* DistanceOfClosestApproachVsEta; - MonitorElement* xPointOfClosestApproach; - MonitorElement* xPointOfClosestApproachVsZ0wrt000; - MonitorElement* xPointOfClosestApproachVsZ0wrtBS; - MonitorElement* yPointOfClosestApproach; - MonitorElement* yPointOfClosestApproachVsZ0wrt000; - MonitorElement* yPointOfClosestApproachVsZ0wrtBS; - MonitorElement* zPointOfClosestApproach; - MonitorElement* zPointOfClosestApproachVsPhi; + struct TkParameterMEs { + TkParameterMEs() : + TrackP(NULL) + , TrackPx(NULL) + , TrackPy(NULL) + , TrackPz(NULL) + , TrackPt(NULL) + + , TrackPxErr(NULL) + , TrackPyErr(NULL) + , TrackPzErr(NULL) + , TrackPtErr(NULL) + , TrackPErr(NULL) + + , TrackPtErrVsEta(NULL) + + , TrackQ(NULL) + + , TrackPhi(NULL) + , TrackEta(NULL) + , TrackTheta(NULL) + + , TrackPhiErr(NULL) + , TrackEtaErr(NULL) + , TrackThetaErr(NULL) + + , NumberOfRecHitsPerTrackVsPhi(NULL) + , NumberOfRecHitsPerTrackVsTheta(NULL) + , NumberOfRecHitsPerTrackVsEta(NULL) + , NumberOfRecHitVsPhiVsEtaPerTrack(NULL) + + , NumberOfValidRecHitsPerTrackVsPhi(NULL) + , NumberOfValidRecHitsPerTrackVsTheta(NULL) + , NumberOfValidRecHitsPerTrackVsEta(NULL) + , NumberOfValidRecHitVsPhiVsEtaPerTrack(NULL) + + , NumberOfLayersPerTrackVsPhi(NULL) + , NumberOfLayersPerTrackVsTheta(NULL) + , NumberOfLayersPerTrackVsEta(NULL) + + , Chi2oNDFVsEta(NULL) + , Chi2oNDFVsPhi(NULL) + , Chi2oNDFVsTheta(NULL) + + , Chi2ProbVsEta(NULL) + , Chi2ProbVsPhi(NULL) + , Chi2ProbVsTheta(NULL) + {} + + MonitorElement* TrackP; + MonitorElement* TrackPx; + MonitorElement* TrackPy; + MonitorElement* TrackPz; + MonitorElement* TrackPt; + + MonitorElement* TrackPxErr; + MonitorElement* TrackPyErr; + MonitorElement* TrackPzErr; + MonitorElement* TrackPtErr; + MonitorElement* TrackPErr; + + MonitorElement* TrackPtErrVsEta; + + MonitorElement* TrackQ; + + MonitorElement* TrackPhi; + MonitorElement* TrackEta; + MonitorElement* TrackTheta; + + MonitorElement* TrackPhiErr; + MonitorElement* TrackEtaErr; + MonitorElement* TrackThetaErr; + + MonitorElement* NumberOfRecHitsPerTrackVsPhi; + MonitorElement* NumberOfRecHitsPerTrackVsTheta; + MonitorElement* NumberOfRecHitsPerTrackVsEta; + MonitorElement* NumberOfRecHitVsPhiVsEtaPerTrack; + + MonitorElement* NumberOfValidRecHitsPerTrackVsPhi; + MonitorElement* NumberOfValidRecHitsPerTrackVsTheta; + MonitorElement* NumberOfValidRecHitsPerTrackVsEta; + MonitorElement* NumberOfValidRecHitVsPhiVsEtaPerTrack; + + MonitorElement* NumberOfLayersPerTrackVsPhi; + MonitorElement* NumberOfLayersPerTrackVsTheta; + MonitorElement* NumberOfLayersPerTrackVsEta; + + MonitorElement* Chi2oNDFVsEta; + MonitorElement* Chi2oNDFVsPhi; + MonitorElement* Chi2oNDFVsTheta; + + MonitorElement* Chi2ProbVsEta; + MonitorElement* Chi2ProbVsPhi; + MonitorElement* Chi2ProbVsTheta; + + }; + std::map TkParameterMEMap; + + + MonitorElement* NumberOfRecHitsPerTrack; + MonitorElement* NumberOfValidRecHitsPerTrack; + MonitorElement* NumberOfLostRecHitsPerTrack; + + MonitorElement* NumberOfRecHitsPerTrackVsPhi; + MonitorElement* NumberOfRecHitsPerTrackVsTheta; + MonitorElement* NumberOfRecHitsPerTrackVsEta; + MonitorElement* NumberOfRecHitVsPhiVsEtaPerTrack; + + MonitorElement* NumberOfValidRecHitsPerTrackVsPhi; + MonitorElement* NumberOfValidRecHitsPerTrackVsTheta; + MonitorElement* NumberOfValidRecHitsPerTrackVsEta; + MonitorElement* NumberOfValidRecHitVsPhiVsEtaPerTrack; + + MonitorElement* NumberOfLayersPerTrack; + + MonitorElement* NumberOfLayersPerTrackVsPhi; + MonitorElement* NumberOfLayersPerTrackVsTheta; + MonitorElement* NumberOfLayersPerTrackVsEta; + + MonitorElement* NumberOfLayersVsPhiVsEtaPerTrack; + + MonitorElement* Chi2; + MonitorElement* Chi2Prob; + MonitorElement* Chi2oNDF; + + MonitorElement* Chi2oNDFVsEta; + MonitorElement* Chi2oNDFVsPhi; + MonitorElement* Chi2oNDFVsTheta; + + MonitorElement* Chi2ProbVsEta; + MonitorElement* Chi2ProbVsPhi; + MonitorElement* Chi2ProbVsTheta; + + MonitorElement* DistanceOfClosestApproach; + MonitorElement* DistanceOfClosestApproachToBS; + MonitorElement* DistanceOfClosestApproachToPV; + MonitorElement* DistanceOfClosestApproachVsTheta; + MonitorElement* DistanceOfClosestApproachVsPhi; + MonitorElement* DistanceOfClosestApproachToBSVsPhi; + MonitorElement* DistanceOfClosestApproachToPVVsPhi; + MonitorElement* DistanceOfClosestApproachVsEta; + MonitorElement* xPointOfClosestApproach; + MonitorElement* xPointOfClosestApproachToPV; + MonitorElement* xPointOfClosestApproachVsZ0wrt000; + MonitorElement* xPointOfClosestApproachVsZ0wrtBS; + MonitorElement* xPointOfClosestApproachVsZ0wrtPV; + MonitorElement* yPointOfClosestApproach; + MonitorElement* yPointOfClosestApproachToPV; + MonitorElement* yPointOfClosestApproachVsZ0wrt000; + MonitorElement* yPointOfClosestApproachVsZ0wrtBS; + MonitorElement* yPointOfClosestApproachVsZ0wrtPV; + MonitorElement* zPointOfClosestApproach; + MonitorElement* zPointOfClosestApproachToPV; + MonitorElement* zPointOfClosestApproachVsPhi; MonitorElement* algorithm; // TESTING MEs - MonitorElement* TESTDistanceOfClosestApproachToBS; - MonitorElement* TESTDistanceOfClosestApproachToBSVsPhi; - + MonitorElement* TESTDistanceOfClosestApproachToBS; + MonitorElement* TESTDistanceOfClosestApproachToBSVsPhi; + // add by Mia in order to deal w/ LS transitions MonitorElement* Chi2oNDF_lumiFlag; MonitorElement* NumberOfRecHitsPerTrack_lumiFlag; - MonitorElement* GoodTrackChi2oNDF_lumiFlag; - MonitorElement* GoodTrackNumberOfRecHitsPerTrack_lumiFlag; - - MonitorElement* NumberOfTOBRecHitsPerTrack; - MonitorElement* NumberOfTOBRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfTOBRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfTOBLayersPerTrack; - MonitorElement* NumberOfTOBLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfTOBLayersPerTrackVsEtaProfile; - - MonitorElement* NumberOfTIBRecHitsPerTrack; - MonitorElement* NumberOfTIBRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfTIBRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfTIBLayersPerTrack; - MonitorElement* NumberOfTIBLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfTIBLayersPerTrackVsEtaProfile; - - MonitorElement* NumberOfTIDRecHitsPerTrack; - MonitorElement* NumberOfTIDRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfTIDRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfTIDLayersPerTrack; - MonitorElement* NumberOfTIDLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfTIDLayersPerTrackVsEtaProfile; - - MonitorElement* NumberOfTECRecHitsPerTrack; - MonitorElement* NumberOfTECRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfTECRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfTECLayersPerTrack; - MonitorElement* NumberOfTECLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfTECLayersPerTrackVsEtaProfile; - - MonitorElement* NumberOfPixBarrelRecHitsPerTrack; - MonitorElement* NumberOfPixBarrelRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfPixBarrelRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfPixBarrelLayersPerTrack; - MonitorElement* NumberOfPixBarrelLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfPixBarrelLayersPerTrackVsEtaProfile; - - MonitorElement* NumberOfPixEndcapRecHitsPerTrack; - MonitorElement* NumberOfPixEndcapRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfPixEndcapRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfPixEndcapLayersPerTrack; - MonitorElement* NumberOfPixEndcapLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfPixEndcapLayersPerTrackVsEtaProfile; - - MonitorElement* GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack; - MonitorElement* GoodTrackNumberOfLayersVsPhiVsEtaPerTrack; - MonitorElement* GoodTrackNumberOfRecHitsPerTrackVsPhiProfile; - MonitorElement* GoodTrackNumberOfRecHitsPerTrackVsEtaProfile; - MonitorElement* GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile; - MonitorElement* GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile; - MonitorElement* GoodTrackChi2oNDF; - MonitorElement* GoodTrackChi2Prob; - MonitorElement* GoodTrackChi2oNDFVsPhi; - MonitorElement* GoodTrackChi2ProbVsPhi; - MonitorElement* GoodTrackChi2oNDFVsEta; - MonitorElement* GoodTrackChi2ProbVsEta; - MonitorElement* GoodTrackNumberOfRecHitsPerTrack; - MonitorElement* GoodTrackNumberOfFoundRecHitsPerTrack; - MonitorElement* GoodTrackAlgorithm; - - struct TkParameterMEs - { - TkParameterMEs() - : TrackP(NULL) - , TrackPx(NULL) - , TrackPy(NULL) - , TrackPz(NULL) - , TrackPt(NULL) - - , TrackPxErr(NULL) - , TrackPyErr(NULL) - , TrackPzErr(NULL) - , TrackPtErr(NULL) - , TrackPErr(NULL) - - , TrackPtErrVsEta(NULL) - - , TrackQ(NULL) - - , TrackPhi(NULL) - , TrackEta(NULL) - , TrackTheta(NULL) - - , TrackPhiErr(NULL) - , TrackEtaErr(NULL) - , TrackThetaErr(NULL) - - , NumberOfRecHitsPerTrackVsPhi(NULL) - , NumberOfRecHitsPerTrackVsTheta(NULL) - , NumberOfRecHitsPerTrackVsEta(NULL) - , NumberOfRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfRecHitsPerTrackVsThetaProfile(NULL) - , NumberOfRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfLayersPerTrackVsPhi(NULL) - , NumberOfLayersPerTrackVsTheta(NULL) - , NumberOfLayersPerTrackVsEta(NULL) - , NumberOfLayersPerTrackVsPhiProfile(NULL) - , NumberOfLayersPerTrackVsThetaProfile(NULL) - , NumberOfLayersPerTrackVsEtaProfile(NULL) - - , Chi2oNDFVsTheta(NULL) - , Chi2oNDFVsPhi(NULL) - , Chi2oNDFVsEta(NULL) - , Chi2oNDFVsThetaProfile(NULL) - , Chi2oNDFVsPhiProfile(NULL) - , Chi2oNDFVsEtaProfile(NULL) - - , GoodTrackPt(NULL) - , GoodTrackEta(NULL) - , GoodTrackPhi(NULL) - {} - - MonitorElement* TrackP; - MonitorElement* TrackPx; - MonitorElement* TrackPy; - MonitorElement* TrackPz; - MonitorElement* TrackPt; - - MonitorElement* TrackPxErr; - MonitorElement* TrackPyErr; - MonitorElement* TrackPzErr; - MonitorElement* TrackPtErr; - MonitorElement* TrackPErr; - - MonitorElement* TrackPtErrVsEta; - - MonitorElement* TrackQ; - - MonitorElement* TrackPhi; - MonitorElement* TrackEta; - MonitorElement* TrackTheta; - - MonitorElement* TrackPhiErr; - MonitorElement* TrackEtaErr; - MonitorElement* TrackThetaErr; - - MonitorElement* NumberOfRecHitsPerTrackVsPhi; - MonitorElement* NumberOfRecHitsPerTrackVsTheta; - MonitorElement* NumberOfRecHitsPerTrackVsEta; - MonitorElement* NumberOfRecHitsPerTrackVsPhiProfile; - MonitorElement* NumberOfRecHitsPerTrackVsThetaProfile; - MonitorElement* NumberOfRecHitsPerTrackVsEtaProfile; - MonitorElement* NumberOfLayersPerTrackVsPhi; - MonitorElement* NumberOfLayersPerTrackVsTheta; - MonitorElement* NumberOfLayersPerTrackVsEta; - MonitorElement* NumberOfLayersPerTrackVsPhiProfile; - MonitorElement* NumberOfLayersPerTrackVsThetaProfile; - MonitorElement* NumberOfLayersPerTrackVsEtaProfile; - - MonitorElement* Chi2oNDFVsTheta; - MonitorElement* Chi2oNDFVsPhi; - MonitorElement* Chi2oNDFVsEta; - MonitorElement* Chi2oNDFVsThetaProfile; - MonitorElement* Chi2oNDFVsPhiProfile; - MonitorElement* Chi2oNDFVsEtaProfile; - - MonitorElement* GoodTrackPt; - MonitorElement* GoodTrackEta; - MonitorElement* GoodTrackPhi; - }; - - std::map TkParameterMEMap; - + + + struct TkRecHitsPerSubDetMEs { + MonitorElement* NumberOfRecHitsPerTrack; + MonitorElement* NumberOfRecHitsPerTrackVsPhi; + MonitorElement* NumberOfRecHitsPerTrackVsEta; + MonitorElement* NumberOfLayersPerTrack; + MonitorElement* NumberOfLayersPerTrackVsPhi; + MonitorElement* NumberOfLayersPerTrackVsEta; + + int detectorId; + std::string detectorTag; + }; + std::map TkRecHitsPerSubDetMEMap; + + + std::string histname; //for naming the histograms according to algorithm used }; #endif diff --git a/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h b/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h index 53dff7039406d..d8da91d4442ec 100644 --- a/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h +++ b/DQM/TrackingMonitor/interface/TrackBuildingAnalyzer.h @@ -36,7 +36,7 @@ class TrackBuildingAnalyzer public: TrackBuildingAnalyzer(const edm::ParameterSet&); virtual ~TrackBuildingAnalyzer(); - virtual void beginJob(DQMStore * dqmStore_); + virtual void beginRun(DQMStore * dqmStore_); virtual void analyze ( const edm::Event& iEvent, diff --git a/DQM/TrackingMonitor/interface/TrackingMonitor.h b/DQM/TrackingMonitor/interface/TrackingMonitor.h index bcaad0161e7aa..206d8ec816c87 100644 --- a/DQM/TrackingMonitor/interface/TrackingMonitor.h +++ b/DQM/TrackingMonitor/interface/TrackingMonitor.h @@ -68,6 +68,7 @@ class TrackingMonitor : public edm::EDAnalyzer std::string histname; //for naming the histograms according to algorithm used DQMStore * dqmStore_; + edm::ParameterSet conf_; // the track analyzer @@ -76,6 +77,8 @@ class TrackingMonitor : public edm::EDAnalyzer edm::EDGetTokenT bsSrcToken_; edm::EDGetTokenT pvSrcToken_; + edm::EDGetTokenT allTrackToken_; + edm::EDGetTokenT trackToken_; edm::EDGetTokenT trackCandidateToken_; edm::EDGetTokenT > seedToken_; @@ -100,11 +103,11 @@ class TrackingMonitor : public edm::EDAnalyzer MonitorElement * NumberOfMeanLayersPerTrack; // Good Tracks - MonitorElement * NumberOfGoodTracks; MonitorElement * FractionOfGoodTracks; // Track Seeds MonitorElement * NumberOfSeeds; + MonitorElement * NumberOfSeeds_lumiFlag; std::vector SeedsVsClusters; std::vector ClusterLabels; @@ -113,34 +116,22 @@ class TrackingMonitor : public edm::EDAnalyzer MonitorElement * NumberOfTrackCandidates; // Cluster Properties - /* - MonitorElement* NumberOfPixelClus; - MonitorElement* NumberOfStripClus; - MonitorElement* RatioOfPixelAndStripClus; - */ std::vector NumberOfTrkVsClusters; MonitorElement* NumberOfTrkVsClus; MonitorElement* NumberOfTrkVsStripClus; MonitorElement* NumberOfTrkVsPixelClus; - MonitorElement* NumberOfGoodTrkVsClus; // Monitoring vs LS MonitorElement* NumberOfTracksVsLS; - MonitorElement* NumberOfGoodTracksVsLS; MonitorElement* GoodTracksFractionVsLS; - MonitorElement* GoodTracksNumberOfRecHitsPerTrackVsLS; + MonitorElement* NumberOfRecHitsPerTrackVsLS; // Monitoring PU MonitorElement* NumberOfTracksVsGoodPVtx; MonitorElement* NumberOfTracksVsBXlumi; - MonitorElement* NumberOfGoodTracksVsGoodPVtx; - MonitorElement* NumberOfGoodTracksVsBXlumi; - MonitorElement* FractionOfGoodTracksVsGoodPVtx; - MonitorElement* FractionOfGoodTracksVsBXlumi; - + // add in order to deal with LS transitions MonitorElement * NumberOfTracks_lumiFlag; - MonitorElement * NumberOfGoodTracks_lumiFlag; std::string builderName; edm::ESHandle theTTRHBuilder; @@ -155,13 +146,14 @@ class TrackingMonitor : public edm::EDAnalyzer bool doHitPropertiesPlots_; bool doTkCandPlots; bool doSeedNumberPlot; + bool doSeedLumiAnalysis_; bool doSeedVsClusterPlot; bool runTrackBuildingAnalyzerForSeed; // ADD by Mia in order to have GoodTrack plots only for collision - bool doGoodTrackPlots_; bool doPUmonitoring_; bool doPlotsVsBXlumi_; bool doPlotsVsGoodPVtx_; + bool doFractionPlot_; GenericTriggerEventFlag* genTriggerEventFlag_; }; diff --git a/DQM/TrackingMonitor/python/MonitorTrackSTAMuons_cfi.py b/DQM/TrackingMonitor/python/MonitorTrackSTAMuons_cfi.py index 530930fc75748..8143dd87921c0 100644 --- a/DQM/TrackingMonitor/python/MonitorTrackSTAMuons_cfi.py +++ b/DQM/TrackingMonitor/python/MonitorTrackSTAMuons_cfi.py @@ -35,26 +35,26 @@ MonitorTrackSTAMuons.doDCAPlots = cms.bool(False) MonitorTrackSTAMuons.doGeneralPropertiesPlots = cms.bool(True) MonitorTrackSTAMuons.doHitPropertiesPlots = cms.bool(True) -MonitorTrackSTAMuons.doGoodTrackPlots = cms.bool(False) +#MonitorTrackSTAMuons.doGoodTrackPlots = cms.bool(False) MonitorTrackSTAMuons.doMeasurementStatePlots = cms.bool(True) MonitorTrackSTAMuons.doProfilesVsLS = cms.bool(False) MonitorTrackSTAMuons.doRecHitVsPhiVsEtaPerTrack = cms.bool(False) -MonitorTrackSTAMuons.doGoodTrackRecHitVsPhiVsEtaPerTrack = cms.bool(False) +#MonitorTrackSTAMuons.doGoodTrackRecHitVsPhiVsEtaPerTrack = cms.bool(False) #which seed plots to do -MonitorTrackSTAMuons.doSeedNumberHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedNumberHisto = cms.bool(False) MonitorTrackSTAMuons.doSeedVsClusterHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedPTHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedETAHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedPHIHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedPHIVsETAHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedThetaHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedQHisto = cms.bool(False) -MonitorTrackSTAMuons.doSeedDxyHisto= cms.bool(False) -MonitorTrackSTAMuons.doSeedDzHisto= cms.bool(False) -MonitorTrackSTAMuons.doSeedNRecHitsHisto= cms.bool(False) -MonitorTrackSTAMuons.doSeedNVsPhiProf= cms.bool(False) -MonitorTrackSTAMuons.doSeedNVsEtaProf= cms.bool(False) +MonitorTrackSTAMuons.doSeedPTHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedETAHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedPHIHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedPHIVsETAHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedThetaHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedQHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedDxyHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedDzHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedNRecHitsHisto = cms.bool(False) +MonitorTrackSTAMuons.doSeedNVsPhiProf = cms.bool(False) +MonitorTrackSTAMuons.doSeedNVsEtaProf = cms.bool(False) # paramters of the Track diff --git a/DQM/TrackingMonitor/python/TrackingMonitorSeedNumber_cff.py b/DQM/TrackingMonitor/python/TrackingMonitorSeedNumber_cff.py index 8dde3e6e68e54..f7b3cfaad83ae 100644 --- a/DQM/TrackingMonitor/python/TrackingMonitorSeedNumber_cff.py +++ b/DQM/TrackingMonitor/python/TrackingMonitorSeedNumber_cff.py @@ -94,9 +94,9 @@ TrackMonStep9.SeedProducer = cms.InputTag("muonSeededSeedsInOut") TrackMonStep9.TCProducer = cms.InputTag("muonSeededTrackCandidatesInOut") TrackMonStep9.AlgoName = cms.string('iter9') -TrackMonStep9.TkSeedSizeBin = cms.int32(400) -TrackMonStep9.TkSeedSizeMax = cms.double(100000) -TrackMonStep9.TkSeedSizeMin = cms.double(0) +TrackMonStep9.TkSeedSizeBin = cms.int32(15) +TrackMonStep9.TkSeedSizeMax = cms.double(14.5) +TrackMonStep9.TkSeedSizeMin = cms.double(-0.5) TrackMonStep9.NClusStrBin = cms.int32(500) TrackMonStep9.NClusStrMax = cms.double(100000) TrackMonStep9.ClusterLabels = cms.vstring('Strip') @@ -106,9 +106,9 @@ TrackMonStep10.SeedProducer = cms.InputTag("muonSeededSeedsOutIn") TrackMonStep10.TCProducer = cms.InputTag("muonSeededTrackCandidatesOutIn") TrackMonStep10.AlgoName = cms.string('iter10') -TrackMonStep10.TkSeedSizeBin = cms.int32(400) -TrackMonStep10.TkSeedSizeMax = cms.double(100000) -TrackMonStep10.TkSeedSizeMin = cms.double(0) +TrackMonStep10.TkSeedSizeBin = cms.int32(15) +TrackMonStep10.TkSeedSizeMax = cms.double(14.5) +TrackMonStep10.TkSeedSizeMin = cms.double(-0.5) TrackMonStep10.NClusStrBin = cms.int32(500) TrackMonStep10.NClusStrMax = cms.double(100000) TrackMonStep10.ClusterLabels = cms.vstring('Strip') diff --git a/DQM/TrackingMonitor/python/TrackingMonitorSeed_cfi.py b/DQM/TrackingMonitor/python/TrackingMonitorSeed_cfi.py index 1d365266a2aa2..d7f48c5e1d9c1 100644 --- a/DQM/TrackingMonitor/python/TrackingMonitorSeed_cfi.py +++ b/DQM/TrackingMonitor/python/TrackingMonitorSeed_cfi.py @@ -4,29 +4,31 @@ TrackMonSeed = DQM.TrackingMonitor.TrackingMonitor_cfi.TrackMon.clone() -TrackMonSeed.OutputMEsInRootFile = cms.bool(False) -TrackMonSeed.OutputFileName = cms.string('TrackingMonitorSeedMultiplicity.root') -TrackMonSeed.MeasurementState = cms.string('ImpactPoint') -TrackMonSeed.FolderName = cms.string('Tracking/TrackParameters') -TrackMonSeed.BSFolderName = 'Tracking/TrackParameters/BeamSpotParameters' -TrackMonSeed.AlgoName = cms.string('Seed') -TrackMonSeed.doGoodTrackPlots = cms.bool(False) -TrackMonSeed.doTrackerSpecific = cms.bool(False) -TrackMonSeed.doAllPlots = cms.bool(False) -TrackMonSeed.doHitPropertiesPlots = cms.bool(False) -TrackMonSeed.doGeneralPropertiesPlots = cms.bool(False) -TrackMonSeed.doBeamSpotPlots = cms.bool(False) -TrackMonSeed.doSeedParameterHistos = cms.bool(False) -TrackMonSeed.doLumiAnalysis = cms.bool(False) -TrackMonSeed.doMeasurementStatePlots = cms.bool(False) +TrackMonSeed.OutputMEsInRootFile = cms.bool(False) +TrackMonSeed.OutputFileName = cms.string('TrackingMonitorSeedMultiplicity.root') +TrackMonSeed.MeasurementState = cms.string('ImpactPoint') +TrackMonSeed.FolderName = cms.string('Tracking/TrackParameters') +TrackMonSeed.BSFolderName = cms.string('Tracking/TrackParameters/BeamSpotParameters') +TrackMonSeed.AlgoName = cms.string('Seed') +#TrackMonSeed.doGoodTrackPlots = cms.bool(False) +TrackMonSeed.doTrackerSpecific = cms.bool(False) +TrackMonSeed.doAllPlots = cms.bool(False) +TrackMonSeed.doHitPropertiesPlots = cms.bool(False) +TrackMonSeed.doGeneralPropertiesPlots = cms.bool(False) +TrackMonSeed.doBeamSpotPlots = cms.bool(False) +TrackMonSeed.doSeedParameterHistos = cms.bool(False) +TrackMonSeed.doLumiAnalysis = cms.bool(False) +TrackMonSeed.doMeasurementStatePlots = cms.bool(False) +TrackMonSeed.doRecHitsPerTrackProfile = cms.bool(False) TrackMonSeed.doRecHitVsPhiVsEtaPerTrack = cms.bool(False) -TrackMonSeed.doGoodTrackRecHitVsPhiVsEtaPerTrack = cms.bool(False) +#TrackMonSeed.doGoodTrackRecHitVsPhiVsEtaPerTrack = cms.bool(False) # # plot on Seed (total number, pt, seed # vs cluster) # -TrackMonSeed.doSeedNumberHisto = cms.bool(True) +TrackMonSeed.doSeedNumberHisto = cms.bool(True) +TrackMonSeed.doSeedLumiAnalysis = cms.bool(True) TrackMonSeed.doSeedVsClusterHisto = cms.bool(True) -TrackMonSeed.doSeedPTHisto = cms.bool(True) -TrackMonSeed.doSeedETAHisto = cms.bool(True) -TrackMonSeed.doSeedPHIHisto = cms.bool(True) +TrackMonSeed.doSeedPTHisto = cms.bool(True) +TrackMonSeed.doSeedETAHisto = cms.bool(True) +TrackMonSeed.doSeedPHIHisto = cms.bool(True) TrackMonSeed.doSeedPHIVsETAHisto = cms.bool(True) diff --git a/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py b/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py index 6066273dbbfac..7728f84f707ad 100644 --- a/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py +++ b/DQM/TrackingMonitor/python/TrackingMonitor_cfi.py @@ -5,6 +5,7 @@ TrackMon = cms.EDAnalyzer("TrackingMonitor", # input tags + allTrackProducer = cms.InputTag("generalTracks"), TrackProducer = cms.InputTag("generalTracks"), SeedProducer = cms.InputTag("initialStepSeeds"), TCProducer = cms.InputTag("initialStepTrackCandidates"), @@ -48,20 +49,23 @@ doAllPlots = cms.bool(True), doTrackerSpecific = cms.bool(False), doBeamSpotPlots = cms.bool(False), + doPrimaryVertexPlots = cms.bool(False), doSeedParameterHistos = cms.bool(False), doTrackCandHistos = cms.bool(False), doDCAPlots = cms.bool(False), + doDCAwrtPVPlots = cms.bool(False), doDCAwrt000Plots = cms.bool(False), doGeneralPropertiesPlots = cms.bool(False), doHitPropertiesPlots = cms.bool(False), - doGoodTrackPlots = cms.bool(False), +# doGoodTrackPlots = cms.bool(False), doMeasurementStatePlots = cms.bool(True), doProfilesVsLS = cms.bool(False), + doRecHitsPerTrackProfile = cms.bool(True), doRecHitVsPhiVsEtaPerTrack = cms.bool(False), - doGoodTrackRecHitVsPhiVsEtaPerTrack = cms.bool(False), +# doGoodTrackRecHitVsPhiVsEtaPerTrack = cms.bool(False), doLayersVsPhiVsEtaPerTrack = cms.bool(False), - doGoodTrackLayersVsPhiVsEtaPerTrack = cms.bool(False), - doGoodTrack2DChi2Plots = cms.bool(False), +# doGoodTrackLayersVsPhiVsEtaPerTrack = cms.bool(False), +# doGoodTrack2DChi2Plots = cms.bool(False), doThetaPlots = cms.bool(False), doTrackPxPyPlots = cms.bool(False), doPUmonitoring = cms.bool(False), @@ -71,6 +75,7 @@ #which seed plots to do doSeedNumberHisto = cms.bool(False), + doSeedLumiAnalysis = cms.bool(False), doSeedVsClusterHisto = cms.bool(False), doSeedPTHisto = cms.bool(False), doSeedETAHisto = cms.bool(False), @@ -151,35 +156,8 @@ MeanHitMax = cms.double(29.5), MeanHitMin = cms.double(-0.5), - # num TOB rec hits - TOBHitBin = cms.int32(15), - TOBHitMax = cms.double(14.5), - TOBHitMin = cms.double(-0.5), - - # num TIB rec hits - TIBHitBin = cms.int32(15), - TIBHitMax = cms.double(14.5), - TIBHitMin = cms.double(-0.5), - - # num TID rec hits - TIDHitBin = cms.int32(15), - TIDHitMax = cms.double(14.5), - TIDHitMin = cms.double(-0.5), - - # num TEC rec hits - TECHitBin = cms.int32(25), - TECHitMax = cms.double(24.5), - TECHitMin = cms.double(-0.5), - - # num PXB rec hits - PXBHitBin = cms.int32(10), - PXBHitMax = cms.double(9.5), - PXBHitMin = cms.double(-0.5), - - # num PXF rec hits - PXFHitBin = cms.int32(10), - PXFHitMax = cms.double(9.5), - PXFHitMin = cms.double(-0.5), + subdetectors = cms.vstring( "TIB", "TOB", "TID", "TEC", "PixBarrel", "PixEndcap" ), + subdetectorBin = cms.int32(25), # num rec hits lost RecLostBin = cms.int32(10), @@ -192,8 +170,8 @@ RecLayMin = cms.double(-0.5), # mean layers - MeanLayBin = cms.int32(20), - MeanLayMax = cms.double(19.5), + MeanLayBin = cms.int32(25), + MeanLayMax = cms.double(24.5), MeanLayMin = cms.double(-0.5), # num TOB Layers @@ -316,6 +294,11 @@ VZMax = cms.double(30.0), VZMin = cms.double(-30.0), + # PCA z position for profile + VZBinProf = cms.int32(100), + VZMaxProf = cms.double(0.2), + VZMinProf = cms.double(-0.2), + # PCA x position for 2D plot X0Bin = cms.int32(100), X0Max = cms.double(0.5), diff --git a/DQM/TrackingMonitor/src/LogMessageMonitor.cc b/DQM/TrackingMonitor/src/LogMessageMonitor.cc index ee6a462776635..b8acb7d6775ed 100644 --- a/DQM/TrackingMonitor/src/LogMessageMonitor.cc +++ b/DQM/TrackingMonitor/src/LogMessageMonitor.cc @@ -2,12 +2,12 @@ // // Package: LogMessageMonitor // Class: LogMessageMonitor -// +// /**\class LogMessageMonitor LogMessageMonitor.cc DQM/LogMonitor/src/LogMessageMonitor.cc Description: [one line class summary] from https://twiki.cern.ch/twiki/bin/view/CMS/TrackingPOGFilters#Filters - Events with (partly) aborted track reconstruction + Events with (partly) aborted track reconstruction The track reconstruction code is protected against events with too large occupancy which can cause an excessive use of CPU time and memory. Each iteration of the track reconstruction can be aborted if: - too many strip and/or pixel clusters are present as input to the seeding step (*TooManyClusters* error). @@ -16,9 +16,9 @@ => All the pairs/triplets found are discarded and the iteration continue (to be checked!) NB: Despite the thrshold is the same, similar iterations may have a different rate of errors depending on the CMSSW release, - because the requirement to accept a triplet/pair has been modified (cluster shape filters,...) + because the requirement to accept a triplet/pair has been modified (cluster shape filters,...) - too many seeds are produced as input to the track building step (*TooManySeeds*). - => No track is reconstructed from that iteration. + => No track is reconstructed from that iteration. # ELSeverityLevel http://cmssdt.cern.ch/SDT/lxr/source/FWCore/MessageLogger/interface/ELseverityLevel.h?v=CMSSW_5_3_4 @@ -83,11 +83,11 @@ LogMessageMonitor::LogMessageMonitor(const edm::ParameterSet& iConfig) , modules_vector_ ( iConfig.getParameter >("modules") ) , categories_vector_ ( iConfig.getParameter >("categories") ) , doWarningsPlots_ ( iConfig.getParameter ("doWarningsPlots") ) - , doPUmonitoring_ ( iConfig.getParameter ("doPUmonitoring") ) + , doPUmonitoring_ ( iConfig.getParameter ("doPUmonitoring") ) { - + errorToken_ = consumes >(edm::InputTag("logErrorHarvester") ); - + edm::ConsumesCollector c{ consumesCollector() }; //now do what ever initialization is needed lumiDetails_ = new GetLumi( iConfig.getParameter("BXlumiSetup"), c ); @@ -97,7 +97,7 @@ LogMessageMonitor::LogMessageMonitor(const edm::ParameterSet& iConfig) LogMessageMonitor::~LogMessageMonitor() { - + // do anything here that needs to be done at desctruction time // (e.g. close files, deallocate resources etc.) // if ( lumiDetails_ ) delete lumiDetails_; @@ -121,16 +121,16 @@ LogMessageMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet double BXlumi = -1.; if ( doPUmonitoring_ ) lumiDetails_->getValue(iEvent); - + // Take the ErrorSummaryEntry container edm::Handle > errors; // iEvent.getByLabel("logErrorHarvester",errors); iEvent.getByToken(errorToken_,errors); // Check that errors is valid - if(!errors.isValid()) return; + if(!errors.isValid()) return; // Compare severity level of error with ELseveritylevel instance el : "-e" should be the lowest error edm::ELseverityLevel el("-e"); - + // Find the total number of errors in iEvent if(errors->size()==0){ if ( doPUmonitoring_ ) { @@ -144,8 +144,8 @@ LogMessageMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet size_t nCategories = categories_vector_.size(); - for( size_t i = 0, n = errors->size(); i < n ; i++){ - + for( size_t i = 0, n = errors->size(); i < n ; i++){ + // std::cout << "LogMessageMonitor::analyze] Severity for error/warning: " << (*errors)[i].severity << " " <<(*errors)[i].module << std::endl; // remove the first part of the module string, what is before ":" std::string s = (*errors)[i].module; @@ -185,11 +185,11 @@ LogMessageMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet CategoriesVsModules->getTH1()->SetBinContent(ibinX,ibinY,ncount); } else { int ncount = CategoriesVsModules->getTH1()->GetBinContent(ibinX,nCategories)+1; - CategoriesVsModules->getTH1()->SetBinContent(ibinX,nCategories,ncount); + CategoriesVsModules->getTH1()->SetBinContent(ibinX,nCategories,ncount); } } else { // IF ONLY WARNING, FILL WARNING HISTS - if ( doWarningsPlots_ ) + if ( doWarningsPlots_ ) if ( doPUmonitoring_ ) ModulesWarningsVsBXlumi[it->second]->Fill(BXlumi, (*errors)[i].count); } @@ -200,10 +200,10 @@ LogMessageMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet // ------------ method called once each job just before starting event loop ------------ -void +void LogMessageMonitor::beginJob() { - std::string MEFolderName = conf_.getParameter("LogFolderName"); + std::string MEFolderName = conf_.getParameter("LogFolderName"); dqmStore_->setCurrentFolder(MEFolderName); @@ -220,7 +220,7 @@ LogMessageMonitor::beginJob() // CategoriesVsModules->getTH1()->GetXaxis()->LabelsOption("v"); for (size_t icategories = 0; icategories < nCategories; icategories++) CategoriesVsModules->setBinLabel(icategories+1,categories_vector_[icategories],2); - + // MAKE MODULEMAP USING INPUT FROM CFG FILE for (size_t i = 0; i < modules_vector_.size(); i++){ modulesMap.insert( std::pair(modules_vector_[i],i) ); @@ -233,34 +233,34 @@ LogMessageMonitor::beginJob() int BXlumiBin = BXlumiParameters.getParameter("BXlumiBin"); double BXlumiMin = BXlumiParameters.getParameter("BXlumiMin"); double BXlumiMax = BXlumiParameters.getParameter("BXlumiMax"); - + size_t i = 0; for(std::map::const_iterator it = modulesMap.begin(); - it != modulesMap.end(); ++it, i++){ - - dqmStore_->setCurrentFolder(MEFolderName + "/PUmonitoring/Errors"); - + it != modulesMap.end(); ++it, i++){ + + dqmStore_->setCurrentFolder(MEFolderName + "/PUmonitoring/Errors"); + histname = "errorsVsBXlumi_" + it->first; ModulesErrorsVsBXlumi.push_back( dynamic_cast(dqmStore_->bookProfile( histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, 0.,100, "")) ); ModulesErrorsVsBXlumi[i] -> setAxisTitle("BXlumi [10^{30} Hz cm^{-2}]", 1); ModulesErrorsVsBXlumi[i] -> setAxisTitle("Mean number of errors", 2); - + if ( doWarningsPlots_ ) { - dqmStore_->setCurrentFolder(MEFolderName + "/PUmonitoring/Warnings"); - + dqmStore_->setCurrentFolder(MEFolderName + "/PUmonitoring/Warnings"); + histname = "warningVsBXlumi_" + it->first; ModulesWarningsVsBXlumi.push_back( dynamic_cast(dqmStore_->bookProfile( histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, 0.,100, "")) ); ModulesWarningsVsBXlumi[i] -> setAxisTitle("BXlumi [10^{30} Hz cm^{-2}]", 1); ModulesWarningsVsBXlumi[i] -> setAxisTitle("Mean number of warnings", 2); } - } + } } } // ------------ method called once each job just after ending the event loop ------------ -void -LogMessageMonitor::endJob() +void +LogMessageMonitor::endJob() { bool outputMEsInRootFile = conf_.getParameter("OutputMEsInRootFile"); std::string outputFileName = conf_.getParameter("OutputFileName"); @@ -272,26 +272,26 @@ LogMessageMonitor::endJob() } // ------------ method called when starting to processes a run ------------ -void +void LogMessageMonitor::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { if ( genTriggerEventFlag_->on() ) genTriggerEventFlag_->initRun( iRun, iSetup ); } // ------------ method called when ending the processing of a run ------------ -void +void LogMessageMonitor::endRun(edm::Run const&, edm::EventSetup const&) { } // ------------ method called when starting to processes a luminosity block ------------ -void +void LogMessageMonitor::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) { } // ------------ method called when ending the processing of a luminosity block ------------ -void +void LogMessageMonitor::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) { } diff --git a/DQM/TrackingMonitor/src/TrackAnalyzer.cc b/DQM/TrackingMonitor/src/TrackAnalyzer.cc index 29bba1a1986e2..98c20255b7f6b 100644 --- a/DQM/TrackingMonitor/src/TrackAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackAnalyzer.cc @@ -20,126 +20,90 @@ TrackAnalyzer::TrackAnalyzer(const edm::ParameterSet& iConfig) : conf_( iConfig ) - , doTrackerSpecific_ ( conf_.getParameter("doTrackerSpecific") ) - , doAllPlots_ ( conf_.getParameter("doAllPlots") ) - , doBSPlots_ ( conf_.getParameter("doBeamSpotPlots") ) - , doGoodTrackPlots_ ( conf_.getParameter("doGoodTrackPlots") ) - , doDCAPlots_ ( conf_.getParameter("doDCAPlots") ) - , doGeneralPropertiesPlots_ ( conf_.getParameter("doGeneralPropertiesPlots") ) - , doMeasurementStatePlots_ ( conf_.getParameter("doMeasurementStatePlots") ) - , doHitPropertiesPlots_ ( conf_.getParameter("doHitPropertiesPlots") ) - , doRecHitVsPhiVsEtaPerTrack_ ( conf_.getParameter("doRecHitVsPhiVsEtaPerTrack") ) - , doLayersVsPhiVsEtaPerTrack_ ( conf_.getParameter("doLayersVsPhiVsEtaPerTrack") ) - , doGoodTrackRecHitVsPhiVsEtaPerTrack_ ( conf_.getParameter("doGoodTrackRecHitVsPhiVsEtaPerTrack") ) - , doGoodTrackLayersVsPhiVsEtaPerTrack_ ( conf_.getParameter("doGoodTrackLayersVsPhiVsEtaPerTrack") ) - , doGoodTrack2DChi2Plots_ ( conf_.getParameter("doGoodTrack2DChi2Plots") ) - , doThetaPlots_ ( conf_.getParameter("doThetaPlots") ) - , doTrackPxPyPlots_ ( conf_.getParameter("doTrackPxPyPlots") ) - , doDCAwrt000Plots_ ( conf_.getParameter("doDCAwrt000Plots") ) - , doLumiAnalysis_ ( conf_.getParameter("doLumiAnalysis") ) - , doTestPlots_ ( conf_.getParameter("doTestPlots") ) - , NumberOfRecHitsPerTrack(NULL) - , NumberOfRecHitsFoundPerTrack(NULL) - , NumberOfRecHitsLostPerTrack(NULL) - , NumberOfLayersPerTrack(NULL) - , NumberOfRecHitVsPhiVsEtaPerTrack(NULL) - , NumberOfLayersVsPhiVsEtaPerTrack(NULL) - , Chi2(NULL) - , Chi2Prob(NULL) - , Chi2oNDF(NULL) - , DistanceOfClosestApproach(NULL) - , DistanceOfClosestApproachToBS(NULL) - , DistanceOfClosestApproachVsTheta(NULL) - , DistanceOfClosestApproachVsPhi(NULL) - , DistanceOfClosestApproachToBSVsPhi(NULL) - , DistanceOfClosestApproachVsEta(NULL) - , xPointOfClosestApproach(NULL) - , xPointOfClosestApproachVsZ0wrt000(NULL) - , xPointOfClosestApproachVsZ0wrtBS(NULL) - , yPointOfClosestApproach(NULL) - , yPointOfClosestApproachVsZ0wrt000(NULL) - , yPointOfClosestApproachVsZ0wrtBS(NULL) - , zPointOfClosestApproach(NULL) - , zPointOfClosestApproachVsPhi(NULL) - , algorithm(NULL) - // TESTING MEs - , TESTDistanceOfClosestApproachToBS(NULL) - , TESTDistanceOfClosestApproachToBSVsPhi(NULL) - // add by mia in order to deal w/ LS transitions - , Chi2oNDF_lumiFlag(NULL) - , NumberOfRecHitsPerTrack_lumiFlag(NULL) - , GoodTrackChi2oNDF_lumiFlag(NULL) - , GoodTrackNumberOfRecHitsPerTrack_lumiFlag(NULL) - - , NumberOfTOBRecHitsPerTrack(NULL) - , NumberOfTOBRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfTOBRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfTOBLayersPerTrack(NULL) - , NumberOfTOBLayersPerTrackVsPhiProfile(NULL) - , NumberOfTOBLayersPerTrackVsEtaProfile(NULL) - - , NumberOfTIBRecHitsPerTrack(NULL) - , NumberOfTIBRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfTIBRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfTIBLayersPerTrack(NULL) - , NumberOfTIBLayersPerTrackVsPhiProfile(NULL) - , NumberOfTIBLayersPerTrackVsEtaProfile(NULL) - - , NumberOfTIDRecHitsPerTrack(NULL) - , NumberOfTIDRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfTIDRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfTIDLayersPerTrack(NULL) - , NumberOfTIDLayersPerTrackVsPhiProfile(NULL) - , NumberOfTIDLayersPerTrackVsEtaProfile(NULL) - - , NumberOfTECRecHitsPerTrack(NULL) - , NumberOfTECRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfTECRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfTECLayersPerTrack(NULL) - , NumberOfTECLayersPerTrackVsPhiProfile(NULL) - , NumberOfTECLayersPerTrackVsEtaProfile(NULL) - - , NumberOfPixBarrelRecHitsPerTrack(NULL) - , NumberOfPixBarrelRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfPixBarrelRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfPixBarrelLayersPerTrack(NULL) - , NumberOfPixBarrelLayersPerTrackVsPhiProfile(NULL) - , NumberOfPixBarrelLayersPerTrackVsEtaProfile(NULL) - - , NumberOfPixEndcapRecHitsPerTrack(NULL) - , NumberOfPixEndcapRecHitsPerTrackVsPhiProfile(NULL) - , NumberOfPixEndcapRecHitsPerTrackVsEtaProfile(NULL) - , NumberOfPixEndcapLayersPerTrack(NULL) - , NumberOfPixEndcapLayersPerTrackVsPhiProfile(NULL) - , NumberOfPixEndcapLayersPerTrackVsEtaProfile(NULL) - - , GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack(NULL) - , GoodTrackNumberOfLayersVsPhiVsEtaPerTrack(NULL) - , GoodTrackNumberOfRecHitsPerTrackVsPhiProfile(NULL) - , GoodTrackNumberOfRecHitsPerTrackVsEtaProfile(NULL) - , GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile(NULL) - , GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile(NULL) - , GoodTrackChi2oNDF(NULL) - , GoodTrackChi2Prob(NULL) - , GoodTrackChi2oNDFVsPhi(NULL) - , GoodTrackChi2ProbVsPhi(NULL) - , GoodTrackChi2oNDFVsEta(NULL) - , GoodTrackChi2ProbVsEta(NULL) - , GoodTrackNumberOfRecHitsPerTrack(NULL) - , GoodTrackNumberOfFoundRecHitsPerTrack(NULL) - , GoodTrackAlgorithm(NULL) + , doTrackerSpecific_ ( conf_.getParameter("doTrackerSpecific") ) + , doAllPlots_ ( conf_.getParameter("doAllPlots") ) + , doBSPlots_ ( conf_.getParameter("doBeamSpotPlots") ) + , doPVPlots_ ( conf_.getParameter("doPrimaryVertexPlots") ) + , doDCAPlots_ ( conf_.getParameter("doDCAPlots") ) + , doGeneralPropertiesPlots_ ( conf_.getParameter("doGeneralPropertiesPlots") ) + , doMeasurementStatePlots_ ( conf_.getParameter("doMeasurementStatePlots") ) + , doHitPropertiesPlots_ ( conf_.getParameter("doHitPropertiesPlots") ) + , doRecHitVsPhiVsEtaPerTrack_ ( conf_.getParameter("doRecHitVsPhiVsEtaPerTrack") ) + , doLayersVsPhiVsEtaPerTrack_ ( conf_.getParameter("doLayersVsPhiVsEtaPerTrack") ) + , doRecHitsPerTrackProfile_ ( conf_.getParameter("doRecHitsPerTrackProfile") ) + , doThetaPlots_ ( conf_.getParameter("doThetaPlots") ) + , doTrackPxPyPlots_ ( conf_.getParameter("doTrackPxPyPlots") ) + , doDCAwrtPVPlots_ ( conf_.getParameter("doDCAwrtPVPlots") ) + , doDCAwrt000Plots_ ( conf_.getParameter("doDCAwrt000Plots") ) + , doLumiAnalysis_ ( conf_.getParameter("doLumiAnalysis") ) + , doTestPlots_ ( conf_.getParameter("doTestPlots") ) { - - // std::cout << "TrackAnalyzer::TrackAnalyzer() - doGoodTrackPlots_ = " << doGoodTrackPlots_ << std::endl; + initHistos(); + TopFolder_ = conf_.getParameter("FolderName"); } -TrackAnalyzer::TrackAnalyzer(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iC) : TrackAnalyzer(iConfig) +TrackAnalyzer::TrackAnalyzer(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iC) + : TrackAnalyzer(iConfig) { - - edm::InputTag bsSrc = conf_.getParameter("beamSpot"); + edm::InputTag bsSrc = conf_.getParameter("beamSpot"); + edm::InputTag primaryVertexInputTag = conf_.getParameter("primaryVertex"); beamSpotToken_ = iC.consumes(bsSrc); - + pvToken_ = iC.consumes(primaryVertexInputTag); +} + +void TrackAnalyzer::initHistos() +{ + Chi2 = NULL; + Chi2Prob = NULL; + Chi2ProbVsPhi = NULL; + Chi2ProbVsEta = NULL; + Chi2oNDF = NULL; + Chi2oNDFVsEta = NULL; + Chi2oNDFVsPhi = NULL; + Chi2oNDFVsTheta = NULL; + Chi2oNDFVsTheta = NULL; + Chi2oNDFVsPhi = NULL; + Chi2oNDFVsEta = NULL; + + NumberOfRecHitsPerTrack = NULL; + NumberOfValidRecHitsPerTrack = NULL; + NumberOfLostRecHitsPerTrack = NULL; + + NumberOfRecHitsPerTrackVsPhi = NULL; + NumberOfRecHitsPerTrackVsTheta = NULL; + NumberOfRecHitsPerTrackVsEta = NULL; + + NumberOfRecHitVsPhiVsEtaPerTrack = NULL; + + NumberOfValidRecHitsPerTrackVsPhi = NULL; + NumberOfValidRecHitsPerTrackVsEta = NULL; + + NumberOfLayersPerTrack = NULL; + NumberOfLayersVsPhiVsEtaPerTrack = NULL; + + DistanceOfClosestApproach = NULL; + DistanceOfClosestApproachToBS = NULL; + DistanceOfClosestApproachVsTheta = NULL; + DistanceOfClosestApproachVsPhi = NULL; + DistanceOfClosestApproachToBSVsPhi = NULL; + DistanceOfClosestApproachVsEta = NULL; + xPointOfClosestApproach = NULL; + xPointOfClosestApproachVsZ0wrt000 = NULL; + xPointOfClosestApproachVsZ0wrtBS = NULL; + yPointOfClosestApproach = NULL; + yPointOfClosestApproachVsZ0wrt000 = NULL; + yPointOfClosestApproachVsZ0wrtBS = NULL; + zPointOfClosestApproach = NULL; + zPointOfClosestApproachVsPhi = NULL; + algorithm = NULL; + // TESTING + TESTDistanceOfClosestApproachToBS = NULL; + TESTDistanceOfClosestApproachToBSVsPhi = NULL; + +// by Mia in order to deal w/ LS transitions + Chi2oNDF_lumiFlag = NULL; + NumberOfRecHitsPerTrack_lumiFlag = NULL; } @@ -149,20 +113,56 @@ TrackAnalyzer::~TrackAnalyzer() void TrackAnalyzer::beginJob(DQMStore * dqmStore_) { + +} + +void TrackAnalyzer::beginRun(DQMStore * dqmStore_) +{ + + bookHistosForHitProperties(dqmStore_); + bookHistosForBeamSpot(dqmStore_); + bookHistosForLScertification( dqmStore_); + + // book tracker specific related histograms + // ---------------------------------------------------------------------------------// + if(doTrackerSpecific_ || doAllPlots_) bookHistosForTrackerSpecific(dqmStore_); + + // book state related histograms + // ---------------------------------------------------------------------------------// + if (doMeasurementStatePlots_ || doAllPlots_) { + + std::string StateName = conf_.getParameter("MeasurementState"); + + if (StateName == "All") { + bookHistosForState("OuterSurface", dqmStore_); + bookHistosForState("InnerSurface", dqmStore_); + bookHistosForState("ImpactPoint" , dqmStore_); + } else if ( + StateName != "OuterSurface" && + StateName != "InnerSurface" && + StateName != "ImpactPoint" && + StateName != "default" + ) { + bookHistosForState("default", dqmStore_); + + } else { + bookHistosForState(StateName, dqmStore_); + } + + } +} +void TrackAnalyzer::bookHistosForHitProperties(DQMStore * dqmStore_) { + // parameters from the configuration std::string QualName = conf_.getParameter("Quality"); std::string AlgoName = conf_.getParameter("AlgoName"); - std::string MEFolderName = conf_.getParameter("FolderName"); std::string MEBSFolderName = conf_.getParameter("BSFolderName"); // use the AlgoName and Quality Name - std::string CatagoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; + std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; // get binning from the configuration - double RecHitMin = conf_.getParameter("RecHitMin"); - double RecHitMax = conf_.getParameter("RecHitMax"); - int TKHitBin = conf_.getParameter( "RecHitBin"); double TKHitMin = conf_.getParameter("RecHitMin"); double TKHitMax = conf_.getParameter("RecHitMax"); @@ -175,18 +175,6 @@ void TrackAnalyzer::beginJob(DQMStore * dqmStore_) double TKLayMin = conf_.getParameter("RecLayMin"); double TKLayMax = conf_.getParameter("RecLayMax"); - int Chi2Bin = conf_.getParameter( "Chi2Bin"); - double Chi2Min = conf_.getParameter("Chi2Min"); - double Chi2Max = conf_.getParameter("Chi2Max"); - - int Chi2NDFBin = conf_.getParameter( "Chi2NDFBin"); - double Chi2NDFMin = conf_.getParameter("Chi2NDFMin"); - double Chi2NDFMax = conf_.getParameter("Chi2NDFMax"); - - int Chi2ProbBin = conf_.getParameter( "Chi2ProbBin"); - double Chi2ProbMin = conf_.getParameter("Chi2ProbMin"); - double Chi2ProbMax = conf_.getParameter("Chi2ProbMax"); - int PhiBin = conf_.getParameter( "PhiBin"); double PhiMin = conf_.getParameter("PhiMin"); double PhiMax = conf_.getParameter("PhiMax"); @@ -195,14 +183,6 @@ void TrackAnalyzer::beginJob(DQMStore * dqmStore_) double EtaMin = conf_.getParameter("EtaMin"); double EtaMax = conf_.getParameter("EtaMax"); - int ThetaBin = conf_.getParameter( "ThetaBin"); - double ThetaMin = conf_.getParameter("ThetaMin"); - double ThetaMax = conf_.getParameter("ThetaMax"); - - int DxyBin = conf_.getParameter( "DxyBin"); - double DxyMin = conf_.getParameter("DxyMin"); - double DxyMax = conf_.getParameter("DxyMax"); - int VXBin = conf_.getParameter( "VXBin"); double VXMin = conf_.getParameter("VXMin"); double VXMax = conf_.getParameter("VXMax"); @@ -215,537 +195,520 @@ void TrackAnalyzer::beginJob(DQMStore * dqmStore_) double VZMin = conf_.getParameter("VZMin"); double VZMax = conf_.getParameter("VZMax"); - int X0Bin = conf_.getParameter( "X0Bin"); - double X0Min = conf_.getParameter("X0Min"); - double X0Max = conf_.getParameter("X0Max"); - - int Y0Bin = conf_.getParameter( "Y0Bin"); - double Y0Min = conf_.getParameter("Y0Min"); - double Y0Max = conf_.getParameter("Y0Max"); - - int Z0Bin = conf_.getParameter( "Z0Bin"); - double Z0Min = conf_.getParameter("Z0Min"); - double Z0Max = conf_.getParameter("Z0Max"); - - dqmStore_->setCurrentFolder(MEFolderName); + dqmStore_->setCurrentFolder(TopFolder_); // book the Hit Property histograms // ---------------------------------------------------------------------------------// + TkParameterMEs tkmes; if ( doHitPropertiesPlots_ || doAllPlots_ ){ - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties"); + dqmStore_->setCurrentFolder(TopFolder_+"/HitProperties"); histname = "NumberOfRecHitsPerTrack_"; - NumberOfRecHitsPerTrack = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKHitBin, TKHitMin, TKHitMax); + NumberOfRecHitsPerTrack = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax); NumberOfRecHitsPerTrack->setAxisTitle("Number of all RecHits of each Track"); NumberOfRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - histname = "NumberOfRecHitsFoundPerTrack_"; - NumberOfRecHitsFoundPerTrack = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKHitBin, TKHitMin, TKHitMax); - NumberOfRecHitsFoundPerTrack->setAxisTitle("Number of RecHits found for each Track"); - NumberOfRecHitsFoundPerTrack->setAxisTitle("Number of Tracks", 2); + histname = "NumberOfValidRecHitsPerTrack_"; + NumberOfValidRecHitsPerTrack = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax); + NumberOfValidRecHitsPerTrack->setAxisTitle("Number of valid RecHits for each Track"); + NumberOfValidRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - histname = "NumberOfRecHitsLostPerTrack_"; - NumberOfRecHitsLostPerTrack = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKLostBin, TKLostMin, TKLostMax); - NumberOfRecHitsLostPerTrack->setAxisTitle("Number of RecHits lost for each Track"); - NumberOfRecHitsLostPerTrack->setAxisTitle("Number of Tracks", 2); + histname = "NumberOfLostRecHitsPerTrack_"; + NumberOfLostRecHitsPerTrack = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, TKLostBin, TKLostMin, TKLostMax); + NumberOfLostRecHitsPerTrack->setAxisTitle("Number of lost RecHits for each Track"); + NumberOfLostRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); histname = "NumberOfLayersPerTrack_"; - NumberOfLayersPerTrack = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKLayBin, TKLayMin, TKLayMax); + NumberOfLayersPerTrack = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, TKLayBin, TKLayMin, TKLayMax); NumberOfLayersPerTrack->setAxisTitle("Number of Layers of each Track", 1); NumberOfLayersPerTrack->setAxisTitle("Number of Tracks", 2); + if ( doRecHitVsPhiVsEtaPerTrack_ || doAllPlots_ ){ histname = "NumberOfRecHitVsPhiVsEtaPerTrack_"; - NumberOfRecHitVsPhiVsEtaPerTrack = dqmStore_->bookProfile2D(histname+CatagoryName, histname+CatagoryName, + NumberOfRecHitVsPhiVsEtaPerTrack = dqmStore_->bookProfile2D(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., ""); NumberOfRecHitVsPhiVsEtaPerTrack->setAxisTitle("Track #eta ", 1); NumberOfRecHitVsPhiVsEtaPerTrack->setAxisTitle("Track #phi ", 2); } + if ( doLayersVsPhiVsEtaPerTrack_ || doAllPlots_ ){ histname = "NumberOfLayersVsPhiVsEtaPerTrack_"; - NumberOfLayersVsPhiVsEtaPerTrack = dqmStore_->bookProfile2D(histname+CatagoryName, histname+CatagoryName, + NumberOfLayersVsPhiVsEtaPerTrack = dqmStore_->bookProfile2D(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., ""); NumberOfLayersVsPhiVsEtaPerTrack->setAxisTitle("Track #eta ", 1); NumberOfLayersVsPhiVsEtaPerTrack->setAxisTitle("Track #phi ", 2); } } - // book the General Property histograms // ---------------------------------------------------------------------------------// - + if (doGeneralPropertiesPlots_ || doAllPlots_){ + + int Chi2Bin = conf_.getParameter( "Chi2Bin"); + double Chi2Min = conf_.getParameter("Chi2Min"); + double Chi2Max = conf_.getParameter("Chi2Max"); + + int Chi2NDFBin = conf_.getParameter( "Chi2NDFBin"); + double Chi2NDFMin = conf_.getParameter("Chi2NDFMin"); + double Chi2NDFMax = conf_.getParameter("Chi2NDFMax"); + + int Chi2ProbBin = conf_.getParameter( "Chi2ProbBin"); + double Chi2ProbMin = conf_.getParameter("Chi2ProbMin"); + double Chi2ProbMax = conf_.getParameter("Chi2ProbMax"); + - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); histname = "Chi2_"; - Chi2 = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2Bin, Chi2Min, Chi2Max); + Chi2 = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, Chi2Bin, Chi2Min, Chi2Max); Chi2->setAxisTitle("Track #chi^{2}" ,1); Chi2->setAxisTitle("Number of Tracks",2); histname = "Chi2Prob_"; - Chi2Prob = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2ProbBin, Chi2ProbMin, Chi2ProbMax); + Chi2Prob = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, Chi2ProbBin, Chi2ProbMin, Chi2ProbMax); Chi2Prob->setAxisTitle("Track #chi^{2} probability",1); Chi2Prob->setAxisTitle("Number of Tracks" ,2); histname = "Chi2oNDF_"; - Chi2oNDF = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax); + Chi2oNDF = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax); Chi2oNDF->setAxisTitle("Track #chi^{2}/ndf",1); Chi2oNDF->setAxisTitle("Number of Tracks" ,2); - histname = "xPointOfClosestApproach_"; - xPointOfClosestApproach = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, VXBin, VXMin, VXMax); - xPointOfClosestApproach->setAxisTitle("x component of Track PCA to beam line (cm)",1); - xPointOfClosestApproach->setAxisTitle("Number of Tracks",2); - - histname = "yPointOfClosestApproach_"; - yPointOfClosestApproach = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, VYBin, VYMin, VYMax); - yPointOfClosestApproach->setAxisTitle("y component of Track PCA to beam line (cm)",1); - yPointOfClosestApproach->setAxisTitle("Number of Tracks",2); - - histname = "zPointOfClosestApproach_"; - zPointOfClosestApproach = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, VZBin, VZMin, VZMax); - zPointOfClosestApproach->setAxisTitle("z component of Track PCA to beam line (cm)",1); - zPointOfClosestApproach->setAxisTitle("Number of Tracks",2); - + if (doDCAPlots_) { + histname = "xPointOfClosestApproach_"; + xPointOfClosestApproach = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, VXBin, VXMin, VXMax); + xPointOfClosestApproach->setAxisTitle("x component of Track PCA to beam line (cm)",1); + xPointOfClosestApproach->setAxisTitle("Number of Tracks",2); + + histname = "yPointOfClosestApproach_"; + yPointOfClosestApproach = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, VYBin, VYMin, VYMax); + yPointOfClosestApproach->setAxisTitle("y component of Track PCA to beam line (cm)",1); + yPointOfClosestApproach->setAxisTitle("Number of Tracks",2); + + histname = "zPointOfClosestApproach_"; + zPointOfClosestApproach = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, VZBin, VZMin, VZMax); + zPointOfClosestApproach->setAxisTitle("z component of Track PCA to beam line (cm)",1); + zPointOfClosestApproach->setAxisTitle("Number of Tracks",2); + + histname = "xPointOfClosestApproachToPV_"; + xPointOfClosestApproachToPV = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, VXBin, VXMin, VXMax); + xPointOfClosestApproachToPV->setAxisTitle("x component of Track PCA to pv (cm)",1); + xPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2); + + histname = "yPointOfClosestApproachToPV_"; + yPointOfClosestApproachToPV = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, VYBin, VYMin, VYMax); + yPointOfClosestApproachToPV->setAxisTitle("y component of Track PCA to pv line (cm)",1); + yPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2); + + histname = "zPointOfClosestApproachToPV_"; + zPointOfClosestApproachToPV = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, VZBin, VZMin, VZMax); + zPointOfClosestApproachToPV->setAxisTitle("z component of Track PCA to pv line (cm)",1); + zPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2); + } + // See DataFormats/TrackReco/interface/TrackBase.h for track algorithm enum definition // http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/TrackReco/interface/TrackBase.h?view=log histname = "algorithm_"; - algorithm = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, 32, 0., 32.); + algorithm = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, 32, 0., 32.); algorithm->setAxisTitle("Tracking algorithm",1); algorithm->setAxisTitle("Number of Tracks",2); } - + +} + +void TrackAnalyzer::bookHistosForLScertification(DQMStore * dqmStore_) { + + // parameters from the configuration + std::string QualName = conf_.getParameter("Quality"); + std::string AlgoName = conf_.getParameter("AlgoName"); + + // use the AlgoName and Quality Name + std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; + + // book LS analysis related histograms // ----------------------------------- if ( doLumiAnalysis_ ) { + + // get binning from the configuration + int TKHitBin = conf_.getParameter( "RecHitBin"); + double TKHitMin = conf_.getParameter("RecHitMin"); + double TKHitMax = conf_.getParameter("RecHitMax"); + + int Chi2NDFBin = conf_.getParameter( "Chi2NDFBin"); + double Chi2NDFMin = conf_.getParameter("Chi2NDFMin"); + double Chi2NDFMax = conf_.getParameter("Chi2NDFMax"); + // add by Mia in order to deal w/ LS transitions - dqmStore_->setCurrentFolder(MEFolderName+"/LSanalysis"); + dqmStore_->setCurrentFolder(TopFolder_+"/LSanalysis"); histname = "NumberOfRecHitsPerTrack_lumiFlag_"; - NumberOfRecHitsPerTrack_lumiFlag = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKHitBin, TKHitMin, TKHitMax); + NumberOfRecHitsPerTrack_lumiFlag = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax); NumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of all RecHits of each Track"); NumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of Tracks", 2); histname = "Chi2oNDF_lumiFlag_"; - Chi2oNDF_lumiFlag = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax); + Chi2oNDF_lumiFlag = dqmStore_->book1D(histname+CategoryName, histname+CategoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax); Chi2oNDF_lumiFlag->setAxisTitle("Track #chi^{2}/ndf",1); Chi2oNDF_lumiFlag->setAxisTitle("Number of Tracks" ,2); - histname = "GoodTrackNumberOfRecHitsPerTrack_lumiFlag_"; - GoodTrackNumberOfRecHitsPerTrack_lumiFlag = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKHitBin, TKHitMin, TKHitMax); - GoodTrackNumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of all RecHits of each Good Track"); - GoodTrackNumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of Good Tracks", 2); - - histname = "GoodTrackChi2oNDF_lumiFlag_"; - GoodTrackChi2oNDF_lumiFlag = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax); - GoodTrackChi2oNDF_lumiFlag->setAxisTitle("Good Track #chi^{2}/ndf",1); - GoodTrackChi2oNDF_lumiFlag->setAxisTitle("Number of Good Tracks" ,2); } +} + +void TrackAnalyzer::bookHistosForBeamSpot(DQMStore * dqmStore_) { + + // parameters from the configuration + std::string QualName = conf_.getParameter("Quality"); + std::string AlgoName = conf_.getParameter("AlgoName"); + // use the AlgoName and Quality Name + std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; // book the Beam Spot related histograms // ---------------------------------------------------------------------------------// - if(doBSPlots_ || doAllPlots_) - { - // dqmStore_->setCurrentFolder(MEBSFolderName); - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); - - histname = "DistanceOfClosestApproachToBS_"; - DistanceOfClosestApproachToBS = dqmStore_->book1D(histname+CatagoryName,histname+CatagoryName,DxyBin,DxyMin,DxyMax); - DistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1); - DistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2); + if(doDCAPlots_ || doBSPlots_ || doAllPlots_) { - histname = "DistanceOfClosestApproachToBSVsPhi_"; - DistanceOfClosestApproachToBSVsPhi = dqmStore_->bookProfile(histname+CatagoryName,histname+CatagoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,""); - DistanceOfClosestApproachToBSVsPhi->getTH1()->SetBit(TH1::kCanRebin); - DistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track #phi",1); - DistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2); + int DxyBin = conf_.getParameter( "DxyBin"); + double DxyMin = conf_.getParameter("DxyMin"); + double DxyMax = conf_.getParameter("DxyMax"); + + int PhiBin = conf_.getParameter( "PhiBin"); + double PhiMin = conf_.getParameter("PhiMin"); + double PhiMax = conf_.getParameter("PhiMax"); + + int X0Bin = conf_.getParameter( "X0Bin"); + double X0Min = conf_.getParameter("X0Min"); + double X0Max = conf_.getParameter("X0Max"); + + int Y0Bin = conf_.getParameter( "Y0Bin"); + double Y0Min = conf_.getParameter("Y0Min"); + double Y0Max = conf_.getParameter("Y0Max"); + + int Z0Bin = conf_.getParameter( "Z0Bin"); + double Z0Min = conf_.getParameter("Z0Min"); + double Z0Max = conf_.getParameter("Z0Max"); + + int VZBinProf = conf_.getParameter( "VZBinProf"); + double VZMinProf = conf_.getParameter("VZMinProf"); + double VZMaxProf = conf_.getParameter("VZMaxProf"); + + + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); + + histname = "DistanceOfClosestApproachToBS_"; + DistanceOfClosestApproachToBS = dqmStore_->book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax); + DistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1); + DistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2); + + histname = "DistanceOfClosestApproachToBSVsPhi_"; + DistanceOfClosestApproachToBSVsPhi = dqmStore_->bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,""); + DistanceOfClosestApproachToBSVsPhi->getTH1()->SetBit(TH1::kCanRebin); + DistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track #phi",1); + DistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2); + + histname = "xPointOfClosestApproachVsZ0wrt000_"; + xPointOfClosestApproachVsZ0wrt000 = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,""); + xPointOfClosestApproachVsZ0wrt000->setAxisTitle("d_{z} (cm)",1); + xPointOfClosestApproachVsZ0wrt000->setAxisTitle("x component of Track PCA to beam line (cm)",2); + + histname = "yPointOfClosestApproachVsZ0wrt000_"; + yPointOfClosestApproachVsZ0wrt000 = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,""); + yPointOfClosestApproachVsZ0wrt000->setAxisTitle("d_{z} (cm)",1); + yPointOfClosestApproachVsZ0wrt000->setAxisTitle("y component of Track PCA to beam line (cm)",2); + + histname = "xPointOfClosestApproachVsZ0wrtBS_"; + xPointOfClosestApproachVsZ0wrtBS = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,""); + xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1); + xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("x component of Track PCA to BS (cm)",2); + + histname = "yPointOfClosestApproachVsZ0wrtBS_"; + yPointOfClosestApproachVsZ0wrtBS = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,""); + yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1); + yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("y component of Track PCA to BS (cm)",2); + + histname = "zPointOfClosestApproachVsPhi_"; + zPointOfClosestApproachVsPhi = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, VZBinProf, VZMinProf, VZMaxProf, ""); + zPointOfClosestApproachVsPhi->setAxisTitle("Track #phi",1); + zPointOfClosestApproachVsPhi->setAxisTitle("y component of Track PCA to beam line (cm)",2); + } + + if(doDCAPlots_ || doPVPlots_ || doAllPlots_) { + + int DxyBin = conf_.getParameter( "DxyBin"); + double DxyMin = conf_.getParameter("DxyMin"); + double DxyMax = conf_.getParameter("DxyMax"); + + int PhiBin = conf_.getParameter( "PhiBin"); + double PhiMin = conf_.getParameter("PhiMin"); + double PhiMax = conf_.getParameter("PhiMax"); + + int X0Bin = conf_.getParameter( "X0Bin"); + double X0Min = conf_.getParameter("X0Min"); + double X0Max = conf_.getParameter("X0Max"); + + int Y0Bin = conf_.getParameter( "Y0Bin"); + double Y0Min = conf_.getParameter("Y0Min"); + double Y0Max = conf_.getParameter("Y0Max"); + + int Z0Bin = conf_.getParameter( "Z0Bin"); + double Z0Min = conf_.getParameter("Z0Min"); + double Z0Max = conf_.getParameter("Z0Max"); + + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); + + histname = "DistanceOfClosestApproachToPV_"; + DistanceOfClosestApproachToPV = dqmStore_->book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax); + DistanceOfClosestApproachToPV->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1); + DistanceOfClosestApproachToPV->setAxisTitle("Number of Tracks",2); + + histname = "DistanceOfClosestApproachToPVVsPhi_"; + DistanceOfClosestApproachToPVVsPhi = dqmStore_->bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,""); + DistanceOfClosestApproachToPVVsPhi->getTH1()->SetBit(TH1::kCanRebin); + DistanceOfClosestApproachToPVVsPhi->setAxisTitle("Track #phi",1); + DistanceOfClosestApproachToPVVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2); + + histname = "xPointOfClosestApproachVsZ0wrtPV_"; + xPointOfClosestApproachVsZ0wrtPV = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,""); + xPointOfClosestApproachVsZ0wrtPV->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1); + xPointOfClosestApproachVsZ0wrtPV->setAxisTitle("x component of Track PCA to PV (cm)",2); + + histname = "yPointOfClosestApproachVsZ0wrtPV_"; + yPointOfClosestApproachVsZ0wrtPV = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,""); + yPointOfClosestApproachVsZ0wrtPV->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1); + yPointOfClosestApproachVsZ0wrtPV->setAxisTitle("y component of Track PCA to PV (cm)",2); + + } + + if (doBSPlots_ || doAllPlots_) { + if (doTestPlots_) { - histname = "xPointOfClosestApproachVsZ0wrt000_"; - xPointOfClosestApproachVsZ0wrt000 = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,""); - xPointOfClosestApproachVsZ0wrt000->setAxisTitle("d_{z} (cm)",1); - xPointOfClosestApproachVsZ0wrt000->setAxisTitle("x component of Track PCA to beam line (cm)",2); + int DxyBin = conf_.getParameter( "DxyBin"); + double DxyMin = conf_.getParameter("DxyMin"); + double DxyMax = conf_.getParameter("DxyMax"); + + int PhiBin = conf_.getParameter( "PhiBin"); + double PhiMin = conf_.getParameter("PhiMin"); + double PhiMax = conf_.getParameter("PhiMax"); + + histname = "TESTDistanceOfClosestApproachToBS_"; + TESTDistanceOfClosestApproachToBS = dqmStore_->book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax); + TESTDistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1); + TESTDistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2); - histname = "yPointOfClosestApproachVsZ0wrt000_"; - yPointOfClosestApproachVsZ0wrt000 = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,""); - yPointOfClosestApproachVsZ0wrt000->setAxisTitle("d_{z} (cm)",1); - yPointOfClosestApproachVsZ0wrt000->setAxisTitle("y component of Track PCA to beam line (cm)",2); - - histname = "xPointOfClosestApproachVsZ0wrtBS_"; - xPointOfClosestApproachVsZ0wrtBS = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,""); - xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1); - xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("x component of Track PCA to BS (cm)",2); + histname = "TESTDistanceOfClosestApproachToBSVsPhi_"; + TESTDistanceOfClosestApproachToBSVsPhi = dqmStore_->bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,""); + TESTDistanceOfClosestApproachToBSVsPhi->getTH1()->SetBit(TH1::kCanRebin); + TESTDistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track #phi",1); + TESTDistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2); - histname = "yPointOfClosestApproachVsZ0wrtBS_"; - yPointOfClosestApproachVsZ0wrtBS = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,""); - yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1); - yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("y component of Track PCA to BS (cm)",2); - - histname = "zPointOfClosestApproachVsPhi_"; - zPointOfClosestApproachVsPhi = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, VZBin, VZMin, VZMax, ""); - zPointOfClosestApproachVsPhi->setAxisTitle("Track #phi",1); - zPointOfClosestApproachVsPhi->setAxisTitle("y component of Track PCA to beam line (cm)",2); - - if (doTestPlots_) { - - histname = "TESTDistanceOfClosestApproachToBS_"; - TESTDistanceOfClosestApproachToBS = dqmStore_->book1D(histname+CatagoryName,histname+CatagoryName,DxyBin,DxyMin,DxyMax); - TESTDistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1); - TESTDistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2); - - histname = "TESTDistanceOfClosestApproachToBSVsPhi_"; - TESTDistanceOfClosestApproachToBSVsPhi = dqmStore_->bookProfile(histname+CatagoryName,histname+CatagoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,""); - TESTDistanceOfClosestApproachToBSVsPhi->getTH1()->SetBit(TH1::kCanRebin); - TESTDistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track #phi",1); - TESTDistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2); - - } - - } - - // book the Profile plots for DCA related histograms - // ---------------------------------------------------------------------------------// - if(doDCAPlots_ || doAllPlots_) - { - if (doDCAwrt000Plots_) { - if (doThetaPlots_) { - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); - histname = "DistanceOfClosestApproachVsTheta_"; - DistanceOfClosestApproachVsTheta = dqmStore_->bookProfile(histname+CatagoryName,histname+CatagoryName, ThetaBin, ThetaMin, ThetaMax, DxyMin,DxyMax,""); - DistanceOfClosestApproachVsTheta->setAxisTitle("Track #theta",1); - DistanceOfClosestApproachVsTheta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2); - } - - histname = "DistanceOfClosestApproachVsEta_"; - DistanceOfClosestApproachVsEta = dqmStore_->bookProfile(histname+CatagoryName,histname+CatagoryName, EtaBin, EtaMin, EtaMax, DxyMin, DxyMax,""); - DistanceOfClosestApproachVsEta->setAxisTitle("Track #eta",1); - DistanceOfClosestApproachVsEta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2); - // temporary patch in order to put back those MEs in Muon Workspace - - histname = "DistanceOfClosestApproach_"; - DistanceOfClosestApproach = dqmStore_->book1D(histname+CatagoryName,histname+CatagoryName,DxyBin,DxyMin,DxyMax); - DistanceOfClosestApproach->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",1); - DistanceOfClosestApproach->setAxisTitle("Number of Tracks",2); - - histname = "DistanceOfClosestApproachVsPhi_"; - DistanceOfClosestApproachVsPhi = dqmStore_->bookProfile(histname+CatagoryName,histname+CatagoryName, PhiBin, PhiMin, PhiMax, DxyMin,DxyMax,""); - DistanceOfClosestApproachVsPhi->getTH1()->SetBit(TH1::kCanRebin); - DistanceOfClosestApproachVsPhi->setAxisTitle("Track #phi",1); - DistanceOfClosestApproachVsPhi->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2); - } } - - - // book tracker specific related histograms - // ---------------------------------------------------------------------------------// - if(doTrackerSpecific_ || doAllPlots_) - { - doTrackerSpecificInitialization(dqmStore_); - } - - // book state related histograms - // ---------------------------------------------------------------------------------// - if (doMeasurementStatePlots_ || doAllPlots_){ - - std::string StateName = conf_.getParameter("MeasurementState"); - if (StateName == "All") - { - bookHistosForState("OuterSurface", dqmStore_); - bookHistosForState("InnerSurface", dqmStore_); - bookHistosForState("ImpactPoint" , dqmStore_); - } - else if - ( - StateName != "OuterSurface" && - StateName != "InnerSurface" && - StateName != "ImpactPoint" && - StateName != "default" - ) - { - bookHistosForState("default", dqmStore_); - } - else - { - bookHistosForState(StateName, dqmStore_); - } } - // book histos for good tracks (HP + Pt>1GeV) + // book the Profile plots for DCA related histograms // ---------------------------------------------------------------------------------// + if(doDCAPlots_ || doAllPlots_) { - if ( doGoodTrackPlots_ || doAllPlots_ ) { - - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties/GoodTracks"); - - histname = "GoodTrackChi2oNDF_"; - GoodTrackChi2oNDF = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax); - GoodTrackChi2oNDF->setAxisTitle("Good Track #chi^{2}/ndf",1); - GoodTrackChi2oNDF->setAxisTitle("Number of Good Tracks" ,2); - - histname = "GoodTrackChi2Prob_"; - GoodTrackChi2Prob = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, Chi2ProbBin, Chi2ProbMin, Chi2ProbMax); - GoodTrackChi2Prob->setAxisTitle("Good Track #chi^{2} probability",1); - GoodTrackChi2Prob->setAxisTitle("Number of Good Tracks" ,2); - - histname = "GoodTrackChi2oNDFVsPhi_"; - GoodTrackChi2oNDFVsPhi = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax); - GoodTrackChi2oNDFVsPhi->setAxisTitle("Good Tracks #phi" ,1); - GoodTrackChi2oNDFVsPhi->setAxisTitle("Good Track #chi^{2}/ndf",2); - - histname = "GoodTrackChi2ProbVsPhi_"; - GoodTrackChi2ProbVsPhi = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax); - GoodTrackChi2ProbVsPhi->setAxisTitle("Good Tracks #phi" ,1); - GoodTrackChi2ProbVsPhi->setAxisTitle("Good Track #chi^{2} probability",2); - - histname = "GoodTrackChi2oNDFVsEta_"; - GoodTrackChi2oNDFVsEta = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax); - GoodTrackChi2oNDFVsEta->setAxisTitle("Good Tracks #eta" ,1); - GoodTrackChi2oNDFVsEta->setAxisTitle("Good Track #chi^{2}/ndf",2); + if (doDCAwrt000Plots_) { - histname = "GoodTrackChi2ProbVsEta_"; - GoodTrackChi2ProbVsEta = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax); - GoodTrackChi2ProbVsEta->setAxisTitle("Good Tracks #eta" ,1); - GoodTrackChi2ProbVsEta->setAxisTitle("Good Track #chi^{2} probability",2); - - histname = "GoodTrackAlgorithm_"; - GoodTrackAlgorithm = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, 32, 0., 32.); - GoodTrackAlgorithm->setAxisTitle("Good Track tracking algorithm",1); - GoodTrackAlgorithm->setAxisTitle("Number of Good Tracks",2); - - - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/GoodTracks"); + int EtaBin = conf_.getParameter( "EtaBin"); + double EtaMin = conf_.getParameter("EtaMin"); + double EtaMax = conf_.getParameter("EtaMax"); + + int PhiBin = conf_.getParameter( "PhiBin"); + double PhiMin = conf_.getParameter("PhiMin"); + double PhiMax = conf_.getParameter("PhiMax"); - histname = "GoodTrackNumberOfRecHitsPerTrack_"; - GoodTrackNumberOfRecHitsPerTrack = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKHitBin, TKHitMin, TKHitMax); - GoodTrackNumberOfRecHitsPerTrack->setAxisTitle("Number of all RecHits of each Good Track"); - GoodTrackNumberOfRecHitsPerTrack->setAxisTitle("Number of Good Tracks", 2); + int DxyBin = conf_.getParameter( "DxyBin"); + double DxyMin = conf_.getParameter("DxyMin"); + double DxyMax = conf_.getParameter("DxyMax"); - histname = "GoodTrackNumberOfRecHitsFoundPerTrack_"; - GoodTrackNumberOfFoundRecHitsPerTrack = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TKHitBin, TKHitMin, TKHitMax); - GoodTrackNumberOfFoundRecHitsPerTrack->setAxisTitle("Number of found RecHits of each Good Track"); - GoodTrackNumberOfFoundRecHitsPerTrack->setAxisTitle("Number of Good Tracks", 2); - - if ( doGoodTrackRecHitVsPhiVsEtaPerTrack_ || doAllPlots_ ){ + if (doThetaPlots_) { + int ThetaBin = conf_.getParameter( "ThetaBin"); + double ThetaMin = conf_.getParameter("ThetaMin"); + double ThetaMax = conf_.getParameter("ThetaMax"); + + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); + histname = "DistanceOfClosestApproachVsTheta_"; + DistanceOfClosestApproachVsTheta = dqmStore_->bookProfile(histname+CategoryName,histname+CategoryName, ThetaBin, ThetaMin, ThetaMax, DxyMin,DxyMax,""); + DistanceOfClosestApproachVsTheta->setAxisTitle("Track #theta",1); + DistanceOfClosestApproachVsTheta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2); + } - histname = "GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack_"; - GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack = dqmStore_->bookProfile2D(histname+CatagoryName, histname+CatagoryName, - EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., ""); - GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack->setAxisTitle("Good Track #eta ", 1); - GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack->setAxisTitle("Good Track #phi ", 2); - } - - if ( doGoodTrackLayersVsPhiVsEtaPerTrack_ || doAllPlots_ ){ + histname = "DistanceOfClosestApproachVsEta_"; + DistanceOfClosestApproachVsEta = dqmStore_->bookProfile(histname+CategoryName,histname+CategoryName, EtaBin, EtaMin, EtaMax, DxyMin, DxyMax,""); + DistanceOfClosestApproachVsEta->setAxisTitle("Track #eta",1); + DistanceOfClosestApproachVsEta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2); + // temporary patch in order to put back those MEs in Muon Workspace + + histname = "DistanceOfClosestApproach_"; + DistanceOfClosestApproach = dqmStore_->book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax); + DistanceOfClosestApproach->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",1); + DistanceOfClosestApproach->setAxisTitle("Number of Tracks",2); - histname = "GoodTrackNumberOfLayersVsPhiVsEtaPerTrack_"; - GoodTrackNumberOfLayersVsPhiVsEtaPerTrack = dqmStore_->bookProfile2D(histname+CatagoryName, histname+CatagoryName, - EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., ""); - GoodTrackNumberOfLayersVsPhiVsEtaPerTrack->setAxisTitle("Good Track #eta ", 1); - GoodTrackNumberOfLayersVsPhiVsEtaPerTrack->setAxisTitle("Good Track #phi ", 2); + histname = "DistanceOfClosestApproachVsPhi_"; + DistanceOfClosestApproachVsPhi = dqmStore_->bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyMin,DxyMax,""); + DistanceOfClosestApproachVsPhi->getTH1()->SetBit(TH1::kCanRebin); + DistanceOfClosestApproachVsPhi->setAxisTitle("Track #phi",1); + DistanceOfClosestApproachVsPhi->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2); } - // rechits - histname = "GoodTrackNumberOfRecHitsPerTrackVsPhiProfile_"; - GoodTrackNumberOfRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, RecHitMin, RecHitMax,""); - GoodTrackNumberOfRecHitsPerTrackVsPhiProfile->setAxisTitle("Good Track #phi",1); - GoodTrackNumberOfRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of RecHits of each Track",2); - - histname = "GoodTrackNumberOfRecHitsPerTrackVsEtaProfile_"; - GoodTrackNumberOfRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, RecHitMin, RecHitMax,""); - GoodTrackNumberOfRecHitsPerTrackVsEtaProfile->setAxisTitle("Good Track #eta",1); - GoodTrackNumberOfRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of RecHits of each Track",2); - - histname = "GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile_"; - GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, RecHitMin, RecHitMax,""); - GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile->setAxisTitle("Good Track #phi",1); - GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of found RecHits of each Track",2); - - histname = "GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile_"; - GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, RecHitMin, RecHitMax,""); - GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile->setAxisTitle("Good Track #eta",1); - GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of found RecHits of each Track",2); - } - + } // -- Analyse // ---------------------------------------------------------------------------------// void TrackAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::Track& track) { + double phi = track.phi(); + double eta = track.eta(); + int nRecHits = track.hitPattern().numberOfHits(); + int nValidRecHits = track.numberOfValidHits(); + int nLostRecHits = track.numberOfLostHits(); + + double chi2 = track.chi2(); + double chi2prob = TMath::Prob(track.chi2(),(int)track.ndof()); + double chi2oNDF = track.normalizedChi2(); + if ( doHitPropertiesPlots_ || doAllPlots_ ){ // rec hits - // originally it was track.recHitsSize(), but it is exploiting extra - // therefore it is moved to track.hitPattern().numberOfHits() - NumberOfRecHitsPerTrack->Fill(track.hitPattern().numberOfHits()); - NumberOfRecHitsFoundPerTrack->Fill(track.numberOfValidHits()); - NumberOfRecHitsLostPerTrack->Fill(track.numberOfLostHits()); + NumberOfRecHitsPerTrack -> Fill(nRecHits); + NumberOfValidRecHitsPerTrack-> Fill(nValidRecHits); + NumberOfLostRecHitsPerTrack -> Fill(nLostRecHits); // 2D plots if ( doRecHitVsPhiVsEtaPerTrack_ || doAllPlots_ ) - NumberOfRecHitVsPhiVsEtaPerTrack->Fill(track.eta(),track.phi(),track.hitPattern().numberOfHits()); - + NumberOfRecHitVsPhiVsEtaPerTrack->Fill(eta,phi,nRecHits); + + int nLayers = track.hitPattern().stripLayersWithMeasurement(); // layers - NumberOfLayersPerTrack->Fill(track.hitPattern().trackerLayersWithMeasurement()); + NumberOfLayersPerTrack->Fill(nLayers); + // 2D plots if ( doLayersVsPhiVsEtaPerTrack_ || doAllPlots_ ) - NumberOfLayersVsPhiVsEtaPerTrack->Fill(track.eta(),track.phi(),track.hitPattern().trackerLayersWithMeasurement()); - - + NumberOfLayersVsPhiVsEtaPerTrack->Fill(eta,phi,nLayers); } - + if (doGeneralPropertiesPlots_ || doAllPlots_){ // fitting - Chi2->Fill(track.chi2()); - Chi2Prob->Fill(TMath::Prob(track.chi2(),(int)track.ndof())); - Chi2oNDF->Fill(track.normalizedChi2()); + Chi2 -> Fill(chi2); + Chi2Prob -> Fill(chi2prob); + Chi2oNDF -> Fill(chi2oNDF); // DCA // temporary patch in order to put back those MEs in Muon Workspace - if (doDCAwrt000Plots_) { - DistanceOfClosestApproach->Fill(track.dxy()); - DistanceOfClosestApproachVsPhi->Fill(track.phi(), track.dxy()); + if (doDCAPlots_) { + if (doDCAwrt000Plots_) { + DistanceOfClosestApproach->Fill(track.dxy()); + DistanceOfClosestApproachVsPhi->Fill(phi, track.dxy()); + } + + // PCA + xPointOfClosestApproach->Fill(track.referencePoint().x()); + yPointOfClosestApproach->Fill(track.referencePoint().y()); + zPointOfClosestApproach->Fill(track.referencePoint().z()); } - /* - http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/TrackReco/interface/TrackBase.h?view=markup - vertex() is DEPRECATED !! - xPointOfClosestApproach->Fill(track.vertex().x()); - yPointOfClosestApproach->Fill(track.vertex().y()); - zPointOfClosestApproach->Fill(track.vertex().z()); - */ - - // PCA - xPointOfClosestApproach->Fill(track.referencePoint().x()); - yPointOfClosestApproach->Fill(track.referencePoint().y()); - zPointOfClosestApproach->Fill(track.referencePoint().z()); // algorithm algorithm->Fill(static_cast(track.algo())); - } if ( doLumiAnalysis_ ) { - NumberOfRecHitsPerTrack_lumiFlag -> Fill(track.hitPattern().numberOfHits()); - Chi2oNDF_lumiFlag->Fill(track.normalizedChi2()); + NumberOfRecHitsPerTrack_lumiFlag -> Fill(nRecHits); + Chi2oNDF_lumiFlag -> Fill(chi2oNDF); } - if(doBSPlots_ || doAllPlots_) - { - // edm::InputTag bsSrc = conf_.getParameter< edm::InputTag >("beamSpot"); - - edm::Handle recoBeamSpotHandle; - // iEvent.getByLabel(bsSrc,recoBeamSpotHandle); - iEvent.getByToken(beamSpotToken_,recoBeamSpotHandle); - reco::BeamSpot bs = *recoBeamSpotHandle; - - DistanceOfClosestApproachToBS->Fill(track.dxy(bs.position())); - DistanceOfClosestApproachToBSVsPhi->Fill(track.phi(), track.dxy(bs.position())); - zPointOfClosestApproachVsPhi->Fill(track.phi(),track.vz()); - xPointOfClosestApproachVsZ0wrt000->Fill(track.dz(),track.vx()); - yPointOfClosestApproachVsZ0wrt000->Fill(track.dz(),track.vy()); - xPointOfClosestApproachVsZ0wrtBS->Fill(track.dz(bs.position()),(track.vx()-bs.position(track.vz()).x())); - yPointOfClosestApproachVsZ0wrtBS->Fill(track.dz(bs.position()),(track.vy()-bs.position(track.vz()).y())); - if (doTestPlots_) { - TESTDistanceOfClosestApproachToBS->Fill(track.dxy(bs.position(track.vz()))); - TESTDistanceOfClosestApproachToBSVsPhi->Fill(track.phi(), track.dxy(bs.position(track.vz()))); - } + if(doDCAPlots_ || doBSPlots_ || doAllPlots_) { + + edm::Handle recoBeamSpotHandle; + iEvent.getByToken(beamSpotToken_,recoBeamSpotHandle); + reco::BeamSpot bs = *recoBeamSpotHandle; + + DistanceOfClosestApproachToBS -> Fill(track.dxy(bs.position())); + DistanceOfClosestApproachToBSVsPhi -> Fill(track.phi(), track.dxy(bs.position())); + zPointOfClosestApproachVsPhi -> Fill(track.phi(), track.vz()); + xPointOfClosestApproachVsZ0wrt000 -> Fill(track.dz(), track.vx()); + yPointOfClosestApproachVsZ0wrt000 -> Fill(track.dz(), track.vy()); + xPointOfClosestApproachVsZ0wrtBS -> Fill(track.dz(bs.position()),(track.vx()-bs.position(track.vz()).x())); + yPointOfClosestApproachVsZ0wrtBS -> Fill(track.dz(bs.position()),(track.vy()-bs.position(track.vz()).y())); + if (doTestPlots_) { + TESTDistanceOfClosestApproachToBS -> Fill(track.dxy(bs.position(track.vz()))); + TESTDistanceOfClosestApproachToBSVsPhi -> Fill(track.phi(), track.dxy(bs.position(track.vz()))); } + } + + if(doDCAPlots_ || doPVPlots_ || doAllPlots_) { + edm::Handle recoPrimaryVerticesHandle; + iEvent.getByToken(pvToken_,recoPrimaryVerticesHandle); + if (recoPrimaryVerticesHandle->size() > 0) { + reco::Vertex pv = recoPrimaryVerticesHandle->at(0); + + DistanceOfClosestApproachToPV -> Fill(track.dxy(pv.position())); + DistanceOfClosestApproachToPVVsPhi -> Fill(track.phi(), track.dxy(pv.position())); + xPointOfClosestApproachVsZ0wrtPV -> Fill(track.dz(pv.position()),(track.vx()-pv.position().x())); + yPointOfClosestApproachVsZ0wrtPV -> Fill(track.dz(pv.position()),(track.vy()-pv.position().y())); + } + } - if(doDCAPlots_ || doAllPlots_) - { - if (doDCAwrt000Plots_) { - if (doThetaPlots_) { - DistanceOfClosestApproachVsTheta->Fill(track.theta(), track.d0()); - } - DistanceOfClosestApproachVsEta->Fill(track.eta(), track.d0()); - } - } - //Tracker Specific Histograms - if(doTrackerSpecific_ || doAllPlots_) - { - doTrackerSpecificFillHists(track); + if(doDCAPlots_ || doAllPlots_) { + if (doDCAwrt000Plots_) { + if (doThetaPlots_) { + DistanceOfClosestApproachVsTheta->Fill(track.theta(), track.d0()); } + DistanceOfClosestApproachVsEta->Fill(track.eta(), track.d0()); + } + + } - if (doMeasurementStatePlots_ || doAllPlots_){ - std::string StateName = conf_.getParameter("MeasurementState"); - if (StateName == "All") - { - fillHistosForState(iSetup, track, std::string("OuterSurface")); - fillHistosForState(iSetup, track, std::string("InnerSurface")); - fillHistosForState(iSetup, track, std::string("ImpactPoint")); - } - else if - ( - StateName != "OuterSurface" && - StateName != "InnerSurface" && - StateName != "ImpactPoint" && - StateName != "default" - ) - { - fillHistosForState(iSetup, track, std::string("default")); - } - else - { - fillHistosForState(iSetup, track, StateName); - } - } + //Tracker Specific Histograms + if(doTrackerSpecific_ || doAllPlots_) { + fillHistosForTrackerSpecific(track); + } - // Good Tracks plots - if ( track.quality(reco::TrackBase::highPurity) && track.pt() > 1. ) { - if ( doGoodTrackPlots_ || doAllPlots_ ) { - GoodTrackChi2oNDF->Fill(track.normalizedChi2()); - GoodTrackChi2Prob->Fill(TMath::Prob(track.chi2(),(int)track.ndof())); - GoodTrackChi2oNDFVsPhi->Fill(track.phi(),track.normalizedChi2()); - GoodTrackChi2ProbVsPhi->Fill(track.phi(),TMath::Prob(track.chi2(),(int)track.ndof())); - GoodTrackChi2oNDFVsEta->Fill(track.eta(),track.normalizedChi2()); - GoodTrackChi2ProbVsEta->Fill(track.eta(),TMath::Prob(track.chi2(),(int)track.ndof())); - - // originally it was track.recHitsSize(), but it is exploiting extra - // therefore it is moved to track.hitPattern().numberOfHits() - GoodTrackNumberOfRecHitsPerTrack->Fill(track.hitPattern().numberOfHits()); - GoodTrackNumberOfFoundRecHitsPerTrack->Fill(track.numberOfValidHits()); - // algorithm - GoodTrackAlgorithm->Fill(static_cast(track.algo())); - GoodTrackNumberOfFoundRecHitsPerTrackVsPhiProfile->Fill(track.phi(),track.numberOfValidHits()); - GoodTrackNumberOfFoundRecHitsPerTrackVsEtaProfile->Fill(track.eta(),track.numberOfValidHits()); - GoodTrackNumberOfRecHitsPerTrackVsPhiProfile->Fill(track.phi(),track.hitPattern().numberOfHits()); - GoodTrackNumberOfRecHitsPerTrackVsEtaProfile->Fill(track.eta(),track.hitPattern().numberOfHits()); - - if ( doGoodTrackRecHitVsPhiVsEtaPerTrack_ || doAllPlots_ ) - GoodTrackNumberOfRecHitVsPhiVsEtaPerTrack->Fill(track.eta(),track.phi(),track.hitPattern().numberOfHits()); - - if ( doGoodTrackLayersVsPhiVsEtaPerTrack_ || doAllPlots_ ) - GoodTrackNumberOfLayersVsPhiVsEtaPerTrack->Fill(track.eta(),track.phi(),track.hitPattern().trackerLayersWithMeasurement()); - } - if ( doLumiAnalysis_ ) { - GoodTrackChi2oNDF_lumiFlag -> Fill(track.normalizedChi2()); - GoodTrackNumberOfRecHitsPerTrack_lumiFlag -> Fill(track.hitPattern().numberOfHits()); - } + if (doMeasurementStatePlots_ || doAllPlots_){ + std::string StateName = conf_.getParameter("MeasurementState"); + + if (StateName == "All") { + fillHistosForState(iSetup, track, std::string("OuterSurface")); + fillHistosForState(iSetup, track, std::string("InnerSurface")); + fillHistosForState(iSetup, track, std::string("ImpactPoint")); + } else if ( + StateName != "OuterSurface" && + StateName != "InnerSurface" && + StateName != "ImpactPoint" && + StateName != "default" + ) { + fillHistosForState(iSetup, track, std::string("default")); + } else { + fillHistosForState(iSetup, track, StateName); } + } + + if ( doAllPlots_ ) { + } } - // book histograms at differnt measurement points // ---------------------------------------------------------------------------------// void TrackAnalyzer::bookHistosForState(std::string sname, DQMStore * dqmStore_) { - // parameters from the configuration std::string QualName = conf_.getParameter("Quality"); std::string AlgoName = conf_.getParameter("AlgoName"); - std::string MEFolderName = conf_.getParameter("FolderName"); // use the AlgoName and Quality Name - std::string CatagoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; + std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; // get binning from the configuration double Chi2NDFMin = conf_.getParameter("Chi2NDFMin"); @@ -825,78 +788,52 @@ void TrackAnalyzer::bookHistosForState(std::string sname, DQMStore * dqmStore_) double etaErrMax = conf_.getParameter("etaErrMax"); - dqmStore_->setCurrentFolder(MEFolderName); - - TkParameterMEs tkmes; - - std::string histTag = (sname == "default") ? CatagoryName : sname + "_" + CatagoryName; - - if(doAllPlots_) - { + double Chi2ProbMin = conf_.getParameter("Chi2ProbMin"); + double Chi2ProbMax = conf_.getParameter("Chi2ProbMax"); - // COMMENTED BEACUSE THERE IS ALREADY THE PROFILE !!! (blablaProfile) - /* - // hit properties - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties"); - // rechits - histname = "NumberOfRecHitsPerTrackVsPhi_" + histTag; - tkmes.NumberOfRecHitsPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitMin, RecHitMax,""); - tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1); - tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of found RecHits of each Track",2); + dqmStore_->setCurrentFolder(TopFolder_); - if (doThetaPlots_) { - histname = "NumberOfRecHitsPerTrackVsTheta_" + histTag; - tkmes.NumberOfRecHitsPerTrackVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecHitMin, RecHitMax,""); - tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Track #theta",1); - tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Number of found RecHits of each Track",2); - } - histname = "NumberOfRecHitsPerTrackVsEta_" + histTag; - tkmes.NumberOfRecHitsPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitMin, RecHitMax,""); - tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1); - tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of found RecHits of each Track",2); + TkParameterMEs tkmes; - histname = "NumberOfLayersPerTrackVsPhi_" + histTag; - tkmes.NumberOfLayersPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecLayMin, RecLayMax,""); - tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1); - tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of Layers of each Track",2); + std::string histTag = (sname == "default") ? CategoryName : sname + "_" + CategoryName; - if (doThetaPlots_) { - histname = "NumberOfLayersPerTrackVsTheta_" + histTag; - tkmes.NumberOfLayersPerTrackVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecLayMin, RecLayMax,""); - tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Track #theta",1); - tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Number of Layers of each Track",2); - } - histname = "NumberOfLayersPerTrackVsEta_" + histTag; - tkmes.NumberOfLayersPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecLayMin, RecLayMax,""); - tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1); - tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of Layers of each Track",2); - */ + if(doAllPlots_) { - // general properties - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); + // general properties + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); + + if (doThetaPlots_) { + histname = "Chi2oNDFVsTheta_" + histTag; + tkmes.Chi2oNDFVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,""); + tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1); + tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2); + } + histname = "Chi2oNDFVsPhi_" + histTag; + tkmes.Chi2oNDFVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,""); + tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1); + tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2); + + histname = "Chi2oNDFVsEta_" + histTag; + tkmes.Chi2oNDFVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,""); + tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1); + tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2); + + histname = "Chi2ProbVsPhi_" + histTag; + tkmes.Chi2ProbVsPhi = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax); + tkmes.Chi2ProbVsPhi->setAxisTitle("Tracks #phi" ,1); + tkmes.Chi2ProbVsPhi->setAxisTitle("Track #chi^{2} probability",2); + + histname = "Chi2ProbVsEta_" + histTag; + tkmes.Chi2ProbVsEta = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax); + tkmes.Chi2ProbVsEta->setAxisTitle("Tracks #eta" ,1); + tkmes.Chi2ProbVsEta->setAxisTitle("Track #chi^{2} probability",2); - if (doThetaPlots_) { - histname = "Chi2oNDFVsTheta_" + histTag; - tkmes.Chi2oNDFVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,""); - tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1); - tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2); - } - histname = "Chi2oNDFVsPhi_" + histTag; - tkmes.Chi2oNDFVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,""); - tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1); - tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2); - - histname = "Chi2oNDFVsEta_" + histTag; - tkmes.Chi2oNDFVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,""); - tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1); - tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2); } - + // general properties - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); histname = "TrackP_" + histTag; - tkmes.TrackP = dqmStore_->book1D(histname, histname, TrackPBin, TrackPMin, TrackPMax); tkmes.TrackP->setAxisTitle("Track |p| (GeV/c)", 1); tkmes.TrackP->setAxisTitle("Number of Tracks",2); @@ -945,101 +882,122 @@ void TrackAnalyzer::bookHistosForState(std::string sname, DQMStore * dqmStore_) histname = "TrackPErrOverP_" + histTag; tkmes.TrackPErr = dqmStore_->book1D(histname, histname, pErrBin, pErrMin, pErrMax); - tkmes.TrackPErr->setAxisTitle("error(p)/p", 1); + tkmes.TrackPErr->setAxisTitle("track error(p)/p", 1); tkmes.TrackPErr->setAxisTitle("Number of Tracks",2); histname = "TrackPtErrOverPt_" + histTag; tkmes.TrackPtErr = dqmStore_->book1D(histname, histname, ptErrBin, ptErrMin, ptErrMax); - tkmes.TrackPtErr->setAxisTitle("error(p_{T})/p_{T}", 1); + tkmes.TrackPtErr->setAxisTitle("track error(p_{T})/p_{T}", 1); tkmes.TrackPtErr->setAxisTitle("Number of Tracks",2); histname = "TrackPtErrOverPtVsEta_" + histTag; tkmes.TrackPtErrVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, ptErrMin, ptErrMax); tkmes.TrackPtErrVsEta->setAxisTitle("Track #eta",1); - tkmes.TrackPtErrVsEta->setAxisTitle("error(p_{T})/p_{T}", 2); + tkmes.TrackPtErrVsEta->setAxisTitle("track error(p_{T})/p_{T}", 2); if (doTrackPxPyPlots_) { histname = "TrackPxErrOverPx_" + histTag; tkmes.TrackPxErr = dqmStore_->book1D(histname, histname, pxErrBin, pxErrMin, pxErrMax); - tkmes.TrackPxErr->setAxisTitle("error(p_{x})/p_{x}", 1); + tkmes.TrackPxErr->setAxisTitle("track error(p_{x})/p_{x}", 1); tkmes.TrackPxErr->setAxisTitle("Number of Tracks",2); histname = "TrackPyErrOverPy_" + histTag; tkmes.TrackPyErr = dqmStore_->book1D(histname, histname, pyErrBin, pyErrMin, pyErrMax); - tkmes.TrackPyErr->setAxisTitle("error(p_{y})/p_{y}", 1); + tkmes.TrackPyErr->setAxisTitle("track error(p_{y})/p_{y}", 1); tkmes.TrackPyErr->setAxisTitle("Number of Tracks",2); } histname = "TrackPzErrOverPz_" + histTag; tkmes.TrackPzErr = dqmStore_->book1D(histname, histname, pzErrBin, pzErrMin, pzErrMax); - tkmes.TrackPzErr->setAxisTitle("error(p_{z})/p_{z}", 1); + tkmes.TrackPzErr->setAxisTitle("track error(p_{z})/p_{z}", 1); tkmes.TrackPzErr->setAxisTitle("Number of Tracks",2); histname = "TrackPhiErr_" + histTag; tkmes.TrackPhiErr = dqmStore_->book1D(histname, histname, phiErrBin, phiErrMin, phiErrMax); - tkmes.TrackPhiErr->setAxisTitle("error(#phi)"); + tkmes.TrackPhiErr->setAxisTitle("track error(#phi)"); tkmes.TrackPhiErr->setAxisTitle("Number of Tracks",2); histname = "TrackEtaErr_" + histTag; tkmes.TrackEtaErr = dqmStore_->book1D(histname, histname, etaErrBin, etaErrMin, etaErrMax); - tkmes.TrackEtaErr->setAxisTitle("error(#eta)"); + tkmes.TrackEtaErr->setAxisTitle("track error(#eta)"); tkmes.TrackEtaErr->setAxisTitle("Number of Tracks",2); // rec hit profiles - histname = "NumberOfRecHitsPerTrackVsPhiProfile_" + histTag; - tkmes.NumberOfRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitBin, RecHitMin, RecHitMax,""); - tkmes.NumberOfRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - tkmes.NumberOfRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of found RecHits of each Track",2); + dqmStore_->setCurrentFolder(TopFolder_+"/GeneralProperties"); + histname = "NumberOfRecHitsPerTrackVsPhi_" + histTag; + tkmes.NumberOfRecHitsPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitBin, RecHitMin, RecHitMax,""); + tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1); + tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of RecHits in each Track",2); if (doThetaPlots_) { - histname = "NumberOfRecHitsPerTrackVsThetaProfile_" + histTag; - tkmes.NumberOfRecHitsPerTrackVsThetaProfile = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecHitBin, RecHitMin, RecHitMax,""); - tkmes.NumberOfRecHitsPerTrackVsThetaProfile->setAxisTitle("Track #phi",1); - tkmes.NumberOfRecHitsPerTrackVsThetaProfile->setAxisTitle("Number of found RecHits of each Track",2); + histname = "NumberOfRecHitsPerTrackVsTheta_" + histTag; + tkmes.NumberOfRecHitsPerTrackVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecHitBin, RecHitMin, RecHitMax,""); + tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Track #phi",1); + tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Number of RecHits in each Track",2); } - histname = "NumberOfRecHitsPerTrackVsEtaProfile_" + histTag; - tkmes.NumberOfRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitBin, RecHitMin, RecHitMax,""); - tkmes.NumberOfRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - tkmes.NumberOfRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of found RecHits of each Track",2); - - histname = "NumberOfLayersPerTrackVsPhiProfile_" + histTag; - tkmes.NumberOfLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecLayBin, RecLayMin, RecLayMax,""); - tkmes.NumberOfLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - tkmes.NumberOfLayersPerTrackVsPhiProfile->setAxisTitle("Number of Layers of each Track",2); + histname = "NumberOfRecHitsPerTrackVsEta_" + histTag; + tkmes.NumberOfRecHitsPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitBin, RecHitMin, RecHitMax,""); + tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1); + tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of RecHits in each Track",2); + + histname = "NumberOfValidRecHitsPerTrackVsPhi_" + histTag; + tkmes.NumberOfValidRecHitsPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitMin, RecHitMax,""); + tkmes.NumberOfValidRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1); + tkmes.NumberOfValidRecHitsPerTrackVsPhi->setAxisTitle("Number of valid RecHits in each Track",2); + + // std::cout << "[TrackAnalyzer::bookHistosForState] histTag: " << histTag << std::endl; + histname = "NumberOfValidRecHitsPerTrackVsEta_" + histTag; + tkmes.NumberOfValidRecHitsPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitMin, RecHitMax,""); + tkmes.NumberOfValidRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1); + tkmes.NumberOfValidRecHitsPerTrackVsEta->setAxisTitle("Number of valid RecHits in each Track",2); + + ////////////////////////////////////////// + histname = "NumberOfLayersPerTrackVsPhi_" + histTag; + tkmes.NumberOfLayersPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecLayBin, RecLayMin, RecLayMax,""); + tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1); + tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of Layers in each Track",2); if (doThetaPlots_) { - histname = "NumberOfLayersPerTrackVsThetaProfile_" + histTag; - tkmes.NumberOfLayersPerTrackVsThetaProfile = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecLayBin, RecLayMin, RecLayMax,""); - tkmes.NumberOfLayersPerTrackVsThetaProfile->setAxisTitle("Track #phi",1); - tkmes.NumberOfLayersPerTrackVsThetaProfile->setAxisTitle("Number of Layers of each Track",2); + histname = "NumberOfLayersPerTrackVsTheta_" + histTag; + tkmes.NumberOfLayersPerTrackVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecLayBin, RecLayMin, RecLayMax,""); + tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Track #phi",1); + tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Number of Layers in each Track",2); } - histname = "NumberOfLayersPerTrackVsEtaProfile_" + histTag; - tkmes.NumberOfLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecLayBin, RecLayMin, RecLayMax,""); - tkmes.NumberOfLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - tkmes.NumberOfLayersPerTrackVsEtaProfile->setAxisTitle("Number of Layers of each Track",2); - - if ( doGoodTrackPlots_ || doAllPlots_ ) { + histname = "NumberOfLayersPerTrackVsEta_" + histTag; + tkmes.NumberOfLayersPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecLayBin, RecLayMin, RecLayMax,""); + tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1); + tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of Layers in each Track",2); - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties/GoodTracks"); - - histname = "GoodTrackPt_" + histTag; - tkmes.GoodTrackPt = dqmStore_->book1D(histname, histname, TrackPtBin, TrackPtMin, TrackPtMax); - tkmes.GoodTrackPt->setAxisTitle("Good Track p_{T} (GeV/c)", 1); - tkmes.GoodTrackPt->setAxisTitle("Number of Tracks",2); + if (doThetaPlots_) { + histname = "Chi2oNDFVsTheta_" + histTag; + tkmes.Chi2oNDFVsTheta = dqmStore_->bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,""); + tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1); + tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2); + } + if (doAllPlots_) { + histname = "Chi2oNDFVsPhi_" + histTag; + tkmes.Chi2oNDFVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,""); + tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1); + tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2); - histname = "GoodTrackEta_" + histTag; - tkmes.GoodTrackEta = dqmStore_->book1D(histname, histname, EtaBin, EtaMin, EtaMax); - tkmes.GoodTrackEta->setAxisTitle("Good Track #eta", 1); - tkmes.GoodTrackEta->setAxisTitle("Number of Tracks",2); + histname = "Chi2oNDFVsEta_" + histTag; + tkmes.Chi2oNDFVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,""); + tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1); + tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2); - histname = "GoodTrackPhi_" + histTag; - tkmes.GoodTrackPhi = dqmStore_->book1D(histname, histname, PhiBin, PhiMin, PhiMax); - tkmes.GoodTrackPhi->setAxisTitle("Good Track #phi", 1); - tkmes.GoodTrackPhi->setAxisTitle("Number of Tracks",2); - + histname = "Chi2ProbVsPhi_" + histTag; + tkmes.Chi2ProbVsPhi = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax); + tkmes.Chi2ProbVsPhi->setAxisTitle("Tracks #phi" ,1); + tkmes.Chi2ProbVsPhi->setAxisTitle("Track #chi^{2} probability",2); + + histname = "Chi2ProbVsEta_" + histTag; + tkmes.Chi2ProbVsEta = dqmStore_->bookProfile(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax); + tkmes.Chi2ProbVsEta->setAxisTitle("Tracks #eta" ,1); + tkmes.Chi2ProbVsEta->setAxisTitle("Track #chi^{2} probability",2); } // now put the MEs in the map TkParameterMEMap.insert( std::make_pair(sname, tkmes) ); + } @@ -1051,217 +1009,144 @@ void TrackAnalyzer::fillHistosForState(const edm::EventSetup& iSetup, const reco double p, px, py, pz, pt, theta, phi, eta, q; double pxerror, pyerror, pzerror, pterror, perror, phierror, etaerror; - bool isHighPurity = track.quality(reco::TrackBase::highPurity); - - if (sname == "default") - { - p = track.p(); - px = track.px(); - py = track.py(); - pz = track.pz(); - pt = track.pt(); - phi = track.phi(); - theta = track.theta(); - eta = track.eta(); - q = track.charge(); - - // pterror = (pt) ? track.ptError()/pt : 0.0; - pterror = (pt) ? track.ptError()/(pt*pt) : 0.0; - pxerror = -1.0; - pyerror = -1.0; - pzerror = -1.0; - perror = -1.0; - phierror = track.phiError(); - etaerror = track.etaError(); - - } - else - { - edm::ESHandle theB; - iSetup.get().get("TransientTrackBuilder",theB); - reco::TransientTrack TransTrack = theB->build(track); - - TrajectoryStateOnSurface TSOS; - - if (sname == "OuterSurface") TSOS = TransTrack.outermostMeasurementState(); - else if (sname == "InnerSurface") TSOS = TransTrack.innermostMeasurementState(); - else if (sname == "ImpactPoint") TSOS = TransTrack.impactPointState(); - - p = TSOS.globalMomentum().mag(); - px = TSOS.globalMomentum().x(); - py = TSOS.globalMomentum().y(); - pz = TSOS.globalMomentum().z(); - pt = TSOS.globalMomentum().perp(); - phi = TSOS.globalMomentum().phi(); - theta = TSOS.globalMomentum().theta(); - eta = TSOS.globalMomentum().eta(); - q = TSOS.charge(); - - //get the error of the kinimatic parameters - AlgebraicSymMatrix66 errors = TSOS.cartesianError().matrix(); - double partialPterror = errors(3,3)*pow(TSOS.globalMomentum().x(),2) + errors(4,4)*pow(TSOS.globalMomentum().y(),2); - pterror = sqrt(partialPterror)/TSOS.globalMomentum().perp(); - pxerror = sqrt(errors(3,3))/TSOS.globalMomentum().x(); - pyerror = sqrt(errors(4,4))/TSOS.globalMomentum().y(); - pzerror = sqrt(errors(5,5))/TSOS.globalMomentum().z(); - perror = sqrt(partialPterror+errors(5,5)*pow(TSOS.globalMomentum().z(),2))/TSOS.globalMomentum().mag(); - phierror = sqrt(TSOS.curvilinearError().matrix()(2,2)); - etaerror = sqrt(TSOS.curvilinearError().matrix()(1,1))*fabs(sin(TSOS.globalMomentum().theta())); + if (sname == "default") { + + p = track.p(); + px = track.px(); + py = track.py(); + pz = track.pz(); + pt = track.pt(); + phi = track.phi(); + theta = track.theta(); + eta = track.eta(); + q = track.charge(); + + pterror = (pt) ? track.ptError()/(pt*pt) : 0.0; + pxerror = -1.0; + pyerror = -1.0; + pzerror = -1.0; + perror = -1.0; + phierror = track.phiError(); + etaerror = track.etaError(); + + } else { + + edm::ESHandle theB; + iSetup.get().get("TransientTrackBuilder",theB); + reco::TransientTrack TransTrack = theB->build(track); + + TrajectoryStateOnSurface TSOS; + + if (sname == "OuterSurface") TSOS = TransTrack.outermostMeasurementState(); + else if (sname == "InnerSurface") TSOS = TransTrack.innermostMeasurementState(); + else if (sname == "ImpactPoint") TSOS = TransTrack.impactPointState(); + + p = TSOS.globalMomentum().mag(); + px = TSOS.globalMomentum().x(); + py = TSOS.globalMomentum().y(); + pz = TSOS.globalMomentum().z(); + pt = TSOS.globalMomentum().perp(); + phi = TSOS.globalMomentum().phi(); + theta = TSOS.globalMomentum().theta(); + eta = TSOS.globalMomentum().eta(); + q = TSOS.charge(); + + //get the error of the kinimatic parameters + AlgebraicSymMatrix66 errors = TSOS.cartesianError().matrix(); + double partialPterror = errors(3,3)*pow(TSOS.globalMomentum().x(),2) + errors(4,4)*pow(TSOS.globalMomentum().y(),2); + pterror = sqrt(partialPterror)/TSOS.globalMomentum().perp(); + pxerror = sqrt(errors(3,3))/TSOS.globalMomentum().x(); + pyerror = sqrt(errors(4,4))/TSOS.globalMomentum().y(); + pzerror = sqrt(errors(5,5))/TSOS.globalMomentum().z(); + perror = sqrt(partialPterror+errors(5,5)*pow(TSOS.globalMomentum().z(),2))/TSOS.globalMomentum().mag(); + phierror = sqrt(TSOS.curvilinearError().matrix()(2,2)); + etaerror = sqrt(TSOS.curvilinearError().matrix()(1,1))*fabs(sin(TSOS.globalMomentum().theta())); } std::map::iterator iPos = TkParameterMEMap.find(sname); - if (iPos != TkParameterMEMap.end()) - { - TkParameterMEs tkmes = iPos->second; - - // momentum - tkmes.TrackP->Fill(p); - if (doTrackPxPyPlots_) { - tkmes.TrackPx->Fill(px); - tkmes.TrackPy->Fill(py); - } - tkmes.TrackPz->Fill(pz); - tkmes.TrackPt->Fill(pt); - - // angles - tkmes.TrackPhi->Fill(phi); - tkmes.TrackEta->Fill(eta); - if (doThetaPlots_) { - tkmes.TrackTheta->Fill(theta); - } - tkmes.TrackQ->Fill(q); - - // errors - tkmes.TrackPtErr->Fill(pterror); - tkmes.TrackPtErrVsEta->Fill(eta,pterror); - if (doTrackPxPyPlots_) { - tkmes.TrackPxErr->Fill(pxerror); - tkmes.TrackPyErr->Fill(pyerror); - } - tkmes.TrackPzErr->Fill(pzerror); - tkmes.TrackPErr->Fill(perror); - tkmes.TrackPhiErr->Fill(phierror); - tkmes.TrackEtaErr->Fill(etaerror); - - // rec hits - tkmes.NumberOfRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidHits()); - if (doThetaPlots_) { - tkmes.NumberOfRecHitsPerTrackVsThetaProfile->Fill(theta,track.hitPattern().numberOfValidHits()); - } - tkmes.NumberOfRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidHits()); + if (iPos != TkParameterMEMap.end()) { + TkParameterMEs tkmes = iPos->second; + + // momentum + tkmes.TrackP->Fill(p); + if (doTrackPxPyPlots_) { + tkmes.TrackPx->Fill(px); + tkmes.TrackPy->Fill(py); + } + tkmes.TrackPz->Fill(pz); + tkmes.TrackPt->Fill(pt); + + // angles + tkmes.TrackPhi->Fill(phi); + tkmes.TrackEta->Fill(eta); + if (doThetaPlots_) { + tkmes.TrackTheta->Fill(theta); + } + tkmes.TrackQ->Fill(q); + + // errors + tkmes.TrackPtErr->Fill(pterror); + tkmes.TrackPtErrVsEta->Fill(eta,pterror); + if (doTrackPxPyPlots_) { + tkmes.TrackPxErr->Fill(pxerror); + tkmes.TrackPyErr->Fill(pyerror); + } + tkmes.TrackPzErr->Fill(pzerror); + tkmes.TrackPErr->Fill(perror); + tkmes.TrackPhiErr->Fill(phierror); + tkmes.TrackEtaErr->Fill(etaerror); + + int nRecHits = track.hitPattern().numberOfHits(); + int nValidRecHits = track.numberOfValidHits(); + // rec hits + tkmes.NumberOfRecHitsPerTrackVsPhi->Fill(phi, nRecHits); + if (doThetaPlots_) { + tkmes.NumberOfRecHitsPerTrackVsTheta->Fill(theta,nRecHits); + } + tkmes.NumberOfRecHitsPerTrackVsEta->Fill(eta, nRecHits); + + tkmes.NumberOfValidRecHitsPerTrackVsPhi->Fill(phi, nValidRecHits); + tkmes.NumberOfValidRecHitsPerTrackVsEta->Fill(eta, nValidRecHits); + + int nLayers = track.hitPattern().stripLayersWithMeasurement(); + // rec layers + tkmes.NumberOfLayersPerTrackVsPhi->Fill(phi, nLayers); + if (doThetaPlots_) { + tkmes.NumberOfLayersPerTrackVsTheta->Fill(theta, nLayers); + } + tkmes.NumberOfLayersPerTrackVsEta->Fill(eta, nLayers); + + double chi2prob = TMath::Prob(track.chi2(),(int)track.ndof()); + double chi2oNDF = track.normalizedChi2(); - // rec layers - tkmes.NumberOfLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().stripLayersWithMeasurement()); + if(doAllPlots_) { + + // general properties if (doThetaPlots_) { - tkmes.NumberOfLayersPerTrackVsThetaProfile->Fill(theta, track.hitPattern().stripLayersWithMeasurement()); - } - tkmes.NumberOfLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().stripLayersWithMeasurement()); - - if(doAllPlots_) - { - /* - // COMMENTED because the same MEs are already fill below !!!! - // hit related - tkmes.NumberOfRecHitsPerTrackVsPhi->Fill(phi, track.found()); - if (doThetaPlots_) { - tkmes.NumberOfRecHitsPerTrackVsTheta->Fill(theta, track.found()); - } - tkmes.NumberOfRecHitsPerTrackVsEta->Fill(eta, track.found()); - */ - - // general properties - if (doThetaPlots_) { - tkmes.Chi2oNDFVsTheta->Fill(theta, track.normalizedChi2()); - } - tkmes.Chi2oNDFVsPhi->Fill(phi, track.normalizedChi2()); - tkmes.Chi2oNDFVsEta->Fill(eta, track.normalizedChi2()); - - // COMMENTED because there are already those quantity in blablaProfile !! - /* - // rec hits - tkmes.NumberOfRecHitsPerTrackVsPhi->Fill(phi, track.hitPattern().numberOfValidHits()); - if (doThetaPlots_) { - tkmes.NumberOfRecHitsPerTrackVsTheta->Fill(theta, track.hitPattern().numberOfValidHits()); - } - tkmes.NumberOfRecHitsPerTrackVsEta->Fill(eta, track.hitPattern().numberOfValidHits()); - */ - - } - - if ( doGoodTrackPlots_ || doAllPlots_ ) { - if ( isHighPurity && pt > 1. ) { - tkmes.GoodTrackPt->Fill(pt); - tkmes.GoodTrackEta->Fill(eta); - tkmes.GoodTrackPhi->Fill(phi); - } + tkmes.Chi2oNDFVsTheta->Fill(theta, chi2oNDF); } - + tkmes.Chi2oNDFVsPhi->Fill(phi, chi2oNDF); + tkmes.Chi2oNDFVsEta->Fill(eta, chi2oNDF); + tkmes.Chi2ProbVsPhi->Fill(phi, chi2prob); + tkmes.Chi2ProbVsEta->Fill(eta, chi2prob); + } + } + } -void TrackAnalyzer::doTrackerSpecificInitialization(DQMStore * dqmStore_) +void TrackAnalyzer::bookHistosForTrackerSpecific(DQMStore * dqmStore_) { // parameters from the configuration std::string QualName = conf_.getParameter("Quality"); std::string AlgoName = conf_.getParameter("AlgoName"); - std::string MEFolderName = conf_.getParameter("FolderName"); // use the AlgoName and Quality Name - std::string CatagoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; - - // get binning from the configuration - int TOBHitBin = conf_.getParameter( "TOBHitBin"); - double TOBHitMin = conf_.getParameter("TOBHitMin"); - double TOBHitMax = conf_.getParameter("TOBHitMax"); - - int TIBHitBin = conf_.getParameter( "TIBHitBin"); - double TIBHitMin = conf_.getParameter("TIBHitMin"); - double TIBHitMax = conf_.getParameter("TIBHitMax"); - - int TIDHitBin = conf_.getParameter( "TIDHitBin"); - double TIDHitMin = conf_.getParameter("TIDHitMin"); - double TIDHitMax = conf_.getParameter("TIDHitMax"); - - int TECHitBin = conf_.getParameter( "TECHitBin"); - double TECHitMin = conf_.getParameter("TECHitMin"); - double TECHitMax = conf_.getParameter("TECHitMax"); - - int PXBHitBin = conf_.getParameter( "PXBHitBin"); - double PXBHitMin = conf_.getParameter("PXBHitMin"); - double PXBHitMax = conf_.getParameter("PXBHitMax"); - - int PXFHitBin = conf_.getParameter( "PXFHitBin"); - double PXFHitMin = conf_.getParameter("PXFHitMin"); - double PXFHitMax = conf_.getParameter("PXFHitMax"); - - int TOBLayBin = conf_.getParameter( "TOBLayBin"); - double TOBLayMin = conf_.getParameter("TOBLayMin"); - double TOBLayMax = conf_.getParameter("TOBLayMax"); - - int TIBLayBin = conf_.getParameter( "TIBLayBin"); - double TIBLayMin = conf_.getParameter("TIBLayMin"); - double TIBLayMax = conf_.getParameter("TIBLayMax"); - - int TIDLayBin = conf_.getParameter( "TIDLayBin"); - double TIDLayMin = conf_.getParameter("TIDLayMin"); - double TIDLayMax = conf_.getParameter("TIDLayMax"); - - int TECLayBin = conf_.getParameter( "TECLayBin"); - double TECLayMin = conf_.getParameter("TECLayMin"); - double TECLayMax = conf_.getParameter("TECLayMax"); - - int PXBLayBin = conf_.getParameter( "PXBLayBin"); - double PXBLayMin = conf_.getParameter("PXBLayMin"); - double PXBLayMax = conf_.getParameter("PXBLayMax"); - - int PXFLayBin = conf_.getParameter( "PXFLayBin"); - double PXFLayMin = conf_.getParameter("PXFLayMin"); - double PXFLayMax = conf_.getParameter("PXFLayMax"); - + std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName; int PhiBin = conf_.getParameter( "PhiBin"); double PhiMin = conf_.getParameter("PhiMin"); @@ -1273,320 +1158,153 @@ void TrackAnalyzer::doTrackerSpecificInitialization(DQMStore * dqmStore_) // book hit property histograms // ---------------------------------------------------------------------------------// - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties"); + dqmStore_->setCurrentFolder(TopFolder_+"/HitProperties"); - TkParameterMEs tkmes; - // TOB hits properties - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/TOB"); - - histname = "NumberOfTOBRecHitsPerTrack_" + CatagoryName; - NumberOfTOBRecHitsPerTrack = dqmStore_->book1D(histname, histname, TOBHitBin, TOBHitMin, TOBHitMax); - NumberOfTOBRecHitsPerTrack->setAxisTitle("Number of TOB found RecHits of each Track",1); - NumberOfTOBRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTOBRecHitsPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTOBRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TOBHitBin, TOBHitMin, TOBHitMax,""); - NumberOfTOBRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTOBRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of TOB found RecHits of each Track",2); - - histname = "NumberOfTOBRecHitsPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTOBRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TOBHitBin, TOBHitMin, TOBHitMax,""); - NumberOfTOBRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTOBRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of TOB found RecHits of each Track",2); - - histname = "NumberOfTOBLayersPerTrack_" + CatagoryName; - NumberOfTOBLayersPerTrack = dqmStore_->book1D(histname, histname, TOBLayBin, TOBLayMin, TOBLayMax); - NumberOfTOBLayersPerTrack->setAxisTitle("Number of TOB Layers of each Track",1); - NumberOfTOBLayersPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTOBLayersPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTOBLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TOBLayBin, TOBLayMin, TOBLayMax,""); - NumberOfTOBLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTOBLayersPerTrackVsPhiProfile->setAxisTitle("Number of TOB Layers of each Track",2); - - histname = "NumberOfTOBLayersPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTOBLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TOBLayBin, TOBLayMin, TOBLayMax,""); - NumberOfTOBLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTOBLayersPerTrackVsEtaProfile->setAxisTitle("Number of TOB Layers of each Track",2); - - - // TIB hits properties - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/TIB"); - - histname = "NumberOfTIBRecHitsPerTrack_" + CatagoryName; - NumberOfTIBRecHitsPerTrack = dqmStore_->book1D(histname, histname, TIBHitBin, TIBHitMin, TIBHitMax); - NumberOfTIBRecHitsPerTrack->setAxisTitle("Number of TIB found RecHits of each Track",1); - NumberOfTIBRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTIBRecHitsPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTIBRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TIBHitBin, TIBHitMin, TIBHitMax,""); - NumberOfTIBRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTIBRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of TIB found RecHits of each Track",2); - - histname = "NumberOfTIBRecHitsPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTIBRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TIBHitBin, TIBHitMin, TIBHitMax,""); - NumberOfTIBRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTIBRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of TIB found RecHits of each Track",2); - - histname = "NumberOfTIBLayersPerTrack_" + CatagoryName; - NumberOfTIBLayersPerTrack = dqmStore_->book1D(histname, histname, TIBLayBin, TIBLayMin, TIBLayMax); - NumberOfTIBLayersPerTrack->setAxisTitle("Number of TIB Layers of each Track",1); - NumberOfTIBLayersPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTIBLayersPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTIBLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TIBLayBin, TIBLayMin, TIBLayMax,""); - NumberOfTIBLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTIBLayersPerTrackVsPhiProfile->setAxisTitle("Number of TIB Layers of each Track",2); - - histname = "NumberOfTIBLayersPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTIBLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TIBLayBin, TIBLayMin, TIBLayMax,""); - NumberOfTIBLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTIBLayersPerTrackVsEtaProfile->setAxisTitle("Number of TIB Layers of each Track",2); - - - // TID hit properties - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/TID"); - - histname = "NumberOfTIDRecHitsPerTrack_" + CatagoryName; - NumberOfTIDRecHitsPerTrack = dqmStore_->book1D(histname, histname, TIDHitBin, TIDHitMin, TIDHitMax); - NumberOfTIDRecHitsPerTrack->setAxisTitle("Number of TID found RecHits of each Track",1); - NumberOfTIDRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTIDRecHitsPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTIDRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TIDHitBin, TIDHitMin, TIDHitMax,""); - NumberOfTIDRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTIDRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of TID found RecHits of each Track",2); - - histname = "NumberOfTIDRecHitsPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTIDRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TIDHitBin, TIDHitMin, TIDHitMax,""); - NumberOfTIDRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTIDRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of TID found RecHits of each Track",2); - - histname = "NumberOfTIDLayersPerTrack_" + CatagoryName; - NumberOfTIDLayersPerTrack = dqmStore_->book1D(histname, histname, TIDLayBin, TIDLayMin, TIDLayMax); - NumberOfTIDLayersPerTrack->setAxisTitle("Number of TID Layers of each Track",1); - NumberOfTIDLayersPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTIDLayersPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTIDLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TIDLayBin, TIDLayMin, TIDLayMax,""); - NumberOfTIDLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTIDLayersPerTrackVsPhiProfile->setAxisTitle("Number of TID Layers of each Track",2); - - histname = "NumberOfTIDLayersPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTIDLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TIDLayBin, TIDLayMin, TIDLayMax,""); - NumberOfTIDLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTIDLayersPerTrackVsEtaProfile->setAxisTitle("Number of TID Layers of each Track",2); - - - // TEC hits properties - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/TEC"); - - histname = "NumberOfTECRecHitsPerTrack_"+ CatagoryName; - NumberOfTECRecHitsPerTrack = dqmStore_->book1D(histname, histname, TECHitBin, TECHitMin, TECHitMax); - NumberOfTECRecHitsPerTrack->setAxisTitle("Number of TEC found RecHits of each Track",1); - NumberOfTECRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTECRecHitsPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTECRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TECHitBin, TECHitMin, TECHitMax,""); - NumberOfTECRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTECRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of TEC found RecHits of each Track",2); - - histname = "NumberOfTECRecHitsPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTECRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TECHitBin, TECHitMin, TECHitMax,""); - NumberOfTECRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTECRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of TEC found RecHits of each Track",2); - - histname = "NumberOfTECLayersPerTrack_"+ CatagoryName; - NumberOfTECLayersPerTrack = dqmStore_->book1D(histname, histname, TECLayBin, TECLayMin, TECLayMax); - NumberOfTECLayersPerTrack->setAxisTitle("Number of TEC Layers of each Track",1); - NumberOfTECLayersPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfTECLayersPerTrackVsPhiProfile_" + CatagoryName; - NumberOfTECLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, TECLayBin, TECLayMin, TECLayMax,""); - NumberOfTECLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfTECLayersPerTrackVsPhiProfile->setAxisTitle("Number of TEC Layers of each Track",2); - - histname = "NumberOfTECLayersPerTrackVsEtaProfile_" + CatagoryName; - NumberOfTECLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, TECLayBin, TECLayMin, TECLayMax,""); - NumberOfTECLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfTECLayersPerTrackVsEtaProfile->setAxisTitle("Number of TEC Layers of each Track",2); - - - // PixBarrel hits properties - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/PixBarrel"); - - histname = "NumberOfPixBarrelRecHitsPerTrack_" + CatagoryName; - NumberOfPixBarrelRecHitsPerTrack = dqmStore_->book1D(histname, histname, PXBHitBin, PXBHitMin, PXBHitMax); - NumberOfPixBarrelRecHitsPerTrack->setAxisTitle("Number of Pixel Barrel found RecHits of each Track",1); - NumberOfPixBarrelRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfPixBarrelRecHitsPerTrackVsPhiProfile_" + CatagoryName; - NumberOfPixBarrelRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, PXBHitBin, PXBHitMin, PXBHitMax,""); - NumberOfPixBarrelRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfPixBarrelRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of Pixel Barrel found RecHits of each Track",2); - - histname = "NumberOfPixBarrelRecHitsPerTrackVsEtaProfile_" + CatagoryName; - NumberOfPixBarrelRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, PXBHitBin, PXBHitMin, PXBHitMax,""); - NumberOfPixBarrelRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfPixBarrelRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of Pixel Barrel found RecHits of each Track",2); - - histname = "NumberOfPixBarrelLayersPerTrack_" + CatagoryName; - NumberOfPixBarrelLayersPerTrack = dqmStore_->book1D(histname, histname, PXBLayBin, PXBLayMin, PXBLayMax); - NumberOfPixBarrelLayersPerTrack->setAxisTitle("Number of Pixel Barrel Layers of each Track",1); - NumberOfPixBarrelLayersPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfPixBarrelLayersPerTrackVsPhiProfile_" + CatagoryName; - NumberOfPixBarrelLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, PXBLayBin, PXBLayMin, PXBLayMax,""); - NumberOfPixBarrelLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfPixBarrelLayersPerTrackVsPhiProfile->setAxisTitle("Number of Pixel Barrel Layers of each Track",2); - - histname = "NumberOfPixBarrelLayersPerTrackVsEtaProfile_" + CatagoryName; - NumberOfPixBarrelLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, PXBLayBin, PXBLayMin, PXBLayMax,""); - NumberOfPixBarrelLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfPixBarrelLayersPerTrackVsEtaProfile->setAxisTitle("Number of Pixel Barrel Layers of each Track",2); - - - // PixEndcap hits profiles - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/PixEndcap"); - - histname = "NumberOfPixEndcapRecHitsPerTrack_" + CatagoryName; - NumberOfPixEndcapRecHitsPerTrack = dqmStore_->book1D(histname, histname, PXFHitBin, PXFHitMin, PXFHitMax); - NumberOfPixEndcapRecHitsPerTrack->setAxisTitle("Number of Pixel Endcap found RecHits of each Track",1); - NumberOfPixEndcapRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfPixEndcapRecHitsPerTrackVsPhiProfile_" + CatagoryName; - NumberOfPixEndcapRecHitsPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, PXBHitBin, PXBHitMin, PXBHitMax,""); - NumberOfPixEndcapRecHitsPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfPixEndcapRecHitsPerTrackVsPhiProfile->setAxisTitle("Number of Pixel Endcap found RecHits of each Track",2); - - histname = "NumberOfPixEndcapRecHitsPerTrackVsEtaProfile_" + CatagoryName; - NumberOfPixEndcapRecHitsPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, PXBHitBin, PXBHitMin, PXBHitMax,""); - NumberOfPixEndcapRecHitsPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfPixEndcapRecHitsPerTrackVsEtaProfile->setAxisTitle("Number of Pixel Endcap found RecHits of each Track",2); - - histname = "NumberOfPixEndcapLayersPerTrack_" + CatagoryName; - NumberOfPixEndcapLayersPerTrack = dqmStore_->book1D(histname, histname, PXFLayBin, PXFLayMin, PXFLayMax); - NumberOfPixEndcapLayersPerTrack->setAxisTitle("Number of Pixel Endcap Layers of each Track",1); - NumberOfPixEndcapLayersPerTrack->setAxisTitle("Number of Tracks", 2); - - histname = "NumberOfPixEndcapLayersPerTrackVsPhiProfile_" + CatagoryName; - NumberOfPixEndcapLayersPerTrackVsPhiProfile = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, PXBLayBin, PXBLayMin, PXBLayMax,""); - NumberOfPixEndcapLayersPerTrackVsPhiProfile->setAxisTitle("Track #phi",1); - NumberOfPixEndcapLayersPerTrackVsPhiProfile->setAxisTitle("Number of Pixel Endcap Layers of each Track",2); - - histname = "NumberOfPixEndcapLayersPerTrackVsEtaProfile_" + CatagoryName; - NumberOfPixEndcapLayersPerTrackVsEtaProfile = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, PXBLayBin, PXBLayMin, PXBLayMax,""); - NumberOfPixEndcapLayersPerTrackVsEtaProfile->setAxisTitle("Track #eta",1); - NumberOfPixEndcapLayersPerTrackVsEtaProfile->setAxisTitle("Number of Pixel Endcap Layers of each Track",2); + std::vector subdetectors = conf_.getParameter >("subdetectors"); + int detBin = conf_.getParameter("subdetectorBin"); + + for ( auto det : subdetectors ) { + + // hits properties + dqmStore_->setCurrentFolder(TopFolder_+"/HitProperties/"+det); + + TkRecHitsPerSubDetMEs recHitsPerSubDet_mes; + + recHitsPerSubDet_mes.detectorTag = det; + int detID = -1; + if ( det == "TIB" ) detID = StripSubdetector::TIB; + if ( det == "TOB" ) detID = StripSubdetector::TOB; + if ( det == "TID" ) detID = StripSubdetector::TID; + if ( det == "TEC" ) detID = StripSubdetector::TEC; + if ( det == "PixBarrel" ) detID = PixelSubdetector::PixelBarrel; + if ( det == "PixEndcap" ) detID = PixelSubdetector::PixelEndcap; + recHitsPerSubDet_mes.detectorId = detID; + + histname = "NumberOfRecHitsPerTrack_" + det + "_" + CategoryName; + recHitsPerSubDet_mes.NumberOfRecHitsPerTrack = dqmStore_->book1D(histname, histname, detBin, -0.5, double(detBin)-0.5); + recHitsPerSubDet_mes.NumberOfRecHitsPerTrack->setAxisTitle("Number of " + det + " valid RecHits in each Track",1); + recHitsPerSubDet_mes.NumberOfRecHitsPerTrack->setAxisTitle("Number of Tracks", 2); + + histname = "NumberOfRecHitsPerTrackVsPhi_" + det + "_" + CategoryName; + recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, detBin, -0.5, double(detBin)-0.5,""); + recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1); + recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of " + det + " valid RecHits in each Track",2); + + histname = "NumberOfRecHitsPerTrackVsEta_" + det + "_" + CategoryName; + recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, detBin, -0.5, double(detBin)-0.5,""); + recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1); + recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of " + det + " valid RecHits in each Track",2); + + histname = "NumberOfLayersPerTrack_" + det + "_" + CategoryName; + recHitsPerSubDet_mes.NumberOfLayersPerTrack = dqmStore_->book1D(histname, histname, detBin, -0.5, double(detBin)-0.5); + recHitsPerSubDet_mes.NumberOfLayersPerTrack->setAxisTitle("Number of " + det + " valid Layers in each Track",1); + recHitsPerSubDet_mes.NumberOfLayersPerTrack->setAxisTitle("Number of Tracks", 2); + + histname = "NumberOfLayersPerTrackVsPhi_" + det + "_" + CategoryName; + recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi = dqmStore_->bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, detBin, -0.5, double(detBin)-0.5,""); + recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1); + recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of " + det + " valid Layers in each Track",2); + + histname = "NumberOfLayersPerTrackVsEta_" + det + "_" + CategoryName; + recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta = dqmStore_->bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, detBin, -0.5, double(detBin)-0.5,""); + recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1); + recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of " + det + " valid Layers in each Track",2); + + TkRecHitsPerSubDetMEMap.insert(std::pair(det,recHitsPerSubDet_mes)); + + + } + } -void TrackAnalyzer::doTrackerSpecificFillHists(const reco::Track & track) +void TrackAnalyzer::fillHistosForTrackerSpecific(const reco::Track & track) { + double phi = track.phi(); double eta = track.eta(); - //Fill TIB Layers and RecHits - NumberOfTIBRecHitsPerTrack->Fill(track.hitPattern().numberOfValidStripTIBHits()); - NumberOfTIBRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidStripTIBHits()); - NumberOfTIBRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidStripTIBHits()); - - NumberOfTIBLayersPerTrack->Fill(track.hitPattern().stripTIBLayersWithMeasurement()); - NumberOfTIBLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().stripTIBLayersWithMeasurement()); - NumberOfTIBLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().stripTIBLayersWithMeasurement()); - - //Fill TOB Layers and RecHits - NumberOfTOBRecHitsPerTrack->Fill(track.hitPattern().numberOfValidStripTOBHits()); - NumberOfTOBRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidStripTOBHits()); - NumberOfTOBRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidStripTOBHits()); - - NumberOfTOBLayersPerTrack->Fill(track.hitPattern().stripTOBLayersWithMeasurement()); - NumberOfTOBLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().stripTOBLayersWithMeasurement()); - NumberOfTOBLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().stripTOBLayersWithMeasurement()); - - - //Fill TID Layers and RecHits - NumberOfTIDRecHitsPerTrack->Fill(track.hitPattern().numberOfValidStripTIDHits()); - NumberOfTIDRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidStripTIDHits()); - NumberOfTIDRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidStripTIDHits()); - - NumberOfTIDLayersPerTrack->Fill(track.hitPattern().stripTIDLayersWithMeasurement()); - NumberOfTIDLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().stripTIDLayersWithMeasurement()); - NumberOfTIDLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().stripTIDLayersWithMeasurement()); - - - //Fill TEC Layers and RecHits - NumberOfTECRecHitsPerTrack->Fill(track.hitPattern().numberOfValidStripTECHits()); - NumberOfTECRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidStripTECHits()); - NumberOfTECRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidStripTECHits()); - - NumberOfTECLayersPerTrack->Fill(track.hitPattern().stripTECLayersWithMeasurement()); - NumberOfTECLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().stripTECLayersWithMeasurement()); - NumberOfTECLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().stripTECLayersWithMeasurement()); - - //Fill PixBarrel Layers and RecHits - NumberOfPixBarrelRecHitsPerTrack->Fill(track.hitPattern().numberOfValidPixelBarrelHits()); - NumberOfPixBarrelRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidPixelBarrelHits()); - NumberOfPixBarrelRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidPixelBarrelHits()); - - NumberOfPixBarrelLayersPerTrack->Fill(track.hitPattern().pixelBarrelLayersWithMeasurement()); - NumberOfPixBarrelLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().pixelBarrelLayersWithMeasurement()); - NumberOfPixBarrelLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().pixelBarrelLayersWithMeasurement()); - - //Fill PixEndcap Layers and RecHits - NumberOfPixEndcapRecHitsPerTrack->Fill(track.hitPattern().numberOfValidPixelEndcapHits()); - NumberOfPixEndcapRecHitsPerTrackVsPhiProfile->Fill(phi, track.hitPattern().numberOfValidPixelEndcapHits()); - NumberOfPixEndcapRecHitsPerTrackVsEtaProfile->Fill(eta, track.hitPattern().numberOfValidPixelEndcapHits()); + for ( std::map::iterator it = TkRecHitsPerSubDetMEMap.begin(); + it != TkRecHitsPerSubDetMEMap.end(); it++ ) { + + int nValidLayers = 0; + int nValidRecHits = 0; + int substr = it->second.detectorId; + switch(substr) { + case StripSubdetector::TIB : + nValidLayers = track.hitPattern().stripTIBLayersWithMeasurement(); // case 0: strip TIB + nValidRecHits = track.hitPattern().stripTIBLayersWithMeasurement(); // case 0: strip TIB + break; + case StripSubdetector::TID : + nValidLayers = track.hitPattern().stripTIDLayersWithMeasurement(); // case 0: strip TID + nValidRecHits = track.hitPattern().stripTIDLayersWithMeasurement(); // case 0: strip TID + break; + case StripSubdetector::TOB : + nValidLayers = track.hitPattern().stripTOBLayersWithMeasurement(); // case 0: strip TOB + nValidRecHits = track.hitPattern().stripTOBLayersWithMeasurement(); // case 0: strip TOB + break; + case StripSubdetector::TEC : + nValidLayers = track.hitPattern().stripTECLayersWithMeasurement(); // case 0: strip TEC + nValidRecHits = track.hitPattern().stripTECLayersWithMeasurement(); // case 0: strip TEC + break; + case PixelSubdetector::PixelBarrel : + nValidLayers = track.hitPattern().pixelBarrelLayersWithMeasurement(); // case 0: pixel PXB + nValidRecHits = track.hitPattern().pixelBarrelLayersWithMeasurement(); // case 0: pixel PXB + break; + case PixelSubdetector::PixelEndcap : + nValidLayers = track.hitPattern().pixelEndcapLayersWithMeasurement(); // case 0: pixel PXF + nValidRecHits = track.hitPattern().pixelEndcapLayersWithMeasurement(); // case 0: pixel PXF + break; + default : + break; + } - NumberOfPixEndcapLayersPerTrack->Fill(track.hitPattern().pixelEndcapLayersWithMeasurement()); - NumberOfPixEndcapLayersPerTrackVsPhiProfile->Fill(phi, track.hitPattern().pixelEndcapLayersWithMeasurement()); - NumberOfPixEndcapLayersPerTrackVsEtaProfile->Fill(eta, track.hitPattern().pixelEndcapLayersWithMeasurement()); + //Fill Layers and RecHits + it->second.NumberOfRecHitsPerTrack -> Fill(nValidRecHits); + it->second.NumberOfRecHitsPerTrackVsPhi -> Fill(phi, nValidRecHits); + it->second.NumberOfRecHitsPerTrackVsEta -> Fill(eta, nValidRecHits); + + it->second.NumberOfLayersPerTrack -> Fill(nValidLayers); + it->second.NumberOfLayersPerTrackVsPhi -> Fill(phi, nValidLayers); + it->second.NumberOfLayersPerTrackVsEta -> Fill(eta, nValidLayers); + } } // // -- Set Lumi Flag // void TrackAnalyzer::setLumiFlag() { - /* - if (Chi2oNDF) Chi2oNDF->setLumiFlag(); - if (NumberOfRecHitsPerTrack) NumberOfRecHitsPerTrack->setLumiFlag(); - if (GoodTrackChi2oNDF) GoodTrackChi2oNDF->setLumiFlag(); - if (GoodTrackNumberOfRecHitsPerTrack) GoodTrackNumberOfRecHitsPerTrack->setLumiFlag(); - */ - if ( Chi2oNDF_lumiFlag ) Chi2oNDF_lumiFlag -> setLumiFlag(); - if ( NumberOfRecHitsPerTrack_lumiFlag ) NumberOfRecHitsPerTrack_lumiFlag -> setLumiFlag(); - if ( GoodTrackChi2oNDF_lumiFlag ) GoodTrackChi2oNDF_lumiFlag -> setLumiFlag(); - if ( GoodTrackNumberOfRecHitsPerTrack_lumiFlag ) GoodTrackNumberOfRecHitsPerTrack_lumiFlag -> setLumiFlag(); + + TkParameterMEs tkmes; + if ( Chi2oNDF_lumiFlag ) Chi2oNDF_lumiFlag -> setLumiFlag(); + if ( NumberOfRecHitsPerTrack_lumiFlag ) NumberOfRecHitsPerTrack_lumiFlag -> setLumiFlag(); } // // -- Apply SoftReset // void TrackAnalyzer::doSoftReset(DQMStore * dqmStore_) { + TkParameterMEs tkmes; dqmStore_->softReset(Chi2oNDF); dqmStore_->softReset(NumberOfRecHitsPerTrack); - dqmStore_->softReset(GoodTrackChi2oNDF); - dqmStore_->softReset(GoodTrackNumberOfRecHitsPerTrack); } // // -- Apply Reset // void TrackAnalyzer::doReset(DQMStore * dqmStore_) { - if ( Chi2oNDF_lumiFlag ) Chi2oNDF_lumiFlag -> Reset(); - if ( NumberOfRecHitsPerTrack_lumiFlag ) NumberOfRecHitsPerTrack_lumiFlag -> Reset(); - if ( GoodTrackChi2oNDF_lumiFlag ) GoodTrackChi2oNDF_lumiFlag -> Reset(); - if ( GoodTrackNumberOfRecHitsPerTrack_lumiFlag ) GoodTrackNumberOfRecHitsPerTrack_lumiFlag -> Reset(); + TkParameterMEs tkmes; + if ( Chi2oNDF_lumiFlag ) Chi2oNDF_lumiFlag -> Reset(); + if ( NumberOfRecHitsPerTrack_lumiFlag ) NumberOfRecHitsPerTrack_lumiFlag -> Reset(); } // // -- Remove SoftReset // void TrackAnalyzer::undoSoftReset(DQMStore * dqmStore_) { + TkParameterMEs tkmes; dqmStore_->disableSoftReset(Chi2oNDF); dqmStore_->disableSoftReset(NumberOfRecHitsPerTrack); - dqmStore_->disableSoftReset(GoodTrackChi2oNDF); - dqmStore_->disableSoftReset(GoodTrackNumberOfRecHitsPerTrack); } diff --git a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc index d6f9bf8939c59..f21bbe6bbd01f 100644 --- a/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc +++ b/DQM/TrackingMonitor/src/TrackBuildingAnalyzer.cc @@ -37,222 +37,226 @@ TrackBuildingAnalyzer::~TrackBuildingAnalyzer() { } -void TrackBuildingAnalyzer::beginJob(DQMStore * dqmStore_) +void TrackBuildingAnalyzer::beginRun(DQMStore * dqmStore_) { - - // parameters from the configuration - std::string AlgoName = conf_.getParameter("AlgoName"); - std::string MEFolderName = conf_.getParameter("FolderName"); - - // use the AlgoName and Quality Name - std::string CatagoryName = AlgoName; - - // get binning from the configuration - int TrackPtBin = conf_.getParameter( "TrackPtBin"); - double TrackPtMin = conf_.getParameter("TrackPtMin"); - double TrackPtMax = conf_.getParameter("TrackPtMax"); - - int PhiBin = conf_.getParameter( "PhiBin"); - double PhiMin = conf_.getParameter("PhiMin"); - double PhiMax = conf_.getParameter("PhiMax"); - - int EtaBin = conf_.getParameter( "EtaBin"); - double EtaMin = conf_.getParameter("EtaMin"); - double EtaMax = conf_.getParameter("EtaMax"); - - int ThetaBin = conf_.getParameter( "ThetaBin"); - double ThetaMin = conf_.getParameter("ThetaMin"); - double ThetaMax = conf_.getParameter("ThetaMax"); - - int TrackQBin = conf_.getParameter( "TrackQBin"); - double TrackQMin = conf_.getParameter("TrackQMin"); - double TrackQMax = conf_.getParameter("TrackQMax"); - - int SeedDxyBin = conf_.getParameter( "SeedDxyBin"); - double SeedDxyMin = conf_.getParameter("SeedDxyMin"); - double SeedDxyMax = conf_.getParameter("SeedDxyMax"); - - int SeedDzBin = conf_.getParameter( "SeedDzBin"); - double SeedDzMin = conf_.getParameter("SeedDzMin"); - double SeedDzMax = conf_.getParameter("SeedDzMax"); - - int SeedHitBin = conf_.getParameter( "SeedHitBin"); - double SeedHitMin = conf_.getParameter("SeedHitMin"); - double SeedHitMax = conf_.getParameter("SeedHitMax"); - - int TCDxyBin = conf_.getParameter( "TCDxyBin"); - double TCDxyMin = conf_.getParameter("TCDxyMin"); - double TCDxyMax = conf_.getParameter("TCDxyMax"); - - int TCDzBin = conf_.getParameter( "TCDzBin"); - double TCDzMin = conf_.getParameter("TCDzMin"); - double TCDzMax = conf_.getParameter("TCDzMax"); - - int TCHitBin = conf_.getParameter( "TCHitBin"); - double TCHitMin = conf_.getParameter("TCHitMin"); - double TCHitMax = conf_.getParameter("TCHitMax"); - - - edm::InputTag seedProducer = conf_.getParameter("SeedProducer"); - edm::InputTag tcProducer = conf_.getParameter("TCProducer"); - - doAllPlots=conf_.getParameter("doAllPlots"); - doAllSeedPlots=conf_.getParameter("doSeedParameterHistos"); - doTCPlots=conf_.getParameter("doTrackCandHistos"); - doPT=conf_.getParameter("doSeedPTHisto"); - doETA=conf_.getParameter("doSeedETAHisto"); - doPHI=conf_.getParameter("doSeedPHIHisto"); - doPHIVsETA=conf_.getParameter("doSeedPHIVsETAHisto"); - doTheta=conf_.getParameter("doSeedThetaHisto"); - doQ=conf_.getParameter("doSeedQHisto"); - doDxy =conf_.getParameter("doSeedDxyHisto"); - doDz =conf_.getParameter("doSeedDzHisto"); - doNRecHits=conf_.getParameter("doSeedNRecHitsHisto"); - doProfPHI=conf_.getParameter("doSeedNVsPhiProf"); - doProfETA=conf_.getParameter("doSeedNVsEtaProf"); - - // if (doAllPlots){doAllSeedPlots=true; doTCPlots=true;} - - dqmStore_->setCurrentFolder(MEFolderName); - - // book the Seed histograms - // ---------------------------------------------------------------------------------// - dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); - - if (doAllSeedPlots || doPT) { - histname = "SeedPt_"+seedProducer.label() + "_"; - SeedPt = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackPtBin, TrackPtMin, TrackPtMax); - SeedPt->setAxisTitle("Seed p_{T} (GeV/c)", 1); - SeedPt->setAxisTitle("Number of Seeds", 2); - } - - if (doAllSeedPlots || doETA) { - histname = "SeedEta_"+seedProducer.label() + "_"; - SeedEta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax); + + // parameters from the configuration + std::string AlgoName = conf_.getParameter("AlgoName"); + std::string MEFolderName = conf_.getParameter("FolderName"); + + // std::cout << "[TrackBuildingAnalyzer::beginRun] AlgoName: " << AlgoName << std::endl; + + // use the AlgoName and Quality Name + std::string CatagoryName = AlgoName; + + // get binning from the configuration + int TrackPtBin = conf_.getParameter( "TrackPtBin"); + double TrackPtMin = conf_.getParameter("TrackPtMin"); + double TrackPtMax = conf_.getParameter("TrackPtMax"); + + int PhiBin = conf_.getParameter( "PhiBin"); + double PhiMin = conf_.getParameter("PhiMin"); + double PhiMax = conf_.getParameter("PhiMax"); + + int EtaBin = conf_.getParameter( "EtaBin"); + double EtaMin = conf_.getParameter("EtaMin"); + double EtaMax = conf_.getParameter("EtaMax"); + + int ThetaBin = conf_.getParameter( "ThetaBin"); + double ThetaMin = conf_.getParameter("ThetaMin"); + double ThetaMax = conf_.getParameter("ThetaMax"); + + int TrackQBin = conf_.getParameter( "TrackQBin"); + double TrackQMin = conf_.getParameter("TrackQMin"); + double TrackQMax = conf_.getParameter("TrackQMax"); + + int SeedDxyBin = conf_.getParameter( "SeedDxyBin"); + double SeedDxyMin = conf_.getParameter("SeedDxyMin"); + double SeedDxyMax = conf_.getParameter("SeedDxyMax"); + + int SeedDzBin = conf_.getParameter( "SeedDzBin"); + double SeedDzMin = conf_.getParameter("SeedDzMin"); + double SeedDzMax = conf_.getParameter("SeedDzMax"); + + int SeedHitBin = conf_.getParameter( "SeedHitBin"); + double SeedHitMin = conf_.getParameter("SeedHitMin"); + double SeedHitMax = conf_.getParameter("SeedHitMax"); + + int TCDxyBin = conf_.getParameter( "TCDxyBin"); + double TCDxyMin = conf_.getParameter("TCDxyMin"); + double TCDxyMax = conf_.getParameter("TCDxyMax"); + + int TCDzBin = conf_.getParameter( "TCDzBin"); + double TCDzMin = conf_.getParameter("TCDzMin"); + double TCDzMax = conf_.getParameter("TCDzMax"); + + int TCHitBin = conf_.getParameter( "TCHitBin"); + double TCHitMin = conf_.getParameter("TCHitMin"); + double TCHitMax = conf_.getParameter("TCHitMax"); + + + edm::InputTag seedProducer = conf_.getParameter("SeedProducer"); + edm::InputTag tcProducer = conf_.getParameter("TCProducer"); + + doAllPlots = conf_.getParameter("doAllPlots"); + doAllSeedPlots = conf_.getParameter("doSeedParameterHistos"); + doTCPlots = conf_.getParameter("doTrackCandHistos"); + doPT = conf_.getParameter("doSeedPTHisto"); + doETA = conf_.getParameter("doSeedETAHisto"); + doPHI = conf_.getParameter("doSeedPHIHisto"); + doPHIVsETA = conf_.getParameter("doSeedPHIVsETAHisto"); + doTheta = conf_.getParameter("doSeedThetaHisto"); + doQ = conf_.getParameter("doSeedQHisto"); + doDxy = conf_.getParameter("doSeedDxyHisto"); + doDz = conf_.getParameter("doSeedDzHisto"); + doNRecHits = conf_.getParameter("doSeedNRecHitsHisto"); + doProfPHI = conf_.getParameter("doSeedNVsPhiProf"); + doProfETA = conf_.getParameter("doSeedNVsEtaProf"); + + // if (doAllPlots){doAllSeedPlots=true; doTCPlots=true;} + + dqmStore_->setCurrentFolder(MEFolderName); + + // book the Seed histograms + // ---------------------------------------------------------------------------------// + // std::cout << "[TrackBuildingAnalyzer::beginRun] MEFolderName: " << MEFolderName << std::endl; + dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); + + if (doAllSeedPlots || doPT) { + histname = "SeedPt_"+seedProducer.label() + "_"; + SeedPt = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackPtBin, TrackPtMin, TrackPtMax); + SeedPt->setAxisTitle("Seed p_{T} (GeV/c)", 1); + SeedPt->setAxisTitle("Number of Seeds", 2); + } + + if (doAllSeedPlots || doETA) { + histname = "SeedEta_"+seedProducer.label() + "_"; + SeedEta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax); SeedEta->setAxisTitle("Seed #eta", 1); SeedEta->setAxisTitle("Number of Seeds", 2); - } - - if (doAllSeedPlots || doPHI) { - histname = "SeedPhi_"+seedProducer.label() + "_"; - SeedPhi = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax); - SeedPhi->setAxisTitle("Seed #phi", 1); - SeedPhi->setAxisTitle("Number of Seed", 2); - } - - if (doAllSeedPlots || doPHIVsETA) { - histname = "SeedPhiVsEta_"+seedProducer.label() + "_"; - SeedPhiVsEta = dqmStore_->book2D(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax); - SeedPhiVsEta->setAxisTitle("Seed #eta", 1); - SeedPhiVsEta->setAxisTitle("Seed #phi", 2); - } - - if (doAllSeedPlots || doTheta){ - histname = "SeedTheta_"+seedProducer.label() + "_"; - SeedTheta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, ThetaBin, ThetaMin, ThetaMax); - SeedTheta->setAxisTitle("Seed #theta", 1); - SeedTheta->setAxisTitle("Number of Seeds", 2); - } - - if (doAllSeedPlots || doQ){ + } + + if (doAllSeedPlots || doPHI) { + histname = "SeedPhi_"+seedProducer.label() + "_"; + SeedPhi = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax); + SeedPhi->setAxisTitle("Seed #phi", 1); + SeedPhi->setAxisTitle("Number of Seed", 2); + } + + if (doAllSeedPlots || doPHIVsETA) { + histname = "SeedPhiVsEta_"+seedProducer.label() + "_"; + SeedPhiVsEta = dqmStore_->book2D(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax); + SeedPhiVsEta->setAxisTitle("Seed #eta", 1); + SeedPhiVsEta->setAxisTitle("Seed #phi", 2); + } + + if (doAllSeedPlots || doTheta){ + histname = "SeedTheta_"+seedProducer.label() + "_"; + SeedTheta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, ThetaBin, ThetaMin, ThetaMax); + SeedTheta->setAxisTitle("Seed #theta", 1); + SeedTheta->setAxisTitle("Number of Seeds", 2); + } + + if (doAllSeedPlots || doQ){ histname = "SeedQ_"+seedProducer.label() + "_"; SeedQ = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackQBin, TrackQMin, TrackQMax); SeedQ->setAxisTitle("Seed Charge", 1); SeedQ->setAxisTitle("Number of Seeds",2); - } - - if (doAllSeedPlots || doDxy){ - histname = "SeedDxy_"+seedProducer.label() + "_"; - SeedDxy = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, SeedDxyBin, SeedDxyMin, SeedDxyMax); - SeedDxy->setAxisTitle("Seed d_{xy} (cm)", 1); - SeedDxy->setAxisTitle("Number of Seeds",2); - } - - if (doAllSeedPlots || doDz){ - histname = "SeedDz_"+seedProducer.label() + "_"; - SeedDz = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, SeedDzBin, SeedDzMin, SeedDzMax); - SeedDz->setAxisTitle("Seed d_{z} (cm)", 1); - SeedDz->setAxisTitle("Number of Seeds",2); - } - - if (doAllSeedPlots || doNRecHits){ - histname = "NumberOfRecHitsPerSeed_"+seedProducer.label() + "_"; - NumberOfRecHitsPerSeed = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, SeedHitBin, SeedHitMin, SeedHitMax); - NumberOfRecHitsPerSeed->setAxisTitle("Number of RecHits per Seed", 1); - NumberOfRecHitsPerSeed->setAxisTitle("Number of Seeds",2); - } - - if (doAllSeedPlots || doProfPHI){ - histname = "NumberOfRecHitsPerSeedVsPhiProfile_"+seedProducer.label() + "_"; - NumberOfRecHitsPerSeedVsPhiProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, SeedHitBin, SeedHitMin, SeedHitMax,"s"); - NumberOfRecHitsPerSeedVsPhiProfile->setAxisTitle("Seed #phi",1); - NumberOfRecHitsPerSeedVsPhiProfile->setAxisTitle("Number of RecHits of each Seed",2); - } - - if (doAllSeedPlots || doProfETA){ - histname = "NumberOfRecHitsPerSeedVsEtaProfile_"+seedProducer.label() + "_"; - NumberOfRecHitsPerSeedVsEtaProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, SeedHitBin, SeedHitMin, SeedHitMax,"s"); - NumberOfRecHitsPerSeedVsEtaProfile->setAxisTitle("Seed #eta",1); - NumberOfRecHitsPerSeedVsEtaProfile->setAxisTitle("Number of RecHits of each Seed",2); - } - - // book the TrackCandidate histograms - // ---------------------------------------------------------------------------------// - - if (doTCPlots){ - - dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); - - histname = "TrackCandPt_"+tcProducer.label() + "_"; - TrackCandPt = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackPtBin, TrackPtMin, TrackPtMax); - TrackCandPt->setAxisTitle("Track Candidate p_{T} (GeV/c)", 1); - TrackCandPt->setAxisTitle("Number of Track Candidates", 2); - - histname = "TrackCandEta_"+tcProducer.label() + "_"; - TrackCandEta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax); - TrackCandEta->setAxisTitle("Track Candidate #eta", 1); - TrackCandEta->setAxisTitle("Number of Track Candidates", 2); - - histname = "TrackCandPhi_"+tcProducer.label() + "_"; - TrackCandPhi = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax); - TrackCandPhi->setAxisTitle("Track Candidate #phi", 1); - TrackCandPhi->setAxisTitle("Number of Track Candidates", 2); - - histname = "TrackCandTheta_"+tcProducer.label() + "_"; - TrackCandTheta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, ThetaBin, ThetaMin, ThetaMax); - TrackCandTheta->setAxisTitle("Track Candidate #theta", 1); - TrackCandTheta->setAxisTitle("Number of Track Candidates", 2); - - histname = "TrackCandQ_"+tcProducer.label() + "_"; - TrackCandQ = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackQBin, TrackQMin, TrackQMax); - TrackCandQ->setAxisTitle("Track Candidate Charge", 1); - TrackCandQ->setAxisTitle("Number of Track Candidates",2); - - histname = "TrackCandDxy_"+tcProducer.label() + "_"; - TrackCandDxy = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TCDxyBin, TCDxyMin, TCDxyMax); - TrackCandDxy->setAxisTitle("Track Candidate d_{xy} (cm)", 1); - TrackCandDxy->setAxisTitle("Number of Track Candidates",2); - - histname = "TrackCandDz_"+tcProducer.label() + "_"; - TrackCandDz = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TCDzBin, TCDzMin, TCDzMax); - TrackCandDz->setAxisTitle("Track Candidate d_{z} (cm)", 1); - TrackCandDz->setAxisTitle("Number of Track Candidates",2); - - histname = "NumberOfRecHitsPerTrackCand_"+tcProducer.label() + "_"; - NumberOfRecHitsPerTrackCand = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TCHitBin, TCHitMin, TCHitMax); - NumberOfRecHitsPerTrackCand->setAxisTitle("Number of RecHits per Track Candidate", 1); - NumberOfRecHitsPerTrackCand->setAxisTitle("Number of Track Candidates",2); - - histname = "NumberOfRecHitsPerTrackCandVsPhiProfile_"+tcProducer.label() + "_"; - NumberOfRecHitsPerTrackCandVsPhiProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, TCHitBin, TCHitMin, TCHitMax,"s"); - NumberOfRecHitsPerTrackCandVsPhiProfile->setAxisTitle("Track Candidate #phi",1); - NumberOfRecHitsPerTrackCandVsPhiProfile->setAxisTitle("Number of RecHits of each Track Candidate",2); - - histname = "NumberOfRecHitsPerTrackCandVsEtaProfile_"+tcProducer.label() + "_"; - NumberOfRecHitsPerTrackCandVsEtaProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, TCHitBin, TCHitMin, TCHitMax,"s"); - NumberOfRecHitsPerTrackCandVsEtaProfile->setAxisTitle("Track Candidate #eta",1); - NumberOfRecHitsPerTrackCandVsEtaProfile->setAxisTitle("Number of RecHits of each Track Candidate",2); - } + } + + if (doAllSeedPlots || doDxy){ + histname = "SeedDxy_"+seedProducer.label() + "_"; + SeedDxy = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, SeedDxyBin, SeedDxyMin, SeedDxyMax); + SeedDxy->setAxisTitle("Seed d_{xy} (cm)", 1); + SeedDxy->setAxisTitle("Number of Seeds",2); + } + + if (doAllSeedPlots || doDz){ + histname = "SeedDz_"+seedProducer.label() + "_"; + SeedDz = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, SeedDzBin, SeedDzMin, SeedDzMax); + SeedDz->setAxisTitle("Seed d_{z} (cm)", 1); + SeedDz->setAxisTitle("Number of Seeds",2); + } + + if (doAllSeedPlots || doNRecHits){ + histname = "NumberOfRecHitsPerSeed_"+seedProducer.label() + "_"; + NumberOfRecHitsPerSeed = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, SeedHitBin, SeedHitMin, SeedHitMax); + NumberOfRecHitsPerSeed->setAxisTitle("Number of RecHits per Seed", 1); + NumberOfRecHitsPerSeed->setAxisTitle("Number of Seeds",2); + } + + if (doAllSeedPlots || doProfPHI){ + histname = "NumberOfRecHitsPerSeedVsPhiProfile_"+seedProducer.label() + "_"; + NumberOfRecHitsPerSeedVsPhiProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, SeedHitBin, SeedHitMin, SeedHitMax,"s"); + NumberOfRecHitsPerSeedVsPhiProfile->setAxisTitle("Seed #phi",1); + NumberOfRecHitsPerSeedVsPhiProfile->setAxisTitle("Number of RecHits of each Seed",2); + } + + if (doAllSeedPlots || doProfETA){ + histname = "NumberOfRecHitsPerSeedVsEtaProfile_"+seedProducer.label() + "_"; + NumberOfRecHitsPerSeedVsEtaProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, SeedHitBin, SeedHitMin, SeedHitMax,"s"); + NumberOfRecHitsPerSeedVsEtaProfile->setAxisTitle("Seed #eta",1); + NumberOfRecHitsPerSeedVsEtaProfile->setAxisTitle("Number of RecHits of each Seed",2); + } + + // book the TrackCandidate histograms + // ---------------------------------------------------------------------------------// + + if (doTCPlots){ + + dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); + + histname = "TrackCandPt_"+tcProducer.label() + "_"; + TrackCandPt = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackPtBin, TrackPtMin, TrackPtMax); + TrackCandPt->setAxisTitle("Track Candidate p_{T} (GeV/c)", 1); + TrackCandPt->setAxisTitle("Number of Track Candidates", 2); + + histname = "TrackCandEta_"+tcProducer.label() + "_"; + TrackCandEta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax); + TrackCandEta->setAxisTitle("Track Candidate #eta", 1); + TrackCandEta->setAxisTitle("Number of Track Candidates", 2); + + histname = "TrackCandPhi_"+tcProducer.label() + "_"; + TrackCandPhi = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax); + TrackCandPhi->setAxisTitle("Track Candidate #phi", 1); + TrackCandPhi->setAxisTitle("Number of Track Candidates", 2); + + histname = "TrackCandTheta_"+tcProducer.label() + "_"; + TrackCandTheta = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, ThetaBin, ThetaMin, ThetaMax); + TrackCandTheta->setAxisTitle("Track Candidate #theta", 1); + TrackCandTheta->setAxisTitle("Number of Track Candidates", 2); + + histname = "TrackCandQ_"+tcProducer.label() + "_"; + TrackCandQ = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TrackQBin, TrackQMin, TrackQMax); + TrackCandQ->setAxisTitle("Track Candidate Charge", 1); + TrackCandQ->setAxisTitle("Number of Track Candidates",2); + + histname = "TrackCandDxy_"+tcProducer.label() + "_"; + TrackCandDxy = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TCDxyBin, TCDxyMin, TCDxyMax); + TrackCandDxy->setAxisTitle("Track Candidate d_{xy} (cm)", 1); + TrackCandDxy->setAxisTitle("Number of Track Candidates",2); + + histname = "TrackCandDz_"+tcProducer.label() + "_"; + TrackCandDz = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TCDzBin, TCDzMin, TCDzMax); + TrackCandDz->setAxisTitle("Track Candidate d_{z} (cm)", 1); + TrackCandDz->setAxisTitle("Number of Track Candidates",2); + + histname = "NumberOfRecHitsPerTrackCand_"+tcProducer.label() + "_"; + NumberOfRecHitsPerTrackCand = dqmStore_->book1D(histname+CatagoryName, histname+CatagoryName, TCHitBin, TCHitMin, TCHitMax); + NumberOfRecHitsPerTrackCand->setAxisTitle("Number of RecHits per Track Candidate", 1); + NumberOfRecHitsPerTrackCand->setAxisTitle("Number of Track Candidates",2); + + histname = "NumberOfRecHitsPerTrackCandVsPhiProfile_"+tcProducer.label() + "_"; + NumberOfRecHitsPerTrackCandVsPhiProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, PhiBin, PhiMin, PhiMax, TCHitBin, TCHitMin, TCHitMax,"s"); + NumberOfRecHitsPerTrackCandVsPhiProfile->setAxisTitle("Track Candidate #phi",1); + NumberOfRecHitsPerTrackCandVsPhiProfile->setAxisTitle("Number of RecHits of each Track Candidate",2); + + histname = "NumberOfRecHitsPerTrackCandVsEtaProfile_"+tcProducer.label() + "_"; + NumberOfRecHitsPerTrackCandVsEtaProfile = dqmStore_->bookProfile(histname+CatagoryName, histname+CatagoryName, EtaBin, EtaMin, EtaMax, TCHitBin, TCHitMin, TCHitMax,"s"); + NumberOfRecHitsPerTrackCandVsEtaProfile->setAxisTitle("Track Candidate #eta",1); + NumberOfRecHitsPerTrackCandVsEtaProfile->setAxisTitle("Number of RecHits of each Track Candidate",2); + } + } // -- Analyse @@ -267,47 +271,46 @@ void TrackBuildingAnalyzer::analyze const edm::ESHandle& theTTRHBuilder ) { - - - TSCBLBuilderNoMaterial tscblBuilder; - - //get parameters and errors from the candidate state - TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(candidate.recHits().second-1)); - TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candidate.startingState(), recHit->surface(), theMF.product()); - TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm - if(!(tsAtClosestApproachSeed.isValid())) { - edm::LogVerbatim("TrackBuilding") << "TrajectoryStateClosestToBeamLine not valid"; - return; - } - GlobalPoint v0 = tsAtClosestApproachSeed.trackStateAtPCA().position(); - GlobalVector p = tsAtClosestApproachSeed.trackStateAtPCA().momentum(); - GlobalPoint v(v0.x()-bs.x0(),v0.y()-bs.y0(),v0.z()-bs.z0()); - - double pt = sqrt(state.globalMomentum().perp2()); - double eta = state.globalMomentum().eta(); - double phi = state.globalMomentum().phi(); - double theta = state.globalMomentum().theta(); - //double pm = sqrt(state.globalMomentum().mag2()); - //double pz = state.globalMomentum().z(); - //double qoverp = tsAtClosestApproachSeed.trackStateAtPCA().charge()/p.mag(); - //double theta = p.theta(); - //double lambda = M_PI/2-p.theta(); - double numberOfHits = candidate.recHits().second-candidate.recHits().first; - double dxy = (-v.x()*sin(p.phi())+v.y()*cos(p.phi())); - double dz = v.z() - (v.x()*p.x()+v.y()*p.y())/p.perp() * p.z()/p.perp(); - - // fill the ME's - if (doAllSeedPlots || doQ)SeedQ->Fill( state.charge() ); - if (doAllSeedPlots || doPT) SeedPt->Fill( pt ); - if (doAllSeedPlots || doETA) SeedEta->Fill( eta ); - if (doAllSeedPlots || doPHI) SeedPhi->Fill( phi ); - if (doAllSeedPlots || doPHIVsETA) SeedPhiVsEta->Fill( eta, phi); - if (doAllSeedPlots || doTheta) SeedTheta->Fill( theta ); - if (doAllSeedPlots || doDxy) SeedDxy->Fill( dxy ); - if (doAllSeedPlots || doDz) SeedDz->Fill( dz ); - if (doAllSeedPlots || doNRecHits) NumberOfRecHitsPerSeed->Fill( numberOfHits ); - if (doAllSeedPlots || doProfETA) NumberOfRecHitsPerSeedVsEtaProfile->Fill( eta, numberOfHits ); - if (doAllSeedPlots || doProfPHI) NumberOfRecHitsPerSeedVsPhiProfile->Fill( phi, numberOfHits ); + TSCBLBuilderNoMaterial tscblBuilder; + + //get parameters and errors from the candidate state + TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(candidate.recHits().second-1)); + TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candidate.startingState(), recHit->surface(), theMF.product()); + TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm + if(!(tsAtClosestApproachSeed.isValid())) { + edm::LogVerbatim("TrackBuilding") << "TrajectoryStateClosestToBeamLine not valid"; + return; + } + GlobalPoint v0 = tsAtClosestApproachSeed.trackStateAtPCA().position(); + GlobalVector p = tsAtClosestApproachSeed.trackStateAtPCA().momentum(); + GlobalPoint v(v0.x()-bs.x0(),v0.y()-bs.y0(),v0.z()-bs.z0()); + + double pt = sqrt(state.globalMomentum().perp2()); + double eta = state.globalMomentum().eta(); + double phi = state.globalMomentum().phi(); + double theta = state.globalMomentum().theta(); + //double pm = sqrt(state.globalMomentum().mag2()); + //double pz = state.globalMomentum().z(); + //double qoverp = tsAtClosestApproachSeed.trackStateAtPCA().charge()/p.mag(); + //double theta = p.theta(); + //double lambda = M_PI/2-p.theta(); + double numberOfHits = candidate.recHits().second-candidate.recHits().first; + double dxy = (-v.x()*sin(p.phi())+v.y()*cos(p.phi())); + double dz = v.z() - (v.x()*p.x()+v.y()*p.y())/p.perp() * p.z()/p.perp(); + + // fill the ME's + if (doAllSeedPlots || doQ)SeedQ->Fill( state.charge() ); + if (doAllSeedPlots || doPT) SeedPt->Fill( pt ); + if (doAllSeedPlots || doETA) SeedEta->Fill( eta ); + if (doAllSeedPlots || doPHI) SeedPhi->Fill( phi ); + if (doAllSeedPlots || doPHIVsETA) SeedPhiVsEta->Fill( eta, phi); + if (doAllSeedPlots || doTheta) SeedTheta->Fill( theta ); + if (doAllSeedPlots || doDxy) SeedDxy->Fill( dxy ); + if (doAllSeedPlots || doDz) SeedDz->Fill( dz ); + if (doAllSeedPlots || doNRecHits) NumberOfRecHitsPerSeed->Fill( numberOfHits ); + if (doAllSeedPlots || doProfETA) NumberOfRecHitsPerSeedVsEtaProfile->Fill( eta, numberOfHits ); + if (doAllSeedPlots || doProfPHI) NumberOfRecHitsPerSeedVsPhiProfile->Fill( phi, numberOfHits ); + } // -- Analyse @@ -322,47 +325,45 @@ void TrackBuildingAnalyzer::analyze const edm::ESHandle& theTTRHBuilder ) { - - - TSCBLBuilderNoMaterial tscblBuilder; - - //get parameters and errors from the candidate state - TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(candidate.recHits().second-1)); - TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candidate.trajectoryStateOnDet(), recHit->surface(), theMF.product()); - TrajectoryStateClosestToBeamLine tsAtClosestApproachTrackCand = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm - if(!(tsAtClosestApproachTrackCand.isValid())) { - edm::LogVerbatim("TrackBuilding") << "TrajectoryStateClosestToBeamLine not valid"; - return; - } - GlobalPoint v0 = tsAtClosestApproachTrackCand.trackStateAtPCA().position(); - GlobalVector p = tsAtClosestApproachTrackCand.trackStateAtPCA().momentum(); - GlobalPoint v(v0.x()-bs.x0(),v0.y()-bs.y0(),v0.z()-bs.z0()); - - double pt = sqrt(state.globalMomentum().perp2()); - double eta = state.globalMomentum().eta(); - double phi = state.globalMomentum().phi(); - double theta = state.globalMomentum().theta(); - //double pm = sqrt(state.globalMomentum().mag2()); - //double pz = state.globalMomentum().z(); - //double qoverp = tsAtClosestApproachTrackCand.trackStateAtPCA().charge()/p.mag(); - //double theta = p.theta(); - //double lambda = M_PI/2-p.theta(); - double numberOfHits = candidate.recHits().second-candidate.recHits().first; - double dxy = (-v.x()*sin(p.phi())+v.y()*cos(p.phi())); - - double dz = v.z() - (v.x()*p.x()+v.y()*p.y())/p.perp() * p.z()/p.perp(); - - if (doTCPlots){ - // fill the ME's - TrackCandQ->Fill( state.charge() ); - TrackCandPt->Fill( pt ); - TrackCandEta->Fill( eta ); - TrackCandPhi->Fill( phi ); - TrackCandTheta->Fill( theta ); - TrackCandDxy->Fill( dxy ); - TrackCandDz->Fill( dz ); - NumberOfRecHitsPerTrackCand->Fill( numberOfHits ); - NumberOfRecHitsPerTrackCandVsEtaProfile->Fill( eta, numberOfHits ); - NumberOfRecHitsPerTrackCandVsPhiProfile->Fill( phi, numberOfHits ); - } + TSCBLBuilderNoMaterial tscblBuilder; + + //get parameters and errors from the candidate state + TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(candidate.recHits().second-1)); + TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( candidate.trajectoryStateOnDet(), recHit->surface(), theMF.product()); + TrajectoryStateClosestToBeamLine tsAtClosestApproachTrackCand = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm + if(!(tsAtClosestApproachTrackCand.isValid())) { + edm::LogVerbatim("TrackBuilding") << "TrajectoryStateClosestToBeamLine not valid"; + return; + } + GlobalPoint v0 = tsAtClosestApproachTrackCand.trackStateAtPCA().position(); + GlobalVector p = tsAtClosestApproachTrackCand.trackStateAtPCA().momentum(); + GlobalPoint v(v0.x()-bs.x0(),v0.y()-bs.y0(),v0.z()-bs.z0()); + + double pt = sqrt(state.globalMomentum().perp2()); + double eta = state.globalMomentum().eta(); + double phi = state.globalMomentum().phi(); + double theta = state.globalMomentum().theta(); + //double pm = sqrt(state.globalMomentum().mag2()); + //double pz = state.globalMomentum().z(); + //double qoverp = tsAtClosestApproachTrackCand.trackStateAtPCA().charge()/p.mag(); + //double theta = p.theta(); + //double lambda = M_PI/2-p.theta(); + double numberOfHits = candidate.recHits().second-candidate.recHits().first; + double dxy = (-v.x()*sin(p.phi())+v.y()*cos(p.phi())); + + double dz = v.z() - (v.x()*p.x()+v.y()*p.y())/p.perp() * p.z()/p.perp(); + + if (doTCPlots){ + // fill the ME's + TrackCandQ->Fill( state.charge() ); + TrackCandPt->Fill( pt ); + TrackCandEta->Fill( eta ); + TrackCandPhi->Fill( phi ); + TrackCandTheta->Fill( theta ); + TrackCandDxy->Fill( dxy ); + TrackCandDz->Fill( dz ); + NumberOfRecHitsPerTrackCand->Fill( numberOfHits ); + NumberOfRecHitsPerTrackCandVsEtaProfile->Fill( eta, numberOfHits ); + NumberOfRecHitsPerTrackCandVsPhiProfile->Fill( phi, numberOfHits ); + } } diff --git a/DQM/TrackingMonitor/src/TrackSplittingMonitor.cc b/DQM/TrackingMonitor/src/TrackSplittingMonitor.cc index a8013430f2b8d..4a06b440dcb2e 100644 --- a/DQM/TrackingMonitor/src/TrackSplittingMonitor.cc +++ b/DQM/TrackingMonitor/src/TrackSplittingMonitor.cc @@ -29,15 +29,16 @@ #include "DataFormats/BeamSpot/interface/BeamSpot.h" #include -TrackSplittingMonitor::TrackSplittingMonitor(const edm::ParameterSet& iConfig) { - dqmStore_ = edm::Service().operator->(); - conf_ = iConfig; +TrackSplittingMonitor::TrackSplittingMonitor(const edm::ParameterSet& iConfig) + : dqmStore_( edm::Service().operator->() ) + , conf_( iConfig ) +{ splitTracks_ = conf_.getParameter< edm::InputTag >("splitTrackCollection"); splitMuons_ = conf_.getParameter< edm::InputTag >("splitMuonCollection"); - splitTracksToken_ = consumes >(splitTracks_); splitMuonsToken_ = mayConsume >(splitMuons_); + } TrackSplittingMonitor::~TrackSplittingMonitor() { diff --git a/DQM/TrackingMonitor/src/TrackingMonitor.cc b/DQM/TrackingMonitor/src/TrackingMonitor.cc index b411b67cc4f7a..f13854979ac32 100644 --- a/DQM/TrackingMonitor/src/TrackingMonitor.cc +++ b/DQM/TrackingMonitor/src/TrackingMonitor.cc @@ -20,10 +20,10 @@ #include "DQM/TrackingMonitor/interface/TrackingMonitor.h" #include "FWCore/Framework/interface/ESHandle.h" -#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h" -#include "TrackingTools/Records/interface/TransientRecHitRecord.h" +#include "TrackingTools/Records/interface/TransientRecHitRecord.h" #include "TrackingTools/PatternTools/interface/TSCBLBuilderNoMaterial.h" #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h" #include "DataFormats/BeamSpot/interface/BeamSpot.h" @@ -34,45 +34,33 @@ #include -// TrackingMonitor +// TrackingMonitor // ----------------------------------------------------------------------------------// -TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig) +TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig) : dqmStore_( edm::Service().operator->() ) , conf_ ( iConfig ) , theTrackBuildingAnalyzer( new TrackBuildingAnalyzer(conf_) ) , NumberOfTracks(NULL) , NumberOfMeanRecHitsPerTrack(NULL) , NumberOfMeanLayersPerTrack(NULL) - , NumberOfGoodTracks(NULL) + // , NumberOfGoodTracks(NULL) , FractionOfGoodTracks(NULL) , NumberOfSeeds(NULL) + , NumberOfSeeds_lumiFlag(NULL) , NumberOfTrackCandidates(NULL) - // ADD by Mia - /* - , NumberOfPixelClus(NULL) - , NumberOfStripClus(NULL) - , RatioOfPixelAndStripClus(NULL) - , NumberOfTrkVsClus(NULL) - , NumberOfTrkVsStripClus(NULL) - , NumberOfTrkVsPixelClus(NULL) - */ - , NumberOfGoodTrkVsClus(NULL) + // , NumberOfGoodTrkVsClus(NULL) , NumberOfTracksVsLS(NULL) - , NumberOfGoodTracksVsLS(NULL) + // , NumberOfGoodTracksVsLS(NULL) , GoodTracksFractionVsLS(NULL) - , GoodTracksNumberOfRecHitsPerTrackVsLS(NULL) + // , GoodTracksNumberOfRecHitsPerTrackVsLS(NULL) // ADD by Mia for PU monitoring // vertex plots to be moved in ad hoc class , NumberOfTracksVsGoodPVtx(NULL) , NumberOfTracksVsBXlumi(NULL) - , NumberOfGoodTracksVsGoodPVtx(NULL) - , NumberOfGoodTracksVsBXlumi(NULL) - , FractionOfGoodTracksVsGoodPVtx(NULL) - , FractionOfGoodTracksVsBXlumi(NULL) - // ADD by Mia in order to deal with LS transitions + , NumberOfTracks_lumiFlag(NULL) - , NumberOfGoodTracks_lumiFlag(NULL) + // , NumberOfGoodTracks_lumiFlag(NULL) , builderName ( conf_.getParameter("TTRHBuilder")) , doTrackerSpecific_ ( conf_.getParameter("doTrackerSpecific") ) @@ -81,9 +69,8 @@ TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig) , doAllPlots ( conf_.getParameter("doAllPlots")) , doGeneralPropertiesPlots_( conf_.getParameter("doGeneralPropertiesPlots")) , doHitPropertiesPlots_ ( conf_.getParameter("doHitPropertiesPlots")) - , doGoodTrackPlots_ ( conf_.getParameter("doGoodTrackPlots") ) , doPUmonitoring_ ( conf_.getParameter("doPUmonitoring") ) - , genTriggerEventFlag_(new GenericTriggerEventFlag(iConfig, consumesCollector())) + , genTriggerEventFlag_(new GenericTriggerEventFlag(iConfig,consumesCollector())) { edm::ConsumesCollector c{ consumesCollector() }; @@ -95,11 +82,13 @@ TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig) bsSrcToken_ = consumes(bsSrc_); pvSrcToken_ = mayConsume(pvSrc_); - edm::InputTag trackProducer = conf_.getParameter("TrackProducer"); - edm::InputTag tcProducer = conf_.getParameter("TCProducer"); - edm::InputTag seedProducer = conf_.getParameter("SeedProducer"); + edm::InputTag alltrackProducer = conf_.getParameter("allTrackProducer"); + edm::InputTag trackProducer = conf_.getParameter("TrackProducer"); + edm::InputTag tcProducer = conf_.getParameter("TCProducer"); + edm::InputTag seedProducer = conf_.getParameter("SeedProducer"); + allTrackToken_ = consumes(alltrackProducer); trackToken_ = consumes(trackProducer); - trackCandidateToken_ = consumes(tcProducer); + trackCandidateToken_ = consumes(tcProducer); seedToken_ = consumes >(seedProducer); edm::InputTag stripClusterInputTag_ = conf_.getParameter("stripCluster"); @@ -107,41 +96,42 @@ TrackingMonitor::TrackingMonitor(const edm::ParameterSet& iConfig) stripClustersToken_ = mayConsume > (stripClusterInputTag_); pixelClustersToken_ = mayConsume > (pixelClusterInputTag_); + doFractionPlot_ = true; + if (alltrackProducer.label()==trackProducer.label()) doFractionPlot_ = false; + Quality_ = conf_.getParameter("Quality"); AlgoName_ = conf_.getParameter("AlgoName"); - - - + if ( doPUmonitoring_ ) { - + // get flag from the configuration doPlotsVsBXlumi_ = conf_.getParameter("doPlotsVsBXlumi"); doPlotsVsGoodPVtx_ = conf_.getParameter("doPlotsVsGoodPVtx"); - + if ( doPlotsVsBXlumi_ ) theLumiDetails_ = new GetLumi( iConfig.getParameter("BXlumiSetup"), c ); - + std::vector primaryVertexInputTags = conf_.getParameter >("primaryVertexInputTags"); std::vector selPrimaryVertexInputTags = conf_.getParameter >("selPrimaryVertexInputTags"); std::vector pvLabels = conf_.getParameter > ("pvLabels"); - + if (primaryVertexInputTags.size()==pvLabels.size() and primaryVertexInputTags.size()==selPrimaryVertexInputTags.size()) { // for (auto const& tag : primaryVertexInputTags) { - for (size_t i=0; i("Quality"); - std::string AlgoName = conf_.getParameter("AlgoName"); - std::string MEFolderName = conf_.getParameter("FolderName"); - - // test for the Quality veriable validity - if( Quality_ != "") - { - if( Quality_ != "highPurity" && Quality_ != "tight" && Quality_ != "loose") - { - edm::LogWarning("TrackingMonitor") << "Qualty Name is invalid, using no quality criterea by default"; - Quality_ = ""; - } - } - - // use the AlgoName and Quality Name - std::string CategoryName = Quality_ != "" ? AlgoName_ + "_" + Quality_ : AlgoName_; - - // get binning from the configuration - int TKNoBin = conf_.getParameter( "TkSizeBin"); - double TKNoMin = conf_.getParameter("TkSizeMin"); - double TKNoMax = conf_.getParameter("TkSizeMax"); - - int TCNoBin = conf_.getParameter( "TCSizeBin"); - double TCNoMin = conf_.getParameter("TCSizeMin"); - double TCNoMax = conf_.getParameter("TCSizeMax"); - - int TKNoSeedBin = conf_.getParameter( "TkSeedSizeBin"); - double TKNoSeedMin = conf_.getParameter("TkSeedSizeMin"); - double TKNoSeedMax = conf_.getParameter("TkSeedSizeMax"); - - int MeanHitBin = conf_.getParameter( "MeanHitBin"); - double MeanHitMin = conf_.getParameter("MeanHitMin"); - double MeanHitMax = conf_.getParameter("MeanHitMax"); - - int MeanLayBin = conf_.getParameter( "MeanLayBin"); - double MeanLayMin = conf_.getParameter("MeanLayMin"); - double MeanLayMax = conf_.getParameter("MeanLayMax"); - - int LSBin = conf_.getParameter( "LSBin"); - int LSMin = conf_.getParameter("LSMin"); - int LSMax = conf_.getParameter("LSMax"); - - std::string StateName = conf_.getParameter("MeasurementState"); - if - ( - StateName != "OuterSurface" && - StateName != "InnerSurface" && - StateName != "ImpactPoint" && - StateName != "default" && - StateName != "All" - ) - { - // print warning - edm::LogWarning("TrackingMonitor") << "State Name is invalid, using 'ImpactPoint' by default"; - } - - dqmStore_->setCurrentFolder(MEFolderName); - - // book the General Property histograms - // ---------------------------------------------------------------------------------// - - if (doGeneralPropertiesPlots_ || doAllPlots){ - - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); - - histname = "NumberOfTracks_" + CategoryName; - // MODIFY by Mia in order to cope w/ high multiplicity - // NumberOfTracks = dqmStore_->book1D(histname, histname, TKNoBin, TKNoMin, TKNoMax); - NumberOfTracks = dqmStore_->book1D(histname, histname, 3*TKNoBin, TKNoMin, (TKNoMax+0.5)*3.-0.5); - NumberOfTracks->setAxisTitle("Number of Tracks per Event", 1); - NumberOfTracks->setAxisTitle("Number of Events", 2); - - histname = "NumberOfMeanRecHitsPerTrack_" + CategoryName; - NumberOfMeanRecHitsPerTrack = dqmStore_->book1D(histname, histname, MeanHitBin, MeanHitMin, MeanHitMax); - NumberOfMeanRecHitsPerTrack->setAxisTitle("Mean number of found RecHits per Track", 1); - NumberOfMeanRecHitsPerTrack->setAxisTitle("Entries", 2); - - histname = "NumberOfMeanLayersPerTrack_" + CategoryName; - NumberOfMeanLayersPerTrack = dqmStore_->book1D(histname, histname, MeanLayBin, MeanLayMin, MeanLayMax); - NumberOfMeanLayersPerTrack->setAxisTitle("Mean number of Layers per Track", 1); - NumberOfMeanLayersPerTrack->setAxisTitle("Entries", 2); - - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties/GoodTracks"); - - histname = "NumberOfGoodTracks_" + CategoryName; - NumberOfGoodTracks = dqmStore_->book1D(histname, histname, TKNoBin, TKNoMin, TKNoMax); - NumberOfGoodTracks->setAxisTitle("Number of Good Tracks per Event", 1); - NumberOfGoodTracks->setAxisTitle("Number of Events", 2); - - histname = "FractionOfGoodTracks_" + CategoryName; - FractionOfGoodTracks = dqmStore_->book1D(histname, histname, 101, -0.005, 1.005); - FractionOfGoodTracks->setAxisTitle("Fraction of High Purity Tracks (Tracks with Pt>1GeV)", 1); - FractionOfGoodTracks->setAxisTitle("Entries", 2); - } - - if ( doLumiAnalysis ) { - // add by Mia in order to deal with LS transitions - dqmStore_->setCurrentFolder(MEFolderName+"/LSanalysis"); - - histname = "NumberOfTracks_lumiFlag_" + CategoryName; - NumberOfTracks_lumiFlag = dqmStore_->book1D(histname, histname, 3*TKNoBin, TKNoMin, (TKNoMax+0.5)*3.-0.5); - NumberOfTracks_lumiFlag->setAxisTitle("Number of Tracks per Event", 1); - NumberOfTracks_lumiFlag->setAxisTitle("Number of Events", 2); - - if ( doGoodTrackPlots_ ) { - histname = "NumberOfGoodTracks_lumiFlag_" + CategoryName; - NumberOfGoodTracks_lumiFlag = dqmStore_->book1D(histname, histname, TKNoBin, TKNoMin, TKNoMax); - NumberOfGoodTracks_lumiFlag->setAxisTitle("Number of Good Tracks per Event", 1); - NumberOfGoodTracks_lumiFlag->setAxisTitle("Number of Events", 2); - } - - } - - // book profile plots vs LS : - //--------------------------- - - - if ( doProfilesVsLS_ || doAllPlots) { - - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); - - histname = "NumberOfTracksVsLS_"+ CategoryName; - NumberOfTracksVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax, TKNoMin, (TKNoMax+0.5)*3.-0.5,""); - NumberOfTracksVsLS->getTH1()->SetBit(TH1::kCanRebin); - NumberOfTracksVsLS->setAxisTitle("#Lumi section",1); - NumberOfTracksVsLS->setAxisTitle("Number of Tracks",2); - - if (doGoodTrackPlots_ || doAllPlots ){ - dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties/GoodTracks"); - - histname = "NumberOfGoodTracksVsLS_"+ CategoryName; - NumberOfGoodTracksVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax, TKNoMin, TKNoMax,""); - NumberOfGoodTracksVsLS->getTH1()->SetBit(TH1::kCanRebin); - NumberOfGoodTracksVsLS->setAxisTitle("#Lumi section",1); - NumberOfGoodTracksVsLS->setAxisTitle("Number of Good Tracks",2); - - histname = "GoodTracksFractionVsLS_"+ CategoryName; - GoodTracksFractionVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax,0,1.1,""); - GoodTracksFractionVsLS->getTH1()->SetBit(TH1::kCanRebin); - GoodTracksFractionVsLS->setAxisTitle("#Lumi section",1); - GoodTracksFractionVsLS->setAxisTitle("Fraction of Good Tracks",2); - - histname = "GoodTracksNumberOfRecHitsPerTrackVsLS_" + CategoryName; - GoodTracksNumberOfRecHitsPerTrackVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax,0.,40.,""); - GoodTracksNumberOfRecHitsPerTrackVsLS->getTH1()->SetBit(TH1::kCanRebin); - GoodTracksNumberOfRecHitsPerTrackVsLS->setAxisTitle("#Lumi section",1); - GoodTracksNumberOfRecHitsPerTrackVsLS->setAxisTitle("Mean number of RecHits per Good track",2); - } - } - - // book PU monitoring plots : - //--------------------------- - - if ( doPUmonitoring_ ) { - - for (size_t i=0; ibeginJob(dqmStore_); - - dqmStore_->setCurrentFolder(MEFolderName+"/PUmonitoring"); - - if ( doPlotsVsGoodPVtx_ ) { - // get binning from the configuration - int GoodPVtxBin = conf_.getParameter("GoodPVtxBin"); - double GoodPVtxMin = conf_.getParameter("GoodPVtxMin"); - double GoodPVtxMax = conf_.getParameter("GoodPVtxMax"); - - histname = "NumberOfTracksVsGoodPVtx"; - NumberOfTracksVsGoodPVtx = dqmStore_->bookProfile(histname,histname,GoodPVtxBin,GoodPVtxMin,GoodPVtxMax,TKNoMin, (TKNoMax+0.5)*3.-0.5,""); - NumberOfTracksVsGoodPVtx->getTH1()->SetBit(TH1::kCanRebin); - NumberOfTracksVsGoodPVtx->setAxisTitle("Number of PV",1); - NumberOfTracksVsGoodPVtx->setAxisTitle("Mean number of Tracks per Event",2); - - histname = "NumberOfGoodTracksVsGoodPVtx"; - NumberOfGoodTracksVsGoodPVtx = dqmStore_->bookProfile(histname,histname,GoodPVtxBin,GoodPVtxMin,GoodPVtxMax, TKNoMin, TKNoMax,""); - NumberOfGoodTracksVsGoodPVtx->getTH1()->SetBit(TH1::kCanRebin); - NumberOfGoodTracksVsGoodPVtx->setAxisTitle("Number of PV",1); - NumberOfGoodTracksVsGoodPVtx->setAxisTitle("Mean number of Good Tracks per Event",2); - - histname = "FractionOfGoodTracksVsGoodPVtx"; - FractionOfGoodTracksVsGoodPVtx = dqmStore_->bookProfile(histname,histname,GoodPVtxBin,GoodPVtxMin,GoodPVtxMax, TKNoMin, TKNoMax,""); - FractionOfGoodTracksVsGoodPVtx->getTH1()->SetBit(TH1::kCanRebin); - FractionOfGoodTracksVsGoodPVtx->setAxisTitle("Number of PV",1); - FractionOfGoodTracksVsGoodPVtx->setAxisTitle("Mean fraction of Good Tracks per Event",2); - } - - if ( doPlotsVsBXlumi_ ) { - // get binning from the configuration - edm::ParameterSet BXlumiParameters = conf_.getParameter("BXlumiSetup"); - int BXlumiBin = BXlumiParameters.getParameter("BXlumiBin"); - double BXlumiMin = BXlumiParameters.getParameter("BXlumiMin"); - double BXlumiMax = BXlumiParameters.getParameter("BXlumiMax"); - - histname = "NumberOfTracksVsBXlumi_"+ CategoryName; - NumberOfTracksVsBXlumi = dqmStore_->bookProfile(histname,histname, BXlumiBin,BXlumiMin,BXlumiMax, TKNoMin, TKNoMax,""); - NumberOfTracksVsBXlumi->getTH1()->SetBit(TH1::kCanRebin); - NumberOfTracksVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]",1); - NumberOfTracksVsBXlumi->setAxisTitle("Mean number of Good Tracks",2); - - histname = "NumberOfGoodTracksVsBXlumi_"+ CategoryName; - NumberOfGoodTracksVsBXlumi = dqmStore_->bookProfile(histname,histname, BXlumiBin,BXlumiMin,BXlumiMax, TKNoMin, TKNoMax,""); - NumberOfGoodTracksVsBXlumi->getTH1()->SetBit(TH1::kCanRebin); - NumberOfGoodTracksVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]",1); - NumberOfGoodTracksVsBXlumi->setAxisTitle("Mean number of Good Tracks",2); - - histname = "FractionOfGoodTracksVsBXlumi_"+ CategoryName; - FractionOfGoodTracksVsBXlumi = dqmStore_->bookProfile(histname,histname, BXlumiBin,BXlumiMin,BXlumiMax, TKNoMin, TKNoMax,""); - FractionOfGoodTracksVsBXlumi->getTH1()->SetBit(TH1::kCanRebin); - FractionOfGoodTracksVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]",1); - FractionOfGoodTracksVsBXlumi->setAxisTitle("Mean fraction of Good Tracks",2); - - } - } - - theTrackAnalyzer->beginJob(dqmStore_); - - // book the Seed Property histograms - // ---------------------------------------------------------------------------------// - - dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); - - doAllSeedPlots=conf_.getParameter("doSeedParameterHistos"); - doSeedNumberPlot=conf_.getParameter("doSeedNumberHisto"); - doSeedVsClusterPlot=conf_.getParameter("doSeedVsClusterHisto"); - // if (doAllPlots) doAllSeedPlots=true; - - runTrackBuildingAnalyzerForSeed=(doAllSeedPlots || conf_.getParameter("doSeedPTHisto") ||conf_.getParameter("doSeedETAHisto") || conf_.getParameter("doSeedPHIHisto") || conf_.getParameter("doSeedPHIVsETAHisto") || conf_.getParameter("doSeedThetaHisto") || conf_.getParameter("doSeedQHisto") || conf_.getParameter("doSeedDxyHisto") || conf_.getParameter("doSeedDzHisto") || conf_.getParameter("doSeedNRecHitsHisto") || conf_.getParameter("doSeedNVsPhiProf")|| conf_.getParameter("doSeedNVsEtaProf")); - - edm::InputTag seedProducer = conf_.getParameter("SeedProducer"); - - if (doAllSeedPlots || doSeedNumberPlot){ - histname = "NumberOfSeeds_"+ seedProducer.label() + "_"+ CategoryName; - NumberOfSeeds = dqmStore_->book1D(histname, histname, TKNoSeedBin, TKNoSeedMin, TKNoSeedMax); - NumberOfSeeds->setAxisTitle("Number of Seeds per Event", 1); - NumberOfSeeds->setAxisTitle("Number of Events", 2); - } - - if (doAllSeedPlots || doSeedVsClusterPlot){ - - ClusterLabels= conf_.getParameter >("ClusterLabels"); - - std::vector histoMin,histoMax; - std::vector histoBin; //these vectors are for max min and nbins in histograms - - int NClusPxBin = conf_.getParameter( "NClusPxBin"); - double NClusPxMin = conf_.getParameter("NClusPxMin"); - double NClusPxMax = conf_.getParameter("NClusPxMax"); - - int NClusStrBin = conf_.getParameter( "NClusStrBin"); - double NClusStrMin = conf_.getParameter("NClusStrMin"); - double NClusStrMax = conf_.getParameter("NClusStrMax"); - - setMaxMinBin(histoMin,histoMax,histoBin,NClusStrMin,NClusStrMax,NClusStrBin,NClusPxMin,NClusPxMax,NClusPxBin); - - for (uint i=0; i(dqmStore_->book2D(histname, histname, histoBin[i], histoMin[i], histoMax[i], - TKNoSeedBin, TKNoSeedMin, TKNoSeedMax))); - SeedsVsClusters[i]->setAxisTitle("Number of Clusters", 1); - SeedsVsClusters[i]->setAxisTitle("Number of Seeds", 2); - } - } - - - doTkCandPlots=conf_.getParameter("doTrackCandHistos"); - // if (doAllPlots) doTkCandPlots=true; - - if (doTkCandPlots){ - - edm::InputTag tcProducer = conf_.getParameter("TCProducer"); - - histname = "NumberOfTrackCandidates_"+ tcProducer.label() + "_"+ CategoryName; - NumberOfTrackCandidates = dqmStore_->book1D(histname, histname, TCNoBin, TCNoMin, TCNoMax); - NumberOfTrackCandidates->setAxisTitle("Number of Track Candidates per Event", 1); - NumberOfTrackCandidates->setAxisTitle("Number of Event", 2); - } - - - theTrackBuildingAnalyzer->beginJob(dqmStore_); - - - if (doLumiAnalysis) { -// if (NumberOfTracks) NumberOfTracks->setLumiFlag(); -// if (NumberOfGoodTracks) NumberOfGoodTracks->setLumiFlag(); -// if (FractionOfGoodTracks) FractionOfGoodTracks->setLumiFlag(); - if ( NumberOfTracks_lumiFlag ) NumberOfTracks_lumiFlag -> setLumiFlag(); - if ( NumberOfGoodTracks_lumiFlag ) NumberOfGoodTracks_lumiFlag -> setLumiFlag(); - theTrackAnalyzer->setLumiFlag(); - } - - if (doTrackerSpecific_ || doAllPlots) { - - ClusterLabels= conf_.getParameter >("ClusterLabels"); - - std::vector histoMin,histoMax; - std::vector histoBin; //these vectors are for max min and nbins in histograms - - /* - int NClusPxBin = conf_.getParameter( "NClusPxBin"); - double NClusPxMin = conf_.getParameter("NClusPxMin"); - double NClusPxMax = conf_.getParameter("NClusPxMax"); - - int NClusStrBin = conf_.getParameter( "NClusStrBin"); - double NClusStrMin = conf_.getParameter("NClusStrMin"); - double NClusStrMax = conf_.getParameter("NClusStrMax"); - */ - - /* - int NClus2DTotBin = conf_.getParameter( "NClus2DTotBin"); - double NClus2DTotMin = conf_.getParameter("NClus2DTotMin"); - double NClus2DTotMax = conf_.getParameter("NClus2DTotMax"); - */ - - int NClusStrBin = conf_.getParameter( "NClusStrBin"); - double NClusStrMin = conf_.getParameter("NClusStrMin"); - double NClusStrMax = conf_.getParameter("NClusStrMax"); - - int NClusPxBin = conf_.getParameter( "NClusPxBin"); - double NClusPxMin = conf_.getParameter("NClusPxMin"); - double NClusPxMax = conf_.getParameter("NClusPxMax"); - - int NTrk2DBin = conf_.getParameter( "NTrk2DBin"); - double NTrk2DMin = conf_.getParameter("NTrk2DMin"); - double NTrk2DMax = conf_.getParameter("NTrk2DMax"); - - // setMaxMinBin(histoMin,histoMax,histoBin,NClusStrMin,NClusStrMax,NClusStrBin,NClusPxMin,NClusPxMax,NClusPxBin); - setMaxMinBin(histoMin,histoMax,histoBin, - NClusStrMin,NClusStrMax,NClusStrBin, - NClusPxMin, NClusPxMax, NClusPxBin); - - /* - int NClusPxBin = conf_.getParameter( "NClusPxBin"); - double NClusPxMin = conf_.getParameter("NClusPxMin"); - double NClusPxMax = conf_.getParameter("NClusPxMax"); - - int NClusStrBin = conf_.getParameter( "NClusStrBin"); - double NClusStrMin = conf_.getParameter("NClusStrMin"); - double NClusStrMax = conf_.getParameter("NClusStrMax"); - */ - - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties"); - - for (uint i=0; isetCurrentFolder(MEFolderName+"/HitProperties"); - histname = "TracksVs" + ClusterLabels[i] + "Cluster_" + CategoryName; - NumberOfTrkVsClusters.push_back(dynamic_cast(dqmStore_->book2D(histname, histname, - histoBin[i], histoMin[i], histoMax[i], - NTrk2DBin,NTrk2DMin,NTrk2DMax - ))); - std::string title = "Number of " + ClusterLabels[i] + " Clusters"; - NumberOfTrkVsClusters[i]->setAxisTitle(title, 1); - NumberOfTrkVsClusters[i]->setAxisTitle("Number of Seeds", 2); - - if (doGoodTrackPlots_ || doAllPlots ) { - - dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties/GoodTracks"); - - if(ClusterLabels[i].compare("Tot")==0){ - histname = "GoodTracksVs" + ClusterLabels[i] + "Cluster_" + CategoryName; - NumberOfGoodTrkVsClus = dqmStore_->book2D(histname,histname, - histoBin[i], histoMin[i], histoMax[i], - TKNoBin,TKNoMin,TKNoMax - ); - NumberOfGoodTrkVsClus->setAxisTitle("# of Clusters in (Pixel+Strip) Detectors", 1); - NumberOfGoodTrkVsClus->setAxisTitle("Number of Good Tracks", 2); - } - } - } - - /* - histname = "TracksVsClusters_" + CategoryName; - NumberOfTrkVsClus = dqmStore_->book2D(histname,histname, - NClus2DTotBin,NClus2DTotMin,NClus2DTotMax, - NTrk2DBin,NTrk2DMin,NTrk2DMax - ); - NumberOfTrkVsClus->setAxisTitle("# of Clusters in (Pixel+Strip) Detectors", 1); - NumberOfTrkVsClus->setAxisTitle("Number of Tracks", 2); - */ - } - - + } // -- BeginRun //---------------------------------------------------------------------------------// void TrackingMonitor::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { + + // parameters from the configuration + std::string Quality = conf_.getParameter("Quality"); + std::string AlgoName = conf_.getParameter("AlgoName"); + std::string MEFolderName = conf_.getParameter("FolderName"); + + // test for the Quality veriable validity + if( Quality_ != "") { + if( Quality_ != "highPurity" && Quality_ != "tight" && Quality_ != "loose") { + edm::LogWarning("TrackingMonitor") << "Qualty Name is invalid, using no quality criterea by default"; + Quality_ = ""; + } + } + + // use the AlgoName and Quality Name + std::string CategoryName = Quality_ != "" ? AlgoName_ + "_" + Quality_ : AlgoName_; + + // get binning from the configuration + int TKNoBin = conf_.getParameter( "TkSizeBin"); + double TKNoMin = conf_.getParameter("TkSizeMin"); + double TKNoMax = conf_.getParameter("TkSizeMax"); + + int TCNoBin = conf_.getParameter( "TCSizeBin"); + double TCNoMin = conf_.getParameter("TCSizeMin"); + double TCNoMax = conf_.getParameter("TCSizeMax"); + + int TKNoSeedBin = conf_.getParameter( "TkSeedSizeBin"); + double TKNoSeedMin = conf_.getParameter("TkSeedSizeMin"); + double TKNoSeedMax = conf_.getParameter("TkSeedSizeMax"); + + int MeanHitBin = conf_.getParameter( "MeanHitBin"); + double MeanHitMin = conf_.getParameter("MeanHitMin"); + double MeanHitMax = conf_.getParameter("MeanHitMax"); + + int MeanLayBin = conf_.getParameter( "MeanLayBin"); + double MeanLayMin = conf_.getParameter("MeanLayMin"); + double MeanLayMax = conf_.getParameter("MeanLayMax"); + + int LSBin = conf_.getParameter( "LSBin"); + int LSMin = conf_.getParameter("LSMin"); + int LSMax = conf_.getParameter("LSMax"); + + std::string StateName = conf_.getParameter("MeasurementState"); + if ( + StateName != "OuterSurface" && + StateName != "InnerSurface" && + StateName != "ImpactPoint" && + StateName != "default" && + StateName != "All" + ) { + // print warning + edm::LogWarning("TrackingMonitor") << "State Name is invalid, using 'ImpactPoint' by default"; + } + + dqmStore_->setCurrentFolder(MEFolderName); + + // book the General Property histograms + // ---------------------------------------------------------------------------------// + + if (doGeneralPropertiesPlots_ || doAllPlots){ + + dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); + + histname = "NumberOfTracks_" + CategoryName; + // MODIFY by Mia in order to cope w/ high multiplicity + NumberOfTracks = dqmStore_->book1D(histname, histname, 3*TKNoBin, TKNoMin, (TKNoMax+0.5)*3.-0.5); + NumberOfTracks->setAxisTitle("Number of Tracks per Event", 1); + NumberOfTracks->setAxisTitle("Number of Events", 2); + + histname = "NumberOfMeanRecHitsPerTrack_" + CategoryName; + NumberOfMeanRecHitsPerTrack = dqmStore_->book1D(histname, histname, MeanHitBin, MeanHitMin, MeanHitMax); + NumberOfMeanRecHitsPerTrack->setAxisTitle("Mean number of valid RecHits per Track", 1); + NumberOfMeanRecHitsPerTrack->setAxisTitle("Entries", 2); + + histname = "NumberOfMeanLayersPerTrack_" + CategoryName; + NumberOfMeanLayersPerTrack = dqmStore_->book1D(histname, histname, MeanLayBin, MeanLayMin, MeanLayMax); + NumberOfMeanLayersPerTrack->setAxisTitle("Mean number of Layers per Track", 1); + NumberOfMeanLayersPerTrack->setAxisTitle("Entries", 2); + + if (doFractionPlot_) { + histname = "FractionOfGoodTracks_" + CategoryName; + FractionOfGoodTracks = dqmStore_->book1D(histname, histname, 101, -0.005, 1.005); + FractionOfGoodTracks->setAxisTitle("Fraction of Tracks (w.r.t. generalTracks)", 1); + FractionOfGoodTracks->setAxisTitle("Entries", 2); + } + } + + if ( doLumiAnalysis ) { + // add by Mia in order to deal with LS transitions + dqmStore_->setCurrentFolder(MEFolderName+"/LSanalysis"); + + histname = "NumberOfTracks_lumiFlag_" + CategoryName; + NumberOfTracks_lumiFlag = dqmStore_->book1D(histname, histname, 3*TKNoBin, TKNoMin, (TKNoMax+0.5)*3.-0.5); + NumberOfTracks_lumiFlag->setAxisTitle("Number of Tracks per Event", 1); + NumberOfTracks_lumiFlag->setAxisTitle("Number of Events", 2); + + } + + // book profile plots vs LS : + //--------------------------- + + + if ( doProfilesVsLS_ || doAllPlots) { + + dqmStore_->setCurrentFolder(MEFolderName+"/GeneralProperties"); + + histname = "NumberOfTracksVsLS_"+ CategoryName; + NumberOfTracksVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax, TKNoMin, (TKNoMax+0.5)*3.-0.5,""); + NumberOfTracksVsLS->getTH1()->SetBit(TH1::kCanRebin); + NumberOfTracksVsLS->setAxisTitle("#Lumi section",1); + NumberOfTracksVsLS->setAxisTitle("Number of Tracks",2); + + histname = "NumberOfRecHitsPerTrackVsLS_" + CategoryName; + NumberOfRecHitsPerTrackVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax,0.,40.,""); + NumberOfRecHitsPerTrackVsLS->getTH1()->SetBit(TH1::kCanRebin); + NumberOfRecHitsPerTrackVsLS->setAxisTitle("#Lumi section",1); + NumberOfRecHitsPerTrackVsLS->setAxisTitle("Mean number of RecHits per track",2); + + if (doFractionPlot_) { + histname = "GoodTracksFractionVsLS_"+ CategoryName; + GoodTracksFractionVsLS = dqmStore_->bookProfile(histname,histname, LSBin,LSMin,LSMax,0,1.1,""); + GoodTracksFractionVsLS->getTH1()->SetBit(TH1::kCanRebin); + GoodTracksFractionVsLS->setAxisTitle("#Lumi section",1); + GoodTracksFractionVsLS->setAxisTitle("Fraction of Good Tracks",2); + } + } + + // book PU monitoring plots : + //--------------------------- + + if ( doPUmonitoring_ ) { + + for (size_t i=0; ibeginJob(dqmStore_); + + dqmStore_->setCurrentFolder(MEFolderName+"/PUmonitoring"); + + if ( doPlotsVsGoodPVtx_ ) { + // get binning from the configuration + int GoodPVtxBin = conf_.getParameter("GoodPVtxBin"); + double GoodPVtxMin = conf_.getParameter("GoodPVtxMin"); + double GoodPVtxMax = conf_.getParameter("GoodPVtxMax"); + + histname = "NumberOfTracksVsGoodPVtx"; + NumberOfTracksVsGoodPVtx = dqmStore_->bookProfile(histname,histname,GoodPVtxBin,GoodPVtxMin,GoodPVtxMax,TKNoMin, (TKNoMax+0.5)*3.-0.5,""); + NumberOfTracksVsGoodPVtx->getTH1()->SetBit(TH1::kCanRebin); + NumberOfTracksVsGoodPVtx->setAxisTitle("Number of PV",1); + NumberOfTracksVsGoodPVtx->setAxisTitle("Mean number of Tracks per Event",2); + + } + + if ( doPlotsVsBXlumi_ ) { + // get binning from the configuration + edm::ParameterSet BXlumiParameters = conf_.getParameter("BXlumiSetup"); + int BXlumiBin = BXlumiParameters.getParameter("BXlumiBin"); + double BXlumiMin = BXlumiParameters.getParameter("BXlumiMin"); + double BXlumiMax = BXlumiParameters.getParameter("BXlumiMax"); + + histname = "NumberOfTracksVsBXlumi_"+ CategoryName; + NumberOfTracksVsBXlumi = dqmStore_->bookProfile(histname,histname, BXlumiBin,BXlumiMin,BXlumiMax, TKNoMin, TKNoMax,""); + NumberOfTracksVsBXlumi->getTH1()->SetBit(TH1::kCanRebin); + NumberOfTracksVsBXlumi->setAxisTitle("lumi BX [10^{30}Hzcm^{-2}]",1); + NumberOfTracksVsBXlumi->setAxisTitle("Mean number of Tracks",2); + + } + } + + theTrackAnalyzer->beginRun(dqmStore_); + + // book the Seed Property histograms + // ---------------------------------------------------------------------------------// + + dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); + + doAllSeedPlots = conf_.getParameter("doSeedParameterHistos"); + doSeedNumberPlot = conf_.getParameter("doSeedNumberHisto"); + doSeedLumiAnalysis_ = conf_.getParameter("doSeedLumiAnalysis"); + doSeedVsClusterPlot = conf_.getParameter("doSeedVsClusterHisto"); + // if (doAllPlots) doAllSeedPlots=true; + + runTrackBuildingAnalyzerForSeed=(doAllSeedPlots || conf_.getParameter("doSeedPTHisto") ||conf_.getParameter("doSeedETAHisto") || conf_.getParameter("doSeedPHIHisto") || conf_.getParameter("doSeedPHIVsETAHisto") || conf_.getParameter("doSeedThetaHisto") || conf_.getParameter("doSeedQHisto") || conf_.getParameter("doSeedDxyHisto") || conf_.getParameter("doSeedDzHisto") || conf_.getParameter("doSeedNRecHitsHisto") || conf_.getParameter("doSeedNVsPhiProf")|| conf_.getParameter("doSeedNVsEtaProf")); + + edm::InputTag seedProducer = conf_.getParameter("SeedProducer"); + + if (doAllSeedPlots || doSeedNumberPlot){ + dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); + histname = "NumberOfSeeds_"+ seedProducer.label() + "_"+ CategoryName; + NumberOfSeeds = dqmStore_->book1D(histname, histname, TKNoSeedBin, TKNoSeedMin, TKNoSeedMax); + NumberOfSeeds->setAxisTitle("Number of Seeds per Event", 1); + NumberOfSeeds->setAxisTitle("Number of Events", 2); + + if ( doSeedLumiAnalysis_ ) { + dqmStore_->setCurrentFolder(MEFolderName+"/LSanalysis"); + histname = "NumberOfSeeds_lumiFlag_"+ seedProducer.label() + "_"+ CategoryName; + NumberOfSeeds_lumiFlag = dqmStore_->book1D(histname, histname, TKNoSeedBin, TKNoSeedMin, TKNoSeedMax); + NumberOfSeeds_lumiFlag->setAxisTitle("Number of Seeds per Event", 1); + NumberOfSeeds_lumiFlag->setAxisTitle("Number of Events", 2); + } + + } + + if (doAllSeedPlots || doSeedVsClusterPlot){ + dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); + + ClusterLabels= conf_.getParameter >("ClusterLabels"); + + std::vector histoMin,histoMax; + std::vector histoBin; //these vectors are for max min and nbins in histograms + + int NClusPxBin = conf_.getParameter( "NClusPxBin"); + double NClusPxMin = conf_.getParameter("NClusPxMin"); + double NClusPxMax = conf_.getParameter("NClusPxMax"); + + int NClusStrBin = conf_.getParameter( "NClusStrBin"); + double NClusStrMin = conf_.getParameter("NClusStrMin"); + double NClusStrMax = conf_.getParameter("NClusStrMax"); + + setMaxMinBin(histoMin,histoMax,histoBin,NClusStrMin,NClusStrMax,NClusStrBin,NClusPxMin,NClusPxMax,NClusPxBin); + + for (uint i=0; i(dqmStore_->book2D(histname, histname, histoBin[i], histoMin[i], histoMax[i], + TKNoSeedBin, TKNoSeedMin, TKNoSeedMax))); + SeedsVsClusters[i]->setAxisTitle("Number of Clusters", 1); + SeedsVsClusters[i]->setAxisTitle("Number of Seeds", 2); + } + } + + doTkCandPlots=conf_.getParameter("doTrackCandHistos"); + // if (doAllPlots) doTkCandPlots=true; + + if (doTkCandPlots){ + dqmStore_->setCurrentFolder(MEFolderName+"/TrackBuilding"); + + edm::InputTag tcProducer = conf_.getParameter("TCProducer"); + + histname = "NumberOfTrackCandidates_"+ tcProducer.label() + "_"+ CategoryName; + NumberOfTrackCandidates = dqmStore_->book1D(histname, histname, TCNoBin, TCNoMin, TCNoMax); + NumberOfTrackCandidates->setAxisTitle("Number of Track Candidates per Event", 1); + NumberOfTrackCandidates->setAxisTitle("Number of Event", 2); + } + + theTrackBuildingAnalyzer->beginRun(dqmStore_); + + + if (doLumiAnalysis) { + if ( NumberOfTracks_lumiFlag ) NumberOfTracks_lumiFlag -> setLumiFlag(); + theTrackAnalyzer->setLumiFlag(); + } + if(doAllSeedPlots || doSeedNumberPlot){ + if ( doSeedLumiAnalysis_ ) + NumberOfSeeds_lumiFlag->setLumiFlag(); + } + + if (doTrackerSpecific_ || doAllPlots) { + + ClusterLabels= conf_.getParameter >("ClusterLabels"); + + std::vector histoMin,histoMax; + std::vector histoBin; //these vectors are for max min and nbins in histograms + + int NClusStrBin = conf_.getParameter( "NClusStrBin"); + double NClusStrMin = conf_.getParameter("NClusStrMin"); + double NClusStrMax = conf_.getParameter("NClusStrMax"); + + int NClusPxBin = conf_.getParameter( "NClusPxBin"); + double NClusPxMin = conf_.getParameter("NClusPxMin"); + double NClusPxMax = conf_.getParameter("NClusPxMax"); + + int NTrk2DBin = conf_.getParameter( "NTrk2DBin"); + double NTrk2DMin = conf_.getParameter("NTrk2DMin"); + double NTrk2DMax = conf_.getParameter("NTrk2DMax"); + + setMaxMinBin(histoMin,histoMax,histoBin, + NClusStrMin,NClusStrMax,NClusStrBin, + NClusPxMin, NClusPxMax, NClusPxBin); + + dqmStore_->setCurrentFolder(MEFolderName+"/HitProperties"); + + for (uint i=0; isetCurrentFolder(MEFolderName+"/HitProperties"); + histname = "TracksVs" + ClusterLabels[i] + "Cluster_" + CategoryName; + NumberOfTrkVsClusters.push_back(dynamic_cast(dqmStore_->book2D(histname, histname, + histoBin[i], histoMin[i], histoMax[i], + NTrk2DBin,NTrk2DMin,NTrk2DMax + ))); + std::string title = "Number of " + ClusterLabels[i] + " Clusters"; + if(ClusterLabels[i].compare("Tot")==0) + title = "# of Clusters in (Pixel+Strip) Detectors"; + NumberOfTrkVsClusters[i]->setAxisTitle(title, 1); + NumberOfTrkVsClusters[i]->setAxisTitle("Number of Tracks", 2); + } + } + // Initialize the GenericTriggerEventFlag if ( genTriggerEventFlag_->on() ) genTriggerEventFlag_->initRun( iRun, iSetup ); } @@ -553,20 +457,18 @@ void TrackingMonitor::beginRun(const edm::Run& iRun, const edm::EventSetup& iSet void TrackingMonitor::beginLuminosityBlock(const edm::LuminosityBlock& lumi, const edm::EventSetup& eSetup) { if (doLumiAnalysis) { -// dqmStore_->softReset(NumberOfTracks); -// dqmStore_->softReset(NumberOfGoodTracks); -// dqmStore_->softReset(FractionOfGoodTracks); -// theTrackAnalyzer->doSoftReset(dqmStore_); - if ( NumberOfTracks_lumiFlag ) NumberOfTracks_lumiFlag -> Reset(); - if ( doGoodTrackPlots_ ) - if ( NumberOfGoodTracks_lumiFlag ) NumberOfGoodTracks_lumiFlag -> Reset(); - theTrackAnalyzer->doReset(dqmStore_); + if ( NumberOfTracks_lumiFlag ) NumberOfTracks_lumiFlag -> Reset(); + theTrackAnalyzer->doReset(dqmStore_); + } + if(doAllSeedPlots || doSeedNumberPlot) { + if ( doSeedLumiAnalysis_ ) + NumberOfSeeds_lumiFlag->Reset(); } } // -- Analyse // ---------------------------------------------------------------------------------// -void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) +void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { // Filter out events if Trigger Filtering is requested if (genTriggerEventFlag_->on()&& ! genTriggerEventFlag_->accept( iEvent, iSetup) ) return; @@ -577,258 +479,204 @@ void TrackingMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& i // get the track collection edm::Handle trackHandle; - // iEvent.getByLabel(trackProducer, trackHandle); iEvent.getByToken(trackToken_, trackHandle); - if (trackHandle.isValid()) - { - - reco::TrackCollection trackCollection = *trackHandle; - // calculate the mean # rechits and layers - int totalNumTracks = 0, totalRecHits = 0, totalLayers = 0; - int totalNumHPTracks = 0, totalNumPt1Tracks = 0, totalNumHPPt1Tracks = 0; - double frac = 0.; - for (reco::TrackCollection::const_iterator track = trackCollection.begin(); track!=trackCollection.end(); ++track) - { - - if( track->quality(reco::TrackBase::highPurity) ) { - ++totalNumHPTracks; - if ( track->pt() >= 1. ) { - ++totalNumHPPt1Tracks; - if ( doProfilesVsLS_ || doAllPlots) - if ( doGoodTrackPlots_ || doAllPlots ) { - GoodTracksNumberOfRecHitsPerTrackVsLS->Fill(static_cast(iEvent.id().luminosityBlock()),track->recHitsSize()); - } - } - } - - if ( track->pt() >= 1. ) ++totalNumPt1Tracks; - - - if( Quality_ == "highPurity") - { - if( !track->quality(reco::TrackBase::highPurity) ) continue; - } - else if( Quality_ == "tight") - { - if( !track->quality(reco::TrackBase::tight) ) continue; - } - else if( Quality_ == "loose") - { - if( !track->quality(reco::TrackBase::loose) ) continue; - } - - totalNumTracks++; - totalRecHits += track->numberOfValidHits(); - totalLayers += track->hitPattern().trackerLayersWithMeasurement(); - - // do analysis per track - theTrackAnalyzer->analyze(iEvent, iSetup, *track); - } - - if (totalNumPt1Tracks > 0) frac = static_cast(totalNumHPPt1Tracks)/static_cast(totalNumPt1Tracks); + int numberOfAllTracks = 0; + edm::Handle allTrackHandle; + iEvent.getByToken(allTrackToken_,allTrackHandle); + if (allTrackHandle.isValid()) { + numberOfAllTracks = allTrackHandle->size(); + } + + if (trackHandle.isValid()) { + + int numberOfTracks = trackHandle->size(); + + reco::TrackCollection trackCollection = *trackHandle; + // calculate the mean # rechits and layers + int totalRecHits = 0, totalLayers = 0; + + for (reco::TrackCollection::const_iterator track = trackCollection.begin(); + track!=trackCollection.end(); ++track) { + + if ( doProfilesVsLS_ || doAllPlots) + NumberOfRecHitsPerTrackVsLS->Fill(static_cast(iEvent.id().luminosityBlock()),track->recHitsSize()); + + totalRecHits += track->numberOfValidHits(); + totalLayers += track->hitPattern().trackerLayersWithMeasurement(); + + // do analysis per track + theTrackAnalyzer->analyze(iEvent, iSetup, *track); + } - if (doGeneralPropertiesPlots_ || doAllPlots){ - NumberOfTracks -> Fill(totalNumTracks); - NumberOfGoodTracks -> Fill(totalNumHPPt1Tracks); + double frac = -1.; + if (numberOfAllTracks > 0) frac = static_cast(numberOfTracks)/static_cast(numberOfAllTracks); + + if (doGeneralPropertiesPlots_ || doAllPlots){ + NumberOfTracks -> Fill(numberOfTracks); + if (doFractionPlot_) FractionOfGoodTracks -> Fill(frac); - } - if ( doProfilesVsLS_ || doAllPlots) { - NumberOfTracksVsLS->Fill(static_cast(iEvent.id().luminosityBlock()),totalNumTracks); - if ( doGoodTrackPlots_ || doAllPlots ) { - NumberOfGoodTracksVsLS->Fill(static_cast(iEvent.id().luminosityBlock()),totalNumHPPt1Tracks); - GoodTracksFractionVsLS->Fill(static_cast(iEvent.id().luminosityBlock()),frac); - } + if( numberOfTracks > 0 ) { + double meanRecHits = static_cast(totalRecHits) / static_cast(numberOfTracks); + double meanLayers = static_cast(totalLayers) / static_cast(numberOfTracks); + NumberOfMeanRecHitsPerTrack -> Fill(meanRecHits); + NumberOfMeanLayersPerTrack -> Fill(meanLayers); } - - if ( doLumiAnalysis ) { - NumberOfTracks_lumiFlag -> Fill(totalNumTracks); - if ( doGoodTrackPlots_ ) - NumberOfGoodTracks_lumiFlag -> Fill(totalNumHPPt1Tracks); + } + + if ( doProfilesVsLS_ || doAllPlots) { + NumberOfTracksVsLS ->Fill(static_cast(iEvent.id().luminosityBlock()),numberOfTracks); + if (doFractionPlot_) + GoodTracksFractionVsLS->Fill(static_cast(iEvent.id().luminosityBlock()),frac); + } + + if ( doLumiAnalysis ) { + NumberOfTracks_lumiFlag -> Fill(numberOfTracks); + } + + + // Analyse the Track Building variables + // if the collection is empty, do not fill anything + // ---------------------------------------------------------------------------------// + + + // fill the TrackCandidate info + if (doTkCandPlots) { + // magnetic field + edm::ESHandle theMF; + iSetup.get().get(theMF); + + // get the candidate collection + edm::Handle theTCHandle; + iEvent.getByToken( trackCandidateToken_, theTCHandle ); + const TrackCandidateCollection& theTCCollection = *theTCHandle; + + if (theTCHandle.isValid()) { + + // get the beam spot + edm::Handle recoBeamSpotHandle; + iEvent.getByToken(bsSrcToken_, recoBeamSpotHandle ); + const reco::BeamSpot& bs = *recoBeamSpotHandle; + + NumberOfTrackCandidates->Fill(theTCCollection.size()); + iSetup.get().get(builderName,theTTRHBuilder); + for( TrackCandidateCollection::const_iterator cand = theTCCollection.begin(); cand != theTCCollection.end(); ++cand) { + + theTrackBuildingAnalyzer->analyze(iEvent, iSetup, *cand, bs, theMF, theTTRHBuilder); + } + } else { + edm::LogWarning("TrackingMonitor") << "No Track Candidates in the event. Not filling associated histograms"; } - - if (doGeneralPropertiesPlots_ || doAllPlots){ - if( totalNumTracks > 0 ) - { - double meanRecHits = static_cast(totalRecHits) / static_cast(totalNumTracks); - double meanLayers = static_cast(totalLayers) / static_cast(totalNumTracks); - NumberOfMeanRecHitsPerTrack -> Fill(meanRecHits); - NumberOfMeanLayersPerTrack -> Fill(meanLayers); - } + } + + //plots for trajectory seeds + + if (doAllSeedPlots || doSeedNumberPlot || doSeedVsClusterPlot || runTrackBuildingAnalyzerForSeed) { + + // get the seed collection + edm::Handle > seedHandle; + iEvent.getByToken(seedToken_, seedHandle ); + const edm::View& seedCollection = *seedHandle; + + // fill the seed info + if (seedHandle.isValid()) { + + if(doAllSeedPlots || doSeedNumberPlot) { + NumberOfSeeds->Fill(seedCollection.size()); + if ( doSeedLumiAnalysis_ ) + NumberOfSeeds_lumiFlag->Fill(seedCollection.size()); } - - // Analyse the Track Building variables - // if the collection is empty, do not fill anything - // ---------------------------------------------------------------------------------// - - - // fill the TrackCandidate info - if (doTkCandPlots) - { - - // magnetic field - edm::ESHandle theMF; - iSetup.get().get(theMF); - - // get the beam spot - edm::Handle recoBeamSpotHandle; - // iEvent.getByLabel(bsSrc_,recoBeamSpotHandle); - iEvent.getByToken(bsSrcToken_, recoBeamSpotHandle ); - const reco::BeamSpot& bs = *recoBeamSpotHandle; - - // get the candidate collection - edm::Handle theTCHandle; - // iEvent.getByLabel(tcProducer, theTCHandle ); - iEvent.getByToken( trackCandidateToken_, theTCHandle ); - const TrackCandidateCollection& theTCCollection = *theTCHandle; - - if (theTCHandle.isValid()) - { - NumberOfTrackCandidates->Fill(theTCCollection.size()); - iSetup.get().get(builderName,theTTRHBuilder); - for( TrackCandidateCollection::const_iterator cand = theTCCollection.begin(); cand != theTCCollection.end(); ++cand) - { - theTrackBuildingAnalyzer->analyze(iEvent, iSetup, *cand, bs, theMF, theTTRHBuilder); - } - } - else - { - edm::LogWarning("TrackingMonitor") << "No Track Candidates in the event. Not filling associated histograms"; - } - } - - //plots for trajectory seeds - - if (doAllSeedPlots || doSeedNumberPlot || doSeedVsClusterPlot || runTrackBuildingAnalyzerForSeed) { - - // get the seed collection - edm::Handle > seedHandle; - // iEvent.getByLabel(seedProducer, seedHandle); - iEvent.getByToken(seedToken_, seedHandle ); - const edm::View& seedCollection = *seedHandle; - - // fill the seed info - if (seedHandle.isValid()) - { - if(doAllSeedPlots || doSeedNumberPlot) NumberOfSeeds->Fill(seedCollection.size()); - - if(doAllSeedPlots || doSeedVsClusterPlot){ - - std::vector NClus; - setNclus(iEvent,NClus); - for (uint i=0; i< ClusterLabels.size(); i++){ - SeedsVsClusters[i]->Fill(NClus[i],seedCollection.size()); - } - } - - if (doAllSeedPlots || runTrackBuildingAnalyzerForSeed){ - - //here duplication of mag field and be informations is needed to allow seed and track cand histos to be independent - // magnetic field - edm::ESHandle theMF; - iSetup.get().get(theMF); - - // get the beam spot - edm::Handle recoBeamSpotHandle; - // iEvent.getByLabel(bsSrc_,recoBeamSpotHandle); - iEvent.getByToken(bsSrcToken_, recoBeamSpotHandle ); - const reco::BeamSpot& bs = *recoBeamSpotHandle; - - iSetup.get().get(builderName,theTTRHBuilder); - for(size_t i=0; i < seedHandle->size(); ++i) - { - edm::RefToBase seed(seedHandle, i); - theTrackBuildingAnalyzer->analyze(iEvent, iSetup, *seed, bs, theMF, theTTRHBuilder); - } - } - - } - else - { - edm::LogWarning("TrackingMonitor") << "No Trajectory seeds in the event. Not filling associated histograms"; - } - } - - - if (doTrackerSpecific_ || doAllPlots) - { + + if(doAllSeedPlots || doSeedVsClusterPlot){ + std::vector NClus; setNclus(iEvent,NClus); for (uint i=0; i< ClusterLabels.size(); i++){ - NumberOfTrkVsClusters[i]->Fill(NClus[i],totalNumTracks); + SeedsVsClusters[i]->Fill(NClus[i],seedCollection.size()); } - if ( doGoodTrackPlots_ || doAllPlots ) { - for (uint i=0; i< ClusterLabels.size(); i++){ - if(ClusterLabels[i].compare("Tot")==0){ - NumberOfGoodTrkVsClus->Fill( NClus[i],totalNumHPPt1Tracks); - } - } + } + + if (doAllSeedPlots || runTrackBuildingAnalyzerForSeed){ + + //here duplication of mag field and be informations is needed to allow seed and track cand histos to be independent + // magnetic field + edm::ESHandle theMF; + iSetup.get().get(theMF); + + // get the beam spot + edm::Handle recoBeamSpotHandle; + iEvent.getByToken(bsSrcToken_, recoBeamSpotHandle ); + const reco::BeamSpot& bs = *recoBeamSpotHandle; + + iSetup.get().get(builderName,theTTRHBuilder); + for(size_t i=0; i < seedHandle->size(); ++i) { + + edm::RefToBase seed(seedHandle, i); + theTrackBuildingAnalyzer->analyze(iEvent, iSetup, *seed, bs, theMF, theTTRHBuilder); } - } - - if ( doPUmonitoring_ ) { - - // do vertex monitoring - for (size_t i=0; ianalyze(iEvent, iSetup); - - if ( doPlotsVsGoodPVtx_ ) { - - size_t totalNumGoodPV = 0; - edm::Handle< reco::VertexCollection > pvHandle; - // iEvent.getByLabel(primaryVertexInputTag, pvHandle ); - iEvent.getByToken(pvSrcToken_, pvHandle ); - if (pvHandle.isValid()) - { - - for (reco::VertexCollection::const_iterator pv = pvHandle->begin(); - pv != pvHandle->end(); ++pv) { - - //--- pv fake (the pv collection should have size==1 and the pv==beam spot) - if (pv->isFake() || pv->tracksSize()==0) continue; - - // definition of goodOfflinePrimaryVertex - if (pv->ndof() < 4. || pv->z() > 24.) continue; - totalNumGoodPV++; - } - - NumberOfTracksVsGoodPVtx -> Fill( totalNumGoodPV, totalNumTracks ); - NumberOfGoodTracksVsGoodPVtx -> Fill( totalNumGoodPV, totalNumHPPt1Tracks ); - FractionOfGoodTracksVsGoodPVtx -> Fill( totalNumGoodPV, frac ); - } - } - - if ( doPlotsVsBXlumi_ ) { - - double bxlumi = theLumiDetails_->getValue(iEvent); - - NumberOfTracksVsBXlumi -> Fill( bxlumi, totalNumTracks ); - NumberOfGoodTracksVsBXlumi -> Fill( bxlumi, totalNumHPPt1Tracks ); - FractionOfGoodTracksVsBXlumi -> Fill( bxlumi, frac ); - } - - } - - } - + } + + } else { + edm::LogWarning("TrackingMonitor") << "No Trajectory seeds in the event. Not filling associated histograms"; + } + } + + + if (doTrackerSpecific_ || doAllPlots) { + + std::vector NClus; + setNclus(iEvent,NClus); + for (uint i=0; i< ClusterLabels.size(); i++) { + NumberOfTrkVsClusters[i]->Fill(NClus[i],numberOfTracks); + } + } + + if ( doPUmonitoring_ ) { + + // do vertex monitoring + for (size_t i=0; ianalyze(iEvent, iSetup); + + if ( doPlotsVsGoodPVtx_ ) { + + size_t totalNumGoodPV = 0; + edm::Handle< reco::VertexCollection > pvHandle; + iEvent.getByToken(pvSrcToken_, pvHandle ); + if (pvHandle.isValid()) { + + for (reco::VertexCollection::const_iterator pv = pvHandle->begin(); + pv != pvHandle->end(); ++pv) { + + //--- pv fake (the pv collection should have size==1 and the pv==beam spot) + if (pv->isFake() || pv->tracksSize()==0) continue; + + // definition of goodOfflinePrimaryVertex + if (pv->ndof() < 4. || pv->z() > 24.) continue; + totalNumGoodPV++; + } + + NumberOfTracksVsGoodPVtx -> Fill( totalNumGoodPV, numberOfTracks ); + } + } + + if ( doPlotsVsBXlumi_ ) { + double bxlumi = theLumiDetails_->getValue(iEvent); + NumberOfTracksVsBXlumi -> Fill( bxlumi, numberOfTracks ); + } + + } // PU monitoring + + } // trackHandle is valid + } -void TrackingMonitor::endRun(const edm::Run&, const edm::EventSetup&) +void TrackingMonitor::endRun(const edm::Run&, const edm::EventSetup&) { - if (doLumiAnalysis) { - /* - dqmStore_->disableSoftReset(NumberOfTracks); - dqmStore_->disableSoftReset(NumberOfGoodTracks); - dqmStore_->disableSoftReset(FractionOfGoodTracks); - theTrackAnalyzer->undoSoftReset(dqmStore_); - */ - } - } -void TrackingMonitor::endJob(void) +void TrackingMonitor::endJob(void) { bool outputMEsInRootFile = conf_.getParameter("OutputMEsInRootFile"); std::string outputFileName = conf_.getParameter("OutputFileName"); @@ -839,52 +687,49 @@ void TrackingMonitor::endJob(void) } } -void TrackingMonitor::setMaxMinBin(std::vector &arrayMin, std::vector &arrayMax, std::vector &arrayBin, double smin, double smax, int sbin, double pmin, double pmax, int pbin) +void TrackingMonitor::setMaxMinBin(std::vector &arrayMin, std::vector &arrayMax, std::vector &arrayBin, double smin, double smax, int sbin, double pmin, double pmax, int pbin) { arrayMin.resize(ClusterLabels.size()); arrayMax.resize(ClusterLabels.size()); arrayBin.resize(ClusterLabels.size()); - for (uint i=0; i &arrayNclus) +void TrackingMonitor::setNclus(const edm::Event& iEvent,std::vector &arrayNclus) { int ncluster_pix=-1; int ncluster_strip=-1; edm::Handle< edmNew::DetSetVector > strip_clusters; - // iEvent.getByLabel("siStripClusters", strip_clusters); iEvent.getByToken(stripClustersToken_, strip_clusters ); edm::Handle< edmNew::DetSetVector > pixel_clusters; - // iEvent.getByLabel("siPixelClusters", pixel_clusters); iEvent.getByToken(pixelClustersToken_, pixel_clusters ); - if (strip_clusters.isValid() && pixel_clusters.isValid()) - { - ncluster_pix = (*pixel_clusters).dataSize(); - ncluster_strip = (*strip_clusters).dataSize(); - } + if (strip_clusters.isValid() && pixel_clusters.isValid()) { + ncluster_pix = (*pixel_clusters).dataSize(); + ncluster_strip = (*strip_clusters).dataSize(); + } arrayNclus.resize(ClusterLabels.size()); for (uint i=0; i #include "TMath.h" -dEdxAnalyzer::dEdxAnalyzer(const edm::ParameterSet& iConfig) +dEdxAnalyzer::dEdxAnalyzer(const edm::ParameterSet& iConfig) : dqmStore_( edm::Service().operator->() ) , fullconf_( iConfig ) , conf_ (fullconf_.getParameter("dEdxParameters") ) , doAllPlots_ ( conf_.getParameter("doAllPlots") ) - , doDeDxPlots_ ( conf_.getParameter("doDeDxPlots") ) - , genTriggerEventFlag_( new GenericTriggerEventFlag(conf_, consumesCollector()) ) + , doDeDxPlots_ ( conf_.getParameter("doDeDxPlots") ) + , genTriggerEventFlag_( new GenericTriggerEventFlag(conf_,consumesCollector()) ) { trackInputTag_ = edm::InputTag(conf_.getParameter("TracksForDeDx") ); @@ -37,15 +37,15 @@ dEdxAnalyzer::dEdxAnalyzer(const edm::ParameterSet& iConfig) } } -dEdxAnalyzer::~dEdxAnalyzer() -{ +dEdxAnalyzer::~dEdxAnalyzer() +{ if (genTriggerEventFlag_) delete genTriggerEventFlag_; } // ------------ method called once each job just after ending the event loop ------------ -void -dEdxAnalyzer::endJob() +void +dEdxAnalyzer::endJob() { bool outputMEsInRootFile = conf_.getParameter("OutputMEsInRootFile"); std::string outputFileName = conf_.getParameter("OutputFileName"); @@ -60,7 +60,7 @@ dEdxAnalyzer::endJob() //---------------------------------------------------------------------------------// void dEdxAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { - + // Initialize the GenericTriggerEventFlag if ( genTriggerEventFlag_->on() ) genTriggerEventFlag_->initRun( iRun, iSetup ); } @@ -69,7 +69,7 @@ void dEdxAnalyzer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) void dEdxAnalyzer::beginJob() { // parameters from the configuration - std::string MEFolderName = conf_.getParameter("FolderName"); + std::string MEFolderName = conf_.getParameter("FolderName"); // get binning from the configuration TrackHitMin = conf_.getParameter("TrackHitMin"); @@ -88,11 +88,11 @@ void dEdxAnalyzer::beginJob() double dEdxMax = conf_.getParameter("dEdxMax"); int dEdxHIPmassBin = conf_.getParameter( "dEdxHIPmassBin"); - double dEdxHIPmassMin = conf_.getParameter("dEdxHIPmassMin"); + double dEdxHIPmassMin = conf_.getParameter("dEdxHIPmassMin"); double dEdxHIPmassMax = conf_.getParameter("dEdxHIPmassMax"); int dEdxMIPmassBin = conf_.getParameter( "dEdxMIPmassBin"); - double dEdxMIPmassMin = conf_.getParameter("dEdxMIPmassMin"); + double dEdxMIPmassMin = conf_.getParameter("dEdxMIPmassMin"); double dEdxMIPmassMax = conf_.getParameter("dEdxMIPmassMax"); dqmStore_->setCurrentFolder(MEFolderName); @@ -105,7 +105,7 @@ void dEdxAnalyzer::beginJob() dqmStore_->setCurrentFolder(MEFolderName+"/"+ dEdxInputList_[i]); dEdxMEsVector.push_back(dEdxMEs() ); - histname = "MIP_dEdxPerTrack_"; + histname = "MIP_dEdxPerTrack_"; dEdxMEsVector[i].ME_MipDeDx = dqmStore_->book1D(histname, histname, dEdxBin, dEdxMin, dEdxMax); dEdxMEsVector[i].ME_MipDeDx->setAxisTitle("dEdx of each MIP Track (MeV/cm)"); dEdxMEsVector[i].ME_MipDeDx->setAxisTitle("Number of Tracks", 2); @@ -115,7 +115,7 @@ void dEdxAnalyzer::beginJob() dEdxMEsVector[i].ME_MipDeDxNHits->setAxisTitle("Number of dEdxHits of each MIP Track"); dEdxMEsVector[i].ME_MipDeDxNHits->setAxisTitle("Number of Tracks", 2); - histname = "MIP_FractionOfSaturateddEdxHitsPerTrack_"; + histname = "MIP_FractionOfSaturateddEdxHitsPerTrack_"; dEdxMEsVector[i].ME_MipDeDxNSatHits = dqmStore_->book1D(histname, histname,2*dEdxNHitBin, 0, 1); dEdxMEsVector[i].ME_MipDeDxNSatHits->setAxisTitle("Fraction of Saturated dEdxHits of each MIP Track"); dEdxMEsVector[i].ME_MipDeDxNSatHits->setAxisTitle("Number of Tracks", 2); @@ -161,14 +161,14 @@ void dEdxAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet iEvent.getByToken(dEdxTokenList_[i], dEdxObjectHandle ); if(!dEdxObjectHandle.isValid())continue; const edm::ValueMap dEdxColl = *dEdxObjectHandle.product(); - - + + for(unsigned int t=0; tsize(); t++){ reco::TrackRef track = reco::TrackRef( trackCollectionHandle, t ); if(track->quality(reco::TrackBase::highPurity) ) { - //MIPs + //MIPs if( track->pt() >= 5.0 && track->numberOfValidHits()>TrackHitMin){ dEdxMEsVector[i].ME_MipDeDx ->Fill(dEdxColl[track].dEdx()); dEdxMEsVector[i].ME_MipDeDxNHits ->Fill(dEdxColl[track].numberOfMeasurements()); @@ -186,15 +186,15 @@ void dEdxAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet } } + - -void +void dEdxAnalyzer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) { } // ------------ method called when ending the processing of a luminosity block ------------ -void +void dEdxAnalyzer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) { } diff --git a/DQM/TrackingMonitorClient/BuildFile.xml b/DQM/TrackingMonitorClient/BuildFile.xml new file mode 100644 index 0000000000000..4b6025ac0c6e7 --- /dev/null +++ b/DQM/TrackingMonitorClient/BuildFile.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/DQM/TrackingMonitorClient/data/tracking_qualitytest_config_tier0.xml b/DQM/TrackingMonitorClient/data/tracking_qualitytest_config_tier0.xml new file mode 100644 index 0000000000000..3ca577b848961 --- /dev/null +++ b/DQM/TrackingMonitorClient/data/tracking_qualitytest_config_tier0.xml @@ -0,0 +1,154 @@ + + + ContentsXRange + 0.2 + 0.4 + 0 + 10.0 + + + ContentsXRange + 0.85 + 0.95 + 0.0 + 800.0 + + + + ContentsXRange + 0.80 + 0.90 + 5.0 + 35.0 + + + + ContentsXRange + 0.80 + 0.90 + 8.0 + 15.0 + + + + ContentsXRange + 0.80 + 0.90 + 5.0 + 35.0 + + + + ContentsXRange + 0.85 + 0.95 + 0.5 + 1.5 + + + + ContentsXRange + 0.85 + 0.95 + 0 + 200.0 + + + ContentsXRange + 0.85 + 0.95 + 0.7 + 1.1 + + + MeanWithinExpected + 0.75 + 0.90 + 1.0 + 0 + 0 + 1 + 0 + 0.5 + 50000.0 + + + CheckVariance + 0.05 + 0.04 + + + CheckVariance + 0.05 + 0.04 + + + CheckVariance + 0.05 + 0.04 + + + CheckVariance + 0.05 + 0.04 + + + CheckVariance + 0.05 + 0.04 + + + CheckVariance + 0.05 + 0.04 + + + XrangeWithin:NumberOfTracks + + + XrangeWithin:TrackNumberOfRecHitsPerTrack + + + MeanWithinExpected:TrackNumberOfRecHitsPerTrack + + + MeanWithinExpected:TrackChi2oNDF + + + XrangeWithin:TrackPt + + + XrangeWithin:FractionOfGoodTracks + + + MeanWithinExpected:TrackSeed + + + CheckVariance:BPixLayersPerTrackVsPhi + + + CheckVariance:BPixLayersPerTrackVsPhi + + + CheckVariance:BPixLayersPerTrackVsPhi + + + CheckVariance:BPixLayersPerTrackVsPhi + + + CheckVariance:BPixLayersPerTrackVsPhi + + + CheckVariance:BPixLayersPerTrackVsPhi + + diff --git a/DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h b/DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h new file mode 100644 index 0000000000000..d653dd3d40dd5 --- /dev/null +++ b/DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h @@ -0,0 +1,57 @@ +#ifndef _TrackingActionExecutor_h_ +#define _TrackingActionExecutor_h_ + +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include +#include +#include +#include +#include +#include + +class SiStripSummaryCreator; +class DQMStore; +class MonitorUserInterface; +class SiStripTrackerMapCreator; +class TrackingQualityChecker; +class SiStripFedCabling; +class SiStripDetCabling; +class SiStripConfigWriter; + +class TrackingActionExecutor { + + public: + + TrackingActionExecutor(edm::ParameterSet const& ps); + virtual ~TrackingActionExecutor(); + + + void createGlobalStatus(DQMStore* dqm_store); + void createLSStatus(DQMStore* dqm_store); + void fillDummyGlobalStatus(); + void fillDummyLSStatus(); + void fillGlobalStatus(DQMStore* dqm_store); + void fillStatusAtLumi(DQMStore* dqm_store); + + void createDummyShiftReport(); + void createShiftReport(DQMStore * dqm_store); + void printReportSummary(MonitorElement* me, std::ostringstream& str_val, std::string name); + void printShiftHistoParameters(DQMStore * dqm_store, + std::map >&layout_map,std::ostringstream& str_val); + + private: + + std::vector tkMapMENames; + + TrackingQualityChecker* qualityChecker_; + + SiStripConfigWriter* configWriter_; + + edm::ParameterSet pSet_; + +}; +#endif diff --git a/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h b/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h new file mode 100644 index 0000000000000..267632b2dbbd2 --- /dev/null +++ b/DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h @@ -0,0 +1,113 @@ +#ifndef TrackingMonitorClient_TrackingCertificationInfo_h +#define TrackingMonitorClient_TrackingCertificationInfo_h +// -*- C++ -*- +// +// Package: TrackingMonitorClient +// Class : TrackingCertificationInfo +// +/**\class TrackingCertificationInfo TrackingCertificationInfo.h DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h + + Description: + + Usage: + + +*/ + +#include + +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/EventSetup.h" + +#include +#include +#include +#include +#include + +class DQMStore; +class MonitorElement; +class SiStripDetCabling; + +class TrackingCertificationInfo: public edm::EDAnalyzer { + + public: + + /// Constructor + TrackingCertificationInfo(const edm::ParameterSet& ps); + + /// Destructor + virtual ~TrackingCertificationInfo(); + + private: + + /// BeginJob + void beginJob(); + + /// Begin Run + void beginRun(edm::Run const& run, edm::EventSetup const& eSetup); + + /// End Of Luminosity + void endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& iSetup); + + /// EndRun + void endRun(edm::Run const& run, edm::EventSetup const& eSetup); + + /// Analyze + void analyze(edm::Event const&, edm::EventSetup const&); + + + +private: + + void bookTrackingCertificationMEs(); + void bookTrackingCertificationMEsAtLumi(); + + void resetTrackingCertificationMEs(); + void resetTrackingCertificationMEsAtLumi(); + + void fillTrackingCertificationMEs(edm::EventSetup const& eSetup); + void fillTrackingCertificationMEsAtLumi(); + + void fillDummyTrackingCertification(); + void fillDummyTrackingCertificationAtLumi(); + + + DQMStore* dqmStore_; + + struct TrackingMEs{ + MonitorElement* TrackingFlag; + }; + + struct TrackingLSMEs{ + MonitorElement* TrackingFlag; + }; + + std::map TrackingMEsMap; + std::map TrackingLSMEsMap; + + MonitorElement * TrackingCertification; + MonitorElement * TrackingCertificationSummaryMap; + + MonitorElement * TrackingLSCertification; + + edm::ESHandle< SiStripDetCabling > detCabling_; + edm::ParameterSet pSet_; + + bool trackingCertificationBooked_; + bool trackingLSCertificationBooked_; + int nFEDConnected_; + bool allPixelFEDConnected_; + std::string TopFolderName_; + + bool checkPixelFEDs_; + + unsigned long long m_cacheID_; + + std::vector SubDetFolder; +}; +#endif diff --git a/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h b/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h new file mode 100644 index 0000000000000..4cf8ac939b329 --- /dev/null +++ b/DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h @@ -0,0 +1,77 @@ +#ifndef _TrackingQualityChecker_h_ +#define _TrackingQualityChecker_h_ + +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include +#include +#include +#include +#include +#include + +class DQMStore; +class MonitorElement; +class TkDetMap; +class TrackingDetCabling; + +class TrackingQualityChecker { + + public: + + + TrackingQualityChecker(edm::ParameterSet const& ps); + virtual ~TrackingQualityChecker(); + + + void bookGlobalStatus(DQMStore* dqm_store); + void bookLSStatus(DQMStore* dqm_store); + void resetGlobalStatus(); + void resetLSStatus(); + void fillDummyGlobalStatus(); + void fillDummyLSStatus(); + void fillGlobalStatus(DQMStore* dqm_store); + void fillLSStatus(DQMStore* dqm_store); + + private: + + struct TrackingMEs{ + MonitorElement* TrackingFlag; + std::string HistoDir; + std::string HistoName; + }; + + struct TrackingLSMEs{ + MonitorElement* TrackingFlag; + std::string HistoLSDir; + std::string HistoLSName; + float HistoLSLowerCut; + float HistoLSUpperCut; + }; + + void fillTrackingStatus(DQMStore* dqm_store); + void fillTrackingStatusAtLumi(DQMStore* dqm_store); + + void fillStatusHistogram(MonitorElement*, int xbin, int ybin, float val); + + + std::map TrackingMEsMap; + std::map TrackingLSMEsMap; + + MonitorElement* TrackGlobalSummaryReportMap; + MonitorElement* TrackGlobalSummaryReportGlobal; + + MonitorElement* TrackLSSummaryReportGlobal; + + edm::ParameterSet pSet_; + + bool bookedTrackingGlobalStatus_; + bool bookedTrackingLSStatus_; + + std::string TopFolderName_; + +}; +#endif diff --git a/DQM/TrackingMonitorClient/interface/TrackingUtility.h b/DQM/TrackingMonitorClient/interface/TrackingUtility.h new file mode 100644 index 0000000000000..d9d671cde8e27 --- /dev/null +++ b/DQM/TrackingMonitorClient/interface/TrackingUtility.h @@ -0,0 +1,41 @@ +#ifndef TrackingUtility_H +#define TrackingUtility_H + +/** \class TrackingUtility + * * + * Class that handles the Tracking Quality Tests + * * + */ + +#include +#include +#include +#include +#include + +class MonitorElement; +class DQMStore; +class TrackerTopology; +class TrackingUtility +{ + public: + + static int getMEList(std::string name, std::vector& values); + static bool checkME(std::string element, std::string name, std::string& full_path); + static int getMEList(std::string name, std::string& dir_path, std::vector& me_names); + + static void split(const std::string& str, std::vector& tokens, + const std::string& delimiters=" "); + static void getMEStatusColor(int status, int& rval, int&gval, int& bval); + static void getMEStatusColor(int status, int& icol, std::string& tag); + static int getMEStatus(MonitorElement* me); + static int getMEStatus(MonitorElement* me, int& bad_channels); + static void getModuleFolderList(DQMStore* dqm_store, std::vector& m_ids); + static void getMEValue(MonitorElement* me, std::string & val); + static bool goToDir(DQMStore * dqm_store, std::string name); + static void setBadModuleFlag(std::string & hname, uint16_t& flg); + static void getBadModuleStatus(uint16_t flag, std::string& message); + static void getTopFolderPath(DQMStore* dqm_store, std::string top_dir, std::string& path); +}; + +#endif diff --git a/DQM/TrackingMonitorClient/plugins/BuildFile.xml b/DQM/TrackingMonitorClient/plugins/BuildFile.xml new file mode 100644 index 0000000000000..f5d109afe06f4 --- /dev/null +++ b/DQM/TrackingMonitorClient/plugins/BuildFile.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc new file mode 100644 index 0000000000000..a117d8eeda472 --- /dev/null +++ b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.cc @@ -0,0 +1,209 @@ + +#include "DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h" + + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + + +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" + +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" +#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" + +#include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" +#include "DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h" +#include "DQM/TrackingMonitorClient/interface/TrackingUtility.h" + +#include +#include +#include +#include +#include +#include + +#define BUF_SIZE 256 + +// +// -- Constructor +// +TrackingAnalyser::TrackingAnalyser(edm::ParameterSet const& ps) { + + // Get TkMap ParameterSet + tkMapPSet_ = ps.getParameter("TkmapParameters"); + + std::string localPath = std::string("DQM/TrackingMonitorClient/test/loader.html"); + ifstream fin(edm::FileInPath(localPath).fullPath().c_str(), std::ios::in); + char buf[BUF_SIZE]; + + if (!fin) { + std::cerr << "Input File: loader.html"<< " could not be opened!" << std::endl; + return; + } + + while (fin.getline(buf, BUF_SIZE, '\n')) { // pops off the newline character + html_out_ << buf ; + } + fin.close(); + + + + edm::LogInfo("TrackingAnalyser") << " TrackingAnalyser::Creating TrackingAnalyser "; + staticUpdateFrequency_ = ps.getUntrackedParameter("StaticUpdateFrequency",1); + globalStatusFilling_ = ps.getUntrackedParameter("GlobalStatusFilling", 1); + shiftReportFrequency_ = ps.getUntrackedParameter("ShiftReportFrequency", 1); + + edm::InputTag rawDataTag = ps.getUntrackedParameter("RawDataTag"); + rawDataToken_ = consumes(rawDataTag); + + // get back-end interface + dqmStore_ = edm::Service().operator->(); + + + // instantiate web interface + actionExecutor_ = new TrackingActionExecutor(ps); + trackerFEDsFound_ = false; + endLumiAnalysisOn_ = false; +} +// +// -- Destructor +// +TrackingAnalyser::~TrackingAnalyser(){ + + edm::LogInfo("TrackingAnalyser") << "TrackingAnalyser::Deleting TrackingAnalyser "; + +} +// +// -- Begin Job +// +void TrackingAnalyser::beginJob(){ + + nLumiSecs_ = 0; + nEvents_ = 0; +} +// +// -- Begin Run +// +void TrackingAnalyser::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { + std::cout << "[TrackingAnalyser::beginRun] .. starting" << std::endl; + edm::LogInfo ("TrackingAnalyser") <<"TrackingAnalyser:: Begining of Run"; + + // Check latest Fed cabling and create TrackerMapCreator + unsigned long long cacheID = eSetup.get().cacheIdentifier(); + if (m_cacheID_ != cacheID) { + m_cacheID_ = cacheID; + edm::LogInfo("TrackingAnalyser") <<"TrackingAnalyser::beginRun: " + << " Change in Cabling, recrated TrackerMap"; + eSetup.get().get(fedCabling_); + eSetup.get().get(detCabling_); + } + if (globalStatusFilling_) actionExecutor_->createGlobalStatus(dqmStore_); +} +// +// -- Begin Luminosity Block +// +void TrackingAnalyser::beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) { + edm::LogInfo("TrackingAnalyser") <<"TrackingAnalyser:: Begin of LS transition"; +} +// +// -- Analyze +// +void TrackingAnalyser::analyze(edm::Event const& e, edm::EventSetup const& eSetup){ + std::cout << "[TrackingAnalyser::analyze] .. starting" << std::endl; + nEvents_++; + if (nEvents_ == 1 && globalStatusFilling_ > 0) { + checkTrackerFEDs(e); + if (!trackerFEDsFound_) { + actionExecutor_->fillDummyGlobalStatus(); + actionExecutor_->createDummyShiftReport(); + } else { + actionExecutor_->fillGlobalStatus(dqmStore_); + if (shiftReportFrequency_ != -1) actionExecutor_->createShiftReport(dqmStore_); + } + } + +} +// +// -- End Luminosity Block +// +void TrackingAnalyser::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) { + edm::LogInfo ("TrackingAnalyser") <<"TrackingAnalyser:: End of LS transition, performing the DQM client operation"; + + nLumiSecs_++; + + if (!trackerFEDsFound_) { + actionExecutor_->fillDummyLSStatus(); + return; + } + endLumiAnalysisOn_ = true; + + std::cout << "====================================================== " << std::endl; + std::cout << " ===> Iteration # " << nLumiSecs_ << " " << lumiSeg.luminosityBlock() << std::endl; + std::cout << "====================================================== " << std::endl; + // Fill Global Status + if (globalStatusFilling_ > 0) { + actionExecutor_->fillStatusAtLumi(dqmStore_); + } + endLumiAnalysisOn_ = false; +} + +// +// -- End Run +// +void TrackingAnalyser::endRun(edm::Run const& run, edm::EventSetup const& eSetup){ + edm::LogInfo ("TrackingAnalyser") <<"TrackingAnalyser:: End of Run"; +} +// +// -- End Job +// +void TrackingAnalyser::endJob(){ + edm::LogInfo("TrackingAnalyser") <<"TrackingAnalyser:: endjob called!"; +} +// +// Check Tracker FEDs +// +void TrackingAnalyser::checkTrackerFEDs(edm::Event const& e) { + edm::Handle rawDataHandle; + e.getByToken( rawDataToken_, rawDataHandle ); + if ( !rawDataHandle.isValid() ) return; + + const FEDRawDataCollection& rawDataCollection = *rawDataHandle; + const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID; + const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID; + const int siPixelFedIdMin = FEDNumbering::MINSiPixelFEDID; + const int siPixelFedIdMax = FEDNumbering::MAXSiPixelFEDID; + + unsigned int nFed = 0; + for (int i=siStripFedIdMin; i <= siStripFedIdMax; i++) { + if (rawDataCollection.FEDData(i).size() && + rawDataCollection.FEDData(i).data() ) + nFed++; + } + for (int i=siPixelFedIdMin; i <= siPixelFedIdMax; i++) { + if (rawDataCollection.FEDData(i).size() && + rawDataCollection.FEDData(i).data() ) + nFed++; + } + + trackerFEDsFound_ = (nFed > 0); + +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(TrackingAnalyser); diff --git a/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h new file mode 100644 index 0000000000000..0079b0daa6bc1 --- /dev/null +++ b/DQM/TrackingMonitorClient/plugins/TrackingAnalyzer.h @@ -0,0 +1,91 @@ +#ifndef TrackingAnalyser_H +#define TrackingAnalyser_H + +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/EventSetup.h" + +#include +#include +#include +#include +#include + +class DQMStore; +class SiStripFedCabling; +class SiStripDetCabling; +class TrackingActionExecutor; +class FEDRawDataCollection; + +class TrackingAnalyser: public edm::EDAnalyzer{ + +public: + + /// Constructor + TrackingAnalyser(const edm::ParameterSet& ps); + + /// Destructor + virtual ~TrackingAnalyser(); + +private: + + /// BeginJob + void beginJob(); + + /// BeginRun + void beginRun(edm::Run const& run, edm::EventSetup const& eSetup); + + /// Analyze + void analyze(edm::Event const& e, edm::EventSetup const& eSetup); + + /// Begin Luminosity Block + void beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) ; + + /// End Luminosity Block + + void endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup); + + /// EndRun + void endRun(edm::Run const& run, edm::EventSetup const& eSetup); + + /// Endjob + void endJob(); + + + +private: + + void checkTrackerFEDs(edm::Event const& e); + + DQMStore* dqmStore_; + + int fileSaveFrequency_; + int staticUpdateFrequency_; + int globalStatusFilling_; + int shiftReportFrequency_; + + edm::EDGetTokenT rawDataToken_; + + std::string outputFilePath_; + std::string outputFileName_; + + edm::ParameterSet tkMapPSet_; + edm::ESHandle< SiStripFedCabling > fedCabling_; + edm::ESHandle< SiStripDetCabling > detCabling_; + TrackingActionExecutor* actionExecutor_; + + unsigned long long m_cacheID_; + int nLumiSecs_; + int nEvents_; + bool trackerFEDsFound_; + bool endLumiAnalysisOn_; + std::ostringstream html_out_; + +}; + + +#endif diff --git a/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc new file mode 100644 index 0000000000000..840039cf3d8d3 --- /dev/null +++ b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.cc @@ -0,0 +1,239 @@ +// -*- C++ -*- +// +// Package: TrackingMonitorClient +// Class: TrackingOfflineDQM +// +/**\class TrackingOfflineDQM TrackingOfflineDQM.cc DQM/TrackingMonitorCluster/src/TrackingOfflineDQM.cc + + Description: + + Implementation: + +*/ +// +// Original Author: Samvel Khalatyan (ksamdev at gmail dot com) +// Created: Wed Oct 5 16:42:34 CET 2006 +// $Id: TrackingOfflineDQM.cc,v 1.42 2013/01/02 17:41:51 wmtan Exp $ +// +// + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + + +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/FEDRawData/interface/FEDNumbering.h" + +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" +#include "DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h" + +#include "DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h" + +//Run Info +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" +#include "CondFormats/RunInfo/interface/RunSummary.h" +#include "CondFormats/RunInfo/interface/RunInfo.h" +// Cabling +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" + +#include +#include +#include +#include +#include +#include + + +/** +* @brief +* Construct object +* +* @param roPARAMETER_SET +* Regular Parameter Set that represent read configuration file +*/ +TrackingOfflineDQM::TrackingOfflineDQM(edm::ParameterSet const& pSet) : + configPar_(pSet) +{ + + // Action Executor + actionExecutor_ = new TrackingActionExecutor(pSet); + + // get back-end interface + dqmStore_ = edm::Service().operator->(); + + usedWithEDMtoMEConverter_= configPar_.getUntrackedParameter("UsedWithEDMtoMEConverter",false); + inputFileName_ = configPar_.getUntrackedParameter("InputFileName",""); + outputFileName_ = configPar_.getUntrackedParameter("OutputFileName",""); + globalStatusFilling_ = configPar_.getUntrackedParameter("GlobalStatusFilling", 1); + +} +/** +* @brief +* Destructor +* +*/ +TrackingOfflineDQM::~TrackingOfflineDQM() { + +} +/** +* @brief +* Executed at the begining of application +* +* @param eSetup +* Event Setup object +*/ +void TrackingOfflineDQM::beginJob() { + + edm::LogInfo("BeginJobDone") << "TrackingOfflineDQM::beginJob done"; +} +/** +* @brief +* Executed at the begining a Run +* +* @param run +* Run object +* @param eSetup +* Event Setup object with Geometry, Magnetic Field, etc. +*/ +void TrackingOfflineDQM::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { + // std::cout << "[TrackingOfflineDQM::beginRun] .. starting" << std::endl; + edm::LogInfo ("BeginRun") <<"TrackingOfflineDQM:: Begining of Run"; + + int nFEDs = 0; + int nPixelFEDs = 0; + edm::eventsetup::EventSetupRecordKey recordKey(edm::eventsetup::EventSetupRecordKey::TypeTag::findType("RunInfoRcd")); + if( eSetup.find( recordKey ) != 0) { + + edm::ESHandle sumFED; + eSetup.get().get(sumFED); + if ( sumFED.isValid() ) { + + const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID; + const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID; + const int siPixelFedIdMin = FEDNumbering::MINSiPixelFEDID; + const int siPixelFedIdMax = FEDNumbering::MAXSiPixelFEDID; + + std::vector FedsInIds= sumFED->m_fed_in; + for ( auto fedID : FedsInIds ) { + if ( fedID >= siPixelFedIdMin && fedID <= siPixelFedIdMax ) { + ++nPixelFEDs; + ++nFEDs; + } + if ( fedID >= siStripFedIdMin && fedID <= siStripFedIdMax ) + ++nFEDs; + } + } + } + const int siPixelFedN = (FEDNumbering::MAXSiPixelFEDID-FEDNumbering::MINSiPixelFEDID+1); + allpixelFEDsFound_ = (nPixelFEDs == siPixelFedN); + trackerFEDsFound_ = (nFEDs > 0); + std::cout << "[TrackingOfflineDQM::beginRun] nPixelFEDs: " << nPixelFEDs << " ==> " << allpixelFEDsFound_ << std::endl; + std::cout << "[TrackingOfflineDQM::beginRun] nFEDs: " << nFEDs << " ==> " << trackerFEDsFound_ << std::endl; + + if (globalStatusFilling_ > 0) { + actionExecutor_->createGlobalStatus(dqmStore_); + // std::cout << "[TrackingOfflineDQM::beginRun] done actionExecutor_->createStatus" << std::endl; + } + + // std::cout << "[TrackingOfflineDQM::beginRun] DONE" << std::endl; +} +/** + * @brief + * + * Executed at every Event + * + * @param Event + * Event + * + * @param eSetup + * Event Setup object with Geometry, Magnetic Field, etc. + */ +void TrackingOfflineDQM::analyze(edm::Event const& e, edm::EventSetup const& eSetup){ +} +/** + * @brief + * + * End Lumi + * +*/ +void TrackingOfflineDQM::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& iSetup) { + + // std::cout << "[TrackingOfflineDQM::endLuminosityBlock] .. starting" << std::endl; + + edm::LogInfo("TrackingOfflineDQM") << "TrackingOfflineDQM::endLuminosityBlock"; + + if (globalStatusFilling_ > 0) { + actionExecutor_->createLSStatus(dqmStore_); + + if (trackerFEDsFound_) actionExecutor_->fillStatusAtLumi(dqmStore_); + else actionExecutor_->fillDummyLSStatus(); + } +} +/** + * @brief + * + * End Run + * +*/ +void TrackingOfflineDQM::endRun(edm::Run const& run, edm::EventSetup const& eSetup){ + + // std::cout << "[TrackingOfflineDQM::endRun] .. starting" << std::endl; + + edm::LogInfo("TrackingOfflineDQM") << "TrackingOfflineDQM::endRun"; + + if (globalStatusFilling_ > 0) { + actionExecutor_->createGlobalStatus(dqmStore_); + + if ( !trackerFEDsFound_ ) { + actionExecutor_->fillDummyGlobalStatus(); + return; + } else { + actionExecutor_->fillGlobalStatus(dqmStore_); + } + } + + // std::cout << "[TrackingOfflineDQM::endRun] DONE" << std::endl; + +} +/** +* @brief +* +* End Job +* +*/ +void TrackingOfflineDQM::endJob() { + + // std::cout << "[TrackingOfflineDQM::endJob] .. starting" << std::endl; + + edm::LogInfo("TrackingOfflineDQM") << "TrackingOfflineDQM::endJob"; + + if (!usedWithEDMtoMEConverter_) { + // Save Output file + dqmStore_->cd(); + dqmStore_->save(outputFileName_, "","",""); + } + + // std::cout << "[TrackingOfflineDQM::endJob] DONE" << std::endl; + +} +/** +* @brief +* +* Open Input File +* +*/ +bool TrackingOfflineDQM::openInputFile() { + if (inputFileName_.size() == 0) return false; + edm::LogInfo("TrackingOfflineDQM") << "TrackingOfflineDQM::openInputFile: Accessing root File" << inputFileName_; + dqmStore_->open(inputFileName_, false); + return true; +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(TrackingOfflineDQM); diff --git a/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h new file mode 100644 index 0000000000000..b522bddeefb04 --- /dev/null +++ b/DQM/TrackingMonitorClient/plugins/TrackingOfflineDQM.h @@ -0,0 +1,89 @@ +#ifndef TrackingMonitorClient_TrackingOfflineDQM_h +#define TrackingMonitorClient_TrackingOfflineDQM_h +// -*- C++ -*- +// +// Package: TrackingMonitorClient +// Class : TrackingOfflineDQM +// +/**\class TrackingOfflineDQM TrackingOfflineDQM.h DQM/TrackingMonitorCluster/interface/TrackingOfflineDQM.h + + Description: + DQM class to perform Summary creation Quality Test on a merged Root file + after CAF processing + Usage: + + +*/ +// +// Original Author: Samvel Khalatyan (ksamdev at gmail dot com) +// Created: Wed Oct 5 16:47:14 CET 2006 +// + +#include + +#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/LuminosityBlock.h" +#include "FWCore/Framework/interface/Run.h" +#include "FWCore/Framework/interface/EventSetup.h" + +#include +#include +#include +#include +#include + +class DQMStore; +class TrackingActionExecutor; +class SiStripDetCabling; + +class TrackingOfflineDQM: public edm::EDAnalyzer { + + public: + + /// Constructor + TrackingOfflineDQM(const edm::ParameterSet& ps); + + /// Destructor + virtual ~TrackingOfflineDQM(); + + private: + + /// BeginJob + void beginJob(); + + /// BeginRun + void beginRun(edm::Run const& run, edm::EventSetup const& eSetup); + + /// Analyze + void analyze(edm::Event const& e, edm::EventSetup const& eSetup); + + /// End Of Luminosity + void endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& iSetup); + + /// EndRun + void endRun(edm::Run const& run, edm::EventSetup const& eSetup); + + /// Endjob + void endJob(); + +private: + + void checkTrackerFEDs(edm::Event const& e); + bool openInputFile(); + + DQMStore* dqmStore_; + TrackingActionExecutor* actionExecutor_; + + std::string inputFileName_; + std::string outputFileName_; + int globalStatusFilling_; + bool usedWithEDMtoMEConverter_; + bool trackerFEDsFound_; + bool allpixelFEDsFound_; + + edm::ParameterSet configPar_; + +}; +#endif diff --git a/DQM/TrackingMonitorClient/python/TrackingCertification_cfi.py b/DQM/TrackingMonitorClient/python/TrackingCertification_cfi.py new file mode 100644 index 0000000000000..cd6b93365a754 --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingCertification_cfi.py @@ -0,0 +1,34 @@ +import FWCore.ParameterSet.Config as cms + +trackingCertificationInfo = cms.EDAnalyzer("TrackingCertificationInfo", + TopFolderName = cms.untracked.string("Tracking"), + checkPixelFEDs = cms.bool(False), + TrackingGlobalQualityPSets = cms.VPSet( + cms.PSet( + QT = cms.string("Rate"), + ), + cms.PSet( + QT = cms.string("Chi2"), + ), + cms.PSet( + QT = cms.string("RecHits"), + ), + cms.PSet( + QT = cms.string("Seed"), + ), + ), + TrackingLSQualityMEs = cms.VPSet( + cms.PSet( + QT = cms.string("Rate"), + ), + cms.PSet( + QT = cms.string("Chi2"), + ), + cms.PSet( + QT = cms.string("RecHits"), + ), + cms.PSet( + QT = cms.string("Seed"), + ), + ), +) diff --git a/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_Cosmic_cff.py b/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_Cosmic_cff.py new file mode 100644 index 0000000000000..d9e5c9999dd95 --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_Cosmic_cff.py @@ -0,0 +1,42 @@ +import FWCore.ParameterSet.Config as cms + +from DQM.TrackingMonitorSummary.OnDemandMonitoring_cfi import * +# TrackingMonitorAnalyser #### +TrackingAnalyserCosmic = cms.EDAnalyzer("TrackingAnalyser", + StaticUpdateFrequency = cms.untracked.int32(1), + GlobalStatusFilling = cms.untracked.int32(2), + TkMapCreationFrequency = cms.untracked.int32(3), + SummaryCreationFrequency = cms.untracked.int32(5), + ShiftReportFrequency = cms.untracked.int32(-1), + SummaryConfigPath = cms.untracked.string("DQM/TrackingMonitorClient/data/tracking_monitorelement_config.xml"), + PrintFaultyModuleList = cms.untracked.bool(True), + RawDataTag = cms.untracked.InputTag("source"), + TrackRatePSet = cms.PSet( + Name = cms.string("NumberOfTracks_"), + LowerCut = cms.double(1.0), + UpperCut = cms.double(100.0), + ), + TrackChi2PSet = cms.PSet( + Name = cms.string("Chi2oNDF_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(25.0), + ), + TrackHitPSet = cms.PSet( + Name = cms.string("NumberOfRecHitsPerTrack_"), + LowerCut = cms.double(3.0), + UpperCut = cms.double(35.0), + ), + TkmapParameters = cms.PSet( + loadFedCabling = cms.untracked.bool(True), + loadFecCabling = cms.untracked.bool(True), + loadLVCabling = cms.untracked.bool(True), + loadHVCabling = cms.untracked.bool(True), + trackerdatPath = cms.untracked.string('CommonTools/TrackerMap/data/'), + trackermaptxtPath = cms.untracked.string('DQM/Integration/test/TkMap/') + ) +) +# Track Efficiency Client + +from DQM.TrackingMonitor.TrackEfficiencyClient_cfi import * +TrackEffClient.FolderName = 'Tracking/TrackParameters/TrackEfficiency' +TrackEffClient.AlgoName = 'CKFTk' diff --git a/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_HeavyIons_cff.py b/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_HeavyIons_cff.py new file mode 100644 index 0000000000000..5e5eb0ec38c35 --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_HeavyIons_cff.py @@ -0,0 +1,43 @@ +import FWCore.ParameterSet.Config as cms + +from DQM.TrackingMonitorSummary.OnDemandMonitoring_cfi import * +# TrackingMonitorAnalyser #### +TrackingAnalyserHI = cms.EDAnalyzer("TrackingAnalyser", + StaticUpdateFrequency = cms.untracked.int32(1), + GlobalStatusFilling = cms.untracked.int32(2), + TkMapCreationFrequency = cms.untracked.int32(3), + SummaryCreationFrequency = cms.untracked.int32(5), + ShiftReportFrequency = cms.untracked.int32(-1), + SummaryConfigPath = cms.untracked.string("DQM/TrackingMonitorClient/data/tracking_monitorelement_config.xml"), + PrintFaultyModuleList = cms.untracked.bool(True), + RawDataTag = cms.untracked.InputTag("source"), + TrackRatePSet = cms.PSet( + Name = cms.string("NumberOfTracks_"), + LowerCut = cms.double(1.0), + UpperCut = cms.double(1000.0), + ), + TrackChi2PSet = cms.PSet( + Name = cms.string("Chi2oNDF_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(25.0), + ), + TrackHitPSet = cms.PSet( + Name = cms.string("NumberOfRecHitsPerTrack_"), + LowerCut = cms.double(3.0), + UpperCut = cms.double(20.0), + ), + TkmapParameters = cms.PSet( + loadFedCabling = cms.untracked.bool(True), + loadFecCabling = cms.untracked.bool(True), + loadLVCabling = cms.untracked.bool(True), + loadHVCabling = cms.untracked.bool(True), + trackerdatPath = cms.untracked.string('CommonTools/TrackerMap/data/'), + trackermaptxtPath = cms.untracked.string('DQM/Integration/test/TkMap/') + ) +) +# Track Efficiency Client + +from DQM.TrackingMonitor.TrackEfficiencyClient_cfi import * +TrackEffClient.FolderName = 'Tracking/TrackParameters/TrackEfficiency' +TrackEffClient.AlgoName = 'CKFTk' + diff --git a/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_cff.py b/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_cff.py new file mode 100644 index 0000000000000..7cf4a7931cbfc --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingClientConfigP5_cff.py @@ -0,0 +1,43 @@ +import FWCore.ParameterSet.Config as cms + +from DQM.TrackingMonitorSummary.OnDemandMonitoring_cfi import * +# TrackingMonitorAnalyser #### +TrackingAnalyser = cms.EDAnalyzer("TrackingAnalyser", + StaticUpdateFrequency = cms.untracked.int32(1), + GlobalStatusFilling = cms.untracked.int32(2), + TkMapCreationFrequency = cms.untracked.int32(3), + SummaryCreationFrequency = cms.untracked.int32(5), + ShiftReportFrequency = cms.untracked.int32(-1), + SummaryConfigPath = cms.untracked.string("DQM/TrackingMonitorClient/data/tracking_monitorelement_config.xml"), + PrintFaultyModuleList = cms.untracked.bool(True), + RawDataTag = cms.untracked.InputTag("source"), + TrackRatePSet = cms.PSet( + Name = cms.string("NumberOfGoodTracks_"), + LowerCut = cms.double(1.0), + UpperCut = cms.double(1000.0), + ), + TrackChi2PSet = cms.PSet( + Name = cms.string("GoodTrackChi2oNDF_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(25.0), + ), + TrackHitPSet = cms.PSet( + Name = cms.string("GoodTrackNumberOfRecHitsPerTrack_"), + LowerCut = cms.double(5.0), + UpperCut = cms.double(20.0), + ), + TkmapParameters = cms.PSet( + loadFedCabling = cms.untracked.bool(True), + loadFecCabling = cms.untracked.bool(True), + loadLVCabling = cms.untracked.bool(True), + loadHVCabling = cms.untracked.bool(True), + trackerdatPath = cms.untracked.string('CommonTools/TrackerMap/data/'), + trackermaptxtPath = cms.untracked.string('DQM/Integration/test/TkMap/') + ) +) +# Track Efficiency Client + +from DQM.TrackingMonitor.TrackEfficiencyClient_cfi import * +TrackEffClient.FolderName = 'Tracking/TrackParameters/TrackEfficiency' +TrackEffClient.AlgoName = 'CKFTk' + diff --git a/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_Cosmic_cff.py b/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_Cosmic_cff.py new file mode 100644 index 0000000000000..80ea2939d3cd9 --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_Cosmic_cff.py @@ -0,0 +1,41 @@ +import FWCore.ParameterSet.Config as cms + +# TrackingOfflineDQM (for Tier0 Harvesting Step) #### +trackingOfflineAnalyser = cms.EDAnalyzer("TrackingOfflineDQM", + GlobalStatusFilling = cms.untracked.int32(2), + UsedWithEDMtoMEConverter = cms.untracked.bool(True), + TrackRatePSet = cms.PSet( + Name = cms.string("NumberOfTracks_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(100.0), + ), + TrackChi2PSet = cms.PSet( + Name = cms.string("Chi2oNDF_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(25.0), + ), + TrackHitPSet = cms.PSet( + Name = cms.string("NumberOfRecHitsPerTrack_"), + LowerCut = cms.double(3.0), + UpperCut = cms.double(35.0), + ), + GoodTrackFractionPSet = cms.PSet( + Name = cms.string("FractionOfGoodTracks_"), + LowerCut = cms.double(-1.), + UpperCut = cms.double(1.), + ) +) + +trackingQTester = cms.EDAnalyzer("QualityTester", + qtList = cms.untracked.FileInPath('DQM/TrackingMonitorClient/data/tracking_qualitytest_config_tier0_cosmic.xml'), + prescaleFactor = cms.untracked.int32(1), + getQualityTestsFromFile = cms.untracked.bool(True) +) + +from DQM.TrackingMonitor.TrackEfficiencyClient_cfi import * +TrackEffClient.FolderName = 'Tracking/TrackParameters/TrackEfficiency' +TrackEffClient.AlgoName = 'CKFTk' + +# Sequence +TrackingCosmicDQMClient = cms.Sequence(trackingQTester*trackingOfflineAnalyser*TrackEffClient) + diff --git a/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_HeavyIons_cff.py b/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_HeavyIons_cff.py new file mode 100644 index 0000000000000..5764799b0d324 --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_HeavyIons_cff.py @@ -0,0 +1,33 @@ +import FWCore.ParameterSet.Config as cms + +# TrackingOfflineDQM (for Tier0 Harvesting Step) #### +trackingOfflineAnalyser = cms.EDAnalyzer("TrackingOfflineDQM", + GlobalStatusFilling = cms.untracked.int32(2), + UsedWithEDMtoMEConverter = cms.untracked.bool(True), + TrackRatePSet = cms.PSet( + Name = cms.string("NumberOfTracks_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(1000.0), + ), + TrackChi2PSet = cms.PSet( + Name = cms.string("Chi2oNDF_"), + LowerCut = cms.double(0.0), + UpperCut = cms.double(25.0), + ), + TrackHitPSet = cms.PSet( + Name = cms.string("NumberOfRecHitsPerTrack_"), + LowerCut = cms.double(3.0), + UpperCut = cms.double(30.0), + ) +) + +# clone and modify modules +trackingQTesterHI = cms.EDAnalyzer("QualityTester", + qtList = cms.untracked.FileInPath('DQM/TrackingMonitorClient/data/tracking_qualitytest_config_tier0_heavyions.xml'), + prescaleFactor = cms.untracked.int32(1), + getQualityTestsFromFile = cms.untracked.bool(True) +) + +# define new HI sequence +TrackingOfflineDQMClientHI = cms.Sequence(trackingQTesterHI*trackingOfflineAnalyser) + diff --git a/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_cff.py b/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_cff.py new file mode 100644 index 0000000000000..d104ecee0a0c3 --- /dev/null +++ b/DQM/TrackingMonitorClient/python/TrackingClientConfig_Tier0_cff.py @@ -0,0 +1,72 @@ +import FWCore.ParameterSet.Config as cms + +# TrackingOfflineDQM (for Tier0 Harvesting Step) #### +trackingOfflineAnalyser = cms.EDAnalyzer("TrackingOfflineDQM", + GlobalStatusFilling = cms.untracked.int32(2), + UsedWithEDMtoMEConverter = cms.untracked.bool(True), + TopFolderName = cms.untracked.string("Tracking"), + TrackingGlobalQualityPSets = cms.VPSet( + cms.PSet( + QT = cms.string("Rate"), + dir = cms.string("TrackParameters/highPurityTracks/pt_1/GeneralProperties"), + name = cms.string("NumberOfGoodTracks_"), + ), + cms.PSet( + QT = cms.string("Chi2"), + dir = cms.string("TrackParameters/highPurityTracks/pt_1/GeneralProperties"), + name = cms.string("GoodTrackChi2oNDF_"), + ), + cms.PSet( + QT = cms.string("RecHits"), + dir = cms.string("TrackParameters/highPurityTracks/pt_1/HitProperties"), + name = cms.string("GoodTrackNumberOfRecHitsPerTrack_"), + ), + cms.PSet( + QT = cms.string("Seed"), + dir = cms.string("TrackParameters/generalTracks/TrackBuilding"), + name = cms.string("NumberOfSeeds_"), + ) + ), + TrackingLSQualityPSets = cms.VPSet( + cms.PSet( + QT = cms.string("Rate"), + LSdir = cms.string("TrackParameters/highPurityTracks/pt_1/GeneralProperties/LSanalysis"), + LSname = cms.string("NumberOfGoodTracks_lumiFlag_"), + LSlowerCut = cms.double( 1.0 ), + LSupperCut = cms.double( 1000.0 ) + ), + cms.PSet( + QT = cms.string("Chi2"), + LSdir = cms.string("TrackParameters/highPurityTracks/pt_1/GeneralProperties/LSanalysis"), + LSname = cms.string("GoodTrackChi2oNDF_lumiFlag_"), + LSlowerCut = cms.double( 0.0 ), + LSupperCut = cms.double( 25.0 ) + ), + cms.PSet( + QT = cms.string("RecHits"), + LSdir = cms.string("TrackParameters/highPurityTracks/pt_1/GeneralProperties/LSanalysis"), + LSname = cms.string("GoodTrackNumberOfRecHitsPerTrack_lumiFlag_"), + LSlowerCut = cms.double( 5.0 ), + LSupperCut = cms.double( 20.0 ) + ), + cms.PSet( + QT = cms.string("Seed"), + LSdir = cms.string("TrackParameters/generalTracks/LSanalysis"), + LSname = cms.string("NumberOfSeeds_lumiFlag_"), + LSlowerCut = cms.double( 0.0 ), + LSupperCut = cms.double( 1000000.0 ) + ) + ) +) + +trackingQTester = cms.EDAnalyzer("QualityTester", + qtList = cms.untracked.FileInPath('DQM/TrackingMonitorClient/data/tracking_qualitytest_config_tier0.xml'), + prescaleFactor = cms.untracked.int32(1), + getQualityTestsFromFile = cms.untracked.bool(True) +) + + +# Sequence +TrackingOfflineDQMClient = cms.Sequence(trackingQTester*trackingOfflineAnalyser) + + diff --git a/DQM/TrackingMonitorClient/src/TrackingActionExecutor.cc b/DQM/TrackingMonitorClient/src/TrackingActionExecutor.cc new file mode 100644 index 0000000000000..181966b142c00 --- /dev/null +++ b/DQM/TrackingMonitorClient/src/TrackingActionExecutor.cc @@ -0,0 +1,178 @@ + +#include "DQM/TrackingMonitorClient/interface/TrackingActionExecutor.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" + +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + +#include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" +#include "DQM/SiStripMonitorClient/interface/SiStripUtility.h" +#include "DQM/SiStripMonitorClient/interface/SiStripLayoutParser.h" +#include "DQM/SiStripMonitorClient/interface/SiStripConfigWriter.h" +#include "DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + + +#include +// +// -- Constructor +// +TrackingActionExecutor::TrackingActionExecutor(edm::ParameterSet const& ps):pSet_(ps) { + edm::LogInfo("TrackingActionExecutor") << " Creating TrackingActionExecutor " << "\n" ; + qualityChecker_ = NULL; + configWriter_ = NULL; +} +// +// -- Destructor +// +TrackingActionExecutor::~TrackingActionExecutor() { + // std::cout << "[TrackingActionExecutor::~TrackingActionExecutor] .. starting" << std::endl; + edm::LogInfo("TrackingActionExecutor") << " Deleting TrackingActionExecutor " << "\n" ; + // if (qualityChecker_) delete qualityChecker_; +} + +// +// -- Create Status Monitor Elements +// +void TrackingActionExecutor::createGlobalStatus(DQMStore* dqm_store){ + if (!qualityChecker_) qualityChecker_ = new TrackingQualityChecker(pSet_); + qualityChecker_->bookGlobalStatus(dqm_store); +} + +void TrackingActionExecutor::createLSStatus(DQMStore* dqm_store){ + if (!qualityChecker_) qualityChecker_ = new TrackingQualityChecker(pSet_); + qualityChecker_->bookLSStatus(dqm_store); +} + +// +// -- Fill Dummy Status +// +void TrackingActionExecutor::fillDummyGlobalStatus(){ + qualityChecker_->fillDummyGlobalStatus(); +} + +void TrackingActionExecutor::fillDummyLSStatus(){ + qualityChecker_->fillDummyLSStatus(); +} + +// +// -- Fill Status +// +void TrackingActionExecutor::fillGlobalStatus(DQMStore* dqm_store) { + qualityChecker_->fillGlobalStatus(dqm_store); +} +// +// -- Fill Lumi Status +// +void TrackingActionExecutor::fillStatusAtLumi(DQMStore* dqm_store) { + qualityChecker_->fillLSStatus(dqm_store); +} +// +// -- +// +void TrackingActionExecutor::createDummyShiftReport(){ + // std::cout << "[TrackingActionExecutor::createDummyShiftReport]" << std::endl; + ofstream report_file; + report_file.open("tracking_shift_report.txt", std::ios::out); + report_file << " Nothing to report!!" << std::endl; + report_file.close(); +} +// +// -- Create Shift Report +// +void TrackingActionExecutor::createShiftReport(DQMStore * dqm_store){ + + // std::cout << "[TrackingActionExecutor::createShiftReport]" << std::endl; + + // Read layout configuration + std::string localPath = std::string("DQM/TrackingMonitorClient/data/tracking_plot_layout.xml"); + SiStripLayoutParser layout_parser; + layout_parser.getDocument(edm::FileInPath(localPath).fullPath()); + + std::map > layout_map; + if (!layout_parser.getAllLayouts(layout_map)) return; + + + std::ostringstream shift_summary; + if (configWriter_) delete configWriter_; + configWriter_ = new SiStripConfigWriter(); + configWriter_->init("ShiftReport"); + + + // Print Report Summary Content + shift_summary << " Report Summary Content :" << std::endl; + shift_summary << " =========================" << std::endl; + configWriter_->createElement("ReportSummary"); + + shift_summary << std::endl; + printShiftHistoParameters(dqm_store, layout_map, shift_summary); + + ofstream report_file; + report_file.open("tracking_shift_report.txt", std::ios::out); + report_file << shift_summary.str() << std::endl; + report_file.close(); + configWriter_->write("tracking_shift_report.xml"); + delete configWriter_; + configWriter_ = 0; +} +// +// -- Print Report Summary +// +void TrackingActionExecutor::printReportSummary(MonitorElement* me, + std::ostringstream& str_val, std::string name) { + + // std::cout << "[TrackingActionExecutor::printReportSummary]" << std::endl; + str_val <<" " << name << " : "; + std::string value; + SiStripUtility::getMEValue(me, value); + configWriter_->createChildElement("MonitorElement", name, "value", value); + float fvalue = atof(value.c_str()); + if (fvalue == -1.0) str_val <<" Dummy Value "< >& layout_map, std::ostringstream& str_val) { + + // std::cout << "[TrackingActionExecutor::printShiftHistoParameters]" << std::endl; + str_val << std::endl; + for (std::map >::iterator it = layout_map.begin() ; it != layout_map.end(); it++) { + std::string set_name = it->first; + if (set_name.find("Summary") != std::string::npos) continue; + configWriter_->createElement(set_name); + + str_val << " " << set_name << " : " << std::endl; + str_val << " ===================================="<< std::endl; + + str_val << std::setprecision(2); + str_val << setiosflags(std::ios::fixed); + for (std::vector::iterator im = it->second.begin(); + im != it->second.end(); im++) { + std::string path_name = (*im); + if (path_name.size() == 0) continue; + MonitorElement* me = dqm_store->get(path_name); + std::ostringstream entry_str, mean_str, rms_str; + entry_str << std::setprecision(2); + entry_str << setiosflags(std::ios::fixed); + mean_str << std::setprecision(2); + mean_str << setiosflags(std::ios::fixed); + rms_str << std::setprecision(2); + rms_str << setiosflags(std::ios::fixed); + entry_str << std::setw(7) << me->getEntries(); + mean_str << std::setw(7) << me->getMean(); + rms_str << std::setw(7) << me->getRMS(); + configWriter_->createChildElement("MonitorElement", me->getName(), + "entries",entry_str.str(),"mean",mean_str.str(),"rms",rms_str.str()); + + if (me) str_val << " "<< me->getName() <<" : entries = "<< std::setw(7) + << me->getEntries() << " mean = "<< me->getMean() + <<" : rms = "<< me->getRMS()<< std::endl; + } + str_val << std::endl; + } +} diff --git a/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc b/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc new file mode 100644 index 0000000000000..8ae0978fd1eb6 --- /dev/null +++ b/DQM/TrackingMonitorClient/src/TrackingCertificationInfo.cc @@ -0,0 +1,454 @@ +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h" +#include "DQM/TrackingMonitorClient/interface/TrackingUtility.h" +#include "DQM/TrackingMonitorClient/interface/TrackingCertificationInfo.h" + +#include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" + +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + +//Run Info +#include "CondFormats/DataRecord/interface/RunSummaryRcd.h" +#include "CondFormats/RunInfo/interface/RunSummary.h" +#include "CondFormats/RunInfo/interface/RunInfo.h" + +#include +#include +#include +#include +#include +#include +// +// -- Contructor +// +TrackingCertificationInfo::TrackingCertificationInfo(edm::ParameterSet const& pSet) + : pSet_(pSet) + , trackingCertificationBooked_(false) + , trackingLSCertificationBooked_(false) + , nFEDConnected_(0) + , allPixelFEDConnected_(true) +{ + // Create MessageSender + edm::LogInfo( "TrackingCertificationInfo") << "TrackingCertificationInfo::Deleting TrackingCertificationInfo "; + + // get back-end interface + dqmStore_ = edm::Service().operator->(); + + TopFolderName_ = pSet_.getUntrackedParameter("TopFolderName","Tracking"); + // std::cout << "[TrackingCertificationInfo::TrackingCertificationInfo] TopFolderName_: " << TopFolderName_ << std::endl; + + TrackingMEs tracking_mes; + // load variables for Global certification + + checkPixelFEDs_ = pSet_.getParameter("checkPixelFEDs"); + if ( checkPixelFEDs_ ) { + std::string QTname = "pixel"; + tracking_mes.TrackingFlag = 0; + TrackingMEsMap.insert(std::pair(QTname, tracking_mes)); + } + + std::vector TrackingGlobalQualityMEs = pSet_.getParameter< std::vector >("TrackingGlobalQualityPSets" ); + for ( auto meQTset : TrackingGlobalQualityMEs ) { + + std::string QTname = meQTset.getParameter("QT"); + tracking_mes.TrackingFlag = 0; + + // std::cout << "[TrackingQualityChecker::TrackingCertificationInfo] inserting " << QTname << " in TrackingMEsMap" << std::endl; + TrackingMEsMap.insert(std::pair(QTname, tracking_mes)); + } + + TrackingLSMEs tracking_ls_mes; + // load variables for LS certification + std::vector TrackingLSQualityMEs = pSet_.getParameter< std::vector >("TrackingLSQualityMEs" ); + for ( auto meQTset : TrackingLSQualityMEs ) { + + std::string QTname = meQTset.getParameter("QT"); + tracking_ls_mes.TrackingFlag = 0; + + // std::cout << "[TrackingQualityChecker::TrackingCertificationInfo] inserting " << QTname << " in TrackingMEsMap" << std::endl; + TrackingLSMEsMap.insert(std::pair(QTname, tracking_ls_mes)); + } + + + // define sub-detectors which affect the quality + SubDetFolder.push_back("SiStrip"); + SubDetFolder.push_back("Pixel"); + +} + +TrackingCertificationInfo::~TrackingCertificationInfo() { + edm::LogInfo("TrackingCertificationInfo") << "TrackingCertificationInfo::Deleting TrackingCertificationInfo "; + +} +// +// -- Begin Job +// +void TrackingCertificationInfo::beginJob() { + +} +// +// -- Begin Run +// +void TrackingCertificationInfo::beginRun(edm::Run const& run, edm::EventSetup const& eSetup) { + + // std::cout << "[TrackingCertificationInfo::beginRun] starting .." << std::endl; + + edm::LogInfo ("TrackingCertificationInfo") <<"TrackingCertificationInfo:: Begining of Run"; + unsigned long long cacheID = eSetup.get().cacheIdentifier(); + if (m_cacheID_ != cacheID) { + m_cacheID_ = cacheID; + } + eSetup.get().get(detCabling_); + + nFEDConnected_ = 0; + int nPixelFEDConnected_ = 0; + const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID; + const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID; + const int siPixelFedIdMin = FEDNumbering::MINSiPixelFEDID; + const int siPixelFedIdMax = FEDNumbering::MAXSiPixelFEDID; + const int siPixelFeds = (siPixelFedIdMax-siPixelFedIdMin+1); + + edm::eventsetup::EventSetupRecordKey recordKey(edm::eventsetup::EventSetupRecordKey::TypeTag::findType("RunInfoRcd")); + if( eSetup.find( recordKey ) != 0) { + + edm::ESHandle sumFED; + eSetup.get().get(sumFED); + + if ( sumFED.isValid() ) { + + std::vector FedsInIds= sumFED->m_fed_in; + for ( auto fedID : FedsInIds ) { + if ( fedID >= siPixelFedIdMin && fedID <= siPixelFedIdMax ) { + ++nFEDConnected_; + ++nPixelFEDConnected_; + } + else if ( fedID >= siStripFedIdMin && fedID <= siStripFedIdMax ) + ++nFEDConnected_; + } + LogDebug ("TrackingDcsInfo") << " TrackingDcsInfo :: Connected FEDs " << nFEDConnected_; + } + } + + allPixelFEDConnected_ = ( nPixelFEDConnected_ == siPixelFeds ); + + bookTrackingCertificationMEs(); + fillDummyTrackingCertification(); + + bookTrackingCertificationMEsAtLumi(); + fillDummyTrackingCertificationAtLumi(); + +} + +// +// -- Book MEs for Tracking Certification fractions +// +void TrackingCertificationInfo::bookTrackingCertificationMEs() { + + // std::cout << "[TrackingCertificationInfo::bookTrackingCertificationMEs] starting .. trackingCertificationBooked_: " << trackingCertificationBooked_ << std::endl; + + if ( !trackingCertificationBooked_ ) { + + dqmStore_->cd(); + std::string tracking_dir = ""; + TrackingUtility::getTopFolderPath(dqmStore_, TopFolderName_, tracking_dir); + + if (tracking_dir.size() > 0 ) dqmStore_->setCurrentFolder(tracking_dir+"/EventInfo"); + else dqmStore_->setCurrentFolder(TopFolderName_+"/EventInfo"); + + TrackingCertification = dqmStore_->bookFloat("CertificationSummary"); + + std::string hname, htitle; + hname = "CertificationReportMap"; + htitle = "Tracking Certification Summary Map"; + size_t nQT = TrackingMEsMap.size(); + TrackingCertificationSummaryMap = dqmStore_->book2D(hname, htitle, nQT,0.5,float(nQT)+0.5,1,0.5,1.5); + TrackingCertificationSummaryMap->setAxisTitle("Track Quality Type", 1); + TrackingCertificationSummaryMap->setAxisTitle("QTest Flag", 2); + size_t ibin =0; + for ( auto meQTset : TrackingMEsMap ) { + TrackingCertificationSummaryMap->setBinLabel(ibin+1,meQTset.first); + ibin++; + } + + + if (tracking_dir.size() > 0 ) dqmStore_->setCurrentFolder(TopFolderName_+"/EventInfo/CertificationContents"); + else dqmStore_->setCurrentFolder(TopFolderName_+"/EventInfo/CertificationContents"); + + for (std::map::iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + std::string meQTname = it->first; + // std::cout << "[TrackingCertificationInfo::bookStatus] meQTname: " << meQTname << std::endl; + it->second.TrackingFlag = dqmStore_->bookFloat("Track"+meQTname); + // std::cout << "[TrackingCertificationInfo::bookStatus] " << it->first << " exists ? " << it->second.TrackingFlag << std::endl; + } + + trackingCertificationBooked_ = true; + dqmStore_->cd(); + } + + // std::cout << "[TrackingCertificationInfo::bookStatus] trackingCertificationBooked_: " << trackingCertificationBooked_ << std::endl; +} + +// +// -- Book MEs for Tracking Certification per LS +// +void TrackingCertificationInfo::bookTrackingCertificationMEsAtLumi() { + + // std::cout << "[TrackingCertificationInfo::bookTrackingCertificationMEs] starting .. trackingCertificationBooked_: " << trackingCertificationBooked_ << std::endl; + + if ( !trackingLSCertificationBooked_ ) { + + dqmStore_->cd(); + std::string tracking_dir = ""; + TrackingUtility::getTopFolderPath(dqmStore_, TopFolderName_, tracking_dir); + + if (tracking_dir.size() > 0 ) dqmStore_->setCurrentFolder(tracking_dir+"/EventInfo"); + else dqmStore_->setCurrentFolder(TopFolderName_+"/EventInfo"); + + TrackingLSCertification = dqmStore_->bookFloat("CertificationSummary"); + + if (tracking_dir.size() > 0 ) dqmStore_->setCurrentFolder(TopFolderName_+"/EventInfo/CertificationContents"); + else dqmStore_->setCurrentFolder(TopFolderName_+"/EventInfo/CertificationContents"); + + for (std::map::iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + std::string meQTname = it->first; + // std::cout << "[TrackingCertificationInfo::bookStatus] meQTname: " << meQTname << std::endl; + it->second.TrackingFlag = dqmStore_->bookFloat("Track"+meQTname); + // std::cout << "[TrackingCertificationInfo::bookStatus] " << it->first << " exists ? " << it->second.TrackingFlag << std::endl; + } + + trackingLSCertificationBooked_ = true; + dqmStore_->cd(); + } + + // std::cout << "[TrackingCertificationInfo::bookStatus] trackingCertificationBooked_: " << trackingCertificationBooked_ << std::endl; +} +// +// -- Analyze +// +void TrackingCertificationInfo::analyze(edm::Event const& event, edm::EventSetup const& eSetup) { +} +// +// -- End Luminosity Block +// +void TrackingCertificationInfo::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& eSetup) { + edm::LogInfo( "TrackingDaqInfo") << "TrackingDaqInfo::endLuminosityBlock"; + + if ( nFEDConnected_ > 0 ) fillTrackingCertificationMEsAtLumi(); + else fillDummyTrackingCertificationAtLumi(); +} + +// +// -- End of Run +// +void TrackingCertificationInfo::endRun(edm::Run const& run, edm::EventSetup const& eSetup){ + + // std::cout << "[TrackingCertificationInfo::endRun]" << std::endl; + + edm::LogInfo ("TrackingCertificationInfo") <<"TrackingCertificationInfo:: End Run"; + + if ( nFEDConnected_ > 0 ) fillTrackingCertificationMEs(eSetup); + else fillDummyTrackingCertification(); + + // std::cout << "[TrackingCertificationInfo::endRun] DONE" << std::endl; + +} +// +// --Fill Tracking Certification +// +void TrackingCertificationInfo::fillTrackingCertificationMEs(edm::EventSetup const& eSetup) { + if ( !trackingCertificationBooked_ ) { + // edm::LogError("TrackingCertificationInfo") << " TrackingCertificationInfo::fillTrackingCertificationMEs : MEs missing "; + return; + } + + dqmStore_->cd(); + std::string tracking_dir = ""; + TrackingUtility::getTopFolderPath(dqmStore_, TopFolderName_, tracking_dir); + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] tracking_dir: " << tracking_dir << std::endl; + std::vector all_mes = dqmStore_->getContents(tracking_dir+"/EventInfo/reportSummaryContents"); + float fval = 1.0; + + // std::cout << "all_mes: " << all_mes.size() << std::endl; + + if ( checkPixelFEDs_ ) { + float val = 1.; + if ( allPixelFEDConnected_ ) val = 0.; + int xbin = 0; + for (std::map::const_iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + std::string type = it->first; + if ( type == "pixel" ) { + it->second.TrackingFlag->Fill(val); + TH2F* th2d = TrackingCertificationSummaryMap->getTH2F(); + std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] xbin: " << xbin << " val: " << val << std::endl; + th2d->SetBinContent(xbin+1,1,val); + } + xbin++; + } + fval = fminf(fval,val); + } + + int xbin = ( checkPixelFEDs_ ? 1 : 0); + for (std::vector::const_iterator ime = all_mes.begin(); + ime!= all_mes.end(); ime++) { + MonitorElement * me = (*ime); + if (!me) continue; + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] me: " << me->getName() << std::endl; + if (me->kind() == MonitorElement::DQM_KIND_REAL) { + std::string name = me->getName(); + float val = me->getFloatValue(); + + for (std::map::const_iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + + std::string type = it->first; + if (name.find(type) != std::string::npos) { + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] type: " << type << " <---> name: " << name << std::endl; + it->second.TrackingFlag->Fill(val); + std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] xbin: " << xbin << " val: " << val << std::endl; + TH2F* th2d = TrackingCertificationSummaryMap->getTH2F(); + th2d->SetBinContent(xbin+1,1,val); + xbin++; + break; + } + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + + } + fval = fminf(fval,val); + } + } + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEs] TrackingCertification: " << fval << std::endl; + TrackingCertification->Fill(fval); +} + +// +// --Reset Tracking Certification +// +void TrackingCertificationInfo::resetTrackingCertificationMEs() { + if ( !trackingCertificationBooked_ ) bookTrackingCertificationMEs(); + TrackingCertification->Reset(); + for (std::map::const_iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + it->second.TrackingFlag->Reset(); + } +} + +// +// --Reset Tracking Certification per LS +// +void TrackingCertificationInfo::resetTrackingCertificationMEsAtLumi() { + if ( !trackingLSCertificationBooked_ ) bookTrackingCertificationMEsAtLumi(); + TrackingLSCertification->Reset(); + for (std::map::const_iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + it->second.TrackingFlag->Reset(); + } +} + +// +// -- Fill Dummy Tracking Certification +// +void TrackingCertificationInfo::fillDummyTrackingCertification() { + resetTrackingCertificationMEs(); + if (trackingCertificationBooked_) { + TrackingCertification->Fill(-1.0); + for (std::map::const_iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + it->second.TrackingFlag->Fill(-1.0); + } + + for (int xbin = 1; xbin < TrackingCertificationSummaryMap->getNbinsX()+1; xbin++ ) + for (int ybin = 1; ybin < TrackingCertificationSummaryMap->getNbinsY()+1; ybin++ ) + TrackingCertificationSummaryMap->Fill(xbin,ybin,-1); + + + } +} + +// +// -- Fill Dummy Tracking Certification per LS +// +void TrackingCertificationInfo::fillDummyTrackingCertificationAtLumi() { + resetTrackingCertificationMEsAtLumi(); + if (trackingLSCertificationBooked_) { + TrackingLSCertification->Fill(-1.0); + for (std::map::const_iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + it->second.TrackingFlag->Fill(-1.0); + } + + } +} + +// +// --Fill Tracking Certification per LS +// +void TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi() { + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] starting .." << std::endl; + if ( !trackingLSCertificationBooked_ ) { + return; + } + resetTrackingCertificationMEsAtLumi(); + + dqmStore_->cd(); + std::string tracking_dir = ""; + TrackingUtility::getTopFolderPath(dqmStore_, TopFolderName_, tracking_dir); + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] tracking_dir: " << tracking_dir << std::endl; + + + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] tracking_dir: " << tracking_dir << std::endl; + std::vector all_mes = dqmStore_->getContents(tracking_dir+"/EventInfo/reportSummaryContents"); + + // std::cout << "all_mes: " << all_mes.size() << std::endl; + + for (std::vector::const_iterator ime = all_mes.begin(); + ime!= all_mes.end(); ime++) { + MonitorElement * me = (*ime); + if (!me) continue; + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] me: " << me->getName() << std::endl; + if (me->kind() == MonitorElement::DQM_KIND_REAL) { + std::string name = me->getName(); + float val = me->getFloatValue(); + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] val: " << val << std::endl; + + for (std::map::const_iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + + std::string type = it->first; + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] type: " << type << std::endl; + if (name.find(type) != std::string::npos) { + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] type: " << type << " <---> name: " << name << std::endl; + it->second.TrackingFlag->Fill(val); + break; + } + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + } + } + } + + float global_dqm_flag = 1.0; + std::string full_path = tracking_dir + "/EventInfo/reportSummary"; + MonitorElement* me_dqm = dqmStore_->get(full_path); + if (me_dqm && me_dqm->kind() == MonitorElement::DQM_KIND_REAL) global_dqm_flag = me_dqm->getFloatValue(); + // std::cout << "[TrackingCertificationInfo::fillTrackingCertificationMEsAtLumi] global_dqm_flag: " << global_dqm_flag << std::endl; + + TrackingLSCertification->Reset(); + TrackingLSCertification->Fill(global_dqm_flag); +} +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(TrackingCertificationInfo); diff --git a/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc b/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc new file mode 100644 index 0000000000000..feeb84a067465 --- /dev/null +++ b/DQM/TrackingMonitorClient/src/TrackingQualityChecker.cc @@ -0,0 +1,472 @@ +#include "DQM/TrackingMonitorClient/interface/TrackingQualityChecker.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "DQMServices/Core/interface/QReport.h" + +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" + +#include "CalibTracker/SiStripCommon/interface/TkDetMap.h" + +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" + +#include "DQM/TrackingMonitorClient/interface/TrackingUtility.h" + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + + +#include +// +// -- Constructor +// +TrackingQualityChecker::TrackingQualityChecker(edm::ParameterSet const& ps) : + pSet_(ps) +{ + edm::LogInfo("TrackingQualityChecker") << " Creating TrackingQualityChecker " << "\n" ; + + bookedTrackingGlobalStatus_ = false; + bookedTrackingLSStatus_ = false; + + if(!edm::Service().isAvailable()){ + edm::LogError("TkHistoMap") << + "\n------------------------------------------" + "\nUnAvailable Service TkHistoMap: please insert in the configuration file an instance like" + "\n\tprocess.TkDetMap = cms.Service(\"TkDetMap\")" + "\n------------------------------------------"; + } + + TopFolderName_ = pSet_.getUntrackedParameter("TopFolderName","Tracking"); + + TrackingMEs tracking_mes; + std::vector TrackingGlobalQualityMEs = pSet_.getParameter< std::vector >("TrackingGlobalQualityPSets" ); + for ( auto meQTset : TrackingGlobalQualityMEs ) { + + std::string QTname = meQTset.getParameter("QT"); + tracking_mes.HistoDir = meQTset.getParameter("dir"); + tracking_mes.HistoName = meQTset.getParameter("name"); + // std::cout << "[TrackingQualityChecker::TrackingQualityChecker] inserting " << QTname << " in TrackingMEsMap" << std::endl; + TrackingMEsMap.insert(std::pair(QTname, tracking_mes)); + } + // std::cout << "[TrackingQualityChecker::TrackingQualityChecker] created TrackingMEsMap" << std::endl; + + TrackingLSMEs tracking_ls_mes; + std::vector TrackingLSQualityMEs = pSet_.getParameter< std::vector >("TrackingLSQualityPSets" ); + for ( auto meQTset : TrackingLSQualityMEs ) { + + std::string QTname = meQTset.getParameter("QT"); + tracking_ls_mes.HistoLSDir = meQTset.exists("LSdir") ? meQTset.getParameter("LSdir") : ""; + tracking_ls_mes.HistoLSName = meQTset.exists("LSname") ? meQTset.getParameter("LSname") : ""; + tracking_ls_mes.HistoLSLowerCut = meQTset.exists("LSlowerCut") ? meQTset.getParameter("LSlowerCut") : -1.; + tracking_ls_mes.HistoLSUpperCut = meQTset.exists("LSupperCut") ? meQTset.getParameter("LSupperCut") : -1.; + tracking_ls_mes.TrackingFlag = 0; + + // std::cout << "[TrackingQualityChecker::TrackingQualityChecker] inserting " << QTname << " in TrackingMEsMap" << std::endl; + TrackingLSMEsMap.insert(std::pair(QTname, tracking_ls_mes)); + } + // std::cout << "[TrackingQualityChecker::TrackingQualityChecker] created TrackingLSMEsMap" << std::endl; + +} +// +// -- Destructor +// +TrackingQualityChecker::~TrackingQualityChecker() { + edm::LogInfo("TrackingQualityChecker") << " Deleting TrackingQualityChecker " << "\n" ; +} +// +// -- create reportSummary MEs +// +void TrackingQualityChecker::bookGlobalStatus(DQMStore* dqm_store) { + + // std::cout << "[TrackingQualityChecker::bookGlobalStatus] already booked ? " << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + + if (!bookedTrackingGlobalStatus_) { + dqm_store->cd(); + edm::LogInfo("TrackingQualityChecker") << " booking TrackingQualityStatus" << "\n"; + + std::string tracking_dir = ""; + TrackingUtility::getTopFolderPath(dqm_store, TopFolderName_, tracking_dir); + dqm_store->setCurrentFolder(TopFolderName_+"/EventInfo"); + + TrackGlobalSummaryReportGlobal = dqm_store->bookFloat("reportSummary"); + + std::string hname, htitle; + hname = "reportSummaryMap"; + htitle = "Tracking Report Summary Map"; + + size_t nQT = TrackingMEsMap.size(); + // std::cout << "[TrackingQualityChecker::bookGlobalStatus] nQT: " << nQT << std::endl; + TrackGlobalSummaryReportMap = dqm_store->book2D(hname, htitle, nQT,0.5,float(nQT)+0.5,1,0.5,1.5); + TrackGlobalSummaryReportMap->setAxisTitle("Track Quality Type", 1); + TrackGlobalSummaryReportMap->setAxisTitle("QTest Flag", 2); + size_t ibin =0; + for ( auto meQTset : TrackingMEsMap ) { + TrackGlobalSummaryReportMap->setBinLabel(ibin+1,meQTset.first); + ibin++; + } + + dqm_store->setCurrentFolder(TopFolderName_+"/EventInfo/reportSummaryContents"); + + for (std::map::iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + std::string meQTname = it->first; + it->second.TrackingFlag = dqm_store->bookFloat("Track"+meQTname); + // std::cout << "[TrackingQualityChecker::bookGlobalStatus] " << it->first << " exists ? " << it->second.TrackingFlag << std::endl; + // std::cout << "[TrackingQualityChecker::bookGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; + } + + bookedTrackingGlobalStatus_ = true; + dqm_store->cd(); + } +} + +void TrackingQualityChecker::bookLSStatus(DQMStore* dqm_store) { + + // std::cout << "[TrackingQualityChecker::bookLSStatus] already booked ? " << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + + if (!bookedTrackingLSStatus_) { + dqm_store->cd(); + edm::LogInfo("TrackingQualityChecker") << " booking TrackingQualityStatus" << "\n"; + + std::string tracking_dir = ""; + TrackingUtility::getTopFolderPath(dqm_store, TopFolderName_, tracking_dir); + dqm_store->setCurrentFolder(TopFolderName_+"/EventInfo"); + + TrackLSSummaryReportGlobal = dqm_store->bookFloat("reportSummary"); + + std::string hname, htitle; + hname = "reportSummaryMap"; + htitle = "Tracking Report Summary Map"; + + // size_t nQT = TrackingLSMEsMap.size(); + // std::cout << "[TrackingQualityChecker::bookLSStatus] nQT: " << nQT << std::endl; + + dqm_store->setCurrentFolder(TopFolderName_+"/EventInfo/reportSummaryContents"); + for (std::map::iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + std::string meQTname = it->first; + it->second.TrackingFlag = dqm_store->bookFloat("Track"+meQTname); + // std::cout << "[TrackingQualityChecker::bookLSStatus] " << it->first << " exists ? " << it->second.TrackingFlag << std::endl; + // std::cout << "[TrackingQualityChecker::bookLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; + } + + bookedTrackingLSStatus_ = true; + dqm_store->cd(); + } +} + +// +// -- Fill Dummy Status +// +void TrackingQualityChecker::fillDummyGlobalStatus(){ + // std::cout << "[TrackingQualityChecker::fillDummyGlobalStatus] starting ..." << std::endl; + + resetGlobalStatus(); + // std::cout << "[TrackingQualityChecker::fillDummyGlobalStatus] already booked ? " << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + if (bookedTrackingGlobalStatus_) { + + TrackGlobalSummaryReportGlobal->Fill(-1.0); + + for (int ibin = 1; ibin < TrackGlobalSummaryReportMap->getNbinsX()+1; ibin++) { + fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, -1.0); + } + + for (std::map::iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) + it->second.TrackingFlag->Fill(-1.0); + // std::cout << "[TrackingQualityChecker::fillDummyGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; + + } +} +void TrackingQualityChecker::fillDummyLSStatus(){ + // std::cout << "[TrackingQualityChecker::fillDummyLSStatus] starting ..." << std::endl; + + resetLSStatus(); + // std::cout << "[TrackingQualityChecker::fillDummyLSStatus] already booked ? " << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + if (bookedTrackingLSStatus_) { + + TrackLSSummaryReportGlobal->Fill(-1.0); + for (std::map::iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) + it->second.TrackingFlag->Fill(-1.0); + // std::cout << "[TrackingQualityChecker::fillDummyLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; + + } +} + +// +// -- Reset Status +// +void TrackingQualityChecker::resetGlobalStatus() { + + // std::cout << "[TrackingQualityChecker::resetGlobalStatus] already booked ? " << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + if (bookedTrackingGlobalStatus_) { + + TrackGlobalSummaryReportGlobal -> Reset(); + TrackGlobalSummaryReportMap -> Reset(); + + for (std::map::iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + MonitorElement* me = it->second.TrackingFlag; + // std::cout << "[TrackingQualityChecker::resetGlobalStatus] " << it->second.HistoName << " exist ? " << ( it->second.TrackingFlag == NULL ? "nope" : "yes" ) << " ---> " << me << std::endl; + me->Reset(); + } + // std::cout << "[TrackingQualityChecker::resetGlobalStatus] DONE w/ TrackingMEsMap" << std::endl; + + } +} +void TrackingQualityChecker::resetLSStatus() { + + // std::cout << "[TrackingQualityChecker::resetLSStatus] already booked ? " << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + if (bookedTrackingLSStatus_) { + + TrackLSSummaryReportGlobal -> Reset(); + for (std::map::iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + MonitorElement* me = it->second.TrackingFlag; + // std::cout << "[TrackingQualityChecker::resetLSStatus] " << it->second.HistoLSName << " exist ? " << ( it->second.TrackingFlag == NULL ? "nope" : "yes" ) << " ---> " << me << std::endl; + me->Reset(); + } + // std::cout << "[TrackingQualityChecker::resetLSStatus] DONE w/ TrackingLSMEsMap" << std::endl; + + } +} + +// +// -- Fill Status +// +void TrackingQualityChecker::fillGlobalStatus(DQMStore* dqm_store) { + + // std::cout << "[TrackingQualityChecker::fillGlobalStatus] already booked ? " << (bookedTrackingGlobalStatus_ ? "yes" : "nope") << std::endl; + if (!bookedTrackingGlobalStatus_) bookGlobalStatus(dqm_store); + + fillDummyGlobalStatus(); + fillTrackingStatus(dqm_store); + // std::cout << "[TrackingQualityChecker::fillGlobalStatus] DONE" << std::endl; + dqm_store->cd(); +} + +void TrackingQualityChecker::fillLSStatus(DQMStore* dqm_store) { + + // std::cout << "[TrackingQualityChecker::fillLSStatus] already booked ? " << (bookedTrackingLSStatus_ ? "yes" : "nope") << std::endl; + if (!bookedTrackingLSStatus_) bookLSStatus(dqm_store); + + fillDummyLSStatus(); + fillTrackingStatusAtLumi(dqm_store); + // std::cout << "[TrackingQualityChecker::fillLSStatus] DONE" << std::endl; + dqm_store->cd(); +} + +// +// -- Fill Tracking Status +// +void TrackingQualityChecker::fillTrackingStatus(DQMStore* dqm_store) { + + float gstatus = 0.0; + + dqm_store->cd(); + if (!TrackingUtility::goToDir(dqm_store, TopFolderName_)) return; + + + int ibin = 0; + for (std::map::iterator it = TrackingMEsMap.begin(); + it != TrackingMEsMap.end(); it++) { + + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + + ibin++; + + std::string localMEdirpath = it->second.HistoDir; + std::string MEname = it->second.HistoName; + + std::vector tmpMEvec = dqm_store->getContents(dqm_store->pwd()+"/"+localMEdirpath); + MonitorElement* me = NULL; + + size_t nMEs = 0; + for ( auto ime : tmpMEvec ) { + std::string name = ime->getName(); + if ( name.find(MEname) != std::string::npos) { + me = ime; + nMEs++; + } + } + // only one ME found + if (nMEs == 1) { + float status = 0.; + for ( auto ime : tmpMEvec ) { + std::string name = ime->getName(); + if ( name.find(MEname) != std::string::npos) { + me = ime; + } + } + if (!me) continue; + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] status: " << status << std::endl; + std::vector qt_reports = me->getQReports(); + size_t nQTme = qt_reports.size(); + if (nQTme != 0) { + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] qt_reports: " << qt_reports.size() << std::endl; + // loop on possible QTs + for ( auto iQT : qt_reports ) { + status += iQT->getQTresult(); + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT: " << iQT->getQRName() << std::endl; + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname << " status: " << iQT->getQTresult() << " exists ? " << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl; + } + status = status/float(nQTme); + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname << " status: " << status << std::endl; + it->second.TrackingFlag->Fill(status); + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] TrackGlobalSummaryReportMap: " << TrackGlobalSummaryReportMap << std::endl; + fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, status); + } + + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] gstatus: " << gstatus << " x status: " << status << std::endl; + if ( status < 0. ) gstatus = -1.; + else gstatus += status; + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] ===> gstatus: " << gstatus << std::endl; + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + + } else { // more than 1 ME w/ the same root => they need to be considered together + float status = 1.; + for ( auto ime : tmpMEvec ) { + float tmp_status = 1.; + std::string name = ime->getName(); + if ( name.find(MEname) != std::string::npos) { + me = ime; + + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] status: " << status << std::endl; + std::vector qt_reports = me->getQReports(); + size_t nQTme = qt_reports.size(); + if (nQTme != 0) { + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] qt_reports: " << qt_reports.size() << std::endl; + // loop on possible QTs + for ( auto iQT : qt_reports ) { + tmp_status += iQT->getQTresult(); + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] iQT: " << iQT->getQRName() << std::endl; + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname << " status: " << iQT->getQTresult() << " exists ? " << (it->second.TrackingFlag ? "yes " : "no ") << it->second.TrackingFlag << std::endl; + } + tmp_status = tmp_status/float(nQTme); + } + } + status = fminf(tmp_status,status); + } + if ( status < 0. ) gstatus = -1.; + else gstatus += status; + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] MEname: " << MEname << " status: " << status << std::endl; + it->second.TrackingFlag->Fill(status); + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] TrackGlobalSummaryReportMap: " << TrackGlobalSummaryReportMap << std::endl; + + fillStatusHistogram(TrackGlobalSummaryReportMap, ibin, 1, status); + } + } + + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] gstatus: " << gstatus << std::endl; + size_t nQT = TrackingMEsMap.size(); + if (gstatus < 1.) gstatus = -1.; + else gstatus = gstatus/float(nQT); + + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] ===> gstatus: " << gstatus << std::endl; + TrackGlobalSummaryReportGlobal->Fill(gstatus); + dqm_store->cd(); + + // std::cout << "[TrackingQualityChecker::fillTrackingStatus] DONE" << std::endl; + +} + +// +// -- Fill Report Summary Map +// + void TrackingQualityChecker::fillStatusHistogram(MonitorElement* me, int xbin, int ybin, float val){ + if (me && me->kind() == MonitorElement::DQM_KIND_TH2F) { + TH2F* th2d = me->getTH2F(); + th2d->SetBinContent(xbin, ybin, val); + } + } + +// Fill Tracking Status MEs at the Lumi block +// +void TrackingQualityChecker::fillTrackingStatusAtLumi(DQMStore* dqm_store){ + + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] starting .. " << std::endl; + float gstatus = 1.0; + + dqm_store->cd(); + if (!TrackingUtility::goToDir(dqm_store, TopFolderName_)) return; + + + int ibin = 0; + for (std::map::iterator it = TrackingLSMEsMap.begin(); + it != TrackingLSMEsMap.end(); it++) { + + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + + ibin++; + + std::string localMEdirpath = it->second.HistoLSDir; + std::string MEname = it->second.HistoLSName; + float lower_cut = it->second.HistoLSLowerCut; + float upper_cut = it->second.HistoLSUpperCut; + + float status = 1.0; + + std::vector tmpMEvec = dqm_store->getContents(dqm_store->pwd()+"/"+localMEdirpath); + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmpMEvec: " << tmpMEvec.size() << std::endl; + + MonitorElement* me = NULL; + + size_t nMEs = 0; + for ( auto ime : tmpMEvec ) { + std::string name = ime->getName(); + if ( name.find(MEname) != std::string::npos) { + me = ime; + nMEs++; + } + } + // only one ME found + if (nMEs == 1) { + for ( auto ime : tmpMEvec ) { + std::string name = ime->getName(); + if ( name.find(MEname) != std::string::npos) { + me = ime; + } + } + if (!me) continue; + + if (me->kind() == MonitorElement::DQM_KIND_TH1F) { + float x_mean = me->getMean(); + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << " x_mean: " << x_mean << std::endl; + if (x_mean <= lower_cut || x_mean > upper_cut) status = 0.0; + else status = 1.0; + } + } else { // more than 1 ME w/ the same root => they need to be considered together + for ( auto ime : tmpMEvec ) { + float tmp_status = 1.; + std::string name = ime->getName(); + if ( name.find(MEname) != std::string::npos) { + me = ime; + if (!me) continue; + + if (me->kind() == MonitorElement::DQM_KIND_TH1F) { + float x_mean = me->getMean(); + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] MEname: " << MEname << "[" << me->getName() << "] x_mean: " << x_mean << std::endl; + if (x_mean <= lower_cut || x_mean > upper_cut) tmp_status = 0.0; + else tmp_status = 1.0; + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] tmp_status: " << tmp_status << std::endl; + } + } + status = fminf(tmp_status,status); + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ==> status: " << status << std::endl; + } // loop on tmpMEvec + } + it->second.TrackingFlag->Fill(status); + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> status: " << status << " [" << gstatus << "]" << std::endl; + if (status == 0.0) gstatus = -1.0; + else gstatus = gstatus * status; + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ===> gstatus: " << gstatus << std::endl; + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] ME: " << it->first << " [" << it->second.TrackingFlag->getFullname() << "] flag: " << it->second.TrackingFlag->getFloatValue() << std::endl; + } + TrackLSSummaryReportGlobal->Fill(gstatus); + dqm_store->cd(); + + // std::cout << "[TrackingQualityChecker::fillTrackingStatusAtLumi] DONE" << std::endl; +} diff --git a/DQM/TrackingMonitorClient/src/TrackingUtility.cc b/DQM/TrackingMonitorClient/src/TrackingUtility.cc new file mode 100644 index 0000000000000..3eb08f00944fa --- /dev/null +++ b/DQM/TrackingMonitorClient/src/TrackingUtility.cc @@ -0,0 +1,246 @@ +#include "DQM/TrackingMonitorClient/interface/TrackingUtility.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "Geometry/Records/interface/IdealGeometryRecord.h" +// +// Get a list of MEs in a folder +// +int TrackingUtility::getMEList(std::string name, std::vector& values) { + values.clear(); + std::string prefix_str = name.substr(0,(name.find(":"))); + prefix_str += "/"; + std::string temp_str = name.substr(name.find(":")+1); + split(temp_str, values, ","); + for (std::vector::iterator it = values.begin(); + it != values.end(); it++) (*it).insert(0,prefix_str); + return values.size(); +} +// +// Get a list of MEs in a folder and the path name +// +int TrackingUtility::getMEList(std::string name, std::string& dir_path, std::vector& values) { + values.clear(); + dir_path = name.substr(0,(name.find(":"))); + dir_path += "/"; + std::string temp_str = name.substr(name.find(":")+1); + split(temp_str, values, ","); + return values.size(); +} + +// Check if the requested ME exists in a folder +bool TrackingUtility::checkME(std::string name, std::string me_name, std::string& full_path) { + if (name.find(name) == std::string::npos) return false; + std::string prefix_str = name.substr(0,(name.find(":"))); + prefix_str += "/"; + std::string temp_str = name.substr(name.find(":")+1); + std::vector values; + split(temp_str, values, ","); + for (std::vector::iterator it = values.begin(); + it != values.end(); it++) { + if ((*it).find(me_name) != std::string::npos) { + full_path = prefix_str + (*it); + return true; + } + } + return false; +} +// +// -- Split a given string into a number of strings using given +// delimiters and fill a vector with splitted strings +// +void TrackingUtility::split(const std::string& str, std::vector& tokens, const std::string& delimiters) { + // Skip delimiters at beginning. + std::string::size_type lastPos = str.find_first_not_of(delimiters, 0); + + // Find first "non-delimiter". + std::string::size_type pos = str.find_first_of(delimiters, lastPos); + + while (std::string::npos != pos || std::string::npos != lastPos) { + // Found a token, add it to the std::vector. + tokens.push_back(str.substr(lastPos, pos - lastPos)); + + // Skip delimiters. Note the "not_of" + lastPos = str.find_first_not_of(delimiters, pos); + + // Find next "non-delimiter" + pos = str.find_first_of(delimiters, lastPos); + } +} +// +// -- Get Color code from Status +// +void TrackingUtility::getMEStatusColor(int status, int& rval, int&gval, int& bval) { + if (status == dqm::qstatus::STATUS_OK) { + rval = 0; gval = 255; bval = 0; + } else if (status == dqm::qstatus::WARNING) { + rval = 255; gval = 255; bval = 0; + } else if (status == dqm::qstatus::ERROR) { + rval = 255; gval = 0; bval = 0; + } else if (status == dqm::qstatus::OTHER) { + rval = 255; gval = 150; bval = 0; + } else { + rval = 0; gval = 0; bval = 255; + } +} +// +// -- Get Color code from Status +// +void TrackingUtility::getMEStatusColor(int status, int& icol, std::string& tag) { + if (status == dqm::qstatus::STATUS_OK) { + tag = "Ok"; + icol = 3; + } else if (status == dqm::qstatus::WARNING) { + tag = "Warning"; + icol = 5; + } else if (status == dqm::qstatus::ERROR) { + tag = "Error"; + icol = 2; + } else if (status == dqm::qstatus::OTHER) { + tag = "Other"; + icol = 1; + } else { + tag = " "; + icol = 1; + } +} + +// +// -- Get Status of Monitor Element +// +int TrackingUtility::getMEStatus(MonitorElement* me) { + int status = 0; + if (me->getQReports().size() == 0) { + status = 0; + } else if (me->hasError()) { + status = dqm::qstatus::ERROR; + } else if (me->hasWarning()) { + status = dqm::qstatus::WARNING; + } else if (me->hasOtherReport()) { + status = dqm::qstatus::OTHER; + } else { + status = dqm::qstatus::STATUS_OK; + } + return status; +} +// +// -- Fill Module Names +// +void TrackingUtility::getModuleFolderList(DQMStore * dqm_store, std::vector& mfolders){ + std::string currDir = dqm_store->pwd(); + if (currDir.find("module_") != std::string::npos) { + // std::string mId = currDir.substr(currDir.find("module_")+7, 9); + mfolders.push_back(currDir); + } else { + std::vector subdirs = dqm_store->getSubdirs(); + for (std::vector::const_iterator it = subdirs.begin(); + it != subdirs.end(); it++) { + dqm_store->cd(*it); + getModuleFolderList(dqm_store, mfolders); + dqm_store->goUp(); + } + } +} +// +// -- Get Status of Monitor Element +// +int TrackingUtility::getMEStatus(MonitorElement* me, int& bad_channels) { + int status = 0; + if (me->getQReports().size() == 0) { + status = 0; + bad_channels = -1; + } else { + std::vector qreports = me->getQReports(); + bad_channels =qreports[0]->getBadChannels().size(); + if (me->hasError()) { + status = dqm::qstatus::ERROR; + } else if (me->hasWarning()) { + status = dqm::qstatus::WARNING; + } else if (me->hasOtherReport()) { + status = dqm::qstatus::OTHER; + } else { + status = dqm::qstatus::STATUS_OK; + } + } + return status; +} +// +// -- Get Status of Monitor Element +// +void TrackingUtility::getMEValue(MonitorElement* me, std::string & val){ + val = ""; + if ( me && ( me->kind()==MonitorElement::DQM_KIND_REAL || me->kind()==MonitorElement::DQM_KIND_INT ) ) { + val = me->valueString(); + val = val.substr(val.find("=")+1); + } +} +// +// -- go to a given Directory +// +bool TrackingUtility::goToDir(DQMStore * dqm_store, std::string name) { + std::string currDir = dqm_store->pwd(); + std::string dirName = currDir.substr(currDir.find_last_of("/")+1); + if (dirName.find(name) == 0) { + return true; + } + std::vector subDirVec = dqm_store->getSubdirs(); + for (std::vector::const_iterator ic = subDirVec.begin(); + ic != subDirVec.end(); ic++) { + std::string fname = (*ic); + if ( + (fname.find("Reference") != std::string::npos) || + (fname.find("AlCaReco") != std::string::npos) || + (fname.find("HLT") != std::string::npos) + ) continue; + dqm_store->cd(fname); + if (!goToDir(dqm_store, name)) dqm_store->goUp(); + else return true; + } + return false; +} +// +// -- Set Bad Channel Flag from hname +// +void TrackingUtility::setBadModuleFlag(std::string & hname, uint16_t& flg){ + + if (hname.find("FractionOfBadChannels") != std::string::npos) flg |= (1<<0); + else if (hname.find("NumberOfDigi") != std::string::npos) flg |= (1<<1); + else if (hname.find("NumberOfCluster") != std::string::npos) flg |= (1<<2); + else if (hname.find("ExcludedFedChannel") != std::string::npos) flg |= (1<<3); + else if (hname.find("DCSError") != std::string::npos) flg |= (1<<4); +} +// +// -- Get the Status Message from Bad Module Flag +// +void TrackingUtility::getBadModuleStatus(uint16_t flag, std::string & message){ + if (flag == 0) message += " No Error"; + else { + // message += " Error from :: "; + if (((flag >> 0) & 0x1) > 0) message += " Fed BadChannel : "; + if (((flag >> 1) & 0x1) > 0) message += " # of Digi : "; + if (((flag >> 2) & 0x1) > 0) message += " # of Clusters :"; + if (((flag >> 3) & 0x1) > 0) message += " Excluded FED Channel "; + if (((flag >> 4) & 0x1) > 0) message += " DCSError "; + } +} +// +// -- Set Event Info Folder +// +void TrackingUtility::getTopFolderPath(DQMStore * dqm_store, std::string top_dir, std::string& path) { + path = ""; + dqm_store->cd(); + if (dqm_store->dirExists(top_dir)) { + dqm_store->cd(top_dir); + path = dqm_store->pwd(); + } else { + if (TrackingUtility::goToDir(dqm_store, top_dir)) { + std::string tdir = "TrackParameters"; + if (TrackingUtility::goToDir(dqm_store, tdir)) { + path = dqm_store->pwd(); + path = path.substr(0, path.find(tdir)-1); + } + } + } +} diff --git a/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py b/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py new file mode 100644 index 0000000000000..d3a024b45fed0 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/EDModules2monitor_cfi.py @@ -0,0 +1,116 @@ +import FWCore.ParameterSet.Config as cms + + +selectedModules = [] + +pluginsMonName = {} +modulesLabel = {} +categories = {} + +### LocalReco +pluginsMonName['LocalReco'] = cms.string ('LocalReco') +modulesLabel ['LocalReco'] = cms.vstring('siPixelDigis', 'siStripDigis', 'siPixelClusters', 'siStripClusters' ) # siPixelDigis : SiPixelRawToDigi, siStripDigis : SiStripRawToDigi (SiStripRawToDigiUnpacker), siPixelClusters : SiPixelClusterProducer, siStripClusters : SiStripClusterizer +categories ['LocalReco'] = cms.vstring('SiPixelRawToDigi', 'TooManyErrors', 'TooManyClusters' ) + + +# apparentely there are not LogError in RecoLocalTracker/SubCollectionProducers/src/TrackClusterRemover.cc +pluginsMonName['Clusterizer'] = cms.string ( 'TrackClusterRemover' ) +modulesLabel ['Clusterizer'] = cms.vstring( 'lowPtTripletStepClusters', 'pixelPairStepClusters', 'detachedTripletStepClusters', 'mixedTripletStepClusters', 'pixelLessStepClusters', 'tobTecStepClusters' ) # TrackClusterRemover +categories ['Clusterizer'] = cms.vstring( ) + +# initialStepSeeds,lowPtTripletStepSeeds, pixelPairStepSeeds, detachedTripletStepSeeds, : TooManyClusters (SeedGeneratorFromRegionHitsEDProducer), +# photonConvTrajSeedFromSingleLeg : (PhotonConversionTrajectorySeedProducerFromSingleLeg) +pluginsMonName['Seeding'] = cms.string ( 'Seeding' ) +modulesLabel ['Seeding'] = cms.vstring( 'initialStepSeeds', 'lowPtTripletStepSeeds', 'pixelPairStepSeeds', 'detachedTripletStepSeeds', 'mixedTripletStepSeedsA', 'mixedTripletStepSeedsB', 'mixedTripletStepSeeds', 'pixelLessStepSeeds', 'tobTecStepSeeds', 'photonConvTrajSeedFromSingleLeg') +categories ['Seeding'] = cms.vstring( 'TooManyClusters', 'TooManyPairs', 'TooManyTriplets', 'TooManySeeds' ) + +# RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc +pluginsMonName['TrackCandidate'] = cms.string ( 'TrackCandidate' ) +modulesLabel ['TrackCandidate'] = cms.vstring( 'initialStepTrackCandidates', 'lowPtTripletStepTrackCandidates', 'pixelPairStepTrackCandidates', 'detachedTripletStepTrackCandidates', 'mixedTripletStepTrackCandidates', 'pixelLessStepTrackCandidates', 'tobTecStepTrackCandidates', 'convTrackCandidates' ) +categories ['TrackCandidate'] = cms.vstring( 'TooManySeeds' ) + +# TrackProducer:FailedPropagation +pluginsMonName['TrackFinder'] = cms.string ( 'TrackFinder' ) +modulesLabel ['TrackFinder'] = cms.vstring( 'pixelTracks', 'initialStepTracks', 'lowPtTripletStepTracks', 'pixelPairStepTracks', 'detachedTripletStepTracks', 'mixedTripletStepTracks', 'pixelLessStepTracks', 'tobTecStepTracks', 'generalTracks' ) +categories ['TrackFinder'] = cms.vstring( 'FailedPropagation' ) + + +pluginsMonName['FullIterTracking'] = cms.string ( 'FullIterTracking' ) +modulesLabel ['FullIterTracking'] = cms.vstring( + 'initialStepSeeds_iter0', + 'initialStepTrackCandidates_iter0', + 'initialStepTracks_iter0', + 'lowPtTripletStepSeeds_iter1', + 'lowPtTripletStepTrackCandidates_iter1', + 'lowPtTripletStepTracks_iter1', + 'pixelPairStepSeeds_iter2', + 'pixelPairStepTrackCandidates_iter2', + 'pixelPairStepTracks_iter2', + 'detachedTripletStepSeeds_iter3', + 'detachedTripletStepTrackCandidates_iter3', + 'detachedTripletStepTracks_iter3', + 'mixedTripletStepSeedsA_iter4', + 'mixedTripletStepSeedsB_iter4', + 'mixedTripletStepTrackCandidates_iter4', + 'mixedTripletStepTracks_iter4', + 'pixelLessStepSeeds_iter5', + 'pixelLessStepTrackCandidates_iter5', + 'pixelLessStepTracks_iter5', + 'tobTecStepSeeds_iter6', + 'tobTecStepTrackCandidates_iter6', + 'tobTecStepTracks_iter6', + 'photonConvTrajSeedFromSingleLeg', + 'convTrackCandidates', + 'convStepTracks', +) +categories['FullIterTracking'] = cms.vstring( + 'TooManyClusters', + 'TooManyPairs', + 'TooManyTriplets', + 'TooManySeeds', +) + + +pluginsMonName['IterTracking'] = cms.string ( 'IterTracking' ) +modulesLabel ['IterTracking'] = cms.vstring( + 'initialStepSeeds_iter0', + 'initialStepTrackCandidates_iter0', + 'initialStepTracks_iter0', + 'lowPtTripletStepSeeds_iter1', + 'lowPtTripletStepTrackCandidates_iter1', + 'lowPtTripletStepTracks_iter1', + 'pixelPairStepSeeds_iter2', + 'pixelPairStepTrackCandidates_iter2', + 'pixelPairStepTracks_iter2', + 'detachedTripletStepSeeds_iter3', + 'detachedTripletStepTrackCandidates_iter3', + 'detachedTripletStepTracks_iter3', + 'mixedTripletStepSeedsA_iter4', + 'mixedTripletStepSeedsB_iter4', + 'mixedTripletStepTrackCandidates_iter4', + 'mixedTripletStepTracks_iter4', + 'pixelLessStepSeeds_iter5', + 'pixelLessStepTrackCandidates_iter5', + 'pixelLessStepTracks_iter5', + 'tobTecStepSeeds_iter6', + 'tobTecStepTrackCandidates_iter6', + 'tobTecStepTracks_iter6', +) +categories['IterTracking'] = cms.vstring( + 'TooManyClusters', + 'TooManyPairs', + 'TooManyTriplets', + 'TooManySeeds', +) + + +pluginsMonName['Conversion'] = cms.string ( 'Conversion' ) +modulesLabel ['Conversion'] = cms.vstring( 'photonConvTrajSeedFromSingleLeg', 'convTrackCandidates', 'convStepTracks' ) +categories ['Conversion'] = cms.vstring( 'TooManyClusters', 'TooManyPairs', 'TooManyTriplets', 'TooManySeeds' ) + + +selectedModules.extend( ['LocalReco'] ) +selectedModules.extend( ['Clusterizer'] ) +selectedModules.extend( ['Seeding'] ) +selectedModules.extend( ['TrackCandidate'] ) +selectedModules.extend( ['TrackFinder'] ) diff --git a/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py b/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py new file mode 100644 index 0000000000000..ac368ab9e2f52 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/IterTrackingModules4seedMonitoring_cfi.py @@ -0,0 +1,103 @@ +import FWCore.ParameterSet.Config as cms + +selectedIterTrackingStep = [] + +seedInputTag = {} +trackCandInputTag = {} +trackSeedSizeBin = {} +trackSeedSizeMin = {} +trackSeedSizeMax = {} +clusterLabel = {} +clusterBin = {} +clusterMax = {} + +seedInputTag ['iter0'] = cms.InputTag("initialStepSeeds") +trackCandInputTag['iter0'] = cms.InputTag("initialStepSeeds") +trackSeedSizeBin ['iter0'] = cms.int32(100) # could be 50 ? +trackSeedSizeMin ['iter0'] = cms.double(0) +trackSeedSizeMax ['iter0'] = cms.double(5000) +clusterLabel ['iter0'] = cms.vstring('Pix') +clusterBin ['iter0'] = cms.int32(100) +clusterMax ['iter0'] = cms.double(20000) + +seedInputTag ['iter1'] = cms.InputTag("lowPtTripletStepSeeds") +trackCandInputTag['iter1'] = cms.InputTag("lowPtTripletStepTrackCandidates") +trackSeedSizeBin ['iter1'] = cms.int32(100) +trackSeedSizeMax ['iter1'] = cms.double(30000) +trackSeedSizeMin ['iter1'] = cms.double(0) +clusterLabel ['iter1'] = cms.vstring('Pix') +clusterBin ['iter1'] = cms.int32(100) +clusterMax ['iter1'] = cms.double(20000) + +seedInputTag ['iter2'] = cms.InputTag("pixelPairStepSeeds") +trackCandInputTag['iter2'] = cms.InputTag("pixelPairStepTrackCandidates") +trackSeedSizeBin ['iter2'] = cms.int32(400) +trackSeedSizeMin ['iter2'] = cms.double(100000) +trackSeedSizeMax ['iter2'] = cms.double(0) +clusterLabel ['iter2'] = cms.vstring('Pix') +clusterBin ['iter2'] = cms.int32(100) +clusterMax ['iter2'] = cms.double(20000) + +seedInputTag ['iter3'] = cms.InputTag("detachedTripletStepSeeds") +trackCandInputTag['iter3'] = cms.InputTag("detachedTripletStepTrackCandidates") +trackSeedSizeBin ['iter3'] = cms.int32(100) +trackSeedSizeMin ['iter3'] = cms.double(30000) +trackSeedSizeMax ['iter3'] = cms.double(0) +clusterLabel ['iter3'] = cms.vstring('Pix') +clusterBin ['iter3'] = cms.int32(100) +clusterMax ['iter3'] = cms.double(20000) + +seedInputTag ['iter4'] = cms.InputTag("mixedTripletStepSeeds") +trackCandInputTag['iter4'] = cms.InputTag("mixedTripletStepTrackCandidates") +trackSeedSizeBin ['iter4'] = cms.int32(400) +trackSeedSizeMin ['iter4'] = cms.double(200000) +trackSeedSizeMax ['iter4'] = cms.double(0) +clusterLabel ['iter4'] = cms.vstring('Tot') +clusterBin ['iter4'] = cms.int32(500) +clusterMax ['iter4'] = cms.double(100000) + +seedInputTag ['iter5'] = cms.InputTag("pixelLessStepSeeds") +trackCandInputTag['iter5'] = cms.InputTag("pixelLessStepTrackCandidates") +trackSeedSizeBin ['iter5'] = cms.int32(400) +trackSeedSizeMin ['iter5'] = cms.double(200000) +trackSeedSizeMax ['iter5'] = cms.double(0) +clusterLabel ['iter5'] = cms.vstring('Strip') +clusterBin ['iter5'] = cms.int32(500) +clusterMax ['iter5'] = cms.double(100000) + +seedInputTag ['iter6'] = cms.InputTag("tobTecStepSeeds") +trackCandInputTag['iter6'] = cms.InputTag("tobTecStepTrackCandidates") +trackSeedSizeBin ['iter6'] = cms.int32(400) +trackSeedSizeMin ['iter6'] = cms.double(100000) +trackSeedSizeMax ['iter6'] = cms.double(0) +clusterLabel ['iter6'] = cms.vstring('Strip') +clusterBin ['iter6'] = cms.int32(500) +clusterMax ['iter6'] = cms.double(100000) + +seedInputTag ['iter9'] = cms.InputTag("muonSeededSeedsInOut") +trackCandInputTag['iter9'] = cms.InputTag("muonSeededTrackCandidatesInOut") +trackSeedSizeBin ['iter9'] = cms.int32(15) +trackSeedSizeMin ['iter9'] = cms.double(-0.5) +trackSeedSizeMax ['iter9'] = cms.double(14.5) +clusterLabel ['iter9'] = cms.vstring('Strip') +clusterBin ['iter9'] = cms.int32(500) +clusterMax ['iter9'] = cms.double(100000) + +seedInputTag ['iter10'] = cms.InputTag("muonSeededSeedsOutIn") +trackCandInputTag['iter10'] = cms.InputTag("muonSeededTrackCandidatesOutIn") +trackSeedSizeBin ['iter10'] = cms.int32(15) +trackSeedSizeMin ['iter10'] = cms.double(-0.5) +trackSeedSizeMax ['iter10'] = cms.double(14.5) +clusterLabel ['iter10'] = cms.vstring('Strip') +clusterBin ['iter10'] = cms.int32(500) +clusterMax ['iter10'] = cms.double(100000) + +selectedIterTrackingStep.extend( ['iter0'] ) +selectedIterTrackingStep.extend( ['iter1'] ) +selectedIterTrackingStep.extend( ['iter2'] ) +selectedIterTrackingStep.extend( ['iter3'] ) +selectedIterTrackingStep.extend( ['iter4'] ) +selectedIterTrackingStep.extend( ['iter5'] ) +selectedIterTrackingStep.extend( ['iter6'] ) +selectedIterTrackingStep.extend( ['iter9'] ) +selectedIterTrackingStep.extend( ['iter10'] ) diff --git a/DQM/TrackingMonitorSource/python/LogMessageMonitor_cff.py b/DQM/TrackingMonitorSource/python/LogMessageMonitor_cff.py new file mode 100644 index 0000000000000..85dd7af6b1805 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/LogMessageMonitor_cff.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +import DQM.TrackingMonitor.LogMessageMonitor_cfi + +# Clone for all PDs but MinBias #### +LogMessageMonCommon = DQM.TrackingMonitor.LogMessageMonitor_cfi.LogMessageMon.clone() +LogMessageMonCommon.andOr = cms.bool( False ) +LogMessageMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) +LogMessageMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) +LogMessageMonCommon.andOrDcs = cms.bool( False ) +LogMessageMonCommon.errorReplyDcs = cms.bool( True ) + +# Clone for MinBias ### +LogMessageMonMB = DQM.TrackingMonitor.LogMessageMonitor_cfi.LogMessageMon.clone() +LogMessageMonMB.andOr = cms.bool( False ) +LogMessageMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) +LogMessageMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) +LogMessageMonMB.andOrDcs = cms.bool( False ) +LogMessageMonMB.errorReplyDcs = cms.bool( True ) +LogMessageMonMB.dbLabel = cms.string("SiStripDQMTrigger") +LogMessageMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) +LogMessageMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") +LogMessageMonMB.hltDBKey = cms.string("Tracker_MB") +LogMessageMonMB.errorReplyHlt = cms.bool( False ) +LogMessageMonMB.andOrHlt = cms.bool(True) + diff --git a/DQM/TrackingMonitorSource/python/TrackCollections2monitor_cff.py b/DQM/TrackingMonitorSource/python/TrackCollections2monitor_cff.py new file mode 100644 index 0000000000000..4fd9e4fa0bcbe --- /dev/null +++ b/DQM/TrackingMonitorSource/python/TrackCollections2monitor_cff.py @@ -0,0 +1,75 @@ +import FWCore.ParameterSet.Config as cms + +mainfolderName = {} +vertexfolderName = {} +sequenceName = {} +trackPtMin = {} +trackPtMax = {} +doPlotsPCA = {} + +selectedTracks = [] + +mainfolderName ['generalTracks'] = 'Tracking/TrackParameters/generalTracks' +vertexfolderName['generalTracks'] = 'Tracking/PrimaryVertices/generalTracks' +trackPtMin ['generalTracks'] = cms.double(0.) +trackPtMax ['generalTracks'] = cms.double(100.) +doPlotsPCA ['generalTracks'] = cms.bool(False) + +trackSelector = cms.EDFilter('TrackSelector', + src = cms.InputTag('generalTracks'), + cut = cms.string("") +) + +### highpurity definition: https://cmssdt.cern.ch/SDT/lxr/source/RecoTracker/FinalTrackSelectors/python/selectHighPurity_cfi.py +highPurityPtRange0to1 = trackSelector.clone() +highPurityPtRange0to1.cut = cms.string("quality('highPurity') & pt >= 0 & pt < 1 ") + +sequenceName ['highPurityPtRange0to1'] = cms.Sequence(highPurityPtRange0to1) +mainfolderName ['highPurityPtRange0to1'] = 'Tracking/TrackParameters/highPurityTracks/pt_0to1' +vertexfolderName['highPurityPtRange0to1'] = 'Tracking/PrimaryVertices/highPurityTracks/pt_0to1' +trackPtMin ['highPurityPtRange0to1'] = cms.double(0.) +trackPtMax ['highPurityPtRange0to1'] = cms.double(1.) + +highPurityPtRange1to10 = trackSelector.clone() +highPurityPtRange1to10.cut = cms.string("quality('highPurity') & pt >= 1 & pt < 10 ") + +sequenceName ['highPurityPtRange1to10'] = cms.Sequence( highPurityPtRange1to10 ) +mainfolderName ['highPurityPtRange1to10'] = 'Tracking/TrackParameters/highPurityTracks/pt_1to10' +vertexfolderName['highPurityPtRange1to10'] = 'Tracking/PrimaryVertices/highPurityTracks/pt_1to10' +trackPtMin ['highPurityPtRange1to10'] = cms.double(1.) +trackPtMax ['highPurityPtRange1to10'] = cms.double(10.) + + +highPurityPt10 = trackSelector.clone() +highPurityPt10.cut = cms.string("quality('highPurity') & pt >= 10") + +sequenceName ['highPurityPt10'] = cms.Sequence( highPurityPt10 ) +mainfolderName ['highPurityPt10'] = 'Tracking/TrackParameters/highPurityTracks/pt_10' +vertexfolderName['highPurityPt10'] = 'Tracking/PrimaryVertices/highPurityTracks/pt_10' +trackPtMin ['highPurityPt10'] = cms.double(10.) +trackPtMax ['highPurityPt10'] = cms.double(110.) + + +###### old monitored track collections +highPurityPt1 = trackSelector.clone() +highPurityPt1.cut = cms.string("quality('highPurity') & pt >= 1") + +sequenceName ['highPurityPt1'] = cms.Sequence(highPurityPt1) +mainfolderName ['highPurityPt1'] = 'Tracking/TrackParameters/highPurityTracks/pt_1' +vertexfolderName['highPurityPt1'] = 'Tracking/PrimaryVertices/highPurityTracks/pt_1' +trackPtMin ['highPurityPt1'] = cms.double(0.) +trackPtMax ['highPurityPt1'] = cms.double(100.) +doPlotsPCA ['highPurityPt1'] = cms.bool(True) + +selectedTracks.extend( ['generalTracks'] ) +#selectedTracks.extend( ['highPurityPtRange0to1'] ) +#selectedTracks.extend( ['highPurityPtRange1to10'] ) +#selectedTracks.extend( ['highPurityPt10'] ) + +selectedTracks.extend( ['highPurityPt1'] ) + +#selectedTracks2runSequence=cms.Sequence() +#for tracks in selectedTracks : +# if tracks != 'generalTracks': +# selectedTracks2runSequence+=sequenceName[tracks] + diff --git a/DQM/TrackingMonitorSource/python/TrackerCollisionTrackingMonitor_cff.py b/DQM/TrackingMonitorSource/python/TrackerCollisionTrackingMonitor_cff.py new file mode 100644 index 0000000000000..bc552a7e1c8b3 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/TrackerCollisionTrackingMonitor_cff.py @@ -0,0 +1,29 @@ +import FWCore.ParameterSet.Config as cms + +# Clone for TrackingMonitor for all PDs but MinBias ### +import DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi +TrackerCollisionTrackMonCommon = DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi.TrackerCollisionTrackMon.clone() +TrackerCollisionTrackMonCommon.andOr = cms.bool( False ) +TrackerCollisionTrackMonCommon.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) +TrackerCollisionTrackMonCommon.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) +TrackerCollisionTrackMonCommon.andOrDcs = cms.bool( False ) +TrackerCollisionTrackMonCommon.errorReplyDcs = cms.bool( True ) +TrackerCollisionTrackMonCommon.setLabel("TrackerCollisionTrackMonCommon") + +# Clone for TrackingMonitor for MinBias ### +import DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi +TrackerCollisionTrackMonMB = DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi.TrackerCollisionTrackMon.clone() +TrackerCollisionTrackMonMB.andOr = cms.bool( False ) +TrackerCollisionTrackMonMB.dcsInputTag = cms.InputTag( "scalersRawToDigi" ) +TrackerCollisionTrackMonMB.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29) +TrackerCollisionTrackMonMB.andOrDcs = cms.bool( False ) +TrackerCollisionTrackMonMB.errorReplyDcs = cms.bool( True ) +TrackerCollisionTrackMonMB.dbLabel = cms.string("SiStripDQMTrigger") +TrackerCollisionTrackMonMB.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) +TrackerCollisionTrackMonMB.hltPaths = cms.vstring("HLT_ZeroBias_*") +TrackerCollisionTrackMonMB.hltDBKey = cms.string("Tracker_MB") +TrackerCollisionTrackMonMB.errorReplyHlt = cms.bool( False ) +TrackerCollisionTrackMonMB.andOrHlt = cms.bool(True) +TrackerCollisionTrackMonMB.doPrimaryVertexPlots = cms.bool(True) +TrackerCollisionTrackMonMB.setLabel("TrackerCollisionTrackMonMB") + diff --git a/DQM/TrackingMonitorSource/python/TrackingSourceConfigP5_cff.py b/DQM/TrackingMonitorSource/python/TrackingSourceConfigP5_cff.py new file mode 100644 index 0000000000000..98736269e095b --- /dev/null +++ b/DQM/TrackingMonitorSource/python/TrackingSourceConfigP5_cff.py @@ -0,0 +1,76 @@ +import FWCore.ParameterSet.Config as cms + +# TrackingMonitor #### +# Clone for Cosmic Track Finder +import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +TrackMon_cosmicTk = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +TrackMon_cosmicTk.TrackProducer = 'cosmictrackfinderP5' +TrackMon_cosmicTk.AlgoName = 'CosmicTk' +TrackMon_cosmicTk.FolderName = 'Tracking/TrackParameters' +TrackMon_cosmicTk.doSeedParameterHistos = True + +# Clone for CKF Tracks +import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +TrackMon_ckf = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +TrackMon_ckf.TrackProducer = 'ctfWithMaterialTracksP5' +TrackMon_ckf.AlgoName = 'CKFTk' +TrackMon_ckf.FolderName = 'Tracking/TrackParameters' +TrackMon_ckf.doSeedParameterHistos = True + +# Clone for Road Search Tracks +#import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +#TrackMon_rs = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +#TrackMon_rs.TrackProducer = 'rsWithMaterialTracksP5' +#TrackMon_rs.AlgoName = 'RSTk' +#TrackMon_rs.FolderName = 'Tracking/TrackParameters' +#TrackMon_rs.doSeedParameterHistos = True + +# Clone for General Track (for Collision data) +import DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi +TrackMon_gentk = DQM.TrackingMonitor.TrackerCollisionTrackingMonitor_cfi.TrackerCollisionTrackMon.clone() +TrackMon_gentk.FolderName = 'Tracking/TrackParameters' +TrackMon_gentk.BSFolderName = 'Tracking/TrackParameters/BeamSpotParameters' +# decrease number of histograms +#TrackMon_gentk.doTrackerSpecific = False + +# Clone for Heavy Ion Tracks (for HI Collisions) +import DQM.TrackingMonitor.TrackerHeavyIonTrackingMonitor_cfi +TrackMon_hi = DQM.TrackingMonitor.TrackerHeavyIonTrackingMonitor_cfi.TrackerHeavyIonTrackMon.clone() +TrackMon_hi.FolderName = 'Tracking/TrackParameters' +TrackMon_hi.BSFolderName = 'Tracking/TrackParameters/BeamSpotParameters' + +# Tracking Efficiency #### +# Clone for Cosmic Tracks +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_cosmicTk = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_cosmicTk.TKTrackCollection = 'cosmictrackfinderP5' +TrackEffMon_cosmicTk.AlgoName = 'CosmicTk' +TrackEffMon_cosmicTk.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for CKF Tracks +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_ckf = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_ckf.TKTrackCollection = 'ctfWithMaterialTracksP5' +TrackEffMon_ckf.AlgoName = 'CKFTk' +TrackEffMon_ckf.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for RS Tracks +#import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +#TrackEffMon_rs = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +#TrackEffMon_rs.TKTrackCollection = 'rsWithMaterialTracksP5' +#TrackEffMon_rs.AlgoName = 'RSTk' +#TrackEffMon_rs.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for Beam Halo Tracks +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_bhmuon = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_bhmuon.TKTrackCollection = 'ctfWithMaterialTracksBeamHaloMuon' +TrackEffMon_bhmuon.AlgoName = 'BHMuonTk' +TrackEffMon_bhmuon.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for Heavy Ion Tracks (for HI Collisions) +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_hi = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_hi.TKTrackCollection = 'hiGlobalPrimTracks' +TrackEffMon_hi.AlgoName = 'HeavyIonTk' +TrackEffMon_hi.FolderName = 'Tracking/TrackParameters/TrackEfficiency' diff --git a/DQM/TrackingMonitorSource/python/TrackingSourceConfigTier0_Cosmic_cff.py b/DQM/TrackingMonitorSource/python/TrackingSourceConfigTier0_Cosmic_cff.py new file mode 100644 index 0000000000000..e746a8d6e69a3 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/TrackingSourceConfigTier0_Cosmic_cff.py @@ -0,0 +1,82 @@ +import FWCore.ParameterSet.Config as cms + +# TrackingMonitor #### +# Clone for Cosmic Track Finder +import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +TrackMon_cosmicTk = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +TrackMon_cosmicTk.TrackProducer = 'cosmictrackfinderP5' +TrackMon_cosmicTk.AlgoName = 'CosmicTk' +TrackMon_cosmicTk.FolderName = 'Tracking/TrackParameters' +TrackMon_cosmicTk.doSeedParameterHistos = True + +# Clone for CKF Tracks +import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +TrackMon_ckf = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +TrackMon_ckf.TrackProducer = 'ctfWithMaterialTracksP5' +TrackMon_ckf.AlgoName = 'CKFTk' +TrackMon_ckf.FolderName = 'Tracking/TrackParameters' +TrackMon_ckf.doSeedParameterHistos = True + +# Clone for Road Search Tracks +#import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +#TrackMon_rs = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +#TrackMon_rs.TrackProducer = 'rsWithMaterialTracksP5' +#TrackMon_rs.AlgoName = 'RSTk' +#TrackMon_rs.FolderName = 'Tracking/TrackParameters' +#TrackMon_rs.doSeedParameterHistos = True + +# Clone for Beam Halo Muon Tracks +import DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi +TrackMon_bhmuon = DQM.TrackingMonitor.TrackerCosmicsTrackingMonitor_cfi.TrackerCosmicTrackMon.clone() +TrackMon_bhmuon.TrackProducer = 'ctfWithMaterialTracksBeamHaloMuon' +TrackMon_bhmuon.AlgoName = 'BHMuonTk' +TrackMon_bhmuon.FolderName = 'Tracking/TrackParameters' +TrackMon_bhmuon.doSeedParameterHistos = True + +# Tracking Efficiency +# Clone for Cosmic Tracks +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_cosmicTk = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_cosmicTk.TKTrackCollection = 'cosmictrackfinderP5' +TrackEffMon_cosmicTk.AlgoName = 'CosmicTk' +TrackEffMon_cosmicTk.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for CKF Tracks +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_ckf = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_ckf.TKTrackCollection = 'ctfWithMaterialTracksP5' +TrackEffMon_ckf.AlgoName = 'CKFTk' +TrackEffMon_ckf.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for RS Tracks +#import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +#TrackEffMon_rs = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +#TrackEffMon_rs.TKTrackCollection = 'rsWithMaterialTracksP5' +#TrackEffMon_rs.AlgoName = 'RSTk' +#TrackEffMon_rs.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Clone for Beam Halo Tracks +import DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi +TrackEffMon_bhmuon = DQM.TrackingMonitor.TrackEfficiencyMonitor_cfi.TrackEffMon.clone() +TrackEffMon_bhmuon.TKTrackCollection = 'ctfWithMaterialTracksBeamHaloMuon' +TrackEffMon_bhmuon.AlgoName = 'BHMuonTk' +TrackEffMon_bhmuon.FolderName = 'Tracking/TrackParameters/TrackEfficiency' + +# Split Tracking +from DQM.TrackingMonitor.TrackSplittingMonitor_cfi import * +TrackSplitMonitor.FolderName = 'Tracking/TrackParameters/SplitTracks' + + +# DQM Services +dqmInfoTracking = cms.EDAnalyzer("DQMEventInfo", + subSystemFolder = cms.untracked.string('Tracking') +) + +# Sequences +TrackingDQMTier0_cosmicTk = cms.Sequence(TrackMon_cosmicTk*TrackEffMon_cosmicTk) + +TrackingDQMTier0_ckf = cms.Sequence(TrackMon_ckf*TrackEffMon_ckf) + +#TrackingDQMTier0_rs = cms.Sequence(TrackMon_rs*TrackEffMon_rs) + +TrackingDQMTier0 = cms.Sequence(TrackMon_cosmicTk*TrackMon_ckf*TrackEffMon_ckf*TrackSplitMonitor*dqmInfoTracking) diff --git a/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py b/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py new file mode 100644 index 0000000000000..db799896c82f1 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py @@ -0,0 +1,181 @@ +import FWCore.ParameterSet.Config as cms + +### load which are the tracks collection 2 be monitored +from DQM.TrackingMonitorSource.TrackCollections2monitor_cff import * + +### load the different flavour of settings of the TrackingMonitor module +from DQM.TrackingMonitorSource.TrackerCollisionTrackingMonitor_cff import * + + +### define one EDAnalyzer per each track collection +### following suggestion 2. in +### https://hypernews.cern.ch/HyperNews/CMS/get/sw-develtools/1908/1.html +for tracks in selectedTracks : + label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks) + locals()[label] = TrackerCollisionTrackMonCommon.clone() + locals()[label].TrackProducer = cms.InputTag(tracks) + locals()[label].FolderName = cms.string(mainfolderName[tracks]) + locals()[label].PVFolderName = cms.string(vertexfolderName[tracks]) + locals()[label].TrackPtMin = trackPtMin[tracks] + locals()[label].TrackPtMax = trackPtMax[tracks] + locals()[label].TrackPMin = trackPtMin[tracks] + locals()[label].TrackPMax = trackPtMax[tracks] + locals()[label].doDCAPlots = doPlotsPCA[tracks] + locals()[label].doDCAwrtPVPlots = doPlotsPCA[tracks] + locals()[label].doDCAwrt000Plots = doPlotsPCA[tracks] + locals()[label].setLabel(label) + + + label = 'TrackerCollisionSelectedTrackMonMB' + str(tracks) + locals()[label] = TrackerCollisionTrackMonMB.clone() + locals()[label].TrackProducer = cms.InputTag(tracks) + locals()[label].FolderName = cms.string(mainfolderName[tracks]) + locals()[label].PVFolderName = cms.string(vertexfolderName[tracks]) + locals()[label].TrackPtMin = trackPtMin[tracks] + locals()[label].TrackPtMax = trackPtMax[tracks] + locals()[label].TrackPMin = trackPtMin[tracks] + locals()[label].TrackPMax = trackPtMax[tracks] + locals()[label].doDCAPlots = doPlotsPCA[tracks] + locals()[label].doDCAwrtPVPlots = doPlotsPCA[tracks] + locals()[label].doDCAwrt000Plots = doPlotsPCA[tracks] + locals()[label].setLabel(label) + + +#------------------------------------------------- +# Tracking Monitor +#------------------------------------------------- +import DQM.TrackingMonitor.TrackingMonitorSeed_cfi + +from DQM.TrackingMonitorSource.IterTrackingModules4seedMonitoring_cfi import * +for step in selectedIterTrackingStep : + label = 'TrackSeedMon'+str(step) + locals()[label] = DQM.TrackingMonitor.TrackingMonitorSeed_cfi.TrackMonSeed.clone() + locals()[label].TrackProducer = cms.InputTag("generalTracks") + locals()[label].FolderName = cms.string("Tracking/TrackParameters/generalTracks") + locals()[label].SeedProducer = seedInputTag[step] + locals()[label].TCProducer = trackCandInputTag[step] + locals()[label].AlgoName = cms.string( str(step) ) + locals()[label].TkSeedSizeBin = trackSeedSizeBin[step] + locals()[label].TkSeedSizeMin = trackSeedSizeMin[step] + locals()[label].TkSeedSizeMax = trackSeedSizeMax[step] + locals()[label].ClusterLabels = clusterLabel[step] + if clusterLabel[step] == cms.vstring('Pix') : + locals()[label].NClusPxBin = clusterBin[step] + locals()[label].NClusPxMax = clusterMax[step] + elif clusterLabel[step] == cms.vstring('Strip') or clusterLabel[step] == cms.vstring('Tot') : + locals()[label].NClusStrBin = clusterBin[step] + locals()[label].NClusStrMax = clusterMax[step] + +# DQM Services +dqmInfoTracking = cms.EDAnalyzer("DQMEventInfo", + subSystemFolder = cms.untracked.string('Tracking') +) + +# LogMessageMonitor #### +### load which are the module to monitor +from DQM.TrackingMonitorSource.EDModules2monitor_cfi import * + +### load the different flavour of settings of the LogMessageMonitor module +from DQM.TrackingMonitorSource.LogMessageMonitor_cff import * + +for module in selectedModules : + label = str(module)+'LogMessageMonCommon' + locals()[label] = LogMessageMonCommon.clone() + locals()[label].pluginsMonName = pluginsMonName[module] + locals()[label].modules = modulesLabel[module] + locals()[label].categories = categories[module] + locals()[label].setLabel(label) + + label = str(module)+'LogMessageMonMB' + locals()[label] = LogMessageMonMB.clone() + locals()[label].pluginsMonName = pluginsMonName[module] + locals()[label].modules = modulesLabel[module] + locals()[label].categories = categories[module] + locals()[label].setLabel(label) + + +# dEdx monitor #### +### load which dedx +from DQM.TrackingMonitorSource.dedxHarmonic2monitor_cfi import * + +### load the different flavour of settings of the dEdxAnalyzer module +from DQM.TrackingMonitorSource.dEdxAnalyzer_cff import * + + +# temporary patch in order to have BXlumi +from RecoLuminosity.LumiProducer.lumiProducer_cff import * + +# temporary test in order to temporary produce the "goodPrimaryVertexCollection" +# define with a new name if changes are necessary, otherwise simply include +# it from CommonTools/ParticleFlow/python/goodOfflinePrimaryVertices_cfi.py +# uncomment when necessary +from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector +from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices +trackingDQMgoodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone() +trackingDQMgoodOfflinePrimaryVertices.filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ) +trackingDQMgoodOfflinePrimaryVertices.src=cms.InputTag('offlinePrimaryVertices') +trackingDQMgoodOfflinePrimaryVertices.filter = cms.bool(False) + +# Sequence +TrackingDQMSourceTier0 = cms.Sequence() +# dEdx monitoring +TrackingDQMSourceTier0 += dedxHarmonicSequence * dEdxMonCommon +# # temporary patch in order to have BXlumi +# * lumiProducer +# track collections +for tracks in selectedTracks : + if tracks != 'generalTracks': + TrackingDQMSourceTier0 += sequenceName[tracks] + label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks) + TrackingDQMSourceTier0 += cms.Sequence(locals()[label]) +# seeding monitoring +for step in selectedIterTrackingStep : + label = 'TrackSeedMon'+str(step) + TrackingDQMSourceTier0 += cms.Sequence(locals()[label]) +# MessageLog +for module in selectedModules : + label = str(module)+'LogMessageMonCommon' + TrackingDQMSourceTier0 += cms.Sequence(locals()[label]) +TrackingDQMSourceTier0 += dqmInfoTracking + + +TrackingDQMSourceTier0Common = cms.Sequence() +# dEdx monitoring +TrackingDQMSourceTier0Common += (dedxHarmonicSequence * dEdxMonCommon) +## monitor track collections +for tracks in selectedTracks : + if tracks != 'generalTracks': + TrackingDQMSourceTier0Common+=sequenceName[tracks] + label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks) + TrackingDQMSourceTier0Common += cms.Sequence(locals()[label]) +# seeding monitoring +for step in selectedIterTrackingStep : + label = 'TrackSeedMon'+str(step) + TrackingDQMSourceTier0 += cms.Sequence(locals()[label]) +# MessageLog +for module in selectedModules : + label = str(module)+'LogMessageMonCommon' + TrackingDQMSourceTier0 += cms.Sequence(locals()[label]) +TrackingDQMSourceTier0Common += dqmInfoTracking + +TrackingDQMSourceTier0MinBias = cms.Sequence() +# dEdx monitoring +TrackingDQMSourceTier0MinBias += dedxHarmonicSequence * dEdxMonCommon +# * lumiProducer +# * trackingDQMgoodOfflinePrimaryVertices +# monitor track collections +for tracks in selectedTracks : + if tracks != 'generalTracks': + TrackingDQMSourceTier0MinBias += sequenceName[tracks] + label = 'TrackerCollisionSelectedTrackMonMB' + str(tracks) + TrackingDQMSourceTier0MinBias += cms.Sequence(locals()[label]) +# seeding monitoring +for step in selectedIterTrackingStep : + label = 'TrackSeedMon'+str(step) + TrackingDQMSourceTier0 += cms.Sequence(locals()[label]) +# MessageLog +for module in selectedModules : + label = str(module)+'LogMessageMonMB' + TrackingDQMSourceTier0MinBias += cms.Sequence(locals()[label]) +TrackingDQMSourceTier0MinBias += dqmInfoTracking + diff --git a/DQM/TrackingMonitorSource/python/dEdxAnalyzer_cff.py b/DQM/TrackingMonitorSource/python/dEdxAnalyzer_cff.py new file mode 100644 index 0000000000000..c47195da8f1a2 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/dEdxAnalyzer_cff.py @@ -0,0 +1,26 @@ +import FWCore.ParameterSet.Config as cms + +# dEdx monitor #### +#from DQM.TrackingMonitor.dEdxAnalyzer_cff import * +import DQM.TrackingMonitor.dEdxAnalyzer_cfi +# Clone for all PDs but MinBias #### +dEdxMonCommon = DQM.TrackingMonitor.dEdxAnalyzer_cfi.dEdxAnalyzer.clone() + +# Clone for MinBias #### +dEdxMonMB = DQM.TrackingMonitor.dEdxAnalyzer_cfi.dEdxAnalyzer.clone() +dEdxMonMB.dEdxParameters.andOr = cms.bool( False ) +dEdxMonMB.dEdxParameters.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) +dEdxMonMB.dEdxParameters.hltPaths = cms.vstring("HLT_ZeroBias_*") +dEdxMonMB.dEdxParameters.hltDBKey = cms.string("Tracker_MB") +dEdxMonMB.dEdxParameters.errorReplyHlt = cms.bool( False ) +dEdxMonMB.dEdxParameters.andOrHlt = cms.bool(True) + +# Clone for SingleMu #### +dEdxMonMU = DQM.TrackingMonitor.dEdxAnalyzer_cfi.dEdxAnalyzer.clone() +dEdxMonMU.dEdxParameters.andOr = cms.bool( False ) +dEdxMonMU.dEdxParameters.hltInputTag = cms.InputTag( "TriggerResults::HLT" ) +dEdxMonMU.dEdxParameters.hltPaths = cms.vstring("HLT_SingleMu40_Eta2p1_*") +dEdxMonMU.dEdxParameters.errorReplyHlt = cms.bool( False ) +dEdxMonMU.dEdxParameters.andOrHlt = cms.bool(True) + + diff --git a/DQM/TrackingMonitorSource/python/dedxHarmonic2monitor_cfi.py b/DQM/TrackingMonitorSource/python/dedxHarmonic2monitor_cfi.py new file mode 100644 index 0000000000000..d5bd19afc5934 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/dedxHarmonic2monitor_cfi.py @@ -0,0 +1,27 @@ +import FWCore.ParameterSet.Config as cms + +selectedDeDxHarm = {} + +from RecoTracker.DeDx.dedxHarmonic2_cfi import * +dedxDQMHarm2SP = dedxHarmonic2.clone() +dedxDQMHarm2SP.tracks = cms.InputTag("generalTracks") +dedxDQMHarm2SP.trajectoryTrackAssociation = cms.InputTag("generalTracks") +dedxDQMHarm2SP.UseStrip = cms.bool(True) +dedxDQMHarm2SP.UsePixel = cms.bool(True) + +dedxDQMHarm2SO = dedxDQMHarm2SP.clone() +dedxDQMHarm2SO.UsePixel = cms.bool(False) + +dedxDQMHarm2PO = dedxDQMHarm2SP.clone() +dedxDQMHarm2PO.UseStrip = cms.bool(False) + + +dedxHarmonicSequence = cms.Sequence() +dedxHarmonicSequence+=dedxDQMHarm2SP +dedxHarmonicSequence+=dedxDQMHarm2SO +dedxHarmonicSequence+=dedxDQMHarm2PO + +#dEdxMonitor = cms.Sequence( +# RefitterForDedxDQMDeDx * dedxDQMHarm2SP * dedxDQMHarm2SO * dedxDQMHarm2PO +# * dEdxAnalyzer +#) diff --git a/DQMOffline/Configuration/python/DQMOffline_CRT_cff.py b/DQMOffline/Configuration/python/DQMOffline_CRT_cff.py index 9ddb9c67fc531..f60237f359ac3 100644 --- a/DQMOffline/Configuration/python/DQMOffline_CRT_cff.py +++ b/DQMOffline/Configuration/python/DQMOffline_CRT_cff.py @@ -10,6 +10,7 @@ from DQM.CSCMonitorModule.csc_certification_info_cfi import * from DQM.EcalPreshowerMonitorModule.ESDataCertificationTask_cfi import * +from DQM.TrackingMonitorClient.TrackingCertification_cfi import * from DQMOffline.JetMET.dataCertificationJetMET_cff import * from DQMOffline.EGamma.egammaDataCertification_cff import * from DQMOffline.Trigger.DQMOffline_Trigger_Cert_cff import * @@ -23,6 +24,7 @@ rpcDataCertification * cscCertificationInfo * ecalPreshowerDataCertificationTask * + trackingCertificationInfo * dataCertificationJetMETSequence * egammaDataCertificationTask * dqmOfflineTriggerCert ) diff --git a/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py b/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py index 6af93da8b69b3..0906fd73bd0ee 100644 --- a/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py +++ b/DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py @@ -41,8 +41,10 @@ from DQMOffline.Trigger.DQMOffline_HLT_Client_cff import * from DQMOffline.RecoB.dqmCollector_cff import * from DQMOffline.JetMET.SusyPostProcessor_cff import * +from DQM.TrackingMonitorClient.TrackingClientConfig_Tier0_cff import * -DQMOffline_SecondStep_PrePOG = cms.Sequence( muonQualityTests * +DQMOffline_SecondStep_PrePOG = cms.Sequence( TrackingOfflineDQMClient * + muonQualityTests * egammaPostProcessing * # l1TriggerDqmOfflineClient * triggerOfflineDQMClient * @@ -73,6 +75,7 @@ DQMMessageLoggerClientSeq * dqmDcsInfoClient * SiStripOfflineDQMClient * + TrackingOfflineDQMClient * PixelOfflineDQMClientNoDataCertification * # l1TriggerDqmOfflineClient * triggerOfflineDQMClient * @@ -86,6 +89,7 @@ DQMMessageLoggerClientSeq * dqmDcsInfoClient * SiStripOfflineDQMClient * + TrackingOfflineDQMClient * PixelOfflineDQMClientNoDataCertification * # l1TriggerDqmOfflineClient * triggerOfflineDQMClient * diff --git a/DQMOffline/Configuration/python/DQMOffline_cff.py b/DQMOffline/Configuration/python/DQMOffline_cff.py index de9a6473976b5..3e3a8085897c0 100644 --- a/DQMOffline/Configuration/python/DQMOffline_cff.py +++ b/DQMOffline/Configuration/python/DQMOffline_cff.py @@ -27,7 +27,7 @@ cscSources * es_dqm_source_offline * castorSources * - HcalDQMOfflineSequence) + HcalDQMOfflineSequence ) DQMOfflineDPG = cms.Sequence( DQMOfflinePreDPG * DQMMessageLogger ) @@ -41,9 +41,10 @@ from DQMOffline.RecoB.dqmAnalyzer_cff import * from DQM.Physics.DQMPhysics_cff import * from Validation.RecoTau.DQMSequences_cfi import * +from DQM.TrackingMonitorSource.TrackingSourceConfig_Tier0_cff import * - -DQMOfflinePrePOG = cms.Sequence( muonMonitors * +DQMOfflinePrePOG = cms.Sequence( TrackingDQMSourceTier0 * + muonMonitors * jetMETDQMOfflineSource * egammaDQMOffline * l1TriggerDqmOffline * @@ -77,6 +78,7 @@ DQMOfflineCommon = cms.Sequence( dqmDcsInfo * DQMMessageLogger * SiStripDQMTier0Common * + TrackingDQMSourceTier0Common * siPixelOfflineDQM_source * l1TriggerDqmOffline * triggerOfflineDQMSource * @@ -90,6 +92,7 @@ DQMOfflineCommonSiStripZeroBias = cms.Sequence( dqmDcsInfo * DQMMessageLogger * SiStripDQMTier0MinBias * + TrackingDQMSourceTier0MinBias * siPixelOfflineDQM_source * l1TriggerDqmOffline * triggerOfflineDQMSource *