206 fMediumMagboltz->SetComposition(
"ar", 70.,
"co2", 30.);
207 fMediumMagboltz->SetTemperature(293.15);
208 fMediumMagboltz->SetPressure(760.);
209 fMediumMagboltz->Initialise(
true);
211 const double rPenning = 0.57;
212 const double lambdaPenning = 0.;
213 fMediumMagboltz->EnablePenningTransfer(rPenning, lambdaPenning,
"ar");
214 fMediumMagboltz->LoadGasFile(
"ar_70_co2_30_1000mbar.gas");
217 fComponentAnalyticField->SetMedium(fMediumMagboltz);
219 constexpr double rWire = 25.e-4;
221 constexpr double rTube = 1.451;
223 constexpr double vWire = 1000.;
224 constexpr double vTube = 0.;
226 fComponentAnalyticField->AddWire(0., 0., 2 * rWire, vWire,
"w");
228 fComponentAnalyticField->AddTube(rTube, vTube, 0,
"t");
231 fSensor->AddComponent(fComponentAnalyticField);
234 fTrackHeed->SetSensor(fSensor);
235 fTrackHeed->EnableDeltaElectronTransport();
239 double time,
double x_cm,
double y_cm,
double z_cm,
240 double dx,
double dy,
double dz) {
241 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
243 fSecondaryParticles.clear();
252 constexpr double rWire = 25.e-4;
254 constexpr double rTube = 1.45;
256 constexpr double lTube = 10.;
258 double eKin_eV = ekin_MeV * 1e+6;
261 if (fIonizationModel !=
"Heed" || particleName ==
"gamma") {
264 if (particleName ==
"gamma") {
265 fTrackHeed->TransportPhoton(x_cm, y_cm, z_cm, time, eKin_eV, dx, dy, dz,
268 fTrackHeed->TransportDeltaElectron(x_cm, y_cm, z_cm, time, eKin_eV, dx,
270 fEnergyDeposit = eKin_eV;
273 for (
int cl = 0; cl < nc; cl++) {
274 double xe, ye, ze, te;
275 double ee, dxe, dye, dze;
276 fTrackHeed->GetElectron(cl, xe, ye, ze, te, ee, dxe, dye, dze);
277 if (fabs(ze) > lTube || sqrt(xe * xe + ye * ye) > rTube)
continue;
279 if (particleName ==
"gamma") {
280 fEnergyDeposit += fTrackHeed->GetW();
282 analysisManager->FillH3(1, ze * 10, xe * 10, ye * 10);
283 if (createSecondariesInGeant4) {
285 if (newTime < time) {
289 "e-", ee, newTime, xe, ye, ze, dxe, dye, dze));
294 double xe1, ye1, ze1, te1;
295 double xe2, ye2, ze2, te2;
301 if (0 < xe2 && xe2 < rWire) {
303 }
else if (0 > xe2 && xe2 > -rWire) {
306 if (0 < ye2 && ye2 < rWire) {
308 }
else if (0 > ye2 && ye2 > -rWire) {
317 fAvalancheSize += ne;
320 fTrackHeed->SetParticle(particleName);
321 fTrackHeed->SetKineticEnergy(eKin_eV);
322 fTrackHeed->NewTrack(x_cm, y_cm, z_cm, time, dx, dy, dz);
323 for (
const auto& cluster : fTrackHeed->GetClusters()) {
324 if (fabs(cluster.z) > lTube)
continue;
325 if (sqrt(cluster.x * cluster.x + cluster.y * cluster.y) >= rTube) {
328 nsum += cluster.electrons.size();
329 fEnergyDeposit += cluster.energy;
330 for (
const auto& electron : cluster.electrons) {
331 if (fabs(electron.z) > lTube)
continue;
332 if (sqrt(electron.x * electron.x + electron.y * electron.y) >= rTube) {
335 analysisManager->FillH3(1, electron.z * 10, electron.x * 10, electron.y * 10);
336 if (createSecondariesInGeant4) {
337 double newTime = electron.t;
338 if (newTime < time) {
342 "e-", electron.e, newTime, electron.x, electron.y, electron.z,
343 electron.dx, electron.dy, electron.dz));
346 drift.
DriftElectron(electron.x, electron.y, electron.z, electron.t);
348 double xe1, ye1, ze1, te1;
349 double xe2, ye2, ze2, te2;
355 if (0 < xe2 && xe2 < rWire) {
357 }
else if (0 > xe2 && xe2 > -rWire) {
360 if (0 < ye2 && ye2 < rWire) {
362 }
else if (0 > ye2 && ye2 > -rWire) {
371 fAvalancheSize += ne;
375 fGain = fAvalancheSize / nsum;