Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/ChargeExchangeMC/src/CexmcProductionModelMessenger.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/ChargeExchangeMC/src/CexmcProductionModelMessenger.cc (Version 11.3.0) and /examples/advanced/ChargeExchangeMC/src/CexmcProductionModelMessenger.cc (Version 10.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 /*                                                 26 /*
 27  * ===========================================     27  * ============================================================================
 28  *                                                 28  *
 29  *       Filename:  CexmcProductionModelMessen     29  *       Filename:  CexmcProductionModelMessenger.cc
 30  *                                                 30  *
 31  *    Description:  set various production mod     31  *    Description:  set various production model aspects
 32  *                                                 32  *
 33  *        Version:  1.0                            33  *        Version:  1.0
 34  *        Created:  03.11.2009 16:01:24            34  *        Created:  03.11.2009 16:01:24
 35  *       Revision:  none                           35  *       Revision:  none
 36  *       Compiler:  gcc                            36  *       Compiler:  gcc
 37  *                                                 37  *
 38  *         Author:  Alexey Radkov (),              38  *         Author:  Alexey Radkov (), 
 39  *        Company:  PNPI                           39  *        Company:  PNPI
 40  *                                                 40  *
 41  * ===========================================     41  * ============================================================================
 42  */                                                42  */
 43                                                    43 
 44 #include <G4UIcmdWithABool.hh>                     44 #include <G4UIcmdWithABool.hh>
 45 #include <G4UIcmdWith3Vector.hh>                   45 #include <G4UIcmdWith3Vector.hh>
 46 #include "CexmcProductionModel.hh"                 46 #include "CexmcProductionModel.hh"
 47 #include "CexmcProductionModelMessenger.hh"        47 #include "CexmcProductionModelMessenger.hh"
 48 #include "CexmcMessenger.hh"                       48 #include "CexmcMessenger.hh"
 49                                                    49 
 50                                                    50 
 51 CexmcProductionModelMessenger::CexmcProduction     51 CexmcProductionModelMessenger::CexmcProductionModelMessenger(
 52                                     CexmcProdu <<  52                                     CexmcProductionModel *  productionModel ) :
 53     productionModel( productionModel_ ), apply <<  53     productionModel( productionModel ), applyFermiMotion( NULL ),
 54     setAngularRange( NULL ), addAngularRange(      54     setAngularRange( NULL ), addAngularRange( NULL )
 55 {                                                  55 {
 56     applyFermiMotion = new G4UIcmdWithABool(       56     applyFermiMotion = new G4UIcmdWithABool(
 57         ( CexmcMessenger::physicsDirName + "ap     57         ( CexmcMessenger::physicsDirName + "applyFermiMotionInTarget" ).c_str(),
 58         this );                                    58         this );
 59     applyFermiMotion->SetGuidance( "Switch on/     59     applyFermiMotion->SetGuidance( "Switch on/off fermi motion in target "
 60                                    "nuclei" );     60                                    "nuclei" );
 61     applyFermiMotion->SetParameterName( "Apply     61     applyFermiMotion->SetParameterName( "ApplyFermiMotionInTarget", true );
 62     applyFermiMotion->SetDefaultValue( true );     62     applyFermiMotion->SetDefaultValue( true );
 63     applyFermiMotion->AvailableForStates( G4St     63     applyFermiMotion->AvailableForStates( G4State_PreInit, G4State_Idle );
 64                                                    64 
 65     setAngularRange = new G4UIcmdWith3Vector(      65     setAngularRange = new G4UIcmdWith3Vector(
 66         ( CexmcMessenger::physicsDirName + "se     66         ( CexmcMessenger::physicsDirName + "setAngularRange" ).c_str(), this );
 67     setAngularRange->SetGuidance(                  67     setAngularRange->SetGuidance(
 68         "\n    Set angular range of interest g     68         "\n    Set angular range of interest given in values of cosinus;\n"
 69         "    first two values give the range (     69         "    first two values give the range (descending or ascending),\n"
 70         "    third value gives number of equal     70         "    third value gives number of equal divisions within the\n"
 71         "    range." );                            71         "    range." );
 72     setAngularRange->SetParameterName( "ARange     72     setAngularRange->SetParameterName( "ARangeTop", "ARangeBottom",
 73                                        "ARange     73                                        "ARangeNmbOfDivisions", false );
 74     setAngularRange->SetRange(                     74     setAngularRange->SetRange(
 75         "ARangeTop >= -1.0 && ARangeTop <= 1.0     75         "ARangeTop >= -1.0 && ARangeTop <= 1.0 && "
 76         "ARangeBottom >= -1.0 && ARangeBottom      76         "ARangeBottom >= -1.0 && ARangeBottom <= 1.0 && "
 77         "ARangeNmbOfDivisions >= 1" );             77         "ARangeNmbOfDivisions >= 1" );
 78     setAngularRange->AvailableForStates( G4Sta     78     setAngularRange->AvailableForStates( G4State_PreInit, G4State_Idle );
 79                                                    79 
 80     addAngularRange = new G4UIcmdWith3Vector(      80     addAngularRange = new G4UIcmdWith3Vector(
 81         ( CexmcMessenger::physicsDirName + "ad     81         ( CexmcMessenger::physicsDirName + "addAngularRange" ).c_str(), this );
 82     addAngularRange->SetGuidance(                  82     addAngularRange->SetGuidance(
 83         "\n    Add angular range of interest g     83         "\n    Add angular range of interest given in values of cosinus;\n"
 84         "    first two values give the range (     84         "    first two values give the range (descending or ascending),\n"
 85         "    third value gives number of equal     85         "    third value gives number of equal divisions within the\n"
 86         "    range." );                            86         "    range." );
 87     addAngularRange->SetParameterName( "ARange     87     addAngularRange->SetParameterName( "ARangeTop", "ARangeBottom",
 88                                        "ARange     88                                        "ARangeNmbOfDivisions", false );
 89     addAngularRange->SetRange(                     89     addAngularRange->SetRange(
 90         "ARangeTop >= -1.0 && ARangeTop <= 1.0     90         "ARangeTop >= -1.0 && ARangeTop <= 1.0 && "
 91         "ARangeBottom >= -1.0 && ARangeBottom      91         "ARangeBottom >= -1.0 && ARangeBottom <= 1.0 && "
 92         "ARangeNmbOfDivisions >= 1" );             92         "ARangeNmbOfDivisions >= 1" );
 93     addAngularRange->AvailableForStates( G4Sta     93     addAngularRange->AvailableForStates( G4State_PreInit, G4State_Idle );
 94 }                                                  94 }
 95                                                    95 
 96                                                    96 
 97 CexmcProductionModelMessenger::~CexmcProductio     97 CexmcProductionModelMessenger::~CexmcProductionModelMessenger()
 98 {                                                  98 {
 99     delete applyFermiMotion;                       99     delete applyFermiMotion;
100     delete setAngularRange;                       100     delete setAngularRange;
101     delete addAngularRange;                       101     delete addAngularRange;
102 }                                                 102 }
103                                                   103 
104                                                   104 
105 void  CexmcProductionModelMessenger::SetNewVal    105 void  CexmcProductionModelMessenger::SetNewValue( G4UIcommand *  cmd,
106                                                   106                                                   G4String  value )
107 {                                                 107 {
108     do                                            108     do
109     {                                             109     {
110         if ( cmd == applyFermiMotion )            110         if ( cmd == applyFermiMotion )
111         {                                         111         {
112             productionModel->ApplyFermiMotion(    112             productionModel->ApplyFermiMotion(
113                                 G4UIcmdWithABo    113                                 G4UIcmdWithABool::GetNewBoolValue( value ) );
114             break;                                114             break;
115         }                                         115         }
116         if ( cmd == setAngularRange )             116         if ( cmd == setAngularRange )
117         {                                         117         {
118             G4ThreeVector  vec( G4UIcmdWith3Ve    118             G4ThreeVector  vec( G4UIcmdWith3Vector::GetNew3VectorValue(
119                                                   119                                                                     value ) );
120             G4double       top( std::max( vec.    120             G4double       top( std::max( vec.x(), vec.y() ) );
121             G4double       bottom( std::min( v    121             G4double       bottom( std::min( vec.x(), vec.y() ) );
122             productionModel->SetAngularRange(     122             productionModel->SetAngularRange( top, bottom,
123                                                   123                                               static_cast< int >( vec.z() ) );
124             break;                                124             break;
125         }                                         125         }
126         if ( cmd == addAngularRange )             126         if ( cmd == addAngularRange )
127         {                                         127         {
128             G4ThreeVector  vec( G4UIcmdWith3Ve    128             G4ThreeVector  vec( G4UIcmdWith3Vector::GetNew3VectorValue(
129                                                   129                                                                     value ) );
130             G4double       top( std::max( vec.    130             G4double       top( std::max( vec.x(), vec.y() ) );
131             G4double       bottom( std::min( v    131             G4double       bottom( std::min( vec.x(), vec.y() ) );
132             productionModel->AddAngularRange(     132             productionModel->AddAngularRange( top, bottom,
133                                                   133                                               static_cast< int >( vec.z() ) );
134             break;                                134             break;
135         }                                         135         }
136     } while ( false );                            136     } while ( false );
137 }                                                 137 }
138                                                   138 
139                                                   139