CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
HLTPMMassFilter Class Reference

#include <HLTPMMassFilter.h>

Inheritance diagram for HLTPMMassFilter:
HLTFilter edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

bool hltFilter (edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
 
 HLTPMMassFilter (const edm::ParameterSet &)
 
 ~HLTPMMassFilter () override
 
- Public Member Functions inherited from HLTFilter
 HLTFilter (const edm::ParameterSet &config)
 
int module (edm::Event const &) const
 
const std::string * moduleLabel () const
 
int path (edm::Event const &) const
 
const std::string * pathName (edm::Event const &) const
 
std::pair< int, int > pmid (edm::Event const &) const
 
bool saveTags () const
 
 ~HLTFilter () override
 
- Public Member Functions inherited from edm::global::EDFilter<>
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from HLTFilter
static void makeHLTFilterDescription (edm::ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

TLorentzVector approxMomAtVtx (const MagneticField *magField, const GlobalPoint &xvert, const reco::SuperClusterRef sc, int charge) const
 

Private Attributes

edm::InputTag beamSpot_
 
edm::EDGetTokenT< reco::BeamSpotbeamSpotToken_
 
edm::InputTag candTag_
 
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefscandToken_
 
bool isElectron1_
 
bool isElectron2_
 
edm::InputTag l1EGTag_
 
double lowerMassCut_
 
int nZcandcut_
 
bool reqOppCharge_
 
double upperMassCut_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Original Author: Jeremy Werner Institution: Princeton University, USA Contact: Jerem.nosp@m.y.We.nosp@m.rner@.nosp@m.cern.nosp@m..ch Date: February 21, 2007

Definition at line 55 of file HLTPMMassFilter.h.

Constructor & Destructor Documentation

HLTPMMassFilter::HLTPMMassFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 16 of file HLTPMMassFilter.cc.

References beamSpot_, beamSpotToken_, candTag_, candToken_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), isElectron1_, isElectron2_, l1EGTag_, lowerMassCut_, nZcandcut_, reqOppCharge_, upperMassCut_, and ~HLTPMMassFilter().

16  : HLTFilter(iConfig)
17 {
18  candTag_ = iConfig.getParameter< edm::InputTag > ("candTag");
19  beamSpot_ = iConfig.getParameter< edm::InputTag > ("beamSpot");
20  l1EGTag_ = iConfig.getParameter< edm::InputTag > ("l1EGCand");
21 
22  lowerMassCut_ = iConfig.getParameter<double> ("lowerMassCut");
23  upperMassCut_ = iConfig.getParameter<double> ("upperMassCut");
24  nZcandcut_ = iConfig.getParameter<int> ("nZcandcut");
25  reqOppCharge_ = iConfig.getUntrackedParameter<bool> ("reqOppCharge",false);
26  isElectron1_ = iConfig.getUntrackedParameter<bool> ("isElectron1", true) ;
27  isElectron2_ = iConfig.getUntrackedParameter<bool> ("isElectron2", true) ;
28 
29  candToken_ = consumes<trigger::TriggerFilterObjectWithRefs> (candTag_);
30  beamSpotToken_ = consumes<reco::BeamSpot> (beamSpot_);
31 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::InputTag candTag_
edm::InputTag beamSpot_
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
HLTFilter(const edm::ParameterSet &config)
Definition: HLTFilter.cc:20
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > candToken_
edm::InputTag l1EGTag_
HLTPMMassFilter::~HLTPMMassFilter ( )
overridedefault

Referenced by HLTPMMassFilter().

Member Function Documentation

TLorentzVector HLTPMMassFilter::approxMomAtVtx ( const MagneticField magField,
const GlobalPoint xvert,
const reco::SuperClusterRef  sc,
int  charge 
) const
private

Definition at line 183 of file HLTPMMassFilter.cc.

References DEFINE_FWK_MODULE, FTSFromVertexToPointFactory::get(), FreeTrajectoryState::momentum(), mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by hltFilter().

184 {
185  GlobalPoint xsc(sc->position().x(),
186  sc->position().y(),
187  sc->position().z());
188  float energy = sc->energy();
189  FreeTrajectoryState theFTS = FTSFromVertexToPointFactory::get(*magField, xsc, xvert, energy, charge);
190  float theApproxMomMod = theFTS.momentum().x()*theFTS.momentum().x() +
191  theFTS.momentum().y()*theFTS.momentum().y() +
192  theFTS.momentum().z()*theFTS.momentum().z();
193  TLorentzVector theApproxMom(theFTS.momentum().x(),
194  theFTS.momentum().y(),
195  theFTS.momentum().z(),
196  sqrt(theApproxMomMod + 2.61121E-7));
197  return theApproxMom ;
198 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
T y() const
Definition: PV3DBase.h:63
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
GlobalVector momentum() const
T x() const
Definition: PV3DBase.h:62
void HLTPMMassFilter::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 36 of file HLTPMMassFilter.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addUntracked(), and HLTFilter::makeHLTFilterDescription().

36  {
39  desc.add<edm::InputTag>("candTag", edm::InputTag("hltL1NonIsoDoublePhotonEt5UpsHcalIsolFilter"));
40  desc.add<edm::InputTag>("beamSpot", edm::InputTag("hltOfflineBeamSpot"));
41  desc.add<double>("lowerMassCut", 8.0);
42  desc.add<double>("upperMassCut", 11.0);
43  desc.add<int>("nZcandcut", 1);
44  desc.addUntracked<bool>("reqOppCharge", true);
45  desc.addUntracked<bool>("isElectron1", false);
46  desc.addUntracked<bool>("isElectron2", false);
47  desc.add<edm::InputTag>("l1EGCand", edm::InputTag("hltL1IsoRecoEcalCandidate"));
48  descriptions.add("hltPMMassFilter", desc);
49 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool HLTPMMassFilter::hltFilter ( edm::Event iEvent,
const edm::EventSetup iSetup,
trigger::TriggerFilterObjectWithRefs filterproduct 
) const
overridevirtual

Implements HLTFilter.

Definition at line 53 of file HLTPMMassFilter.cc.

References accept(), trigger::TriggerFilterObjectWithRefs::addCollectionTag(), trigger::TriggerRefsCollections::addObject(), approxMomAtVtx(), beamSpotToken_, candToken_, ALCARECOTkAlJpsiMuMu_cff::charge, metsig::electron, lowPtElectrons_cff::electrons, edm::EventSetup::get(), edm::Event::getByToken(), trigger::TriggerRefsCollections::getObjects(), mps_fire::i, cuy::ii, isElectron1_, isElectron2_, findQualityFiles::jj, l1EGTag_, lowerMassCut_, ResonanceBuilder::mass, gen::n, nZcandcut_, reco::BeamSpot::position(), edm::ESHandle< T >::product(), reqOppCharge_, HLTFilter::saveTags(), SimDataFormats::CaloAnalysis::sc, trigger::TriggerCluster, trigger::TriggerElectron, trigger::TriggerPhoton, and upperMassCut_.

54 {
55  using namespace std;
56  using namespace edm;
57  using namespace reco;
58  using namespace trigger;
59 
60  // The filter object
61  if (saveTags()) {
62  filterproduct.addCollectionTag(l1EGTag_);
63  }
64 
65  edm::ESHandle<MagneticField> theMagField;
66  iSetup.get<IdealMagneticFieldRecord>().get(theMagField);
67 
69  iEvent.getByToken (candToken_, PrevFilterOutput);
70 
71  // beam spot
72  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
73  iEvent.getByToken(beamSpotToken_,recoBeamSpotHandle);
74  // gets its position
75  const GlobalPoint vertexPos(recoBeamSpotHandle->position().x(),
76  recoBeamSpotHandle->position().y(),
77  recoBeamSpotHandle->position().z());
78 
79  int n = 0;
80 
81  // REMOVED USAGE OF STATIC ARRAYS
82  // double px[66];
83  // double py[66];
84  // double pz[66];
85  // double energy[66];
86  std::vector<TLorentzVector> pEleCh1;
87  std::vector<TLorentzVector> pEleCh2;
88  std::vector<double> charge;
89  std::vector<double> etaOrig;
90 
91  if (isElectron1_ && isElectron2_) {
92 
94 
95  vector< Ref< ElectronCollection > > electrons;
96  PrevFilterOutput->getObjects(TriggerElectron, electrons);
97 
98  for (auto & electron : electrons) {
99 
100  refele = electron;
101 
102  TLorentzVector pThisEle(refele->px(), refele->py(),
103  refele->pz(), refele->energy() );
104  pEleCh1.push_back( pThisEle );
105  charge.push_back( refele->charge() );
106  }
107 
108  for(unsigned int jj=0;jj<electrons.size();jj++){
109 
110  TLorentzVector p1Ele = pEleCh1.at(jj);
111  for(unsigned int ii=jj+1;ii<electrons.size();ii++){
112 
113  TLorentzVector p2Ele = pEleCh1.at(ii);
114 
115  if(fabs(p1Ele.E() - p2Ele.E()) < 0.00001) continue;
116  if(reqOppCharge_ && charge[jj]*charge[ii] > 0) continue;
117 
118  TLorentzVector pTot = p1Ele + p2Ele;
119  double mass = pTot.M();
120 
121  if(mass>=lowerMassCut_ && mass<=upperMassCut_){
122  n++;
123  refele = electrons[ii];
124  filterproduct.addObject(TriggerElectron, refele);
125  refele = electrons[jj];
126  filterproduct.addObject(TriggerElectron, refele);
127  }
128  }
129  }
130 
131  } else {
132 
134 
135  vector< Ref< RecoEcalCandidateCollection > > scs;
136  PrevFilterOutput->getObjects(TriggerCluster, scs);
137  if(scs.empty()) PrevFilterOutput->getObjects(TriggerPhoton, scs); //we dont know if its type trigger cluster or trigger photon
138 
139  for (auto & i : scs) {
140 
141  refsc = i;
142  const reco::SuperClusterRef sc = refsc->superCluster();
143  TLorentzVector pscPos = approxMomAtVtx(theMagField.product(), vertexPos, sc, 1);
144  pEleCh1.push_back( pscPos );
145 
146  TLorentzVector pscEle = approxMomAtVtx(theMagField.product(), vertexPos, sc, -1);
147  pEleCh2.push_back( pscEle );
148  etaOrig.push_back( sc->eta() );
149 
150  }
151 
152  for(unsigned int jj=0;jj<scs.size();jj++){
153 
154  TLorentzVector p1Ele = pEleCh1.at(jj);
155  for(unsigned int ii=0;ii<scs.size();ii++){
156 
157  TLorentzVector p2Ele = pEleCh2.at(ii);
158 
159  if(fabs(p1Ele.E() - p2Ele.E()) < 0.00001) continue;
160 
161  TLorentzVector pTot = p1Ele + p2Ele;
162  double mass = pTot.M();
163 
164  if(mass>= lowerMassCut_ && mass<=upperMassCut_){
165  n++;
166  refsc = scs[ii];
167  filterproduct.addObject(TriggerCluster, refsc);
168  refsc = scs[jj];
169  filterproduct.addObject(TriggerCluster, refsc);
170  }
171  }
172  }
173  }
174 
175 
176  // filter decision
177  bool accept(n>=nZcandcut_);
178  // if (accept) std::cout << "n size = " << n << std::endl;
179 
180  return accept;
181 }
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
ii
Definition: cuy.py:590
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > candToken_
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
edm::InputTag l1EGTag_
fixed size matrix
bool saveTags() const
Definition: HLTFilter.h:45
HLT enums.
T get() const
Definition: EventSetup.h:71
const Point & position() const
position
Definition: BeamSpot.h:62
T const * product() const
Definition: ESHandle.h:86
TLorentzVector approxMomAtVtx(const MagneticField *magField, const GlobalPoint &xvert, const reco::SuperClusterRef sc, int charge) const

Member Data Documentation

edm::InputTag HLTPMMassFilter::beamSpot_
private

Definition at line 68 of file HLTPMMassFilter.h.

Referenced by HLTPMMassFilter().

edm::EDGetTokenT<reco::BeamSpot> HLTPMMassFilter::beamSpotToken_
private

Definition at line 69 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

edm::InputTag HLTPMMassFilter::candTag_
private

Definition at line 66 of file HLTPMMassFilter.h.

Referenced by HLTPMMassFilter().

edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> HLTPMMassFilter::candToken_
private

Definition at line 67 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

bool HLTPMMassFilter::isElectron1_
private

Definition at line 75 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

bool HLTPMMassFilter::isElectron2_
private

Definition at line 76 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

edm::InputTag HLTPMMassFilter::l1EGTag_
private

Definition at line 77 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

double HLTPMMassFilter::lowerMassCut_
private

Definition at line 70 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

int HLTPMMassFilter::nZcandcut_
private

Definition at line 72 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

bool HLTPMMassFilter::reqOppCharge_
private

Definition at line 73 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().

double HLTPMMassFilter::upperMassCut_
private

Definition at line 71 of file HLTPMMassFilter.h.

Referenced by hltFilter(), and HLTPMMassFilter().