#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 using std::multimap; #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" #include "DrcOptDevSys.h" //---------------------------------------------------------------------- DrcOptDevSys::DrcOptDevSys() { m_copyNumber = 0; m_name = "unnamed"; m_verbosity = 0; } //---------------------------------------------------------------------- void DrcOptDevSys::copy(const DrcOptDevSys& d) { m_copyNumber = d.m_copyNumber; m_name = d.m_name; m_verbosity = d.m_verbosity; m_listDev.clear(); list::const_iterator idev; for(idev=d.m_listDev.begin(); idev != d.m_listDev.end(); ++idev) { const DrcOptDev* tmp = (*idev); DrcOptDev* tmp1 = tmp->clone(); m_listDev.push_back(tmp1); } // copy couplings list::const_iterator idev1; list::const_iterator idev2; list::const_iterator isurf1; list::const_iterator isurf2; for(idev1 = d.m_listDev1Coupling.begin(), idev2 = d.m_listDev2Coupling.begin(), isurf1 = d.m_listSurf1Coupling.begin(), isurf2 = d.m_listSurf2Coupling.begin(); idev1 != d.m_listDev1Coupling.end(); ++idev1, ++idev2, ++isurf1, ++isurf2) { coupleDevice((*idev1),(*idev2),(*isurf1),(*isurf2)); } } //---------------------------------------------------------------------- DrcOptDevSys::DrcOptDevSys(const DrcOptDevSys& d) { if (d.m_verbosity>=1) cout<<" DrcOptDevSys::DrcOptDevSys" <<"(const DrcOptDevSys&) name,copy: " <=1) cout<<" DrcOptDevSys::operator=" <<"(const DrcOptDevSys&) name,copy: " <::const_iterator idev; for(idev=m_listDev.begin(); idev != m_listDev.end(); ++idev) { delete (*idev); } } //---------------------------------------------------------------------- void DrcOptDevSys::setCopyNumber(int i) { m_copyNumber = i; list::const_iterator idev; for(idev=m_listDev.begin(); idev != m_listDev.end(); ++idev) { (*idev)->setCopyNumber(i); } } //---------------------------------------------------------------------- void DrcOptDevSys::addDevice(const DrcOptDev& dev) { DrcOptDev* tmp = dev.clone(); m_listDev.push_back(tmp); } //---------------------------------------------------------------------- void DrcOptDevSys::coupleDevice(string dev1, string dev2, string surf1, string surf2) { list::const_iterator idev; DrcOptDev* d1=0; DrcOptDev* d2=0; DrcSurfAbs* s1=0; DrcSurfAbs* s2=0; for(idev=m_listDev.begin(); idev != m_listDev.end(); ++idev) { if ((*idev)->name() == dev1) d1=(*idev); if ((*idev)->name() == dev2) d2=(*idev); } if (d1 && d2) { list::const_iterator isurf; for(isurf=d1->surfaceList().begin(); isurf != d1->surfaceList().end(); ++isurf) { if ((*isurf)->name()== surf1) s1=(*isurf); } for(isurf=d2->surfaceList().begin(); isurf != d2->surfaceList().end(); ++isurf) { if ((*isurf)->name()== surf2) s2=(*isurf); } if (s1 && s2) { s1->setCoupled(d2,s2); s2->setCoupled(d1,s1); m_listDev1Coupling.push_back(dev1); m_listDev2Coupling.push_back(dev2); m_listSurf1Coupling.push_back(surf1); m_listSurf2Coupling.push_back(surf2); } else { cerr<<" *** DrcOptDevSys::coupleDevice: surface not found"<::const_iterator idev; for(idev=m_listDev.begin(); idev != m_listDev.end(); ++idev) { (*idev)->print(stream); } } //---------------------------------------------------------------------- void DrcOptDevSys::setPrintColor(int col) { list::const_iterator idev; for(idev=m_listDev.begin(); idev != m_listDev.end(); ++idev) { (*idev)->setPrintColor(col); } } //---------------------------------------------------------------------- void DrcOptDevSys::addTransform(const Transform3D& trans) { list::const_iterator i; for (i=m_listDev.begin(); i != m_listDev.end(); ++i) { const_cast(*i)->addTransform(trans); } } //---------------------------------------------------------------------- void DrcOptDevSys::print() { list::const_iterator i; for (i=m_listDev.begin(); i != m_listDev.end(); ++i) { cout<<"\t\t"<name()<print(); } }