CMS 3D CMS Logo

DDTIDModuleAlgo Class Reference

#include <Geometry/TrackerCommonData/interface/DDTIDModuleAlgo.h>

List of all members.

Public Member Functions

 DDTIDModuleAlgo ()
void execute ()
void initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
virtual ~DDTIDModuleAlgo ()

Private Attributes

double activeHeight
std::string activeMat
std::vector< std::string > activeName
std::string activeRot
std::vector< double > backplaneThick
double bottomFrameHeight
double bottomFrameOver
double boxFrameHeight
std::string boxFrameMat
std::string boxFrameName
double boxFrameThick
double boxFrameWidth
double coolHeight
std::string coolMat
std::string coolName
double coolThick
double coolWidth
int detectorN
double detTilt
double dlBottom
double dlHybrid
double dlTop
bool doComponents
double fullHeight
std::string genMat
std::vector< std::string > holeFrameName
std::vector< std::string > holeFrameRot
std::vector< std::string > holeKaptonName
std::vector< std::string > holeKaptonRot
double hybridHeight
std::string hybridMat
std::string hybridName
double hybridThick
double hybridWidth
std::string kaptonMat
std::vector< std::string > kaptonName
double kaptonOver
double kaptonThick
double moduleThick
double pitchHeight
std::string pitchMat
std::vector< std::string > pitchName
double pitchStereoTol
double pitchThick
std::string sideFrameMat
std::vector< std::string > sideFrameName
double sideFrameOver
double sideFrameThick
double sideFrameWidth
double sideWidthBottom
double sideWidthTop
double topFrameHeight
double topFrameOver
std::string waferMat
std::vector< std::string > waferName
std::vector< double > waferThick


Detailed Description

Definition at line 10 of file DDTIDModuleAlgo.h.


Constructor & Destructor Documentation

DDTIDModuleAlgo::DDTIDModuleAlgo (  ) 

Definition at line 20 of file DDTIDModuleAlgo.cc.

References LogDebug.

00020                                  {
00021   LogDebug("TIDGeom") << "DDTIDModuleAlgo info: Creating an instance";
00022 }

DDTIDModuleAlgo::~DDTIDModuleAlgo (  )  [virtual]

Definition at line 24 of file DDTIDModuleAlgo.cc.

00024 {}


Member Function Documentation

void DDTIDModuleAlgo::execute (  ) 

Definition at line 158 of file DDTIDModuleAlgo.cc.

References activeHeight, activeMat, activeName, activeRot, backplaneThick, bottomFrameHeight, bottomFrameOver, DDSolidFactory::box(), boxFrameHeight, boxFrameMat, boxFrameName, boxFrameThick, boxFrameWidth, coolHeight, coolMat, coolName, coolThick, coolWidth, funct::cos(), DDBase< N, C >::ddname(), DDpos(), DDSplit(), detectorN, detTilt, dlBottom, dlHybrid, dlTop, doComponents, first, fullHeight, genMat, h1, holeFrameName, holeFrameRot, holeKaptonName, holeKaptonRot, reco::hybrid, hybridHeight, hybridMat, hybridName, hybridThick, hybridWidth, k, kaptonMat, kaptonName, kaptonOver, kaptonThick, LogDebug, module(), moduleThick, name, DDBase< N, C >::name(), dbtoconf::parent, pitchHeight, pitchMat, pitchName, pitchStereoTol, pitchThick, rot, edm::second(), sideFrameMat, sideFrameName, sideFrameOver, sideFrameThick, sideFrameWidth, sideWidthBottom, sideWidthTop, funct::sin(), DDSolidFactory::subtraction(), topFrameHeight, topFrameOver, DDSolidFactory::trap(), waferMat, waferName, and waferThick.

00158                               {
00159   
00160   LogDebug("TIDGeom") << "==>> Constructing DDTIDModuleAlgo...";
00161 
00162   DDName parentName = parent().name(); 
00163   DDName name;
00164 
00165   double sidfr = sideFrameWidth - sideFrameOver;      // width of side frame on the sides of module 
00166   double botfr;                                       // width of side frame at the the bottom of the modules 
00167   double topfr;                                       // width of side frame at the the top of the modules 
00168   double kaptonHeight; 
00169   if (dlHybrid > dlTop) {
00170     // ring 1, ring 2
00171     topfr = topFrameHeight - pitchHeight - topFrameOver;      
00172     botfr = bottomFrameHeight - bottomFrameOver; 
00173     kaptonHeight = fullHeight + botfr;
00174   } else {
00175     // ring 3
00176     topfr = topFrameHeight - topFrameOver;      
00177     botfr = bottomFrameHeight - bottomFrameOver - pitchHeight; 
00178     kaptonHeight = fullHeight + topfr;
00179   }
00180 
00181   double sideFrameHeight = fullHeight + pitchHeight + botfr + topfr; 
00182   double kaptonWidth = sidfr + kaptonOver;
00183 
00184   double  dxbot = 0.5*dlBottom + sidfr;
00185   double  dxtop = 0.5*dlTop + sidfr;
00186   double  dxtopenv, dxbotenv;           // top/bot width of the module envelope trap
00187 
00188   // Envelope 
00189   if (dlHybrid > dlTop) {
00190     // ring 1, ring 2
00191     dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr+hybridHeight)/fullHeight;
00192     dxbotenv = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
00193   } else {
00194     // ring 3
00195     dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
00196     dxbotenv = dxbot;
00197   }
00198   double bl1   = dxbotenv;
00199   double bl2   = dxtopenv;
00200   double h1    = 0.5 * moduleThick;
00201   double dz    = 0.5 * (boxFrameHeight + sideFrameHeight);
00202 
00203   DDSolid solidUncut, solidCut;
00204   DDSolid    solid = DDSolidFactory::trap(parentName, dz, 0, 0,
00205                                           h1, bl1, bl1, 0, h1, bl2, bl2, 0);
00206   DDName     matname = DDName(DDSplit(genMat).first, DDSplit(genMat).second);
00207   DDMaterial matter  = DDMaterial(matname);
00208   DDLogicalPart module(solid.ddname(), matter, solid);
00209   LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00210                       << " Trap made of " << genMat << " of dimensions " << dz 
00211                       << ", 0, 0, " << h1  << ", " << bl1 << ", " << bl1 
00212                       << ", 0, " << h1 << ", " << bl2  << ", " << bl2 
00213                       << ", 0";
00214 
00215   if (doComponents) {
00216 
00217     //Box frame
00218     name    = DDName(DDSplit(boxFrameName).first,DDSplit(boxFrameName).second);
00219     matname = DDName(DDSplit(boxFrameMat).first, DDSplit(boxFrameMat).second);
00220     matter  = DDMaterial(matname);
00221     double dx = 0.5 * boxFrameWidth;
00222     double dy = 0.5 * boxFrameThick;
00223     double dz = 0.5 * boxFrameHeight; 
00224     solid = DDSolidFactory::box(name, dx, dy, dz);
00225     LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00226                         << " Box made of " << matname << " of dimensions " 
00227                         << dx << ", " << dy << ", " << dz;
00228     DDLogicalPart boxFrame(solid.ddname(), matter, solid);
00229 
00230 
00231     // Hybrid
00232     name    = DDName(DDSplit(hybridName).first, DDSplit(hybridName).second);
00233     matname = DDName(DDSplit(hybridMat).first, DDSplit(hybridMat).second);
00234     matter  = DDMaterial(matname);
00235     dx = 0.5 * hybridWidth;
00236     dy = 0.5 * hybridThick;
00237     dz        = 0.5 * hybridHeight;
00238     solid = DDSolidFactory::box(name, dx, dy, dz);
00239     LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00240                         << " Box made of " << matname << " of dimensions " 
00241                         << dx << ", " << dy << ", " << dz;
00242     DDLogicalPart hybrid(solid.ddname(), matter, solid);
00243 
00244     // Cool Insert
00245     name    = DDName(DDSplit(coolName).first, DDSplit(coolName).second);
00246     matname = DDName(DDSplit(coolMat).first, DDSplit(coolMat).second);
00247     matter  = DDMaterial(matname);
00248     dx = 0.5 * coolWidth;
00249     dy = 0.5 * coolThick;
00250     dz        = 0.5 * coolHeight;
00251     solid = DDSolidFactory::box(name, dx, dy, dz);
00252     LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00253                         << " Box made of " << matname << " of dimensions " 
00254                         << dx << ", " << dy << ", " << dz;
00255     DDLogicalPart cool(solid.ddname(), matter, solid);
00256 
00257     // Loop over detectors to be placed
00258     for (int k = 0; k < detectorN; k++) {
00259 
00260       double bbl1, bbl2; // perhaps useless (bl1 enough)
00261 
00262       // Frame Sides
00263       name    = DDName(DDSplit(sideFrameName[k]).first,DDSplit(sideFrameName[k]).second);
00264       matname = DDName(DDSplit(sideFrameMat).first,DDSplit(sideFrameMat).second);
00265       matter  = DDMaterial(matname);
00266       if (dlHybrid > dlTop) {
00267         // ring 1, ring 2
00268         bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
00269         bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr)/fullHeight;
00270       } else {
00271         // ring 3
00272         bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+pitchHeight+botfr)/fullHeight;
00273         bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
00274       }
00275       h1 = 0.5 * sideFrameThick;
00276       dz = 0.5 * sideFrameHeight;
00277       solid = DDSolidFactory::trap(name, dz, 0, 0, h1, bbl1, bbl1, 0, h1,  bbl2, bbl2, 0);
00278       LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00279                           << " Trap made of " << matname << " of dimensions "
00280                           << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " 
00281                           << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " 
00282                           << bbl2 << ", 0";
00283       DDLogicalPart sideFrame(solid.ddname(), matter, solid);
00284 
00285       std::string rotstr, rotns; 
00286       DDRotation rot;
00287 
00288       // Hole in the frame below the wafer 
00289       name    = DDName(DDSplit(holeFrameName[k]).first,
00290                        DDSplit(holeFrameName[k]).second);
00291       matname = DDName(DDSplit(genMat).first, DDSplit(genMat).second);
00292       matter  = DDMaterial(matname);
00293       double xpos, zpos;
00294       dz        = fullHeight - bottomFrameOver - topFrameOver;
00295       bbl1     = dxbot - sideFrameWidth + bottomFrameOver*(dxtop-dxbot)/fullHeight;
00296       bbl2     = dxtop - sideFrameWidth - topFrameOver*(dxtop-dxbot)/fullHeight;
00297       if (dlHybrid > dlTop) {
00298         // ring 1, ring 2
00299         zpos    = -(topFrameHeight+0.5*dz-0.5*sideFrameHeight);
00300       } else {
00301         // ring 3
00302         zpos    = bottomFrameHeight+0.5*dz-0.5*sideFrameHeight;
00303       }
00304       dz     /= 2.;
00305       solid = DDSolidFactory::trap(name, dz, 0,0, h1,bbl1,bbl1, 0, h1,bbl2,bbl2, 0);
00306       LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00307                           << " Trap made of " << matname << " of dimensions "
00308                           << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " 
00309                           << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " << bbl2
00310                           << ", 0";
00311       DDLogicalPart holeFrame(solid.ddname(), matter, solid);      
00312 
00313       rotstr = DDSplit(holeFrameRot[k]).first;
00314       if (rotstr != "NULL") {
00315         rotns = DDSplit(holeFrameRot[k]).second;
00316         rot   = DDRotation(DDName(rotstr, rotns));      
00317       } else {
00318         rot     = DDRotation();
00319       }
00320       DDpos (holeFrame, sideFrame, 1, DDTranslation(0.0, 0.0, zpos), rot );   
00321       LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << holeFrame.name() 
00322                           << " number 1 positioned in " << sideFrame.name()
00323                           << " at (0,0," << zpos << ") with no rotation";
00324 
00325       // Kapton circuit
00326       //      name    = DDName(DDSplit(kaptonName[k]).first,DDSplit(kaptonName[k]).second);
00327       matname = DDName(DDSplit(kaptonMat).first,DDSplit(kaptonMat).second);
00328       matter  = DDMaterial(matname);
00329       double kaptonExtraHeight=0;      // kapton extra height in the stereo
00330       if (dlHybrid > dlTop) {
00331         // ring 1, ring 2
00332         bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
00333         if ( k == 1 ) {
00334           kaptonExtraHeight = dlTop*sin(detTilt)-fullHeight*(1-cos(detTilt));
00335           kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
00336           bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight;
00337         }
00338         else {
00339           bbl2 = dxtop;
00340         }
00341       } else {
00342         // ring 3
00343         bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
00344         if ( k == 1) {
00345           kaptonExtraHeight = dlBottom*sin(detTilt)-fullHeight*(1-cos(detTilt));
00346           kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
00347           bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight;
00348         }  else {
00349           bbl1 = dxbot;
00350         }
00351       }
00352       h1 = 0.5 * kaptonThick;
00353       dz = 0.5 * (kaptonHeight+kaptonExtraHeight);
00354 
00355       // For the stereo create the uncut solid, the solid to be removed and then the subtraction solid
00356       if ( k == 1 ) {
00357         // Uncut solid
00358         std::string kaptonUncutName=kaptonName[k]+"Uncut";
00359         name    = DDName(DDSplit(kaptonUncutName).first,DDSplit(kaptonUncutName).second);
00360         solidUncut = DDSolidFactory::trap(name, dz, 0, 0, h1, bbl1, bbl1, 0, h1,  bbl2, bbl2, 0);
00361 
00362         // Piece to be cut
00363         std::string kaptonCutName=kaptonName[k]+"Cut";
00364         name    = DDName(DDSplit(kaptonCutName).first,DDSplit(kaptonCutName).second);    
00365 
00366         if (dlHybrid > dlTop) {
00367           dz   = 0.5 * dlTop;
00368         } else {
00369           dz   = 0.5 * dlBottom;
00370         }
00371         h1      = 0.5 * kaptonThick;
00372         bbl1     =  fabs(dz*sin(detTilt));
00373         bbl2     =  bbl1*0.000001;
00374         double thet = atan((bbl1-bbl2)/(2*dz)); 
00375         solidCut  = DDSolidFactory::trap(name, dz, thet, 0, h1, bbl1, bbl1, 0, h1, bbl2, bbl2, 0);
00376 
00377         std::string aRot("tidmodpar:9PYX"); 
00378         rotstr  = DDSplit(aRot).first;
00379         rotns = DDSplit(aRot).second;
00380         rot   = DDRotation(DDName(rotstr, rotns));
00381 
00382         xpos = -0.5 * fullHeight * sin(detTilt);
00383         zpos = 0.5 * kaptonHeight - bbl2;
00384 
00385         // Subtraction Solid
00386         name   = DDName(DDSplit(kaptonName[k]).first,DDSplit(kaptonName[k]).second);  
00387         solid  = DDSolidFactory::subtraction(name, solidUncut, solidCut, DDTranslation(xpos,0.0,zpos), rot );    
00388       } else {
00389         name   = DDName(DDSplit(kaptonName[k]).first,DDSplit(kaptonName[k]).second);
00390         solid  = DDSolidFactory::trap(name, dz, 0, 0, h1, bbl1, bbl1, 0, h1,  bbl2, bbl2, 0);
00391       }
00392 
00393       DDLogicalPart kapton(solid.ddname(), matter, solid);         
00394       LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00395                           << " SUBTRACTION SOLID Trap made of " << matname << " of dimensions "
00396                           << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " 
00397                           << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " 
00398                           << bbl2 << ", 0";
00399 
00400 
00401       // Hole in the kapton below the wafer 
00402       name    = DDName(DDSplit(holeKaptonName[k]).first,
00403                        DDSplit(holeKaptonName[k]).second);
00404       matname = DDName(DDSplit(genMat).first, DDSplit(genMat).second);
00405       matter  = DDMaterial(matname);
00406       dz      = fullHeight - kaptonOver;
00407       xpos = 0; 
00408       if (dlHybrid > dlTop) {
00409         // ring 1, ring 2
00410         bbl1 = dxbot - kaptonWidth + kaptonOver*(dxtop-dxbot)/fullHeight;
00411         bbl2 = dxtop - kaptonWidth;
00412         zpos = 0.5*(kaptonHeight-kaptonExtraHeight-dz); 
00413         if ( k == 1 ) {
00414           zpos -= 0.5*kaptonOver*(1-cos(detTilt));
00415           xpos = -0.5*kaptonOver*sin(detTilt); 
00416         }
00417       } else {
00418         // ring 3
00419         bbl1 = dxbot - kaptonWidth;
00420         bbl2 = dxtop - kaptonWidth - kaptonOver*(dxtop-dxbot)/fullHeight;
00421         zpos = -0.5*(kaptonHeight-kaptonExtraHeight-dz);
00422       }
00423       dz     /= 2.;
00424       solid = DDSolidFactory::trap(name, dz, 0,0, h1,bbl1,bbl1, 0, h1,bbl2,bbl2, 0);
00425       LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00426                           << " Trap made of " << matname << " of dimensions "
00427                           << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " 
00428                           << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " << bbl2
00429                           << ", 0";
00430       DDLogicalPart holeKapton(solid.ddname(), matter, solid);      
00431 
00432       rotstr = DDSplit(holeKaptonRot[k]).first;
00433       if (rotstr != "NULL") {
00434         rotns = DDSplit(holeKaptonRot[k]).second;
00435         rot   = DDRotation(DDName(rotstr, rotns));      
00436       } else {
00437         rot     = DDRotation();
00438       }
00439       DDpos (holeKapton, kapton, 1, DDTranslation(xpos, 0.0, zpos), rot );   
00440       LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << holeKapton.name() 
00441                           << " number 1 positioned in " << kapton.name()
00442                           << " at (0,0," << zpos << ") with no rotation";
00443 
00444 
00445 
00446       // Wafer
00447       name    = DDName(DDSplit(waferName[k]).first,DDSplit(waferName[k]).second);
00448       matname = DDName(DDSplit(waferMat).first, DDSplit(waferMat).second);
00449       matter  = DDMaterial(matname);
00450       if (k == 0 && dlHybrid < dlTop) {
00451         bl1     = 0.5 * dlTop;
00452         bl2     = 0.5 * dlBottom;
00453       } else {
00454         bl1     = 0.5 * dlBottom;
00455         bl2     = 0.5 * dlTop;
00456       }
00457       h1      = 0.5 * waferThick[k];
00458       dz      = 0.5 * fullHeight;
00459       solid = DDSolidFactory::trap(name, dz, 0,0, h1,bl1,bl1,0, h1,bl2,bl2,0);
00460       LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00461                           << " Trap made of " << matname << " of dimensions "
00462                           << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " 
00463                           << bl1 << ", 0, " << h1 << ", " << bl2 << ", "
00464                           << bl2 << ", 0";
00465       DDLogicalPart wafer(solid.ddname(), matter, solid);
00466 
00467       // Active
00468       name    = DDName(DDSplit(activeName[k]).first,
00469                        DDSplit(activeName[k]).second);
00470       matname = DDName(DDSplit(activeMat).first, DDSplit(activeMat).second);
00471       matter  = DDMaterial(matname);
00472       if (k == 0 && dlHybrid < dlTop) {
00473         bl1    -= sideWidthTop;
00474         bl2    -= sideWidthBottom;
00475       }
00476       else {
00477         bl1    -= sideWidthBottom;
00478         bl2    -= sideWidthTop;
00479       }
00480       dz      = 0.5 * (waferThick[k] - backplaneThick[k]); // inactive backplane
00481       h1      = 0.5 * activeHeight;
00482       solid = DDSolidFactory::trap(name, dz, 0,0, h1,bl2,bl1,0, h1,bl2,bl1,0);
00483       LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00484                           << " Trap made of " << matname << " of dimensions "
00485                           << dz << ", 0, 0, " << h1 << ", " << bl2 << ", " 
00486                           << bl1 << ", 0, " << h1 << ", " << bl2 << ", "
00487                           << bl1 << ", 0";
00488       DDLogicalPart active(solid.ddname(), matter, solid);
00489       rotstr = DDSplit(activeRot).first;
00490       if (rotstr != "NULL") {
00491         rotns = DDSplit(activeRot).second;
00492         rot   = DDRotation(DDName(rotstr, rotns));
00493       } else {
00494         rot     = DDRotation();
00495       }
00496       DDTranslation tran(0.0,-0.5 * backplaneThick[k],0.0); // from the definition of the wafer local axes
00497       DDpos (active, wafer, 1, tran, rot);  // inactive backplane
00498       LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << active.name() 
00499                           << " number 1 positioned in " << wafer.name() 
00500                           << " at " << tran << " with " << rot;
00501       
00502       //Pitch Adapter
00503       name    = DDName(DDSplit(pitchName[k]).first,DDSplit(pitchName[k]).second);
00504       matname = DDName(DDSplit(pitchMat).first, DDSplit(pitchMat).second);
00505       matter  = DDMaterial(matname);
00506       if (dlHybrid > dlTop) {
00507         dz   = 0.5 * dlTop;
00508       } else {
00509         dz   = 0.5 * dlBottom;
00510       }
00511       if (k == 0) {
00512         dx      = dz;
00513         dy      = 0.5 * pitchThick;
00514         dz      = 0.5 * pitchHeight;
00515         solid   = DDSolidFactory::box(name, dx, dy, dz);
00516         LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
00517                             << " Box made of " << matname << " of dimensions"
00518                             << " " << dx << ", " << dy << ", " << dz;
00519       } else {
00520         h1      = 0.5 * pitchThick;
00521         bl1     = 0.5 * pitchHeight + 0.5 * dz * sin(detTilt);
00522         bl2     = 0.5 * pitchHeight - 0.5 * dz * sin(detTilt);
00523 
00524         dz -=0.5*pitchStereoTol;
00525         bl1-=pitchStereoTol;
00526         bl2-=pitchStereoTol;
00527 
00528         double thet = atan((bl1-bl2)/(2.*dz));
00529         solid   = DDSolidFactory::trap(name, dz, thet, 0, h1, bl1, bl1, 0, 
00530                                        h1, bl2, bl2, 0);
00531         LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name() 
00532                             << " Trap made of " << matname << " of "
00533                             << "dimensions " << dz << ", " << thet/deg 
00534                             << ", 0, " << h1 << ", " << bl1 << ", " << bl1 
00535                             << ", 0, " << h1 << ", " << bl2 << ", " << bl2 
00536                             << ", 0";
00537       }
00538       DDLogicalPart pa(solid.ddname(), matter, solid);
00539     }
00540   }
00541   LogDebug("TIDGeom") << "<<== End of DDTIDModuleAlgo construction ...";
00542 }

void DDTIDModuleAlgo::initialize ( const DDNumericArguments nArgs,
const DDVectorArguments vArgs,
const DDMapArguments mArgs,
const DDStringArguments sArgs,
const DDStringVectorArguments vsArgs 
)

Definition at line 26 of file DDTIDModuleAlgo.cc.

References activeHeight, activeMat, activeName, activeRot, backplaneThick, bottomFrameHeight, bottomFrameOver, boxFrameHeight, boxFrameMat, boxFrameName, boxFrameThick, boxFrameWidth, coolHeight, coolMat, coolName, coolThick, coolWidth, detectorN, detTilt, dlBottom, dlHybrid, dlTop, doComponents, fullHeight, genMat, holeFrameName, holeFrameRot, holeKaptonName, holeKaptonRot, hybridHeight, hybridMat, hybridName, hybridThick, hybridWidth, i, int, kaptonMat, kaptonName, kaptonOver, kaptonThick, LogDebug, moduleThick, dbtoconf::parent, pitchHeight, pitchMat, pitchName, pitchStereoTol, pitchThick, sideFrameMat, sideFrameName, sideFrameOver, sideFrameThick, sideFrameWidth, sideWidthBottom, sideWidthTop, topFrameHeight, topFrameOver, waferMat, waferName, and waferThick.

00030                                                                          {
00031 
00032   int i;
00033   genMat       = sArgs["GeneralMaterial"];
00034   detectorN    = (int)(nArgs["DetectorNumber"]);
00035   DDName parentName = parent().name(); 
00036 
00037   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Parent " << parentName 
00038                       << " General Material " << genMat 
00039                       << " Detector Planes " << detectorN;
00040 
00041   moduleThick       = nArgs["ModuleThick"];
00042   detTilt           = nArgs["DetTilt"];
00043   fullHeight        = nArgs["FullHeight"];
00044   dlTop             = nArgs["DlTop"];
00045   dlBottom          = nArgs["DlBottom"];
00046   dlHybrid          = nArgs["DlHybrid"];
00047   std::string comp  = sArgs["DoComponents"];
00048   if (comp == "No" || comp == "NO" || comp == "no") doComponents = false;
00049   else                                              doComponents = true;
00050 
00051   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: ModuleThick " 
00052                       << moduleThick << " Detector Tilt " << detTilt/deg
00053                       << " Height " << fullHeight << " dl(Top) " << dlTop
00054                       << " dl(Bottom) " << dlBottom << " dl(Hybrid) "
00055                       << dlHybrid << " doComponents " << doComponents;
00056 
00057   boxFrameName      = sArgs["BoxFrameName"];
00058   boxFrameMat       = sArgs["BoxFrameMaterial"];
00059   boxFrameThick     = nArgs["BoxFrameThick"];
00060   boxFrameHeight    = nArgs["BoxFrameHeight"];
00061   boxFrameWidth     = nArgs["BoxFrameWidth"];
00062   bottomFrameHeight = nArgs["BottomFrameHeight"];
00063   bottomFrameOver   = nArgs["BottomFrameOver"];
00064   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: " << boxFrameName 
00065                       << " Material " << boxFrameMat << " Thickness " 
00066                       << boxFrameThick << " width " << boxFrameWidth 
00067                       <<  " height " << boxFrameHeight
00068                       << " Extra Height at Bottom " << bottomFrameHeight 
00069                       << " Overlap " << bottomFrameOver;
00070 
00071   topFrameHeight    = nArgs["TopFrameHeight"];
00072   topFrameOver      = nArgs["TopFrameOver"];
00073   sideFrameName     = vsArgs["SideFrameName"];
00074   sideFrameMat      = sArgs["SideFrameMaterial"];
00075   sideFrameWidth    = nArgs["SideFrameWidth"];
00076   sideFrameThick    = nArgs["SideFrameThick"];
00077   sideFrameOver     = nArgs["SideFrameOver"];
00078   holeFrameName     = vsArgs["HoleFrameName"];
00079   holeFrameRot      = vsArgs["HoleFrameRotation"];
00080   for (i = 0; i < detectorN; i++)
00081     LogDebug("TIDGeom") << "DDTIDModuleAlgo debug : " << sideFrameName[i] 
00082                         << " Material " << sideFrameMat << " Width " 
00083                         << sideFrameWidth << " Thickness " << sideFrameThick
00084                         << " Overlap " << sideFrameOver << " Hole  "
00085                         << holeFrameName[i];
00086 
00087   kaptonName     = vsArgs["KaptonName"];
00088   kaptonMat      = sArgs["KaptonMaterial"];
00089   kaptonThick    = nArgs["KaptonThick"];
00090   kaptonOver     = nArgs["KaptonOver"];
00091   holeKaptonName     = vsArgs["HoleKaptonName"];
00092   holeKaptonRot      = vsArgs["HoleKaptonRotation"];
00093   for (i = 0; i < detectorN; i++)
00094     LogDebug("TIDGeom") << "DDTIDModuleAlgo debug : " << kaptonName[i] 
00095                         << " Material " << kaptonMat 
00096                         << " Thickness " << kaptonThick
00097                         << " Overlap " << kaptonOver << " Hole  "
00098                         << holeKaptonName[i];
00099 
00100 
00101   waferName         = vsArgs["WaferName"];
00102   waferMat          = sArgs["WaferMaterial"];
00103   sideWidthTop      = nArgs["SideWidthTop"];
00104   sideWidthBottom   = nArgs["SideWidthBottom"];
00105 
00106   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Wafer Material " 
00107                       << waferMat  << " Side Width Top " << sideWidthTop
00108                       << " Side Width Bottom " << sideWidthBottom;
00109   for (i = 0; i < detectorN; i++)
00110     LogDebug("TIDGeom") << "\twaferName[" << i << "] = " << waferName[i];
00111 
00112   activeName        = vsArgs["ActiveName"];
00113   activeMat         = sArgs["ActiveMaterial"];
00114   activeHeight      = nArgs["ActiveHeight"];
00115   waferThick        = vArgs["WaferThick"];
00116   activeRot         = sArgs["ActiveRotation"];
00117   backplaneThick    = vArgs["BackPlaneThick"];
00118   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Active Material " 
00119                       << activeMat << " Height " << activeHeight 
00120                       << " rotated by " << activeRot;
00121   for (i = 0; i < detectorN; i++)
00122     LogDebug("TIDGeom") << " translated by (0," << -0.5*backplaneThick[i] 
00123                         << ",0)\tactiveName[" << i << "] = " << activeName[i]
00124                         << " of thickness " << waferThick[i]-backplaneThick[i];
00125   
00126   hybridName        = sArgs["HybridName"];
00127   hybridMat         = sArgs["HybridMaterial"];
00128   hybridHeight      = nArgs["HybridHeight"];
00129   hybridWidth       = nArgs["HybridWidth"];
00130   hybridThick       = nArgs["HybridThick"];
00131   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: " << hybridName 
00132                       << " Material " << hybridMat << " Height " 
00133                       << hybridHeight << " Width " << hybridWidth 
00134                       << " Thickness " << hybridThick;
00135 
00136   pitchName         = vsArgs["PitchName"];
00137   pitchMat          = sArgs["PitchMaterial"];
00138   pitchHeight       = nArgs["PitchHeight"];
00139   pitchThick        = nArgs["PitchThick"];
00140   pitchStereoTol    = nArgs["PitchStereoTolerance"];
00141 
00142   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Pitch Adapter Material "
00143                       << pitchMat << " Height " << pitchHeight
00144                       << " Thickness " << pitchThick;
00145   for (i = 0; i < detectorN; i++)
00146     LogDebug("TIDGeom") <<  "\tpitchName[" << i << "] = " << pitchName[i];
00147 
00148   coolName         = sArgs["CoolInsertName"];
00149   coolMat          = sArgs["CoolInsertMaterial"];
00150   coolHeight       = nArgs["CoolInsertHeight"];
00151   coolThick        = nArgs["CoolInsertThick"];
00152   coolWidth        = nArgs["CoolInsertWidth"];
00153   LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Cool Element Material "
00154                       << coolMat << " Height " << coolHeight
00155                       << " Thickness " << coolThick << " Width " << coolWidth;
00156 }


Member Data Documentation

double DDTIDModuleAlgo::activeHeight [private]

Definition at line 67 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::activeMat [private]

Definition at line 66 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::activeName [private]

Definition at line 65 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::activeRot [private]

Definition at line 69 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<double> DDTIDModuleAlgo::backplaneThick [private]

Definition at line 70 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::bottomFrameHeight [private]

Definition at line 41 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::bottomFrameOver [private]

Definition at line 42 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::boxFrameHeight [private]

Definition at line 38 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::boxFrameMat [private]

Definition at line 37 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::boxFrameName [private]

Definition at line 36 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::boxFrameThick [private]

Definition at line 39 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::boxFrameWidth [private]

Definition at line 40 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::coolHeight [private]

Definition at line 83 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::coolMat [private]

Definition at line 82 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::coolName [private]

Definition at line 81 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::coolThick [private]

Definition at line 84 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::coolWidth [private]

Definition at line 85 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

int DDTIDModuleAlgo::detectorN [private]

Definition at line 27 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::detTilt [private]

Definition at line 29 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::dlBottom [private]

Definition at line 32 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::dlHybrid [private]

Definition at line 33 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::dlTop [private]

Definition at line 31 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

bool DDTIDModuleAlgo::doComponents [private]

Definition at line 34 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::fullHeight [private]

Definition at line 30 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::genMat [private]

Definition at line 26 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeFrameName [private]

Definition at line 50 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeFrameRot [private]

Definition at line 51 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeKaptonName [private]

Definition at line 58 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeKaptonRot [private]

Definition at line 59 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::hybridHeight [private]

Definition at line 73 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::hybridMat [private]

Definition at line 72 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::hybridName [private]

Definition at line 71 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::hybridThick [private]

Definition at line 75 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::hybridWidth [private]

Definition at line 74 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::kaptonMat [private]

Definition at line 54 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::kaptonName [private]

Definition at line 53 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::kaptonOver [private]

Definition at line 57 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::kaptonThick [private]

Definition at line 56 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::moduleThick [private]

Definition at line 28 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::pitchHeight [private]

Definition at line 78 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::pitchMat [private]

Definition at line 77 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::pitchName [private]

Definition at line 76 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::pitchStereoTol [private]

Definition at line 80 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::pitchThick [private]

Definition at line 79 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::sideFrameMat [private]

Definition at line 46 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::sideFrameName [private]

Definition at line 45 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideFrameOver [private]

Definition at line 49 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideFrameThick [private]

Definition at line 48 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideFrameWidth [private]

Definition at line 47 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideWidthBottom [private]

Definition at line 64 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideWidthTop [private]

Definition at line 63 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::topFrameHeight [private]

Definition at line 43 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::topFrameOver [private]

Definition at line 44 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::waferMat [private]

Definition at line 62 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::waferName [private]

Definition at line 61 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<double> DDTIDModuleAlgo::waferThick [private]

Definition at line 68 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:18:17 2009 for CMSSW by  doxygen 1.5.4