45 #include "HepMC/GenRanges.h" 46 #include "CLHEP/Units/PhysicalConstants.h" 90 static constexpr
double pTcut_ = 0.7;
96 static constexpr
double rBTL_ = 110.0;
97 static constexpr
double zETL_ = 290.0;
195 trackMinPt_(iConfig.getParameter<double>(
"trackMinimumPt")),
196 trackMaxBtlEta_(iConfig.getParameter<double>(
"trackMaximumBtlEta")),
197 trackMinEtlEta_(iConfig.getParameter<double>(
"trackMinimumEtlEta")),
198 trackMaxEtlEta_(iConfig.getParameter<double>(
"trackMaximumEtlEta")),
199 optionalPlots_(iConfig.getUntrackedParameter<
bool>(
"optionalPlots")) {
223 mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
239 const MTDTopology* topology = topologyHandle.product();
241 bool topo1Dis =
false;
242 bool topo2Dis =
false;
252 std::unordered_map<uint32_t, MTDHit> m_btlHits;
253 std::unordered_map<uint32_t, MTDHit> m_etlHits;
254 std::unordered_map<uint32_t, std::set<unsigned long int>> m_btlTrkPerCell;
255 std::unordered_map<uint32_t, std::set<unsigned long int>> m_etlTrkPerCell;
269 const auto& primRecoVtx = *(RecVertexHandle.product()->begin());
274 double zsim =
convertMmToCm((*(
mc->vertices_begin()))->position().z());
275 double tsim = (*(
mc->vertices_begin()))->position().t() * CLHEP::mm / CLHEP::c_light;
281 s2r_ = simToRecoH.product();
284 r2s_ = recoToSimH.product();
287 std::unordered_set<unsigned long int> mtdTrackId;
289 std::unordered_set<unsigned long int> tpTrackId;
292 for (
const auto&
tp : tpColl) {
293 if (
tp.eventId().bunchCrossing() == 0 &&
tp.eventId().event() == 0) {
303 for (
const auto& simTrk :
tp.g4Tracks()) {
304 auto const thisTId =
uniqueId(simTrk.trackId(), simTrk.eventId());
305 tpTrackId.insert(thisTId);
306 LogDebug(
"MtdTracksValidation") <<
"TP simTrack id : " << thisTId;
315 for (
auto const&
simHit : btlSimHits) {
320 m_btlTrkPerCell[
id.rawId()].insert(thisHId);
321 auto simHitIt = m_btlHits.emplace(
id.rawId(),
MTDHit()).first;
327 for (
auto const& cell : m_btlTrkPerCell) {
328 bool foundAssocTP =
false;
329 auto detId_key = cell.first;
330 for (
auto const& simtrack : cell.second) {
331 if (tpTrackId.find(simtrack) != tpTrackId.end()) {
333 mtdTrackId.insert(simtrack);
336 if (foundAssocTP ==
false) {
347 for (
auto const&
simHit : etlSimHits) {
353 m_etlTrkPerCell[
id.rawId()].insert(thisHId);
354 auto simHitIt = m_etlHits.emplace(
id.rawId(),
MTDHit()).first;
360 for (
auto const& cell : m_etlTrkPerCell) {
361 bool foundAssocTP =
false;
362 auto detId_key = cell.first;
363 for (
auto const& simtrack : cell.second) {
364 if (tpTrackId.find(simtrack) != tpTrackId.end()) {
366 mtdTrackId.insert(simtrack);
369 if (foundAssocTP ==
false) {
380 for (
const auto&
tp : tpColl) {
381 if (
tp.eventId().bunchCrossing() == 0 &&
tp.eventId().event() == 0) {
389 bool tpIsAssoc =
false;
390 bool goodCell =
false;
391 for (
auto const& cell : m_btlTrkPerCell) {
392 auto detId_key = cell.first;
400 if (thedet ==
nullptr)
401 throw cms::Exception(
"MtdTracksValidation") <<
"GeographicalID: " << std::hex <<
geoId.rawId() <<
" (" 402 << detId.
rawId() <<
") is invalid!" <<
std::dec << std::endl;
413 const auto& global_point = thedet->
toGlobal(local_point);
419 for (
auto const& simtrack : cell.second) {
420 for (
auto const& TPsimtrack :
tp.g4Tracks()) {
421 auto const testId =
uniqueId(TPsimtrack.trackId(), TPsimtrack.eventId());
422 if (simtrack == testId) {
429 if (!tpIsAssoc && goodCell) {
435 bool tpIsAssoc =
false;
436 bool goodCell =
false;
437 for (
auto const& cell : m_etlTrkPerCell) {
438 auto detId_key = cell.first;
446 if (thedet ==
nullptr)
447 throw cms::Exception(
"MtdTracksValidation") <<
"GeographicalID: " << std::hex <<
geoId.rawId() <<
" (" 448 << detId.
rawId() <<
") is invalid!" <<
std::dec << std::endl;
453 const auto& global_point = thedet->
toGlobal(local_point);
459 for (
auto const& simtrack : cell.second) {
460 for (
auto const& TPsimtrack :
tp.g4Tracks()) {
461 auto const testId =
uniqueId(TPsimtrack.trackId(), TPsimtrack.eventId());
462 if (simtrack == testId) {
469 if (!tpIsAssoc && goodCell) {
477 unsigned int index = 0;
480 const bool isGoodVtx =
std::abs(primRecoVtx.z() - zsim) <
deltaZcut_ || primRecoVtx.isFake();
483 for (
const auto& trackGen : *GenRecTrackHandle) {
487 if (trackAssoc[trackref] == -1) {
488 LogInfo(
"mtdTracks") <<
"Extended track not associated";
496 bool twoETLdiscs =
false;
500 if (std::round(SigmatMtd[trackref] - Sigmat0Pid[trackref]) != 0) {
502 <<
"TimeError associated to refitted track is different from TimeError stored in tofPID " 503 "sigmat0 ValueMap: this should not happen";
524 int numMTDBtlvalidhits = 0;
525 for (
const auto hit :
track.recHits()) {
526 if (
hit->isValid() ==
false)
529 if ((
Hit.det() == 6) && (
Hit.subdetId() == 1) && (
Hit.mtdSubDetector() == 1)) {
531 numMTDBtlvalidhits++;
537 if (MTDBtl ==
true) {
561 bool MTDEtlZnegD1 =
false;
562 bool MTDEtlZnegD2 =
false;
563 bool MTDEtlZposD1 =
false;
564 bool MTDEtlZposD2 =
false;
565 int numMTDEtlvalidhits = 0;
566 for (
const auto hit :
track.recHits()) {
567 if (
hit->isValid() ==
false)
570 if ((
Hit.det() == 6) && (
Hit.subdetId() == 1) && (
Hit.mtdSubDetector() == 2)) {
574 if ((ETLHit.
zside() == -1) && (ETLHit.
nDisc() == 1)) {
578 numMTDEtlvalidhits++;
580 if ((ETLHit.
zside() == -1) && (ETLHit.
nDisc() == 2)) {
584 numMTDEtlvalidhits++;
586 if ((ETLHit.
zside() == 1) && (ETLHit.
nDisc() == 1)) {
590 numMTDEtlvalidhits++;
592 if ((ETLHit.
zside() == 1) && (ETLHit.
nDisc() == 2)) {
596 numMTDEtlvalidhits++;
601 if (ETLHit.
zside() == -1) {
604 numMTDEtlvalidhits++;
606 if (ETLHit.
zside() == 1) {
609 numMTDEtlvalidhits++;
618 twoETLdiscs = (MTDEtlZnegD1 ==
true) && (MTDEtlZnegD2 ==
true);
619 if ((MTDEtlZnegD1 ==
true) || (MTDEtlZnegD2 ==
true)) {
631 twoETLdiscs = (MTDEtlZposD1 ==
true) && (MTDEtlZposD2 ==
true);
632 if ((MTDEtlZposD1 ==
true) || (MTDEtlZposD2 ==
true)) {
648 const bool vtxFake = primRecoVtx.isFake();
650 if (
mvaRecSel(trackGen, primRecoVtx, t0Safe[trackref], Sigmat0Safe[trackref])) {
658 double dZ = trackGen.vz() - zsim;
660 double pullT(-9999.);
661 if (Sigmat0Safe[trackref] != -1.) {
662 dT = t0Safe[trackref] - tsim;
663 pullT = dT / Sigmat0Safe[trackref];
665 for (
const auto& genP :
mc->particle_range()) {
678 if (pullT > -9999.) {
696 if (tp_info !=
nullptr &&
mvaTPSel(**tp_info)) {
697 const bool withMTD =
tpWithMTD(**tp_info, mtdTrackId);
708 if (pullT > -9999.) {
711 if (isBTL || twoETLdiscs) {
719 if (isBTL || twoETLdiscs) {
740 ibook.
book1D(
"TrackBTLEffPhiTot",
"Track efficiency vs phi (Tot);#phi_{RECO} [rad]", 100, -3.2, 3.2);
744 ibook.
book1D(
"TrackBTLEffPhiMtd",
"Track efficiency vs phi (Mtd);#phi_{RECO} [rad]", 100, -3.2, 3.2);
747 ibook.
book1D(
"TrackBTLPtRes",
"Track pT resolution ;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1);
750 ibook.
book1D(
"TrackETLEffEtaTotZneg",
"Track efficiency vs eta (Tot) (-Z);#eta_{RECO}", 100, -3.2, -1.4);
752 ibook.
book1D(
"TrackETLEffEtaTotZpos",
"Track efficiency vs eta (Tot) (+Z);#eta_{RECO}", 100, 1.4, 3.2);
754 ibook.
book1D(
"TrackETLEffPhiTotZneg",
"Track efficiency vs phi (Tot) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
756 ibook.
book1D(
"TrackETLEffPhiTotZpos",
"Track efficiency vs phi (Tot) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
758 ibook.
book1D(
"TrackETLEffPtTotZneg",
"Track efficiency vs pt (Tot) (-Z);pt_{RECO} [GeV]", 50, 0, 10);
760 ibook.
book1D(
"TrackETLEffPtTotZpos",
"Track efficiency vs pt (Tot) (+Z);pt_{RECO} [GeV]", 50, 0, 10);
762 ibook.
book1D(
"TrackETLEffEtaMtdZneg",
"Track efficiency vs eta (Mtd) (-Z);#eta_{RECO}", 100, -3.2, -1.4);
764 ibook.
book1D(
"TrackETLEffEtaMtdZpos",
"Track efficiency vs eta (Mtd) (+Z);#eta_{RECO}", 100, 1.4, 3.2);
766 ibook.
book1D(
"TrackETLEffPhiMtdZneg",
"Track efficiency vs phi (Mtd) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
768 ibook.
book1D(
"TrackETLEffPhiMtdZpos",
"Track efficiency vs phi (Mtd) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
770 ibook.
book1D(
"TrackETLEffPtMtdZneg",
"Track efficiency vs pt (Mtd) (-Z);pt_{RECO} [GeV]", 50, 0, 10);
772 ibook.
book1D(
"TrackETLEffPtMtdZpos",
"Track efficiency vs pt (Mtd) (+Z);pt_{RECO} [GeV]", 50, 0, 10);
774 ibook.
book1D(
"TrackETLEffEta2MtdZneg",
"Track efficiency vs eta (Mtd 2 hit) (-Z);#eta_{RECO}", 100, -3.2, -1.4);
776 ibook.
book1D(
"TrackETLEffEta2MtdZpos",
"Track efficiency vs eta (Mtd 2 hit) (+Z);#eta_{RECO}", 100, 1.4, 3.2);
778 "TrackETLEffPhi2MtdZneg",
"Track efficiency vs phi (Mtd 2 hit) (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
780 "TrackETLEffPhi2MtdZpos",
"Track efficiency vs phi (Mtd 2 hit) (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
782 ibook.
book1D(
"TrackETLEffPt2MtdZneg",
"Track efficiency vs pt (Mtd 2 hit) (-Z);pt_{RECO} [GeV]", 50, 0, 10);
784 ibook.
book1D(
"TrackETLEffPt2MtdZpos",
"Track efficiency vs pt (Mtd 2 hit) (+Z);pt_{RECO} [GeV]", 50, 0, 10);
786 ibook.
book1D(
"TrackETLPtRes",
"Track pT resolution;pT_{Gentrack}-pT_{MTDtrack}/pT_{Gentrack} ", 100, -0.1, 0.1);
788 meTracktmtd_ = ibook.
book1D(
"Tracktmtd",
"Track time from TrackExtenderWithMTD;tmtd [ns]", 150, 1, 16);
789 meTrackt0Src_ = ibook.
book1D(
"Trackt0Src",
"Track time from TrackExtenderWithMTD;t0Src [ns]", 100, -1.5, 1.5);
791 ibook.
book1D(
"TrackSigmat0Src",
"Time Error from TrackExtenderWithMTD; #sigma_{t0Src} [ns]", 100, 0, 0.1);
793 meTrackt0Pid_ = ibook.
book1D(
"Trackt0Pid",
"Track t0 as stored in TofPid;t0 [ns]", 100, -1, 1);
797 ibook.
book1D(
"TrackSigmat0SafePID",
"Sigmat0 Safe as stored in TofPid; #sigma_{t0} [ns]", 100, 0, 0.1);
798 meTrackNumHits_ = ibook.
book1D(
"TrackNumHits",
"Number of valid MTD hits per track ; Number of hits", 10, -5, 5);
799 meTrackMVAQual_ = ibook.
book1D(
"TrackMVAQual",
"Track MVA Quality as stored in Value Map ; MVAQual", 100, 0, 1);
801 "TrackPathLenghtvsEta",
"MTD Track pathlength vs MTD track Eta;|#eta|;Pathlength", 100, 0, 3.2, 100.0, 400.0,
"S");
805 ibook.
book1D(
"MVAMatchedEffPtTot",
"Pt of tracks associated to LV matched to GEN; track pt [GeV] ", 110, 0., 11.);
807 "MVAMatchedEffPtMtd",
"Pt of tracks associated to LV matched to GEN with time; track pt [GeV] ", 110, 0., 11.);
810 ibook.
book1D(
"MatchedTPEffPtTot",
"Pt of tracks associated to LV matched to TP; track pt [GeV] ", 110, 0., 11.);
812 "MatchedTPEffPtMtd",
"Pt of tracks associated to LV matched to TP with time; track pt [GeV] ", 110, 0., 11.);
814 ibook.
book1D(
"MatchedTPEffPtEtl2Mtd",
815 "Pt of tracks associated to LV matched to TP with time, 2 ETL hits; track pt [GeV] ",
821 "MatchedTPmtdEffPtTot",
"Pt of tracks associated to LV matched to TP-mtd hit; track pt [GeV] ", 110, 0., 11.);
823 ibook.
book1D(
"MatchedTPmtdEffPtMtd",
824 "Pt of tracks associated to LV matched to TP-mtd hit with time; track pt [GeV] ",
831 ibook.
book1D(
"MVAMatchedEffEtaTot",
"Eta of tracks associated to LV matched to GEN; track eta ", 66, 0., 3.3);
833 "MVAMatchedEffEtaMtd",
"Eta of tracks associated to LV matched to GEN with time; track eta ", 66, 0., 3.3);
836 ibook.
book1D(
"MatchedTPEffEtaTot",
"Eta of tracks associated to LV matched to TP; track eta ", 66, 0., 3.3);
838 "MatchedTPEffEtaMtd",
"Eta of tracks associated to LV matched to TP with time; track eta ", 66, 0., 3.3);
840 ibook.
book1D(
"MatchedTPEffEtaEtl2Mtd",
841 "Eta of tracks associated to LV matched to TP with time, 2 ETL hits; track eta ",
847 "MatchedTPmtdEffEtaTot",
"Eta of tracks associated to LV matched to TP-mtd hit; track eta ", 66, 0., 3.3);
849 ibook.
book1D(
"MatchedTPmtdEffEtaMtd",
850 "Eta of tracks associated to LV matched to TP-mtd hit with time; track eta ",
856 "MVATrackRes",
"t_{rec} - t_{sim} for LV associated tracks; t_{rec} - t_{sim} [ns] ", 120, -0.15, 0.15);
858 ibook.
book1D(
"MVATrackPull",
"Pull for associated tracks; (t_{rec}-t_{sim})/#sigma_{t}", 50, -5., 5.);
860 "MVATrackZposResTot",
"Z_{PCA} - Z_{sim} for associated tracks;Z_{PCA} - Z_{sim} [cm] ", 100, -0.1, 0.1);
863 "UnassociatedDetId",
"Number of MTD cell not associated to any TP per event", 2, 0., 2., 0., 100000.,
"S");
866 ibook.
book1D(
"UnassDeposit",
867 "#Tracking particles with deposit over threshold in MTD cell, but with no cell associated to TP;",
872 ibook.
book1D(
"UnassCrysEnergy",
873 "Energy deposit in BTL crystal with no associated SimTracks;log_{10}(Energy [MeV]) ",
878 "Energy deposit in ETL LGADs with no associated SimTracks;log_{10}(Energy [MeV]) ",
903 ->setComment(
"Association between General and MTD Extended tracks");
910 desc.add<
double>(
"trackMinimumPt", 0.7);
911 desc.add<
double>(
"trackMaximumBtlEta", 1.5);
912 desc.add<
double>(
"trackMinimumEtlEta", 1.6);
913 desc.add<
double>(
"trackMaximumEtlEta", 3.);
914 desc.addUntracked<
bool>(
"optionalPlots",
true);
916 descriptions.
add(
"mtdTracksValid",
desc);
921 if (
gp.status() != 1) {
930 if (
tp.status() != 1) {
933 auto x_pv =
tp.parentVertex()->position().x();
934 auto y_pv =
tp.parentVertex()->position().y();
935 auto z_pv =
tp.parentVertex()->position().z();
937 auto r_pv =
std::sqrt(x_pv * x_pv + y_pv * y_pv);
959 const bool& vtxFake) {
962 double genPT = genP.momentum().perp();
969 const double& zsim) {
977 for (
const auto&
tp :
found->val) {
978 if (
tp.first->eventId().bunchCrossing() == 0 &&
tp.first->eventId().event() == 0 &&
989 const std::unordered_set<unsigned long int>& trkList) {
990 for (
const auto& simTrk :
tp.g4Tracks()) {
991 for (
const auto& mtdTrk : trkList) {
992 if (
uniqueId(simTrk.trackId(), simTrk.eventId()) == mtdTrk) {
MonitorElement * meETLTrackEffEtaTot_[2]
uint8_t geoId(const VFATFrame &frame)
retrieve the GEO information for this channel
edm::EDGetTokenT< edm::ValueMap< int > > trackAssocToken_
static constexpr double etacutGEN_
MonitorElement * meTrackMatchedTPEffEtaMtd_
MonitorElement * meBTLTrackEffPhiMtd_
int getMTDTopologyMode() const
edm::EDGetTokenT< edm::ValueMap< float > > trackMVAQualToken_
edm::EDGetTokenT< edm::ValueMap< float > > pathLengthToken_
T getParameter(std::string const &) const
MonitorElement * meMVATrackResTot_
MonitorElement * meTrackNumHits_
MonitorElement * meTrackt0Pid_
int row(unsigned nrows=kCrystalsPerModuleV2) const
static constexpr double pTcut_
MonitorElement * meETLTrackRPTime_
edm::EDGetTokenT< edm::ValueMap< float > > t0SafePidToken_
edm::EDGetTokenT< edm::ValueMap< float > > t0SrcToken_
static constexpr double rBTL_
MonitorElement * meUnassociatedDetId_
edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
virtual void setCurrentFolder(std::string const &fullpath)
const std::string folder_
edm::EDGetTokenT< edm::HepMCProduct > HepMCProductToken_
HepPDT::ParticleDataTable ParticleDataTable
MonitorElement * meMVATrackMatchedEffEtaMtd_
const bool mvaRecSel(const reco::TrackBase &, const reco::Vertex &, const double &, const double &)
virtual const Topology & topology() const
virtual const PixelTopology & specificTopology() const
MonitorElement * meNTrackingParticles_
static constexpr double etacutREC_
static constexpr double deltaPTcut_
MonitorElement * meBTLTrackPtRes_
edm::EDGetTokenT< std::vector< reco::Vertex > > RecVertexToken_
MonitorElement * meETLTrackEffPtTot_[2]
MonitorElement * meBTLTrackEffEtaMtd_
MonitorElement * meETLTrackEffPhi2Mtd_[2]
edm::EDGetTokenT< edm::ValueMap< float > > tmtdToken_
MonitorElement * meMVATrackMatchedEffPtTot_
MonitorElement * meMVATrackEffPtTot_
MonitorElement * meMVATrackEffEtaTot_
const float trackMaxEtlEta_
const reco::SimToRecoCollection * s2r_
const float trackMaxBtlEta_
ETLDetId geographicalId() const
const unsigned long int uniqueId(const uint32_t x, const EncodedEventId &y)
LocalPoint pixelToModuleLocalPoint(const LocalPoint &plp, int row, int col) const
MonitorElement * meTrackMatchedTPmtdEffEtaTot_
const reco::RecoToSimCollection * r2s_
const_iterator find(const key_type &k) const
find element with specified reference key
const bool mvaGenSel(const HepMC::GenParticle &, const float &)
const edm::Ref< std::vector< TrackingParticle > > * getMatchedTP(const reco::TrackBaseRef &, const double &)
Detector identifier base class for the MIP Timing Layer.
const bool mvaTPSel(const TrackingParticle &)
constexpr NumType convertUnitsTo(double desiredUnits, NumType val)
edm::EDGetTokenT< reco::TrackCollection > GenRecTrackToken_
MonitorElement * meETLTrackEffPhiMtd_[2]
const_iterator end() const
last iterator over the map (read only)
double pt() const
track transverse momentum
edm::EDGetTokenT< reco::TrackCollection > RecTrackToken_
MonitorElement * meBTLTrackEffPhiTot_
MonitorElement * meTrackMatchedTPmtdEffEtaMtd_
MonitorElement * meTrackMatchedTPEffEtaTot_
MonitorElement * meBTLTrackRPTime_
double vz() const
z coordinate of the reference point on track
MonitorElement * meETLTrackEffEta2Mtd_[2]
static constexpr double depositBTLthreshold_
MonitorElement * meETLTrackPtRes_
MonitorElement * meETLTrackEffPt2Mtd_[2]
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
MonitorElement * meTrackt0SafePid_
MonitorElement * meBTLTrackEffEtaTot_
static constexpr double deltaZcut_
MonitorElement * meUnassLgadsEnergy_
Abs< T >::type abs(const T &t)
bool isETL(const double eta) const
#define DEFINE_FWK_MODULE(type)
int nrows() const override
MonitorElement * meMVATrackMatchedEffEtaTot_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
edm::EDGetTokenT< edm::ValueMap< float > > t0PidToken_
MonitorElement * meTrackMatchedTPEffPtEtl2Mtd_
MonitorElement * meTrackMatchedTPmtdEffPtMtd_
MonitorElement * meTrackMVAQual_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
MonitorElement * meETLTrackEffPhiTot_[2]
int column(unsigned nrows=kCrystalsPerModuleV2) const
ETLDetId::EtlLayout etlLayoutFromTopoMode(const int &topoMode)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
edm::EDGetTokenT< edm::ValueMap< float > > SigmatmtdToken_
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleCollectionToken_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Log< level::Info, false > LogInfo
double eta() const
pseudorapidity of momentum vector
const float trackMinEtlEta_
constexpr NumType convertMmToCm(NumType millimeters)
edm::EDGetTokenT< reco::SimToRecoCollection > simToRecoAssociationToken_
static constexpr double etaMatchCut_
static constexpr double zETL_
static constexpr double depositETLthreshold_
MonitorElement * meTrackMatchedTPEffEtaEtl2Mtd_
unsigned long long uint64_t
MonitorElement * meMVATrackPullTot_
MonitorElement * meTrackMatchedTPEffPtMtd_
constexpr uint32_t rawId() const
get the raw id
void analyze(const edm::Event &, const edm::EventSetup &) override
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
MonitorElement * meTrackSigmat0SafePid_
MonitorElement * meETLTrackEffEtaMtd_[2]
const Vector & momentum() const
track momentum vector
MonitorElement * meTrackSigmat0Pid_
edm::EDGetTokenT< CrossingFrame< PSimHit > > btlSimHitsToken_
MonitorElement * meTrackMatchedTPmtdEffPtTot_
MonitorElement * meBTLTrackEffPtMtd_
MonitorElement * meTrackt0Src_
edm::EDGetTokenT< edm::ValueMap< float > > Sigmat0PidToken_
static constexpr double deltaDRcut_
MonitorElement * meTracktmtd_
MonitorElement * meBTLTrackEffPtTot_
MonitorElement * meTrackPathLenghtvsEta_
MonitorElement * meTrackMatchedTPEffPtTot_
Detector identifier class for the Endcap Timing Layer.
MonitorElement * meUnassDeposit_
const bool mvaGenRecMatch(const HepMC::GenParticle &, const double &, const reco::TrackBase &, const bool &)
Detector identifier class for the Barrel Timing Layer. The crystal count must start from 0...
MonitorElement * meUnassCrysEnergy_
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
edm::EDGetTokenT< reco::RecoToSimCollection > recoToSimAssociationToken_
Monte Carlo truth information used for tracking validation.
edm::EDGetTokenT< edm::ValueMap< float > > Sigmat0SrcToken_
MonitorElement * meETLTrackEffPtMtd_[2]
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
~MtdTracksValidation() override
BTLDetId::CrysLayout crysLayoutFromTopoMode(const int &topoMode)
edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
const bool tpWithMTD(const TrackingParticle &, const std::unordered_set< unsigned long int > &)
std::vector< TrackingParticle > TrackingParticleCollection
MonitorElement * meMVATrackZposResTot_
Log< level::Warning, false > LogWarning
auto makeValid(const U &iOtherHandleType) noexcept(false)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
MonitorElement * meMVATrackMatchedEffPtMtd_
MonitorElement * meTrackSigmat0Src_
BTLDetId geographicalId(CrysLayout lay) const
edm::EDGetTokenT< edm::ValueMap< float > > Sigmat0SafePidToken_
MtdTracksValidation(const edm::ParameterSet &)
edm::ESGetToken< HepPDT::ParticleDataTable, edm::DefaultRecord > particleTableToken_