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"];
00044 LogDebug("HCalGeom") << "DDEcalPreshowerAlgoTB R_MAX";
00045 rminVec = vArgs["R_MIN"];
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"];
00060 micromodulesy = vArgs["MicromodulesY"];
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
00083 doLayers(cpv);
00084
00085 doWedges(cpv);
00086
00087 doSens(cpv);
00088
00089 }
00090
00091 void DDEcalPreshowerAlgoTB::doLayers(DDCompactView& cpv) {
00092
00093 double zpos = -thickness_/2.;
00094 for(size_t i = 0; i<rminVec.size(); ++i) {
00095 int I = int(i)+1;
00096
00097 double zHalf(0);
00098
00099
00100 std::ostringstream name;
00101 name << "SF" << int((50+I)/10) << I-int(I/10)*10;
00102 DDName ddname(name.str(), idNameSpace);
00103
00104
00105
00106
00107 zHalf = thickLayers_[i]/2.;
00108
00109
00110 zpos += zHalf;
00111
00112 if (I==7 || I==15) {
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
00128
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);
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
00163 for(int I=1; I<=sz;++I) {
00164 for(int J=int(quadMax_[I-1]); J>=int(quadMin_[I-1]); --J) {
00165
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
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
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
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
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
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
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
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
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
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 }