92 for (
auto iterTP : *trackingParticleHandle) {
96 int tmp_eventid = iterTP.eventId().event();
97 float tmp_tp_pt = iterTP.pt();
98 float tmp_tp_phi = iterTP.phi();
99 float tmp_tp_eta = iterTP.eta();
103 theStubRefs = MCTruthTTStubHandle->findTTStubRefs(tp_ptr);
105 int hasStubInLayer[11] = {0};
106 for (
unsigned int is = 0; is < theStubRefs.size(); is++) {
107 DetId detid(theStubRefs.at(is)->getDetId());
110 layer = static_cast<int>(tTopo->
layer(detid)) - 1;
112 layer = static_cast<int>(tTopo->
layer(detid)) + 5;
115 if (MCTruthTTStubHandle->findTrackingParticlePtr(theStubRefs.at(is)).isNull() && hasStubInLayer[layer] < 2)
116 hasStubInLayer[layer] = 1;
118 hasStubInLayer[layer] = 2;
121 int nStubLayerTP = 0;
122 int nStubLayerTP_g = 0;
124 if (hasStubInLayer[
isum] >= 1)
126 else if (hasStubInLayer[
isum] == 2)
142 if (MCTruthTTStubHandle.
isValid()) {
144 theStubRefs = MCTruthTTStubHandle->findTTStubRefs(tp_ptr);
145 nStubTP = (
int)theStubRefs.size();
147 if (MCTruthTTClusterHandle.
isValid() && MCTruthTTClusterHandle->findTTClusterRefs(tp_ptr).empty())
150 float tmp_tp_vz = iterTP.vz();
151 float tmp_tp_vx = iterTP.vx();
152 float tmp_tp_vy = iterTP.vy();
153 float tmp_tp_charge = tp_ptr->
charge();
154 int tmp_tp_pdgid = iterTP.pdgId();
159 float tmp_tp_t =
tan(2.0 * atan(1.0) - 2.0 * atan(
exp(-tmp_tp_eta)));
160 float delx = -tmp_tp_vx;
161 float dely = -tmp_tp_vy;
162 float K = 0.01 * 0.5696 / tmp_tp_pt * tmp_tp_charge;
163 float A = 1. / (2. * K);
164 float tmp_tp_x0p = delx - A *
sin(tmp_tp_phi);
165 float tmp_tp_y0p = dely + A *
cos(tmp_tp_phi);
166 float tmp_tp_rp =
sqrt(tmp_tp_x0p * tmp_tp_x0p + tmp_tp_y0p * tmp_tp_y0p);
167 static double pi = 4.0 * atan(1.0);
168 float delphi = tmp_tp_phi - atan2(-K * tmp_tp_x0p, K * tmp_tp_y0p);
174 float tmp_tp_VtxZ = tmp_tp_vz + tmp_tp_t * delphi / (2.0 * K);
175 float tmp_tp_VtxR =
sqrt(tmp_tp_vx * tmp_tp_vx + tmp_tp_vy * tmp_tp_vy);
176 float tmp_tp_d0 = tmp_tp_charge * tmp_tp_rp - (1. / (2. * K));
180 float other_d0 = -tmp_tp_vx *
sin(tmp_tp_phi) + tmp_tp_vy *
cos(tmp_tp_phi);
181 tmp_tp_d0 = tmp_tp_d0 * (-1);
183 tmp_tp_d0 = other_d0;
184 tmp_tp_VtxZ = tmp_tp_vz;
190 if (tmp_tp_VtxR < 1.0) {
198 if (tmp_tp_VtxR > 1.0)
211 float i_chi2dof = 99999;
212 if (MCTruthTTTrackHandle.
isValid()) {
213 std::vector<edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_>>> matchedTracks =
214 MCTruthTTTrackHandle->findTTTrackPtrs(tp_ptr);
222 for (
auto thisTrack : matchedTracks) {
223 if (!MCTruthTTTrackHandle->isGenuine(thisTrack))
229 int tmp_trk_nstub = thisTrack->getStubRefs().size();
232 float dmatch_pt = 999;
233 float dmatch_eta = 999;
234 float dmatch_phi = 999;
238 dmatch_pt = std::fabs(my_tp->
p4().pt() - tmp_tp_pt);
239 dmatch_eta = std::fabs(my_tp->
p4().eta() - tmp_tp_eta);
240 dmatch_phi = std::fabs(my_tp->
p4().phi() - tmp_tp_phi);
241 match_id = my_tp->
pdgId();
242 float tmp_trk_chi2dof = (thisTrack->getChi2(
L1Tk_nPar)) / (2 * tmp_trk_nstub -
L1Tk_nPar);
245 if (dmatch_pt < 0.1 && dmatch_eta < 0.1 && dmatch_phi < 0.1 && tmp_tp_pdgid == match_id) {
247 if (i_track < 0 || tmp_trk_chi2dof < i_chi2dof) {
248 i_track = trkCounter;
249 i_chi2dof = tmp_trk_chi2dof;
258 float tmp_matchtrk_pt = -999;
259 float tmp_matchtrk_eta = -999;
260 float tmp_matchtrk_phi = -999;
261 float tmp_matchtrk_VtxZ = -999;
262 float tmp_matchtrk_chi2 = -999;
263 float tmp_matchtrk_chi2dof = -999;
264 int tmp_matchTrk_nStub = -999;
265 float tmp_matchtrk_d0 = -999;
267 tmp_matchtrk_pt = matchedTracks[i_track]->getMomentum(
L1Tk_nPar).perp();
268 tmp_matchtrk_eta = matchedTracks[i_track]->getMomentum(
L1Tk_nPar).eta();
269 tmp_matchtrk_phi = matchedTracks[i_track]->getMomentum(
L1Tk_nPar).phi();
270 tmp_matchtrk_VtxZ = matchedTracks[i_track]->getPOCA(
L1Tk_nPar).z();
271 tmp_matchtrk_chi2 = matchedTracks[i_track]->getChi2(
L1Tk_nPar);
272 tmp_matchtrk_chi2dof = matchedTracks[i_track]->getChi2Red(
L1Tk_nPar);
273 tmp_matchTrk_nStub = (
int)matchedTracks[i_track]->getStubRefs().size();
279 float tmp_matchtrk_x0 = matchedTracks[i_track]->getPOCA(
L1Tk_nPar).x();
280 float tmp_matchtrk_y0 = matchedTracks[i_track]->getPOCA(
L1Tk_nPar).y();
281 tmp_matchtrk_d0 = -tmp_matchtrk_x0 *
sin(tmp_matchtrk_phi) + tmp_matchtrk_y0 *
cos(tmp_matchtrk_phi);
286 if (tmp_matchTrk_nStub < L1Tk_minNStub || tmp_matchtrk_chi2 >
L1Tk_maxChi2 ||
292 if (tmp_tp_pt > 0 && tmp_tp_pt <= 10)
300 float pt_diff = tmp_matchtrk_pt - tmp_tp_pt;
301 float pt_res = pt_diff / tmp_tp_pt;
302 float eta_res = tmp_matchtrk_eta - tmp_tp_eta;
303 float phi_res = tmp_matchtrk_phi - tmp_tp_phi;
304 float VtxZ_res = tmp_matchtrk_VtxZ - tmp_tp_VtxZ;
305 float d0_res = tmp_matchtrk_d0 - tmp_tp_d0;
314 if (std::fabs(tmp_tp_eta) >= 0 && std::fabs(tmp_tp_eta) < 0.7) {
319 if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
321 else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
323 else if (tmp_tp_pt >= 8)
325 }
else if (std::fabs(tmp_tp_eta) >= 0.7 && std::fabs(tmp_tp_eta) < 1.0) {
330 if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
332 else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
334 else if (tmp_tp_pt >= 8)
336 }
else if (std::fabs(tmp_tp_eta) >= 1.0 && std::fabs(tmp_tp_eta) < 1.2) {
341 if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
343 else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
345 else if (tmp_tp_pt >= 8)
347 }
else if (std::fabs(tmp_tp_eta) >= 1.2 && std::fabs(tmp_tp_eta) < 1.6) {
352 if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
354 else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
356 else if (tmp_tp_pt >= 8)
358 }
else if (std::fabs(tmp_tp_eta) >= 1.6 && std::fabs(tmp_tp_eta) < 2.0) {
363 if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
365 else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
367 else if (tmp_tp_pt >= 8)
369 }
else if (std::fabs(tmp_tp_eta) >= 2.0 && std::fabs(tmp_tp_eta) <= 2.4) {
374 if (tmp_tp_pt >= 2 && tmp_tp_pt < 3)
376 else if (tmp_tp_pt >= 3 && tmp_tp_pt < 8)
378 else if (tmp_tp_pt >= 8)
396 HistoName =
"trackParts_Pt";
407 HistoName =
"trackParts_Eta";
418 HistoName =
"trackParts_Phi";
431 HistoName =
"Track_MatchedChi2";
442 HistoName =
"Track_MatchedChi2Red";
465 HistoName =
"match_tp_pt";
476 HistoName =
"tp_pt_zoom";
486 HistoName =
"match_tp_pt_zoom";
497 HistoName =
"tp_eta";
507 HistoName =
"match_tp_eta";
528 HistoName =
"match_tp_d0";
539 HistoName =
"tp_VtxR";
549 HistoName =
"match_tp_VtxR";
560 HistoName =
"tp_VtxZ";
570 HistoName =
"match_tp_VtxZ";
583 HistoName =
"res_pt";
594 HistoName =
"res_eta";
605 HistoName =
"res_ptRel";
616 HistoName =
"reseta_eta0to0p7";
626 HistoName =
"reseta_eta0p7to1";
636 HistoName =
"reseta_eta1to1p2";
646 HistoName =
"reseta_eta1p2to1p6";
656 HistoName =
"reseta_eta1p6to2";
666 HistoName =
"reseta_eta2to2p4";
678 HistoName =
"respt_eta0to0p7_pt2to3";
688 HistoName =
"respt_eta0p7to1_pt2to3";
698 HistoName =
"respt_eta1to1p2_pt2to3";
708 HistoName =
"respt_eta1p2to1p6_pt2to3";
718 HistoName =
"respt_eta1p6to2_pt2to3";
728 HistoName =
"respt_eta2to2p4_pt2to3";
739 HistoName =
"respt_eta0to0p7_pt3to8";
749 HistoName =
"respt_eta0p7to1_pt3to8";
759 HistoName =
"respt_eta1to1p2_pt3to8";
769 HistoName =
"respt_eta1p2to1p6_pt3to8";
779 HistoName =
"respt_eta1p6to2_pt3to8";
789 HistoName =
"respt_eta2to2p4_pt3to8";
800 HistoName =
"respt_eta0to0p7_pt8toInf";
810 HistoName =
"respt_eta0p7to1_pt8toInf";
820 HistoName =
"respt_eta1to1p2_pt8toInf";
830 HistoName =
"respt_eta1p2to1p6_pt8toInf";
840 HistoName =
"respt_eta1p6to2_pt8toInf";
850 HistoName =
"respt_eta2to2p4_pt8toInf";
862 HistoName =
"resphi_eta0to0p7";
872 HistoName =
"resphi_eta0p7to1";
882 HistoName =
"resphi_eta1to1p2";
892 HistoName =
"resphi_eta1p2to1p6";
902 HistoName =
"resphi_eta1p6to2";
912 HistoName =
"resphi_eta2to2p4";
924 HistoName =
"resVtxZ_eta0to0p7";
934 HistoName =
"resVtxZ_eta0p7to1";
944 HistoName =
"resVtxZ_eta1to1p2";
954 HistoName =
"resVtxZ_eta1p2to1p6";
964 HistoName =
"resVtxZ_eta1p6to2";
974 HistoName =
"resVtxZ_eta2to2p4";
986 HistoName =
"resd0_eta0to0p7";
996 HistoName =
"resd0_eta0p7to1";
1006 HistoName =
"resd0_eta1to1p2";
1016 HistoName =
"resd0_eta1p2to1p6";
1026 HistoName =
"resd0_eta1p6to2";
1036 HistoName =
"resd0_eta2to2p4";
const LorentzVector & p4() const
Four-momentum Lorentz vector. Note this is taken from the first SimTrack only.
MonitorElement * resd0_eta1to1p2
MonitorElement * match_tp_d0
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
T getParameter(std::string const &) const
MonitorElement * match_tp_VtxR
MonitorElement * respt_eta2to2p4_pt8toInf
MonitorElement * Track_MatchedChi2
MonitorElement * resVtxZ_eta1to1p2
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * resVtxZ_eta1p6to2
MonitorElement * trackParts_Phi
bool getByToken(EDGetToken token, Handle< PROD > &result) const
MonitorElement * match_tp_pt
MonitorElement * trackParts_Pt
void setCurrentFolder(std::string const &fullpath)
int pdgId() const
PDG ID.
Sin< T >::type sin(const T &t)
MonitorElement * respt_eta1p6to2_pt3to8
MonitorElement * match_tp_eta
MonitorElement * reseta_eta1p6to2
~OuterTrackerMonitorTrackingParticles() override
MonitorElement * resd0_eta1p6to2
MonitorElement * reseta_eta1to1p2
edm::EDGetTokenT< std::vector< TrackingParticle > > trackingParticleToken_
MonitorElement * match_tp_VtxZ
MonitorElement * tp_pt_zoom
MonitorElement * respt_eta0to0p7_pt3to8
float charge() const
Electric charge. Note this is taken from the first SimTrack only.
#define DEFINE_FWK_MODULE(type)
MonitorElement * resphi_eta0to0p7
MonitorElement * reseta_eta2to2p4
edm::EDGetTokenT< TTTrackAssociationMap< Ref_Phase2TrackerDigi_ > > ttTrackMCTruthToken_
MonitorElement * respt_eta1to1p2_pt3to8
MonitorElement * respt_eta1to1p2_pt8toInf
Cos< T >::type cos(const T &t)
MonitorElement * resd0_eta1p2to1p6
Tan< T >::type tan(const T &t)
MonitorElement * respt_eta1p2to1p6_pt2to3
edm::EDGetTokenT< TTClusterAssociationMap< Ref_Phase2TrackerDigi_ > > ttClusterMCTruthToken_
MonitorElement * reseta_eta1p2to1p6
MonitorElement * resphi_eta0p7to1
MonitorElement * respt_eta0p7to1_pt8toInf
static constexpr auto TOB
MonitorElement * resd0_eta2to2p4
MonitorElement * resVtxZ_eta0p7to1
MonitorElement * resphi_eta2to2p4
Class to store the L1 Track Trigger stubs.
MonitorElement * match_tp_pt_zoom
MonitorElement * resVtxZ_eta2to2p4
MonitorElement * respt_eta0p7to1_pt3to8
MonitorElement * respt_eta2to2p4_pt2to3
MonitorElement * resVtxZ_eta0to0p7
edm::EDGetTokenT< TTStubAssociationMap< Ref_Phase2TrackerDigi_ > > ttStubMCTruthToken_
MonitorElement * respt_eta1p2to1p6_pt8toInf
MonitorElement * respt_eta1p6to2_pt2to3
MonitorElement * resphi_eta1p2to1p6
MonitorElement * reseta_eta0to0p7
MonitorElement * respt_eta0p7to1_pt2to3
MonitorElement * reseta_eta0p7to1
MonitorElement * resVtxZ_eta1p2to1p6
std::string topFolderName_
MonitorElement * Track_MatchedChi2Red
unsigned int layer(const DetId &id) const
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * respt_eta0to0p7_pt2to3
MonitorElement * respt_eta1p6to2_pt8toInf
MonitorElement * respt_eta2to2p4_pt3to8
MonitorElement * resd0_eta0p7to1
MonitorElement * respt_eta1to1p2_pt2to3
OuterTrackerMonitorTrackingParticles(const edm::ParameterSet &)
MonitorElement * resphi_eta1to1p2
static constexpr auto TID
T const * product() const
MonitorElement * respt_eta1p2to1p6_pt3to8
MonitorElement * resphi_eta1p6to2
MonitorElement * respt_eta0to0p7_pt8toInf
MonitorElement * res_ptRel
MonitorElement * trackParts_Eta
MonitorElement * resd0_eta0to0p7
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)