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

UgliScintMdlHandle.cxx

Go to the documentation of this file.
00001 
00002 // $Id: UgliScintMdlHandle.cxx,v 1.8 2005/09/01 08:07:08 rhatcher Exp $
00003 //
00004 // UgliScintMdlHandle
00005 //
00006 // UgliScintMdlHandle is handle to a single module
00007 //
00008 // Author:  R. Hatcher 2001.10.10
00009 //
00011 
00012 #include "UgliGeometry/UgliScintMdlHandle.h"
00013 #include "UgliGeometry/UgliScintMdlNode.h"
00014 #include "GeoGeometry/GeoScintMdlNode.h"
00015 //#include "UgliGeometry/UgliGeometry.h"
00016 
00017 #include "MessageService/MsgService.h"
00018 CVSID("$Id: UgliScintMdlHandle.cxx,v 1.8 2005/09/01 08:07:08 rhatcher Exp $");
00019 
00020 #include <cassert>
00021 
00022 ClassImp(UgliScintMdlHandle)
00023 
00024 //_____________________________________________________________________________
00025 UgliScintMdlHandle::UgliScintMdlHandle()
00026   : fUgliScintMdlNode(0),fGeoScintMdlNode(0)
00027 {
00028    // Default constructor
00029 
00030    MSG("Ugli",Msg::kFatal) <<
00031       "UgliScintMdlHandle created by default ctor" << endl;
00032 //   assert(0);
00033 }
00034 
00035 //_____________________________________________________________________________
00036 UgliScintMdlHandle::~UgliScintMdlHandle()
00037 {
00038    // handle deletion updates reference count
00039    if (fUgliScintMdlNode) fUgliScintMdlNode->DecrementRef();
00040    if (fGeoScintMdlNode) fGeoScintMdlNode->DecrementRef();
00041 }
00042 
00043 //_____________________________________________________________________________
00044 UgliScintMdlHandle::UgliScintMdlHandle(UgliScintMdlNode* node)
00045   : fUgliScintMdlNode(node),fGeoScintMdlNode(0)
00046 {
00047    // ctor keeps reference count up-to-date
00048  
00049    if (fUgliScintMdlNode) fUgliScintMdlNode->IncrementRef();
00050 }
00051 
00052 //_____________________________________________________________________________
00053 UgliScintMdlHandle::UgliScintMdlHandle(GeoScintMdlNode* node)
00054   : fUgliScintMdlNode(0),fGeoScintMdlNode(node)
00055 {
00056    // ctor keeps reference count up-to-date
00057 
00058    if (fGeoScintMdlNode) fGeoScintMdlNode->IncrementRef();
00059 }
00060 
00061 
00062 //_____________________________________________________________________________
00063 UgliScintMdlHandle::UgliScintMdlHandle(const UgliScintMdlHandle &that)
00064    : UgliScintMdlABC(), 
00065      fUgliScintMdlNode(that.fUgliScintMdlNode),
00066      fGeoScintMdlNode(that.fGeoScintMdlNode)
00067 {
00068    // copy constructor keeps reference counts up-to-date
00069 
00070    if (fUgliScintMdlNode) fUgliScintMdlNode->IncrementRef();
00071    if (fGeoScintMdlNode) fGeoScintMdlNode->IncrementRef();
00072 }
00073 
00074 //_____________________________________________________________________________
00075 UgliScintMdlHandle&  UgliScintMdlHandle::operator=(const UgliScintMdlHandle& that)
00076 {
00077    // assignment keeps reference counts up-to-date
00078 
00079    if (fUgliScintMdlNode) fUgliScintMdlNode->DecrementRef();
00080    if (fGeoScintMdlNode) fGeoScintMdlNode->DecrementRef();
00081 
00082    fUgliScintMdlNode = that.fUgliScintMdlNode;
00083    fGeoScintMdlNode = that.fGeoScintMdlNode;
00084 
00085    if (fUgliScintMdlNode) fUgliScintMdlNode->IncrementRef();
00086    if (fGeoScintMdlNode) fGeoScintMdlNode->IncrementRef();
00087 
00088    return *this;
00089 }
00090 
00091 //_____________________________________________________________________________
00092 // inlining this causes circular dependency
00093 
00094 //inline 
00095 UgliScintPlnHandle UgliScintMdlHandle::GetScintPlnHandle(void) const
00096 { if (!IsGeo()) 
00097     return UgliScintPlnHandle(fUgliScintMdlNode->GetScintPlnNode()); 
00098   else
00099     return UgliScintPlnHandle(fGeoScintMdlNode->GetScintPlnNode()); 
00100 }
00101 
00102 //_____________________________________________________________________________
00103 Bool_t UgliScintMdlHandle::AttemptSet(const char* what) const
00104 {
00105   if (!IsFrozen()) return true;
00106 
00107   MSG("Ugli",Msg::kError) 
00108     << "AttemptSet " << what << " on Frozen " 
00109     << GetPlexScintMdlId() << " twarted!" << endl;
00110   return false;
00111 }
00112 
00113 void UgliScintMdlHandle::SetZRotRelPlnRad(Float_t radians)
00114 {
00115   if (!AttemptSet("ZRotRelPlnRad")) return;
00116   if (!IsGeo())fUgliScintMdlNode->SetZRotRelPlnRad(radians);
00117   else fGeoScintMdlNode->SetZRotRelPlnRad(radians);
00118   
00119 }
00120 
00121 void UgliScintMdlHandle::SetLTPosRelPln(Float_t lpos, Float_t tpos)
00122 {
00123   if (!AttemptSet("LTPosRelPln")) return;
00124   if (!IsGeo())fUgliScintMdlNode->SetLTPosRelPln(lpos,tpos);
00125   else {
00126     lpos *= 1./Munits::cm;
00127     tpos *= 1./Munits::cm;
00128     fGeoScintMdlNode->SetLTPosRelPln(lpos,tpos);
00129   }
00130   
00131 }
00132 
00133 //_____________________________________________________________________________
00134 TVector3 UgliScintMdlHandle::GlobalToLocal(const TVector3& global,
00135                                            const Bool_t globalInXYZ) const
00136 {
00137   // convert a global position into a local (volume) one
00138   // globalInXYZ determines whether result is in XYZ or UVZ
00139   TVector3 globalXYZ = (globalInXYZ) ? 
00140       global : Ugli::uvz2xyz(GetPlexScintMdlId().GetDetector(),global);
00141 
00142   if ( !IsGeo() ) 
00143       return fUgliScintMdlNode->GlobalToLocal(globalXYZ);
00144   else { 
00145       TVector3 scaledglobal(globalXYZ); scaledglobal *= 1./Munits::cm;
00146       return (fGeoScintMdlNode->GlobalToLocal(scaledglobal) *= Munits::cm); 
00147   } 
00148 }
00149 
00150 //_____________________________________________________________________________
00151 TVector3 UgliScintMdlHandle::LocalToGlobal(const TVector3& local,
00152                                            const Bool_t globalInXYZ) const
00153 {
00154   // convert a global position into a local (volume) one
00155   // globalInXYZ determines whether result is in XYZ or UVZ
00156   TVector3 globalXYZ;
00157   if ( !IsGeo() ) 
00158       globalXYZ = fUgliScintMdlNode->LocalToGlobal(local);
00159   else { 
00160       TVector3 scaledlocal(local); scaledlocal *= 1./Munits::cm; 
00161       globalXYZ = (fGeoScintMdlNode ->LocalToGlobal(scaledlocal) *= Munits::cm);
00162   }
00163 
00164   if (globalInXYZ ) return globalXYZ;
00165   else              return Ugli::xyz2uvz(GetPlexScintMdlId().GetDetector(),
00166                                          globalXYZ);
00167 }
00168 
00169 //_____________________________________________________________________________
00170 

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