Skip to content
Snippets Groups Projects
Commit 6c400e06 authored by Adam Edward Barton's avatar Adam Edward Barton
Browse files

Merge branch 'master-SCT-Coverity-v2' into 'master'

Possible fix of Coverity defects CID 112410-112412: Resource leak (RESOURCE_LEAK)

See merge request atlas/athena!10267
parents 2b778302 795f864c
No related merge requests found
......@@ -8,8 +8,14 @@
#include "SCT_GeoModel/SCT_ComponentFactory.h"
#include <string>
#include <vector>
class GeoMaterial;
class GeoTube;
class GeoLogVol;
class GeoPhysVol;
class GeoTubs;
class GeoTransform;
class SCT_InterLink : public SCT_SharedComponentFactory
{
......@@ -23,7 +29,6 @@ public:
double outerRadius() const {return m_outerRadius;}
double length() const {return m_length;}
private:
void getParameters();
virtual GeoVPhysVol * build();
......@@ -52,6 +57,19 @@ private:
double m_phiPosBearing;
int m_nRepeatBearing;
const GeoTube* m_interLinkShape;
const GeoLogVol* m_interLinkLog;
GeoPhysVol* m_interLink;
const GeoTubs* m_interLinkSegShape;
const GeoLogVol* m_interLinkSegLog;
GeoPhysVol* m_interLinkSeg;
const GeoTubs* m_bearingShape;
const GeoLogVol* m_bearingLog;
GeoPhysVol* m_bearing;
const GeoTubs* m_FSIFlangeShape;
const GeoLogVol* m_FSIFlangeLog;
GeoPhysVol* m_FSIFlange;
std::vector<GeoTransform*> m_geoTransforms;
};
#endif // SCT_GEOMODEL_SCT_INTERLINK_H
......
......@@ -17,13 +17,24 @@
#include "CLHEP/Units/SystemOfUnits.h"
SCT_InterLink::SCT_InterLink(const std::string & name)
: SCT_SharedComponentFactory(name)
: SCT_SharedComponentFactory(name),
m_interLinkShape(nullptr),
m_interLinkLog(nullptr),
m_interLink(nullptr),
m_interLinkSegShape(nullptr),
m_interLinkSegLog(nullptr),
m_interLinkSeg(nullptr),
m_bearingShape(nullptr),
m_bearingLog(nullptr),
m_bearing(nullptr),
m_FSIFlangeShape(nullptr),
m_FSIFlangeLog(nullptr),
m_FSIFlange(nullptr)
{
getParameters();
m_physVolume = build();
}
void
SCT_InterLink::getParameters()
{
......@@ -70,64 +81,69 @@ SCT_InterLink::build()
// Make the interlink.
SCT_MaterialManager materials;
GeoPhysVol* interLink;
if(m_nRepeat == 1) {
// For old geometry interlink is a simple tube of material
const GeoTube* interLinkShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5*m_length);
const GeoMaterial* material = materials.getMaterialForVolume(m_materialName, interLinkShape->volume());
m_interLinkShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5*m_length);
const GeoMaterial* material = materials.getMaterialForVolume(m_materialName, m_interLinkShape->volume());
if(!material) {material = materials.getMaterial(m_materialName);}
const GeoLogVol* interLinkLog = new GeoLogVol(getName(), interLinkShape, material);
interLink = new GeoPhysVol(interLinkLog);
m_interLinkLog = new GeoLogVol(getName(), m_interLinkShape, material);
m_interLink = new GeoPhysVol(m_interLinkLog);
}
else {
// In updated version we make air tube containing interlink segments and B6 bearings
// And also include FSI flange segments if defined
// Air tube:
const GeoTube* interLinkShape = new GeoTube(m_innerRadius, m_outerRadiusBearing, 0.5*m_length);
const GeoLogVol* interLinkLog = new GeoLogVol(getName(), interLinkShape, materials.gasMaterial());
interLink = new GeoPhysVol(interLinkLog);
m_interLinkShape = new GeoTube(m_innerRadius, m_outerRadiusBearing, 0.5*m_length);
m_interLinkLog = new GeoLogVol(getName(), m_interLinkShape, materials.gasMaterial());
m_interLink = new GeoPhysVol(m_interLinkLog);
// Interlink segments:
const GeoTubs* interLinkSegShape = new GeoTubs(m_innerRadius, m_outerRadius, 0.5*m_length, - 0.5*m_dPhi*CLHEP::radian, m_dPhi*CLHEP::radian);
const GeoLogVol* interLinkSegLog = new GeoLogVol("InterlinkSegment", interLinkSegShape, materials.getMaterialForVolume(m_materialName, interLinkSegShape->volume()));
GeoPhysVol* interLinkSeg = new GeoPhysVol(interLinkSegLog);
m_interLinkSegShape = new GeoTubs(m_innerRadius, m_outerRadius, 0.5*m_length, - 0.5*m_dPhi*CLHEP::radian, m_dPhi*CLHEP::radian);
m_interLinkSegLog = new GeoLogVol("InterlinkSegment", m_interLinkSegShape, materials.getMaterialForVolume(m_materialName, m_interLinkSegShape->volume()));
m_interLinkSeg = new GeoPhysVol(m_interLinkSegLog);
for(int i=0; i<m_nRepeat; i++) {
double interlinkAngle = m_phiPos + (i * 360./m_nRepeat)*CLHEP::deg;
interLink->add(new GeoTransform(HepGeom::RotateZ3D(interlinkAngle)));
interLink->add(interLinkSeg);
GeoTransform* geoTransform = new GeoTransform(HepGeom::RotateZ3D(interlinkAngle));
m_geoTransforms.push_back(geoTransform);
m_interLink->add(geoTransform);
m_interLink->add(m_interLinkSeg);
}
// B6 bearings
const GeoTubs* bearingShape = new GeoTubs(m_innerRadiusBearing, m_outerRadiusBearing, 0.5*m_lengthBearing, - 0.5*m_dPhiBearing*CLHEP::radian, m_dPhiBearing*CLHEP::radian);
const GeoLogVol* bearingLog = new GeoLogVol("Bearing", bearingShape, materials.getMaterialForVolume(m_materialNameBearing, bearingShape->volume()));
GeoPhysVol* bearing = new GeoPhysVol(bearingLog);
m_bearingShape = new GeoTubs(m_innerRadiusBearing, m_outerRadiusBearing, 0.5*m_lengthBearing, - 0.5*m_dPhiBearing*CLHEP::radian, m_dPhiBearing*CLHEP::radian);
m_bearingLog = new GeoLogVol("Bearing", m_bearingShape, materials.getMaterialForVolume(m_materialNameBearing, m_bearingShape->volume()));
m_bearing = new GeoPhysVol(m_bearingLog);
for(int i=0; i<m_nRepeatBearing; i++) {
double bearingAngle = m_phiPosBearing + (i * 360./m_nRepeatBearing)*CLHEP::deg;
interLink->add(new GeoTransform(HepGeom::RotateZ3D(bearingAngle)));
interLink->add(bearing);
GeoTransform* geoTransform = new GeoTransform(HepGeom::RotateZ3D(bearingAngle));
m_geoTransforms.push_back(geoTransform);
m_interLink->add(geoTransform);
m_interLink->add(m_bearing);
}
// FSI Flange segments:
// These exactly fill gaps between interlink segments, with smaller radial extent
if(m_includeFSIFlange) {
double dPhiFSI = (360./m_nRepeat)*CLHEP::deg - m_dPhi;
const GeoTubs* FSIFlangeShape = new GeoTubs(m_innerRadiusFSIFlange, m_outerRadiusFSIFlange, 0.5*m_length, - 0.5*dPhiFSI*CLHEP::radian, dPhiFSI*CLHEP::radian);
const GeoLogVol* FSIFlangeLog = new GeoLogVol("FSIFlangeSegment", FSIFlangeShape, materials.getMaterialForVolume(m_materialNameFSIFlange, FSIFlangeShape->volume()));
GeoPhysVol* FSIFlange = new GeoPhysVol(FSIFlangeLog);
m_FSIFlangeShape = new GeoTubs(m_innerRadiusFSIFlange, m_outerRadiusFSIFlange, 0.5*m_length, - 0.5*dPhiFSI*CLHEP::radian, dPhiFSI*CLHEP::radian);
m_FSIFlangeLog = new GeoLogVol("FSIFlangeSegment", m_FSIFlangeShape, materials.getMaterialForVolume(m_materialNameFSIFlange, m_FSIFlangeShape->volume()));
m_FSIFlange = new GeoPhysVol(m_FSIFlangeLog);
for(int i=0; i<m_nRepeat; i++) {
double phiPosFSI = m_phiPos + (180./m_nRepeat)*CLHEP::deg;
double FSIFlangeAngle = phiPosFSI + (i * 360./m_nRepeat)*CLHEP::deg;
interLink->add(new GeoTransform(HepGeom::RotateZ3D(FSIFlangeAngle)));
interLink->add(FSIFlange);
GeoTransform* geoTransform = new GeoTransform(HepGeom::RotateZ3D(FSIFlangeAngle));
m_geoTransforms.push_back(geoTransform);
m_interLink->add(geoTransform);
m_interLink->add(m_FSIFlange);
}
}
}
return interLink;
return m_interLink;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment