#include using std::cout; using std::cerr; using std::cin; using std::endl; using std::hex; #include using std::valarray; #include using std::fstream; #include using std::string; #include using std::list; #include #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 "DrcPhoton.h" #include "DrcOptReflAbs.h" #include "DrcSurfAbs.h" #include "DrcOptMatAbs.h" #include "DrcOptDev.h" //---------------------------------------------------------------------- DrcOptDev::DrcOptDev() { m_copyNumber = 0; m_name = "unnamed DrcOptDev"; m_photonTrace = false; m_verbosity = 0; } //---------------------------------------------------------------------- void DrcOptDev::copy(const DrcOptDev& d) { m_copyNumber = d.m_copyNumber; m_name = d.m_name; m_verbosity = d.m_verbosity; m_photonTrace = d.m_photonTrace; m_photonTraceStream = d.m_photonTraceStream; m_listSurf.clear(); list::const_iterator isurf; for(isurf=d.m_listSurf.begin(); isurf != d.m_listSurf.end(); ++isurf) { const DrcSurfAbs* tmp = (*isurf); DrcSurfAbs* tmp1 = tmp->clone(); m_listSurf.push_back(tmp1); } } //---------------------------------------------------------------------- DrcOptDev::DrcOptDev(const DrcOptDev& d) { if (d.m_verbosity>=1) cout<<" DrcOptDev::DrcOptDev" <<"(const DrcOptDev&) name,copy: " <=1) cout<<" DrcOptDev::operator=" <<"(const DrcOptDev&) name,copy: " <::const_iterator isurf; for(isurf=m_listSurf.begin(); isurf != m_listSurf.end(); ++isurf) { delete (*isurf); } } //---------------------------------------------------------------------- void DrcOptDev::setCopyNumber(int i) { m_copyNumber = i; list::const_iterator isurf; for(isurf=m_listSurf.begin(); isurf != m_listSurf.end(); ++isurf) { (*isurf)->setCopyNumber(i); } } //---------------------------------------------------------------------- void DrcOptDev::addSurface(const DrcSurfAbs& surf) { DrcSurfAbs* tmp = surf.clone(); m_listSurf.push_back(tmp); } //---------------------------------------------------------------------- void DrcOptDev::print(fstream& stream) const { list::const_iterator isurf; for(isurf=m_listSurf.begin(); isurf != m_listSurf.end(); ++isurf) { (*isurf)->print(stream); } // prepare tracing of photons m_photonTrace = true; m_photonTraceStream = &stream; } //---------------------------------------------------------------------- DrcOptMatAbs& DrcOptDev::optMaterial() const { static DrcOptMatAbs* dummy = 0; // //cerr<<" *** DrcOptDev::optMaterial: This function must be overloaded when\n"; //cerr<<" using volumes with refraction. Abort.\n"; //exit(EXIT_FAILURE); return *dummy; } //---------------------------------------------------------------------- void DrcOptDev::addTransform(const Transform3D& trans) { list::const_iterator i; for (i=m_listSurf.begin(); i != m_listSurf.end(); ++i) { const_cast(*i)->addTransform(trans); } } //---------------------------------------------------------------------- void DrcOptDev::print() { list::const_iterator i; for (i=m_listSurf.begin(); i != m_listSurf.end(); ++i) { cout<<"\t\t\t"<name()<::const_iterator i; for (i=m_listSurf.begin(); i != m_listSurf.end(); ++i) { (*i)->setPrintColor(col); } }