214 reco::TrackCollection::const_iterator trkItr;
215 if (!trkCollection.
isValid()) {
229 if (recVtxs->size()>0 && !((*recVtxs)[0].isFake())) {
230 leadPV =
math::XYZPoint( (*recVtxs)[0].
x(),(*recVtxs)[0].
y(), (*recVtxs)[0].
z() );
231 }
else if (beamSpotH.
isValid()) {
232 leadPV = beamSpotH->position();
234 LogDebug(
"HcalIsoTrack") <<
"Primary Vertex " << leadPV;
236 << beamSpotH->position();
241 if (!barrelRecHitsHandle.
isValid()) {
247 if (!endcapRecHitsHandle.
isValid()) {
259 std::vector<spr::propagatedTrackDirection> trkCaloDirections;
261 trkCaloDirections,
false);
262 std::vector<spr::propagatedTrackDirection>::const_iterator trkDetItr;
272 if (!triggerEventHandle.
isValid()) {
276 triggerEvent = *(triggerEventHandle.
product());
282 if (triggerResults.isValid()) {
283 std::vector<std::string>
modules;
285 const std::vector<std::string> & triggerNames_ = triggerNames.
triggerNames();
286 for (
unsigned int iHLT=0; iHLT<triggerResults->size(); iHLT++) {
288 int hlt = triggerResults->accept(iHLT);
290 if (triggerNames_[iHLT].
find(
trigNames[
i].c_str())!=std::string::npos) {
297 LogDebug(
"HcalIsoTrack") <<
"This is the trigger we are looking for "
298 << triggerNames_[iHLT] <<
" Flag " << hlt
306 std::vector<math::XYZTLorentzVector> vec[3];
308 for (
unsigned int ifilter=0; ifilter<triggerEvent.
sizeFilters();
310 std::vector<int>
Keys;
313 for (
unsigned int imodule=0; imodule<moduleLabels.size();
315 if (label.find(moduleLabels[imodule]) != std::string::npos) {
317 for (
unsigned int ifiltrKey=0; ifiltrKey<triggerEvent.
filterKeys(ifilter).size(); ++ifiltrKey) {
318 Keys.push_back(triggerEvent.
filterKeys(ifilter)[ifiltrKey]);
321 if (label.find(
l2Filter) != std::string::npos) {
322 vec[1].push_back(v4);
323 }
else if (label.find(
l3Filter) != std::string::npos) {
324 vec[2].push_back(v4);
325 }
else if (label.find(
l1Filter) != std::string::npos ||
327 vec[0].push_back(v4);
329 LogDebug(
"HcalIsoTrack") <<
"key " << ifiltrKey <<
" : pt "
330 << TO.pt() <<
" eta " << TO.eta()
331 <<
" phi " << TO.phi() <<
" mass "
332 << TO.mass() <<
" Id " << TO.id();
334 LogDebug(
"HcalIsoTrack") <<
"sizes " << vec[0].size() <<
":"
335 << vec[1].size() <<
":" <<vec[2].size();
343 for (
int lvl=1; lvl<3; lvl++) {
344 for (
unsigned int i=0;
i<vec[lvl].size();
i++) {
345 dr =
dR(vec[0][0],vec[lvl][
i]);
346 LogDebug(
"HcalIsoTrack") <<
"lvl " <<lvl <<
" i " <<
i <<
" dR "
350 mindRvec1 = vec[lvl][
i];
358 if (vec[2].
size()>0) {
364 std::vector<spr::propagatedTrackDirection>::const_iterator trkDetItr;
365 unsigned int nTracks(0), nselTracks(0);
366 for (trkDetItr = trkCaloDirections.begin(),nTracks=0;
367 trkDetItr != trkCaloDirections.end(); trkDetItr++,nTracks++) {
368 const reco::Track* pTrack = &(*(trkDetItr->trkItr));
370 pTrack->
pz(), pTrack->
p());
371 LogDebug(
"HcalIsoTrack") <<
"This track : " << nTracks
372 <<
" (pt|eta|phi|p) :" << pTrack->
pt()
373 <<
"|" << pTrack->
eta() <<
"|"
374 << pTrack->
phi() <<
"|" << pTrack->
p();
378 for (
unsigned int k=0;
k<vec[2].size(); ++
k) {
379 dr =
dR(vec[2][
k],v4);
382 mindRvec2 = vec[2][
k];
386 LogDebug(
"HcalIsoTrack") <<
"Closest L3 object at mindr :"
394 oneCutParameters.
maxDzPV = 100;
397 bool qltyFlag =
spr::goodTrack(pTrack,leadPV,oneCutParameters,
false);
400 oneCutParameters.
maxDzPV = 100;
407 if (trkDetItr->okHCAL) {
411 LogDebug(
"HcalIsoTrack") <<
"qltyFlag|okECAL|okHCAL : " << qltyFlag
412 <<
"|" << trkDetItr->okECAL <<
"|"
413 << trkDetItr->okHCAL;
414 t_qltyFlag = (qltyFlag && trkDetItr->okECAL && trkDetItr->okHCAL);
418 int nRH_eMipDR(0), nNearTRKs(0), nRecHits(-999);
421 trkDetItr->pointHCAL,
422 trkDetItr->pointECAL,
423 a_mipR, trkDetItr->directionECAL,
426 std::vector<DetId> ids;
429 trkDetItr->directionHCAL,nRecHits,
431 for (
unsigned int k=0;
k<ids.size(); ++
k) {
437 LogDebug(
"HcalIsoTrack") <<
"This track : " << nTracks
438 <<
" (pt|eta|phi|p) :" << pTrack->
pt()
439 <<
"|" << pTrack->
eta() <<
"|"
440 << pTrack->
phi() <<
"|" <<
t_p;
443 <<
" eHcal" <<
t_eHcal <<
" ieta "
447 for (
unsigned int lll=0;lll<
t_DetIds->size();lll++) {
449 <<
" hit enery is = "
457 LogDebug(
"HcalIsoTrack") <<
"trigger bit is = "
467 LogDebug(
"HcalIsoTrack") <<
"New trigger menu found !!!";
469 for (
unsigned itrig=0; itrig<triggerNames_.size(); itrig++) {
471 if (triggerindx >=
n)
472 LogDebug(
"HcalIsoTrack") << triggerNames_[itrig] <<
" "
473 << triggerindx <<
" does not exist in "
474 <<
"the current menu";
476 LogDebug(
"HcalIsoTrack") << triggerNames_[itrig] <<
" "
477 << triggerindx <<
" exists";
unsigned int size() const
number of trigger paths in trigger table
double p() const
momentum vector magnitude
EventNumber_t event() const
edm::EDGetTokenT< trigger::TriggerEvent > tok_trigEvt
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
std::vector< spr::propagatedTrackID > propagateCALO(edm::Handle< reco::TrackCollection > &trkCollection, const CaloGeometry *geo, const MagneticField *bField, std::string &theTrackQuality, bool debug=false)
edm::EDGetTokenT< EcalRecHitCollection > tok_EE_
The single EDProduct to be saved for each event (AOD case)
trigger::size_type sizeFilters() const
std::vector< int > trigKount
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const Keys & filterKeys(trigger::size_type index) const
int bunchCrossing() const
edm::LuminosityBlockNumber_t luminosityBlock() const
double phi() const
azimuthal angle of momentum vector
std::vector< std::string > trgnames
edm::EDGetTokenT< EcalRecHitCollection > tok_EB_
std::vector< double > * t_HitEnergies
double chargeIsolationCone(unsigned int trkIndex, std::vector< spr::propagatedTrackDirection > &trkDirs, double dR, int &nNearTRKs, bool debug=false)
edm::EDGetTokenT< reco::TrackCollection > tok_genTrack_
double px() const
x coordinate of momentum vector
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Strings const & triggerNames() const
std::vector< unsigned int > * t_DetIds
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
Single trigger physics object (e.g., an isolated muon)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
double eta() const
pseudorapidity of momentum vector
edm::EDGetTokenT< reco::BeamSpot > tok_bs_
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
const TriggerObjectCollection & getObjects() const
double pt() const
track transverse momentum
int ieta() const
get the cell ieta
edm::InputTag labelGenTrack_
double eCone_ecal(const CaloGeometry *geo, edm::Handle< T > &barrelhits, edm::Handle< T > &endcaphits, const GlobalPoint &hpoint1, const GlobalPoint &point1, double dR, const GlobalVector &trackMom, int &nRecHits, double ebThr=-100, double eeThr=-100, double tMin=-500, double tMax=500, bool debug=false)
static std::string const triggerResults
HLTConfigProvider hltConfig_
double pz() const
z coordinate of momentum vector
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
std::vector< bool > * t_trgbits
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
const edm::InputTag filterTag(trigger::size_type index) const
T const * product() const
double eCone_hcal(const CaloGeometry *geo, edm::Handle< T > &hits, const GlobalPoint &hpoint1, const GlobalPoint &point1, double dR, const GlobalVector &trackMom, int &nRecHits, double hbThr=-100, double heThr=-100, double hfThr=-100, double hoThr=-100, double tMin=-500, double tMax=500, int detOnly=-1, bool debug=false)
XYZPointD XYZPoint
point in space with cartesian internal representation
std::vector< size_type > Keys
T const * product() const
double dR(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
std::vector< int > trigPass
std::vector< std::string > trigNames
spr::trackSelectionParameters selectionParameters
edm::EDGetTokenT< edm::TriggerResults > tok_trigRes
edm::EDGetTokenT< reco::VertexCollection > tok_recVtx_
edm::InputTag triggerEvent_
tuple size
Write out results.
double py() const
y coordinate of momentum vector
std::string theTrackQuality