CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc

Go to the documentation of this file.
00001 
00012 #include "HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h"
00013 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
00014 
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016 
00017 #include<string>
00018 
00019 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
00020 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h"
00021 #include "DataFormats/EgammaCandidates/interface/Electron.h"
00022 #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
00023 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
00024 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h"
00025 #include "DataFormats/JetReco/interface/CaloJet.h"
00026 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00027 #include "DataFormats/Candidate/interface/CompositeCandidate.h"
00028 #include "DataFormats/Candidate/interface/CompositeCandidateFwd.h"
00029 #include "DataFormats/METReco/interface/MET.h"
00030 #include "DataFormats/METReco/interface/METFwd.h"
00031 #include "DataFormats/METReco/interface/CaloMET.h"
00032 #include "DataFormats/METReco/interface/CaloMETFwd.h"
00033 #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidate.h"
00034 #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidateFwd.h"
00035 
00036 #include "DataFormats/L1Trigger/interface/L1HFRingsFwd.h"
00037 #include "DataFormats/L1Trigger/interface/L1EmParticleFwd.h"
00038 #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h"
00039 #include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
00040 #include "DataFormats/L1Trigger/interface/L1EtMissParticleFwd.h"
00041 
00042 #include "DataFormats/L1Trigger/interface/L1HFRings.h"
00043 #include "DataFormats/L1Trigger/interface/L1EmParticle.h"
00044 #include "DataFormats/L1Trigger/interface/L1JetParticle.h"
00045 #include "DataFormats/L1Trigger/interface/L1MuonParticle.h"
00046 #include "DataFormats/L1Trigger/interface/L1EtMissParticle.h"
00047 
00048 #include "DataFormats/JetReco/interface/PFJet.h"
00049 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00050 #include "DataFormats/TauReco/interface/PFTau.h"
00051 #include "DataFormats/TauReco/interface/PFTauFwd.h"
00052 
00053 #include <algorithm>
00054 #include <typeinfo>
00055 
00056 
00057 //
00058 // constructors and destructor
00059 //
00060 TriggerSummaryProducerAOD::TriggerSummaryProducerAOD(const edm::ParameterSet& ps) : 
00061   pn_(ps.getParameter<std::string>("processName")),
00062   selector_(edm::ProcessNameSelector(pn_)),
00063   tns_(),
00064   filterTagsEvent_(pn_!="*"),
00065   filterTagsGlobal_(pn_!="*"),
00066   collectionTagsEvent_(pn_!="*"),
00067   collectionTagsGlobal_(pn_!="*"),
00068   toc_(),
00069   tags_(),
00070   offset_(),
00071   fobs_(),
00072   keys_(),
00073   ids_(),
00074   maskFilters_()
00075 {
00076   if (pn_=="@") {
00077     // use tns
00078     if (edm::Service<edm::service::TriggerNamesService>().isAvailable()) {
00079       // get tns pointer
00080       tns_ = edm::Service<edm::service::TriggerNamesService>().operator->();
00081       if (tns_!=0) {
00082         pn_=tns_->getProcessName();
00083       } else {
00084         edm::LogError("TriggerSummaryProducerAOD") << "HLT Error: TriggerNamesService pointer = 0!";
00085         pn_="*";
00086       }
00087     } else {
00088       edm::LogError("TriggerSummaryProducerAOD") << "HLT Error: TriggerNamesService not available!";
00089       pn_="*";
00090     }
00091     selector_=edm::ProcessNameSelector(pn_);
00092     filterTagsEvent_     =InputTagSet(pn_!="*");
00093     filterTagsGlobal_    =InputTagSet(pn_!="*");
00094     collectionTagsEvent_ =InputTagSet(pn_!="*");
00095     collectionTagsGlobal_=InputTagSet(pn_!="*");
00096   }
00097   LogDebug("TriggerSummaryProducerAOD") << "Using process name: '" << pn_ <<"'";
00098 
00099   filterTagsGlobal_.clear();
00100   collectionTagsGlobal_.clear();
00101 
00102   produces<trigger::TriggerEvent>();
00103 
00104 }
00105 
00106 TriggerSummaryProducerAOD::~TriggerSummaryProducerAOD()
00107 {
00108 }
00109 
00110 //
00111 // member functions
00112 //
00113 
00114 namespace {
00115   inline void
00116   tokenizeTag(const std::string& tag, std::string& label, std::string& instance, std::string& process){
00117     
00118     using std::string;
00119     
00120     const char token(':');
00121     const string empty;
00122     
00123     label=tag;
00124     const string::size_type i1(label.find(token));
00125     if (i1==string::npos) {
00126       instance=empty;
00127       process=empty;
00128     } else {
00129       instance=label.substr(i1+1);
00130       label.resize(i1);
00131       const string::size_type i2(instance.find(token));
00132       if (i2==string::npos) {
00133         process=empty;
00134       } else {
00135         process=instance.substr(i2+1);
00136         instance.resize(i2);
00137       }
00138     }
00139   }
00140 }
00141 
00142 // ------------ method called to produce the data  ------------
00143 void
00144 TriggerSummaryProducerAOD::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00145 {
00146    using namespace std;
00147    using namespace edm;
00148    using namespace reco;
00149    using namespace l1extra;
00150    using namespace trigger;
00151 
00154    fobs_.clear();
00155    iEvent.getMany(selector_,fobs_);
00156    const unsigned int nfob(fobs_.size());
00157    LogTrace("TriggerSummaryProducerAOD") << "Number of filter  objects found: " << nfob;
00158 
00159    string tagLabel,tagInstance,tagProcess;
00160 
00166    maskFilters_.clear();
00167    maskFilters_.resize(nfob);
00168    filterTagsEvent_.clear();
00169    collectionTagsEvent_.clear();
00170    unsigned int nf(0);
00171    for (unsigned int ifob=0; ifob!=nfob; ++ifob) {
00172      maskFilters_[ifob]=false;
00173      const vector<string>& collectionTags_(fobs_[ifob]->getCollectionTagsAsStrings());
00174      const unsigned int ncol(collectionTags_.size());
00175      if (ncol>0) {
00176        nf++;
00177        maskFilters_[ifob]=true;
00178        const string& label    (fobs_[ifob].provenance()->moduleLabel());
00179        const string& instance (fobs_[ifob].provenance()->productInstanceName());
00180        const string& process  (fobs_[ifob].provenance()->processName());
00181        filterTagsEvent_.insert(InputTag(label,instance,process));
00182        for (unsigned int icol=0; icol!=ncol; ++icol) {
00183          // overwrite process name (usually not set)
00184          tokenizeTag(collectionTags_[icol],tagLabel,tagInstance,tagProcess);
00185          collectionTagsEvent_.insert(InputTag(tagLabel,tagInstance,pn_));
00186        }
00187      }
00188    }
00190    if (filterTagsEvent_.size()!=nf) {
00191      LogError("TriggerSummaryProducerAOD")
00192        << "Mismatch in number of filter tags: "
00193        << filterTagsEvent_.size() << "!=" << nf ;
00194    }
00195 
00197    collectionTagsGlobal_.insert(collectionTagsEvent_.begin(),collectionTagsEvent_.end());
00198    filterTagsGlobal_.insert(filterTagsEvent_.begin(),filterTagsEvent_.end());
00199 
00201    if (isDebugEnabled()) {
00202 
00204      const unsigned int nc(collectionTagsEvent_.size());
00205      LogTrace("TriggerSummaryProducerAOD") << "Number of unique collections requested " << nc;
00206      const InputTagSet::const_iterator cb(collectionTagsEvent_.begin());
00207      const InputTagSet::const_iterator ce(collectionTagsEvent_.end());
00208      for ( InputTagSet::const_iterator ci=cb; ci!=ce; ++ci) {
00209        LogTrace("TriggerSummaryProducerAOD") << distance(cb,ci) << " " << ci->encode();
00210      }
00211      const unsigned int nf(filterTagsEvent_.size());
00212      LogTrace("TriggerSummaryProducerAOD") << "Number of unique filters requested " << nf;
00213      const InputTagSet::const_iterator fb(filterTagsEvent_.begin());
00214      const InputTagSet::const_iterator fe(filterTagsEvent_.end());
00215      for ( InputTagSet::const_iterator fi=fb; fi!=fe; ++fi) {
00216        LogTrace("TriggerSummaryProducerAOD") << distance(fb,fi) << " " << fi->encode();
00217      }
00218 
00219    }
00220 
00226    toc_.clear();
00227    tags_.clear();
00228    keys_.clear();
00229    offset_.clear();
00230    fillTriggerObjectCollections<          RecoEcalCandidateCollection>(iEvent);
00231    fillTriggerObjectCollections<                   ElectronCollection>(iEvent);
00232    fillTriggerObjectCollections<       RecoChargedCandidateCollection>(iEvent);
00233    fillTriggerObjectCollections<                    CaloJetCollection>(iEvent);
00234    fillTriggerObjectCollections<         CompositeCandidateCollection>(iEvent);
00235    fillTriggerObjectCollections<                        METCollection>(iEvent);
00236    fillTriggerObjectCollections<                    CaloMETCollection>(iEvent);
00237    fillTriggerObjectCollections<IsolatedPixelTrackCandidateCollection>(iEvent);
00239    fillTriggerObjectCollections<               L1EmParticleCollection>(iEvent);
00240    fillTriggerObjectCollections<             L1MuonParticleCollection>(iEvent);
00241    fillTriggerObjectCollections<              L1JetParticleCollection>(iEvent);
00242    fillTriggerObjectCollections<           L1EtMissParticleCollection>(iEvent);
00243    fillTriggerObjectCollections<                  L1HFRingsCollection>(iEvent);
00245    fillTriggerObjectCollections<                      PFJetCollection>(iEvent);
00246    fillTriggerObjectCollections<                      PFTauCollection>(iEvent);
00248    const unsigned int nk(tags_.size());
00249    LogDebug("TriggerSummaryProducerAOD") << "Number of collections found: " << nk;
00250    const unsigned int no(toc_.size());
00251    LogDebug("TriggerSummaryProducerAOD") << "Number of physics objects found: " << no;
00252 
00255    auto_ptr<TriggerEvent> product(new TriggerEvent(pn_,nk,no,nf));
00256 
00258    product->addCollections(tags_,keys_);
00259    product->addObjects(toc_);
00260 
00262    for (unsigned int ifob=0; ifob!=nfob; ++ifob) {
00263      if (maskFilters_[ifob]) {
00264        const string& label    (fobs_[ifob].provenance()->moduleLabel());
00265        const string& instance (fobs_[ifob].provenance()->productInstanceName());
00266        const string& process  (fobs_[ifob].provenance()->processName());
00267        const edm::InputTag filterTag(label,instance,process);
00268        ids_.clear();
00269        keys_.clear();
00270        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->photonIds()   ,fobs_[ifob]->photonRefs());
00271        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->electronIds() ,fobs_[ifob]->electronRefs());
00272        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->muonIds()     ,fobs_[ifob]->muonRefs());
00273        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->jetIds()      ,fobs_[ifob]->jetRefs());
00274        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->compositeIds(),fobs_[ifob]->compositeRefs());
00275        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->basemetIds()  ,fobs_[ifob]->basemetRefs());
00276        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->calometIds()  ,fobs_[ifob]->calometRefs());
00277        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->pixtrackIds() ,fobs_[ifob]->pixtrackRefs());
00278        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->l1emIds()     ,fobs_[ifob]->l1emRefs());
00279        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->l1muonIds()   ,fobs_[ifob]->l1muonRefs());
00280        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->l1jetIds()    ,fobs_[ifob]->l1jetRefs());
00281        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->l1etmissIds() ,fobs_[ifob]->l1etmissRefs());
00282        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->l1hfringsIds(),fobs_[ifob]->l1hfringsRefs());
00283        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->pfjetIds()    ,fobs_[ifob]->pfjetRefs());
00284        fillFilterObjectMembers(iEvent,filterTag,fobs_[ifob]->pftauIds()    ,fobs_[ifob]->pftauRefs());
00285        product->addFilter(filterTag,ids_,keys_);
00286      }
00287    }
00288 
00289    OrphanHandle<TriggerEvent> ref = iEvent.put(product);
00290    LogTrace("TriggerSummaryProducerAOD") << "Number of physics objects packed: " << ref->sizeObjects();
00291    LogTrace("TriggerSummaryProducerAOD") << "Number of filter  objects packed: " << ref->sizeFilters();
00292 
00293 }
00294 
00295 template <typename C>
00296 void TriggerSummaryProducerAOD::fillTriggerObjectCollections(const edm::Event& iEvent) {
00297 
00301 
00302   using namespace std;
00303   using namespace edm;
00304   using namespace reco;
00305   using namespace l1extra;
00306   using namespace trigger;
00307 
00308   vector<Handle<C> > collections;
00309   iEvent.getMany(selector_,collections);
00310   const unsigned int nc(collections.size());
00311 
00312   for (unsigned int ic=0; ic!=nc; ++ic) {
00313     const Provenance& provenance(*(collections[ic].provenance()));
00314     const string& label    (provenance.moduleLabel());
00315     const string& instance (provenance.productInstanceName());
00316     const string& process  (provenance.processName());
00317     const InputTag collectionTag(label,instance,process);
00318 
00319     if (collectionTagsEvent_.find(collectionTag)!=collectionTagsEvent_.end()) {
00320       const ProductID pid(collections[ic].provenance()->productID());
00321       if (offset_.find(pid)!=offset_.end()) {
00322         LogError("TriggerSummaryProducerAOD") << "Duplicate pid!";
00323       }
00324       offset_[pid]=toc_.size();
00325       const unsigned int n(collections[ic]->size());
00326       for (unsigned int i=0; i!=n; ++i) {
00327         fillTriggerObject( (*collections[ic])[i] );
00328       }
00329       tags_.push_back(collectionTag.encode());
00330       keys_.push_back(toc_.size());
00331     }
00332 
00333   } 
00334 }
00335 
00336 template <typename T>
00337 void TriggerSummaryProducerAOD::fillTriggerObject(const T& object) {
00338 
00339   using namespace trigger;
00340   toc_.push_back( TriggerObject(object) );
00341 
00342   return;
00343 }
00344 
00345 void TriggerSummaryProducerAOD::fillTriggerObject(const l1extra::L1HFRings& object) {
00346 
00347   using namespace l1extra;
00348   using namespace trigger;
00349 
00350   toc_.push_back(TriggerObject(TriggerL1HfRingEtSums,
00351        object.hfEtSum(L1HFRings::kRing1PosEta),
00352        object.hfEtSum(L1HFRings::kRing1NegEta),
00353        object.hfEtSum(L1HFRings::kRing2PosEta),
00354        object.hfEtSum(L1HFRings::kRing2NegEta) ) );
00355   toc_.push_back(TriggerObject(TriggerL1HfBitCounts,
00356        object.hfBitCount(L1HFRings::kRing1PosEta),
00357        object.hfBitCount(L1HFRings::kRing1NegEta),
00358        object.hfBitCount(L1HFRings::kRing2PosEta),
00359        object.hfBitCount(L1HFRings::kRing2NegEta) ) );
00360 
00361   return;
00362 }
00363 
00364 void TriggerSummaryProducerAOD::fillTriggerObject(const l1extra::L1EtMissParticle& object) {
00365 
00366   using namespace l1extra;
00367   using namespace trigger;
00368 
00369   toc_.push_back( TriggerObject(object) );
00370   if (object.type()==L1EtMissParticle::kMET) {
00371     toc_.push_back(TriggerObject(TriggerL1ETT,object.etTotal(),0.0,0.0,0.0));
00372   } else if (object.type()==L1EtMissParticle::kMHT) {
00373     toc_.push_back(TriggerObject(TriggerL1HTT,object.etTotal(),0.0,0.0,0.0));
00374   } else {
00375     toc_.push_back(TriggerObject(0,           object.etTotal(),0.0,0.0,0.0));
00376   }
00377 
00378   return;
00379 }
00380 
00381 void TriggerSummaryProducerAOD::fillTriggerObject(const reco::CaloMET& object) {
00382 
00383   using namespace reco;
00384   using namespace trigger;
00385 
00386   toc_.push_back( TriggerObject(object) );
00387   toc_.push_back(TriggerObject(TriggerTET    ,object.sumEt()         ,0.0,0.0,0.0));
00388   toc_.push_back(TriggerObject(TriggerMETSig ,object.mEtSig()        ,0.0,0.0,0.0));
00389   toc_.push_back(TriggerObject(TriggerELongit,object.e_longitudinal(),0.0,0.0,0.0));
00390 
00391   return;
00392 }
00393 
00394 void TriggerSummaryProducerAOD::fillTriggerObject(const reco::MET& object) {
00395 
00396   using namespace reco;
00397   using namespace trigger;
00398 
00399   toc_.push_back( TriggerObject(object) );
00400   toc_.push_back(TriggerObject(TriggerTHT    ,object.sumEt()         ,0.0,0.0,0.0));
00401   toc_.push_back(TriggerObject(TriggerMHTSig ,object.mEtSig()        ,0.0,0.0,0.0));
00402   toc_.push_back(TriggerObject(TriggerHLongit,object.e_longitudinal(),0.0,0.0,0.0));
00403 
00404   return;
00405 }
00406 
00407 template <typename C>
00408 void TriggerSummaryProducerAOD::fillFilterObjectMembers(const edm::Event& iEvent, const edm::InputTag& tag, const trigger::Vids& ids, const std::vector<edm::Ref<C> >& refs) {
00409 
00413 
00414   using namespace std;
00415   using namespace edm;
00416   using namespace reco;
00417   using namespace l1extra;
00418   using namespace trigger;
00419 
00420   if (ids.size()!=refs.size()) {
00421     LogError("TriggerSummaryProducerAOD") << "Vector length is different: "
00422                                           << ids.size() << " " << refs.size();
00423   }
00424 
00425   const unsigned int n(min(ids.size(),refs.size()));
00426   for (unsigned int i=0; i!=n; ++i) {
00427     const ProductID pid(refs[i].id());
00428     if (offset_.find(pid)==offset_.end()) {
00429       const string&    label(iEvent.getProvenance(pid).moduleLabel());
00430       const string& instance(iEvent.getProvenance(pid).productInstanceName());
00431       const string&  process(iEvent.getProvenance(pid).processName());
00432       LogError("TriggerSummaryProducerAOD")
00433         << "Uunknown pid:"
00434         << " FilterTag/Key: " << tag.encode()
00435         << "/" << i
00436         << " CollectionTag/Key: "
00437         << InputTag(label,instance,process).encode()
00438         << "/" << refs[i].key()
00439         << " CollectionType: " << typeid(C).name();
00440     } else {
00441       fillFilterObjectMember(offset_[pid],ids[i],refs[i]);
00442     }
00443   }
00444   return;
00445 
00446 }
00447 
00448 template <typename C>
00449 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<C> & ref) {
00450 
00451   keys_.push_back(offset+ref.key());
00452   ids_.push_back(id);
00453 
00454   return;
00455 }
00456 
00457 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<l1extra::L1HFRingsCollection> & ref) {
00458 
00459   using namespace trigger;
00460 
00461   if (id==TriggerL1HfBitCounts) {
00462     keys_.push_back(offset+2*ref.key()+1);
00463   } else { // if (ids[i]==TriggerL1HfRingEtSums) {
00464     keys_.push_back(offset+2*ref.key()+0);
00465   }
00466   ids_.push_back(id);
00467 
00468   return;
00469 }
00470 
00471 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<l1extra::L1EtMissParticleCollection> & ref) {
00472 
00473   using namespace trigger;
00474 
00475   if ( (id==TriggerL1ETT) || (id==TriggerL1HTT) ) {
00476     keys_.push_back(offset+2*ref.key()+1);
00477   } else {
00478     keys_.push_back(offset+2*ref.key()+0);
00479   }
00480   ids_.push_back(id);
00481 
00482   return;
00483 }
00484 
00485 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<reco::CaloMETCollection> & ref) {
00486 
00487   using namespace trigger;
00488 
00489   if ( (id==TriggerTHT) || (id==TriggerTET) ) {
00490     keys_.push_back(offset+4*ref.key()+1);
00491   } else if ( (id==TriggerMETSig) || (id==TriggerMHTSig) ) {
00492     keys_.push_back(offset+4*ref.key()+2);
00493   } else if ( (id==TriggerELongit) || (id==TriggerHLongit) ) {
00494     keys_.push_back(offset+4*ref.key()+3);
00495   } else {
00496     keys_.push_back(offset+4*ref.key()+0);
00497   }
00498   ids_.push_back(id);
00499 
00500   return;
00501 }
00502 
00503 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<reco::METCollection> & ref) {
00504 
00505   using namespace trigger;
00506 
00507   if ( (id==TriggerTHT) || (id==TriggerTET) ) {
00508     keys_.push_back(offset+4*ref.key()+1);
00509   } else if ( (id==TriggerMETSig) || (id==TriggerMHTSig) ) {
00510     keys_.push_back(offset+4*ref.key()+2);
00511   } else if ( (id==TriggerELongit) || (id==TriggerHLongit) ) {
00512     keys_.push_back(offset+4*ref.key()+3);
00513   } else {
00514     keys_.push_back(offset+4*ref.key()+0);
00515   }
00516   ids_.push_back(id);
00517 
00518   return;
00519 }
00520 
00521 void TriggerSummaryProducerAOD::endJob() {
00522 
00523   using namespace std;
00524   using namespace edm;
00525   using namespace trigger;
00526 
00527   LogVerbatim("TriggerSummaryProducerAOD") << endl;
00528   LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::endJob - accumulated tags:" << endl;
00529 
00530   const unsigned int nc(collectionTagsGlobal_.size());
00531   const unsigned int nf(filterTagsGlobal_.size());
00532   LogVerbatim("TriggerSummaryProducerAOD") << " Overall number of Collections/Filters: "
00533                   << nc << "/" << nf << endl;
00534 
00535   LogVerbatim("TriggerSummaryProducerAOD") << " The collections: " << nc << endl;
00536   const InputTagSet::const_iterator cb(collectionTagsGlobal_.begin());
00537   const InputTagSet::const_iterator ce(collectionTagsGlobal_.end());
00538   for ( InputTagSet::const_iterator ci=cb; ci!=ce; ++ci) {
00539     LogVerbatim("TriggerSummaryProducerAOD") << "  " << distance(cb,ci) << " " << ci->encode() << endl;
00540   }
00541 
00542   LogVerbatim("TriggerSummaryProducerAOD") << " The filters:" << nf << endl;
00543   const InputTagSet::const_iterator fb(filterTagsGlobal_.begin());
00544   const InputTagSet::const_iterator fe(filterTagsGlobal_.end());
00545   for ( InputTagSet::const_iterator fi=fb; fi!=fe; ++fi) {
00546     LogVerbatim("TriggerSummaryProducerAOD") << "  " << distance(fb,fi) << " " << fi->encode() << endl;
00547   }
00548 
00549   LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::endJob." << endl;
00550   LogVerbatim("TriggerSummaryProducerAOD") << endl;
00551 
00552   return;
00553 
00554 }