bool TopMuonPairSelector::processEvent(cafe::Event &event) { //get pointer to statistics collector StatPointer stat ; event.get("StatPointer", stat) ; Collection<TMBEMCluster> em_from(event.getCollection<TMBEMCluster>(_electronBranch.c_str())); Collection<TMBMuon> mu_from(event.getCollection<TMBMuon>(_muonBranch.c_str())); Collection<TMBMuon> all_muons( event.getMuons() ); if (em_from.size() == 0 && mu_from.size() == 0 && debug ) { out() << "PAIR SELECTOR WARNING! Electron/Muon branch " << _electronBranch << "/" << _muonBranch << " is empty or is not existing! " << endl ; return true ; } if (em_from.size() >=2 && debug) { out() << "PAIR SELECTOR ERROR! 2 electrons found in branch \"" << _electronBranch << "\". Considering only leading electron outside of a jet!" << endl ; // return false ; } l_mom.SetPxPyPzE( 0 , 0 , 0 , 0 ); lepton_charge = 0; jet_array = event.getCollection<TMBJet>(_jet_branch.c_str()); if( em_from.size() == 0 ) { for( int i = 0 ; i < mu_from.size() ; i++ ) { bool is_in_jet = false; if( dR_cut > 0 ) { for( int j = 0 ; j < jet_array.size() ; j++ ) { if( do_dr_mujet_lead_muon && mu_from[i].DeltaR( jet_array[j] ) < dR_cut ) is_in_jet = true; } } if( use_only_leading_lepton && i > 0 ) is_in_jet = true; if( mu_from[i].Pt() > l_mom.Pt() && mu_from[i].charge() != 0 && !is_in_jet ) { l_mom = mu_from[i]; l_track = const_cast<TMBTrack*>(mu_from[i].GetChargedTrack()); lepton_charge = mu_from[i].charge(); } } } else { for( int i = 0 ; i < em_from.size() ; i++ ) { if( em_from[i].Pt() > l_mom.Pt() && em_from[i].charge() != 0 ) { bool common_track = false; for( int j = 0 ; j < all_muons.size() ; j++ ) { if( remove_common_track && ( all_muons[j].GetChargedTrack() && all_muons[j].isLoose() == 1 ) && ( em_from[i].getPtrChp()->DeltaR( *all_muons[j].GetChargedTrack() ) < 1e-4 ) ) common_track = true; } if( use_only_leading_lepton && i > 0 ) common_track = true; if( !common_track ) { l_mom = em_from[i]; l_track = const_cast<TMBTrack*>(em_from[i].getPtrChp()); lepton_charge = em_from[i].charge(); } } } } if (_selectSameSign) { stat.EventSelected("Same charge selection") ; } else { stat.EventSelected("Opposite charge selection") ; } SelectUserObjects<TMBMuon>::processEvent(event); return true; }
bool TriggerSelection::processEvent(Event& event) { ++_numEvents; vector<TriggerEpoch>::iterator epoch = _epochs.end() ; for(vector<TriggerEpoch>::iterator jt = _epochs.begin() ; jt != _epochs.end(); jt++) { if (jt->isEpoch(event)) { if (epoch != _epochs.end()) throw runtime_error ("caf_trigger::TriggerSelection [" + name() + "] ERROR: event belong to two epoch [" + jt->name() + "] and [" + epoch->name() + "]." + " No overlaping epoch allows." ) ; epoch = jt ; } } if (epoch == _epochs.end()) { ostringstream s ; s << "caf_trigger::TriggerSelection [" + name() + "] ERROR: can't find epoch for the current event with run number " << event.getGlobal()->runno() ; throw runtime_error (s.str()) ; } // increase number of events processed epoch->increaseNevents() ; StatPointer stat ; event.get("StatPointer", stat) ; bool trig_found = !_required; Collection<TMBTrigger> triggers = event.getTriggers(_vars); if(triggers.size()>0 && !_useTrigBits){ for(Collection<TMBTrigger>::const_iterator it = triggers.begin(); it != triggers.end(); ++it) { if(epoch->isInList(it->getTrgName())) { trig_found = _required; // if _Tracking required, will run over all trigger in the list and increase // number of times when trigger fired. // If not, only the first fired trigger is detected. if(!_Tracking) break ; } } }else{ const TMBTrigBits* trigbits = event.getTrigBits(); if(!trigbits) return false ; map<string,long>* triggers = epoch->getMapOfTriggers() ; for(map<string,long>::iterator it = triggers->begin(); it != triggers->end(); it++){ // if any trigger allow, doesn't make a verification if (it->first == "ANY") break ; if(trigbits->triggerFired(it->first)){ trig_found=_required; it->second++ ; if(!_Tracking) break ; } } } if(!trig_found) return false ; ++_numPassed; stat.EventSelected(name()); return true; }