Skip to content

Commit

Permalink
Merge pull request #13257 from gpasztor/new-mass-fiter
Browse files Browse the repository at this point in the history
HLTElectronMuonInvMassFilter update
  • Loading branch information
cmsbuild committed Feb 21, 2016
2 parents 7ccd8b8 + c469e1d commit bafbcf9
Showing 1 changed file with 26 additions and 32 deletions.
58 changes: 26 additions & 32 deletions HLTrigger/Egamma/src/HLTElectronMuonInvMassFilter.cc
Expand Up @@ -7,6 +7,9 @@
*/

#include "HLTrigger/Egamma/interface/HLTElectronMuonInvMassFilter.h"
#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
#include "DataFormats/EgammaReco/interface/SuperCluster.h"
#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"

#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
Expand Down Expand Up @@ -52,71 +55,62 @@ bool
HLTElectronMuonInvMassFilter::hltFilter(edm::Event& iEvent, const edm::EventSetup& iSetup, trigger::TriggerFilterObjectWithRefs & filterproduct) const
{
using namespace std;
using namespace math;
using namespace edm;
using namespace reco;
// The filter object
using namespace trigger;

double const MuMass = 0.106;
double const MuMass2 = MuMass*MuMass;

if (saveTags()) {
filterproduct.addCollectionTag(L1IsoCollTag_);
if (relaxed_) filterproduct.addCollectionTag(L1NonIsoCollTag_);
filterproduct.addCollectionTag(MuonCollTag_);
}

edm::Handle<trigger::TriggerFilterObjectWithRefs> EleFromPrevFilter;
iEvent.getByToken (eleCandToken_,EleFromPrevFilter);

edm::Handle<trigger::TriggerFilterObjectWithRefs> MuonFromPrevFilter;
iEvent.getByToken (muonCandToken_,MuonFromPrevFilter);

std::vector<TLorentzVector> pElectron;
std::vector<double> eleCharge;

std::vector<TLorentzVector> pMuon;
std::vector<double> muonCharge;

Ref< ElectronCollection > refele;
vector< Ref< ElectronCollection > > electrons;
EleFromPrevFilter->getObjects(TriggerElectron, electrons);

vector<RecoChargedCandidateRef> l3muons;
MuonFromPrevFilter->getObjects(TriggerMuon,l3muons);

for(unsigned int i=0; i<l3muons.size(); i++) {
TrackRef tk = l3muons[i]->get<TrackRef>();
// TrackRef tk = l3muons[i].track();
double muonEnergy = sqrt(tk->momentum().Mag2()+MuMass2);
TLorentzVector pThisMuon(tk->px(), tk->py(),
tk->pz(), muonEnergy );
pMuon.push_back( pThisMuon );
muonCharge.push_back( tk->charge() );

std::vector<edm::Ref<reco::RecoEcalCandidateCollection>> clusCands;
if(electrons.empty()){
EleFromPrevFilter->getObjects(TriggerCluster,clusCands);
}

for (unsigned int i=0; i<electrons.size(); i++) {
refele = electrons[i];
TLorentzVector pThisEle(refele->px(), refele->py(),
refele->pz(), refele->energy() );
pElectron.push_back( pThisEle );
eleCharge.push_back( refele->charge() );

if(clusCands.empty()){
EleFromPrevFilter->getObjects(TriggerPhoton,clusCands);
}

int nEleMuPairs = 0;

for(unsigned int i=0; i<electrons.size(); i++) {
for(unsigned int j=0; j<l3muons.size(); j++) {
TLorentzVector p1 = pElectron.at(i);
TLorentzVector p2 = pMuon.at(j);
TLorentzVector pTot = p1 + p2;
double mass = pTot.M();
double mass = (electrons[i]->p4()+l3muons[j]->p4()).mass();
if(mass>=lowerMassCut_ && mass<=upperMassCut_){
nEleMuPairs++;
filterproduct.addObject(TriggerElectron, electrons[i]);
filterproduct.addObject(TriggerMuon, l3muons[j]);
}
}
}

for(unsigned int i=0; i<clusCands.size(); i++) {
for(unsigned int j=0; j<l3muons.size(); j++) {
double mass = (clusCands[i]->p4()+l3muons[j]->p4()).mass();
if(mass>=lowerMassCut_ && mass<=upperMassCut_){
nEleMuPairs++;
filterproduct.addObject(TriggerElectron, clusCands[i]);
filterproduct.addObject(TriggerMuon, l3muons[j]);
}
}
}

// filter decision
bool accept(nEleMuPairs>=ncandcut_);
Expand Down

0 comments on commit bafbcf9

Please sign in to comment.