184 combinatorialTracks_token_(
200 tkDetMapToken_(esConsumes<edm::Transition::BeginRun>()),
202 layers_(conf.getParameter<
int>(
"Layer")),
203 DEBUG_(conf.getUntrackedParameter<
bool>(
"Debug",
false)),
204 addLumi_(conf.getUntrackedParameter<
bool>(
"addLumi",
false)),
205 addCommonMode_(conf.getUntrackedParameter<
bool>(
"addCommonMode",
false)),
206 cutOnTracks_(conf.getParameter<
bool>(
"cutOnTracks")),
207 trackMultiplicityCut_(conf.getParameter<
unsigned int>(
"trackMultiplicity")),
208 useFirstMeas_(conf.getParameter<
bool>(
"useFirstMeas")),
209 useLastMeas_(conf.getParameter<
bool>(
"useLastMeas")),
210 useAllHitsFromTracksWithMissingHits_(conf.getParameter<
bool>(
"useAllHitsFromTracksWithMissingHits")),
211 clusterMatchingMethod_(conf.getParameter<
int>(
"ClusterMatchingMethod")),
212 resXSig_(conf.getParameter<
double>(
"ResXSig")),
213 clusterTracjDist_(conf.getParameter<
double>(
"ClusterTrajDist")),
214 stripsApvEdge_(conf.getParameter<
double>(
"StripsApvEdge")),
215 useOnlyHighPurityTracks_(conf.getParameter<
bool>(
"UseOnlyHighPurityTracks")),
216 bunchX_(conf.getUntrackedParameter<
int>(
"BunchCrossing", 0)),
217 showRings_(conf.getUntrackedParameter<
bool>(
"ShowRings",
false)),
218 showTOB6TEC9_(conf.getUntrackedParameter<
bool>(
"ShowTOB6TEC9",
false)) {
219 nTEClayers_ = (showRings_ ? 7 : 9);
222 if (!badModulesFile.empty()) {
223 std::ifstream badModules_file(badModulesFile);
224 uint32_t badmodule_detid;
225 int mods, fiber1, fiber2, fiber3;
226 if (badModules_file.is_open()) {
228 while (getline(badModules_file,
line)) {
229 if (badModules_file.eof())
231 std::stringstream
ss(
line);
232 ss >> badmodule_detid >>
mods >> fiber1 >> fiber2 >> fiber3;
233 if (badmodule_detid != 0 &&
mods == 1 && (fiber1 == 1 || fiber2 == 1 || fiber3 == 1))
234 badModules_.insert(badmodule_detid);
236 badModules_file.close();
239 if (!badModules_.empty())
240 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Remove additionnal bad modules from the analysis: ";
241 for (
const auto badMod : badModules_) {
242 LogDebug(
"SiStripHitEfficiencyWorker") <<
" " << badMod;
256 h_bx = booker.
book1D(
"bx",
"bx", 3600, 0, 3600);
258 h_PU = booker.
book1D(
"PU",
"PU", 200, 0, 200);
259 h_nTracks = booker.
book1D(
"ntracks",
"n.tracks;n. tracks;n.events", 500, -0.5, 499.5);
264 booker.
book1D(
"goodlayer_found",
"goodlayer_found", 35, 0., 35.));
266 booker.
book1D(
"alllayer_found",
"alllayer_found", 35, 0., 35.));
270 "layer_found",
"layer_found", bounds::k_END_OF_LAYERS, 0., static_cast<float>(bounds::k_END_OF_LAYERS)),
272 "layer_total",
"layer_total", bounds::k_END_OF_LAYERS, 0., static_cast<float>(bounds::k_END_OF_LAYERS)));
279 auto ihres = booker.
book1D(Form(
"resol_layer_%i",
layer), lyrName, 125, -125., 125.);
286 booker.
book1D(Form(
"layerfound_vsLumi_layer_%i",
layer), lyrName, 100, 0, 25000)));
291 booker.
book1D(Form(
"layerfound_vsPU_layer_%i",
layer), lyrName, 45, 0, 90)));
296 booker.
book1D(Form(
"layerfound_vsCM_layer_%i",
layer), lyrName, 20, 0, 400)));
302 booker.
book1D(Form(
"totalVsBx_layer%i",
layer), Form(
"layer %i (%s)",
layer, lyrName.c_str()), 3565, 0, 3565),
303 booker.
book1D(Form(
"foundVsBx_layer%i",
layer), Form(
"layer %i (%s)",
layer, lyrName.c_str()), 3565, 0, 3565)));
307 if (
layer <= bounds::k_LayersAtTOBEnd) {
308 const bool isTIB =
layer <= bounds::k_LayersAtTIBEnd;
309 const auto partition = (isTIB ?
"TIB" :
"TOB");
310 const auto yMax = (isTIB ? 100 : 120);
312 const auto tit = Form(
"%s%i: Map of missing hits", partition, (isTIB ?
layer :
layer - bounds::k_LayersAtTIBEnd));
314 auto ihhotcold = booker.
book2D(tit, tit, 100, -1, 361, 100, -
yMax,
yMax);
316 ihhotcold->setBinLabel(1,
"360", 1);
317 ihhotcold->setBinLabel(50,
"180", 1);
318 ihhotcold->setBinLabel(100,
"0", 1);
319 ihhotcold->setAxisTitle(
"Global Z [cm]", 2);
320 ihhotcold->setOption(
"colz");
323 const bool isTID =
layer <= bounds::k_LayersAtTIDEnd;
325 (isTID ? std::vector<std::string>{
"TID-",
"TID+"} : std::vector<std::string>{
"TEC-",
"TEC+"});
326 const auto axMax = (isTID ? 100 : 120);
328 const auto tit = Form(
"%s%i: Map of missing hits",
330 (isTID ?
layer - bounds::k_LayersAtTOBEnd :
layer - bounds::k_LayersAtTIDEnd));
332 auto ihhotcold = booker.
book2D(tit, tit, 100, -axMax, axMax, 100, -axMax, axMax);
334 ihhotcold->setBinLabel(1,
"+Y", 1);
335 ihhotcold->setBinLabel(50,
"0", 1);
336 ihhotcold->setBinLabel(100,
"-Y", 1);
337 ihhotcold->setAxisTitle(
"Global X", 2);
338 ihhotcold->setBinLabel(1,
"-X", 2);
339 ihhotcold->setBinLabel(50,
"0", 2);
340 ihhotcold->setBinLabel(100,
"+X", 2);
341 ihhotcold->setOption(
"colz");
353 EffTkMap(std::make_unique<TkHistoMap>(tkDetMap, booker, tkDetMapFolder,
"perModule_total", 0,
false,
true),
354 std::make_unique<TkHistoMap>(tkDetMap, booker, tkDetMapFolder,
"perModule_found", 0,
false,
true));
362 LogDebug(
"SiStripHitEfficiencyWorker") <<
"beginning analyze from HitEff";
414 LogDebug(
"SiStripHitEfficiencyWorker") <<
"number ckf tracks found = " << tracksCKF->size();
419 if (!tracksCKF->empty()) {
423 LogDebug(
"SiStripHitEfficiencyWorker")
431 for (
const auto& trajTrack : *trajTrackAssociationHandle) {
435 auto TMeas = trajTrack.key->measurements();
437 const bool hasMissingHits = std::any_of(std::begin(TMeas),
std::end(TMeas), [](
const auto& tm) {
443 for (
auto itm = TMeas.cbegin(); itm != TMeas.cend(); ++itm) {
444 const auto theInHit = (*itm).recHit();
446 LogDebug(
"SiStripHitEfficiencyWorker") <<
"theInHit is valid = " << theInHit->isValid();
448 unsigned int iidd = theInHit->geographicalId().rawId();
450 unsigned int TKlayers = ::checkLayer(iidd, tTopo);
456 LogDebug(
"SiStripHitEfficiencyWorker") <<
"TKlayer from trajectory: " << TKlayers <<
" from module = " << iidd
457 <<
" matched/stereo/rphi = " << ((iidd & 0x3) == 0) <<
"/" 458 << ((iidd & 0x3) == 1) <<
"/" << ((iidd & 0x3) == 2);
468 if (TKlayers == bounds::k_LayersAtTOBEnd || TKlayers == bounds::k_LayersAtTECEnd) {
469 LogDebug(
"SiStripHitEfficiencyWorker") <<
"skipping original TM for TOB 6 or TEC 9";
473 std::vector<TrajectoryAtInvalidHit> TMs;
481 if (::isDoubleSided(iidd, tTopo) && ((iidd & 0x3) == 0)) {
484 TMs.emplace_back(*itm, tTopo, tkgeom,
propagator, 1);
485 TMs.emplace_back(*itm, tTopo, tkgeom,
propagator, 2);
486 }
else if (::isDoubleSided(iidd, tTopo) && (!::check2DPartner(iidd, TMeas))) {
489 TMs.emplace_back(*itm, tTopo, tkgeom,
propagator, 1);
490 TMs.emplace_back(*itm, tTopo, tkgeom,
propagator, 2);
491 LogDebug(
"SiStripHitEfficiencyWorker") <<
" found a hit with a missing partner";
494 TMs.emplace_back(*itm, tTopo, tkgeom,
propagator);
502 const auto nextId = (itm + 1 != TMeas.end()) ? (itm + 1)->recHit()->geographicalId() :
DetId{};
504 if (TKlayers == 9 && theInHit->isValid() && !((!nextId.null()) && (::checkLayer(nextId.rawId(), tTopo) == 9))) {
507 const DetLayer* tob6 = measTracker.geometricSearchTracker()->tobLayers().back();
510 const auto tmp = theLayerMeasurements.measurements(*tob6, tsosTOB5, prop, chi2Estimator);
513 LogDebug(
"SiStripHitEfficiencyWorker") <<
"size of TM from propagation = " <<
tmp.size();
518 const auto& tob6TM =
tmp.back();
519 const auto& tob6Hit = tob6TM.recHit();
520 if (tob6Hit->geographicalId().rawId() != 0) {
521 LogDebug(
"SiStripHitEfficiencyWorker") <<
"tob6 hit actually being added to TM vector";
522 TMs.emplace_back(tob6TM, tTopo, tkgeom,
propagator);
528 if (TKlayers == 21 && theInHit->isValid() &&
529 !((!nextId.null()) && (::checkLayer(nextId.rawId(), tTopo) == 21))) {
530 const DetLayer* tec9pos = measTracker.geometricSearchTracker()->posTecLayers().back();
531 const DetLayer* tec9neg = measTracker.geometricSearchTracker()->negTecLayers().back();
538 LogDebug(
"SiStripHitEfficiencyWorker") <<
"there is a problem with TEC 9 extrapolation";
541 std::vector<TrajectoryMeasurement>
tmp;
542 if (tTopo->tecSide(iidd) == 1) {
543 tmp = theLayerMeasurements.measurements(*tec9neg, tsosTEC9, prop, chi2Estimator);
546 if (tTopo->tecSide(iidd) == 2) {
547 tmp = theLayerMeasurements.measurements(*tec9pos, tsosTEC9, prop, chi2Estimator);
555 const auto& tec9TM =
tmp.back();
556 const auto& tec9Hit = tec9TM.recHit();
558 const unsigned int tec9id = tec9Hit->geographicalId().rawId();
559 LogDebug(
"SiStripHitEfficiencyWorker")
560 <<
"tec9id = " << tec9id <<
" is Double sided = " << ::isDoubleSided(tec9id, tTopo)
561 <<
" and 0x3 = " << (tec9id & 0x3);
563 if (tec9Hit->geographicalId().rawId() != 0) {
564 LogDebug(
"SiStripHitEfficiencyWorker") <<
"tec9 hit actually being added to TM vector";
567 if (::isDoubleSided(tec9id, tTopo)) {
568 TMs.emplace_back(tec9TM, tTopo, tkgeom,
propagator, 1);
569 TMs.emplace_back(tec9TM, tTopo, tkgeom,
propagator, 2);
571 TMs.emplace_back(tec9TM, tTopo, tkgeom,
propagator);
576 for (
const auto& tm : TMs) {
590 LogDebug(
"SiStripHitEfficiencyWorker") <<
"After looping over TrajAtValidHit list";
592 LogDebug(
"SiStripHitEfficiencyWorker") <<
"end TMeasurement loop";
594 LogDebug(
"SiStripHitEfficiencyWorker") <<
"end of trajectories loop";
612 LogDebug(
"SiStripHitEfficiencyWorker") <<
"setting iidd = " << iidd <<
" before checking efficiency and ";
614 const auto xloc = tm.
localX();
615 const auto yloc = tm.
localY();
623 const auto TKlayers = ::checkLayer(iidd, tTopo);
625 const bool withinAcceptance =
626 tm.
withinAcceptance() && (!::isInBondingExclusionZone(iidd, TKlayers, yloc, yErr, tTopo));
630 (
layers_ == bounds::k_LayersStart))) {
631 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Looking at layer under study";
632 unsigned int ModIsBad = 2;
633 unsigned int SiStripQualBad = 0;
634 float commonMode = -100;
638 if (!theClusters.
empty()) {
639 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Checking clusters with size = " << theClusters.
size();
640 std::vector<::ClusterInfo> VCluster_info;
641 const auto idsv = theClusters.
find(iidd);
642 if (idsv != theClusters.
end()) {
644 LogDebug(
"SiStripHitEfficiencyWorker")
645 <<
"found (ClusterId == iidd) with ClusterId = " << idsv->id() <<
" and iidd = " << iidd;
654 if (TKlayers > bounds::k_LayersAtTOBEnd) {
655 const BoundPlane& plane = stripdet->surface();
657 dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
658 std::array<const float, 4>
const& parameterTrap = (*trapezoidalBounds).
parameters();
659 hbedge = parameterTrap[0];
660 htedge = parameterTrap[1];
661 hapoth = parameterTrap[3];
662 uylfac = (htedge - hbedge) / (htedge + hbedge) / hapoth;
663 uxlden = 1 + yloc * uylfac;
667 if (TrajStrip == -1) {
669 float pitch = stripdet->surface().bounds().width() / nstrips;
670 TrajStrip = xloc / pitch + nstrips / 2.0;
672 if (TKlayers > bounds::k_LayersAtTOBEnd) {
673 const float TrajLocXMid = xloc / (1 + (htedge - hbedge) * yloc / (htedge + hbedge) /
675 TrajStrip = TrajLocXMid / pitch + nstrips / 2.0;
680 for (
const auto& clus : *idsv) {
683 float sigma = ::checkConsistency(
parameters, xloc, xErr);
690 if (TKlayers > bounds::k_LayersAtTOBEnd) {
693 yErr * yErr * xloc * xloc * uylfac * uylfac / uxlden / uxlden / uxlden / uxlden);
696 VCluster_info.emplace_back(
res, sigma,
parameters.first.x());
698 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Have ID match. residual = " <<
res <<
" res sigma = " << sigma;
701 LogDebug(
"SiStripHitEfficiencyWorker")
703 <<
" trajectory position = " << xloc <<
" traj error = " << xErr;
706 ::ClusterInfo finalCluster{1000.0, 1000.0, 0.0};
707 if (!VCluster_info.empty()) {
708 LogDebug(
"SiStripHitEfficiencyWorker") <<
"found clusters > 0";
709 if (VCluster_info.size() > 1) {
711 for (
const auto&
res : VCluster_info) {
715 LogDebug(
"SiStripHitEfficiencyWorker")
716 <<
"iresidual = " <<
res.xResidual <<
" isigma = " <<
res.xResidualPull
717 <<
" and FinalRes = " << finalCluster.xResidual;
720 finalCluster = VCluster_info[0];
722 VCluster_info.clear();
725 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Final residual in X = " << finalCluster.xResidual <<
"+-" 726 << (finalCluster.xResidual / finalCluster.xResidualPull);
727 LogDebug(
"SiStripHitEfficiencyWorker")
728 <<
"Checking location of trajectory: abs(yloc) = " <<
abs(yloc) <<
" abs(xloc) = " <<
abs(xloc);
736 LogDebug(
"SiStripHitEfficiencyWorker") <<
"strip is bad from SiStripQuality";
739 LogDebug(
"SiStripHitEfficiencyWorker") <<
"strip is good from SiStripQuality";
743 for (
unsigned int ii = 0;
ii < fedErrorIds.
size();
ii++) {
744 if (iidd == fedErrorIds[
ii].rawId())
750 if (commonModeDigis.isValid() && TrajStrip >= 0 && TrajStrip <= 768) {
751 const auto digiframe = commonModeDigis->find(iidd);
752 if (digiframe != commonModeDigis->end())
757 LogDebug(
"SiStripHitEfficiencyWorker") <<
"before check good";
759 if (finalCluster.xResidualPull < 999.0) {
761 LogDebug(
"SiStripHitEfficiencyWorker")
762 <<
"hit being counted as good " << finalCluster.xResidual <<
" FinalRecHit " << iidd <<
" TKlayers " 763 << TKlayers <<
" xloc " << xloc <<
" yloc " << yloc <<
" module " << iidd
764 <<
" matched/stereo/rphi = " << ((iidd & 0x3) == 0) <<
"/" << ((iidd & 0x3) == 1) <<
"/" 765 << ((iidd & 0x3) == 2);
768 LogDebug(
"SiStripHitEfficiencyWorker")
769 <<
"hit being counted as bad ######### Invalid RPhi FinalResX " << finalCluster.xResidual
770 <<
" FinalRecHit " << iidd <<
" TKlayers " << TKlayers <<
" xloc " << xloc <<
" yloc " << yloc
771 <<
" module " << iidd <<
" matched/stereo/rphi = " << ((iidd & 0x3) == 0) <<
"/" << ((iidd & 0x3) == 1)
772 <<
"/" << ((iidd & 0x3) == 2);
774 LogDebug(
"SiStripHitEfficiencyWorker")
775 <<
" RPhi Error " <<
sqrt(xErr * xErr + yErr * yErr) <<
" ErrorX " << xErr <<
" yErr " << yErr;
778 LogDebug(
"SiStripHitEfficiencyWorker")
779 <<
"To avoid them staying unused: ModIsBad=" << ModIsBad <<
", SiStripQualBad=" << SiStripQualBad
780 <<
", commonMode=" << commonMode <<
", highPurity=" <<
highPurity 781 <<
", withinAcceptance=" << withinAcceptance;
783 unsigned int layer = TKlayers;
785 if (
layer <= bounds::k_LayersAtTIDEnd) {
786 layer = bounds::k_LayersAtTOBEnd +
789 layer = bounds::k_LayersAtTIDEnd + tTopo->
tecRing(iidd);
792 unsigned int layerWithSide =
layer;
793 if (
layer > bounds::k_LayersAtTOBEnd &&
layer <= bounds::k_LayersAtTIDEnd) {
794 const auto side = tTopo->
tidSide(iidd);
796 layerWithSide =
layer + 3;
797 }
else if (
layer > bounds::k_LayersAtTIDEnd) {
798 const auto side = tTopo->
tecSide(iidd);
800 layerWithSide =
layer + 3;
801 }
else if (side == 2) {
806 if ((
bunchX_ > 0 &&
bunchX_ != bunchCrossing) || (!withinAcceptance) ||
808 (!
showTOB6TEC9_ && (TKlayers == bounds::k_LayersAtTOBEnd || TKlayers == bounds::k_LayersAtTECEnd)) ||
812 const bool badquality = (SiStripQualBad == 1);
817 bool badflag =
false;
822 if (ModIsBad == 1 || finalCluster.xResidualPull >
resXSig_)
830 if (finalCluster.xResidualPull ==
840 double stripTrajMid = xloc / Pitch + nstrips / 2.0;
841 double stripCluster = finalCluster.xLocal / Pitch + nstrips / 2.0;
844 if (stripdet &&
layer > bounds::k_LayersAtTOBEnd) {
846 std::array<const float, 4>
const&
parameters = trapezoidalBounds.parameters();
850 const float TrajLocXMid = xloc / (1 + (htedge - hbedge) * yloc / (htedge + hbedge) /
852 stripTrajMid = TrajLocXMid / Pitch + nstrips / 2.0;
856 LogDebug(
"SiStripHitEfficiencyWorker")
857 <<
"layer " <<
layer <<
" vector index " <<
layer - 1 <<
" before filling h_resolution" << std::endl;
864 if (finalCluster.xResidualPull == 1000.0) {
865 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Marking bad for resxsig=1000";
871 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Marking bad for cluster-to-traj distance";
881 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Too close to the edge: " << stripInAPV;
885 LogDebug(
"SiStripHitEfficiencyWorker") <<
"Marking bad for tapv!=capv";
892 LogDebug(
"SiStripHitEfficiencyWorker")
893 <<
"Filling measurement for " << iidd <<
" in layer " <<
layer <<
" histograms with bx=" << bunchCrossing
894 <<
", lumi=" <<
instLumi <<
", PU=" <<
PU <<
"; bad flag=" << badflag;
898 if (
layer > bounds::k_LayersStart &&
layer <= bounds::k_LayersAtTIBEnd) {
902 }
else if (
layer > bounds::k_LayersAtTIBEnd &&
layer <= bounds::k_LayersAtTOBEnd) {
906 }
else if (
layer > bounds::k_LayersAtTOBEnd &&
layer <= bounds::k_LayersAtTIDEnd) {
909 int side = tTopo->
tidSide(iidd);
914 }
else if (
layer > bounds::k_LayersAtTIDEnd) {
917 int side = tTopo->
tecSide(iidd);
925 LogDebug(
"SiStripHitEfficiencyWorker")
926 <<
"layer " <<
layer <<
" vector index " <<
layer - 1 <<
" before filling h_layer_vsSmthg" << std::endl;
966 LogDebug(
"SiStripHitEfficiencyWorker") <<
"after good location check";
968 LogDebug(
"SiStripHitEfficiencyWorker") <<
"after list of clusters";
970 LogDebug(
"SiStripHitEfficiencyWorker") <<
"After layers=TKLayers if with TKlayers=" << TKlayers
975 LogDebug(
"SiStripHitEfficiencyWorker") <<
" Events Analysed " <<
events;
982 desc.add<
bool>(
"UseOnlyHighPurityTracks",
true);
983 desc.add<
bool>(
"cutOnTracks",
false);
984 desc.add<
bool>(
"useAllHitsFromTracksWithMissingHits",
false);
985 desc.add<
bool>(
"useFirstMeas",
false);
986 desc.add<
bool>(
"useLastMeas",
false);
987 desc.add<
double>(
"ClusterTrajDist", 64.0);
988 desc.add<
double>(
"ResXSig", -1);
989 desc.add<
double>(
"StripsApvEdge", 10.0);
997 desc.add<
int>(
"ClusterMatchingMethod", 0);
998 desc.add<
int>(
"Layer", 0);
999 desc.add<
unsigned int>(
"trackMultiplicity", 100);
1000 desc.addUntracked<
bool>(
"Debug",
false);
1001 desc.addUntracked<
bool>(
"ShowRings",
false);
1002 desc.addUntracked<
bool>(
"ShowTOB6TEC9",
false);
1003 desc.addUntracked<
bool>(
"addCommonMode",
false);
1004 desc.addUntracked<
bool>(
"addLumi",
true);
1005 desc.addUntracked<
int>(
"BunchCrossing", 0);
std::pair< LocalPoint, LocalError > LocalValues
const edm::ESGetToken< MeasurementTracker, CkfComponentsRecord > measTrackerToken_
MonitorElement * h_nTracksVsPU
virtual int nstrips() const =0
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
void fill(double x, bool found, float weight=1.)
constexpr char const * layerName[numberOfLayers]
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
std::vector< EffME1 > h_layer_vsPU
std::vector< MonitorElement * > h_resolution
MonitorElement * h_instLumi
bool useOnlyHighPurityTracks_
virtual void setCurrentFolder(std::string const &fullpath)
EffME1(MonitorElement *total, MonitorElement *found)
std::vector< EffME1 > h_layer_vsBx
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
std::vector< MonitorElement * > h_hotcold
virtual void localParameters(AClusters const &clusters, ALocalValues &retValues, const GeomDetUnit &gd, const LocalTrajectoryParameters <p) const
void bookHistograms(DQMStore::IBooker &booker, const edm::Run &run, const edm::EventSetup &setup) override
unsigned int tidSide(const DetId &id) const
#define DEFINE_FWK_MODULE(type)
std::vector< Track > TrackCollection
collection of Tracks
unsigned int monodet_id() const
std::vector< EffME1 > h_layer_vsCM
const edm::EDGetTokenT< DetIdCollection > digis_token_
unsigned int tecRing(const DetId &id) const
ring id
const edm::EDGetTokenT< MeasurementTrackerEvent > trackerEvent_token_
constexpr std::array< uint8_t, layerIndexSize > layer
const_iterator end(bool update=false) const
~SiStripHitEfficiencyWorker() override=default
const edm::ESGetToken< TkDetMap, TrackerTopologyRcd > tkDetMapToken_
void fillForTraj(const TrajectoryAtInvalidHit &tm, const TrackerTopology *tTopo, const TrackerGeometry *tkgeom, const StripClusterParameterEstimator &stripCPE, const SiStripQuality &stripQuality, const DetIdCollection &fedErrorIds, const edm::Handle< edm::DetSetVector< SiStripRawDigi >> &commonModeDigis, const edmNew::DetSetVector< SiStripCluster > &theClusters, int bunchCrossing, float instLumi, float PU, bool highPurity)
std::unique_ptr< TkHistoMap > hTotal
const edm::ESGetToken< StripClusterParameterEstimator, TkStripCPERecord > stripCPEToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > chi2EstimatorToken_
double localErrorX() const
unsigned int tecSide(const DetId &id) const
EffTkMap(std::unique_ptr< TkHistoMap > &&total, std::unique_ptr< TkHistoMap > &&found)
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())
unsigned int clusterMatchingMethod_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
Abs< T >::type abs(const T &t)
unsigned int trackMultiplicityCut_
bool useAllHitsFromTracksWithMissingHits_
bool getData(T &iHolder) const
std::set< uint32_t > badModules_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
SiStripHitEfficiencyWorker(const edm::ParameterSet &conf)
void analyze(const edm::Event &e, const edm::EventSetup &c) override
const Plane & surface() const
The nominal surface of the GeomDet.
const edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAsso_token_
Constants and enumerated types for FED/FEC systems.
double localErrorY() const
virtual const std::array< const float, 4 > parameters() const
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
std::unique_ptr< TkHistoMap > hFound
MonitorElement * h_nTracks
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
const_iterator find(id_type i, bool update=false) const
static const uint16_t STRIPS_PER_APV
const edm::EDGetTokenT< reco::TrackCollection > combinatorialTracks_token_
const edm::ESGetToken< SiStripQuality, SiStripQualityRcd > stripQualityToken_
const edm::EDGetTokenT< LumiScalersCollection > scalerToken_
unsigned int tidRing(const DetId &id) const
std::vector< LumiScalers > LumiScalersCollection
void fill(uint32_t id, bool found, float weight=1.)
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
A Digi for the silicon strip detector, containing only adc information, and suitable for storing raw ...
virtual float width() const =0
std::vector< EffME1 > h_layer_vsLumi
bool withinAcceptance() const
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
short getBadApvs(uint32_t detid) const
const Bounds & bounds() const