ROOT logo
//____________________________________________________________________
//
//
// $Id$
//
// Script I used for rapid prototyping of the FMD3 geometry - in
// particular the support cone 
//
/** @defgroup node_geom Simple geometry
    @ingroup FMD_script
*/
#include <TGeometry.h>
#include <TNode.h>
#include <TXTRU.h>
#include <TTUBE.h>
#include <TTUBS.h>
#include <TPCON.h>
#include <TBRIK.h>
#include <TCanvas.h>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>

//____________________________________________________________________
/** @brief A 2D point
    @ingroup node_geom
 */
struct point_t
{
  point_t(double x=0, double y=0) : first(x), second(y) {}
  double first;
  double second;
};

//____________________________________________________________________
/** @brief Shape of a ring
    @ingroup node_geom
 */
struct Ring 
{
  // typedef std::pair<double,double> point_t;
  typedef std::vector<point_t>     points_t;
  /** Constructor 
      @param rL         Lower radius
      @param rH         Higer radius
      @param theta      Opening angle
      @param waferR     Wafer radius
      @param siThick    Silicon thickness 
      @param staggering Staggering of modules */
  Ring(double rL, double rH, double theta,  double waferR, 
       double siThick, double staggering)
    : fStaggering(staggering),
      fInnerRadius(rL), 
      fOuterRadius(rH), 
      fAngle(theta), 
      fRadius(waferR),
      fThickness(siThick), 
      fVerticies(6)
  {
    double tan_theta  = tan(fAngle * TMath::Pi() / 180.);
    double tan_theta2 = pow(tan_theta,2);
    double r2         = pow(fRadius,2);
    double ir2        = pow(fInnerRadius,2);
    double or2        = pow(fOuterRadius,2);
    double y_A        = tan_theta * fInnerRadius;
    double x_D        = fInnerRadius + sqrt(r2 - tan_theta2 * ir2);
    double x_D2       = pow(x_D,2);
    double y_B        = sqrt(r2 - or2 + 2 * fOuterRadius * x_D - x_D2);
    double x_C        = ((x_D + sqrt(-tan_theta2 * x_D2 
				     + r2 * (1 + tan_theta2))) 
			 / (1 + tan_theta2));
    double y_C        = tan_theta * x_C;
    
    fVerticies[0] = point_t(fInnerRadius,  y_A);
    fVerticies[1] = point_t(x_C,           y_C);
    fVerticies[2] = point_t(fOuterRadius,  y_B);
    fVerticies[3] = point_t(fOuterRadius, -y_B);
    fVerticies[4] = point_t(x_C,          -y_C);
    fVerticies[5] = point_t(fInnerRadius, -y_A);
  }
  /** Destructor */
  virtual ~Ring() 
  {
    fVerticies.clear();
  }
  /** Create a shape 
      @return pointer to new shape  */
  TShape* CreateShape()
  {
    std::cout << "Creating Module shape" << std::flush;
    TXTRU* moduleShape = new TXTRU("Module","Module", "", 6, 2);
    for (Int_t i = 0; i  < 6; i++) {
      std::cout << "." << std::flush;
      point_t& p = fVerticies[i];
      moduleShape->DefineVertex(i, p.first, p.second);
    }
    moduleShape->DefineSection(0, -fThickness/2, 1, 0, 0);
    moduleShape->DefineSection(1,  fThickness/2, 1, 0, 0);
    std::cout << std::endl;
    return (TShape*)moduleShape;
  }
  /** Create a node that represents a ring. 
      @return Node */
  TNode* CreateRing(const char* name, double z) 
  {
    std::cout << "Creating Ring node for " << name << std::flush;
    double bredth = fStaggering + fThickness;
    TShape* ringShape   = new TTUBE(Form("%sShape", name), "Ring Shape", 
				    "", fInnerRadius, 
				    fOuterRadius,bredth/2);
    TNode*  ringNode    = new TNode(Form("%sNode", name), "Ring Node", 
				    ringShape, 0, 0, z+bredth/2, 0);
    TShape* moduleShape = CreateShape();
    Int_t n = Int_t(360 / 2 / fAngle);
    for (Int_t i = 0; i < n; i++) {
      std::cout << "." << std::flush;
      ringNode->cd();
      Double_t theta  = 2  * fAngle * i;
      Double_t z      = -(bredth+fThickness)/2+(i%2?0:fStaggering);
      TRotMatrix* rot = new TRotMatrix(Form("%sRotation%02d", name, i), 
				       "Rotation", 90, theta, 90, 
				       fmod(90 + theta, 360), 0, 0);
      TNode* moduleNode = new TNode(Form("%sModule%02d", name, i), 
				    "Module", moduleShape, 0, 0, z,
				    rot);
      moduleNode->SetFillColor(2);
      moduleNode->SetLineColor(2);
      moduleNode->SetLineWidth(2);
    }
    std::cout << std::endl;
    ringNode->SetVisibility(0);
    return ringNode;
  }
  double fStaggering;
  /** Inner radius */
  double fInnerRadius;
  /** Outer radius */
  double fOuterRadius;
  /** Opening angle (in degrees) */
  double fAngle;
  /** Radius (in centimeters) */
  double fRadius;
  /** Thickness */
  double fThickness;
  /** List of verticies */
  points_t fVerticies;
};

//____________________________________________________________________
/** @brief Shape of a detector
    @ingroup node_geom
 */
struct Detector
{
  /** Constructor 
      @param id 
      @param inner 
      @param outer */
  Detector(Ring* inner, double iZ, Ring* outer=0, double oZ=0) 
    : fInner(inner), fInnerZ(iZ), fOuter(outer), fOuterZ(oZ)
  {}
  /** Destructor */
  virtual ~Detector() {}
  /** Create rings */
  virtual void CreateRings() 
  {
    if (fInner) fInner->CreateRing("inner", fInnerZ);
    if (fOuter) fOuter->CreateRing("outer", fOuterZ);
  }
  /** Create a node that represents the support */
  virtual void CreateSupport(double) { }
  /** Pointer to inner ring */
  Ring* fInner;
  /** Position in z of inner ring */ 
  double fInnerZ;
  /** Pointer to outer ring */
  Ring* fOuter;
  /** Position in z of inner ring */ 
  double fOuterZ;
};

//____________________________________________________________________
/** @brief FMD3 simple node geometry 
    @ingroup node_geom
 */
struct FMD3 : public Detector
{
  /** Constructor 
      @param inner Inner ring representation  
      @param outer Outer ring representation */
  FMD3(Ring* inner, Ring* outer)
    : Detector(inner, -62.8,outer, -75.2)
  {
    fNoseRl     = 5.5;
    fNoseRh     = 6.7;
    fNoseDz     = 2.8 / 2;
    fNoseZ      = -46;
    fConeL      = 30.9;
    fBackRl     = 61 / 2;
    fBackRh     = 66.8 /2;
    fBackDz     = 1.4 / 2;
    fBeamDz     = .5 / 2;
    fBeamW      = 6;
    fFlangeR    = 49.25;
  }
  virtual ~FMD3() {}
  void CreateRings()
  {
    double zdist      = fConeL - 2 * fBackDz - 2 * fNoseDz;
    double tdist      = fBackRh - fNoseRh;
    double alpha      = tdist / zdist;
    double x, rl, rh, z;
    z  = fNoseZ - fConeL / 2;
    TPCON* fmd3Shape = new TPCON("fmd3Shape", "FMD 3 Shape", "", 0, 360, 7);
    x  = fNoseZ;
    rl = fNoseRl;
    rh = fNoseRh;
    fmd3Shape->DefineSection(0, x - z, rl, rh);
    x  = fNoseZ-2*fNoseDz;
    fmd3Shape->DefineSection(1, x - z, rl, rh);
    x  = fInnerZ - fInner->fStaggering - fInner->fThickness; 
    rl = fInner->fInnerRadius;
    rh = fNoseRh + alpha * TMath::Abs(x-fNoseZ + 2 * fNoseDz);
    fmd3Shape->DefineSection(2, x - z, rl, rh);
    x  = fOuterZ;
    rl = fOuter->fInnerRadius;
    rh = fBackRh;
    fmd3Shape->DefineSection(3, x - z, rl, rh);
    x  = fNoseZ - zdist - 2 * fNoseDz;
    rl = fOuter->fInnerRadius;
    rh = fBackRh;
    fmd3Shape->DefineSection(4, x - z, rl, rh);
    x  = fNoseZ - zdist - 2 * fNoseDz;
    rl = fOuter->fInnerRadius;
    rh = fFlangeR;
    fmd3Shape->DefineSection(5, x - z, rl, rh);
    x  = fNoseZ - fConeL;
    rl = fOuter->fInnerRadius;
    rh = fFlangeR;
    fmd3Shape->DefineSection(6, x - z, rl, rh);

    TNode* fmd3Node = new TNode("fmd3Node", "FMD3 Node", fmd3Shape,0,0,z,0);
    fmd3Node->SetLineColor(11);
    fmd3Node->SetFillColor(11);
    fmd3Node->SetVisibility(1);
    fmd3Node->cd();
    if (fInner) fInner->CreateRing("inner", fInnerZ-z);
    fmd3Node->cd();
    if (fOuter) fOuter->CreateRing("outer", fOuterZ-z);
    fmd3Node->cd();
    CreateSupport(fNoseZ - z);
  }
  
  /** Create support volumes  */
  void CreateSupport(double noseZ) 
  {
    TShape* noseShape = new TTUBE("noseShape", "Nose Shape", "", 
				  fNoseRl, fNoseRh, fNoseDz);
    TNode*  noseNode  = new TNode("noseNode", "noseNode", noseShape, 
				  0, 0, noseZ - fNoseDz, 0);
    noseNode->SetLineColor(0);
    double  zdist = fConeL - 2 * fBackDz - 2 * fNoseDz;
    double  tdist = fBackRh - fNoseRh;
    double  beamL = TMath::Sqrt(zdist * zdist + tdist * tdist);
    double  theta = -TMath::ATan2(tdist, zdist);
    TShape* backShape = new TTUBE("backShape", "Back Shape", "", 
				  fBackRl, fBackRh, fBackDz);
    TNode*  backNode  = new TNode("backNode", "backNode", backShape, 
				  0, 0, noseZ-2*fNoseDz-zdist-fBackDz, 0);
    backNode->SetLineColor(0);
    TShape* beamShape = new TBRIK("beamShape", "beamShape", "", 
				  fBeamDz, fBeamW / 2 , beamL / 2);
    Int_t    n = 8;
    Double_t r = fNoseRl + tdist / 2;
    for (Int_t i = 0; i < n; i++) {
      Double_t phi   = 360. / n * i;
      Double_t t     = 180. * theta / TMath::Pi();
      TRotMatrix* beamRotation = new TRotMatrix(Form("beamRotation%d", i), 
						Form("beamRotation%d", i),
						180-t,phi,90,90+phi,t,phi);
      TNode* beamNode = new TNode(Form("beamNode%d", i), 
				  Form("beamNode%d", i), beamShape, 
				  r * TMath::Cos(phi / 180 * TMath::Pi()), 
				  r * TMath::Sin(phi / 180 * TMath::Pi()), 
				  noseZ-2*fNoseDz-zdist/2, beamRotation);
      beamNode->SetLineColor(0);
    }
    Double_t flangel    = (fFlangeR - fBackRh) / 2;
    TShape* flangeShape = new TBRIK("flangeShape", "FlangeShape", "", 
				    flangel, fBeamW / 2, fBackDz);
    n = 4;
    r = fBackRh + flangel;
    for (Int_t i = 0; i < n; i++) {
      Double_t phi = 360. / n * i + 180. / n;
      TRotMatrix* flangeRotation = new TRotMatrix(Form("flangeRotation%d", i),
						  Form("Flange Rotation %d",i),
						  90,phi,90,90+phi,0,0);
      TNode* flangeNode = new TNode(Form("flangeNode%d", i), 
				    Form("flangeNode%d", i), 
				    flangeShape,
				    r * TMath::Cos(phi / 180 * TMath::Pi()), 
				    r * TMath::Sin(phi / 180 * TMath::Pi()),
				    noseZ-2*fNoseDz-zdist-fBackDz, 
				    flangeRotation);
      flangeNode->SetLineColor(0);
				  
    }
  }
  /** Nose inner radius */
  double  fNoseRl;
  /** Nose outer radius */
  double  fNoseRh;
  /** Nose depth */
  double  fNoseDz;
  /** Nose start position */
  double  fNoseZ;
  /** Length of whole support structure */
  double  fConeL;
  /** Inner radius of back ring */
  double  fBackRl;
  /** Outer radius of back ring */
  double  fBackRh;
  /** Thickness of back ring */
  double  fBackDz;
  /** Thickness of beams */
  double  fBeamDz;
  /** Width of beams */
  double  fBeamW;
  /** Ending radius of flanges */
  double  fFlangeR;
};

//____________________________________________________________________
/** @brief Create a node geometry 
    @ingroup node_geom
    @code 
    .x NodeGeometry.C++
    @endcode 
 */
void
NodeGeometry() 
{
  TGeometry* geometry = new TGeometry("geometry","geometry");
  TShape* topShape = new TBRIK("topShape", "topShape", "", 40, 40, 150);
  TNode* topNode = new TNode("topNode", "topNode", topShape, 0, 0, 0, 0);
  topNode->SetVisibility(0);
  topNode->cd();
  
  Ring inner( 4.3, 17.2, 18, 13.4 / 2, .03, 1);
  Ring outer(15.6, 28.0,  9, 13.4 / 2, .03, 1);
  FMD3 fmd3(&inner, &outer);
  fmd3.CreateRings();
  
  TCanvas* c = new TCanvas("c", "c", 800, 800);
  c->SetFillColor(1);
  geometry->Draw();
  // c->x3d("ogl");
}
//____________________________________________________________________
//
// EOF
//
 NodeGeometry.C:1
 NodeGeometry.C:2
 NodeGeometry.C:3
 NodeGeometry.C:4
 NodeGeometry.C:5
 NodeGeometry.C:6
 NodeGeometry.C:7
 NodeGeometry.C:8
 NodeGeometry.C:9
 NodeGeometry.C:10
 NodeGeometry.C:11
 NodeGeometry.C:12
 NodeGeometry.C:13
 NodeGeometry.C:14
 NodeGeometry.C:15
 NodeGeometry.C:16
 NodeGeometry.C:17
 NodeGeometry.C:18
 NodeGeometry.C:19
 NodeGeometry.C:20
 NodeGeometry.C:21
 NodeGeometry.C:22
 NodeGeometry.C:23
 NodeGeometry.C:24
 NodeGeometry.C:25
 NodeGeometry.C:26
 NodeGeometry.C:27
 NodeGeometry.C:28
 NodeGeometry.C:29
 NodeGeometry.C:30
 NodeGeometry.C:31
 NodeGeometry.C:32
 NodeGeometry.C:33
 NodeGeometry.C:34
 NodeGeometry.C:35
 NodeGeometry.C:36
 NodeGeometry.C:37
 NodeGeometry.C:38
 NodeGeometry.C:39
 NodeGeometry.C:40
 NodeGeometry.C:41
 NodeGeometry.C:42
 NodeGeometry.C:43
 NodeGeometry.C:44
 NodeGeometry.C:45
 NodeGeometry.C:46
 NodeGeometry.C:47
 NodeGeometry.C:48
 NodeGeometry.C:49
 NodeGeometry.C:50
 NodeGeometry.C:51
 NodeGeometry.C:52
 NodeGeometry.C:53
 NodeGeometry.C:54
 NodeGeometry.C:55
 NodeGeometry.C:56
 NodeGeometry.C:57
 NodeGeometry.C:58
 NodeGeometry.C:59
 NodeGeometry.C:60
 NodeGeometry.C:61
 NodeGeometry.C:62
 NodeGeometry.C:63
 NodeGeometry.C:64
 NodeGeometry.C:65
 NodeGeometry.C:66
 NodeGeometry.C:67
 NodeGeometry.C:68
 NodeGeometry.C:69
 NodeGeometry.C:70
 NodeGeometry.C:71
 NodeGeometry.C:72
 NodeGeometry.C:73
 NodeGeometry.C:74
 NodeGeometry.C:75
 NodeGeometry.C:76
 NodeGeometry.C:77
 NodeGeometry.C:78
 NodeGeometry.C:79
 NodeGeometry.C:80
 NodeGeometry.C:81
 NodeGeometry.C:82
 NodeGeometry.C:83
 NodeGeometry.C:84
 NodeGeometry.C:85
 NodeGeometry.C:86
 NodeGeometry.C:87
 NodeGeometry.C:88
 NodeGeometry.C:89
 NodeGeometry.C:90
 NodeGeometry.C:91
 NodeGeometry.C:92
 NodeGeometry.C:93
 NodeGeometry.C:94
 NodeGeometry.C:95
 NodeGeometry.C:96
 NodeGeometry.C:97
 NodeGeometry.C:98
 NodeGeometry.C:99
 NodeGeometry.C:100
 NodeGeometry.C:101
 NodeGeometry.C:102
 NodeGeometry.C:103
 NodeGeometry.C:104
 NodeGeometry.C:105
 NodeGeometry.C:106
 NodeGeometry.C:107
 NodeGeometry.C:108
 NodeGeometry.C:109
 NodeGeometry.C:110
 NodeGeometry.C:111
 NodeGeometry.C:112
 NodeGeometry.C:113
 NodeGeometry.C:114
 NodeGeometry.C:115
 NodeGeometry.C:116
 NodeGeometry.C:117
 NodeGeometry.C:118
 NodeGeometry.C:119
 NodeGeometry.C:120
 NodeGeometry.C:121
 NodeGeometry.C:122
 NodeGeometry.C:123
 NodeGeometry.C:124
 NodeGeometry.C:125
 NodeGeometry.C:126
 NodeGeometry.C:127
 NodeGeometry.C:128
 NodeGeometry.C:129
 NodeGeometry.C:130
 NodeGeometry.C:131
 NodeGeometry.C:132
 NodeGeometry.C:133
 NodeGeometry.C:134
 NodeGeometry.C:135
 NodeGeometry.C:136
 NodeGeometry.C:137
 NodeGeometry.C:138
 NodeGeometry.C:139
 NodeGeometry.C:140
 NodeGeometry.C:141
 NodeGeometry.C:142
 NodeGeometry.C:143
 NodeGeometry.C:144
 NodeGeometry.C:145
 NodeGeometry.C:146
 NodeGeometry.C:147
 NodeGeometry.C:148
 NodeGeometry.C:149
 NodeGeometry.C:150
 NodeGeometry.C:151
 NodeGeometry.C:152
 NodeGeometry.C:153
 NodeGeometry.C:154
 NodeGeometry.C:155
 NodeGeometry.C:156
 NodeGeometry.C:157
 NodeGeometry.C:158
 NodeGeometry.C:159
 NodeGeometry.C:160
 NodeGeometry.C:161
 NodeGeometry.C:162
 NodeGeometry.C:163
 NodeGeometry.C:164
 NodeGeometry.C:165
 NodeGeometry.C:166
 NodeGeometry.C:167
 NodeGeometry.C:168
 NodeGeometry.C:169
 NodeGeometry.C:170
 NodeGeometry.C:171
 NodeGeometry.C:172
 NodeGeometry.C:173
 NodeGeometry.C:174
 NodeGeometry.C:175
 NodeGeometry.C:176
 NodeGeometry.C:177
 NodeGeometry.C:178
 NodeGeometry.C:179
 NodeGeometry.C:180
 NodeGeometry.C:181
 NodeGeometry.C:182
 NodeGeometry.C:183
 NodeGeometry.C:184
 NodeGeometry.C:185
 NodeGeometry.C:186
 NodeGeometry.C:187
 NodeGeometry.C:188
 NodeGeometry.C:189
 NodeGeometry.C:190
 NodeGeometry.C:191
 NodeGeometry.C:192
 NodeGeometry.C:193
 NodeGeometry.C:194
 NodeGeometry.C:195
 NodeGeometry.C:196
 NodeGeometry.C:197
 NodeGeometry.C:198
 NodeGeometry.C:199
 NodeGeometry.C:200
 NodeGeometry.C:201
 NodeGeometry.C:202
 NodeGeometry.C:203
 NodeGeometry.C:204
 NodeGeometry.C:205
 NodeGeometry.C:206
 NodeGeometry.C:207
 NodeGeometry.C:208
 NodeGeometry.C:209
 NodeGeometry.C:210
 NodeGeometry.C:211
 NodeGeometry.C:212
 NodeGeometry.C:213
 NodeGeometry.C:214
 NodeGeometry.C:215
 NodeGeometry.C:216
 NodeGeometry.C:217
 NodeGeometry.C:218
 NodeGeometry.C:219
 NodeGeometry.C:220
 NodeGeometry.C:221
 NodeGeometry.C:222
 NodeGeometry.C:223
 NodeGeometry.C:224
 NodeGeometry.C:225
 NodeGeometry.C:226
 NodeGeometry.C:227
 NodeGeometry.C:228
 NodeGeometry.C:229
 NodeGeometry.C:230
 NodeGeometry.C:231
 NodeGeometry.C:232
 NodeGeometry.C:233
 NodeGeometry.C:234
 NodeGeometry.C:235
 NodeGeometry.C:236
 NodeGeometry.C:237
 NodeGeometry.C:238
 NodeGeometry.C:239
 NodeGeometry.C:240
 NodeGeometry.C:241
 NodeGeometry.C:242
 NodeGeometry.C:243
 NodeGeometry.C:244
 NodeGeometry.C:245
 NodeGeometry.C:246
 NodeGeometry.C:247
 NodeGeometry.C:248
 NodeGeometry.C:249
 NodeGeometry.C:250
 NodeGeometry.C:251
 NodeGeometry.C:252
 NodeGeometry.C:253
 NodeGeometry.C:254
 NodeGeometry.C:255
 NodeGeometry.C:256
 NodeGeometry.C:257
 NodeGeometry.C:258
 NodeGeometry.C:259
 NodeGeometry.C:260
 NodeGeometry.C:261
 NodeGeometry.C:262
 NodeGeometry.C:263
 NodeGeometry.C:264
 NodeGeometry.C:265
 NodeGeometry.C:266
 NodeGeometry.C:267
 NodeGeometry.C:268
 NodeGeometry.C:269
 NodeGeometry.C:270
 NodeGeometry.C:271
 NodeGeometry.C:272
 NodeGeometry.C:273
 NodeGeometry.C:274
 NodeGeometry.C:275
 NodeGeometry.C:276
 NodeGeometry.C:277
 NodeGeometry.C:278
 NodeGeometry.C:279
 NodeGeometry.C:280
 NodeGeometry.C:281
 NodeGeometry.C:282
 NodeGeometry.C:283
 NodeGeometry.C:284
 NodeGeometry.C:285
 NodeGeometry.C:286
 NodeGeometry.C:287
 NodeGeometry.C:288
 NodeGeometry.C:289
 NodeGeometry.C:290
 NodeGeometry.C:291
 NodeGeometry.C:292
 NodeGeometry.C:293
 NodeGeometry.C:294
 NodeGeometry.C:295
 NodeGeometry.C:296
 NodeGeometry.C:297
 NodeGeometry.C:298
 NodeGeometry.C:299
 NodeGeometry.C:300
 NodeGeometry.C:301
 NodeGeometry.C:302
 NodeGeometry.C:303
 NodeGeometry.C:304
 NodeGeometry.C:305
 NodeGeometry.C:306
 NodeGeometry.C:307
 NodeGeometry.C:308
 NodeGeometry.C:309
 NodeGeometry.C:310
 NodeGeometry.C:311
 NodeGeometry.C:312
 NodeGeometry.C:313
 NodeGeometry.C:314
 NodeGeometry.C:315
 NodeGeometry.C:316
 NodeGeometry.C:317
 NodeGeometry.C:318
 NodeGeometry.C:319
 NodeGeometry.C:320
 NodeGeometry.C:321
 NodeGeometry.C:322
 NodeGeometry.C:323
 NodeGeometry.C:324
 NodeGeometry.C:325
 NodeGeometry.C:326
 NodeGeometry.C:327
 NodeGeometry.C:328
 NodeGeometry.C:329
 NodeGeometry.C:330
 NodeGeometry.C:331
 NodeGeometry.C:332
 NodeGeometry.C:333
 NodeGeometry.C:334
 NodeGeometry.C:335
 NodeGeometry.C:336
 NodeGeometry.C:337
 NodeGeometry.C:338
 NodeGeometry.C:339
 NodeGeometry.C:340
 NodeGeometry.C:341
 NodeGeometry.C:342
 NodeGeometry.C:343
 NodeGeometry.C:344
 NodeGeometry.C:345
 NodeGeometry.C:346
 NodeGeometry.C:347
 NodeGeometry.C:348
 NodeGeometry.C:349
 NodeGeometry.C:350
 NodeGeometry.C:351
 NodeGeometry.C:352
 NodeGeometry.C:353
 NodeGeometry.C:354
 NodeGeometry.C:355
 NodeGeometry.C:356
 NodeGeometry.C:357
 NodeGeometry.C:358
 NodeGeometry.C:359
 NodeGeometry.C:360
 NodeGeometry.C:361
 NodeGeometry.C:362
 NodeGeometry.C:363
 NodeGeometry.C:364