From 8de0fd11fc573c495e8e917d3f501bd14a0056f2 Mon Sep 17 00:00:00 2001 From: Markus Frank <markus.frank@cern.ch> Date: Mon, 3 Jun 2013 11:41:35 +0000 Subject: [PATCH] Fix problems with invalid volume ids --- .../ILDExDet/src/compact/ILDExSIT_geo.cpp | 18 +++++++++--------- .../ILDExDet/src/compact/ILDExVXD_geo.cpp | 15 ++++++++------- DDG4/src/Geant4Converter.cpp | 9 ++------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/DDExamples/ILDExDet/src/compact/ILDExSIT_geo.cpp b/DDExamples/ILDExDet/src/compact/ILDExSIT_geo.cpp index aa3a06520..efb9ddf72 100644 --- a/DDExamples/ILDExDet/src/compact/ILDExSIT_geo.cpp +++ b/DDExamples/ILDExDet/src/compact/ILDExSIT_geo.cpp @@ -18,12 +18,12 @@ using namespace DD4hep; using namespace DD4hep::Geometry; static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { - xml_det_t x_det = e; - string name = x_det.nameStr(); - DetElement sit(name,x_det.id()); - Volume mother = lcdd.pickMotherVolume(sit); - - + xml_det_t x_det = e; + string name = x_det.nameStr(); + DetElement sit(name,x_det.id()); + Assembly assembly(name+"_assembly"); + PlacedVolume pv; + // setup the encoder UTIL::BitField64 encoder( ILDCellID0::encoder_string ) ; encoder.reset() ; // reset to 0 @@ -75,11 +75,11 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { // place the volume and set the cellID0 - will be set to the copyNo in Geant4Converter encoder[ILDCellID0::module] = j ; int cellID0 = encoder.lowWord() ; - - mother.placeVolume(laddervol,pos,Rotation(0,0,j*dphi)).addPhysVolID("CellID0", cellID0 ) ; - + assembly.placeVolume(laddervol,pos,Rotation(0,0,j*dphi)).addPhysVolID("CellID0", cellID0 ) ; } } + pv = lcdd.pickMotherVolume(sit).placeVolume(assembly); + sit.setPlacement(pv); return sit; } diff --git a/DDExamples/ILDExDet/src/compact/ILDExVXD_geo.cpp b/DDExamples/ILDExDet/src/compact/ILDExVXD_geo.cpp index 41c789c86..3a50a2c10 100644 --- a/DDExamples/ILDExDet/src/compact/ILDExVXD_geo.cpp +++ b/DDExamples/ILDExDet/src/compact/ILDExVXD_geo.cpp @@ -18,16 +18,16 @@ using namespace DD4hep; using namespace DD4hep::Geometry; static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { - DetElement vxd; - xml_det_t x_det = e; - string name = x_det.nameStr(); + DetElement vxd; + xml_det_t x_det = e; + string name = x_det.nameStr(); + Assembly assembly(name+"_assembly"); + PlacedVolume pv; VXDData* vxd_data = new VXDData(); vxd.assign(vxd_data,name,x_det.typeStr()); vxd_data->id = x_det.id(); - Volume mother = lcdd.pickMotherVolume(vxd); - // setup the encoder UTIL::BitField64 encoder( ILDCellID0::encoder_string ) ; encoder.reset() ; // reset to 0 @@ -133,11 +133,12 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { encoder[ILDCellID0::module] = j ; int cellID0 = encoder.lowWord() ; - mother.placeVolume(laddervol,pos, rot ).addPhysVolID("CellID0", cellID0 ) ; + assembly.placeVolume(laddervol,pos, rot ).addPhysVolID("CellID0", cellID0 ) ; } - vxd.setVisAttributes(lcdd, x_det.visStr(),laddervol); } + pv = lcdd.pickMotherVolume(vxd).placeVolume(assembly); + vxd.setPlacement(pv); return vxd; } diff --git a/DDG4/src/Geant4Converter.cpp b/DDG4/src/Geant4Converter.cpp index 9852c3b4e..78608c25e 100644 --- a/DDG4/src/Geant4Converter.cpp +++ b/DDG4/src/Geant4Converter.cpp @@ -411,7 +411,6 @@ void* Geant4Converter::handlePlacement(const string& name, const TGeoNode* node) G4PVPlacement* g4 = info.g4Placements[node]; if ( !g4 ) { TGeoMatrix* trafo = node->GetMatrix(); - int copy = node->GetNumber(); // if the CellID0 volID is defined for the volume we @@ -428,16 +427,12 @@ void* Geant4Converter::handlePlacement(const string& name, const TGeoNode* node) copy = it->second ; } //-------------------------------------------------------- - - G4LogicalVolume* vol = info.g4Volumes[node->GetVolume()]; G4LogicalVolume* mot = info.g4Volumes[node->GetMotherVolume()]; if ( trafo ) { const Double_t* trans = trafo->GetTranslation(); - const Value<TGeoNodeMatrix,PlacedVolume::Object>* obj = - dynamic_cast<const Value<TGeoNodeMatrix,PlacedVolume::Object>* >(node); if ( 0 == vol ) { - cout << "FATAL: Unknown G4 volume:" << (void*)obj << " " << obj->GetName() << endl; + cout << "FATAL: Unknown G4 volume:" << (void*)node << " " << node->GetName() << endl; } else if ( trafo->IsRotation() ) { const Double_t* rot = trafo->GetRotationMatrix(); @@ -647,7 +642,7 @@ void* Geant4Converter::printSensitive(const TNamed* sens_det, const set<const TG G4GeometryInfo& info = data(); Geant4SensitiveDetector* g4 = info.g4SensDets[sens_det]; ConstVolumeSet& volset = info.sensitives[sens_det]; - SensitiveDetector sd = Ref_t(sens_det); + SensitiveDetector sd = Ref_t(sens_det); bool verbose = sd.verbose(); if ( verbose ) { -- GitLab