Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/persistency/ascii/src/G4tgrLineProcessor.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 /persistency/ascii/src/G4tgrLineProcessor.cc (Version 11.3.0) and /persistency/ascii/src/G4tgrLineProcessor.cc (Version 5.0)


  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 // G4tgrLineProcessor                             
 27 //                                                
 28 // Author: P.Arce, CIEMAT (November 2007)         
 29 // -------------------------------------------    
 30                                                   
 31 #include "G4tgrLineProcessor.hh"                  
 32                                                   
 33 #include "G4SystemOfUnits.hh"                     
 34 #include "G4tgrParameterMgr.hh"                   
 35 #include "G4tgrFileIn.hh"                         
 36 #include "G4tgrElementSimple.hh"                  
 37 #include "G4tgrElementFromIsotopes.hh"            
 38 #include "G4tgrVolume.hh"                         
 39 #include "G4tgrVolumeDivision.hh"                 
 40 #include "G4tgrVolumeAssembly.hh"                 
 41 #include "G4tgrPlaceDivRep.hh"                    
 42 #include "G4tgrPlaceParameterisation.hh"          
 43 #include "G4tgrVolumeMgr.hh"                      
 44 #include "G4tgrUtils.hh"                          
 45 #include "G4tgrMaterialFactory.hh"                
 46 #include "G4tgrRotationMatrixFactory.hh"          
 47 #include "G4tgrMessenger.hh"                      
 48                                                   
 49 // -------------------------------------------    
 50 G4tgrLineProcessor::G4tgrLineProcessor()          
 51 {                                                 
 52   volmgr = G4tgrVolumeMgr::GetInstance();         
 53 }                                                 
 54                                                   
 55 // -------------------------------------------    
 56 G4tgrLineProcessor::~G4tgrLineProcessor()         
 57 {                                                 
 58 }                                                 
 59                                                   
 60 // -------------------------------------------    
 61 G4bool G4tgrLineProcessor::ProcessLine(const s    
 62 {                                                 
 63 #ifdef G4VERBOSE                                  
 64   if(G4tgrMessenger::GetVerboseLevel() >= 1)      
 65   {                                               
 66     G4tgrUtils::DumpVS(wl, "@@@ Processing inp    
 67   }                                               
 68 #endif                                            
 69                                                   
 70   G4String wl0 = wl[0];                           
 71   for(G4int ii = 0; ii < (G4int)wl0.length();     
 72   {                                               
 73     wl0[ii] = (char)std::toupper(wl0[ii]);        
 74   }                                               
 75                                                   
 76   //------------------------------- parameter     
 77   if(wl0 == ":P")                                 
 78   {                                               
 79     G4tgrParameterMgr::GetInstance()->AddParam    
 80                                                   
 81     //------------------------------- paramete    
 82   }                                               
 83   else if(wl0 == ":PS")                           
 84   {                                               
 85     G4tgrParameterMgr::GetInstance()->AddParam    
 86                                                   
 87     //------------------------------- isotope     
 88   }                                               
 89   else if(wl0 == ":ISOT")                         
 90   {                                               
 91     G4tgrIsotope* isot = G4tgrMaterialFactory:    
 92     volmgr->RegisterMe(isot);                     
 93                                                   
 94     //------------------------------- element     
 95   }                                               
 96   else if(wl0 == ":ELEM")                         
 97   {                                               
 98     G4tgrElementSimple* elem =                    
 99       G4tgrMaterialFactory::GetInstance()->Add    
100     volmgr->RegisterMe(elem);                     
101                                                   
102     //------------------------------- element     
103   }                                               
104   else if(wl0 == ":ELEM_FROM_ISOT")               
105   {                                               
106     //:ELEM_FROM_ISOT NAME SYMBOL N_ISOT (ISOT    
107     G4tgrElementFromIsotopes* elem =              
108       G4tgrMaterialFactory::GetInstance()->Add    
109     volmgr->RegisterMe(elem);                     
110                                                   
111     //------------------------------- material    
112   }                                               
113   else if(wl0 == ":MATE")                         
114   {                                               
115     G4tgrMaterialSimple* mate =                   
116       G4tgrMaterialFactory::GetInstance()->Add    
117     volmgr->RegisterMe(mate);                     
118                                                   
119     //------------------------------- material    
120   }                                               
121   else if((wl0 == ":MIXT") || (wl0 == ":MIXT_B    
122   {                                               
123     G4tgrMaterialMixture* mate =                  
124       G4tgrMaterialFactory::GetInstance()->Add    
125         wl, "MaterialMixtureByWeight");           
126     volmgr->RegisterMe(mate);                     
127                                                   
128     //------------------------------- material    
129   }                                               
130   else if(wl0 == ":MIXT_BY_NATOMS")               
131   {                                               
132     G4tgrMaterialMixture* mate =                  
133       G4tgrMaterialFactory::GetInstance()->Add    
134         wl, "MaterialMixtureByNoAtoms");          
135     volmgr->RegisterMe(mate);                     
136                                                   
137     //------------------------------- material    
138   }                                               
139   else if(wl0 == ":MIXT_BY_VOLUME")               
140   {                                               
141     G4tgrMaterialMixture* mate =                  
142       G4tgrMaterialFactory::GetInstance()->Add    
143         wl, "MaterialMixtureByVolume");           
144     volmgr->RegisterMe(mate);                     
145                                                   
146     //------------------------------- material    
147     //                                Ionisati    
148   }                                               
149   else if(wl0 == ":MATE_MEE")                     
150   {                                               
151     G4tgrMaterial* mate = G4tgrMaterialFactory    
152       G4tgrUtils::GetString(wl[1]));              
153     if(mate == 0)                                 
154     {                                             
155       G4Exception("G4tgrLineProcessor::Process    
156                   FatalException, G4tgrUtils::    
157       return false;                               
158     }                                             
159     mate->SetIonisationMeanExcitationEnergy(G4    
160                                                   
161     //------------------------------- material    
162   }                                               
163   else if(wl0 == ":MATE_STATE")                   
164   {                                               
165     G4tgrMaterial* mate = G4tgrMaterialFactory    
166       G4tgrUtils::GetString(wl[1]));              
167     if(mate == 0)                                 
168     {                                             
169       G4Exception("G4tgrLineProcessor::Process    
170                   FatalException, wl[1]);         
171     }                                             
172     mate->SetState(wl[2]);                        
173                                                   
174     //------------------------------- material    
175   }                                               
176   else if(wl0 == ":MATE_TEMPERATURE")             
177   {                                               
178     G4tgrMaterial* mate = G4tgrMaterialFactory    
179       G4tgrUtils::GetString(wl[1]));              
180     if(mate == 0)                                 
181     {                                             
182       G4Exception("G4tgrLineProcessor::Process    
183                   FatalException, wl[1]);         
184     }                                             
185     mate->SetTemperature(G4tgrUtils::GetDouble    
186                                                   
187     //------------------------------- material    
188   }                                               
189   else if(wl0 == ":MATE_PRESSURE")                
190   {                                               
191     G4tgrMaterial* mate = G4tgrMaterialFactory    
192       G4tgrUtils::GetString(wl[1]));              
193     if(mate == 0)                                 
194     {                                             
195       G4Exception("G4tgrLineProcessor::Process    
196                   FatalException, wl[1]);         
197     }                                             
198     mate->SetPressure(G4tgrUtils::GetDouble(wl    
199                                                   
200     //------------------------------- solid       
201   }                                               
202   else if(wl0 == ":SOLID")                        
203   {  // called from here or from G4tgrVolume::    
204     volmgr->CreateSolid(wl, 0);                   
205                                                   
206     //------------------------------- volume      
207   }                                               
208   else if(wl0 == ":VOLU")                         
209   {                                               
210     G4tgrVolume* vol = new G4tgrVolume(wl);       
211     volmgr->RegisterMe(vol);                      
212                                                   
213     //--------------------------------- single    
214   }                                               
215   else if(wl0 == ":PLACE")                        
216   {                                               
217     G4tgrVolume* vol = FindVolume(G4tgrUtils::    
218     G4tgrPlace* vpl  = vol->AddPlace(wl);         
219     volmgr->RegisterMe(vpl);                      
220                                                   
221     //--------------------------------- parame    
222   }                                               
223   else if(wl0 == ":PLACE_PARAM")                  
224   {                                               
225     G4tgrVolume* vol                = FindVolu    
226     G4tgrPlaceParameterisation* vpl = vol->Add    
227     volmgr->RegisterMe(vpl);                      
228                                                   
229     //--------------------------------- divisi    
230   }                                               
231   else if((wl0 == ":DIV_NDIV") || (wl0 == ":DI    
232           (wl0 == ":DIV_NDIV_WIDTH"))             
233   {                                               
234     //---------- Create G4tgrVolumeDivision an    
235     G4tgrVolumeDivision* vol = new G4tgrVolume    
236     volmgr->RegisterMe(vol);                      
237                                                   
238     //--------------------------------- replic    
239   }                                               
240   else if(wl0 == ":REPL")                         
241   {                                               
242     G4tgrVolume* vol      = FindVolume(G4tgrUt    
243     G4tgrPlaceDivRep* vpl = vol->AddPlaceRepli    
244     volmgr->RegisterMe(vpl);                      
245                                                   
246     //----------------------------- assembly v    
247   }                                               
248   else if(wl0 == ":VOLU_ASSEMBLY")                
249   {                                               
250     G4tgrVolumeAssembly* vol = new G4tgrVolume    
251     volmgr->RegisterMe(vol);                      
252                                                   
253     //----------------------------- assembly v    
254   }                                               
255   else if(wl0 == ":PLACE_ASSEMBLY")               
256   {                                               
257     G4tgrVolume* vol = FindVolume(G4tgrUtils::    
258     G4tgrPlace* vpl  = vol->AddPlace(wl);         
259     volmgr->RegisterMe(vpl);                      
260                                                   
261     //---------------------------------  rotat    
262   }                                               
263   else if(wl0 == ":ROTM")                         
264   {                                               
265     //---------- When second word is ':NEXT/:M    
266     //           rotation matrix that will be     
267     G4tgrRotationMatrix* rm =                     
268       G4tgrRotationMatrixFactory::GetInstance(    
269     volmgr->RegisterMe(rm);                       
270                                                   
271     //------------------------------- visualis    
272   }                                               
273   else if(wl0 == ":VIS")                          
274   {                                               
275     std::vector<G4tgrVolume*> vols =              
276       volmgr->FindVolumes(G4tgrUtils::GetStrin    
277     for(std::size_t ii = 0; ii < vols.size();     
278     {                                             
279       vols[ii]->AddVisibility(wl);                
280     }                                             
281                                                   
282     //--------------------------------- colour    
283   }                                               
284   else if((wl0 == ":COLOUR") || (wl0 == ":COLO    
285   {                                               
286     std::vector<G4tgrVolume*> vols =              
287       volmgr->FindVolumes(G4tgrUtils::GetStrin    
288     for(std::size_t ii = 0; ii < vols.size();     
289     {                                             
290       vols[ii]->AddRGBColour(wl);                 
291     }                                             
292                                                   
293     //--------------------------------- check     
294   }                                               
295   else if(wl0 == ":CHECK_OVERLAPS")               
296   {                                               
297     std::vector<G4tgrVolume*> vols =              
298       volmgr->FindVolumes(G4tgrUtils::GetStrin    
299     for(std::size_t ii = 0; ii < vols.size();     
300     {                                             
301       vols[ii]->AddCheckOverlaps(wl);             
302     }                                             
303     //--------------------------------- ERROR     
304   }                                               
305   else                                            
306   {                                               
307     return false;                                 
308   }                                               
309                                                   
310   return true;                                    
311 }                                                 
312                                                   
313 // -------------------------------------------    
314 G4tgrVolume* G4tgrLineProcessor::FindVolume(co    
315 {                                                 
316   G4tgrVolume* vol = volmgr->FindVolume(volnam    
317                                                   
318   if(vol->GetType() == "VOLDivision")             
319   {                                               
320     G4Exception("G4tgrLineProcessor::FindVolum    
321                 FatalException,                   
322                 "Using 'PLACE' for a volume cr    
323   }                                               
324                                                   
325   return vol;                                     
326 }                                                 
327