ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatAlgos/plugins/PATTriggerEventProducer.cc
Revision: 1.1.1.1 (vendor branch)
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/plain
Branch: ANA
CVS Tags: start
Changes since 1.1: +0 -0 lines
Error occurred while calculating annotation data.
Log Message:
version CMSSW_2_2_10

File Contents

# Content
1 //
2 // $Id: PATTriggerEventProducer.cc,v 1.1.2.4 2009/03/27 21:31:06 vadler Exp $
3 //
4
5
6 #include "PhysicsTools/PatAlgos/plugins/PATTriggerEventProducer.h"
7
8 #include <cassert>
9
10 #include "DataFormats/Common/interface/AssociativeIterator.h"
11
12
13 using namespace pat;
14
15 PATTriggerEventProducer::PATTriggerEventProducer( const edm::ParameterSet & iConfig ) :
16 nameProcess_( iConfig.getParameter< std::string >( "processName" ) ),
17 tagTriggerResults_( iConfig.getParameter< edm::InputTag >( "triggerResults" ) ),
18 tagTriggerProducer_( iConfig.getParameter< edm::InputTag >( "patTriggerProducer" ) ),
19 tagsTriggerMatcher_( iConfig.getParameter< std::vector< edm::InputTag > >( "patTriggerMatches" ) )
20 {
21 if ( tagTriggerResults_.process().empty() ) {
22 tagTriggerResults_ = edm::InputTag( tagTriggerResults_.label(), tagTriggerResults_.instance(), nameProcess_ );
23 }
24
25 for ( size_t iMatch = 0; iMatch < tagsTriggerMatcher_.size(); ++iMatch ) {
26 produces< TriggerObjectMatch >( tagsTriggerMatcher_.at( iMatch ).label() );
27 }
28 produces< TriggerEvent >();
29 }
30
31 PATTriggerEventProducer::~PATTriggerEventProducer()
32 {
33 }
34
35 void PATTriggerEventProducer::beginRun( edm::Run & iRun, const edm::EventSetup & iSetup )
36 {
37 if ( ! hltConfig_.init( nameProcess_ ) ) {
38 edm::LogError( "hltConfigExtraction" ) << "HLT config extraction err with process name " << nameProcess_;
39 return;
40 }
41 }
42
43 void PATTriggerEventProducer::produce( edm::Event& iEvent, const edm::EventSetup& iSetup )
44 {
45 if ( hltConfig_.size() <= 0 ) {
46 edm::LogError( "hltConfigSize" ) << "HLT config size err" << "\n"
47 << "Check for occurence of an \"errHltConfigExtraction\" from beginRun()";
48 return;
49 }
50 edm::Handle< edm::TriggerResults > handleTriggerResults;
51 iEvent.getByLabel( tagTriggerResults_, handleTriggerResults );
52 if ( ! handleTriggerResults.isValid() ) {
53 edm::LogError( "triggerResultsValid" ) << "edm::TriggerResults product with InputTag " << tagTriggerResults_.encode() << " not in event";
54 return;
55 }
56 edm::Handle< TriggerPathCollection > handleTriggerPaths;
57 iEvent.getByLabel( tagTriggerProducer_, handleTriggerPaths );
58 edm::Handle< TriggerFilterCollection > handleTriggerFilters;
59 iEvent.getByLabel( tagTriggerProducer_, handleTriggerFilters );
60 edm::Handle< TriggerObjectCollection > handleTriggerObjects;
61 iEvent.getByLabel( tagTriggerProducer_, handleTriggerObjects );
62 edm::Handle< TriggerObjectStandAloneCollection > handleTriggerObjectsStandAlone;
63 iEvent.getByLabel( tagTriggerProducer_, handleTriggerObjectsStandAlone );
64 assert( handleTriggerObjects->size() == handleTriggerObjectsStandAlone->size() );
65
66 // produce trigger event
67
68 std::auto_ptr< TriggerEvent > triggerEvent( new TriggerEvent( std::string( hltConfig_.tableName() ), handleTriggerResults->wasrun(), handleTriggerResults->accept(), handleTriggerResults->error() ) );
69 // set product references to trigger collections
70 if ( handleTriggerPaths.isValid() ) {
71 triggerEvent->setPaths( handleTriggerPaths );
72 } else {
73 edm::LogError( "triggerPathsValid" ) << "pat::TriggerPathCollection product with InputTag " << tagTriggerProducer_.encode() << " not in event";
74 }
75 if ( handleTriggerFilters.isValid() ) {
76 triggerEvent->setFilters( handleTriggerFilters );
77 } else {
78 edm::LogError( "triggerFiltersValid" ) << "pat::TriggerFilterCollection product with InputTag " << tagTriggerProducer_.encode() << " not in event";
79 }
80 if ( handleTriggerObjects.isValid() ) {
81 triggerEvent->setObjects( handleTriggerObjects );
82 } else {
83 edm::LogError( "triggerObjectsValid" ) << "pat::TriggerObjectCollection product with InputTag " << tagTriggerProducer_.encode() << " not in event";
84 }
85
86 // produce trigger match association and set references
87 if ( handleTriggerObjects.isValid() ) {
88 for ( size_t iMatch = 0; iMatch < tagsTriggerMatcher_.size(); ++iMatch ) {
89 const std::string labelTriggerObjectMatcher( tagsTriggerMatcher_.at( iMatch ).label() );
90 // copy trigger match association using TriggerObjectStandAlone to those using TriggerObject
91 // relying on the fact, that only one candidate collection is present in the association
92 edm::Handle< TriggerObjectStandAloneMatch > handleTriggerObjectStandAloneMatch;
93 iEvent.getByLabel( labelTriggerObjectMatcher, handleTriggerObjectStandAloneMatch );
94 if ( ! handleTriggerObjectStandAloneMatch.isValid() ) {
95 edm::LogError( "triggerMatchValid" ) << "pat::TriggerObjectStandAloneMatch product with InputTag " << labelTriggerObjectMatcher << " not in event";
96 continue;
97 }
98 edm::AssociativeIterator< reco::CandidateBaseRef, TriggerObjectStandAloneMatch > it( *handleTriggerObjectStandAloneMatch, edm::EdmEventItemGetter< reco::CandidateBaseRef >( iEvent ) ), itEnd( it.end() );
99 edm::Handle< reco::CandidateView > handleCands;
100 std::vector< int > indices;
101 while ( it != itEnd ) {
102 if ( indices.size() == 0 ) {
103 iEvent.get( it->first.id(), handleCands );
104 }
105 indices.push_back( it->second.key() );
106 ++it;
107 }
108 std::auto_ptr< TriggerObjectMatch > triggerObjectMatch( new TriggerObjectMatch( handleTriggerObjects ) );
109 TriggerObjectMatch::Filler matchFiller( *triggerObjectMatch );
110 if ( handleCands.isValid() ) {
111 matchFiller.insert( handleCands, indices.begin(), indices.end() );
112 }
113 matchFiller.fill();
114 edm::OrphanHandle< TriggerObjectMatch > handleTriggerObjectMatch( iEvent.put( triggerObjectMatch, labelTriggerObjectMatcher ) );
115 // set product reference to trigger match association
116 if ( ! handleTriggerObjectMatch.isValid() ) {
117 edm::LogError( "triggerMatchValid" ) << "pat::TriggerObjectMatch product with InputTag " << labelTriggerObjectMatcher << " not in event";
118 continue;
119 }
120 if ( ! ( triggerEvent->addObjectMatchResult( handleTriggerObjectMatch, labelTriggerObjectMatcher ) ) ) {
121 edm::LogWarning( "triggerObjectMatchReplication" ) << "pat::TriggerEvent contains already a pat::TriggerObjectMatch from matcher module " << labelTriggerObjectMatcher;
122 }
123 }
124 }
125
126 iEvent.put( triggerEvent );
127 }
128
129
130 #include "FWCore/Framework/interface/MakerMacros.h"
131 DEFINE_FWK_MODULE( PATTriggerEventProducer );