11 #include <framework/logging/Logger.h>
12 #include <framework/utilities/TestHelpers.h>
13 #include <tracking/spacePointCreation/SpacePoint.h>
14 #include <vxd/dataobjects/VxdID.h>
15 #include <vxd/geometry/SensorInfoBase.h>
17 #include <gtest/gtest.h>
45 r1.SetAngles(45, 20, 30);
46 TGeoTranslation t1(-10, 10, 1);
47 TGeoCombiTrans c1(t1, r1);
48 TGeoHMatrix transform = c1;
51 return sensorInfoBase;
67 PXDCluster aCluster =
PXDCluster(aVxdID, 0., 0., 0.1, 0.1, 0, 0, 1, 1, 1, 1, 1, 1);
70 EXPECT_DOUBLE_EQ(aVxdID, testPoint.
getVxdID());
73 TVector3 aPosition = sensorInfoBase.
pointToGlobal(TVector3(aCluster.
getU(), aCluster.
getV(), 0),
true);
84 for (
int i = 0; i < 3; i++) { globalError[i] = sqrt(abs(globalizedVariances[i])); }
86 EXPECT_DOUBLE_EQ(aPosition.X(), testPoint.
getPosition().
X());
87 EXPECT_DOUBLE_EQ(aPosition.Y(), testPoint.
getPosition().
Y());
88 EXPECT_DOUBLE_EQ(aPosition.Z(), testPoint.
getPosition().
Z());
119 std::vector<const SVDCluster*> good2D = { &clusterU1, &clusterV1 };
123 std::vector<const SVDCluster*> good1D = { &clusterU3 };
128 std::vector<const SVDCluster*> badNoClusters;
129 EXPECT_B2FATAL(
SpacePoint(badNoClusters, &sensorInfoBase));
132 std::vector<const SVDCluster*> bad3Clusters = { &clusterU1, &clusterV1, &clusterU2 };
133 EXPECT_B2FATAL(
SpacePoint(bad3Clusters, &sensorInfoBase));
136 std::vector<const SVDCluster*> badSameType = { &clusterU1, &clusterU2 };
137 EXPECT_B2FATAL(
SpacePoint(badSameType, &sensorInfoBase));
140 std::vector<const SVDCluster*> badDifferentSensors = { &clusterV1, &clusterU3 };
141 EXPECT_B2FATAL(
SpacePoint(badDifferentSensors, &sensorInfoBase));
146 TVector3 globalizedVariancesFor2D = sensorInfoBase.
vectorToGlobal(
154 TVector3 globalErrorFor2D;
155 for (
int i = 0; i < 3; i++) { globalErrorFor2D[i] = sqrt(abs(globalizedVariancesFor2D[i])); }
158 EXPECT_EQ(aVxdID, testPoint2D.
getVxdID());
160 EXPECT_FLOAT_EQ(aPositionFor2D.X(), testPoint2D.
getPosition().
X());
161 EXPECT_FLOAT_EQ(aPositionFor2D.Y(), testPoint2D.
getPosition().
Y());
162 EXPECT_FLOAT_EQ(aPositionFor2D.Z(), testPoint2D.
getPosition().
Z());
174 TVector3 globalizedVariancesFor1D = anotherSensorInfoBase.
vectorToGlobal(
182 TVector3 globalErrorFor1D;
183 for (
int i = 0; i < 3; i++) { globalErrorFor1D[i] = sqrt(abs(globalizedVariancesFor1D[i])); }
187 EXPECT_EQ(anotherVxdID, testPoint1D.
getVxdID());
189 EXPECT_FLOAT_EQ(aPositionFor1D.X(), testPoint1D.
getPosition().
X());
190 EXPECT_FLOAT_EQ(aPositionFor1D.Y(), testPoint1D.
getPosition().
Y());
191 EXPECT_FLOAT_EQ(aPositionFor1D.Z(), testPoint1D.
getPosition().
Z());
205 string fNameCluster =
"demoClusters.root";
211 PXDCluster aCluster =
PXDCluster(aVxdID, 0., 0., 0.1, 0.1, 0, 0, 1, 1, 1, 1, 1, 1);
215 B2INFO(
"open root file: " << fNameCluster);
216 TFile f(fNameCluster.c_str(),
"recreate");
222 TFile f2(fNameCluster.c_str());
223 if (f2.IsZombie()) { B2ERROR(
"file could not be reopened!"); }
226 f2.GetListOfKeys()->Print();
228 TIter next(f2.GetListOfKeys());
230 while ((key = (TKey*)next())) {
233 retrievedCluster =
static_cast<PXDCluster*
>(key->ReadObj());
234 }
catch (exception& e) {
235 B2WARNING(
"Key was not a PXDCluster, therefore error message: " << e.what() <<
"\n Skipping this key...");
244 if (remove(fNameCluster.c_str()) != 0)
245 { B2ERROR(
"could not delete file " << fNameCluster <<
"!"); }
247 { B2INFO(fNameCluster <<
" successfully deleted"); }
256 string fNameVec =
"demoB2Vector3s.root";
263 B2INFO(
"open root file: " << fNameVec);
264 TFile f(fNameVec.c_str(),
"recreate");
266 f.WriteObject(&aVec,
"myVec3");
270 TFile f2(fNameVec.c_str());
271 if (f2.IsZombie()) { B2ERROR(
"file could not be reopened!"); }
276 f2.GetObject(
"myVec3", retrievedVector);
279 EXPECT_DOUBLE_EQ(aVec.
X(), retrievedVector->
X());
280 EXPECT_DOUBLE_EQ(aVec.
Y(), retrievedVector->
Y());
281 EXPECT_DOUBLE_EQ(aVec.
Z(), retrievedVector->
Z());
285 if (remove(fNameVec.c_str()) != 0)
286 { B2ERROR(
"could not delete file " << fNameVec <<
"!"); }
288 { B2INFO(fNameVec <<
" successfully deleted"); }
298 string fNameSP =
"demoSPs.root";
304 PXDCluster aCluster =
PXDCluster(aVxdID, 0., 0., 0.1, 0.1, 0, 0, 1, 1, 1, 1, 1, 1);
308 EXPECT_EQ(aVxdID, testPoint.
getVxdID());
312 B2INFO(
"open root file:" << fNameSP);
313 TFile f3(fNameSP.c_str(),
"recreate");
316 B2INFO(
"closing file:");
320 TFile f4(fNameSP.c_str());
321 if (f4.IsZombie()) { B2ERROR(
"file could not be reopened!"); }
324 f4.GetListOfKeys()->Print();
326 TIter next(f4.GetListOfKeys());
328 while ((key = (TKey*)next())) {
331 retrievedSpacePoint =
static_cast<SpacePoint*
>(key->ReadObj());
332 }
catch (exception& e) {
333 B2WARNING(
"Key was not a SpacePoint, therefore error message: " << e.what() <<
"\n Skipping this key...");
350 if (remove(fNameSP.c_str()) != 0)
351 { B2ERROR(
"could not delete file " << fNameSP <<
"!"); }
353 { B2INFO(fNameSP <<
" successfully deleted"); }
368 pair<float, float> sensorCenter = {1.15, 2.1};
370 pair<float, float> hitLocal05 = {0, 0};
371 pair<float, float> resultNormalized05 = {0.5, 0.5};
373 pair<float, float> hitLocal001 = {0.023, 0.042};
374 hitLocal001.first -= sensorCenter.first;
375 hitLocal001.second -= sensorCenter.second;
376 pair<float, float> resultNormalized001 = {0.01, 0.01};
378 pair<float, float> hitLocal088 = {2.024, 3.696};
379 hitLocal088.first -= sensorCenter.first;
380 hitLocal088.second -= sensorCenter.second;
381 pair<float, float> resultNormalized088 = {0.88, 0.88};
383 pair<float, float> hitLocal001088 = {0.023, 3.696};
384 hitLocal001088.first -= sensorCenter.first;
385 hitLocal001088.second -= sensorCenter.second;
386 pair<float, float> resultNormalized001088 = {0.01, 0.88};
388 pair<float, float> hitLocalMinMax = { -1.16, 500};
389 pair<float, float> resultNormalizedMinMax = {0., 1.};
391 pair<float, float> hitNormalized05 = SpacePoint::convertLocalToNormalizedCoordinates(hitLocal05, aVxdID, &sensorInfoBase);
392 EXPECT_FLOAT_EQ(resultNormalized05.first, hitNormalized05.first);
393 EXPECT_FLOAT_EQ(resultNormalized05.second, hitNormalized05.second);
395 pair<float, float> hitNormalized001 = SpacePoint::convertLocalToNormalizedCoordinates(hitLocal001, aVxdID, &sensorInfoBase);
396 EXPECT_FLOAT_EQ(resultNormalized001.first, hitNormalized001.first);
397 EXPECT_NEAR(resultNormalized001.second, hitNormalized001.second, 1. / 100000.);
399 pair<float, float> hitNormalized088 = SpacePoint::convertLocalToNormalizedCoordinates(hitLocal088, aVxdID, &sensorInfoBase);
400 EXPECT_FLOAT_EQ(resultNormalized088.first, hitNormalized088.first);
401 EXPECT_FLOAT_EQ(resultNormalized088.second, hitNormalized088.second);
403 pair<float, float> hitNormalized001088 = SpacePoint::convertLocalToNormalizedCoordinates(hitLocal001088, aVxdID, &sensorInfoBase);
404 EXPECT_FLOAT_EQ(resultNormalized001088.first, hitNormalized001088.first);
405 EXPECT_FLOAT_EQ(resultNormalized001088.second, hitNormalized001088.second);
407 pair<float, float> hitNormalizedMinMax = SpacePoint::convertLocalToNormalizedCoordinates(hitLocalMinMax, aVxdID, &sensorInfoBase);
408 EXPECT_FLOAT_EQ(resultNormalizedMinMax.first, hitNormalizedMinMax.first);
409 EXPECT_FLOAT_EQ(resultNormalizedMinMax.second, hitNormalizedMinMax.second);
423 pair<float, float> sensorCenter = {1.15, 2.1};
425 pair<float, float> hitNormalized05 = {0.5, 0.5};
426 pair<float, float> resultLocal05 = {0, 0};
428 pair<float, float> hitNormalized001 = {0.01, 0.01};
429 pair<float, float> resultLocal001 = {0.023, 0.042};
430 resultLocal001.first -= sensorCenter.first;
431 resultLocal001.second -= sensorCenter.second;
433 pair<float, float> hitNormalized088 = {0.88, 0.88};
434 pair<float, float> resultLocal088 = {2.024, 3.696};
435 resultLocal088.first -= sensorCenter.first;
436 resultLocal088.second -= sensorCenter.second;
438 pair<float, float> hitNormalized001088 = {0.01, 0.88};
439 pair<float, float> resultLocal001088 = {0.023, 3.696};
440 resultLocal001088.first -= sensorCenter.first;
441 resultLocal001088.second -= sensorCenter.second;
443 pair<float, float> hitNormalizedMinMax = { -0.1, 4.2};
444 pair<float, float> resultLocalMinMax = { -1.15, 2.1};
446 pair<float, float> hitLocal05 = SpacePoint::convertNormalizedToLocalCoordinates(hitNormalized05, aVxdID, &sensorInfoBase);
447 EXPECT_FLOAT_EQ(resultLocal05.first, hitLocal05.first);
448 EXPECT_FLOAT_EQ(resultLocal05.second, hitLocal05.second);
450 pair<float, float> hitLocal001 = SpacePoint::convertNormalizedToLocalCoordinates(hitNormalized001, aVxdID, &sensorInfoBase);
451 EXPECT_FLOAT_EQ(resultLocal001.first, hitLocal001.first);
452 EXPECT_FLOAT_EQ(resultLocal001.second, hitLocal001.second);
454 pair<float, float> hitLocal088 = SpacePoint::convertNormalizedToLocalCoordinates(hitNormalized088, aVxdID, &sensorInfoBase);
455 EXPECT_FLOAT_EQ(resultLocal088.first, hitLocal088.first);
456 EXPECT_FLOAT_EQ(resultLocal088.second, hitLocal088.second);
458 pair<float, float> hitLocal001088 = SpacePoint::convertNormalizedToLocalCoordinates(hitNormalized001088, aVxdID, &sensorInfoBase);
459 EXPECT_FLOAT_EQ(resultLocal001088.first, hitLocal001088.first);
460 EXPECT_FLOAT_EQ(resultLocal001088.second, hitLocal001088.second);
462 pair<float, float> hitLocalMinMax = SpacePoint::convertNormalizedToLocalCoordinates(hitNormalizedMinMax, aVxdID, &sensorInfoBase);
463 EXPECT_FLOAT_EQ(resultLocalMinMax.first, hitLocalMinMax.first);
464 EXPECT_FLOAT_EQ(resultLocalMinMax.second, hitLocalMinMax.second);
478 PXDCluster aCluster =
PXDCluster(aVxdID, 0., 0., 0.1, 0.1, 0, 0, 1, 1, 1, 1, 1, 1);
484 aVxdID =
VxdID(3, 1, 2);
485 sensorInfoBase = createSensorInfo(aVxdID, 2.3, 4.2, -1, VXD::SensorInfoBase::SVD);
492 vector<const SVDCluster*> clusters2d = { &clusterU1, &clusterV1 };
496 vector<const SVDCluster*> clustersU = { &clusterU1 };
500 vector<const SVDCluster*> clustersV = { &clusterV1 };