/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSAwakeMultilayerScreen.cc

00001 #include <cmath>
00002 #include "BDSAwakeMultilayerScreen.hh"
00003 #include "G4TwoVector.hh"
00004 #include "BDSGlobalConstants.hh"
00005 // #include "G4OpticalSurface.hh"
00006 // #include "G4LogicalBorderSurface.hh"
00007 // #include "G4LogicalSkinSurface.hh"
00008 #include "BDSSampler.hh"
00009 
00010 BDSAwakeMultilayerScreen::BDSAwakeMultilayerScreen(G4String material, G4double thickness, G4double dgrain, G4double windowThickness, G4String windowMaterial):
00011 BDSMultilayerScreen(G4TwoVector(1*CLHEP::m,3*CLHEP::cm),(G4String)"AwakeMultilayerScreen"),_material(material),_thickness(thickness),  _dgrain(dgrain), _windowThickness(windowThickness),_windowMaterial(windowMaterial)
00012 {
00013   _fillFactor=0.5;
00014   _layerThickness=_dgrain;
00015   _binderLayerThickness=_dgrain*(1-_fillFactor)/_fillFactor;
00016   _nScintLayers=_thickness/(_layerThickness+_binderLayerThickness);
00017   G4double modulo = (_nScintLayers-floor(_nScintLayers));
00018   _firstLayerThickness = _layerThickness*modulo;
00019   _firstBinderLayerThickness = _binderLayerThickness*modulo;
00020   layers();
00021 }
00022 
00023 
00024 BDSAwakeMultilayerScreen::~BDSAwakeMultilayerScreen(){
00025 }
00026 
00027 void BDSAwakeMultilayerScreen::layers(){
00028   _gapWidth=0*1e-3*CLHEP::mm;
00029   _gapSpacing=1*CLHEP::mm;
00030   preWindowSampler();
00031   windowLayer();
00032   preScreenSampler();
00033   backLayer();
00034   substrateLayer();
00035   if(_firstLayerThickness>1e-9){
00036     backBinderLayer();
00037     backScintillatorLayer();
00038   }
00039   for(int i=0; i<(floor(_nScintLayers)-1); i++){
00040     binderLayer();
00041     scintillatorLayer();
00042   }
00043   binderLayer();
00044   frontScintillatorLayer1();
00045   frontScintillatorLayer2();
00046   frontLayer();
00047   postScreenSampler();
00048   build();
00049 }
00050 
00051 void BDSAwakeMultilayerScreen::sampler(G4String name){
00052   G4int nThisSampler = BDSSampler::GetNSamplers()+1;
00053   G4String samplerName = "Sampler_" + BDSGlobalConstants::Instance()->StringFromInt(nThisSampler) + "_" + name;
00054   BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),1*CLHEP::um),samplerName,BDSGlobalConstants::Instance()->GetVacuumMaterial(),0,0);
00055   sl->color(G4Color(1.0,0.0,0.0,0.3));
00056   sl->sampler();
00057   screenLayer(sl);
00058 }
00059 
00060 void BDSAwakeMultilayerScreen::preWindowSampler(){
00061   sampler((G4String)"preWindowSampler");
00062 }
00063 
00064 void BDSAwakeMultilayerScreen::preScreenSampler(){
00065   sampler((G4String)"preScreenSampler");
00066 }
00067 
00068 void BDSAwakeMultilayerScreen::postScreenSampler(){
00069   sampler((G4String)"postScreenSampler");
00070 }
00071 
00072 void BDSAwakeMultilayerScreen::windowLayer(){
00073   if(_windowThickness>0){
00074     BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),_windowThickness),(G4String)"windowLayer",_windowMaterial.data(),0,0);
00075     sl->color(G4Color(0.8,0.8,0.8,0.3));
00076     screenLayer(sl);
00077   }
00078 }
00079 
00080 
00081 void BDSAwakeMultilayerScreen::backLayer(){
00082   BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),10*CLHEP::um),(G4String)"backingLayer","cellulose",0,0);
00083   sl->color(G4Color(0.5,0.0,0.5,0.3));
00084   screenLayer(sl);
00085 }
00086 
00087 void BDSAwakeMultilayerScreen::substrateLayer(){
00088   BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),178*CLHEP::um),(G4String)"substrateLayer","PET",0,0);
00089   sl->color(G4Color(1.0,0.0,0.0,0.3));
00090   screenLayer(sl);
00091 }
00092 
00093 void BDSAwakeMultilayerScreen::binderLayer(){
00094   BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),_binderLayerThickness),(G4String)"binderLayerBack","pet_lanex",0,0);
00095   sl->color(G4Color(1.0,0.0,0.0,0.3));
00096   screenLayer(sl);
00097 }
00098 
00099 void BDSAwakeMultilayerScreen::backBinderLayer(){
00100     BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),_firstBinderLayerThickness),(G4String)"binderLayerBack","pet_lanex",0,0);
00101   sl->color(G4Color(1.0,0.0,0.0,0.3));
00102   screenLayer(sl);
00103 }
00104 
00105 void BDSAwakeMultilayerScreen::scintillatorLayer(){
00106   BDSScreenLayer* sl = new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),_layerThickness),(G4String)"scintillatorLayer","gos_lanex",_gapWidth,_gapSpacing);
00107   sl->color(G4Color(0.0,1.0,0.0,0.3));
00108   screenLayer(sl);
00109   G4cout << "finished." << G4endl;
00110 }
00111 
00112 void BDSAwakeMultilayerScreen::frontScintillatorLayer1(){
00113   BDSScreenLayer* sl = new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),0.5*_layerThickness),(G4String)"scintillatorLayer","gos_lanex",_gapWidth,_gapSpacing);
00114   sl->color(G4Color(0.0,1.0,0.0,0.3));
00115   screenLayer(sl);
00116   G4cout << "finished." << G4endl;
00117 }
00118 
00119 void BDSAwakeMultilayerScreen::frontScintillatorLayer2(){
00120   BDSScreenLayer* sl = new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),0.5*_layerThickness),(G4String)"scintillatorLayer","gos_ri1",_gapWidth,_gapSpacing);
00121   sl->color(G4Color(0.0,1.0,0.0,0.3));
00122   screenLayer(sl);
00123   G4cout << "finished." << G4endl;
00124 }
00125 
00126 void BDSAwakeMultilayerScreen::backScintillatorLayer(){
00127   BDSScreenLayer* sl = new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),_firstLayerThickness),(G4String)"scintillatorLayer","gos_lanex",_gapWidth,_gapSpacing);
00128   sl->color(G4Color(0.0,1.0,0.0,0.3));
00129   screenLayer(sl);
00130   G4cout << "finished." << G4endl;
00131 }
00132 
00133 
00134 void BDSAwakeMultilayerScreen::frontLayer(){
00135   BDSScreenLayer* sl =  new BDSScreenLayer(G4ThreeVector(size().x(),size().y(),5*CLHEP::um),(G4String)"frontLayer","cellulose",0,0);
00136   sl->color(G4Color(0.5,0.0,0.5,0.3));
00137   screenLayer(sl);
00138 }
00139 
00140 void BDSAwakeMultilayerScreen::surfaces(){
00141   reflectiveSurface();
00142   //  roughSurface();
00143 }
00144 
00145 void BDSAwakeMultilayerScreen::reflectiveSurface(){
00146   BDSMultilayerScreen::reflectiveSurface(3,2);
00147 }
00148 
00149 void BDSAwakeMultilayerScreen::roughSurface(){
00150   //A rough surface between the scintillator layer and the cellulose layer (due to the phosphor grains)
00151   BDSMultilayerScreen::roughSurface(23,24);
00152 }
00153 
00154 
00155 
00156 
00157   /*
00158   G4OpticalSurface* OpSurface=new G4OpticalSurface("OpSurface");
00159   G4LogicalBorderSurface* Surface = new 
00160     G4LogicalBorderSurface("phosphor_PET_surface", screenLayer(0)->phys(), screenLayer(1)->phys(), OpSurface);
00161   //  G4LogicalSkinSurface* Surface  = new G4LogicalSkinSurface("PET_skin_surface",screenLayer(0)->log(),OpSurface);
00162   //  G4double sigma_alpha=0.7;
00163   OpSurface -> SetType(dielectric_metal);
00164   OpSurface -> SetModel(glisur);
00165   OpSurface -> SetFinish(polished);
00166   //  G4double polish = 0.8;
00167 
00168   //  OpSurface -> SetSigmaAlpha(sigma_alpha);
00169   const G4int NUM = 2;
00170   G4double pp[NUM] = {2.038*eV, 4.144*eV};
00171   //  G4double rindex[NUM] = {1.5750, 1.5750};
00172   G4double reflectivity[NUM] = {1.0, 1.0};
00173   G4double efficiency[NUM] = {0.5, 0.5};
00174   //  G4double specularlobe[NUM] = {0.3, 0.3};
00175   //  G4double specularspike[NUM] = {0.2, 0.2};
00176   //  G4double backscatter[NUM] = {0.1, 0.1};
00177   G4MaterialPropertiesTable* SMPT = new G4MaterialPropertiesTable();
00178   SMPT->AddProperty("REFLECTIVITY",pp, reflectivity,NUM);
00179   SMPT->AddProperty("EFFICIENCY",pp,efficiency,NUM);
00180 
00181   //  SMPT->AddProperty("RINDEX",pp,rindex,NUM);
00182 
00183   OpSurface->SetMaterialPropertiesTable(SMPT);
00184 
00185   */
00186 
00187 
00188 void BDSAwakeMultilayerScreen::place(G4RotationMatrix* rot, G4ThreeVector pos, G4LogicalVolume* motherVol)
00189 {
00190   super::place(rot,pos,motherVol);
00191   surfaces();
00192 }

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7