Back to index

PdbMuiPanelGeo.cc

 
//----------------------------------------------------------------------------- 
//  $header$ 
// 
//  The pdbcal package 
//  Copyright (C) PHENIX collaboration, 1999 
// 
//  Implementation of class PdbMuiPanelGeo 
// 
//  Author: pope 
//----------------------------------------------------------------------------- 
#include "PdbMuiPanelGeo.hh" 
 
#include <cmath> 
#include <iostream.h> 
 
PdbMuiPanelGeo::PdbMuiPanelGeo() 
  : fDxTarget1Fiducial(0.0),    fDyTarget1Fiducial(0.0), 
    fDxFiducialCenter(0.0),     fDyFiducialCenter(0.0), 
    fDzCenterHTubesL0(0.0),     fDzCenterHTubesL1(0.0), 
    fDzCenterVTubesL0(0.0),     fDzCenterVTubesL1(0.0), 
    fArm(-1), fGap(-1), fPanel(-1) 
{ 
  fTarget1Pos[0] = 0.0; 
  fTarget1Pos[1] = 0.0; 
  fTarget1Pos[2] = 0.0; 
  fTarget2Pos[0] = 0.0; 
  fTarget2Pos[1] = 0.0; 
  fTarget2Pos[2] = 0.0; 
} 
 
PdbMuiPanelGeo::PdbMuiPanelGeo(const short& arm, const short& gap, 
			       const short& panel, 
			       const float& xTarget1Global, 
			       const float& yTarget1Global, 
			       const float& zTarget1Global, 
			       const float& xTarget2Global, 
			       const float& yTarget2Global, 
			       const float& zTarget2Global, 
			       const float& dxTarget1ToFiducial, 
			       const float& dyTarget1ToFiducial, 
			       const float& dxFiducialToCenter, 
			       const float& dyFiducialToCenter, 
			       const float& dzCenterToCloseHTubes, 
			       const float& dzCenterToFarHTubes, 
			       const float& dzCenterToCloseVTubes, 
			       const float& dzCenterToFarVTubes) 
  : fDxTarget1Fiducial(dxTarget1ToFiducial), 
    fDyTarget1Fiducial(dyTarget1ToFiducial), 
    fDxFiducialCenter(dxFiducialToCenter), 
    fDyFiducialCenter(dyFiducialToCenter), 
    fDzCenterHTubesL0(dzCenterToCloseHTubes), 
    fDzCenterHTubesL1(dzCenterToFarHTubes), 
    fDzCenterVTubesL0(dzCenterToCloseVTubes), 
    fDzCenterVTubesL1(dzCenterToFarVTubes), 
    fArm(arm), fGap(gap), fPanel(panel) 
{ 
  fTarget1Pos[0] = xTarget1Global; 
  fTarget1Pos[1] = yTarget1Global; 
  fTarget1Pos[2] = zTarget1Global; 
  fTarget2Pos[0] = xTarget2Global; 
  fTarget2Pos[1] = yTarget2Global; 
  fTarget2Pos[2] = zTarget2Global; 
} 
 
PdbMuiPanelGeo::PdbMuiPanelGeo(const PdbMuiPanelGeo& rhs) 
  : fDxTarget1Fiducial(rhs.fDxTarget1Fiducial), 
    fDyTarget1Fiducial(rhs.fDyTarget1Fiducial), 
    fDxFiducialCenter(rhs.fDxFiducialCenter), 
    fDyFiducialCenter(rhs.fDyFiducialCenter), 
    fDzCenterHTubesL0(rhs.fDzCenterHTubesL0), 
    fDzCenterHTubesL1(rhs.fDzCenterHTubesL1), 
    fDzCenterVTubesL0(rhs.fDzCenterVTubesL0), 
    fDzCenterVTubesL1(rhs.fDzCenterVTubesL1), 
    fArm(rhs.fArm), fGap(rhs.fGap), fPanel(rhs.fPanel) 
{ 
  fTarget1Pos[0] = rhs.fTarget1Pos[0]; 
  fTarget2Pos[0] = rhs.fTarget2Pos[0]; 
  fTarget1Pos[1] = rhs.fTarget1Pos[1]; 
  fTarget2Pos[1] = rhs.fTarget2Pos[1]; 
  fTarget1Pos[2] = rhs.fTarget1Pos[2]; 
  fTarget2Pos[2] = rhs.fTarget2Pos[2]; 
} 
 
PdbMuiPanelGeo& 
PdbMuiPanelGeo::operator=(const PdbMuiPanelGeo& rhs) 
{ 
  if (this == &rhs) return *this;  // avoid self-assignment! 
 
  fTarget1Pos[0] = rhs.fTarget1Pos[0]; 
  fTarget2Pos[0] = rhs.fTarget2Pos[0]; 
  fTarget1Pos[1] = rhs.fTarget1Pos[1]; 
  fTarget2Pos[1] = rhs.fTarget2Pos[1]; 
  fTarget1Pos[2] = rhs.fTarget1Pos[2]; 
  fTarget2Pos[2] = rhs.fTarget2Pos[2]; 
  fDxTarget1Fiducial = rhs.fDxTarget1Fiducial; 
  fDyTarget1Fiducial = rhs.fDyTarget1Fiducial; 
  fDxFiducialCenter  = rhs.fDxFiducialCenter; 
  fDyFiducialCenter  = rhs.fDyFiducialCenter; 
  fDzCenterHTubesL0  = rhs.fDzCenterHTubesL0; 
  fDzCenterHTubesL1  = rhs.fDzCenterHTubesL1; 
  fDzCenterVTubesL0  = rhs.fDzCenterVTubesL0; 
  fDzCenterVTubesL1  = rhs.fDzCenterVTubesL1; 
  fArm   = rhs.fArm; 
  fGap   = rhs.fGap; 
  fPanel = rhs.fPanel; 
 
  return *this; 
} 
 
PdbMuiPanelGeo::~PdbMuiPanelGeo() 
{ 
} 
 
void 
PdbMuiPanelGeo::print() const 
{ 
  cout << "A" << fArm << " G" << fGap << " P" << fPanel << "\n"; 
  cout << "T1:" 
       << "  " << fTarget1Pos[0] 
       << "  " << fTarget1Pos[1] 
       << "  " << fTarget1Pos[2] << "  " 
       << "T2:" 
       << "  " << fTarget2Pos[0] 
       << "  " << fTarget2Pos[1] 
       << "  " << fTarget2Pos[2] << "\n"; 
  cout << "T1 to fiducial:" 
       << "  dx = " << fDxTarget1Fiducial 
       << "  dy = " << fDyTarget1Fiducial << "  " 
       << "fiducial to center:" 
       << "  dx = " << fDxFiducialCenter 
       << "  dy = " << fDyFiducialCenter << "\n"; 
  cout << "dz center to H layer 0 = " << fDzCenterHTubesL0 << "  " 
       << "dz center to H layer 1 = " << fDzCenterHTubesL1 << "\n"; 
  cout << "dz center to V layer 0 = " << fDzCenterVTubesL0 << "  " 
       << "dz center to V layer 1 = " << fDzCenterVTubesL1 << "\n"; 
  cout << endl; 
} 
 
void 
PdbMuiPanelGeo::SetChannel(const short& arm, const short& gap, 
			   const short& panel) 
{ 
  // TODO:  would like to validate arguments, but would need 
  //        TMuiChannelId header, which will not have been installed 
  //        until mui package is built! 
  fArm   = arm; 
  fGap   = gap; 
  fPanel = panel; 
} 
 
void 
PdbMuiPanelGeo::SetTargetPosition(const short& target, 
				  const float& x, 
				  const float& y, 
				  const float& z) 
{ 
  // expects target == 1 or target == 2 ! 
  if (target == 1) { 
    fTarget1Pos[0] = x; 
    fTarget1Pos[1] = y; 
    fTarget1Pos[2] = z; 
  } else { 
    fTarget2Pos[0] = x; 
    fTarget2Pos[1] = y; 
    fTarget2Pos[2] = z; 
  } 
} 
 
 
void 
PdbMuiPanelGeo::SetTarget1ToFiducial(const float& dx, const float& dy) 
{ 
  fDxTarget1Fiducial = dx; 
  fDyTarget1Fiducial = dy; 
} 
 
void 
PdbMuiPanelGeo::SetFiducialToCenter(const float& dx, const float& dy) 
{ 
  fDxFiducialCenter = dx; 
  fDyFiducialCenter = dy; 
} 
 
void 
PdbMuiPanelGeo::SetTubeDisplacement(const short& orient, 
				    const float& dz0, 
				    const float& dz1) 
{ 
  // TODO:  would like to use kHORIZ/kVERT constants, but would need 
  //        MuiCommon header, which will not have been installed until 
  //        mui package is built! 
  if (orient == 0) {  // horizontal 
    fDzCenterHTubesL0 = dz0; 
    fDzCenterHTubesL1 = dz1; 
  } else {            // vertical 
    fDzCenterVTubesL0 = dz0; 
    fDzCenterVTubesL1 = dz1; 
  } 
} 
 
void 
PdbMuiPanelGeo::Channel(short& arm, short& gap, short& panel) const 
{ 
  arm   = fArm; 
  gap   = fGap; 
  panel = fPanel; 
} 
 
void 
PdbMuiPanelGeo::TargetPosition(const short& target, 
			       float& x, float& y, float& z) const 
{ 
  // expects target == 1 or target == 2 ! 
  if (target == 1) { 
    x = fTarget1Pos[0]; 
    y = fTarget1Pos[1]; 
    z = fTarget1Pos[2]; 
  } else { 
    x = fTarget2Pos[0]; 
    y = fTarget2Pos[1]; 
    z = fTarget2Pos[2]; 
  } 
} 
 
void 
PdbMuiPanelGeo::LocalTargetPos(const short& target, 
			       float& x, float& y, float& z) const 
{ 
  // expects target == 1 or target == 2 ! 
  x = - fDxFiducialCenter - fDxTarget1Fiducial; 
  y = - fDyFiducialCenter - fDyTarget1Fiducial; 
  z = 0.0; 
 
  if (target == 2) { 
    // Assume that only the X positions of the two targets differ. 
 
    float dx = fTarget2Pos[0] - fTarget1Pos[0]; 
    float dy = fTarget2Pos[1] - fTarget1Pos[1]; 
    float dz = fTarget2Pos[2] - fTarget1Pos[2]; 
    float dr = sqrt(dx*dx + dy*dy + dz*dz); 
 
    if (dx < 0.0) { 
      x -= dr; 
    } else { 
      x += dr; 
    } 
 
  } 
 
} 
 
void 
PdbMuiPanelGeo::Target1ToFiducial(float& dx, float& dy) const 
{ 
  dx = fDxTarget1Fiducial; 
  dy = fDyTarget1Fiducial; 
} 
 
void 
PdbMuiPanelGeo::FiducialToCenter(float& dx, float& dy) const 
{ 
  dx = fDxFiducialCenter; 
  dy = fDyFiducialCenter; 
} 
 
void 
PdbMuiPanelGeo::TubeDisplacement(const short& orient, 
				 float& dz0, float& dz1) const 
{ 
  // TODO:  would like to use kHORIZ/kVERT constants, but would need 
  //        MuiCommon header, which will not have been installed until 
  //        mui package is built! 
  if (orient == 0) {  // horizontal 
    dz0 = fDzCenterHTubesL0; 
    dz1 = fDzCenterHTubesL1; 
  } else {            // vertical 
    dz0 = fDzCenterVTubesL0; 
    dz1 = fDzCenterVTubesL1; 
  } 
} 

Back to index