00001
00002
00003
00004
00005
00006 #include "BDSGlobalConstants.hh"
00007
00008 #include "BDSLaserWire.hh"
00009 #include "G4Box.hh"
00010 #include "G4Tubs.hh"
00011 #include "G4VisAttributes.hh"
00012 #include "G4LogicalVolume.hh"
00013 #include "G4VPhysicalVolume.hh"
00014 #include "G4PVPlacement.hh"
00015 #include "G4UserLimits.hh"
00016
00017 #include <map>
00018
00019 typedef std::map<G4String,int> LogVolCountMap;
00020 extern LogVolCountMap* LogVolCount;
00021
00022 typedef std::map<G4String,G4LogicalVolume*> LogVolMap;
00023 extern LogVolMap* LogVol;
00024
00025
00026
00027 BDSLaserWire::BDSLaserWire (G4String aName,G4double aLength,
00028 G4double aWavelength, G4ThreeVector aDirection):
00029 BDSAcceleratorComponent(
00030 aName,
00031 aLength,0,0,0,
00032 SetVisAttributes()),
00033 itsVisAttributes(NULL),itsLaserCompton(NULL),
00034 itsLaserDirection(aDirection),itsLaserWavelength(aWavelength)
00035 {
00036 LaserWireLogicalVolume();
00037 BDSGlobalConstants::Instance()->
00038 SetLaserwireWavelength(itsMarkerLogicalVolume->GetName(),aWavelength);
00039 BDSGlobalConstants::Instance()->
00040 SetLaserwireDir(itsMarkerLogicalVolume->GetName(),aDirection);
00041 }
00042
00043 void BDSLaserWire::LaserWireLogicalVolume()
00044 {
00045 if(!(*LogVolCount)[itsName])
00046 {
00047 itsMarkerLogicalVolume=new G4LogicalVolume(
00048 new G4Box(itsName+"_solid",
00049 BDSGlobalConstants::Instance()->
00050 GetBeampipeRadius(),
00051 BDSGlobalConstants::Instance()->
00052 GetBeampipeRadius(),
00053 itsLength/2),
00054 BDSMaterials::Instance()->GetMaterial("LaserVac"),
00055 itsName);
00056 (*LogVolCount)[itsName]=1;
00057 (*LogVol)[itsName]=itsMarkerLogicalVolume;
00058 }
00059 else
00060 {
00061 (*LogVolCount)[itsName]++;
00062 itsMarkerLogicalVolume=(*LogVol)[itsName];
00063 }
00064 itsVisAttributes=this->SetVisAttributes();
00065 itsMarkerLogicalVolume->SetVisAttributes(itsVisAttributes);
00066 }
00067
00068 G4VisAttributes* BDSLaserWire::SetVisAttributes()
00069 {
00070 itsVisAttributes=new G4VisAttributes(G4Colour(0.,1.,0.));
00071 itsVisAttributes->SetForceSolid(true);
00072 itsVisAttributes->SetVisibility(true);
00073 return itsVisAttributes;
00074 }
00075
00076 BDSLaserWire::~BDSLaserWire()
00077 {
00078 delete itsVisAttributes;
00079 delete itsLaserCompton;
00080 }