1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
// This file is part of VecGeom and is distributed under the
// conditions in the file LICENSE.txt in the top directory.
// For the full list of authors see CONTRIBUTORS.txt and `git log`.
/// Shape test for Trd
/// @file test/shape_tester/shape_testTrd.cpp
#include "../benchmark/ArgParser.h"
#include "ShapeTester.h"
#include "VecGeom/volumes/PlacedVolume.h"
#include "VecGeom/volumes/Trd.h"
using VPlacedVolume = vecgeom::VPlacedVolume;
using VGTrd = vecgeom::SimpleTrd;
template <typename ImplT>
int runTester(ImplT const *shape, int npoints, bool debug, bool stat);
template <typename Trd_t>
Trd_t *buildATrd(int test)
{
switch (test) {
case 0:
// Constant dx/dy (box)
return new Trd_t("TrdBox", 20., 20., 30., 30., 40.);
case 1:
// Variable dx constant dy
return new Trd_t("TrdConstY", 20., 30., 30., 30., 40.);
case 2:
// Increasing dx increasing dy
return new Trd_t("TrdIncreasingXY", 10., 20., 20., 40., 40.);
case 3:
// Decreasing dx decreasing dy
return new Trd_t("TrdDecreasingXY", 30., 10., 40., 30., 40.);
case 4:
// BaBar thin dx large dy
return new Trd_t("TrdBabarThin", 0.15, 0.15, 24.707, 24.707, 7.);
default:
std::cout << "Unknown test case.\n";
return 0;
}
}
int main(int argc, char *argv[])
{
if (argc == 1) {
std::cout << "Usage: shape_testTrd -test <#>:\n"
" 0 - Constant dx/dy (box)\n"
" 1 - Variable dx constant dy\n"
" 2 - Increasing dx increasing dy\n"
" 3 - Decreasing dx decreasing dy\n"
" 4 - BaBar thin dx large dy\n";
}
OPTION_INT(npoints, 10000);
OPTION_BOOL(debug, false);
OPTION_BOOL(stat, false);
OPTION_INT(type, 0);
auto trd = buildATrd<VGTrd>(type);
trd->Print();
return runTester<VPlacedVolume>(trd, npoints, debug, stat);
}
template <typename ImplT>
int runTester(ImplT const *shape, int npoints, bool debug, bool stat)
{
ShapeTester<ImplT> tester;
tester.setDebug(debug);
tester.setStat(stat);
tester.SetMaxPoints(npoints);
#ifdef VECGEOM_FLOAT_PRECISION
tester.SetSolidTolerance(1e-4);
#endif
int errcode = tester.Run(shape);
std::cout << "Final Error count for Shape *** " << shape->GetName() << "*** = " << errcode << "\n";
std::cout << "=========================================================\n";
if (shape) delete shape;
return errcode;
}
|