Skip to content

Commit 731dad3

Browse files
authored
Merge pull request cms-sw#31643 from mmusich/CalibTrackerSiStripCommon_moreTests
Fix issue with Strip CalibTree production and improve unit tests
2 parents 4e622e0 + 4671911 commit 731dad3

File tree

8 files changed

+100
-72
lines changed

8 files changed

+100
-72
lines changed

CalibTracker/SiStripCommon/BuildFile.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<use name="DataFormats/SiStripDetId"/>
55
<use name="DataFormats/Scalers"/>
66
<use name="DataFormats/OnlineMetaData"/>
7-
<use name="SimDataFormats/TrackingAnalysis"/>
87
<use name="FWCore/Framework"/>
98
<use name="FWCore/MessageLogger"/>
109
<use name="FWCore/ServiceRegistry"/>

CalibTracker/SiStripCommon/plugins/BuildFile.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<use name="CondFormats/DataRecord"/>
88
<use name="CondFormats/RunInfo"/>
99
<use name="RecoLocalTracker/SiStripClusterizer"/>
10+
<use name="SimDataFormats/TrackingAnalysis"/>
1011
<library file="*.cc" name="CalibTrackerSiStripCommonPlugins">
1112
<flags EDM_PLUGIN="1"/>
1213
</library>

CalibTracker/SiStripCommon/plugins/ShallowGainCalibration.cc

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#include <memory>
21
#include "ShallowGainCalibration.h"
32

43
using namespace edm;
@@ -8,8 +7,9 @@ using namespace std;
87
ShallowGainCalibration::ShallowGainCalibration(const edm::ParameterSet& iConfig)
98
: tracks_token_(consumes<edm::View<reco::Track>>(iConfig.getParameter<edm::InputTag>("Tracks"))),
109
association_token_(consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>("Tracks"))),
11-
geomToken_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()),
12-
gainToken_(esConsumes<SiStripGain, SiStripGainRcd>()),
10+
trackerGeometry_token_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()),
11+
gain_token_(esConsumes<SiStripGain, SiStripGainRcd>()),
12+
tkGeom_token_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()),
1313
Suffix(iConfig.getParameter<std::string>("Suffix")),
1414
Prefix(iConfig.getParameter<std::string>("Prefix")) {
1515
produces<std::vector<int>>(Prefix + "trackindex" + Suffix);
@@ -32,7 +32,7 @@ ShallowGainCalibration::ShallowGainCalibration(const edm::ParameterSet& iConfig)
3232
produces<std::vector<double>>(Prefix + "gainusedTick" + Suffix);
3333
}
3434

35-
void ShallowGainCalibration::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
35+
void ShallowGainCalibration::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
3636
auto trackindex = std::make_unique<std::vector<int>>();
3737
auto rawid = std::make_unique<std::vector<unsigned int>>();
3838
auto localdirx = std::make_unique<std::vector<double>>();
@@ -52,14 +52,13 @@ void ShallowGainCalibration::produce(edm::StreamID, edm::Event& iEvent, const ed
5252
auto gainused = std::make_unique<std::vector<double>>();
5353
auto gainusedTick = std::make_unique<std::vector<double>>();
5454

55-
edm::ESHandle<SiStripGain> gainHandle = iSetup.getHandle(gainToken_);
55+
m_tracker = &iSetup.getData(trackerGeometry_token_);
56+
edm::ESHandle<SiStripGain> gainHandle = iSetup.getHandle(gain_token_);
5657
edm::Handle<edm::View<reco::Track>> tracks;
5758
iEvent.getByToken(tracks_token_, tracks);
5859
edm::Handle<TrajTrackAssociationCollection> associations;
5960
iEvent.getByToken(association_token_, associations);
6061

61-
auto bundle = *runCache(iEvent.getRun().index());
62-
6362
for (TrajTrackAssociationCollection::const_iterator association = associations->begin();
6463
association != associations->end();
6564
association++) {
@@ -112,8 +111,7 @@ void ShallowGainCalibration::produce(edm::StreamID, edm::Event& iEvent, const ed
112111
bool Saturation = false;
113112
bool Overlapping = false;
114113
unsigned int Charge = 0;
115-
auto thicknessMap = bundle.getThicknessMap();
116-
double Path = (10.0 * thicknessMap[DetId]) / fabs(cosine);
114+
double Path = (10.0 * thickness(DetId)) / fabs(cosine);
117115
double PrevGain = -1;
118116
double PrevGainTick = -1;
119117
int FirstStrip = 0;
@@ -201,7 +199,7 @@ void ShallowGainCalibration::produce(edm::StreamID, edm::Event& iEvent, const ed
201199
nstrips->push_back(NStrips);
202200
saturation->push_back(Saturation);
203201
overlapping->push_back(Overlapping);
204-
farfromedge->push_back(StripCluster ? isFarFromBorder(&trajState, DetId, bundle.getTrackerGeometry()) : true);
202+
farfromedge->push_back(StripCluster ? isFarFromBorder(&trajState, DetId, &iSetup) : true);
205203
charge->push_back(Charge);
206204
path->push_back(Path);
207205
#ifdef ExtendedCALIBTree
@@ -235,7 +233,9 @@ void ShallowGainCalibration::produce(edm::StreamID, edm::Event& iEvent, const ed
235233

236234
bool ShallowGainCalibration::isFarFromBorder(TrajectoryStateOnSurface* trajState,
237235
const uint32_t detid,
238-
const TrackerGeometry* tkGeom) const {
236+
const edm::EventSetup* iSetup) {
237+
edm::ESHandle<TrackerGeometry> tkGeom = iSetup->getHandle(tkGeom_token_);
238+
239239
LocalPoint HitLocalPos = trajState->localPosition();
240240
LocalError HitLocalError = trajState->localError().positionError();
241241

@@ -266,26 +266,23 @@ bool ShallowGainCalibration::isFarFromBorder(TrajectoryStateOnSurface* trajState
266266
return true;
267267
}
268268

269-
std::shared_ptr<shallowGainCalibration::bundle> ShallowGainCalibration::globalBeginRun(
270-
edm::Run const& iRun, edm::EventSetup const& iSetup) const {
271-
edm::ESHandle<TrackerGeometry> theTrackerGeometry = iSetup.getHandle(geomToken_);
272-
auto bundle = std::make_shared<shallowGainCalibration::bundle>(theTrackerGeometry.product());
273-
274-
for (const auto& it : theTrackerGeometry->detUnits()) {
269+
double ShallowGainCalibration::thickness(DetId id) {
270+
map<DetId, double>::iterator th = m_thicknessMap.find(id);
271+
if (th != m_thicknessMap.end())
272+
return (*th).second;
273+
else {
275274
double detThickness = 1.;
276-
auto id = (it->geographicalId()).rawId();
277-
275+
//compute thickness normalization
276+
const GeomDetUnit* it = m_tracker->idToDetUnit(DetId(id));
278277
bool isPixel = dynamic_cast<const PixelGeomDetUnit*>(it) != nullptr;
279278
bool isStrip = dynamic_cast<const StripGeomDetUnit*>(it) != nullptr;
280-
281279
if (!isPixel && !isStrip) {
282280
throw cms::Exception("Logic Error") << "\t\t this detID doesn't seem to belong to the Tracker";
283281
} else {
284282
detThickness = it->surface().bounds().thickness();
285283
}
286-
bundle.get()->updateMap(id, detThickness);
284+
285+
m_thicknessMap[id] = detThickness; //computed value
286+
return detThickness;
287287
}
288-
return bundle;
289288
}
290-
291-
void ShallowGainCalibration::globalEndRun(edm::Run const&, edm::EventSetup const&) const {}

CalibTracker/SiStripCommon/plugins/ShallowGainCalibration.h

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef SHALLOW_GAINCALIBRATION_PRODUCER
22
#define SHALLOW_GAINCALIBRATION_PRODUCER
33

4-
#include "FWCore/Framework/interface/global/EDProducer.h"
4+
#include "FWCore/Framework/interface/stream/EDProducer.h"
55
#include "FWCore/Framework/interface/Frameworkfwd.h"
66

77
#include "CalibTracker/SiStripCommon/interface/ShallowTools.h"
@@ -16,8 +16,6 @@
1616
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
1717
#include "CondFormats/SiStripObjects/interface/SiStripLorentzAngle.h"
1818
#include "CondFormats/DataRecord/interface/SiStripLorentzAngleRcd.h"
19-
#include "CalibFormats/SiStripObjects/interface/SiStripGain.h"
20-
#include "CalibTracker/Records/interface/SiStripGainRcd.h"
2119
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
2220
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
2321
#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
@@ -50,41 +48,27 @@
5048
#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
5149
#include "DataFormats/DetId/interface/DetId.h"
5250
#include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
53-
#include "FWCore/Utilities/interface/ESGetToken.h"
54-
55-
using DetIdMap = std::map<uint32_t, double>;
56-
57-
namespace shallowGainCalibration {
58-
struct bundle {
59-
bundle(const TrackerGeometry* trackerG) : tkGeo_(trackerG), value_({{0, 0.}}) {}
60-
void updateMap(uint32_t id, double thickness) { value_.insert(std::make_pair(id, thickness)); }
61-
DetIdMap getThicknessMap() { return value_; }
62-
const TrackerGeometry* getTrackerGeometry() { return tkGeo_; }
6351

64-
private:
65-
const TrackerGeometry* tkGeo_;
66-
DetIdMap value_;
67-
};
68-
} // namespace shallowGainCalibration
69-
70-
class ShallowGainCalibration : public edm::global::EDProducer<edm::RunCache<shallowGainCalibration::bundle> > {
52+
class ShallowGainCalibration : public edm::stream::EDProducer<> {
7153
public:
7254
explicit ShallowGainCalibration(const edm::ParameterSet&);
73-
std::shared_ptr<shallowGainCalibration::bundle> globalBeginRun(edm::Run const&,
74-
edm::EventSetup const&) const override;
75-
void globalEndRun(edm::Run const&, edm::EventSetup const&) const override;
7655

7756
private:
7857
const edm::EDGetTokenT<edm::View<reco::Track> > tracks_token_;
7958
const edm::EDGetTokenT<TrajTrackAssociationCollection> association_token_;
80-
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
81-
const edm::ESGetToken<SiStripGain, SiStripGainRcd> gainToken_;
59+
60+
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> trackerGeometry_token_;
61+
const edm::ESGetToken<SiStripGain, SiStripGainRcd> gain_token_;
62+
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeom_token_;
63+
8264
std::string Suffix;
8365
std::string Prefix;
8466

85-
void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
86-
bool isFarFromBorder(TrajectoryStateOnSurface* trajState,
87-
const uint32_t detid,
88-
const TrackerGeometry* trackerG) const;
67+
void produce(edm::Event&, const edm::EventSetup&) override;
68+
bool isFarFromBorder(TrajectoryStateOnSurface* trajState, const uint32_t detid, const edm::EventSetup* iSetup);
69+
double thickness(DetId id);
70+
71+
const TrackerGeometry* m_tracker;
72+
std::map<DetId, double> m_thicknessMap;
8973
};
9074
#endif

CalibTracker/SiStripCommon/plugins/ShallowTree.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <TBranch.h>
99

1010
ShallowTree::ShallowTree(const edm::ParameterSet& iConfig) {
11+
usesResource(TFileService::kSharedResource);
12+
1113
//int compSettings= iConfig.getParameter<int>("CompressionSettings",-1);
1214
int compSettings = iConfig.getUntrackedParameter<int>("CompressionSettings", -1);
1315
if (compSettings > 0)
@@ -194,5 +196,3 @@ ShallowTree::TypedBranchConnector<T>::TypedBranchConnector(edm::BranchDescriptio
194196
tree->Branch(pin.c_str(), &object_ptr_);
195197
} //vector<type>
196198
}
197-
198-
void ShallowTree::beginJob() {}

CalibTracker/SiStripCommon/plugins/ShallowTree.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
*/
2020

2121
#include "FWCore/Framework/interface/Frameworkfwd.h"
22-
#include "FWCore/Framework/interface/EDAnalyzer.h"
22+
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
2323
#include "FWCore/Framework/interface/Event.h"
2424
#include "FWCore/ParameterSet/interface/ParameterSet.h"
2525
#include "FWCore/ServiceRegistry/interface/Service.h"
@@ -30,11 +30,9 @@
3030
#include <vector>
3131
#include <TTree.h>
3232

33-
class ShallowTree : public edm::EDAnalyzer {
33+
class ShallowTree : public edm::one::EDAnalyzer<edm::one::SharedResources> {
3434
private:
35-
void beginJob() override;
3635
void analyze(const edm::Event&, const edm::EventSetup&) override;
37-
void endJob() override {}
3836

3937
template <class T>
4038
void eat(edm::BranchDescription const* desc) {

CalibTracker/SiStripCommon/test/testProduceCalibrationTree_cfg.py

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@
44
import FWCore.ParameterSet.VarParsing as VarParsing
55
from CalibTracker.SiStripCommon.shallowTree_test_template import *
66

7+
###################################################################
8+
def alterTriggersForUnitTest(process):
9+
###################################################################
10+
'''
11+
These modification as necessary only in order to run on a
12+
RelVal MC in which the physics menu is not simulated!
13+
'''
14+
if(hasattr(process,'AAGFilter')):
15+
process.AAGFilter.triggerConditions = ["HLT_Random_v*"]
16+
if(hasattr(process,'IsolatedMuonFilter')):
17+
process.IsolatedMuonFilter.triggerConditions = ["MC_IsoMu_v*"]
18+
19+
return process
20+
721
###################################################################
822
# Setup 'standard' options
923
###################################################################
@@ -45,6 +59,12 @@
4559
VarParsing.VarParsing.varType.int,
4660
"number of events to process (\"-1\" for all)")
4761

62+
options.register('unitTest',
63+
False,
64+
VarParsing.VarParsing.multiplicity.singleton,
65+
VarParsing.VarParsing.varType.bool,
66+
"is for unit test?")
67+
4868
options.parseArguments()
4969

5070
print("conditionGT : ", options.conditionGT)
@@ -68,6 +88,12 @@
6888
process.GlobalTag = GlobalTag(process.GlobalTag, options.conditionGT, options.conditionOverwrite)
6989

7090
process.load('FWCore.MessageService.MessageLogger_cfi')
91+
process.MessageLogger.destinations = ['cout', 'cerr']
92+
if(options.unitTest):
93+
process.MessageLogger.cerr.FwkReport.reportEvery = 1
94+
else:
95+
process.MessageLogger.cerr.FwkReport.reportEvery = 100
96+
7197
process.load('Configuration.StandardSequences.Services_cff')
7298
process.add_( cms.Service( "TFileService",
7399
fileName = cms.string( options.outputFile ),
@@ -81,9 +107,6 @@
81107
fileNames = cms.untracked.vstring(options.inputFiles[0])
82108
)
83109

84-
process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) )
85-
process.MessageLogger.cerr.FwkReport.reportEvery = 10000
86-
87110
#definition of input collection
88111
process.CalibrationTracks.src = cms.InputTag( options.inputCollection )
89112
process.shallowTracks.Tracks = cms.InputTag( options.inputCollection )
@@ -98,22 +121,29 @@
98121
## process.L1T1.L1TechTriggerSeeding = cms.bool(True)
99122
## process.L1T1.L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39)')
100123

101-
#compressionSettings = 201
124+
compressionSettings = 201
102125
process.EventInfo = cms.EDAnalyzer("ShallowTree",
103126
CompressionSettings = process.gainCalibrationTreeStdBunch.CompressionSettings,
104127
outputCommands = cms.untracked.vstring('drop *',
105128
'keep *_shallowEventRun_*_*',
106129
)
107130
)
108-
#process.gainCalibrationTreeStdBunch.CompressionSettings = cms.untracked.int32(compressionSettings)
109-
#process.gainCalibrationTreeStdBunch0T.CompressionSettings = cms.untracked.int32(compressionSettings)
110-
#process.gainCalibrationTreeIsoMuon.CompressionSettings = cms.untracked.int32(compressionSettings)
111-
#process.gainCalibrationTreeIsoMuon0T.CompressionSettings = cms.untracked.int32(compressionSettings)
112-
#process.gainCalibrationTreeAagBunch.CompressionSettings = cms.untracked.int32(compressionSettings)
113-
#process.gainCalibrationTreeAagBunch0T.CompressionSettings = cms.untracked.int32(compressionSettings)
131+
132+
process.gainCalibrationTreeStdBunch.CompressionSettings = cms.untracked.int32(compressionSettings)
133+
process.gainCalibrationTreeStdBunch0T.CompressionSettings = cms.untracked.int32(compressionSettings)
134+
process.gainCalibrationTreeIsoMuon.CompressionSettings = cms.untracked.int32(compressionSettings)
135+
process.gainCalibrationTreeIsoMuon0T.CompressionSettings = cms.untracked.int32(compressionSettings)
136+
process.gainCalibrationTreeAagBunch.CompressionSettings = cms.untracked.int32(compressionSettings)
137+
process.gainCalibrationTreeAagBunch0T.CompressionSettings = cms.untracked.int32(compressionSettings)
114138

115139
#process.TkCalPath = cms.Path(process.L1T1*process.TkCalFullSequence)
116140

141+
### if it is a unit test run, do not look for not existing triggers
142+
### e.g. no AAG in MC
143+
144+
if(options.unitTest):
145+
alterTriggersForUnitTest(process)
146+
117147
process.TkCalPath_StdBunch = cms.Path(process.TkCalSeq_StdBunch*process.shallowEventRun*process.EventInfo)
118148
process.TkCalPath_StdBunch0T = cms.Path(process.TkCalSeq_StdBunch0T*process.shallowEventRun*process.EventInfo)
119149
process.TkCalPath_IsoMuon = cms.Path(process.TkCalSeq_IsoMuon*process.shallowEventRun*process.EventInfo)
@@ -123,13 +153,14 @@
123153

124154
process.schedule = cms.Schedule( process.TkCalPath_StdBunch,
125155
process.TkCalPath_StdBunch0T,
126-
process.TkCalPath_IsoMuon, # no After Abort Gap in MC
156+
process.TkCalPath_IsoMuon,
127157
process.TkCalPath_IsoMuon0T,
128158
process.TkCalPath_AagBunch,
129159
process.TkCalPath_AagBunch0T,
130160
)
131161

132162
process.options = cms.untracked.PSet(
163+
#wantSummary = cms.untracked.bool(True),
133164
Rethrow = cms.untracked.vstring('OtherCMS',
134165
'StdException',
135166
'Unknown',
@@ -157,3 +188,21 @@
157188
'ProductDoesNotSupportPtr',
158189
'NotFound')
159190
)
191+
192+
process.Timing = cms.Service("Timing",
193+
summaryOnly = cms.untracked.bool(True),
194+
useJobReport = cms.untracked.bool(True)
195+
)
196+
197+
'''
198+
if(options.unitTest):
199+
process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck",
200+
ignoreTotal = cms.untracked.int32(1),
201+
moduleMemorySummary = cms.untracked.bool(True)
202+
)
203+
'''
204+
205+
#Setup FWK for multithreaded
206+
process.options.numberOfThreads=cms.untracked.uint32(4)
207+
process.options.numberOfStreams=cms.untracked.uint32(0)
208+
#process.options.numberOfConcurrentLuminosityBlocks=cms.untracked.uint32(2) ## not yet

CalibTracker/SiStripCommon/test/test_all.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ function die { echo $1: status $2 ; exit $2; }
44

55
echo "TESTING CalibTracker/SiStripCommon ..."
66
cmsRun ${LOCAL_TEST_DIR}/test_all_cfg.py || die "Failure running test_CalibTrackerSiStripCommon_cfg.py" $?
7-
cmsRun ${LOCAL_TEST_DIR}/testProduceCalibrationTree_cfg.py maxEvents=1 || die "Failure running produceCalibrationTree_template_cfg.py" $?
7+
cmsRun ${LOCAL_TEST_DIR}/testProduceCalibrationTree_cfg.py maxEvents=10 unitTest=True || die "Failure running produceCalibrationTree_template_cfg.py" $?

0 commit comments

Comments
 (0)