41 desc.
add<
double>(
"lowerMassCut",8.0);
42 desc.
add<
double>(
"upperMassCut",11.0);
43 desc.
add<
int>(
"nZcandcut",1);
50 descriptions.
add(
"hltPMMassFilter",desc);
60 using namespace trigger;
78 const GlobalPoint vertexPos(recoBeamSpotHandle->position().x(),
79 recoBeamSpotHandle->position().y(),
80 recoBeamSpotHandle->position().z());
89 std::vector<TLorentzVector> pEleCh1;
90 std::vector<TLorentzVector> pEleCh2;
91 std::vector<double>
charge;
92 std::vector<double> etaOrig;
98 vector< Ref< ElectronCollection > >
electrons;
101 for (
unsigned int i=0;
i<electrons.size();
i++) {
103 refele = electrons[
i];
105 TLorentzVector pThisEle(refele->px(), refele->py(),
106 refele->pz(), refele->energy() );
107 pEleCh1.push_back( pThisEle );
108 charge.push_back( refele->charge() );
111 for(
unsigned int jj=0;
jj<electrons.size();
jj++){
113 TLorentzVector p1Ele = pEleCh1.at(
jj);
114 for(
unsigned int ii=
jj+1;
ii<electrons.size();
ii++){
116 TLorentzVector p2Ele = pEleCh1.at(
ii);
118 if(fabs(p1Ele.E() - p2Ele.E()) < 0.00001)
continue;
121 TLorentzVector pTot = p1Ele + p2Ele;
122 double mass = pTot.M();
126 refele = electrons[
ii];
128 refele = electrons[
jj];
138 vector< Ref< RecoEcalCandidateCollection > > scs;
140 if(scs.empty()) PrevFilterOutput->getObjects(
TriggerPhoton, scs);
142 for (
unsigned int i=0;
i<scs.size();
i++) {
146 TLorentzVector pscPos =
approxMomAtVtx(theMagField.product(), vertexPos, sc, 1);
147 pEleCh1.push_back( pscPos );
149 TLorentzVector pscEle =
approxMomAtVtx(theMagField.product(), vertexPos, sc, -1);
150 pEleCh2.push_back( pscEle );
151 etaOrig.push_back( sc->eta() );
155 for(
unsigned int jj=0;
jj<scs.size();
jj++){
157 TLorentzVector p1Ele = pEleCh1.at(
jj);
158 for(
unsigned int ii=0;
ii<scs.size();
ii++){
160 TLorentzVector p2Ele = pEleCh2.at(
ii);
162 if(fabs(p1Ele.E() - p2Ele.E()) < 0.00001)
continue;
164 TLorentzVector pTot = p1Ele + p2Ele;
165 double mass = pTot.M();
191 float energy = sc->energy();
196 TLorentzVector theApproxMom(theFTS.
momentum().
x(),
199 sqrt(theApproxMomMod + 2.61121E-7));
200 return theApproxMom ;
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
HLTPMMassFilter(const edm::ParameterSet &)
edm::InputTag L1IsoCollTag_
edm::InputTag L1NonIsoCollTag_
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
GlobalVector momentum() const
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > candToken_
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
TLorentzVector approxMomAtVtx(const MagneticField *magField, const GlobalPoint &xvert, const reco::SuperClusterRef sc, int charge) const