Changeset 1340 for trunk/source/processes/electromagnetic/xrays
- Timestamp:
- Nov 5, 2010, 3:45:55 PM (15 years ago)
- Location:
- trunk/source/processes/electromagnetic/xrays
- Files:
-
- 6 edited
-
History (modified) (2 diffs)
-
include/G4Scintillation.hh (modified) (4 diffs)
-
src/G4Scintillation.cc (modified) (21 diffs)
-
src/G4SynchrotronRadiation.cc (modified) (4 diffs)
-
src/G4SynchrotronRadiationInMat.cc (modified) (4 diffs)
-
src/G4TransitionRadiation.cc (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/xrays/History
r1337 r1340 1 $Id: History,v 1.7 2 2010/06/16 15:34:31 gcosmoExp $1 $Id: History,v 1.77 2010/11/03 19:22:54 gum Exp $ 2 2 ------------------------------------------------------------------- 3 3 … … 17 17 * Reverse chronological order (last date on top), please * 18 18 ---------------------------------------------------------- 19 20 03 November 10: P. Gumplinger (xrays-V09-03-05) 21 - more corrections to G4Scintillation; now all particles are assigned the 22 ELECTRONSCINTILLATIONYIELD unless the user specifies otherwise 23 sort out where Ion and Neutron (recoil ions below tracking cut) should go 24 25 28 October 10: P. Gumplinger (xrays-V09-03-04) 26 - several small corrections to the previous implementation of G4Scintillation 27 28 19 October 10: P. Gumplinger (xrays-V09-03-03) 29 - G4Scintillation: allow for the light yield to be a function of 30 particle type and deposited energy in case of non-linear light 31 emission in scintillators. Thanks to Zach Hartwig (Department 32 of Nuclear Science and Engineeering - MIT) 33 34 14 October 10: V. Ivanchenko (xrays-V09-03-02) 35 - G4SynchrotronRadiationInMat, G4SynchrotronRadiation, 36 G4TransitionRadiation - added process sub-types 19 37 20 38 16 June 10: G. Cosmo (xrays-V09-03-01) -
trunk/source/processes/electromagnetic/xrays/include/G4Scintillation.hh
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4Scintillation.hh,v 1. 18 2010/06/25 09:41:46 gunterExp $28 // GEANT4 tag $Name: geant4-09-04-beta-01$27 // $Id: G4Scintillation.hh,v 1.21 2010/10/28 23:29:21 gum Exp $ 28 // GEANT4 tag $Name: xrays-V09-03-05 $ 29 29 // 30 30 // … … 38 38 // Created: 1998-11-07 39 39 // Author: Peter Gumplinger 40 // Updated: 2005-07-28 add G4ProcessType to constructor 40 // Updated: 2010-10-20 Allow the scintillation yield to be a function 41 // of energy deposited by particle type 42 // Thanks to Zach Hartwig (Department of Nuclear 43 // Science and Engineeering - MIT) 44 // 2005-07-28 add G4ProcessType to constructor 41 45 // 2002-11-21 change to user G4Poisson for small MeanNumPotons 42 46 // 2002-11-07 allow for fast and slow scintillation … … 182 186 // Adds Birks Saturation to the process. 183 187 188 void RemoveSaturation() { emSaturation = NULL; } 189 // Removes the Birks Saturation from the process. 190 184 191 G4EmSaturation* GetSaturation() const { return emSaturation; } 185 192 // Returns the Birks Saturation. 193 194 void SetScintillationByParticleType(const G4bool ); 195 // Called by the user to set the scintillation yield as a function 196 // of energy deposited by particle type 197 198 G4bool GetScintillationByParticleType() const 199 { return scintillationByParticleType; } 200 // Return the boolean that determines the method of scintillation 201 // production 186 202 187 203 void DumpPhysicsTable() const; … … 210 226 211 227 G4double ExcitationRatio; 228 229 G4bool scintillationByParticleType; 212 230 213 231 private: -
trunk/source/processes/electromagnetic/xrays/src/G4Scintillation.cc
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4Scintillation.cc,v 1.3 2 2010/06/16 15:34:15 gcosmoExp $28 // GEANT4 tag $Name: geant4-09-04-beta-01$27 // $Id: G4Scintillation.cc,v 1.36 2010/11/03 19:23:48 gum Exp $ 28 // GEANT4 tag $Name: xrays-V09-03-05 $ 29 29 // 30 30 //////////////////////////////////////////////////////////////////////// … … 32 32 //////////////////////////////////////////////////////////////////////// 33 33 // 34 // File: G4Scintillation.cc 34 // File: G4Scintillation.cc 35 35 // Description: RestDiscrete Process - Generation of Scintillation Photons 36 36 // Version: 1.0 37 // Created: 1998-11-07 37 // Created: 1998-11-07 38 38 // Author: Peter Gumplinger 39 // Updated: 2010-92-22 by Peter Gumplinger 39 // Updated: 2010-10-20 Allow the scintillation yield to be a function 40 // of energy deposited by particle type 41 // Thanks to Zach Hartwig (Department of Nuclear 42 // Science and Engineeering - MIT) 43 // 2010-09-22 by Peter Gumplinger 40 44 // > scintillation rise time included, thanks to 41 45 // > Martin Goettlich/DESY … … 59 63 // > change: aSecondaryPosition=x0+rand*aStep.GetDeltaPosition(); 60 64 // aSecondaryTrack->SetTouchable(0); 61 // 2001-09-17, migration of Materials to pure STL (mma) 65 // 2001-09-17, migration of Materials to pure STL (mma) 62 66 // 2003-06-03, V.Ivanchenko fix compilation warnings 63 67 // … … 67 71 68 72 #include "G4ios.hh" 73 #include "G4ParticleTypes.hh" 69 74 #include "G4EmProcessSubType.hh" 70 75 … … 72 77 73 78 ///////////////////////// 74 // Class Implementation 79 // Class Implementation 75 80 ///////////////////////// 76 81 … … 93 98 SetProcessSubType(fScintillation); 94 99 95 fTrackSecondariesFirst = false;100 fTrackSecondariesFirst = false; 96 101 fFiniteRiseTime = false; 97 102 … … 99 104 ExcitationRatio = 1.0; 100 105 106 scintillationByParticleType = false; 107 101 108 theFastIntegralTable = NULL; 102 109 theSlowIntegralTable = NULL; 103 110 104 if (verboseLevel>0) {111 if (verboseLevel>0) { 105 112 G4cout << GetProcessName() << " is created " << G4endl; 106 }107 108 BuildThePhysicsTable();113 } 114 115 BuildThePhysicsTable(); 109 116 110 117 emSaturation = NULL; … … 115 122 //////////////// 116 123 117 G4Scintillation::~G4Scintillation() 124 G4Scintillation::~G4Scintillation() 118 125 { 119 126 if (theFastIntegralTable != NULL) { 120 theFastIntegralTable->clearAndDestroy();127 theFastIntegralTable->clearAndDestroy(); 121 128 delete theFastIntegralTable; 122 }129 } 123 130 if (theSlowIntegralTable != NULL) { 124 131 theSlowIntegralTable->clearAndDestroy(); … … 161 168 const G4Material* aMaterial = aTrack.GetMaterial(); 162 169 163 G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint();164 G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint();165 166 G4ThreeVector x0 = pPreStepPoint->GetPosition();170 G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint(); 171 G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint(); 172 173 G4ThreeVector x0 = pPreStepPoint->GetPosition(); 167 174 G4ThreeVector p0 = aStep.GetDeltaPosition().unit(); 168 G4double t0 = pPreStepPoint->GetGlobalTime();175 G4double t0 = pPreStepPoint->GetGlobalTime(); 169 176 170 177 G4double TotalEnergyDeposit = aStep.GetTotalEnergyDeposit(); … … 175 182 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep); 176 183 177 const G4MaterialPropertyVector* Fast_Intensity =184 const G4MaterialPropertyVector* Fast_Intensity = 178 185 aMaterialPropertiesTable->GetProperty("FASTCOMPONENT"); 179 186 const G4MaterialPropertyVector* Slow_Intensity = … … 186 193 if (Fast_Intensity && Slow_Intensity) nscnt = 2; 187 194 188 G4double ScintillationYield = aMaterialPropertiesTable-> 195 G4double ScintillationYield = 0.; 196 197 if (scintillationByParticleType) { 198 // The scintillation response is a function of the energy 199 // deposited by particle types. 200 201 // Get the definition of the current particle 202 G4ParticleDefinition *pDef = aParticle->GetDefinition(); 203 const G4MaterialPropertyVector *Scint_Yield_Vector = NULL; 204 205 // Obtain the G4MaterialPropertyVectory containing the 206 // scintillation light yield as a function of the deposited 207 // energy for the current particle type 208 209 // Protons 210 if(pDef==G4Proton::ProtonDefinition()) 211 Scint_Yield_Vector = aMaterialPropertiesTable-> 212 GetProperty("PROTONSCINTILLATIONYIELD"); 213 214 // Deuterons 215 else if(pDef==G4Deuteron::DeuteronDefinition()) 216 Scint_Yield_Vector = aMaterialPropertiesTable-> 217 GetProperty("DEUTERONSCINTILLATIONYIELD"); 218 219 // Tritons 220 else if(pDef==G4Triton::TritonDefinition()) 221 Scint_Yield_Vector = aMaterialPropertiesTable-> 222 GetProperty("TRITONSCINTILLATIONYIELD"); 223 224 // Alphas 225 else if(pDef==G4Alpha::AlphaDefinition()) 226 Scint_Yield_Vector = aMaterialPropertiesTable-> 227 GetProperty("ALPHASCINTILLATIONYIELD"); 228 229 // Ions (particles derived from G4VIon and G4Ions) 230 // and recoil ions below tracking cut from neutrons after hElastic 231 else if(pDef->GetParticleType()== "nucleus" || 232 pDef==G4Neutron::NeutronDefinition()) 233 Scint_Yield_Vector = aMaterialPropertiesTable-> 234 GetProperty("IONSCINTILLATIONYIELD"); 235 236 // Electrons (must also account for shell-binding energy 237 // attributed to gamma from standard PhotoElectricEffect) 238 else if(pDef==G4Electron::ElectronDefinition() || 239 pDef==G4Gamma::GammaDefinition()) 240 Scint_Yield_Vector = aMaterialPropertiesTable-> 241 GetProperty("ELECTRONSCINTILLATIONYIELD"); 242 243 // Default for particles not enumerated/listed above 244 else 245 Scint_Yield_Vector = aMaterialPropertiesTable-> 246 GetProperty("ELECTRONSCINTILLATIONYIELD"); 247 248 // If the user has not specified yields for (p,d,t,a,carbon) 249 // then these unspecified particles will default to the 250 // electron's scintillation yield 251 if(!Scint_Yield_Vector){ 252 Scint_Yield_Vector = aMaterialPropertiesTable-> 253 GetProperty("ELECTRONSCINTILLATIONYIELD"); 254 } 255 256 // Throw an exception if no scintillation yield is found 257 if (!Scint_Yield_Vector) { 258 G4cerr << "\nG4Scintillation::PostStepDoIt(): " 259 << "Request for scintillation yield for energy deposit and particle type without correct entry in MaterialPropertiesTable\n" 260 << "ScintillationByParticleType requires at minimum that ELECTRONSCINTILLATIONYIELD is set by the user\n" 261 << G4endl; 262 G4Exception("G4Scintillation::PostStepDoIt", 263 "No correct entry in MaterialPropertiesTable", 264 FatalException,"Missing MaterialPropertiesTable entry."); 265 } 266 267 if (verboseLevel>1) { 268 G4cout << "\n" 269 << "Particle = " << pDef->GetParticleName() << "\n" 270 << "Energy Dep. = " << TotalEnergyDeposit/MeV << "\n" 271 << "Yield = " 272 << Scint_Yield_Vector->GetProperty(TotalEnergyDeposit) 273 << "\n" << G4endl; 274 } 275 276 // Obtain the scintillation yield using the total energy 277 // deposited by the particle in this step. 278 279 // Units: [# scintillation photons] 280 ScintillationYield = Scint_Yield_Vector-> 281 GetProperty(TotalEnergyDeposit); 282 } else { 283 // The default linear scintillation process 284 G4double ScintillationYield = aMaterialPropertiesTable-> 189 285 GetConstProperty("SCINTILLATIONYIELD"); 190 ScintillationYield *= YieldFactor; 286 287 // Units: [# scintillation photons / MeV] 288 ScintillationYield *= YieldFactor; 289 } 191 290 192 291 G4double ResolutionScale = aMaterialPropertiesTable-> … … 201 300 G4double MeanNumberOfPhotons; 202 301 203 if (emSaturation) { 302 // Birk's correction via emSaturation and specifying scintillation by 303 // by particle type are physically mutually exclusive 304 305 if (scintillationByParticleType) 306 MeanNumberOfPhotons = ScintillationYield; 307 else if (emSaturation) 204 308 MeanNumberOfPhotons = ScintillationYield* 205 309 (emSaturation->VisibleEnergyDeposition(&aStep)); 206 } else {310 else 207 311 MeanNumberOfPhotons = ScintillationYield*TotalEnergyDeposit; 208 }209 312 210 313 G4int NumPhotons; … … 220 323 } 221 324 222 if (NumPhotons <= 0)325 if (NumPhotons <= 0) 223 326 { 224 // return unchanged particle and no secondaries225 226 aParticleChange.SetNumberOfSecondaries(0);327 // return unchanged particle and no secondaries 328 329 aParticleChange.SetNumberOfSecondaries(0); 227 330 228 331 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep); 229 }230 231 ////////////////////////////////////////////////////////////////232 233 aParticleChange.SetNumberOfSecondaries(NumPhotons);234 235 if (fTrackSecondariesFirst) {332 } 333 334 //////////////////////////////////////////////////////////////// 335 336 aParticleChange.SetNumberOfSecondaries(NumPhotons); 337 338 if (fTrackSecondariesFirst) { 236 339 if (aTrack.GetTrackStatus() == fAlive ) 237 aParticleChange.ProposeTrackStatus(fSuspend);238 } 239 240 ////////////////////////////////////////////////////////////////241 242 G4int materialIndex = aMaterial->GetIndex();243 244 // Retrieve the Scintillation Integral for this material245 // new G4PhysicsOrderedFreeVector allocated to hold CII's340 aParticleChange.ProposeTrackStatus(fSuspend); 341 } 342 343 //////////////////////////////////////////////////////////////// 344 345 G4int materialIndex = aMaterial->GetIndex(); 346 347 // Retrieve the Scintillation Integral for this material 348 // new G4PhysicsOrderedFreeVector allocated to hold CII's 246 349 247 350 G4int Num = NumPhotons; … … 270 373 if (fFiniteRiseTime) { 271 374 ScintillationRiseTime = aMaterialPropertiesTable-> 272 GetConstProperty("SLOWSCINTILLATIONRISETIME"); } 375 GetConstProperty("SLOWSCINTILLATIONRISETIME"); 376 } 273 377 ScintillationIntegral = 274 378 (G4PhysicsOrderedFreeVector*)((*theSlowIntegralTable)(materialIndex)); … … 310 414 // Max Scintillation Integral 311 415 312 G4double CIImax = ScintillationIntegral->GetMaxValue();313 314 for (G4int i = 0; i < Num; i++) {315 316 // Determine photon energy416 G4double CIImax = ScintillationIntegral->GetMaxValue(); 417 418 for (G4int i = 0; i < Num; i++) { 419 420 // Determine photon energy 317 421 318 422 G4double CIIvalue = G4UniformRand()*CIImax; 319 G4double sampledEnergy =423 G4double sampledEnergy = 320 424 ScintillationIntegral->GetEnergy(CIIvalue); 321 425 322 if (verboseLevel>1) {426 if (verboseLevel>1) { 323 427 G4cout << "sampledEnergy = " << sampledEnergy << G4endl; 324 G4cout << "CIIvalue = " << CIIvalue << G4endl;325 }326 327 // Generate random photon direction428 G4cout << "CIIvalue = " << CIIvalue << G4endl; 429 } 430 431 // Generate random photon direction 328 432 329 433 G4double cost = 1. - 2.*G4UniformRand(); 330 434 G4double sint = std::sqrt((1.-cost)*(1.+cost)); 331 435 332 G4double phi = twopi*G4UniformRand();333 G4double sinp = std::sin(phi);334 G4double cosp = std::cos(phi);335 336 G4double px = sint*cosp;337 G4double py = sint*sinp;338 G4double pz = cost;339 340 // Create photon momentum direction vector341 342 G4ParticleMomentum photonMomentum(px, py, pz);343 344 // Determine polarization of new photon345 346 G4double sx = cost*cosp;347 G4double sy = cost*sinp;348 G4double sz = -sint;349 350 G4ThreeVector photonPolarization(sx, sy, sz);436 G4double phi = twopi*G4UniformRand(); 437 G4double sinp = std::sin(phi); 438 G4double cosp = std::cos(phi); 439 440 G4double px = sint*cosp; 441 G4double py = sint*sinp; 442 G4double pz = cost; 443 444 // Create photon momentum direction vector 445 446 G4ParticleMomentum photonMomentum(px, py, pz); 447 448 // Determine polarization of new photon 449 450 G4double sx = cost*cosp; 451 G4double sy = cost*sinp; 452 G4double sz = -sint; 453 454 G4ThreeVector photonPolarization(sx, sy, sz); 351 455 352 456 G4ThreeVector perp = photonMomentum.cross(photonPolarization); 353 457 354 phi = twopi*G4UniformRand();355 sinp = std::sin(phi);356 cosp = std::cos(phi);458 phi = twopi*G4UniformRand(); 459 sinp = std::sin(phi); 460 cosp = std::cos(phi); 357 461 358 462 photonPolarization = cosp * photonPolarization + sinp * perp; … … 364 468 G4DynamicParticle* aScintillationPhoton = 365 469 new G4DynamicParticle(G4OpticalPhoton::OpticalPhoton(), 366 photonMomentum);367 aScintillationPhoton->SetPolarization368 (photonPolarization.x(),369 photonPolarization.y(),370 photonPolarization.z());371 372 aScintillationPhoton->SetKineticEnergy(sampledEnergy);470 photonMomentum); 471 aScintillationPhoton->SetPolarization 472 (photonPolarization.x(), 473 photonPolarization.y(), 474 photonPolarization.z()); 475 476 aScintillationPhoton->SetKineticEnergy(sampledEnergy); 373 477 374 478 // Generate new G4Track object: … … 401 505 x0 + rand * aStep.GetDeltaPosition(); 402 506 403 G4Track* aSecondaryTrack =404 new G4Track(aScintillationPhoton,aSecondaryTime,aSecondaryPosition);507 G4Track* aSecondaryTrack = 508 new G4Track(aScintillationPhoton,aSecondaryTime,aSecondaryPosition); 405 509 406 510 aSecondaryTrack->SetTouchableHandle( … … 410 514 aSecondaryTrack->SetParentID(aTrack.GetTrackID()); 411 515 412 aParticleChange.AddSecondary(aSecondaryTrack);413 414 }415 } 416 417 if (verboseLevel>0) {418 G4cout << "\n Exiting from G4Scintillation::DoIt -- NumberOfSecondaries = "419 << aParticleChange.GetNumberOfSecondaries() << G4endl;420 }421 422 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);516 aParticleChange.AddSecondary(aSecondaryTrack); 517 518 } 519 } 520 521 if (verboseLevel>0) { 522 G4cout << "\n Exiting from G4Scintillation::DoIt -- NumberOfSecondaries = " 523 << aParticleChange.GetNumberOfSecondaries() << G4endl; 524 } 525 526 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep); 423 527 } 424 528 … … 429 533 void G4Scintillation::BuildThePhysicsTable() 430 534 { 431 if (theFastIntegralTable && theSlowIntegralTable) return;432 433 const G4MaterialTable* theMaterialTable =535 if (theFastIntegralTable && theSlowIntegralTable) return; 536 537 const G4MaterialTable* theMaterialTable = 434 538 G4Material::GetMaterialTable(); 435 G4int numOfMaterials = G4Material::GetNumberOfMaterials();436 437 // create new physics table539 G4int numOfMaterials = G4Material::GetNumberOfMaterials(); 540 541 // create new physics table 438 542 439 if(!theFastIntegralTable)theFastIntegralTable = new G4PhysicsTable(numOfMaterials);543 if(!theFastIntegralTable)theFastIntegralTable = new G4PhysicsTable(numOfMaterials); 440 544 if(!theSlowIntegralTable)theSlowIntegralTable = new G4PhysicsTable(numOfMaterials); 441 545 442 // loop for materials443 444 for (G4int i=0 ; i < numOfMaterials; i++)445 {446 G4PhysicsOrderedFreeVector* aPhysicsOrderedFreeVector =546 // loop for materials 547 548 for (G4int i=0 ; i < numOfMaterials; i++) 549 { 550 G4PhysicsOrderedFreeVector* aPhysicsOrderedFreeVector = 447 551 new G4PhysicsOrderedFreeVector(); 448 552 G4PhysicsOrderedFreeVector* bPhysicsOrderedFreeVector = 449 553 new G4PhysicsOrderedFreeVector(); 450 554 451 // Retrieve vector of scintillation wavelength intensity for555 // Retrieve vector of scintillation wavelength intensity for 452 556 // the material from the material's optical properties table. 453 557 454 G4Material* aMaterial = (*theMaterialTable)[i];455 456 G4MaterialPropertiesTable* aMaterialPropertiesTable =457 aMaterial->GetMaterialPropertiesTable();458 459 if (aMaterialPropertiesTable) {460 461 G4MaterialPropertyVector* theFastLightVector =462 aMaterialPropertiesTable->GetProperty("FASTCOMPONENT");463 464 if (theFastLightVector) {465 466 // Retrieve the first intensity point in vector467 // of (photon energy, intensity) pairs468 469 theFastLightVector->ResetIterator();470 ++(*theFastLightVector);// advance to 1st entry471 472 G4double currentIN = theFastLightVector->473 GetProperty();474 475 if (currentIN >= 0.0) {476 477 // Create first (photon energy, Scintillation558 G4Material* aMaterial = (*theMaterialTable)[i]; 559 560 G4MaterialPropertiesTable* aMaterialPropertiesTable = 561 aMaterial->GetMaterialPropertiesTable(); 562 563 if (aMaterialPropertiesTable) { 564 565 G4MaterialPropertyVector* theFastLightVector = 566 aMaterialPropertiesTable->GetProperty("FASTCOMPONENT"); 567 568 if (theFastLightVector) { 569 570 // Retrieve the first intensity point in vector 571 // of (photon energy, intensity) pairs 572 573 theFastLightVector->ResetIterator(); 574 ++(*theFastLightVector); // advance to 1st entry 575 576 G4double currentIN = theFastLightVector-> 577 GetProperty(); 578 579 if (currentIN >= 0.0) { 580 581 // Create first (photon energy, Scintillation 478 582 // Integral pair 479 583 480 G4double currentPM = theFastLightVector->481 GetPhotonEnergy();482 483 G4double currentCII = 0.0;484 485 aPhysicsOrderedFreeVector->486 InsertValues(currentPM , currentCII);487 488 // Set previous values to current ones prior to loop489 490 G4double prevPM = currentPM;491 G4double prevCII = currentCII;492 G4double prevIN = currentIN;493 494 // loop over all (photon energy, intensity)495 // pairs stored for this material496 497 while(++(*theFastLightVector))498 {499 currentPM = theFastLightVector->500 GetPhotonEnergy();501 502 currentIN=theFastLightVector->503 GetProperty();504 505 currentCII = 0.5 * (prevIN + currentIN);506 507 currentCII = prevCII +508 (currentPM - prevPM) * currentCII;509 510 aPhysicsOrderedFreeVector->511 InsertValues(currentPM, currentCII);512 513 prevPM = currentPM;514 prevCII = currentCII;515 prevIN = currentIN;516 }517 518 }519 }584 G4double currentPM = theFastLightVector-> 585 GetPhotonEnergy(); 586 587 G4double currentCII = 0.0; 588 589 aPhysicsOrderedFreeVector-> 590 InsertValues(currentPM , currentCII); 591 592 // Set previous values to current ones prior to loop 593 594 G4double prevPM = currentPM; 595 G4double prevCII = currentCII; 596 G4double prevIN = currentIN; 597 598 // loop over all (photon energy, intensity) 599 // pairs stored for this material 600 601 while(++(*theFastLightVector)) 602 { 603 currentPM = theFastLightVector-> 604 GetPhotonEnergy(); 605 606 currentIN = theFastLightVector-> 607 GetProperty(); 608 609 currentCII = 0.5 * (prevIN + currentIN); 610 611 currentCII = prevCII + 612 (currentPM - prevPM) * currentCII; 613 614 aPhysicsOrderedFreeVector-> 615 InsertValues(currentPM, currentCII); 616 617 prevPM = currentPM; 618 prevCII = currentCII; 619 prevIN = currentIN; 620 } 621 622 } 623 } 520 624 521 625 G4MaterialPropertyVector* theSlowLightVector = … … 578 682 } 579 683 } 580 }581 582 // The scintillation integral(s) for a given material583 // will be inserted in the table(s) according to the584 // position of the material in the material table.585 586 theFastIntegralTable->insertAt(i,aPhysicsOrderedFreeVector);684 } 685 686 // The scintillation integral(s) for a given material 687 // will be inserted in the table(s) according to the 688 // position of the material in the material table. 689 690 theFastIntegralTable->insertAt(i,aPhysicsOrderedFreeVector); 587 691 theSlowIntegralTable->insertAt(i,bPhysicsOrderedFreeVector); 588 692 589 } 693 } 694 } 695 696 // Called by the user to set the scintillation yield as a function 697 // of energy deposited by particle type 698 699 void G4Scintillation::SetScintillationByParticleType(const G4bool scintType) 700 { 701 if (emSaturation) { 702 G4Exception("G4Scintillation::SetScintillationByParticleType", "Redefinition", 703 JustWarning, "Birks Saturation is replaced by ScintillationByParticleType!"); 704 RemoveSaturation(); 705 } 706 scintillationByParticleType = scintType; 590 707 } 591 708 … … 600 717 *condition = StronglyForced; 601 718 602 return DBL_MAX;719 return DBL_MAX; 603 720 604 721 } -
trunk/source/processes/electromagnetic/xrays/src/G4SynchrotronRadiation.cc
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4SynchrotronRadiation.cc,v 1. 6 2010/06/16 15:34:15 gcosmoExp $28 // GEANT4 tag $Name: geant4-09-04-beta-01$27 // $Id: G4SynchrotronRadiation.cc,v 1.8 2010/10/14 18:38:21 vnivanch Exp $ 28 // GEANT4 tag $Name: xrays-V09-03-05 $ 29 29 // 30 30 // -------------------------------------------------------------- … … 45 45 #include "G4SynchrotronRadiation.hh" 46 46 #include "G4UnitsTable.hh" 47 #include "G4EmProcessSubType.hh" 47 48 48 49 /////////////////////////////////////////////////////////////////////// … … 65 66 (2.5*fine_structure_const*eplus*c_light) ; 66 67 fEnergyConst = 1.5*c_light*c_light*eplus*hbar_Planck/electron_mass_c2 ; 68 69 SetProcessSubType(fSynchrotronRadiation); 67 70 verboseLevel=1; 68 71 } … … 74 77 75 78 G4SynchrotronRadiation::~G4SynchrotronRadiation() 76 { 77 ; 78 } 79 {} 79 80 80 81 /////////////////////////////// METHODS ///////////////////////////////// -
trunk/source/processes/electromagnetic/xrays/src/G4SynchrotronRadiationInMat.cc
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4SynchrotronRadiationInMat.cc,v 1. 3 2010/06/16 15:34:15 gcosmoExp $28 // GEANT4 tag $Name: geant4-09-04-beta-01$27 // $Id: G4SynchrotronRadiationInMat.cc,v 1.5 2010/10/14 18:38:21 vnivanch Exp $ 28 // GEANT4 tag $Name: xrays-V09-03-05 $ 29 29 // 30 30 // -------------------------------------------------------------- … … 43 43 #include "G4SynchrotronRadiationInMat.hh" 44 44 #include "G4Integrator.hh" 45 #include "G4EmProcessSubType.hh" 45 46 46 47 //////////////////////////////////////////////////////////////////// … … 132 133 133 134 fFieldPropagator = transportMgr->GetPropagatorInField(); 135 SetProcessSubType(fSynchrotronRadiation); 134 136 135 137 } … … 141 143 142 144 G4SynchrotronRadiationInMat::~G4SynchrotronRadiationInMat() 143 { 144 ; 145 } 145 {} 146 146 147 147 -
trunk/source/processes/electromagnetic/xrays/src/G4TransitionRadiation.cc
r1337 r1340 25 25 // 26 26 // 27 // $Id: G4TransitionRadiation.cc,v 1. 8 2010/06/16 15:34:15 gcosmoExp $28 // GEANT4 tag $Name: geant4-09-04-beta-01$27 // $Id: G4TransitionRadiation.cc,v 1.10 2010/10/14 18:38:21 vnivanch Exp $ 28 // GEANT4 tag $Name: xrays-V09-03-05 $ 29 29 // 30 30 // G4TransitionRadiation class -- implementation file … … 45 45 #include "G4TransitionRadiation.hh" 46 46 #include "G4Material.hh" 47 #include "G4EmProcessSubType.hh" 47 48 48 49 // Local constants … … 62 63 : G4VDiscreteProcess(processName, type) 63 64 { 65 SetProcessSubType(fTransitionRadiation); 64 66 // fMatIndex1 = pMat1->GetIndex() ; 65 67 // fMatIndex2 = pMat2->GetIndex() ; … … 72 74 73 75 G4TransitionRadiation::~G4TransitionRadiation() 74 { 75 ; 76 } 76 {} 77 77 78 78
Note:
See TracChangeset
for help on using the changeset viewer.
