9 #include "TDirectory.h" 11 #include "TLorentzVector.h" 12 #include "TInterpreter.h" 142 std::map<std::pair<unsigned int, std::string>,
int>
l1AlgoMap_;
148 verbosity_(iConfig.getUntrackedParameter<
int>(
"Verbosity", 0)),
150 theTrackQuality_(iConfig.getUntrackedParameter<
std::
string>(
"TrackQuality",
"highPurity")),
151 a_coneR_(iConfig.getUntrackedParameter<double>(
"ConeRadius", 34.98)),
152 a_charIsoR_(a_coneR_ + 28.9),
153 a_mipR_(iConfig.getUntrackedParameter<double>(
"ConeRadiusMIP", 14.0)),
189 tok_L1extTauJet_ = consumes<l1extra::L1JetParticleCollection>(L1extraTauJetSource_);
190 tok_L1extCenJet_ = consumes<l1extra::L1JetParticleCollection>(L1extraCenJetSource_);
191 tok_L1extFwdJet_ = consumes<l1extra::L1JetParticleCollection>(L1extraFwdJetSource_);
209 tok_geom_ = esConsumes<CaloGeometry, CaloGeometryRecord>();
210 tok_magField_ = esConsumes<MagneticField, IdealMagneticFieldRecord>();
220 std::vector<std::string>
seeds = {
221 "L1_SingleJet36",
"L1_SingleJet52",
"L1_SingleJet68",
"L1_SingleJet92",
"L1_SingleJet128"};
223 desc.addUntracked<
int>(
"Verbosity", 0);
224 desc.addUntracked<std::vector<std::string> >(
"L1Seed",
seeds);
226 desc.addUntracked<
double>(
"MinTrackPt", 10.0);
227 desc.addUntracked<
double>(
"MaxDxyPV", 0.02);
228 desc.addUntracked<
double>(
"MaxDzPV", 0.02);
229 desc.addUntracked<
double>(
"MaxChi2", 5.0);
230 desc.addUntracked<
double>(
"MaxDpOverP", 0.1);
231 desc.addUntracked<
int>(
"MinOuterHit", 4);
232 desc.addUntracked<
int>(
"MinLayerCrossed", 8);
233 desc.addUntracked<
int>(
"MaxInMiss", 0);
234 desc.addUntracked<
int>(
"MaxOutMiss", 0);
235 desc.addUntracked<
double>(
"ConeRadius", 34.98);
236 desc.addUntracked<
double>(
"ConeRadiusMIP", 14.0);
237 desc.addUntracked<
bool>(
"IsItAOD",
false);
238 descriptions.
add(
"isoTrackCalib",
desc);
246 <<
iEvent.luminosityBlock() <<
" Bunch " <<
iEvent.bunchCrossing()
247 <<
" starts ==========";
268 for (
unsigned iGenJet = 0; iGenJet <
genJets->size(); ++iGenJet) {
270 double genJetPt = genJet.
pt();
271 double genJetEta = genJet.
eta();
274 if (genJetEta > -2.5 && genJetEta < 2.5) {
292 if (!recVtxs->empty() && !((*recVtxs)[0].isFake())) {
293 leadPV =
math::XYZPoint((*recVtxs)[0].
x(), (*recVtxs)[0].
y(), (*recVtxs)[0].
z());
294 }
else if (beamSpotH.
isValid()) {
313 for (rhitItr =
hbhe->begin(); rhitItr !=
hbhe->end(); rhitItr++) {
314 double rec_energy = rhitItr->energy();
315 int rec_ieta = rhitItr->id().ieta();
316 int rec_depth = rhitItr->id().depth();
317 int rec_zside = rhitItr->id().zside();
318 double num1_1 = rec_zside * (rec_ieta + 0.2 * (rec_depth - 1));
321 <<
" = " << rhitItr->id() <<
"/" << rec_energy <<
"/" << rec_ieta <<
"/" << rec_zside
322 <<
"/" << rec_depth <<
"/" << num1_1;
330 std::vector<spr::propagatedTrackDirection> trkCaloDirections;
332 std::vector<spr::propagatedTrackDirection>::const_iterator trkDetItr;
333 for (trkDetItr = trkCaloDirections.begin(); trkDetItr != trkCaloDirections.end(); trkDetItr++) {
334 if (trkDetItr->okHCAL) {
336 int tk_ieta = detId.
ieta();
337 const reco::Track* pTrack = &(*(trkDetItr->trkItr));
338 double tk_p = pTrack->
p();
340 for (
unsigned int k = 1;
k <
pbin.size(); ++
k) {
361 <<
"\nNo valid L1 trigger configuration available." 362 <<
"\nSee text above for error code interpretation" 363 <<
"\nNo return here, in order to test each method" 364 <<
", protected against configuration error.";
372 std::vector<int> algbits;
373 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
375 int algBitNumber = (itAlgo->second).algoBitNumber();
380 edm::LogVerbatim(
"IsoTrack") << algName <<
" " << algBitNumber <<
" " << decision;
381 for (
unsigned int i = 0;
i <
l1Names_.size(); ++
i) {
382 if (algName.find(
l1Names_[
i]) != std::string::npos) {
385 <<
" " << algName <<
" " << decision;
397 l1extra::L1JetParticleCollection::const_iterator itr;
398 double ptTriggered = -10;
399 double etaTriggered = -100;
400 double phiTriggered = -100;
402 for (itr = l1TauHandle->begin(); itr != l1TauHandle->end(); ++itr) {
403 if (itr->pt() > ptTriggered) {
404 ptTriggered = itr->pt();
405 etaTriggered = itr->eta();
406 phiTriggered = itr->phi();
409 edm::LogVerbatim(
"IsoTrack") <<
"tauJ pt " << itr->pt() <<
" eta/phi " << itr->eta() <<
" " << itr->phi();
413 for (itr = l1CenJetHandle->begin(); itr != l1CenJetHandle->end(); ++itr) {
414 if (itr->pt() > ptTriggered) {
415 ptTriggered = itr->pt();
416 etaTriggered = itr->eta();
417 phiTriggered = itr->phi();
420 edm::LogVerbatim(
"IsoTrack") <<
"cenJ pt " << itr->pt() <<
" eta/phi " << itr->eta() <<
" " 425 for (itr = l1FwdJetHandle->begin(); itr != l1FwdJetHandle->end(); ++itr) {
426 if (itr->pt() > ptTriggered) {
427 ptTriggered = itr->pt();
428 etaTriggered = itr->eta();
429 phiTriggered = itr->phi();
432 edm::LogVerbatim(
"IsoTrack") <<
"forJ pt " << itr->pt() <<
" eta/phi " << itr->eta() <<
" " << itr->phi();
435 edm::LogVerbatim(
"IsoTrack") <<
"jets pt/eta/phi = " << ptTriggered <<
"/" << etaTriggered <<
"/" 438 unsigned int nTracks(0), nselTracks(0);
439 for (trkDetItr = trkCaloDirections.begin(),
nTracks = 0; trkDetItr != trkCaloDirections.end();
441 const reco::Track* pTrack = &(*(trkDetItr->trkItr));
444 t_mindR1 =
deltaR(etaTriggered, v4.eta(), phiTriggered, v4.phi());
448 << pTrack->
eta() <<
"/" << pTrack->
phi() <<
"/" << pTrack->
p();
464 oneCutParameters.
maxDzPV = 100;
470 oneCutParameters.
maxDzPV = 100;
477 if (trkDetItr->okHCAL) {
482 edm::LogVerbatim(
"IsoTrack") <<
"qltyFlag|okECAL|okHCAL : " << qltyFlag <<
"|" << trkDetItr->okECAL <<
"/" 483 << trkDetItr->okHCAL;
484 t_qltyFlag = (qltyFlag && trkDetItr->okECAL && trkDetItr->okHCAL);
487 for (
unsigned int k = 1;
k <
pbin.size(); ++
k) {
496 for (
unsigned int k = 1;
k <
pbin.size(); ++
k) {
502 int nRH_eMipDR(0), nNearTRKs(0), nRecHits(-999);
506 trkDetItr->pointHCAL,
507 trkDetItr->pointECAL,
509 trkDetItr->directionECAL,
513 std::vector<DetId> ids;
516 trkDetItr->pointHCAL,
517 trkDetItr->pointECAL,
519 trkDetItr->directionHCAL,
523 for (
unsigned int k = 0;
k < ids.size(); ++
k) {
530 for (
unsigned int k = 1;
k <
pbin.size(); ++
k) {
538 for (
unsigned int k = 1;
k <
pbin.size(); ++
k) {
546 for (
unsigned int k = 1;
k <
pbin.size(); ++
k) {
557 << pTrack->
eta() <<
"/" << pTrack->
phi() <<
"/" <<
t_p;
561 for (
unsigned int lll = 0; lll <
t_DetIds->size(); lll++) {
581 double prange[5] = {20, 30, 40, 60, 100};
582 for (
int k = 0;
k < 5; ++
k)
583 pbin.push_back(prange[
k]);
584 std::string type[6] = {
"All",
"Trigger OK",
"Tree Selected",
"Charge Isolation",
"MIP Cut",
"L1 Cut"};
585 for (
unsigned int k = 0;
k <
pbin.size(); ++
k) {
588 sprintf(namp,
"all momentum");
590 sprintf(namp,
"p = %4.0f:%4.0f GeV",
pbin[
k - 1],
pbin[
k]);
591 sprintf(
name,
"TrackEta0%d",
k);
592 sprintf(
title,
"Track #eta for tracks with %s (%s)", namp,
type[0].c_str());
594 sprintf(
name,
"TrackEta1%d",
k);
595 sprintf(
title,
"Track #eta for tracks with %s (%s)", namp,
type[1].c_str());
597 sprintf(
name,
"TrackEta2%d",
k);
598 sprintf(
title,
"Track #eta for tracks with %s (%s)", namp,
type[2].c_str());
600 sprintf(
name,
"TrackEta3%d",
k);
601 sprintf(
title,
"Track #eta for tracks with %s (%s)", namp,
type[3].c_str());
603 sprintf(
name,
"TrackEta4%d",
k);
604 sprintf(
title,
"Track #eta for tracks with %s (%s)", namp,
type[4].c_str());
606 sprintf(
name,
"TrackEta5%d",
k);
607 sprintf(
title,
"Track #eta for tracks with %s (%s)", namp,
type[5].c_str());
610 h_jetpt[0] =
fs_->
make<TH1F>(
"Jetpt0",
"Jet p_T (All)", 500, 0., 2500.);
611 h_jetpt[1] =
fs_->
make<TH1F>(
"Jetpt1",
"Jet p_T (All Weighted)", 500, 0., 2500.);
612 h_jetpt[2] =
fs_->
make<TH1F>(
"Jetpt2",
"Jet p_T (|#eta| < 2.5)", 500, 0., 2500.);
613 h_jetpt[3] =
fs_->
make<TH1F>(
"Jetpt3",
"Jet p_T (|#eta| < 2.5 Weighted)", 500, 0., 2500.);
617 tree->Branch(
"t_Run", &
t_Run,
"t_Run/I");
627 tree->Branch(
"t_p", &
t_p,
"t_p/D");
638 t_DetIds =
new std::vector<unsigned int>();
641 tree->Branch(
"t_DetIds",
"std::vector<unsigned int>", &
t_DetIds);
643 tree->Branch(
"t_l1bits",
"std::vector<bool>", &
t_l1bits);
648 bool changed =
false;
659 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
661 int algBitNumber = (itAlgo->second).algoBitNumber();
662 l1AlgoMap_.insert(std::pair<std::pair<unsigned int, std::string>,
int>(
663 std::pair<unsigned int, std::string>(algBitNumber, algName), 0));
665 std::map<std::pair<unsigned int, std::string>,
int>::iterator itr;
668 edm::LogVerbatim(
"IsoTrack") <<
" ********** " << (itr->first).
first <<
" " << (itr->first).second <<
" " 683 double phi1 =
vec1.phi();
686 double phi2 =
vec2.phi();
689 double dphi = phi1 - phi2;
692 else if (dphi < -
M_PI)
700 return std::sqrt(deta * deta + dphi * dphi);
709 double dphi = phi1 - phi2;
712 else if (dphi < -
M_PI)
714 return std::sqrt(deta * deta + dphi * dphi);
static const std::string kSharedResource
void beginRun(edm::Run const &, edm::EventSetup const &) override
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, int useRaw=0, bool debug=false)
Log< level::Info, true > LogVerbatim
spr::trackSelectionParameters selectionParameters_
std::vector< double > * t_HitEnergies
const edm::EDGetTokenT< reco::TrackCollection > tok_genTrack_
std::vector< spr::propagatedTrackID > propagateCALO(edm::Handle< reco::TrackCollection > &trkCollection, const CaloGeometry *geo, const MagneticField *bField, const std::string &theTrackQuality, bool debug=false)
T getParameter(std::string const &) const
const L1GtTriggerMenu * m_l1GtMenu
const edm::EDGetTokenT< GenEventInfoProduct > tok_ew_
std::vector< unsigned int > * t_DetIds
edm::EDGetTokenT< EcalRecHitCollection > tok_EE_
double pt() const final
transverse momentum
const Point & position() const
position
HLTConfigProvider hltConfig_
edm::EDGetTokenT< l1extra::L1JetParticleCollection > tok_L1extCenJet_
TrackQuality
track quality
#define DEFINE_FWK_MODULE(type)
double px() const
x coordinate of momentum vector
double p() const
momentum vector magnitude
const edm::EDGetTokenT< reco::BeamSpot > tok_bs_
std::vector< GenJet > GenJetCollection
collection of GenJet objects
std::vector< Track > TrackCollection
collection of Tracks
std::vector< T >::const_iterator const_iterator
std::map< std::pair< unsigned int, std::string >, int > l1AlgoMap_
double py() const
y coordinate of momentum vector
double chargeIsolationCone(unsigned int trkIndex, std::vector< spr::propagatedTrackDirection > &trkDirs, double dR, int &nNearTRKs, bool debug=false)
std::vector< Vertex > VertexCollection
edm::EDGetTokenT< l1extra::L1JetParticleCollection > tok_L1extTauJet_
edm::EDGetTokenT< HBHERecHitCollection > tok_hbhe_
const std::string theTrackQuality_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > tok_magField_
T getUntrackedParameter(std::string const &, T const &) const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
double pt() const
track transverse momentum
std::vector< double > pbin
static const bool useL1GtTriggerMenuLite(true)
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > tok_geom_
edm::Service< TFileService > fs_
double deltaR(double eta1, double eta2, double phi1, double phi2)
bool goodTrack(const reco::Track *pTrack, math::XYZPoint leadPV, trackSelectionParameters parameters, bool debug=false)
const bool availableL1Configuration(int &errorCode, int &l1ConfCode) const
std::vector< bool > * t_l1bits
std::vector< double > vec1
constexpr int ieta() const
get the cell ieta
edm::EDGetTokenT< EcalRecHitCollection > tok_EB_
Jets made from MC generator particles.
const edm::EDGetTokenT< reco::VertexCollection > tok_recVtx_
double phi() const
azimuthal angle of momentum vector
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)
bool getData(T &iHolder) const
~IsoTrackCalib() override
edm::EDGetTokenT< l1extra::L1JetParticleCollection > tok_L1extFwdJet_
const edm::EDGetTokenT< reco::GenJetCollection > tok_jets_
double eta() const
pseudorapidity of momentum vector
double dEta(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
static TrackQuality qualityByName(const std::string &name)
XYZPointD XYZPoint
point in space with cartesian internal representation
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
double pz() const
z coordinate of momentum vector
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const bool decision(const edm::Event &iEvent, const std::string &nameAlgoTechTrig, int &errorCode) const
std::vector< PFJet > PFJetCollection
collection of PFJet objects
void getL1GtRunCache(const edm::Run &, const edm::EventSetup &, const bool, const bool)
get all the run-constant quantities for L1 trigger and cache them
reco::TrackBase::TrackQuality minQuality
void endRun(edm::Run const &, edm::EventSetup const &) override
T * make(const Args &...args) const
make new ROOT object
void analyze(const edm::Event &, const edm::EventSetup &) override
double dR(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
double dPhi(math::XYZTLorentzVector &, math::XYZTLorentzVector &)
const edm::EDGetTokenT< reco::PFJetCollection > tok_pfjets_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const L1GtTriggerMenu * ptrL1TriggerMenuEventSetup(int &errorCode)
return a pointer to the L1 trigger menu from event setup
const std::vector< std::string > l1Names_
static const bool useL1EventSetup(true)
IsoTrackCalib(const edm::ParameterSet &)
double eta() const final
momentum pseudorapidity