104 std::cout <<
"OutputDDToDDL::beginRun" << std::endl;
111 const auto& gra = pDD->graph();
113 std::set<DDLogicalPart> lpStore;
114 std::set<DDMaterial> matStore;
115 std::set<DDSolid> solStore;
119 std::map<const DDsvalues_type, std::set<const DDPartSelection*>, ddsvaluesCmp> specStore;
120 std::set<DDRotation> rotStore;
125 size_t foundLastDot = rn.find_last_of(
'.');
126 size_t foundLastSlash = rn.find_last_of(
'/');
127 if (foundLastSlash > foundLastDot && foundLastSlash != std::string::npos) {
128 std::cout <<
"What? last . before last / in path for filename... this should die..." << std::endl;
130 if (foundLastDot != std::string::npos && foundLastSlash != std::string::npos) {
131 out.
ns_ = rn.substr(foundLastSlash, foundLastDot);
132 }
else if (foundLastDot != std::string::npos) {
133 out.
ns_ = rn.substr(0, foundLastDot);
135 std::cout <<
"What? no file name? Attempt at namespace =\"" << out.
ns_ <<
"\" filename was " <<
m_fname
141 (*m_xos) << std::fixed << std::setprecision(18);
147 (*m_xos) <<
"<PosPartSection label=\"" << ns_ <<
"\">" << std::endl;
149 for (; git != gend; ++git) {
151 if (lpStore.find(ddLP) != lpStore.end()) {
154 lpStore.insert(ddLP);
160 auto cit = git->begin();
161 auto cend = git->end();
162 for (; cit != cend; ++cit) {
164 if (lpStore.find(ddcurLP) != lpStore.end()) {
167 lpStore.insert(ddcurLP);
170 rotStore.insert(gra.edgeData(cit->second)->ddrot());
176 (*m_xos) <<
"</PosPartSection>" << std::endl;
178 (*m_xos) << std::scientific << std::setprecision(18);
180 (*m_xos) <<
"<MaterialSection label=\"" << ns_ <<
"\">" << std::endl;
181 for (
const auto& it : matStore) {
182 if (!it.isDefined().second)
186 (*m_xos) <<
"</MaterialSection>" << std::endl;
187 (*m_xos) <<
"<RotationSection label=\"" << ns_ <<
"\">" << std::endl;
188 (*m_xos) << std::fixed << std::setprecision(18);
189 std::set<DDRotation>::iterator rit(rotStore.begin()),
red(rotStore.end());
190 for (; rit !=
red; ++rit) {
191 if (!rit->isDefined().second)
193 if (rit->toString() !=
":") {
198 (*m_xos) <<
"</RotationSection>" << std::endl;
200 (*m_xos) << std::fixed << std::setprecision(18);
201 std::set<DDSolid>::const_iterator sit(solStore.begin()), sed(solStore.end());
202 (*m_xos) <<
"<SolidSection label=\"" << ns_ <<
"\">" << std::endl;
203 for (; sit != sed; ++sit) {
204 if (!sit->isDefined().second)
208 (*m_xos) <<
"</SolidSection>" << std::endl;
210 std::set<DDLogicalPart>::iterator lpit(lpStore.begin()), lped(lpStore.end());
211 (*m_xos) <<
"<LogicalPartSection label=\"" << ns_ <<
"\">" << std::endl;
212 for (; lpit != lped; ++lpit) {
213 if (!lpit->isDefined().first)
218 (*m_xos) <<
"</LogicalPartSection>" << std::endl;
220 (*m_xos) << std::fixed << std::setprecision(18);
221 std::map<DDsvalues_type, std::set<const DDPartSelection*> >::const_iterator mit(specStore.begin()),
222 mend(specStore.end());
223 (*m_xos) <<
"<SpecParSection label=\"" << ns_ <<
"\">" << std::endl;
224 for (; mit != mend; ++mit) {
227 (*m_xos) <<
"</SpecParSection>" << std::endl;
math::Graph< DDLogicalPart, DDPosData * > Graph
std::vector< double >::size_type index_type
void addToSpecStore(const DDLogicalPart &lp, std::map< const DDsvalues_type, std::set< const DDPartSelection * >, ddsvaluesCmp > &specStore)
void addToMatStore(const DDMaterial &mat, std::set< DDMaterial > &matStore)
void specpar(const DDSpecifics &sp, std::ostream &xos)
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
void addToSolStore(const DDSolid &sol, std::set< DDSolid > &solStore, std::set< DDRotation > &rotStore)
Represents a uniquely identifyable rotation matrix.
void position(const DDLogicalPart &parent, const DDLogicalPart &child, DDPosData *edgeToChild, int &rotNameSeed, std::ostream &xos)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
void logicalPart(const DDLogicalPart &lp, std::ostream &xos)
Graph::const_adj_iterator adjl_iterator
edm::ESGetToken< DDCompactView, IdealGeometryRecord > ddToken_
void material(const DDMaterial &material, std::ostream &xos)
adj_list::const_iterator const_adj_iterator
void rotation(const DDRotation &rotation, std::ostream &xos, const std::string &rotn="")
void solid(const DDSolid &solid, std::ostream &xos)
const DDMaterial & material(void) const
Returns a reference object of the material this LogicalPart is made of.