#include <DDTIBRadCableAlgo_MTCC.h>
Public Member Functions | |
DDTIBRadCableAlgo_MTCC () | |
void | execute (DDCompactView &cpv) |
void | initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) |
virtual | ~DDTIBRadCableAlgo_MTCC () |
Private Attributes | |
std::vector< std::string > | cableMat |
double | cableT |
double | cylinderT |
double | deltaR |
std::string | idNameSpace |
std::vector< double > | layers |
std::vector< double > | layRin |
double | rMax |
double | rMin |
std::vector< std::string > | strucMat |
double | supportDR |
std::string | supportMat |
double | supportT |
Definition at line 10 of file DDTIBRadCableAlgo_MTCC.h.
DDTIBRadCableAlgo_MTCC::DDTIBRadCableAlgo_MTCC | ( | ) |
DDTIBRadCableAlgo_MTCC::~DDTIBRadCableAlgo_MTCC | ( | ) | [virtual] |
Definition at line 25 of file DDTIBRadCableAlgo_MTCC.cc.
{}
void DDTIBRadCableAlgo_MTCC::execute | ( | DDCompactView & | cpv | ) |
Definition at line 79 of file DDTIBRadCableAlgo_MTCC.cc.
References cableMat, cableT, cylinderT, dbl_to_string(), DDSplit(), deltaR, relativeConstraints::empty, first, i, idNameSpace, j, layers, layRin, LogDebug, mergeVDriftHistosByStation::name, dbtoconf::parent, DDSolidFactory::polycone(), DDCompactView::position(), diffTwoXMLs::r1, diffTwoXMLs::r2, rMax, rMin, edm::second(), strucMat, supportDR, supportMat, supportT, and DDSolidFactory::tubs().
{ LogDebug("TIBGeom") << "==>> Constructing DDTIBRadCableAlgo_MTCC..."; DDName diskName = parent().name(); DDSolid solid; std::string name; double rin, rout; // Loop over sub disks DDName suppName(DDSplit(supportMat).first, DDSplit(supportMat).second); DDMaterial suppMatter(suppName); double diskDz = 0.5 * (supportT + cableT*layRin.size()); double dz = 0.5*supportT; for (unsigned int i=0; i<layRin.size(); i++) { // fill only layers in layers list bool empty=true; for(unsigned int j=0; j<layers.size(); j++) { if(i+1==(unsigned int)layers[j]) { empty=false; } } if(!empty) { //Support disks name = "TIBSupportSideDisk" + dbl_to_string(i); rin = layRin[i]+0.5*(deltaR-cylinderT)-supportDR; rout = layRin[i]+0.5*(deltaR+cylinderT)+supportDR; solid = DDSolidFactory::tubs(DDName(name, idNameSpace), dz, rin, rout, 0, CLHEP::twopi); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name, idNameSpace) << " Tubs made of " << supportMat << " from 0 to " << CLHEP::twopi/CLHEP::deg << " with Rin " << rin << " Rout " << rout << " ZHalf " << dz; DDLogicalPart suppLogic(DDName(name, idNameSpace), suppMatter, solid); DDTranslation r1(0, 0, (dz-diskDz)); cpv.position(DDName(name,idNameSpace), diskName, i+1, r1, DDRotation()); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name,idNameSpace) << " number " << i+1 << " positioned in " << diskName << " at " << r1 << " with no rotation"; //Open Structure name = "TIBOpenZone" + dbl_to_string(i); rout = rin; if (i == 0) rin = rMin; else rin = layRin[i-1]+0.5*(deltaR+cylinderT)+supportDR; solid = DDSolidFactory::tubs(DDName(name, idNameSpace), dz, rin, rout, 0, CLHEP::twopi); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name, idNameSpace) << " Tubs made of " << strucMat[i] << " from 0 to " << CLHEP::twopi/CLHEP::deg << " with Rin " << rin << " Rout " << rout << " ZHalf " << dz; DDName strucName(DDSplit(strucMat[i]).first, DDSplit(strucMat[i]).second); DDMaterial strucMatter(strucName); DDLogicalPart strucLogic(DDName(name, idNameSpace), strucMatter, solid); DDTranslation r2(0, 0, (dz-diskDz)); cpv.position(DDName(name,idNameSpace), diskName, i+1, r2, DDRotation()); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name,idNameSpace) << " number " << i+1 << " positioned in " << diskName << " at " << r2 << " with no rotation"; //Now the radial cable name = "TIBRadCable" + dbl_to_string(i); double rv = layRin[i]+0.5*deltaR; std::vector<double> pgonZ; pgonZ.push_back(-0.5*cableT); pgonZ.push_back(cableT*(rv/rMax-0.5)); pgonZ.push_back(0.5*cableT); std::vector<double> pgonRmin; pgonRmin.push_back(rv); pgonRmin.push_back(rv); pgonRmin.push_back(rv); std::vector<double> pgonRmax; pgonRmax.push_back(rMax); pgonRmax.push_back(rMax); pgonRmax.push_back(rv); solid = DDSolidFactory::polycone(DDName(name, idNameSpace), 0, CLHEP::twopi,pgonZ, pgonRmin, pgonRmax); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name, idNameSpace) << " Polycone made of " << cableMat[i] << " from 0 to " << CLHEP::twopi/CLHEP::deg << " and with " << pgonZ.size() << " sections"; for (unsigned int ii = 0; ii <pgonZ.size(); ii++) LogDebug("TIBGeom") << "\t" << "\tZ = " << pgonZ[ii] << "\tRmin = " << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii]; DDName cableName(DDSplit(cableMat[i]).first,DDSplit(cableMat[i]).second); LogDebug("TIBGeom") << " material cableName " << i << " " << cableName; DDMaterial cableMatter(cableName); DDLogicalPart cableLogic(DDName(name, idNameSpace), cableMatter, solid); DDTranslation r3(0, 0, (diskDz-(i+0.5)*cableT)); cpv.position(DDName(name,idNameSpace), diskName, i+1, r3, DDRotation()); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name,idNameSpace) << " number " << i+1 << " positioned in " << diskName << " at " << r3 << " with no rotation"; } // // fill only layers in layers list empty=true; for(unsigned int j=0; j<layers.size(); j++) { if(i+1==(unsigned int)layers[j]) { empty=false; } } if(!empty) { //Now the last open zone unsigned int i = layRin.size(); rin = layRin[i-1]+0.5*(deltaR+cylinderT)+supportDR; rout = rMax; name = "TIBOpenZone" + dbl_to_string(i); solid = DDSolidFactory::tubs(DDName(name, idNameSpace), dz, rin, rout, 0, CLHEP::twopi); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name, idNameSpace) << " Tubs made of " << strucMat[i] << " from 0 to " << CLHEP::twopi/CLHEP::deg << " with Rin " << rin << " Rout " << rout << " ZHalf " << dz; DDName strucName(DDSplit(strucMat[i]).first,DDSplit(strucMat[i]).second); DDMaterial strucMatter(strucName); DDLogicalPart strucLogic(DDName(name, idNameSpace), strucMatter, solid); DDTranslation r2(0, 0, (dz-diskDz)); cpv.position(DDName(name,idNameSpace), diskName, i+1, r2, DDRotation()); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC test: " << DDName(name,idNameSpace) << " number " << i+1 << " positioned in " << diskName << " at " << r2 << " with no rotation"; } } LogDebug("TIBGeom") << "<<== End of DDTIBRadCableAlgo_MTCC construction ..."; }
void DDTIBRadCableAlgo_MTCC::initialize | ( | const DDNumericArguments & | nArgs, |
const DDVectorArguments & | vArgs, | ||
const DDMapArguments & | mArgs, | ||
const DDStringArguments & | sArgs, | ||
const DDStringVectorArguments & | vsArgs | ||
) |
Definition at line 27 of file DDTIBRadCableAlgo_MTCC.cc.
References cableMat, cableT, cylinderT, deltaR, i, idNameSpace, layers, layRin, LogDebug, DDCurrentNamespace::ns(), dbtoconf::parent, rMax, rMin, strucMat, supportDR, supportMat, and supportT.
{ idNameSpace = DDCurrentNamespace::ns(); unsigned int i; DDName parentName = parent().name(); LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC debug: Parent " << parentName << " NameSpace " << idNameSpace; rMin = nArgs["RMin"]; rMax = nArgs["RMax"]; layRin = vArgs["RadiusLo"]; deltaR = nArgs["DeltaR"]; LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC debug: Disk Rmin " << rMin << "\tRMax " << rMax << "\tSeparation of layers " << deltaR <<" with " << layRin.size() <<" layers at R ="; for (i = 0; i < layRin.size(); i++) LogDebug("TIBGeom") << " " << i << " : " << layRin[i]; cylinderT = nArgs["CylinderThick"]; supportT = nArgs["SupportThick"]; supportDR = nArgs["SupportDR"]; supportMat = sArgs["SupportMaterial"]; LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC debug: SupportCylinder " << "Thickness " << cylinderT << "\tSupportDisk " << "Thickness " << supportT << "\tExtra width along R " << supportDR << "\tMaterial: " << supportMat; cableT = nArgs["CableThick"]; cableMat = vsArgs["CableMaterial"]; LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC debug: Cable Thickness " << cableT << " with materials: "; for (i = 0; i < cableMat.size(); i++) LogDebug("TIBGeom") << " " << i << " : " << cableMat[i]; strucMat = vsArgs["StructureMaterial"]; LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC debug: " << strucMat.size() << " materials for open structure:"; for (i=0; i<strucMat.size(); i++) LogDebug("TIBGeom") << " " << i << " : " << strucMat[i]; layers = vArgs["Layers"]; LogDebug("TIBGeom") << "DDTIBRadCableAlgo_MTCC debug: " << layers.size() << " layers:"; for (i=0; i<layers.size(); i++) LogDebug("TIBGeom") << " " << i << " : " << layers[i]; }
std::vector<std::string> DDTIBRadCableAlgo_MTCC::cableMat [private] |
Definition at line 37 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::cableT [private] |
Definition at line 36 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::cylinderT [private] |
Definition at line 32 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::deltaR [private] |
Definition at line 31 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
std::string DDTIBRadCableAlgo_MTCC::idNameSpace [private] |
Definition at line 26 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
std::vector<double> DDTIBRadCableAlgo_MTCC::layers [private] |
Definition at line 39 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
std::vector<double> DDTIBRadCableAlgo_MTCC::layRin [private] |
Definition at line 30 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::rMax [private] |
Definition at line 29 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::rMin [private] |
Definition at line 28 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
std::vector<std::string> DDTIBRadCableAlgo_MTCC::strucMat [private] |
Definition at line 38 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::supportDR [private] |
Definition at line 34 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
std::string DDTIBRadCableAlgo_MTCC::supportMat [private] |
Definition at line 35 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().
double DDTIBRadCableAlgo_MTCC::supportT [private] |
Definition at line 33 of file DDTIBRadCableAlgo_MTCC.h.
Referenced by execute(), and initialize().