#include <Geometry/HcalAlgo/interface/DDHCalEndcapAlgo.h>
Public Member Functions | |
DDHCalEndcapAlgo () | |
int | equipModule (unsigned int i) const |
void | execute () |
std::string | getAbsMat () const |
double | getAngBot () const |
double | getAngGap () const |
double | getAngTop () const |
double | getDrEnd () const |
double | getDzShift () const |
double | getDzStep () const |
int | getEndcaps () const |
std::string | getGenMat () const |
double | getHeboxDepth () const |
int | getLayer (unsigned int i, unsigned int j) const |
int | getLayerN (unsigned int i) const |
std::string | getLayerName (unsigned int i) const |
int | getLayers () const |
double | getLayerT (unsigned int i) const |
int | getLayerType (unsigned int i) const |
std::string | getModMat (unsigned int i) const |
std::string | getModName (unsigned int i) const |
int | getModType (unsigned int i) const |
int | getModules () const |
int | getNsectors () const |
int | getNsectortot () const |
int | getPhi () const |
std::string | getPhiName (unsigned int i) const |
std::string | getPlastMat () const |
double | getRinBlock1 (unsigned i) const |
double | getRinBlock2 (unsigned i) const |
double | getRinDip () const |
double | getRinKink () const |
std::string | getRotation () const |
std::string | getRotMat () const |
double | getRout () const |
double | getRoutBlock1 (unsigned i) const |
double | getRoutBlock2 (unsigned i) const |
double | getRoutDip () const |
std::string | getScintMat () const |
double | getScintT (unsigned int i) const |
int | getSectionModule (unsigned i) const |
double | getSlope () const |
double | getThick (unsigned int i) const |
double | getTolAbs () const |
double | getTolPos () const |
double | getTrim (unsigned int i, unsigned int j) const |
double | getZ0Beam () const |
double | getZ1Beam () const |
double | getZEnd () const |
double | getZFront () const |
double | getZiBody () const |
double | getZiDip () const |
double | getZiKink () const |
double | getZiL0Body () const |
double | getZiL0Nose () const |
double | getZiNose () const |
double | getZmaxBlock (unsigned i) const |
double | getZminBlock (unsigned i) const |
double | getZShift () const |
double | getZShiftHac2 () const |
void | initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) |
virtual | ~DDHCalEndcapAlgo () |
Protected Member Functions | |
void | constructGeneralVolume () |
void | constructInsideModule (DDLogicalPart module, int mod) |
void | constructInsideModule0 (DDLogicalPart module, int mod) |
void | constructInsideSector (DDLogicalPart sector) |
void | constructScintLayer (DDLogicalPart glog, double pDz, double yh, double bl, double tl, double alp, std::string name, int id) |
void | parameterLayer (int iphi, double rinF, double routF, double rinB, double routB, double zi, double zo, double &yh1, double &bl1, double &tl1, double &yh2, double &bl2, double &tl2, double &alp, double &theta, double &phi, double &xpos, double &ypos, double &zpos) |
void | parameterLayer0 (int mod, int layer, int iphi, double &yh, double &bl, double &tl, double &alp, double &xpos, double &ypos, double &zpos) |
Private Attributes | |
std::string | absMat |
double | angBot |
double | angGap |
double | angTop |
double | drEnd |
double | dzShift |
double | dzStep |
std::vector< int > | eModule |
std::string | genMaterial |
double | heboxDepth |
std::string | idName |
std::string | idNameSpace |
int | idOffset |
std::vector< int > | layerN |
std::vector< int > | layerN0 |
std::vector< int > | layerN1 |
std::vector< int > | layerN2 |
std::vector< int > | layerN3 |
std::vector< int > | layerN4 |
std::vector< int > | layerN5 |
std::vector< std::string > | layerName |
int | layers |
std::vector< double > | layerT |
std::vector< int > | layerType |
std::vector< std::string > | modMat |
std::vector< std::string > | modName |
std::vector< int > | modType |
int | modules |
int | nEndcap |
int | nsectors |
int | nsectortot |
std::vector< std::string > | phiName |
int | phiSections |
std::string | plastMat |
double | riDip |
double | riKink |
std::vector< double > | rinBlock1 |
std::vector< double > | rinBlock2 |
double | roDip |
std::string | rotation |
std::string | rotHalf |
std::string | rotmat |
std::string | rotns |
double | rout |
std::vector< double > | routBlock1 |
std::vector< double > | routBlock2 |
std::string | scintMat |
std::vector< double > | scintT |
std::vector< int > | sectionModule |
double | slope |
std::vector< double > | thick |
double | tolAbs |
double | tolPos |
std::vector< double > | trimLeft |
std::vector< double > | trimRight |
double | z0Beam |
double | z1Beam |
double | zEnd |
double | zFront |
double | ziBody |
double | ziDip |
double | ziKink |
double | ziL0Body |
double | ziL0Nose |
double | ziNose |
std::vector< double > | zmaxBlock |
std::vector< double > | zminBlock |
double | zShift |
double | zShiftHac2 |
Definition at line 10 of file DDHCalEndcapAlgo.h.
DDHCalEndcapAlgo::DDHCalEndcapAlgo | ( | ) |
Definition at line 23 of file DDHCalEndcapAlgo.cc.
References LogDebug.
00023 : 00024 modMat(0),modType(0),sectionModule(0),layerN(0),layerN0(0),layerN1(0), 00025 layerN2(0),layerN3(0),layerN4(0),layerN5(0),thick(0),trimLeft(0), 00026 trimRight(0),zminBlock(0),zmaxBlock(0),rinBlock1(0),routBlock1(0), 00027 rinBlock2(0),routBlock2(0),layerType(0),layerT(0),scintT(0) { 00028 LogDebug("HCalGeom") << "DDHCalEndcapAlgo info: Creating an instance"; 00029 }
DDHCalEndcapAlgo::~DDHCalEndcapAlgo | ( | ) | [virtual] |
void DDHCalEndcapAlgo::constructGeneralVolume | ( | ) | [protected] |
!!!!!!!!!!!!!!!!Should be zero. And removed as soon as
Definition at line 323 of file DDHCalEndcapAlgo.cc.
References constructInsideSector(), dbl_to_string(), DDpos(), DDrot(), DDSplit(), equipModule(), first, getAbsMat(), getAngBot(), getAngTop(), getDrEnd(), getDzShift(), getEndcaps(), getGenMat(), getNsectors(), getNsectortot(), getRinDip(), getRinKink(), getRotation(), getRout(), getRoutDip(), getSlope(), getZ1Beam(), getZEnd(), getZFront(), getZiBody(), getZiDip(), getZiKink(), getZiL0Body(), getZShift(), getZShiftHac2(), i, idName, idNameSpace, LogDebug, name, DDBase< N, C >::name(), dbtoconf::parent, phi, pi, DDSolidFactory::polyhedra(), proto, rot, rotation, rotHalf, rotns, edm::second(), and funct::tan().
Referenced by execute().
00323 { 00324 00325 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: General volume..."; 00326 bool proto = true; 00327 for (int i=0; i<3; i++) 00328 if (equipModule(i) > 0) proto = false; 00329 00330 DDRotation rot; 00331 if (DDSplit(getRotation()).first == "NULL") rot = DDRotation(); 00332 else rot = DDRotation(DDName(DDSplit(getRotation()).first,DDSplit(getRotation()).second)); 00333 LogDebug("HCalGeom") << " First " << DDSplit(getRotation()).first 00334 << " Second " << DDSplit(getRotation()).second 00335 << " Rotation " << rot; 00336 DDTranslation r0(0,0,getZShift()); 00337 double alpha = pi/getNsectors(); 00338 double dphi = getNsectortot()*twopi/getNsectors(); 00339 00341 //vertical walls are allowed in SolidPolyhedra 00342 double delz = 0; 00343 00344 vector<double> pgonZ, pgonRmin, pgonRmax; 00345 if (proto) { 00346 double zf = getZiBody() + getZShiftHac2(); 00347 pgonZ.push_back(zf - getDzShift()); 00348 pgonRmin.push_back(zf * tan(getAngBot())); 00349 pgonRmax.push_back((zf - getZ1Beam())*getSlope()); 00350 } else { 00351 pgonZ.push_back(getZFront() - getDzShift()); 00352 pgonRmin.push_back(getZFront() * tan(getAngTop())); 00353 pgonRmax.push_back((getZFront() - getZ1Beam())*getSlope()); 00354 pgonZ.push_back(getZiL0Body() - getDzShift()); 00355 pgonRmin.push_back(getZiL0Body() * tan(getAngTop())); 00356 pgonRmax.push_back((getZiL0Body() - getZ1Beam())*getSlope()); 00357 pgonZ.push_back(getZiL0Body() - getDzShift()); 00358 pgonRmin.push_back(getZiL0Body() * tan(getAngBot())); 00359 pgonRmax.push_back((getZiL0Body() - getZ1Beam())*getSlope()); 00360 } 00361 pgonZ.push_back(getZiKink() - getDzShift()); 00362 pgonRmin.push_back(getRinKink()); 00363 pgonRmax.push_back(getRout()); 00364 pgonZ.push_back(getZiDip() - getDzShift()); 00365 pgonRmin.push_back(getRinDip()); 00366 pgonRmax.push_back(getRout()); 00367 pgonZ.push_back(getZiDip() - getDzShift() + delz); 00368 pgonRmin.push_back(getRinDip()); 00369 pgonRmax.push_back(getRoutDip()); 00370 pgonZ.push_back(getZEnd() - getDzShift()); 00371 pgonRmin.push_back(getZEnd() * tan(getAngBot())); 00372 pgonRmax.push_back(getRoutDip()); 00373 pgonZ.push_back(getZEnd()); 00374 pgonRmin.push_back(getZEnd() * tan(getAngBot())); 00375 pgonRmax.push_back(getRoutDip()); 00376 00377 string name("Null"); 00378 unsigned int i=0; 00379 DDSolid solid; 00380 solid = DDSolidFactory::polyhedra(DDName(idName, idNameSpace), 00381 getNsectortot(), -alpha, dphi, pgonZ, 00382 pgonRmin, pgonRmax); 00383 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " 00384 << DDName(idName, idNameSpace) << " Polyhedra made of " 00385 << getGenMat() << " with " << getNsectortot() 00386 << " sectors from " << -alpha/deg << " to " 00387 << (-alpha+dphi)/deg << " and with " << pgonZ.size() 00388 << " sections"; 00389 for (i = 0; i <pgonZ.size(); i++) 00390 LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[i] << "\tRmin = " <<pgonRmin[i] 00391 << "\tRmax = " << pgonRmax[i]; 00392 00393 DDName matname(DDSplit(getGenMat()).first, DDSplit(getGenMat()).second); 00394 DDMaterial matter(matname); 00395 DDLogicalPart genlogic(DDName(idName, idNameSpace), matter, solid); 00396 00397 DDName parentName = parent().name(); 00398 DDpos(DDName(idName, idNameSpace), parentName, 1, r0, rot); 00399 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " 00400 << DDName(idName, idNameSpace) << " number 1 positioned" 00401 << " in " << parentName << " at " << r0 << " with " 00402 << rot; 00403 if (getEndcaps() != 1) { 00404 rot = DDRotation(DDName(rotHalf,rotns)); 00405 DDpos (DDName(idName, idNameSpace), parentName, 2, r0, rot); 00406 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " 00407 << DDName(idName, idNameSpace) << " number 2 " 00408 << "positioned in " << parentName << " at " << r0 00409 << " with " << rot; 00410 } 00411 00412 //Forward half 00413 name = idName + "Front"; 00414 vector<double> pgonZMod, pgonRminMod, pgonRmaxMod; 00415 for (i=0; i < (pgonZ.size()-1); i++) { 00416 pgonZMod.push_back(pgonZ[i] + getDzShift()); 00417 pgonRminMod.push_back(pgonRmin[i]); 00418 pgonRmaxMod.push_back(pgonRmax[i]); 00419 } 00420 solid = DDSolidFactory::polyhedra(DDName(name, idNameSpace), 00421 getNsectortot(), -alpha, dphi, pgonZMod, 00422 pgonRminMod, pgonRmaxMod); 00423 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << DDName(name,idNameSpace) 00424 << " Polyhedra made of " << getGenMat() << " with " 00425 << getNsectortot() << " sectors from " << -alpha/deg 00426 << " to " << (-alpha+dphi)/deg << " and with " 00427 << pgonZMod.size() << " sections "; 00428 for (i = 0; i < pgonZMod.size(); i++) 00429 LogDebug("HCalGeom") << "\t\tZ = " << pgonZMod[i] << "\tRmin = " 00430 << pgonRminMod[i] << "\tRmax = " << pgonRmaxMod[i]; 00431 DDLogicalPart genlogich(DDName(name, idNameSpace), matter, solid); 00432 00433 DDpos(genlogich, genlogic, 1, DDTranslation(0.0, 0.0, -getDzShift()), 00434 DDRotation()); 00435 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << genlogich.name() 00436 << " number 1 positioned in " << genlogic.name() 00437 << " at (0,0," << -getDzShift() << ") with no rotation"; 00438 00439 //Construct sector (from -alpha to +alpha) 00440 name = idName + "Module"; 00441 solid = DDSolidFactory::polyhedra(DDName(name, idNameSpace), 00442 1, -alpha, 2*alpha, pgonZMod, 00443 pgonRminMod, pgonRmaxMod); 00444 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << DDName(name,idNameSpace) 00445 << " Polyhedra made of " << getGenMat() 00446 <<" with 1 sector from " << -alpha/deg << " to " 00447 << alpha/deg << " and with " << pgonZMod.size() 00448 << " sections"; 00449 for (i = 0; i < pgonZMod.size(); i++) 00450 LogDebug("HCalGeom") << "\t\tZ = " << pgonZMod[i] << "\tRmin = " 00451 << pgonRminMod[i] << "\tRmax = " << pgonRmaxMod[i]; 00452 00453 DDLogicalPart seclogic(DDName(name, idNameSpace), matter, solid); 00454 00455 for (int ii=0; ii<getNsectortot(); ii++) { 00456 double phi = ii*2*alpha; 00457 double phideg = phi/deg; 00458 00459 DDRotation rotation; 00460 string rotstr("NULL"); 00461 if (phideg != 0) { 00462 rotstr = "R"; 00463 if (phideg < 100) rotstr = "R0"; 00464 rotstr = rotstr + dbl_to_string(phideg); 00465 rotation = DDRotation(DDName(rotstr, rotns)); 00466 if (!rotation) { 00467 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: Creating a new " 00468 << "rotation " << rotstr << "\t" << 90 << "," 00469 << phideg << "," << 90 << "," << (phideg+90) 00470 << ", 0, 0"; 00471 rotation = DDrot(DDName(rotstr, rotns), 90*deg, phideg*deg, 00472 90*deg, (90+phideg)*deg, 0*deg, 0*deg); 00473 } //if !rotation 00474 } //if phideg!=0 00475 00476 DDpos (seclogic, genlogich, ii+1, DDTranslation(0.0, 0.0, 0.0), rotation); 00477 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << seclogic.name() 00478 << " number " << ii+1 << " positioned in " 00479 << genlogich.name() << " at (0,0,0) with " <<rotation; 00480 } 00481 00482 //Construct the things inside the sector 00483 constructInsideSector(seclogic); 00484 00485 //Backward half 00486 name = idName + "Back"; 00487 vector<double> pgonZBack, pgonRminBack, pgonRmaxBack; 00488 pgonZBack.push_back(getZEnd() - getDzShift()); 00489 pgonRminBack.push_back(pgonZBack[0]*tan(getAngBot()) + getDrEnd()); 00490 pgonRmaxBack.push_back(getRoutDip()); 00491 pgonZBack.push_back(getZEnd()); 00492 pgonRminBack.push_back(pgonZBack[1]*tan(getAngBot()) + getDrEnd()); 00493 pgonRmaxBack.push_back(getRoutDip()); 00494 solid = DDSolidFactory::polyhedra(DDName(name, idNameSpace), 00495 getNsectortot(), -alpha, dphi, pgonZBack, 00496 pgonRminBack, pgonRmaxBack); 00497 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << DDName(name,idNameSpace) 00498 << " Polyhedra made of " << getAbsMat() << " with " 00499 << getNsectortot() << " sectors from " << -alpha/deg 00500 << " to " << (-alpha+dphi)/deg << " and with " 00501 << pgonZBack.size() << " sections"; 00502 for (i = 0; i < pgonZBack.size(); i++) 00503 LogDebug("HCalGeom") << "\t\tZ = " << pgonZBack[i] << "\tRmin = " 00504 << pgonRminBack[i] << "\tRmax = " << pgonRmaxBack[i]; 00505 DDName absMatname(DDSplit(getAbsMat()).first, DDSplit(getAbsMat()).second); 00506 DDMaterial absMatter(absMatname); 00507 DDLogicalPart glog(DDName(name, idNameSpace), absMatter, solid); 00508 00509 DDpos(glog, genlogic, 1, DDTranslation(0.0, 0.0, 0.0), DDRotation()); 00510 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << glog.name() 00511 << " number 1 positioned in " << genlogic.name() 00512 << " at (0,0,0) with no rotation"; 00513 }
void DDHCalEndcapAlgo::constructInsideModule | ( | DDLogicalPart | module, | |
int | mod | |||
) | [protected] |
Definition at line 778 of file DDHCalEndcapAlgo.cc.
References constructScintLayer(), DDBase< N, C >::ddname(), DDpos(), DDSplit(), first, getAngBot(), getAngTop(), getDzStep(), getGenMat(), getLayer(), getLayerN(), getLayerName(), getLayerT(), getLayerType(), getModName(), getNsectors(), getPhi(), getPhiName(), getPlastMat(), getRotMat(), getRoutBlock2(), getScintT(), getSlope(), getThick(), getTrim(), getZ1Beam(), getZminBlock(), i, idNameSpace, idOffset, LogDebug, name, DDName::name(), DDBase< N, C >::name(), parameterLayer(), phi, pi, r1, r2, rot, rotns, edm::second(), funct::tan(), theta, tl1, tl2, and DDSolidFactory::trap().
Referenced by constructInsideSector().
00778 { 00779 00780 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: \t\tInside module ..." <<mod; 00781 00783 //Pointers to the Rotation Matrices and to the Materials 00784 string rotstr = getRotMat(); 00785 DDRotation rot(DDName(rotstr, rotns)); 00786 DDName matName(DDSplit(getGenMat()).first, DDSplit(getGenMat()).second); 00787 DDMaterial matter(matName); 00788 DDName plasName(DDSplit(getPlastMat()).first, DDSplit(getPlastMat()).second); 00789 DDMaterial matplastic(plasName); 00790 00791 double alpha = pi/getNsectors(); 00792 double zi = getZminBlock(mod); 00793 00794 for (int i = 0; i < getLayerN(mod); i++) { 00795 string name; 00796 DDSolid solid; 00797 DDLogicalPart glog, plog; 00798 int layer = getLayer(mod,i); 00799 double zo = zi + 0.5*getDzStep(); 00800 00801 for (int iphi = 0; iphi < getPhi(); iphi++) { 00802 double ziAir = zo - getThick(mod); 00803 double rinF, rinB; 00804 if (layer == 1) { 00805 rinF = ziAir * tan(getAngTop()); 00806 rinB = zo * tan(getAngTop()); 00807 } else { 00808 rinF = ziAir * tan(getAngBot()); 00809 rinB = zo * tan(getAngBot()); 00810 } 00811 double routF = (ziAir - getZ1Beam()) * getSlope(); 00812 double routB = (zo - getZ1Beam()) * getSlope(); 00813 if (routF > getRoutBlock2(mod)) routF = getRoutBlock2(mod); 00814 if (routB > getRoutBlock2(mod)) routB = getRoutBlock2(mod); 00815 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: Layer " << i << " Phi " 00816 << iphi << " Front " << ziAir << ", " << rinF 00817 << ", " << routF << " Back " << zo << ", " << rinB 00818 << ", " << routB; 00819 double yh1, bl1, tl1, yh2, bl2, tl2, theta, phi, alp; 00820 double xpos, ypos, zpos; 00821 parameterLayer(iphi, rinF, routF, rinB, routB, ziAir, zo, yh1, bl1, tl1, 00822 yh2, bl2, tl2, alp, theta, phi, xpos, ypos, zpos); 00823 00824 name = module.name().name()+getLayerName(layer)+getPhiName(iphi)+"Air"; 00825 solid = DDSolidFactory::trap(DDName(name, idNameSpace), 00826 0.5*getThick(mod), theta, phi, yh1, 00827 bl1, tl1, alp, yh2, bl2, tl2, alp); 00828 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << solid.name() 00829 << " Trap made of " << getGenMat() 00830 << " of dimensions " << 0.5*getThick(mod) << ", " 00831 << theta/deg << ", " << phi/deg << ", " << yh1 00832 << ", " << bl1 << ", " << tl1 << ", " << alp/deg 00833 << ", " << yh2 << ", " << bl2 << ", " << tl2 << ", " 00834 << alp/deg; 00835 glog = DDLogicalPart(solid.ddname(), matter, solid); 00836 00837 DDTranslation r1(xpos, ypos, zpos); 00838 DDpos(glog, module, layer+1, r1, rot); 00839 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << glog.name() 00840 << " number " << layer+1 << " positioned in " 00841 << module.name() << " at " << r1 << " with " << rot; 00842 00843 //Now the plastic with scintillators 00844 double yh = 0.5 * (routF - rinB) - getTrim(mod,iphi); 00845 double bl = 0.5 * rinB * tan(alpha) - getTrim(mod,iphi); 00846 double tl = 0.5 * routF * tan(alpha) - getTrim(mod,iphi); 00847 name = module.name().name()+getLayerName(layer)+getPhiName(iphi); 00848 solid = DDSolidFactory::trap(DDName(name, idNameSpace), 00849 0.5*getLayerT(layer), 0, 0, yh, 00850 bl, tl, alp, yh, bl, tl, alp); 00851 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << solid.name() 00852 << " Trap made of " << getPlastMat() 00853 << " of dimensions " << 0.5*getLayerT(layer) 00854 << ", 0, 0, " << yh << ", " << bl << ", " << tl 00855 << ", " << alp/deg << ", " << yh << ", " << bl 00856 << ", " << tl << ", " << alp/deg; 00857 plog = DDLogicalPart(solid.ddname(), matplastic, solid); 00858 00859 ypos = 0.5*(routF+rinB) - xpos; 00860 DDTranslation r2(0., ypos, 0.); 00861 DDpos(plog, glog, idOffset+layer+1, r2, DDRotation()); 00862 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << plog.name() 00863 << " number " << idOffset+layer+1 00864 << " positioned in " << glog.name() << " at " << r2 00865 << " with no rotation"; 00866 00867 //Constructin the scintillators inside 00868 int copyNo = layer*10 + getLayerType(layer); 00869 name = getModName(mod)+getLayerName(layer)+getPhiName(iphi); 00870 constructScintLayer (plog, getScintT(layer), yh,bl,tl, alp,name,copyNo); 00871 zo += 0.5*getDzStep(); 00872 } // End of loop over phi indices 00873 zi = zo - 0.5*getDzStep(); 00874 } // End of loop on layers 00875 }
void DDHCalEndcapAlgo::constructInsideModule0 | ( | DDLogicalPart | module, | |
int | mod | |||
) | [protected] |
Definition at line 683 of file DDHCalEndcapAlgo.cc.
References constructScintLayer(), DDBase< N, C >::ddname(), DDpos(), DDSplit(), first, getAbsMat(), getAngBot(), getAngTop(), getDzStep(), getLayer(), getLayerName(), getLayerT(), getLayerType(), getModName(), getPhi(), getPhiName(), getPlastMat(), getRotMat(), getScintT(), getSlope(), getThick(), getTolAbs(), getZ1Beam(), getZminBlock(), idNameSpace, idOffset, LogDebug, name, DDName::name(), DDBase< N, C >::name(), parameterLayer(), parameterLayer0(), phi, r1, r2, rot, rotns, edm::second(), funct::tan(), theta, tl1, tl2, and DDSolidFactory::trap().
Referenced by constructInsideSector().
00683 { 00684 00685 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: \t\tInside module0 ..."<<mod; 00686 00688 //Pointers to the Rotation Matrices and to the Materials 00689 string rotstr = getRotMat(); 00690 DDRotation rot(DDName(rotstr, rotns)); 00691 DDName matName(DDSplit(getAbsMat()).first, DDSplit(getAbsMat()).second); 00692 DDMaterial matabsorbr(matName); 00693 DDName plasName(DDSplit(getPlastMat()).first, DDSplit(getPlastMat()).second); 00694 DDMaterial matplastic(plasName); 00695 00696 int layer = getLayer(mod,0); 00697 int layer0 = getLayer(mod,1); 00698 string name; 00699 double xpos, ypos, zpos; 00700 DDSolid solid; 00701 DDLogicalPart glog, plog; 00702 for (int iphi = 0; iphi < getPhi(); iphi++) { 00703 double yh, bl, tl, alp; 00704 parameterLayer0(mod, layer, iphi, yh, bl, tl, alp, xpos, ypos, zpos); 00705 name = module.name().name()+getLayerName(layer)+getPhiName(iphi); 00706 solid = DDSolidFactory::trap(DDName(name, idNameSpace), 00707 0.5*getLayerT(layer), 0, 0, yh, 00708 bl, tl, alp, yh, bl, tl, alp); 00709 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << solid.name() 00710 << " Trap made of " << getPlastMat() 00711 << " of dimensions " << 0.5*getLayerT(layer) 00712 << ", 0, 0, " << yh << ", " << bl << ", " << tl 00713 << ", " << alp/deg << ", " << yh << ", " << bl 00714 << ", " << tl << ", " << alp/deg; 00715 glog = DDLogicalPart(solid.ddname(), matplastic, solid); 00716 00717 DDTranslation r1(xpos, ypos, zpos); 00718 DDpos(glog, module, idOffset+layer+1, r1, rot); 00719 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << glog.name() 00720 << " number " << idOffset+layer+1 << " positioned in " 00721 << module.name() << " at " << r1 << " with " << rot; 00722 //Now construct the layer of scintillator inside this 00723 int copyNo = layer0*10 + getLayerType(layer); 00724 name = getModName(mod)+getLayerName(layer)+getPhiName(iphi); 00725 constructScintLayer (glog, getScintT(layer), yh, bl, tl, alp, name,copyNo); 00726 } 00727 00728 //Now the absorber layer 00729 double zi = getZminBlock(mod) + getLayerT(layer); 00730 double zo = zi + 0.5*getDzStep(); 00731 double rinF, routF, rinB, routB; 00732 if (mod == 0) { 00733 rinF = zi * tan(getAngTop()); 00734 routF =(zi - getZ1Beam()) * getSlope(); 00735 rinB = zo * tan(getAngTop()); 00736 routB =(zo - getZ1Beam()) * getSlope(); 00737 } else { 00738 rinF = zi * tan(getAngBot()); 00739 routF = zi * tan(getAngTop()); 00740 rinB = zo * tan(getAngBot()); 00741 routB = zo * tan(getAngTop()); 00742 } 00743 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: Module " << mod << " Front " 00744 << zi << ", " << rinF << ", " << routF << " Back " 00745 << zo << ", " << rinB << ", " << routB; 00746 double yh1, bl1, tl1, yh2, bl2, tl2, theta, phi, alp; 00747 parameterLayer(0, rinF, routF, rinB, routB, zi, zo, yh1, bl1, tl1, yh2, bl2, 00748 tl2, alp, theta, phi, xpos, ypos, zpos); 00749 double fact = getTolAbs(); 00750 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: Trim " << fact << " Param " 00751 << yh1 << ", " << bl1 << ", " << tl1 << ", " << yh2 00752 << ", " << bl2 << ", " << tl2; 00753 bl1 -= fact; 00754 tl1 -= fact; 00755 bl2 -= fact; 00756 tl2 -= fact; 00757 00758 name = module.name().name()+"Absorber"; 00759 solid = DDSolidFactory::trap(DDName(name, idNameSpace), 00760 0.5*getThick(mod), theta, phi, yh1, 00761 bl1, tl1, alp, yh2, bl2, tl2, alp); 00762 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << solid.name() 00763 << " Trap made of " << getAbsMat() << " of dimensions " 00764 << 0.5*getThick(mod) << ", " << theta/deg << ", " 00765 << phi/deg << ", " << yh1 << ", " << bl1 << ", " 00766 << tl1 << ", " << alp/deg << ", " << yh2 << ", " << bl2 00767 << ", " << tl2 << ", " << alp/deg; 00768 glog = DDLogicalPart(solid.ddname(), matabsorbr, solid); 00769 00770 DDTranslation r2(xpos, ypos, zpos); 00771 DDpos(glog, module, 1, r2, rot); 00772 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << glog.name() 00773 << " number 1 positioned in " << module.name() << " at " 00774 << r2 << " with " << rot; 00775 }
void DDHCalEndcapAlgo::constructInsideSector | ( | DDLogicalPart | sector | ) | [protected] |
!!!!!!!!!!!!!!!!Should be zero. And removed as soon as
Definition at line 516 of file DDHCalEndcapAlgo.cc.
References constructInsideModule(), constructInsideModule0(), DDpos(), DDSplit(), equipModule(), first, getAngBot(), getModMat(), getModName(), getModType(), getModules(), getNsectors(), getRinBlock1(), getRinBlock2(), getRinDip(), getRinKink(), getRout(), getRoutBlock1(), getRoutBlock2(), getRoutDip(), getSectionModule(), getSlope(), getZ1Beam(), getZiDip(), getZiKink(), getZmaxBlock(), getZminBlock(), getZShiftHac2(), i, idName, idNameSpace, k, LogDebug, name, DDBase< N, C >::name(), pi, DDSolidFactory::polyhedra(), edm::second(), and funct::tan().
Referenced by constructGeneralVolume().
00516 { 00517 00518 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: Modules (" << getModules() 00519 << ") ..."; 00520 double alpha = pi/getNsectors(); 00521 00522 for (int i = 0; i < getModules(); i++) { 00523 string name = idName + getModName(i); 00524 DDName matname(DDSplit(getModMat(i)).first, DDSplit(getModMat(i)).second); 00525 DDMaterial matter(matname); 00526 00527 if (equipModule(i)>0) { 00528 int nsec = getSectionModule(i); 00529 00531 //vertical walls are allowed in SolidPolyhedra 00532 double deltaz = 0; 00533 00534 vector<double> pgonZ, pgonRmin, pgonRmax; 00535 if (nsec == 3) { 00536 double zf = getZminBlock(i) + getZShiftHac2(); 00537 pgonZ.push_back(zf); 00538 pgonRmin.push_back(zf*tan(getAngBot())); 00539 pgonRmax.push_back((zf-getZ1Beam())*getSlope()); 00540 pgonZ.push_back(getZiKink()); 00541 pgonRmin.push_back(getRinKink()); 00542 pgonRmax.push_back(getRout()); 00543 } else { 00544 pgonZ.push_back(getZminBlock(i)); 00545 pgonRmin.push_back(getRinBlock1(i)); 00546 pgonRmax.push_back(getRoutBlock1(i)); 00547 } 00548 if (nsec == 4) { 00549 pgonZ.push_back(getZiDip()); 00550 pgonRmin.push_back(getRinDip()); 00551 pgonRmax.push_back(getRout()); 00552 pgonZ.push_back(pgonZ[1] + deltaz); 00553 pgonRmin.push_back(pgonRmin[1]); 00554 pgonRmax.push_back(getRoutDip()); 00555 } 00556 pgonZ.push_back(getZmaxBlock(i)); 00557 pgonRmin.push_back(getRinBlock2(i)); 00558 pgonRmax.push_back(getRoutBlock2(i)); 00559 00560 //Solid & volume 00561 DDSolid solid; 00562 solid = DDSolidFactory::polyhedra(DDName(name, idNameSpace), 00563 1, -alpha, 2*alpha, 00564 pgonZ, pgonRmin, pgonRmax); 00565 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " 00566 << DDName(name,idNameSpace) << " Polyhedra made of " 00567 << getModMat(i) << " with 1 sector from " 00568 << -alpha/deg << " to " << alpha/deg << " and with " 00569 << nsec << " sections"; 00570 for (unsigned int k=0; k<pgonZ.size(); k++) 00571 LogDebug("HCalGeom") << "\t\tZ = " << pgonZ[k] << "\tRmin = " 00572 << pgonRmin[k] << "\tRmax = " << pgonRmax[k]; 00573 00574 DDLogicalPart glog(DDName(name, idNameSpace), matter, solid); 00575 00576 DDpos (glog, sector, i+1, DDTranslation(0.0, 0.0, 0.0), DDRotation()); 00577 LogDebug("HCalGeom") << "DDHCalEndcapAlgo test: " << glog.name() 00578 << " number " << i+1 << " positioned in " 00579 << sector.name() << " at (0,0,0) with no rotation"; 00580 00581 if (getModType(i) == 0) 00582 constructInsideModule0 (glog, i); 00583 else 00584 constructInsideModule (glog, i); 00585 } 00586 } 00587 00588 }
void DDHCalEndcapAlgo::constructScintLayer | ( | DDLogicalPart | glog, | |
double | pDz, | |||
double | yh, | |||
double | bl, | |||
double | tl, | |||
double | alp, | |||
std::string | name, | |||
int | id | |||
) | [protected] |
Referenced by constructInsideModule(), and constructInsideModule0().
Definition at line 22 of file DDHCalEndcapAlgo.h.
References eModule.
Referenced by constructGeneralVolume(), and constructInsideSector().
void DDHCalEndcapAlgo::execute | ( | ) |
Definition at line 314 of file DDHCalEndcapAlgo.cc.
References constructGeneralVolume(), and LogDebug.
00314 { 00315 00316 LogDebug("HCalGeom") << "==>> Constructing DDHCalEndcapAlgo..."; 00317 constructGeneralVolume(); 00318 LogDebug("HCalGeom") << "<<== End of DDHCalEndcapAlgo construction ..."; 00319 }
std::string DDHCalEndcapAlgo::getAbsMat | ( | ) | const [inline] |
Definition at line 50 of file DDHCalEndcapAlgo.h.
References absMat.
Referenced by constructGeneralVolume(), and constructInsideModule0().
00050 {return absMat;}
double DDHCalEndcapAlgo::getAngBot | ( | ) | const [inline] |
Definition at line 46 of file DDHCalEndcapAlgo.h.
References angBot.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideModule0(), constructInsideSector(), and parameterLayer0().
00046 {return angBot;}
double DDHCalEndcapAlgo::getAngGap | ( | ) | const [inline] |
double DDHCalEndcapAlgo::getAngTop | ( | ) | const [inline] |
Definition at line 45 of file DDHCalEndcapAlgo.h.
References angTop.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideModule0(), and parameterLayer0().
00045 {return angTop;}
double DDHCalEndcapAlgo::getDrEnd | ( | ) | const [inline] |
Definition at line 44 of file DDHCalEndcapAlgo.h.
References drEnd.
Referenced by constructGeneralVolume().
00044 {return drEnd;}
double DDHCalEndcapAlgo::getDzShift | ( | ) | const [inline] |
Definition at line 36 of file DDHCalEndcapAlgo.h.
References dzShift.
Referenced by constructGeneralVolume().
00036 {return dzShift;}
double DDHCalEndcapAlgo::getDzStep | ( | ) | const [inline] |
Definition at line 35 of file DDHCalEndcapAlgo.h.
References dzStep.
Referenced by constructInsideModule(), and constructInsideModule0().
00035 {return dzStep;}
int DDHCalEndcapAlgo::getEndcaps | ( | ) | const [inline] |
Definition at line 21 of file DDHCalEndcapAlgo.h.
References nEndcap.
Referenced by constructGeneralVolume().
00021 {return nEndcap;}
std::string DDHCalEndcapAlgo::getGenMat | ( | ) | const [inline] |
Definition at line 17 of file DDHCalEndcapAlgo.h.
References genMaterial.
Referenced by constructGeneralVolume(), and constructInsideModule().
00017 {return genMaterial;}
double DDHCalEndcapAlgo::getHeboxDepth | ( | ) | const [inline] |
Definition at line 33 of file DDHCalEndcapAlgo.cc.
References layerN0, layerN1, layerN2, layerN3, layerN4, and layerN5.
Referenced by constructInsideModule(), and constructInsideModule0().
00033 { 00034 00035 switch (i) { 00036 case 0: 00037 return layerN0[j]; 00038 break; 00039 00040 case 1: 00041 return layerN1[j]; 00042 break; 00043 00044 case 2: 00045 return layerN2[j]; 00046 break; 00047 00048 case 3: 00049 return layerN3[j]; 00050 break; 00051 00052 case 4: 00053 return layerN4[j]; 00054 break; 00055 00056 case 5: 00057 return layerN5[j]; 00058 break; 00059 00060 default: 00061 return 0; 00062 } 00063 }
Definition at line 56 of file DDHCalEndcapAlgo.h.
References layerN.
Referenced by constructInsideModule().
std::string DDHCalEndcapAlgo::getLayerName | ( | unsigned int | i | ) | const [inline] |
Definition at line 70 of file DDHCalEndcapAlgo.h.
References layerName.
Referenced by constructInsideModule(), and constructInsideModule0().
int DDHCalEndcapAlgo::getLayers | ( | ) | const [inline] |
double DDHCalEndcapAlgo::getLayerT | ( | unsigned int | i | ) | const [inline] |
Definition at line 72 of file DDHCalEndcapAlgo.h.
References layerT.
Referenced by constructInsideModule(), constructInsideModule0(), and parameterLayer0().
Definition at line 71 of file DDHCalEndcapAlgo.h.
References layerType.
Referenced by constructInsideModule(), and constructInsideModule0().
std::string DDHCalEndcapAlgo::getModMat | ( | unsigned int | i | ) | const [inline] |
Definition at line 53 of file DDHCalEndcapAlgo.h.
References modMat.
Referenced by constructInsideSector().
std::string DDHCalEndcapAlgo::getModName | ( | unsigned int | i | ) | const [inline] |
Definition at line 52 of file DDHCalEndcapAlgo.h.
References modName.
Referenced by constructInsideModule(), constructInsideModule0(), and constructInsideSector().
Definition at line 54 of file DDHCalEndcapAlgo.h.
References modType.
Referenced by constructInsideSector().
int DDHCalEndcapAlgo::getModules | ( | ) | const [inline] |
Definition at line 51 of file DDHCalEndcapAlgo.h.
References modules.
Referenced by constructInsideSector().
00051 {return modules;}
int DDHCalEndcapAlgo::getNsectors | ( | ) | const [inline] |
Definition at line 19 of file DDHCalEndcapAlgo.h.
References nsectors.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideSector(), parameterLayer(), and parameterLayer0().
00019 {return nsectors;}
int DDHCalEndcapAlgo::getNsectortot | ( | ) | const [inline] |
Definition at line 20 of file DDHCalEndcapAlgo.h.
References nsectortot.
Referenced by constructGeneralVolume().
00020 {return nsectortot;}
int DDHCalEndcapAlgo::getPhi | ( | ) | const [inline] |
Definition at line 67 of file DDHCalEndcapAlgo.h.
References phiSections.
Referenced by constructInsideModule(), and constructInsideModule0().
00067 {return phiSections;}
std::string DDHCalEndcapAlgo::getPhiName | ( | unsigned int | i | ) | const [inline] |
Definition at line 68 of file DDHCalEndcapAlgo.h.
References phiName.
Referenced by constructInsideModule(), and constructInsideModule0().
std::string DDHCalEndcapAlgo::getPlastMat | ( | ) | const [inline] |
Definition at line 74 of file DDHCalEndcapAlgo.h.
References plastMat.
Referenced by constructInsideModule(), and constructInsideModule0().
00074 {return plastMat;}
double DDHCalEndcapAlgo::getRinBlock1 | ( | unsigned | i | ) | const [inline] |
Definition at line 62 of file DDHCalEndcapAlgo.h.
References rinBlock1.
Referenced by constructInsideSector().
double DDHCalEndcapAlgo::getRinBlock2 | ( | unsigned | i | ) | const [inline] |
Definition at line 63 of file DDHCalEndcapAlgo.h.
References rinBlock2.
Referenced by constructInsideSector().
double DDHCalEndcapAlgo::getRinDip | ( | ) | const [inline] |
Definition at line 41 of file DDHCalEndcapAlgo.h.
References riDip.
Referenced by constructGeneralVolume(), and constructInsideSector().
00041 {return riDip;}
double DDHCalEndcapAlgo::getRinKink | ( | ) | const [inline] |
Definition at line 40 of file DDHCalEndcapAlgo.h.
References riKink.
Referenced by constructGeneralVolume(), and constructInsideSector().
00040 {return riKink;}
std::string DDHCalEndcapAlgo::getRotation | ( | ) | const [inline] |
Definition at line 18 of file DDHCalEndcapAlgo.h.
References rotation.
Referenced by constructGeneralVolume().
00018 {return rotation;}
std::string DDHCalEndcapAlgo::getRotMat | ( | ) | const [inline] |
Definition at line 76 of file DDHCalEndcapAlgo.h.
References rotmat.
Referenced by constructInsideModule(), and constructInsideModule0().
00076 {return rotmat;}
double DDHCalEndcapAlgo::getRout | ( | ) | const [inline] |
Definition at line 39 of file DDHCalEndcapAlgo.h.
References rout.
Referenced by constructGeneralVolume(), and constructInsideSector().
00039 {return rout;}
double DDHCalEndcapAlgo::getRoutBlock1 | ( | unsigned | i | ) | const [inline] |
Definition at line 64 of file DDHCalEndcapAlgo.h.
References routBlock1.
Referenced by constructInsideSector().
00064 {return routBlock1[i];}
double DDHCalEndcapAlgo::getRoutBlock2 | ( | unsigned | i | ) | const [inline] |
Definition at line 65 of file DDHCalEndcapAlgo.h.
References routBlock2.
Referenced by constructInsideModule(), and constructInsideSector().
00065 {return routBlock2[i];}
double DDHCalEndcapAlgo::getRoutDip | ( | ) | const [inline] |
Definition at line 42 of file DDHCalEndcapAlgo.h.
References roDip.
Referenced by constructGeneralVolume(), and constructInsideSector().
00042 {return roDip;}
std::string DDHCalEndcapAlgo::getScintMat | ( | ) | const [inline] |
double DDHCalEndcapAlgo::getScintT | ( | unsigned int | i | ) | const [inline] |
Definition at line 73 of file DDHCalEndcapAlgo.h.
References scintT.
Referenced by constructInsideModule(), and constructInsideModule0().
int DDHCalEndcapAlgo::getSectionModule | ( | unsigned | i | ) | const [inline] |
Definition at line 55 of file DDHCalEndcapAlgo.h.
References sectionModule.
Referenced by constructInsideSector().
00055 {return sectionModule[i];}
double DDHCalEndcapAlgo::getSlope | ( | ) | const [inline] |
Definition at line 48 of file DDHCalEndcapAlgo.h.
References slope.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideModule0(), constructInsideSector(), and parameterLayer0().
00048 {return slope;}
double DDHCalEndcapAlgo::getThick | ( | unsigned int | i | ) | const [inline] |
Definition at line 58 of file DDHCalEndcapAlgo.h.
References thick.
Referenced by constructInsideModule(), and constructInsideModule0().
double DDHCalEndcapAlgo::getTolAbs | ( | ) | const [inline] |
Definition at line 78 of file DDHCalEndcapAlgo.h.
References tolAbs.
Referenced by constructInsideModule0().
00078 {return tolAbs;}
double DDHCalEndcapAlgo::getTolPos | ( | ) | const [inline] |
Definition at line 77 of file DDHCalEndcapAlgo.h.
References tolPos.
Referenced by parameterLayer().
00077 {return tolPos;}
Definition at line 65 of file DDHCalEndcapAlgo.cc.
References trimLeft, and trimRight.
Referenced by constructInsideModule(), and parameterLayer0().
00065 { 00066 00067 if (j == 0) 00068 return trimLeft[i]; 00069 else 00070 return trimRight[j]; 00071 }
double DDHCalEndcapAlgo::getZ0Beam | ( | ) | const [inline] |
double DDHCalEndcapAlgo::getZ1Beam | ( | ) | const [inline] |
Definition at line 33 of file DDHCalEndcapAlgo.h.
References z1Beam.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideModule0(), constructInsideSector(), and parameterLayer0().
00033 {return z1Beam;}
double DDHCalEndcapAlgo::getZEnd | ( | ) | const [inline] |
Definition at line 26 of file DDHCalEndcapAlgo.h.
References zEnd.
Referenced by constructGeneralVolume().
00026 {return zEnd;}
double DDHCalEndcapAlgo::getZFront | ( | ) | const [inline] |
Definition at line 25 of file DDHCalEndcapAlgo.h.
References zFront.
Referenced by constructGeneralVolume().
00025 {return zFront;}
double DDHCalEndcapAlgo::getZiBody | ( | ) | const [inline] |
Definition at line 29 of file DDHCalEndcapAlgo.h.
References ziBody.
Referenced by constructGeneralVolume().
00029 {return ziBody;}
double DDHCalEndcapAlgo::getZiDip | ( | ) | const [inline] |
Definition at line 34 of file DDHCalEndcapAlgo.h.
References ziDip.
Referenced by constructGeneralVolume(), and constructInsideSector().
00034 {return ziDip;}
double DDHCalEndcapAlgo::getZiKink | ( | ) | const [inline] |
Definition at line 31 of file DDHCalEndcapAlgo.h.
References ziKink.
Referenced by constructGeneralVolume(), and constructInsideSector().
00031 {return ziKink;}
double DDHCalEndcapAlgo::getZiL0Body | ( | ) | const [inline] |
Definition at line 30 of file DDHCalEndcapAlgo.h.
References ziL0Body.
Referenced by constructGeneralVolume().
00030 {return ziL0Body;}
double DDHCalEndcapAlgo::getZiL0Nose | ( | ) | const [inline] |
double DDHCalEndcapAlgo::getZiNose | ( | ) | const [inline] |
double DDHCalEndcapAlgo::getZmaxBlock | ( | unsigned | i | ) | const [inline] |
Definition at line 61 of file DDHCalEndcapAlgo.h.
References zmaxBlock.
Referenced by constructInsideSector(), and parameterLayer0().
double DDHCalEndcapAlgo::getZminBlock | ( | unsigned | i | ) | const [inline] |
Definition at line 60 of file DDHCalEndcapAlgo.h.
References zminBlock.
Referenced by constructInsideModule(), constructInsideModule0(), constructInsideSector(), and parameterLayer0().
double DDHCalEndcapAlgo::getZShift | ( | ) | const [inline] |
Definition at line 23 of file DDHCalEndcapAlgo.h.
References zShift.
Referenced by constructGeneralVolume().
00023 {return zShift;}
double DDHCalEndcapAlgo::getZShiftHac2 | ( | ) | const [inline] |
Definition at line 37 of file DDHCalEndcapAlgo.h.
References zShiftHac2.
Referenced by constructGeneralVolume(), and constructInsideSector().
00037 {return zShiftHac2;}
void DDHCalEndcapAlgo::initialize | ( | const DDNumericArguments & | nArgs, | |
const DDVectorArguments & | vArgs, | |||
const DDMapArguments & | mArgs, | |||
const DDStringArguments & | sArgs, | |||
const DDStringVectorArguments & | vsArgs | |||
) |
Definition at line 73 of file DDHCalEndcapAlgo.cc.
References absMat, angBot, angGap, angTop, dbl_to_int(), drEnd, dzShift, dzStep, eModule, funct::exp(), genMaterial, heboxDepth, i, idName, idNameSpace, idOffset, int, j, layerN, layerN0, layerN1, layerN2, layerN3, layerN4, layerN5, layerName, layers, layerT, layerType, LogDebug, modMat, modName, modType, modules, nEndcap, DDCurrentNamespace::ns(), nsectors, nsectortot, dbtoconf::parent, phiName, phiSections, plastMat, r1, riDip, riKink, rinBlock1, rinBlock2, roDip, rotation, rotHalf, rotmat, rotns, rout, routBlock1, routBlock2, scintMat, scintT, sectionModule, funct::sin(), slope, funct::tan(), thick, tolAbs, tolPos, trimLeft, trimRight, z0Beam, z1Beam, zEnd, zFront, ziBody, ziDip, ziKink, ziL0Body, ziL0Nose, ziNose, zmaxBlock, zminBlock, zShift, and zShiftHac2.
00077 { 00078 00079 int i,j; 00080 genMaterial = sArgs["MaterialName"]; 00081 rotation = sArgs["Rotation"]; 00082 nsectors = int (nArgs["Sector"]); 00083 nsectortot = int (nArgs["SectorTot"]); 00084 nEndcap = int (nArgs["Endcap"]); 00085 rotHalf = sArgs["RotHalf"]; 00086 rotns = sArgs["RotNameSpace"]; 00087 zShift = nArgs["ZShift"]; 00088 00089 zFront = nArgs["ZFront"]; 00090 zEnd = nArgs["ZEnd"]; 00091 ziNose = nArgs["ZiNose"]; 00092 ziL0Nose = nArgs["ZiL0Nose"]; 00093 ziBody = nArgs["ZiBody"]; 00094 ziL0Body = nArgs["ZiL0Body"]; 00095 z0Beam = nArgs["Z0Beam"]; 00096 ziDip = nArgs["ZiDip"]; 00097 dzStep = nArgs["DzStep"]; 00098 zShiftHac2 = nArgs["ZShiftHac2"]; 00099 double gap = nArgs["Gap"]; 00100 double z1 = nArgs["Z1"]; 00101 double r1 = nArgs["R1"]; 00102 rout = nArgs["Rout"]; 00103 heboxDepth = nArgs["HEboxDepth"]; 00104 drEnd = nArgs["DrEnd"]; 00105 double etamin = nArgs["Etamin"]; 00106 angBot = nArgs["AngBot"]; 00107 angGap = nArgs["AngGap"]; 00108 00109 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: General material " 00110 << genMaterial << "\tSectors " << nsectors << ", " 00111 << nsectortot << "\tEndcaps " << nEndcap 00112 << "\tRotation matrix for half " << rotns 00113 << ":" << rotHalf << "\n\tzFront " << zFront << " zEnd " 00114 << zEnd << " ziNose " << ziNose << " ziL0Nose " 00115 << ziL0Nose << " ziBody " << ziBody << " ziL0Body " 00116 << ziL0Body << " z0Beam " << z0Beam << " ziDip " 00117 << ziDip << " dzStep " << dzStep << " Gap " << gap 00118 << " z1 " << z1 << "\n\tr1 " << r1 << " rout " << rout 00119 << " HeboxDepth " << heboxDepth << " drEnd " << drEnd 00120 << "\tetamin " << etamin << " Bottom angle " << angBot 00121 << " Gap angle " << angGap << " Z-Shift " << zShift 00122 << " " << zShiftHac2; 00123 00124 //Derived quantities 00125 angTop = 2.0 * atan (exp(-etamin)); 00126 slope = tan(angGap); 00127 z1Beam = z1 - r1/slope; 00128 ziKink = z1Beam + rout/slope; 00129 riKink = ziKink*tan(angBot); 00130 riDip = ziDip*tan(angBot); 00131 roDip = rout - heboxDepth; 00132 dzShift = (z1Beam - z0Beam) - gap/sin(angGap); 00133 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: angTop " << angTop/deg 00134 <<"\tSlope " << slope << "\tDzShift " << dzShift 00135 << "\n\tz1Beam " << z1Beam << "\tziKink" << ziKink 00136 << "\triKink " << riKink << "\triDip " << riDip 00137 << "\n\troDip " << roDip << "\tRotation " << rotation; 00138 00140 //Modules 00141 absMat = sArgs["AbsMat"]; 00142 modules = int(nArgs["Modules"]); 00143 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: Number of modules " 00144 << modules << " and absorber material " << absMat; 00145 00146 modName = vsArgs["ModuleName"]; 00147 modMat = vsArgs["ModuleMat"]; 00148 modType = dbl_to_int(vArgs["ModuleType"]); 00149 sectionModule = dbl_to_int(vArgs["SectionModule"]); 00150 thick = vArgs["ModuleThick"]; 00151 trimLeft = vArgs["TrimLeft"]; 00152 trimRight = vArgs["TrimRight"]; 00153 eModule = dbl_to_int(vArgs["EquipModule"]); 00154 layerN = dbl_to_int(vArgs["LayerN"]); 00155 layerN0 = dbl_to_int(vArgs["LayerN0"]); 00156 layerN1 = dbl_to_int(vArgs["LayerN1"]); 00157 layerN2 = dbl_to_int(vArgs["LayerN2"]); 00158 layerN3 = dbl_to_int(vArgs["LayerN3"]); 00159 layerN4 = dbl_to_int(vArgs["LayerN4"]); 00160 layerN5 = dbl_to_int(vArgs["LayerN5"]); 00161 for (i = 0; i < modules; i++) { 00162 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: " << modName[i] <<" type " 00163 << modType[i] << " Sections " << sectionModule[i] 00164 << " thickness of absorber/air " << thick[i] 00165 << " trim " << trimLeft[i] << ", " << trimRight[i] 00166 << " equip module " << eModule[i] << " with " 00167 << layerN[i] << " layers"; 00168 if (i == 0) { 00169 for (j = 0; j < layerN[i]; j++) { 00170 LogDebug("HCalGeom") << "\t " << layerN0[j] << "/" << layerN0[j+1]; 00171 } 00172 } else if (i == 1) { 00173 for (j = 0; j < layerN[i]; j++) { 00174 LogDebug("HCalGeom") << "\t " << layerN1[j] << "/" << layerN1[j+1]; 00175 } 00176 } else if (i == 2) { 00177 for (j = 0; j < layerN[i]; j++) { 00178 LogDebug("HCalGeom") << "\t " << layerN2[j]; 00179 } 00180 } else if (i == 3) { 00181 for (j = 0; j < layerN[i]; j++) { 00182 LogDebug("HCalGeom") << "\t " << layerN3[j]; 00183 } 00184 } else if (i == 4) { 00185 for (j = 0; j < layerN[i]; j++) { 00186 LogDebug("HCalGeom") << "\t " << layerN4[j]; 00187 } 00188 } else if (i == 5) { 00189 for (j = 0; j < layerN[i]; j++) { 00190 LogDebug("HCalGeom") << "\t " << layerN5[j]; 00191 } 00192 } 00193 } 00194 00196 //Layers 00197 phiSections = int(nArgs["PhiSections"]); 00198 phiName = vsArgs["PhiName"]; 00199 layers = int(nArgs["Layers"]); 00200 layerName = vsArgs["LayerName"]; 00201 layerType = dbl_to_int(vArgs["LayerType"]); 00202 layerT = vArgs["LayerT"]; 00203 scintT = vArgs["ScintT"]; 00204 scintMat = sArgs["ScintMat"]; 00205 plastMat = sArgs["PlastMat"]; 00206 rotmat = sArgs["RotMat"]; 00207 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: Phi Sections " 00208 << phiSections; 00209 for (i = 0; i < phiSections; i++) 00210 LogDebug("HCalGeom") << "\tName[" << i << "] : " << phiName[i]; 00211 LogDebug("HCalGeom") << "\tPlastic: " << plastMat << "\tScintillator: " 00212 << scintMat << "\tRotation matrix " << rotns << ":" 00213 << rotmat << "\n\tNumber of layers " << layers; 00214 for (i = 0; i < layers; i++) { 00215 LogDebug("HCalGeom") << "\t" << layerName[i] << "\tType " << layerType[i] 00216 << "\tThickness " << layerT[i] << "\tScint.Thick " 00217 << scintT[i]; 00218 } 00219 00221 // Derive bounding of the modules 00222 int module = 0; 00223 // Layer 0 (Nose) 00224 if (modules > 0) { 00225 zminBlock.push_back(ziL0Nose); 00226 zmaxBlock.push_back(zminBlock[module] + layerT[0] + 0.5*dzStep); 00227 rinBlock1.push_back(zminBlock[module] * tan(angTop)); 00228 rinBlock2.push_back(zmaxBlock[module] * tan(angTop)); 00229 routBlock1.push_back((zminBlock[module] - z1Beam) * slope); 00230 routBlock2.push_back((zmaxBlock[module] - z1Beam) * slope); 00231 module++; 00232 } 00233 00234 // Layer 0 (Body) 00235 if (modules > 1) { 00236 zminBlock.push_back(ziL0Body); 00237 zmaxBlock.push_back(zminBlock[module] + layerT[0] + 0.5*dzStep); 00238 rinBlock1.push_back(zminBlock[module] * tan(angBot)); 00239 rinBlock2.push_back(zmaxBlock[module] * tan(angBot)); 00240 routBlock1.push_back(zminBlock[module] * tan(angTop)); 00241 routBlock2.push_back(zmaxBlock[module] * tan(angTop)); 00242 module++; 00243 } 00244 00245 // Hac1 00246 if (modules > 2) { 00247 zminBlock.push_back(ziNose); 00248 zmaxBlock.push_back(ziBody); 00249 rinBlock1.push_back(zminBlock[module] * tan(angTop)); 00250 rinBlock2.push_back(zmaxBlock[module] * tan(angTop)); 00251 routBlock1.push_back((zminBlock[module] - z1Beam) * slope); 00252 routBlock2.push_back((zmaxBlock[module] - z1Beam) * slope); 00253 module++; 00254 } 00255 00256 // Hac2 00257 if (modules > 3) { 00258 zminBlock.push_back(ziBody); 00259 zmaxBlock.push_back(zminBlock[module] + layerN[3]*dzStep); 00260 rinBlock1.push_back(zminBlock[module] * tan(angBot)); 00261 rinBlock2.push_back(zmaxBlock[module] * tan(angBot)); 00262 routBlock1.push_back((zmaxBlock[module-1] - z1Beam) * slope); 00263 routBlock2.push_back(rout); 00264 module++; 00265 } 00266 00267 // Hac3 00268 if (modules > 4) { 00269 zminBlock.push_back(zmaxBlock[module-1]); 00270 zmaxBlock.push_back(zminBlock[module] + layerN[4]*dzStep); 00271 rinBlock1.push_back(zminBlock[module] * tan(angBot)); 00272 rinBlock2.push_back(zmaxBlock[module] * tan(angBot)); 00273 routBlock1.push_back(rout); 00274 routBlock2.push_back(rout); 00275 module++; 00276 } 00277 00278 // Hac4 00279 if (modules > 5) { 00280 zminBlock.push_back(zmaxBlock[module-1]); 00281 zmaxBlock.push_back(zminBlock[module] + layerN[5]*dzStep); 00282 rinBlock1.push_back(zminBlock[module] * tan(angBot)); 00283 rinBlock2.push_back(zmaxBlock[module] * tan(angBot)); 00284 routBlock1.push_back(rout); 00285 routBlock2.push_back(roDip); 00286 module++; 00287 } 00288 00289 for (i = 0; i < module; i++) 00290 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: Module " << i 00291 << "\tZ/Rin/Rout " << zminBlock[i] << ", " 00292 << zmaxBlock[i] << "/ " << rinBlock1[i] << ", " 00293 << rinBlock2[i] << "/ " << routBlock1[i] << ", " 00294 << routBlock2[i]; 00295 00296 idName = sArgs["MotherName"]; 00297 idNameSpace = DDCurrentNamespace::ns(); 00298 idOffset = int (nArgs["IdOffset"]); 00299 DDName parentName = parent().name(); 00300 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: Parent " << parentName 00301 << " idName " << idName << " NameSpace " << idNameSpace 00302 << " Offset " << idOffset; 00303 00304 tolPos = nArgs["TolPos"]; 00305 tolAbs = nArgs["TolAbs"]; 00306 LogDebug("HCalGeom") << "DDHCalEndcapAlgo debug: Tolerances - Positioning " 00307 << tolPos << " Absorber " << tolAbs; 00308 }
void DDHCalEndcapAlgo::parameterLayer | ( | int | iphi, | |
double | rinF, | |||
double | routF, | |||
double | rinB, | |||
double | routB, | |||
double | zi, | |||
double | zo, | |||
double & | yh1, | |||
double & | bl1, | |||
double & | tl1, | |||
double & | yh2, | |||
double & | bl2, | |||
double & | tl2, | |||
double & | alp, | |||
double & | theta, | |||
double & | phi, | |||
double & | xpos, | |||
double & | ypos, | |||
double & | zpos | |||
) | [protected] |
Definition at line 638 of file DDHCalEndcapAlgo.cc.
References getNsectors(), getTolPos(), LogDebug, pi, r, funct::sqrt(), and funct::tan().
Referenced by constructInsideModule(), and constructInsideModule0().
00644 { 00645 00646 //Given rin, rout compute parameters of the trapezoid and 00647 //position of the trapezoid for a standrd layer 00648 double alpha = pi/getNsectors(); 00649 LogDebug("HCalGeom") << "Input " << iphi << " Front " << rinF << " " << routF 00650 << " " << zi << " Back " << rinB << " " << routB << " " 00651 << zo << " Alpha " << alpha/deg; 00652 00653 yh1 = 0.5 * (routF - rinF); 00654 bl1 = 0.5 * rinF * tan(alpha); 00655 tl1 = 0.5 * routF * tan(alpha); 00656 yh2 = 0.5 * (routB - rinB); 00657 bl2 = 0.5 * rinB * tan(alpha); 00658 tl2 = 0.5 * routB * tan(alpha); 00659 double dx = 0.25* (bl2+tl2-bl1-tl1); 00660 double dy = 0.5 * (rinB+routB-rinF-routF); 00661 xpos = 0.25*(rinB+routB+rinF+routF); 00662 ypos = 0.25*(bl2+tl2+bl1+tl1); 00663 zpos = 0.5*(zi+zo); 00664 alp = 0.5 * alpha; 00665 ypos-= getTolPos(); 00666 if (iphi == 0) { 00667 ypos = -ypos; 00668 } else { 00669 alp = -alp; 00670 dx = -dx; 00671 } 00672 double r = sqrt (dx*dx + dy*dy); 00673 theta= atan (r/(zo-zi)); 00674 phi = atan2 (dy, dx); 00675 LogDebug("HCalGeom") << "Output Dimensions " << yh1 << " " << bl1 << " " 00676 << tl1 << " " << yh2 << " " << bl2 << " " << tl2 00677 << " " << alp/deg << " " << theta/deg << " " 00678 << phi/deg << " Position " << xpos << " " << ypos 00679 << " " << zpos; 00680 }
void DDHCalEndcapAlgo::parameterLayer0 | ( | int | mod, | |
int | layer, | |||
int | iphi, | |||
double & | yh, | |||
double & | bl, | |||
double & | tl, | |||
double & | alp, | |||
double & | xpos, | |||
double & | ypos, | |||
double & | zpos | |||
) | [protected] |
Definition at line 590 of file DDHCalEndcapAlgo.cc.
References getAngBot(), getAngTop(), getLayerT(), getNsectors(), getSlope(), getTrim(), getZ1Beam(), getZmaxBlock(), getZminBlock(), LogDebug, pi, rout, and funct::tan().
Referenced by constructInsideModule0().
00593 { 00594 00595 //Given module and layer number compute parameters of trapezoid 00596 //and positioning parameters 00597 double alpha = pi/getNsectors(); 00598 LogDebug("HCalGeom") << "Input " << iphi << " " << layer << " " << iphi 00599 << " Alpha " << alpha/deg; 00600 00601 double zi, zo; 00602 if (iphi == 0) { 00603 zi = getZminBlock(mod); 00604 zo = zi + getLayerT(layer); 00605 } else { 00606 zo = getZmaxBlock(mod); 00607 zi = zo - getLayerT(layer); 00608 } 00609 double rin, rout; 00610 if (mod == 0) { 00611 rin = zo * tan(getAngTop()); 00612 rout = (zi - getZ1Beam()) * getSlope(); 00613 } else { 00614 rin = zo * tan(getAngBot()); 00615 rout = zi * tan(getAngTop()); 00616 } 00617 yh = 0.5 * (rout - rin); 00618 bl = 0.5 * rin * tan (alpha); 00619 tl = 0.5 * rout * tan(alpha); 00620 xpos = 0.5 * (rin + rout); 00621 ypos = 0.5 * (bl + tl); 00622 zpos = 0.5 * (zi + zo); 00623 yh -= getTrim(mod,iphi); 00624 bl -= getTrim(mod,iphi); 00625 tl -= getTrim(mod,iphi); 00626 alp = 0.5 * alpha; 00627 if (iphi == 0) { 00628 ypos = -ypos; 00629 } else { 00630 alp = -alp; 00631 } 00632 LogDebug("HCalGeom") << "Output Dimensions " << yh << " " << bl << " " 00633 << tl << " " << alp/deg << " Position " << xpos << " " 00634 << ypos << " " << zpos; 00635 }
std::string DDHCalEndcapAlgo::absMat [private] |
double DDHCalEndcapAlgo::angBot [private] |
double DDHCalEndcapAlgo::angGap [private] |
double DDHCalEndcapAlgo::angTop [private] |
double DDHCalEndcapAlgo::drEnd [private] |
double DDHCalEndcapAlgo::dzShift [private] |
double DDHCalEndcapAlgo::dzStep [private] |
std::vector<int> DDHCalEndcapAlgo::eModule [private] |
std::string DDHCalEndcapAlgo::genMaterial [private] |
double DDHCalEndcapAlgo::heboxDepth [private] |
std::string DDHCalEndcapAlgo::idName [private] |
Definition at line 178 of file DDHCalEndcapAlgo.h.
Referenced by constructGeneralVolume(), constructInsideSector(), and initialize().
std::string DDHCalEndcapAlgo::idNameSpace [private] |
Definition at line 179 of file DDHCalEndcapAlgo.h.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideModule0(), constructInsideSector(), and initialize().
int DDHCalEndcapAlgo::idOffset [private] |
Definition at line 180 of file DDHCalEndcapAlgo.h.
Referenced by constructInsideModule(), constructInsideModule0(), and initialize().
std::vector<int> DDHCalEndcapAlgo::layerN [private] |
std::vector<int> DDHCalEndcapAlgo::layerN0 [private] |
std::vector<int> DDHCalEndcapAlgo::layerN1 [private] |
std::vector<int> DDHCalEndcapAlgo::layerN2 [private] |
std::vector<int> DDHCalEndcapAlgo::layerN3 [private] |
std::vector<int> DDHCalEndcapAlgo::layerN4 [private] |
std::vector<int> DDHCalEndcapAlgo::layerN5 [private] |
std::vector<std::string> DDHCalEndcapAlgo::layerName [private] |
int DDHCalEndcapAlgo::layers [private] |
std::vector<double> DDHCalEndcapAlgo::layerT [private] |
std::vector<int> DDHCalEndcapAlgo::layerType [private] |
std::vector<std::string> DDHCalEndcapAlgo::modMat [private] |
std::vector<std::string> DDHCalEndcapAlgo::modName [private] |
std::vector<int> DDHCalEndcapAlgo::modType [private] |
int DDHCalEndcapAlgo::modules [private] |
int DDHCalEndcapAlgo::nEndcap [private] |
int DDHCalEndcapAlgo::nsectors [private] |
int DDHCalEndcapAlgo::nsectortot [private] |
std::vector<std::string> DDHCalEndcapAlgo::phiName [private] |
int DDHCalEndcapAlgo::phiSections [private] |
std::string DDHCalEndcapAlgo::plastMat [private] |
double DDHCalEndcapAlgo::riDip [private] |
double DDHCalEndcapAlgo::riKink [private] |
std::vector<double> DDHCalEndcapAlgo::rinBlock1 [private] |
std::vector<double> DDHCalEndcapAlgo::rinBlock2 [private] |
double DDHCalEndcapAlgo::roDip [private] |
std::string DDHCalEndcapAlgo::rotation [private] |
Definition at line 115 of file DDHCalEndcapAlgo.h.
Referenced by constructGeneralVolume(), getRotation(), and initialize().
std::string DDHCalEndcapAlgo::rotHalf [private] |
Definition at line 113 of file DDHCalEndcapAlgo.h.
Referenced by constructGeneralVolume(), and initialize().
std::string DDHCalEndcapAlgo::rotmat [private] |
std::string DDHCalEndcapAlgo::rotns [private] |
Definition at line 114 of file DDHCalEndcapAlgo.h.
Referenced by constructGeneralVolume(), constructInsideModule(), constructInsideModule0(), and initialize().
double DDHCalEndcapAlgo::rout [private] |
Definition at line 132 of file DDHCalEndcapAlgo.h.
Referenced by getRout(), initialize(), and parameterLayer0().
std::vector<double> DDHCalEndcapAlgo::routBlock1 [private] |
std::vector<double> DDHCalEndcapAlgo::routBlock2 [private] |
std::string DDHCalEndcapAlgo::scintMat [private] |
std::vector<double> DDHCalEndcapAlgo::scintT [private] |
std::vector<int> DDHCalEndcapAlgo::sectionModule [private] |
Definition at line 149 of file DDHCalEndcapAlgo.h.
Referenced by getSectionModule(), and initialize().
double DDHCalEndcapAlgo::slope [private] |
std::vector<double> DDHCalEndcapAlgo::thick [private] |
double DDHCalEndcapAlgo::tolAbs [private] |
double DDHCalEndcapAlgo::tolPos [private] |
std::vector<double> DDHCalEndcapAlgo::trimLeft [private] |
std::vector<double> DDHCalEndcapAlgo::trimRight [private] |
double DDHCalEndcapAlgo::z0Beam [private] |
double DDHCalEndcapAlgo::z1Beam [private] |
double DDHCalEndcapAlgo::zEnd [private] |
double DDHCalEndcapAlgo::zFront [private] |
double DDHCalEndcapAlgo::ziBody [private] |
double DDHCalEndcapAlgo::ziDip [private] |
double DDHCalEndcapAlgo::ziKink [private] |
double DDHCalEndcapAlgo::ziL0Body [private] |
double DDHCalEndcapAlgo::ziL0Nose [private] |
double DDHCalEndcapAlgo::ziNose [private] |
std::vector<double> DDHCalEndcapAlgo::zmaxBlock [private] |
std::vector<double> DDHCalEndcapAlgo::zminBlock [private] |
double DDHCalEndcapAlgo::zShift [private] |
double DDHCalEndcapAlgo::zShiftHac2 [private] |