#include <DDPixBarLayerAlgo.h>
Public Member Functions | |
DDPixBarLayerAlgo () | |
void | execute (DDCompactView &cpv) |
void | initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) |
virtual | ~DDPixBarLayerAlgo () |
Private Attributes | |
double | coolDist |
double | coolDz |
std::string | coolMat |
double | coolSide |
double | coolThick |
double | coolWidth |
std::string | genMat |
std::string | idNameSpace |
std::vector< std::string > | ladder |
std::vector< double > | ladderThick |
std::vector< double > | ladderWidth |
double | layerDz |
int | number |
double | sensorEdge |
std::string | tubeMat |
Definition at line 10 of file DDPixBarLayerAlgo.h.
DDPixBarLayerAlgo::DDPixBarLayerAlgo | ( | ) |
Definition at line 21 of file DDPixBarLayerAlgo.cc.
References LogDebug.
{ LogDebug("PixelGeom") <<"DDPixBarLayerAlgo info: Creating an instance"; }
DDPixBarLayerAlgo::~DDPixBarLayerAlgo | ( | ) | [virtual] |
Definition at line 25 of file DDPixBarLayerAlgo.cc.
{}
void DDPixBarLayerAlgo::execute | ( | DDCompactView & | cpv | ) |
Definition at line 69 of file DDPixBarLayerAlgo.cc.
References coolDist, coolDz, coolMat, coolSide, coolThick, coolWidth, filterCSVwithJSON::copy, funct::cos(), debug_cff::d1, dbl_to_string(), DDBase< N, C >::ddname(), DDrot(), DDSplit(), first, genMat, i, idNameSpace, ladder, ladderThick, ladderWidth, layerDz, LogDebug, DDName::name(), DDBase< N, C >::name(), mergeVDriftHistosByStation::name, number, dbtoconf::parent, phi, DDCompactView::position(), edm::second(), sensorEdge, funct::sin(), mathSSE::sqrt(), DDSolidFactory::trap(), tubeMat, and DDSolidFactory::tubs().
{ DDName mother = parent().name(); const std::string &idName = mother.name(); double dphi = CLHEP::twopi/number; double d2 = 0.5*coolWidth; double d1 = d2 - coolSide*sin(0.5*dphi); double x1 = (d1+d2)/(2.*sin(0.5*dphi)); double x2 = coolDist*sin(0.5*dphi); double rmin = (coolDist-0.5*(d1+d2))*cos(0.5*dphi)-0.5*ladderThick[0]; double rmax = (coolDist+0.5*(d1+d2))*cos(0.5*dphi)+0.5*ladderThick[0]; double rmxh = rmax - 0.5*ladderThick[0] + ladderThick[1]; LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: Rmin/Rmax " << rmin << ", " << rmax << " d1/d2 " << d1 << ", " << d2 << " x1/x2 " << x1 << ", " << x2; double rtmi = rmin + 0.5*ladderThick[0] - ladderThick[1]; double rtmx = sqrt(rmxh*rmxh+ladderWidth[1]*ladderWidth[1]); DDSolid solid = DDSolidFactory::tubs(DDName(idName, idNameSpace),0.5*layerDz, rtmi, rtmx, 0, CLHEP::twopi); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " << DDName(idName, idNameSpace) << " Tubs made of " << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg << " with Rin " << rtmi << " Rout " << rtmx << " ZHalf " << 0.5*layerDz; DDName matname(DDSplit(genMat).first, DDSplit(genMat).second); DDMaterial matter(matname); DDLogicalPart layer(solid.ddname(), matter, solid); double rr = 0.5*(rmax+rmin); double dr = 0.5*(rmax-rmin); double h1 = 0.5*coolSide*cos(0.5*dphi); std::string name = idName + "CoolTube"; solid = DDSolidFactory::trap(DDName(name,idNameSpace), 0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " <<solid.name() << " Trap made of " << tubeMat << " of dimensions " << 0.5*coolDz << ", 0, 0, " << h1 << ", " << d2 << ", " << d1 << ", 0, " << h1 << ", " << d2 << ", " << d1 << ", 0"; matter = DDMaterial(DDName(DDSplit(tubeMat).first, DDSplit(tubeMat).second)); DDLogicalPart coolTube(solid.ddname(), matter, solid); name = idName + "Coolant"; h1 -= coolThick; d1 -= coolThick; d2 -= coolThick; solid = DDSolidFactory::trap(DDName(name,idNameSpace), 0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " <<solid.name() << " Trap made of " << coolMat << " of dimensions " << 0.5*coolDz << ", 0, 0, " << h1 << ", " << d2 << ", " << d1 << ", 0, " << h1 << ", " << d2 << ", " << d1 << ", 0"; matter = DDMaterial(DDName(DDSplit(coolMat).first, DDSplit(coolMat).second)); DDLogicalPart cool(solid.ddname(), matter, solid); cpv.position(cool, coolTube, 1, DDTranslation(0.0, 0.0, 0.0), DDRotation()); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " << cool.name() << " number 1 positioned in " << coolTube.name() << " at (0,0,0) with no rotation"; DDName ladderFull(DDSplit(ladder[0]).first, DDSplit(ladder[0]).second); DDName ladderHalf(DDSplit(ladder[1]).first, DDSplit(ladder[1]).second); int nphi=number/2, copy=1, iup=-1; double phi0 = 90*CLHEP::deg; for (int i=0; i<number; i++) { double phi = phi0 + i*dphi; double phix, phiy, rrr, xx; std::string rots; DDTranslation tran; DDRotation rot; if (i == 0 || i == nphi) { rrr = rr + dr + 0.5*(ladderThick[1]-ladderThick[0]); xx = (0.5*ladderWidth[1] - sensorEdge) * sin(phi); tran = DDTranslation(xx, rrr*sin(phi), 0); rots = idName + dbl_to_string(copy); phix = phi-90*CLHEP::deg; phiy = 90*CLHEP::deg+phix; LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; rot = DDrot(DDName(rots,idNameSpace), 90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); cpv.position(ladderHalf, layer, copy, tran, rot); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " << ladderHalf << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; copy++; iup = -1; rrr = rr - dr - 0.5*(ladderThick[1]-ladderThick[0]); tran = DDTranslation(-xx, rrr*sin(phi), 0); rots = idName + dbl_to_string(copy); phix = phi+90*CLHEP::deg; phiy = 90*CLHEP::deg+phix; LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; rot = DDrot(DDName(rots,idNameSpace), 90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); cpv.position(ladderHalf, layer, copy, tran, rot); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " << ladderHalf << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; copy++; } else { iup =-iup; rrr = rr + iup*dr; tran = DDTranslation(rrr*cos(phi), rrr*sin(phi), 0); rots = idName + dbl_to_string(copy); if (iup > 0) phix = phi-90*CLHEP::deg; else phix = phi+90*CLHEP::deg; phiy = phix+90.*CLHEP::deg; LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; rot = DDrot(DDName(rots,idNameSpace), 90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); cpv.position(ladderFull, layer, copy, tran, rot); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " << ladderFull << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; copy++; } rrr = coolDist*cos(0.5*dphi); tran = DDTranslation(rrr*cos(phi)-x2*sin(phi), rrr*sin(phi)+x2*cos(phi), 0); rots = idName + dbl_to_string(i+100); phix = phi+0.5*dphi; if (iup > 0) phix += 180*CLHEP::deg; phiy = phix+90.*CLHEP::deg; LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; rot = DDrot(DDName(rots,idNameSpace), 90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); cpv.position(coolTube, layer, i+1, tran, rot); LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: " << coolTube.name() << " number " << i+1 << " positioned in " << layer.name() << " at " << tran << " with "<< rot; } }
void DDPixBarLayerAlgo::initialize | ( | const DDNumericArguments & | nArgs, |
const DDVectorArguments & | vArgs, | ||
const DDMapArguments & | mArgs, | ||
const DDStringArguments & | sArgs, | ||
const DDStringVectorArguments & | vsArgs | ||
) |
Definition at line 27 of file DDPixBarLayerAlgo.cc.
References coolDist, coolDz, coolMat, coolSide, coolThick, coolWidth, genMat, idNameSpace, ladder, ladderThick, ladderWidth, layerDz, LogDebug, DDCurrentNamespace::ns(), number, dbtoconf::parent, sensorEdge, and tubeMat.
{ idNameSpace = DDCurrentNamespace::ns(); DDName parentName = parent().name(); genMat = sArgs["GeneralMaterial"]; number = int(nArgs["Ladders"]); layerDz = nArgs["LayerDz"]; sensorEdge= nArgs["SensorEdge"]; coolDz = nArgs["CoolDz"]; coolWidth = nArgs["CoolWidth"]; coolSide = nArgs["CoolSide"]; coolThick = nArgs["CoolThick"]; coolDist = nArgs["CoolDist"]; coolMat = sArgs["CoolMaterial"]; tubeMat = sArgs["CoolTubeMaterial"]; LogDebug("PixelGeom") << "DDPixBarLayerAlgo debug: Parent " << parentName << " NameSpace " << idNameSpace << "\n" << "\tLadders " << number << "\tGeneral Material " << genMat << "\tLength " << layerDz << "\tSensorEdge " << sensorEdge << "\tSpecification of Cooling Pieces:\n" << "\tLength " << coolDz << " Width " << coolWidth << " Side " << coolSide << " Thickness of Shell " << coolThick << " Radial distance " << coolDist << " Materials " << coolMat << ", " << tubeMat; ladder = vsArgs["LadderName"]; ladderWidth = vArgs["LadderWidth"]; ladderThick = vArgs["LadderThick"]; LogDebug("PixelGeom") << "DDPixBarLayerAlgo debug: Full Ladder " << ladder[0] << " width/thickness " << ladderWidth[0] << ", " << ladderThick[0] << "\tHalf Ladder " << ladder[1] << " width/thickness " << ladderWidth[1] << ", " << ladderThick[1]; }
double DDPixBarLayerAlgo::coolDist [private] |
Definition at line 35 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
double DDPixBarLayerAlgo::coolDz [private] |
Definition at line 31 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::string DDPixBarLayerAlgo::coolMat [private] |
Definition at line 36 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
double DDPixBarLayerAlgo::coolSide [private] |
Definition at line 33 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
double DDPixBarLayerAlgo::coolThick [private] |
Definition at line 34 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
double DDPixBarLayerAlgo::coolWidth [private] |
Definition at line 32 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::string DDPixBarLayerAlgo::genMat [private] |
Definition at line 27 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::string DDPixBarLayerAlgo::idNameSpace [private] |
Definition at line 26 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::vector<std::string> DDPixBarLayerAlgo::ladder [private] |
Definition at line 38 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::vector<double> DDPixBarLayerAlgo::ladderThick [private] |
Definition at line 40 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::vector<double> DDPixBarLayerAlgo::ladderWidth [private] |
Definition at line 39 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
double DDPixBarLayerAlgo::layerDz [private] |
Definition at line 29 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
int DDPixBarLayerAlgo::number [private] |
Definition at line 28 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
double DDPixBarLayerAlgo::sensorEdge [private] |
Definition at line 30 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().
std::string DDPixBarLayerAlgo::tubeMat [private] |
Definition at line 37 of file DDPixBarLayerAlgo.h.
Referenced by execute(), and initialize().