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