24 #include <PlanarMeasurement.h>
26 #include <SpacepointMeasurement.h>
50 idealLRResolution_(
true),
54 measurementCounter_(0),
65 std::vector<AbsMeasurement*> retVal;
72 TVector3 planeNorm(dir);
75 static const TVector3
z(0,0,1);
76 static const TVector3
x(1,0,0);
93 currentWireDir.SetMag(1.);
97 wirePerp = dir.Cross(currentWireDir);
98 if (gRandom->Uniform(-1,1) >= 0) {
107 if(
debug_) std::cerr <<
"create outlier" << std::endl;
113 if (
debug_) std::cerr <<
"create PixHit" << std::endl;
117 TVectorD hitCoords(2);
127 TMatrixDSym hitCov(2);
133 retVal.push_back(measurement);
138 if (
debug_) std::cerr <<
"create SpacepointHit" << std::endl;
140 TVectorD hitCoords(3);
147 hitCoords(0) = gRandom->Gaus(point.X(),
resolution_);
148 hitCoords(1) = gRandom->Gaus(point.Y(),
resolution_);
149 hitCoords(2) = gRandom->Gaus(point.Z(),
resolution_);
152 TMatrixDSym hitCov(3);
158 retVal.push_back(measurement);
163 if (
debug_) std::cerr <<
"create ProlateSpacepointHit" << std::endl;
165 TVectorD hitCoords(3);
172 hitCoords(0) = point.X();
173 hitCoords(1) = point.Y();
174 hitCoords(2) = point.Z();
177 TMatrixDSym hitCov(3);
183 TVector3 xp = currentWireDir.Orthogonal();
185 TVector3 yp = currentWireDir.Cross(xp);
190 rot(0,0) = xp.X(); rot(0,1) = yp.X(); rot(0,2) = currentWireDir.X();
191 rot(1,0) = xp.Y(); rot(1,1) = yp.Y(); rot(1,2) = currentWireDir.Y();
192 rot(2,0) = xp.Z(); rot(2,1) = yp.Z(); rot(2,2) = currentWireDir.Z();
195 TVectorD smearVec(3);
201 hitCoords(0) += gRandom->Gaus(0, smearVec(0));
202 hitCoords(1) += gRandom->Gaus(0, smearVec(1));
203 hitCoords(2) += gRandom->Gaus(0, smearVec(2));
208 hitCov.Similarity(rot);
212 retVal.push_back(measurement);
217 if (
debug_) std::cerr <<
"create StripHit" << std::endl;
220 vU = planeNorm.Cross(z);
221 vV = (planeNorm.Cross(z)).Cross(planeNorm);
224 TVectorD hitCoords(1);
230 TMatrixDSym hitCov(1);
237 retVal.push_back(measurement);
244 hitCoords(0) = gRandom->Gaus(0,resolution_);
251 retVal.push_back(measurement);
257 if (
debug_) std::cerr <<
"create WireHit" << std::endl;
263 TVectorD hitCoords(7);
264 hitCoords(0) = (point-wirePerp-currentWireDir).X();
265 hitCoords(1) = (point-wirePerp-currentWireDir).Y();
266 hitCoords(2) = (point-wirePerp-currentWireDir).Z();
268 hitCoords(3) = (point-wirePerp+currentWireDir).X();
269 hitCoords(4) = (point-wirePerp+currentWireDir).Y();
270 hitCoords(5) = (point-wirePerp+currentWireDir).Z();
275 hitCoords(6) = gRandom->Gaus(wirePerp.Mag(),
resolution_);
277 TMatrixDSym hitCov(7);
286 retVal.push_back(measurement);
291 if (
debug_) std::cerr <<
"create WirePointHit" << std::endl;
297 TVectorD hitCoords(8);
298 hitCoords(0) = (point-wirePerp-currentWireDir).X();
299 hitCoords(1) = (point-wirePerp-currentWireDir).Y();
300 hitCoords(2) = (point-wirePerp-currentWireDir).Z();
302 hitCoords(3) = (point-wirePerp+currentWireDir).X();
303 hitCoords(4) = (point-wirePerp+currentWireDir).Y();
304 hitCoords(5) = (point-wirePerp+currentWireDir).Z();
311 hitCoords(6) = gRandom->Gaus(wirePerp.Mag(),
resolution_);
316 TMatrixDSym hitCov(8);
325 retVal.push_back(measurement);
330 std::cerr <<
"measurement type not defined!" << std::endl;