PAIPhot process generate photon from ionization

Dear experts

I used PAIPhot model to simulate cosmic ray muon ionization in gas (He:iC4H10 with 90:10), but when I check the particles that generated electron, many of them are photons. And when I check what generated these photons, it says they are generated by ionization process. May I ask what kind of physics process will cause ionization generate photon? Sorry I’m new at HEP physics, please help me!

_Geant4 Version:_4.10.06
_Operating System:_AlmaLinux 9.2
_Compiler/Version:_gcc11
CMake Version:


1 Like

What physics list are you using? Do you have any production cuts set? Do you have Auger and de-excitation enabled? Since the “ionization” process can kick out electrons from lower energy levels, it’s certainly possible for the de-excitation to produce one or more photons as the atom’s electrons rearrange themselves. Whether your job is modelling that depends on what parameters you’ve got set.

Thank you for your reply, to answer your question:

  1. I’m using EMLiverMore with PAIPhot activated (not sure if I’m saying things right)
  2. Yes, I have production cut for PAIPhot which is 30eV
  3. I’m not sure if the de-excitation and Auger is enabled…could you please tell me how I can confirm that?

For what you’re doing (ionization in a drift chamber), those are controlled through G4EmParameters, which has a UI command interface.

/run/initialize
/process/em/printParameters

The very last block printed will be

=======================================================================
======                 Atomic Deexcitation Parameters          ========
=======================================================================
Fluorescence enabled                               1
Fluorescence Bearden data files enabled            0
Auger electron cascade enabled                     1
PIXE atomic de-excitation enabled                  0
De-excitation module ignores cuts                  1
Type of PIXE cross section for hadrons             Empirical
Type of PIXE cross section for e+-                 Livermore
=======================================================================

(those settings are what we use in CDMS, you will likely see slightly different values).

Thank you, I checked and found it’s not enabled.

=======================================================================
======                 Atomic Deexcitation Parameters          ========
=======================================================================
Fluorescence enabled                               1
Fluorescence Bearden data files enabled            0
Auger electron cascade enabled                     0
PIXE atomic de-excitation enabled                  0
De-excitation module ignores cuts                  0
Type of PIXE cross section for hadrons             Empirical
Type of PIXE cross section for e+-                 Livermore
=======================================================================

And also if it’s enabled photons should be monoenergetic since only carbon has the second layer of electrons, but when I check the momentum of these photons it looks like smooth distribution (horizontal is [MeV] so 0.001 means 1keV

Any ideas…? Or is there a way to check the precise process that generated these photon? Obviously “muIoni” should generate e- instead of gamma directly…

Have you looked at the secondaries directly in your SteppingAction or your SensitiveDetector? You can get all the secondaries created during a given step directly from G4Step. They’re just G4Track objects, so you can print out information from them like the creator process. You could check that they have have their ParentID set to equal the trackID of the current track. You could do this with if-blocks and print statements, or you could run in the debugger and do it by hand.

Also, you said above that you had a 30 eV production cut “for PAIPhot.” Do you have track production cuts set in your physics list? The default is typically something like 0.8 mm. That’s almost certainly enough to suppress low-energy ionization electrons.

Could you please specify the function or command that setting “track production cuts”, since I’m new on Geant4, and don’t know what is that…

In the very first plot I put (top of this page), parentID that generated these gammas are most mu- and mu+, which means ParentID and trackID is not the same (or you are saying there is a more precise step I extracted the wrong ParentID)

Hi, I found the way to check secondaries as you mentioned, but the processes are still “muIoni”. What I added in the UserStepAction() is:

void UserStepAction(G4Step const* theStep){
G4Track* theTrack = theStep->GetTrack();
    int id = theTrack->GetTrackID();

    G4TrackVector const* secondaries = theStep->GetSecondary();
    for(auto itr = secondaries->begin(); itr != secondaries->end(); ++itr){
        G4Track* track = *itr;
        std::string particleName = track->GetDefinition()->GetParticleName();
        std::string processName = track->GetCreatorProcess()->GetProcessName();
        if(particleName == "gamma"){
            std::cout<<"Gamma generated with process "<<processName<<", in this step trackID is "<<id<<" and secondary's parentID is "<<track->GetParentID()<<std::endl;
        }
    }
//omited

And output are still like:

Step#    X(mm)    Y(mm)    Z(mm) KinE(MeV)  dE(MeV) StepLeng TrackLeng  NextVolume ProcName
   67      449      685      699       639        0   0.0439       970 /comet/CDCCosmicRayTest/CylindricalDriftChamber/CDCGasVolume/CDCSenseLayer_19 muIoni
    :----- List of 2ndaries - #SpawnInStep=  1(Rest= 0,Along= 0,Post= 1), #SpawnTotal= 53 ---------------
    :       449       685       699  6.81e-05              gamma
    :----------------------------------------------------------------- EndOf2ndaries Info ---------------
Gamma generated with process muIoni, in this step trackID is 1 and secondary's parentID is 1
Gamma generated with process muIoni, in this step trackID is 1 and secondary's parentID is 1
Gamma generated with process muIoni, in this step trackID is 1 and secondary's parentID is 1
   68      449      685      699       639        0      0.5       971 /comet/CDCCosmicRayTest/CylindricalDriftChamber/CDCGasVolume/CDCSenseLayer_19 Step Limit
Gamma generated with process muIoni, in this step trackID is 1 and secondary's parentID is 1
Gamma generated with process muIoni, in this step trackID is 1 and secondary's parentID is 1
Gamma generated with process muIoni, in this step trackID is 1 and secondary's parentID is 1

How can I know what exactly generated gammas (like fluorescence, de-excitation, etc)?

The code you have looks exactly like what I had in mind. So you are seeing photons coming from MuIonization. The histogram you showed has a peak at about 30 eV, which makes me think these are additional photons being generated as a consequence of ionization and atomic rearrangement.

Take a look at the SetCutValue() functions in G4VUserPhysicsList.hh. You can set values for gamma, electron, positron, and “proton” (all hadrons). If you call SetApplyCuts(true) it will enable the production cuts with the values you set. I don’t remember which physics list have that enabled by default.

If you have electron production cuts set, then it is possible for any of the ionization processes to “want to” create a secondary electron, but they won’t actually do that if the electron would be below the cut limit. So what you’d get is the electron’s kinetic energy added to TotalEnergyDeposit() for the step, and the only secondaries would either be low energy X-rays or nothing.

Sorry I may misled you, the “production cut 30eV” I mentioned is actually after simulation, when trying to save these particle information. During the simulation it seems different. I checked the physics list, and seems they are all set to 0:

// This function works for all regions globally. But the actual energy cuts for most masterials with heavy atom do not change, because the energy cut converted from the range cut is higher than the given energy range. The changes will only be seen for the gas like: vacuum, air, and gasmixture.
      // Notice that SetEnergyRange() only changes the minimum production cut. The actual production cut is determined with SetProductionCut()!!
      G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(fPAIEnergyCut,100*unit::GeV);
      G4Region *region = G4RegionStore::GetInstance()->GetRegion("RegionGarfield");
      G4ProductionCuts * cuts = new G4ProductionCuts();

      // By setting the range to 0 * mm, the actual production cut in RegionGarfield will be same with the value assigned at SetEnergyRange()
      cuts->SetProductionCut(0., G4ProductionCuts::GetIndex("gamma"));
      cuts->SetProductionCut(0., G4ProductionCuts::GetIndex("e-"));
      cuts->SetProductionCut(0., G4ProductionCuts::GetIndex("e+"));

      if (region) {
        region->SetProductionCuts(cuts);
      }

Hi again, I tried to change “PAIPhot” to “PAI” model and run the simulation again, these photons just disappeared…I have no idea what these photons are generated from, maybe some “virtual photon” in the PAIPhot model?

I don’t know about the low energy EM stuff (I do high-energy physics, and more recently dark matter searches). I note that the comment in G4PAIPhotModel.hh says

// Implementation of PAI photon model of energy loss and
// delta-electron or X-ray production by charged particles in MT framework

whereas the plain G4PAIModel.hh says

// Implementation of PAI model of energy loss and
// delta-electron production by heavy charged particles

Sounds like you chose to use a model which produces X-ray photons directly. The Physics Reference Manual discusses this, but not with any more detail than those comments from the .hh files.

Hmmm…I see, do you know how to check what exact process produced one particle? Like “fluorescence” or “De-excitation” instead of just “muIoni”?

Dear @sunsiyuanyuan,

Thank you for your post.

You can check the model ID from the G4Track, which corresponds to an entry in the physics model catalog [1]. Using this model ID (a number), you can retrieve the model that created the particle via a dedicated method [2].

If the model ID is -1, it indicates either that the physical model is not registered in the catalog or that the particle is a primary particle injected at the beginning of the event.

I hope this helps, please let us know if a process is missing in the catalog or if there is something not fully working.

Thank you for your time.

Best,
Alvaro

[1] Model catalog reference
[2] Model retrieval method

Sorry for the late reply, and thank you for the answer! I will try in few days to check if it returns precise physics model or just “muIoni” and reply you. :smiley: