source: trunk/examples/advanced/composite_calorimeter/src/CCalVisualisable.cc@ 1249

Last change on this file since 1249 was 807, checked in by garnier, 17 years ago

update

File size: 5.5 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// File: CCalVisualisable.cc
28// Description: Sets visualisable attributes from .vis files
29///////////////////////////////////////////////////////////////////////////////
30#include "CCalVisualisable.hh"
31
32#include <fstream>
33#include "CCalutils.hh"
34
35//Comment/Uncomment next line to unset/set debug information printing
36//#define debug
37
38const char* visEnvName = "CCAL_VISPATH";
39const char* CCalVisualisable::pathName=0;
40
41CCalVisualisable::CCalVisualisable(G4String file):visFile(file) {
42 if (!pathName)
43 setPath();
44 setDefault();
45 readFile();
46}
47
48bool CCalVisualisable::readFile(G4String file) {
49 visFile=file;
50 return readFile();
51}
52
53void CCalVisualisable::setDefault(){
54 theParameters[Sensitive] = visParameters(true);
55 theParameters[Electronics] = visParameters(false);
56 theParameters[Support] = visParameters(false);
57 theParameters[Cable] = visParameters(false);
58 theParameters[OtherServices] = visParameters(false);
59 theParameters[PseudoVolumes] = visParameters(false);
60}
61
62void CCalVisualisable::setColor(visType v, double r, double g, double b){
63 theParameters[v].rColor=r;
64 theParameters[v].gColor=g;
65 theParameters[v].bColor=b;
66}
67
68void CCalVisualisable::setPath() {
69 pathName = getenv(visEnvName);
70 if (!pathName) {
71 G4cerr << "ERROR: " << visEnvName << " environmental variable not set!"
72 << G4endl;
73 G4cerr << " Set it and restart." << G4endl;
74 exit(-333);
75 }
76}
77
78bool CCalVisualisable::readFile() {
79 if (visFile=="") {
80 G4cerr << "ERROR: No file was specified from which to read Visualisation parameters"
81 << G4endl;
82 return false;
83 }
84
85 ///////////////////////////////////////////////////////////////
86 //Let's open the file
87 G4cout << " ==> Opening file " << visFile
88 << " to read visualisation parameters..."
89 << G4endl;
90
91 G4String pathname(pathName);
92 std::ifstream is;
93#ifdef debug
94 G4cout << "Viualisable : Path " << pathname << " FIle " << visFile << G4endl;
95#endif
96 bool ok = openGeomFile(is, pathname, visFile);
97 if (!ok) {
98 G4cout << "WARNING: Could not read " << visFile << G4endl;
99 G4cout << " Default visualization parameters will be used." << G4endl;
100 return false;
101 }
102
103 while (is) {
104 G4String viewvol;
105 readName(is,viewvol);
106
107 visType vt = Undefined;
108 if (viewvol=="Sensitive")
109 vt=Sensitive;
110 else if (viewvol=="Electronics")
111 vt=Electronics;
112 else if (viewvol=="Support")
113 vt=Support;
114 else if (viewvol=="Absorber")
115 vt=Absorber;
116 else if (viewvol=="Cable")
117 vt=Cable;
118 else if (viewvol=="OtherServices")
119 vt=OtherServices;
120 else if (viewvol=="PseudoVolumes")
121 vt=PseudoVolumes;
122 else {
123 vt=Undefined;
124 G4cerr << "WARNING: Unknown type of visualisable object \"" << viewvol
125 << "\"." << G4endl;
126 }
127
128
129 int isvisible, wireframe;
130 double r, g, b;
131
132 is >> isvisible >> r >> g >> b >> wireframe >> jump;
133
134 r=checkColorRange(r,'R');
135 g=checkColorRange(g,'G');
136 b=checkColorRange(b,'B');
137
138 if (vt!=Undefined) {
139#ifdef debug
140 G4cout << tab << viewvol << tab << isvisible << tab
141 << r << " " << g << " "<< b << tab
142 << wireframe << G4endl;
143#endif
144 theParameters[vt]=visParameters(isvisible, r, g, b, wireframe);
145 }
146
147 }
148
149 ///////////////////////////////////////////////////////////////
150 // Close the file
151 G4cout << " ==> Closing file " << visFile << G4endl;
152 is.close();
153
154 return true;
155}
156
157double CCalVisualisable::checkColorRange(double cvalue, char ctype) const {
158 if (cvalue>1) {
159 G4cerr << "ERROR: In " << visFile << ". Color " << ctype << "="
160 << cvalue << " > 1" << G4endl;
161 G4cerr << " It will be reset to 1." << G4endl;
162 return 1.;
163 }
164 if (cvalue<0) {
165 G4cerr << "ERROR: In " << visFile << ". Color " << ctype << "="
166 << cvalue << " < 0" << G4endl;
167 G4cerr << " It will be reset to 0." << G4endl;
168 return 0.;
169 }
170 return cvalue;
171}
Note: See TracBrowser for help on using the repository browser.