CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/Geometry/TrackerCommonData/plugins/DDTECCoolAlgo.cc

Go to the documentation of this file.
00001 
00002 // File: DDTECCoolAlgo.cc
00003 // Description: Placing cooling pieces in the petal material of a TEC petal
00004 // * in each call all objects are placed at the same radial position.
00005 // * Inserts are placed into the parent object
00006 // * for all i: CoolInsert[i] goes to PhiPosition[i]
00008 
00009 #include <cmath>
00010 #include <algorithm>
00011 
00012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00013 #include "DetectorDescription/Base/interface/DDutils.h"
00014 #include "DetectorDescription/Core/interface/DDCurrentNamespace.h"
00015 #include "DetectorDescription/Core/interface/DDSplit.h"
00016 #include "Geometry/TrackerCommonData/plugins/DDTECCoolAlgo.h"
00017 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00018 #include "CLHEP/Units/GlobalSystemOfUnits.h"
00019 
00020 
00021 DDTECCoolAlgo::DDTECCoolAlgo(): phiPosition(0),coolInsert(0) {
00022   LogDebug("TECGeom") << "DDTECCoolAlgo info: Creating an instance";
00023 }
00024 
00025 DDTECCoolAlgo::~DDTECCoolAlgo() {}
00026 
00027 void DDTECCoolAlgo::initialize(const DDNumericArguments & nArgs,
00028                                const DDVectorArguments & vArgs,
00029                                const DDMapArguments & ,
00030                                const DDStringArguments & sArgs,
00031                                const DDStringVectorArguments & vsArgs) {
00032 
00033   idNameSpace    = DDCurrentNamespace::ns();
00034   startCopyNo    = int(nArgs["StartCopyNo"]);
00035 
00036   DDName parentName = parent().name(); 
00037   rPosition       = nArgs["RPosition"];
00038   LogDebug("TECGeom") << "DDTECCoolAlgo debug: Parent " << parentName 
00039                       <<" NameSpace " << idNameSpace << " at radial Position " 
00040                       << rPosition ;
00041   phiPosition    = vArgs["PhiPosition"]; 
00042   coolInsert     = vsArgs["CoolInsert"];
00043   if (phiPosition.size() == coolInsert.size()) {
00044     for (int i=0; i<(int)(phiPosition.size()); i++) 
00045       LogDebug("TECGeom") << "DDTECCoolAlgo debug: Insert[" << i << "]: "
00046                           << coolInsert.at(i) << " at Phi " 
00047                           << phiPosition.at(i)/CLHEP::deg;
00048   } else {
00049     LogDebug("TECGeom") << "ERROR: Number of inserts does not match the numer of PhiPositions!";
00050   }
00051   LogDebug("TECGeom") << " Done creating instance of DDTECCoolAlgo ";
00052 }
00053 
00054 void DDTECCoolAlgo::execute(DDCompactView& cpv) {
00055   LogDebug("TECGeom") << "==>> Constructing DDTECCoolAlgo...";
00056   int copyNo  = startCopyNo;
00057   // loop over the inserts to be placed
00058   for (int i = 0; i < (int)(coolInsert.size()); i++) {
00059     // get objects
00060     DDName child  = DDName(DDSplit(coolInsert.at(i)).first, 
00061                            DDSplit(coolInsert.at(i)).second);
00062     DDName mother = parent().name();
00063     // get positions
00064     double xpos = rPosition*cos(phiPosition.at(i));
00065     double ypos = -rPosition*sin(phiPosition.at(i));
00066     // place inserts
00067     DDTranslation tran(xpos, ypos, 0.0);
00068     DDRotation rotation;
00069    cpv.position(child, mother, copyNo, tran, rotation);
00070     LogDebug("TECGeom") << "DDTECCoolAlgo test " << child << "["  
00071                         << copyNo << "] positioned in " << mother 
00072                         << " at " << tran  << " with " << rotation 
00073                         << " phi " << phiPosition.at(i)/CLHEP::deg << " r " 
00074                         << rPosition;
00075     copyNo++;
00076   }
00077   LogDebug("TECGeom") << "<<== End of DDTECCoolAlgo construction ...";
00078 }