Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/persistency/P03/src/ExTGRCRegionCutsMgr.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 //
 27 /// \file persistency/P03/src/ExTGRCRegionCutsMgr.cc
 28 /// \brief Implementation of the ExTGRCRegionCutsMgr class
 29 
 30 #include "ExTGRCRegionCutsMgr.hh"
 31 
 32 #include "ExTGRCRegionData.hh"
 33 
 34 #include "G4LogicalVolume.hh"
 35 #include "G4ProductionCuts.hh"
 36 #include "G4Region.hh"
 37 #include "G4RegionStore.hh"
 38 #include "G4UIcommand.hh"
 39 #include "G4tgbVolumeMgr.hh"
 40 #include "G4tgrUtils.hh"
 41 
 42 ExTGRCRegionCutsMgr* ExTGRCRegionCutsMgr::fInstance = 0;
 43 
 44 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 45 ExTGRCRegionCutsMgr* ExTGRCRegionCutsMgr::GetInstance()
 46 {
 47   if (!fInstance) {
 48     fInstance = new ExTGRCRegionCutsMgr;
 49   }
 50   return fInstance;
 51 }
 52 
 53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 54 ExTGRCRegionCutsMgr::ExTGRCRegionCutsMgr() {}
 55 
 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 57 ExTGRCRegionCutsMgr::~ExTGRCRegionCutsMgr()
 58 {
 59   delete fInstance;
 60 }
 61 
 62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 63 void ExTGRCRegionCutsMgr::AddRegionData(const std::vector<G4String>& rd)
 64 {
 65   if ((rd.size() > 1) && (FindRegionData(rd[0]).size() != 0)) {
 66     G4Exception("ExTGRCRegionCutsMgr::AddRegionData", "InvalidArgument", JustWarning,
 67                 G4String("Region already exists: " + rd[0]).c_str());
 68     return;
 69   }
 70   fRegionDatae.push_back(new ExTGRCRegionData(rd));
 71 }
 72 
 73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 74 void ExTGRCRegionCutsMgr::AddRegionCuts(const std::vector<G4String>& rc)
 75 {
 76   if (rc.size() == 0) {
 77     G4cerr << "ERROR - ExTGRCRegionCutsMgr::AddRegionCuts()" << G4endl
 78            << "        Must have 3 or 4 arguments : REGION_NAME, gamma_CUT,"
 79            << " e-_CUT (e+_CUT)." << G4endl << "        It has only " << rc.size() << " !"
 80            << G4endl;
 81     G4Exception("ExTGRCRegionCutsMgr::AddRegionCuts()", "InvalidArgument", FatalErrorInArgument,
 82                 G4UIcommand::ConvertToString(G4int(rc.size())));
 83   }
 84 
 85   // Find region
 86   // std::vector<ExTGRCRegionData*>::const_iterator iter;
 87   std::vector<ExTGRCRegionData*> regs = FindRegionData(rc[0]);
 88 
 89   if (regs.size() == 0) {
 90     G4Exception("ExTGRCRegionCutsMgr::AddRegionCuts()", "InvalidArgument", FatalErrorInArgument,
 91                 G4String(" region does not exist: " + rc[0]).c_str());
 92   }
 93 
 94   for (size_t ii = 0; ii < regs.size(); ii++) {
 95     regs[ii]->SetCutsData(rc);
 96   }
 97 }
 98 
 99 std::vector<ExTGRCRegionData*> ExTGRCRegionCutsMgr::FindRegionData(const G4String& name)
100 {
101   std::vector<ExTGRCRegionData*> regs;
102   std::vector<ExTGRCRegionData*>::const_iterator iter;
103   for (iter = fRegionDatae.begin(); iter != fRegionDatae.end(); iter++) {
104     if (G4tgrUtils::AreWordsEquivalent(name, (*iter)->GetRegionName())) {
105       regs.push_back(*iter);
106     }
107   }
108   return regs;
109 }
110 
111 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
112 void ExTGRCRegionCutsMgr::BuildRegions()
113 {
114   std::vector<ExTGRCRegionData*>::const_iterator iter;
115   std::vector<G4String>::const_iterator ites;
116   // std::vector<G4LogicalVolume*>::const_iterator itelv;
117   for (iter = fRegionDatae.begin(); iter != fRegionDatae.end(); iter++) {
118     G4Region* reg = new G4Region((*iter)->GetRegionName());
119     std::vector<G4String> lvs = (*iter)->GetLVNames();
120     for (ites = lvs.begin(); ites != lvs.end(); ites++) {
121       G4LogicalVolume* logVol = G4tgbVolumeMgr::GetInstance()->FindG4LogVol(*ites, true);
122       reg->AddRootLogicalVolume(logVol);
123     }
124   }
125 }
126 
127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
128 void ExTGRCRegionCutsMgr::BuildProductionCuts()
129 {
130   std::vector<ExTGRCRegionData*>::const_iterator iter;
131   G4RegionStore* regions = G4RegionStore::GetInstance();
132   //----- loop to region datae
133   for (iter = fRegionDatae.begin(); iter != fRegionDatae.end(); iter++) {
134     if ((*iter)->CutsAreSet()) {
135       G4Region* reg = regions->GetRegion((*iter)->GetRegionName());
136       if (!reg) {
137         G4Exception("ExTGRCRegionCutsMgr::BuildProductionCuts()", "InvalidArgument",
138                     FatalErrorInArgument,
139                     G4String("Region not found: " + (*iter)->GetRegionName()).c_str());
140       }
141       G4ProductionCuts* cuts = new G4ProductionCuts;
142 
143       cuts->SetProductionCut((*iter)->GetGammaCut(), "gamma");
144       cuts->SetProductionCut((*iter)->GetElectronCut(), "e-");
145       cuts->SetProductionCut((*iter)->GetPositronCut(), "e+");
146       reg->SetProductionCuts(cuts);
147     }
148   }
149 }
150