source: trunk/source/processes/electromagnetic/lowenergy/test/G4AtomicDeexcitationTest.cc @ 1228

Last change on this file since 1228 was 1199, checked in by garnier, 15 years ago

nvx fichiers dans CVS

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 "G4AtomicDeexcitation.hh"
28#include "globals.hh"
29#include "G4ios.hh"
30#include <vector>
31#include "G4DynamicParticle.hh"
32#include "AIDA/AIDA.h"
33#include "Randomize.hh"
34
35using namespace CLHEP;
36
37int main(int argc, char* argv[]){
38
39  time_t seconds = time(NULL);
40  G4int seed = seconds;
41 
42  // choose the Random engine
43  CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine);
44  CLHEP::HepRandom::setTheSeed(seed);
45
46  G4int Z;
47  G4int a;
48  G4int b;
49  G4int startId;
50  G4int vacancyId;
51  G4int numberOfRun;
52  G4int batch=0;
53  G4int element;
54  if (argv[1]) {batch = atoi(argv[1]);}
55  G4String fileName;
56  if (argv[3]) {element = atoi(argv[3]);}
57  if (argv[4]) {fileName = argv[4];}
58  else {fileName = "transitions.xml";}
59
60  AIDA::ITree* tree;
61  AIDA::IAnalysisFactory* analysisFactory;
62  AIDA::ITupleFactory* tupleFactory;
63  AIDA::ITuple* tupleFluo;
64  if (batch != 1) {
65    G4cout << "Enter Z " << G4endl;
66    G4cin >> a;
67    G4cout << "Enter the id of the vacancy" << G4endl;
68    G4cin >> startId;
69    G4cout<<"Enter the number of runs "<<G4endl;
70    G4cin>> numberOfRun;
71  }
72  else {
73   
74    a = 0;
75    startId = -1;
76    numberOfRun = atoi(argv[2]);
77  }
78  analysisFactory = AIDA_createAnalysisFactory();
79  AIDA::ITreeFactory* treeFactory = analysisFactory->createTreeFactory();
80  tree = treeFactory->create(fileName,"xml",false,true);
81  tupleFactory = analysisFactory->createTupleFactory(*tree);
82  // Book tuple column names
83  std::vector<std::string> columnNames;
84  // Book tuple column types
85  std::vector<std::string> columnTypes;
86 
87  //if Z=0 a number of runs numberOfRun is generated for all the elements
88  if (a==0)
89    {
90      if (element == 0) { 
91        a = 6;
92        b = 98;
93      }
94      else {
95        a = element;
96        b = a;}
97      columnNames.push_back("AtomicNumber");
98      columnNames.push_back("Particle");
99      columnNames.push_back("Energies");
100     
101      columnTypes.push_back("int");
102      columnTypes.push_back("int");
103      columnTypes.push_back("double");
104      tupleFluo = tupleFactory->create("10", "Total Tuple", columnNames, columnTypes, "");
105      assert(tupleFluo);
106
107    }
108  else { b = a;} 
109 
110  G4AtomicTransitionManager* transitionManager = G4AtomicTransitionManager::Instance();
111 
112  G4AtomicDeexcitation* deexcitation = new G4AtomicDeexcitation;
113  std::map<G4int,G4int> shellNumberTable;
114 
115    deexcitation->ActivateAugerElectronProduction(true);
116 
117  for (Z = a; Z<=b; Z++) {   
118  G4cout << "******** Z = "<< Z << "*********" << G4endl;
119
120  G4int numberOfPossibleShell = transitionManager->NumberOfShells(Z);
121
122  shellNumberTable[Z] = numberOfPossibleShell;
123  G4int min = 0;
124  G4int max = 0;
125  std::vector<G4DynamicParticle*>* vectorOfParticles;
126
127    for(G4int i = 0; i<numberOfRun;i++){ 
128      G4cout<<"**************"<<G4endl;
129      G4cout<<"begin of run "<< i <<G4endl;
130      G4cout<<"**************"<<G4endl;
131      vectorOfParticles = 0;
132      // if shellID = -1 the test runs on every shell of the atom
133      if (startId == -1){
134        min = 1;
135        max = shellNumberTable[Z];
136      }
137      else {
138        min = startId;
139        max = min;
140      }
141
142      for (vacancyId = min; vacancyId <= max; vacancyId++) { 
143
144     
145        vectorOfParticles = deexcitation-> GenerateParticles(Z,vacancyId);
146     
147        G4cout<<  vectorOfParticles->size()<<" particles in the vector "<<G4endl;
148     
149        for (G4int k=0; k< vectorOfParticles->size();k++)
150          {
151            G4DynamicParticle* newParticle = (*vectorOfParticles)[k];
152            if ( newParticle->GetDefinition()->GetParticleName() == "e-")
153              {
154                G4DynamicParticle* newElectron = (*vectorOfParticles)[k];
155                G4ThreeVector augerDirection =newElectron ->GetMomentum();
156                G4double  augerEnergy =newElectron ->GetKineticEnergy();
157                if (startId==-1){
158                 
159                  tupleFluo->fill(0,Z);
160                  tupleFluo->fill(1,0);
161                  tupleFluo->fill(2,augerEnergy);
162                  tupleFluo->addRow();
163                 
164                }
165                else{         
166                 
167                  G4cout <<" An auger has been generated"<<G4endl;
168                  G4cout<<" vectorOfParticles ["<<k<<"]:"<<G4endl;
169                  G4cout<<"Non zero particle. Index: "<<k<<G4endl;
170                  G4cout<< "The Auger electron has a kinetic energy = "<<augerEnergy
171                        <<" MeV " <<G4endl;
172                 
173                }
174              }
175            else{
176              G4ThreeVector photonDirection = newParticle ->GetMomentum();
177              G4double  photonEnergy =newParticle ->GetKineticEnergy();
178             
179              if (startId==-1){
180                tupleFluo->fill(0,Z);
181                tupleFluo->fill(1,1);
182                tupleFluo->fill(2,photonEnergy);
183                tupleFluo->addRow();           
184              }
185              else{
186               
187                G4cout<<" vectorOfParticles ["<<k<<"]:"<<G4endl;
188                G4cout<<"Non zero particle. Index: "<<k<<G4endl;
189                G4cout<< "The photon has a kinetic energy = "<<photonEnergy
190                      <<" MeV " <<G4endl;
191              }
192            }
193          }
194      }
195      if (batch == 1){
196        tree->commit(); // Write histos in file.
197        tree->close();
198      }
199      delete vectorOfParticles;
200    }
201  } 
202  delete deexcitation;
203  G4cout<<"END OF THE MAIN PROGRAM"<<G4endl;
204}
Note: See TracBrowser for help on using the repository browser.