diff --git a/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.cxx b/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.cxx index 5dbe4b9b91c6246124800f7e3f885a46a47ce1a8..5b97b1a1ca65476d0c61d285c549b675a44e24bf 100644 --- a/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.cxx +++ b/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.cxx @@ -50,7 +50,8 @@ EmulsionPlates::getParameters() m_tungstenWidth = platesParameters->platesWidth(); m_tungstenHeight = platesParameters->platesHeight(); m_tungstenThickness = platesParameters->platesThickness(); - m_material = m_materials->getMaterial(platesParameters->platesMaterial()); + m_absorberMaterial = m_materials->getMaterial(platesParameters->platesMaterial()); + m_airMaterial = m_materials->gasMaterial(); m_nBasesPerModule = generalParameters->nBasesPerModule(); m_nModules = generalParameters->nModules(); @@ -94,7 +95,10 @@ EmulsionPlates::preBuild() const GeoBox* platesShape = new GeoBox(0.5*m_width, 0.5*m_height, 0.5*m_thickness); // GeoLogVol * platesLog = new GeoLogVol(getName(), platesShape, m_materials->gasMaterial()); - GeoLogVol * platesLog = new GeoLogVol(getName(), platesShape, m_material); + GeoLogVol * platesLog = new GeoLogVol(getName(), platesShape, m_airMaterial); + + const GeoBox* absorberShape = new GeoBox(m_tungstenWidth/2, m_tungstenHeight/2, m_tungstenThickness/2); + m_absorberVolume = new GeoLogVol(getName()+"_absorber", absorberShape, m_absorberMaterial); // m_baseboardPos = new GeoTrf::Translate3D(0.0, 0.0, 0.0); // m_frontPos = new GeoTrf::Translate3D(0.0, 0.0, -(m_baseThickness + m_filmThickness)/2); @@ -106,7 +110,12 @@ EmulsionPlates::preBuild() GeoVPhysVol * EmulsionPlates::build(EmulsionIdentifier id) { - GeoFullPhysVol * plates = new GeoFullPhysVol(m_logVolume); + GeoFullPhysVol * plates = new GeoFullPhysVol(m_logVolume); + GeoPhysVol * physAbsorber = new GeoPhysVol(m_absorberVolume); + GeoAlignableTransform* absorberTransform = new GeoAlignableTransform( GeoTrf::Translate3D { 0.0, 0.0, m_zShift} ); + plates->add(absorberTransform); + plates->add(new GeoNameTag("Absorber")); + plates->add(physAbsorber); int nBases = 0; int nBasesTotal = m_nModules * m_nBasesPerModule; @@ -120,12 +129,18 @@ EmulsionPlates::build(EmulsionIdentifier id) for (int base = 0; base < m_nBasesPerModule; base++) { id.setBase(base); - GeoAlignableTransform* theTransform = new GeoAlignableTransform( GeoTrf::Translate3D {0.0, 0.0, m_zShift + m_firstBaseZ + ((m_lastBaseZ - m_firstBaseZ)/(nBasesTotal-1))*nBases++} ); - plates->add(theTransform); - plates->add(new GeoNameTag("Base#"+intToString(module*100 + base))); - plates->add(new GeoIdentifierTag(module*100 + base)); + // GeoAlignableTransform* theTransform = new GeoAlignableTransform( GeoTrf::Translate3D {0.0, 0.0, m_zShift + m_firstBaseZ + ((m_lastBaseZ - m_firstBaseZ)/(nBasesTotal-1))*nBases++} ); + // plates->add(theTransform); + // plates->add(new GeoNameTag("Base#"+intToString(module*100 + base))); + // plates->add(new GeoIdentifierTag(module*100 + base)); + // GeoVPhysVol* physBase = m_base->build(id); + // plates->add(physBase); + GeoAlignableTransform* theTransform = new GeoAlignableTransform( GeoTrf::Translate3D {0.0, 0.0, m_firstBaseZ + ((m_lastBaseZ - m_firstBaseZ)/(nBasesTotal-1))*nBases++} ); + physAbsorber->add(theTransform); + physAbsorber->add(new GeoNameTag("Base#"+intToString(module*100 + base))); + physAbsorber->add(new GeoIdentifierTag(module*100 + base)); GeoVPhysVol* physBase = m_base->build(id); - plates->add(physBase); + physAbsorber->add(physBase); m_detectorManager->addAlignableTransform(1, id.getFilmId(), theTransform, physBase); } m_detectorManager->numerology().useModule(module); diff --git a/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.h b/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.h index 431aecbf467997cc8a096547e15bca6c5c56c4fb..7af04358b41879a5f23155d0367a5c6d4f137b09 100644 --- a/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.h +++ b/Neutrino/NeutrinoDetDescr/EmulsionGeoModel/src/EmulsionPlates.h @@ -44,7 +44,8 @@ private: double m_tungstenWidth; double m_tungstenHeight; double m_zShift; - const GeoMaterial * m_material; + const GeoMaterial * m_absorberMaterial; + const GeoMaterial * m_airMaterial; int m_nModules; int m_nBasesPerModule; @@ -54,6 +55,7 @@ private: std::vector<EmulsionSupportParameters::SupportElement> m_supportElements; EmulsionBase* m_base; + GeoLogVol* m_absorberVolume; std::vector<GeoLogVol*> m_supportVolumes; };