Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/cuts/src/G4PhysicsTableHelper.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 ]

Diff markup

Differences between /processes/cuts/src/G4PhysicsTableHelper.cc (Version 11.3.0) and /processes/cuts/src/G4PhysicsTableHelper.cc (Version 4.0.p1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // G4PhysicsTableHelper class implementation      
 27 //                                                
 28 // Author: H.Kurashige, 20 August 2004 - First    
 29 // -------------------------------------------    
 30                                                   
 31 #include "G4PhysicsTableHelper.hh"                
 32 #include "G4ProductionCutsTable.hh"               
 33 #include "G4MCCIndexConversionTable.hh"           
 34 #include "G4Threading.hh"                         
 35 #include "G4ios.hh"                               
 36                                                   
 37 G4int G4PhysicsTableHelper::verboseLevel = 1;     
 38                                                   
 39 // -------------------------------------------    
 40 G4PhysicsTableHelper::G4PhysicsTableHelper()      
 41 {                                                 
 42 }                                                 
 43                                                   
 44 // -------------------------------------------    
 45 G4PhysicsTableHelper::~G4PhysicsTableHelper()     
 46 {                                                 
 47 }                                                 
 48                                                   
 49 // -------------------------------------------    
 50 G4PhysicsTable*                                   
 51 G4PhysicsTableHelper::PreparePhysicsTable(G4Ph    
 52 {                                                 
 53   G4ProductionCutsTable* cutTable                 
 54     = G4ProductionCutsTable::GetProductionCuts    
 55   std::size_t numberOfMCC = cutTable->GetTable    
 56                                                   
 57   if ( physTable != nullptr )                     
 58   {                                               
 59     // compare size of physics table and numbe    
 60     if ( physTable->size() < numberOfMCC )        
 61     {                                             
 62 #ifdef G4VERBOSE                                  
 63       if (verboseLevel>2)                         
 64       {                                           
 65         G4cout << "G4PhysicsTableHelper::Prepa    
 66                << " the table " << physTable <    
 67          << physTable->size()                     
 68                << " will be is resized to " <<    
 69       }                                           
 70 #endif                                            
 71       // enlarge physics table                    
 72       physTable->resize(numberOfMCC, nullptr);    
 73     }                                             
 74     else if ( physTable->size() > numberOfMCC     
 75     {                                             
 76       // ERROR: this situation should not occu    
 77       // size of physics table is larger than     
 78       G4ExceptionDescription ed;                  
 79       ed << "table " << physTable << " size="     
 80    << " is longer than number of material-cuts    
 81       G4Exception( "G4PhysicsTableHelper::Prep    
 82                    "ProcCuts001", FatalExcepti    
 83     }                                             
 84   }                                               
 85   else                                            
 86   {                                               
 87     // create PhysicsTable is given poitner is    
 88     physTable = new G4PhysicsTable();             
 89     physTable->resize(numberOfMCC, nullptr);      
 90   }                                               
 91                                                   
 92 #ifdef G4VERBOSE                                  
 93   if (verboseLevel>2)                             
 94   {                                               
 95     G4cout << "G4PhysicsTableHelper::PreparePh    
 96      << " the table "<< physTable                 
 97      << " size=" << numberOfMCC << G4endl;        
 98   }                                               
 99 #endif                                            
100                                                   
101   // Reset recal-needed flag for all physics v    
102   physTable->ResetFlagArray();                    
103                                                   
104   for (std::size_t idx = 0; idx <numberOfMCC;     
105   {                                               
106     const G4MaterialCutsCouple* mcc = cutTable    
107                                                   
108     // check if re-calculation of the physics     
109     // MCC is not used                            
110     if ( !mcc->IsUsed() ) physTable->ClearFlag    
111                                                   
112     // RecalcNeeded flag of MCC is not asserte    
113     if ( !mcc->IsRecalcNeeded() ) physTable->C    
114   }                                               
115                                                   
116   return physTable;                               
117 }                                                 
118                                                   
119 // -------------------------------------------    
120 G4bool G4PhysicsTableHelper::RetrievePhysicsTa    
121                                                   
122                                                   
123 {                                                 
124   if (physTable == nullptr ) return false;        
125                                                   
126   // retrieve physics table from the given fil    
127   G4PhysicsTable* tempTable = new G4PhysicsTab    
128   if (! tempTable->RetrievePhysicsTable(fileNa    
129   {                                               
130     G4ExceptionDescription ed;                    
131     ed << "Cannot retrieve physics table from     
132     G4Exception( "G4ProductionCutsTable::Retri    
133                  "ProcCuts105", JustWarning, e    
134     delete tempTable;                             
135     return false;                                 
136   }                                               
137                                                   
138   G4ProductionCutsTable* cutTable                 
139     = G4ProductionCutsTable::GetProductionCuts    
140   const G4MCCIndexConversionTable* converter      
141     = cutTable->GetMCCIndexConversionTable();     
142                                                   
143   // check physics table size                     
144   if ( tempTable->size() != converter->size())    
145   {                                               
146     G4ExceptionDescription ed;                    
147     ed << "Physics table in " << fileName         
148        << "\n   size=" << tempTable->size() <<    
149        << " is inconsistent with material-cut-    
150        << "size=" << converter->size() << " th    
151     G4Exception("G4ProductionCutsTable::Retrie    
152                 "ProcCuts106", JustWarning, ed    
153     delete tempTable;                             
154     return false;                                 
155   }                                               
156                                                   
157   // fill the given physics table with retriev    
158   for (std::size_t idx=0; idx<converter->size(    
159   {                                               
160     if (converter->IsUsed(idx))                   
161     {                                             
162       G4int i = converter->GetIndex(idx);         
163       if(i < 0)                                   
164       {                                           
165         tempTable->clearAndDestroy();             
166   delete tempTable;                               
167   return false;                                   
168       }                                           
169       G4PhysicsVector* vec = (*physTable)[i];     
170       if (vec != nullptr ) delete vec;            
171       (*physTable)[i] = (*tempTable)[idx];        
172       physTable->ClearFlag(i);                    
173     }                                             
174   }                                               
175   tempTable->clear();                             
176   delete tempTable;                               
177                                                   
178   return true;                                    
179 }                                                 
180                                                   
181 // -------------------------------------------    
182 void G4PhysicsTableHelper::SetPhysicsVector(G4    
183                                             st    
184                                             G4    
185 {                                                 
186   if ( physTable == nullptr) {  return;  }        
187                                                   
188   if ( physTable->size() <= idx)                  
189   {                                               
190     G4ExceptionDescription ed;                    
191     ed << "Given index (" << idx << ")  exceed    
192        << "the size of the physics table "        
193        << "( size =" << physTable->size() << "    
194     G4Exception("G4ProductionCutsTable::SetPhy    
195                 "ProcCuts107",                    
196                 JustWarning, ed);                 
197     return;                                       
198   }                                               
199                                                   
200   // set physics vector                           
201   (*physTable)[idx] = vec;                        
202   // clear flag                                   
203   physTable->ClearFlag(idx);                      
204 }                                                 
205                                                   
206 // -------------------------------------------    
207 void G4PhysicsTableHelper::SetVerboseLevel(G4i    
208 {                                                 
209   if( !G4Threading::IsWorkerThread() ) verbose    
210 }                                                 
211                                                   
212 // -------------------------------------------    
213 G4int G4PhysicsTableHelper::GetVerboseLevel()     
214 {                                                 
215   return verboseLevel;                            
216 }                                                 
217