|
|
Go to the documentation of this file.
4 #include "DetectorDescription/Core/interface/Singleton.icc"
42 os_ <<
"<html>\n<head>\n<title>" <<
title <<
"</title>" << endl;
43 os_ <<
"<link rel=\"stylesheet\" type=\"text/css\" href=\"" <<
style <<
"\">" << endl;
64 os_ <<
"</body></html>" << endl;
73 os_ <<
f.header(title_,
"../style.css");
74 os_ <<
f.h2(title_) <<
f.p(text_);
75 ns_type::const_iterator it = n_.begin();
76 ns_type::const_iterator ed = n_.end();
78 for (; it != ed; ++it) {
79 os_ <<
f.li(
f.lnk(it->first +
"/list.html", it->first, target_));
81 os_ <<
f.ulEnd() << endl;
82 os_ <<
f.footer() << endl;
118 os <<
f_.
header(
"Solid Details") <<
f_.
h3(
">> formatting under construction <<");
124 os <<
f_.
header(
"SpecPars Details") <<
f_.
h3(
">> formatting under construction <<");
130 os <<
f_.
header(
"Rotations Details");
134 os <<
"<b>ERROR!</b><br><p>The Rotation " << nm <<
" is not defined!</p>" << endl;
140 os <<
f_.
h3(
"GEANT3 style:");
141 os <<
"<table border=\"0\">" << endl
142 <<
"<tr><td>thetaX =</td><td>" <<
convertRadToDeg(
x.Theta()) <<
" deg</td><tr>" << endl
143 <<
"<tr><td>phiX =</td><td>" <<
convertRadToDeg(
x.Phi()) <<
" deg</td><tr>" << endl
144 <<
"<tr><td>thetaY =</td><td>" <<
convertRadToDeg(
y.Theta()) <<
" deg</td><tr>" << endl
145 <<
"<tr><td>phiY =</td><td>" <<
convertRadToDeg(
y.Phi()) <<
" deg</td><tr>" << endl
146 <<
"<tr><td>thetaZ =</td><td>" <<
convertRadToDeg(
z.Theta()) <<
" deg</td><tr>" << endl
147 <<
"<tr><td>phiZ =</td><td>" <<
convertRadToDeg(
z.Phi()) <<
" deg</td><tr>" << endl
150 os <<
f_.
h3(
"Rotation axis & angle (theta,phi,angle)") << endl;
157 static bool once =
false;
160 DDLogicalPart::iterator<DDLogicalPart> it, ed;
163 for (; it != ed; ++it) {
164 if (it->isDefined().second)
169 string s = nm.
ns() +
" : " + nm.
name();
172 os <<
f_.
h2(
"Material <b>" +
s +
"</b>");
175 os <<
"<b>ERROR!<b><br><p>The Material is not defined in namespace " << nm.
ns() <<
"! </p>" << endl;
182 os <<
f_.
p(
"Composites by fraction-mass:");
185 for (
int i = 0;
i <
co; ++
i) {
187 string elem =
"ERROR";
189 double frac = fm.second;
191 if (
m.isDefined().second) {
192 if (
m.noOfConstituents())
197 os <<
f_.
tr() <<
"<td>" <<
frac <<
"</td>"
198 <<
f_.
td(
f_.
lnk(
"../" +
m.ddname().ns() +
"/" +
m.ddname().name() +
".html",
m.ddname().fullname(),
"_popup"))
203 os <<
f_.
p(
"ElementaryMaterial:");
204 os <<
"<p>z = " << ma.
z() <<
"</p>" << endl;
205 os <<
"<p>a = " <<
convertUnitsTo(1._g_per_mole, ma.
a()) <<
"g/mole</p>" << endl;
209 set<DDLogicalPart>::const_iterator it(lps.begin()), ed(lps.end());
211 os <<
f_.
h3(
"Material used in following LogicalParts:") << endl;
214 for (; it != ed; ++it) {
215 const DDName&
n = it->ddname();
216 os <<
f_.
link(
"../../lp/" +
n.ns() +
"/" +
n.name() +
".html",
n.fullname(),
"_popup");
218 os <<
"</p>" << endl;
223 static bool once =
false;
227 DDSpecifics::iterator<DDSpecifics> it, ed;
229 for (; it != ed; ++it) {
230 if (it->isDefined().second) {
231 const vector<DDPartSelection>& ps = it->selection();
232 vector<DDPartSelection>::const_iterator pit(ps.begin()), ped(ps.end());
233 for (; pit != ped; ++pit) {
241 string s = nm.
ns() +
" : " + nm.
name();
244 os <<
f_.
h2(
"LogicalPart <b>" +
s +
"</b>");
247 os <<
"<b>ERROR!<b><br><p>The LogicalPart is not defined in namespace " << nm.
ns() <<
"! </p>" << endl;
260 typedef map<DDLogicalPart, set<DDSpecifics> > lp_sp_type;
262 lp_sp_type::const_iterator lpspit = lp_sp.find(lp);
263 if (lpspit != lp_sp.end()) {
264 os <<
f_.
h3(
"assigned SpecPars (Specifics):");
265 set<DDSpecifics>::const_iterator it(lpspit->second.begin()), ed(lpspit->second.end());
267 for (; it != ed; ++it) {
268 os <<
f_.
link(
"../../sp/" + it->ddname().ns() +
"/" + it->ddname().name() +
".html",
269 it->ddname().fullname(),
273 os <<
"</p>" << endl;
283 cout <<
"---> dd_to_html() called with category=" << dtls.
category() << endl;
291 string ns_fname =
category +
"/ns.html";
292 ofstream ns_file(ns_fname.c_str());
298 ns_type::const_iterator it(
names.begin()), ed(
names.end());
299 for (; it != ed; ++it) {
300 const string& ns = it->first;
308 ofstream list_file(
fname.c_str());
310 list_file <<
f.header(
text) <<
f.p(
"Instances in Namespace <b>" + ns +
"</b><br>");
313 set<string>::const_iterator nit(it->second.begin()), ned(it->second.end());
314 for (; nit != ned; ++nit) {
315 const string& nm = *nit;
316 string result_s = nm;
319 string d_fname =
category +
"/" + ns +
"/" + nm +
".html";
320 ofstream detail_file(d_fname.c_str());
325 result_s =
">> ERROR: " + nm +
" <<";
326 list_file <<
f.li(
f.lnk(nm +
".html", result_s,
"_details"));
328 list_file <<
f.ulEnd() <<
f.footer();
338 os_ <<
"<frameset cols=\"25%,*\">" << endl;
339 os_ <<
" <frameset rows=\"50%,*\">" << endl;
340 os_ <<
" <frame src=\"" <<
u1_ <<
"\" name=\"" <<
n1_ <<
"\">" << endl;
341 os_ <<
" <frame src=\"" <<
u2_ <<
"\" name=\"" <<
n2_ <<
"\">" << endl;
342 os_ <<
" </frameset>" << endl;
343 os_ <<
" <frame src=\"" <<
u3_ <<
"\" name=\"" <<
n3_ <<
"\">" << endl;
344 os_ <<
"</frameset>" << endl;
345 os_ <<
f.footer() << endl;
350 os <<
f.header(
"DDD Reports");
351 os <<
"<frameset rows=\"50%,50%\"> " << endl
352 <<
" <frameset cols=\"50%,50%\">" << endl
353 <<
" <frame name=\"_ns\" src=\"ns.html\">" << endl
354 <<
" <frame name=\"_list\">" << endl
355 <<
" </frameset>" << endl
356 <<
" <frameset cols=\"50%,50%\">" << endl
357 <<
" <frame name=\"_details\">" << endl
358 <<
" <frame name=\"_popup\">" << endl
359 <<
" </frameset>" << endl
360 <<
"</frameset>" << endl
367 os <<
f.header(
"DDD Web Representation");
368 os <<
"<frameset cols=\"20%,80%\">" << endl
369 <<
" <frame name=\"_menu\" src=\"menu.html\">" << endl
370 <<
" <frame name=\"_selection\" >" << endl
371 <<
"</frameset>" << endl;
378 os <<
f.header(
"DDD Web Main Menu",
"style.css");
379 os <<
f.h1(
"Select a Category:") <<
f.p(
f.lnk(
"lp/index.html",
"LogicalParts",
"_selection"))
380 <<
f.p(
f.lnk(
"ma/index.html",
"Materials",
"_selection")) <<
f.p(
f.lnk(
"so/index.html",
"Solids",
"_selection"))
381 <<
f.p(
f.lnk(
"ro/index.html",
"Rotations",
"_selection")) <<
f.p(
f.lnk(
"sp/index.html",
"SpecPars",
"_selection"));
bool details(std::ostream &os, const DDName &) override
DDName is used to identify DDD entities uniquely.
DDRotationMatrix & matrix()
ns_type & names() override
def_type isDefined() const
constexpr NumType convertRadToDeg(NumType radians)
double density() const
returns the density
constexpr NumType convertUnitsTo(long double desiredUnits, NumType val)
double z() const
retruns the atomic number
int noOfConstituents() const
returns the number of compound materials or 0 for elementary materials
const DDMaterial & material(void) const
Returns a reference object of the material this LogicalPart is made of.
ns_type & names() override
FractionV::value_type constituent(int i) const
returns the i-th compound material and its fraction-mass
ns_type & names() override
virtual ns_type & names()=0
bool findNameSpaces(T dummy, ns_type &m)
std::ostream & operator<<(std::ostream &out, const std::tuple< Types... > &value)
std::map< std::string, std::set< std::string > > ns_type
DDMaterial is used to define and access material information.
const std::string & category()
const std::string names[nVars_]
bool details(std::ostream &os, const DDName &) override
double a() const
returns the atomic mass
const std::string & text()
Interface to attach user specific data to nodes in the expanded-view.
static const char *const categoryName(Category s)
DDEnums::Category category(void) const
Returns the categorization of the DDLogicalPart (sensitive detector element, cable,...
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
bool details(std::ostream &os, const DDName &) override
DDHtmlDetails(const std::string &cat, const std::string &txt)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ....
const std::string & name() const
Returns the name.
bool details(std::ostream &os, const DDName &) override
virtual bool details(std::ostream &os, const DDName &)=0
static PFTauRenderPlugin instance
bool details(std::ostream &os, const DDName &) override
ns_type & names() override
ns_type & names() override
const std::string & ns() const
Returns the namespace.
A DDSolid represents the shape of a part.
Represents a uniquely identifyable rotation matrix.
const std::string fullname() const
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
ROOT::Math::Rotation3D DDRotation