CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Attributes
DDTrackerPhiAltAlgo Class Reference
Inheritance diagram for DDTrackerPhiAltAlgo:

Public Member Functions

 DDTrackerPhiAltAlgo ()
 
void execute (DDCompactView &cpv) override
 
void initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
 
 ~DDTrackerPhiAltAlgo () override
 

Private Attributes

string childName
 
string idNameSpace
 
int incrCopyNo
 
int number
 
double radiusIn
 
double radiusOut
 
double rangeAngle
 
double startAngle
 
int startCopyNo
 
double tilt
 
double zpos
 

Detailed Description

Definition at line 20 of file DDTrackerPhiAltAlgo.cc.

Constructor & Destructor Documentation

DDTrackerPhiAltAlgo::DDTrackerPhiAltAlgo ( )

Definition at line 49 of file DDTrackerPhiAltAlgo.cc.

References LogDebug.

49  {
50  LogDebug("TrackerGeom") << "DDTrackerPhiAltAlgo info: Creating an instance";
51 }
#define LogDebug(id)
DDTrackerPhiAltAlgo::~DDTrackerPhiAltAlgo ( )
override

Definition at line 53 of file DDTrackerPhiAltAlgo.cc.

53 {}

Member Function Documentation

void DDTrackerPhiAltAlgo::execute ( DDCompactView cpv)
override

Definition at line 84 of file DDTrackerPhiAltAlgo.cc.

References submitPVValidationJobs::child, funct::cos(), DDrot(), DDSplit(), first, mps_fire::i, LogDebug, contentValuesFiles::number, SpecificationBuilder_cfi::parent(), DDCompactView::position(), idealTransformation::rotation, edm::second(), funct::sin(), and theta().

84  {
85  if (number > 0) {
86  double theta = 90. * CLHEP::deg;
87  double dphi;
88  if (number == 1 || fabs(rangeAngle - 360.0 * CLHEP::deg) < 0.001 * CLHEP::deg)
89  dphi = rangeAngle / number;
90  else
91  dphi = rangeAngle / (number - 1);
92  int copyNo = startCopyNo;
93 
94  DDName mother = parent().name();
96  for (int i = 0; i < number; i++) {
97  double phi = startAngle + i * dphi;
98  double phix = phi - tilt + 90. * CLHEP::deg;
99  double phiy = phix + 90. * CLHEP::deg;
100  double phideg = phix / CLHEP::deg;
101 
103  if (phideg != 0) {
104  string rotstr = DDSplit(childName).first + to_string(phideg * 10.);
105  rotation = DDRotation(DDName(rotstr, idNameSpace));
106  if (!rotation) {
107  LogDebug("TrackerGeom") << "DDTrackerPhiAltAlgo test: Creating a new"
108  << " rotation " << rotstr << "\t"
109  << "90., " << phix / CLHEP::deg << ", 90.," << phiy / CLHEP::deg << ", 0, 0";
110  rotation = DDrot(DDName(rotstr, idNameSpace), theta, phix, theta, phiy, 0., 0.);
111  }
112  }
113 
114  double xpos, ypos;
115  if (i % 2 == 0) {
116  xpos = radiusIn * cos(phi);
117  ypos = radiusIn * sin(phi);
118  } else {
119  xpos = radiusOut * cos(phi);
120  ypos = radiusOut * sin(phi);
121  }
122  DDTranslation tran(xpos, ypos, zpos);
123 
124  cpv.position(child, mother, copyNo, tran, rotation);
125  LogDebug("TrackerGeom") << "DDTrackerPhiAltAlgo test: " << child << " number " << copyNo << " positioned in "
126  << mother << " at " << tran << " with " << rotation;
127  copyNo += incrCopyNo;
128  }
129  }
130 }
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string &copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:17
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:57
U second(std::pair< T, U > const &p)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
DDRotation DDrot(const DDName &name, std::unique_ptr< DDRotationMatrix > rot)
Definition of a uniquely identifiable rotation matrix named by DDName name.
Definition: DDRotation.cc:67
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:3
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
#define LogDebug(id)
void DDTrackerPhiAltAlgo::initialize ( const DDNumericArguments nArgs,
const DDVectorArguments vArgs,
const DDMapArguments mArgs,
const DDStringArguments sArgs,
const DDStringVectorArguments vsArgs 
)
override

Definition at line 55 of file DDTrackerPhiAltAlgo.cc.

References LogDebug, DDCurrentNamespace::ns(), contentValuesFiles::number, and SpecificationBuilder_cfi::parent().

59  {
60  tilt = nArgs["Tilt"];
61  startAngle = nArgs["StartAngle"];
62  rangeAngle = nArgs["RangeAngle"];
63  radiusIn = nArgs["RadiusIn"];
64  radiusOut = nArgs["RadiusOut"];
65  zpos = nArgs["ZPosition"];
66  number = int(nArgs["Number"]);
67  startCopyNo = int(nArgs["StartCopyNo"]);
68  incrCopyNo = int(nArgs["IncrCopyNo"]);
69 
70  LogDebug("TrackerGeom") << "DDTrackerPhiAltAlgo debug: Parameters for "
71  << "positioning--"
72  << " Tilt " << tilt << "\tStartAngle " << startAngle / CLHEP::deg << "\tRangeAngle "
73  << rangeAngle / CLHEP::deg << "\tRin " << radiusIn << "\tRout " << radiusOut << "\t ZPos "
74  << zpos << "\tCopy Numbers " << number << " Start/Increment " << startCopyNo << ", "
75  << incrCopyNo;
76 
78  childName = sArgs["ChildName"];
79  DDName parentName = parent().name();
80  LogDebug("TrackerGeom") << "DDTrackerPhiAltAlgo debug: Parent " << parentName << "\tChild " << childName
81  << " NameSpace " << idNameSpace;
82 }
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:17
static std::string & ns()
#define LogDebug(id)

Member Data Documentation

string DDTrackerPhiAltAlgo::childName
private

Definition at line 46 of file DDTrackerPhiAltAlgo.cc.

string DDTrackerPhiAltAlgo::idNameSpace
private

Definition at line 45 of file DDTrackerPhiAltAlgo.cc.

int DDTrackerPhiAltAlgo::incrCopyNo
private

Definition at line 43 of file DDTrackerPhiAltAlgo.cc.

int DDTrackerPhiAltAlgo::number
private

Definition at line 41 of file DDTrackerPhiAltAlgo.cc.

double DDTrackerPhiAltAlgo::radiusIn
private

Definition at line 38 of file DDTrackerPhiAltAlgo.cc.

double DDTrackerPhiAltAlgo::radiusOut
private

Definition at line 39 of file DDTrackerPhiAltAlgo.cc.

double DDTrackerPhiAltAlgo::rangeAngle
private

Definition at line 37 of file DDTrackerPhiAltAlgo.cc.

double DDTrackerPhiAltAlgo::startAngle
private

Definition at line 36 of file DDTrackerPhiAltAlgo.cc.

int DDTrackerPhiAltAlgo::startCopyNo
private

Definition at line 42 of file DDTrackerPhiAltAlgo.cc.

double DDTrackerPhiAltAlgo::tilt
private

Definition at line 35 of file DDTrackerPhiAltAlgo.cc.

double DDTrackerPhiAltAlgo::zpos
private

Definition at line 40 of file DDTrackerPhiAltAlgo.cc.