File: create_geometry.cpp

package info (click to toggle)
vecgeom 1.2.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 24,016 kB
  • sloc: cpp: 88,803; ansic: 6,888; python: 1,035; sh: 582; sql: 538; makefile: 23
file content (75 lines) | stat: -rw-r--r-- 2,600 bytes parent folder | download
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
#include <stdio.h>

#include "VecGeom/base/Config.h"
#include "VecGeom/base/Version.h"
#ifdef VECGEOM_CUDA_INTERFACE
#include "VecGeom/management/CudaManager.h"
#endif
#include "VecGeom/navigation/GlobalLocator.h"
#include "VecGeom/navigation/NavigationState.h"
#include "VecGeom/volumes/LogicalVolume.h"
#include "VecGeom/volumes/Box.h"

using namespace vecgeom;

int main()
{
  std::cout << "VecGeom version: " << vecgeom_version << std::endl;
  if constexpr (VECGEOM_VERSION <= 0x010000)
  {
      std::cout << "Version " << VECGEOM_VERSION << " is too old";
      return 1;
  }

  // Vector3D<Precision> vec1(5, 3, 1);
  // Vector3D<Precision> vec2(2, 8, 0);
  // std::cout << (vec1 < vec2) << "\n";

  UnplacedBox world_params    = UnplacedBox(4., 4., 4.);
  UnplacedBox largebox_params = UnplacedBox(1.5, 1.5, 1.5);
  UnplacedBox smallbox_params = UnplacedBox(0.5, 0.5, 0.5);

  LogicalVolume worldl(&world_params);

  LogicalVolume largebox("Large box", &largebox_params);
  LogicalVolume smallbox("Small box", &smallbox_params);

  Transformation3D origin     = Transformation3D();
  Transformation3D placement1 = Transformation3D(2, 2, 2);
  Transformation3D placement2 = Transformation3D(-2, 2, 2);
  Transformation3D placement3 = Transformation3D(2, -2, 2);
  Transformation3D placement4 = Transformation3D(2, 2, -2);
  Transformation3D placement5 = Transformation3D(-2, -2, 2);
  Transformation3D placement6 = Transformation3D(-2, 2, -2);
  Transformation3D placement7 = Transformation3D(2, -2, -2);
  Transformation3D placement8 = Transformation3D(-2, -2, -2);

  largebox.PlaceDaughter(&smallbox, &origin);
  worldl.PlaceDaughter(&largebox, &placement1);
  worldl.PlaceDaughter(&largebox, &placement2);
  worldl.PlaceDaughter(&largebox, &placement3);
  worldl.PlaceDaughter(&largebox, &placement4);
  worldl.PlaceDaughter("Hello the world!", &largebox, &placement5);
  worldl.PlaceDaughter(&largebox, &placement6);
  worldl.PlaceDaughter(&largebox, &placement7);
  worldl.PlaceDaughter(&largebox, &placement8);

  VPlacedVolume *world_placed = worldl.Place();
  GeoManager::Instance().SetWorld(world_placed);
  GeoManager::Instance().CloseGeometry();

  std::cerr << "Printing world content:\n";
  world_placed->PrintContent();

  Vector3D<Precision> point(2, 2, 2);
  NavigationState *path = NavigationState::MakeInstance(4);
  GlobalLocator::LocateGlobalPoint(world_placed, point, *path, true);
  path->Print();

  GeoManager::Instance().FindLogicalVolume("Large box");
  GeoManager::Instance().FindPlacedVolume("Large box");

  NavigationState::ReleaseInstance(path);

  return 0;
}