Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

UgliSteelPlnHandle.cxx

Go to the documentation of this file.
00001 
00002 // $Id: UgliSteelPlnHandle.cxx,v 1.12 2006/06/27 20:08:23 rhatcher Exp $
00003 //
00004 // UgliSteelPlnHandle
00005 //
00006 // UgliSteelPlnHandle is handle to a single steel plane
00007 //
00008 // Author:  R. Hatcher 2000.11.15
00009 //
00011 
00012 #include "UgliGeometry/UgliSteelPlnHandle.h"
00013 #include "UgliGeometry/Ugli.h"
00014 
00015 #include "MessageService/MsgService.h"
00016 CVSID("$Id: UgliSteelPlnHandle.cxx,v 1.12 2006/06/27 20:08:23 rhatcher Exp $");
00017 
00018 #include <cassert>
00019 
00020 ClassImp(UgliSteelPlnHandle)
00021 
00022 //_____________________________________________________________________________
00023 UgliSteelPlnHandle::UgliSteelPlnHandle()
00024   : UgliPlnHandle((UgliPlnNode*)0), fUgliSteelPlnNode(0), fGeoSteelPlnNode(0)
00025 {
00026    // Default constructor
00027 
00028    MSG("Ugli",Msg::kDebug) 
00029      << "UgliSteelPlnHandle created by default ctor" << endl;
00030 //   assert(0);
00031 }
00032 
00033 //_____________________________________________________________________________
00034 UgliSteelPlnHandle::~UgliSteelPlnHandle()
00035 {
00036    // handle deletion updates reference count
00037    // done by super-class UgliPlnHandle
00038    // don't do it here or we'll get two counts for every handle
00039 
00040    // if (fUgliSteelPlnNode) fUgliSteelPlnNode->DecrementRef();
00041    // if (fGeoSteelPlnNode) fGeoSteelPlnNode->DecrementRef();
00042 }
00043 
00044 //_____________________________________________________________________________
00045 UgliSteelPlnHandle::UgliSteelPlnHandle(UgliSteelPlnNode* node)
00046   : UgliPlnHandle(node), fUgliSteelPlnNode(node), fGeoSteelPlnNode(0)
00047 {
00048    // ctor keeps reference count up-to-date
00049    // done by super-class UgliPlnHandle
00050    // don't do it here or we'll get two counts for every handle
00051 
00052    // if (fUgliSteelPlnNode) fUgliSteelPlnNode->IncrementRef();
00053    // if (fGeoSteelPlnNode) fGeoSteelPlnNode->IncrementRef();
00054 }
00055 
00056 //_____________________________________________________________________________
00057 UgliSteelPlnHandle::UgliSteelPlnHandle(GeoSteelPlnNode* node)
00058   : UgliPlnHandle(node), fUgliSteelPlnNode(0), fGeoSteelPlnNode(node)
00059 {
00060    // ctor keeps reference count up-to-date
00061    // done by super-class UgliPlnHandle
00062    // don't do it here or we'll get two counts for every handle
00063 
00064    // if (fUgliSteelPlnNode) fUgliSteelPlnNode->IncrementRef();
00065    // if (fGeoSteelPlnNode) fGeoSteelPlnNode->IncrementRef();
00066 }
00067 
00068 //_____________________________________________________________________________
00069 UgliSteelPlnHandle::UgliSteelPlnHandle(const UgliSteelPlnHandle &that)
00070    : UgliPlnHandle(that),
00071      UgliSteelPlnABC(),
00072      fUgliSteelPlnNode(that.fUgliSteelPlnNode),
00073      fGeoSteelPlnNode(that.fGeoSteelPlnNode)
00074 {
00075    // copy constructor keeps reference counts up-to-date
00076    // done by super-class UgliPlnHandle
00077    // don't do it here or we'll get two counts for every handle
00078 
00079    // if (fUgliSteelPlnNode) fUgliSteelPlnNode->IncrementRef();
00080    // if (fGeoSteelPlnNode) fGeoSteelPlnNode->IncrementRef();
00081 }
00082 
00083 //_____________________________________________________________________________
00084 UgliSteelPlnHandle&  UgliSteelPlnHandle::operator=(const UgliSteelPlnHandle& that)
00085 {
00086    // assignment keeps reference counts up-to-date
00087    // done by super-class UgliPlnHandle
00088    // don't do it here or we'll get two counts for every handle
00089    
00090    // if (fUgliSteelPlnNode) fUgliSteelPlnNode->DecrementRef();
00091    // fUgliSteelPlnNode = that.fUgliSteelPlnNode;
00092    // if (fUgliSteelPlnNode) fUgliSteelPlnNode->IncrementRef();
00093 
00094    if ( this != &that ) {
00095      UgliPlnHandle::operator=(that);
00096      fUgliSteelPlnNode = that.fUgliSteelPlnNode;
00097      //fUgliPlnNode      = that.fUgliPlnNode; // redundant? s.k.3/16/05
00098      fGeoSteelPlnNode = that.fGeoSteelPlnNode;
00099    }
00100    return *this;
00101 }
00102 
00103 //_____________________________________________________________________________
00104 TVector3 UgliSteelPlnHandle::GlobalToLocal(const TVector3& global,
00105                                            const Bool_t globalInXYZ) const
00106 {
00107   // convert a global position into a local (volume) one
00108   // globalInXYZ determines whether result is in XYZ or UVZ
00109   TVector3 globalXYZ = (globalInXYZ) ? 
00110       global : Ugli::uvz2xyz(GetPlexPlaneId().GetDetector(),global);
00111 
00112   if (!IsGeo())
00113       return fUgliSteelPlnNode->GlobalToLocal(global);
00114   else {
00115       TVector3 scaledglobal(global); scaledglobal *= 1./Munits::cm;
00116       return (fGeoSteelPlnNode->GlobalToLocal(scaledglobal)*Munits::cm); 
00117   }
00118 }
00119 
00120 //_____________________________________________________________________________
00121 TVector3 UgliSteelPlnHandle::LocalToGlobal(const TVector3& local,
00122                                            const Bool_t globalInXYZ) const
00123 {
00124   // convert a local (volume) position into a global one
00125   // globalInXYZ determines whether result is in XYZ or UVZ
00126   TVector3 globalXYZ;
00127   if (!IsGeo())
00128       globalXYZ = fUgliSteelPlnNode->LocalToGlobal(local); 
00129   else {
00130       TVector3 scaledlocal(local); scaledlocal *= 1./Munits::cm;
00131       globalXYZ = (fGeoSteelPlnNode->LocalToGlobal(scaledlocal)*Munits::cm); 
00132   }
00133 
00134   if (globalInXYZ ) return globalXYZ;
00135   else              return Ugli::xyz2uvz(GetPlexPlaneId().GetDetector(),
00136                                          globalXYZ);
00137 }
00138 
00139 //_____________________________________________________________________________
00140 TVector3 UgliSteelPlnHandle::GlobalToLocalVect(const TVector3& global,
00141                                                const Bool_t globalInXYZ) const
00142 {
00143   // convert a global direction vector into a local (volume) one
00144   // globalInXYZ determines whether result is in XYZ or UVZ
00145   TVector3 globalXYZ = (globalInXYZ) ? 
00146       global : Ugli::uvz2xyz(GetPlexPlaneId().GetDetector(),global);
00147 
00148   if (!IsGeo())
00149       return fUgliSteelPlnNode->GlobalToLocalVect(global);
00150   else {
00151       TVector3 scaledglobal(global); scaledglobal *= 1./Munits::cm;
00152       return (fGeoSteelPlnNode->GlobalToLocalVect(scaledglobal)*Munits::cm); 
00153   }
00154 }
00155 
00156 //_____________________________________________________________________________
00157 TVector3 UgliSteelPlnHandle::LocalToGlobalVect(const TVector3& local,
00158                                                const Bool_t globalInXYZ) const
00159 {
00160   // convert a local (volume) direction into a global one
00161   // globalInXYZ determines whether result is in XYZ or UVZ
00162   TVector3 globalXYZ;
00163   if (!IsGeo())
00164       globalXYZ = fUgliSteelPlnNode->LocalToGlobalVect(local); 
00165   else {
00166       TVector3 scaledlocal(local); scaledlocal *= 1./Munits::cm;
00167       globalXYZ = (fGeoSteelPlnNode->LocalToGlobalVect(scaledlocal)*Munits::cm); 
00168   }
00169 
00170   if (globalInXYZ ) return globalXYZ;
00171   else              return Ugli::xyz2uvz(GetPlexPlaneId().GetDetector(),
00172                                          globalXYZ);
00173 }
00174 
00175 //_____________________________________________________________________________

Generated on Mon Feb 15 11:07:49 2010 for loon by  doxygen 1.3.9.1