223{
225 G4AdjointCSManager::GetAdjointCSManager();
227 G4AdjointSimManager::GetInstance();
228
229 theCSManager->RegisterAdjointParticle(
230 G4AdjointElectron::AdjointElectron());
231
233 theCSManager->RegisterAdjointParticle(
234 G4AdjointGamma::AdjointGamma());
235
240 }
244 theCSManager->RegisterAdjointParticle(
245 G4AdjointProton::AdjointProton());
246 }
247
251
254
257
264 theeminusMS->SetEmModel(msc1);
267 theeminusAdjointMS->SetEmModel(msc2);
269 }
270
273
274
280 theeInverseIonisationModel->SetHighEnergyLimit(
282 theeInverseIonisationModel->SetLowEnergyLimit(
284 theeInverseIonisationModel->SetCSBiasingFactor(
286 theeInverseIonisationProjToProjCase =
288 theeInverseIonisationModel);
289 theeInverseIonisationProdToProjCase =
291 theeInverseIonisationModel);
292 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"e-"));
293 }
294
295
296
305 theeInverseBremsstrahlungModel->SetCSBiasingFactor(
308 true,"Inv_eBrem",theeInverseBremsstrahlungModel);
310 false,"Inv_eBrem1",theeInverseBremsstrahlungModel);
311 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"e-"));
312 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"gamma"));
313
316 theeInverseBremsstrahlungModel);
317 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"e-"));
318 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"gamma"));
320 theForcedInteractionForGamma =
322 theForcedInteractionForGamma->RegisterAdjointBremModel(
323 theeInverseBremsstrahlungModel);
324 }
325 }
326
327
328
329
330
334
339 theeInverseComptonModel->SetDirectProcess(theComptonScattering);
340 theeInverseComptonModel->SetUseMatrix(false);
341
346 theeInverseComptonModel);
348 if (!theForcedInteractionForGamma ) theForcedInteractionForGamma =
350 theForcedInteractionForGamma->
351 RegisterAdjointComptonModel(theeInverseComptonModel);
352 }
353 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"e-"));
354 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"gamma"));
355 }
356
357
358
361
366 theInversePhotoElectricModel->SetCSBiasingFactor(
369 theInversePhotoElectricModel);
370 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"e-"));
371 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"gamma"));
372 }
373
374
375
376
382 G4Proton::Proton());
385 thepInverseIonisationModel->SetUseMatrix(false);
387 "Inv_pIon",thepInverseIonisationModel);
389 "Inv_pIon1",thepInverseIonisationModel);
390 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"e-"));
391 theAdjointSimManager->ConsiderParticleAsPrimary(
G4String(
"proton"));
392 }
393
394
395
396 auto particleIterator=GetParticleIterator();
397 particleIterator->reset();
398 while( (*particleIterator)() ){
401 if (!pmanager) {
403 particle->SetProcessManager(pmanager);
404 }
405
406 G4String particleName = particle->GetParticleName();
407 if (particleName == "e-") {
411 G4AdjointCSManager::GetAdjointCSManager()->
413 }
415 pmanager->AddProcess(theeminusBremsstrahlung);
416 G4AdjointCSManager::GetAdjointCSManager()->
417 RegisterEnergyLossProcess(theeminusBremsstrahlung,particle);
418 }
419 G4int n_order=0;
421 n_order++;
422 pmanager->SetProcessOrdering(theeminusMS, idxAlongStep,n_order);
423 }
425 n_order++;
427 }
429 n_order++;
430 pmanager->SetProcessOrdering(theeminusBremsstrahlung,
431 idxAlongStep,n_order);
432 }
433 n_order=0;
435 n_order++;
436 pmanager->SetProcessOrdering(theeminusMS,idxPostStep,n_order);
437 }
439 n_order++;
441 }
443 n_order++;
444 pmanager->SetProcessOrdering(theeminusBremsstrahlung,idxPostStep,
445 n_order);
446 }
447 }
448
449 if (particleName == "adj_e-") {
453 theContinuousGainOfEnergy->SetLossFluctuations(
455 theContinuousGainOfEnergy->SetDirectEnergyLossProcess(
457 theContinuousGainOfEnergy->SetDirectParticle(G4Electron::Electron());
458 pmanager->AddProcess(theContinuousGainOfEnergy);
459 }
460 G4int n_order=0;
462 n_order++;
463 pmanager->AddProcess(theeminusAdjointMS);
464 pmanager->SetProcessOrdering(theeminusAdjointMS,
465 idxAlongStep,n_order);
466 }
467 n_order++;
468 pmanager->SetProcessOrdering(theContinuousGainOfEnergy,idxAlongStep,
469 n_order);
470
471 n_order++;
474 pmanager->AddProcess(theAlongStepWeightCorrection);
475 pmanager->SetProcessOrdering(theAlongStepWeightCorrection,
476 idxAlongStep,
477 n_order);
478 n_order=0;
480 pmanager->AddProcess(theeInverseIonisationProjToProjCase);
481 pmanager->AddProcess(theeInverseIonisationProdToProjCase);
482 n_order++;
483 pmanager->SetProcessOrdering(theeInverseIonisationProjToProjCase,
484 idxPostStep,n_order);
485 n_order++;
486 pmanager->SetProcessOrdering(theeInverseIonisationProdToProjCase,
487 idxPostStep,n_order);
488 }
490 pmanager->AddProcess(theeInverseBremsstrahlungProjToProjCase);
491 n_order++;
492 pmanager->SetProcessOrdering(
493 theeInverseBremsstrahlungProjToProjCase,
494 idxPostStep,n_order);
495 }
496
498 pmanager->AddProcess(theeInverseComptonProdToProjCase);
499 n_order++;
500 pmanager->SetProcessOrdering(theeInverseComptonProdToProjCase,
501 idxPostStep,n_order);
502 }
504 pmanager->AddDiscreteProcess(theInversePhotoElectricProcess);
505 n_order++;
506 pmanager->SetProcessOrdering(theInversePhotoElectricProcess,
507 idxPostStep,n_order);
508 }
510 pmanager->AddProcess(thepInverseIonisationProdToProjCase);
511 n_order++;
512 pmanager->SetProcessOrdering(thepInverseIonisationProdToProjCase,
513 idxPostStep,n_order);
514 }
516 n_order++;
517 pmanager->SetProcessOrdering(theeminusAdjointMS,
518 idxPostStep,n_order);
519 }
520 }
521
522
523 if(particleName == "adj_gamma") {
524 G4int n_order=0;
528 pmanager->AddProcess(theAlongStepWeightCorrection);
529 pmanager->SetProcessOrdering(theAlongStepWeightCorrection,
530 idxAlongStep,1);
531
533 pmanager->AddProcess(theeInverseBremsstrahlungProdToProjCase);
534 n_order++;
535 pmanager->SetProcessOrdering(
536 theeInverseBremsstrahlungProdToProjCase,
537 idxPostStep,n_order);
538 }
540 pmanager->AddDiscreteProcess(theeInverseComptonProjToProjCase);
541 n_order++;
542 pmanager->SetProcessOrdering(theeInverseComptonProjToProjCase,
543 idxPostStep,n_order);
544 }
545 }
546 else {
547 if (theForcedInteractionForGamma) {
548 pmanager->AddProcess(theForcedInteractionForGamma);
549 n_order++;
550 pmanager->SetProcessOrdering(theForcedInteractionForGamma,
551 idxPostStep,n_order);
552 pmanager->SetProcessOrdering(theForcedInteractionForGamma,
553 idxAlongStep,n_order);
554 }
555 }
556 }
557
558 if (particleName == "gamma") {
560 pmanager->AddDiscreteProcess(theComptonScattering);
561 G4AdjointCSManager::GetAdjointCSManager()->
562 RegisterEmProcess(theComptonScattering,particle);
563 }
565 pmanager->AddDiscreteProcess(thePEEffect);
566 G4AdjointCSManager::GetAdjointCSManager()->
567 RegisterEmProcess(thePEEffect,particle);
568 }
570 pmanager->AddDiscreteProcess(theGammaConversion);
571 }
572 }
573
579
580
581 pmanager->AddProcess(theeplusMultipleScattering);
582 pmanager->AddProcess(theeplusIonisation);
583 pmanager->AddProcess(theeplusBremsstrahlung);
584 pmanager->AddProcess(theeplusAnnihilation);
585
586
587 pmanager->SetProcessOrderingToFirst(theeplusAnnihilation, idxAtRest);
588
589
590 pmanager->SetProcessOrdering(theeplusMultipleScattering,
591 idxAlongStep,1);
592 pmanager->SetProcessOrdering(theeplusIonisation, idxAlongStep,2);
593 pmanager->SetProcessOrdering(theeplusBremsstrahlung,idxAlongStep,3);
594
595
596 pmanager->SetProcessOrdering(theeplusMultipleScattering,
597 idxPostStep,1);
598 pmanager->SetProcessOrdering(theeplusIonisation,idxPostStep,2);
599 pmanager->SetProcessOrdering(theeplusBremsstrahlung,idxPostStep,3);
600 pmanager->SetProcessOrdering(theeplusAnnihilation,idxPostStep,4);
601 }
604
607 G4AdjointCSManager::GetAdjointCSManager()->
609 }
610
611 G4int n_order=0;
613 n_order++;
614 pmanager->SetProcessOrdering(thepMS, idxAlongStep,n_order);
615 }
616
618 n_order++;
619 pmanager->SetProcessOrdering(
fPIonisation,idxAlongStep,n_order);
620 }
621
622 n_order=0;
624 n_order++;
625 pmanager->SetProcessOrdering(thepMS, idxPostStep,n_order);
626 }
627
629 n_order++;
630 pmanager->SetProcessOrdering(
fPIonisation,idxPostStep,n_order);
631 }
632
633 }
634
639 theContinuousGainOfEnergy->SetLossFluctuations(
641 theContinuousGainOfEnergy->SetDirectEnergyLossProcess(
fPIonisation);
642 theContinuousGainOfEnergy->SetDirectParticle(G4Proton::Proton());
643 pmanager->AddProcess(theContinuousGainOfEnergy);
644 }
645
646 G4int n_order=0;
648 n_order++;
649 pmanager->AddProcess(thepMS);
650 pmanager->SetProcessOrdering(thepMS, idxAlongStep,n_order);
651 }
652
653 n_order++;
654 pmanager->SetProcessOrdering(theContinuousGainOfEnergy,idxAlongStep,
655 n_order);
656
657 n_order++;
660 pmanager->AddProcess(theAlongStepWeightCorrection);
661 pmanager->SetProcessOrdering(theAlongStepWeightCorrection,
662 idxAlongStep,
663 n_order);
664 n_order=0;
666 pmanager->AddProcess(thepInverseIonisationProjToProjCase);
667 n_order++;
668 pmanager->SetProcessOrdering(
669 thepInverseIonisationProjToProjCase,
670 idxPostStep,n_order);
671 }
672
674 n_order++;
675 pmanager->SetProcessOrdering(thepMS,idxPostStep,n_order);
676 }
677 }
678 }
679}