@@ -78,6 +78,7 @@ class SimTrackstersProducer : public edm::stream::EDProducer<> {
7878 const bool add = false );
7979
8080private:
81+ void returnEmptyCollections (edm::Event& e, const int lcSize);
8182 std::string detector_;
8283 const bool doNose_ = false ;
8384 const bool computeLocalTime_;
@@ -231,6 +232,34 @@ void SimTrackstersProducer::addTrackster(
231232 }
232233}
233234
235+ void SimTrackstersProducer::returnEmptyCollections (edm::Event& evt, const int lcSize) {
236+ // put into the event empty collections
237+ auto e_result = std::make_unique<TracksterCollection>();
238+ evt.put (std::move (e_result));
239+
240+ auto e_result_ticlCandidates = std::make_unique<std::vector<TICLCandidate>>();
241+ evt.put (std::move (e_result_ticlCandidates));
242+
243+ auto e_output_mask = std::make_unique<std::vector<float >>();
244+ e_output_mask->resize (lcSize, 1 .f );
245+ evt.put (std::move (e_output_mask));
246+
247+ auto e_result_fromCP = std::make_unique<TracksterCollection>();
248+ evt.put (std::move (e_result_fromCP), " fromCPs" );
249+
250+ auto e_resultPU = std::make_unique<TracksterCollection>();
251+ evt.put (std::move (e_resultPU), " PU" );
252+
253+ auto e_output_mask_fromCP = std::make_unique<std::vector<float >>();
254+ e_output_mask_fromCP->resize (lcSize, 1 .f );
255+ evt.put (std::move (e_output_mask_fromCP), " fromCPs" );
256+
257+ auto e_cpToSc_SimTrackstersMap = std::make_unique<std::map<uint, std::vector<uint>>>();
258+ evt.put (std::move (e_cpToSc_SimTrackstersMap));
259+
260+ return ;
261+ }
262+
234263void SimTrackstersProducer::produce (edm::Event& evt, const edm::EventSetup& es) {
235264 auto result = std::make_unique<TracksterCollection>();
236265 auto output_mask = std::make_unique<std::vector<float >>();
@@ -247,13 +276,7 @@ void SimTrackstersProducer::produce(edm::Event& evt, const edm::EventSetup& es)
247276 // Validate input collections
248277 if (!layerClustersHandle.isValid () || !layerClustersTimesHandle.isValid () || !inputClusterMaskHandle.isValid ()) {
249278 edm::LogWarning (" SimTrackstersProducer" ) << " Missing input collections. Producing empty outputs." ;
250-
251- evt.put (std::move (result_ticlCandidates));
252- evt.put (std::move (output_mask));
253- evt.put (std::move (result_fromCP), " fromCPs" );
254- evt.put (std::move (resultPU), " PU" );
255- evt.put (std::move (output_mask_fromCP), " fromCPs" );
256- evt.put (std::move (cpToSc_SimTrackstersMap));
279+ this ->returnEmptyCollections (evt, 0 );
257280 return ;
258281 }
259282
@@ -268,6 +291,11 @@ void SimTrackstersProducer::produce(edm::Event& evt, const edm::EventSetup& es)
268291 const auto & simclusters = evt.get (simclusters_token_);
269292 edm::Handle<std::vector<CaloParticle>> caloParticles_h;
270293 evt.getByToken (caloparticles_token_, caloParticles_h);
294+ if (!caloParticles_h.isValid ()) {
295+ edm::LogWarning (" SimTrackstersProducer" ) << " Missing CaloParticles." ;
296+ this ->returnEmptyCollections (evt, layerClusters.size ());
297+ return ;
298+ }
271299 const auto & caloparticles = *caloParticles_h;
272300
273301 edm::Handle<MtdSimTracksterCollection> MTDSimTracksters_h;
@@ -280,7 +308,16 @@ void SimTrackstersProducer::produce(edm::Event& evt, const edm::EventSetup& es)
280308 evt.getByToken (trackingParticleToken_, trackingParticles_h);
281309 edm::Handle<std::vector<reco::Track>> recoTracks_h;
282310 evt.getByToken (recoTracksToken_, recoTracks_h);
283- const auto & TPtoRecoTrackMap = evt.get (associatormapStRsToken_);
311+
312+ // TP to reco track map
313+ const auto TPtoRecoTrackMapHandle = evt.getHandle (associatormapStRsToken_);
314+ if (!TPtoRecoTrackMapHandle.isValid ()) {
315+ edm::LogWarning (" SimTrackstersProducer" ) << " Missing TP->RecoTrack association." ;
316+ this ->returnEmptyCollections (evt, layerClusters.size ());
317+ return ;
318+ }
319+ const auto & TPtoRecoTrackMap = *TPtoRecoTrackMapHandle;
320+
284321 const auto & simTrackToTPMap = evt.get (associationSimTrackToTPToken_);
285322 const auto & recoTracks = *recoTracks_h;
286323
0 commit comments