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 "BDSExecOptions.hh"
00014 #include "BDSGlobalConstants.hh" 
00015 #include "BDSDump.hh"
00016 #include "G4Box.hh"
00017 #include "G4Tubs.hh"
00018 #include "G4VisAttributes.hh"
00019 #include "G4LogicalVolume.hh"
00020 #include "G4VPhysicalVolume.hh"
00021 #include "G4PVPlacement.hh"               
00022 #include "G4UserLimits.hh"
00023 #include "BDSOutput.hh"
00024 #include "BDSDumpSD.hh"
00025 #include "G4SDManager.hh"
00026 
00027 //#include"MagFieldFunction.hh"
00028 #include <map>
00029 
00030 
00031 
00032 typedef std::map<G4String,int> LogVolCountMap;
00033 extern LogVolCountMap* LogVolCount;
00034 
00035 typedef std::map<G4String,G4LogicalVolume*> LogVolMap;
00036 extern LogVolMap* LogVol;
00037 extern BDSOutput* bdsOutput;
00038 BDSDumpSD* BDSDumpSensDet;
00039 extern G4int nptwiss;
00040 
00041 //============================================================
00042 
00043 BDSDump::BDSDump (G4String aName,G4double aLength, G4String aTunnelMaterial):
00044   BDSAcceleratorComponent(
00045                          aName,
00046                          aLength,0,0,0,
00047                          SetVisAttributes(), aTunnelMaterial),
00048   itsVisAttributes(NULL)
00049 {
00050   nptwiss = BDSExecOptions::Instance()->GetNPTwiss();
00051   SetName("Dump_"+BDSGlobalConstants::Instance()->StringFromInt(nDumps)+"_"+itsName);
00052   DumpLogicalVolume();
00053   const int nParticles = nptwiss;
00054   BDSGlobalConstants::Instance()->referenceQueue.push_back(new G4double[nParticles]);
00055   ++nDumps;
00056   //G4int nDumps=(*LogVolCount)[itsName];
00057   //BDSRoot->SetDumpNumber(nDumps);
00058 }
00059 
00060 int BDSDump::GetNumberOfDumps()
00061 {
00062   return nDumps;
00063 }
00064 
00065 int BDSDump::nDumps=0;
00066 
00067 int BDSDump::nUsedDumps=0;
00068 
00069 void BDSDump::DumpLogicalVolume()
00070 {
00071   if(!(*LogVolCount)[itsName])
00072     {
00073 
00074       G4double SampTransSize;
00075       SampTransSize=BDSGlobalConstants::Instance()->GetSamplerDiameter()/2.0;
00076 
00077       itsMarkerLogicalVolume=
00078         new G4LogicalVolume(
00079                             new G4Box(itsName+"_solid",
00080                                       SampTransSize,
00081                                       SampTransSize,
00082                                       itsLength/2.0),
00083                             BDSMaterials::Instance()->GetMaterial(BDSGlobalConstants::Instance()->GetVacuumMaterial()),
00084                             itsName);
00085 
00086       (*LogVolCount)[itsName]=1;
00087       (*LogVol)[itsName]=itsMarkerLogicalVolume;
00088 #ifndef NOUSERLIMITS
00089       itsOuterUserLimits =new G4UserLimits();
00090       itsOuterUserLimits->SetMaxAllowedStep(itsLength);
00091       itsOuterUserLimits->SetUserMinEkine(BDSGlobalConstants::Instance()->GetThresholdCutCharged());
00092       itsOuterUserLimits->SetUserMaxTime(BDSGlobalConstants::Instance()->GetMaxTime());
00093       itsMarkerLogicalVolume->SetUserLimits(itsOuterUserLimits);
00094 #endif
00095       // Sensitive Detector:
00096       if(nDumps==0)
00097         {
00098           G4SDManager* SDMan = G4SDManager::GetSDMpointer();
00099           BDSDumpSensDet=new BDSDumpSD(itsName,"plane");
00100           SDMan->AddNewDetector(BDSDumpSensDet);
00101         }
00102       itsMarkerLogicalVolume->SetSensitiveDetector(BDSDumpSensDet);
00103     }
00104   else
00105     {
00106       (*LogVolCount)[itsName]++;
00107       itsMarkerLogicalVolume=(*LogVol)[itsName];
00108       itsMarkerLogicalVolume->SetSensitiveDetector(BDSDumpSensDet);
00109     }
00110 }
00111 
00112 G4VisAttributes* BDSDump::SetVisAttributes()
00113 {
00114   itsVisAttributes=new G4VisAttributes(G4Colour(1,1,1));
00115   return itsVisAttributes;
00116 }
00117 
00118 BDSDump::~BDSDump()
00119 {
00120   delete itsVisAttributes;
00121   nDumps--;
00122 }

Generated on 27 Aug 2013 for BDSIM by  doxygen 1.4.7