CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions
global_simpleAngular_0 Class Reference

#include <global_simpleAngular.h>

Inheritance diagram for global_simpleAngular_0:
AlgoImpl

Public Member Functions

bool checkParameters ()
 subclass must check the supplied parameters ParE_, ParS_ More...
 
void checkTermination ()
 for algorithms with incr_==0 the algorithm must check whether to terminate More...
 
 global_simpleAngular_0 (AlgoPos *, std::string label)
 
DDRotationMatrix rotation ()
 subclass must calculate a rotation matrix More...
 
void stream (std::ostream &) const
 
DDTranslation translation ()
 subclass must calculate a translation std::vector More...
 
 ~global_simpleAngular_0 ()
 
- Public Member Functions inherited from AlgoImpl
 AlgoImpl (AlgoPos *, std::string label)
 subclass must provide a similar constructor and call this one More...
 

Additional Inherited Members

- Protected Member Functions inherited from AlgoImpl
virtual int copyno () const
 copy-number calculation More...
 
void terminate ()
 stop the current iteration of the algorithm (for incr_==0 types of algorithms) More...
 
virtual ~AlgoImpl ()
 
- Static Protected Member Functions inherited from AlgoImpl
static std::string d2s (double x)
 ahh, converts a double into a std::string ... yet another one of this kind! More...
 
- Protected Attributes inherited from AlgoImpl
const int & count_
 
const int & curr_
 
const int & end_
 
std::string & err_
 
const int & incr_
 
std::string label_
 
parE_typeParE_
 
parS_typeParS_
 
const int & start_
 
bool & terminate_
 

Detailed Description

(...THIS COULD BE DOXYGEN CONFORMANT ...) Angular positioning according to the formula:

offset ... an angle offset from which to start the positioning

radius ... an offset distance in the radial direction.

delta ... angular delta between each position.

number ... number of times to position within the range rotate ... boolean text, T or F, True or False, 1 or zero. Use this to indicate if the self logical part should be rotated. Since the DDD uses double or std::string, I'm using std::string. default = "T" orientation ... std::string: rotation matrix name to be used to orient the part within the mother. This is a DDLrRotation.

The algorithm has (at least) two implementations.

The first is selected if delta is specified and number is NOT specified. In this algorithm, the positioning is relatively straight-forward.

The second is selected if number is specified and delta is NOT specified. This should use the first one by specifying a delta based on dividing up 360 degrees by the number of positionings desired. For this one, CheckTermination is used to determine when to stop making them.

Some methods are only specific to this algorithm (I HOPE)

Definition at line 57 of file global_simpleAngular.h.

Constructor & Destructor Documentation

global_simpleAngular_0::global_simpleAngular_0 ( AlgoPos a,
std::string  label 
)

Definition at line 20 of file global_simpleAngular.cc.

21  : AlgoImpl(a,label)
22 { }
AlgoImpl(AlgoPos *, std::string label)
subclass must provide a similar constructor and call this one
Definition: AlgoImpl.cc:6
global_simpleAngular_0::~global_simpleAngular_0 ( )

Definition at line 24 of file global_simpleAngular.cc.

25 { }

Member Function Documentation

bool global_simpleAngular_0::checkParameters ( )
virtual

subclass must check the supplied parameters ParE_, ParS_

whether they are correct and should select this paricular algorithm.

If the parameters are correct by should not select this particular algorithm, checkParamters must return false otherwise true.

The std::string err_ is to be used to be extended with error information in case any errors have been detected. Error information must be attached to err_ because of the possibility of already contained error information.

In case of errors: If an DDException is thrown by the algorithm implementation, further processing of any other implementations of the algorithm will be stopped. If no exception is thrown, checkParamters must return false. It's preferable not to throw an exception in case of errors. The algorithm implementation will throw if all checkParamters() of all registered algorithm implementations have returned false.

Implements AlgoImpl.

Definition at line 27 of file global_simpleAngular.cc.

References AlgoImpl::err_, AlgoImpl::ParE_, query::result, and findQualityFiles::size.

28 {
29 /* besides the automatic generated checking for the input params,
30  we have to decide, whether the params are correct and should
31  select this implementation
32  */
33 
34  bool result = true;
35 
36  // check for presence of delta
37  if (ParE_["delta"].size() == 0) {
38  result = false; // don't select this implementation, because delta is missing
39  }
40  else {
41  // check for valid delta-value
42  if (ParE_["delta"][0] == 0.) {
43  err_ += "\tdelta can not be zero\n";
44  result = false;
45  }
46  }
47 
48  // check for presence of number
49  if (ParE_["number"].size() != 0) {
50 // err_ += "\tcan not specify a delta and a number\n";
51  result = false;
52  }
53  return result;
54 }
parE_type & ParE_
Definition: AlgoImpl.h:113
std::string & err_
Definition: AlgoImpl.h:120
tuple result
Definition: query.py:137
tuple size
Write out results.
void global_simpleAngular_0::checkTermination ( void  )
virtual

for algorithms with incr_==0 the algorithm must check whether to terminate

Overload this function in case the algorithm is a 'incr_==0' type. In this case provide some code which checks using perhaps the value of count_ and/or supplied algorithm parameters to check whether terminate() has to be called or not. If terminate() is called, the current iteration of the algorithm is not taken into account!

The default implementation will immidiately terminate the algorithm in case incr_==0.

In case of incr_!=0: checkTermination() is not called at all; the algorithm will terminate automatically when the specified range [start_, end_, incr_] has been covered or terminate() has been called from within translation() or rotation().

Reimplemented from AlgoImpl.

Definition at line 148 of file global_simpleAngular.cc.

References AlgoImpl::count_, AlgoImpl::ParE_, and AlgoImpl::terminate().

149 {
150  // initially I thought of ending our rotation algorithm at the vertical
151  // (+x), but decided it should always go full circle.
152  // if ((ParE_["offset"][0] + ParE_["delta"][0] * count_ / deg) > 360.)
153  if (ParE_["delta"][0] * count_ / deg > 360.)
154  terminate();
155 
156 }
parE_type & ParE_
Definition: AlgoImpl.h:113
const int & count_
Definition: AlgoImpl.h:118
void terminate()
stop the current iteration of the algorithm (for incr_==0 types of algorithms)
Definition: AlgoImpl.cc:28
DDRotationMatrix global_simpleAngular_0::rotation ( )
virtual

subclass must calculate a rotation matrix

depending on the current position curr_ in the range [start_,end_,incr_] and the user supplied parameters ParE_, ParS_

Implements AlgoImpl.

Definition at line 71 of file global_simpleAngular.cc.

References angle(), AlgoImpl::count_, gather_cfg::cout, i, j, mergeVDriftHistosByStation::name, AlgoImpl::ParE_, AlgoImpl::ParS_, submit::rm, DDRotation::rotation(), and findQualityFiles::size.

72 {
73  std::cout << "ParS_[\"rotate\"][0] = " << ParS_["rotate"][0] << std::endl;
74  if (ParS_["rotate"][0] == "T" || ParS_["rotate"][0] == "1"
75  || ParS_["rotate"][0] == "True")
76  {
77  double angle = -(ParE_["offset"][0]/rad + (ParE_["delta"][0]/rad) * (count_ - 1));
78  DDRotationMatrix rm1;
79  if (ParS_["orientation"].size() != 0)
80  {
81  std::string name=ParS_["orientation"][0];
82  size_t foundColon = 0;
83  std::string rn = "";
84  std::string ns = "";
85  while (foundColon < name.size() && name[foundColon] != ':')
86  ++foundColon;
87  if (foundColon != name.size())
88  {
89  for (size_t j = foundColon + 1; j < name.size(); ++j)
90  rn = rn + name[j];
91  for (size_t i = 0; i < foundColon; ++i)
92  ns = ns + name[i];
93  }
94  if (rn != "" && ns != "")
95  {
96  DDRotation myDDRotation(DDName(rn, ns));
97  rm1 = *(myDDRotation.rotation());
98  }
99  else
100  std::cout << "MAJOR PROBLEM: expected a fully qualified DDName but got :"
101  << name << std::endl;
102  }
103  ROOT::Math::RotationZ rm(angle);
104  rm1.Invert();
105  rm.Invert();
106  return rm * rm1;
107  }
108  else if (ParS_["orientation"].size() != 0)
109  {
110  // return the orientation matrix
111  std::string name=ParS_["orientation"][0];
112  size_t foundColon = 0;
113  std::string rn = "";
114  std::string ns = "";
115  while (foundColon < name.size() && name[foundColon] != ':')
116  ++foundColon;
117  if (foundColon != name.size())
118  {
119  for (size_t j = foundColon + 1; j < name.size(); ++j)
120  rn = rn + name[j];
121  for (size_t i = 0; i < foundColon; ++i)
122  ns = ns + name[i];
123  }
124  if (rn != "" && ns != "")
125  {
126 
127  DDRotation myDDRotation(DDName(rn, ns));
128  std::cout << "about to return *(myDDRotation.rotation())" << std::endl;
129  std::cout << *myDDRotation.rotation() << std::endl;
130  return *(myDDRotation.rotation());
131  }
132  else
133  std::cout << "MAJOR PROBLEM: expected a fully qualified DDName but got "
134  << name << " therefore could not look up the rotation." << std::endl;
135  return DDRotationMatrix();
136  }
137  else
138  {
139  return DDRotationMatrix(); // return identity matrix.
140  }
141 }
int i
Definition: DBlmapReader.cc:9
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
parE_type & ParE_
Definition: AlgoImpl.h:113
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
string rm
Definition: submit.py:76
int j
Definition: DBlmapReader.cc:9
const int & count_
Definition: AlgoImpl.h:118
parS_type & ParS_
Definition: AlgoImpl.h:112
tuple cout
Definition: gather_cfg.py:121
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
tuple size
Write out results.
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
void global_simpleAngular_0::stream ( std::ostream &  os) const

Definition at line 159 of file global_simpleAngular.cc.

160 {
161  os << "global_simplesimpleAngular_0::stream(): not implemented.";
162 }
DDTranslation global_simpleAngular_0::translation ( )
virtual

subclass must calculate a translation std::vector

depending on the current position curr_ in the range [start_,end_,incr_] and the user supplied parameters ParE_, ParS_

Implements AlgoImpl.

Definition at line 57 of file global_simpleAngular.cc.

References funct::cos(), AlgoImpl::count_, delta, evf::evtn::offset(), AlgoImpl::ParE_, CosmicsPD_Skims::radius, and funct::sin().

58 {
59  double offset = ParE_["offset"][0]/rad;
60  double delta = ParE_["delta"][0]/rad;
61  double radius = ParE_["radius"][0];
62 // std::cout << "x = " << radius * cos(offset + delta * (count_ - 1)) << " y = " << radius * sin(offset + delta * (count_ - 1)) << std::endl;
63  DDTranslation trans(radius * cos(offset + delta * (count_ - 1)),
64  radius * sin(offset + delta * (count_ - 1)),
65  0. );
66 
67  return trans;
68 }
dbl * delta
Definition: mlp_gen.cc:36
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
parE_type & ParE_
Definition: AlgoImpl.h:113
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
const int & count_
Definition: AlgoImpl.h:118
unsigned int offset(bool)