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

UgliPlnNode.cxx

Go to the documentation of this file.
00001 
00002 // $Id: UgliPlnNode.cxx,v 1.4 2003/10/29 19:28:02 rhatcher Exp $
00003 //
00004 // UgliPlnNode
00005 //
00006 // UgliPlnNode is a plane node
00007 //
00008 // Author:  R. Hatcher 2000.11.15
00009 //
00011 
00012 #include "UgliGeometry/UgliPlnNode.h"
00013 
00014 #include "UgliGeometry/UgliGeometry.h"
00015 #include "UgliGeometry/TGeometryX.h"
00016 
00017 #include "TBRIK.h"
00018 #include "TXTRU.h"
00019 
00020 #include "MessageService/MsgService.h"
00021 CVSID("$Id: UgliPlnNode.cxx,v 1.4 2003/10/29 19:28:02 rhatcher Exp $");
00022 
00023 #include <cassert>
00024 
00025 ClassImp(UgliPlnNode)
00026 
00027 //_____________________________________________________________________________
00028 UgliPlnNode::UgliPlnNode()
00029   : fUgliGeometry(0)
00030 {
00031    // Default constructor (for i/o)
00032 }
00033 
00034 //_____________________________________________________________________________
00035 UgliPlnNode::UgliPlnNode(UgliGeometry *ugliGeometry,
00036                          const PlexPlaneId& planeid)
00037    : TNodeX(planeid.AsString("p"),planeid.AsString("p"),"noshape"),
00038      fUgliGeometry(ugliGeometry), fPlaneId(planeid)
00039 {
00040 
00041 }
00042 
00043 //_____________________________________________________________________________
00044 UgliPlnNode::~UgliPlnNode()
00045 {
00046    // destructor should delete any owned objects
00047    if (CountRef()) {
00048       MSG("Ugli",Msg::kWarning)
00049         << "~UgliPlnNode " << GetPlexPlaneId()
00050         << " still had " << CountRef()
00051         << " outstanding references " << endl;
00052    }
00053 }
00054 
00055 //_____________________________________________________________________________
00056 
00057 void UgliPlnNode::IncrementRef()
00058 {
00059    fRef++; 
00060    fUgliGeometry->IncrementRef();
00061    SetVisibility(1);
00062 }
00063 
00064 void UgliPlnNode::DecrementRef()
00065 { 
00066    fRef--; 
00067    fUgliGeometry->DecrementRef();
00068    if (!fRef) SetVisibility(0);
00069 }
00070 
00071 //_____________________________________________________________________________
00072 Float_t UgliPlnNode::GetHalfThickness() const
00073 {
00074 
00075    TBRIK *brik = dynamic_cast<TBRIK*>(fShape);
00076    if (brik) return brik->GetDz();
00077 
00078    TXTRU *xtru = dynamic_cast<TXTRU*>(fShape);
00079    if (xtru) {
00080       Int_t    nz = xtru->GetNz();
00081       Float_t* fz = xtru->GetZ();
00082       return 0.5*TMath::Abs(fz[0]-fz[nz-1]);
00083    }
00084 
00085    MSG("Ugli",Msg::kError) <<
00086       "UgliPlnNode::GetHalfThickness: not a BRIK or TXTRU" << endl;
00087 
00088    return 0;
00089 }
00090 
00091 //_____________________________________________________________________________
00092 void UgliPlnNode::TransformLocal2Global(Double_t *lxyz, Double_t *gxyz) const
00093 {
00094    // deal with fact that TNode::Master2Local isn't declared const
00095    UgliPlnNode* self = const_cast<UgliPlnNode*>(this);
00096    self->cd();
00097    self->UpdateMatrix();
00098    self->Local2Master(lxyz,gxyz);
00099 }
00100 
00101 //_____________________________________________________________________________
00102 TVector3 UgliPlnNode::GetCenter() const
00103 {
00104    Double_t lxyz[3] = {0., 0., 0.};
00105    Double_t gxyz[3];
00106 
00107    TransformLocal2Global(lxyz,gxyz);
00108    return TVector3(gxyz[0],gxyz[1],gxyz[2]);
00109 }
00110 
00111 //_____________________________________________________________________________
00112 Float_t UgliPlnNode::GetX0() const
00113 {
00114    Double_t lxyz[3] = {0., 0., 0.};
00115    Double_t gxyz[3];
00116 
00117    TransformLocal2Global(lxyz,gxyz);
00118    return gxyz[0];
00119 }
00120 
00121 //_____________________________________________________________________________
00122 Float_t UgliPlnNode::GetY0() const
00123 {
00124    Double_t lxyz[3] = {0., 0., 0.};
00125    Double_t gxyz[3];
00126 
00127    TransformLocal2Global(lxyz,gxyz);
00128    return gxyz[1];
00129 }
00130 
00131 //_____________________________________________________________________________
00132 Float_t UgliPlnNode::GetZ0() const
00133 {
00134    Double_t lxyz[3] = {0., 0., 0.};
00135    Double_t gxyz[3];
00136 
00137    TransformLocal2Global(lxyz,gxyz);
00138    return gxyz[2];
00139 }
00140 
00141 //_____________________________________________________________________________

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