SND@LHC Software
Loading...
Searching...
No Matches
genfit::MeasurementCreator Class Reference

Create different measurement types along a HelixTrackModel for testing purposes. More...

#include <MeasurementCreator.h>

Inheritance diagram for genfit::MeasurementCreator:
Collaboration diagram for genfit::MeasurementCreator:

Public Member Functions

 MeasurementCreator ()
 
 ~MeasurementCreator ()
 
void setTrackModel (const HelixTrackModel *model)
 Takes ownership!
 
void setResolution (double resolution)
 
void setResolutionWire (double resolutionWire)
 
void setOutlierProb (double outlierProb)
 
void setOutlierRange (double outlierRange)
 
void setThetaDetPlane (double thetaDetPlane)
 
void setPhiDetPlane (double phiDetPlane)
 
void setWireDir (const TVector3 wireDir)
 
void setMinDrift (double minDrift)
 
void setMaxDrift (double maxDrift)
 
void setIdealLRResolution (bool idealLRResolution)
 
void setUseSkew (bool useSkew)
 
void setSkewAngle (double skewAngle)
 
void setNSuperLayer (int nSuperLayer)
 
void setDebug (bool debug)
 
std::vector< genfit::AbsMeasurement * > create (eMeasurementType, double tracklength, bool &outlier, int &lr)
 
std::vector< genfit::AbsMeasurement * > create (eMeasurementType type, double tracklength)
 
void reset ()
 

Private Attributes

const HelixTrackModeltrackModel_
 
double resolution_
 
double resolutionWire_
 
double outlierProb_
 
double outlierRange_
 
double thetaDetPlane_
 
double phiDetPlane_
 
int wireCounter_
 
TVector3 wireDir_
 
double minDrift_
 
double maxDrift_
 
bool idealLRResolution_
 
bool useSkew_
 
double skewAngle_
 
int nSuperLayer_
 
int measurementCounter_
 
bool debug_
 

Detailed Description

Create different measurement types along a HelixTrackModel for testing purposes.

Definition at line 55 of file MeasurementCreator.h.

Constructor & Destructor Documentation

◆ MeasurementCreator()

genfit::MeasurementCreator::MeasurementCreator ( )

Definition at line 38 of file MeasurementCreator.cc.

38 :
39 trackModel_(NULL),
40 resolution_(0.01),
41 resolutionWire_(0.1),
42 outlierProb_(0),
45 phiDetPlane_(0),
46 wireCounter_(0),
47 wireDir_(0.,0.,1.),
48 minDrift_(0),
49 maxDrift_(2),
51 useSkew_(false),
52 skewAngle_(5),
53 nSuperLayer_(5),
55 debug_(false)
56{
57 ;
58}
const HelixTrackModel * trackModel_

◆ ~MeasurementCreator()

genfit::MeasurementCreator::~MeasurementCreator ( )
inline

Definition at line 63 of file MeasurementCreator.h.

63{delete trackModel_;}

Member Function Documentation

◆ create() [1/2]

std::vector< genfit::AbsMeasurement * > genfit::MeasurementCreator::create ( eMeasurementType  type,
double  tracklength 
)
inline

Definition at line 84 of file MeasurementCreator.h.

84 {
85 bool dummy1;
86 int dummy2;
87 return create(type, tracklength, dummy1, dummy2);
88 }
std::vector< genfit::AbsMeasurement * > create(eMeasurementType, double tracklength, bool &outlier, int &lr)

◆ create() [2/2]

std::vector< genfit::AbsMeasurement * > genfit::MeasurementCreator::create ( eMeasurementType  type,
double  tracklength,
bool &  outlier,
int &  lr 
)

Definition at line 61 of file MeasurementCreator.cc.

61 {
62
63 outlier = false;
64 lr = 0;
65 std::vector<AbsMeasurement*> retVal;
66 genfit::AbsMeasurement* measurement;
67
68 TVector3 point, dir;
69 trackModel_->getPosDir(tracklength, point, dir);
70
71
72 TVector3 planeNorm(dir);
73 planeNorm.SetTheta(thetaDetPlane_*TMath::Pi()/180);
74 planeNorm.SetPhi(planeNorm.Phi()+phiDetPlane_);
75 static const TVector3 z(0,0,1);
76 static const TVector3 x(1,0,0);
77
78
79 TVector3 currentWireDir(wireDir_);
80 TVector3 wirePerp;
81
82 if (type == Wire ||
83 type == WirePoint){
84
85 // skew layers
86 if (useSkew_ && (int)((double)wireCounter_/(double)nSuperLayer_)%2 == 1) {
87 TVector3 perp(wireDir_.Cross(dir));
88 if ((int)((double)wireCounter_/(double)nSuperLayer_)%4 == 1){
89 currentWireDir.Rotate(skewAngle_*TMath::Pi()/180, wireDir_.Cross(perp));
90 }
91 else currentWireDir.Rotate(-skewAngle_*TMath::Pi()/180, wireDir_.Cross(perp));
92 }
93 currentWireDir.SetMag(1.);
94
95 // left/right
96 lr = 1;
97 wirePerp = dir.Cross(currentWireDir);
98 if (gRandom->Uniform(-1,1) >= 0) {
99 wirePerp *= -1.;
100 lr = -1;
101 }
102 wirePerp.SetMag(gRandom->Uniform(minDrift_, maxDrift_));
103 }
104
105 if (outlierProb_ > gRandom->Uniform(1.)) {
106 outlier = true;
107 if(debug_) std::cerr << "create outlier" << std::endl;
108 }
109
110
111 switch(type){
112 case Pixel: {
113 if (debug_) std::cerr << "create PixHit" << std::endl;
114
115 genfit::SharedPlanePtr plane(new genfit::DetPlane(point, planeNorm.Cross(z), (planeNorm.Cross(z)).Cross(planeNorm)));
116
117 TVectorD hitCoords(2);
118 if (outlier) {
119 hitCoords(0) = gRandom->Uniform(-outlierRange_, outlierRange_);
120 hitCoords(1) = gRandom->Uniform(-outlierRange_, outlierRange_);
121 }
122 else {
123 hitCoords(0) = gRandom->Gaus(0,resolution_);
124 hitCoords(1) = gRandom->Gaus(0,resolution_);
125 }
126
127 TMatrixDSym hitCov(2);
128 hitCov(0,0) = resolution_*resolution_;
129 hitCov(1,1) = resolution_*resolution_;
130
131 measurement = new genfit::PlanarMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
132 static_cast<genfit::PlanarMeasurement*>(measurement)->setPlane(plane, measurementCounter_);
133 retVal.push_back(measurement);
134 }
135 break;
136
137 case Spacepoint: {
138 if (debug_) std::cerr << "create SpacepointHit" << std::endl;
139
140 TVectorD hitCoords(3);
141 if (outlier) {
142 hitCoords(0) = gRandom->Uniform(point.X()-outlierRange_, point.X()+outlierRange_);
143 hitCoords(1) = gRandom->Uniform(point.Y()-outlierRange_, point.Y()+outlierRange_);
144 hitCoords(2) = gRandom->Uniform(point.Z()-outlierRange_, point.Z()+outlierRange_);
145 }
146 else {
147 hitCoords(0) = gRandom->Gaus(point.X(),resolution_);
148 hitCoords(1) = gRandom->Gaus(point.Y(),resolution_);
149 hitCoords(2) = gRandom->Gaus(point.Z(),resolution_);
150 }
151
152 TMatrixDSym hitCov(3);
153 hitCov(0,0) = resolution_*resolution_;
154 hitCov(1,1) = resolution_*resolution_;
155 hitCov(2,2) = resolution_*resolution_;
156
157 measurement = new genfit::SpacepointMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
158 retVal.push_back(measurement);
159 }
160 break;
161
162 case ProlateSpacepoint: {
163 if (debug_) std::cerr << "create ProlateSpacepointHit" << std::endl;
164
165 TVectorD hitCoords(3);
166 if (outlier) {
167 hitCoords(0) = gRandom->Uniform(point.X()-outlierRange_, point.X()+outlierRange_);
168 hitCoords(1) = gRandom->Uniform(point.Y()-outlierRange_, point.Y()+outlierRange_);
169 hitCoords(2) = gRandom->Uniform(point.Z()-outlierRange_, point.Z()+outlierRange_);
170 }
171 else {
172 hitCoords(0) = point.X();
173 hitCoords(1) = point.Y();
174 hitCoords(2) = point.Z();
175 }
176
177 TMatrixDSym hitCov(3);
178 hitCov(0,0) = resolution_*resolution_;
179 hitCov(1,1) = resolution_*resolution_;
180 hitCov(2,2) = resolutionWire_*resolutionWire_;
181
182 // rotation matrix
183 TVector3 xp = currentWireDir.Orthogonal();
184 xp.SetMag(1);
185 TVector3 yp = currentWireDir.Cross(xp);
186 yp.SetMag(1);
187
188 TMatrixD rot(3,3);
189
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();
193
194 // smear
195 TVectorD smearVec(3);
196 smearVec(0) = resolution_;
197 smearVec(1) = resolution_;
198 smearVec(2) = resolutionWire_;
199 smearVec *= rot;
200 if (!outlier) {
201 hitCoords(0) += gRandom->Gaus(0, smearVec(0));
202 hitCoords(1) += gRandom->Gaus(0, smearVec(1));
203 hitCoords(2) += gRandom->Gaus(0, smearVec(2));
204 }
205
206
207 // rotate cov
208 hitCov.Similarity(rot);
209
210 measurement = new genfit::ProlateSpacepointMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
211 static_cast<genfit::ProlateSpacepointMeasurement*>(measurement)->setLargestErrorDirection(currentWireDir);
212 retVal.push_back(measurement);
213 }
214 break;
215
216 case StripU: case StripV: case StripUV : {
217 if (debug_) std::cerr << "create StripHit" << std::endl;
218
219 TVector3 vU, vV;
220 vU = planeNorm.Cross(z);
221 vV = (planeNorm.Cross(z)).Cross(planeNorm);
222 genfit::SharedPlanePtr plane(new genfit::DetPlane(point, vU, vV));
223
224 TVectorD hitCoords(1);
225 if (outlier)
226 hitCoords(0) = gRandom->Uniform(-outlierRange_, outlierRange_);
227 else
228 hitCoords(0) = gRandom->Gaus(0,resolution_);
229
230 TMatrixDSym hitCov(1);
231 hitCov(0,0) = resolution_*resolution_;
232
233 measurement = new genfit::PlanarMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
234 static_cast<genfit::PlanarMeasurement*>(measurement)->setPlane(plane, measurementCounter_);
235 if (type == StripV)
236 static_cast<genfit::PlanarMeasurement*>(measurement)->setStripV();
237 retVal.push_back(measurement);
238
239
240 if (type == StripUV) {
241 if (outlier)
242 hitCoords(0) = gRandom->Uniform(-outlierRange_, outlierRange_);
243 else
244 hitCoords(0) = gRandom->Gaus(0,resolution_);
245
246 hitCov(0,0) = resolution_*resolution_;
247
248 measurement = new genfit::PlanarMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
249 static_cast<genfit::PlanarMeasurement*>(measurement)->setPlane(plane, measurementCounter_);
250 static_cast<genfit::PlanarMeasurement*>(measurement)->setStripV();
251 retVal.push_back(measurement);
252 }
253 }
254 break;
255
256 case Wire: {
257 if (debug_) std::cerr << "create WireHit" << std::endl;
258
259 if (outlier) {
260 wirePerp.SetMag(gRandom->Uniform(outlierRange_));
261 }
262
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();
267
268 hitCoords(3) = (point-wirePerp+currentWireDir).X();
269 hitCoords(4) = (point-wirePerp+currentWireDir).Y();
270 hitCoords(5) = (point-wirePerp+currentWireDir).Z();
271
272 if (outlier)
273 hitCoords(6) = gRandom->Uniform(outlierRange_);
274 else
275 hitCoords(6) = gRandom->Gaus(wirePerp.Mag(), resolution_);
276
277 TMatrixDSym hitCov(7);
278 hitCov(6,6) = resolution_*resolution_;
279
280
281 measurement = new genfit::WireMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
283 static_cast<genfit::WireMeasurement*>(measurement)->setLeftRightResolution(lr);
284 }
285 ++wireCounter_;
286 retVal.push_back(measurement);
287 }
288 break;
289
290 case WirePoint: {
291 if (debug_) std::cerr << "create WirePointHit" << std::endl;
292
293 if (outlier) {
294 wirePerp.SetMag(gRandom->Uniform(outlierRange_));
295 }
296
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();
301
302 hitCoords(3) = (point-wirePerp+currentWireDir).X();
303 hitCoords(4) = (point-wirePerp+currentWireDir).Y();
304 hitCoords(5) = (point-wirePerp+currentWireDir).Z();
305
306 if (outlier) {
307 hitCoords(6) = gRandom->Uniform(outlierRange_);
308 hitCoords(7) = gRandom->Uniform(currentWireDir.Mag()-outlierRange_, currentWireDir.Mag()+outlierRange_);
309 }
310 else {
311 hitCoords(6) = gRandom->Gaus(wirePerp.Mag(), resolution_);
312 hitCoords(7) = gRandom->Gaus(currentWireDir.Mag(), resolutionWire_);
313 }
314
315
316 TMatrixDSym hitCov(8);
317 hitCov(6,6) = resolution_*resolution_;
318 hitCov(7,7) = resolutionWire_*resolutionWire_;
319
320 measurement = new genfit::WirePointMeasurement(hitCoords, hitCov, int(type), measurementCounter_, nullptr);
322 static_cast<genfit::WirePointMeasurement*>(measurement)->setLeftRightResolution(lr);
323 }
324 ++wireCounter_;
325 retVal.push_back(measurement);
326 }
327 break;
328
329 default:
330 std::cerr << "measurement type not defined!" << std::endl;
331 exit(0);
332 }
333
334 return retVal;
335
336}
Contains the measurement and covariance in raw detector coordinates.
Detector plane.
Definition DetPlane.h:61
void getPosDir(double tracklength, TVector3 &pos, TVector3 &dir) const
Measurement class implementing a planar hit geometry (1 or 2D).
Class for measurements implementing a space point hit geometry with a very prolate form of the covari...
Class for measurements implementing a space point hit geometry.
Class for measurements in wire detectors (Straw tubes and drift chambers) which do not measure the co...
Class for measurements in wire detectors (Straw tubes and drift chambers) which can measure the coord...
boost::shared_ptr< genfit::DetPlane > SharedPlanePtr
Shared Pointer to a DetPlane.

◆ reset()

void genfit::MeasurementCreator::reset ( )

Definition at line 339 of file MeasurementCreator.cc.

339 {
340 wireCounter_ = 0;
342}

◆ setDebug()

void genfit::MeasurementCreator::setDebug ( bool  debug)
inline

◆ setIdealLRResolution()

void genfit::MeasurementCreator::setIdealLRResolution ( bool  idealLRResolution)
inline

Definition at line 76 of file MeasurementCreator.h.

76{idealLRResolution_ = idealLRResolution;}

◆ setMaxDrift()

void genfit::MeasurementCreator::setMaxDrift ( double  maxDrift)
inline

Definition at line 75 of file MeasurementCreator.h.

75{maxDrift_ = maxDrift;}

◆ setMinDrift()

void genfit::MeasurementCreator::setMinDrift ( double  minDrift)
inline

Definition at line 74 of file MeasurementCreator.h.

74{minDrift_ = minDrift;}

◆ setNSuperLayer()

void genfit::MeasurementCreator::setNSuperLayer ( int  nSuperLayer)
inline

Definition at line 79 of file MeasurementCreator.h.

79{nSuperLayer_ = nSuperLayer;}

◆ setOutlierProb()

void genfit::MeasurementCreator::setOutlierProb ( double  outlierProb)
inline

Definition at line 69 of file MeasurementCreator.h.

69{outlierProb_ = outlierProb;}

◆ setOutlierRange()

void genfit::MeasurementCreator::setOutlierRange ( double  outlierRange)
inline

Definition at line 70 of file MeasurementCreator.h.

70{outlierRange_ = outlierRange;}

◆ setPhiDetPlane()

void genfit::MeasurementCreator::setPhiDetPlane ( double  phiDetPlane)
inline

Definition at line 72 of file MeasurementCreator.h.

72{phiDetPlane_ = phiDetPlane;}

◆ setResolution()

void genfit::MeasurementCreator::setResolution ( double  resolution)
inline

Definition at line 67 of file MeasurementCreator.h.

67{resolution_ = resolution;}

◆ setResolutionWire()

void genfit::MeasurementCreator::setResolutionWire ( double  resolutionWire)
inline

Definition at line 68 of file MeasurementCreator.h.

68{resolutionWire_ = resolutionWire;}

◆ setSkewAngle()

void genfit::MeasurementCreator::setSkewAngle ( double  skewAngle)
inline

Definition at line 78 of file MeasurementCreator.h.

78{skewAngle_ = skewAngle;}

◆ setThetaDetPlane()

void genfit::MeasurementCreator::setThetaDetPlane ( double  thetaDetPlane)
inline

Definition at line 71 of file MeasurementCreator.h.

71{thetaDetPlane_ = thetaDetPlane;}

◆ setTrackModel()

void genfit::MeasurementCreator::setTrackModel ( const HelixTrackModel model)
inline

Takes ownership!

Definition at line 66 of file MeasurementCreator.h.

66{delete trackModel_; trackModel_ = model;}
str model
Definition g4Ex.py:5

◆ setUseSkew()

void genfit::MeasurementCreator::setUseSkew ( bool  useSkew)
inline

Definition at line 77 of file MeasurementCreator.h.

77{useSkew_ = useSkew;}

◆ setWireDir()

void genfit::MeasurementCreator::setWireDir ( const TVector3  wireDir)
inline

Definition at line 73 of file MeasurementCreator.h.

73{wireDir_ = wireDir; wireDir_.SetMag(1.);}

Member Data Documentation

◆ debug_

bool genfit::MeasurementCreator::debug_
private

Definition at line 118 of file MeasurementCreator.h.

◆ idealLRResolution_

bool genfit::MeasurementCreator::idealLRResolution_
private

Definition at line 111 of file MeasurementCreator.h.

◆ maxDrift_

double genfit::MeasurementCreator::maxDrift_
private

Definition at line 110 of file MeasurementCreator.h.

◆ measurementCounter_

int genfit::MeasurementCreator::measurementCounter_
private

Definition at line 117 of file MeasurementCreator.h.

◆ minDrift_

double genfit::MeasurementCreator::minDrift_
private

Definition at line 109 of file MeasurementCreator.h.

◆ nSuperLayer_

int genfit::MeasurementCreator::nSuperLayer_
private

Definition at line 114 of file MeasurementCreator.h.

◆ outlierProb_

double genfit::MeasurementCreator::outlierProb_
private

Definition at line 99 of file MeasurementCreator.h.

◆ outlierRange_

double genfit::MeasurementCreator::outlierRange_
private

Definition at line 100 of file MeasurementCreator.h.

◆ phiDetPlane_

double genfit::MeasurementCreator::phiDetPlane_
private

Definition at line 104 of file MeasurementCreator.h.

◆ resolution_

double genfit::MeasurementCreator::resolution_
private

Definition at line 96 of file MeasurementCreator.h.

◆ resolutionWire_

double genfit::MeasurementCreator::resolutionWire_
private

Definition at line 97 of file MeasurementCreator.h.

◆ skewAngle_

double genfit::MeasurementCreator::skewAngle_
private

Definition at line 113 of file MeasurementCreator.h.

◆ thetaDetPlane_

double genfit::MeasurementCreator::thetaDetPlane_
private

Definition at line 103 of file MeasurementCreator.h.

◆ trackModel_

const HelixTrackModel* genfit::MeasurementCreator::trackModel_
private

Definition at line 94 of file MeasurementCreator.h.

◆ useSkew_

bool genfit::MeasurementCreator::useSkew_
private

Definition at line 112 of file MeasurementCreator.h.

◆ wireCounter_

int genfit::MeasurementCreator::wireCounter_
private

Definition at line 107 of file MeasurementCreator.h.

◆ wireDir_

TVector3 genfit::MeasurementCreator::wireDir_
private

Definition at line 108 of file MeasurementCreator.h.


The documentation for this class was generated from the following files: