00001 #include <cmath>
00002 #include "BDSAwakeMultilayerScreen.hh"
00003 #include "G4TwoVector.hh"
00004 #include "BDSGlobalConstants.hh"
00005
00006
00007
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
00143 }
00144
00145 void BDSAwakeMultilayerScreen::reflectiveSurface(){
00146 BDSMultilayerScreen::reflectiveSurface(3,2);
00147 }
00148
00149 void BDSAwakeMultilayerScreen::roughSurface(){
00150
00151 BDSMultilayerScreen::roughSurface(23,24);
00152 }
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188 void BDSAwakeMultilayerScreen::place(G4RotationMatrix* rot, G4ThreeVector pos, G4LogicalVolume* motherVol)
00189 {
00190 super::place(rot,pos,motherVol);
00191 surfaces();
00192 }