146 if (
station() == 4 && nsl == 2) {
147 std::cout <<
"No theta superlayer in station 4!" << std::endl;
171 if (nlay == 4 && ntube == 1) {
172 std::cout <<
"ATTENTION: no wire nuber 1 for 4th layer!!!" << std::endl;
193 if (
station() != 4 || sl != 2) {
198 std::cout <<
"No theta superlayer in station 4!" << std::endl;
221 for (i = 0; i < 3; i++) {
222 if (
station() == 4 && i == 1) {
239 std::cout << setiosflags(std::ios::showpoint | std::ios::fixed) << std::setw(4) << std::setprecision(1);
244 std::cout <<
"Position: Mag=" << pp.
mag() <<
"cm, Phi=" << pp.
phi() * 180 / 3.14159;
245 std::cout <<
" deg, Z=" << pp.
z() <<
" cm" << std::endl;
246 std::cout <<
"Rotation: ANGLE=" <<
phiCh() * 180 / 3.14159 << std::endl;
248 std::cout <<
"Z of superlayers: phi=" <<
ZSL(1) <<
", ";
258 if (sl < 1 || sl > 3) {
259 std::cout <<
"DTTrigGeom::ZSL: wrong SL number: " << sl;
260 std::cout << -999 <<
" returned" << std::endl;
271 std::cout <<
"Position: Mag=" << pp.
mag() <<
"cm, Phi=" << pp.
phi() * 180 / 3.14159;
272 std::cout <<
" deg, Z=" << pp.
z() <<
" cm" << std::endl;
273 std::cout <<
"Rotation: ANGLE=" <<
phiCh() * 180 / 3.14159 << std::endl;
274 std::cout <<
"Z of superlayers: phi=" <<
ZSL(1) <<
", ";
277 std::cout <<
"First wire positions:" << std::endl;
280 for (ii = 1; ii <= 3; ii++) {
281 if (
station() != 4 || ii != 2) {
282 for (jj = 1; jj <= 4; jj++) {
283 std::cout <<
" SL=" << ii <<
", lay=" << jj <<
", wire 1 position=";
296 std::cout <<
" Position: R=" << gp1.
perp() <<
"cm, Phi=" << gp1.
phi() * 180 / 3.14159 <<
" deg, Z=" << gp1.
z()
297 <<
" cm" << std::endl;
302 std::cout <<
" Position: R=" << gp2.
perp() <<
"cm, Phi=" << gp2.
phi() * 180 / 3.14159 <<
" deg, Z=" << gp2.
z()
303 <<
" cm" << std::endl;
308 std::cout <<
" Position: R=" << gp3.
perp() <<
"cm, Phi=" << gp3.
phi() * 180 / 3.14159 <<
" deg, Z=" << gp3.
z()
309 <<
" cm" << std::endl;
313 std::cout <<
"******************************************************" << std::endl;
323 string name =
"Lut_from_CMSSW_geom";
342 fout.open(name.c_str(), ofstream::app);
355 float SL_shift = xBTI1_3 - xBTI1_1;
374 d = fabs(traco_1.
x());
375 xcn = fabs(traco_1.
y());
378 xcn = xcn + SL_shift;
379 xcn_sign =
static_cast<int>(pp.
y() / fabs(pp.
y())) *
static_cast<int>(traco_1.
y() / fabs(traco_1.
y()));
381 xcn_sign = -xcn_sign;
382 xcn = xcn * xcn_sign;
384 float m1 = (traco_2.
y() - traco_1.
y()) / (traco_2.
x() - traco_1.
x());
385 float q1 = traco_1.
y() - m1 * traco_1.
x();
387 float xn = q1 / (m - m1);
390 d =
sqrt(xn * xn + yn * yn);
391 xcn =
sqrt((xn - traco_1.
x()) * (xn - traco_1.
x()) + (yn - traco_1.
y()) * (yn - traco_1.
y()));
394 xcn = xcn + SL_shift;
396 float diff = (pp.
x() - traco_1.
x()) * traco_1.
y();
397 xcn_sign =
static_cast<int>(diff / fabs(diff));
398 xcn = xcn * xcn_sign;
409 short int Low_byte = (btic & 0x00FF);
410 short int High_byte = (btic >> 8 & 0x00FF);
411 fout << setw(2) << setfill(
'0') << hex << High_byte << setw(2) << setfill(
'0') << Low_byte;
414 short int DSPmantissa = 0;
415 short int DSPexp = 0;
419 Low_byte = (DSPmantissa & 0x00FF);
420 High_byte = (DSPmantissa >> 8 & 0x00FF);
421 fout << setw(2) << setfill(
'0') << hex << High_byte << setw(2) << setfill(
'0') << Low_byte;
422 Low_byte = (DSPexp & 0x00FF);
423 High_byte = (DSPexp >> 8 & 0x00FF);
424 fout << setw(2) << setfill(
'0') << High_byte << setw(2) << setfill(
'0') << Low_byte;
430 Low_byte = (DSPmantissa & 0x00FF);
431 High_byte = (DSPmantissa >> 8 & 0x00FF);
432 fout << setw(2) << setfill(
'0') << hex << High_byte << setw(2) << setfill(
'0') << Low_byte;
433 Low_byte = (DSPexp & 0x00FF);
434 High_byte = (DSPexp >> 8 & 0x00FF);
435 fout << setw(2) << setfill(
'0') << High_byte << setw(2) << setfill(
'0') << Low_byte;
438 Low_byte = (xcn_sign & 0x00FF);
439 High_byte = (xcn_sign >> 8 & 0x00FF);
440 fout << setw(2) << setfill(
'0') << hex << High_byte << setw(2) << setfill(
'0') << Low_byte <<
dec <<
"\n";
492 memcpy(&pl, &f,
sizeof(
float));
494 if ((pl & 0x80000000) != 0)
496 lm = (0x800000 | (pl & 0x7FFFFF));
499 DSPexp = ((pl >> 23) & 0xFF) - 126;
500 DSPmantissa = (short)lm;
502 DSPmantissa = -DSPmantissa;
551 int nsl =
id.superlayer();
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
int sector() const
Return sector number.
const DTSuperLayer * superLayer(const DTSuperLayerId &id) const
Return the superlayer corresponding to the given id.
float wirePosition(int wireNumber) const
Returns the x position in the layer of a given wire number.
Local3DVector LocalVector
int mapTubeInFEch(int nsl, int nlay, int ntube) const
Staggering of first wire of layer respect to default: obsolete 19/6/06.
DTTrigGeom(const DTChamber *stat, bool debug)
Constructor.
Point3DBase< Scalar, LocalTag > LocalPoint
float phiCh() const
Rotation angle of chamber (deg)
float cellPitch() const
Width of a cell (cm) i.e. distance between ywo wires.
int wheel() const
Return wheel number.
void setGeom(const DTChamber *stat)
Set/Update Geometry.
float const *__restrict__ zt
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Geom::Phi< T > phi() const
const DTLayer * layer(const DTLayerId &id) const
Return the layer corresponding to the given id.
void dumpLUT(short int btic)
Dump the LUT for this chamber.
GlobalPoint toGlobal(const LocalPoint p) const
Go to CMS coordinate system for a point.
void dumpGeom() const
Dump the geometry.
const Plane & surface() const
The nominal surface of the GeomDet.
int firstChannel() const
Returns the wire number of the first wire.
const DTTopology & specificTopology() const
float distSL() const
Distance between the phi view superlayers (cms)
float cellH() const
Height of a cell (cm)
LocalPoint toLocal(const GlobalPoint &gp) const
float ZcenterSL() const
Coordinate of center of the 2 Phi SL.
Tan< T >::type tan(const T &t)
int posFE(int sl) const
Front End position : 1=toward negative y, 0=toward positive y.
int station() const
Return station number.
int channels() const
Returns the number of wires in the layer.
LocalPoint tubePosInCh(int nsl, int nlay, int ntube) const
Wire position in chamber frame.
float phiSLOffset()
Superlayer offset in chamber front-end frame, in cm.
DTChamberId statId() const
Identifier of the associated chamber.
constexpr uint16_t localX(uint16_t px)
void getGeom()
Get the geometry from the station.
LocalPoint localPosition(const DTBtiId) const
Local position in chamber of a BTI.
const DTChamber * stat() const
Associated chamber.
static int position[264][3]
void IEEE32toDSP(float f, short int &DSPmantissa, short int &DSPexp)
GlobalPoint CMSPosition(const DTBtiId obj) const
CMS position of a BTI.
int nCell(int sl) const
Number of BTIs in a required superlayer (i.e. nCells in lay 1)
float ZSL(int) const
Radial coordinate in chamber frame of center of a superlayer.