Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VScoreColorMap.cc
Go to the documentation of this file.
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 // $Id: G4VScoreColorMap.cc 67992 2013-03-13 10:59:57Z gcosmo $
28 //
29 
30 #include "G4VScoreColorMap.hh"
31 #include <string>
32 #include <sstream>
33 #include <iomanip>
34 
35 #include "G4VVisManager.hh"
36 #include "G4VisAttributes.hh"
37 #include "G4Text.hh"
38 #include "G4Circle.hh"
39 #include "G4Polyline.hh"
40 #include "G4Colour.hh"
41 
43 :fName(mName),ifFloat(true),fMinVal(0.),fMaxVal(DBL_MAX),fVisManager(0)
44 {;}
45 
47 {;}
48 
50 
52  if(!fVisManager) {
53  G4cerr << "G4VScoringMesh::DrawColorChart(): no visualization system" << G4endl;
54  return;
55  }
56 
57  DrawColorChartBar(_nPoint);
58  DrawColorChartText(_nPoint);
59 }
60 
62 
63  G4double min = this->GetMin();
64  G4double max = this->GetMax();
65  G4double smin = -0.89, smax = smin + 0.05*(_nPoint)*0.83, step=0.001;
66  G4double c[4];
67  for(G4double y = smin; y < smax; y+=step) {
68  G4double ra = (y-smin)/(smax-smin), rb = 1.-ra;
69  G4Polyline line;
70  line.push_back(G4Point3D(-0.96, y, 0.));
71  line.push_back(G4Point3D(-0.91, y, 0.));
72  this->GetMapColor((ra*max+rb*min)/(ra+rb), c);
73  G4Colour col(c[0], c[1], c[2]);
74  G4VisAttributes att(col);
75  line.SetVisAttributes(&att);
76  fVisManager->Draw2D(line);
77  }
78 
79 }
81 
82  G4double min = this->GetMin();
83  G4double max = this->GetMax();
84  G4double c[4];
85  G4Colour black(0., 0., 0.);
86  for(int n = 0; n < _nPoint; n++) {
87  G4double a = n/(_nPoint-1.), b = 1.-a;
88  G4double v = (a*max + b*min)/(a+b);
89  // background color
90  for(int l = 0; l < 21; l++) {
91  G4Polyline line;
92  line.push_back(G4Point3D(-0.908, -0.905+0.05*n+0.002*l, 0.));
93  line.push_back(G4Point3D(-0.705, -0.905+0.05*n+0.002*l, 0.));
94  G4VisAttributes attblack(black);
95  line.SetVisAttributes(&attblack);
96  fVisManager->Draw2D(line);
97  }
98  // text
99  //char cstring[80];
100  //std::sprintf(cstring, "%8.2e", v);
101  //G4String value(cstring);
102  std::ostringstream oss;
103  oss << std::setw(8) << std::setprecision(1) << std::scientific << v;
104  std::string str = oss.str();
105  G4String value(str.c_str());
106 
107  G4Text text(value, G4Point3D(-0.9, -0.9+0.05*n, 0));
108  G4double size = 12.;
109  text.SetScreenSize(size);
110  this->GetMapColor(v, c);
111  G4Colour color(c[0], c[1], c[2]);
112  G4VisAttributes att(color);
113  text.SetVisAttributes(&att);
114 
115  fVisManager->Draw2D(text);
116  }
117 
118  // draw ps name
119  // background
120  G4int lpsname = 20;//fPSName.size();
121  if(lpsname > 0) {
122  for(int l = 0; l < 22; l++) {
123  G4Polyline line;
124  line.push_back(G4Point3D(-0.9, -0.965+0.002*l, 0.));
125  line.push_back(G4Point3D(-0.9+0.025*lpsname, -0.965+0.002*l, 0.));
126  G4VisAttributes attblack(black);
127  //G4VisAttributes attblack(G4Colour(.5, .5, 1.));
128  line.SetVisAttributes(&attblack);
129  fVisManager->Draw2D(line);
130  }
131  // ps name
132  G4Text txtpsname(fPSName, G4Point3D(-0.9, -0.96, 0.));
133  G4double size = 12.;
134  txtpsname.SetScreenSize(size);
135  G4Colour color(1., 1., 1.);
136  G4VisAttributes att(color);
137  txtpsname.SetVisAttributes(&att);
138  fVisManager->Draw2D(txtpsname);
139  }
140 
141  // draw unit
142  // background
143  G4int len = fPSUnit.size();
144  if(len > 0) {
145  for(int l = 0; l < 21; l++) {
146  G4Polyline line;
147  line.push_back(G4Point3D(-0.7, -0.9+0.002*l, 0.));
148  line.push_back(G4Point3D(-0.7+0.3, -0.9+0.002*l, 0.));
149  G4VisAttributes attblack(black);
150  //G4VisAttributes attblack(G4Colour(.5, .5, .5));
151  line.SetVisAttributes(&attblack);
152  fVisManager->Draw2D(line);
153  }
154  // unit
155  G4String psunit = "[" + fPSUnit + "]";
156  G4Text txtunit(psunit, G4Point3D(-0.69, -0.9, 0.));
157  G4double size = 12.;
158  txtunit.SetScreenSize(size);
159  G4Colour color(1., 1., 1.);
160  G4VisAttributes att(color);
161  txtunit.SetVisAttributes(&att);
162  fVisManager->Draw2D(txtunit);
163  }
164 
165 }
virtual void DrawColorChartText(G4int nPoint)
Definition: G4Text.hh:73
G4String fName
Definition: G4AttUtils.hh:55
static G4VVisManager * GetConcreteInstance()
G4VVisManager * fVisManager
virtual void GetMapColor(G4double val, G4double color[4])=0
HepGeom::Point3D< G4double > G4Point3D
Definition: G4Point3D.hh:35
G4double GetMax() const
int G4int
Definition: G4Types.hh:78
const G4int smax
G4VScoreColorMap(G4String mName)
const G4int n
void SetVisAttributes(const G4VisAttributes *)
Definition: G4Visible.cc:80
virtual ~G4VScoreColorMap()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
virtual void DrawColorChartBar(G4int nPoint)
const XML_Char int const XML_Char * value
const XML_Char int len
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
virtual void Draw2D(const G4Circle &, const G4Transform3D &objectTransformation=G4Transform3D())=0
#define DBL_MAX
Definition: templates.hh:83
G4double GetMin() const
G4GLOB_DLL std::ostream G4cerr
void SetScreenSize(G4double)
virtual void DrawColorChart(G4int nPoint=5)