Ignore:
Timestamp:
Nov 5, 2010, 3:45:55 PM (14 years ago)
Author:
garnier
Message:

update ti head

Location:
trunk/source/processes/electromagnetic/xrays
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/xrays/History

    r1337 r1340  
    1 $Id: History,v 1.72 2010/06/16 15:34:31 gcosmo Exp $
     1$Id: History,v 1.77 2010/11/03 19:22:54 gum Exp $
    22-------------------------------------------------------------------
    33
     
    1717     * Reverse chronological order (last date on top), please *
    1818     ----------------------------------------------------------
     19
     2003 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
     2528 October 10: P. Gumplinger (xrays-V09-03-04)
     26- several small corrections to the previous implementation of G4Scintillation
     27
     2819 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
     3414 October 10: V. Ivanchenko (xrays-V09-03-02)
     35- G4SynchrotronRadiationInMat, G4SynchrotronRadiation,
     36  G4TransitionRadiation - added process sub-types
    1937
    203816 June 10: G. Cosmo (xrays-V09-03-01)
  • trunk/source/processes/electromagnetic/xrays/include/G4Scintillation.hh

    r1337 r1340  
    2525//
    2626//
    27 // $Id: G4Scintillation.hh,v 1.18 2010/06/25 09:41:46 gunter Exp $
    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 $
    2929//
    3030//
     
    3838// Created:     1998-11-07
    3939// 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
    4145//              2002-11-21 change to user G4Poisson for small MeanNumPotons
    4246//              2002-11-07 allow for fast and slow scintillation
     
    182186        // Adds Birks Saturation to the process.
    183187
     188        void RemoveSaturation() { emSaturation = NULL; }
     189        // Removes the Birks Saturation from the process.
     190
    184191        G4EmSaturation* GetSaturation() const { return emSaturation; }
    185192        // 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
    186202
    187203        void DumpPhysicsTable() const;
     
    210226
    211227        G4double ExcitationRatio;
     228
     229        G4bool scintillationByParticleType;
    212230
    213231private:
  • trunk/source/processes/electromagnetic/xrays/src/G4Scintillation.cc

    r1337 r1340  
    2525//
    2626//
    27 // $Id: G4Scintillation.cc,v 1.32 2010/06/16 15:34:15 gcosmo Exp $
    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 $
    2929//
    3030////////////////////////////////////////////////////////////////////////
     
    3232////////////////////////////////////////////////////////////////////////
    3333//
    34 // File:        G4Scintillation.cc 
     34// File:        G4Scintillation.cc
    3535// Description: RestDiscrete Process - Generation of Scintillation Photons
    3636// Version:     1.0
    37 // Created:     1998-11-07 
     37// Created:     1998-11-07
    3838// 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
    4044//              > scintillation rise time included, thanks to
    4145//              > Martin Goettlich/DESY
     
    5963//              > change: aSecondaryPosition=x0+rand*aStep.GetDeltaPosition();
    6064//                        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)
    6266//              2003-06-03, V.Ivanchenko fix compilation warnings
    6367//
     
    6771
    6872#include "G4ios.hh"
     73#include "G4ParticleTypes.hh"
    6974#include "G4EmProcessSubType.hh"
    7075
     
    7277
    7378/////////////////////////
    74 // Class Implementation 
     79// Class Implementation
    7580/////////////////////////
    7681
     
    9398        SetProcessSubType(fScintillation);
    9499
    95         fTrackSecondariesFirst = false;
     100        fTrackSecondariesFirst = false;
    96101        fFiniteRiseTime = false;
    97102
     
    99104        ExcitationRatio = 1.0;
    100105
     106        scintillationByParticleType = false;
     107
    101108        theFastIntegralTable = NULL;
    102109        theSlowIntegralTable = NULL;
    103110
    104         if (verboseLevel>0) {
     111        if (verboseLevel>0) {
    105112           G4cout << GetProcessName() << " is created " << G4endl;
    106         }
    107 
    108         BuildThePhysicsTable();
     113        }
     114
     115        BuildThePhysicsTable();
    109116
    110117        emSaturation = NULL;
     
    115122        ////////////////
    116123
    117 G4Scintillation::~G4Scintillation() 
     124G4Scintillation::~G4Scintillation()
    118125{
    119126        if (theFastIntegralTable != NULL) {
    120            theFastIntegralTable->clearAndDestroy();
     127           theFastIntegralTable->clearAndDestroy();
    121128           delete theFastIntegralTable;
    122         }
     129        }
    123130        if (theSlowIntegralTable != NULL) {
    124131           theSlowIntegralTable->clearAndDestroy();
     
    161168        const G4Material* aMaterial = aTrack.GetMaterial();
    162169
    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();
    167174        G4ThreeVector p0 = aStep.GetDeltaPosition().unit();
    168         G4double      t0 = pPreStepPoint->GetGlobalTime();
     175        G4double      t0 = pPreStepPoint->GetGlobalTime();
    169176
    170177        G4double TotalEnergyDeposit = aStep.GetTotalEnergyDeposit();
     
    175182             return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
    176183
    177         const G4MaterialPropertyVector* Fast_Intensity =
     184        const G4MaterialPropertyVector* Fast_Intensity =
    178185                aMaterialPropertiesTable->GetProperty("FASTCOMPONENT");
    179186        const G4MaterialPropertyVector* Slow_Intensity =
     
    186193        if (Fast_Intensity && Slow_Intensity) nscnt = 2;
    187194
    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->
    189285                                      GetConstProperty("SCINTILLATIONYIELD");
    190         ScintillationYield *= YieldFactor;
     286
     287           // Units: [# scintillation photons / MeV]
     288           ScintillationYield *= YieldFactor;
     289        }
    191290
    192291        G4double ResolutionScale    = aMaterialPropertiesTable->
     
    201300        G4double MeanNumberOfPhotons;
    202301
    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)
    204308           MeanNumberOfPhotons = ScintillationYield*
    205309                              (emSaturation->VisibleEnergyDeposition(&aStep));
    206         } else {
     310        else
    207311           MeanNumberOfPhotons = ScintillationYield*TotalEnergyDeposit;
    208         }
    209312
    210313        G4int NumPhotons;
     
    220323        }
    221324
    222         if (NumPhotons <= 0)
     325        if (NumPhotons <= 0)
    223326        {
    224            // return unchanged particle and no secondaries
    225 
    226            aParticleChange.SetNumberOfSecondaries(0);
     327           // return unchanged particle and no secondaries
     328
     329           aParticleChange.SetNumberOfSecondaries(0);
    227330
    228331           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) {
    236339           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 material 
    245         // new G4PhysicsOrderedFreeVector allocated to hold CII's
     340                  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
    246349
    247350        G4int Num = NumPhotons;
     
    270373                   if (fFiniteRiseTime) {
    271374                      ScintillationRiseTime = aMaterialPropertiesTable->
    272                                   GetConstProperty("SLOWSCINTILLATIONRISETIME");                   }
     375                                  GetConstProperty("SLOWSCINTILLATIONRISETIME");
     376                   }
    273377                   ScintillationIntegral =
    274378                   (G4PhysicsOrderedFreeVector*)((*theSlowIntegralTable)(materialIndex));
     
    310414            // Max Scintillation Integral
    311415 
    312             G4double CIImax = ScintillationIntegral->GetMaxValue();
    313                
    314             for (G4int i = 0; i < Num; i++) {
    315 
    316                 // Determine photon energy
     416            G4double CIImax = ScintillationIntegral->GetMaxValue();
     417
     418            for (G4int i = 0; i < Num; i++) {
     419
     420                // Determine photon energy
    317421
    318422                G4double CIIvalue = G4UniformRand()*CIImax;
    319                 G4double sampledEnergy =
     423                G4double sampledEnergy =
    320424                              ScintillationIntegral->GetEnergy(CIIvalue);
    321425
    322                 if (verboseLevel>1) {
     426                if (verboseLevel>1) {
    323427                   G4cout << "sampledEnergy = " << sampledEnergy << G4endl;
    324                    G4cout << "CIIvalue =        " << CIIvalue << G4endl;
    325                 }
    326 
    327                 // Generate random photon direction
     428                   G4cout << "CIIvalue =        " << CIIvalue << G4endl;
     429                }
     430
     431                // Generate random photon direction
    328432
    329433                G4double cost = 1. - 2.*G4UniformRand();
    330434                G4double sint = std::sqrt((1.-cost)*(1.+cost));
    331435
    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 vector
    341 
    342                 G4ParticleMomentum photonMomentum(px, py, pz);
    343 
    344                 // Determine polarization of new photon
    345 
    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);
    351455
    352456                G4ThreeVector perp = photonMomentum.cross(photonPolarization);
    353457
    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);
    357461
    358462                photonPolarization = cosp * photonPolarization + sinp * perp;
     
    364468                G4DynamicParticle* aScintillationPhoton =
    365469                  new G4DynamicParticle(G4OpticalPhoton::OpticalPhoton(),
    366                                                          photonMomentum);
    367                 aScintillationPhoton->SetPolarization
    368                                      (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);
    373477
    374478                // Generate new G4Track object:
     
    401505                                    x0 + rand * aStep.GetDeltaPosition();
    402506
    403                 G4Track* aSecondaryTrack =
    404                 new G4Track(aScintillationPhoton,aSecondaryTime,aSecondaryPosition);
     507                G4Track* aSecondaryTrack =
     508                new G4Track(aScintillationPhoton,aSecondaryTime,aSecondaryPosition);
    405509
    406510                aSecondaryTrack->SetTouchableHandle(
     
    410514                aSecondaryTrack->SetParentID(aTrack.GetTrackID());
    411515
    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);
    423527}
    424528
     
    429533void G4Scintillation::BuildThePhysicsTable()
    430534{
    431         if (theFastIntegralTable && theSlowIntegralTable) return;
    432 
    433         const G4MaterialTable* theMaterialTable =
     535        if (theFastIntegralTable && theSlowIntegralTable) return;
     536
     537        const G4MaterialTable* theMaterialTable =
    434538                               G4Material::GetMaterialTable();
    435         G4int numOfMaterials = G4Material::GetNumberOfMaterials();
    436 
    437         // create new physics table
     539        G4int numOfMaterials = G4Material::GetNumberOfMaterials();
     540
     541        // create new physics table
    438542       
    439         if(!theFastIntegralTable)theFastIntegralTable = new G4PhysicsTable(numOfMaterials);
     543        if(!theFastIntegralTable)theFastIntegralTable = new G4PhysicsTable(numOfMaterials);
    440544        if(!theSlowIntegralTable)theSlowIntegralTable = new G4PhysicsTable(numOfMaterials);
    441545
    442         // loop for materials
    443 
    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 =
    447551                                        new G4PhysicsOrderedFreeVector();
    448552                G4PhysicsOrderedFreeVector* bPhysicsOrderedFreeVector =
    449553                                        new G4PhysicsOrderedFreeVector();
    450554
    451                 // Retrieve vector of scintillation wavelength intensity for
     555                // Retrieve vector of scintillation wavelength intensity for
    452556                // the material from the material's optical properties table.
    453557
    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 vector
    467                       // of (photon energy, intensity) pairs
    468 
    469                       theFastLightVector->ResetIterator();
    470                       ++(*theFastLightVector);  // advance to 1st entry
    471 
    472                       G4double currentIN = theFastLightVector->
    473                                            GetProperty();
    474 
    475                       if (currentIN >= 0.0) {
    476 
    477                         // Create first (photon energy, Scintillation
     558                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
    478582                         // Integral pair 
    479583
    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 loop
    489 
    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 material 
    496 
    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                   }
    520624
    521625                   G4MaterialPropertyVector* theSlowLightVector =
     
    578682                      }
    579683                   }
    580                 }
    581 
    582         // The scintillation integral(s) for a given material
    583         // will be inserted in the table(s) according to the
    584         // 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);
    587691        theSlowIntegralTable->insertAt(i,bPhysicsOrderedFreeVector);
    588692
    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
     699void 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;
    590707}
    591708
     
    600717        *condition = StronglyForced;
    601718
    602         return DBL_MAX;
     719        return DBL_MAX;
    603720
    604721}
  • trunk/source/processes/electromagnetic/xrays/src/G4SynchrotronRadiation.cc

    r1337 r1340  
    2525//
    2626//
    27 // $Id: G4SynchrotronRadiation.cc,v 1.6 2010/06/16 15:34:15 gcosmo Exp $
    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 $
    2929//
    3030// --------------------------------------------------------------
     
    4545#include "G4SynchrotronRadiation.hh"
    4646#include "G4UnitsTable.hh"
     47#include "G4EmProcessSubType.hh"
    4748
    4849///////////////////////////////////////////////////////////////////////
     
    6566                           (2.5*fine_structure_const*eplus*c_light) ;
    6667  fEnergyConst = 1.5*c_light*c_light*eplus*hbar_Planck/electron_mass_c2  ;
     68
     69  SetProcessSubType(fSynchrotronRadiation);
    6770  verboseLevel=1;
    6871}
     
    7477
    7578G4SynchrotronRadiation::~G4SynchrotronRadiation()
    76 {
    77      ;
    78 }
     79{}
    7980
    8081/////////////////////////////// METHODS /////////////////////////////////
  • trunk/source/processes/electromagnetic/xrays/src/G4SynchrotronRadiationInMat.cc

    r1337 r1340  
    2525//
    2626//
    27 // $Id: G4SynchrotronRadiationInMat.cc,v 1.3 2010/06/16 15:34:15 gcosmo Exp $
    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 $
    2929//
    3030// --------------------------------------------------------------
     
    4343#include "G4SynchrotronRadiationInMat.hh"
    4444#include "G4Integrator.hh"
     45#include "G4EmProcessSubType.hh"
    4546
    4647////////////////////////////////////////////////////////////////////
     
    132133
    133134  fFieldPropagator = transportMgr->GetPropagatorInField();
     135  SetProcessSubType(fSynchrotronRadiation);
    134136
    135137}
     
    141143 
    142144G4SynchrotronRadiationInMat::~G4SynchrotronRadiationInMat()
    143 {
    144      ;
    145 }
     145{}
    146146 
    147147 
  • trunk/source/processes/electromagnetic/xrays/src/G4TransitionRadiation.cc

    r1337 r1340  
    2525//
    2626//
    27 // $Id: G4TransitionRadiation.cc,v 1.8 2010/06/16 15:34:15 gcosmo Exp $
    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 $
    2929//
    3030// G4TransitionRadiation class -- implementation file
     
    4545#include "G4TransitionRadiation.hh"
    4646#include "G4Material.hh"
     47#include "G4EmProcessSubType.hh"
    4748
    4849// Local constants
     
    6263  : G4VDiscreteProcess(processName, type)
    6364{
     65  SetProcessSubType(fTransitionRadiation);
    6466  //  fMatIndex1 = pMat1->GetIndex() ;
    6567  //  fMatIndex2 = pMat2->GetIndex() ;
     
    7274
    7375G4TransitionRadiation::~G4TransitionRadiation()
    74 {
    75         ;
    76 }
     76{}
    7777
    7878
Note: See TracChangeset for help on using the changeset viewer.