source: trunk/source/processes/hadronic/models/de_excitation/photon_evaporation/src/G4NuclearLevelStore.cc @ 819

Last change on this file since 819 was 819, checked in by garnier, 16 years ago

import all except CVS

File size: 3.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//
27
28#include "G4NuclearLevelStore.hh"
29#include <sstream>
30
31std::map<G4String,G4NuclearLevelManager*> G4NuclearLevelStore::theManagers;
32G4String G4NuclearLevelStore::dirName("");
33
34G4NuclearLevelStore* G4NuclearLevelStore::GetInstance()
35{
36  static G4NuclearLevelStore theInstance;
37  return &theInstance;
38}
39
40G4NuclearLevelStore::G4NuclearLevelStore()
41{
42    char* env = getenv("G4LEVELGAMMADATA");
43    if (env == 0) 
44    {
45        G4cout << "G4NuclarLevelStore: please set the G4LEVELGAMMADATA environment variable\n";
46        dirName = "";
47    }
48    else
49    {
50        dirName = env;
51        dirName += '/';
52    }
53}
54
55
56G4NuclearLevelStore::~G4NuclearLevelStore()
57{
58    std::map<G4String,G4NuclearLevelManager*>::iterator i;
59    for (i = theManagers.begin(); i != theManagers.end(); ++i)
60    {
61        if ( (*i).second ) delete (*i).second;
62    }
63}
64
65G4String G4NuclearLevelStore::GenerateKey(const G4int Z, const G4int A)
66{
67    std::ostringstream streamName; 
68    streamName << 'z' << Z << ".a" << A;
69    G4String name(streamName.str());
70    return name;
71}
72
73
74G4NuclearLevelManager* G4NuclearLevelStore::GetManager(const G4int Z, const G4int A)
75{
76    G4NuclearLevelManager * result = 0; 
77    if (A < 1 || Z < 1 || A < Z)
78    {
79        G4cerr << "G4NuclearLevelStore::GetManager: Wrong values Z = " << Z
80               << " A = " << A << '\n';
81        return result;
82    }
83    // Generate the key = filename
84    G4String key(this->GenerateKey(Z,A));
85   
86    // Check if already exists that key
87    std::map<G4String,G4NuclearLevelManager*>::iterator idx = theManagers.find(key);
88    // If doesn't exists then create it
89    if ( idx == theManagers.end() )
90    {
91        result = new G4NuclearLevelManager();
92        result->SetNucleus(Z,A,dirName + key);
93        theManagers.insert(std::make_pair(key,result));
94    }
95    // But if it exists...
96    else
97    {
98        result = idx->second;
99    }
100   
101    return result; 
102}
Note: See TracBrowser for help on using the repository browser.