Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/ChargeExchangeMC/src/CexmcReconstructorMessenger.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 ]

  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:  CexmcReconstructorMessenger.cc
 30  *
 31  *    Description:  reconstructor messenger
 32  *
 33  *        Version:  1.0
 34  *        Created:  02.12.2009 15:38:30
 35  *       Revision:  none
 36  *       Compiler:  gcc
 37  *
 38  *         Author:  Alexey Radkov (), 
 39  *        Company:  PNPI
 40  *
 41  * ============================================================================
 42  */
 43 
 44 #include <G4UIcmdWithABool.hh>
 45 #include <G4UIcmdWithAString.hh>
 46 #include <G4UIcmdWithADoubleAndUnit.hh>
 47 #include "CexmcReconstructorMessenger.hh"
 48 #include "CexmcReconstructor.hh"
 49 #include "CexmcMessenger.hh"
 50 #include "CexmcCommon.hh"
 51 
 52 
 53 CexmcReconstructorMessenger::CexmcReconstructorMessenger(
 54                                         CexmcReconstructor *  reconstructor_ ) :
 55     reconstructor( reconstructor_ ),
 56     setCalorimeterEntryPointDefinitionAlgorithm( NULL ),
 57     setCrystalSelectionAlgorithm( NULL ), useInnerRefCrystal( NULL ),
 58     setCalorimeterEntryPointDepth( NULL )
 59 {
 60     setCalorimeterEntryPointDefinitionAlgorithm = new G4UIcmdWithAString(
 61         ( CexmcMessenger::reconstructorDirName + "entryPointDefinitionAlgo" ).
 62                 c_str(), this );
 63     setCalorimeterEntryPointDefinitionAlgorithm->SetGuidance(
 64         "\n    Algorithm to reconstruct entry point of output particle"
 65         "\n    decay products in calorimeter"
 66         "\n    (none of the following algorithms reconstruct directions)\n"
 67         "    center - entry points defined in the center of the\n"
 68         "             calorimeters,\n"
 69         "    simple - entry points defined in the center of the crystal\n"
 70         "             that has maximum energy deposit value,\n"
 71         "    linear - entry points defined by linear weights of energy\n"
 72         "             deposit in crystals,\n"
 73         "    sqrt - entry points defined by square root weights of\n"
 74         "           energy deposit in crystals" );
 75     setCalorimeterEntryPointDefinitionAlgorithm->SetParameterName(
 76                                             "EntryPointDefinitionAlgo", false );
 77     setCalorimeterEntryPointDefinitionAlgorithm->SetCandidates(
 78                                             "center simple linear sqrt" );
 79     setCalorimeterEntryPointDefinitionAlgorithm->SetDefaultValue( "sqrt" );
 80     setCalorimeterEntryPointDefinitionAlgorithm->AvailableForStates(
 81                                             G4State_PreInit, G4State_Idle );
 82 
 83     setCalorimeterEntryPointDepthDefinitionAlgorithm = new G4UIcmdWithAString(
 84         ( CexmcMessenger::reconstructorDirName +
 85                               "entryPointDepthDefinitionAlgo" ).c_str(), this );
 86     setCalorimeterEntryPointDepthDefinitionAlgorithm->SetGuidance(
 87         "\n    Algorithm to reconstruct entry point depth of output\n"
 88         "    particle decay products in calorimeter\n"
 89         "    (value is defined by 'entryPointDepth' parameter)\n"
 90         "    plain - depth is a constant\n"
 91         "    sphere - depth depends on X and Y of calorimeter entry\n"
 92         "             points and locates on surface of a sphere\n"
 93         "             with origin in the center of the target;\n"
 94         "             radius of the sphere is sum of distance to\n"
 95         "             the calorimeter and 'entryPointDepth' value" );
 96     setCalorimeterEntryPointDepthDefinitionAlgorithm->SetParameterName(
 97                                     "EntryPointDepthDefinitionAlgo", false );
 98     setCalorimeterEntryPointDepthDefinitionAlgorithm->SetCandidates(
 99                                     "plain sphere" );
100     setCalorimeterEntryPointDepthDefinitionAlgorithm->SetDefaultValue(
101                                     "plain" );
102     setCalorimeterEntryPointDepthDefinitionAlgorithm->AvailableForStates(
103                                                 G4State_PreInit, G4State_Idle );
104 
105     setCrystalSelectionAlgorithm = new G4UIcmdWithAString(
106         ( CexmcMessenger::reconstructorDirName + "crystalSelectionAlgo" ).
107                 c_str(), this );
108     setCrystalSelectionAlgorithm->SetGuidance(
109         "\n    Choose crystals to be selected in weighted entry point\n"
110         "    reconstruction algorithms\n"
111         "    all - all,\n"
112         "    adjacent - crystal with maximum energy deposit and\n"
113         "               adjacent crystals" );
114     setCrystalSelectionAlgorithm->SetParameterName( "CrystalSelAlgo", false );
115     setCrystalSelectionAlgorithm->SetCandidates( "all adjacent" );
116     setCrystalSelectionAlgorithm->SetDefaultValue( "all" );
117     setCrystalSelectionAlgorithm->AvailableForStates( G4State_PreInit,
118                                                       G4State_Idle );
119 
120     useInnerRefCrystal = new G4UIcmdWithABool(
121         ( CexmcMessenger::reconstructorDirName + "useInnerRefCrystal" ).
122                 c_str(), this );
123     useInnerRefCrystal->SetGuidance(
124         "\n    Defines that if the crystal with maximum energy deposit in\n"
125         "    calorimeter is an outer crystal then the closest inner crystal\n"
126         "    will be chosen as the reference for adjacent crystal selection\n"
127         "    algorithm and simple entry point definition algorithm. It also\n"
128         "    affects energy deposit collection if adjacent crystals\n"
129         "    algorithm was chosen for that. If not set then the reference\n"
130         "    crystal will be found from all crystals in calorimeter" );
131     useInnerRefCrystal->SetParameterName( "UseInnerRefCrystal", true );
132     useInnerRefCrystal->SetDefaultValue( true );
133     useInnerRefCrystal->AvailableForStates( G4State_PreInit, G4State_Idle );
134 
135     setCalorimeterEntryPointDepth = new G4UIcmdWithADoubleAndUnit(
136         ( CexmcMessenger::reconstructorDirName + "entryPointDepth" ).c_str(),
137         this );
138     setCalorimeterEntryPointDepth->SetGuidance(
139         "\n    Depth of entry point used in reconstruction of angle\n"
140         "    between output particle decay products" );
141     setCalorimeterEntryPointDepth->SetParameterName( "EntryPointDepth", false );
142     setCalorimeterEntryPointDepth->SetDefaultValue( 0 );
143     setCalorimeterEntryPointDepth->SetUnitCandidates( "mm cm m" );
144     setCalorimeterEntryPointDepth->SetDefaultUnit( "cm" );
145     setCalorimeterEntryPointDepth->AvailableForStates( G4State_PreInit,
146                                                        G4State_Idle );
147 }
148 
149 
150 CexmcReconstructorMessenger::~CexmcReconstructorMessenger()
151 {
152     delete setCalorimeterEntryPointDefinitionAlgorithm;
153     delete setCalorimeterEntryPointDepthDefinitionAlgorithm;
154     delete setCrystalSelectionAlgorithm;
155     delete useInnerRefCrystal;
156     delete setCalorimeterEntryPointDepth;
157 }
158 
159 
160 void  CexmcReconstructorMessenger::SetNewValue( G4UIcommand *  cmd,
161                                                 G4String  value )
162 {
163     do
164     {
165         if ( cmd == setCalorimeterEntryPointDefinitionAlgorithm )
166         {
167             CexmcCalorimeterEntryPointDefinitionAlgorithm
168                             epDefinitionAlgorithm( CexmcEntryPointInTheCenter );
169             do
170             {
171                 if ( value == "simple" )
172                 {
173                     epDefinitionAlgorithm =
174                             CexmcEntryPointInTheCenterOfCrystalWithMaxED;
175                     break;
176                 }
177                 if ( value == "linear" )
178                 {
179                     epDefinitionAlgorithm = CexmcEntryPointByLinearEDWeights;
180                     break;
181                 }
182                 if ( value == "sqrt" )
183                 {
184                     epDefinitionAlgorithm = CexmcEntryPointBySqrtEDWeights;
185                     break;
186                 }
187             } while ( false );
188             reconstructor->SetCalorimeterEntryPointDefinitionAlgorithm(
189                                                         epDefinitionAlgorithm );
190             break;
191         }
192         if ( cmd == setCalorimeterEntryPointDepthDefinitionAlgorithm )
193         {
194             CexmcCalorimeterEntryPointDepthDefinitionAlgorithm
195                         epDepthDefinitionAlgorithm( CexmcEntryPointDepthPlain );
196             do
197             {
198                 if ( value == "sphere" )
199                 {
200                     epDepthDefinitionAlgorithm = CexmcEntryPointDepthSphere;
201                     break;
202                 }
203             } while ( false );
204             reconstructor->SetCalorimeterEntryPointDepthDefinitionAlgorithm(
205                                                 epDepthDefinitionAlgorithm );
206             break;
207         }
208         if ( cmd == setCrystalSelectionAlgorithm )
209         {
210             CexmcCrystalSelectionAlgorithm
211                                         csAlgorithm( CexmcSelectAllCrystals );
212             do
213             {
214                 if ( value == "adjacent" )
215                 {
216                     csAlgorithm = CexmcSelectAdjacentCrystals;
217                     break;
218                 }
219             } while ( false );
220             reconstructor->SetCrystalSelectionAlgorithm( csAlgorithm );
221             break;
222         }
223         if ( cmd == useInnerRefCrystal )
224         {
225             reconstructor->UseInnerRefCrystal(
226                         G4UIcmdWithABool::GetNewBoolValue( value ) );
227             break;
228         }
229         if ( cmd == setCalorimeterEntryPointDepth )
230         {
231             reconstructor->SetCalorimeterEntryPointDepth(
232                         G4UIcmdWithADoubleAndUnit::GetNewDoubleValue( value ) );
233             break;
234         }
235     } while ( false );
236 }
237 
238