CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_1/src/DataFormats/HLTReco/interface/TriggerEventWithRefs.h

Go to the documentation of this file.
00001 #ifndef HLTReco_TriggerEventWithRefs_h
00002 #define HLTReco_TriggerEventWithRefs_h
00003 
00016 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
00017 #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h"
00018 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00019 #include "FWCore/Utilities/interface/InputTag.h"
00020 #include "DataFormats/Common/interface/traits.h"
00021 #include <string>
00022 #include <vector>
00023 
00024 namespace trigger
00025 {
00026 
00029 
00030   class TriggerEventWithRefs : public TriggerRefsCollections, 
00031                                public edm::DoNotRecordParents {
00032 
00033   public:
00034 
00036     class TriggerFilterObject {
00037     public:
00039       std::string filterTag_;
00042       size_type photons_;
00043       size_type electrons_;
00044       size_type muons_;
00045       size_type jets_;
00046       size_type composites_;
00047       size_type basemets_;
00048       size_type calomets_;
00049       size_type pixtracks_;
00050       size_type l1em_;
00051       size_type l1muon_;
00052       size_type l1jet_;
00053       size_type l1etmiss_;
00054       size_type l1hfrings_;
00055       size_type pfjets_;
00056       size_type pftaus_;
00057 
00059       TriggerFilterObject() :
00060         filterTag_(),
00061         photons_(0), electrons_(0), muons_(0), jets_(0), composites_(0), basemets_(0), calomets_(0), pixtracks_(0), l1em_(0), l1muon_(0), l1jet_(0), l1etmiss_(0), l1hfrings_(0), pfjets_(0), pftaus_(0) {
00062       filterTag_=edm::InputTag().encode();
00063       }
00064       TriggerFilterObject(const edm::InputTag& filterTag,
00065                           size_type np, size_type ne, size_type nm, size_type nj, size_type nc, size_type nB, size_type nC, size_type nt, size_type l1em, size_type l1muon, size_type l1jet, size_type l1etmiss, size_type l1hfrings, size_type pfjets, size_type pftaus) :
00066         filterTag_(filterTag.encode()),
00067         photons_(np), electrons_(ne), muons_(nm), jets_(nj), composites_(nc), basemets_(nB), calomets_(nC), pixtracks_(nt), l1em_(l1em), l1muon_(l1muon), l1jet_(l1jet), l1etmiss_(l1etmiss), l1hfrings_(l1hfrings), pfjets_(pfjets), pftaus_(pftaus) { }
00068     };
00069 
00071   private:
00073     std::string usedProcessName_;    
00075     std::vector<TriggerFilterObject> filterObjects_;
00076 
00078   public:
00080     TriggerEventWithRefs(): TriggerRefsCollections(), usedProcessName_(), filterObjects_() { }
00081     TriggerEventWithRefs(const std::string& usedProcessName, size_type n):
00082       TriggerRefsCollections(),
00083       usedProcessName_(usedProcessName),
00084       filterObjects_()
00085     {
00086       filterObjects_.reserve(n);
00087     }
00088 
00090     void addFilterObject(const edm::InputTag& filterTag, const TriggerFilterObjectWithRefs& tfowr) {
00091       filterObjects_.push_back(
00092         TriggerFilterObject(filterTag, 
00093                             addObjects(tfowr.photonIds(),tfowr.photonRefs()),
00094                             addObjects(tfowr.electronIds(),tfowr.electronRefs()),
00095                             addObjects(tfowr.muonIds(),tfowr.muonRefs()),
00096                             addObjects(tfowr.jetIds(),tfowr.jetRefs()),
00097                             addObjects(tfowr.compositeIds(),tfowr.compositeRefs()),
00098                             addObjects(tfowr.basemetIds(),tfowr.basemetRefs()),
00099                             addObjects(tfowr.calometIds(),tfowr.calometRefs()),
00100                             addObjects(tfowr.pixtrackIds(),tfowr.pixtrackRefs()),
00101                             addObjects(tfowr.l1emIds(),tfowr.l1emRefs()),
00102                             addObjects(tfowr.l1muonIds(),tfowr.l1muonRefs()),
00103                             addObjects(tfowr.l1jetIds(),tfowr.l1jetRefs()),
00104                             addObjects(tfowr.l1etmissIds(),tfowr.l1etmissRefs()),
00105                             addObjects(tfowr.l1hfringsIds(),tfowr.l1hfringsRefs()),
00106                             addObjects(tfowr.pfjetIds(),tfowr.pfjetRefs()),
00107                             addObjects(tfowr.pftauIds(),tfowr.pftauRefs())
00108                            )
00109         );
00110     }
00111 
00113     const std::string& usedProcessName() const {return usedProcessName_;}
00114 
00116     size_type size() const {return filterObjects_.size();}
00117 
00119     const edm::InputTag filterTag(size_type filterIndex) const {
00120       return edm::InputTag(filterObjects_.at(filterIndex).filterTag_);
00121     }
00122 
00124     size_type filterIndex(const edm::InputTag& filterTag) const {
00125       const std::string encodedFilterTag (filterTag.encode());
00126       const size_type n(filterObjects_.size());
00127       for (size_type i=0; i!=n; ++i) {
00128         if (encodedFilterTag==filterObjects_[i].filterTag_) {return i;}
00129       }
00130       return n;
00131     }
00132 
00134 
00135     std::pair<size_type,size_type> photonSlice(size_type filter) const {
00136       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).photons_);
00137       const size_type end(filterObjects_.at(filter).photons_);
00138       return std::pair<size_type,size_type>(begin,end);
00139     }
00140 
00141     std::pair<size_type,size_type> electronSlice(size_type filter) const {
00142       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).electrons_);
00143       const size_type end(filterObjects_.at(filter).electrons_);
00144       return std::pair<size_type,size_type>(begin,end);
00145     }
00146 
00147     std::pair<size_type,size_type> muonSlice(size_type filter) const {
00148       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).muons_);
00149       const size_type end(filterObjects_.at(filter).muons_);
00150       return std::pair<size_type,size_type>(begin,end);
00151     }
00152 
00153     std::pair<size_type,size_type> jetSlice(size_type filter) const {
00154       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).jets_);
00155       const size_type end(filterObjects_.at(filter).jets_);
00156       return std::pair<size_type,size_type>(begin,end);
00157     }
00158 
00159     std::pair<size_type,size_type> compositeSlice(size_type filter) const {
00160       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).composites_);
00161       const size_type end(filterObjects_.at(filter).composites_);
00162       return std::pair<size_type,size_type>(begin,end);
00163     }
00164 
00165     std::pair<size_type,size_type> basemetSlice(size_type filter) const {
00166       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).basemets_);
00167       const size_type end(filterObjects_.at(filter).basemets_);
00168       return std::pair<size_type,size_type>(begin,end);
00169     }
00170 
00171     std::pair<size_type,size_type> calometSlice(size_type filter) const {
00172       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).calomets_);
00173       const size_type end(filterObjects_.at(filter).calomets_);
00174       return std::pair<size_type,size_type>(begin,end);
00175     }
00176 
00177     std::pair<size_type,size_type> pixtrackSlice(size_type filter) const {
00178       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).pixtracks_);
00179       const size_type end(filterObjects_.at(filter).pixtracks_);
00180       return std::pair<size_type,size_type>(begin,end);
00181     }
00182 
00183     std::pair<size_type,size_type> l1emSlice(size_type filter) const {
00184       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).l1em_);
00185       const size_type end(filterObjects_.at(filter).l1em_);
00186       return std::pair<size_type,size_type>(begin,end);
00187     }
00188 
00189     std::pair<size_type,size_type> l1muonSlice(size_type filter) const {
00190       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).l1muon_);
00191       const size_type end(filterObjects_.at(filter).l1muon_);
00192       return std::pair<size_type,size_type>(begin,end);
00193     }
00194 
00195     std::pair<size_type,size_type> l1jetSlice(size_type filter) const {
00196       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).l1jet_);
00197       const size_type end(filterObjects_.at(filter).l1jet_);
00198       return std::pair<size_type,size_type>(begin,end);
00199     }
00200 
00201     std::pair<size_type,size_type> l1etmissSlice(size_type filter) const {
00202       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).l1etmiss_);
00203       const size_type end(filterObjects_.at(filter).l1etmiss_);
00204       return std::pair<size_type,size_type>(begin,end);
00205     }
00206 
00207     std::pair<size_type,size_type> l1hfringsSlice(size_type filter) const {
00208       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).l1hfrings_);
00209       const size_type end(filterObjects_.at(filter).l1hfrings_);
00210       return std::pair<size_type,size_type>(begin,end);
00211     }
00212 
00213     std::pair<size_type,size_type> pfjetSlice(size_type filter) const {
00214       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).pfjets_);
00215       const size_type end(filterObjects_.at(filter).pfjets_);
00216       return std::pair<size_type,size_type>(begin,end);
00217     }
00218 
00219     std::pair<size_type,size_type> pftauSlice(size_type filter) const {
00220       const size_type begin(filter==0? 0 : filterObjects_.at(filter-1).pftaus_);
00221       const size_type end(filterObjects_.at(filter).pftaus_);
00222       return std::pair<size_type,size_type>(begin,end);
00223     }
00224 
00225 
00227 
00228     void getObjects(size_type filter, Vids& ids, VRphoton& photons) const {
00229       const size_type begin(photonSlice(filter).first);
00230       const size_type   end(photonSlice(filter).second);
00231       TriggerRefsCollections::getObjects(ids,photons,begin,end);
00232     }
00233     void getObjects(size_type filter, int id, VRphoton& photons) const {
00234       const size_type begin(photonSlice(filter).first);
00235       const size_type   end(photonSlice(filter).second);
00236       TriggerRefsCollections::getObjects(id,photons,begin,end);
00237     }
00238 
00239     void getObjects(size_type filter, Vids& ids, VRelectron& electrons) const {
00240       const size_type begin(electronSlice(filter).first);
00241       const size_type   end(electronSlice(filter).second);
00242       TriggerRefsCollections::getObjects(ids,electrons,begin,end);
00243     }
00244     void getObjects(size_type filter, int id, VRelectron& electrons) const {
00245       const size_type begin(electronSlice(filter).first);
00246       const size_type   end(electronSlice(filter).second);
00247       TriggerRefsCollections::getObjects(id,electrons,begin,end);
00248     }
00249 
00250     void getObjects(size_type filter, Vids& ids, VRmuon& muons) const {
00251       const size_type begin(muonSlice(filter).first);
00252       const size_type   end(muonSlice(filter).second);
00253       TriggerRefsCollections::getObjects(ids,muons,begin,end);
00254     }
00255     void getObjects(size_type filter, int id, VRmuon& muons) const {
00256       const size_type begin(muonSlice(filter).first);
00257       const size_type   end(muonSlice(filter).second);
00258       TriggerRefsCollections::getObjects(id,muons,begin,end);
00259     }
00260 
00261     void getObjects(size_type filter, Vids& ids, VRjet& jets) const {
00262       const size_type begin(jetSlice(filter).first);
00263       const size_type   end(jetSlice(filter).second);
00264       TriggerRefsCollections::getObjects(ids,jets,begin,end);
00265     }
00266     void getObjects(size_type filter, int id, VRjet& jets) const {
00267       const size_type begin(jetSlice(filter).first);
00268       const size_type   end(jetSlice(filter).second);
00269       TriggerRefsCollections::getObjects(id,jets,begin,end);
00270     }
00271 
00272     void getObjects(size_type filter, Vids& ids, VRcomposite& composites) const {
00273       const size_type begin(compositeSlice(filter).first);
00274       const size_type   end(compositeSlice(filter).second);
00275       TriggerRefsCollections::getObjects(ids,composites,begin,end);
00276     }
00277     void getObjects(size_type filter, int id, VRcomposite& composites) const {
00278       const size_type begin(compositeSlice(filter).first);
00279       const size_type   end(compositeSlice(filter).second);
00280       TriggerRefsCollections::getObjects(id,composites,begin,end);
00281     }
00282 
00283     void getObjects(size_type filter, Vids& ids, VRbasemet& basemets) const {
00284       const size_type begin(basemetSlice(filter).first);
00285       const size_type   end(basemetSlice(filter).second);
00286       TriggerRefsCollections::getObjects(ids,basemets,begin,end);
00287     }
00288     void getObjects(size_type filter, int id, VRbasemet& basemets) const {
00289       const size_type begin(basemetSlice(filter).first);
00290       const size_type   end(basemetSlice(filter).second);
00291       TriggerRefsCollections::getObjects(id,basemets,begin,end);
00292     }
00293 
00294     void getObjects(size_type filter, Vids& ids, VRcalomet& calomets) const {
00295       const size_type begin(calometSlice(filter).first);
00296       const size_type   end(calometSlice(filter).second);
00297       TriggerRefsCollections::getObjects(ids,calomets,begin,end);
00298     }
00299     void getObjects(size_type filter, int id, VRcalomet& calomets) const {
00300       const size_type begin(calometSlice(filter).first);
00301       const size_type   end(calometSlice(filter).second);
00302       TriggerRefsCollections::getObjects(id,calomets,begin,end);
00303     }
00304 
00305     void getObjects(size_type filter, Vids& ids, VRpixtrack& pixtracks) const {
00306       const size_type begin(pixtrackSlice(filter).first);
00307       const size_type   end(pixtrackSlice(filter).second);
00308       TriggerRefsCollections::getObjects(ids,pixtracks,begin,end);
00309     }
00310     void getObjects(size_type filter, int id, VRpixtrack& pixtracks) const {
00311       const size_type begin(pixtrackSlice(filter).first);
00312       const size_type   end(pixtrackSlice(filter).second);
00313       TriggerRefsCollections::getObjects(id,pixtracks,begin,end);
00314     }
00315 
00316     void getObjects(size_type filter, Vids& ids, VRl1em& l1em) const {
00317       const size_type begin(l1emSlice(filter).first);
00318       const size_type   end(l1emSlice(filter).second);
00319       TriggerRefsCollections::getObjects(ids,l1em,begin,end);
00320     }
00321     void getObjects(size_type filter, int id, VRl1em& l1em) const {
00322       const size_type begin(l1emSlice(filter).first);
00323       const size_type   end(l1emSlice(filter).second);
00324       TriggerRefsCollections::getObjects(id,l1em,begin,end);
00325     }
00326 
00327     void getObjects(size_type filter, Vids& ids, VRl1muon& l1muon) const {
00328       const size_type begin(l1muonSlice(filter).first);
00329       const size_type   end(l1muonSlice(filter).second);
00330       TriggerRefsCollections::getObjects(ids,l1muon,begin,end);
00331     }
00332     void getObjects(size_type filter, int id, VRl1muon& l1muon) const {
00333       const size_type begin(l1muonSlice(filter).first);
00334       const size_type   end(l1muonSlice(filter).second);
00335       TriggerRefsCollections::getObjects(id,l1muon,begin,end);
00336     }
00337 
00338     void getObjects(size_type filter, Vids& ids, VRl1jet& l1jet) const {
00339       const size_type begin(l1jetSlice(filter).first);
00340       const size_type   end(l1jetSlice(filter).second);
00341       TriggerRefsCollections::getObjects(ids,l1jet,begin,end);
00342     }
00343     void getObjects(size_type filter, int id, VRl1jet& l1jet) const {
00344       const size_type begin(l1jetSlice(filter).first);
00345       const size_type   end(l1jetSlice(filter).second);
00346       TriggerRefsCollections::getObjects(id,l1jet,begin,end);
00347     }
00348 
00349     void getObjects(size_type filter, Vids& ids, VRl1etmiss& l1etmiss) const {
00350       const size_type begin(l1etmissSlice(filter).first);
00351       const size_type   end(l1etmissSlice(filter).second);
00352       TriggerRefsCollections::getObjects(ids,l1etmiss,begin,end);
00353     }
00354     void getObjects(size_type filter, int id, VRl1etmiss& l1etmiss) const {
00355       const size_type begin(l1etmissSlice(filter).first);
00356       const size_type   end(l1etmissSlice(filter).second);
00357       TriggerRefsCollections::getObjects(id,l1etmiss,begin,end);
00358     }
00359 
00360     void getObjects(size_type filter, Vids& ids, VRl1hfrings& l1hfrings) const {
00361       const size_type begin(l1hfringsSlice(filter).first);
00362       const size_type   end(l1hfringsSlice(filter).second);
00363       TriggerRefsCollections::getObjects(ids,l1hfrings,begin,end);
00364     }
00365     void getObjects(size_type filter, int id, VRl1hfrings& l1hfrings) const {
00366       const size_type begin(l1hfringsSlice(filter).first);
00367       const size_type   end(l1hfringsSlice(filter).second);
00368       TriggerRefsCollections::getObjects(id,l1hfrings,begin,end);
00369     }
00370 
00371     void getObjects(size_type filter, Vids& ids, VRpfjet& pfjets) const {
00372       const size_type begin(pfjetSlice(filter).first);
00373       const size_type   end(pfjetSlice(filter).second);
00374       TriggerRefsCollections::getObjects(ids,pfjets,begin,end);
00375     }
00376     void getObjects(size_type filter, int id, VRpfjet& pfjets) const {
00377       const size_type begin(pfjetSlice(filter).first);
00378       const size_type   end(pfjetSlice(filter).second);
00379       TriggerRefsCollections::getObjects(id,pfjets,begin,end);
00380     }
00381 
00382     void getObjects(size_type filter, Vids& ids, VRpftau& pftaus) const {
00383       const size_type begin(pftauSlice(filter).first);
00384       const size_type   end(pftauSlice(filter).second);
00385       TriggerRefsCollections::getObjects(ids,pftaus,begin,end);
00386     }
00387     void getObjects(size_type filter, int id, VRpftau& pftaus) const {
00388       const size_type begin(pftauSlice(filter).first);
00389       const size_type   end(pftauSlice(filter).second);
00390       TriggerRefsCollections::getObjects(id,pftaus,begin,end);
00391     }
00392 
00393   };
00394 
00395 }
00396 
00397 #endif