CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Classes | Typedefs | Functions
DDStreamer.cc File Reference
#include "DetectorDescription/Core/interface/DDStreamer.h"
#include "DetectorDescription/Base/interface/Singleton.h"
#include "DetectorDescription/Core/interface/DDMaterial.h"
#include "DetectorDescription/Core/interface/DDSolid.h"
#include "DetectorDescription/Core/interface/DDLogicalPart.h"
#include "DetectorDescription/Core/interface/DDTransform.h"
#include "DetectorDescription/Core/interface/DDRoot.h"
#include "DetectorDescription/Core/interface/DDSpecifics.h"
#include "DetectorDescription/Core/interface/DDValue.h"
#include "DetectorDescription/Base/interface/DDdebug.h"
#include "DetectorDescription/Core/interface/DDConstant.h"
#include "DetectorDescription/Core/interface/DDPartSelection.h"
#include "DetectorDescription/ExprAlgo/interface/ExprEvalSingleton.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include <iomanip>

Go to the source code of this file.

Classes

struct  double_binary
 

Typedefs

typedef double_binary B
 

Functions

template<class T >
size_t dd_count (const T &dummy)
 
void dd_get_boolean_params (std::istream &is, DDRotation &r, DDTranslation &t, DDSolid &a, DDSolid &b)
 
std::string dd_get_delimit (std::istream &is, char d)
 
DDName dd_get_name (std::istream &is)
 
DDName dd_get_name_string (std::istream &is)
 
void dd_rot_bin_in (std::istream &is, DDRotationMatrix &r)
 
void dd_rot_bin_out (std::ostream &os, const DDRotationMatrix &rm)
 
void dd_rot_out (std::ostream &os, const DDRotation &r)
 
void dd_stream_booleans (std::ostream &os, DDSolid s, DDSolidShape sh)
 
void dd_stream_reflected (std::ostream &os, DDSolid s)
 
void nameout (std::ostream &o, const DDName &n)
 
void nameout_strings (std::ostream &o, const DDName &n)
 
std::ostream & operator<< (std::ostream &os, double_binary b)
 
std::istream & operator>> (std::istream &is, double_binary &b)
 

Typedef Documentation

typedef double_binary B

Definition at line 235 of file DDStreamer.cc.

Function Documentation

template<class T >
size_t dd_count ( const T &  dummy)

Definition at line 215 of file DDStreamer.cc.

References begin, end, query::result, and svgfig::template().

Referenced by DDStreamer::materials_write(), DDStreamer::parts_write(), DDStreamer::rots_write(), DDStreamer::solids_write(), and DDStreamer::specs_write().

216 {
217  size_t result(0);
218  typename T::template iterator<T> it(T::begin()), ed(T::end());
219  for (; it!=ed; ++it) {
220  if (it->isDefined().second) {
221  ++result;
222  }
223  }
224  return result;
225 }
tuple result
Definition: query.py:137
#define end
Definition: vmac.h:38
#define begin
Definition: vmac.h:31
def template
Definition: svgfig.py:520
void dd_get_boolean_params ( std::istream &  is,
DDRotation r,
DDTranslation t,
DDSolid a,
DDSolid b 
)

Definition at line 386 of file DDStreamer.cc.

References DCOUT, dd_get_name(), n, DDBase< N, C >::name(), ExpressReco_HICollisions_FallBack::x, ExpressReco_HICollisions_FallBack::y, and z.

Referenced by DDStreamer::solids_read().

387 {
388  DDName n = dd_get_name(is);
389  r = DDRotation(n);
390  //double x(0), y(0), z(0);
391  B x,y,z;
392  char cr = is.get();
393  if(cr != ' ')
394  throw DDException("DDStreamer::get_boolean_param(): inconsistent sequence! no blank delimiter before trans!");
395  is >> x;
396  is >> y;
397  is >> z;
398  t = DDTranslation(x.val_,y.val_,z.val_);
399  n = dd_get_name(is);
400  a = DDSolid(n);
401  n = dd_get_name(is);
402  b = DDSolid(n);
403  DCOUT('y', "boolean-par: rot=" << r.name() << " t=" << t << " a=" << a.name() << " b=" << b.name());
404 }
const N & name() const
Definition: DDBase.h:88
An exception for DDD errors.
Definition: DDException.h:23
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
A DDSolid represents the shape of a part.
Definition: DDSolid.h:42
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
DDName dd_get_name(std::istream &is)
Definition: DDStreamer.cc:93
Definition: DDAxes.h:10
#define DCOUT(M_v_Y, M_v_S)
Definition: DDdebug.h:53
std::string dd_get_delimit ( std::istream &  is,
char  d 
)

Definition at line 66 of file DDStreamer.cc.

References i.

Referenced by dd_get_name_string(), DDStreamer::names_read(), DDStreamer::specs_read(), and DDStreamer::vars_read().

67 {
68  std::string nm;
69  char i;
70  while ((i=is.get()) && i != d) ;
71  while ((i=is.get()) && i != d) {
72  nm = nm + i;
73  }
74  return nm;
75 }
int i
Definition: DBlmapReader.cc:9
DDName dd_get_name ( std::istream &  is)

Definition at line 93 of file DDStreamer.cc.

References ExpressReco_HICollisions_FallBack::id.

Referenced by dd_get_boolean_params(), DDStreamer::materials_read(), DDStreamer::parts_read(), DDStreamer::pos_read(), DDStreamer::rots_read(), DDStreamer::solids_read(), and DDStreamer::specs_read().

94 {
95  size_t id(0);
96  is >> id;
97  return DDName(id);
98 }
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
DDName dd_get_name_string ( std::istream &  is)

Definition at line 77 of file DDStreamer.cc.

References dd_get_delimit().

78 {
79  std::string nm(dd_get_delimit(is,'"')) ;
80  return DDName(nm,
81  dd_get_delimit(is,'"'));
82 /*
83  char i;
84  while ((i=is.get()) && i != '"') ;
85  while ((i=is.get()) && i != '"') {
86  nm = nm + i;
87  }
88  std::pair<std::string,std::string> p = DDSplit(nm);
89  return DDName(p.first,p.second);
90 */
91 }
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
std::string dd_get_delimit(std::istream &is, char d)
Definition: DDStreamer.cc:66
void dd_rot_bin_in ( std::istream &  is,
DDRotationMatrix r 
)

Definition at line 577 of file DDStreamer.cc.

References i, v, and double_binary::val_.

Referenced by DDStreamer::pos_read(), and DDStreamer::rots_read().

578 {
579  double v[9];
580  B w;
581  for (int i=0; i<9;i++) {
582  is >> w; v[i]=w.val_;
583  }
584  r.SetComponents(v,v+9);
585 }
int i
Definition: DBlmapReader.cc:9
mathSSE::Vec4< T > v
void dd_rot_bin_out ( std::ostream &  os,
const DDRotationMatrix rm 
)

Definition at line 535 of file DDStreamer.cc.

References i, and v.

Referenced by dd_rot_out(), and DDStreamer::pos_write().

536 {
537  double v[9];
538  rm.GetComponents(v,v+9);
539  for (int i=0;i<9;i++)
540  os << B(v[i]);
541 }
int i
Definition: DBlmapReader.cc:9
double_binary B
Definition: DDStreamer.cc:235
string rm
Definition: submit.py:76
mathSSE::Vec4< T > v
void dd_rot_out ( std::ostream &  os,
const DDRotation r 
)

Definition at line 543 of file DDStreamer.cc.

References DCOUT, dd_rot_bin_out(), DDBase< N, C >::name(), nameout(), submit::rm, and DDRotation::rotation().

Referenced by DDStreamer::rots_write().

543  {
544  os << "--Rot: " << r.name() << " @ ";
545  nameout(os,r.name());
546  os << ' ';
547  const DDRotationMatrix & rm = *(r.rotation());
548  DCOUT('y', "write-rots=" << r.name());
549 /*
550  os << ' ' << B(rep.xx_) << ' ' << B(rep.xy_) << ' ' << B(rep.xz_) << ' '
551  << B(rep.yx_) << ' ' << B(rep.yy_) << ' ' << B(rep.yz_) << ' '
552  << B(rep.zx_) << ' ' << B(rep.zy_) << ' ' << B(rep.zz_) << std::endl;
553 */
554  dd_rot_bin_out(os,rm);
555  os << std::endl;
556 }
const DDRotationMatrix * rotation() const
Returns the read-only rotation-matrix.
Definition: DDTransform.h:90
const N & name() const
Definition: DDBase.h:88
void dd_rot_bin_out(std::ostream &os, const DDRotationMatrix &rm)
Definition: DDStreamer.cc:535
string rm
Definition: submit.py:76
void nameout(std::ostream &o, const DDName &n)
Definition: DDStreamer.cc:105
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
#define DCOUT(M_v_Y, M_v_S)
Definition: DDdebug.h:53
void dd_stream_booleans ( std::ostream &  os,
DDSolid  s,
DDSolidShape  sh 
)

Definition at line 322 of file DDStreamer.cc.

References b, DDBase< N, C >::isDefined(), DDBase< N, C >::name(), nameout(), DDBooleanSolid::rotation(), DDBooleanSolid::solidA(), DDBooleanSolid::solidB(), and DDBooleanSolid::translation().

Referenced by DDStreamer::solids_write().

323 {
324  DDBooleanSolid b(s);
325  DDRotation temprot = b.rotation();
326  if(!temprot.isDefined().second) {
327  temprot = DDRotation();
328  edm::LogError("DDStreamer") << "DDStreamer::dd_stream_booleans(): solid=" << s.name() << " has no rotation. Using unit-rot." << std::endl;
329  }
330  nameout(os,temprot.name());
331  // binary output of the translation std::vector
332  os << ' ' << B(b.translation().x()) // << ' '
333  << B(b.translation().y()) // << ' '
334  << B(b.translation().z()) << ' ';
335  nameout(os,b.solidA().name());
336  os << ' ';
337  nameout(os,b.solidB().name());
338 }
def_type isDefined() const
Definition: DDBase.h:121
const N & name() const
Definition: DDBase.h:88
double_binary B
Definition: DDStreamer.cc:235
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
double b
Definition: hdecay.h:120
void nameout(std::ostream &o, const DDName &n)
Definition: DDStreamer.cc:105
void dd_stream_reflected ( std::ostream &  os,
DDSolid  s 
)

Definition at line 340 of file DDStreamer.cc.

References DDBase< N, C >::name(), nameout(), and DDReflectionSolid::unreflected().

Referenced by DDStreamer::solids_write().

341 {
342  DDReflectionSolid ref(s);
343  nameout(os,ref.unreflected().name());
344 }
void nameout(std::ostream &o, const DDName &n)
Definition: DDStreamer.cc:105
void nameout ( std::ostream &  o,
const DDName n 
)
void nameout_strings ( std::ostream &  o,
const DDName n 
)

Definition at line 100 of file DDStreamer.cc.

References DDName::name(), and DDName::ns().

101 {
102  o << '"' << n.name() << '"' << ' ' << '"' << n.ns() << '"' ;
103 }
const std::string & ns() const
Returns the namespace.
Definition: DDName.cc:101
const std::string & name() const
Returns the name.
Definition: DDName.cc:87
std::ostream& operator<< ( std::ostream &  os,
double_binary  b 
)

Definition at line 237 of file DDStreamer.cc.

References double_binary::val_.

238 {
239  const char * d = (const char *)(&(b.val_));
240  //size_t s(sizeof(double)), i(0);
241  //os << '(';
242  os.write(d,sizeof(double));
243  return os;
244 }
std::istream& operator>> ( std::istream &  is,
double_binary b 
)
inline

Definition at line 247 of file DDStreamer.cc.

References double_binary::val_.

248 {
249  char * d = (char *)(&(b.val_));
250  //size_t s(sizeof(double)), i(0);
251  is.read(d,sizeof(double));
252  return is;
253 }