ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CCalSensitiveConfiguration.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file CCalSensitiveConfiguration.cc
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 //
27 // File: CCalSensitiveConfiguration.cc
28 // Description: CCalSensitiveConfiguration handles the declaration of
29 // sensitive detectors and visibilities
32 
33 #include <fstream>
34 #include <stdlib.h>
35 
36 
37 //Comment/Uncomment next line to hide/show debug information
38 //#define debug
39 
40 
42 
44 {
45  if (!instance)
47  return instance;
48 }
49 
50 
52 {
53  G4int flag = -1;
54  auto it = theConfiguration.find(n);
55 
56  if (it != theConfiguration.cend())
57  flag = (*it).second.SensitiveFlag;
58  else {
59  G4cerr << "ERROR: In CCalSensitiveConfiguration::getSensitiveFlag(const "
60  << "G4String& n)" << G4endl
61  << " " << n << " not found in configuration file" << G4endl;
62  }
63 
64  return flag;
65 }
66 
68 {
69  G4String fn;
70  auto it = theConfiguration.find(n);
71 
72  if (it != theConfiguration.cend())
73  fn = (*it).second.FileName;
74  else {
75  G4cerr << "ERROR: In CCalSensitiveConfiguration::getFileName(const "
76  << "G4String& n)" << G4endl
77  << " " << n << " not found in configuration file" << G4endl;
78  }
79 
80  return fn;
81 }
82 
84 {
86  // Open the file
87  G4String pathName = std::getenv("CCAL_CONFPATH");
88  G4String fileenv = std::getenv("CCAL_SENSITIVECONF");
89  if (!pathName || !fileenv) {
91  ed << "ERROR: CCAL_SENSITIVECONF and/or CCAL_CONFPATH not set" << G4endl
92  << " Set them to the sensitive configuration file/path" << G4endl;
93  G4Exception("CCalSensitiveConfiguration::CCalSensitiveConfiguration()",
94  "ccal005",
95  FatalException,ed);
96  }
97 
98  G4cout << " ==> Opening file " << fileenv << "..." << G4endl;
99  std::ifstream is;
100  G4bool ok = openGeomFile(is, pathName, fileenv);
101  if (!ok)
102  {
103  G4Exception("CCalSensitiveConfiguration::CCalSensitiveConfiguration()",
104  "ccal006",
106  "Unable to open sensitive input file");
107  }
108 
109 
110 
111  G4String name;
112  GCInfo gcinfo;
113 
114  while (is) {
115  readName(is, name);
116  readName(is, gcinfo.FileName);
117  is >> gcinfo.SensitiveFlag >> jump;
118 #ifdef debug
119  G4cout << "CCalSensitiveConfiguration constructor: Read \"" << name
120  << "\" \"" << gcinfo.FileName << "\"" << tab << gcinfo.SensitiveFlag
121  << G4endl;
122 #endif
123  theConfiguration[name] = gcinfo;
124  }
125 
126 
128  // Close the file
129  is.close();
130  G4cout << " <== Closed file " << fileenv << G4endl;
131 }