55 fFastTrack(anEnvelope,IsUnique),fTriggedFastSimulationModel(0),
56 fLastCrossedParticle(0)
64 AddFastSimulationManager(
this);
80 RemoveFastSimulationManager(
this);
93 for (iModel=0; iModel<ModelList.size(); iModel++)
94 if(ModelList[iModel]->GetName() == aName)
99 for (iModel=0; iModel<fInactivatedModels.size(); iModel++)
100 if(fInactivatedModels[iModel]->GetName() == aName) {
102 push_back (fInactivatedModels.
removeAt(iModel));
104 fLastCrossedParticle=0;
115 for (
size_t iModel=0; iModel<ModelList.size(); iModel++)
116 if(ModelList[iModel]->GetName() == aName) {
118 push_back (ModelList.
removeAt(iModel));
120 fLastCrossedParticle=0;
129 bool &foundPrevious)
const
132 for (
size_t iModel=0; iModel<ModelList.size(); iModel++)
134 if(ModelList[iModel]->GetName() == modelName)
136 if (previousFound == 0)
138 model = ModelList[iModel];
143 if (ModelList[iModel] == previousFound)
145 foundPrevious =
true;
150 model = ModelList[iModel];
192 fApplicableModelList.clear();
194 if(ModelList.size()==0)
return false;
195 for (iModel=0; iModel<ModelList.size(); iModel++)
196 if(ModelList[iModel]->IsApplicable(*(track.
GetDefinition())))
197 fApplicableModelList.push_back (ModelList[iModel]);
201 if(fApplicableModelList.size()==0)
return false;
211 for (iModel=0; iModel<fApplicableModelList.size(); iModel++)
217 if(fApplicableModelList[iModel]->ModelTrigger(fFastTrack)) {
228 fTriggedFastSimulationModel=fApplicableModelList[iModel];
241 fTriggedFastSimulationModel->
DoIt(fFastTrack,fFastStep);
257 fApplicableModelList.clear();
259 if(ModelList.size()==0)
return false;
260 for (iModel=0; iModel<ModelList.size(); iModel++)
261 if(ModelList[iModel]->IsApplicable(*(track.
GetDefinition())))
262 fApplicableModelList.push_back (ModelList[iModel]);
266 if(fApplicableModelList.size()==0)
return false;
276 for (iModel=0; iModel < fApplicableModelList.size(); iModel++)
277 if(fApplicableModelList[iModel]->AtRestModelTrigger(fFastTrack))
280 fTriggedFastSimulationModel=fApplicableModelList[iModel];
292 fTriggedFastSimulationModel->
AtRestDoIt(fFastTrack,fFastStep);
302 else G4cout <<
" (// geom.)";
311 G4cout <<
"Current Models for the ";
315 for (iModel=0; iModel<ModelList.size(); iModel++)
316 G4cout <<
" " << ModelList[iModel]->GetName() <<
"\n";
318 for (iModel=0; iModel<fInactivatedModels.size(); iModel++)
319 G4cout <<
" " << fInactivatedModels[iModel]->GetName()
320 <<
"(inactivated)\n";
332 for (iModel=0; iModel<ModelList.size(); iModel++)
333 if(ModelList[iModel]->GetName() == aName ||
336 G4cout <<
"In the envelope ";
340 G4cout <<
" the model " << ModelList[iModel]->GetName()
341 <<
" is applicable for :\n ";
343 G4int list_started=0;
344 for (
G4int iParticle=0; iParticle<theParticleTable->
entries();
346 if(ModelList[iModel]->
347 IsApplicable(*(theParticleTable->
348 GetParticle(iParticle)))) {
349 if(list_started++)
G4cout <<
", ";
350 G4cout << theParticleTable->
357 for (iModel=0; iModel<fInactivatedModels.size(); iModel++)
358 if(fInactivatedModels[iModel]->GetName() == aName ||
361 G4cout <<
"In the envelope ";
365 G4cout <<
" the model " << fInactivatedModels[iModel]->GetName()
366 <<
" (inactivated) is applicable for :\n ";
368 G4int list_started=0;
369 for (
G4int iParticle=0; iParticle<theParticleTable->
entries();
371 if(fInactivatedModels[iModel]->
372 IsApplicable(*(theParticleTable->
373 GetParticle(iParticle)))) {
374 if(list_started++)
G4cout <<
", ";
375 G4cout << theParticleTable->
389 for (iModel=0; iModel<ModelList.size(); iModel++)
390 if(ModelList[iModel]->IsApplicable(*aPD)) {
394 << ModelList[iModel]->GetName()
398 for (iModel=0; iModel<fInactivatedModels.size(); iModel++)
399 if(fInactivatedModels[iModel]->IsApplicable(*aPD)) {
403 << fInactivatedModels[iModel]->GetName()
404 <<
" (inactivated)." <<
G4endl;
410 ed <<
"Two or more Models are available for the same particle type, in the same envelope/region." <<
G4endl;
411 G4Exception(
"G4FastSimulationManager::ListModels(const G4ParticleDefinition* aPD) const",
414 "Models risk to exclude each other.");
G4DLLIMPORT std::ostream G4cout
G4FastSimulationManager(G4Envelope *anEnvelope, G4bool IsUnique=FALSE)
G4VParticleChange * InvokePostStepDoIt()
G4VParticleChange * InvokeAtRestDoIt()
G4bool PostStepGetFastSimulationManagerTrigger(const G4Track &, const G4Navigator *a=0)
G4bool AtRestGetFastSimulationManagerTrigger(const G4Track &, const G4Navigator *a=0)
G4bool ActivateFastSimulationModel(const G4String &)
G4VFastSimulationModel * GetFastSimulationModel(const G4String &modelName, const G4VFastSimulationModel *previousFound, bool &foundPrevious) const
~G4FastSimulationManager()
G4bool InActivateFastSimulationModel(const G4String &)
void Initialize(const G4FastTrack &)
G4Envelope * GetEnvelope() const
G4bool OnTheBoundaryButExiting() const
void SetCurrentTrack(const G4Track &, const G4Navigator *a=0)
static G4GlobalFastSimulationManager * GetGlobalFastSimulationManager()
G4VPhysicalVolume * GetWorldVolume() const
const G4String & GetParticleName(G4int index)
static G4ParticleTable * GetParticleTable()
G4FastSimulationManager * GetFastSimulationManager() const
G4VPhysicalVolume * GetWorldPhysical() const
const G4String & GetName() const
void SetFastSimulationManager(G4FastSimulationManager *fsm)
void ClearFastSimulationManager()
G4ParticleDefinition * GetDefinition() const
static G4TransportationManager * GetTransportationManager()
G4Navigator * GetNavigatorForTracking() const
virtual void DoIt(const G4FastTrack &, G4FastStep &)=0
virtual void AtRestDoIt(const G4FastTrack &, G4FastStep &)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
std::ostringstream G4ExceptionDescription