#include using std::cout; using std::cerr; using std::cin; using std::endl; #include using std::valarray; #include using std::fstream; #include using std::string; #include using std::list; #include using std::vector; #include using std::numeric_limits; #include "TObject.h" #include "TVector3.h" #include "TRandom.h" #include "Math/Vector3D.h" using ROOT::Math::XYZVector; #include "Math/Point3D.h" using ROOT::Math::XYZPoint; #include "Math/Transform3D.h" using ROOT::Math::Transform3D; #include "Math/RotationX.h" using ROOT::Math::RotationX; #include "Math/RotationY.h" using ROOT::Math::RotationY; #include "Math/RotationZ.h" using ROOT::Math::RotationZ; #include "Math/Rotation3D.h" using ROOT::Math::Rotation3D; #include "PndDrcPhoton.h" #include "PndDrcOptReflAbs.h" #include "PndDrcSurfAbs.h" #include "PndDrcOptMatAbs.h" #include "PndDrcOptDev.h" #include "PndDrcOptVol.h" #include "PndDrcUtil.h" #include "PndDrcSurfPolyFlat.h" #include "PndDrcOptTrd2.h" PndDrcOptTrd2::PndDrcOptTrd2(double dx1, double dx2, double dy1, double dy2, double dz) { setSize(dx1,dx2,dy1,dy2,dz); } //---------------------------------------------------------------------- void PndDrcOptTrd2::setSize(double dx1, double dx2, double dy1, double dy2, double dz) { XYZPoint p1( dx1, dy1,-dz); // p5----------p8 XYZPoint p2( dx1,-dy1,-dz); // /| /| XYZPoint p3(-dx1,-dy1,-dz); // / | / | XYZPoint p4(-dx1, dy1,-dz); // / p6--------/-p7 Y // / / / / ^ Z // / / / / | / // / / / / |/ // / / / / X <---0 XYZPoint p5( dx2, dy2, dz); //p1----------p4 / XYZPoint p6( dx2,-dy2, dz); //| / | / XYZPoint p7(-dx2,-dy2, dz); //|/ |/ XYZPoint p8(-dx2, dy2, dz); //p2----------p3 PndDrcSurfPolyFlat a1; a1.addPoint(p1); a1.addPoint(p2); a1.addPoint(p3); a1.addPoint(p4); a1.setName("side1"); PndDrcSurfPolyFlat a2; a2.addPoint(p4); a2.addPoint(p3); a2.addPoint(p7); a2.addPoint(p8); a2.setName("side3"); PndDrcSurfPolyFlat a3; a3.addPoint(p2); a3.addPoint(p3); a3.addPoint(p7); a3.addPoint(p6); a3.setName("side2"); PndDrcSurfPolyFlat a4; a4.addPoint(p1); a4.addPoint(p2); a4.addPoint(p6); a4.addPoint(p5); a4.setName("side5"); PndDrcSurfPolyFlat a5; a5.addPoint(p1); a5.addPoint(p4); a5.addPoint(p8); a5.addPoint(p5); a5.setName("side4"); PndDrcSurfPolyFlat a6; a6.addPoint(p5); a6.addPoint(p6); a6.addPoint(p7); a6.addPoint(p8); a6.setName("side6"); addSurface(a1); addSurface(a2); addSurface(a3); addSurface(a4); addSurface(a5); addSurface(a6); } //---------------------------------------------------------------------- PndDrcSurfAbs* const PndDrcOptTrd2::surface(string name) { PndDrcSurfAbs* result=0; list::const_iterator isurf; for(isurf=surfaceList().begin(); isurf != surfaceList().end(); ++isurf) { if ( (*isurf)->name() == name ) { if (!result) { result = *isurf; } else { cerr<<" *** PndDrcOptTrd2::surface: surface name "<