TShieldGeometryBool.cxx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // -------------------------------------------------------------------------
  2. // ----- TShieldGeometry source file -----
  3. // ----- Created by D. Sosnov -----
  4. // -------------------------------------------------------------------------
  5. #include "TShieldGeometry.h"
  6. namespace tgeanttoshield {
  7. zoneElement notElement(zoneElement el) {
  8. return std::pair<int, SGeoBody>(el.first * -1, el.second);
  9. }
  10. zoneList notZone(zoneList list) {
  11. int cur, count = 1;
  12. for (unsigned int i = 0; i < list.size(); ++i) {
  13. count *= list.at(i).size();
  14. }
  15. zoneList out;
  16. std::vector<zoneElement> tmp;
  17. for (int k = 0; k < count; ++k) {
  18. cur = k;
  19. tmp.clear();
  20. for (unsigned int i = 0; i < list.size(); ++i) {
  21. int cursize = list.at(i).size();
  22. tmp.push_back(notElement(list.at(i).at(cur % cursize)));
  23. cur /= cursize;
  24. }
  25. out.push_back(tmp);
  26. }
  27. return out;
  28. }
  29. zoneList orZone(zoneList list1, zoneList list2) {
  30. zoneList outList = list1;
  31. outList.insert(outList.end(), list2.begin(), list2.end());
  32. return outList;
  33. }
  34. zoneList andZone(zoneList list1, zoneList list2) {
  35. zoneList outList;
  36. std::vector<zoneElement> tmp;
  37. for (unsigned int i = 0; i < list1.size(); ++i) {
  38. for (unsigned int j = 0; j < list2.size(); ++j) {
  39. tmp = list1.at(i);
  40. tmp.insert(tmp.end(), list2.at(j).begin(), list2.at(j).end());
  41. outList.push_back(tmp);
  42. }
  43. }
  44. return outList;
  45. }
  46. }