TShieldGeometryPrint.cxx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // -------------------------------------------------------------------------
  2. // ----- TShieldGeometry source file -----
  3. // ----- Created by D. Sosnov -----
  4. // -------------------------------------------------------------------------
  5. #include "TShieldGeometry.h"
  6. void printGeometry(TGeoManager *geoMan) {
  7. using namespace tgeanttoshield;
  8. TGeoNavigator *nav = geoMan->GetCurrentNavigator();
  9. nav->DoBackupState();
  10. nav->CdTop();
  11. printGeometryBranch(nav);
  12. nav->DoRestoreState();
  13. }
  14. namespace tgeanttoshield {
  15. void printElement(Element element) {
  16. printf("Element: { %f,\t%f,\t%f,\t%f,\t%f,\t%f,\t%f}\n",
  17. element.Nuclid, element.Conc, element.Density,
  18. element.Z, element.A, element.PureDensity, element.ionEv);
  19. }
  20. void printMediumData(MediumData medium) {
  21. printf("Medium:\n");
  22. printf("\tType: %i\n", medium.nType);
  23. printf("\tRho: %f\n", medium.Rho);
  24. printf("\tCount of elements: %i\n", medium.nChemEl);
  25. for (int i = 0; i < medium.nChemEl; i++) {
  26. printf("\tElement %i: ", i);
  27. printElement(medium.Elements[i]);
  28. }
  29. printf("\n");
  30. }
  31. void printSGeoBody(SGeoBody body) {
  32. printf("Body: %i, { ", body.type);
  33. for (int i = 0; i < 36; i++) {
  34. printf("%f ", body.parameters[i]);
  35. }
  36. printf("}\n");
  37. }
  38. void printSGeoZone(SGeoZone zone) {
  39. printf("Zone:\n");
  40. printf("\tNumber of medium: %i\n", zone.mediaNumber);
  41. printf("\tCount of elements: %i\n", zone.countELements);
  42. printf("\t");
  43. for (int i = 0; i < zone.countELements; i++) {
  44. printf("%i ", zone.definition[2 * i]*zone.definition[2 * i + 1]);
  45. }
  46. printf("\n");
  47. }
  48. void printGeant4ShieldElement(Geant4ShieldElement element) {
  49. printf("Zones: ");
  50. for (unsigned int k = 0; k < element.zoneVector.size(); ++k) {
  51. printf("%i ", element.zoneVector.at(k));
  52. }
  53. printf("\n Bodies:\n");
  54. for (unsigned int k = 0; k < element.bodyVector.size(); ++k) {
  55. printf("\t");
  56. printSGeoBody(element.bodyVector.at(k));
  57. }
  58. printf(" ");
  59. printMediumData(element.medium);
  60. }
  61. void printGeant4ShieldData(Geant4ShieldData data) {
  62. for (unsigned int i = 0; i < data.size(); ++i) {
  63. printGeant4ShieldElement(data.at(i));
  64. }
  65. }
  66. void printGeometryBranch(TGeoNavigator *nav) {
  67. printGeant4ShieldData(zoneDataToShield(getCurrentZone(nav)));
  68. int countOfDaughters = nav->GetCurrentNode()->GetNdaughters();
  69. zoneList daughterOuterZones;
  70. for (int i = 0; i < countOfDaughters; ++i) {
  71. nav->CdDown(i);
  72. printGeometryBranch(nav);
  73. nav->CdUp();
  74. }
  75. }
  76. }