Top Banner
C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation C++, STL, root (nothing else) Doxygen documentation examples available included in pandaroot easy to include in pandaroot Surfaces, volumes, materials can be connected accessible by a “manager” abstract base classes
18

C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation C++, STL, root (nothing else) Doxygen documentation.

Jan 05, 2016

Download

Documents

Angela Reynolds
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

C.Schwarz, GSI, 13.03.07

DIRC photon propagation software

Set of routines to play with photon propagation

C++, STL, root (nothing else) Doxygen documentation examples available included in pandaroot easy to include in pandaroot

Surfaces, volumes, materials

can be connected accessible by a “manager” abstract base classes

Page 2: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

2C.Schwarz, GSI, 13.03.07

pandaroot/drc/drcprop

Page 3: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

3C.Schwarz, GSI, 13.03.07

Examples

test_simple_bar.cc

test_cylinder.cc

test_disk.cc

test_sheet.cc

Page 4: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

4C.Schwarz, GSI, 13.03.07

// 8 points define a bar

TVector3 p1(-10.0, +5.0, 0); // p5----------p8 TVector3 p2(-10.0, -5.0, 0); // /| /| TVector3 p3(+10.0, -5.0, 0); // / | / | TVector3 p4(+10.0, +5.0, 0); // / p6--------/--p7 // / / / / // / / / / // / / / / // / / / / TVector3 p5(-10.0, +5.0, -40); // p1----------p4 / TVector3 p6(-10.0, -5.0, -40); // | / | / TVector3 p7(+10.0, -5.0, -40); // |/ |/ TVector3 p8(+10.0, +5.0, -40);//p2----------p3

// Define from points 6 surfaces of the bar. The points have to be given in // the sequence going around the surface, clock- or counterclock-wise. // There are 2 additional surfaces, a mirror and a screen.

// How to produce surfaces by shift and rotate operation is for sake of clearness // not shown here, but in one of the other examples.

// Declare flat surfaces with arbitrary number of points.

DrcSurfPolyFlat a1;

a1.addPoint(p1); a1.addPoint(p2); a1.addPoint(p3); a1.addPoint(p4); a1.setName("pfront");

surface

Page 5: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

5C.Schwarz, GSI, 13.03.07

volume

// create a volume consiting of surfaces // create a material the bar will consist of

DrcOptVol bar; DrcOptMatLithotecQ0 quartz; bar.setOptMaterial(quartz);

bar.addSurface(a1); bar.addSurface(a2); bar.addSurface(a3); bar.addSurface(a4); bar.addSurface(a5); bar.addSurface(a6); bar.setName("bar");

Page 6: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

6C.Schwarz, GSI, 13.03.07

connections

// Build a optical system consisting out of several volumes, // mirrors and screens. // This layer has the advantage, that a device consisting out // of many equal subsystems // like a bar box, easily can be reproduced.

DrcOptDevSys opt_system;

opt_system.addDevice(bar); opt_system.addDevice(screen); opt_system.addDevice(mirror);

// couple surface 1 of device 1 with surface 2 of device 2 // dev1 dev2 surf1 surf2 opt_system.coupleDevice("bar","screen","pback","screen_front"); opt_system.coupleDevice("bar","mirror","pfront","mirror_front");

Page 7: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

7C.Schwarz, GSI, 13.03.07

managing // The manager must be created as pointer. It is created as singleton, that is only // one manager can exist per application.

DrcOptDevManager* manager = new DrcOptDevManager(); manager->addDeviceSystem(opt_system);

fstream geo; geo.open("Geo.C",std::ios::out); geo<<"{"<<endl; geo<<" TCanvas *c1 = new TCanvas(\"c1\"); "<<endl; geo<<" TView *view = new TView(1);"<<endl; geo<<" view->SetRange(-50,-50,-50,50,50,50);"<<endl; geo<<" Int_t i;"<<endl; geo<<" view->SetView(0,90,90,i);"<<endl; // the following command sets a flag within the manager and all photons from // now on will be traced and can be plotted by calling within root // .x Geo.C // .x Screen.C // manager->print(geo);

Page 8: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

8C.Schwarz, GSI, 13.03.07

photon generation - propagation// create a list of photons in bar

TVector3 pos(0,-7,-20); TVector3 dir(0,7, 10); double beta = 0.75;

bool photons_exist = manager->cerenkov(pos,dir,beta); // generate photons

if (photons_exist) { manager->propagate(); // propagate photons }

list<DrcPhoton> list_photon = manager->photonList(); // get list

DrcOptDevManager is a instanton, easy access from everywhere by

DrcOptDevManager* manager = DrcOptDevManager::getInstance();

He knows everything, since he holds copies from all objects.

Page 9: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

9C.Schwarz, GSI, 13.03.07

clones // DrcOptDevManager manager; // reproduce the system nsegs times (system = segment + mirror)

DrcOptDevSys psys[nsegs];

TRotation rot; rot.RotateZ(-angle); // clockwise otherwise pleft=pright coupling below fails...

for (int i=0; i<nsegs; i++) { psys[i] = psystem; manager.addDeviceSystem(psys[i],i); psystem.rotate(rot); }

// couple systems side at side for (int i=1; i<nsegs; i++) {

manager.coupleDevice("segment","segment","pleft","pright",i,(i-1)); } // connect last with first. manager.coupleDevice("segment","segment","pleft","pright",0,nsegs-1);

Page 10: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

10C.Schwarz, GSI, 13.03.07

photons

class DrcPhoton{ private: //! Wavelength in nm. double m_lambda; //! Actual position of photon. TVector3 m_position; //! Old position of photon. TVector3 m_positionOld; //! Normalized direction of photon. TVector3 m_direction; //! The fate of the photon. Drc::PhotonFate m_fate; //! Number of suffered reflections. int m_reflections; //! Verbosity level 0-5. int m_verbosity; //! Pointer to device where photon is. DrcOptDev* m_dev; //! Time of flight. double m_time;

enum PhotonFate { //! Photon is still propagating PhotFlying, //! Photon has hit measuring device. PhotMeasured, //! Photon got lost outside. PhotLost, //! Photon got lost inside. PhotAbsorbed };

Page 11: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

11C.Schwarz, GSI, 13.03.07

Particle in disk Total photons: 844 measured: 521 absorbed: 4 lost: 319

beta=0.99

Page 12: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

12C.Schwarz, GSI, 13.03.07

screen (pixel)

Page 13: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

13C.Schwarz, GSI, 13.03.07

sheet and cylinder

nph=20 =.99

nph=1000 =.99

Page 14: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

14C.Schwarz, GSI, 13.03.07

sheet and cylinder

nph=20 =.99

nph=1000 =.99

Page 15: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

15C.Schwarz, GSI, 13.03.07

dispersion

=0.69

=0.71

sheet of fused silica

Page 16: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

16C.Schwarz, GSI, 13.03.07

extending by deriving from base class

virtual double refIndex(const double lambda) const = 0; virtual double refIndexDeriv(const double lambda) const = 0; virtual double refIndexDeriv2(const double lambda) const = 0; virtual bool absorptionFlag(double lambda, double& length) const = 0;

DrcOptMatbs.h

DrcOptMatLithotecQ0.h

class DrcOptMatLithotecQ0 : public DrcOptMatAbs

DrcOptMatLithotecQ0.cxx

Page 17: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

17C.Schwarz, GSI, 13.03.07

extending by deriving from base class

bool DrcOptMatLithotecQ0::absorptionFlag(double lambda, double& length) const{ // Rayleigh scattering. static const double clarity = 2100*1000; // @ 633 nm in mm (2100 m) // (=278m at 400nm)

double trans = exp(-(length)/(clarity*pow(lambda/663,4))); double cmp = m_ran.Uniform(1.0); if (cmp>trans) { length *= trans; // eg. trans = 0.5 : 50% of way. return true; }

return false; // no absorption.}

Page 18: C.Schwarz, GSI, 13.03.07 DIRC photon propagation software Set of routines to play with photon propagation  C++, STL, root (nothing else)  Doxygen documentation.

18C.Schwarz, GSI, 13.03.07

summary

optical volumes defined by surfaces can be coupled and generate optical device system

manager holds one or several device system

manager generates cherenkov photons and propagates them

manager holds the propagated photon list

easy to include new materials, surfaces...