26 siStripClusterInfo_(consumesCollector()),
32 tracksCollection_in_EventTree(
true),
35 conf.getParameter<
edm::
ParameterSet>(
"genericTriggerEventPSet"), consumesCollector(), *this)) {
79 <<
" detectors instantiated in the geometry" << std::endl;
94 book(ibooker, trackerTopology, tkDetMap);
110 LogDebug(
"SiStripMonitorTrack") <<
"[SiStripMonitorTrack::analyse] "
111 <<
"Run " <<
e.id().run() <<
" Event " <<
e.id().event() << std::endl;
120 iSubDet->second.totNClustersOnTrack = 0;
121 iSubDet->second.totNClustersOffTrack = 0;
134 std::map<std::string, MonitorElement*>::iterator iME;
135 std::map<std::string, LayerMEs>::iterator iLayerME;
137 if (!(
topFolderName_.find(
"IsolatedBunches") != std::string::npos)) {
171 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_StoNCorrOnTrack", 0.0,
true);
173 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_NumberOfOnTrackCluster", 0.0,
true);
175 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_NumberOfOfffTrackCluster", 0.0,
true);
177 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_ChargePerCMfromTrack", 0.0,
true);
179 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_NumberMissingHits", 0.0,
true,
true);
181 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_NumberInactiveHits", 0.0,
true,
true);
183 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_NumberValidHits", 0.0,
true,
true);
187 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_ClusterWidthOnTrack", 0.0,
true);
189 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_ClusterWidthOffTrack", 0.0,
true);
193 std::make_unique<TkHistoMap>(tkDetMap,
topFolderName_,
"TkHMap_ChargePerCMfromOrigin", 0.0,
true);
196 std::vector<uint32_t> vdetId_;
198 const char* tec =
"TEC";
199 const char* tid =
"TID";
204 for (std::vector<uint32_t>::const_iterator detid_iter = vdetId_.begin(), detid_end = vdetId_.end();
205 detid_iter != detid_end;
207 uint32_t detid = *detid_iter;
210 edm::LogError(
"SiStripMonitorTrack") <<
"[" << __PRETTY_FUNCTION__ <<
"] invalid detid " << detid << std::endl;
217 std::pair<std::string, int32_t> det_layer_pair = folder_organizer.
GetSubDetAndLayer(detid, tTopo,
false);
226 std::map<std::string, LayerMEs>::iterator iLayerME =
LayerMEsMap.find(layer_id);
228 folder_organizer.
setLayerFolder(detid, tTopo, det_layer_pair.second,
false);
232 const char* subdet = det_layer_pair.first.c_str();
233 if (std::strstr(subdet, tec) !=
nullptr || std::strstr(subdet, tid) !=
nullptr) {
237 std::pair<std::string, int32_t> det_ring_pair = folder_organizer.
GetSubDetAndLayer(detid, tTopo,
true);
238 folder_organizer.
setLayerFolder(detid, tTopo, det_ring_pair.second,
true);
244 std::pair<std::string, std::string> sdet_pair = folder_organizer.
getSubDetFolderAndTag(detid, tTopo);
254 for (std::vector<uint32_t>::const_iterator detid_iter = vdetId_.begin(), detid_end = vdetId_.end();
255 detid_iter != detid_end;
257 uint32_t detid = *detid_iter;
260 edm::LogError(
"SiStripMonitorTrack") <<
"[" << __PRETTY_FUNCTION__ <<
"] invalid detid " << detid << std::endl;
267 std::pair<std::string, int32_t> det_layer_pair = folder_organizer.
GetSubDetAndLayer(detid, tTopo,
false);
276 std::map<std::string, LayerMEs>::iterator iLayerME =
LayerMEsMap.find(layer_id);
278 folder_organizer.
setLayerFolder(detid, tTopo, det_layer_pair.second,
false);
282 const char* subdet = det_layer_pair.first.c_str();
283 if (std::strstr(subdet, tec) !=
nullptr || std::strstr(subdet, tid) !=
nullptr) {
287 std::pair<std::string, int32_t> det_ring_pair = folder_organizer.
GetSubDetAndLayer(detid, tTopo,
true);
288 folder_organizer.
setLayerFolder(detid, tTopo, det_ring_pair.second,
true);
294 std::pair<std::string, std::string> sdet_pair = folder_organizer.
getSubDetFolderAndTag(detid, tTopo);
303 if (!(
topFolderName_.find(
"IsolatedBunches") != std::string::npos)) {
307 ibooker.
book1D(
"ClusterStoNCorr_OnTrack_TIBTID",
"TIB/TID [FECCrate=1] (OnTrack)", 100, 0., 100.);
311 ibooker.
book1D(
"ClusterStoNCorr_OnTrack_TOB",
"TOB [FECCrate=4] (OnTrack)", 100, 0., 100.);
315 ibooker.
book1D(
"ClusterStoNCorr_OnTrack_TECM",
"TECM [FECCrate=3] (OnTrack)", 100, 0., 100.);
319 ibooker.
book1D(
"ClusterStoNCorr_OnTrack_TECP",
"TECP [FECCrate=2] (OnTrack)", 100, 0., 100.);
323 ibooker.
book2D(
"ClusterStoNCorr_OnTrack_FECCratevsFECSlot",
" S/N (On track)", 22, 0.5, 22.5, 4, 0.5, 4.5);
332 "TIB/TID [FECCrate=1] (OnTrack)",
343 "ClusterStoNCorr_OnTrack_FECSlotVsFECRing_TOB",
"TOB [FECCrate=4] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
348 "ClusterStoNCorr_OnTrack_FECSlotVsFECRing_TECM",
"TEC- [FECCrate=3] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
353 "ClusterStoNCorr_OnTrack_FECSlotVsFECRing_TECP",
"TEC- [FECCrate=2] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
362 ibooker.
book2D(
"ClusterCount_OnTrack_FECCratevsFECSlot",
" S/N (On track)", 22, 0.5, 22.5, 4, 0.5, 4.5);
371 "ClusterCount_OnTrack_FECSlotVsFECRing_TIBTID",
"TIB/TID [FECCrate=1] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
376 "ClusterCount_OnTrack_FECSlotVsFECRing_TOB",
"TOB [FECCrate=4] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
381 "ClusterCount_OnTrack_FECSlotVsFECRing_TECM",
"TEC- [FECCrate=3] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
386 "ClusterCount_OnTrack_FECSlotVsFECRing_TECP",
"TEC- [FECCrate=2] (OnTrack)", 10, -0.5, 9.5, 22, 0.5, 22.5);
398 std::map<std::string, ModMEs>::iterator iModME =
ModMEsMap.find(hid);
413 ibooker,
"TH1ClusterChargeRaw", hidmanager.
createHistoId(
"ClusterChargeRaw_OnTrack",
name,
id).c_str());
416 ibooker,
"TH1ClusterChargeCorr", hidmanager.
createHistoId(
"ClusterChargeCorr_OnTrack",
name,
id).c_str());
419 ibooker,
"TH1ClusterStoNCorrMod", hidmanager.
createHistoId(
"ClusterStoNCorr_OnTrack",
name,
id).c_str());
426 total_nr_strips + 0.5);
432 ibooker,
"TH1ClusterChargePerCM", hidmanager.
createHistoId(
"ClusterChargePerCMfromTrack",
name,
id).c_str());
435 ibooker,
"TH1ClusterChargePerCM", hidmanager.
createHistoId(
"ClusterChargePerCMfromOrigin",
name,
id).c_str());
449 if (
id.
find(
"TEC") == std::string::npos &&
id.find(
"TID") == std::string::npos) {
475 hpar =
"TH1ClusterStoNCorr";
480 hpar =
"TH1ClusterGain";
485 hpar =
"TH1ClusterChargeCorr";
490 hpar =
"TH1ClusterCharge";
494 hpar =
"TH1ClusterCharge";
499 hpar =
"TH1ClusterChargeRaw";
503 hpar =
"TH1ClusterChargeRaw";
508 hpar =
"TH1ClusterNoise";
512 hpar =
"TH1ClusterNoise";
517 hpar =
"TH1ClusterWidth";
521 hpar =
"TH1ClusterWidth";
526 if (layer_id.find(
"TEC") != std::string::npos)
527 total_nr_strips = 3 * 2 * 128;
530 hpar =
"TH1ClusterPos";
531 if (layer_id.find(
"TIB") != std::string::npos || layer_id.find(
"TOB") != std::string::npos ||
538 hpar =
"TH2ClusterPosTOB";
539 if (layer_id.find(
"TOB") != std::string::npos)
543 hpar =
"TH2ClusterPosTIB";
544 if (layer_id.find(
"TIB") != std::string::npos)
548 hpar =
"TH2ClusterPosTEC";
549 if (layer_id.find(
"TEC") != std::string::npos) {
550 static constexpr
int nbinR = 8;
551 static constexpr
float rval[9] = {0, 21.2, 30.8, 40.4, 50.0, 60.0, 75.0, 90.0, 110.0};
552 static constexpr
int nmodulesPhi = 40 * 6;
553 float phival[nmodulesPhi];
554 for (
int i = 0;
i < nmodulesPhi;
i++)
555 phival[
i] = -3.2 + 2 *
i * 3.2 / nmodulesPhi;
557 TH2F*
temp =
new TH2F(
"tmp",
"tmp", nbinR,
rval, nmodulesPhi - 1, phival);
562 hpar =
"TH2ClusterPosTID";
563 if (layer_id.find(
"TID") != std::string::npos) {
564 static constexpr
int nbinR = 4;
565 static constexpr
float rval[5] = {0, 21.2, 30.8, 40.4, 50.0};
566 static constexpr
int nmodulesPhi = 80 * 4;
567 float phival[nmodulesPhi];
568 for (
int i = 0;
i < nmodulesPhi;
i++)
569 phival[
i] = -3.2 +
i * 2 * 3.2 / nmodulesPhi;
571 TH2F*
temp =
new TH2F(
"tmp",
"tmp", nbinR,
rval, nmodulesPhi - 1, phival);
576 hpar =
"TH1ClusterPos";
577 if (layer_id.find(
"TIB") != std::string::npos || layer_id.find(
"TOB") != std::string::npos ||
583 hpar =
"TH1ClusterChargePerCM";
586 hname = hidmanager.
createHistoLayer(
"Summary_ClusterChargePerCMfromOrigin",
name, layer_id,
"OnTrack");
587 hpar =
"TH1ClusterChargePerCM";
590 hname = hidmanager.
createHistoLayer(
"Summary_ClusterChargePerCMfromOrigin",
name, layer_id,
"OffTrack");
591 hpar =
"TH1ClusterChargePerCM";
608 hpar =
"TH1ClusterStoNCorr";
613 hpar =
"TH1ClusterGain";
618 hpar =
"TH1ClusterChargeCorr";
623 hpar =
"TH1ClusterCharge";
627 hpar =
"TH1ClusterCharge";
632 hpar =
"TH1ClusterChargeRaw";
636 hpar =
"TH1ClusterChargeRaw";
641 hpar =
"TH1ClusterNoise";
645 hpar =
"TH1ClusterNoise";
650 hpar =
"TH1ClusterWidth";
654 hpar =
"TH1ClusterWidth";
659 if (
ring_id.find(
"TEC") != std::string::npos)
660 total_nr_strips = 3 * 2 * 128;
663 hpar =
"TH1ClusterPos";
668 hpar =
"TH1ClusterPos";
674 hpar =
"TH1ClusterChargePerCM";
678 hpar =
"TH1ClusterChargePerCM";
682 hpar =
"TH1ClusterChargePerCM";
701 completeName =
"Summary_TotalNumberOfClusters_OnTrack" +
subdet_tag;
702 axisName =
"Number of on-track clusters in " +
name;
708 completeName =
"Summary_TotalNumberOfClusters_OffTrack" +
subdet_tag;
709 axisName =
"Number of off-track clusters in " +
name;
714 if (
name.find(
"TIB") != std::string::npos) {
718 if (
name.find(
"TOB") != std::string::npos) {
722 if (
name.find(
"TID") != std::string::npos) {
726 if (
name.find(
"TEC") != std::string::npos) {
734 completeName =
"Summary_ClusterGain" +
subdet_tag;
738 completeName =
"Summary_ClusterStoNCorr_OnTrack" +
subdet_tag;
741 completeName =
"Summary_ClusterStoNCorrThin_OnTrack" +
subdet_tag;
742 if (
subdet_tag.find(
"TEC") != std::string::npos)
745 completeName =
"Summary_ClusterStoNCorrThick_OnTrack" +
subdet_tag;
746 if (
subdet_tag.find(
"TEC") != std::string::npos)
750 completeName =
"Summary_ClusterChargeCorr_OnTrack" +
subdet_tag;
753 completeName =
"Summary_ClusterChargeCorrThin_OnTrack" +
subdet_tag;
754 if (
subdet_tag.find(
"TEC") != std::string::npos)
757 completeName =
"Summary_ClusterChargeCorrThick_OnTrack" +
subdet_tag;
758 if (
subdet_tag.find(
"TEC") != std::string::npos)
762 completeName =
"Summary_ClusterCharge_OnTrack" +
subdet_tag;
766 completeName =
"Summary_ClusterChargeRaw_OnTrack" +
subdet_tag;
770 completeName =
"Summary_ClusterCharge_OffTrack" +
subdet_tag;
774 completeName =
"Summary_ClusterChargeRaw_OffTrack" +
subdet_tag;
778 completeName =
"Summary_ClusterStoN_OffTrack" +
subdet_tag;
782 completeName =
"Summary_ClusterChargePerCMfromTrack" +
subdet_tag;
786 completeName =
"Summary_ClusterChargePerCMfromOrigin_OnTrack" +
subdet_tag;
790 completeName =
"Summary_ClusterChargePerCMfromOrigin_OffTrack" +
subdet_tag;
795 completeName =
"Trend_TotalNumberOfClusters_OnTrack" +
subdet_tag;
797 completeName =
"Trend_TotalNumberOfClusters_OffTrack" +
subdet_tag;
807 const char* ParameterSetLabel,
819 const char* ParameterSetLabel,
834 const char* ParameterSetLabel,
852 const char* ParameterSetLabel,
879 me->getTH1()->SetCanExtend(TH1::kAllAxes);
883 me->setAxisTitle(
"Lumisection", 1);
892 auto const& trajParams =
track.extra()->trajParams();
894 auto hb =
track.recHitsBegin();
895 for (
unsigned int h = 0;
h <
track.recHitsSize();
h++) {
896 auto ttrh = *(
hb +
h);
899 uint32_t thedetid = ttrh->rawId();
902 if ((ttrh->getType() == 1))
904 if ((ttrh->getType() == 2))
906 if ((ttrh->getType() == 0))
911 if (!ttrh->isValid())
915 auto statedirection = trajParams[
h].momentum();
919 const SiStripRecHit2D* hit2D = dynamic_cast<const SiStripRecHit2D*>(ttrh->hit());
920 const SiStripRecHit1D* hit1D = dynamic_cast<const SiStripRecHit1D*>(ttrh->hit());
925 LogTrace(
"SiStripMonitorTrack") <<
"\nMatched recHit found" << std::endl;
932 statedirection = monodet->
toLocal(gtrkdirup);
935 if (statedirection.mag())
936 RecHitInfo<SiStripRecHit2D>(&
m, statedirection, digilist,
ev, track_ok);
939 statedirection = stereodet->
toLocal(gtrkdirup);
942 if (statedirection.mag())
943 RecHitInfo<SiStripRecHit2D>(&
s, statedirection, digilist,
ev, track_ok);
944 }
else if (projhit) {
945 LogTrace(
"SiStripMonitorTrack") <<
"\nProjected recHit found" << std::endl;
954 LogTrace(
"SiStripMonitorTrack") <<
"\nProjected recHit found MONO" << std::endl;
956 statedirection = det->
toLocal(gtrkdirup);
957 if (statedirection.mag())
958 RecHitInfo<SiStripRecHit2D>(&(originalhit), statedirection, digilist,
ev, track_ok);
960 LogTrace(
"SiStripMonitorTrack") <<
"\nProjected recHit found STEREO" << std::endl;
963 statedirection = det->
toLocal(gtrkdirup);
964 if (statedirection.mag())
965 RecHitInfo<SiStripRecHit2D>(&(originalhit), statedirection, digilist,
ev, track_ok);
968 if (statedirection.mag())
969 RecHitInfo<SiStripRecHit2D>(hit2D, statedirection, digilist,
ev, track_ok);
971 if (statedirection.mag())
972 RecHitInfo<SiStripRecHit1D>(hit1D, statedirection, digilist,
ev, track_ok);
974 LogDebug(
"SiStripMonitorTrack") <<
" LocalMomentum: " << statedirection
975 <<
"\nLocal x-z plane angle: " << atan2(statedirection.x(), statedirection.z());
987 const bool track_ok) {
990 LogTrace(
"SiStripMonitorTrack") <<
"\nMatched recHit found" << std::endl;
998 statedirection = monodet->
toLocal(gtrkdirup);
1000 if (statedirection.
mag())
1001 RecHitInfo<SiStripRecHit2D>(&
m, statedirection, digilist,
ev, track_ok);
1005 statedirection = stereodet->
toLocal(gtrkdirup);
1007 if (statedirection.
mag())
1008 RecHitInfo<SiStripRecHit2D>(&
s, statedirection, digilist,
ev, track_ok);
1009 }
else if (projhit) {
1010 LogTrace(
"SiStripMonitorTrack") <<
"\nProjected recHit found" << std::endl;
1020 LogTrace(
"SiStripMonitorTrack") <<
"\nProjected recHit found MONO" << std::endl;
1022 statedirection = det->
toLocal(gtrkdirup);
1023 if (statedirection.
mag())
1024 RecHitInfo<SiStripRecHit2D>(&(originalhit), statedirection, digilist,
ev, track_ok);
1026 LogTrace(
"SiStripMonitorTrack") <<
"\nProjected recHit found STEREO" << std::endl;
1029 statedirection = det->
toLocal(gtrkdirup);
1030 if (statedirection.
mag())
1031 RecHitInfo<SiStripRecHit2D>(&(originalhit), statedirection, digilist,
ev, track_ok);
1034 statedirection = localMomentum;
1035 if (statedirection.
mag())
1036 RecHitInfo<SiStripRecHit2D>(hit2D, statedirection, digilist,
ev, track_ok);
1038 statedirection = localMomentum;
1039 if (statedirection.
mag())
1040 RecHitInfo<SiStripRecHit1D>(hit1D, statedirection, digilist,
ev, track_ok);
1042 LogDebug(
"SiStripMonitorTrack") <<
" LocalMomentum: " << statedirection
1043 <<
"\nLocal x-z plane angle: " << atan2(statedirection.
x(), statedirection.
z());
1048 using namespace std;
1049 using namespace edm;
1050 using namespace reco;
1065 if (trackCollectionHandle.
isValid()) {
1076 if (
track.pt() < 0.8)
1078 if (
track.p() < 2.0)
1080 if (
track.hitPattern().numberOfValidTrackerHits() <= 6)
1082 if (
track.normalizedChi2() > 10.0)
1100 uint32_t thedetid = (*hit)->rawId();
1103 if (((*hit)->getType() == 1))
1105 if (((*hit)->getType() == 2))
1107 if (((*hit)->getType() == 0))
1112 if (!(*hit)->isValid())
1114 DetId detID = (*hit)->geographicalId();
1120 const SiStripRecHit2D* hit2D = dynamic_cast<const SiStripRecHit2D*>((theHit));
1121 const SiStripRecHit1D* hit1D = dynamic_cast<const SiStripRecHit1D*>((theHit));
1127 hitStudy(
ev, digilist, projhit, matchedhit, hit2D, hit1D, localMomentum, track_ok);
1174 LogDebug(
"SiStripMonitorTrack") <<
"Track number " << ++
i << std::endl;
1196 if (!tkrecHit->isValid()) {
1197 LogTrace(
"SiStripMonitorTrack") <<
"\t\t Invalid Hit " << std::endl;
1201 const uint32_t& detid = tkrecHit->geographicalId().rawId();
1204 <<
"\n\t\tRecHit on det " << detid <<
"\n\t\tRecHit in LP " << tkrecHit->localPosition() <<
"\n\t\tRecHit in GP "
1206 <<
"\n\t\tRecHit trackLocal vector " <<
LV.
x() <<
" " <<
LV.y() <<
" " <<
LV.z() << std::endl;
1209 if (tkrecHit !=
nullptr && tkrecHit->isValid()) {
1210 const DetId detid = tkrecHit->geographicalId();
1213 float clust_Pos1 = -1000;
1214 float clust_Pos2 = -1000;
1219 clust_Pos1 = theGlobalPos.
z();
1220 clust_Pos2 = theGlobalPos.
phi();
1222 clust_Pos1 =
pow(theGlobalPos.
x() * theGlobalPos.
x() + theGlobalPos.
y() * theGlobalPos.
y(), 0.5);
1223 clust_Pos2 = theGlobalPos.
phi();
1245 edm::LogError(
"SiStripMonitorTrack") <<
"NULL hit" << std::endl;
1266 if (siStripClusterHandle.
isValid()) {
1269 DSVEnd = siStripClusterHandle->end();
1272 uint32_t detid = DSViter->id();
1275 LogDebug(
"SiStripMonitorTrack") <<
"on detid " << detid <<
" N Cluster= " << DSViter->size();
1306 edm::LogError(
"SiStripMonitorTrack") <<
"ClusterCollection is not valid!!" << std::endl;
1320 me.iLayer =
nullptr;
1322 me.iSubdet =
nullptr;
1324 std::map<std::string, LayerMEs>::iterator iLayer =
LayerMEsMap.find(layer_id);
1326 me.iLayer = &(iLayer->second);
1331 me.iRing = &(iRing->second);
1334 std::map<std::string, SubDetMEs>::iterator iSubdet =
SubDetMEsMap.find(sdet_tag);
1336 me.iSubdet = &(iSubdet->second);
1356 uint32_t thedetid = (*hit)->rawId();
1357 if (!(
DetId(thedetid).subdetId() >= 3 &&
DetId(thedetid).subdetId() <= 6)) {
1361 if (!(*hit)->isValid())
1365 if (theHit ==
nullptr) {
1369 const SiStripRecHit1D* hit1D = dynamic_cast<const SiStripRecHit1D*>(theHit);
1370 const SiStripRecHit2D* hit2D = dynamic_cast<const SiStripRecHit2D*>(theHit);
1373 if (hit1D && !hit2D) {
1379 else if (!hit1D && hit2D) {
1385 std::vector<const FedChannelConnection*> getFedChanConnections;
1392 for (
const auto& getFedChanConnection : getFedChanConnections) {
1393 if (getFedChanConnection ==
nullptr) {
1397 int binfeccrate = getFedChanConnection->fecCrate();
1398 int binfecslot = getFedChanConnection->fecSlot();
1399 int binfecring = getFedChanConnection->fecRing();
1458 if (
input1->getBinContent(binx, biny) == 0.) {
1460 input2->setBinContent(binx, biny, 1);
1462 double nentries =
input2->getBinContent(binx, biny);
1463 double theMeanSoN = (
input1->getBinContent(binx, biny) * nentries +
value) / (nentries + 1);
1465 input1->setBinContent(binx, biny, theMeanSoN);
1466 input2->setBinContent(binx, biny,
input2->getBinContent(binx, biny) + 1);
1473 const uint32_t detid,
1484 if (cluster ==
nullptr)
1494 LogDebug(
"SiStripMonitorTrack") <<
"\n\tLV " <<
LV.x() <<
" " <<
LV.y() <<
" " <<
LV.z() <<
" " <<
LV.mag()
1497 cosRZ = fabs(
LV.z()) /
LV.mag();
1498 LogDebug(
"SiStripMonitorTrack") <<
"\n\t cosRZ " << cosRZ << std::endl;
1509 double chargeraw = 0;
1510 double clustergain = 0;
1511 auto digi_it = digilist.
find(detid);
1513 for (
size_t chidx = 0; chidx < cluster->
stripCharges().size(); ++chidx) {
1522 if (digi_it == digilist.
end()) {
1525 for (
const auto& digiobj : *digi_it) {
1526 if (digiobj.strip() == cluster->
firstStrip() + chidx) {
1527 chargeraw += digiobj.adc();
1540 LocalVector locDir(locVtx.x(), locVtx.y(), locVtx.z());
1544 uint32_t adet = cluster->
detId();
1549 uint32_t adet = cluster->
detId();
1555 if (
MEs.iSubdet !=
nullptr)
1556 MEs.iSubdet->totNClustersOnTrack++;
1558 if (
MEs.iLayer !=
nullptr) {
1560 fillME(
MEs.iLayer->ClusterStoNCorrOnTrack, StoN * cosRZ);
1562 LogDebug(
"SiStripMonitorTrack") <<
"Module " << detid <<
" in Event " <<
eventNb <<
" noise "
1564 fillME(
MEs.iLayer->ClusterGain, clustergain);
1567 fillME(
MEs.iLayer->ClusterChargeRawOnTrack, chargeraw);
1573 fillME(
MEs.iLayer->ClusterPosOnTrack2D, valX, valY);
1576 fillME(
MEs.iLayer->ClusterChargePerCMfromTrack, dQdx_fromTrack);
1578 fillME(
MEs.iLayer->ClusterChargePerCMfromOriginOnTrack, dQdx_fromOrigin);
1581 if (
MEs.iRing !=
nullptr) {
1583 fillME(
MEs.iRing->ClusterStoNCorrOnTrack, StoN * cosRZ);
1585 LogDebug(
"SiStripMonitorTrack") <<
"Module " << detid <<
" in Event " <<
eventNb <<
" noise "
1587 fillME(
MEs.iRing->ClusterGain, clustergain);
1590 fillME(
MEs.iRing->ClusterChargeRawOnTrack, chargeraw);
1595 fillME(
MEs.iRing->ClusterChargePerCMfromTrack, dQdx_fromTrack);
1597 fillME(
MEs.iRing->ClusterChargePerCMfromOriginOnTrack, dQdx_fromOrigin);
1600 if (
MEs.iSubdet !=
nullptr) {
1601 fillME(
MEs.iSubdet->ClusterGain, clustergain);
1603 fillME(
MEs.iSubdet->ClusterChargeRawOnTrack, chargeraw);
1605 fillME(
MEs.iSubdet->ClusterStoNCorrOnTrack, StoN * cosRZ);
1608 fillME(
MEs.iSubdet->ClusterChargePerCMfromTrack, dQdx_fromTrack);
1610 fillME(
MEs.iSubdet->ClusterChargePerCMfromOriginOnTrack, dQdx_fromOrigin);
1615 fillME(
MEs.iSubdet->ClusterStoNCorrThickOnTrack, StoN * cosRZ);
1619 fillME(
MEs.iSubdet->ClusterStoNCorrThinOnTrack, StoN * cosRZ);
1625 uint32_t adet = cluster->
detId();
1630 LogDebug(
"SiStripMonitorTrack") <<
"Module " << detid <<
" in Event " <<
eventNb <<
" noise " <<
noise
1634 uint32_t adet = cluster->
detId();
1645 std::map<std::string, ModMEs>::iterator iModME =
ModMEsMap.find(
name);
1648 fillME(iModME->second.ClusterStoNCorr, StoN * cosRZ);
1651 <<
"Module " <<
name <<
" in Event " <<
eventNb <<
" noise " <<
noise << std::endl;
1652 fillME(iModME->second.ClusterGain, clustergain);
1654 fillME(iModME->second.ClusterChargeRaw, chargeraw);
1656 fillME(iModME->second.ClusterChargeCorr,
charge * cosRZ);
1662 fillME(iModME->second.ClusterChargePerCMfromTrack, dQdx_fromTrack);
1664 fillME(iModME->second.ClusterChargePerCMfromOrigin, dQdx_fromOrigin);
1668 int PGVposCounter = cluster->
maxIndex();
1672 fillME(iModME->second.ClusterPGV,
i, 0.);
1674 fillME(iModME->second.ClusterPGV, PGVposCounter++, (*it) / PGVmax);
1676 for (
int i = PGVposCounter;
1679 fillME(iModME->second.ClusterPGV,
i, 0.);
1685 if (
MEs.iSubdet !=
nullptr)
1686 MEs.iSubdet->totNClustersOffTrack++;
1689 uint32_t adet = cluster->
detId();
1692 LogDebug(
"SiStripMonitorTrack") <<
"Module firing " << detid <<
" in Event " <<
eventNb << std::endl;
1696 uint32_t adet = cluster->
detId();
1703 if (
MEs.iLayer !=
nullptr) {
1704 fillME(
MEs.iLayer->ClusterGain, clustergain);
1706 fillME(
MEs.iLayer->ClusterChargeRawOffTrack, chargeraw);
1710 fillME(
MEs.iLayer->ClusterChargePerCMfromOriginOffTrack, dQdx_fromOrigin);
1713 if (
MEs.iRing !=
nullptr) {
1714 fillME(
MEs.iRing->ClusterGain, clustergain);
1716 fillME(
MEs.iRing->ClusterChargeRawOffTrack, chargeraw);
1720 fillME(
MEs.iRing->ClusterChargePerCMfromOriginOffTrack, dQdx_fromOrigin);
1723 if (
MEs.iSubdet !=
nullptr) {
1724 fillME(
MEs.iSubdet->ClusterGain, clustergain);
1726 fillME(
MEs.iSubdet->ClusterChargeRawOffTrack, chargeraw);
1728 fillME(
MEs.iSubdet->ClusterStoNOffTrack, StoN);
1729 fillME(
MEs.iSubdet->ClusterChargePerCMfromOriginOffTrack, dQdx_fromOrigin);