@@ -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,14 +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));
252- evt.put (std::move (result_ticlCandidates));
253- evt.put (std::move (output_mask));
254- evt.put (std::move (result_fromCP), " fromCPs" );
255- evt.put (std::move (resultPU), " PU" );
256- evt.put (std::move (output_mask_fromCP), " fromCPs" );
257- evt.put (std::move (cpToSc_SimTrackstersMap));
279+ this ->returnEmptyCollections (evt, 0 );
258280 return ;
259281 }
260282
@@ -269,6 +291,11 @@ void SimTrackstersProducer::produce(edm::Event& evt, const edm::EventSetup& es)
269291 const auto & simclusters = evt.get (simclusters_token_);
270292 edm::Handle<std::vector<CaloParticle>> caloParticles_h;
271293 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+ }
272299 const auto & caloparticles = *caloParticles_h;
273300
274301 edm::Handle<MtdSimTracksterCollection> MTDSimTracksters_h;
@@ -286,13 +313,7 @@ void SimTrackstersProducer::produce(edm::Event& evt, const edm::EventSetup& es)
286313 const auto TPtoRecoTrackMapHandle = evt.getHandle (associatormapStRsToken_);
287314 if (!TPtoRecoTrackMapHandle.isValid ()) {
288315 edm::LogWarning (" SimTrackstersProducer" ) << " Missing TP->RecoTrack association." ;
289- evt.put (std::move (result));
290- evt.put (std::move (result_ticlCandidates));
291- evt.put (std::move (output_mask));
292- evt.put (std::move (result_fromCP), " fromCPs" );
293- evt.put (std::move (resultPU), " PU" );
294- evt.put (std::move (output_mask_fromCP), " fromCPs" );
295- evt.put (std::move (cpToSc_SimTrackstersMap));
316+ this ->returnEmptyCollections (evt, layerClusters.size ());
296317 return ;
297318 }
298319 const auto & TPtoRecoTrackMap = *TPtoRecoTrackMapHandle;
0 commit comments