CMS 3D CMS Logo

List of all members | Public Member Functions
DDLCompositeMaterial Class Referencefinal

DDLCompositeMaterial processes all CompositeMaterial elements. More...

#include <DDLCompositeMaterial.h>

Inheritance diagram for DDLCompositeMaterial:
DDLMaterial DDXMLElement

Public Member Functions

 DDLCompositeMaterial (DDLElementRegistry *myreg)
 
void preProcessElement (const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
 Called by loadAttributes AFTER attributes are loaded. More...
 
void processElement (const std::string &name, const std::string &nmspace, DDCompactView &cpv) override
 Processing the element. More...
 
- Public Member Functions inherited from DDLMaterial
 DDLMaterial (DDLElementRegistry *myreg)
 
virtual void setReference (const std::string &nmspace, DDCompactView &cpv)
 
- Public Member Functions inherited from DDXMLElement
void appendText (const std::string &inText)
 append to the current (i.e. most recently added) More...
 
virtual std::vector< DDXMLAttribute >::const_iterator begin (void)
 
virtual void clear (void)
 clear this element's contents. More...
 
 DDXMLElement (DDLElementRegistry *myreg)
 Constructor. More...
 
 DDXMLElement (DDLElementRegistry *myreg, const bool &clearme)
 Constructor for autoClear element. More...
 
virtual std::vector< DDXMLAttribute >::const_iterator end (void)
 
virtual const std::string & get (const std::string &name, size_t aIndex=0) const
 Returns a specific value from the aIndex set of attributes. More...
 
virtual const std::string & getAttribute (const std::string &name) const
 Access to attributes by name. More...
 
virtual const DDXMLAttributegetAttributeSet (size_t aIndex=0) const
 Get a "row" of attributes, i.e. one attribute set. More...
 
virtual const DDName getDDName (const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
 
const std::string getText (size_t tindex=0) const
 retrieve the text blob. More...
 
virtual std::vector< std::string > getVectorAttribute (const std::string &name)
 Returns a set of values as a std::vector of strings, given the attribute name. More...
 
virtual bool gotText (void) const
 gotText()? kind of like gotMilk? Yes = text has already been encountered. More...
 
virtual bool isEmpty (void) const
 Have any elements of this type been encountered but not processed? More...
 
void loadAttributes (const std::string &elemName, const std::vector< std::string > &names, const std::vector< std::string > &values, const std::string &nmspace, DDCompactView &cpv)
 Load the element attributes. More...
 
void loadText (const std::string &inText)
 Used to load both text and XML comments into this object. More...
 
std::vector< DDXMLAttribute >::const_iterator & operator++ (int inc)
 Allow the elements of this type to be iterated over using ++ operator. More...
 
const std::string & parent (void) const
 access to parent element name More...
 
void setParent (const std::string &pename)
 Set parent element name to central list of names. More...
 
void setSelf (const std::string &sename)
 Set self element name to central list of names. More...
 
virtual size_t size (void) const
 Number of elements accumulated. More...
 
virtual void stream (std::ostream &os) const
 Allow for the elements to have their own streaming method, but also provide a default. More...
 
void throwError (const std::string &keyMessage) const
 format std::string for throw an error. More...
 
virtual ~DDXMLElement (void)=default
 Destructor. More...
 

Additional Inherited Members

- Protected Attributes inherited from DDXMLElement
DDLElementRegistrymyRegistry_
 

Detailed Description

DDLCompositeMaterial processes all CompositeMaterial elements.

Author
Michael Case

DDLCompositeMaterial.h - description

begin: Wed Oct 31 2001 email: case@.nosp@m.ucdh.nosp@m.ep.uc.nosp@m.davi.nosp@m.s.edu

This is the processor for CompositeMaterial DDL elements.

The CompositeMaterial is an element that contains other elements. In particular, it contains rMaterial elements which are references either to other Composite or Elementary materials.

Definition at line 31 of file DDLCompositeMaterial.h.

Constructor & Destructor Documentation

DDLCompositeMaterial::DDLCompositeMaterial ( DDLElementRegistry myreg)

Definition at line 16 of file DDLCompositeMaterial.cc.

17  : DDLMaterial( myreg )
18 {}
DDLMaterial(DDLElementRegistry *myreg)
Definition: DDLMaterial.cc:11

Member Function Documentation

void DDLCompositeMaterial::preProcessElement ( const std::string &  name,
const std::string &  nmspace,
DDCompactView cpv 
)
overridevirtual

Called by loadAttributes AFTER attributes are loaded.

The preProcessElement method can assume that the attributes are loaded and perform any code that is necessary at the start of an element.

This would allow users to call their own code to setup anything necessary for the continued processing of the child elements.

Reimplemented from DDXMLElement.

Definition at line 23 of file DDLCompositeMaterial.cc.

References DDLElementRegistry::getElement(), and DDXMLElement::myRegistry_.

24 {
25  // fyi: no need to clear MaterialFraction because it is cleared at the end of each
26  // CompositeMaterial
27  myRegistry_->getElement( "rMaterial" )->clear();
28 }
DDLElementRegistry * myRegistry_
Definition: DDXMLElement.h:172
std::shared_ptr< DDXMLElement > getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
void DDLCompositeMaterial::processElement ( const std::string &  name,
const std::string &  nmspace,
DDCompactView cpv 
)
overridevirtual

Processing the element.

The processElement method completes any necessary work to process the XML element.

For example, this can be used to call the DDCore to make the geometry in memory. There is a default for this so that if not declared in the inheriting class, no processing is done.

Reimplemented from DDXMLElement.

Definition at line 31 of file DDLCompositeMaterial.cc.

References DDMaterial::addMaterial(), DDXMLElement::clear(), ev, ClhepEvaluator::eval(), DDLElementRegistry::evaluator(), DDXMLElement::getAttributeSet(), DDXMLElement::getDDName(), DDLElementRegistry::getElement(), mps_fire::i, mps_check::msg, DDXMLElement::myRegistry_, DDName::name(), DDName::ns(), DDLMaterial::setReference(), AlCaHLTBitMon_QueryRunRegistry::string, and DDXMLElement::throwError().

32 {
35 
36  DDName ddn = getDDName( nmspace );
37  DDMaterial mat;
38 
39  mat = DDMaterial( ddn, ev.eval( nmspace, atts.find( "density" )->second ));
40 
41  // Get references to relevant DDL elements that are needed.
42  auto myMF = myRegistry_->getElement( "MaterialFraction" );
43  auto myrMaterial = myRegistry_->getElement( "rMaterial" );
44 
45  // Get the names from those elements and also the namespace for the reference element.
46  // The parent element CompositeMaterial MUST be in the same namespace as this fraction.
47  // additionally, because it is NOT a reference, we do not try to dis-entangle the namespace.
48  // That is, we do not use the getName() which searches the name for a colon, but instead use
49  // the "raw" name attribute.
50 
51  // TO DO: sfractions assumes that the values are "mixture by weight" (I think)
52  // we need to retrieve the fraction attributes and then check the method
53  // attribute of the CompositeMaterial to determine if the numbers go straight
54  // in to the DDCore or if the numbers need to be manipulated so that the
55  // sfractions are really mixtures by weight going into the DDCore. Otherwise,
56  // the DDCore has to know which are which and right now it does not.
57 
58  if( myMF->size() != myrMaterial->size())
59  {
60  std::string msg = "/nDDLCompositeMaterial::processElement found that the ";
61  msg += "number of MaterialFractions does not match the number ";
62  msg += "of rMaterial names for ";
63  msg += ddn.ns() + ":" + ddn.name() + ".";
64  throwError( msg );
65  }
66  for( size_t i = 0; i < myrMaterial->size(); ++i )
67  {
68  atts = myMF->getAttributeSet( i );
69  mat.addMaterial( myrMaterial->getDDName( nmspace, "name", i ),
70  ev.eval( nmspace, atts.find( "fraction" )->second ));
71  }
72  // clears and sets new reference to THIS material.
73  DDLMaterial::setReference( nmspace, cpv );
74  myMF->clear();
75  clear();
76 }
DDLElementRegistry * myRegistry_
Definition: DDXMLElement.h:172
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:43
virtual const DDXMLAttribute & getAttributeSet(size_t aIndex=0) const
Get a "row" of attributes, i.e. one attribute set.
Definition: DDXMLElement.cc:72
void throwError(const std::string &keyMessage) const
format std::string for throw an error.
const std::string & ns() const
Returns the namespace.
Definition: DDName.cc:67
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
bool ev
std::map< std::string, std::string > DDXMLAttribute
Definition: DDXMLElement.h:45
int addMaterial(const DDMaterial &m, double fm)
adds a material to the mixture proportional to its fraction-mass fm.
Definition: DDMaterial.cc:72
ClhepEvaluator & evaluator()
std::shared_ptr< DDXMLElement > getElement(const std::string &name)
THE most important part. Getting the pointer to a given element type.
virtual void setReference(const std::string &nmspace, DDCompactView &cpv)
Definition: DDLMaterial.cc:16
tuple msg
Definition: mps_check.py:285
double eval(const std::string &ns, const std::string &expr)
virtual void clear(void)
clear this element&#39;s contents.
Definition: DDXMLElement.cc:54
virtual const DDName getDDName(const std::string &defaultNS, const std::string &attname=std::string("name"), size_t aIndex=0)
Definition: DDXMLElement.cc:79
const std::string & name() const
Returns the name.
Definition: DDName.cc:53