#include <GeoStripNode.h>
Inheritance diagram for GeoStripNode:

Public Member Functions | |
| GeoStripNode () | |
| virtual | ~GeoStripNode () |
| virtual PlexStripEndId | GetSEId () const |
| GeoStripVolume * | GetStripVolume () const |
| virtual Float_t | GetLPosRelMdl () const |
| virtual Float_t | GetTPosRelMdl () const |
| virtual Float_t | GetZRotRelMdlRad () const |
| GeoScintMdlNode * | GetScintMdlNode (void) const |
| GeoScintPlnNode * | GetScintPlnNode (void) const |
| virtual Float_t | GetHalfLength () const |
| virtual Float_t | GetHalfThickness () const |
| virtual Float_t | GetHalfWidth () const |
| virtual Float_t | PartialLength (StripEnd::StripEnd_t end) const |
| virtual Float_t | WlsBypass () const |
| virtual Float_t | WlsPigtail (StripEnd::StripEnd_t end) const |
| virtual Bool_t | IsMirrored (StripEnd::StripEnd_t end) const |
| virtual Float_t | ClearFiber (StripEnd::StripEnd_t end) const |
| virtual TVector3 | GlobalPos (const Float_t alongLength, const Bool_t onWLS=kFALSE) const |
| virtual Float_t | GetTPos (Float_t orthCoord=999999.) const |
| virtual Float_t | DistanceAlong (const PlexStripEndId &orthogonalStrip) const |
| virtual TVector3 | Intersection (const PlexStripEndId &orthogonalStrip) const |
| virtual Float_t | TotalAttenuation (StripEnd::StripEnd_t end, const Float_t alongLength) const |
| void | SetZRotRelMdlRad (Float_t radians) |
| void | SetLTPosRelMdl (Float_t lpos, Float_t tpos) |
Protected Member Functions | |
| GeoStripNode (GeoGeometry *geom, TGeoVolume *stpvol, TGeoMatrix *stpmatrix, GeoScintMdlNode *mdlNode, std::string nodename, const PlexStripEndId &seid) | |
Private Member Functions | |
| GeoStripNode (const GeoStripNode &that) | |
| GeoStripNode & | operator= (const GeoStripNode &that) |
Private Attributes | |
| PlexStripEndId | fStripEndId |
| GeoScintMdlNode * | fScintMdlNode |
Friends | |
| class | UgliStripHandle |
| class | GeoGeometry |
|
|
Definition at line 34 of file GeoStripNode.h. References fScintMdlNode. 00034 : fScintMdlNode(0) {} // default constructor for i/o
|
|
|
Definition at line 44 of file GeoStripNode.cxx. References GeoRefCnt::CountRef(), GetSEId(), MSG, and GeoNode::UpdateGlobalManager(). 00044 {
00045 // Destructor should delete any owned objects
00046
00047 UpdateGlobalManager();
00048
00049 if ( CountRef() ) {
00050 MSG("Geo",Msg::kWarning)
00051 << "GeoStripNode destructor " << GetSEId()
00052 << " still had " << CountRef()
00053 << " outstanding references " << endl;
00054 }
00055 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 26 of file GeoStripNode.cxx. References GeoGeometry::UpdateGlobalManager(). 00029 : GeoNode(geom,stpvol,stpmatrix, 00030 mdlNode->GetScintMdlVolume()->GetAirNode()->GetVolume(), 00031 mdlNode->GetGlobalPath()+"/" + 00032 mdlNode->GetScintMdlVolume()->GetAirNode()->GetName() + "/" + 00033 nodename,nodename),fStripEndId(stripid),fScintMdlNode(mdlNode) { 00034 // Normal constructor 00035 // Node is constructed and added to volume parentvol with position specified 00036 // by stpmatrix. 00037 // Protected 00038 00039 UpdateGlobalManager(); 00040 00041 }
|
|
|
|
|
|
Definition at line 311 of file GeoStripNode.cxx. References StripEnd::AsString(), PlexStripEndId::AsString(), fStripEndId, GetScintMdlNode(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::ClearFiber(). 00311 {
00312 // Return clear fiber length of scint module to which this strip belongs
00313
00314 UpdateGlobalManager();
00315
00316 Float_t clearfiber = GetScintMdlNode() -> GetClearFiber(end);
00317
00318 MSG("Geo",Msg::kDebug) << "ClearFiber " << fStripEndId.AsString() << " end "
00319 << StripEnd::AsString(end)
00320 << " clearfiber " << clearfiber << endl;
00321
00322 return clearfiber;
00323
00324 }
|
|
|
Definition at line 340 of file GeoStripNode.cxx. References GeoNode::GetGeoGeometry(), GeoGeometry::GetStripNode(), GlobalPos(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::DistanceAlong(). 00341 {
00342 // Get the distance along a strip represented by the specified orthogonal
00343 // strip. Note this is relative to the strip's local coordinate system
00344 // origin.
00345 //
00346 // This strip node is expressed as a line in parametric form:
00347 // xyz(i) = base(i) + s*dir(i) for i= 0,1,2 (x,y,z)
00348 // where base is LocalToGlobal(TVector3(0,0,0))
00349 // and dir is (LocalToGlobal(TVector3(1,0,0)-base)), i.e. the
00350 // unit vector along the strip length.
00351 // The returned value is "s", the distance along the strip length
00352 // (measured from the strip local origin) defining the point on
00353 // this strip with the smallest distance to any point on the orthogonal
00354 // strip.
00355 //
00356 // The algorithm used here to determine the intersection or closest approach
00357 // of two skew lines is the same as that in R. Hatcher's UgliStripNode,
00358 // which was adapted from:
00359 // Graphic Gems, ed. Andrew S. Glassner, pg 304
00360 // ISBN 0-12-286165-5 T385.G697 (1990)
00361 //
00362
00363 UpdateGlobalManager();
00364
00365 const Double_t farAway = 1.0e25;
00366
00367 GeoStripNode* otherNode = GetGeoGeometry()->GetStripNode(orthogonalStrip);
00368
00369 if ( !otherNode ) {
00370 MSG("Geo",Msg::kError)
00371 << "GeoStripNode::DistanceAlong(), other strip "
00372 << orthogonalStrip << " does not exist." << endl;
00373 return farAway;
00374 }
00375
00376 // Define base & dir for this strip
00377 TVector3 baseThis = this -> GlobalPos(0.,false);
00378 TVector3 dirThis = this -> GlobalPos(1.,false) - baseThis;
00379
00380 // Define base & dir for the other strip
00381 TVector3 baseOther = otherNode -> GlobalPos(0.,false);
00382 TVector3 dirOther = otherNode -> GlobalPos(1.,false) - baseOther;
00383
00384 TVector3 dirCross = dirThis.Cross(dirOther);
00385 Double_t dirCrossMag2 = dirCross.Mag2();
00386 if ( dirCrossMag2 == 0.0 ) {
00387 // exactly parallel
00388 return farAway;
00389 }
00390
00391 TVector3 dp = baseOther - baseThis;
00392 TVector3 dpxv = dp.Cross(dirOther);
00393 Double_t s = dpxv.Dot(dirCross)/dirCrossMag2;
00394
00395 return s;
00396
00397 }
|
|
|
Definition at line 58 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, GetStripVolume(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::GetHalfLength(). 00058 {
00059 // Return the strip's half length (along local x)
00060
00061 UpdateGlobalManager();
00062 Float_t halflength = GetStripVolume() -> GetHalfLength();
00063
00064 MSG("Geo",Msg::kDebug) << "GetHalfLength " << fStripEndId.AsString()
00065 << " halflength " << halflength << endl;
00066
00067 return halflength;
00068
00069 }
|
|
|
Definition at line 72 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, GetStripVolume(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::GetHalfThickness(). 00072 {
00073 // Return the strip's half thickness (along local z)
00074
00075 UpdateGlobalManager();
00076
00077 Float_t halfthickness = GetStripVolume() -> GetHalfThickness();
00078 MSG("Geo",Msg::kDebug) << "GetHalfThickness " << fStripEndId.AsString()
00079 << " halfthickness " << halfthickness << endl;
00080
00081 return halfthickness;
00082
00083 }
|
|
|
Definition at line 86 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, GetStripVolume(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::GetHalfWidth(). 00086 {
00087 // Return the strip's half width (along local y)
00088
00089 UpdateGlobalManager();
00090
00091 Float_t halfwidth = GetStripVolume() -> GetHalfWidth();
00092 MSG("Geo",Msg::kDebug) << "GetHalfWidth " << fStripEndId.AsString()
00093 << " halfwidth " << halfwidth << endl;
00094
00095 return halfwidth;
00096
00097 }
|
|
|
Definition at line 183 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::GetLPosRelMdl(). 00183 {
00184 // Return the lpos relative to module (x-pos from translation matrix)
00185
00186
00187 UpdateGlobalManager();
00188
00189 const Double_t* trans = GetMatrix() -> GetTranslation();
00190
00191 MSG("Geo",Msg::kDebug) << "GetLPosRelMdl " << fStripEndId.AsString()
00192 << " lposrelmdl " << trans[0] << endl;
00193
00194 return trans[0];
00195
00196 }
|
|
|
Definition at line 45 of file GeoStripNode.h. Referenced by ClearFiber(), UgliStripHandle::GetScintMdlHandle(), UgliStripHandle::GetScintPlnHandle(), GetScintPlnNode(), GetTPos(), and WlsPigtail(). 00045 { return fScintMdlNode; }
|
|
|
Definition at line 199 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, GetScintMdlNode(), GeoScintMdlNode::GetScintPlnNode(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by GetTPos(). 00199 {
00200 // Return scint plane node from which this strip descends
00201
00202 UpdateGlobalManager();
00203
00204 MSG("Geo",Msg::kDebug) << "GetScintPlnNode " << fStripEndId.AsString()
00205 << endl;
00206
00207 return (GetScintMdlNode()->GetScintPlnNode());
00208
00209 }
|
|
|
Definition at line 38 of file GeoStripNode.h. Referenced by UgliStripHandle::GetSEId(), GeoScintMdlVolume::GetStripNode(), and ~GeoStripNode(). 00038 { return fStripEndId; }
|
|
|
Definition at line 39 of file GeoStripNode.h. Referenced by GetHalfLength(), GetHalfThickness(), GetHalfWidth(), IsMirrored(), PartialLength(), WlsBypass(), and WlsPigtail(). 00040 { return dynamic_cast<GeoStripVolume*>(GetVolume()); }
|
|
|
Definition at line 242 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, PlexPlaneId::GetDetector(), PlexPlaneId::GetPlaneView(), GetScintMdlNode(), GetScintPlnNode(), GetZRotRelMdlRad(), GeoScintMdlNode::GetZRotRelPlnRad(), GeoScintPlnNode::GetZRotRelSteelRad(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::GetTPos(). 00242 {
00243 // Get the strip's tpos offset from scint plane origin
00244 // orthCoord is the t-pos in the orthogonal view in ideal scint plane
00245 // coordinates. For example, if this strip is a U-view strip, the orthcoord
00246 // is the tpos in the "ideal" V-view plane coordinates.
00247 // This allows one to include rotation corrections.
00248 // if orthCoord > 100000 (cm) (default), use the center of the strip.
00249
00250 MSG("Geo",Msg::kDebug) << fStripEndId.AsString() << " orthCoord "
00251 << orthCoord << endl;
00252
00253 UpdateGlobalManager();
00254
00255 // First convert strip center to scint plane coordinates
00256 Double_t striplxyz[3] = {0}; // center of strip
00257 // Convert strip center in strip coordinates to module coordinates
00258 Double_t modulelxyz[3] = {0};
00259 GetMatrix() -> LocalToMaster(striplxyz,modulelxyz);
00260 // Convert strip center in module coordinates to scint plane coordinates
00261 Double_t scplanelxyz[3] = {0};
00262 GeoScintMdlNode* mdlNode = GetScintMdlNode();
00263 mdlNode -> GetMatrix() -> LocalToMaster(modulelxyz,scplanelxyz);
00264
00265 // tpos of center of strip
00266 Float_t tpos = scplanelxyz[1];
00267 if ( orthCoord > 100000. ) return tpos;
00268
00269 // Adjust tpos at orthCoord position for rotation of strip about z-axis
00270 Float_t zrotrelmdlrad = GetZRotRelMdlRad();
00271 Float_t zrotrelplnrad = mdlNode->GetZRotRelPlnRad();
00272 GeoScintPlnNode* scplnNode = GetScintPlnNode();
00273 Float_t zrotrelsteelrad = scplnNode->GetZRotRelSteelRad();
00274
00275 // Pick the ideal steel plane rotation and subtract it off
00276 Float_t zrotrelsteelideal = 0;
00277 Float_t lpos = orthCoord;
00278 if ( fStripEndId.GetDetector() == Detector::kFar ||
00279 fStripEndId.GetDetector() == Detector::kNear ) {
00280 if ( fStripEndId.GetPlaneView() == PlaneView::kU ) {
00281 zrotrelsteelideal = -0.785398163; // -45 degrees
00282 lpos = -orthCoord; // lpos is in opposite direction of V-view tpos
00283 }
00284 else if ( fStripEndId.GetPlaneView() == PlaneView::kV ) {
00285 zrotrelsteelideal = +0.785398163; // +45 degrees
00286 }
00287 }
00288 else if ( fStripEndId.GetDetector() == Detector::kCalDet ) {
00289 if ( fStripEndId.GetPlaneView() == PlaneView::kU ) {
00290 zrotrelsteelideal = -1.570796327;
00291 lpos = -orthCoord; // lpos is in opposite direction of V-view tpos
00292 }
00293 else if ( fStripEndId.GetPlaneView() == PlaneView::kV ) {
00294 zrotrelsteelideal = 0;
00295 }
00296 }
00297
00298 Float_t zrottot = (zrotrelsteelrad - zrotrelsteelideal) + zrotrelplnrad
00299 + zrotrelmdlrad;
00300
00301 Float_t deltatpos = lpos * TMath::Tan(zrottot);
00302 tpos += deltatpos;
00303
00304 return tpos;
00305
00306 }
|
|
|
Definition at line 212 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::GetTPosRelMdl(). 00212 {
00213 // Return the tpos relative to module (y-pos from translation matrix)
00214
00215 MSG("Geo",Msg::kDebug) << fStripEndId.AsString() << endl;
00216
00217 UpdateGlobalManager();
00218
00219 const Double_t* trans = GetMatrix() -> GetTranslation();
00220
00221 return trans[1];
00222
00223 }
|
|
|
Definition at line 227 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, MSG, and GeoNode::UpdateGlobalManager(). Referenced by GetTPos(), and UgliStripHandle::GetZRotRelMdlRad(). 00227 {
00228 // Return the zrot relative to module in radians
00229
00230 MSG("Geo",Msg::kDebug) << fStripEndId.AsString() << endl;
00231
00232 UpdateGlobalManager();
00233
00234 const Double_t* rotmatrix = GetMatrix() -> GetRotationMatrix();
00235 Float_t zrotrelmdlrad = TMath::ATan2(rotmatrix[3],rotmatrix[0]);
00236
00237 return zrotrelmdlrad;
00238
00239 }
|
|
||||||||||||
|
Definition at line 473 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, GeoNode::LocalToGlobal(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by DistanceAlong(), UgliStripHandle::GlobalPos(), and Intersection(). 00474 {
00475 // Return position based on distance along centerline *or* WLS fiber
00476 // Position on WLS fiber is not implemented yet, as is also true for
00477 // UgliStripNode.
00478
00479 MSG("Geo",Msg::kDebug) << fStripEndId.AsString()
00480 << " alongLength " << alongLength << endl;
00481
00482 UpdateGlobalManager();
00483
00484 if ( onWLS ) {
00485 MSG("Geo",Msg::kWarning)
00486 << "GeoStripNode::GlobalPos not implemented yet with onWLS = kTRUE."
00487 << " Ignored." << endl;
00488 }
00489
00490 return LocalToGlobal(TVector3(alongLength,0.,0.));
00491
00492 }
|
|
|
Definition at line 400 of file GeoStripNode.cxx. References GeoNode::GetGeoGeometry(), GeoGeometry::GetStripNode(), GlobalPos(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::Intersection(). 00401 {
00402 // Return the 3-d "intersection" of two strips in global coordinates.
00403 // The intersection is determined as the mid-point of the vector joining
00404 // the strips at the distance of closest approach.
00405 //
00406 // The strip nodes are expressed as a line in parametric form:
00407 // xyz(i) = base(i) + s*dir(i) for i= 0,1,2 (x,y,z) // for this strip
00408 // xyz(i) = base(i) + t*dir(i) for i= 0,1,2 (x,y,z) // for ortho strip
00409 // where base is LocalToGlobal(TVector3(0,0,0))
00410 // and dir is (LocalToGlobal(TVector3(1,0,0)-base)), i.e. the
00411 // unit vector along the strip length.
00412 // The position along both strips at the distance of closest approach
00413 // is solved for to determine:
00414 // xyz_s0(i) = base(i) + s0*dir(i) for i= 0,1,2 (x,y,z) //for this strip
00415 // xyz_t0(i) = base(i) + t0*dir(i) for i= 0,1,2 (x,y,z) //for ortho strip
00416 // The returned mid-point is then:
00417 // xyz_mid = 0.5*(xyz_s0+xyz_t0)
00418 //
00419 // The algorithm used here to determine the intersection or closest approach
00420 // of two skew lines is the same as that in R. Hatcher's UgliStripNode,
00421 // which was adapted from:
00422 // Graphic Gems, ed. Andrew S. Glassner, pg 304
00423 // ISBN 0-12-286165-5 T385.G697 (1990)
00424 //
00425
00426 UpdateGlobalManager();
00427
00428 const Double_t farAway = 1.0e25;
00429 const TVector3 farAway3(farAway,farAway,farAway);
00430
00431 GeoStripNode* otherNode = GetGeoGeometry()->GetStripNode(orthogonalStrip);
00432
00433 if ( !otherNode ) {
00434 MSG("Geo",Msg::kError)
00435 << "GeoStripNode::DistanceAlong() other strip "
00436 << orthogonalStrip << " does not exist." << endl;
00437 return farAway3;
00438 }
00439
00440 // Define base & dir for this strip
00441 TVector3 baseThis = this -> GlobalPos(0.,false);
00442 TVector3 dirThis = this -> GlobalPos(1.,false) - baseThis;
00443
00444 // Define base & dir for the other strip
00445 TVector3 baseOther = otherNode -> GlobalPos(0.,false);
00446 TVector3 dirOther = otherNode -> GlobalPos(1.,false) - baseOther;
00447
00448 TVector3 dirCross = dirThis.Cross(dirOther);
00449 Double_t dirCrossMag2 = dirCross.Mag2();
00450 if ( dirCrossMag2 == 0.0 ) {
00451 // exactly parallel
00452 return 0.5*(baseThis+baseOther) + farAway*dirThis;
00453 }
00454
00455 TVector3 dp = baseOther - baseThis;
00456 TVector3 dpxvThis = dp.Cross(dirOther);
00457 Double_t s0 = dpxvThis.Dot(dirCross)/dirCrossMag2;
00458
00459 TVector3 xyz_s0 = baseThis + s0*dirThis;
00460
00461 dirCross *= -1;
00462 dp *= -1;
00463 TVector3 dpxvOther = dp.Cross(dirThis);
00464 Double_t t0 = dpxvOther.Dot(dirCross)/dirCrossMag2;
00465
00466 TVector3 xyz_t0 = baseOther + t0*dirOther;
00467
00468 return 0.5*(xyz_s0 + xyz_t0);
00469
00470 }
|
|
|
Definition at line 167 of file GeoStripNode.cxx. References StripEnd::AsString(), PlexStripEndId::AsString(), fStripEndId, GetStripVolume(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::IsMirrored(). 00167 {
00168 // Return true if specified stripend is mirrored, else false.
00169
00170 UpdateGlobalManager();
00171
00172 Bool_t isMirrored = GetStripVolume() -> IsMirrored(stripend);
00173
00174 MSG("Geo",Msg::kDebug) << "IsMirrored " << fStripEndId.AsString() << " end "
00175 << StripEnd::AsString(stripend) << " isMirrored "
00176 << isMirrored << endl;
00177
00178 return isMirrored;
00179
00180 }
|
|
|
|
|
|
Definition at line 100 of file GeoStripNode.cxx. References StripEnd::AsString(), PlexStripEndId::AsString(), fStripEndId, GetStripVolume(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::PartialLength(). 00100 {
00101 // Return the strip's partial length at the specified end
00102 // If the strip end is not specified, return the total length
00103
00104 UpdateGlobalManager();
00105
00106 Float_t lenpart = GetStripVolume() -> GetLenPart(stripend);
00107 MSG("Geo",Msg::kDebug) << "PartialLength " << fStripEndId.AsString()
00108 << " end " << StripEnd::AsString(stripend)
00109 << " lenpart " << lenpart << endl;
00110
00111 return lenpart;
00112
00113 }
|
|
||||||||||||
|
Definition at line 507 of file GeoStripNode.cxx. References MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::SetLTPosRelMdl(). 00507 {
00508 // Dummy Set method
00509
00510 UpdateGlobalManager();
00511
00512 MSG("Geo",Msg::kWarning)
00513 << "GeoStripNode::SetLTPosRelMdl not implemented yet." << endl;
00514 return;
00515
00516 }
|
|
|
Definition at line 495 of file GeoStripNode.cxx. References MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::SetZRotRelMdlRad(). 00495 {
00496 // Dummy Set method
00497
00498 UpdateGlobalManager();
00499
00500 MSG("Geo",Msg::kWarning)
00501 << "GeoStripNode::SetZRotRelMdlRad not implemented yet." << endl;
00502 return;
00503
00504 }
|
|
||||||||||||
|
Definition at line 327 of file GeoStripNode.cxx. References MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::TotalAttenuation(). 00328 {
00329 // Dummy, but also dummy in UgliStripNode.
00330
00331 UpdateGlobalManager();
00332
00333 MSG("Geo",Msg::kWarning)
00334 << "GeoStripNode::TotalAttenuation not implemented yet." << endl;
00335 return 0;
00336
00337 }
|
|
|
Definition at line 116 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), fStripEndId, GetStripVolume(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::WlsBypass(). 00116 {
00117 // Return the length of the wls fiber along coil hole bypass
00118
00119 UpdateGlobalManager();
00120
00121 Float_t wlsbypass = GetStripVolume() -> GetWlsLenBypass();
00122
00123 MSG("Geo",Msg::kDebug) << "WlsBypass " << fStripEndId.AsString()
00124 << " wlsbypass " << wlsbypass << endl;
00125
00126 return wlsbypass;
00127
00128 }
|
|
|
Definition at line 131 of file GeoStripNode.cxx. References PlexStripEndId::AsString(), StripEnd::AsString(), fStripEndId, GeoScintMdlNode::GetExtraWlsFiber(), GetScintMdlNode(), GetStripVolume(), GeoStripVolume::GetWlsLen(), MSG, and GeoNode::UpdateGlobalManager(). Referenced by UgliStripHandle::WlsPigtail(). 00131 {
00132 // Return the length of the wls fiber "pigtail" (the portion extending
00133 // beyond the strip end), if either StripEnd::kEast or StripEnd::kWest
00134 // is specified. Otherwise, return 0 with error message. pigtail length
00135 // includes the extra pigtail length associated with the scint module.
00136
00137 UpdateGlobalManager();
00138
00139 Float_t wlspigtail = 0;
00140
00141 switch (stripend) {
00142
00143 case StripEnd::kEast:
00144 case StripEnd::kWest:
00145 {
00146 GeoScintMdlNode* mdlNode = GetScintMdlNode();
00147 wlspigtail = GetStripVolume()->GetWlsLen(stripend)
00148 + mdlNode->GetExtraWlsFiber(stripend);
00149 }
00150 break;
00151
00152 default:
00153 MSG("Geo",Msg::kWarning) << "WlsPigtail called with stripend "
00154 << StripEnd::AsString(stripend)
00155 << ". Must specify kEast or kWest." << endl;
00156 } // end of switch
00157
00158 MSG("Geo",Msg::kDebug) << "WlsPigtail " << fStripEndId.AsString() << " end "
00159 << StripEnd::AsString(stripend)
00160 << " wlspigtail " << wlspigtail << endl;
00161
00162 return wlspigtail;
00163
00164 }
|
|
|
Reimplemented from GeoNode. Definition at line 29 of file GeoStripNode.h. |
|
|
Definition at line 28 of file GeoStripNode.h. |
|
|
Definition at line 85 of file GeoStripNode.h. Referenced by GeoStripNode(). |
|
|
Definition at line 84 of file GeoStripNode.h. Referenced by ClearFiber(), GetHalfLength(), GetHalfThickness(), GetHalfWidth(), GetLPosRelMdl(), GetScintPlnNode(), GetTPos(), GetTPosRelMdl(), GetZRotRelMdlRad(), GlobalPos(), IsMirrored(), PartialLength(), WlsBypass(), and WlsPigtail(). |
1.3.9.1