src/BDSLaserWire.cc

00001 /* BDSIM code.    Version 1.0
00002    Author: Grahame A. Blair, Royal Holloway, Univ. of London.
00003    Last modified 24.7.2002
00004    Copyright (c) 2002 by G.A.Blair.  ALL RIGHTS RESERVED. 
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 }

Generated on 27 Aug 2013 for BDSIM by  doxygen 1.4.7