diff --git a/DDCore/src/DetectorInterna.cpp b/DDCore/src/DetectorInterna.cpp index feb556357115478ea46e734ea7145813052750bf..9fad854e422bbc37febd5867b6ee3c7323da9ad6 100644 --- a/DDCore/src/DetectorInterna.cpp +++ b/DDCore/src/DetectorInterna.cpp @@ -107,9 +107,9 @@ DetElementObject* DetElementObject::clone(int new_id, int flg) const { obj->survey = AlignmentCondition(); obj->parent = DetElement(); if ( (flg & DetElement::COPY_PLACEMENT) == DetElement::COPY_PLACEMENT ) { - obj->placement = placement; - obj->idealPlace = idealPlace; - obj->placementPath = placementPath; + obj->placement = placement; + obj->idealPlace = idealPlace; + obj->placementPath = ""; } // This implicitly assumes that the children do not access the parent's extensions! obj->ObjectExtensions::clear(); @@ -117,16 +117,17 @@ DetElementObject* DetElementObject::clone(int new_id, int flg) const { obj->children.clear(); for (const auto& i : children ) { - const NamedObject* pc = i.second.ptr(); const DetElementObject& d = i.second._data(); - DetElement child(d.clone(d.id, DetElement::COPY_PLACEMENT), pc->GetName(), pc->GetTitle()); - pair<DetElement::Children::iterator, bool> r = obj->children.insert(make_pair(child.name(), child)); + DetElement c = d.clone(d.id, DetElement::COPY_PLACEMENT); + c->SetName(d.GetName()); + c->SetTitle(d.GetTitle()); + pair<DetElement::Children::iterator, bool> r = obj->children.insert(make_pair(c.name(), c)); if (r.second) { - child._data().parent = obj; + c._data().parent = obj; } else { - throw runtime_error("dd4hep: DetElement::copy: Element " + string(child.name()) + - " is already present [Double-Insert]"); + except("DetElement","+++ DetElement::copy: Element %s is already " + "present [Double-Insert]", c.name()); } } return obj;