Communication between Propagation and Transfer Modules

Hi Everybody!

I’ve recently been trying to simulate electrons (and holes) moving through radiation-damaged silicon strips, and I’ve come up against an issue with which propagation and transfer modules to use.

The relevant part of my config file looks like this:

#Using Transient Propagation since it uses the Ramo-Schokley Theorem                                                                                                                                        
[TransientPropagation]
temperature = 223K
charge_per_step = 10
mobility_model = "canali"
trapping_model = "cmstracker"
fluence = 1.1e15/cm/cm
distance = 2
output_plots = 1
output_linegraphs = true

#Transfer Module                                                                                                                                                                                            
[InducedTransfer]
distance = 2
output_plots = 1                                                                                                                                                                                           

I was told to use [TransientPropagation] and [InducedTransfer] by a colleague I’m working with, but when I run my simulation AllPix gives me a (FATAL) error:

|05:34:03.402|  (STATUS) Welcome to Allpix^2 v3.0.0
|05:34:03.404|  (STATUS) Initialized PRNG with configured seed 0
|05:34:08.970|  (STATUS) Loading module DepositionPointCharge
|05:34:09.656| (WARNING) Model file "/eos/home-d/damir/ALLPIX2_Remote/Simulation/Configurations/prototype_strip.conf" does not provide a geometry parameter, using default
|05:34:09.658|  (STATUS) Loading module TransientPropagation     
|05:34:09.658| (WARNING) [C:TransientPropagation:detector1] Per-event line graphs or animations requested, disabling parallel event processing
|05:34:09.659| (WARNING) Module instance TransientPropagation:detector1 prevents multithreading
|05:34:09.692|  (STATUS) Loaded 10 modules                   
|05:34:09.692|   (ERROR) Multithreading disabled since the current module configuration does not support it
|05:34:09.692|  (STATUS) Initializing 10 module instantiations
|05:34:10.663|   (ERROR) [I:ElectricFieldReader:detector1] Requesting to interpret INIT field as units "V/cm" while file header states "kV/mm"
|05:34:12.789| (WARNING) [I:ElectricFieldReader:detector1] Field map size is (1um,377.5um) but expecting a multiple of the pixel pitch (500um, 75.5um)
                                                           The area to which the field is applied can be changed using the field_scale parameter.
|05:34:13.596| (WARNING) [I:WeightingPotentialReader:detector1] No field units provided, interpreting field data in internal units, this might lead to unexpected results.
|05:34:13.597|   (ERROR) [I:WeightingPotentialReader:detector1] Requesting to interpret INIT field as units "" while file header states "V"
|05:34:14.340| (WARNING) [I:WeightingPotentialReader:detector1] Weighting potential with 2 dimensions detected, requiring three-dimensional scalar field - this might lead to unexpected behavior.
|05:34:14.341| (WARNING) [I:WeightingPotentialReader:detector1] Field map size is (1um,377.5um) but expecting a multiple of the pixel pitch (500um, 75.5um)
                                                                The area to which the field is applied can be changed using the field_scale parameter.
Warning in <TH1::TH1>: nbins is <=0 - set to nbins = 1
Warning in <TH2::TH2>: nbinsy is <=0 - set to nbinsy = 1
|05:34:15.016|  (STATUS) Initialized 10 module instantiations
|05:34:15.016|  (STATUS) Starting event loop
|05:34:16.091|   (FATAL) (Event 1) [R:InducedTransfer:detector1] Error during execution of run:
                                                                 Received pulse information - this module should not be used with transient information available
                                                                 Please check your configuration and modules. Cannot continue.

Apparently [InducedTransfer] is complaining about the kind of information it gets from [TransientPropagation]?

Can I ask what kind of information the different “Propagation” and “Transfer” modules send and expect to receive? I’ve looked at their pages in the manual, but this question seems to be a bit too esoteric for what’s written there. The [PulseTransfer] page mentions that it takes pulses that are by default generated by the [TransientPropagation] module, and without them it requires some extra variables to be defined so it can calculate the pulses itself (although those variables are also given default values so it doesn’t matter?). If anything, [InducedTransfer] seems to be the simpler of the two, with only one parameter even being defined for the module, and with no mention of whether it expects anything from whatever Propagation module is used.

For the record, before this run I was doing the same simulation of radiation-damaged silicon strips, but using [TransientPropagation] with [PulseTransfer] and I didn’t get any complaints.

Cheers,
Damir

Hi @damir

the advice from your colleague was not entirely accurate, as you can tell by the error message.

  • Propagation modules will always provide PropagatedCharge objects as output. These, however, can either just contain a charge, a final position, and a timestamp, or they can have a time-resolved pulse attached. The latter is only generated by the TransientPropagation module.
  • The transfer modules will always consume PropagatedCharge objects, but they differ in what they do. Short version: when you already did a complex time-resolved simulation using TransientPropagation you always want to use PulseTransfer to take these pulse information and combine them for individual pixels.

Cheers,
Simon