00001 #include <math.h>
00002 #include <stdio.h>
00003 #include "StiPlacement.h"
00004
00005 StiPlacement::StiPlacement(){
00006 normalRefAngle=0;
00007 normalRadius=0;
00008 normalYoffset=0;
00009 centerRefAngle=0;
00010 centerRadius=0;
00011 centerOrientation=0;
00012 layerRadius=0;
00013 zCenter=0;
00014 #if 0
00015 setCenterRep(0., 0., 0.);
00016 #else
00017 setNormalRep(0., 0., 0.);
00018 #endif
00019 }
00020 #if 0
00021 void StiPlacement::setCenterRep(float refAngle_, float radius_,
00022 float orientation_){
00023
00024 while(refAngle_ < -M_PI){ refAngle_ += 2.*M_PI; }
00025 while(refAngle_ >= M_PI){ refAngle_ -= 2.*M_PI; }
00026 centerRefAngle = refAngle_;
00027
00028
00029 if(radius_ >= 0.){ centerRadius = radius_; }
00030
00031 while(orientation_ < -M_PI){ orientation_ += 2*M_PI; }
00032 while(orientation_ >= M_PI){ orientation_ -= 2*M_PI; }
00033 centerOrientation = orientation_;
00034
00035 normalRefAngle = centerRefAngle - centerOrientation;
00036 while(normalRefAngle < -M_PI){ normalRefAngle += 2.*M_PI; }
00037 while(normalRefAngle >= M_PI){ normalRefAngle -= 2.*M_PI; }
00038 normalRadius = centerRadius*cos(centerOrientation);
00039 normalYoffset = centerRadius*sin(centerOrientation);
00040 if (!radius_) return;
00041 #if 0
00042 double trig[4];
00043 trig[0] = cos(normalRefAngle);
00044 trig[1] = sin(normalRefAngle);
00045 trig[2] = cos(centerRefAngle);
00046 trig[3] = sin(centerRefAngle);
00047 double dif = fabs(trig[0]-trig[2])+fabs(trig[1]-trig[3]);
00048 if (dif >1e-3) {
00049 LOG_DEBUG << Form("**** centerRefAngle=%g normalAngle=%g diff=%g ****"
00050 ,centerRefAngle,normalRefAngle,dif)<< endm;
00051 }
00052 #endif
00053 }
00054 #endif
00055 void StiPlacement::setNormalRep(float refAngle_, float radius_,
00056 float yOffset_){
00057
00058 while(refAngle_ < -M_PI){ refAngle_ += 2.*M_PI; }
00059 while(refAngle_ >= M_PI){ refAngle_ -= 2.*M_PI; }
00060 normalRefAngle = refAngle_;
00061
00062 if(radius_ >= 0.){ normalRadius = radius_; }
00063 normalYoffset = yOffset_;
00064
00065
00066 centerRadius = ::sqrt(normalRadius*normalRadius + normalYoffset*normalYoffset);
00067 centerOrientation = atan2(normalYoffset,normalRadius);
00068 centerRefAngle = normalRefAngle + centerOrientation;
00069 while(centerRefAngle < -M_PI){ centerRefAngle += 2.*M_PI; }
00070 while(centerRefAngle >= M_PI){ centerRefAngle -= 2.*M_PI; }
00071
00072 #if 0
00073 double trig[4];
00074 trig[0] = cos(normalRefAngle);
00075 trig[1] = sin(normalRefAngle);
00076 trig[2] = cos(centerRefAngle);
00077 trig[3] = sin(centerRefAngle);
00078 double dif = fabs(trig[0]-trig[2])+fabs(trig[1]-trig[3]);
00079 if (dif >1e-3) {
00080 LOG_DEBUG << Form("**** centerRefAngle=%g normalAngle=%g diff=%g ****"
00081 ,centerRefAngle,normalRefAngle,dif)<< endm;
00082 }
00083 #endif
00084
00085
00086
00087
00088
00089 }
00090
00091 void StiPlacement::setLayerAngle(float layerAngle)
00092 {
00093 _layerAngle = layerAngle;
00094 if (_layerAngle< -M_PI) _layerAngle+=2*M_PI;
00095 if (_layerAngle> M_PI) _layerAngle-=2*M_PI;
00096 }
00097
00098