CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/Geometry/HcalTestBeamData/plugins/DDEcalPreshowerAlgoTB.cc

Go to the documentation of this file.
00001 #include "Geometry/HcalTestBeamData/plugins/DDEcalPreshowerAlgoTB.h"
00002 
00003 #include <cmath>
00004 #include <algorithm>
00005 #include <ostream>
00006 
00007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00008 #include "DetectorDescription/Base/interface/DDTypes.h"
00009 #include "DetectorDescription/Base/interface/DDutils.h"
00010 #include "DetectorDescription/Core/interface/DDLogicalPart.h"
00011 #include "DetectorDescription/Core/interface/DDSolid.h"
00012 #include "DetectorDescription/Core/interface/DDMaterial.h"
00013 #include "DetectorDescription/Core/interface/DDCurrentNamespace.h"
00014 #include "DetectorDescription/Core/interface/DDSplit.h"
00015 #include "DetectorDescription/Core/interface/DDVector.h"
00016 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00017 #include "CLHEP/Units/GlobalSystemOfUnits.h"
00018 
00019 using namespace CLHEP;
00020 
00021 DDEcalPreshowerAlgoTB::DDEcalPreshowerAlgoTB() : DDAlgorithm() {
00022   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB info: Creating an instance" ;
00023 
00024 }
00025 
00026 void DDEcalPreshowerAlgoTB::initialize(const DDNumericArguments & nArgs,
00027                                        const DDVectorArguments & vArgs,
00028                                        const DDMapArguments & mArgs,
00029                                        const DDStringArguments & sArgs,
00030                                        const DDStringVectorArguments & vsArgs){
00031 
00032   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB info: Initialize" ;
00033   quadMin_ = vArgs["IQUAD_MIN"];
00034   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB IQUAD_MIN";
00035   quadMax_ = vArgs["IQUAD_MAX"];  
00036   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB IQUAD_MAX";
00037   thickLayers_ = vArgs["Layers"];
00038   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB Layers";
00039   thickness_ = double(nArgs["PRESH_Z_TOTAL"]);
00040   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB PRESH_Z_TOTAL";
00041   materials_ = vsArgs["LayMat"];
00042   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB material";
00043   rmaxVec = vArgs["R_MAX"]; // inner radii
00044   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB R_MAX";
00045   rminVec = vArgs["R_MIN"]; // outer radii
00046   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB R_MIN";
00047   waf_intra_col_sep = double(nArgs["waf_intra_col_sep"]);
00048   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB waf_intra_col_sep";
00049   waf_inter_col_sep = double(nArgs["waf_inter_col_sep"]);
00050   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB waf_intra_col_sep = "<<waf_inter_col_sep;
00051   waf_active = double(nArgs["waf_active"]);
00052   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB waf_active = " << waf_active;
00053   wedge_length = double(nArgs["wedge_length"]);
00054   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB wedge_length = " 
00055                        << wedge_length;
00056   wedge_offset = double(nArgs["wedge_offset"]);
00057   zwedge_ceramic_diff = double(nArgs["zwedge_ceramic_diff"]);
00058   ywedge_ceramic_diff = double(nArgs["ywedge_ceramic_diff"]);
00059   micromodulesx = vArgs["MicromodulesX"]; // micromodules in X plane
00060   micromodulesy = vArgs["MicromodulesY"]; // micromodules in Y plane
00061   absorbx = double(nArgs["absorbx"]);
00062   absorby = double(nArgs["absorby"]);
00063   trabsorbx = double(nArgs["trabsorbx"]);
00064   trabsorby = double(nArgs["trabsorby"]);
00065   ScndplaneXshift = double(nArgs["2ndPlaneXshift"]);
00066   ScndplaneYshift = double(nArgs["2ndPlaneYshift"]);
00067   TotSFXshift = double(nArgs["SF07vsSF_Xshift"]);
00068   TotSFYshift = double(nArgs["SF07vsSF_Yshift"]);
00069   dummyMaterial = sArgs["DummyMaterial"];
00070   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB Dummy Material = "
00071                        << dummyMaterial;
00072 
00073   idNameSpace = DDCurrentNamespace::ns();
00074 
00075   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB info: end initialize" ;
00076 }
00077 
00078 void DDEcalPreshowerAlgoTB::execute(DDCompactView& cpv) {
00079 
00080   LogDebug("HCalGeom") << "******** DDEcalPreshowerAlgoTB execute!";
00081 
00082   // creates all the tube-like layers of the preshower
00083   doLayers(cpv);
00084   // places the wedges and silicon strip detectors in their x and y layer
00085   doWedges(cpv);
00086   // places the slicon strips in active silicon wafers
00087   doSens(cpv);
00088   
00089 }
00090 
00091 void DDEcalPreshowerAlgoTB::doLayers(DDCompactView& cpv) {
00092   //double sum_z=0;
00093   double zpos = -thickness_/2.;
00094   for(size_t i = 0; i<rminVec.size(); ++i) {
00095     int I = int(i)+1; // FOTRAN I (offset +1)
00096     
00097     double zHalf(0);
00098       
00099     // create the name
00100     std::ostringstream name;
00101     name << "SF" << int((50+I)/10) << I-int(I/10)*10;
00102     DDName ddname(name.str(), idNameSpace); // namespace:name
00103       
00104     // tube dimensions
00105     //     rIn = rmaxVec[i];
00106     //     rOut = rminVec[i];
00107     zHalf = thickLayers_[i]/2.;
00108 
00109     // position the logical part w.r.t. the parent volume
00110     zpos += zHalf;
00111     //sum_z += thickLayers_[i];
00112     if (I==7 || I==15) { // skip layers with detectors
00113       zpos += zHalf;
00114       continue;
00115     }
00116     if ( I==2 ) {
00117       zfoam1_ = zpos;
00118     }
00119     if ( I==6 ) {
00120       zlead1_ = zpos + zHalf;
00121     }
00122     if ( I==14 ) {
00123       zlead2_ = zpos + zHalf;
00124     }
00125       
00126     if (getMaterial(i) != dummyMaterial ) {
00127       // create a logical part representing a single layer in the preshower
00128       //DDSolid solid = DDSolidFactory::tubs(ddname,zHalf,rIn,rOut,0.,360.*deg);
00129 
00130       DDSolid solid = DDSolidFactory::box(ddname,absorbx,absorby,zHalf);
00131     
00132       DDName        matname(getMaterial(i),"materials"); 
00133       DDMaterial    material(matname);
00134       DDLogicalPart layer = DDLogicalPart(ddname,material,solid);
00135 
00136       DDTranslation tran=DDTranslation(trabsorbx+TotSFXshift,trabsorby+TotSFYshift, zpos);
00137       cpv.position(layer, parent(), 1, tran, DDRotation());
00138       LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB debug : Child "
00139                            << layer << " Copy 1 in " << parent().name()
00140                            << " with translation " << tran
00141                            << " and rotation " << DDRotation();
00142     }
00143     zpos += zHalf;
00144   }
00145   
00146 }
00147 
00148 void DDEcalPreshowerAlgoTB::doWedges(DDCompactView& cpv) {
00149 
00150   LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : doWedges()";
00151   int nx(0), ny(0), icopy(0), icopyt(0);
00152   double xpos(0), ypos(0), zpos(0);// zposY(0);
00153   int sz = int(quadMax_.size());
00154 
00155   DDTranslation tran;
00156   DDRotation    rot1, rot2;
00157   DDName        name1, name2;
00158   name1 = DDName("SWED", idNameSpace);
00159   name2 = DDName("SFBX", idNameSpace);
00160   rot1 = DDRotation("rotations:RM1299");
00161   rot2 = DDRotation("rotations:RM1298");
00162   // Do Plane X
00163   for(int I=1; I<=sz;++I) {
00164     for(int J=int(quadMax_[I-1]); J>=int(quadMin_[I-1]); --J) {
00165       //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J="  << J;
00166       nx += 1;
00167       icopy += 1;
00168       go=0; 
00169       for (unsigned int m=0; m<micromodulesx.size(); m++) 
00170         if (micromodulesx[m]==icopy) {go=1; icopyt +=1; }
00171       xpos = -1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00172                   - waf_intra_col_sep/2.);
00173       ypos = (sz-int(I))*waf_active + wedge_length/2. + 0.05*cm;
00174       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00175       zpos = zlead1_ + wedge_offset;
00176       // place the wedge
00177       if (go==1) {
00178         tran = DDTranslation(xpos,ypos,zpos);
00179         cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
00180         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00181                              << name1 << " copy = " << icopy << " (" 
00182                              << icopyt << ") in Mother " << parent().name()
00183                              << " translation " <<tran  << " rotation " <<rot1;
00184       }
00185       zpos = zlead1_ + zwedge_ceramic_diff;
00186       ypos = ypos + ywedge_ceramic_diff;
00187       if (go==1) {
00188         tran = DDTranslation(xpos,ypos,zpos);
00189         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00190         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00191                              << name2 << " copy = " << icopy << " (" 
00192                              << icopyt << ") in Mother " << parent().name()
00193                              << " translation " <<tran << " rotation " <<rot2;
00194       }
00195     }
00196     
00197     for(int J=int(quadMin_[I-1]); J<=int(quadMax_[I-1]); ++J) {
00198       nx += 1;
00199       icopy += 1;
00200       go=0; 
00201       for (unsigned int m=0; m<micromodulesx.size(); m++) 
00202         if (micromodulesx[m]==icopy) {go=1; icopyt +=1;}
00203       xpos = 1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00204                  - waf_intra_col_sep/2.);
00205       ypos = (sz-int(I))*waf_active + wedge_length/2. + 0.05*cm;
00206       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00207       zpos = zlead1_ + wedge_offset;      
00208       if(go==1) {
00209         tran = DDTranslation(xpos,ypos,zpos);
00210         cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
00211         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00212                              << name1 << " copy = " << icopy << " (" 
00213                              << icopyt << ") in Mother " << parent().name()
00214                              << " translation " <<tran << " rotation " <<rot1;
00215       }
00216       zpos = zlead1_ + zwedge_ceramic_diff;
00217       ypos = ypos + ywedge_ceramic_diff;
00218       if (go==1) {
00219         tran =  DDTranslation(xpos,ypos,zpos);
00220         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00221         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00222                              << name2 << " copy = " << icopy << " (" 
00223                              << icopyt << ") in Mother " << parent().name()
00224                              << " translation " <<tran << " rotation " <<rot2;
00225       }
00226     }
00227     
00228   }
00229   
00230   // mirror image system
00231   rot1 = DDRotation("rotations:RM1303");
00232   rot2 = DDRotation("rotations:RM1302");
00233   for(int I=sz; I>=1;--I) {
00234     for(int J=int(quadMax_[I-1]); J>=int(quadMin_[I-1]); --J) {
00235       nx += 1;
00236       icopy += 1;
00237       go=0; 
00238       for (unsigned int m=0; m<micromodulesx.size(); m++) 
00239         if (micromodulesx[m]==icopy) {go=1; icopyt +=1;}
00240       //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J="  << J;
00241       xpos = -1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00242                   - waf_intra_col_sep/2.);
00243       ypos = -1.*(sz-int(I))*waf_active - wedge_length/2. - 0.05*cm;
00244       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00245       zpos = zlead1_ + wedge_offset;
00246       if (go==1) {
00247         tran =  DDTranslation(xpos,ypos,zpos);
00248         cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
00249         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00250                              << name1 << " copy = " << icopy << " (" 
00251                              << icopyt << ") in Mother " << parent().name()
00252                              << " translation " <<tran << " rotation " << rot1;
00253       }
00254       zpos = zlead1_ + zwedge_ceramic_diff;
00255       ypos = ypos - ywedge_ceramic_diff;
00256       if (go==1) {
00257         tran =  DDTranslation(xpos,ypos,zpos);
00258         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00259         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00260                              << name2 << " copy = " << icopy << " (" 
00261                              << icopyt << ") in Mother " << parent().name()
00262                              << " translation " <<tran << " rotation "<<rot2;
00263       }
00264     }
00265 
00266     for(int J=int(quadMin_[I-1]); J<=int(quadMax_[I-1]); ++J) {
00267       nx += 1;
00268       icopy += 1;
00269       go=0; 
00270       for (unsigned int m=0; m<micromodulesx.size(); m++) 
00271         if (micromodulesx[m]==icopy) {go=1; icopyt +=1;}
00272       xpos = 1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00273                  - waf_intra_col_sep/2.);
00274       ypos = -1.*(sz-int(I))*waf_active - wedge_length/2. - 0.05*cm;
00275       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00276       zpos = zlead1_ + wedge_offset;      
00277       if (go==1) {
00278         tran =  DDTranslation(xpos,ypos,zpos);
00279         cpv.position(DDLogicalPart(name1), parent(), icopyt, tran, rot1);
00280         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00281                              << name1 << " copy = " << icopy << " (" 
00282                              << icopyt << ") in Mother " << parent().name()
00283                              << " translation " <<tran << " rotation " <<rot1;
00284       }
00285       zpos = zlead1_ + zwedge_ceramic_diff;
00286       ypos = ypos - ywedge_ceramic_diff;
00287       if (go==1) {
00288         tran =  DDTranslation(xpos,ypos,zpos);
00289         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00290         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00291                              << name2 << " copy = " << icopy << " (" 
00292                              << icopyt << ") in Mother " << parent().name()
00293                              << " translation " <<tran << " rotation " <<rot2;
00294       }
00295     }
00296   }
00297 
00298   // Do Plane Y
00299   icopy =  0; 
00300   int nxt = micromodulesy.size();
00301   name1 = DDName("SWED", idNameSpace);
00302   name2 = DDName("SFBY", idNameSpace);
00303   rot1 = DDRotation(DDName("RM1301B",idNameSpace));
00304   rot2 = DDRotation(DDName("RM1300B",idNameSpace));
00305   for(int I=1; I<=sz;++I) {
00306     for(int J=int(quadMax_[I-1]); J>=int(quadMin_[I-1]); --J) {
00307       ny += 1;
00308       icopy += 1;
00309       go=0; 
00310       for (unsigned int m=0; m<micromodulesy.size(); m++) 
00311         if (micromodulesy[m]==icopy) {go=1; icopyt +=1;}
00312       //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J="  << J;
00313       ypos = -1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00314                   - waf_intra_col_sep/2.);
00315       xpos = (sz-int(I))*waf_active + wedge_length/2. + 0.05*cm + ScndplaneXshift;
00316       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00317       zpos = zlead2_ + wedge_offset;
00318       if (go==1) {
00319         tran =  DDTranslation(xpos,ypos,zpos);
00320         cpv.position(DDLogicalPart(name1), parent(), icopy+nxt, tran, rot1);
00321         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00322                              << name1 << " copy = " << icopy << " (" 
00323                              << icopyt+nxt << ") in Mother " << parent().name()
00324                              << " translation " <<tran << " rotation " <<rot1;
00325       }
00326       zpos = zlead2_ + zwedge_ceramic_diff;
00327       xpos = xpos - ywedge_ceramic_diff;
00328       if (go==1) {
00329         tran =  DDTranslation(xpos,ypos,zpos);
00330         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00331         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00332                              << name2 << " copy = " << icopy << " (" 
00333                              << icopyt << ") in Mother " << parent().name()
00334                              << " translation " <<tran << " rotation " <<rot2;
00335       }
00336     }
00337 
00338     for(int J=int(quadMin_[I-1]); J<=int(quadMax_[I-1]); ++J) {
00339       ny += 1;
00340       icopy += 1;
00341       go=0; 
00342       for (unsigned int m=0; m<micromodulesy.size(); m++) 
00343         if (micromodulesy[m]==icopy) {go=1; icopyt +=1;}
00344       //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J="  << J;
00345       ypos = 1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00346                  - waf_intra_col_sep/2.);
00347       xpos = (sz-int(I))*waf_active + wedge_length/2. + 0.05*cm + ScndplaneXshift;
00348       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00349       zpos = zlead2_ + wedge_offset;
00350       if (go==1) {
00351         tran =  DDTranslation(xpos,ypos,zpos);
00352         cpv.position(DDLogicalPart(name1), parent(), icopyt+nxt, tran, rot1);
00353         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00354                              << name1 << " copy = " << icopy << " (" 
00355                              << icopyt+nxt << ") in Mother " << parent().name()
00356                              << " translation " <<tran << " rotation " <<rot1;
00357       }
00358       zpos = zlead2_ + zwedge_ceramic_diff;
00359       xpos = xpos - ywedge_ceramic_diff;
00360       if (go==1) {
00361         tran =  DDTranslation(xpos,ypos,zpos);
00362         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00363         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00364                              << name2 << " copy = " << icopy << " (" 
00365                              << icopyt << ") in Mother " << parent().name()
00366                              << " translation " <<tran << " rotation " <<rot2;
00367       }
00368     }
00369   }
00370 
00371   // mirror image system
00372   rot1 = DDRotation(DDName("RM1305B",idNameSpace));
00373   rot2 = DDRotation(DDName("RM1304B",idNameSpace));
00374   for(int I=sz; I>=1;--I) {
00375     for(int J=int(quadMax_[I-1]); J>=int(quadMin_[I-1]); --J) {
00376       ny += 1;
00377       icopy += 1;
00378       go=0; 
00379       for (unsigned int m=0; m<micromodulesy.size(); m++) 
00380         if (micromodulesy[m]==icopy) {go=1; icopyt +=1;}
00381       //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J="  << J;
00382       ypos = -1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00383                   - waf_intra_col_sep/2.);
00384       xpos = -1.*(sz-int(I))*waf_active - wedge_length/2. - 0.05*cm + ScndplaneXshift;
00385       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00386       zpos = zlead2_ + wedge_offset;
00387       if (go==1) {
00388         tran =  DDTranslation(xpos,ypos,zpos);
00389         cpv.position(DDLogicalPart(name1), parent(), icopyt+nxt, tran, rot1);
00390         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00391                              << name1 << " copy = " << icopy << " (" 
00392                              << icopyt+nxt << ") in Mother " << parent().name()
00393                              << " translation " <<tran << " rotation " <<rot1;
00394       }      
00395       zpos = zlead2_ + zwedge_ceramic_diff;
00396       xpos = xpos + ywedge_ceramic_diff;
00397       if (go==1) {
00398         tran =  DDTranslation(xpos,ypos,zpos);
00399         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00400         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00401                              << name2 << " copy = " << icopy << " (" 
00402                              << icopyt << ") in Mother " << parent().name()
00403                              << " translation " <<tran << " rotation " <<rot2;
00404       }
00405     }
00406 
00407     for(int J=int(quadMin_[I-1]); J<=int(quadMax_[I-1]); ++J) {
00408       ny += 1;
00409       icopy += 1;
00410       go=0; 
00411       for (unsigned int m=0; m<micromodulesy.size(); m++) 
00412         if (micromodulesy[m]==icopy) {go=1; icopyt +=1;}
00413       //LogDebug("HCalGeom") <<"DDEcalPreshowerAlgoTB::I=" << I << " J="  << J;
00414       ypos = 1.*(J*waf_intra_col_sep + (int(J/2))*waf_inter_col_sep 
00415                  - waf_intra_col_sep/2.);
00416       xpos = -1.*(sz-int(I))*waf_active - wedge_length/2. - 0.05*cm + ScndplaneXshift;
00417       xpos = xpos + TotSFXshift; ypos = ypos + TotSFYshift;
00418       zpos = zlead2_ + wedge_offset;
00419       if (go==1) {
00420         tran =  DDTranslation(xpos,ypos,zpos);
00421         cpv.position(DDLogicalPart(name1), parent(), icopyt+nxt, tran, rot1);
00422         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00423                              << name1 << " copy = " << icopy << " (" 
00424                              << icopyt+nxt << ") in Mother " << parent().name()
00425                              << " translation " <<tran << " rotation " <<rot1;
00426       }
00427       zpos = zlead2_ + zwedge_ceramic_diff;
00428       xpos = xpos + ywedge_ceramic_diff;
00429       if (go==1) {
00430         tran =  DDTranslation(xpos,ypos,zpos);
00431         cpv.position(DDLogicalPart(name2), parent(), icopyt, tran, rot2);
00432         LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " 
00433                              << name2 << " copy = " << icopy << " (" 
00434                              << icopyt << ") in Mother " << parent().name()
00435                              << " translation " <<tran << " rotation " <<rot2;
00436       }
00437     }
00438   }
00439 
00440 }
00441 
00442 void DDEcalPreshowerAlgoTB::doSens(DDCompactView& cpv) {
00443 
00444   double xpos(0), ypos(0);
00445   DDTranslation tran;
00446   DDName        child1  = DDName("SFSX", idNameSpace);
00447   DDName        child2  = DDName("SFSY", idNameSpace);
00448   DDName        mother1 = DDName("SFAX", idNameSpace);
00449   DDName        mother2 = DDName("SFAY", idNameSpace);
00450   DDRotation    rot;
00451   for(size_t i = 0; i<32; ++i) {
00452     xpos = -waf_active/2. + i*waf_active/32. + waf_active/64.;
00453     tran = DDTranslation(xpos,0., 0.);
00454     cpv.position(DDLogicalPart(child1), mother1, i+1, tran, rot);
00455     LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << child1
00456                          << "\ncopy number " << i+1 << " in " << mother1
00457                          << " translation "<< tran << " rotation " << rot;
00458       
00459     ypos = -waf_active/2. + i*waf_active/32. + waf_active/64.;
00460     tran = DDTranslation(0.,ypos, 0.);
00461     cpv.position(DDLogicalPart(child2), mother2, i+1, tran, rot);
00462     LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB::debug : Child " << child2
00463                          << "\ncopy number " << i+1 << " in " << mother2
00464                          << " translation "<< tran << " rotation " << rot;
00465     
00466   }
00467 }