20 #include <CLHEP/Vector/LorentzVector.h> 67 const double Mmu2 = 0.011163612;
95 if ( !(Mmin.size() == Mmax.size() && !Mmin.empty()) ) abort();
127 if (
debug)
std::cout <<
"Looking for muons of the right kind" << std::endl;
137 std::cout <<
"Global muons: " << glbMuons->size() << std::endl;
141 reco::MuonCollection::const_iterator glbMuon;
142 for (glbMuon=glbMuons->begin(); glbMuon!=glbMuons->end(); ++glbMuon) {
143 muons->push_back(*glbMuon);
145 std::cout <<
" Reconstructed muon: pT = " << glbMuon->p4().Pt()
146 <<
" Eta = " << glbMuon->p4().Eta() << std::endl;
156 std::cout <<
"Standalone muons: " << saMuons->size() << std::endl;
160 reco::TrackCollection::const_iterator saMuon;
161 for (saMuon=saMuons->begin(); saMuon!=saMuons->end(); ++saMuon) {
163 double energy =
sqrt(saMuon->p()*saMuon->p()+
Mmu2);
167 muons->push_back(muon);
176 std::cout <<
"Tracker tracks: " << tracks->size() << std::endl;
180 reco::TrackCollection::const_iterator
track;
181 for (track=tracks->begin(); track!=tracks->end(); ++
track) {
183 double energy =
sqrt(track->p()*track->p()+
Mmu2);
187 muons->push_back(muon);
190 std::cout <<
"Wrong muon type! Aborting." << std::endl;
196 reco::MuonCollection::const_iterator muon1;
197 reco::MuonCollection::const_iterator muon2;
199 bool resfound =
false;
204 for (muon1=muons->begin(); muon1!=muons->end(); ++muon1) {
207 std::cout <<
" Reconstructed muon: pT = " << muon1->p4().Pt()
208 <<
" Eta = " << muon1->p4().Eta() << std::endl;
213 if (muons->size()>1) {
214 for (muon2 = muon1+1; muon2!=muons->end(); ++muon2) {
215 if ( ((*muon1).charge()*(*muon2).charge())<0 ) {
221 std::vector<double>::const_iterator mMinCut =
Mmin.begin();
222 std::vector<double>::const_iterator mMaxCut =
Mmax.begin();
223 for( ; mMinCut !=
Mmin.end(); ++mMinCut, ++mMaxCut ) {
225 if( *mMinCut == *mMaxCut && *mMaxCut == -1) {
228 std::cout <<
"Acceptiong event because mMinCut = " << *mMinCut <<
" = mMaxCut = " << *mMaxCut << std::endl;
231 else if (
Z.mass()>*mMinCut &&
Z.mass()<*mMaxCut) {
234 std::cout <<
"One particle found with mass = " <<
Z.mass() << std::endl;
241 std::cout <<
"Not enough reconstructed muons to make a resonance" << std::endl;
246 std::cout <<
"Skipping event because muons = " << muons->size() <<
" < " <<
"minimumMuonsNumber("<<
minimumMuonsNumber<<
")" << std::endl;
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool filter(edm::Event &, const edm::EventSetup &) override
std::vector< Muon > MuonCollection
collection of Muon objects
~MuScleFitFilter() override
void setCharge(Charge q) final
set electric charge
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< reco::TrackCollection > theTracksToken
edm::EDGetTokenT< reco::MuonCollection > theGlbMuonsToken
edm::EDGetTokenT< reco::TrackCollection > theSaMuonsToken
edm::InputTag theMuonLabel
unsigned int minimumMuonsNumber
std::vector< double > Mmax
std::vector< double > Mmin
MuScleFitFilter(const edm::ParameterSet &)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
void setP4(const LorentzVector &p4) final
set 4-momentum