#include "hvector.h" #include "hgeotubs.h" typedef HVector FVec; int HGeoTubs::readPoints(HGeoInfo & geoInfo, HString & volName, HGeoParam & ele) { #ifdef WITHORACLE ele.vol=FVec(0.0F,3); char* vName=volName; // not yet implemeted !!!!!!!! cerr << "code for reading a TUBS from database is not yet implemeted" << endl; return HFAILURE; #endif return HSUCCESS; } int HGeoTubs::readPoints(HGeoInfo & geoInfo, HGeoParam & ele) { ele.vol=FVec(0.0F,3); int k=0; for(int i=0;i<2;i++) { geoInfo.fin >> ele.vol[k++] >> ele.vol[k][0]>> ele.vol[k++][1]; } return HSUCCESS; } void HGeoTubs::calcShape(HGeoParam & ele, HGeoShapePar & p) { float fac=10.F; p.noPar=5; p.volPar=FVec(0.0F,5); p.volPar[0]=ele.vol[1][0] /fac; p.volPar[1]=ele.vol[1][1] /fac; p.volPar[2]=(float)ele.vol[2].norm(ele.vol[0]) /fac /2.F; p.volPar[3]=ele.vol[3][0]; p.volPar[4]=ele.vol[3][1]; return; } int HGeoTubs::posShape(HGeoParam & ele, HGeoParam & mo, HGeoShapePar & p) { if (mo.shape=="PGON") { posInPgon(ele,mo,p); return HSUCCESS; } if (mo.shape=="TUBS") { posInTubs(ele,mo,p); return HSUCCESS; } cerr << ele.shape << " in " << mo.shape << " is not yet implemeted" << endl; return HFAILURE; } void HGeoTubs::posInPgon(HGeoParam & ele, HGeoParam & mo, HGeoShapePar & p) { float phi, fac=10.F; phi=acos(ele.rot[1])*p.raddeg; if (ele.rot[2]>0.0F) phi=360.F - phi; cout << "************************************* phi: " << phi << endl; #ifdef WITHGEANT GSROTM(++p.geantRotNo,0.,0.,90.,phi,90.,(90.+phi)); #else ++p.geantRotNo; #endif p.nRot=p.geantRotNo; ele.geaPos[0]=0.0F; ele.geaPos[1]=0.0F; ele.geaPos[2]=ele.vol[0][2] + fac * p.volPar[2]; p.pos=(ele.trans - mo.geaPos + ele.geaPos) / fac; return; } void HGeoTubs::posInTubs(HGeoParam & ele, HGeoParam & mo, HGeoShapePar & p) { float fac=10.F; p.nRot=0; ele.geaPos[0]=0.0F; ele.geaPos[1]=0.0F; ele.geaPos[2]=ele.vol[0][2] + fac * p.volPar[2]; p.pos=(ele.trans - mo.geaPos + ele.geaPos) / fac; return; }