Option to force low energy neutron transport.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 11 Jan 2008 10:46:12 +0000 (10:46 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 11 Jan 2008 10:46:12 +0000 (10:46 +0000)
TFluka/TFluka.cxx
TFluka/TFluka.h
TFluka/TFlukaConfigOption.cxx

index 6047fe8..cd484ef 100644 (file)
@@ -138,6 +138,7 @@ TFluka::TFluka()
    fStopEvent(kFALSE),
    fStopRun(kFALSE),
    fPrimaryElectronIndex(-1),
+   fLowEnergyNeutronTransport(kFALSE),
    fMaterials(0),
    fNVolumes(0),
    fCurrentFlukaRegion(-1),
@@ -176,6 +177,7 @@ TFluka::TFluka(const char *title, Int_t verbosity, Bool_t isRootGeometrySupporte
    fStopEvent(kFALSE),
    fStopRun(kFALSE),
    fPrimaryElectronIndex(-1),
+   fLowEnergyNeutronTransport(kFALSE),
    fMaterials(0),
    fNVolumes(0),
    fCurrentFlukaRegion(-1),
index efe334f..c637671 100644 (file)
@@ -184,8 +184,8 @@ class TFluka : public TVirtualMC {
   virtual void       SetModelParameter(const char* parName, Double_t parValue, Int_t imed);
   virtual TObjArray* GetListOfUserConfigs() {return fUserConfig;}
   virtual Double_t   Xsec(char*, Double_t, Int_t, Int_t);
-
-  
+  virtual void       SetLowEnergyNeutronTransport(Bool_t flag) {fLowEnergyNeutronTransport = flag;}
+  virtual Bool_t     LowEnergyNeutronTransport() {return fLowEnergyNeutronTransport;}
   // Particle table usage         
   virtual Int_t    IdFromPDG(Int_t id) const;
   virtual Int_t    PDGFromId(Int_t pdg) const;
@@ -442,6 +442,7 @@ class TFluka : public TVirtualMC {
   Bool_t   fStopEvent;            // Flag for stopped event
   Bool_t   fStopRun;              // Flag for stopped run 
   Int_t    fPrimaryElectronIndex; // Primary electron Index
+  Bool_t   fLowEnergyNeutronTransport; // Flag to force low energy neutron transport
   
   //
   //Geometry through TGeo
index aff4c11..bb253bc 100644 (file)
@@ -682,7 +682,7 @@ void TFlukaConfigOption::ProcessCUTNEU()
   // Find the FLUKA neutron group corresponding to the cut
   //
   Float_t neutronCut = cut;
-  Int_t groupCut = 1; // if cut is > 19.6 MeV not low energy neutron transport is done
+  Int_t groupCut = 1; // if cut is > 19.6 MeV no low energy neutron transport is performed
   if (neutronCut < 0.0196) {
     neutronCut = 0.0196;
     // Search the group cutoff for the energy cut
@@ -729,19 +729,24 @@ void TFlukaConfigOption::ProcessCUTNEU()
        // 62.0 = AntiOmega_c zero
        fprintf(fgFile,"PART-THR  %10.4g%10.1f%10.1f\n", -cut, 61.0, 62.0);
     } else {
-        Int_t nreg, *reglist;
-        Float_t ireg;
-        reglist = fgGeom->GetMaterialList(fMedium, nreg);
-        // Loop over regions of a given material
-        for (Int_t k = 0; k < nreg; k++) {
-         ireg = reglist[k];
-         fprintf(fgFile,"LOW-BIAS  %10.4g%10.4g%10.1f%10.1f%10.1f%10.1f\n",
-                Float_t(groupCut), 73.0, 0.95, ireg, ireg, 1.);
-       }
-
-       Warning("ProcessCUTNEU",
-              "Material #%4d %s: Cut on neutral hadrons (Ekin > %9.3e) material by material only implemented for low-energy neutrons !\n",
-              fMedium, fCMaterial->GetName(), cut);
+       TFluka* fluka = (TFluka*) gMC;
+       printf("Low energy neutron transport %5d\n", fluka->LowEnergyNeutronTransport());
+       
+       if (!(fluka->LowEnergyNeutronTransport())) {
+           Int_t nreg, *reglist;
+           Float_t ireg;
+           reglist = fgGeom->GetMaterialList(fMedium, nreg);
+           
+           // Loop over regions of a given material
+           for (Int_t k = 0; k < nreg; k++) {
+               ireg = reglist[k];
+               fprintf(fgFile,"LOW-BIAS  %10.4g%10.4g%10.1f%10.1f%10.1f%10.1f\n",
+                       Float_t(groupCut), 73.0, 0.95, ireg, ireg, 1.);
+           }
+       }
+       Warning("ProcessCUTNEU",
+               "Material #%4d %s: Cut on neutral hadrons (Ekin > %9.3e) material by material only implemented for low-energy neutrons !\n",
+               fMedium, fCMaterial->GetName(), cut);
     }
 }