source: trunk/source/processes/electromagnetic/lowenergy/test/ShellFluoProbability.cc @ 1350

Last change on this file since 1350 was 1350, checked in by garnier, 13 years ago

update to last version 4.9.4

File size: 6.4 KB
Line 
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#include "G4AtomicTransitionManager.hh"
27#include "globals.hh"
28#include "G4ios.hh"
29#include <vector>
30#include "AIDA/AIDA.h"
31
32int main(int argc, char* argv[]){
33 
34 
35  G4int Z = 0;
36  G4int shellId = -1;
37  G4int shellIndex = -1;
38  G4double totFluoProb;
39
40
41  AIDA::ITree* tree;
42  AIDA::IAnalysisFactory* analysisFactory;
43  AIDA::ITupleFactory* tupleFactory;
44  AIDA::ITuple* tupleFluoProb;
45
46  analysisFactory = AIDA_createAnalysisFactory();
47  AIDA::ITreeFactory* treeFactory = analysisFactory->createTreeFactory();
48  tree = treeFactory->create("Probabilities.xml","xml",false,true);
49  tupleFactory = analysisFactory->createTupleFactory(*tree);
50  // Book tuple column names
51  std::vector<std::string> columnNames;
52  // Book tuple column types
53  std::vector<std::string> columnTypes;
54
55      columnNames.push_back("AtomicNumber");
56      columnNames.push_back("ShellId");
57      columnNames.push_back("Probability");
58     
59      columnTypes.push_back("int");
60      columnTypes.push_back("int");
61      columnTypes.push_back("double");
62      tupleFluoProb = tupleFactory->create("10", "Totale shell probabilities", columnNames, columnTypes, "");
63      assert(tupleFluoProb);
64 
65  //  G4cout <<argc<<G4endl;
66  //  G4cout <<argv[1]<<G4endl;
67  //  G4cout <<argv[2]<<G4endl;
68
69  if (argv[1]) {Z= atoi(argv[1]);}
70  else {
71    G4cout << "Enter Z " << G4endl;
72    G4cin >> Z;
73  }
74  if ( argc==3 ) {shellId = atoi(argv[2]);}
75  else if (argc != 2){
76    G4cout <<" Select the Id of the Fluo vacancy "<<G4endl;
77    G4cin>> shellId; 
78  }
79 
80  G4AtomicTransitionManager* transManager = G4AtomicTransitionManager::Instance();
81 
82  G4int zStart, zEnd;
83  G4bool totalFlag;
84  if (Z == 0) {
85    zStart = 6;
86    zEnd = 100;
87    totalFlag = true;
88  }
89  else { 
90    zStart = Z;
91    zEnd = Z+1;
92  }
93  for (Z=zStart; Z<zEnd; Z++){
94   
95   
96    G4int shellNumber = transManager->NumberOfReachableShells(Z);
97
98
99
100    for (shellIndex=0; shellIndex<shellNumber; shellIndex++) {
101
102      if (shellId == -1) {
103        shellIndex = -1;
104        break;
105      }
106      if (transManager->Shell(Z,shellIndex)->ShellId() == shellId)  {
107        G4cout << "ShellId "<< shellId <<" matches the index: " << shellIndex << G4endl;
108        break;
109      }
110     
111      else if (shellIndex == shellNumber-1 ) {
112        G4cout << "ShellId " << shellId << " not available. " << G4endl;
113        return 0;
114      }
115     }
116   
117   
118    G4int shellStart, shellEnd;
119    if (shellIndex == -1 ) {
120      shellStart = 0;
121      shellEnd = shellNumber;
122    }
123    else { 
124      shellStart = shellIndex;
125      shellEnd = shellIndex+1;
126    }
127   
128   
129   
130    for (shellIndex=shellStart; shellIndex<shellEnd; shellIndex++) { 
131     
132      // G4cout << "Testing G4FluoTransition "<<G4endl;
133      //  std::vector<G4double> transEnergies = transManager->ReachableShell(Z,shellIndex)->TransitionEnergies();
134      //  std::vector<G4int> transIds = transManager->ReachableShell(Z,shellIndex)->OriginatingShellIds();
135      //std::vector<G4double> transProbs = transManager->ReachableShell(Z,shellIndex)->TransitionProbabilities();
136      G4int currentShellId = transManager->Shell(Z,shellIndex)->ShellId();
137      if (shellId == -1) {
138        G4cout << "ShellId: "<< currentShellId;
139      }
140      totFluoProb = transManager->TotalRadiativeTransitionProbability(Z,shellIndex);
141
142      G4cout << "Total Probability that a radiative transition occurs: " <<
143        totFluoProb <<G4endl;
144      if (totalFlag) {
145        tupleFluoProb->fill(0,Z);
146        tupleFluoProb->fill(1,currentShellId);
147        tupleFluoProb->fill(2,totFluoProb);
148        tupleFluoProb->addRow();
149      }
150    }
151  }
152  tree->commit(); // Write histos in file.
153  tree->close();
154}
155
156  //  G4cout << "Number of shells: " << transManager->NumberOfShells(Z)<<G4endl;
157
158  //  G4cout<< "Number of Fluo vacancies: "<<transManager->NumberOfReachableShells(Z)<<G4endl;
159
160  //  G4cout << "Testing G4AtomicShell" << G4endl;
161
162
163
164
165  //  G4cout << "Select the index of the subshell whose binding energy you need: " << G4endl;
166  //  G4cin >> subShell;
167
168
169
170//  G4cout << "SubShell binding energy: " << transManager->Shell(Z,subShell)->BindingEnergy() << G4endl;
171 
172//  G4cout << "Testing G4AtomicShell" << G4endl;
173//  G4int shellIndex;
174
175
176
177//  for (G4int trans=0; trans<transIds.size(); trans++) {
178//
179//    G4cout << "The transition starts from the shell: " << transIds[trans] << G4endl;
180//    G4cout << "The transition starts from the shell: " <<
181//
182//
183//      transManager->ReachableShell(Z,shellIndex)->OriginatingShellId(trans) << G4endl;
184//
185//
186//    G4cout << " Transition energy: " << transEnergies[trans] << G4endl;
187//    G4cout << "Transition energy: " <<
188//      transManager->ReachableShell(Z,shellIndex)->TransitionEnergy(trans) << G4endl;
189//
190//    G4cout << "Transition probability: " << transProbs[trans] << G4endl;
191//    G4cout << "Transition probability: " <<
192//      transManager->ReachableShell(Z,shellIndex)->TransitionProbability(trans) << G4endl;
193//  }
Note: See TracBrowser for help on using the repository browser.