//#include //#include //#include #include using std::cout; using std::cerr; using std::cin; using std::endl; #include using std::valarray; #include using std::vector; #include using std::string; #include using std::list; #include using std::map; #include #include using std::fstream; #include using std::pair; //#include #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 "DrcSurfPolyFlat.h" #include "DrcSurfCyl.h" #include "DrcOptReflSilver.h" #include "DrcOptMatAbs.h" #include "DrcOptMatLithotecQ0.h" #include "DrcOptDev.h" #include "DrcOptDevSys.h" #include "DrcOptVol.h" #include "DrcOptMirror.h" #include "DrcOptPixel.h" #include "DrcOptDevManager.h" int main() { const double pi = 3.1415926535; int verbosity = 0; // 0=quiet, 1=constructors,2=member,3=functionality // 4=photons, 5=everything. XYZPoint p1(0,0,-1000); XYZPoint p2(0,0,+1000); double radius1 = 480; double radius2 = 497; DrcSurfCyl scyl_out; scyl_out.set(p1,p2,radius2); scyl_out.setName("scyl_out"); DrcSurfCyl scyl_in; scyl_in.set(p1,p2,radius1); scyl_in.setName("scyl_in"); // p4 p3 // // p1 p2 XYZPoint r1(-500,-500,0); XYZPoint r2(+500,-500,0); XYZPoint r3(+500,+500,0); XYZPoint r4(-500,+500,0); DrcSurfPolyFlat s1; s1.addPoint(r1); s1.addPoint(r2); s1.addPoint(r3); s1.addPoint(r4); Transform3D trans_plus(XYZVector(0,0,1000)); Transform3D trans_minus(XYZVector(0,0,-1000)); DrcSurfPolyFlat sfront(s1); sfront.addTransform(trans_plus); sfront.setName("sfront"); DrcSurfPolyFlat sback(s1); sback.addTransform(trans_minus); sback.setName("sback"); DrcOptVol vcyl; DrcOptMatLithotecQ0 quartz; vcyl.setOptMaterial(quartz); vcyl.addSurface(scyl_out); //vcyl.addSurface(scyl_in); vcyl.addSurface(sfront); vcyl.addSurface(sback); vcyl.setName("cylinder"); vcyl.setVerbosity(verbosity); DrcSurfPolyFlat spixel(s1); spixel.addTransform(trans_minus); spixel.setName("spixel"); spixel.setPrintColor(2); DrcOptPixel pixel; pixel.addSurface(spixel); pixel.setName("pixel"); DrcSurfPolyFlat smirror_front(s1); smirror_front.addTransform(trans_plus); smirror_front.setName("smirror_front"); DrcOptReflSilver refl; smirror_front.setReflectivity(refl); smirror_front.setPrintColor(4); DrcSurfPolyFlat smirror_back(s1); smirror_back.addTransform(trans_plus); smirror_back.setName("smirror_back"); smirror_back.setPrintColor(4); DrcOptMirror mirror; mirror.setFrontSurface(smirror_front); mirror.setBackSurface(smirror_back); mirror.setName("mirror"); DrcOptDevSys sys; sys.addDevice(vcyl); sys.addDevice(mirror); sys.addDevice(pixel); sys.coupleDevice("cylinder","mirror","sfront","smirror_front"); sys.coupleDevice("cylinder","pixel","sback","spixel"); DrcOptDevManager manager; manager.addDeviceSystem(sys); fstream geo; geo.open("Geo.C",std::ios::out); geo<<"{"<SetRange(-1000,-1000,-1000,1000,1000,1000);"<SetView(0,90,90,i);"<SetMarkerStyle(20);"<SetMinimum(-100);"<SetMaximum(+100);"<Draw(\"POL\");"<SetMarkerStyle(20);"<SetMinimum(0);"<SetMaximum(+50);"<Draw(\"POL\");"< list_photon = manager.photonList(); // get list list::iterator iph; for (iph = list_photon.begin(); iph != list_photon.end(); ++iph) { //cout<<(*iph).fate()<SetMarkerColor(" <<(*iph).colorNumber((*iph).wavelength()) <<");"<SetMarkerSize(0.7);"<Draw();"< pi) phi-=2*pi; if (phi < -pi) phi+=2*pi; //cout<<(*iph).position().X()<<" "<<(*iph).position().Y()<<" " // <<(*iph).time()<SetMarkerColor(" <<(*iph).colorNumber((*iph).wavelength()) <<");"<SetMarkerSize(0.7);"<Draw();"<