- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/utils/src/G4LossTableManager.cc
r1228 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4LossTableManager.cc,v 1. 97 2009/10/29 19:25:28vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 3$26 // $Id: G4LossTableManager.cc,v 1.101 2010/06/04 15:33:56 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 70 70 // 12-02-07 Add SetSkin, SetLinearLossLimit (V.Ivanchenko) 71 71 // 18-06-07 Move definition of msc parameters to G4EmProcessOptions (V.Ivanchenko) 72 // 21-02-08 Add G4EmSaturation (V.Ivanchenko) 72 // 21-02-08 Added G4EmSaturation (V.Ivanchenko) 73 // 12-04-10 Added PreparePhsyicsTables and BuildPhysicsTables entries (V.Ivanchenko) 73 74 // 74 75 // Class Description: … … 96 97 #include "G4EmTableType.hh" 97 98 #include "G4LossTableBuilder.hh" 99 #include "G4Region.hh" 98 100 99 101 G4LossTableManager* G4LossTableManager::theInstance = 0; … … 114 116 G4LossTableManager::~G4LossTableManager() 115 117 { 116 for (G4int i=0; i<n_loss; i++) {117 if( loss_vector[i] ) delete loss_vector[i];118 for (G4int i=0; i<n_loss; ++i) { 119 if( loss_vector[i] ) { delete loss_vector[i]; } 118 120 } 119 121 size_t msc = msc_vector.size(); 120 for (size_t j=0; j<msc; j++) {121 if( msc_vector[j] ) delete msc_vector[j];122 for (size_t j=0; j<msc; ++j) { 123 if( msc_vector[j] ) { delete msc_vector[j]; } 122 124 } 123 125 size_t emp = emp_vector.size(); 124 for (size_t k=0; k<emp; k++) {125 if( emp_vector[k] ) delete emp_vector[k];126 for (size_t k=0; k<emp; ++k) { 127 if( emp_vector[k] ) { delete emp_vector[k]; } 126 128 } 127 129 size_t mod = mod_vector.size(); 128 for (size_t a=0; a<mod; a++) {129 if( mod_vector[a] ) delete mod_vector[a];130 for (size_t a=0; a<mod; ++a) { 131 if( mod_vector[a] ) { delete mod_vector[a]; } 130 132 } 131 133 size_t fmod = fmod_vector.size(); 132 for (size_t b=0; b<fmod; b++) {133 if( fmod_vector[b] ) delete fmod_vector[b];134 for (size_t b=0; b<fmod; ++b) { 135 if( fmod_vector[b] ) { delete fmod_vector[b]; } 134 136 } 135 137 Clear(); … … 146 148 n_loss = 0; 147 149 run = 0; 148 // first_entry = true;150 startInitialisation = false; 149 151 all_tables_are_built = false; 150 all_tables_are_stored = false;151 152 currentLoss = 0; 152 153 currentParticle = 0; 154 firstParticle = 0; 153 155 lossFluctuationFlag = true; 154 156 subCutoffFlag = false; … … 158 160 maxFinalStep = 0.0; 159 161 minKinEnergy = 0.1*keV; 160 maxKinEnergy = 100.0*TeV; 161 maxKinEnergyForMuons = 100.*TeV; 162 theMessenger = new G4EnergyLossMessenger(); 163 theElectron = G4Electron::Electron(); 164 tableBuilder = new G4LossTableBuilder(); 165 emCorrections= new G4EmCorrections(); 166 emSaturation = new G4EmSaturation(); 167 emConfigurator = new G4EmConfigurator(); 162 maxKinEnergy = 10.0*TeV; 163 nbinsLambda = 77; 164 nbinsPerDecade = 7; 165 maxKinEnergyForMuons = 10.*TeV; 168 166 integral = true; 169 167 integralActive = false; … … 178 176 factorForAngleLimit = 1.0; 179 177 verbose = 1; 178 theMessenger = new G4EnergyLossMessenger(); 179 theElectron = G4Electron::Electron(); 180 tableBuilder = new G4LossTableBuilder(); 181 emCorrections= new G4EmCorrections(); 182 emSaturation = new G4EmSaturation(); 183 emConfigurator = new G4EmConfigurator(verbose); 180 184 tableBuilder->SetSplineFlag(splineFlag); 181 185 } … … 207 211 void G4LossTableManager::Register(G4VEnergyLossProcess* p) 208 212 { 209 n_loss++;213 ++n_loss; 210 214 loss_vector.push_back(p); 211 215 part_vector.push_back(0); … … 217 221 isActive.push_back(true); 218 222 all_tables_are_built = false; 219 if(!lossFluctuationFlag) p->SetLossFluctuations(false);220 if(subCutoffFlag) p->ActivateSubCutoff(true);221 if(rndmStepFlag) p->SetRandomStep(true);222 if(stepFunctionActive) p->SetStepFunction(maxRangeVariation, maxFinalStep);223 if(integralActive) p->SetIntegral(integral);224 if(minEnergyActive) p->SetMinKinEnergy(minKinEnergy);225 if(maxEnergyActive) p->SetMaxKinEnergy(maxKinEnergy);223 if(!lossFluctuationFlag) { p->SetLossFluctuations(false); } 224 if(subCutoffFlag) { p->ActivateSubCutoff(true); } 225 if(rndmStepFlag) { p->SetRandomStep(true); } 226 if(stepFunctionActive) { p->SetStepFunction(maxRangeVariation, maxFinalStep); } 227 if(integralActive) { p->SetIntegral(integral); } 228 if(minEnergyActive) { p->SetMinKinEnergy(minKinEnergy); } 229 if(maxEnergyActive) { p->SetMaxKinEnergy(maxKinEnergy); } 226 230 if(verbose > 1) 227 231 G4cout << "G4LossTableManager::Register G4VEnergyLossProcess : " … … 233 237 void G4LossTableManager::DeRegister(G4VEnergyLossProcess* p) 234 238 { 235 for (G4int i=0; i<n_loss; i++) {236 if(loss_vector[i] == p) loss_vector[i] = 0;239 for (G4int i=0; i<n_loss; ++i) { 240 if(loss_vector[i] == p) { loss_vector[i] = 0; } 237 241 } 238 242 } … … 254 258 { 255 259 size_t msc = msc_vector.size(); 256 for (size_t i=0; i<msc; i++) {257 if(msc_vector[i] == p) msc_vector[i] = 0;260 for (size_t i=0; i<msc; ++i) { 261 if(msc_vector[i] == p) { msc_vector[i] = 0; } 258 262 } 259 263 } … … 275 279 { 276 280 size_t emp = emp_vector.size(); 277 for (size_t i=0; i<emp; i++) {278 if(emp_vector[i] == p) emp_vector[i] = 0;281 for (size_t i=0; i<emp; ++i) { 282 if(emp_vector[i] == p) { emp_vector[i] = 0; } 279 283 } 280 284 } … … 296 300 { 297 301 size_t n = mod_vector.size(); 298 for (size_t i=0; i<n; i++) {299 if(mod_vector[i] == p) mod_vector[i] = 0;302 for (size_t i=0; i<n; ++i) { 303 if(mod_vector[i] == p) { mod_vector[i] = 0; } 300 304 } 301 305 } … … 317 321 { 318 322 size_t n = fmod_vector.size(); 319 for (size_t i=0; i<n; i++) {320 if(fmod_vector[i] == p) fmod_vector[i] = 0;323 for (size_t i=0; i<n; ++i) { 324 if(fmod_vector[i] == p) { fmod_vector[i] = 0; } 321 325 } 322 326 } … … 336 340 G4VEnergyLossProcess* p) 337 341 { 338 n_loss++;342 ++n_loss; 339 343 loss_vector.push_back(p); 340 344 part_vector.push_back(part); … … 349 353 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 350 354 351 void G4LossTableManager::EnergyLossProcessIsInitialised( 352 const G4ParticleDefinition* particle, 353 G4VEnergyLossProcess* p) 354 { 355 if (run == 0 || (particle == firstParticle && all_tables_are_built) ) { 355 void 356 G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, 357 G4VEnergyLossProcess* p) 358 { 359 if (1 < verbose) { 360 G4cout << "G4LossTableManager::PreparePhysicsTable for " 361 << particle->GetParticleName() 362 << " and " << p->GetProcessName() << " run= " << run << G4endl; 363 } 364 // start initialisation for the first run 365 startInitialisation = true; 366 367 if( 0 == run ) { 368 emConfigurator->PrepareModels(particle, p); 369 370 // initialise particles for given process 371 for (G4int j=0; j<n_loss; ++j) { 372 if (p == loss_vector[j]) { 373 if (!part_vector[j]) { part_vector[j] = particle; } 374 } 375 } 376 } 377 } 378 379 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 380 381 void 382 G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, 383 G4VEmProcess* p) 384 { 385 if (1 < verbose) { 386 G4cout << "G4LossTableManager::PreparePhysicsTable for " 387 << particle->GetParticleName() 388 << " and " << p->GetProcessName() << G4endl; 389 } 390 // start initialisation for the first run 391 if( 0 == run ) { 392 emConfigurator->PrepareModels(particle, p); 393 } 394 startInitialisation = true; 395 } 396 397 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 398 399 void 400 G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, 401 G4VMultipleScattering* p) 402 { 403 if (1 < verbose) { 404 G4cout << "G4LossTableManager::PreparePhysicsTable for " 405 << particle->GetParticleName() 406 << " and " << p->GetProcessName() << G4endl; 407 } 408 // start initialisation for the first run 409 if( 0 == run ) { 410 emConfigurator->PrepareModels(particle, p); 411 } 412 } 413 414 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 415 416 void 417 G4LossTableManager::BuildPhysicsTable(const G4ParticleDefinition*) 418 { 419 if(0 == run && startInitialisation) { 420 emConfigurator->Clear(); 421 } 422 } 423 424 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 425 426 void G4LossTableManager::BuildPhysicsTable( 427 const G4ParticleDefinition* aParticle, 428 G4VEnergyLossProcess* p) 429 { 430 if(1 < verbose) { 431 G4cout << "### G4LossTableManager::BuildDEDXTable() is requested for " 432 << aParticle->GetParticleName() 433 << " and process " << p->GetProcessName() 434 << G4endl; 435 } 436 // clear configurator 437 if(0 == run && startInitialisation) { 438 emConfigurator->Clear(); 439 firstParticle = aParticle; 440 } 441 startInitialisation = false; 442 443 // initialisation before any table is built 444 if ( aParticle == firstParticle ) { 356 445 all_tables_are_built = true; 357 446 358 if(1 < verbose) 359 G4cout << "### G4LossTableManager start initilisation of tables" 447 if(1 < verbose) { 448 G4cout << "### G4LossTableManager start initilisation for first particle " 449 << firstParticle->GetParticleName() 360 450 << G4endl; 361 for (G4int i=0; i<n_loss; i++) { 451 } 452 for (G4int i=0; i<n_loss; ++i) { 362 453 G4VEnergyLossProcess* el = loss_vector[i]; 363 454 … … 365 456 const G4ProcessManager* pm = el->GetProcessManager(); 366 457 isActive[i] = pm->GetProcessActivation(el); 458 if(0 == run) { base_part_vector[i] = el->BaseParticle(); } 367 459 tables_are_built[i] = false; 368 all_tables_are_built 369 if(!isActive[i]) el->SetIonisation(false);460 all_tables_are_built= false; 461 if(!isActive[i]) { el->SetIonisation(false); } 370 462 371 463 if(1 < verbose) { … … 374 466 << " active= " << pm->GetProcessActivation(el) 375 467 << " table= " << tables_are_built[i] 376 << " isIonisation= " << el->IsIonisationProcess() 377 << G4endl; 468 << " isIonisation= " << el->IsIonisationProcess(); 469 if(base_part_vector[i]) { 470 G4cout << " base particle " << base_part_vector[i]->GetParticleName(); 471 } 472 G4cout << G4endl; 378 473 } 379 474 } else { … … 382 477 } 383 478 } 384 if (0 == run) firstParticle = particle; 385 run++; 386 } 387 388 currentParticle = 0; 389 390 SetParameters(p); 391 for (G4int j=0; j<n_loss; j++) { 392 if (p == loss_vector[j]) { 393 394 if (!part_vector[j]) { 395 part_vector[j] = particle; 396 base_part_vector[j] = p->BaseParticle(); 479 ++run; 480 currentParticle = 0; 481 } 482 483 // Set run time parameters 484 SetParameters(aParticle, p); 485 486 if (all_tables_are_built) { return; } 487 488 // Build tables for given particle 489 all_tables_are_built = true; 490 491 for(G4int i=0; i<n_loss; ++i) { 492 if(p == loss_vector[i] && !tables_are_built[i] && !base_part_vector[i]) { 493 const G4ParticleDefinition* curr_part = part_vector[i]; 494 if(1 < verbose) { 495 G4cout << "### BuildPhysicsTable for " << p->GetProcessName() 496 << " and " << curr_part->GetParticleName() 497 << " start BuildTable " << G4endl; 397 498 } 398 if(maxEnergyForMuonsActive) {399 G4double dm = std::abs(particle->GetPDGMass() - 105.7*MeV);400 if(dm < 5.*MeV) p->SetMaxKinEnergy(maxKinEnergyForMuons);401 }402 403 if(1 < verbose) {404 G4cout << "For " << p->GetProcessName()405 << " for " << part_vector[j]->GetParticleName()406 << " tables_are_built= " << tables_are_built[j]407 << " procFlag= " << loss_vector[j]->TablesAreBuilt()408 << " all_tables_are_built= " << all_tables_are_built409 << G4endl;410 }411 }412 }413 }414 415 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....416 417 G4EnergyLossMessenger* G4LossTableManager::GetMessenger()418 {419 return theMessenger;420 }421 422 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....423 424 void G4LossTableManager::ParticleHaveNoLoss(425 const G4ParticleDefinition* aParticle)426 {427 G4String s = " dE/dx table not found for "428 + aParticle->GetParticleName() + " !";429 G4Exception("G4LossTableManager::ParticleHaveNoLoss", "EM01",430 FatalException, s);431 432 }433 434 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....435 436 G4bool G4LossTableManager::BuildCSDARange() const437 {438 return buildCSDARange;439 }440 441 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....442 443 void G4LossTableManager::BuildPhysicsTable(444 const G4ParticleDefinition* aParticle,445 G4VEnergyLossProcess* p)446 {447 if(1 < verbose) {448 G4cout << "### G4LossTableManager::BuildDEDXTable() is requested for "449 << aParticle->GetParticleName()450 << " and process " << p->GetProcessName()451 << G4endl;452 }453 if (all_tables_are_built) return;454 all_tables_are_built = true;455 456 for(G4int i=0; i<n_loss; i++) {457 if(!tables_are_built[i] && !base_part_vector[i]) {458 const G4ParticleDefinition* curr_part = part_vector[i];459 499 G4VEnergyLossProcess* curr_proc = BuildTables(curr_part); 460 if(curr_proc) CopyTables(curr_part, curr_proc); 461 } 462 } 463 464 for (G4int ii=0; ii<n_loss; ii++) { 465 if ( !tables_are_built[ii] ) { 466 all_tables_are_built = false; 467 break; 468 } 500 if(curr_proc) { CopyTables(curr_part, curr_proc); } 501 } 502 if ( !tables_are_built[i] ) { all_tables_are_built = false; } 469 503 } 470 504 … … 473 507 << "all_tables_are_built= " << all_tables_are_built 474 508 << G4endl; 475 476 if(all_tables_are_built) 509 510 if(all_tables_are_built) { 477 511 G4cout << "### All dEdx and Range tables are built #####" << G4endl; 512 } 478 513 } 479 514 } … … 484 519 G4VEnergyLossProcess* base_proc) 485 520 { 486 for (G4int j=0; j<n_loss; j++) {521 for (G4int j=0; j<n_loss; ++j) { 487 522 488 523 G4VEnergyLossProcess* proc = loss_vector[j]; 489 if(proc == base_proc || proc->Particle() == part)490 tables_are_built[j] = true;524 //if(proc == base_proc || proc->Particle() == part) 525 // tables_are_built[j] = true; 491 526 492 527 if (!tables_are_built[j] && part == base_part_vector[j]) { … … 511 546 } 512 547 513 if (theElectron == part && theElectron == proc->SecondaryParticle() ) 548 if (theElectron == part && theElectron == proc->SecondaryParticle() ) { 514 549 proc->SetSecondaryRangeTable(base_proc->RangeTableForLoss()); 550 } 515 551 } 516 552 } … … 535 571 G4int i; 536 572 537 for (i=0; i<n_loss; i++) {573 for (i=0; i<n_loss; ++i) { 538 574 p = loss_vector[i]; 539 575 if (p && aParticle == part_vector[i] && !tables_are_built[i]) { … … 602 638 std::vector<G4PhysicsTable*> listCSDA; 603 639 604 for (i=0; i<n_dedx; i++) {640 for (i=0; i<n_dedx; ++i) { 605 641 p = loss_list[i]; 606 642 p->SetIonisation(false); … … 658 694 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 659 695 696 G4EnergyLossMessenger* G4LossTableManager::GetMessenger() 697 { 698 return theMessenger; 699 } 700 701 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 702 703 void G4LossTableManager::ParticleHaveNoLoss( 704 const G4ParticleDefinition* aParticle) 705 { 706 G4String s = " dE/dx table not found for " 707 + aParticle->GetParticleName() + " !"; 708 G4Exception("G4LossTableManager::ParticleHaveNoLoss", "EM01", 709 FatalException, s); 710 711 } 712 713 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 714 715 G4bool G4LossTableManager::BuildCSDARange() const 716 { 717 return buildCSDARange; 718 } 719 720 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 721 660 722 void G4LossTableManager::SetLossFluctuations(G4bool val) 661 723 { 662 724 lossFluctuationFlag = val; 663 for(G4int i=0; i<n_loss; i++) {664 if(loss_vector[i]) loss_vector[i]->SetLossFluctuations(val);665 } 666 } 667 668 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 669 670 void G4LossTableManager::SetSubCutoff(G4bool val )725 for(G4int i=0; i<n_loss; ++i) { 726 if(loss_vector[i]) { loss_vector[i]->SetLossFluctuations(val); } 727 } 728 } 729 730 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 731 732 void G4LossTableManager::SetSubCutoff(G4bool val, const G4Region* r) 671 733 { 672 734 subCutoffFlag = val; 673 for(G4int i=0; i<n_loss; i++) {674 if(loss_vector[i]) loss_vector[i]->ActivateSubCutoff(val);735 for(G4int i=0; i<n_loss; ++i) { 736 if(loss_vector[i]) { loss_vector[i]->ActivateSubCutoff(val, r); } 675 737 } 676 738 } … … 682 744 integral = val; 683 745 integralActive = true; 684 for(G4int i=0; i<n_loss; i++) {685 if(loss_vector[i]) loss_vector[i]->SetIntegral(val);746 for(G4int i=0; i<n_loss; ++i) { 747 if(loss_vector[i]) { loss_vector[i]->SetIntegral(val); } 686 748 } 687 749 size_t emp = emp_vector.size(); 688 for (size_t k=0; k<emp; k++) {689 if(emp_vector[k]) emp_vector[k]->SetIntegral(val);750 for (size_t k=0; k<emp; ++k) { 751 if(emp_vector[k]) { emp_vector[k]->SetIntegral(val); } 690 752 } 691 753 } … … 696 758 { 697 759 minSubRange = val; 698 for(G4int i=0; i<n_loss; i++) {699 if(loss_vector[i]) loss_vector[i]->SetMinSubRange(val);760 for(G4int i=0; i<n_loss; ++i) { 761 if(loss_vector[i]) { loss_vector[i]->SetMinSubRange(val); } 700 762 } 701 763 } … … 706 768 { 707 769 rndmStepFlag = val; 708 for(G4int i=0; i<n_loss; i++) {709 if(loss_vector[i]) loss_vector[i]->SetRandomStep(val);770 for(G4int i=0; i<n_loss; ++i) { 771 if(loss_vector[i]) { loss_vector[i]->SetRandomStep(val); } 710 772 } 711 773 } … … 717 779 minEnergyActive = true; 718 780 minKinEnergy = val; 719 for(G4int i=0; i<n_loss; i++) {720 if(loss_vector[i]) loss_vector[i]->SetMinKinEnergy(val);781 for(G4int i=0; i<n_loss; ++i) { 782 if(loss_vector[i]) { loss_vector[i]->SetMinKinEnergy(val); } 721 783 } 722 784 size_t msc = msc_vector.size(); 723 for (size_t j=0; j<msc; j++) {724 if(msc_vector[j]) msc_vector[j]->SetMinKinEnergy(val);785 for (size_t j=0; j<msc; ++j) { 786 if(msc_vector[j]) { msc_vector[j]->SetMinKinEnergy(val); } 725 787 } 726 788 size_t emp = emp_vector.size(); 727 for (size_t k=0; k<emp; k++) {728 if(emp_vector[k]) emp_vector[k]->SetMinKinEnergy(val);789 for (size_t k=0; k<emp; ++k) { 790 if(emp_vector[k]) { emp_vector[k]->SetMinKinEnergy(val); } 729 791 } 730 792 } … … 736 798 maxEnergyActive = true; 737 799 maxKinEnergy = val; 738 for(G4int i=0; i<n_loss; i++) {739 if(loss_vector[i]) loss_vector[i]->SetMaxKinEnergy(val);800 for(G4int i=0; i<n_loss; ++i) { 801 if(loss_vector[i]) { loss_vector[i]->SetMaxKinEnergy(val); } 740 802 } 741 803 size_t msc = msc_vector.size(); 742 for (size_t j=0; j<msc; j++) {743 if(msc_vector[j]) msc_vector[j]->SetMaxKinEnergy(val);804 for (size_t j=0; j<msc; ++j) { 805 if(msc_vector[j]) { msc_vector[j]->SetMaxKinEnergy(val); } 744 806 } 745 807 size_t emp = emp_vector.size(); 746 for (size_t k=0; k<emp; k++) {747 if(emp_vector[k]) emp_vector[k]->SetMaxKinEnergy(val);808 for (size_t k=0; k<emp; ++k) { 809 if(emp_vector[k]) { emp_vector[k]->SetMaxKinEnergy(val); } 748 810 } 749 811 } … … 753 815 void G4LossTableManager::SetMaxEnergyForCSDARange(G4double val) 754 816 { 755 for(G4int i=0; i<n_loss; i++) {756 if(loss_vector[i]) loss_vector[i]->SetMaxKinEnergyForCSDARange(val);817 for(G4int i=0; i<n_loss; ++i) { 818 if(loss_vector[i]) { loss_vector[i]->SetMaxKinEnergyForCSDARange(val); } 757 819 } 758 820 } … … 770 832 void G4LossTableManager::SetDEDXBinning(G4int val) 771 833 { 772 for(G4int i=0; i<n_loss; i++) {773 if(loss_vector[i]) loss_vector[i]->SetDEDXBinning(val);834 for(G4int i=0; i<n_loss; ++i) { 835 if(loss_vector[i]) { loss_vector[i]->SetDEDXBinning(val); } 774 836 } 775 837 } … … 779 841 void G4LossTableManager::SetDEDXBinningForCSDARange(G4int val) 780 842 { 781 for(G4int i=0; i<n_loss; i++) {782 if(loss_vector[i]) loss_vector[i]->SetDEDXBinningForCSDARange(val);843 for(G4int i=0; i<n_loss; ++i) { 844 if(loss_vector[i]) { loss_vector[i]->SetDEDXBinningForCSDARange(val); } 783 845 } 784 846 } … … 788 850 void G4LossTableManager::SetLambdaBinning(G4int val) 789 851 { 852 G4int n = val/G4int(std::log10(maxKinEnergy/minKinEnergy)); 853 if(n < 5) { 854 G4cout << "G4LossTableManager::SetLambdaBinning WARNING " 855 << "too small number of bins " << val << " ignored" 856 << G4endl; 857 return; 858 } 859 nbinsLambda = val; 860 nbinsPerDecade = n; 790 861 size_t msc = msc_vector.size(); 791 for (size_t j=0; j<msc; j++) {792 if(msc_vector[j]) msc_vector[j]->SetBinning(val);862 for (size_t j=0; j<msc; ++j) { 863 if(msc_vector[j]) { msc_vector[j]->SetBinning(val); } 793 864 } 794 865 size_t emp = emp_vector.size(); 795 for (size_t k=0; k<emp; k++) { 796 if(emp_vector[k]) emp_vector[k]->SetLambdaBinning(val); 797 } 866 for (size_t k=0; k<emp; ++k) { 867 if(emp_vector[k]) { emp_vector[k]->SetLambdaBinning(val); } 868 } 869 } 870 871 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 872 873 G4int G4LossTableManager::GetNumberOfBinsPerDecade() const 874 { 875 return nbinsPerDecade; 798 876 } 799 877 … … 803 881 { 804 882 verbose = val; 805 for(G4int i=0; i<n_loss; i++) {806 if(loss_vector[i]) loss_vector[i]->SetVerboseLevel(val);883 for(G4int i=0; i<n_loss; ++i) { 884 if(loss_vector[i]) { loss_vector[i]->SetVerboseLevel(val); } 807 885 } 808 886 size_t msc = msc_vector.size(); 809 for (size_t j=0; j<msc; j++) {810 if(msc_vector[j]) msc_vector[j]->SetVerboseLevel(val);887 for (size_t j=0; j<msc; ++j) { 888 if(msc_vector[j]) { msc_vector[j]->SetVerboseLevel(val); } 811 889 } 812 890 size_t emp = emp_vector.size(); 813 for (size_t k=0; k<emp; k++) { 814 if(emp_vector[k]) emp_vector[k]->SetVerboseLevel(val); 815 } 891 for (size_t k=0; k<emp; ++k) { 892 if(emp_vector[k]) { emp_vector[k]->SetVerboseLevel(val); } 893 } 894 emConfigurator->SetVerbose(val); 895 //tableBuilder->SetVerbose(val); 896 //emCorrections->SetVerbose(val); 897 emSaturation->SetVerbose(val); 816 898 } 817 899 … … 823 905 maxRangeVariation = v1; 824 906 maxFinalStep = v2; 825 for(G4int i=0; i<n_loss; i++) {826 if(loss_vector[i]) loss_vector[i]->SetStepFunction(v1, v2);907 for(G4int i=0; i<n_loss; ++i) { 908 if(loss_vector[i]) { loss_vector[i]->SetStepFunction(v1, v2); } 827 909 } 828 910 } … … 832 914 void G4LossTableManager::SetLinearLossLimit(G4double val) 833 915 { 834 for(G4int i=0; i<n_loss; i++) {835 if(loss_vector[i]) loss_vector[i]->SetLinearLossLimit(val);916 for(G4int i=0; i<n_loss; ++i) { 917 if(loss_vector[i]) { loss_vector[i]->SetLinearLossLimit(val); } 836 918 } 837 919 } … … 846 928 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... 847 929 848 void G4LossTableManager::SetParameters(G4VEnergyLossProcess* p) 849 { 850 if(stepFunctionActive) p->SetStepFunction(maxRangeVariation, maxFinalStep); 851 if(integralActive) p->SetIntegral(integral); 852 if(minEnergyActive) p->SetMinKinEnergy(minKinEnergy); 853 if(maxEnergyActive) p->SetMaxKinEnergy(maxKinEnergy); 930 void 931 G4LossTableManager::SetParameters(const G4ParticleDefinition* aParticle, 932 G4VEnergyLossProcess* p) 933 { 934 if(stepFunctionActive) { p->SetStepFunction(maxRangeVariation, maxFinalStep); } 935 if(integralActive) { p->SetIntegral(integral); } 936 if(minEnergyActive) { p->SetMinKinEnergy(minKinEnergy); } 937 if(maxEnergyActive) { p->SetMaxKinEnergy(maxKinEnergy); } 854 938 p->SetVerboseLevel(verbose); 939 if(maxEnergyForMuonsActive) { 940 G4double dm = std::abs(aParticle->GetPDGMass() - 105.7*MeV); 941 if(dm < 5.*MeV) { p->SetMaxKinEnergy(maxKinEnergyForMuons); } 942 } 855 943 } 856 944 … … 858 946 859 947 const std::vector<G4VEnergyLossProcess*>& 860 948 G4LossTableManager::GetEnergyLossProcessVector() 861 949 { 862 950 return loss_vector; … … 873 961 874 962 const std::vector<G4VMultipleScattering*>& 875 963 G4LossTableManager::GetMultipleScatteringVector() 876 964 { 877 965 return msc_vector; … … 925 1013 void G4LossTableManager::SetFactorForAngleLimit(G4double val) 926 1014 { 927 if(val > 0.0) factorForAngleLimit = val;1015 if(val > 0.0) { factorForAngleLimit = val; } 928 1016 } 929 1017
Note: See TracChangeset
for help on using the changeset viewer.