Message: Hits on a photodiode Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Question Hits on a photodiode 

Keywords: Optical photons, boundary process, surfaces,hits
Forum: Physics List
Date: 09 Nov, 2006
From: Silvia Piantelli <>

I'm a new user of Geant4 and I'm trying to use it for low energy applications.

I'm trying to simulate a very simple detector configuration:

a telescope including a silicon detector followed by a CsI(Tl) 
scintillator whose light is read by a photodiode; between the CsI 
and the photodiode there is a light guide.

I'm simulating an alpha particle of 40MeV impinging on the center of 
the telescope with velocity perpendicular to the face of the telescope.

I defined the hits in the photodiode according to the example 
/examples/extended/optical/LXe for the photomultiplier: the surface 
between the photodiode and the light guide is dielectric_metal and
 when the boundary status is Detection, in UserSteppingAction I force 
the call of ProcessHit.

I'm getting a very strange result: the hits are located only 
in 1/2 of the photodiode (the right part, looking from the rear side 
of the detector); photons hitting the other 1/2 part do not give
 rise to Detection.

I tried to remove the light guide and the effect disappears: 
hits are distributed on the whole surface of the photodiode.

I tried also to rotate the light guide; a rotation around the 
symmetry axis of the guide (rotateZ) does not produce any change. 
On the contrary, when I change from rotateY(-90./57.296) 
(which is the correct rotation to have the smallest face in front 
of the photodiode and the largest one in face of the CsI) 
to rotateY(90./57.296) (in this case the photodiode is 
considerably smaller than the face of the light guide), 
the detected hits move in the left part of the photodiode.

I put here a part of the detector construction I used:

  //------------------------------------------------------ materials

  G4double a;  // atomic mass
  G4double z;  // atomic number
  G4double density;
  G4Material* Si = 
  new G4Material("Silicio", z= 14., a= 28.0855*g/mole, density= 2.33*g/cm3); //silicon
G4Material *vuoto  = new G4Material("Vacuum",z=1.,a=1.01*g/mole,
                          1.e-19*pascal); //the vacuum in the scattering chamber

 G4Element* I  = new G4Element("Iodine",    "I" , z= 53., a= 126.90*g/mole);
  G4Element* Cs = new G4Element("Cesium",    "Cs", z= 55., a= 132.90*g/mole);
  G4Element *O=new G4Element("Oxygen"  , "O", z=8. , a=16.00*g/mole);
G4Element *elSi=new G4Element("silicon","Si",z=14.,a);

G4int   ncomponents;G4int natoms;

  G4Material *SiO2=new G4Material("SiO2",density=2.200*g/cm3,ncomponents=2); // the light guide (I took it from a post in the forum)

G4Material* CsI = 
  new G4Material("CsI", density= 4.534*g/cm3, ncomponents=2); //the CsI
  CsI->AddElement(Cs, natoms=1);
  CsI->AddElement(I , natoms=1);

G4MaterialPropertiesTable* tabcesio = new G4MaterialPropertiesTable(); //scintillation properties of the CsI
  tabcesio->AddConstProperty("SCINTILLATIONYIELD",10./MeV); //I reduced the number of produced photons in order to draw their tracks
 tabcesio->AddConstProperty("FASTTIMECONSTANT", 700.*ns);
  G4double refrind[3]={1.78,1.78,1.78};

 G4double PhotonEnergy[3]={1.71*eV,2.19*eV,3.30*eV};
 G4double formaspettro[3]={0.1,1.0,0.1};

 tabcesio->AddProperty("FASTCOMPONENT",PhotonEnergy, formaspettro,  3);
 tabcesio->AddProperty("SLOWCOMPONENT",PhotonEnergy, formaspettro, 3);
 tabcesio->AddProperty("RINDEX",       PhotonEnergy, refrind,3);


 G4double Absorption1[3]={35*cm,35*cm,35*cm};
  tabcesio->AddProperty("ABSLENGTH",    PhotonEnergy, Absorption1,     3);


//refraction index of vacuum
G4MaterialPropertiesTable* tabvuoto = new G4MaterialPropertiesTable();
 G4double indvuoto[3]={1.,1.,1.};
 tabvuoto->AddProperty("RINDEX",       PhotonEnergy, indvuoto,3);

 //refraction index for the light guide
 G4MaterialPropertiesTable *tabSiO2=new G4MaterialPropertiesTable();
 G4double indsio2[3]={1.45,1.45,1.45};
tabSiO2->AddProperty("RINDEX",PhotonEnergy, indsio2,3);

//refraction index of the silicon (probably useless)
       G4MaterialPropertiesTable *propsi=new G4MaterialPropertiesTable();
	        G4double nsi[3]={3.7,4.0,6.9};

  //------------------------------------------------------ volumes

  //------------------------------ experimental hall (world volume)
  //------------------------------ beam line along x axis

  G4double expHall_x = 3.0*m;
  G4double expHall_y = 1.0*m;
  G4double expHall_z = 1.0*m;
  G4Box* experimentalHall_box
    = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z);
  experimentalHall_log = new G4LogicalVolume(experimentalHall_box,
  experimentalHall_phys = new G4PVPlacement(0,G4ThreeVector(),

   G4double x=300*um;
         G4double maxstep=1*um;

    G4double zz=20.0*mm;
   G4double y=20.0*mm;
   G4double xmezzi=x/2.;
   G4double ymezzi=y/2.;
   G4double zmezzi=zz/2.;

   G4Box *box=new G4Box("box",xmezzi,ymezzi,zmezzi); //the silicon detector
   G4LogicalVolume *logbox=new G4LogicalVolume(box,Si,"logbox");
   logbox->SetUserLimits(new G4UserLimits(maxstep));

   G4double posx=-1*m;
   G4double posy=0.0*m;
   G4double posz=0.0*m;

  physvol=new G4PVPlacement(0,G4ThreeVector(posx,posy,posz),logbox,"box",experimentalHall_log,false,0);

   G4String nomebox="rivSilicio";
//definition of the silicon as sensitive detector
      SiSensitiveDetector* sildet=new SiSensitiveDetector(nomebox,logbox,physvol);
   G4SDManager* SDman = G4SDManager::GetSDMpointer();

   G4double xc=1.5*cm;
   G4double yc=ymezzi;
   G4Box *cesio=new G4Box("cesio",xc,yc,yc); 
   cesiolog=new G4LogicalVolume(cesio,CsI,"cesiolog");
   G4double maxstepcs=1*mm;
   cesiolog->SetUserLimits(new G4UserLimits(maxstepcs));

   G4double posxcs=-0.98*m;
   G4double posycs=0.0*m;
   G4double poszcs=0.0*m;

   cesiophys=new G4PVPlacement(0,G4ThreeVector(posxcs,posycs,poszcs),cesiolog,"cesio",experimentalHall_log,false,0);

   G4Box *foto=new G4Box("foto",xmezzi,yc/2,yc/2);
   G4LogicalVolume*foto_log=new G4LogicalVolume(foto,Si,"foto_log");
   G4double shift=3*cm;
   G4VPhysicalVolume* foto_phys=new G4PVPlacement(0,G4ThreeVector(posxcs+xc+xmezzi+shift,posycs,poszcs),foto_log,"foto_phys",experimentalHall_log,false,0); 

//photodiode as sensitive detector
   G4String nomeboxfd="fotodiodo";
PDSensitiveDetector* pddet=new PDSensitiveDetector(nomeboxfd,sildet);

   //light guide
   G4Trd *guida=new G4Trd("guida",yc,yc/2,yc,yc/2,shift/2);

   G4LogicalVolume *guida_log=new G4LogicalVolume(guida,SiO2,"guida_log");

   G4RotationMatrix *rot=new G4RotationMatrix(0.,0.,0.);
      G4VPhysicalVolume *guida_phys=new G4PVPlacement(rot,G4ThreeVector(posxcs+xc+shift/2,posycs,poszcs),guida_log,"guida_phys",experimentalHall_log,false,0);

//I skip the definition of the optical properties of the side surfaces of the CsI (dielectric_dielectric,groundbackpainted with model unified and sigma alpha 0.1) and of the front surface of the CsI (dielectric_dielectric,polishedfrontpainted)

//side surfaces of the light guide 
   G4OpticalSurface *cesiofaccia=new G4OpticalSurface("cesiofaccia");

//surface of the photodiode
 G4OpticalSurface *fotosup=new G4OpticalSurface("fotosup");

//properties of the surface between the photodiode and the light guide
  G4MaterialPropertiesTable *myST3 = new G4MaterialPropertiesTable();
 G4double Reflect[3] = {0., 0.,0.};
  myST3->AddProperty("REFLECTIVITY", PhotonEnergy, Reflect, 3);
   G4double effi[3]={1.,1.,1.}; 
    myST3->AddProperty("EFFICIENCY",   PhotonEnergy, effi,   3);
     G4double indexresina[3]={1.4,1.4,1.4};//refraction index of the front layer of the photodiode

//properties of the side surfaces of the light guide
  G4double Reflectivity[3] = {1., 1.,1.};
  G4MaterialPropertiesTable *myST4 = new G4MaterialPropertiesTable();
  myST4->AddProperty("REFLECTIVITY", PhotonEnergy, Reflectivity, 3);

  G4LogicalBorderSurface *suplatguida=new G4LogicalBorderSurface("suplatguida",guida_phys,experimentalHall_phys,cesiofaccia);//surface between the light guide and the vacuum (side surfaces of the light guide)
  G4LogicalBorderSurface *fotodiodo_guida=new G4LogicalBorderSurface("fotodiodo_guida",guida_phys,foto_phys,fotosup);//surface between the light guide and the photodiode

And this is an example of the result I obtain:

a photon is detected

 Photon at Boundary! 
 Old Momentum Direction: (0.2313511869208072,-0.9656121183293283,0.1186164627945089)
 Old Polarization:       (-0.9636047562495883,-0.2106511021790528,0.1645964364253431)
 New Momentum Direction: (0.2313511869208072,-0.9656121183293283,0.1186164627945089)
 New Polarization:       (-0.9636047562495883,-0.2106511021790528,0.1645964364253431)
 *** Detection *** 
  128  -934.999970 mm    -1.247 mm    -4.978 mm   0.000003 MeV  0.000003 MeV     0.279358 mm   936.708546 mm  foto_phys Transportation

and the z coordinate is negative (-4.978mm) (as for all the detected photons)

Can you give me some clues on what's wrong with my program?
Thank you in advance


Inline Depth:
 1 1
 All All
Outline Depth:
 1 1
 2 2
 All All
Add message: (add)

1 None: Re: Hits on a photodiode   (Benton Pahlka - 11 Dec, 2006)
(_ None: Re: Hits on a photodiode   (Silvia Piantelli - 11 Dec, 2006)
(_ None: Re: Hits on a photodiode   (Benton Pahlka - 11 Dec, 2006)
 Add Message Add Message
to: "Hits on a photodiode"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews

[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]