/home/cern/BDSIM_new/src/BDSDump.cc

00001 //  
00002 //   BDSIM, (C) 2001-2007
00003 //    
00004 //   version 0.3 
00005 //   last modified : 08 May 2007 by agapov@pp.rhul.ac.uk
00006 //  
00007 
00008 
00009 //
00010 //    beam dumper/reader for online exchange with external codes
00011 //
00012 
00013 #include "BDSGlobalConstants.hh" // must be first in include list
00014 #include "BDSDump.hh"
00015 #include "G4Box.hh"
00016 #include "G4Tubs.hh"
00017 #include "G4VisAttributes.hh"
00018 #include "G4LogicalVolume.hh"
00019 #include "G4VPhysicalVolume.hh"
00020 #include "G4PVPlacement.hh"               
00021 #include "G4UserLimits.hh"
00022 #include "BDSOutput.hh"
00023 #include "BDSDumpSD.hh"
00024 #include "G4SDManager.hh"
00025 
00026 //#include"MagFieldFunction.hh"
00027 #include <map>
00028 
00029 
00030 
00031 typedef std::map<G4String,int> LogVolCountMap;
00032 extern LogVolCountMap* LogVolCount;
00033 
00034 typedef std::map<G4String,G4LogicalVolume*> LogVolMap;
00035 extern LogVolMap* LogVol;
00036 extern BDSOutput bdsOutput;
00037 BDSDumpSD* BDSDumpSensDet;
00038 extern BDSMaterials* theMaterials;
00039 //============================================================
00040 
00041 BDSDump::BDSDump (G4String aName,G4double aLength):
00042   BDSAcceleratorComponent(
00043                          aName,
00044                          aLength,0,0,0,
00045                          SetVisAttributes())
00046 {
00047   DumpLogicalVolume();
00048   nDumps++;
00049   //G4int nDumps=(*LogVolCount)[itsName];
00050 
00051   //BDSRoot->SetDumpNumber(nDumps);
00052 
00053  
00054 }
00055 
00056 const int BDSDump::GetNumberOfDumps()
00057 {
00058   return nDumps;
00059 }
00060 
00061 int BDSDump::nDumps=0;
00062 
00063 int BDSDump::firstActiveDump=1;
00064 
00065 int BDSDump::nUsedDumps=0;
00066 
00067 void BDSDump::DumpLogicalVolume()
00068 {
00069   if(!(*LogVolCount)[itsName])
00070     {
00071 
00072       G4double SampTransSize;
00073       SampTransSize=2.*BDSGlobals->GetTunnelRadius();
00074 
00075       itsMarkerLogicalVolume=
00076         new G4LogicalVolume(
00077                             new G4Box(itsName+"_solid",
00078                                       SampTransSize,
00079                                       SampTransSize,
00080                                       itsLength/2.0),
00081                             theMaterials->GetMaterial("Vacuum"),
00082                             itsName);
00083 
00084       (*LogVolCount)[itsName]=1;
00085       (*LogVol)[itsName]=itsMarkerLogicalVolume;
00086 
00087       itsOuterUserLimits =new G4UserLimits();
00088       itsOuterUserLimits->SetMaxAllowedStep(itsLength);
00089       itsMarkerLogicalVolume->SetUserLimits(itsOuterUserLimits);
00090 
00091       // Sensitive Detector:
00092       if(true)
00093         {
00094           G4SDManager* SDMan = G4SDManager::GetSDMpointer();
00095           BDSDumpSensDet=new BDSDumpSD(itsName,"plane");
00096           SDMan->AddNewDetector(BDSDumpSensDet);
00097           itsMarkerLogicalVolume->SetSensitiveDetector(BDSDumpSensDet);
00098         }
00099     }
00100   else
00101     {
00102       (*LogVolCount)[itsName]++;
00103       itsMarkerLogicalVolume=(*LogVol)[itsName];
00104       itsMarkerLogicalVolume->SetSensitiveDetector(BDSDumpSensDet);
00105     }
00106 }
00107 
00108 G4VisAttributes* BDSDump::SetVisAttributes()
00109 {
00110   itsVisAttributes=new G4VisAttributes(G4Colour(1,1,1));
00111   return itsVisAttributes;
00112 }
00113 
00114 BDSDump::~BDSDump()
00115 {
00116   if(itsVisAttributes) delete itsVisAttributes;
00117   if(itsUserLimits) delete itsUserLimits;
00118   nDumps--;
00119 }

Generated on Wed Mar 5 17:25:22 2008 for BDSIM by  doxygen 1.5.3