From 11b2081919ed99df6b1712aed51074b0b68acd17 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 13 Jan 2015 06:02:55 +0100 Subject: [PATCH 01/55] dublication of DataFormats/L1TrackTrigger has been commented --- SLHCUpgradeSimulations/L1TrackTrigger/test/BuildFile.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/test/BuildFile.xml b/SLHCUpgradeSimulations/L1TrackTrigger/test/BuildFile.xml index 70e1f0d1a5bd6..a5bf9e2cbf3ae 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/test/BuildFile.xml +++ b/SLHCUpgradeSimulations/L1TrackTrigger/test/BuildFile.xml @@ -12,7 +12,9 @@ + From e591118b81c98795f73f737f7c8c3f687e5efe66 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 13 Jan 2015 06:08:14 +0100 Subject: [PATCH 02/55] start using a simple structure L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 131 ++++++++++++------ 1 file changed, 89 insertions(+), 42 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 39a63c76185f3..16c6b8a20f147 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -11,7 +11,6 @@ // for L1Tracks: #include "SimDataFormats/SLHC/interface/StackedTrackerTypes.h" - #include "DataFormats/HepMCCandidate/interface/GenParticle.h" // user include files @@ -38,8 +37,11 @@ #include #include +#include +#include +#include -using namespace l1extra ; +using namespace l1extra; // // class declaration @@ -72,6 +74,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: + virtual void produce(edm::Event&, const edm::EventSetup&); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -91,32 +94,46 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { bool correctGMTPropForTkZ_; bool use5ParameterFit_; -} ; - - +}; + + typedef struct { + Float_t eta; + Float_t phi; + Float_t pt; + Float_t feta; + Float_t bx; + unsigned int quality; + Float_t sigmaEta; + Float_t sigmaPhi; + std::string gmtMuonCand; + std::string dtCand; + std::string cscCand; + std::string rpcCand; + } L1TkMuonCand; + // -// constructors and destructor +// constructors and destructor // L1TkMuonFromExtendedProducer::L1TkMuonFromExtendedProducer(const edm::ParameterSet& iConfig) { + edm::LogWarning("L1TkMuonFromExtendedProducer") << " L1TkMuonFromExtendedProducer "; + L1MuonsInputTag_ = iConfig.getParameter("L1MuonsInputTag"); + L1TrackInputTag_ = iConfig.getParameter("L1TrackInputTag"); - L1MuonsInputTag_ = iConfig.getParameter("L1MuonsInputTag"); - L1TrackInputTag_ = iConfig.getParameter("L1TrackInputTag"); - - ETAMIN_ = (float)iConfig.getParameter("ETAMIN"); - ETAMAX_ = (float)iConfig.getParameter("ETAMAX"); - ZMAX_ = (float)iConfig.getParameter("ZMAX"); - CHI2MAX_ = (float)iConfig.getParameter("CHI2MAX"); - PTMINTRA_ = (float)iConfig.getParameter("PTMINTRA"); - // DRmax_ = (float)iConfig.getParameter("DRmax"); - nStubsmin_ = iConfig.getParameter("nStubsmin"); - // closest_ = iConfig.getParameter("closest"); + ETAMIN_ = (float)iConfig.getParameter("ETAMIN"); + ETAMAX_ = (float)iConfig.getParameter("ETAMAX"); + ZMAX_ = (float)iConfig.getParameter("ZMAX"); + CHI2MAX_ = (float)iConfig.getParameter("CHI2MAX"); + PTMINTRA_ = (float)iConfig.getParameter("PTMINTRA"); + // DRmax_ = (float)iConfig.getParameter("DRmax"); + nStubsmin_ = iConfig.getParameter("nStubsmin"); + // closest_ = iConfig.getParameter("closest"); - correctGMTPropForTkZ_ = iConfig.getParameter("correctGMTPropForTkZ"); + correctGMTPropForTkZ_ = iConfig.getParameter("correctGMTPropForTkZ"); - use5ParameterFit_ = iConfig.getParameter("use5ParameterFit"); - produces(); + use5ParameterFit_ = iConfig.getParameter("use5ParameterFit"); + produces(); } L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { @@ -126,10 +143,14 @@ L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { void L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + L1TkMuonCand MuCn[10]; + // std::vector pnMuCn[10]; + using namespace edm; using namespace std; - + edm::LogWarning("L1TkMuonFromExtendedProducer") << "::produce"; + std::auto_ptr tkMuons(new L1TkMuonParticleCollection); edm::Handle l1musH; @@ -140,25 +161,52 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); + cout << " l1mus.size= " << l1mus.size() << " sizeof(l1mus)= " << sizeof(l1mus) + << " l1tks.size= " << l1tks.size() << " sizeof(l1tks)= " << sizeof(l1tks) + << endl; + L1TkMuonParticleCollection l1tkmuCands; l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed int imu = -1; + for (auto l1mu : l1mus){ + imu++; + + /* + cout << l1mu.gmtMuonCand() << endl; + */ + + MuCn[imu].eta = l1mu.eta(); + MuCn[imu].eta = l1mu.eta(); + MuCn[imu].phi = l1mu.phi(); + MuCn[imu].pt = l1mu.pt(); + MuCn[imu].bx = l1mu.bx(); + MuCn[imu].quality = l1mu.quality(); + MuCn[imu].sigmaEta = l1mu.sigmaEta(); + MuCn[imu].sigmaPhi = l1mu.sigmaPhi(); + MuCn[imu].feta = fabs( l1mu.eta()); + + cout << " imu= " << imu + << " eta= " << MuCn[imu].eta + << " phi= " << MuCn[imu].phi + << " bx= " << MuCn[imu].bx + << " quality= " << MuCn[imu].quality + << " sigmaEta= " << MuCn[imu].sigmaEta + << " sigmaPhi= " << MuCn[imu].sigmaPhi + << endl; + + }//over l1mus + + imu = -1; for (auto l1mu : l1mus){ imu++; L1MuonParticleExtendedRef l1muRef(l1musH, imu); - float l1mu_eta = l1mu.eta(); - float l1mu_phi = l1mu.phi(); - - float l1mu_feta = fabs( l1mu_eta ); - if (l1mu_feta < ETAMIN_) continue; - if (l1mu_feta > ETAMAX_) continue; + if (MuCn[imu].feta < ETAMIN_) continue; + if (MuCn[imu].feta > ETAMAX_) continue; // can skip quality cuts at the moment, keep bx=0 req - if (l1mu.bx() != 0) continue; - - unsigned int l1mu_quality = l1mu.quality(); + if (MuCn[imu].bx != 0) continue; const auto& gmtCand = l1mu.gmtMuonCand(); if (!gmtCand.empty()){ @@ -190,7 +238,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& int match_idx = -1; int il1tk = -1; - LogDebug("MDEBUG")<<"have a gmt, look for a match "; + LogInfo("MDEBUG")<<"have a gmt, look for a match "; for (auto l1tk : l1tks ){ il1tk++; @@ -212,14 +260,14 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& float l1tk_phi = l1tk.getMomentum(nPars).phi(); - float dr2 = deltaR2(l1mu_eta, l1mu_phi, l1tk_eta, l1tk_phi); + float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, l1tk_eta, l1tk_phi); if (dr2 > 0.3) continue; PropState pstate = propagateToGMT(l1tk); if (!pstate.valid) continue; - float dr2prop = deltaR2(l1mu_eta, l1mu_phi, pstate.eta, pstate.phi); + float dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); if (dr2prop < drmin){ drmin = dr2prop; @@ -232,14 +280,15 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& if (match_idx >= 0){ const L1TkTrackType& matchTk = l1tks[match_idx]; - float etaCut = 3.*sqrt(l1mu.sigmaEta()*l1mu.sigmaEta() + matchProp.sigmaEta*matchProp.sigmaEta); - float phiCut = 4.*sqrt(l1mu.sigmaPhi()*l1mu.sigmaPhi() + matchProp.sigmaPhi*matchProp.sigmaPhi); + float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + matchProp.sigmaEta*matchProp.sigmaEta); + float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + matchProp.sigmaPhi*matchProp.sigmaPhi); - float dEta = std::abs(matchProp.eta - l1mu.eta()); - float dPhi = std::abs(deltaPhi(matchProp.phi, l1mu.phi())); + float dEta = std::abs(matchProp.eta - MuCn[imu].eta); + float dPhi = std::abs(deltaPhi(matchProp.phi, MuCn[imu].phi)); LogDebug("MYDEBUG")<<"match details: prop "< l1tkPtr(l1tksH, match_idx); @@ -258,7 +307,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& L1TkMuonParticle l1tkmu(reco::LeafCandidate(l1tk_q, l1tkp4, v3, -13*l1tk_q )); l1tkmu.setTrkPtr(l1tkPtr); l1tkmu.setMuExtendedRef(l1muRef); - l1tkmu.setQuality(l1mu_quality); + l1tkmu.setQuality(MuCn[imu].quality); l1tkmu.setTrkIsol(trkisol); // EP: add the zvtx information @@ -288,6 +337,7 @@ L1TkMuonFromExtendedProducer::fillDescriptions(edm::ConfigurationDescriptions& d L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateToGMT(const L1TkMuonFromExtendedProducer::L1TkTrackType& tk) const { + auto p3 = tk.getMomentum(); float tk_pt = p3.perp(); float tk_p = p3.mag(); @@ -338,6 +388,3 @@ L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateT //define this as a plug-in DEFINE_FWK_MODULE(L1TkMuonFromExtendedProducer); - - - From e35ddbff9b816426b1cacc70f0f407b945ae76f9 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 14 Jan 2015 17:06:06 +0100 Subject: [PATCH 03/55] update struct L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 16c6b8a20f147..7eaef93b801c2 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -4,11 +4,9 @@ // match the two and produce a collection of L1TkMuonParticle // eventually, this should be made modular and allow to swap out different algorithms - #include "DataFormats/L1TrackTrigger/interface/L1TkMuonParticle.h" #include "DataFormats/L1TrackTrigger/interface/L1TkMuonParticleFwd.h" - // for L1Tracks: #include "SimDataFormats/SLHC/interface/StackedTrackerTypes.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" @@ -96,20 +94,20 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { bool use5ParameterFit_; }; - typedef struct { - Float_t eta; - Float_t phi; - Float_t pt; - Float_t feta; - Float_t bx; + struct L1TkMuonCand { + float eta; + float phi; + float pt; + float feta; + float bx; unsigned int quality; - Float_t sigmaEta; - Float_t sigmaPhi; - std::string gmtMuonCand; - std::string dtCand; - std::string cscCand; - std::string rpcCand; - } L1TkMuonCand; + float sigmaEta; + float sigmaPhi; + bool gmtMuonCand; + bool dtCand; + bool cscCand; + bool rpcCand; + }; // // constructors and destructor @@ -172,9 +170,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& for (auto l1mu : l1mus){ imu++; - /* - cout << l1mu.gmtMuonCand() << endl; - */ + cout << "\n l1mu.gmtMuonCand()" << l1mu.gmtMuonCand() << endl; MuCn[imu].eta = l1mu.eta(); MuCn[imu].eta = l1mu.eta(); @@ -230,6 +226,11 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& //apply something specific here } + cout << "\n gmtCand.empty() " << gmtCand.empty() + << " dtCand.empty() " << dtCand.empty() + << " cscCand.empty() " << cscCand.empty() + << " rpcCand.empty() " << rpcCand.empty() << endl; + float drmin = 999; float ptmax = -1; if (ptmax < 0) ptmax = -1; // dummy From 6a9fc3454f26e33eddf5c7e68720759b0c161617 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 14 Jan 2015 17:24:35 +0100 Subject: [PATCH 04/55] update struct L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 7eaef93b801c2..7224fdcceec50 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -170,7 +170,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& for (auto l1mu : l1mus){ imu++; - cout << "\n l1mu.gmtMuonCand()" << l1mu.gmtMuonCand() << endl; + // cout << "\n l1mu.gmtMuonCand()" << l1mu.gmtMuonCand() << endl; MuCn[imu].eta = l1mu.eta(); MuCn[imu].eta = l1mu.eta(); @@ -182,6 +182,16 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& MuCn[imu].sigmaPhi = l1mu.sigmaPhi(); MuCn[imu].feta = fabs( l1mu.eta()); + const auto& gmtCand = l1mu.gmtMuonCand(); + const auto& dtCand = l1mu.dtCand(); + const auto& cscCand = l1mu.cscCand(); + const auto& rpcCand = l1mu.rpcCand(); + + MuCn[imu].gmtMuonCand = gmtCand.empty(); + MuCn[imu].dtCand = dtCand.empty(); + MuCn[imu].cscCand = cscCand.empty(); + MuCn[imu].rpcCand = rpcCand.empty(); + cout << " imu= " << imu << " eta= " << MuCn[imu].eta << " phi= " << MuCn[imu].phi @@ -204,32 +214,28 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& // can skip quality cuts at the moment, keep bx=0 req if (MuCn[imu].bx != 0) continue; - const auto& gmtCand = l1mu.gmtMuonCand(); - if (!gmtCand.empty()){ + if (!MuCn[imu].gmtCand){ //some selections here //currently the input can be a merge from different track finders //so, the GMT cand may be missing } - const auto& dtCand = l1mu.dtCand(); - if (!dtCand.empty()){ + if (!MuCn[imu].dtCand){ // something can be called from here } - const auto& cscCand = l1mu.cscCand(); - if (!cscCand.empty()){ + if (!MuCn[imu].cscCand){ //apply something specific here } - const auto& rpcCand = l1mu.rpcCand(); - if (!rpcCand.empty()){ + if (!MuCn[imu].rpcCand){ //apply something specific here } - cout << "\n gmtCand.empty() " << gmtCand.empty() - << " dtCand.empty() " << dtCand.empty() - << " cscCand.empty() " << cscCand.empty() - << " rpcCand.empty() " << rpcCand.empty() << endl; + cout << "\n gmtCand.empty() " << MuCn[imu].gmtCand + << " dtCand.empty() " << MuCn[imu].dtCand + << " cscCand.empty() " << MuCn[imu].cscCand + << " rpcCand.empty() " << MuCn[imu].rpcCand << endl; float drmin = 999; float ptmax = -1; From c5493745590b871e17dc08619abb7a6de465e589 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 14 Jan 2015 17:33:07 +0100 Subject: [PATCH 05/55] update struct L1TkMuonCand --- .../L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 7224fdcceec50..3ca7732364b6a 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -103,7 +103,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { unsigned int quality; float sigmaEta; float sigmaPhi; - bool gmtMuonCand; + bool gmtCand; bool dtCand; bool cscCand; bool rpcCand; @@ -187,7 +187,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& const auto& cscCand = l1mu.cscCand(); const auto& rpcCand = l1mu.rpcCand(); - MuCn[imu].gmtMuonCand = gmtCand.empty(); + MuCn[imu].gmtCand = gmtCand.empty(); MuCn[imu].dtCand = dtCand.empty(); MuCn[imu].cscCand = cscCand.empty(); MuCn[imu].rpcCand = rpcCand.empty(); From b34b3e644750dfd1490b0597d602f366031679c8 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 14 Jan 2015 17:36:35 +0100 Subject: [PATCH 06/55] update struct L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 3ca7732364b6a..7669ac990d11b 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -199,6 +199,10 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& << " quality= " << MuCn[imu].quality << " sigmaEta= " << MuCn[imu].sigmaEta << " sigmaPhi= " << MuCn[imu].sigmaPhi + << " gmtCand " << MuCn[imu].gmtCand + << " dtCand " << MuCn[imu].dtCand + << " cscCand " << MuCn[imu].cscCand + << " rpcCand " << MuCn[imu].rpcCand << endl; }//over l1mus @@ -232,11 +236,6 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& //apply something specific here } - cout << "\n gmtCand.empty() " << MuCn[imu].gmtCand - << " dtCand.empty() " << MuCn[imu].dtCand - << " cscCand.empty() " << MuCn[imu].cscCand - << " rpcCand.empty() " << MuCn[imu].rpcCand << endl; - float drmin = 999; float ptmax = -1; if (ptmax < 0) ptmax = -1; // dummy From fdfd3f8db173de58de8ff3af9fde104cdec53d59 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 21 Jan 2015 12:46:08 +0100 Subject: [PATCH 07/55] update loop for muons --- .../plugins/L1TkMuonFromExtendedProducer.cc | 91 +++++++++---------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 7669ac990d11b..c17a14a2e37e2 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -109,13 +109,14 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { bool rpcCand; }; +// maximum Muons number +const int MuonsMax = 10; + // // constructors and destructor // L1TkMuonFromExtendedProducer::L1TkMuonFromExtendedProducer(const edm::ParameterSet& iConfig) { - edm::LogWarning("L1TkMuonFromExtendedProducer") << " L1TkMuonFromExtendedProducer "; - L1MuonsInputTag_ = iConfig.getParameter("L1MuonsInputTag"); L1TrackInputTag_ = iConfig.getParameter("L1TrackInputTag"); @@ -141,14 +142,12 @@ L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { void L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - L1TkMuonCand MuCn[10]; + L1TkMuonCand MuCn[MuonsMax]; // std::vector pnMuCn[10]; using namespace edm; using namespace std; - edm::LogWarning("L1TkMuonFromExtendedProducer") << "::produce"; - std::auto_ptr tkMuons(new L1TkMuonParticleCollection); edm::Handle l1musH; @@ -159,57 +158,58 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - cout << " l1mus.size= " << l1mus.size() << " sizeof(l1mus)= " << sizeof(l1mus) - << " l1tks.size= " << l1tks.size() << " sizeof(l1tks)= " << sizeof(l1tks) - << endl; + edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); L1TkMuonParticleCollection l1tkmuCands; l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed int imu = -1; + int MuonNum = -1; for (auto l1mu : l1mus){ imu++; - // cout << "\n l1mu.gmtMuonCand()" << l1mu.gmtMuonCand() << endl; - - MuCn[imu].eta = l1mu.eta(); - MuCn[imu].eta = l1mu.eta(); - MuCn[imu].phi = l1mu.phi(); - MuCn[imu].pt = l1mu.pt(); - MuCn[imu].bx = l1mu.bx(); - MuCn[imu].quality = l1mu.quality(); - MuCn[imu].sigmaEta = l1mu.sigmaEta(); - MuCn[imu].sigmaPhi = l1mu.sigmaPhi(); - MuCn[imu].feta = fabs( l1mu.eta()); - - const auto& gmtCand = l1mu.gmtMuonCand(); - const auto& dtCand = l1mu.dtCand(); - const auto& cscCand = l1mu.cscCand(); - const auto& rpcCand = l1mu.rpcCand(); - - MuCn[imu].gmtCand = gmtCand.empty(); - MuCn[imu].dtCand = dtCand.empty(); - MuCn[imu].cscCand = cscCand.empty(); - MuCn[imu].rpcCand = rpcCand.empty(); - - cout << " imu= " << imu - << " eta= " << MuCn[imu].eta - << " phi= " << MuCn[imu].phi - << " bx= " << MuCn[imu].bx - << " quality= " << MuCn[imu].quality - << " sigmaEta= " << MuCn[imu].sigmaEta - << " sigmaPhi= " << MuCn[imu].sigmaPhi - << " gmtCand " << MuCn[imu].gmtCand - << " dtCand " << MuCn[imu].dtCand - << " cscCand " << MuCn[imu].cscCand - << " rpcCand " << MuCn[imu].rpcCand - << endl; + if( imu Date: Wed, 21 Jan 2015 17:12:25 +0100 Subject: [PATCH 08/55] add structure for L1TkCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 127 +++++++++++++++--- 1 file changed, 105 insertions(+), 22 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index c17a14a2e37e2..993956b2b9c2c 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -94,24 +94,39 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { bool use5ParameterFit_; }; - struct L1TkMuonCand { - float eta; - float phi; - float pt; - float feta; - float bx; - unsigned int quality; - float sigmaEta; - float sigmaPhi; - bool gmtCand; - bool dtCand; - bool cscCand; - bool rpcCand; - }; - +struct L1TkMuonCand { + float eta; + float phi; + float pt; + float feta; + float bx; + float sigmaEta; + float sigmaPhi; + unsigned int quality; + bool gmtCand; + bool dtCand; + bool cscCand; + bool rpcCand; +}; + // maximum Muons number const int MuonsMax = 10; +struct L1TkCand { + float pt; + float z; + float chi2; + float eta; + float phi; + float dr2[MuonsMax]; + float dr2prop[MuonsMax]; + int nstubs; + int idx; +}; + +// maximum Tracks number +const int TrackMax = 300; + // // constructors and destructor // @@ -143,6 +158,8 @@ void L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { L1TkMuonCand MuCn[MuonsMax]; + L1TkCand L1Tk[TrackMax]; + // std::vector pnMuCn[10]; using namespace edm; @@ -158,18 +175,20 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); + edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size(); L1TkMuonParticleCollection l1tkmuCands; l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed + // MuCn filling + int imu = -1; int MuonNum = -1; for (auto l1mu : l1mus){ imu++; if( imu Date: Thu, 22 Jan 2015 12:01:53 +0100 Subject: [PATCH 09/55] add structure for L1TkCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 129 ++++++------------ 1 file changed, 43 insertions(+), 86 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 993956b2b9c2c..fe7480f30eab0 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -118,10 +118,13 @@ struct L1TkCand { float chi2; float eta; float phi; - float dr2[MuonsMax]; - float dr2prop[MuonsMax]; int nstubs; int idx; + float matchPt; + float matchEta; + float matchPhi; + float matchSigmaEta; + float matchSigmaPhi; }; // maximum Tracks number @@ -158,7 +161,7 @@ void L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { L1TkMuonCand MuCn[MuonsMax]; - L1TkCand L1Tk[TrackMax]; + L1TkCand L1Tk[MuonsMax]; // std::vector pnMuCn[10]; @@ -175,7 +178,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size(); + edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); L1TkMuonParticleCollection l1tkmuCands; l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed @@ -228,49 +231,50 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& cout << " f: imu " << imu << endl; // trCn filling - edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1tks.size= " << l1tks.size(); + PropState matchProp; float drmin = 999; int TrackNume = -1; int il1tk = -1; for (auto l1tk : l1tks ){ il1tk++; - if( il1tk ZMAX_) continue; + L1Tk[imu].z = l1tk.getPOCA(nPars).z(); + if (fabs(L1Tk[imu].z) > ZMAX_) continue; - L1Tk[il1tk].chi2 = l1tk.getChi2(nPars); - if (L1Tk[il1tk].chi2 > CHI2MAX_) continue; + L1Tk[imu].chi2 = l1tk.getChi2(nPars); + if (L1Tk[imu].chi2 > CHI2MAX_) continue; - L1Tk[il1tk].nstubs = l1tk.getStubRefs().size(); - if ( L1Tk[il1tk].nstubs < nStubsmin_) continue; + L1Tk[imu].nstubs = l1tk.getStubRefs().size(); + if ( L1Tk[imu].nstubs < nStubsmin_) continue; - L1Tk[il1tk].eta = l1tk.getMomentum(nPars).eta(); - L1Tk[il1tk].phi = l1tk.getMomentum(nPars).phi(); + L1Tk[imu].eta = l1tk.getMomentum(nPars).eta(); + L1Tk[imu].phi = l1tk.getMomentum(nPars).phi(); - L1Tk[il1tk].dr2[imu] = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[il1tk].eta, L1Tk[il1tk].phi); - if (L1Tk[il1tk].dr2[imu] > 0.3) continue; + float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[imu].eta, L1Tk[imu].phi); + if (dr2 > 0.3) continue; PropState pstate = propagateToGMT(l1tk); if (!pstate.valid) continue; - L1Tk[il1tk].dr2prop[imu] = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); - - cout << " f: tk " << il1tk << " " << L1Tk[il1tk].dr2prop[imu] << " " - << deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi) - << endl; - - if (L1Tk[il1tk].dr2prop[imu] < drmin){ - drmin = L1Tk[il1tk].dr2prop[imu]; - L1Tk[il1tk].idx = il1tk; - // matchProp = pstate; + float dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); + + if (dr2prop < drmin){ + drmin = dr2prop; + L1Tk[imu].idx = il1tk; + L1Tk[imu].matchPt = pstate.pt; + L1Tk[imu].matchEta = pstate.eta; + L1Tk[imu].matchPhi = pstate.phi; + L1Tk[imu].matchSigmaEta = pstate.sigmaEta; + L1Tk[imu].matchSigmaPhi = pstate.sigmaPhi; + cout << " f: il1tk " << il1tk << " drmin " << drmin << endl; } TrackNume = il1tk + 1; @@ -281,7 +285,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& } }//over l1tks - cout << " f: TrackNume " << TrackNume << endl; + cout << " f: TrackNume " << TrackNume << " drmin " << drmin << endl; }//over l1mus @@ -315,71 +319,24 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& //apply something specific here } - float drmin = 999; - float ptmax = -1; - if (ptmax < 0) ptmax = -1; // dummy - - PropState matchProp; - int match_idx = -1; - int il1tk = -1; - cout << " imu " << imu << endl; - edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1tks.size= " << l1tks.size(); - - for (auto l1tk : l1tks ){ - il1tk++; - /* - unsigned int nPars = 4; - if (use5ParameterFit_) nPars = 5; - float l1tk_pt = l1tk.getMomentum(nPars).perp(); - if (l1tk_pt < PTMINTRA_) continue; - float l1tk_z = l1tk.getPOCA(nPars).z(); - if (fabs(l1tk_z) > ZMAX_) continue; - - float l1tk_chi2 = l1tk.getChi2(nPars); - if (l1tk_chi2 > CHI2MAX_) continue; - - int l1tk_nstubs = l1tk.getStubRefs().size(); - if ( l1tk_nstubs < nStubsmin_) continue; - - float l1tk_eta = l1tk.getMomentum(nPars).eta(); - float l1tk_phi = l1tk.getMomentum(nPars).phi(); - - float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, l1tk_eta, l1tk_phi); - - if (dr2 > 0.3) continue; - */ - - PropState pstate = propagateToGMT(l1tk); - if (!pstate.valid) continue; - - float dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); - - cout << " il1tk " << il1tk << " " << L1Tk[il1tk].dr2prop[imu] << " " << dr2prop << endl; - - if (dr2prop < drmin){ - drmin = dr2prop; - match_idx = il1tk; - matchProp = pstate; - } - }// over l1tks - LogDebug("MYDEBUG")<<"matching index is "<= 0){ - const L1TkTrackType& matchTk = l1tks[match_idx]; + if (L1Tk[imu].idx >= 0){ + const L1TkTrackType& matchTk = l1tks[L1Tk[imu].idx]; - float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + matchProp.sigmaEta*matchProp.sigmaEta); - float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + matchProp.sigmaPhi*matchProp.sigmaPhi); + float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[imu].matchSigmaEta*L1Tk[imu].matchSigmaEta); + float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[imu].matchSigmaPhi*L1Tk[imu].matchSigmaPhi); - float dEta = std::abs(matchProp.eta - MuCn[imu].eta); - float dPhi = std::abs(deltaPhi(matchProp.phi, MuCn[imu].phi)); + float dEta = std::abs(L1Tk[imu].matchEta - MuCn[imu].eta); + float dPhi = std::abs(deltaPhi(L1Tk[imu].matchPhi, MuCn[imu].phi)); - LogDebug("MYDEBUG")<<"match details: prop "< l1tkPtr(l1tksH, match_idx); + Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1Tk[imu].idx); unsigned int nPars = 4; if (use5ParameterFit_) nPars = 5; From 2d78d4948378a6f04f130583cc8e27b758f54b99 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Thu, 22 Jan 2015 12:11:06 +0100 Subject: [PATCH 10/55] add structure for L1TkCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index fe7480f30eab0..5e95af13fc1e9 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -178,7 +178,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - edm::LogWarning("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); + LogDebug("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); L1TkMuonParticleCollection l1tkmuCands; l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed @@ -228,8 +228,6 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Muon number too small " << imu; }; - cout << " f: imu " << imu << endl; - // trCn filling PropState matchProp; @@ -274,22 +272,16 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& L1Tk[imu].matchPhi = pstate.phi; L1Tk[imu].matchSigmaEta = pstate.sigmaEta; L1Tk[imu].matchSigmaPhi = pstate.sigmaPhi; - cout << " f: il1tk " << il1tk << " drmin " << drmin << endl; } - TrackNume = il1tk + 1; - } else { LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Tracks number too small " << TrackNume; } }//over l1tks - - cout << " f: TrackNume " << TrackNume << " drmin " << drmin << endl; - }//over l1mus - // **** Calculation + // **** Calculation for Muons **** for (int imu=0; imu= 0){ const L1TkTrackType& matchTk = l1tks[L1Tk[imu].idx]; @@ -331,9 +321,10 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& float dEta = std::abs(L1Tk[imu].matchEta - MuCn[imu].eta); float dPhi = std::abs(deltaPhi(L1Tk[imu].matchPhi, MuCn[imu].phi)); - cout << " match details: prop "< l1tkPtr(l1tksH, L1Tk[imu].idx); From 163c320296d32ffe630769fa71067d2b3946d558 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Thu, 22 Jan 2015 12:36:55 +0100 Subject: [PATCH 11/55] add structure for L1TkCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 5e95af13fc1e9..ba6ee432df9bf 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -114,6 +114,8 @@ const int MuonsMax = 10; struct L1TkCand { float pt; + int nPars; + int q; float z; float chi2; float eta; @@ -148,7 +150,6 @@ L1TkMuonFromExtendedProducer::L1TkMuonFromExtendedProducer(const edm::ParameterS // closest_ = iConfig.getParameter("closest"); correctGMTPropForTkZ_ = iConfig.getParameter("correctGMTPropForTkZ"); - use5ParameterFit_ = iConfig.getParameter("use5ParameterFit"); produces(); } @@ -241,6 +242,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& unsigned int nPars = 4; if (use5ParameterFit_) nPars = 5; + L1Tk[imu].nPars = nPars; L1Tk[imu].pt = l1tk.getMomentum(nPars).perp(); if (L1Tk[imu].pt < PTMINTRA_) continue; @@ -313,8 +315,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& LogDebug("MYDEBUG")<<"matching index is "<= 0){ - const L1TkTrackType& matchTk = l1tks[L1Tk[imu].idx]; - + float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[imu].matchSigmaEta*L1Tk[imu].matchSigmaEta); float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[imu].matchSigmaPhi*L1Tk[imu].matchSigmaPhi); @@ -325,32 +326,35 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& << " match details: prop Pt "< l1tkPtr(l1tksH, L1Tk[imu].idx); - unsigned int nPars = 4; - if (use5ParameterFit_) nPars = 5; - auto p3 = matchTk.getMomentum(nPars); - float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); + // Filter for Cuts + if (dEta < etaCut && dPhi < phiCut){ + + Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1Tk[imu].idx); + const L1TkTrackType& matchTk = l1tks[L1Tk[imu].idx]; + + auto p3 = matchTk.getMomentum(L1Tk[imu].nPars); + float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); + + math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); + + auto tkv3=matchTk.getPOCA(L1Tk[imu].nPars); + math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); + float trkisol = -999; - math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); + L1Tk[imu].q = matchTk.getRInv(L1Tk[imu].nPars)>0? 1: -1; - auto tkv3=matchTk.getPOCA(nPars); - math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); - float trkisol = -999; - int l1tk_q = matchTk.getRInv(nPars)>0? 1: -1; + L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1Tk[imu].q, l1tkp4, v3, -13*L1Tk[imu].q )); - L1TkMuonParticle l1tkmu(reco::LeafCandidate(l1tk_q, l1tkp4, v3, -13*l1tk_q )); - l1tkmu.setTrkPtr(l1tkPtr); - l1tkmu.setMuExtendedRef(l1muRef); - l1tkmu.setQuality(MuCn[imu].quality); - l1tkmu.setTrkIsol(trkisol); + l1tkmu.setTrkPtr(l1tkPtr); + l1tkmu.setMuExtendedRef(l1muRef); + l1tkmu.setQuality(MuCn[imu].quality); + l1tkmu.setTrkIsol(trkisol); - // EP: add the zvtx information - l1tkmu.setTrkzVtx( (float)tkv3.z() ); + // EP: add the zvtx information + l1tkmu.setTrkzVtx( (float)tkv3.z() ); - tkMuons->push_back(l1tkmu); + tkMuons->push_back(l1tkmu); } } From d4eefb0b70a9724f40ca3bdb63b33c50ecf38339 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Thu, 22 Jan 2015 14:59:38 +0100 Subject: [PATCH 12/55] add structure for L1TkCand --- .../L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index ba6ee432df9bf..2b8dd4798f76c 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -340,7 +340,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& auto tkv3=matchTk.getPOCA(L1Tk[imu].nPars); math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); - float trkisol = -999; + L1Tk[imu].q = matchTk.getRInv(L1Tk[imu].nPars)>0? 1: -1; @@ -349,6 +349,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& l1tkmu.setTrkPtr(l1tkPtr); l1tkmu.setMuExtendedRef(l1muRef); l1tkmu.setQuality(MuCn[imu].quality); + float trkisol = -999; l1tkmu.setTrkIsol(trkisol); // EP: add the zvtx information From 8b6bf415a9e7892d45240d169d9ed837f8101c63 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 26 Jan 2015 14:17:49 +0100 Subject: [PATCH 13/55] update two names L1MuonCand and L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 2b8dd4798f76c..e593c4818844b 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -94,7 +94,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { bool use5ParameterFit_; }; -struct L1TkMuonCand { +struct L1MuonCand { float eta; float phi; float pt; @@ -103,6 +103,7 @@ struct L1TkMuonCand { float sigmaEta; float sigmaPhi; unsigned int quality; + int idx; bool gmtCand; bool dtCand; bool cscCand; @@ -110,9 +111,9 @@ struct L1TkMuonCand { }; // maximum Muons number -const int MuonsMax = 10; +const int MuonsMax = 20; -struct L1TkCand { +struct L1TkMuonCand { float pt; int nPars; int q; @@ -161,10 +162,8 @@ L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { void L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - L1TkMuonCand MuCn[MuonsMax]; - L1TkCand L1Tk[MuonsMax]; - - // std::vector pnMuCn[10]; + L1MuonCand MuCn[MuonsMax]; + L1TkMuonCand L1Tk[MuonsMax]; using namespace edm; using namespace std; From d62e81040bc589562792e1542127f2b1af51ee45 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 27 Jan 2015 11:06:58 +0100 Subject: [PATCH 14/55] update two names L1MuonCand and L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 431 +----------------- 1 file changed, 1 insertion(+), 430 deletions(-) mode change 100644 => 120000 SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc deleted file mode 100644 index e593c4818844b..0000000000000 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ /dev/null @@ -1,430 +0,0 @@ -// -*- C++ -*- -// -// input: L1 TkTracks and L1MuonParticleExtended (standalone with component details) -// match the two and produce a collection of L1TkMuonParticle -// eventually, this should be made modular and allow to swap out different algorithms - -#include "DataFormats/L1TrackTrigger/interface/L1TkMuonParticle.h" -#include "DataFormats/L1TrackTrigger/interface/L1TkMuonParticleFwd.h" - -// for L1Tracks: -#include "SimDataFormats/SLHC/interface/StackedTrackerTypes.h" -#include "DataFormats/HepMCCandidate/interface/GenParticle.h" - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "DataFormats/Common/interface/Handle.h" -#include "FWCore/Utilities/interface/InputTag.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Math/interface/LorentzVector.h" -#include "DataFormats/Math/interface/deltaR.h" -#include "DataFormats/Math/interface/deltaPhi.h" - -#include "TMath.h" - -// system include files -#include -#include - -#include -#include -#include - -using namespace l1extra; - -// -// class declaration -// - -class L1TkMuonFromExtendedProducer : public edm::EDProducer { -public: - - typedef TTTrack< Ref_PixelDigi_ > L1TkTrackType; - typedef std::vector< L1TkTrackType > L1TkTrackCollectionType; - - struct PropState { //something simple, imagine it's hardware emulation - PropState() : - pt(-99), eta(-99), phi(-99), - sigmaPt(-99), sigmaEta(-99), sigmaPhi(-99), - valid(false) {} - float pt; - float eta; - float phi; - float sigmaPt; - float sigmaEta; - float sigmaPhi; - bool valid; - - }; - - explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); - ~L1TkMuonFromExtendedProducer(); - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - -private: - - virtual void produce(edm::Event&, const edm::EventSetup&); - - PropState propagateToGMT(const L1TkTrackType& l1tk) const; - - //configuration (preserving structure of L1TkMuonFromExtendedProducer - edm::InputTag L1MuonsInputTag_; - edm::InputTag L1TrackInputTag_; - - float ETAMIN_; - float ETAMAX_; - float ZMAX_; // |z_track| < ZMAX in cm - float CHI2MAX_; - float PTMINTRA_; - // float DRmax_; - int nStubsmin_ ; // minimum number of stubs - // bool closest_ ; - bool correctGMTPropForTkZ_; - - bool use5ParameterFit_; -}; - -struct L1MuonCand { - float eta; - float phi; - float pt; - float feta; - float bx; - float sigmaEta; - float sigmaPhi; - unsigned int quality; - int idx; - bool gmtCand; - bool dtCand; - bool cscCand; - bool rpcCand; -}; - -// maximum Muons number -const int MuonsMax = 20; - -struct L1TkMuonCand { - float pt; - int nPars; - int q; - float z; - float chi2; - float eta; - float phi; - int nstubs; - int idx; - float matchPt; - float matchEta; - float matchPhi; - float matchSigmaEta; - float matchSigmaPhi; -}; - -// maximum Tracks number -const int TrackMax = 300; - -// -// constructors and destructor -// -L1TkMuonFromExtendedProducer::L1TkMuonFromExtendedProducer(const edm::ParameterSet& iConfig) -{ - L1MuonsInputTag_ = iConfig.getParameter("L1MuonsInputTag"); - L1TrackInputTag_ = iConfig.getParameter("L1TrackInputTag"); - - ETAMIN_ = (float)iConfig.getParameter("ETAMIN"); - ETAMAX_ = (float)iConfig.getParameter("ETAMAX"); - ZMAX_ = (float)iConfig.getParameter("ZMAX"); - CHI2MAX_ = (float)iConfig.getParameter("CHI2MAX"); - PTMINTRA_ = (float)iConfig.getParameter("PTMINTRA"); - // DRmax_ = (float)iConfig.getParameter("DRmax"); - nStubsmin_ = iConfig.getParameter("nStubsmin"); - // closest_ = iConfig.getParameter("closest"); - - correctGMTPropForTkZ_ = iConfig.getParameter("correctGMTPropForTkZ"); - use5ParameterFit_ = iConfig.getParameter("use5ParameterFit"); - produces(); -} - -L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { -} - -// ------------ method called to produce the data ------------ -void -L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - L1MuonCand MuCn[MuonsMax]; - L1TkMuonCand L1Tk[MuonsMax]; - - using namespace edm; - using namespace std; - - std::auto_ptr tkMuons(new L1TkMuonParticleCollection); - - edm::Handle l1musH; - iEvent.getByLabel(L1MuonsInputTag_, l1musH); - const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); - - edm::Handle l1tksH; - iEvent.getByLabel(L1TrackInputTag_, l1tksH); - const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - - LogDebug("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); - - L1TkMuonParticleCollection l1tkmuCands; - l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed - - // MuCn filling - - int imu = -1; - int MuonNum = -1; - for (auto l1mu : l1mus){ - imu++; - - if( imu ZMAX_) continue; - - L1Tk[imu].chi2 = l1tk.getChi2(nPars); - if (L1Tk[imu].chi2 > CHI2MAX_) continue; - - L1Tk[imu].nstubs = l1tk.getStubRefs().size(); - if ( L1Tk[imu].nstubs < nStubsmin_) continue; - - L1Tk[imu].eta = l1tk.getMomentum(nPars).eta(); - L1Tk[imu].phi = l1tk.getMomentum(nPars).phi(); - - float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[imu].eta, L1Tk[imu].phi); - if (dr2 > 0.3) continue; - - PropState pstate = propagateToGMT(l1tk); - if (!pstate.valid) continue; - - float dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); - - if (dr2prop < drmin){ - drmin = dr2prop; - L1Tk[imu].idx = il1tk; - L1Tk[imu].matchPt = pstate.pt; - L1Tk[imu].matchEta = pstate.eta; - L1Tk[imu].matchPhi = pstate.phi; - L1Tk[imu].matchSigmaEta = pstate.sigmaEta; - L1Tk[imu].matchSigmaPhi = pstate.sigmaPhi; - } - TrackNume = il1tk + 1; - } - else { - LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Tracks number too small " << TrackNume; - } - }//over l1tks - }//over l1mus - - // **** Calculation for Muons **** - - for (int imu=0; imu ETAMAX_) continue; - - // can skip quality cuts at the moment, keep bx=0 req - if (MuCn[imu].bx != 0) continue; - - if (!MuCn[imu].gmtCand){ - //some selections here - //currently the input can be a merge from different track finders - //so, the GMT cand may be missing - } - - if (!MuCn[imu].dtCand){ - // something can be called from here - } - - if (!MuCn[imu].cscCand){ - //apply something specific here - } - - if (!MuCn[imu].rpcCand){ - //apply something specific here - } - - LogDebug("MYDEBUG")<<"matching index is "<= 0){ - - float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[imu].matchSigmaEta*L1Tk[imu].matchSigmaEta); - float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[imu].matchSigmaPhi*L1Tk[imu].matchSigmaPhi); - - float dEta = std::abs(L1Tk[imu].matchEta - MuCn[imu].eta); - float dPhi = std::abs(deltaPhi(L1Tk[imu].matchPhi, MuCn[imu].phi)); - - LogDebug("L1TkMuonFromExtendedProducer") - << " match details: prop Pt "< l1tkPtr(l1tksH, L1Tk[imu].idx); - const L1TkTrackType& matchTk = l1tks[L1Tk[imu].idx]; - - auto p3 = matchTk.getMomentum(L1Tk[imu].nPars); - float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); - - math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); - - auto tkv3=matchTk.getPOCA(L1Tk[imu].nPars); - math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); - - - L1Tk[imu].q = matchTk.getRInv(L1Tk[imu].nPars)>0? 1: -1; - - L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1Tk[imu].q, l1tkp4, v3, -13*L1Tk[imu].q )); - - l1tkmu.setTrkPtr(l1tkPtr); - l1tkmu.setMuExtendedRef(l1muRef); - l1tkmu.setQuality(MuCn[imu].quality); - float trkisol = -999; - l1tkmu.setTrkIsol(trkisol); - - // EP: add the zvtx information - l1tkmu.setTrkzVtx( (float)tkv3.z() ); - - tkMuons->push_back(l1tkmu); - } - } - - }//over l1mus - - iEvent.put( tkMuons ); - -} - - -// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ -void -L1TkMuonFromExtendedProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters - edm::ParameterSetDescription desc; - desc.setUnknown(); - descriptions.addDefault(desc); -} - - -L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateToGMT(const L1TkMuonFromExtendedProducer::L1TkTrackType& tk) const { - - auto p3 = tk.getMomentum(); - float tk_pt = p3.perp(); - float tk_p = p3.mag(); - float tk_eta = p3.eta(); - float tk_aeta = std::abs(tk_eta); - float tk_phi = p3.phi(); - float tk_q = tk.getRInv()>0? 1.: -1.; - float tk_z = tk.getPOCA().z(); - if (!correctGMTPropForTkZ_) tk_z = 0; - - L1TkMuonFromExtendedProducer::PropState dest; - if (tk_p<3.5 ) return dest; - if (tk_aeta <1.1 && tk_pt < 3.5) return dest; - if (tk_aeta > 2.5) return dest; - - //0th order: - dest.valid = true; - - float dzCorrPhi = 1.; - float deta = 0; - float etaProp = tk_aeta; - - if (tk_aeta < 1.1){ - etaProp = 1.1; - deta = tk_z/550./cosh(tk_aeta); - } else { - float delta = tk_z/850.; //roughly scales as distance to 2nd station - if (tk_eta > 0) delta *=-1; - dzCorrPhi = 1. + delta; - - float zOzs = tk_z/850.; - if (tk_eta > 0) deta = zOzs/(1. - zOzs); - else deta = zOzs/(1.+zOzs); - deta = deta*tanh(tk_eta); - } - float resPhi = tk_phi - 1.464*tk_q*cosh(1.7)/cosh(etaProp)/tk_pt*dzCorrPhi - M_PI/144.; - if (resPhi > M_PI) resPhi -= 2.*M_PI; - if (resPhi < -M_PI) resPhi += 2.*M_PI; - - dest.eta = tk_eta + deta; - dest.phi = resPhi; - dest.pt = tk_pt; //not corrected for eloss - - dest.sigmaEta = 0.100/tk_pt; //multiple scattering term - dest.sigmaPhi = 0.106/tk_pt; //need a better estimate for these - return dest; -} - -//define this as a plug-in -DEFINE_FWK_MODULE(L1TkMuonFromExtendedProducer); diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc new file mode 120000 index 0000000000000..d6aece3e7b91b --- /dev/null +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -0,0 +1 @@ +/data/baranov/TAMU.L1/sw/CMSSW_6_2_0_SLHC21-mytest/src/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc \ No newline at end of file From d8ae210da2dfe4a162661737ed6437253ceb552a Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 27 Jan 2015 17:23:28 +0100 Subject: [PATCH 15/55] updat L1MuonCand and L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 451 +++++++++++++++++- 1 file changed, 450 insertions(+), 1 deletion(-) mode change 120000 => 100644 SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc deleted file mode 120000 index d6aece3e7b91b..0000000000000 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ /dev/null @@ -1 +0,0 @@ -/data/baranov/TAMU.L1/sw/CMSSW_6_2_0_SLHC21-mytest/src/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc \ No newline at end of file diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc new file mode 100644 index 0000000000000..bfe24fa7b0ca8 --- /dev/null +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -0,0 +1,450 @@ +// -*- C++ -*- +// +// input: L1 TkTracks and L1MuonParticleExtended (standalone with component details) +// match the two and produce a collection of L1TkMuonParticle +// eventually, this should be made modular and allow to swap out different algorithms + +#include "DataFormats/L1TrackTrigger/interface/L1TkMuonParticle.h" +#include "DataFormats/L1TrackTrigger/interface/L1TkMuonParticleFwd.h" + +// for L1Tracks: +#include "SimDataFormats/SLHC/interface/StackedTrackerTypes.h" +#include "DataFormats/HepMCCandidate/interface/GenParticle.h" + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" + +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/Math/interface/LorentzVector.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/Math/interface/deltaPhi.h" + +#include "TMath.h" + +// system include files +#include +#include + +#include +#include +#include + +using namespace l1extra; + +// +// class declaration +// + +class L1TkMuonFromExtendedProducer : public edm::EDProducer { +public: + + typedef TTTrack< Ref_PixelDigi_ > L1TkTrackType; + typedef std::vector< L1TkTrackType > L1TkTrackCollectionType; + + struct PropState { //something simple, imagine it's hardware emulation + PropState() : + pt(-99), eta(-99), phi(-99), + sigmaPt(-99), sigmaEta(-99), sigmaPhi(-99), + valid(false) {} + float pt; + float eta; + float phi; + float sigmaPt; + float sigmaEta; + float sigmaPhi; + bool valid; + + }; + + explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); + ~L1TkMuonFromExtendedProducer(); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + + virtual void produce(edm::Event&, const edm::EventSetup&); + + PropState propagateToGMT(const L1TkTrackType& l1tk) const; + + //configuration (preserving structure of L1TkMuonFromExtendedProducer + edm::InputTag L1MuonsInputTag_; + edm::InputTag L1TrackInputTag_; + + float ETAMIN_; + float ETAMAX_; + float ZMAX_; // |z_track| < ZMAX in cm + float CHI2MAX_; + float PTMINTRA_; + // float DRmax_; + int nStubsmin_ ; // minimum number of stubs + // bool closest_ ; + bool correctGMTPropForTkZ_; + + bool use5ParameterFit_; +}; + +// maximum Muons number +const int MuonMax = 20; + +struct L1MuonCand { + float eta; + float phi; + float pt; + float feta; + float bx; + float sigmaEta; + float sigmaPhi; + unsigned int quality; + int idx; + bool gmtCand; + bool dtCand; + bool cscCand; + bool rpcCand; + int itk; + int Num; +}; + +// maximum Tracks number +const int TrackMax = 300; + +struct L1TkMuonCand { + float pt; + int nPars; + int q; + float z; + float chi2; + float eta; + float phi; + int nstubs; + int idx; + float matchPt; + float matchEta; + float matchPhi; + float matchSigmaEta; + float matchSigmaPhi; +}; + +// +// constructors and destructor +// +L1TkMuonFromExtendedProducer::L1TkMuonFromExtendedProducer(const edm::ParameterSet& iConfig) +{ + L1MuonsInputTag_ = iConfig.getParameter("L1MuonsInputTag"); + L1TrackInputTag_ = iConfig.getParameter("L1TrackInputTag"); + + ETAMIN_ = (float)iConfig.getParameter("ETAMIN"); + ETAMAX_ = (float)iConfig.getParameter("ETAMAX"); + ZMAX_ = (float)iConfig.getParameter("ZMAX"); + CHI2MAX_ = (float)iConfig.getParameter("CHI2MAX"); + PTMINTRA_ = (float)iConfig.getParameter("PTMINTRA"); + // DRmax_ = (float)iConfig.getParameter("DRmax"); + nStubsmin_ = iConfig.getParameter("nStubsmin"); + // closest_ = iConfig.getParameter("closest"); + + correctGMTPropForTkZ_ = iConfig.getParameter("correctGMTPropForTkZ"); + use5ParameterFit_ = iConfig.getParameter("use5ParameterFit"); + produces(); +} + +L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { +} + +// ------------ method called to produce the data ------------ +void +L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + L1MuonCand MuCn[MuonMax]; + L1TkMuonCand L1Tk[TrackMax]; + + using namespace edm; + using namespace std; + + std::auto_ptr tkMuons(new L1TkMuonParticleCollection); + + edm::Handle l1musH; + iEvent.getByLabel(L1MuonsInputTag_, l1musH); + const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); + + edm::Handle l1tksH; + iEvent.getByLabel(L1TrackInputTag_, l1tksH); + const L1TkTrackCollectionType& l1tks = *l1tksH.product(); + + LogDebug("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); + + L1TkMuonParticleCollection l1tkmuCands; + l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed + + // MuCn filling + + int imu = -1; + int MuonNum = -1; + int TrackNum = -1; + for (auto l1mu : l1mus){ + imu++; + + if( imu ZMAX_) continue; + + L1Tk[il1tk].chi2 = l1tk.getChi2(nPars); + if (L1Tk[il1tk].chi2 > CHI2MAX_) continue; + + L1Tk[il1tk].nstubs = l1tk.getStubRefs().size(); + if ( L1Tk[il1tk].nstubs < nStubsmin_) continue; + + L1Tk[il1tk].eta = l1tk.getMomentum(nPars).eta(); + L1Tk[il1tk].phi = l1tk.getMomentum(nPars).phi(); + + float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[il1tk].eta, L1Tk[il1tk].phi); + if (dr2 > 0.3) continue; + + PropState pstate = propagateToGMT(l1tk); + if (!pstate.valid) continue; + + float dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); + + if (dr2prop < drmin){ + TrackNum = il1tk + 1; + + drmin = dr2prop; + L1Tk[il1tk].idx = il1tk; + MuCn[imu].itk = il1tk; + + L1Tk[il1tk].matchPt = pstate.pt; + L1Tk[il1tk].matchEta = pstate.eta; + L1Tk[il1tk].matchPhi = pstate.phi; + L1Tk[il1tk].matchSigmaEta = pstate.sigmaEta; + L1Tk[il1tk].matchSigmaPhi = pstate.sigmaPhi; + + } + } + else { + LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Tracks number too small " << TrackNum; + } + }//over l1tks + + MuCn[imu].Num = TrackNum; + LogWarning("L1TkMuonFromExtendedProducer") << " imu " << imu << " itk " << MuCn[imu].itk << " TrackNum " << TrackNum; + }//over l1mus + + LogWarning("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; + + // **** Calculation for Muons **** + + for (int imu=0; imu ETAMAX_) continue; + + // can skip quality cuts at the moment, keep bx=0 req + if (MuCn[imu].bx != 0) continue; + + if (!MuCn[imu].gmtCand){ + //some selections here + //currently the input can be a merge from different track finders + //so, the GMT cand may be missing + } + + if (!MuCn[imu].dtCand){ + // something can be called from here + } + + if (!MuCn[imu].cscCand){ + //apply something specific here + } + + if (!MuCn[imu].rpcCand){ + //apply something specific here + } + + LogWarning("L1TkMuonFromExtendedProducer") << "\n imu= " << imu << " itk " << MuCn[imu].itk << " TrackNum= " << MuCn[imu].Num; + + // **** Calculation for Tracks **** + for ( int itk=0; itk<0 /*MuCn[imu].Num*/; itk++ ){ + + edm::LogWarning("L1TkMuonFromExtendedProducer") << " itk " << itk << " idx " << L1Tk[itk].idx; + + if (MuCn[imu].itk == itk && L1Tk[itk].idx >= 0){ + + float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[itk].matchSigmaEta*L1Tk[itk].matchSigmaEta); + float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[itk].matchSigmaPhi*L1Tk[itk].matchSigmaPhi); + + float dEta = std::abs(L1Tk[itk].matchEta - MuCn[imu].eta); + float dPhi = std::abs(deltaPhi(L1Tk[itk].matchPhi, MuCn[imu].phi)); + + LogDebug("L1TkMuonFromExtendedProducer") + << " match details: prop Pt "< l1tkPtr(l1tksH, L1Tk[itk].idx); + const L1TkTrackType& matchTk = l1tks[L1Tk[itk].idx]; + + auto p3 = matchTk.getMomentum(L1Tk[itk].nPars); + float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); + + math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); + + auto tkv3=matchTk.getPOCA(L1Tk[itk].nPars); + math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); + + L1Tk[itk].q = matchTk.getRInv(L1Tk[itk].nPars)>0? 1: -1; + + L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1Tk[itk].q, l1tkp4, v3, -13*L1Tk[itk].q )); + + l1tkmu.setTrkPtr(l1tkPtr); + l1tkmu.setMuExtendedRef(l1muRef); + l1tkmu.setQuality(MuCn[imu].quality); + float trkisol = -999; + l1tkmu.setTrkIsol(trkisol); + + // EP: add the zvtx information + l1tkmu.setTrkzVtx( (float)tkv3.z() ); + + tkMuons->push_back(l1tkmu); + + }// over Cuts + } + + }// over itk + }//over l1mus + + iEvent.put( tkMuons ); + +} + + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void +L1TkMuonFromExtendedProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + + +L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateToGMT(const L1TkMuonFromExtendedProducer::L1TkTrackType& tk) const { + + auto p3 = tk.getMomentum(); + float tk_pt = p3.perp(); + float tk_p = p3.mag(); + float tk_eta = p3.eta(); + float tk_aeta = std::abs(tk_eta); + float tk_phi = p3.phi(); + float tk_q = tk.getRInv()>0? 1.: -1.; + float tk_z = tk.getPOCA().z(); + if (!correctGMTPropForTkZ_) tk_z = 0; + + L1TkMuonFromExtendedProducer::PropState dest; + if (tk_p<3.5 ) return dest; + if (tk_aeta <1.1 && tk_pt < 3.5) return dest; + if (tk_aeta > 2.5) return dest; + + //0th order: + dest.valid = true; + + float dzCorrPhi = 1.; + float deta = 0; + float etaProp = tk_aeta; + + if (tk_aeta < 1.1){ + etaProp = 1.1; + deta = tk_z/550./cosh(tk_aeta); + } else { + float delta = tk_z/850.; //roughly scales as distance to 2nd station + if (tk_eta > 0) delta *=-1; + dzCorrPhi = 1. + delta; + + float zOzs = tk_z/850.; + if (tk_eta > 0) deta = zOzs/(1. - zOzs); + else deta = zOzs/(1.+zOzs); + deta = deta*tanh(tk_eta); + } + float resPhi = tk_phi - 1.464*tk_q*cosh(1.7)/cosh(etaProp)/tk_pt*dzCorrPhi - M_PI/144.; + if (resPhi > M_PI) resPhi -= 2.*M_PI; + if (resPhi < -M_PI) resPhi += 2.*M_PI; + + dest.eta = tk_eta + deta; + dest.phi = resPhi; + dest.pt = tk_pt; //not corrected for eloss + + dest.sigmaEta = 0.100/tk_pt; //multiple scattering term + dest.sigmaPhi = 0.106/tk_pt; //need a better estimate for these + return dest; +} + +//define this as a plug-in +DEFINE_FWK_MODULE(L1TkMuonFromExtendedProducer); From d6623cd7b9fd9b3b56930c52dc36b198097d3463 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 28 Jan 2015 11:29:15 +0100 Subject: [PATCH 16/55] updat L1MuonCand and L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index bfe24fa7b0ca8..7f0794dbe1f7a 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -289,10 +289,11 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& }//over l1tks MuCn[imu].Num = TrackNum; - LogWarning("L1TkMuonFromExtendedProducer") << " imu " << imu << " itk " << MuCn[imu].itk << " TrackNum " << TrackNum; + LogDebug("L1TkMuonFromExtendedProducer") << " imu " << imu << " itk " << MuCn[imu].itk << " TrackNum " << TrackNum; + }//over l1mus - LogWarning("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; + LogDebug("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; // **** Calculation for Muons **** @@ -324,30 +325,29 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& //apply something specific here } - LogWarning("L1TkMuonFromExtendedProducer") << "\n imu= " << imu << " itk " << MuCn[imu].itk << " TrackNum= " << MuCn[imu].Num; + LogDebug("L1TkMuonFromExtendedProducer") << "\n imu= " << imu << " itk= " << MuCn[imu].itk << " Num= " << MuCn[imu].Num; // **** Calculation for Tracks **** - for ( int itk=0; itk<0 /*MuCn[imu].Num*/; itk++ ){ - - edm::LogWarning("L1TkMuonFromExtendedProducer") << " itk " << itk << " idx " << L1Tk[itk].idx; + for ( int itk=0; itk= 0){ + LogDebug("L1TkMuonFromExtendedProducer") << " itk= " << itk << " : itk= " << MuCn[imu].itk << " idx= " << L1Tk[itk].idx; + float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[itk].matchSigmaEta*L1Tk[itk].matchSigmaEta); float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[itk].matchSigmaPhi*L1Tk[itk].matchSigmaPhi); float dEta = std::abs(L1Tk[itk].matchEta - MuCn[imu].eta); float dPhi = std::abs(deltaPhi(L1Tk[itk].matchPhi, MuCn[imu].phi)); - LogDebug("L1TkMuonFromExtendedProducer") - << " match details: prop Pt "< l1tkPtr(l1tksH, L1Tk[itk].idx); const L1TkTrackType& matchTk = l1tks[L1Tk[itk].idx]; From f6b5023e001c753d55de876bb8013d3f8c6b0a57 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 28 Jan 2015 11:46:54 +0100 Subject: [PATCH 17/55] updat L1MuonCand and L1TkMuonCand --- .../L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 7f0794dbe1f7a..699cd79701920 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -378,7 +378,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& } }// over itk - }//over l1mus + }//over imu iEvent.put( tkMuons ); From 6858f7255f0597aae79c939a10584ec8f79f5c45 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 3 Feb 2015 17:19:03 +0100 Subject: [PATCH 18/55] add keepMuons and keepTracks --- .../plugins/L1TkMuonFromExtendedProducer.cc | 221 +++++++++++------- 1 file changed, 140 insertions(+), 81 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 699cd79701920..4d2a0fb546d7d 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -45,6 +45,12 @@ using namespace l1extra; // class declaration // +// maximum Muons number +const int MuonMax = 20; + +// maximum Tracks number +const int TrackMax = 300; + class L1TkMuonFromExtendedProducer : public edm::EDProducer { public: @@ -52,10 +58,9 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { typedef std::vector< L1TkTrackType > L1TkTrackCollectionType; struct PropState { //something simple, imagine it's hardware emulation + PropState() : - pt(-99), eta(-99), phi(-99), - sigmaPt(-99), sigmaEta(-99), sigmaPhi(-99), - valid(false) {} + pt(-99), eta(-99), phi(-99),sigmaPt(-99), sigmaEta(-99), sigmaPhi(-99), valid(false) {} float pt; float eta; float phi; @@ -66,15 +71,56 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { }; + struct L1MuonCand { + float eta; + float phi; + float pt; + float feta; + float bx; + float sigmaEta; + float sigmaPhi; + unsigned int quality; + int idx; + bool gmtCand; + bool dtCand; + bool cscCand; + bool rpcCand; + int itk; + int Num; + }; + + struct L1Tracks { + float pt; + int nPars; + int q; + float z; + float chi2; + float eta; + float phi; + int nstubs; + int idx; + float matchPt; + float matchEta; + float matchPhi; + float matchSigmaEta; + float matchSigmaPhi; + }; + + L1MuonCand MuCn[MuonMax]; + L1Tracks L1Tk[TrackMax]; + explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); ~L1TkMuonFromExtendedProducer(); static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - + private: virtual void produce(edm::Event&, const edm::EventSetup&); + int keepMuons(edm::Event&, L1MuonCand*); + int keepTracks(edm::Event&, L1Tracks*); + PropState propagateToGMT(const L1TkTrackType& l1tk) const; //configuration (preserving structure of L1TkMuonFromExtendedProducer @@ -94,47 +140,6 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { bool use5ParameterFit_; }; -// maximum Muons number -const int MuonMax = 20; - -struct L1MuonCand { - float eta; - float phi; - float pt; - float feta; - float bx; - float sigmaEta; - float sigmaPhi; - unsigned int quality; - int idx; - bool gmtCand; - bool dtCand; - bool cscCand; - bool rpcCand; - int itk; - int Num; -}; - -// maximum Tracks number -const int TrackMax = 300; - -struct L1TkMuonCand { - float pt; - int nPars; - int q; - float z; - float chi2; - float eta; - float phi; - int nstubs; - int idx; - float matchPt; - float matchEta; - float matchPhi; - float matchSigmaEta; - float matchSigmaPhi; -}; - // // constructors and destructor // @@ -160,36 +165,24 @@ L1TkMuonFromExtendedProducer::L1TkMuonFromExtendedProducer(const edm::ParameterS L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { } -// ------------ method called to produce the data ------------ -void -L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +// ------------ Muon and Tracks converter ------------ +int +L1TkMuonFromExtendedProducer::keepMuons(edm::Event& iEvent, L1MuonCand* MuCn) { - L1MuonCand MuCn[MuonMax]; - L1TkMuonCand L1Tk[TrackMax]; - using namespace edm; using namespace std; - - std::auto_ptr tkMuons(new L1TkMuonParticleCollection); - + edm::Handle l1musH; iEvent.getByLabel(L1MuonsInputTag_, l1musH); const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); - edm::Handle l1tksH; - iEvent.getByLabel(L1TrackInputTag_, l1tksH); - const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - - LogDebug("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size() << " l1tks.size= " << l1tks.size(); - - L1TkMuonParticleCollection l1tkmuCands; - l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed + LogDebug("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size(); - // MuCn filling + // Muons filling int imu = -1; int MuonNum = -1; - int TrackNum = -1; + // int TrackNum = -1; for (auto l1mu : l1mus){ imu++; @@ -230,36 +223,102 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& else { LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Muon number too small " << imu; }; + } + LogDebug("L1TkMuonFromExtendedProducer") << " ::keepMuons MuonNum " << MuonNum; + return MuonNum; +} - // trCn filling +// ------------ Tracks converter ------------ +int +L1TkMuonFromExtendedProducer::keepTracks(edm::Event& iEvent, L1Tracks* L1Tk) +{ + using namespace edm; + using namespace std; + + edm::Handle l1musH; + iEvent.getByLabel(L1MuonsInputTag_, l1musH); + const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); + + edm::Handle l1tksH; + iEvent.getByLabel(L1TrackInputTag_, l1tksH); + const L1TkTrackCollectionType& l1tks = *l1tksH.product(); + + L1TkMuonParticleCollection l1tkmuCands; + l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed + + LogDebug("L1TkMuonFromExtendedProducer") << " l1tks.size= " << l1tks.size(); + + int TrackNum = -1; + int il1tk = -1; + for (auto l1tk : l1tks ){ + il1tk++; + + if( il1tk tkMuons(new L1TkMuonParticleCollection); + + edm::Handle l1musH; + iEvent.getByLabel(L1MuonsInputTag_, l1musH); + edm::Handle l1tksH; + iEvent.getByLabel(L1TrackInputTag_, l1tksH); + const L1TkTrackCollectionType& l1tks = *l1tksH.product(); + + + for (int imu=0; imu ZMAX_) continue; - - L1Tk[il1tk].chi2 = l1tk.getChi2(nPars); if (L1Tk[il1tk].chi2 > CHI2MAX_) continue; - - L1Tk[il1tk].nstubs = l1tk.getStubRefs().size(); if ( L1Tk[il1tk].nstubs < nStubsmin_) continue; - L1Tk[il1tk].eta = l1tk.getMomentum(nPars).eta(); - L1Tk[il1tk].phi = l1tk.getMomentum(nPars).phi(); - float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[il1tk].eta, L1Tk[il1tk].phi); if (dr2 > 0.3) continue; @@ -296,7 +355,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& LogDebug("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; // **** Calculation for Muons **** - + for (int imu=0; imu Date: Wed, 4 Feb 2015 15:29:06 +0100 Subject: [PATCH 19/55] add keepMuons and keepTracks --- .../plugins/L1TkMuonFromExtendedProducer.cc | 98 +++++++------------ 1 file changed, 33 insertions(+), 65 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 4d2a0fb546d7d..34a03dc90d5f6 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -267,13 +267,18 @@ L1TkMuonFromExtendedProducer::keepTracks(edm::Event& iEvent, L1Tracks* L1Tk) L1Tk[il1tk].nstubs = l1tk.getStubRefs().size(); L1Tk[il1tk].eta = l1tk.getMomentum(nPars).eta(); L1Tk[il1tk].phi = l1tk.getMomentum(nPars).phi(); - /* + + L1Tk[il1tk].idx = il1tk; + + PropState pstate = propagateToGMT(l1tk); + if (!pstate.valid) continue; + L1Tk[il1tk].matchPt = pstate.pt; L1Tk[il1tk].matchEta = pstate.eta; L1Tk[il1tk].matchPhi = pstate.phi; L1Tk[il1tk].matchSigmaEta = pstate.sigmaEta; L1Tk[il1tk].matchSigmaPhi = pstate.sigmaPhi; - */ + } else { LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Tracks number too small " << TrackNum; @@ -291,7 +296,11 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& using namespace std; int MuonNum = L1TkMuonFromExtendedProducer::keepMuons(iEvent, MuCn); - + LogDebug("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; + + int TrackNum = L1TkMuonFromExtendedProducer::keepTracks(iEvent, L1Tk); + LogDebug("L1TkMuonFromExtendedProducer") << " TrackNum " << TrackNum; + std::auto_ptr tkMuons(new L1TkMuonParticleCollection); edm::Handle l1musH; @@ -301,63 +310,11 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - - for (int imu=0; imu ZMAX_) continue; - if (L1Tk[il1tk].chi2 > CHI2MAX_) continue; - if ( L1Tk[il1tk].nstubs < nStubsmin_) continue; - - float dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[il1tk].eta, L1Tk[il1tk].phi); - if (dr2 > 0.3) continue; - - PropState pstate = propagateToGMT(l1tk); - if (!pstate.valid) continue; - - float dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, pstate.eta, pstate.phi); - - if (dr2prop < drmin){ - TrackNum = il1tk + 1; - - drmin = dr2prop; - L1Tk[il1tk].idx = il1tk; - MuCn[imu].itk = il1tk; - - L1Tk[il1tk].matchPt = pstate.pt; - L1Tk[il1tk].matchEta = pstate.eta; - L1Tk[il1tk].matchPhi = pstate.phi; - L1Tk[il1tk].matchSigmaEta = pstate.sigmaEta; - L1Tk[il1tk].matchSigmaPhi = pstate.sigmaPhi; - - } - } - else { - LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Tracks number too small " << TrackNum; - } - }//over l1tks - - MuCn[imu].Num = TrackNum; - LogDebug("L1TkMuonFromExtendedProducer") << " imu " << imu << " itk " << MuCn[imu].itk << " TrackNum " << TrackNum; - - }//over l1mus - - LogDebug("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; - // **** Calculation for Muons **** for (int imu=0; imu tkMuons(new L1TkMuonParticleCollection); - - edm::Handle l1musH; - iEvent.getByLabel(L1MuonsInputTag_, l1musH); - - edm::Handle l1tksH; - iEvent.getByLabel(L1TrackInputTag_, l1tksH); - const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - // **** Calculation for Muons **** for (int imu=0; imu ETAMAX_) continue; @@ -366,36 +357,8 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& // Filter for Cuts if (dEta < etaCut && dPhi < phiCut){ - // *** l1tksH - Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1Tk[itk].idx); - const L1TkTrackType& matchTk = l1tks[L1Tk[itk].idx]; - - auto p3 = matchTk.getMomentum(L1Tk[itk].nPars); - float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); - - math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); - - auto tkv3=matchTk.getPOCA(L1Tk[itk].nPars); - math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); - - L1Tk[itk].q = matchTk.getRInv(L1Tk[itk].nPars)>0? 1: -1; - - // *** - L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1Tk[itk].q, l1tkp4, v3, -13*L1Tk[itk].q )); - - l1tkmu.setTrkPtr(l1tkPtr); - - // *** l1musH - l1tkmu.setMuExtendedRef(l1muRef); + L1TkMuonFromExtendedProducer::keepTrCand(iEvent, tkMuons, imu, MuCn, itk, L1Tk); - l1tkmu.setQuality(MuCn[imu].quality); - float trkisol = -999; - l1tkmu.setTrkIsol(trkisol); - - // EP: add the zvtx information - l1tkmu.setTrkzVtx( (float)tkv3.z() ); - tkMuons->push_back(l1tkmu); - }// over Cuts } @@ -408,28 +371,17 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& // ------------ Tracks candidate ------------ -bool -L1TkMuonFromExtendedProducer::keepTrCand(edm::Event& iEvent, const int& imu, L1MuonCand* MuCn, const int& itk, L1Tracks* L1Tk) +void +L1TkMuonFromExtendedProducer::keepTrCand(edm::Event& iEvent, std::auto_ptr& tkMuons, +const int& imu, L1MuonCand* MuCn, const int& itk, L1Tracks* L1Tk) { using namespace edm; using namespace std; - edm::Handle l1musH; - iEvent.getByLabel(L1MuonsInputTag_, l1musH); - const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); - edm::Handle l1tksH; iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - L1TkMuonParticleCollection l1tkmuCands; - l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed - LogDebug("L1TkMuonFromExtendedProducer") << " l1tks.size= " << l1tks.size(); - - std::auto_ptr tkMuons(new L1TkMuonParticleCollection); - - L1MuonParticleExtendedRef l1muRef(l1musH, imu); - Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1Tk[itk].idx); const L1TkTrackType& matchTk = l1tks[L1Tk[itk].idx]; @@ -442,14 +394,22 @@ L1TkMuonFromExtendedProducer::keepTrCand(edm::Event& iEvent, const int& imu, L1M math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); L1Tk[itk].q = matchTk.getRInv(L1Tk[itk].nPars)>0? 1: -1; - - // *** + L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1Tk[itk].q, l1tkp4, v3, -13*L1Tk[itk].q )); - + l1tkmu.setTrkPtr(l1tkPtr); - // *** + edm::Handle l1musH; + iEvent.getByLabel(L1MuonsInputTag_, l1musH); + const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); + + L1TkMuonParticleCollection l1tkmuCands; + l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed + LogDebug("L1TkMuonFromExtendedProducer") << " l1tks.size= " << l1tks.size(); + + L1MuonParticleExtendedRef l1muRef(l1musH, imu); l1tkmu.setMuExtendedRef(l1muRef); + l1tkmu.setQuality(MuCn[imu].quality); float trkisol = -999; @@ -457,11 +417,9 @@ L1TkMuonFromExtendedProducer::keepTrCand(edm::Event& iEvent, const int& imu, L1M // EP: add the zvtx information l1tkmu.setTrkzVtx( (float)tkv3.z() ); - tkMuons->push_back(l1tkmu); - iEvent.put( tkMuons ); + tkMuons->push_back(l1tkmu); - return(true); } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ @@ -475,7 +433,8 @@ L1TkMuonFromExtendedProducer::fillDescriptions(edm::ConfigurationDescriptions& d } -L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateToGMT(const L1TkMuonFromExtendedProducer::L1TkTrackType& tk) const { +L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateToGMT(const L1TkMuonFromExtendedProducer::L1TkTrackType& tk) +const { auto p3 = tk.getMomentum(); float tk_pt = p3.perp(); From 4a21376adb9ead8d3af423e141cc459fef2b4c4c Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 6 Feb 2015 10:30:33 +0100 Subject: [PATCH 22/55] update names loadMuons & load Tracks --- .../plugins/L1TkMuonFromExtendedProducer.cc | 60 ++++++++++--------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 9820903c4c86d..87daeeaf78cb1 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -99,11 +99,12 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float phi; int nstubs; int idx; - float matchPt; - float matchEta; - float matchPhi; - float matchSigmaEta; - float matchSigmaPhi; + bool valid; + float propPt; + float propEta; + float propPhi; + float propSigmaEta; + float propSigmaPhi; }; L1MuonCand MuCn[MuonMax]; @@ -118,10 +119,10 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { virtual void produce(edm::Event&, const edm::EventSetup&); - int keepMuons(edm::Event&, L1MuonCand*); - int keepTracks(edm::Event&, L1Tracks*); + int loadMuons(edm::Event&, L1MuonCand*); + int loadTracks(edm::Event&, L1Tracks*); - void keepTrCand(edm::Event&, std::auto_ptr&, const int&, L1MuonCand*, const int&, L1Tracks*); + void keepTrCand(edm::Event&, std::auto_ptr&, const int, L1MuonCand*, const int, L1Tracks*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -169,7 +170,7 @@ L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { // ------------ Muon and Tracks converter ------------ int -L1TkMuonFromExtendedProducer::keepMuons(edm::Event& iEvent, L1MuonCand* MuCn) +L1TkMuonFromExtendedProducer::loadMuons(edm::Event& iEvent, L1MuonCand* MuCn) { using namespace edm; using namespace std; @@ -226,13 +227,13 @@ L1TkMuonFromExtendedProducer::keepMuons(edm::Event& iEvent, L1MuonCand* MuCn) LogWarning("L1TkMuonFromExtendedProducer") << " Maximum Muon number too small " << imu; }; } - LogDebug("L1TkMuonFromExtendedProducer") << " ::keepMuons MuonNum " << MuonNum; + LogDebug("L1TkMuonFromExtendedProducer") << " ::loadMuons MuonNum " << MuonNum; return MuonNum; } // ------------ Tracks converter ------------ int -L1TkMuonFromExtendedProducer::keepTracks(edm::Event& iEvent, L1Tracks* L1Tk) +L1TkMuonFromExtendedProducer::loadTracks(edm::Event& iEvent, L1Tracks* L1Tk) { using namespace edm; using namespace std; @@ -264,13 +265,17 @@ L1TkMuonFromExtendedProducer::keepTracks(edm::Event& iEvent, L1Tracks* L1Tk) L1Tk[il1tk].idx = il1tk; PropState pstate = propagateToGMT(l1tk); - if (!pstate.valid) continue; - L1Tk[il1tk].matchPt = pstate.pt; - L1Tk[il1tk].matchEta = pstate.eta; - L1Tk[il1tk].matchPhi = pstate.phi; - L1Tk[il1tk].matchSigmaEta = pstate.sigmaEta; - L1Tk[il1tk].matchSigmaPhi = pstate.sigmaPhi; + if (!pstate.valid) { + L1Tk[il1tk].valid = true; + } else { L1Tk[il1tk].valid = false; + }; + + L1Tk[il1tk].propPt = pstate.pt; + L1Tk[il1tk].propEta = pstate.eta; + L1Tk[il1tk].propPhi = pstate.phi; + L1Tk[il1tk].propSigmaEta = pstate.sigmaEta; + L1Tk[il1tk].propSigmaPhi = pstate.sigmaPhi; } else { @@ -290,10 +295,10 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& std::auto_ptr tkMuons(new L1TkMuonParticleCollection); - int MuonNum = L1TkMuonFromExtendedProducer::keepMuons(iEvent, MuCn); + int MuonNum = L1TkMuonFromExtendedProducer::loadMuons(iEvent, MuCn); LogDebug("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; - int TrackNum = L1TkMuonFromExtendedProducer::keepTracks(iEvent, L1Tk); + int TrackNum = L1TkMuonFromExtendedProducer::loadTracks(iEvent, L1Tk); LogDebug("L1TkMuonFromExtendedProducer") << " TrackNum " << TrackNum; // **** Calculation for Muons **** @@ -336,22 +341,23 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& if (fabs(L1Tk[itk].z) > ZMAX_) continue; if ( L1Tk[itk].chi2 > CHI2MAX_) continue; if ( L1Tk[itk].nstubs < nStubsmin_) continue; + // Do we need it !? // if ( L1Tk[itk].valid) continue; dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[itk].eta, L1Tk[itk].phi); if (dr2 > 0.3) continue; - dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[itk].matchEta, L1Tk[itk].matchPhi); + dr2prop = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[itk].propEta, L1Tk[itk].propPhi); if (dr2prop < drmin) drmin = dr2prop; if (dr2prop < drmin) continue; - float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[itk].matchSigmaEta*L1Tk[itk].matchSigmaEta); - float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[itk].matchSigmaPhi*L1Tk[itk].matchSigmaPhi); - float dEta = std::abs(L1Tk[itk].matchEta - MuCn[imu].eta); - float dPhi = std::abs(deltaPhi(L1Tk[itk].matchPhi, MuCn[imu].phi)); + float etaCut = 3.*sqrt(MuCn[imu].sigmaEta*MuCn[imu].sigmaEta + L1Tk[itk].propSigmaEta*L1Tk[itk].propSigmaEta); + float phiCut = 4.*sqrt(MuCn[imu].sigmaPhi*MuCn[imu].sigmaPhi + L1Tk[itk].propSigmaPhi*L1Tk[itk].propSigmaPhi); + float dEta = std::abs(L1Tk[itk].propEta - MuCn[imu].eta); + float dPhi = std::abs(deltaPhi(L1Tk[itk].propPhi, MuCn[imu].phi)); LogWarning("L1TkMuonFromExtendedProducer") - << " match details: prop Pt "<& tkMuons, -const int& imu, L1MuonCand* MuCn, const int& itk, L1Tracks* L1Tk) +const int imu, L1MuonCand* MuCn, const int itk, L1Tracks* L1Tk) { using namespace edm; using namespace std; From a5ecd0bd90bcf4fc9a0d465a39547c20c3b907f0 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 6 Feb 2015 15:12:03 +0100 Subject: [PATCH 23/55] rename L1Muon L1Track --- .../plugins/L1TkMuonFromExtendedProducer.cc | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 87daeeaf78cb1..34516883247b1 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -71,7 +71,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { }; - struct L1MuonCand { + struct L1Muon { float eta; float phi; float pt; @@ -89,7 +89,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { int Num; }; - struct L1Tracks { + struct L1Track { float pt; int nPars; int q; @@ -107,8 +107,8 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float propSigmaPhi; }; - L1MuonCand MuCn[MuonMax]; - L1Tracks L1Tk[TrackMax]; + L1Muon MuCn[MuonMax]; + L1Track L1Tk[TrackMax]; explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); ~L1TkMuonFromExtendedProducer(); @@ -119,10 +119,10 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { virtual void produce(edm::Event&, const edm::EventSetup&); - int loadMuons(edm::Event&, L1MuonCand*); - int loadTracks(edm::Event&, L1Tracks*); + int loadMuons(edm::Event&, L1Muon*); + int loadTracks(edm::Event&, L1Track*); - void keepTrCand(edm::Event&, std::auto_ptr&, const int, L1MuonCand*, const int, L1Tracks*); + void keepTrCand(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -170,7 +170,7 @@ L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { // ------------ Muon and Tracks converter ------------ int -L1TkMuonFromExtendedProducer::loadMuons(edm::Event& iEvent, L1MuonCand* MuCn) +L1TkMuonFromExtendedProducer::loadMuons(edm::Event& iEvent, L1Muon* MuCn) { using namespace edm; using namespace std; @@ -233,7 +233,7 @@ L1TkMuonFromExtendedProducer::loadMuons(edm::Event& iEvent, L1MuonCand* MuCn) // ------------ Tracks converter ------------ int -L1TkMuonFromExtendedProducer::loadTracks(edm::Event& iEvent, L1Tracks* L1Tk) +L1TkMuonFromExtendedProducer::loadTracks(edm::Event& iEvent, L1Track* L1Tk) { using namespace edm; using namespace std; @@ -379,7 +379,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& // ------------ Tracks candidate ------------ void L1TkMuonFromExtendedProducer::keepTrCand(edm::Event& iEvent, std::auto_ptr& tkMuons, -const int imu, L1MuonCand* MuCn, const int itk, L1Tracks* L1Tk) +const int imu, L1Muon* MuCn, const int itk, L1Track* L1Tk) { using namespace edm; using namespace std; From 99aa6be80dbba19161e19e7098299ee66b18490b Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 6 Feb 2015 15:37:51 +0100 Subject: [PATCH 24/55] add computeTkMuCandidates --- .../plugins/L1TkMuonFromExtendedProducer.cc | 74 +++++++++++++------ 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 34516883247b1..7037524b66119 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -51,6 +51,9 @@ const int MuonMax = 20; // maximum Tracks number const int TrackMax = 300; +// maximum L1 Tracks Candidates number +const int TkMuonMax = 20; + class L1TkMuonFromExtendedProducer : public edm::EDProducer { public: @@ -106,9 +109,22 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float propSigmaEta; float propSigmaPhi; }; - + + struct L1TkMuonCand { + float q; + float pt; + float z; + float eta; + float phi; + float dxy; + int l1TrackIndex; + int l1MuonIndex; + int quality; + }; + L1Muon MuCn[MuonMax]; L1Track L1Tk[TrackMax]; + L1TkMuonCand L1TkCn[TkMuonMax]; explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); ~L1TkMuonFromExtendedProducer(); @@ -119,10 +135,11 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { virtual void produce(edm::Event&, const edm::EventSetup&); - int loadMuons(edm::Event&, L1Muon*); - int loadTracks(edm::Event&, L1Track*); + int loadL1Muons(edm::Event&, L1Muon*); + int loadL1Tracks(edm::Event&, L1Track*); - void keepTrCand(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); + void computeTkMuCandidates(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); + void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -170,7 +187,7 @@ L1TkMuonFromExtendedProducer::~L1TkMuonFromExtendedProducer() { // ------------ Muon and Tracks converter ------------ int -L1TkMuonFromExtendedProducer::loadMuons(edm::Event& iEvent, L1Muon* MuCn) +L1TkMuonFromExtendedProducer::loadL1Muons(edm::Event& iEvent, L1Muon* MuCn) { using namespace edm; using namespace std; @@ -184,13 +201,12 @@ L1TkMuonFromExtendedProducer::loadMuons(edm::Event& iEvent, L1Muon* MuCn) // Muons filling int imu = -1; - int MuonNum = -1; - // int TrackNum = -1; + int nL1Muons = -1; for (auto l1mu : l1mus){ imu++; if( imu tkMuons(new L1TkMuonParticleCollection); - int MuonNum = L1TkMuonFromExtendedProducer::loadMuons(iEvent, MuCn); - LogDebug("L1TkMuonFromExtendedProducer") << " MuonNum " << MuonNum; + int nL1Muons = L1TkMuonFromExtendedProducer::loadL1Muons(iEvent, MuCn); + LogDebug("L1TkMuonFromExtendedProducer") << " nL1Muons " << nL1Muons; - int TrackNum = L1TkMuonFromExtendedProducer::loadTracks(iEvent, L1Tk); - LogDebug("L1TkMuonFromExtendedProducer") << " TrackNum " << TrackNum; + int nL1Tracks = L1TkMuonFromExtendedProducer::loadL1Tracks(iEvent, L1Tk); + LogDebug("L1TkMuonFromExtendedProducer") << " nL1Tracks " << nL1Tracks; // **** Calculation for Muons **** - for (int imu=0; imu ETAMAX_) continue; @@ -332,7 +348,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& float dr2prop = 999.; float drmin = 999.; - for ( int itk=0; itk= 0){ LogDebug("L1TkMuonFromExtendedProducer") << " imu= " << imu << " itk= " << itk << " idx= " << L1Tk[itk].idx; @@ -363,7 +379,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& // Filter for Cuts if (dEta < etaCut && dPhi < phiCut){ - L1TkMuonFromExtendedProducer::keepTrCand(iEvent, tkMuons, imu, MuCn, itk, L1Tk); + L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, imu, MuCn, itk, L1Tk); }// over Cuts } @@ -376,9 +392,19 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& } +// ------------ Tracks candidate computation ------------ +void +L1TkMuonFromExtendedProducer::computeTkMuCandidates(edm::Event& iEvent, std::auto_ptr& tkMuons, +const int imu, L1Muon* MuCn, const int itk, L1Track* L1Tk) +{ + using namespace edm; + using namespace std; + +} + // ------------ Tracks candidate ------------ void -L1TkMuonFromExtendedProducer::keepTrCand(edm::Event& iEvent, std::auto_ptr& tkMuons, +L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(edm::Event& iEvent, std::auto_ptr& tkMuons, const int imu, L1Muon* MuCn, const int itk, L1Track* L1Tk) { using namespace edm; From e7308d3028856ffee5b2ce6fac951ffbb3a0f68b Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 6 Feb 2015 16:28:56 +0100 Subject: [PATCH 25/55] add computeTkMuCandidates --- .../plugins/L1TkMuonFromExtendedProducer.cc | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 7037524b66119..6f647eedba88a 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -138,7 +138,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { int loadL1Muons(edm::Event&, L1Muon*); int loadL1Tracks(edm::Event&, L1Track*); - void computeTkMuCandidates(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); + int computeTkMuCandidates(const int, L1Muon*, const int, L1Track*, L1TkMuonCand*); void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -298,7 +298,7 @@ L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk) LogWarning("L1TkMuonFromExtendedProducer") << " Maximum TrackMaxn number too small " << nL1Tracks; } }//over l1tks - + LogDebug("L1TkMuonFromExtendedProducer") << " ::loadL1Muons nL1Tracks " << nL1Tracks; return nL1Tracks; } @@ -317,8 +317,25 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& int nL1Tracks = L1TkMuonFromExtendedProducer::loadL1Tracks(iEvent, L1Tk); LogDebug("L1TkMuonFromExtendedProducer") << " nL1Tracks " << nL1Tracks; + int nL1TkCand = computeTkMuCandidates(nL1Muons, MuCn, nL1Tracks, L1Tk, L1TkCn); + LogDebug("L1TkMuonFromExtendedProducer") << " nL1TkCand " << nL1TkCand; + + iEvent.put( tkMuons ); + +} + + +// ------------ Tracks candidate computation ------------ +int +L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* MuCn, const int nL1Tracks, L1Track* L1Tk, + L1TkMuonCand* L1TkCn) +{ + using namespace edm; + using namespace std; + // **** Calculation for Muons **** - + int nL1TkCand = -1; + int il1tkcn = -1; for (int imu=0; imu& tkMuons, -const int imu, L1Muon* MuCn, const int itk, L1Track* L1Tk) -{ - using namespace edm; - using namespace std; + nL1TkCand = il1tkcn; + LogDebug("L1TkMuonFromExtendedProducer") << " ::computeTkMuCandidates nL1TkCand " << nL1TkCand; + return nL1TkCand; } From ae41b0b07012717f76fc2370a2b6ba2c3c5d2f9f Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 6 Feb 2015 16:56:22 +0100 Subject: [PATCH 26/55] filling of L1TkMuonCand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 6f647eedba88a..a17b85e404583 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -311,14 +311,17 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& std::auto_ptr tkMuons(new L1TkMuonParticleCollection); - int nL1Muons = L1TkMuonFromExtendedProducer::loadL1Muons(iEvent, MuCn); - LogDebug("L1TkMuonFromExtendedProducer") << " nL1Muons " << nL1Muons; - - int nL1Tracks = L1TkMuonFromExtendedProducer::loadL1Tracks(iEvent, L1Tk); - LogDebug("L1TkMuonFromExtendedProducer") << " nL1Tracks " << nL1Tracks; - - int nL1TkCand = computeTkMuCandidates(nL1Muons, MuCn, nL1Tracks, L1Tk, L1TkCn); - LogDebug("L1TkMuonFromExtendedProducer") << " nL1TkCand " << nL1TkCand; + int nL1Muons = L1TkMuonFromExtendedProducer::loadL1Muons(iEvent, MuCn); + LogDebug("L1TkMuonFromExtendedProducer") << " nL1Muons " << nL1Muons; + + int nL1Tracks = L1TkMuonFromExtendedProducer::loadL1Tracks(iEvent, L1Tk); + LogDebug("L1TkMuonFromExtendedProducer") << " nL1Tracks " << nL1Tracks; + + int nL1TkCand = computeTkMuCandidates(nL1Muons, MuCn, nL1Tracks, L1Tk, L1TkCn); + LogDebug("L1TkMuonFromExtendedProducer") << " nL1TkCand " << nL1TkCand; + + // L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, L1TkCn, nL1TkCand); + ///*** L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, imu, MuCn, itk, L1Tk); iEvent.put( tkMuons ); @@ -398,6 +401,16 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* il1tkcn = il1tkcn + 1; ///*** L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, imu, MuCn, itk, L1Tk); + L1TkCn.q = ; + L1TkCn.pt = ; + L1TkCn.z = ; + L1TkCn.eta = ; + L1TkCn.phi = ; + L1TkCn.dxy = ; + L1TkCn.l1MuonIndex = imu; + L1TkCn.l1TrackIndex = itk; + L1TkCn.quality = ; + }// over Cuts } From db09220dac8cfa786b08a397573836d335984c9e Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 9 Feb 2015 12:01:20 +0100 Subject: [PATCH 27/55] add loadTkMuCandidatesToEvent --- .../plugins/L1TkMuonFromExtendedProducer.cc | 99 ++++++++++--------- 1 file changed, 53 insertions(+), 46 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index a17b85e404583..7b6bad3bc0fb4 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -111,14 +111,16 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { }; struct L1TkMuonCand { - float q; float pt; + int nPars; + float q; float z; float eta; float phi; float dxy; int l1TrackIndex; int l1MuonIndex; + int idx; int quality; }; @@ -139,7 +141,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { int loadL1Tracks(edm::Event&, L1Track*); int computeTkMuCandidates(const int, L1Muon*, const int, L1Track*, L1TkMuonCand*); - void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1Muon*, const int, L1Track*); + void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1TkMuonCand*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -320,8 +322,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& int nL1TkCand = computeTkMuCandidates(nL1Muons, MuCn, nL1Tracks, L1Tk, L1TkCn); LogDebug("L1TkMuonFromExtendedProducer") << " nL1TkCand " << nL1TkCand; - // L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, L1TkCn, nL1TkCand); - ///*** L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, imu, MuCn, itk, L1Tk); + L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, nL1TkCand, L1TkCn); iEvent.put( tkMuons ); @@ -399,18 +400,21 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* // Filter for Cuts if (dEta < etaCut && dPhi < phiCut){ il1tkcn = il1tkcn + 1; + ///*** L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, imu, MuCn, itk, L1Tk); - L1TkCn.q = ; - L1TkCn.pt = ; - L1TkCn.z = ; - L1TkCn.eta = ; - L1TkCn.phi = ; - L1TkCn.dxy = ; - L1TkCn.l1MuonIndex = imu; - L1TkCn.l1TrackIndex = itk; - L1TkCn.quality = ; - + L1TkCn[il1tkcn].nPars = L1Tk[itk].nPars; + L1TkCn[il1tkcn].pt = L1Tk[itk].pt; + L1TkCn[il1tkcn].q = L1Tk[itk].q; + L1TkCn[il1tkcn].z = L1Tk[itk].z; + L1TkCn[il1tkcn].eta = L1Tk[itk].eta; + L1TkCn[il1tkcn].phi = L1Tk[itk].phi; + L1TkCn[il1tkcn].dxy = 0.; // dxy = tkv3.x()*sin(phi) - tkv3.y()*cos(phi) + L1TkCn[il1tkcn].idx = L1Tk[itk].idx; + L1TkCn[il1tkcn].l1MuonIndex = imu; + L1TkCn[il1tkcn].l1TrackIndex = itk; + L1TkCn[il1tkcn].quality = MuCn[imu].quality; + }// over Cuts } @@ -418,7 +422,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* }//over imu nL1TkCand = il1tkcn; - LogDebug("L1TkMuonFromExtendedProducer") << " ::computeTkMuCandidates nL1TkCand " << nL1TkCand; + LogWarning("L1TkMuonFromExtendedProducer") << " ::computeTkMuCandidates nL1TkCand " << nL1TkCand; return nL1TkCand; } @@ -426,7 +430,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* // ------------ Tracks candidate ------------ void L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(edm::Event& iEvent, std::auto_ptr& tkMuons, -const int imu, L1Muon* MuCn, const int itk, L1Track* L1Tk) +const int nL1TkCand, L1TkMuonCand* L1TkCn) { using namespace edm; using namespace std; @@ -435,44 +439,47 @@ const int imu, L1Muon* MuCn, const int itk, L1Track* L1Tk) iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); - Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1Tk[itk].idx); - const L1TkTrackType& matchTk = l1tks[L1Tk[itk].idx]; - - auto p3 = matchTk.getMomentum(L1Tk[itk].nPars); - float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); - - math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); - - auto tkv3=matchTk.getPOCA(L1Tk[itk].nPars); - math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); - - L1Tk[itk].q = matchTk.getRInv(L1Tk[itk].nPars)>0? 1: -1; - - L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1Tk[itk].q, l1tkp4, v3, -13*L1Tk[itk].q )); - - l1tkmu.setTrkPtr(l1tkPtr); - edm::Handle l1musH; iEvent.getByLabel(L1MuonsInputTag_, l1musH); const L1MuonParticleExtendedCollection& l1mus = *l1musH.product(); - + L1TkMuonParticleCollection l1tkmuCands; l1tkmuCands.reserve(l1mus.size()*4); //can do more if really needed LogDebug("L1TkMuonFromExtendedProducer") << " l1tks.size= " << l1tks.size(); + + for ( int il1tkcn=0; il1tkcn<=nL1TkCand; il1tkcn++ ){ - L1MuonParticleExtendedRef l1muRef(l1musH, imu); - l1tkmu.setMuExtendedRef(l1muRef); - - l1tkmu.setQuality(MuCn[imu].quality); - - float trkisol = -999; - l1tkmu.setTrkIsol(trkisol); - - // EP: add the zvtx information - l1tkmu.setTrkzVtx( (float)tkv3.z() ); - - tkMuons->push_back(l1tkmu); + Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1TkCn[il1tkcn].idx); + const L1TkTrackType& matchTk = l1tks[L1TkCn[il1tkcn].idx]; + + auto p3 = matchTk.getMomentum(L1TkCn[il1tkcn].nPars); + float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); + + math::XYZTLorentzVector l1tkp4(p3.x(), p3.y(), p3.z(), p4e); + + auto tkv3=matchTk.getPOCA(L1TkCn[il1tkcn].nPars); + math::XYZPoint v3(tkv3.x(), tkv3.y(), tkv3.z()); + + L1TkCn[il1tkcn].q = matchTk.getRInv(L1TkCn[il1tkcn].nPars)>0? 1: -1; + + L1TkMuonParticle l1tkmu(reco::LeafCandidate(L1TkCn[il1tkcn].q, l1tkp4, v3, -13*L1TkCn[il1tkcn].q )); + + l1tkmu.setTrkPtr(l1tkPtr); + + L1MuonParticleExtendedRef l1muRef(l1musH, L1TkCn[il1tkcn].l1MuonIndex); + l1tkmu.setMuExtendedRef(l1muRef); + + l1tkmu.setQuality(L1TkCn[il1tkcn].quality); + + float trkisol = -999; + l1tkmu.setTrkIsol(trkisol); + + // EP: add the zvtx information + l1tkmu.setTrkzVtx( (float)tkv3.z() ); + + tkMuons->push_back(l1tkmu); + }//over il1tkcn } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ From fe095a911276116a704eef87cf7ed07d3342ca8f Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 9 Feb 2015 12:51:34 +0100 Subject: [PATCH 28/55] update loadTkMuCandidatesToEvent --- .../plugins/L1TkMuonFromExtendedProducer.cc | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 7b6bad3bc0fb4..dd73093e865bd 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -120,7 +120,6 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float dxy; int l1TrackIndex; int l1MuonIndex; - int idx; int quality; }; @@ -401,8 +400,6 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* if (dEta < etaCut && dPhi < phiCut){ il1tkcn = il1tkcn + 1; - ///*** L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, imu, MuCn, itk, L1Tk); - L1TkCn[il1tkcn].nPars = L1Tk[itk].nPars; L1TkCn[il1tkcn].pt = L1Tk[itk].pt; L1TkCn[il1tkcn].q = L1Tk[itk].q; @@ -410,7 +407,6 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* L1TkCn[il1tkcn].eta = L1Tk[itk].eta; L1TkCn[il1tkcn].phi = L1Tk[itk].phi; L1TkCn[il1tkcn].dxy = 0.; // dxy = tkv3.x()*sin(phi) - tkv3.y()*cos(phi) - L1TkCn[il1tkcn].idx = L1Tk[itk].idx; L1TkCn[il1tkcn].l1MuonIndex = imu; L1TkCn[il1tkcn].l1TrackIndex = itk; L1TkCn[il1tkcn].quality = MuCn[imu].quality; @@ -422,7 +418,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* }//over imu nL1TkCand = il1tkcn; - LogWarning("L1TkMuonFromExtendedProducer") << " ::computeTkMuCandidates nL1TkCand " << nL1TkCand; + LogDebug("L1TkMuonFromExtendedProducer") << " ::computeTkMuCandidates nL1TkCand " << nL1TkCand; return nL1TkCand; } @@ -449,8 +445,8 @@ const int nL1TkCand, L1TkMuonCand* L1TkCn) for ( int il1tkcn=0; il1tkcn<=nL1TkCand; il1tkcn++ ){ - Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1TkCn[il1tkcn].idx); - const L1TkTrackType& matchTk = l1tks[L1TkCn[il1tkcn].idx]; + Ptr< L1TkTrackType > l1tkPtr(l1tksH, L1TkCn[il1tkcn].l1TrackIndex); + const L1TkTrackType& matchTk = l1tks[L1TkCn[il1tkcn].l1TrackIndex]; auto p3 = matchTk.getMomentum(L1TkCn[il1tkcn].nPars); float p4e = sqrt(0.105658369*0.105658369 + p3.mag2() ); From f6d0e25f59efc76cf22a079d33cd8f10bfe1b3b7 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 11 Feb 2015 10:35:39 +0100 Subject: [PATCH 29/55] update L1Track and L1Cand --- .../plugins/L1TkMuonFromExtendedProducer.cc | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index dd73093e865bd..9f11ea90cd461 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -100,6 +100,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float chi2; float eta; float phi; + float dxy; int nstubs; int idx; bool valid; @@ -110,7 +111,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float propSigmaPhi; }; - struct L1TkMuonCand { + struct L1Cand { float pt; int nPars; float q; @@ -125,7 +126,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { L1Muon MuCn[MuonMax]; L1Track L1Tk[TrackMax]; - L1TkMuonCand L1TkCn[TkMuonMax]; + L1Cand L1TkCn[TkMuonMax]; explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); ~L1TkMuonFromExtendedProducer(); @@ -139,8 +140,8 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { int loadL1Muons(edm::Event&, L1Muon*); int loadL1Tracks(edm::Event&, L1Track*); - int computeTkMuCandidates(const int, L1Muon*, const int, L1Track*, L1TkMuonCand*); - void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1TkMuonCand*); + int computeTkMuCandidates(const int, L1Muon*, const int, L1Track*, L1Cand*); + void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1Cand*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; @@ -279,6 +280,11 @@ L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk) L1Tk[il1tk].eta = l1tk.getMomentum(nPars).eta(); L1Tk[il1tk].phi = l1tk.getMomentum(nPars).phi(); + // **** + const L1TkTrackType& matchTk = l1tks[il1tk]; + auto tkv3=matchTk.getPOCA(L1Tk[il1tk].nPars); + L1Tk[il1tk].dxy = tkv3.x()*sin(L1Tk[il1tk].phi) - tkv3.y()*cos(L1Tk[il1tk].phi); + L1Tk[il1tk].idx = il1tk; PropState pstate = propagateToGMT(l1tk); @@ -331,7 +337,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& // ------------ Tracks candidate computation ------------ int L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* MuCn, const int nL1Tracks, L1Track* L1Tk, - L1TkMuonCand* L1TkCn) + L1Cand* L1TkCn) { using namespace edm; using namespace std; @@ -406,7 +412,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* L1TkCn[il1tkcn].z = L1Tk[itk].z; L1TkCn[il1tkcn].eta = L1Tk[itk].eta; L1TkCn[il1tkcn].phi = L1Tk[itk].phi; - L1TkCn[il1tkcn].dxy = 0.; // dxy = tkv3.x()*sin(phi) - tkv3.y()*cos(phi) + L1TkCn[il1tkcn].dxy = L1Tk[itk].dxy; L1TkCn[il1tkcn].l1MuonIndex = imu; L1TkCn[il1tkcn].l1TrackIndex = itk; L1TkCn[il1tkcn].quality = MuCn[imu].quality; @@ -426,7 +432,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* // ------------ Tracks candidate ------------ void L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(edm::Event& iEvent, std::auto_ptr& tkMuons, -const int nL1TkCand, L1TkMuonCand* L1TkCn) +const int nL1TkCand, L1Cand* L1TkCn) { using namespace edm; using namespace std; From 4edd367b32c8255140943e60e54d78b221346c3f Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 8 May 2015 09:54:51 +0200 Subject: [PATCH 30/55] TrackMax = 400 --- .../L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 9f11ea90cd461..62c755b06b28f 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -49,7 +49,7 @@ using namespace l1extra; const int MuonMax = 20; // maximum Tracks number -const int TrackMax = 300; +const int TrackMax = 400; // maximum L1 Tracks Candidates number const int TkMuonMax = 20; @@ -397,7 +397,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* float dEta = std::abs(L1Tk[itk].propEta - MuCn[imu].eta); float dPhi = std::abs(deltaPhi(L1Tk[itk].propPhi, MuCn[imu].phi)); - LogWarning("L1TkMuonFromExtendedProducer") + LogDebug("L1TkMuonFromExtendedProducer") << " match details: prop Pt "< Date: Tue, 19 May 2015 12:06:19 +0200 Subject: [PATCH 31/55] add diapasons for Muons and Tracks --- .../plugins/L1TkMuonFromExtendedProducer.cc | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 62c755b06b28f..a1bf1d3ad079f 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -45,6 +45,9 @@ using namespace l1extra; // class declaration // +float minV=1000.; +float maxV=-1000.; + // maximum Muons number const int MuonMax = 20; @@ -200,6 +203,15 @@ L1TkMuonFromExtendedProducer::loadL1Muons(edm::Event& iEvent, L1Muon* MuCn) LogDebug("L1TkMuonFromExtendedProducer") << " l1mus.size= " << l1mus.size(); + /* L1 Muons diapasons: + * min max + * Eta -2.425 2.425 + * Phi -3.14159 3.09796 + * pt 2 140 + * sigmaEta 0.0144337 0.0288675 + * sigmaPhi 0 0.0125959 + */ + // Muons filling int imu = -1; @@ -209,16 +221,17 @@ L1TkMuonFromExtendedProducer::loadL1Muons(edm::Event& iEvent, L1Muon* MuCn) if( imu l1tksH; iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); @@ -284,17 +314,17 @@ L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk) const L1TkTrackType& matchTk = l1tks[il1tk]; auto tkv3=matchTk.getPOCA(L1Tk[il1tk].nPars); L1Tk[il1tk].dxy = tkv3.x()*sin(L1Tk[il1tk].phi) - tkv3.y()*cos(L1Tk[il1tk].phi); - L1Tk[il1tk].idx = il1tk; PropState pstate = propagateToGMT(l1tk); if (!pstate.valid) { L1Tk[il1tk].valid = true; - } else { L1Tk[il1tk].valid = false; + } else { + L1Tk[il1tk].valid = false; }; - L1Tk[il1tk].propPt = pstate.pt; + L1Tk[il1tk].propPt = pstate.pt; L1Tk[il1tk].propEta = pstate.eta; L1Tk[il1tk].propPhi = pstate.phi; L1Tk[il1tk].propSigmaEta = pstate.sigmaEta; @@ -540,9 +570,9 @@ const { dest.eta = tk_eta + deta; dest.phi = resPhi; dest.pt = tk_pt; //not corrected for eloss - dest.sigmaEta = 0.100/tk_pt; //multiple scattering term dest.sigmaPhi = 0.106/tk_pt; //need a better estimate for these + return dest; } From f1500e52a89536df03a6f4182aeb2c4fb5c312d7 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 29 May 2015 13:23:49 +0200 Subject: [PATCH 32/55] add interface/L1MUTK.h python/L1MUTK_cfi.py python/candMaker_cfi.py src/L1MUTK.cc src/L1MuTkCandMaker.cc --- DQM/L1TMonitor/interface/L1MUTK.h | 85 ++++++++++++++++ DQM/L1TMonitor/python/L1MUTK_cfi.py | 10 ++ DQM/L1TMonitor/python/candMaker_cfi.py | 7 ++ DQM/L1TMonitor/src/L1MUTK.cc | 136 +++++++++++++++++++++++++ DQM/L1TMonitor/src/L1MuTkCandMaker.cc | 93 +++++++++++++++++ 5 files changed, 331 insertions(+) create mode 100755 DQM/L1TMonitor/interface/L1MUTK.h create mode 100644 DQM/L1TMonitor/python/L1MUTK_cfi.py create mode 100644 DQM/L1TMonitor/python/candMaker_cfi.py create mode 100755 DQM/L1TMonitor/src/L1MUTK.cc create mode 100644 DQM/L1TMonitor/src/L1MuTkCandMaker.cc diff --git a/DQM/L1TMonitor/interface/L1MUTK.h b/DQM/L1TMonitor/interface/L1MUTK.h new file mode 100755 index 0000000000000..5901bb9897d25 --- /dev/null +++ b/DQM/L1TMonitor/interface/L1MUTK.h @@ -0,0 +1,85 @@ +#ifndef L1MUTK_H +#define L1MUTK_H + +/* + * \file L1MUTK.h + * + * $Date: 2015/05/29 12:00:00 $ + * $Revision: 0.01 $ + * \author S.Baranov + * +*/ + +// system include files +#include +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h" +#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h" +#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTExtendedCand.h" +#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h" + +#include +#include +#include + +// +// class decleration +// + +class L1MUTK : public edm::EDAnalyzer { + +public: + +// Constructor +L1MUTK(const edm::ParameterSet& ps); + +// Destructor +virtual ~L1MUTK(); + +protected: +// Analyze +void analyze(const edm::Event& e, const edm::EventSetup& c); + +// BeginJob +void beginJob(void); + +// BeginRun +void beginRun(const edm::Run& r, const edm::EventSetup& c); + +// EndJob +void endJob(void); + +private: + // ----------member data --------------------------- + DQMStore * dbe; + + MonitorElement* regional_triggers; + + int nev_; // Number of events processed + std::string outputFile_; //file name for ROOT ouput + bool verbose_; + bool monitorDaemon_; + ofstream logFile_; + edm::InputTag gmtSource_ ; + + static const double piconv_; + double phiconv_(float phi); + void book_(const edm::EventSetup& c); +}; + +#endif diff --git a/DQM/L1TMonitor/python/L1MUTK_cfi.py b/DQM/L1TMonitor/python/L1MUTK_cfi.py new file mode 100644 index 0000000000000..8a84850be360f --- /dev/null +++ b/DQM/L1TMonitor/python/L1MUTK_cfi.py @@ -0,0 +1,10 @@ +import FWCore.ParameterSet.Config as cms + +l1MuTk = cms.EDAnalyzer("L1MUTK", + disableROOToutput = cms.untracked.bool(True), + verbose = cms.untracked.bool(False), + gmtSource = cms.InputTag("gtDigis"), + DQMStore = cms.untracked.bool(True) +) + + diff --git a/DQM/L1TMonitor/python/candMaker_cfi.py b/DQM/L1TMonitor/python/candMaker_cfi.py new file mode 100644 index 0000000000000..3030912e3f95f --- /dev/null +++ b/DQM/L1TMonitor/python/candMaker_cfi.py @@ -0,0 +1,7 @@ +import FWCore.ParameterSet.Config as cms + +candMaker = cms.EDProducer( + "L1MuTkCandMaker", + aliasPrefix = cms.untracked.string("cands"), + candInputTag = cms.InputTag("") + ) diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc new file mode 100755 index 0000000000000..e462383208856 --- /dev/null +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -0,0 +1,136 @@ +/* + * \file L1MUTK.cc + * + * $Date: 2015/05/29 12:00:00 $ + * $Revision: 0.01 $ + * \author S.Baranov + * + */ + +#include "DQM/L1TMonitor/interface/L1MUTK.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "CondFormats/L1TObjects/interface/L1MuTriggerScales.h" +#include "CondFormats/DataRecord/interface/L1MuTriggerScalesRcd.h" +#include "CondFormats/L1TObjects/interface/L1MuTriggerPtScale.h" +#include "CondFormats/DataRecord/interface/L1MuTriggerPtScaleRcd.h" + +using namespace std; +using namespace edm; + +const double L1MUTK::piconv_ = 180. / acos(-1.); + +L1MUTK::L1MUTK(const ParameterSet& ps) + : gmtSource_( ps.getParameter< InputTag >("gmtSource") ) + { + + // verbosity switch + verbose_ = ps.getUntrackedParameter("verbose", false); + + if(verbose_) cout << "L1MUTK: constructor...." << endl; + + + dbe = NULL; + if ( ps.getUntrackedParameter("DQMStore", false) ) + { + dbe = Service().operator->(); + dbe->setVerbose(0); + } + + outputFile_ = ps.getUntrackedParameter("outputFile", ""); + if ( outputFile_.size() != 0 ) { + cout << "L1T Monitoring histograms will be saved to " << outputFile_.c_str() << endl; + } + + bool disable = ps.getUntrackedParameter("disableROOToutput", false); + if(disable){ + outputFile_=""; + } + + + if ( dbe !=NULL ) { + dbe->setCurrentFolder("L1T/L1MUTK"); + } + +} + +L1MUTK::~L1MUTK() +{ +} + +void L1MUTK::beginJob() +{ + nev_ = 0; +} + +void L1MUTK::beginRun(const edm::Run& r, const edm::EventSetup& c) +{ + if(nev_==0) { + book_(c); + } +} + +void L1MUTK::endJob(void) +{ + if(verbose_) cout << "L1MUTK: end job...." << endl; + LogInfo("EndJob") << "analyzed " << nev_ << " events"; + + if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_); + + return; +} + +void L1MUTK::analyze(const Event& e, const EventSetup& c) +{ + + nev_++; + if(verbose_) cout << "L1MUTK: analyze...." << endl; + + edm::Handle pCollection; + e.getByLabel(gmtSource_,pCollection); + + if (!pCollection.isValid()) { + edm::LogInfo("DataNotFound") << "can't find L1MuGMTReadoutCollection with label " + << gmtSource_.label() ; + return; + } + +} + +void L1MUTK::book_(const EventSetup& c) +{ + edm::ESHandle< L1MuTriggerScales > trigscales_h; + c.get< L1MuTriggerScalesRcd >().get( trigscales_h ); + //const L1MuTriggerScales* scales = trigscales_h.product(); + + edm::ESHandle< L1MuTriggerPtScale > trigptscale_h; + c.get< L1MuTriggerPtScaleRcd >().get( trigptscale_h ); + //const L1MuTriggerPtScale* scalept = trigptscale_h.product(); + + // get hold of back-end interface + DQMStore* dbe = 0; + dbe = Service().operator->(); + + if ( dbe ) { + dbe->setCurrentFolder("L1T/L1MUTK"); + dbe->rmdir("L1T/L1MUTK"); + } + + if ( dbe ) + { + dbe->setCurrentFolder("L1T/L1MUTK"); + + std::string hname(""); + std::string htitle(""); + + regional_triggers = dbe->book1D("Regional_trigger","Muon trigger contribution", 27, 0., 27.); + regional_triggers->setAxisTitle("regional trigger",1); + int ib=1; + regional_triggers->setBinLabel(ib++,"All muons",1); + + } +} + + diff --git a/DQM/L1TMonitor/src/L1MuTkCandMaker.cc b/DQM/L1TMonitor/src/L1MuTkCandMaker.cc new file mode 100644 index 0000000000000..1060fd4ab9d05 --- /dev/null +++ b/DQM/L1TMonitor/src/L1MuTkCandMaker.cc @@ -0,0 +1,93 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DataFormats/Candidate/interface/LeafCandidate.h" + +using namespace std; +using namespace edm; +using namespace reco; + +class L1MuTkCandMaker : public edm::EDProducer { +public: + typedef edm::View CandView; + explicit L1MuTkCandMaker (const edm::ParameterSet&); + ~L1MuTkCandMaker() {}; + +private: + virtual void produce(edm::Event&, const edm::EventSetup&); + + // ----------member data --------------------------- + edm::InputTag candInputTag_; + std::string aliasprefix_; +}; + + +L1MuTkCandMaker::L1MuTkCandMaker(const edm::ParameterSet& iConfig) { + aliasprefix_ = iConfig.getUntrackedParameter("aliasPrefix", "cands"); + + LogWarning("L1MuTkCandMaker::L1MuTkCandMaker") << " aliasprefix_ = " << aliasprefix_; + + std::string branchprefix = aliasprefix_; + if(branchprefix.find("_") != std::string::npos) + branchprefix.replace(branchprefix.find("_"),1,""); + + produces > (branchprefix+"vx" ).setBranchAlias(aliasprefix_+"_vx" ); + produces > (branchprefix+"vy" ).setBranchAlias(aliasprefix_+"_vy" ); + produces > (branchprefix+"vz" ).setBranchAlias(aliasprefix_+"_vz" ); + produces > (branchprefix+"pt" ).setBranchAlias(aliasprefix_+"_pt" ); + produces > (branchprefix+"eta" ).setBranchAlias(aliasprefix_+"_eta" ); + produces > (branchprefix+"phi" ).setBranchAlias(aliasprefix_+"_phi" ); + produces > (branchprefix+"q" ).setBranchAlias(aliasprefix_+"_q" ); + produces > (branchprefix+"pdgid" ).setBranchAlias(aliasprefix_+"_pdgid" ); + + // input tags + candInputTag_ = iConfig.getParameter("candInputTag"); +} + + +void L1MuTkCandMaker::produce(edm::Event& ev, const edm::EventSetup& es){ + + LogWarning("L1MuTkCandMaker") << " ::produce "; + + auto_ptr > cands_vx (new vector ); + auto_ptr > cands_vy (new vector ); + auto_ptr > cands_vz (new vector ); + auto_ptr > cands_pt (new vector ); + auto_ptr > cands_eta (new vector ); + auto_ptr > cands_phi (new vector ); + auto_ptr > cands_q (new vector); + auto_ptr > cands_pdgid (new vector); + + + Handle aH; + ev.getByLabel(candInputTag_, aH); + const CandView& cands(*aH.product()); + + for (auto cand : cands){ + cands_vx->push_back(cand.vx()); + cands_vy->push_back(cand.vy()); + cands_vz->push_back(cand.vz()); + cands_pt->push_back(cand.pt()); + cands_eta->push_back(cand.eta()); + cands_phi->push_back(cand.phi()); + cands_q->push_back(cand.charge()); + cands_pdgid->push_back(cand.pdgId()); + cout << " cand.pt " << cand.pt() << " cand.pdgId " << cand.pdgId() << endl; + } + /* + ev.put(cands_vx, aliasprefix_+"vx"); + ev.put(cands_vy, aliasprefix_+"vy"); + ev.put(cands_vz, aliasprefix_+"vz"); + ev.put(cands_pt, aliasprefix_+"pt"); + ev.put(cands_eta, aliasprefix_+"eta"); + ev.put(cands_phi, aliasprefix_+"phi"); + ev.put(cands_q , aliasprefix_+"q"); + ev.put(cands_pdgid, aliasprefix_+"pdgid"); + */ +} + +DEFINE_FWK_MODULE(L1MuTkCandMaker); + From a0c6b44bba4482ea6f03c2a42f1d13c006b4050c Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 29 May 2015 13:25:29 +0200 Subject: [PATCH 33/55] updated python/L1TMonitor_cff.py src/SealModule.cc --- DQM/L1TMonitor/python/L1TMonitor_cff.py | 4 ++++ DQM/L1TMonitor/src/SealModule.cc | 3 +++ 2 files changed, 7 insertions(+) diff --git a/DQM/L1TMonitor/python/L1TMonitor_cff.py b/DQM/L1TMonitor/python/L1TMonitor_cff.py index 2e3f915b91b14..1bd522212a721 100644 --- a/DQM/L1TMonitor/python/L1TMonitor_cff.py +++ b/DQM/L1TMonitor/python/L1TMonitor_cff.py @@ -52,6 +52,9 @@ # GMT DQM module from DQM.L1TMonitor.L1TGMT_cfi import * +# MUTK DQM module +from DQM.L1TMonitor.L1MUTK_cfi import * + # GT DQM module from DQM.L1TMonitor.L1TGT_cfi import * @@ -110,6 +113,7 @@ l1tCsctf + l1tRpctf + l1tGmt + + l1MuTk + l1tGt + l1ExtraDqmSeq + l1tBPTX + diff --git a/DQM/L1TMonitor/src/SealModule.cc b/DQM/L1TMonitor/src/SealModule.cc index 093e410586e8f..91294589401c1 100644 --- a/DQM/L1TMonitor/src/SealModule.cc +++ b/DQM/L1TMonitor/src/SealModule.cc @@ -27,6 +27,9 @@ DEFINE_FWK_MODULE(L1TRPCTF); #include DEFINE_FWK_MODULE(L1TGMT); +#include +DEFINE_FWK_MODULE(L1MUTK); + #include DEFINE_FWK_MODULE(L1TGCT); From e7c39a97b818a4a688b174a1b41519896a9a30fa Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 29 May 2015 16:27:08 +0200 Subject: [PATCH 34/55] Up --- DQM/L1TMonitor/interface/L1MUTK.h | 57 +++++++++++++++++---------- DQM/L1TMonitor/src/L1MUTK.cc | 30 ++++---------- DQM/L1TMonitor/src/L1MuTkCandMaker.cc | 18 +++++---- 3 files changed, 54 insertions(+), 51 deletions(-) diff --git a/DQM/L1TMonitor/interface/L1MUTK.h b/DQM/L1TMonitor/interface/L1MUTK.h index 5901bb9897d25..e699c9f6e72b2 100755 --- a/DQM/L1TMonitor/interface/L1MUTK.h +++ b/DQM/L1TMonitor/interface/L1MUTK.h @@ -17,6 +17,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -28,15 +29,14 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h" -#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTCand.h" -#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTExtendedCand.h" -#include "DataFormats/L1GlobalMuonTrigger/interface/L1MuGMTReadoutCollection.h" +#include "DataFormats/Candidate/interface/LeafCandidate.h" #include #include #include +using namespace reco; + // // class decleration // @@ -45,25 +45,27 @@ class L1MUTK : public edm::EDAnalyzer { public: -// Constructor -L1MUTK(const edm::ParameterSet& ps); - -// Destructor -virtual ~L1MUTK(); + // Constructor + L1MUTK(const edm::ParameterSet& ps); + + // Destructor + virtual ~L1MUTK(); + typedef edm::View CandView; + protected: -// Analyze -void analyze(const edm::Event& e, const edm::EventSetup& c); - -// BeginJob -void beginJob(void); - -// BeginRun -void beginRun(const edm::Run& r, const edm::EventSetup& c); - -// EndJob -void endJob(void); - + // Analyze + void analyze(const edm::Event& e, const edm::EventSetup& c); + + // BeginJob + void beginJob(void); + + // BeginRun + void beginRun(const edm::Run& r, const edm::EventSetup& c); + + // EndJob + void endJob(void); + private: // ----------member data --------------------------- DQMStore * dbe; @@ -80,6 +82,19 @@ void endJob(void); static const double piconv_; double phiconv_(float phi); void book_(const edm::EventSetup& c); + + edm::InputTag candInputTag_; + }; +/* +class L1MuTkCandM : public edm::EDProducer { +public: + typedef edm::View CandView; + explicit L1MuTkCandM (const edm::ParameterSet&); + +private: + virtual void produce(edm::Event&, const edm::EventSetup&); +}; +*/ #endif diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index e462383208856..1432a578f6258 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -12,13 +12,10 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/ESHandle.h" -#include "CondFormats/L1TObjects/interface/L1MuTriggerScales.h" -#include "CondFormats/DataRecord/interface/L1MuTriggerScalesRcd.h" -#include "CondFormats/L1TObjects/interface/L1MuTriggerPtScale.h" -#include "CondFormats/DataRecord/interface/L1MuTriggerPtScaleRcd.h" using namespace std; using namespace edm; +using namespace reco; const double L1MUTK::piconv_ = 180. / acos(-1.); @@ -31,7 +28,6 @@ L1MUTK::L1MUTK(const ParameterSet& ps) if(verbose_) cout << "L1MUTK: constructor...." << endl; - dbe = NULL; if ( ps.getUntrackedParameter("DQMStore", false) ) { @@ -86,29 +82,19 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) { nev_++; - if(verbose_) cout << "L1MUTK: analyze...." << endl; + LogWarning("L1MUTK") << " ::analyze "; - edm::Handle pCollection; - e.getByLabel(gmtSource_,pCollection); - - if (!pCollection.isValid()) { - edm::LogInfo("DataNotFound") << "can't find L1MuGMTReadoutCollection with label " - << gmtSource_.label() ; - return; - } + edm::Handle aH; + e.getByLabel(candInputTag_, aH); + const CandView& cands(*aH.product()); + for (auto cand : cands){ + cout << " L1MUTK: cand.pt " << cand.pt() << " cand.pdgId " << cand.pdgId() << endl; + } } void L1MUTK::book_(const EventSetup& c) { - edm::ESHandle< L1MuTriggerScales > trigscales_h; - c.get< L1MuTriggerScalesRcd >().get( trigscales_h ); - //const L1MuTriggerScales* scales = trigscales_h.product(); - - edm::ESHandle< L1MuTriggerPtScale > trigptscale_h; - c.get< L1MuTriggerPtScaleRcd >().get( trigptscale_h ); - //const L1MuTriggerPtScale* scalept = trigptscale_h.product(); - // get hold of back-end interface DQMStore* dbe = 0; dbe = Service().operator->(); diff --git a/DQM/L1TMonitor/src/L1MuTkCandMaker.cc b/DQM/L1TMonitor/src/L1MuTkCandMaker.cc index 1060fd4ab9d05..865494657693d 100644 --- a/DQM/L1TMonitor/src/L1MuTkCandMaker.cc +++ b/DQM/L1TMonitor/src/L1MuTkCandMaker.cc @@ -26,14 +26,14 @@ class L1MuTkCandMaker : public edm::EDProducer { L1MuTkCandMaker::L1MuTkCandMaker(const edm::ParameterSet& iConfig) { - aliasprefix_ = iConfig.getUntrackedParameter("aliasPrefix", "cands"); + aliasprefix_ = iConfig.getUntrackedParameter("aliasPrefix", "cands"); LogWarning("L1MuTkCandMaker::L1MuTkCandMaker") << " aliasprefix_ = " << aliasprefix_; std::string branchprefix = aliasprefix_; if(branchprefix.find("_") != std::string::npos) branchprefix.replace(branchprefix.find("_"),1,""); - + /* produces > (branchprefix+"vx" ).setBranchAlias(aliasprefix_+"_vx" ); produces > (branchprefix+"vy" ).setBranchAlias(aliasprefix_+"_vy" ); produces > (branchprefix+"vz" ).setBranchAlias(aliasprefix_+"_vz" ); @@ -42,6 +42,7 @@ L1MuTkCandMaker::L1MuTkCandMaker(const edm::ParameterSet& iConfig) { produces > (branchprefix+"phi" ).setBranchAlias(aliasprefix_+"_phi" ); produces > (branchprefix+"q" ).setBranchAlias(aliasprefix_+"_q" ); produces > (branchprefix+"pdgid" ).setBranchAlias(aliasprefix_+"_pdgid" ); + */ // input tags candInputTag_ = iConfig.getParameter("candInputTag"); @@ -51,22 +52,22 @@ L1MuTkCandMaker::L1MuTkCandMaker(const edm::ParameterSet& iConfig) { void L1MuTkCandMaker::produce(edm::Event& ev, const edm::EventSetup& es){ LogWarning("L1MuTkCandMaker") << " ::produce "; - + /* auto_ptr > cands_vx (new vector ); auto_ptr > cands_vy (new vector ); auto_ptr > cands_vz (new vector ); auto_ptr > cands_pt (new vector ); auto_ptr > cands_eta (new vector ); auto_ptr > cands_phi (new vector ); - auto_ptr > cands_q (new vector); - auto_ptr > cands_pdgid (new vector); - - + auto_ptr > cands_q (new vector ); + auto_ptr > cands_pdgid (new vector ); + */ Handle aH; ev.getByLabel(candInputTag_, aH); const CandView& cands(*aH.product()); for (auto cand : cands){ + /* cands_vx->push_back(cand.vx()); cands_vy->push_back(cand.vy()); cands_vz->push_back(cand.vz()); @@ -75,7 +76,8 @@ void L1MuTkCandMaker::produce(edm::Event& ev, const edm::EventSetup& es){ cands_phi->push_back(cand.phi()); cands_q->push_back(cand.charge()); cands_pdgid->push_back(cand.pdgId()); - cout << " cand.pt " << cand.pt() << " cand.pdgId " << cand.pdgId() << endl; + */ + cout << " produce: cand.pt " << cand.pt() << " cand.pdgId " << cand.pdgId() << endl; } /* ev.put(cands_vx, aliasprefix_+"vx"); From 1d16ae252363a93b6e5a33d1ca10192f7bc1554b Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 1 Jun 2015 18:36:55 +0200 Subject: [PATCH 35/55] candInputTag has been added --- DQM/L1TMonitor/interface/L1MUTK.h | 6 ++++-- DQM/L1TMonitor/python/L1MUTK_cfi.py | 5 ++--- DQM/L1TMonitor/src/L1MUTK.cc | 22 +++++++++++++++++----- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/DQM/L1TMonitor/interface/L1MUTK.h b/DQM/L1TMonitor/interface/L1MUTK.h index e699c9f6e72b2..00ce9323ab413 100755 --- a/DQM/L1TMonitor/interface/L1MUTK.h +++ b/DQM/L1TMonitor/interface/L1MUTK.h @@ -17,7 +17,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -#include "FWCore/Framework/interface/EDProducer.h" +//#include "FWCore/Framework/interface/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -70,7 +70,9 @@ class L1MUTK : public edm::EDAnalyzer { // ----------member data --------------------------- DQMStore * dbe; - MonitorElement* regional_triggers; + MonitorElement* gem_Pt; + MonitorElement* gem_Eta; + MonitorElement* gem_Phi; int nev_; // Number of events processed std::string outputFile_; //file name for ROOT ouput diff --git a/DQM/L1TMonitor/python/L1MUTK_cfi.py b/DQM/L1TMonitor/python/L1MUTK_cfi.py index 8a84850be360f..7d463dcef79ef 100644 --- a/DQM/L1TMonitor/python/L1MUTK_cfi.py +++ b/DQM/L1TMonitor/python/L1MUTK_cfi.py @@ -4,7 +4,6 @@ disableROOToutput = cms.untracked.bool(True), verbose = cms.untracked.bool(False), gmtSource = cms.InputTag("gtDigis"), - DQMStore = cms.untracked.bool(True) + DQMStore = cms.untracked.bool(True), + candInputTag = cms.InputTag("L1TkMuonsMerge") ) - - diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index 1432a578f6258..fa4dc92d1bc52 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -45,6 +45,9 @@ L1MUTK::L1MUTK(const ParameterSet& ps) outputFile_=""; } + // input tags + candInputTag_ = ps.getParameter("candInputTag"); + cout << " L1MUTK::L1MUTK candInputTag " << candInputTag_ << endl; if ( dbe !=NULL ) { dbe->setCurrentFolder("L1T/L1MUTK"); @@ -82,10 +85,15 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) { nev_++; - LogWarning("L1MUTK") << " ::analyze "; + LogWarning("L1MUTK") << " ::analyze "<< candInputTag_; edm::Handle aH; e.getByLabel(candInputTag_, aH); + + if(!aH.isValid()){ + cout << " L1MUTK: aH.isValid()) : Can't find CandView with label" << candInputTag_ << endl; + } + const CandView& cands(*aH.product()); for (auto cand : cands){ @@ -111,10 +119,14 @@ void L1MUTK::book_(const EventSetup& c) std::string hname(""); std::string htitle(""); - regional_triggers = dbe->book1D("Regional_trigger","Muon trigger contribution", 27, 0., 27.); - regional_triggers->setAxisTitle("regional trigger",1); - int ib=1; - regional_triggers->setBinLabel(ib++,"All muons",1); + gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100, 0., 70.); + gem_Pt->setAxisTitle("gem_Pt",1); + + gem_Phi = dbe->book1D("gem_Phi","L1 Muon GEM Phi", 100, -3., 3.); + gem_Phi->setAxisTitle("gem_Phi",1); + + gem_Eta = dbe->book1D("gem_Eta","L1 Muon GEM Eta", 100, 0., 6.2832); + gem_Eta->setAxisTitle("gem_Eta",1); } } From aa38959bd09afe610bd35d64ab962261f4c63df2 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 2 Jun 2015 11:31:01 +0200 Subject: [PATCH 36/55] GEM DQM histograms wrere added --- DQM/L1TMonitor/interface/L1MUTK.h | 15 ++++--------- DQM/L1TMonitor/src/L1MUTK.cc | 37 ++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/DQM/L1TMonitor/interface/L1MUTK.h b/DQM/L1TMonitor/interface/L1MUTK.h index 00ce9323ab413..a4968d4aa6ba0 100755 --- a/DQM/L1TMonitor/interface/L1MUTK.h +++ b/DQM/L1TMonitor/interface/L1MUTK.h @@ -73,6 +73,10 @@ class L1MUTK : public edm::EDAnalyzer { MonitorElement* gem_Pt; MonitorElement* gem_Eta; MonitorElement* gem_Phi; + MonitorElement* gem_Dxy; + MonitorElement* gem_Z; + MonitorElement* gem_Q; + MonitorElement* gem_Pdgid; int nev_; // Number of events processed std::string outputFile_; //file name for ROOT ouput @@ -88,15 +92,4 @@ class L1MUTK : public edm::EDAnalyzer { edm::InputTag candInputTag_; }; - -/* -class L1MuTkCandM : public edm::EDProducer { -public: - typedef edm::View CandView; - explicit L1MuTkCandM (const edm::ParameterSet&); - -private: - virtual void produce(edm::Event&, const edm::EventSetup&); -}; -*/ #endif diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index fa4dc92d1bc52..cdf98b969ac1a 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -85,19 +85,28 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) { nev_++; - LogWarning("L1MUTK") << " ::analyze "<< candInputTag_; edm::Handle aH; e.getByLabel(candInputTag_, aH); if(!aH.isValid()){ - cout << " L1MUTK: aH.isValid()) : Can't find CandView with label" << candInputTag_ << endl; + LogWarning("L1MUTK") << " ::analyze Can't find CandView with label **candInputTag**"; } const CandView& cands(*aH.product()); + double dxy; for (auto cand : cands){ - cout << " L1MUTK: cand.pt " << cand.pt() << " cand.pdgId " << cand.pdgId() << endl; + dxy = cand.vx()*sin(cand.phi())-cand.vy()*cos(cand.phi()); + LogWarning("L1MUTK") << " ::analyze Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy + << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); + gem_Pt->Fill(cand.pt()); + gem_Phi->Fill(cand.phi()); + gem_Eta->Fill(cand.eta()); + gem_Dxy->Fill(dxy); + gem_Z->Fill(cand.vz()); + gem_Q->Fill(float(cand.charge())); + gem_Pdgid->Fill(float(cand.pdgId())); } } @@ -116,19 +125,25 @@ void L1MUTK::book_(const EventSetup& c) { dbe->setCurrentFolder("L1T/L1MUTK"); - std::string hname(""); - std::string htitle(""); - - gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100, 0., 70.); + gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100,0.,70. ); gem_Pt->setAxisTitle("gem_Pt",1); - gem_Phi = dbe->book1D("gem_Phi","L1 Muon GEM Phi", 100, -3., 3.); + gem_Phi = dbe->book1D("gem_Phi","L1 Muon GEM Phi", 100,-3.,3. ); gem_Phi->setAxisTitle("gem_Phi",1); - gem_Eta = dbe->book1D("gem_Eta","L1 Muon GEM Eta", 100, 0., 6.2832); + gem_Eta = dbe->book1D("gem_Eta","L1 Muon GEM Eta", 100,-3.,3. ); gem_Eta->setAxisTitle("gem_Eta",1); - } -} + gem_Dxy = dbe->book1D("gem_Dxy","L1 Muon GEM Dxy", 100,-15.,15. ); + gem_Dxy->setAxisTitle("gem_Dxy",1); + gem_Z = dbe->book1D("gem_Z","L1 Muon GEM Z", 100,-15.,15. ); + gem_Z->setAxisTitle("gem_Z",1); + gem_Q = dbe->book1D("gem_Q","L1 Muon GEM Q", 4,-2.,2. ); + gem_Q->setAxisTitle("gem_Q",1); + + gem_Pdgid = dbe->book1D("gem_Pdgid","L1 Muon GEM Pdgid", 100,-50.,50. ); + gem_Pdgid->setAxisTitle("gem_Pdgid",1); + } +} From 3de4ad00ed1099803930243c0b2177b36a13c72c Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 2 Jun 2015 13:13:33 +0200 Subject: [PATCH 37/55] remove L1MuTkCandMaker.cc --- DQM/L1TMonitor/src/L1MuTkCandMaker.cc | 95 --------------------------- 1 file changed, 95 deletions(-) delete mode 100644 DQM/L1TMonitor/src/L1MuTkCandMaker.cc diff --git a/DQM/L1TMonitor/src/L1MuTkCandMaker.cc b/DQM/L1TMonitor/src/L1MuTkCandMaker.cc deleted file mode 100644 index 865494657693d..0000000000000 --- a/DQM/L1TMonitor/src/L1MuTkCandMaker.cc +++ /dev/null @@ -1,95 +0,0 @@ -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/Candidate/interface/LeafCandidate.h" - -using namespace std; -using namespace edm; -using namespace reco; - -class L1MuTkCandMaker : public edm::EDProducer { -public: - typedef edm::View CandView; - explicit L1MuTkCandMaker (const edm::ParameterSet&); - ~L1MuTkCandMaker() {}; - -private: - virtual void produce(edm::Event&, const edm::EventSetup&); - - // ----------member data --------------------------- - edm::InputTag candInputTag_; - std::string aliasprefix_; -}; - - -L1MuTkCandMaker::L1MuTkCandMaker(const edm::ParameterSet& iConfig) { - - aliasprefix_ = iConfig.getUntrackedParameter("aliasPrefix", "cands"); - LogWarning("L1MuTkCandMaker::L1MuTkCandMaker") << " aliasprefix_ = " << aliasprefix_; - - std::string branchprefix = aliasprefix_; - if(branchprefix.find("_") != std::string::npos) - branchprefix.replace(branchprefix.find("_"),1,""); - /* - produces > (branchprefix+"vx" ).setBranchAlias(aliasprefix_+"_vx" ); - produces > (branchprefix+"vy" ).setBranchAlias(aliasprefix_+"_vy" ); - produces > (branchprefix+"vz" ).setBranchAlias(aliasprefix_+"_vz" ); - produces > (branchprefix+"pt" ).setBranchAlias(aliasprefix_+"_pt" ); - produces > (branchprefix+"eta" ).setBranchAlias(aliasprefix_+"_eta" ); - produces > (branchprefix+"phi" ).setBranchAlias(aliasprefix_+"_phi" ); - produces > (branchprefix+"q" ).setBranchAlias(aliasprefix_+"_q" ); - produces > (branchprefix+"pdgid" ).setBranchAlias(aliasprefix_+"_pdgid" ); - */ - - // input tags - candInputTag_ = iConfig.getParameter("candInputTag"); -} - - -void L1MuTkCandMaker::produce(edm::Event& ev, const edm::EventSetup& es){ - - LogWarning("L1MuTkCandMaker") << " ::produce "; - /* - auto_ptr > cands_vx (new vector ); - auto_ptr > cands_vy (new vector ); - auto_ptr > cands_vz (new vector ); - auto_ptr > cands_pt (new vector ); - auto_ptr > cands_eta (new vector ); - auto_ptr > cands_phi (new vector ); - auto_ptr > cands_q (new vector ); - auto_ptr > cands_pdgid (new vector ); - */ - Handle aH; - ev.getByLabel(candInputTag_, aH); - const CandView& cands(*aH.product()); - - for (auto cand : cands){ - /* - cands_vx->push_back(cand.vx()); - cands_vy->push_back(cand.vy()); - cands_vz->push_back(cand.vz()); - cands_pt->push_back(cand.pt()); - cands_eta->push_back(cand.eta()); - cands_phi->push_back(cand.phi()); - cands_q->push_back(cand.charge()); - cands_pdgid->push_back(cand.pdgId()); - */ - cout << " produce: cand.pt " << cand.pt() << " cand.pdgId " << cand.pdgId() << endl; - } - /* - ev.put(cands_vx, aliasprefix_+"vx"); - ev.put(cands_vy, aliasprefix_+"vy"); - ev.put(cands_vz, aliasprefix_+"vz"); - ev.put(cands_pt, aliasprefix_+"pt"); - ev.put(cands_eta, aliasprefix_+"eta"); - ev.put(cands_phi, aliasprefix_+"phi"); - ev.put(cands_q , aliasprefix_+"q"); - ev.put(cands_pdgid, aliasprefix_+"pdgid"); - */ -} - -DEFINE_FWK_MODULE(L1MuTkCandMaker); - From 66ecfe2241b7766ed5ab81092d24016f9532aea8 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 2 Jun 2015 16:03:24 +0200 Subject: [PATCH 38/55] The version has been updated to 0.02 --- DQM/L1TMonitor/src/L1MUTK.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index cdf98b969ac1a..52cccd450815a 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -2,7 +2,7 @@ * \file L1MUTK.cc * * $Date: 2015/05/29 12:00:00 $ - * $Revision: 0.01 $ + * $Revision: 0.02 $ * \author S.Baranov * */ From c547043192e7deb22ae30578f133f1af0a489d1d Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 9 Jun 2015 11:24:07 +0200 Subject: [PATCH 39/55] Cuts have been added --- DQM/L1TMonitor/src/L1MUTK.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index 52cccd450815a..571ab318cfa97 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -1,8 +1,8 @@ /* * \file L1MUTK.cc * - * $Date: 2015/05/29 12:00:00 $ - * $Revision: 0.02 $ + * $Date: 2015/06/09 12:00:00 $ + * $Revision: 0.03 $ * \author S.Baranov * */ From d44236770fd276f27a03542200ec1aa733fd73ab Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 16 Jun 2015 11:53:34 +0200 Subject: [PATCH 40/55] add 3 types of histograms L1 GEM: All, barrel & endcap --- DQM/L1TMonitor/interface/L1MUTK.h | 19 +++-- DQM/L1TMonitor/src/L1MUTK.cc | 112 ++++++++++++++++++++++++++---- 2 files changed, 109 insertions(+), 22 deletions(-) diff --git a/DQM/L1TMonitor/interface/L1MUTK.h b/DQM/L1TMonitor/interface/L1MUTK.h index a4968d4aa6ba0..52f977f0c4e7a 100755 --- a/DQM/L1TMonitor/interface/L1MUTK.h +++ b/DQM/L1TMonitor/interface/L1MUTK.h @@ -4,8 +4,8 @@ /* * \file L1MUTK.h * - * $Date: 2015/05/29 12:00:00 $ - * $Revision: 0.01 $ + * $Date: 2015/06/16 12:00:00 $ + * $Revision: 0.03 $ * \author S.Baranov * */ @@ -17,7 +17,6 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/EDAnalyzer.h" -//#include "FWCore/Framework/interface/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -70,13 +69,13 @@ class L1MUTK : public edm::EDAnalyzer { // ----------member data --------------------------- DQMStore * dbe; - MonitorElement* gem_Pt; - MonitorElement* gem_Eta; - MonitorElement* gem_Phi; - MonitorElement* gem_Dxy; - MonitorElement* gem_Z; - MonitorElement* gem_Q; - MonitorElement* gem_Pdgid; + MonitorElement *gem_Pt, *gem_Pt_barrel, *gem_Pt_endcap; + MonitorElement *gem_Eta, *gem_Eta_barrel, *gem_Eta_endcap; + MonitorElement *gem_Phi, *gem_Phi_barrel, *gem_Phi_endcap; + MonitorElement *gem_Dxy, *gem_Dxy_barrel, *gem_Dxy_endcap,; + MonitorElement *gem_Z, *gem_Z_barrel, *gem_Z_endcap; + MonitorElement *gem_Q, *gem_Q_barrel, *gem_Q_endcap; + MonitorElement *gem_Pdgid, *gem_Pdgid_barrel, *gem_Pdgid_endcap; int nev_; // Number of events processed std::string outputFile_; //file name for ROOT ouput diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index 571ab318cfa97..0036cc00e946c 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -1,7 +1,7 @@ /* * \file L1MUTK.cc * - * $Date: 2015/06/09 12:00:00 $ + * $Date: 2015/06/16 12:00:00 $ * $Revision: 0.03 $ * \author S.Baranov * @@ -95,18 +95,54 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) const CandView& cands(*aH.product()); + int track = 0, trackPt=0; + double maxPt = 0.; double dxy; for (auto cand : cands){ - dxy = cand.vx()*sin(cand.phi())-cand.vy()*cos(cand.phi()); - LogWarning("L1MUTK") << " ::analyze Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy - << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); - gem_Pt->Fill(cand.pt()); - gem_Phi->Fill(cand.phi()); - gem_Eta->Fill(cand.eta()); - gem_Dxy->Fill(dxy); - gem_Z->Fill(cand.vz()); - gem_Q->Fill(float(cand.charge())); - gem_Pdgid->Fill(float(cand.pdgId())); + track++; + if (cand.pt() >= maxPt){ + trackPt = track; + maxPt = cand.pt(); + } + } + + cout << " trackPt " << trackPt << " " << maxPt << endl; + + track = 0; + for (auto cand : cands){ + track++; + if ( track == trackPt ){ + dxy = cand.vx()*sin(cand.phi())-cand.vy()*cos(cand.phi()); + LogWarning("L1MUTK") << " ::analyze track " << track << " Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy + << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); + gem_Pt->Fill(cand.pt()); + gem_Phi->Fill(cand.phi()); + gem_Eta->Fill(cand.eta()); + gem_Dxy->Fill(dxy); + gem_Z->Fill(cand.vz()); + gem_Q->Fill(float(cand.charge())); + gem_Pdgid->Fill(float(cand.pdgId())); + + if ( std::abs(cand.eta()) <= 1.1 ){ + // Barrel + gem_Pt_barrel->Fill(cand.pt()); + gem_Phi_barrel->Fill(cand.phi()); + gem_Eta_barrel->Fill(cand.eta()); + gem_Dxy_barrel->Fill(dxy); + gem_Z_barrel->Fill(cand.vz()); + gem_Q_barrel->Fill(float(cand.charge())); + gem_Pdgid_barrel->Fill(float(cand.pdgId())); + } else { + // Endcap + gem_Pt_endcap->Fill(cand.pt()); + gem_Phi_endcap->Fill(cand.phi()); + gem_Eta_endcap->Fill(cand.eta()); + gem_Dxy_endcap->Fill(dxy); + gem_Z_endcap->Fill(cand.vz()); + gem_Q_endcap->Fill(float(cand.charge())); + gem_Pdgid_endcap->Fill(float(cand.pdgId())); + } + } } } @@ -124,7 +160,10 @@ void L1MUTK::book_(const EventSetup& c) if ( dbe ) { dbe->setCurrentFolder("L1T/L1MUTK"); - + + /* + * All + */ gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100,0.,70. ); gem_Pt->setAxisTitle("gem_Pt",1); @@ -145,5 +184,54 @@ void L1MUTK::book_(const EventSetup& c) gem_Pdgid = dbe->book1D("gem_Pdgid","L1 Muon GEM Pdgid", 100,-50.,50. ); gem_Pdgid->setAxisTitle("gem_Pdgid",1); + + /* + * "barrel" (|eta|<=1.1) + */ + gem_Pt_barrel = dbe->book1D("gem_Pt_barrel","L1 Muon GEM Pt barrel", 100,0.,70. ); + gem_Pt_barrel->setAxisTitle("gem_Pt_barrel",1); + + gem_Phi_barrel = dbe->book1D("gem_Phi_barrel","L1 Muon GEM Phi barrel", 100,-3.,3. ); + gem_Phi_barrel->setAxisTitle("gem_Phi_barrel",1); + + gem_Eta_barrel = dbe->book1D("gem_Eta_barrel","L1 Muon GEM Eta barrel", 100,-3.,3. ); + gem_Eta_barrel->setAxisTitle("gem_Eta_barrel",1); + + gem_Dxy_barrel = dbe->book1D("gem_Dxy_barrel","L1 Muon GEM Dxy barrel", 100,-15.,15. ); + gem_Dxy_barrel->setAxisTitle("gem_Dxy_barrel",1); + + gem_Z_barrel = dbe->book1D("gem_Z_barrel","L1 Muon GEM Z barrel", 100,-15.,15. ); + gem_Z_barrel->setAxisTitle("gem_Z_barrel",1); + + gem_Q_barrel = dbe->book1D("gem__barrelQ","L1 Muon GEM Q barrel", 4,-2.,2. ); + gem_Q_barrel->setAxisTitle("gem_Q_barrel",1); + + gem_Pdgid_barrel = dbe->book1D("gem_Pdgid_barrel","L1 Muon GEM Pdgid barrel", 100,-50.,50. ); + gem_Pdgid_barrel->setAxisTitle("gem_Pdgid_barrel",1); + + /* + * "endcap" (|eta|>1.1) + */ + gem_Pt_endcap = dbe->book1D("gem_Pt_endcap","L1 Muon GEM Pt endcap", 100,0.,70. ); + gem_Pt_endcap->setAxisTitle("gem_Pt_endcap",1); + + gem_Phi_endcap = dbe->book1D("gem_Phi_endcap","L1 Muon GEM Phi endcap", 100,-3.,3. ); + gem_Phi_endcap->setAxisTitle("gem_Phi_endcap",1); + + gem_Eta_endcap = dbe->book1D("gem_Eta_endcap","L1 Muon GEM Eta endcap", 100,-3.,3. ); + gem_Eta_endcap->setAxisTitle("gem_Eta_endcap",1); + + gem_Dxy_endcap = dbe->book1D("gem_Dxy_endcap","L1 Muon GEM Dxy endcap", 100,-15.,15. ); + gem_Dxy_endcap->setAxisTitle("gem_Dxy_endcap",1); + + gem_Z_endcap = dbe->book1D("gem_Z_endcap","L1 Muon GEM Z endcap", 100,-15.,15. ); + gem_Z_endcap->setAxisTitle("gem_Z_endcap",1); + + gem_Q_endcap = dbe->book1D("gem_Q_endcap","L1 Muon GEM Q endcap", 4,-2.,2. ); + gem_Q_endcap->setAxisTitle("gem_Q_endcap",1); + + gem_Pdgid_endcap = dbe->book1D("gem_Pdgid_endcap","L1 Muon GEM Pdgid endcap", 100,-50.,50. ); + gem_Pdgid_endcap->setAxisTitle("gem_Pdgid_endcap",1); + } } From a631095679179f33ed41290e318a5066acfc038c Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 16 Jun 2015 11:58:59 +0200 Subject: [PATCH 41/55] warning cleaning --- GeneratorInterface/HiGenCommon/BuildFile.xml | 2 +- HLTrigger/HLTanalyzers/BuildFile.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GeneratorInterface/HiGenCommon/BuildFile.xml b/GeneratorInterface/HiGenCommon/BuildFile.xml index dee5e5e0a72ab..97d107d151eda 100644 --- a/GeneratorInterface/HiGenCommon/BuildFile.xml +++ b/GeneratorInterface/HiGenCommon/BuildFile.xml @@ -2,7 +2,7 @@ - + diff --git a/HLTrigger/HLTanalyzers/BuildFile.xml b/HLTrigger/HLTanalyzers/BuildFile.xml index bfc8267fa8bc4..4316c6292fdcf 100644 --- a/HLTrigger/HLTanalyzers/BuildFile.xml +++ b/HLTrigger/HLTanalyzers/BuildFile.xml @@ -19,7 +19,7 @@ - + From 7b7f04c77f83fec96006bfb80c41c9a96fa184c7 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 16 Jun 2015 12:03:59 +0200 Subject: [PATCH 42/55] update to LogDebug --- DQM/L1TMonitor/src/L1MUTK.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index 0036cc00e946c..1d15b34fd5ce8 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -90,7 +90,7 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) e.getByLabel(candInputTag_, aH); if(!aH.isValid()){ - LogWarning("L1MUTK") << " ::analyze Can't find CandView with label **candInputTag**"; + LogDebug("L1MUTK") << " ::analyze Can't find CandView with label **candInputTag**"; } const CandView& cands(*aH.product()); @@ -113,8 +113,11 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) track++; if ( track == trackPt ){ dxy = cand.vx()*sin(cand.phi())-cand.vy()*cos(cand.phi()); - LogWarning("L1MUTK") << " ::analyze track " << track << " Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy - << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); + + LogDebug("L1MUTK") << " ::analyze track " + << track << " Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy + << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); + gem_Pt->Fill(cand.pt()); gem_Phi->Fill(cand.phi()); gem_Eta->Fill(cand.eta()); From b6abf33c3ec2be5cddbcacc7944216fd88523a1b Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 16 Jun 2015 12:09:30 +0200 Subject: [PATCH 43/55] update to LogDebug, clean cout --- DQM/L1TMonitor/src/L1MUTK.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index 1d15b34fd5ce8..d8ef664a564c9 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -47,7 +47,7 @@ L1MUTK::L1MUTK(const ParameterSet& ps) // input tags candInputTag_ = ps.getParameter("candInputTag"); - cout << " L1MUTK::L1MUTK candInputTag " << candInputTag_ << endl; + LogInfo("L1MUTK") << " L1MUTK::L1MUTK candInputTag " << candInputTag_; if ( dbe !=NULL ) { dbe->setCurrentFolder("L1T/L1MUTK"); @@ -106,8 +106,6 @@ void L1MUTK::analyze(const Event& e, const EventSetup& c) } } - cout << " trackPt " << trackPt << " " << maxPt << endl; - track = 0; for (auto cand : cands){ track++; From ca1b74790047c35a1aa833d53090ce3515e5adc1 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 17 Jun 2015 12:05:21 +0200 Subject: [PATCH 44/55] update variables ranges --- DQM/L1TMonitor/src/L1MUTK.cc | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc index d8ef664a564c9..05eab365408fd 100755 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ b/DQM/L1TMonitor/src/L1MUTK.cc @@ -165,22 +165,22 @@ void L1MUTK::book_(const EventSetup& c) /* * All */ - gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100,0.,70. ); + gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100, 0.,250. ); gem_Pt->setAxisTitle("gem_Pt",1); - gem_Phi = dbe->book1D("gem_Phi","L1 Muon GEM Phi", 100,-3.,3. ); + gem_Phi = dbe->book1D("gem_Phi","L1 Muon GEM Phi", 100, -3.,3. ); gem_Phi->setAxisTitle("gem_Phi",1); - gem_Eta = dbe->book1D("gem_Eta","L1 Muon GEM Eta", 100,-3.,3. ); + gem_Eta = dbe->book1D("gem_Eta","L1 Muon GEM Eta", 100, -3.,3. ); gem_Eta->setAxisTitle("gem_Eta",1); - gem_Dxy = dbe->book1D("gem_Dxy","L1 Muon GEM Dxy", 100,-15.,15. ); + gem_Dxy = dbe->book1D("gem_Dxy","L1 Muon GEM Dxy", 100,-15.,15. ); gem_Dxy->setAxisTitle("gem_Dxy",1); - gem_Z = dbe->book1D("gem_Z","L1 Muon GEM Z", 100,-15.,15. ); + gem_Z = dbe->book1D("gem_Z","L1 Muon GEM Z", 100,-20.,20. ); gem_Z->setAxisTitle("gem_Z",1); - gem_Q = dbe->book1D("gem_Q","L1 Muon GEM Q", 4,-2.,2. ); + gem_Q = dbe->book1D("gem_Q","L1 Muon GEM Q", 4, -2.,2. ); gem_Q->setAxisTitle("gem_Q",1); gem_Pdgid = dbe->book1D("gem_Pdgid","L1 Muon GEM Pdgid", 100,-50.,50. ); @@ -189,22 +189,22 @@ void L1MUTK::book_(const EventSetup& c) /* * "barrel" (|eta|<=1.1) */ - gem_Pt_barrel = dbe->book1D("gem_Pt_barrel","L1 Muon GEM Pt barrel", 100,0.,70. ); + gem_Pt_barrel = dbe->book1D("gem_Pt_barrel","L1 Muon GEM Pt barrel", 100, 0.,250. ); gem_Pt_barrel->setAxisTitle("gem_Pt_barrel",1); - gem_Phi_barrel = dbe->book1D("gem_Phi_barrel","L1 Muon GEM Phi barrel", 100,-3.,3. ); + gem_Phi_barrel = dbe->book1D("gem_Phi_barrel","L1 Muon GEM Phi barrel", 100, -3.,3. ); gem_Phi_barrel->setAxisTitle("gem_Phi_barrel",1); - gem_Eta_barrel = dbe->book1D("gem_Eta_barrel","L1 Muon GEM Eta barrel", 100,-3.,3. ); + gem_Eta_barrel = dbe->book1D("gem_Eta_barrel","L1 Muon GEM Eta barrel", 100, -3.,3. ); gem_Eta_barrel->setAxisTitle("gem_Eta_barrel",1); - gem_Dxy_barrel = dbe->book1D("gem_Dxy_barrel","L1 Muon GEM Dxy barrel", 100,-15.,15. ); + gem_Dxy_barrel = dbe->book1D("gem_Dxy_barrel","L1 Muon GEM Dxy barrel", 100,-15.,15. ); gem_Dxy_barrel->setAxisTitle("gem_Dxy_barrel",1); - gem_Z_barrel = dbe->book1D("gem_Z_barrel","L1 Muon GEM Z barrel", 100,-15.,15. ); + gem_Z_barrel = dbe->book1D("gem_Z_barrel","L1 Muon GEM Z barrel", 100,-20.,20. ); gem_Z_barrel->setAxisTitle("gem_Z_barrel",1); - gem_Q_barrel = dbe->book1D("gem__barrelQ","L1 Muon GEM Q barrel", 4,-2.,2. ); + gem_Q_barrel = dbe->book1D("gem_Q_barrel","L1 Muon GEM Q barrel", 4, -2.,2. ); gem_Q_barrel->setAxisTitle("gem_Q_barrel",1); gem_Pdgid_barrel = dbe->book1D("gem_Pdgid_barrel","L1 Muon GEM Pdgid barrel", 100,-50.,50. ); @@ -213,22 +213,22 @@ void L1MUTK::book_(const EventSetup& c) /* * "endcap" (|eta|>1.1) */ - gem_Pt_endcap = dbe->book1D("gem_Pt_endcap","L1 Muon GEM Pt endcap", 100,0.,70. ); + gem_Pt_endcap = dbe->book1D("gem_Pt_endcap","L1 Muon GEM Pt endcap", 100,0.,250. ); gem_Pt_endcap->setAxisTitle("gem_Pt_endcap",1); - gem_Phi_endcap = dbe->book1D("gem_Phi_endcap","L1 Muon GEM Phi endcap", 100,-3.,3. ); + gem_Phi_endcap = dbe->book1D("gem_Phi_endcap","L1 Muon GEM Phi endcap", 100,-3.,3. ); gem_Phi_endcap->setAxisTitle("gem_Phi_endcap",1); - gem_Eta_endcap = dbe->book1D("gem_Eta_endcap","L1 Muon GEM Eta endcap", 100,-3.,3. ); + gem_Eta_endcap = dbe->book1D("gem_Eta_endcap","L1 Muon GEM Eta endcap", 100,-3.,3. ); gem_Eta_endcap->setAxisTitle("gem_Eta_endcap",1); - gem_Dxy_endcap = dbe->book1D("gem_Dxy_endcap","L1 Muon GEM Dxy endcap", 100,-15.,15. ); + gem_Dxy_endcap = dbe->book1D("gem_Dxy_endcap","L1 Muon GEM Dxy endcap", 100,-15.,15. ); gem_Dxy_endcap->setAxisTitle("gem_Dxy_endcap",1); - gem_Z_endcap = dbe->book1D("gem_Z_endcap","L1 Muon GEM Z endcap", 100,-15.,15. ); + gem_Z_endcap = dbe->book1D("gem_Z_endcap","L1 Muon GEM Z endcap", 100,-20.,20. ); gem_Z_endcap->setAxisTitle("gem_Z_endcap",1); - gem_Q_endcap = dbe->book1D("gem_Q_endcap","L1 Muon GEM Q endcap", 4,-2.,2. ); + gem_Q_endcap = dbe->book1D("gem_Q_endcap","L1 Muon GEM Q endcap", 4, -2.,2. ); gem_Q_endcap->setAxisTitle("gem_Q_endcap",1); gem_Pdgid_endcap = dbe->book1D("gem_Pdgid_endcap","L1 Muon GEM Pdgid endcap", 100,-50.,50. ); From b09133f8354f6d10fad518f69ebb5d04faade422 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Wed, 17 Jun 2015 12:07:42 +0200 Subject: [PATCH 45/55] LogDebug should be --- .../plugins/L1TkMuonFromExtendedProducer.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index a1bf1d3ad079f..d35a228f60531 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -1,3 +1,4 @@ + // -*- C++ -*- // // input: L1 TkTracks and L1MuonParticleExtended (standalone with component details) @@ -206,7 +207,7 @@ L1TkMuonFromExtendedProducer::loadL1Muons(edm::Event& iEvent, L1Muon* MuCn) /* L1 Muons diapasons: * min max * Eta -2.425 2.425 - * Phi -3.14159 3.09796 + * Phi -3.14159 3.14159 * pt 2 140 * sigmaEta 0.0144337 0.0288675 * sigmaPhi 0 0.0125959 @@ -355,8 +356,10 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& LogDebug("L1TkMuonFromExtendedProducer") << " nL1Tracks " << nL1Tracks; int nL1TkCand = computeTkMuCandidates(nL1Muons, MuCn, nL1Tracks, L1Tk, L1TkCn); - LogDebug("L1TkMuonFromExtendedProducer") << " nL1TkCand " << nL1TkCand; - + if( nL1TkCand+1 > 0 ){ + LogDebug("L1TkMuonFromExtendedProducer") << " nL1TkCand " << nL1TkCand+1; + } + L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, nL1TkCand, L1TkCn); iEvent.put( tkMuons ); From 9043ff41a89f6c5655a3f9d14cdc1dfd437418ff Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Fri, 19 Jun 2015 15:21:07 +0200 Subject: [PATCH 46/55] rm --- DQM/L1TMonitor/python/candMaker_cfi.py | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 DQM/L1TMonitor/python/candMaker_cfi.py diff --git a/DQM/L1TMonitor/python/candMaker_cfi.py b/DQM/L1TMonitor/python/candMaker_cfi.py deleted file mode 100644 index 3030912e3f95f..0000000000000 --- a/DQM/L1TMonitor/python/candMaker_cfi.py +++ /dev/null @@ -1,7 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -candMaker = cms.EDProducer( - "L1MuTkCandMaker", - aliasPrefix = cms.untracked.string("cands"), - candInputTag = cms.InputTag("") - ) From 0429754cb2d3b2a4ff9da28aa9b86cd28522cd0f Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 23 Jun 2015 15:00:54 +0200 Subject: [PATCH 47/55] propagateToGMT has been moved to computeTkMuCandidates --- .../plugins/L1TkMuonFromExtendedProducer.cc | 224 ++++++++++++------ 1 file changed, 153 insertions(+), 71 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index d35a228f60531..d844a8378907b 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -115,6 +115,16 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float propSigmaPhi; }; + struct L1TrackProp { + float pt; + float p; + float eta; + float aeta; + float phi; + float q; + float z; + }; + struct L1Cand { float pt; int nPars; @@ -130,6 +140,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { L1Muon MuCn[MuonMax]; L1Track L1Tk[TrackMax]; + L1TrackProp L1TkPr[TrackMax]; L1Cand L1TkCn[TkMuonMax]; explicit L1TkMuonFromExtendedProducer(const edm::ParameterSet&); @@ -142,7 +153,7 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { virtual void produce(edm::Event&, const edm::EventSetup&); int loadL1Muons(edm::Event&, L1Muon*); - int loadL1Tracks(edm::Event&, L1Track*); + int loadL1Tracks(edm::Event&, L1Track*, L1TrackProp*); int computeTkMuCandidates(const int, L1Muon*, const int, L1Track*, L1Cand*); void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1Cand*); @@ -266,7 +277,7 @@ L1TkMuonFromExtendedProducer::loadL1Muons(edm::Event& iEvent, L1Muon* MuCn) // ------------ Tracks converter ------------ int -L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk) +L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk, L1TrackProp* L1TkPr) { using namespace edm; using namespace std; @@ -317,20 +328,33 @@ L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk) L1Tk[il1tk].dxy = tkv3.x()*sin(L1Tk[il1tk].phi) - tkv3.y()*cos(L1Tk[il1tk].phi); L1Tk[il1tk].idx = il1tk; - PropState pstate = propagateToGMT(l1tk); + auto p3 = l1tk.getMomentum(); + L1TkPr[il1tk].pt = p3.perp(); + L1TkPr[il1tk].p = p3.mag(); + L1TkPr[il1tk].eta = p3.eta(); + L1TkPr[il1tk].aeta = std::abs(p3.eta()); + L1TkPr[il1tk].phi = p3.phi() ; + L1TkPr[il1tk].q = l1tk.getRInv()>0? 1.:-1.; + L1TkPr[il1tk].z = l1tk.getPOCA().z(); + /* + PropState pstate = propagateToGMT(l1tk); if (!pstate.valid) { + L1Tk[il1tk].valid = true; - } else { + L1Tk[il1tk].propPt = pstate.pt; + L1Tk[il1tk].propEta = pstate.eta; + L1Tk[il1tk].propPhi = pstate.phi; + L1Tk[il1tk].propSigmaEta = pstate.sigmaEta; + L1Tk[il1tk].propSigmaPhi = pstate.sigmaPhi; + + LogDebug("L1TkMuonFromExtendedProducer") << " L1Tk[" << il1tk << "].prop " + << " Pt " << L1Tk[il1tk].propPt << " eta " << L1Tk[il1tk].propEta << " phi " << L1Tk[il1tk].propPhi + << " SigmaEta " << L1Tk[il1tk].propSigmaEta << " SigmaPhi " << L1Tk[il1tk].propSigmaPhi; + } else { L1Tk[il1tk].valid = false; }; - - L1Tk[il1tk].propPt = pstate.pt; - L1Tk[il1tk].propEta = pstate.eta; - L1Tk[il1tk].propPhi = pstate.phi; - L1Tk[il1tk].propSigmaEta = pstate.sigmaEta; - L1Tk[il1tk].propSigmaPhi = pstate.sigmaPhi; - + */ } else { LogWarning("L1TkMuonFromExtendedProducer") << " Maximum TrackMaxn number too small " << nL1Tracks; @@ -352,7 +376,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& int nL1Muons = L1TkMuonFromExtendedProducer::loadL1Muons(iEvent, MuCn); LogDebug("L1TkMuonFromExtendedProducer") << " nL1Muons " << nL1Muons; - int nL1Tracks = L1TkMuonFromExtendedProducer::loadL1Tracks(iEvent, L1Tk); + int nL1Tracks = L1TkMuonFromExtendedProducer::loadL1Tracks(iEvent, L1Tk, L1TkPr); LogDebug("L1TkMuonFromExtendedProducer") << " nL1Tracks " << nL1Tracks; int nL1TkCand = computeTkMuCandidates(nL1Muons, MuCn, nL1Tracks, L1Tk, L1TkCn); @@ -362,7 +386,7 @@ L1TkMuonFromExtendedProducer::produce(edm::Event& iEvent, const edm::EventSetup& L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(iEvent, tkMuons, nL1TkCand, L1TkCn); - iEvent.put( tkMuons ); + iEvent.put( tkMuons ); } @@ -375,9 +399,66 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* using namespace edm; using namespace std; + // PropState calculation + for ( int itk=0; itk= 0){ + + if (!correctGMTPropForTkZ_) L1TkPr[itk].z = 0; + if ( (L1TkPr[itk].p<3.5) || (L1TkPr[itk].aeta <1.1 && L1TkPr[itk].pt < 3.5) || (L1TkPr[itk].aeta > 2.5) ){ + L1Tk[itk].valid = false; + } + else { + //0th order: + L1Tk[itk].valid = true; + + float dzCorrPhi = 1.; + float deta = 0; + float etaProp = L1TkPr[itk].aeta; + + if (L1TkPr[itk].aeta < 1.1){ + etaProp = 1.1; + deta = L1TkPr[itk].z/550./cosh(L1TkPr[itk].aeta); + } else { + float delta = L1TkPr[itk].z/850.; //roughly scales as distance to 2nd station + if (L1TkPr[itk].eta > 0) delta *=-1; + dzCorrPhi = 1. + delta; + + float zOzs = L1TkPr[itk].z/850.; + if (L1TkPr[itk].eta > 0) deta = zOzs/(1. - zOzs); + else deta = zOzs/(1.+zOzs); + deta = deta*tanh(L1TkPr[itk].eta); + } + + float resPhi = L1TkPr[itk].phi - 1.464*L1TkPr[itk].q*cosh(1.7)/cosh(etaProp)/L1TkPr[itk].pt*dzCorrPhi - M_PI/144.; + if (resPhi > M_PI) resPhi -= 2.*M_PI; + if (resPhi < -M_PI) resPhi += 2.*M_PI; + + L1Tk[itk].propPt = L1TkPr[itk].pt; //not corrected for eloss + L1Tk[itk].propEta = L1TkPr[itk].eta + deta; + L1Tk[itk].propPhi = resPhi; + L1Tk[itk].propSigmaEta = 0.100/L1TkPr[itk].pt; //multiple scattering term + L1Tk[itk].propSigmaPhi = 0.106/L1TkPr[itk].pt; //need a better estimate for these + + LogDebug("L1TkMuonFromExtendedProducer") << " L1Tk[" << itk << "].prop " + << " Pt " << L1Tk[itk].propPt << " eta " << L1Tk[itk].propEta << " phi " << L1Tk[itk].propPhi + << " SigmaEta " << L1Tk[itk].propSigmaEta << " SigmaPhi " << L1Tk[itk].propSigmaPhi; + + }// else "true" + }// if idx + }// over itk + // **** Calculation for Muons **** int nL1TkCand = -1; int il1tkcn = -1; + for (int imu=0; imu= 0){ - LogDebug("L1TkMuonFromExtendedProducer") << " imu= " << imu << " itk= " << itk << " idx= " << L1Tk[itk].idx; - if ( L1Tk[itk].pt < PTMINTRA_) continue; if (fabs(L1Tk[itk].z) > ZMAX_) continue; if ( L1Tk[itk].chi2 > CHI2MAX_) continue; @@ -431,13 +510,13 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* float dPhi = std::abs(deltaPhi(L1Tk[itk].propPhi, MuCn[imu].phi)); LogDebug("L1TkMuonFromExtendedProducer") - << " match details: prop Pt "<0? 1.: -1.; + float tk_z = tk.getPOCA().z(); + + if (!correctGMTPropForTkZ_) tk_z = 0; + + L1TkMuonFromExtendedProducer::PropState dest; + if (tk_p<3.5 ) return dest; + if (tk_aeta <1.1 && tk_pt < 3.5) return dest; + if (tk_aeta > 2.5) return dest; + + //0th order: + dest.valid = true; + + float dzCorrPhi = 1.; + float deta = 0; + float etaProp = tk_aeta; + + if (tk_aeta < 1.1){ + etaProp = 1.1; + deta = tk_z/550./cosh(tk_aeta); + } else { + float delta = tk_z/850.; //roughly scales as distance to 2nd station + if (tk_eta > 0) delta *=-1; + dzCorrPhi = 1. + delta; + + float zOzs = tk_z/850.; + if (tk_eta > 0) deta = zOzs/(1. - zOzs); + else deta = zOzs/(1.+zOzs); + deta = deta*tanh(tk_eta); + } + float resPhi = tk_phi - 1.464*tk_q*cosh(1.7)/cosh(etaProp)/tk_pt*dzCorrPhi - M_PI/144.; + if (resPhi > M_PI) resPhi -= 2.*M_PI; + if (resPhi < -M_PI) resPhi += 2.*M_PI; + + dest.eta = tk_eta + deta; + dest.phi = resPhi; + dest.pt = tk_pt; //not corrected for eloss + dest.sigmaEta = 0.100/tk_pt; //multiple scattering term + dest.sigmaPhi = 0.106/tk_pt; //need a better estimate for these + + return dest; +} + + // ------------ Tracks candidate ------------ void L1TkMuonFromExtendedProducer::loadTkMuCandidatesToEvent(edm::Event& iEvent, std::auto_ptr& tkMuons, @@ -517,6 +650,7 @@ const int nL1TkCand, L1Cand* L1TkCn) }//over il1tkcn } + // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TkMuonFromExtendedProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -527,57 +661,5 @@ L1TkMuonFromExtendedProducer::fillDescriptions(edm::ConfigurationDescriptions& d descriptions.addDefault(desc); } - -L1TkMuonFromExtendedProducer::PropState L1TkMuonFromExtendedProducer::propagateToGMT(const L1TkMuonFromExtendedProducer::L1TkTrackType& tk) -const { - - auto p3 = tk.getMomentum(); - float tk_pt = p3.perp(); - float tk_p = p3.mag(); - float tk_eta = p3.eta(); - float tk_aeta = std::abs(tk_eta); - float tk_phi = p3.phi(); - float tk_q = tk.getRInv()>0? 1.: -1.; - float tk_z = tk.getPOCA().z(); - if (!correctGMTPropForTkZ_) tk_z = 0; - - L1TkMuonFromExtendedProducer::PropState dest; - if (tk_p<3.5 ) return dest; - if (tk_aeta <1.1 && tk_pt < 3.5) return dest; - if (tk_aeta > 2.5) return dest; - - //0th order: - dest.valid = true; - - float dzCorrPhi = 1.; - float deta = 0; - float etaProp = tk_aeta; - - if (tk_aeta < 1.1){ - etaProp = 1.1; - deta = tk_z/550./cosh(tk_aeta); - } else { - float delta = tk_z/850.; //roughly scales as distance to 2nd station - if (tk_eta > 0) delta *=-1; - dzCorrPhi = 1. + delta; - - float zOzs = tk_z/850.; - if (tk_eta > 0) deta = zOzs/(1. - zOzs); - else deta = zOzs/(1.+zOzs); - deta = deta*tanh(tk_eta); - } - float resPhi = tk_phi - 1.464*tk_q*cosh(1.7)/cosh(etaProp)/tk_pt*dzCorrPhi - M_PI/144.; - if (resPhi > M_PI) resPhi -= 2.*M_PI; - if (resPhi < -M_PI) resPhi += 2.*M_PI; - - dest.eta = tk_eta + deta; - dest.phi = resPhi; - dest.pt = tk_pt; //not corrected for eloss - dest.sigmaEta = 0.100/tk_pt; //multiple scattering term - dest.sigmaPhi = 0.106/tk_pt; //need a better estimate for these - - return dest; -} - //define this as a plug-in DEFINE_FWK_MODULE(L1TkMuonFromExtendedProducer); From 83fb7657a438b76c93804d2fda717712469cb885 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 29 Jun 2015 17:11:47 +0200 Subject: [PATCH 48/55] add bits for Pt(6) Phi,Eta(8) Z(4) --- .../plugins/L1TkMuonFromExtendedProducer.cc | 118 ++++++++++++++++-- 1 file changed, 109 insertions(+), 9 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index d844a8378907b..2534436e1c29c 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -65,9 +65,8 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { typedef std::vector< L1TkTrackType > L1TkTrackCollectionType; struct PropState { //something simple, imagine it's hardware emulation - PropState() : - pt(-99), eta(-99), phi(-99),sigmaPt(-99), sigmaEta(-99), sigmaPhi(-99), valid(false) {} + pt(-99), eta(-99), phi(-99), sigmaPt(-99), sigmaEta(-99), sigmaPhi(-99), valid(false) {} float pt; float eta; float phi; @@ -75,7 +74,6 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float sigmaEta; float sigmaPhi; bool valid; - }; struct L1Muon { @@ -119,7 +117,6 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { float pt; float p; float eta; - float aeta; float phi; float q; float z; @@ -159,6 +156,10 @@ class L1TkMuonFromExtendedProducer : public edm::EDProducer { void loadTkMuCandidatesToEvent(edm::Event&, std::auto_ptr&, const int, L1Cand*); PropState propagateToGMT(const L1TkTrackType& l1tk) const; + float Pt2Bin(float Pt); + float Phi2Bin(float Phi); + float Eta2Bin(float Eta); + float Z2Bin(float Eta); //configuration (preserving structure of L1TkMuonFromExtendedProducer edm::InputTag L1MuonsInputTag_; @@ -332,7 +333,6 @@ L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk, L1 L1TkPr[il1tk].pt = p3.perp(); L1TkPr[il1tk].p = p3.mag(); L1TkPr[il1tk].eta = p3.eta(); - L1TkPr[il1tk].aeta = std::abs(p3.eta()); L1TkPr[il1tk].phi = p3.phi() ; L1TkPr[il1tk].q = l1tk.getRInv()>0? 1.:-1.; L1TkPr[il1tk].z = l1tk.getPOCA().z(); @@ -412,7 +412,7 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* if (L1Tk[itk].idx >= 0){ if (!correctGMTPropForTkZ_) L1TkPr[itk].z = 0; - if ( (L1TkPr[itk].p<3.5) || (L1TkPr[itk].aeta <1.1 && L1TkPr[itk].pt < 3.5) || (L1TkPr[itk].aeta > 2.5) ){ + if ( (L1TkPr[itk].p<3.5) || (abs(L1TkPr[itk].eta) <1.1 && L1TkPr[itk].pt < 3.5) || (abs(L1TkPr[itk].eta) > 2.5) ){ L1Tk[itk].valid = false; } else { @@ -421,11 +421,17 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* float dzCorrPhi = 1.; float deta = 0; - float etaProp = L1TkPr[itk].aeta; - if (L1TkPr[itk].aeta < 1.1){ + L1TkPr[itk].pt = L1TkMuonFromExtendedProducer::Pt2Bin(L1TkPr[itk].pt); + L1TkPr[itk].phi = L1TkMuonFromExtendedProducer::Phi2Bin(L1TkPr[itk].phi); + L1TkPr[itk].eta = L1TkMuonFromExtendedProducer::Eta2Bin(L1TkPr[itk].eta); + L1TkPr[itk].z = L1TkMuonFromExtendedProducer::Z2Bin(L1TkPr[itk].z); + + float etaProp = abs(L1TkPr[itk].eta); + + if (abs(L1TkPr[itk].eta) < 1.1){ etaProp = 1.1; - deta = L1TkPr[itk].z/550./cosh(L1TkPr[itk].aeta); + deta = L1TkPr[itk].z/550./cosh(abs(L1TkPr[itk].eta)); } else { float delta = L1TkPr[itk].z/850.; //roughly scales as distance to 2nd station if (L1TkPr[itk].eta > 0) delta *=-1; @@ -491,6 +497,11 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* for ( int itk=0; itk= 0){ + L1Tk[itk].pt = L1TkMuonFromExtendedProducer::Pt2Bin(L1Tk[itk].pt); + L1Tk[itk].phi = L1TkMuonFromExtendedProducer::Phi2Bin(L1Tk[itk].phi); + L1Tk[itk].eta = L1TkMuonFromExtendedProducer::Eta2Bin(L1Tk[itk].eta); + L1Tk[itk].z = L1TkMuonFromExtendedProducer::Z2Bin(L1Tk[itk].z); + if ( L1Tk[itk].pt < PTMINTRA_) continue; if (fabs(L1Tk[itk].z) > ZMAX_) continue; if ( L1Tk[itk].chi2 > CHI2MAX_) continue; @@ -538,7 +549,96 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* nL1TkCand = il1tkcn; LogDebug("L1TkMuonFromExtendedProducer") << " ::computeTkMuCandidates nL1TkCand " << nL1TkCand; return nL1TkCand; +} + +float L1TkMuonFromExtendedProducer::Pt2Bin(float Pt){ + using namespace std; + + float MinPt = 2.; // GeV + float MaxPt = 200.; // GeV + + // 2**6 = 64 + float PtBinStep = (MaxPt - MinPt)/exp2(6); + + // float tmpPt = Pt; + Pt = max( (double)MinPt, min((double)Pt, (double)MaxPt)); + Pt = (MinPt + (float)( PtBinStep * (int)(Pt/PtBinStep))); + + /* + cout << " Pt " << Pt << " PtBinStep " << PtBinStep << " sPt " << tmpPt - Pt << endl; + */ + return Pt; +} + + +float L1TkMuonFromExtendedProducer::Phi2Bin(float Phi){ + using namespace std; + + float MinPhi = -3.14159; // Rad + float MaxPhi = 3.14159; // Rad + + // 2**8 = 256 + float PhiBinStep = (MaxPhi - MinPhi)/exp2(8); + + Phi = max( (double)MinPhi, min((double)Phi, (double)MaxPhi)); + + //float tmpPhi = Phi; + Phi = (float)( PhiBinStep * (int)(Phi/PhiBinStep)); + if (Phi < 0.){ + Phi = -(float)( PhiBinStep * (int)(abs(Phi)/PhiBinStep)); + } + /* + cout << " tmpPhi " << tmpPhi << " Phi " << Phi << " dPhi " << (tmpPhi - Phi) << endl; + */ + return Phi; +} + + +float L1TkMuonFromExtendedProducer::Eta2Bin(float Eta){ + using namespace std; + + float MinEta = -2.65; + float MaxEta = 2.65; + + // 2**8 = 256 + float EtaBinStep = (MaxEta - MinEta)/exp2(8); + + Eta = max( (double)MinEta, min((double)Eta, (double)MaxEta)); + + //float tmpEta = Eta; + Eta = (float)( EtaBinStep * (int)(Eta/EtaBinStep)); + if (Eta < 0.){ + Eta = -(float)( EtaBinStep * (int)(abs(Eta)/EtaBinStep)); + } + + /* + cout << " tmpEta " << tmpEta << " Eta " << Eta << " dEta " << (tmpEta - Eta) << endl; + */ + return Eta; +} + +float L1TkMuonFromExtendedProducer::Z2Bin(float Z){ + using namespace std; + + float MinZ = -17; + float MaxZ = 17; + + // 2**4 = 16 + float ZBinStep = (MaxZ - MinZ)/exp2(4); + + Z = max( (double)MinZ, min((double)Z, (double)MaxZ)); + + //float tmpZ = Z; + Z = (float)( ZBinStep * (int)(Z/ZBinStep)); + if (Z < 0.){ + Z = -(float)( ZBinStep * (int)(abs(Z)/ZBinStep)); + } + + /* + cout << " tmpZ " << tmpZ << " Z " << Z << " dZ " << (tmpZ - Z) << endl; + */ + return Z; } From 1d8be4b14273da7e0ee327129a54b1644c8645c6 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 29 Jun 2015 17:13:42 +0200 Subject: [PATCH 49/55] add bits for Pt(6) Phi,Eta(8) Z(4) --- .../plugins/L1TkMuonFromExtendedProducer.cc | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 2534436e1c29c..a75f3a008a3ee 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -283,22 +283,6 @@ L1TkMuonFromExtendedProducer::loadL1Tracks(edm::Event& iEvent, L1Track* L1Tk, L1 using namespace edm; using namespace std; - /* L1 Tracks diapasons: - * min max - * Eta -2.62816 2.6378 - * Phi -3.14159 3.14159 - * pt 1.29208 9000 - * z -80. 55. - * chi2 0.000667 9504. - * - * propEta -2.5449 2.50527 - * propPhi -3.14159 3.14158 - * propPt 1.29208 9000. - * propSigEta 0. 0.07739 - * propSigPhi 0. 0.08203 - * - */ - edm::Handle l1tksH; iEvent.getByLabel(L1TrackInputTag_, l1tksH); const L1TkTrackCollectionType& l1tks = *l1tksH.product(); From d9efac41bde1660697950c8bc333a8c4c17b8cc1 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 30 Jun 2015 12:19:18 +0200 Subject: [PATCH 50/55] Pt(6 Bits), Eta,Phi(8) & Z(4) --- .../plugins/L1TkMuonFromExtendedProducer.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index a75f3a008a3ee..1347c9c0acf31 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -395,6 +395,11 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* if (L1Tk[itk].idx >= 0){ + L1TkPr[itk].pt = L1TkMuonFromExtendedProducer::Pt2Bin(L1TkPr[itk].pt); + L1TkPr[itk].phi = L1TkMuonFromExtendedProducer::Phi2Bin(L1TkPr[itk].phi); + L1TkPr[itk].eta = L1TkMuonFromExtendedProducer::Eta2Bin(L1TkPr[itk].eta); + L1TkPr[itk].z = L1TkMuonFromExtendedProducer::Z2Bin(L1TkPr[itk].z); + if (!correctGMTPropForTkZ_) L1TkPr[itk].z = 0; if ( (L1TkPr[itk].p<3.5) || (abs(L1TkPr[itk].eta) <1.1 && L1TkPr[itk].pt < 3.5) || (abs(L1TkPr[itk].eta) > 2.5) ){ L1Tk[itk].valid = false; @@ -405,11 +410,6 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* float dzCorrPhi = 1.; float deta = 0; - - L1TkPr[itk].pt = L1TkMuonFromExtendedProducer::Pt2Bin(L1TkPr[itk].pt); - L1TkPr[itk].phi = L1TkMuonFromExtendedProducer::Phi2Bin(L1TkPr[itk].phi); - L1TkPr[itk].eta = L1TkMuonFromExtendedProducer::Eta2Bin(L1TkPr[itk].eta); - L1TkPr[itk].z = L1TkMuonFromExtendedProducer::Z2Bin(L1TkPr[itk].z); float etaProp = abs(L1TkPr[itk].eta); @@ -492,6 +492,10 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* if ( L1Tk[itk].nstubs < nStubsmin_) continue; // Do we need it !? // if ( L1Tk[itk].valid) continue; + MuCn[imu].pt = L1TkMuonFromExtendedProducer::Pt2Bin(MuCn[imu].pt); + MuCn[imu].phi = L1TkMuonFromExtendedProducer::Phi2Bin(MuCn[imu].phi); + MuCn[imu].eta = L1TkMuonFromExtendedProducer::Eta2Bin(MuCn[imu].eta); + dr2 = deltaR2(MuCn[imu].eta, MuCn[imu].phi, L1Tk[itk].eta, L1Tk[itk].phi); if (dr2 > 0.3) continue; From 7295eb5c454e4d4d7746fd1a7067a221b270a306 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Tue, 30 Jun 2015 13:37:03 +0200 Subject: [PATCH 51/55] nL1TkCand has been updated, IF added --- .../plugins/L1TkMuonFromExtendedProducer.cc | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc index 1347c9c0acf31..2439903c264c4 100644 --- a/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc +++ b/SLHCUpgradeSimulations/L1TrackTrigger/plugins/L1TkMuonFromExtendedProducer.cc @@ -56,7 +56,7 @@ const int MuonMax = 20; const int TrackMax = 400; // maximum L1 Tracks Candidates number -const int TkMuonMax = 20; +const int TkMuonMax = 50; class L1TkMuonFromExtendedProducer : public edm::EDProducer { public: @@ -516,17 +516,20 @@ L1TkMuonFromExtendedProducer::computeTkMuCandidates(const int nL1Muons, L1Muon* // Filter for Cuts if (dEta < etaCut && dPhi < phiCut){ il1tkcn++; - - L1TkCn[il1tkcn].nPars = L1Tk[itk].nPars; - L1TkCn[il1tkcn].pt = L1Tk[itk].pt; - L1TkCn[il1tkcn].q = L1Tk[itk].q; - L1TkCn[il1tkcn].z = L1Tk[itk].z; - L1TkCn[il1tkcn].eta = L1Tk[itk].eta; - L1TkCn[il1tkcn].phi = L1Tk[itk].phi; - L1TkCn[il1tkcn].dxy = L1Tk[itk].dxy; - L1TkCn[il1tkcn].l1MuonIndex = imu; - L1TkCn[il1tkcn].l1TrackIndex = itk; - L1TkCn[il1tkcn].quality = MuCn[imu].quality; + if(il1tkcn <= TkMuonMax) { + L1TkCn[il1tkcn].nPars = L1Tk[itk].nPars; + L1TkCn[il1tkcn].pt = L1Tk[itk].pt; + L1TkCn[il1tkcn].q = L1Tk[itk].q; + L1TkCn[il1tkcn].z = L1Tk[itk].z; + L1TkCn[il1tkcn].eta = L1Tk[itk].eta; + L1TkCn[il1tkcn].phi = L1Tk[itk].phi; + L1TkCn[il1tkcn].dxy = L1Tk[itk].dxy; + L1TkCn[il1tkcn].l1MuonIndex = imu; + L1TkCn[il1tkcn].l1TrackIndex = itk; + L1TkCn[il1tkcn].quality = MuCn[imu].quality; + } else { + LogWarning("L1TkMuonFromExtendedProducer") << " nL1TkCand is huge " << nL1TkCand; + } }// over Cuts } @@ -546,7 +549,7 @@ float L1TkMuonFromExtendedProducer::Pt2Bin(float Pt){ float MaxPt = 200.; // GeV // 2**6 = 64 - float PtBinStep = (MaxPt - MinPt)/exp2(6); + float PtBinStep = (MaxPt - MinPt)/exp2(5); // float tmpPt = Pt; Pt = max( (double)MinPt, min((double)Pt, (double)MaxPt)); From 8dc44814afb88eaadd965d5c54c3246d7ddbb6d0 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 6 Jul 2015 13:22:30 +0200 Subject: [PATCH 52/55] L1MUTK has been removed --- DQM/L1TMonitor/src/SealModule.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/DQM/L1TMonitor/src/SealModule.cc b/DQM/L1TMonitor/src/SealModule.cc index 91294589401c1..d02be3825890e 100644 --- a/DQM/L1TMonitor/src/SealModule.cc +++ b/DQM/L1TMonitor/src/SealModule.cc @@ -27,10 +27,6 @@ DEFINE_FWK_MODULE(L1TRPCTF); #include DEFINE_FWK_MODULE(L1TGMT); -#include -DEFINE_FWK_MODULE(L1MUTK); - - #include DEFINE_FWK_MODULE(L1TGCT); From 7bf0335e94b46e7125ee4107087e096c832fbfbb Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 6 Jul 2015 13:23:09 +0200 Subject: [PATCH 53/55] removed --- DQM/L1TMonitor/python/L1MUTK_cfi.py | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 DQM/L1TMonitor/python/L1MUTK_cfi.py diff --git a/DQM/L1TMonitor/python/L1MUTK_cfi.py b/DQM/L1TMonitor/python/L1MUTK_cfi.py deleted file mode 100644 index 7d463dcef79ef..0000000000000 --- a/DQM/L1TMonitor/python/L1MUTK_cfi.py +++ /dev/null @@ -1,9 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -l1MuTk = cms.EDAnalyzer("L1MUTK", - disableROOToutput = cms.untracked.bool(True), - verbose = cms.untracked.bool(False), - gmtSource = cms.InputTag("gtDigis"), - DQMStore = cms.untracked.bool(True), - candInputTag = cms.InputTag("L1TkMuonsMerge") -) From 8333c2795ad78e1c510159a851eb643c8621cc52 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 6 Jul 2015 13:23:33 +0200 Subject: [PATCH 54/55] removed --- DQM/L1TMonitor/interface/L1MUTK.h | 94 ------------ DQM/L1TMonitor/src/L1MUTK.cc | 238 ------------------------------ 2 files changed, 332 deletions(-) delete mode 100755 DQM/L1TMonitor/interface/L1MUTK.h delete mode 100755 DQM/L1TMonitor/src/L1MUTK.cc diff --git a/DQM/L1TMonitor/interface/L1MUTK.h b/DQM/L1TMonitor/interface/L1MUTK.h deleted file mode 100755 index 52f977f0c4e7a..0000000000000 --- a/DQM/L1TMonitor/interface/L1MUTK.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef L1MUTK_H -#define L1MUTK_H - -/* - * \file L1MUTK.h - * - * $Date: 2015/06/16 12:00:00 $ - * $Revision: 0.03 $ - * \author S.Baranov - * -*/ - -// system include files -#include -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DQMServices/Core/interface/DQMStore.h" -#include "DQMServices/Core/interface/MonitorElement.h" -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - -#include "DataFormats/Candidate/interface/LeafCandidate.h" - -#include -#include -#include - -using namespace reco; - -// -// class decleration -// - -class L1MUTK : public edm::EDAnalyzer { - -public: - - // Constructor - L1MUTK(const edm::ParameterSet& ps); - - // Destructor - virtual ~L1MUTK(); - - typedef edm::View CandView; - -protected: - // Analyze - void analyze(const edm::Event& e, const edm::EventSetup& c); - - // BeginJob - void beginJob(void); - - // BeginRun - void beginRun(const edm::Run& r, const edm::EventSetup& c); - - // EndJob - void endJob(void); - -private: - // ----------member data --------------------------- - DQMStore * dbe; - - MonitorElement *gem_Pt, *gem_Pt_barrel, *gem_Pt_endcap; - MonitorElement *gem_Eta, *gem_Eta_barrel, *gem_Eta_endcap; - MonitorElement *gem_Phi, *gem_Phi_barrel, *gem_Phi_endcap; - MonitorElement *gem_Dxy, *gem_Dxy_barrel, *gem_Dxy_endcap,; - MonitorElement *gem_Z, *gem_Z_barrel, *gem_Z_endcap; - MonitorElement *gem_Q, *gem_Q_barrel, *gem_Q_endcap; - MonitorElement *gem_Pdgid, *gem_Pdgid_barrel, *gem_Pdgid_endcap; - - int nev_; // Number of events processed - std::string outputFile_; //file name for ROOT ouput - bool verbose_; - bool monitorDaemon_; - ofstream logFile_; - edm::InputTag gmtSource_ ; - - static const double piconv_; - double phiconv_(float phi); - void book_(const edm::EventSetup& c); - - edm::InputTag candInputTag_; - -}; -#endif diff --git a/DQM/L1TMonitor/src/L1MUTK.cc b/DQM/L1TMonitor/src/L1MUTK.cc deleted file mode 100755 index 05eab365408fd..0000000000000 --- a/DQM/L1TMonitor/src/L1MUTK.cc +++ /dev/null @@ -1,238 +0,0 @@ -/* - * \file L1MUTK.cc - * - * $Date: 2015/06/16 12:00:00 $ - * $Revision: 0.03 $ - * \author S.Baranov - * - */ - -#include "DQM/L1TMonitor/interface/L1MUTK.h" -#include "DQMServices/Core/interface/DQMStore.h" - -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/ESHandle.h" - -using namespace std; -using namespace edm; -using namespace reco; - -const double L1MUTK::piconv_ = 180. / acos(-1.); - -L1MUTK::L1MUTK(const ParameterSet& ps) - : gmtSource_( ps.getParameter< InputTag >("gmtSource") ) - { - - // verbosity switch - verbose_ = ps.getUntrackedParameter("verbose", false); - - if(verbose_) cout << "L1MUTK: constructor...." << endl; - - dbe = NULL; - if ( ps.getUntrackedParameter("DQMStore", false) ) - { - dbe = Service().operator->(); - dbe->setVerbose(0); - } - - outputFile_ = ps.getUntrackedParameter("outputFile", ""); - if ( outputFile_.size() != 0 ) { - cout << "L1T Monitoring histograms will be saved to " << outputFile_.c_str() << endl; - } - - bool disable = ps.getUntrackedParameter("disableROOToutput", false); - if(disable){ - outputFile_=""; - } - - // input tags - candInputTag_ = ps.getParameter("candInputTag"); - LogInfo("L1MUTK") << " L1MUTK::L1MUTK candInputTag " << candInputTag_; - - if ( dbe !=NULL ) { - dbe->setCurrentFolder("L1T/L1MUTK"); - } - -} - -L1MUTK::~L1MUTK() -{ -} - -void L1MUTK::beginJob() -{ - nev_ = 0; -} - -void L1MUTK::beginRun(const edm::Run& r, const edm::EventSetup& c) -{ - if(nev_==0) { - book_(c); - } -} - -void L1MUTK::endJob(void) -{ - if(verbose_) cout << "L1MUTK: end job...." << endl; - LogInfo("EndJob") << "analyzed " << nev_ << " events"; - - if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_); - - return; -} - -void L1MUTK::analyze(const Event& e, const EventSetup& c) -{ - - nev_++; - - edm::Handle aH; - e.getByLabel(candInputTag_, aH); - - if(!aH.isValid()){ - LogDebug("L1MUTK") << " ::analyze Can't find CandView with label **candInputTag**"; - } - - const CandView& cands(*aH.product()); - - int track = 0, trackPt=0; - double maxPt = 0.; - double dxy; - for (auto cand : cands){ - track++; - if (cand.pt() >= maxPt){ - trackPt = track; - maxPt = cand.pt(); - } - } - - track = 0; - for (auto cand : cands){ - track++; - if ( track == trackPt ){ - dxy = cand.vx()*sin(cand.phi())-cand.vy()*cos(cand.phi()); - - LogDebug("L1MUTK") << " ::analyze track " - << track << " Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy - << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); - - gem_Pt->Fill(cand.pt()); - gem_Phi->Fill(cand.phi()); - gem_Eta->Fill(cand.eta()); - gem_Dxy->Fill(dxy); - gem_Z->Fill(cand.vz()); - gem_Q->Fill(float(cand.charge())); - gem_Pdgid->Fill(float(cand.pdgId())); - - if ( std::abs(cand.eta()) <= 1.1 ){ - // Barrel - gem_Pt_barrel->Fill(cand.pt()); - gem_Phi_barrel->Fill(cand.phi()); - gem_Eta_barrel->Fill(cand.eta()); - gem_Dxy_barrel->Fill(dxy); - gem_Z_barrel->Fill(cand.vz()); - gem_Q_barrel->Fill(float(cand.charge())); - gem_Pdgid_barrel->Fill(float(cand.pdgId())); - } else { - // Endcap - gem_Pt_endcap->Fill(cand.pt()); - gem_Phi_endcap->Fill(cand.phi()); - gem_Eta_endcap->Fill(cand.eta()); - gem_Dxy_endcap->Fill(dxy); - gem_Z_endcap->Fill(cand.vz()); - gem_Q_endcap->Fill(float(cand.charge())); - gem_Pdgid_endcap->Fill(float(cand.pdgId())); - } - } - } -} - -void L1MUTK::book_(const EventSetup& c) -{ - // get hold of back-end interface - DQMStore* dbe = 0; - dbe = Service().operator->(); - - if ( dbe ) { - dbe->setCurrentFolder("L1T/L1MUTK"); - dbe->rmdir("L1T/L1MUTK"); - } - - if ( dbe ) - { - dbe->setCurrentFolder("L1T/L1MUTK"); - - /* - * All - */ - gem_Pt = dbe->book1D("gem_Pt","L1 Muon GEM Pt", 100, 0.,250. ); - gem_Pt->setAxisTitle("gem_Pt",1); - - gem_Phi = dbe->book1D("gem_Phi","L1 Muon GEM Phi", 100, -3.,3. ); - gem_Phi->setAxisTitle("gem_Phi",1); - - gem_Eta = dbe->book1D("gem_Eta","L1 Muon GEM Eta", 100, -3.,3. ); - gem_Eta->setAxisTitle("gem_Eta",1); - - gem_Dxy = dbe->book1D("gem_Dxy","L1 Muon GEM Dxy", 100,-15.,15. ); - gem_Dxy->setAxisTitle("gem_Dxy",1); - - gem_Z = dbe->book1D("gem_Z","L1 Muon GEM Z", 100,-20.,20. ); - gem_Z->setAxisTitle("gem_Z",1); - - gem_Q = dbe->book1D("gem_Q","L1 Muon GEM Q", 4, -2.,2. ); - gem_Q->setAxisTitle("gem_Q",1); - - gem_Pdgid = dbe->book1D("gem_Pdgid","L1 Muon GEM Pdgid", 100,-50.,50. ); - gem_Pdgid->setAxisTitle("gem_Pdgid",1); - - /* - * "barrel" (|eta|<=1.1) - */ - gem_Pt_barrel = dbe->book1D("gem_Pt_barrel","L1 Muon GEM Pt barrel", 100, 0.,250. ); - gem_Pt_barrel->setAxisTitle("gem_Pt_barrel",1); - - gem_Phi_barrel = dbe->book1D("gem_Phi_barrel","L1 Muon GEM Phi barrel", 100, -3.,3. ); - gem_Phi_barrel->setAxisTitle("gem_Phi_barrel",1); - - gem_Eta_barrel = dbe->book1D("gem_Eta_barrel","L1 Muon GEM Eta barrel", 100, -3.,3. ); - gem_Eta_barrel->setAxisTitle("gem_Eta_barrel",1); - - gem_Dxy_barrel = dbe->book1D("gem_Dxy_barrel","L1 Muon GEM Dxy barrel", 100,-15.,15. ); - gem_Dxy_barrel->setAxisTitle("gem_Dxy_barrel",1); - - gem_Z_barrel = dbe->book1D("gem_Z_barrel","L1 Muon GEM Z barrel", 100,-20.,20. ); - gem_Z_barrel->setAxisTitle("gem_Z_barrel",1); - - gem_Q_barrel = dbe->book1D("gem_Q_barrel","L1 Muon GEM Q barrel", 4, -2.,2. ); - gem_Q_barrel->setAxisTitle("gem_Q_barrel",1); - - gem_Pdgid_barrel = dbe->book1D("gem_Pdgid_barrel","L1 Muon GEM Pdgid barrel", 100,-50.,50. ); - gem_Pdgid_barrel->setAxisTitle("gem_Pdgid_barrel",1); - - /* - * "endcap" (|eta|>1.1) - */ - gem_Pt_endcap = dbe->book1D("gem_Pt_endcap","L1 Muon GEM Pt endcap", 100,0.,250. ); - gem_Pt_endcap->setAxisTitle("gem_Pt_endcap",1); - - gem_Phi_endcap = dbe->book1D("gem_Phi_endcap","L1 Muon GEM Phi endcap", 100,-3.,3. ); - gem_Phi_endcap->setAxisTitle("gem_Phi_endcap",1); - - gem_Eta_endcap = dbe->book1D("gem_Eta_endcap","L1 Muon GEM Eta endcap", 100,-3.,3. ); - gem_Eta_endcap->setAxisTitle("gem_Eta_endcap",1); - - gem_Dxy_endcap = dbe->book1D("gem_Dxy_endcap","L1 Muon GEM Dxy endcap", 100,-15.,15. ); - gem_Dxy_endcap->setAxisTitle("gem_Dxy_endcap",1); - - gem_Z_endcap = dbe->book1D("gem_Z_endcap","L1 Muon GEM Z endcap", 100,-20.,20. ); - gem_Z_endcap->setAxisTitle("gem_Z_endcap",1); - - gem_Q_endcap = dbe->book1D("gem_Q_endcap","L1 Muon GEM Q endcap", 4, -2.,2. ); - gem_Q_endcap->setAxisTitle("gem_Q_endcap",1); - - gem_Pdgid_endcap = dbe->book1D("gem_Pdgid_endcap","L1 Muon GEM Pdgid endcap", 100,-50.,50. ); - gem_Pdgid_endcap->setAxisTitle("gem_Pdgid_endcap",1); - - } -} From 7c5ac815175c35ba1c02b4e7cdad372bf80ae5b8 Mon Sep 17 00:00:00 2001 From: Sergey Baranov Date: Mon, 6 Jul 2015 13:25:28 +0200 Subject: [PATCH 55/55] L1TkMuonMonitor files have been added --- DQM/L1TMonitor/interface/L1TkMuonMonitor.h | 89 +++++++ DQM/L1TMonitor/python/L1TkMuonMonitor_cfi.py | 9 + DQM/L1TMonitor/src/L1TkMuonMonitor.cc | 242 +++++++++++++++++++ 3 files changed, 340 insertions(+) create mode 100755 DQM/L1TMonitor/interface/L1TkMuonMonitor.h create mode 100644 DQM/L1TMonitor/python/L1TkMuonMonitor_cfi.py create mode 100755 DQM/L1TMonitor/src/L1TkMuonMonitor.cc diff --git a/DQM/L1TMonitor/interface/L1TkMuonMonitor.h b/DQM/L1TMonitor/interface/L1TkMuonMonitor.h new file mode 100755 index 0000000000000..71f4ced903d61 --- /dev/null +++ b/DQM/L1TMonitor/interface/L1TkMuonMonitor.h @@ -0,0 +1,89 @@ +#ifndef DQM_L1TMonitor_L1TkMuonMonitor_h +#define DQM_L1TMonitor_L1TkMuonMonitor_h + +/* + * \file L1TkMuonMonitor.h + * + * Date: 2015/06/16 12:00:00 + * Revision: 0.03 + * \author S.Baranov + * +*/ + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include "DataFormats/Candidate/interface/LeafCandidate.h" + +#include +#include +#include + +// +// class decleration +// + +class L1TkMuonMonitor : public edm::EDAnalyzer { + +public: + + // Constructor + L1TkMuonMonitor(const edm::ParameterSet& ps); + + // Destructor + virtual ~L1TkMuonMonitor(); + +protected: + // Analyze + void analyze(const edm::Event& e, const edm::EventSetup& c); + + // BeginJob + void beginJob(void); + + // BeginRun + void beginRun(const edm::Run& r, const edm::EventSetup& c); + + // EndJob + void endJob(void); + +private: + // ----------member data --------------------------- + DQMStore * dbe; + + MonitorElement *l1tkmu_Pt, *l1tkmu_Pt_barrel, *l1tkmu_Pt_endcap; + MonitorElement *l1tkmu_Eta, *l1tkmu_Eta_barrel, *l1tkmu_Eta_endcap; + MonitorElement *l1tkmu_Phi, *l1tkmu_Phi_barrel, *l1tkmu_Phi_endcap; + MonitorElement *l1tkmu_Dxy, *l1tkmu_Dxy_barrel, *l1tkmu_Dxy_endcap,; + MonitorElement *l1tkmu_Z, *l1tkmu_Z_barrel, *l1tkmu_Z_endcap; + MonitorElement *l1tkmu_Q, *l1tkmu_Q_barrel, *l1tkmu_Q_endcap; + MonitorElement *l1tkmu_Pdgid, *l1tkmu_Pdgid_barrel, *l1tkmu_Pdgid_endcap; + + int nev_; // Number of events processed + std::string outputFile_; //file name for ROOT ouput + bool verbose_; + bool monitorDaemon_; + ofstream logFile_; + edm::InputTag gmtSource_ ; + + static const double piconv_; + double phiconv_(float phi); + void book_(const edm::EventSetup& c); + + edm::InputTag candInputTag_; + +}; +#endif diff --git a/DQM/L1TMonitor/python/L1TkMuonMonitor_cfi.py b/DQM/L1TMonitor/python/L1TkMuonMonitor_cfi.py new file mode 100644 index 0000000000000..42f2eee358c11 --- /dev/null +++ b/DQM/L1TMonitor/python/L1TkMuonMonitor_cfi.py @@ -0,0 +1,9 @@ +import FWCore.ParameterSet.Config as cms + +L1TkMuonMonitor = cms.EDAnalyzer("L1TkMuonMonitor", + disableROOToutput = cms.untracked.bool(True), + verbose = cms.untracked.bool(False), + gmtSource = cms.InputTag("gtDigis"), + DQMStore = cms.untracked.bool(True), + candInputTag = cms.InputTag("L1TkMuonsMerge") +) diff --git a/DQM/L1TMonitor/src/L1TkMuonMonitor.cc b/DQM/L1TMonitor/src/L1TkMuonMonitor.cc new file mode 100755 index 0000000000000..fc1e90521c626 --- /dev/null +++ b/DQM/L1TMonitor/src/L1TkMuonMonitor.cc @@ -0,0 +1,242 @@ +/* + * \file L1TkMuonMonitor.cc + * + * Date: 2015/06/16 12:00:00 + * Revision: 0.03 + * \author S.Baranov + * + */ + +#include "DQM/L1TMonitor/interface/L1TkMuonMonitor.h" +#include "DQMServices/Core/interface/DQMStore.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" + +using namespace std; +using namespace edm; +using namespace reco; + +typedef edm::View CandView; + +const double L1TkMuonMonitor::piconv_ = 180./M_PI; + +L1TkMuonMonitor::L1TkMuonMonitor(const ParameterSet& ps) + : gmtSource_( ps.getParameter< InputTag >("gmtSource") ) + { + + // verbosity switch + verbose_ = ps.getUntrackedParameter("verbose", false); + + if(verbose_) cout << "L1TkMuonMonitor: constructor...." << endl; + + dbe = NULL; + if ( ps.getUntrackedParameter("DQMStore", false) ) + { + dbe = Service().operator->(); + dbe->setVerbose(0); + } + + outputFile_ = ps.getUntrackedParameter("outputFile", ""); + if ( outputFile_.size() != 0 ) { + LogInfo("L1TkMuonMonitor") << "L1T Monitoring histograms will be saved to " << outputFile_.c_str(); + } + + bool disable = ps.getUntrackedParameter("disableROOToutput", false); + if(disable){ + outputFile_=""; + } + + // input tags + candInputTag_ = ps.getParameter("candInputTag"); + LogInfo("L1TkMuonMonitor") << " L1TkMuonMonitor::L1TkMuonMonitor candInputTag " << candInputTag_; + + if ( dbe !=NULL ) { + dbe->setCurrentFolder("L1T/L1TkMuon"); + } + +} + +L1TkMuonMonitor::~L1TkMuonMonitor() +{ +} + +void L1TkMuonMonitor::beginJob() +{ + nev_ = 0; +} + +void L1TkMuonMonitor::beginRun(const edm::Run& r, const edm::EventSetup& c) +{ + if(nev_==0) { + book_(c); + } +} + +void L1TkMuonMonitor::endJob(void) +{ + if(verbose_) cout << "L1TkMuonMonitor: end job...." << endl; + LogInfo("EndJob") << "analyzed " << nev_ << " events"; + + if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_); + + return; +} + +void L1TkMuonMonitor::analyze(const Event& e, const EventSetup& c) +{ + + nev_++; + + edm::Handle aH; + e.getByLabel(candInputTag_, aH); + + if(!aH.isValid()){ + LogDebug("L1TkMuonMonitor") << " ::analyze Can't find CandView with label **candInputTag**"; + } + + const CandView& cands(*aH.product()); + + int track = 0, trackPt=0; + double maxPt = 0.; + double dxy; + for (auto cand : cands){ + track++; + if (cand.pt() >= maxPt){ + trackPt = track; + maxPt = cand.pt(); + } + } + + track = 0; + for (auto cand : cands){ + track++; + if ( track == trackPt ){ + dxy = cand.vx()*sin(cand.phi())-cand.vy()*cos(cand.phi()); + + LogDebug("L1TkMuonMonitor") << " ::analyze track " + << track << " Pt " << cand.pt() << " Phi " << cand.phi() << " Eta " << cand.eta() << " Dxy " << dxy + << " Z " << cand.vz() << " Q " << cand.charge() << " cand.pdgId " << cand.pdgId(); + + l1tkmu_Pt->Fill(cand.pt()); + l1tkmu_Phi->Fill(cand.phi()); + l1tkmu_Eta->Fill(cand.eta()); + l1tkmu_Dxy->Fill(dxy); + l1tkmu_Z->Fill(cand.vz()); + l1tkmu_Q->Fill(float(cand.charge())); + l1tkmu_Pdgid->Fill(float(cand.pdgId())); + + if ( std::abs(cand.eta()) <= 1.1 ){ + // Barrel + l1tkmu_Pt_barrel->Fill(cand.pt()); + l1tkmu_Phi_barrel->Fill(cand.phi()); + l1tkmu_Eta_barrel->Fill(cand.eta()); + l1tkmu_Dxy_barrel->Fill(dxy); + l1tkmu_Z_barrel->Fill(cand.vz()); + l1tkmu_Q_barrel->Fill(float(cand.charge())); + l1tkmu_Pdgid_barrel->Fill(float(cand.pdgId())); + } else { + // Endcap + l1tkmu_Pt_endcap->Fill(cand.pt()); + l1tkmu_Phi_endcap->Fill(cand.phi()); + l1tkmu_Eta_endcap->Fill(cand.eta()); + l1tkmu_Dxy_endcap->Fill(dxy); + l1tkmu_Z_endcap->Fill(cand.vz()); + l1tkmu_Q_endcap->Fill(float(cand.charge())); + l1tkmu_Pdgid_endcap->Fill(float(cand.pdgId())); + } + } + } +} + +void L1TkMuonMonitor::book_(const EventSetup& c) +{ + // get hold of back-end interface + DQMStore* dbe = 0; + dbe = Service().operator->(); + + if ( dbe ) { + dbe->setCurrentFolder("L1T/L1TkMuon"); + dbe->rmdir("L1T/L1TkMuon"); + } + + if ( dbe ) + { + dbe->setCurrentFolder("L1T/L1TkMuon"); + + /* + * All + */ + l1tkmu_Pt = dbe->book1D("l1tkmu_Pt","L1 Muon Pt", 100, 0.,250. ); + l1tkmu_Pt->setAxisTitle("l1tkmu_Pt",1); + + l1tkmu_Phi = dbe->book1D("l1tkmu_Phi","L1 Muon Phi", 100, -3.,3. ); + l1tkmu_Phi->setAxisTitle("l1tkmu_Phi",1); + + l1tkmu_Eta = dbe->book1D("l1tkmu_Eta","L1 Muon Eta", 100, -3.,3. ); + l1tkmu_Eta->setAxisTitle("l1tkmu_Eta",1); + + l1tkmu_Dxy = dbe->book1D("l1tkmu_Dxy","L1 Muon Dxy", 100,-15.,15. ); + l1tkmu_Dxy->setAxisTitle("l1tkmu_Dxy",1); + + l1tkmu_Z = dbe->book1D("l1tkmu_Z","L1 Muon Z", 100,-20.,20. ); + l1tkmu_Z->setAxisTitle("l1tkmu_Z",1); + + l1tkmu_Q = dbe->book1D("l1tkmu_Q","L1 Muon Q", 4, -2.,2. ); + l1tkmu_Q->setAxisTitle("l1tkmu_Q",1); + + l1tkmu_Pdgid = dbe->book1D("l1tkmu_Pdgid","L1 Muon Pdgid", 100,-50.,50. ); + l1tkmu_Pdgid->setAxisTitle("l1tkmu_Pdgid",1); + + /* + * "barrel" (|eta|<=1.1) + */ + l1tkmu_Pt_barrel = dbe->book1D("l1tkmu_Pt_barrel","L1 Muon Pt barrel", 100, 0.,250. ); + l1tkmu_Pt_barrel->setAxisTitle("l1tkmu_Pt_barrel",1); + + l1tkmu_Phi_barrel = dbe->book1D("l1tkmu_Phi_barrel","L1 Muon Phi barrel", 100, -3.,3. ); + l1tkmu_Phi_barrel->setAxisTitle("l1tkmu_Phi_barrel",1); + + l1tkmu_Eta_barrel = dbe->book1D("l1tkmu_Eta_barrel","L1 Muon Eta barrel", 100, -3.,3. ); + l1tkmu_Eta_barrel->setAxisTitle("l1tkmu_Eta_barrel",1); + + l1tkmu_Dxy_barrel = dbe->book1D("l1tkmu_Dxy_barrel","L1 Muon Dxy barrel", 100,-15.,15. ); + l1tkmu_Dxy_barrel->setAxisTitle("l1tkmu_Dxy_barrel",1); + + l1tkmu_Z_barrel = dbe->book1D("l1tkmu_Z_barrel","L1 Muon Z barrel", 100,-20.,20. ); + l1tkmu_Z_barrel->setAxisTitle("l1tkmu_Z_barrel",1); + + l1tkmu_Q_barrel = dbe->book1D("l1tkmu_Q_barrel","L1 Muon Q barrel", 4, -2.,2. ); + l1tkmu_Q_barrel->setAxisTitle("l1tkmu_Q_barrel",1); + + l1tkmu_Pdgid_barrel = dbe->book1D("l1tkmu_Pdgid_barrel","L1 Muon Pdgid barrel", 100,-50.,50. ); + l1tkmu_Pdgid_barrel->setAxisTitle("l1tkmu_Pdgid_barrel",1); + + /* + * "endcap" (|eta|>1.1) + */ + l1tkmu_Pt_endcap = dbe->book1D("l1tkmu_Pt_endcap","L1 Muon Pt endcap", 100,0.,250. ); + l1tkmu_Pt_endcap->setAxisTitle("l1tkmu_Pt_endcap",1); + + l1tkmu_Phi_endcap = dbe->book1D("l1tkmu_Phi_endcap","L1 Muon Phi endcap", 100,-3.,3. ); + l1tkmu_Phi_endcap->setAxisTitle("l1tkmu_Phi_endcap",1); + + l1tkmu_Eta_endcap = dbe->book1D("l1tkmu_Eta_endcap","L1 Muon Eta endcap", 100,-3.,3. ); + l1tkmu_Eta_endcap->setAxisTitle("l1tkmu_Eta_endcap",1); + + l1tkmu_Dxy_endcap = dbe->book1D("l1tkmu_Dxy_endcap","L1 Muon Dxy endcap", 100,-15.,15. ); + l1tkmu_Dxy_endcap->setAxisTitle("l1tkmu_Dxy_endcap",1); + + l1tkmu_Z_endcap = dbe->book1D("l1tkmu_Z_endcap","L1 Muon Z endcap", 100,-20.,20. ); + l1tkmu_Z_endcap->setAxisTitle("l1tkmu_Z_endcap",1); + + l1tkmu_Q_endcap = dbe->book1D("l1tkmu_Q_endcap","L1 Muon Q endcap", 4, -2.,2. ); + l1tkmu_Q_endcap->setAxisTitle("l1tkmu_Q_endcap",1); + + l1tkmu_Pdgid_endcap = dbe->book1D("l1tkmu_Pdgid_endcap","L1 Muon Pdgid endcap", 100,-50.,50. ); + l1tkmu_Pdgid_endcap->setAxisTitle("l1tkmu_Pdgid_endcap",1); + + } +} + +DEFINE_FWK_MODULE(L1TkMuonMonitor);