G4HyperonFTFPBuilder.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // GEANT4 tag $Name: not supported by cvs2svn $
00027 //
00028 //---------------------------------------------------------------------------
00029 //
00030 // ClassName:   G4HyperonFTFPBuilder
00031 //
00032 // Author: 2012 G.Folger
00033 //    Implementation started from G4HyperonLHEPBuilder.  
00034 //
00035 // Modified:
00036 //----------------------------------------------------------------------------
00037 //
00038 #include "G4HyperonFTFPBuilder.hh"
00039 
00040 #include "G4SystemOfUnits.hh"
00041 #include "G4ParticleDefinition.hh"
00042 #include "G4ParticleTable.hh"
00043 #include "G4ProcessManager.hh"
00044 #include "G4CrossSectionDataSetRegistry.hh"
00045   
00046   
00047 G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(): 
00048  theLambdaInelastic(0),
00049  theAntiLambdaInelastic(0),
00050  theSigmaMinusInelastic(0),
00051  theAntiSigmaMinusInelastic(0),
00052  theSigmaPlusInelastic(0), 
00053  theAntiSigmaPlusInelastic(0), 
00054  theXiZeroInelastic(0), 
00055  theAntiXiZeroInelastic(0),
00056  theXiMinusInelastic(0), 
00057  theAntiXiMinusInelastic(0),
00058  theOmegaMinusInelastic(0), 
00059  theAntiOmegaMinusInelastic(0), 
00060  wasActivated(false)
00061 {
00062 
00063 // Hyperon : Bertini at low energies, then FTFP
00064 
00065   HyperonFTFP = new G4TheoFSGenerator("FTFP");
00066   
00067   HyperonFTFP->SetMinEnergy( 2.*GeV );
00068   HyperonFTFP->SetMaxEnergy( 100.*TeV );
00069 
00070   theStringModel = new G4FTFModel;
00071   theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
00072   theStringModel->SetFragmentationModel(theStringDecay);
00073 
00074   theCascade = new G4GeneratorPrecompoundInterface;
00075   thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
00076   theCascade->SetDeExcitation(thePreEquilib);  
00077 
00078   HyperonFTFP->SetTransport(theCascade);
00079   HyperonFTFP->SetHighEnergyGenerator(theStringModel);
00080   
00081   theBertini = new G4CascadeInterface;
00082   theBertini->SetMinEnergy( 0.*GeV );
00083   theBertini->SetMaxEnergy( 6.*GeV );
00084 
00085 // AntiHyperons: Use FTFP for full energy range, starting at 0.  
00086 
00087   AntiHyperonFTFP = new G4TheoFSGenerator("FTFP");
00088   AntiHyperonFTFP->SetMinEnergy( 0.*GeV );
00089   AntiHyperonFTFP->SetMaxEnergy( 100.*TeV );
00090   AntiHyperonFTFP->SetTransport(theCascade);
00091   AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
00092 
00093 // use CHIPS cross sections
00094   theCHIPSInelastic = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsHyperonInelasticXS::Default_Name());
00095 }
00096 
00097 
00098 G4HyperonFTFPBuilder::~G4HyperonFTFPBuilder()
00099 {
00100   delete HyperonFTFP;
00101   delete theStringModel;
00102   delete theStringDecay;
00103   delete theCascade;
00104   delete thePreEquilib;
00105   //  delete theHandler;
00106   delete theBertini;
00107   delete AntiHyperonFTFP;
00108   
00109   if (wasActivated) {
00110      delete theLambdaInelastic;
00111      delete theAntiLambdaInelastic;
00112      delete theSigmaMinusInelastic;
00113      delete theAntiSigmaMinusInelastic;
00114      delete theSigmaPlusInelastic;
00115      delete theAntiSigmaPlusInelastic;
00116      delete theXiMinusInelastic;
00117      delete theAntiXiMinusInelastic;
00118      delete theXiZeroInelastic;
00119      delete theAntiXiZeroInelastic;
00120      delete theOmegaMinusInelastic;
00121      delete theAntiOmegaMinusInelastic;
00122   }   
00123 }
00124 
00125 void G4HyperonFTFPBuilder::Build()
00126 {
00127   G4ProcessManager * aProcMan = 0;
00128   wasActivated = true;
00129 
00130   // Lambda
00131   theLambdaInelastic = new G4LambdaInelasticProcess();
00132   theLambdaInelastic->RegisterMe(theBertini);
00133   theLambdaInelastic->RegisterMe(HyperonFTFP);
00134   theLambdaInelastic->AddDataSet(theCHIPSInelastic);
00135   aProcMan = G4Lambda::Lambda()->GetProcessManager();
00136   aProcMan->AddDiscreteProcess(theLambdaInelastic);
00137   
00138   // AntiLambda
00139   theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess();
00140   theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
00141   theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic);
00142   
00143   aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager();
00144   aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
00145     
00146   // SigmaMinus
00147   theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess();
00148   theSigmaMinusInelastic->RegisterMe(theBertini);
00149   theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
00150   theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
00151 
00152   aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
00153   aProcMan->AddDiscreteProcess(theSigmaMinusInelastic);
00154 
00155   // anti-SigmaMinus
00156   theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess();
00157   theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
00158   theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
00159 
00160   aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
00161   aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic);
00162 
00163   // SigmaPlus
00164   theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess();
00165   theSigmaPlusInelastic->RegisterMe(theBertini);
00166   theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
00167   theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
00168 
00169   aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
00170   aProcMan->AddDiscreteProcess(theSigmaPlusInelastic);
00171 
00172   // anti-SigmaPlus
00173   theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess();
00174   theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
00175   theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
00176 
00177   aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
00178   aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic);
00179 
00180   // XiMinus
00181   theXiMinusInelastic = new G4XiMinusInelasticProcess();
00182   theXiMinusInelastic->RegisterMe(theBertini);
00183   theXiMinusInelastic->RegisterMe(HyperonFTFP);
00184   theXiMinusInelastic->AddDataSet(theCHIPSInelastic);
00185 
00186   aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
00187   aProcMan->AddDiscreteProcess(theXiMinusInelastic);
00188 
00189   // anti-XiMinus
00190   theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess();
00191   theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
00192   theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic);
00193 
00194   aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
00195   aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic);
00196 
00197   // XiZero
00198   theXiZeroInelastic = new G4XiZeroInelasticProcess();
00199   theXiZeroInelastic->RegisterMe(theBertini);
00200   theXiZeroInelastic->RegisterMe(HyperonFTFP);
00201   theXiZeroInelastic->AddDataSet(theCHIPSInelastic);
00202 
00203   aProcMan = G4XiZero::XiZero()->GetProcessManager();
00204   aProcMan->AddDiscreteProcess(theXiZeroInelastic);
00205 
00206   // anti-XiZero
00207   theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess();
00208   theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
00209   theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic);
00210 
00211   aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
00212   aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
00213 
00214   // OmegaMinus
00215   theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess();
00216   theOmegaMinusInelastic->RegisterMe(theBertini);
00217   theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
00218   theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
00219 
00220   aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
00221   aProcMan->AddDiscreteProcess(theOmegaMinusInelastic);
00222 
00223   // anti-OmegaMinus
00224   theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess();
00225   theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
00226   theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
00227 
00228   aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
00229   aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic);
00230 }
00231 
00232 

Generated on Mon May 27 17:48:33 2013 for Geant4 by  doxygen 1.4.7