/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Simulation/BOOST/TofSim/TofSim-00-02-33/src/PartProduce.cc

Go to the documentation of this file.
00001 #include "PartProduce.hh"
00002 
00003 #include "G4LogicalVolume.hh"
00004 #include "G4VPhysicalVolume.hh"
00005 #include "G4PVPlacement.hh"
00006 #include "G4Trd.hh"
00007 #include "G4Box.hh"
00008 #include "G4Transform3D.hh"
00009 #include "G4UnionSolid.hh"
00010 #include "G4Trap.hh"
00011 #include "G4Tubs.hh"
00012 #include "G4Cons.hh"
00013 #include "G4SubtractionSolid.hh"
00014 #include "G4IntersectionSolid.hh"
00015 #include "G4VisAttributes.hh"
00016 
00017 using namespace std;
00018 
00019 G4double smallL = 0.01*mm;
00020 G4RotationMatrix rot_dummy(0*deg,0*deg,0*deg);
00021 bool checkOverlap = false;
00022 std::ostringstream Name;
00023 
00024 
00025 PartProduce::PartProduce()
00026 {       
00027     IniParam();
00028 }
00029 
00030 PartProduce::~PartProduce()
00031 {
00032 }
00033 
00034 void PartProduce::IniParam()
00035 {
00036     tofPara = BesTofGeoParameter::GetInstance();
00037 
00038     //All the values are in units of mm or deg
00039     containerOut_xdown = tofPara->Get("containerOut_xdown");
00040     containerOut_xup = tofPara->Get("containerOut_xup");
00041     containerOut_y = tofPara->Get("containerOut_y");
00042     containerOut_z = tofPara->Get("containerOut_z");
00043     container_thickness = tofPara->Get("container_thickness");
00044     container_lowBorder = tofPara->Get("container_lowBorder");
00045 
00046     containerIn_xdown = tofPara->Get("containerIn_xdown");
00047     containerIn_xup = tofPara->Get("containerIn_xup");
00048     containerIn_y = tofPara->Get("containerIn_y");
00049     containerIn_z = tofPara->Get("containerIn_z");
00050 
00051     upCover_xdown = tofPara->Get("upCover_xdown");
00052     upCover_xup = tofPara->Get("upCover_xup");
00053     upCover_y = tofPara->Get("upCover_y");
00054     upCover_z = tofPara->Get("upCover_z");
00055     upCover_posz = tofPara->Get("upCover_posz");
00056 
00057     lowCover1_xdown = tofPara->Get("lowCover1_xdown");
00058     lowCover1_xup = tofPara->Get("lowCover1_xup");
00059     lowCover1_y = tofPara->Get("lowCover1_y");
00060     lowCover1_z = tofPara->Get("lowCover1_z");
00061     lowCover1_addx = tofPara->Get("lowCover1_addx");
00062     lowCover1_addz = tofPara->Get("lowCover1_addz");
00063     lowCover1_posz = tofPara->Get("lowCover1_posz");
00064 
00065     lowCover2_xdown = tofPara->Get("lowCover2_xdown");
00066     lowCover2_xup = tofPara->Get("lowCover2_xup");
00067     lowCover2_y = tofPara->Get("lowCover2_y");
00068     lowCover2_z = tofPara->Get("lowCover2_z");
00069     lowCover2_posz = tofPara->Get("lowCover2_posz");
00070 
00071     upFEE_xdown = tofPara->Get("upFEE_xdown");
00072     upFEE_xup = tofPara->Get("upFEE_xup");
00073     upFEE_y = tofPara->Get("upFEE_y");
00074     upFEE_z = tofPara->Get("upFEE_z");
00075     FEE_thickness = tofPara->Get("FEE_thickness");
00076     upFEE_posz = tofPara->Get("upFEE_posz");
00077 
00078     upFEE_pcb_xdown = tofPara->Get("upFEE_pcb_xdown");
00079     upFEE_pcb_xup = tofPara->Get("upFEE_pcb_xup");
00080     upFEE_pcb_y = tofPara->Get("upFEE_pcb_y");
00081     upFEE_pcb_z = tofPara->Get("upFEE_pcb_z");
00082 
00083     sideFEE_x = tofPara->Get("sideFEE_x");
00084     sideFEE_y = tofPara->Get("sideFEE_y");
00085     sideFEE_z = tofPara->Get("sideFEE_z");
00086     sideFEE_posl = tofPara->Get("sideFEE_posl");
00087 
00088     sideFEE_pcb_x = tofPara->Get("sideFEE_pcb_x");
00089     sideFEE_pcb_y = tofPara->Get("sideFEE_pcb_y");
00090     sideFEE_pcb_z = tofPara->Get("sideFEE_pcb_z");
00091 
00092     castingDie_x = tofPara->Get("castingDie_x");
00093     castingDie_y = tofPara->Get("castingDie_y");
00094     castingDie_z = tofPara->Get("castingDie_z");
00095     castingDie_addr = tofPara->Get("castingDie_addr");
00096     castingDie_subtractx = tofPara->Get("castingDie_subtractx");
00097     castingDie_subtract_posz = tofPara->Get("castingDie_subtract_posz");
00098     castingDie_posz1 = tofPara->Get("castingDie_posz1");
00099     castingDie_posz2 = tofPara->Get("castingDie_posz2");
00100 
00101     chamber_in_posy = tofPara->Get("chamber_in_posy");
00102     chamber_out_posy = tofPara->Get("chamber_out_posy");
00103 
00104     bracket_x = tofPara->Get("bracket_x");
00105     bracket_y = tofPara->Get("bracket_y");
00106     bracket_z = tofPara->Get("bracket_z");
00107     bracket_r = tofPara->Get("bracket_r");
00108     bracket_posx = tofPara->Get("bracket_posx");
00109 
00110     upStopBlock_x = tofPara->Get("upStopBlock_x");
00111     upStopBlock_y = tofPara->Get("upStopBlock_y");
00112     upStopBlock_z = tofPara->Get("upStopBlock_z");
00113     upStopBlock_subtractr = tofPara->Get("upStopBlock_subtractr");
00114     upStopBlock_subtractposz = tofPara->Get("upStopBlock_subtractposz");
00115 
00116     sideStopBlock_x = tofPara->Get("sideStopBlock_x");
00117     sideStopBlock_y = tofPara->Get("sideStopBlock_y");
00118     sideStopBlock_z = tofPara->Get("sideStopBlock_z");
00119     sideStopBlock_thickness = tofPara->Get("sideStopBlock_thickness");
00120     sideStopBlock_posz0 = tofPara->Get("sideStopBlock_posz0");
00121     sideStopBlock_posz1 = tofPara->Get("sideStopBlock_posz1");
00122 
00123 
00124     honeyComb_xdown = tofPara->Get("honeyComb_xdown");
00125     honeyComb_xup = tofPara->Get("honeyComb_xup");
00126     honeyComb_y = tofPara->Get("honeyComb_y");
00127     honeyComb_z = tofPara->Get("honeyComb_z");
00128     honeyComb_surface_y = tofPara->Get("honeyComb_surface_y");
00129     honeyComb_posz = tofPara->Get("honeyComb_posz");
00130 
00131     tape_mrpc_xdown = tofPara->Get("tape_mrpc_xdown");
00132     tape_mrpc_xup = tofPara->Get("tape_mrpc_xup");
00133     tape_mrpc_y = tofPara->Get("tape_mrpc_y");
00134     tape_mrpc_z = tofPara->Get("tape_mrpc_z");
00135     tape_mrpc_posz = tofPara->Get("tape_mrpc_posz");
00136 
00137     pcbBoard_xdown = tofPara->Get("pcbBoard_xdown");
00138     pcbBoard_xup = tofPara->Get("pcbBoard_xup");
00139     pcbBoard_y0 = tofPara->Get("pcbBoard_y0");
00140     pcbBoard_y1 = tofPara->Get("pcbBoard_y1");
00141     pcbBoard_z = tofPara->Get("pcbBoard_z");
00142 
00143     strip_x[0] = tofPara->Get("strip_x[0]");
00144     strip_x[1] = tofPara->Get("strip_x[1]");
00145     strip_x[2] = tofPara->Get("strip_x[2]");
00146     strip_x[3] = tofPara->Get("strip_x[3]");
00147     strip_x[4] = tofPara->Get("strip_x[4]");
00148     strip_x[5] = tofPara->Get("strip_x[5]");
00149     strip_x[6] = tofPara->Get("strip_x[6]");
00150     strip_x[7] = tofPara->Get("strip_x[7]");
00151     strip_x[8] = tofPara->Get("strip_x[8]");
00152     strip_x[9] = tofPara->Get("strip_x[9]");
00153     strip_x[10] = tofPara->Get("strip_x[10]");
00154     strip_x[11] = tofPara->Get("strip_x[11]");
00155     strip_y = tofPara->Get("strip_y");
00156     strip_z = tofPara->Get("strip_z");
00157     strip_gap = tofPara->Get("strip_gap");
00158     strip_posz = tofPara->Get("strip_posz");
00159 
00160     mylar_xdown = tofPara->Get("mylar_xdown");
00161     mylar_xup = tofPara->Get("mylar_xup");
00162     mylar_y = tofPara->Get("mylar_y");
00163     mylar_z = tofPara->Get("mylar_z");
00164     mylar_posz = tofPara->Get("mylar_posz");
00165 
00166     glass0_xdown = tofPara->Get("glass0_xdown");
00167     glass0_xup = tofPara->Get("glass0_xup");
00168     glass0_y = tofPara->Get("glass0_y");
00169     glass0_z = tofPara->Get("glass0_z");
00170     glass0_posz = tofPara->Get("glass0_posz");
00171 
00172     glass1_xdown = tofPara->Get("glass1_xdown");
00173     glass1_xup = tofPara->Get("glass1_xup");
00174     glass1_y = tofPara->Get("glass1_y");
00175     glass1_z = tofPara->Get("glass1_z");
00176     glass1_posz = tofPara->Get("glass1_posz");
00177 
00178     gasLayer_xdown = tofPara->Get("gasLayer_xdown");
00179     gasLayer_xup = tofPara->Get("gasLayer_xup");
00180     gasLayer_y = tofPara->Get("gasLayer_y");
00181     gasLayer_z = tofPara->Get("gasLayer_z");
00182     gasLayer_posz = tofPara->Get("gasLayer_posz");
00183 
00184     endcap_r = tofPara->Get("endcap_r");
00185     endcap_length = tofPara->Get("endcap_length");
00186     layer_posz = tofPara->Get("layer_posz");
00187     startAngle_east = tofPara->Get("startAngle_east");
00188     startAngle_west = tofPara->Get("startAngle_west");
00189 }
00190 
00191 
00192 G4VSolid* PartProduce::sd_containerOut(double smallL, string name)
00193 {
00194     G4Trd* solid_containerOut = new G4Trd(name, containerOut_xdown/2+smallL, containerOut_xup/2+smallL, containerOut_y/2+smallL, containerOut_y/2+smallL, containerOut_z/2+smallL);
00195     return solid_containerOut;
00196 }
00197 
00198 G4VSolid* PartProduce::sd_containerIn(double smallL, string name)
00199 {
00200     G4Trd* solid_containerIn = new G4Trd(name, containerIn_xdown/2+smallL, containerIn_xup/2+smallL, containerIn_y/2+smallL, containerIn_y/2+smallL, containerIn_z/2+smallL);
00201     return solid_containerIn;
00202 }
00203 
00204 G4LogicalVolume* PartProduce::lg_containerFrame(string name)
00205 {
00206     Name.str("");
00207     Name<<"solid_containerOut_"<<name;
00208     G4VSolid* solid_containerOut = sd_containerOut(0, Name.str());
00209     Name.str("");
00210     Name<<"solid_containerIn_"<<name;
00211     G4VSolid* solid_containerIn = sd_containerIn(smallL, Name.str());
00212 
00213     double lz = (container_lowBorder-container_thickness)/2;
00214     G4ThreeVector translation_containerFrame(0,0,lz);
00215     G4Transform3D transform_containerFrame(rot_dummy, translation_containerFrame);
00216     Name.str("");
00217     Name<<"solid_containerFrame_"<<name;
00218     G4SubtractionSolid* solid_containerFrame = new G4SubtractionSolid(Name.str(), solid_containerOut, solid_containerIn, transform_containerFrame);
00219     G4LogicalVolume* logical_containerFrame = new G4LogicalVolume(solid_containerFrame, G4Material::GetMaterial("Aluminium"), name);
00220 
00221     G4VisAttributes* vis = new G4VisAttributes();
00222     vis->SetColor(G4Color(0.5,0.5,0.6));
00223     logical_containerFrame->SetVisAttributes(vis);
00224 
00225     return logical_containerFrame;
00226 }
00227 
00228 G4VSolid* PartProduce::sd_upCover(double smallL, string name)
00229 {
00230     G4Trd* solid_upCover = new G4Trd(name, upCover_xdown/2+smallL, upCover_xup/2+smallL, upCover_y/2+smallL, upCover_y/2+smallL, upCover_z/2+smallL);
00231     return solid_upCover;
00232 }
00233 
00234 G4VSolid* PartProduce::sd_lowCover1(double smallL, string name)
00235 {
00236     Name.str("");
00237     Name<<name<<"_1";
00238     G4Trd* solid_lowCover1_1 = new G4Trd(Name.str(), lowCover1_xdown/2+smallL, lowCover1_xup/2+smallL, lowCover1_y/2+smallL, lowCover1_y/2+smallL, lowCover1_z/2+smallL);
00239 
00240     Name.str("");
00241     Name<<name<<"_2";
00242     G4Trd* solid_lowCover1_2 = new G4Trd(Name.str(), lowCover1_addx/2+smallL, lowCover1_addx/2+smallL, lowCover1_y/2+smallL, lowCover1_y/2+smallL, lowCover1_addz/2+smallL);
00243 
00244     G4Transform3D transform_lowCover1(rot_dummy, G4ThreeVector(0,0,-(lowCover1_z+lowCover1_addz)/2));
00245     G4UnionSolid* solid_lowCover1 = new G4UnionSolid(name, solid_lowCover1_1, solid_lowCover1_2, transform_lowCover1);
00246     return solid_lowCover1;
00247 }
00248 
00249 G4VSolid* PartProduce::sd_lowCover2(double smallL, string name)
00250 {
00251     G4Trd* solid_lowCover2 = new G4Trd(name, lowCover2_xdown/2+smallL, lowCover2_xup/2+smallL, lowCover2_y/2+smallL, lowCover2_y/2+smallL, lowCover2_z/2+smallL);
00252     return solid_lowCover2;
00253 }
00254 
00255 G4LogicalVolume* PartProduce::lg_upCover(string name)
00256 {
00257     Name.str("");
00258     Name<<"solid_upCover_"<<name;
00259     G4VSolid* solid_upCover = sd_upCover(0, Name.str());
00260     G4LogicalVolume* logical_upCover = new G4LogicalVolume(solid_upCover, G4Material::GetMaterial("Aluminium"), name);
00261 
00262     G4VisAttributes* vis = new G4VisAttributes();
00263     vis->SetColor(G4Color(0.5,0.5,0.6));
00264     //vis->SetForceWireframe(true);     
00265     logical_upCover->SetVisAttributes(vis);
00266 
00267     return logical_upCover;
00268 }
00269 
00270 G4LogicalVolume* PartProduce::lg_lowCover1(string name)
00271 {
00272     Name.str("");
00273     Name<<"solid_lowCover1_"<<name;
00274     G4VSolid* solid_lowCover1 = sd_lowCover1(0, Name.str());
00275     G4LogicalVolume* logical_lowCover1 = new G4LogicalVolume(solid_lowCover1, G4Material::GetMaterial("Aluminium"), name);
00276 
00277     G4VisAttributes* vis = new G4VisAttributes();
00278     vis->SetColor(G4Color(0.5,0.5,0.6));
00279     //vis->SetForceWireframe(true);     
00280     logical_lowCover1->SetVisAttributes(vis);
00281 
00282     return logical_lowCover1;
00283 }
00284 
00285 G4LogicalVolume* PartProduce::lg_lowCover2(string name)
00286 {
00287     Name.str("");
00288     Name<<"solid_lowCover2_"<<name;
00289     G4VSolid* solid_lowCover2 = sd_lowCover2(0, Name.str());
00290     G4LogicalVolume* logical_lowCover2 = new G4LogicalVolume(solid_lowCover2, G4Material::GetMaterial("Aluminium"), name);
00291 
00292     G4VisAttributes* vis = new G4VisAttributes();
00293     vis->SetColor(G4Color(0.5,0.5,0.6));
00294     //vis->SetForceWireframe(true);     
00295     logical_lowCover2->SetVisAttributes(vis);
00296 
00297     return logical_lowCover2;
00298 }
00299 
00300 G4VSolid* PartProduce::sd_upFEE(double smallL, string name)
00301 {
00302     G4Trd* solid_upFEE = new G4Trd(name, upFEE_xdown/2+smallL, upFEE_xup/2+smallL, upFEE_y/2+smallL, upFEE_y/2+smallL, upFEE_z/2+smallL);
00303     return solid_upFEE;
00304 }
00305 
00306 G4LogicalVolume* PartProduce::lg_upFEE_pcb(string name)
00307 {
00308     Name.str("");
00309     Name<<"solid_upFEE_pcb_"<<name;
00310     G4Trd* solid_upFEE_pcb = new G4Trd(Name.str(), upFEE_pcb_xdown/2, upFEE_pcb_xup/2, upFEE_pcb_y/2, upFEE_pcb_y/2, upFEE_pcb_z/2);
00311     G4LogicalVolume* logical_upFEE_pcb = new G4LogicalVolume(solid_upFEE_pcb, G4Material::GetMaterial("insulationBoard"), name);
00312 
00313     G4VisAttributes* vis = new G4VisAttributes();
00314     vis->SetForceWireframe(true);
00315     vis->SetColor(G4Color(0.2, 1, 0));
00316     logical_upFEE_pcb->SetVisAttributes(vis);
00317 
00318     return logical_upFEE_pcb;
00319 }
00320 
00321 G4LogicalVolume* PartProduce::lg_upFEE(string name)
00322 {
00323     Name.str("");
00324     Name<<"solid_upFEE_"<<name;
00325     G4VSolid* solid_upFEE = sd_upFEE(0, Name.str());
00326     G4LogicalVolume* logical_upFEE = new G4LogicalVolume(solid_upFEE, G4Material::GetMaterial("Air"), name);
00327 
00328     Name.str("");
00329     Name<<"solid_upFEE_out_"<<name;
00330     G4VSolid* solid_upFEE_out = sd_upFEE(-1*smallL, Name.str());
00331 
00332     Name.str("");
00333     Name<<"solid_upFEE_in_"<<name;
00334     G4Trd* solid_upFEE_in = new G4Trd(Name.str(), upFEE_xdown/2-FEE_thickness, upFEE_xup/2-FEE_thickness, upFEE_y/2, upFEE_y/2, upFEE_z/2-FEE_thickness);
00335 
00336     Name.str("");
00337     Name<<"solid_upFEE_box_"<<name;
00338     G4Transform3D transform_upFEE(rot_dummy, G4ThreeVector(0, -1*FEE_thickness, 0));
00339     G4SubtractionSolid* solid_upFEE_box = new G4SubtractionSolid(Name.str(), solid_upFEE_out, solid_upFEE_in, transform_upFEE);
00340 
00341     Name.str("");
00342     Name<<"logical_upFEE_box_"<<name;
00343     G4LogicalVolume* logical_upFEE_box = new G4LogicalVolume(solid_upFEE_box, G4Material::GetMaterial("Aluminium"), Name.str());
00344 
00345     Name.str("");
00346     Name<<"logical_upFEE_pcb_"<<name;
00347     G4LogicalVolume* logical_upFEE_pcb = lg_upFEE_pcb(Name.str());
00348 
00349     Name.str("");
00350     Name<<"physical_upFEE_pcb_"<<name;
00351     new G4PVPlacement(0, G4ThreeVector(0,0,0), logical_upFEE_pcb, Name.str(), logical_upFEE, false, 0, checkOverlap);
00352 
00353     Name.str("");
00354     Name<<"physical_upFEE_box_"<<name;
00355     new G4PVPlacement(0, G4ThreeVector(0,0,0), logical_upFEE_box, Name.str(), logical_upFEE, false, 0, checkOverlap);
00356 
00357     G4VisAttributes* vis = new G4VisAttributes();
00358     vis->SetColor(G4Color(0.2,0.,1));
00359     //vis->SetForceWireframe(true);     
00360     logical_upFEE_box->SetVisAttributes(vis);
00361 
00362     G4VisAttributes* vis1 = new G4VisAttributes();
00363     vis1->SetVisibility(0);
00364     logical_upFEE->SetVisAttributes(vis1);
00365 
00366     return logical_upFEE;
00367 }
00368 
00369 
00370 G4VSolid* PartProduce::sd_sideFEE(double smallL, string name)
00371 {
00372     G4Trd* solid_sideFEE = new G4Trd(name, sideFEE_x/2+smallL, sideFEE_x/2+smallL, sideFEE_y/2+smallL, sideFEE_y/2+smallL, sideFEE_z/2+smallL);
00373     return solid_sideFEE;
00374 }
00375 
00376 G4LogicalVolume* PartProduce::lg_sideFEE_pcb(string name)
00377 {
00378     Name.str("");
00379     Name<<"solid_sideFEE_pcb_"<<name;
00380     G4Trd* solid_sideFEE_pcb = new G4Trd(Name.str(), sideFEE_pcb_x/2, sideFEE_pcb_x/2, sideFEE_pcb_y/2, sideFEE_pcb_y/2, sideFEE_pcb_z/2);
00381     G4LogicalVolume* logical_sideFEE_pcb = new G4LogicalVolume(solid_sideFEE_pcb, G4Material::GetMaterial("insulationBoard"), name);
00382 
00383     G4VisAttributes* vis = new G4VisAttributes();
00384     vis->SetColor(G4Color(0.2, 1, 0));
00385     logical_sideFEE_pcb->SetVisAttributes(vis);
00386 
00387     return logical_sideFEE_pcb;
00388 }
00389 
00390 G4LogicalVolume* PartProduce::lg_sideFEE(string name)
00391 {
00392     Name.str("");
00393     Name<<"solid_sideFEE_"<<name;
00394     G4VSolid* solid_sideFEE = sd_sideFEE(0, Name.str());
00395     G4LogicalVolume* logical_sideFEE = new G4LogicalVolume(solid_sideFEE, G4Material::GetMaterial("Air"), name);
00396 
00397     Name.str("");
00398     Name<<"solid_sideFEE_out_"<<name;
00399     G4VSolid* solid_sideFEE_out = sd_sideFEE(-1*smallL, Name.str());
00400 
00401     Name.str("");
00402     Name<<"solid_sideFEE_in_"<<name;
00403     G4Trd* solid_sideFEE_in = new G4Trd(Name.str(), sideFEE_x/2, sideFEE_x/2, sideFEE_y/2-FEE_thickness, sideFEE_y/2-FEE_thickness, sideFEE_z/2-FEE_thickness);
00404 
00405     Name.str("");
00406     Name<<"solid_sideFEE_box_"<<name;
00407     G4Transform3D transform_sideFEE(rot_dummy, G4ThreeVector(FEE_thickness, 0, 0));
00408     G4SubtractionSolid* solid_sideFEE_box = new G4SubtractionSolid(Name.str(), solid_sideFEE_out, solid_sideFEE_in, transform_sideFEE);
00409 
00410     Name.str("");
00411     Name<<"logical_sideFEE_box_"<<name;
00412     G4LogicalVolume* logical_sideFEE_box = new G4LogicalVolume(solid_sideFEE_box, G4Material::GetMaterial("Aluminium"), Name.str());
00413 
00414     Name.str("");
00415     Name<<"logical_sideFEE_pcb_"<<name;
00416     G4LogicalVolume* logical_sideFEE_pcb = lg_sideFEE_pcb(Name.str());
00417 
00418     Name.str("");
00419     Name<<"physical_sideFEE_pcb_"<<name;
00420     new G4PVPlacement(0, G4ThreeVector(0,0,0), logical_sideFEE_pcb, Name.str(), logical_sideFEE, false, 0, checkOverlap);
00421 
00422     Name.str("");
00423     Name<<"physical_sideFEE_box_"<<name;
00424     new G4PVPlacement(0, G4ThreeVector(0,0,0), logical_sideFEE_box, Name.str(), logical_sideFEE, false, 0, checkOverlap);
00425 
00426     G4VisAttributes* vis = new G4VisAttributes();
00427     vis->SetColor(G4Color(0.2,0.,1));
00428     //vis->SetForceWireframe(true);     
00429     logical_sideFEE_box->SetVisAttributes(vis);
00430 
00431     G4VisAttributes* vis1 = new G4VisAttributes();
00432     vis1->SetVisibility(0);
00433     logical_sideFEE->SetVisAttributes(vis1);
00434 
00435     return logical_sideFEE;
00436 }
00437 
00438 
00439 G4VSolid* PartProduce::sd_castingDie_outline(double smallL, string name)
00440 {
00441     Name.str("");
00442     Name<<name<<"_1";
00443     //We make Z larger by 10*smallL to make a successful connection with the cover
00444     G4Trd* solid_castingDie_outline_1 = new G4Trd(Name.str(), castingDie_x/2+smallL, castingDie_x/2+smallL, castingDie_y/2+smallL, castingDie_y/2+smallL, castingDie_z/2+smallL*10);
00445     Name.str("");
00446     Name<<name<<"_2";
00447     G4Tubs* solid_castingDie_outline_2 = new G4Tubs(Name.str(), 0, castingDie_addr+smallL, castingDie_z/2+smallL*10, 0*degree, 360*degree);
00448 
00449     //We make a 0.1*mm for successful connection
00450     G4Transform3D transform_castingDie_outline_1(rot_dummy, G4ThreeVector(castingDie_x/2-0.1*mm,0,0));
00451     Name.str("");
00452     Name<<name<<"_3";
00453     G4UnionSolid* solid_castingDie_outline_3 = new G4UnionSolid(Name.str(), solid_castingDie_outline_1, solid_castingDie_outline_2, transform_castingDie_outline_1);
00454 
00455     G4Transform3D transform_castingDie_outline_2(rot_dummy, G4ThreeVector(-1*castingDie_x/2+0.1*mm,0,0));
00456     G4UnionSolid* solid_castingDie_outline = new G4UnionSolid(name, solid_castingDie_outline_3, solid_castingDie_outline_2, transform_castingDie_outline_2);
00457     return solid_castingDie_outline;
00458 }
00459 
00460 G4LogicalVolume* PartProduce::lg_castingDie(string name)
00461 {
00462     Name.str("");
00463     Name<<"solid_castingDie_outline_"<<name;
00464     G4VSolid* solid_castingDie_outline = sd_castingDie_outline(0, Name.str());
00465 
00466     Name.str("");
00467     Name<<"solid_castingDie_subtract_"<<name;
00468     G4Trd* solid_castingDie_subtract = new G4Trd(Name.str(), castingDie_subtractx/2, castingDie_subtractx/2, castingDie_y, castingDie_y, castingDie_z/2);
00469 
00470     G4Transform3D transform_castingDie(rot_dummy, G4ThreeVector(0,0,-1*castingDie_subtract_posz));
00471     Name.str("");
00472     Name<<"solid_castingDie_"<<name;
00473     G4SubtractionSolid* solid_castingDie = new G4SubtractionSolid(Name.str(), solid_castingDie_outline, solid_castingDie_subtract, transform_castingDie);
00474     G4LogicalVolume* logical_castingDie = new G4LogicalVolume(solid_castingDie, G4Material::GetMaterial("Aluminium"), name);
00475 
00476     G4VisAttributes* vis = new G4VisAttributes();
00477     vis->SetColor(G4Color(0.2,0.,1));
00478     //vis->SetForceSolid(true);
00479     //vis->SetForceWireframe(true);     
00480     logical_castingDie->SetVisAttributes(vis);
00481 
00482     return logical_castingDie;
00483 }
00484 
00485 G4LogicalVolume* PartProduce::lg_container(int flag, string name)
00486 {
00487     Name.str("");
00488     Name<<"solid_containerOut_"<<name;
00489     G4VSolid* solid_containerOut = sd_containerOut(smallL, Name.str());
00490 
00491     //add top cover
00492     Name.str("");
00493     Name<<"solid_upCover_"<<name;
00494     G4VSolid* solid_upCover = sd_upCover(smallL, Name.str());
00495     G4ThreeVector translation_upCover(0, (containerOut_y+upCover_y)/2, (upCover_z-containerOut_z)/2-upCover_posz);
00496     G4Transform3D transform_upCover(rot_dummy, translation_upCover);
00497     Name.str("");
00498     Name<<"solid_container_"<<name<<"_1";
00499     G4UnionSolid* solid_container_1 = new G4UnionSolid(Name.str(), solid_containerOut, solid_upCover, transform_upCover);
00500 
00501     //add FEE on the top cover
00502     Name.str("");
00503     Name<<"solid_upFEE_"<<name;
00504     G4VSolid* solid_upFEE = sd_upFEE(smallL, Name.str());
00505     G4ThreeVector translation_upFEE(0, containerOut_y/2+upCover_y+upFEE_y/2, upCover_z-upFEE_posz-upFEE_z/2-upCover_posz-containerOut_z/2);
00506     G4Transform3D transform_upFEE(rot_dummy, translation_upFEE);
00507     Name.str("");
00508     Name<<"solid_container_"<<name<<"_2";
00509     G4UnionSolid* solid_container_2 = new G4UnionSolid(Name.str(), solid_container_1, solid_upFEE, transform_upFEE);
00510 
00511     //add FEE at the side
00512     Name.str("");
00513     Name<<"solid_sideFEE_"<<name;
00514     G4VSolid* solid_sideFEE = sd_sideFEE(smallL, Name.str());
00515 
00516     double angle_containerFrameSide = atan((containerOut_xup-containerOut_xdown)/2/containerOut_z) *rad;
00517     double l_containerFrameSide = containerOut_z/cos(angle_containerFrameSide);
00518     double x_sideFEE = (l_containerFrameSide/2-sideFEE_posl)*sin(angle_containerFrameSide)+(containerOut_xup+containerOut_xdown)/4+sideFEE_x/2*cos(angle_containerFrameSide);
00519     double z_sideFEE = (l_containerFrameSide/2-sideFEE_posl)*cos(angle_containerFrameSide)-sideFEE_x/2*sin(angle_containerFrameSide);
00520     G4ThreeVector translation_sideFEE_left(-x_sideFEE, 0, z_sideFEE);
00521     G4RotationMatrix rot_sideFEE_left;
00522     rot_sideFEE_left.rotateY(-angle_containerFrameSide);
00523     G4Transform3D transform_sideFEE_left(rot_sideFEE_left, translation_sideFEE_left);
00524     Name.str("");
00525     Name<<"solid_container_"<<name<<"_3"; 
00526     G4UnionSolid* solid_container_3 = new G4UnionSolid(Name.str(), solid_container_2, solid_sideFEE, transform_sideFEE_left);
00527 
00528     G4ThreeVector translation_sideFEE_right(x_sideFEE, 0, z_sideFEE);
00529     G4RotationMatrix rot_sideFEE_right;
00530     rot_sideFEE_right.rotateY(angle_containerFrameSide);
00531     G4Transform3D transform_sideFEE_right(rot_sideFEE_right, translation_sideFEE_right);
00532     Name.str("");
00533     Name<<"solid_container_"<<name<<"_4";
00534     G4UnionSolid* solid_container_4 = new G4UnionSolid(Name.str(), solid_container_3, solid_sideFEE, transform_sideFEE_right);
00535 
00536     //add casting die
00537     Name.str("");
00538     Name<<"solid_castingDie_"<<name;
00539     G4VSolid* solid_castingDie = sd_castingDie_outline(smallL, Name.str());
00540 
00541     G4RotationMatrix rot_castingDie;
00542     rot_castingDie.rotateX(90*deg);
00543     G4ThreeVector translation_castingDie_1(0, containerOut_y/2+upCover_y+castingDie_z/2, -containerOut_z/2+upCover_posz+castingDie_posz1);
00544     G4Transform3D transform_castingDie_1(rot_castingDie, translation_castingDie_1);
00545     Name.str("");
00546     Name<<"solid_container_"<<name<<"_5";
00547     G4UnionSolid* solid_container_5 = new G4UnionSolid(Name.str(), solid_container_4, solid_castingDie, transform_castingDie_1);
00548 
00549     G4ThreeVector translation_castingDie_2(0, containerOut_y/2+upCover_y+castingDie_z/2, -containerOut_z/2+upCover_posz+castingDie_posz2);
00550     G4Transform3D transform_castingDie_2(rot_castingDie, translation_castingDie_2);
00551     Name.str("");
00552     Name<<"solid_container_"<<name<<"_6";
00553     G4UnionSolid* solid_container_6 = new G4UnionSolid(Name.str(), solid_container_5, solid_castingDie, transform_castingDie_2);
00554 
00555     //add bottom cover
00556     G4VSolid* solid_lowCover;
00557     Name.str("");
00558     Name<<"solid_lowCover_"<<name;
00559     double z_lowCover;
00560     if(flag==0)
00561     {
00562         z_lowCover = (lowCover1_z-containerOut_z)/2-lowCover1_posz;
00563         solid_lowCover = sd_lowCover1(smallL, Name.str());
00564     }
00565     else if(flag==1)
00566     {
00567         z_lowCover = (lowCover2_z-containerOut_z)/2-lowCover2_posz;
00568         solid_lowCover = sd_lowCover2(smallL, Name.str());
00569     }
00570     else G4cout<<"!!!!!!!! Wrong lower Board !!!!!!!!!"<<G4endl;
00571 
00572     G4ThreeVector translation_lowCover(0, -1*(containerOut_y+upCover_y)/2, z_lowCover);
00573     G4Transform3D transform_lowCover(rot_dummy, translation_lowCover);
00574     Name.str("");
00575     Name<<"solid_container_"<<name;
00576     G4UnionSolid* solid_container = new G4UnionSolid(Name.str(), solid_container_6, solid_lowCover, transform_lowCover);
00577     G4LogicalVolume* logical_container = new G4LogicalVolume(solid_container, G4Material::GetMaterial("Air"), name);
00578 
00579     G4VisAttributes* vis = new G4VisAttributes();
00580     vis->SetColor(G4Color(0.5,0.5,0.6));
00581     vis->SetForceWireframe(true);     
00582     logical_container->SetVisAttributes(vis);
00583     //logical_container->SetVisAttributes(G4VisAttributes::Invisible);
00584 
00585     return logical_container;
00586 }
00587 
00588 
00589 G4LogicalVolume* PartProduce::lg_gasContainer(string name)
00590 {
00591     Name.str("");
00592     Name<<"solid_gasContainer_"<<name;
00593     G4VSolid* solid_gasContainer = sd_containerIn(0, Name.str());
00594     G4LogicalVolume* logical_gasContainer = new G4LogicalVolume(solid_gasContainer, G4Material::GetMaterial("MRPCGas"), name);
00595 
00596     G4VisAttributes* vis = new G4VisAttributes();
00597     //vis->SetVisibility(0);
00598     vis->SetForceWireframe(true);
00599     logical_gasContainer->SetVisAttributes(vis);
00600 
00601     return logical_gasContainer;
00602 }
00603 
00604 
00605 G4LogicalVolume* PartProduce::lg_bareChamber(string name)
00606 {
00607     //A trapezoid to contain the bare chamber
00608     double xdown = pcbBoard_xdown;
00609     double xup = pcbBoard_xup;
00610     double y = honeyComb_y*2+tape_mrpc_y*2+pcbBoard_y0*2+pcbBoard_y1+mylar_y*4+glass0_y*4+glass1_y*10+gasLayer_y*12;
00611     double z = pcbBoard_z;
00612     Name.str("");
00613     Name<<"solid_bareChamber_"<<name;
00614     G4Trd* solid_bareChamber = new G4Trd(Name.str(), xdown/2.+smallL, xup/2.+smallL, y/2.+smallL, y/2.+smallL, z/2.+smallL);
00615     G4LogicalVolume* logical_bareChamber = new G4LogicalVolume(solid_bareChamber, G4Material::GetMaterial("MRPCGas"), name);
00616 
00617     G4VisAttributes* vis = new G4VisAttributes();
00618     //vis->SetColor(G4Color(0.3, 0.3, 0.3));
00619     vis->SetVisibility(0);
00620     //vis->SetForceWireframe(true);
00621     logical_bareChamber->SetVisAttributes(vis);
00622 
00623     return logical_bareChamber;
00624 }
00625 
00626 
00627 G4LogicalVolume* PartProduce::lg_honeyComb(string name)
00628 {
00629     Name.str("");
00630     Name<<"solid_honeyComb_"<<name;
00631     G4Trd* solid_honeyComb = new G4Trd(Name.str(), honeyComb_xdown/2, honeyComb_xup/2, honeyComb_y/2, honeyComb_y/2, honeyComb_z/2);
00632     G4LogicalVolume* logical_honeyComb = new G4LogicalVolume(solid_honeyComb, G4Material::GetMaterial("honeycombCore"), name);
00633 
00634     //Two surfaces
00635     Name.str("");
00636     Name<<"solid_honeyComb_surface_"<<name;
00637     G4Trd* solid_honeyComb_surface = new G4Trd(Name.str(), honeyComb_xdown/2, honeyComb_xup/2, honeyComb_surface_y/2, honeyComb_surface_y/2, honeyComb_z/2);
00638 
00639     Name.str("");
00640     Name<<"logical_honeyComb_surface_"<<name;
00641     G4LogicalVolume* logical_honeyComb_surface = new G4LogicalVolume(solid_honeyComb_surface, G4Material::GetMaterial("insulationBoard"), Name.str());
00642 
00643     Name.str("");
00644     Name<<"physical_honeyComb_surface_"<<name<<"_0";
00645     new G4PVPlacement(0, G4ThreeVector(0,(honeyComb_y-honeyComb_surface_y)/2.-smallL,0), logical_honeyComb_surface, Name.str(), logical_honeyComb, false, 0, checkOverlap);
00646 
00647     Name.str("");
00648     Name<<"physical_honeyComb_surface_"<<name<<"_1";
00649     new G4PVPlacement(0, G4ThreeVector(0,-(honeyComb_y-honeyComb_surface_y)/2.+smallL,0), logical_honeyComb_surface, Name.str(), logical_honeyComb, false, 0, checkOverlap);
00650 
00651     G4VisAttributes* vis1 = new G4VisAttributes();
00652     vis1->SetColor(G4Color::Green());
00653     //vis1->SetForceWireframe(true);
00654     logical_honeyComb_surface->SetVisAttributes(vis1);
00655 
00656     G4VisAttributes* vis = new G4VisAttributes();
00657     vis->SetColor(G4Color(0.55, 0.3, 0.3));
00658     //vis->SetForceWireframe(true);     
00659     logical_honeyComb->SetVisAttributes(vis);
00660 
00661     return logical_honeyComb;
00662 }
00663 
00664 G4LogicalVolume* PartProduce::lg_tape_mrpc(string name)
00665 {
00666     Name.str("");
00667     Name<<"solid_tape_mrpc_"<<name;
00668     G4Trd* solid_tape_mrpc= new  G4Trd(Name.str(),tape_mrpc_xdown/2,tape_mrpc_xup/2,tape_mrpc_y/2,tape_mrpc_y/2,tape_mrpc_z/2);
00669     G4LogicalVolume* logical_tape_mrpc = new G4LogicalVolume(solid_tape_mrpc,G4Material::GetMaterial("PET"), name);
00670 
00671     G4VisAttributes* vis = new G4VisAttributes();
00672     vis->SetColor(G4Color(1, 1, 0));
00673     //vis->SetForceWireframe(true);     
00674     //vis->SetForceSolid(true); 
00675     logical_tape_mrpc->SetVisAttributes(vis);
00676 
00677     return logical_tape_mrpc;
00678 }
00679 
00680 G4LogicalVolume* PartProduce::lg_pcbBoard(G4int flag, string name) //flag:0:out; 1:inside
00681 {
00682     double pcbBoard_y;
00683     if(flag==0) pcbBoard_y=pcbBoard_y0;
00684     else pcbBoard_y=pcbBoard_y1;
00685 
00686     Name.str("");
00687     Name<<"solid_pcbBoard_"<<name;
00688     G4Trd* solid_pcbBoard = new G4Trd(Name.str(),pcbBoard_xdown/2., pcbBoard_xup/2., pcbBoard_y/2., pcbBoard_y/2.,pcbBoard_z/2.);
00689     G4LogicalVolume* logical_pcbBoard = new G4LogicalVolume(solid_pcbBoard,G4Material::GetMaterial("insulationBoard"), name);
00690 
00691     G4VisAttributes* vis = new G4VisAttributes();
00692     vis->SetColor(G4Color(0.2, 1, 0));
00693     //vis->SetForceSolid(true); 
00694     //vis->SetForceWireframe(true); 
00695     logical_pcbBoard->SetVisAttributes(vis);
00696 
00697     return logical_pcbBoard;
00698 }
00699 
00700 G4AssemblyVolume* PartProduce::lg_strip(string name)
00701 {
00702     const G4int no=12;
00703     G4Trd* solid_strip[no];
00704     G4LogicalVolume* logical_strip[no];
00705     G4VisAttributes* vis = new G4VisAttributes();
00706     vis->SetColor(G4Color(1, 0, 0));
00707     vis->SetForceSolid(1);
00708     for(G4int i=0; i<no; i++)
00709     {
00710         Name.str("");
00711         Name<<"solid_strip_"<<name<<"_"<<i;
00712         solid_strip[i] = new G4Trd(Name.str(), strip_x[i]/2., strip_x[i]/2., strip_y/2., strip_y/2., strip_z/2.);
00713         Name.str("");
00714         Name<<name<<"_"<<i;
00715         logical_strip[i] = new G4LogicalVolume(solid_strip[i], G4Material::GetMaterial("Copper"), Name.str());
00716         logical_strip[i]->SetVisAttributes(vis);
00717     }
00718 
00719     G4AssemblyVolume* logical_strip_unified = new G4AssemblyVolume();
00720     G4ThreeVector translation_strip;
00721     G4Transform3D transform_strip;
00722     for(G4int i=0; i<no; i++)
00723     {
00724         translation_strip.set(0, 0, (i-5.5)*(strip_z+strip_gap));
00725         transform_strip = G4Transform3D(rot_dummy, translation_strip);
00726         logical_strip_unified->AddPlacedVolume(logical_strip[i], transform_strip);
00727     }
00728 
00729     return logical_strip_unified;
00730 }
00731 
00732 G4LogicalVolume* PartProduce::lg_mylar(string name)
00733 {
00734     Name.str("");
00735     Name<<"solid_mylar_"<<name;
00736     G4Trd* solid_mylar = new G4Trd(Name.str(),mylar_xdown/2.,mylar_xup/2.,mylar_y/2.,mylar_y/2.,mylar_z/2.);
00737     G4LogicalVolume* logical_mylar = new G4LogicalVolume(solid_mylar,G4Material::GetMaterial("PET"), name);
00738 
00739     G4VisAttributes* vis = new G4VisAttributes();
00740     vis->SetColor(G4Color(1, 0., 0.7));
00741     //vis->SetForceSolid(true); 
00742     logical_mylar->SetVisAttributes(vis);
00743 
00744     return logical_mylar;
00745 }
00746 
00747 G4LogicalVolume* PartProduce::lg_glass(G4int flag, string name) //flag:0:out; 1:inside
00748 {
00749     double glass_xdown;
00750     double glass_xup;
00751     double glass_y;
00752     double glass_z;
00753     if(flag==0)
00754     {
00755         glass_xdown = glass0_xdown;
00756         glass_xup = glass0_xup;
00757         glass_y = glass0_y;
00758         glass_z = glass0_z;
00759     }
00760     else
00761     {
00762         glass_xdown = glass1_xdown;
00763         glass_xup = glass1_xup;
00764         glass_y = glass1_y;
00765         glass_z = glass1_z;
00766     }
00767 
00768     Name.str("");
00769     Name<<"solid_glass_"<<name;
00770     G4Trd* solid_glass = new G4Trd(Name.str(), glass_xdown/2.,glass_xup/2. ,glass_y/2.,glass_y/2.,glass_z/2.);
00771     G4LogicalVolume* logical_glass = new G4LogicalVolume(solid_glass,G4Material::GetMaterial("SiO2"), name);
00772 
00773     G4VisAttributes* vis = new G4VisAttributes();
00774     vis->SetColor(G4Color(0.2, 0.4, 1));
00775     //vis->SetForceSolid(true); 
00776     logical_glass->SetVisAttributes(vis);
00777 
00778     return logical_glass;
00779 }
00780 
00781 G4LogicalVolume* PartProduce::lg_gasLayer(string name)
00782 {
00783     Name.str("");
00784     Name<<"solid_gasLayer_"<<name;
00785     G4Trd* solid_gasLayer = new G4Trd(Name.str(),gasLayer_xdown/2.,gasLayer_xup/2.,gasLayer_y/2.,gasLayer_y/2.,gasLayer_z/2.);
00786     G4LogicalVolume* logical_gasLayer = new G4LogicalVolume(solid_gasLayer,G4Material::GetMaterial("MRPCGas"), name);
00787 
00788     G4VisAttributes* vis = new G4VisAttributes();
00789     vis->SetColor(G4Color::Blue());
00790     //vis->SetForceSolid(true); 
00791     //logical_gasLayer->SetVisAttributes(vis);
00792 
00793     return logical_gasLayer;
00794 }
00795 
00796 G4LogicalVolume* PartProduce::lg_bracket(string name)
00797 {
00798     Name.str("");
00799     Name<<"solid_bracket_"<<name<<"_1";
00800     G4Tubs* solid_bracket_1 = new G4Tubs(Name.str(), 0, bracket_r, bracket_z/2, 0*degree, 360*degree);
00801 
00802     Name.str("");
00803     Name<<"solid_bracket_"<<name<<"_2";
00804     G4Trd* solid_bracket_2 = new G4Trd(Name.str(), bracket_x/2, bracket_x/2, bracket_x/2, bracket_x/2, bracket_y/2);
00805 
00806     G4Transform3D transform_bracket(rot_dummy, G4ThreeVector(0, 0, (bracket_y+bracket_z)/2));
00807     Name.str("");
00808     Name<<"solid_bracket_"<<name;
00809     G4UnionSolid* solid_bracket = new G4UnionSolid(Name.str(), solid_bracket_1, solid_bracket_2, transform_bracket);
00810     G4LogicalVolume* logical_bracket = new G4LogicalVolume(solid_bracket, G4Material::GetMaterial("Nylon"), name);
00811 
00812     G4VisAttributes* vis = new G4VisAttributes();
00813     vis->SetColor(G4Color(0.3, 0.3, 0.3));
00814     //vis->SetForceSolid(true); 
00815     logical_bracket->SetVisAttributes(vis);
00816 
00817     return logical_bracket;
00818 }
00819 
00820 G4LogicalVolume* PartProduce::lg_upStopBlock(string name)
00821 {
00822     Name.str("");
00823     Name<<"solid_upStopBlock_"<<name<<"_1";
00824     G4Trd* solid_upStopBlock_1 = new G4Trd(Name.str(), upStopBlock_x/2, upStopBlock_x/2, upStopBlock_y/2, upStopBlock_y/2, upStopBlock_z/2);
00825 
00826     Name.str("");
00827     Name<<"solid_upStopBlock_"<<name<<"_2";
00828     G4Tubs* solid_upStopBlock_2 = new G4Tubs(Name.str(), 0, upStopBlock_subtractr+smallL, upStopBlock_x/2+smallL, 0*degree, 360*degree);
00829 
00830     G4RotationMatrix rot_upStopBlock;
00831     //Rotation outside of the transform3D. In transform3D the 3 angles are Euler
00832     rot_upStopBlock.rotateY(90*degree);
00833     G4Transform3D transform_upStopBlock(rot_upStopBlock, G4ThreeVector(0,0,(upStopBlock_z-upStopBlock_subtractr)/2-upStopBlock_subtractposz));
00834 
00835     Name.str("");
00836     Name<<"solid_upStopBlock_"<<name;
00837     G4SubtractionSolid* solid_upStopBlock = new G4SubtractionSolid(Name.str(), solid_upStopBlock_1, solid_upStopBlock_2, transform_upStopBlock);
00838     G4LogicalVolume* logical_upStopBlock = new G4LogicalVolume(solid_upStopBlock, G4Material::GetMaterial("Nylon"), name);
00839 
00840     G4VisAttributes* vis = new G4VisAttributes();
00841     vis->SetColor(G4Color(0.3, 0.3, 0.3));
00842     //vis->SetForceSolid(true); 
00843     logical_upStopBlock->SetVisAttributes(vis);
00844 
00845     return logical_upStopBlock;
00846 }
00847 
00848 G4LogicalVolume* PartProduce::lg_sideStopBlock(string name)
00849 {
00850     Name.str("");
00851     Name<<"solid_sideStopBlock_"<<name<<"_1";
00852     G4Trd* solid_sideStopBlock_1 = new G4Trd(Name.str(), sideStopBlock_x/2, sideStopBlock_x/2, sideStopBlock_y/2, sideStopBlock_y/2, sideStopBlock_z/2);
00853 
00854     Name.str("");
00855     Name<<"solid_sideStopBlock_"<<name<<"_2";
00856     G4Trd* solid_sideStopBlock_2 = new G4Trd(Name.str(), (sideStopBlock_x-sideStopBlock_thickness)/2+smallL, (sideStopBlock_x-sideStopBlock_thickness)/2+smallL, sideStopBlock_y/2+smallL, sideStopBlock_y/2+smallL, sideStopBlock_z/2-sideStopBlock_thickness);
00857 
00858     G4Transform3D transform_upStopBlock(rot_dummy, G4ThreeVector(sideStopBlock_thickness/2, 0, 0));
00859 
00860     Name.str("");
00861     Name<<"solid_sideStopBlock_"<<name;
00862     G4SubtractionSolid* solid_sideStopBlock = new G4SubtractionSolid(Name.str(), solid_sideStopBlock_1, solid_sideStopBlock_2, transform_upStopBlock);
00863     G4LogicalVolume* logical_sideStopBlock = new G4LogicalVolume(solid_sideStopBlock, G4Material::GetMaterial("Nylon"), name);
00864 
00865     G4VisAttributes* vis = new G4VisAttributes();
00866     vis->SetColor(G4Color(0.3, 0.3, 0.3));
00867     //vis->SetForceSolid(true); 
00868     logical_sideStopBlock->SetVisAttributes(vis);
00869 
00870     return logical_sideStopBlock;
00871 }
00872 

Generated on Tue Nov 29 23:14:31 2016 for BOSS_7.0.2 by  doxygen 1.4.7