48 debug_ =
pset.getUntrackedParameter<
bool>(
"debug");
63 cout <<
"[DTSegment2DQuality] Constructor called " << endl;
71 histograms.h2DHitRPhi = std::make_unique<HRes2DHit>(
"RPhi", booker,
true,
true);
72 histograms.h2DHitRZ = std::make_unique<HRes2DHit>(
"RZ", booker,
true,
true);
73 histograms.h2DHitRZ_W0 = std::make_unique<HRes2DHit>(
"RZ_W0", booker,
true,
true);
74 histograms.h2DHitRZ_W1 = std::make_unique<HRes2DHit>(
"RZ_W1", booker,
true,
true);
75 histograms.h2DHitRZ_W2 = std::make_unique<HRes2DHit>(
"RZ_W2", booker,
true,
true);
77 histograms.h2DHitEff_RPhi = std::make_unique<HEff2DHit>(
"RPhi", booker);
78 histograms.h2DHitEff_RZ = std::make_unique<HEff2DHit>(
"RZ", booker);
79 histograms.h2DHitEff_RZ_W0 = std::make_unique<HEff2DHit>(
"RZ_W0", booker);
80 histograms.h2DHitEff_RZ_W1 = std::make_unique<HEff2DHit>(
"RZ_W1", booker);
81 histograms.h2DHitEff_RZ_W2 = std::make_unique<HEff2DHit>(
"RZ_W2", booker);
83 cout <<
"[DTSegment2DQuality] hitsos created " << endl;
99 map<DTSuperLayerId, PSimHitContainer> simHitsPerSl;
104 simHitsPerSl[slId].push_back(
simHit);
111 if (not segment2Ds.
isValid()) {
114 <<
" in this event, skipping !" << endl;
121 for (slId = segment2Ds->id_begin(); slId != segment2Ds->id_end(); ++slId) {
129 int nMuSimHit = muSimHitPerWire.size();
130 if (nMuSimHit == 0
or nMuSimHit == 1) {
131 if (
debug_ and nMuSimHit == 1) {
132 cout <<
"[DTSegment2DQuality] Only " << nMuSimHit <<
" mu SimHit in this SL, skipping !" << endl;
137 cout <<
"=== SL " << (*slId) <<
" has " << nMuSimHit <<
" SimHits" << endl;
143 if (inAndOutSimHit.first == inAndOutSimHit.second) {
144 cout <<
"[DTHitQualityUtils]***Warning: outermost and innermost SimHit "
151 pair<LocalVector, LocalPoint> dirAndPosSimSegm =
154 LocalVector simSegmLocalDir = dirAndPosSimSegm.first;
155 LocalPoint simSegmLocalPos = dirAndPosSimSegm.second;
157 cout <<
" Simulated segment: local direction " << simSegmLocalDir << endl
158 <<
" local position " << simSegmLocalPos << endl;
165 float posSimSeg = simSegmLocalPos.
x();
167 float etaSimSeg = simSegmGlobalPos.
eta();
168 float phiSimSeg = simSegmGlobalPos.
phi();
172 bool recHitFound =
false;
176 cout <<
" Sl: " << *slId <<
" has " << nsegm <<
" 2D segments" << endl;
186 bool bestRecHitFound =
false;
187 double deltaAlpha = 99999;
192 if ((*segment2D).dimension() != 2) {
194 cout <<
"[DTSegment2DQuality]***Error: This is not 2D segment !!!" << endl;
199 LocalVector recSegDirection = (*segment2D).localDirection();
200 LocalPoint recSegPosition = (*segment2D).localPosition();
204 cout <<
" RecSegment direction: " << recSegDirection << endl
205 <<
" position : " << recSegPosition << endl
206 <<
" alpha : " << recSegAlpha << endl;
209 if (fabs(recSegAlpha - angleSimSeg) < deltaAlpha) {
210 deltaAlpha = fabs(recSegAlpha - angleSimSeg);
211 bestRecHit = &(*segment2D);
212 bestRecHitFound =
true;
216 if (bestRecHitFound) {
227 fabs(bestRecHitLocalPos.
x() - posSimSeg) < 5 *
sigmaResPos_) {
233 if ((*slId).superlayer() == 1
or (*slId).superlayer() == 3) {
235 }
else if ((*slId).superlayer() == 2) {
239 bestRecHitLocalPos.
x(),
242 sqrt(bestRecHitLocalPosErr.
xx()),
243 sqrt(bestRecHitLocalDirErr.
xx()));
244 if (
abs((*slId).wheel()) == 0) {
246 }
else if (
abs((*slId).wheel()) == 1) {
248 }
else if (
abs((*slId).wheel()) == 2) {
252 hRes->fill(angleSimSeg,
255 bestRecHitLocalPos.
x(),
258 sqrt(bestRecHitLocalPosErr.
xx()),
259 sqrt(bestRecHitLocalDirErr.
xx()));
265 if ((*slId).superlayer() == 1
or (*slId).superlayer() == 3) {
267 }
else if ((*slId).superlayer() == 2) {
268 histograms.h2DHitEff_RZ->fill(etaSimSeg, phiSimSeg, posSimSeg, angleSimSeg, recHitFound);
269 if (
abs((*slId).wheel()) == 0) {
271 }
else if (
abs((*slId).wheel()) == 1) {
273 }
else if (
abs((*slId).wheel()) == 2) {
277 hEff->
fill(etaSimSeg, phiSimSeg, posSimSeg, angleSimSeg, recHitFound);