@@ -42,6 +42,7 @@ namespace {
42
42
#include "DataFormats/GeometrySurface/interface/LocalError.h"
43
43
44
44
namespace {
45
+ inline
45
46
void print(const char* where, const TrajectoryStateOnSurface& t1,const TrajectoryStateOnSurface& t2) {
46
47
std::cout << where<< std::endl;
47
48
std::cout << t1.localParameters().vector() << std::endl;
@@ -50,8 +51,6 @@ namespace {
50
51
std::cout << t2.localError().positionError() << std::endl;
51
52
52
53
}
53
-
54
-
55
54
}
56
55
57
56
@@ -72,55 +71,62 @@ void TkGluedMeasurementDet::doubleMatch(const TrajectoryStateOnSurface& ts, cons
72
71
auto mf = monoHits.size();
73
72
auto sf = stereoHits.size();
74
73
75
- // mono does not require "projection"
74
+ bool emptyMono = false;
75
+ bool emptyStereo = false;
76
+
77
+ // mono does require "projection" for precise estimate
76
78
if (collector.filter()) {
77
- //TrajectoryStateOnSurface mts = fastProp(ts,geomDet().surface(),theMonoDet->geomDet().surface());
78
- theMonoDet->recHits(ts,collector.estimator(),data,monoHits,diffs);
79
+ emptyMono = theMonoDet->empty(data);
80
+ if likely(!emptyMono) {
81
+ TrajectoryStateOnSurface mts = fastProp(ts,geomDet().surface(),theMonoDet->geomDet().surface());
82
+ theMonoDet->recHits(mts,collector.estimator(),data,monoHits,diffs);
83
+ }
79
84
// print("mono", mts,ts);
80
85
mf = monoHits.size();
81
86
}
82
- else
87
+ else {
83
88
monoHits = theMonoDet->recHits(ts, data);
89
+ emptyMono = monoHits.empty();
90
+ }
84
91
85
- // stereo in principle requires "projection"
86
- TrajectoryStateOnSurface pts = ts;
92
+ // stereo requires "projection" for precision and change in coordinates
87
93
diffs.clear();
88
94
if (collector.filter()) {
89
- TrajectoryStateOnSurface pts = fastProp(ts,geomDet().surface(),theStereoDet->geomDet().surface());
90
- theStereoDet->recHits(pts,collector.estimator(),data,stereoHits,diffs);
91
- // print("stereo", pts,ts);
95
+ emptyStereo = theStereoDet->empty(data);
96
+ if likely(!emptyStereo) {
97
+ TrajectoryStateOnSurface pts = fastProp(ts,geomDet().surface(),theStereoDet->geomDet().surface());
98
+ theStereoDet->recHits(pts,collector.estimator(),data,stereoHits,diffs);
99
+ // print("stereo", pts,ts);
100
+ }
92
101
sf = stereoHits.size();
93
102
}
94
- else
95
- stereoHits= theStereoDet->recHits(pts,data);
96
-
103
+ else {
104
+ stereoHits= theStereoDet->recHits(ts,data);
105
+ emptyStereo = stereoHits.empty();
106
+ }
97
107
98
108
if (collector.filter()) {
99
109
auto mh = monoHits.size();
100
110
auto sh = stereoHits.size();
101
111
stat(mh,sh,mf,sf);
102
112
}
103
113
104
- if (stereoHits.empty()&&monoHits.empty() ) return;
114
+ if unlikely( emptyMono & emptyStereo ) return;
105
115
106
- if( (!theStereoDet->isActive(data)) ||
107
- ((!collector.filter())&&stereoHits.empty())
108
- ) {
109
- // make mono TTRHs and project them
110
- projectOnGluedDet( collector, monoHits, glbDir);
111
- return;
112
- }
116
+ if unlikely(emptyStereo) {
117
+ // make mono TTRHs and project them
118
+ projectOnGluedDet( collector, monoHits, glbDir);
119
+ return;
120
+ }
113
121
114
- if ( (!theMonoDet->isActive(data)) ||
115
- ((!collector.filter())&&monoHits.empty())
116
- ) {
117
- // make stereo TTRHs and project them
122
+ if unlikely( emptyMono ) {
123
+ // make stereo TTRHs and project them
118
124
projectOnGluedDet( collector, stereoHits, glbDir);
119
125
return;
120
- }
126
+ }
121
127
122
128
123
- if ((!stereoHits .empty())&&(!monoHits .empty())) {
129
+ if ((!monoHits .empty()) & (!stereoHits .empty()) ) {
124
130
125
131
const GluedGeomDet* gluedDet = &specificGeomDet();
126
132
LocalVector trdir = (ts.isValid() ? ts.localDirection() : surface().toLocal( position()-GlobalPoint(0,0,0)));
0 commit comments