Message: Problems with refractive of optical photons generating from NaI scintillation Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Question Problems with refractive of optical photons generating from NaI scintillation 

Forum: Particles
Date: 12 Feb, 2006
From: jwdu <junweidu@mail.ustc.edu.cn>

Hello

I'm a new user of Geant4. I'm using geant4 version 4.5.2 p02, compiled with g++ under Linux Redhat 9.0.

I define a NaI scintillation,with a glass light-guide under it.I use this NaI scintillation to see the response of a gama in it.I want the optical photons has a refractive at the surface but not at the boundary of NaI and glass light-guide.Then how to define the surfaces ? I think it is define in the file of ExN06DetectorConstruction.cc,and follow is my ExN06DetectorConstruction.cc.

Regards, jwDu

//ExN06DetectorConstruction.cc

#include "ExN06DetectorConstruction.hh"
#include "G4Material.hh"
#include "G4MaterialTable.hh"
#include "G4Element.hh"
#include "G4ElementTable.hh"
#include "G4LogicalBorderSurface.hh"
#include "G4LogicalSkinSurface.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4RotationMatrix.hh"
#include "G4ThreeVector.hh"
#include "G4Transform3D.hh"
#include "G4PVPlacement.hh"
#include "G4OpBoundaryProcess.hh"

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

ExN06DetectorConstruction::ExN06DetectorConstruction()
{
  //air
  expHall_x = expHall_y =20*cm;
  expHall_z = 10*cm;
  //NaI
  NaI_x = 55*mm;
  NaI_y = 55*mm;
  NaI_z	= 11*mm;
  //glass guide light SiO2
  glass_x=55*mm;
  glass_y=55*mm;
  glass_z=5*mm;
}

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

ExN06DetectorConstruction::~ExN06DetectorConstruction(){;}

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

G4VPhysicalVolume* ExN06DetectorConstruction::Construct() {

// ------------- Materials -------------

  G4double a, z, density;
  G4int nelements,ncomponents;

// Air
// 
  G4Element* elN = new G4Element("Nitrogen", "N", z=7. , a=14.01*g/mole);
  G4Element* elO = new G4Element("Oxygen"  , "O", z=8. , a=16.00*g/mole);

  G4Material* Air = new G4Material("Air", density=1.29*mg/cm3, nelements=2);
  Air->AddElement(elN, 70*perCent);
  Air->AddElement(elO, 30*perCent);

 //NaI(Tl)
    //NaI
    a = 22.99*g/mole;
    G4Element *elNa = new G4Element("Sodium","Na",z=11.,a);
    a = 126.9*g/mole;
    G4Element *elI = new G4Element("Iodine","I",z=53.,a);
    density = 3.67*g/cm3;
    G4Material* NaI_Tl = new G4Material("NaI_Tl",density,nelements=2);
    NaI_Tl->AddElement(elNa,1);
    NaI_Tl->AddElement(elI,1);
    //Tl  0.4%
    a = 204.383*g/mole;
    G4Element *elTl = new G4Element("Thallium","Tl",z=81.,a);
    density=3.67*g/cm3;
    G4Material* NaI = new G4Material("NaI",density,ncomponents=2);
    NaI->AddMaterial(NaI_Tl,99.6*perCent);
    NaI->AddElement(elTl,0.4*perCent);

 //SiO2
 // 
    a = 28.09*g/mole;
    G4Element *elSi=new G4Element("silicon","Si",z=14.,a);
    density=2.200*g/cm3;
    G4Material *SiO2=new G4Material("quartz",density,ncomponents=2);
    SiO2->AddElement(elSi,1);
    SiO2->AddElement(elO,2);

  // Print all the materials defined.
  //
    G4cout << G4endl << "The materials defined are : " << G4endl << G4endl;
    G4cout << *(G4Material::GetMaterialTable()) << G4endl;

//
// ------------ Generate & Add Material Properties Table ------------
//
  const G4int nEntries = 32;

  G4double PhotonEnergy[nEntries] =
            { 2.034*eV, 2.068*eV, 2.103*eV, 2.139*eV,
              2.177*eV, 2.216*eV, 2.256*eV, 2.298*eV,
              2.341*eV, 2.386*eV, 2.433*eV, 2.481*eV,
              2.532*eV, 2.585*eV, 2.640*eV, 2.697*eV,
              2.757*eV, 2.820*eV, 2.885*eV, 2.954*eV,
              3.026*eV, 3.102*eV, 3.181*eV, 3.265*eV,
              3.353*eV, 3.446*eV, 3.545*eV, 3.649*eV,
              3.760*eV, 3.877*eV, 4.002*eV, 4.136*eV };
//
// Water
//
   G4double RefractiveIndex1[nEntries]=
            {1.8390,   1.8395,   1.8400,   1.8405,
             1.8410,   1.8415,   1.8420,   1.8425,
             1.8430,   1.8435,   1.8440,   1.8447,
             1.8455,   1.8460,   1.8465,   1.8473,
             1.8477,   1.8485,   1.8490,   1.8495,
             1.8500,   1.8505,   1.8510,   1.8515,
             1.8523,   1.8527,   1.8535,   1.8540,
             1.8545,   1.8550,   1.8555,   1.8563 };		

  G4double Absorption1[nEntries] =
           {3.448*m,  4.082*m,  6.329*m,  9.174*m, 12.346*m, 13.889*m,
           15.152*m, 17.241*m, 18.868*m, 20.000*m, 26.316*m, 35.714*m,
           45.455*m, 47.619*m, 52.632*m, 52.632*m, 55.556*m, 52.632*m,
           52.632*m, 47.619*m, 45.455*m, 41.667*m, 37.037*m, 33.333*m,
           30.000*m, 28.500*m, 27.000*m, 24.500*m, 22.000*m, 19.500*m,
           17.500*m, 14.500*m };

  G4double ScintilFast[nEntries] =
            { 0.000134, 0.004432, 0.053991, 0.241971, 0.398942, 
		0.000134, 0.004432,0.053991, 0.241971, 0.398942,
		0.000134, 0.004432, 0.053991, 0.241971, 0.398942,
		0.000134, 0.004432, 0.053991, 0.241971, 0.398942,
		0.000134, 0.004432, 0.053991, 0.241971, 0.398942,
		0.000134, 0.004432, 0.053991, 0.241971, 0.398942,
		0.000134, 0.004432 };
  G4double ScintilSlow[nEntries] =
            { 0.000010, 0.000020, 0.000030, 0.004000, 0.008000, 0.005000, 0.020000,0.001000,
		0.000010, 0.000020, 0.000030, 0.004000, 0.008000, 0.005000, 0.020000, 0.001000,
		0.000010, 0.000020, 0.000030, 0.004000, 0.008000, 0.005000, 0.020000,0.001000,
		0.000010, 0.000020, 0.000030, 0.004000, 0.008000, 0.005000, 0.020000,0.001000,};

  G4MaterialPropertiesTable* myMPT1 = new G4MaterialPropertiesTable();
  myMPT1->AddProperty("RINDEX",       PhotonEnergy, RefractiveIndex1,nEntries);
  myMPT1->AddProperty("ABSLENGTH",    PhotonEnergy, Absorption1,     nEntries);
  myMPT1->AddProperty("FASTCOMPONENT",PhotonEnergy, ScintilFast,     nEntries);
  myMPT1->AddProperty("SLOWCOMPONENT",PhotonEnergy, ScintilSlow,     nEntries);

  myMPT1->AddConstProperty("SCINTILLATIONYIELD",3800./MeV);
  myMPT1->AddConstProperty("RESOLUTIONSCALE",1.0);
  myMPT1->AddConstProperty("FASTTIMECONSTANT", 1.*ns);
  myMPT1->AddConstProperty("SLOWTIMECONSTANT",10.*ns);
  myMPT1->AddConstProperty("YIELDRATIO",0.8);

  NaI->SetMaterialPropertiesTable(myMPT1);

//
// Air
//
  G4double RefractiveIndex2[nEntries] =
            { 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00,
              1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00,
              1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00,
              1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00,
              1.00, 1.00, 1.00, 1.00 };

  G4MaterialPropertiesTable* myMPT2 = new G4MaterialPropertiesTable();
  myMPT2->AddProperty("RINDEX", PhotonEnergy, RefractiveIndex2, nEntries);

  Air->SetMaterialPropertiesTable(myMPT2);

//
//Glass light guide SiO2
//
  G4double RefractiveIndex3[nEntries]=
           {1.4577,    1.4581,    1.4584,    1.4588,    1.4591,
            1.4595,    1.4600,    1.4604,    1.4609,    1.4613,
            1.4619,    1.4624,    1.4630,    1.4636,    1.4642,
            1.4649,    1.4657,    1.4665,    1.4673,    1.4682,
            1.4692,    1.4702,    1.4713,    1.4725,    1.4738,
            1.4751,    1.4766,    1.4782,    1.4800,    1.4819,
            1.4840,    1.4862 };

  G4MaterialPropertiesTable* myMPT3 = new G4MaterialPropertiesTable();
  myMPT3->AddProperty("RINDEX",       PhotonEnergy, RefractiveIndex3,nEntries);

  SiO2->SetMaterialPropertiesTable(myMPT3);

// // ------------- Volumes --------------

// The experimental Hall
//
  G4Box* expHall_box = new G4Box("World",expHall_x,expHall_y,expHall_z);

  G4LogicalVolume* expHall_log
    = new G4LogicalVolume(expHall_box,Air,"World",0,0,0);

  G4VPhysicalVolume* expHall_phys
    = new G4PVPlacement(0,G4ThreeVector(),expHall_log,"World",0,false,0);

//~~~~~~~~~~~~~~~~NaI Scintillation Definition~~~~~~~~~~~~~~~~~~~~~~~~//
  G4Box* NaI_box = new G4Box("NaI",NaI_x,NaI_y,NaI_z);

  G4LogicalVolume* NaI_log
    = new G4LogicalVolume(NaI_box,NaI,"NaI",0,0,0);

  G4VPhysicalVolume* NaI_phys
    = new G4PVPlacement(0,G4ThreeVector(),NaI_log,"NaI",
                        expHall_log,false,0);

//~~~~~~~~~~~~glass light guide SiO2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

  G4Box* SiO2_box =new G4Box("SiO2",glass_x,glass_y,glass_z);

  G4LogicalVolume* SiO2_log
    =new G4LogicalVolume(SiO2_box,SiO2,"SiO2",0,0,0);

  G4VPhysicalVolume* SiO2_phys
    =new G4PVPlacement(0,G4ThreeVector(0,0,-16*mm),SiO2_log,"SiO2",
		       expHall_log,false,0); 

//	------------- Surfaces --------------
//
//NaI
//
   G4OpticalSurface* OpSurfaceNaI = new G4OpticalSurface("SurfaceNaI");
   OpSurfaceNaI->SetType(dielectric_metal);
   OpSurfaceNaI->SetFinish(polished);
   OpSurfaceNaI->SetModel(glisur);
//   G4double polish = 0.8;

   G4LogicalBorderSurface* SurfaceNaI =
				new G4LogicalBorderSurface("SurfaceNaI",
				NaI_phys,expHall_phys,OpSurfaceNaI);
  if(SurfaceNaI->GetVolume1() == NaI_phys) G4cout << "Equal" << G4endl;
  if(SurfaceNaI->GetVolume2() == expHall_phys) G4cout << "Equal" << G4endl;

//SiO2
//
  G4OpticalSurface* OpSurfaceSiO2 = new G4OpticalSurface("SurfaceSiO2");
  OpSurfaceSiO2->SetType(dielectric_dielectric);
  OpSurfaceSiO2->SetFinish(polished);
  OpSurfaceSiO2->SetModel(unified);

  G4LogicalSkinSurface* SurfaceSiO2 =
                                new G4LogicalSkinSurface("SurfaceSiO2",
                                SiO2_log,OpSurfaceSiO2);
  if(SurfaceSiO2->GetLogicalVolume() == SiO2_log ) G4cout << "Equal" << G4endl;
     SurfaceSiO2->GetSurface(SiO2_log) -> GetOpticalSurface() -> DumpInfo();

  //----------------Dielectric metal surface properties defined via the G4OpticalSurface
   //NaI
   //  
   const  G4int num = 2;
    G4double Ephoton[num] = {2.034*eV, 4.140*eV};
   G4double Reflective[num] = {0.,0.};
   G4double Efficiency[num] = {0.,0.};

   G4MaterialPropertiesTable* myST1 = new G4MaterialPropertiesTable();
   myST1->AddProperty("REFLECTIVITY",   Ephoton, Reflective,        num);
   myST1->AddProperty("EFFICIENCY",     Ephoton, Efficiency,        num);

   OpSurfaceNaI->SetMaterialPropertiesTable(myST1);

  //SiO2

    G4double Reflectivity[num] = {0., 0.};
    G4double Efficiency3[num]   = {0.,0.};

  G4MaterialPropertiesTable *myST3 = new G4MaterialPropertiesTable();
  myST3->AddProperty("REFLECTIVITY", Ephoton, Reflectivity, num);
  myST3->AddProperty("EFFICIENCY",   Ephoton, Efficiency3,   num);

  OpSurfaceSiO2->SetMaterialPropertiesTable(myST3);

//always return the physical World
  return expHall_phys;
}

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 

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

1 Feedback: Re: Problems with refractive of optical photons generating from NaI scintillation   (Peter Gumplinger - 13 Feb, 2006)
 Add Message Add Message
to: "Problems with refractive of optical photons generating from NaI scintillation"

 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 ]