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

Last change on this file since 1303 was 807, checked in by garnier, 16 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.