ROOT logo
// $Id: ZGeoOvlMgr.cxx 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

//__________________________________________________________________________
// ZGeoOvlMgr
//
// A graphical representation of overlaping nodes which
// are exported from gGeoManager fOverlaps list.

#include "ZGeoOvlMgr.h"
#include "ZGeoOvlMgr.c7"
#include <Glasses/ZQueen.h>

#include <TMath.h>
#include <TGeoOverlap.h>
#include <TPolyMarker3D.h>

ClassImp(ZGeoOvlMgr);

/**************************************************************************/

void ZGeoOvlMgr::_init()
{
  mMotherCol.rgba(  0,   1, 0.8, 0.6);
  mExtrCol.  rgba(0.3,   0,   1,   1);
  mOvlpCol1. rgba(  1,   1,   1,   1);
  mOvlpCol2. rgba(  1,   1,   0,   1);
  mPMExtrCol.rgba(  1,   0,   0,   1);
  mPMOvlpCol.rgba(  1,   0,   1,   1);
  mResol = 0.1;
  mMaxOvl = 100;
  mMinOvl = mResol;
}

/*************************************************************************/

void ZGeoOvlMgr::RnrOvlInterval()
{
  // Set mRnrSelf to true in nodes which have mOverlap
  // value between  mMinOvl amd mMaxOvl.

  list<ZGeoNode*> gns; CopyListByGlass<ZGeoNode>(gns);
  for(list<ZGeoNode*>::iterator i=gns.begin(); i!=gns.end(); ++i) {
    list<ZGeoOvl*> ol; (*i)->CopyListByGlass<ZGeoOvl>(ol);
    Bool_t rnr_top_p = false;
    for(list<ZGeoOvl*>::iterator k=ol.begin(); k!=ol.end(); ++k) {
      ZGeoOvl* n = *k;
      GLensReadHolder _rlck(n);
      Bool_t rnr_p = n->GetOverlap() < mMaxOvl && n->GetOverlap() > mMinOvl;
      n->SetRnrSelf(rnr_p);  n->SetRnrElements(rnr_p);
      rnr_top_p = rnr_top_p || rnr_p;
    }
    GLensReadHolder _rlck(*i);
    (*i)->SetRnrSelf(rnr_top_p);
    (*i)->SetRnrElements(rnr_top_p);
  }
}

/**************************************************************************/

void ZGeoOvlMgr::ImportOverlaps(TObjArray* lOverlaps, TGeoNode* top_node)
{
  // Creates a list of TGeoOvl objects reading
  // gGeoManager list fOverlaps.

  static const Exc_t _eh("ZGeoOvlMgr::ImportOverlaps");
  ISdebug(1, GForm("%s, resolution %f", _eh.Data(), mResol));

  // throw(_eh + "code not in sync with changes in ROOT, aborting.");
  printf("Import START eps=%f \n", mResol);

  TIter next_node(lOverlaps);
  TGeoOverlap *ovl;
  TGeoIterator top_git   (gGeoManager->GetTopVolume());
  TGeoNode*    top_gnode (top_git.Next());

  // go through the list of overlaps  locate each node in
  // absolute coordinates
  while((ovl = (TGeoOverlap*)next_node())) {
    Bool_t isExtr = ovl->IsExtrusion();
    Bool_t isOvlp = ovl->IsOverlap();
    ISdebug(1, GForm("%sScanning for Extp=%d, Ovlp=%d: vol1=%-12s vol2=%-12s",
                     _eh.Data(), isExtr, isOvlp,
                     ovl->GetFirstVolume()->GetName(),
                     ovl->GetSecondVolume()->GetName()));

  reiterate:
    TGeoNode    *n1 =  0, *n2 =  0, *gnode;
    TGeoVolume  *v1 =  0, *v2 =  0, *gvol;
    Int_t        l1 = -1,  l2 = -1;
    TGeoIterator git(top_git);
    gnode = top_gnode;
    do {
      gvol = gnode->GetVolume();
      if(gvol == ovl->GetFirstVolume()) {
        top_git = git; top_gnode = gnode;
        n1 = gnode; v1 = gvol; l1 = git.GetLevel();
        ISdebug(2, GForm("  Found first  vol lvl=%d", l1));
        if(isOvlp)
          git.Skip();

        while((gnode = git.Next()) != 0) {

          gvol = gnode->GetVolume();
          if(gvol == ovl->GetSecondVolume()) {
            n2 = gnode; v2 = gvol; l2 = git.GetLevel();
            ISdebug(2, GForm("  Found second vol lvl=%d", l2));

            Int_t       motherl;
            TGeoNode*   mothern;
            TGeoVolume* motherv;
            if(isExtr) {
              motherl = l1;
              mothern = n1;
              motherv = v1;
            } else {
              motherl = TMath::Min(l1, l2);
              do {
                --motherl;
                mothern = motherl > 0 ? git.GetNode(motherl) : top_node;
                motherv = mothern->GetVolume();
              } while(motherv->IsAssembly());

            }
            TGeoHMatrix motherm;
            {
              TGeoNode *node = git.GetTopVolume()->GetNode(git.GetIndex(1));
              motherm.Multiply(node->GetMatrix());
              for (Int_t i=2; i<=motherl; i++) {
                node = node->GetDaughter(git.GetIndex(i));
                motherm.Multiply(node->GetMatrix());
              }
            }

            TString mname  = isExtr ? "Extr: " : "Ovlp: ";
            mname += motherv->GetName();
            TString mtitle = top_node->GetVolume()->GetName();
            for(Int_t l=1; l<motherl; ++l) {
              mtitle += "/";
              mtitle += git.GetNode(l)->GetVolume()->GetName();
            }

            ISdebug(1, GForm("%sImporting %s '%s' from %s", _eh.Data(),
                             mname.Data(), mtitle.Data(),
                             ovl->GetName()));

            ZGeoOvl* zm = new ZGeoOvl(mname, mtitle);
            zm->SetIsExtr ( isExtr );
            zm->SetOverlap( ovl->GetOverlap() );

            TPolyMarker3D* pm = ovl->GetPolyMarker();
            zm->SetPM_N  ( pm->GetLastPoint() );
            zm->SetPM_p  ( pm->GetP() );
            zm->SetPM_ColByRef( isExtr ? mPMExtrCol : mPMOvlpCol );
            zm->SetColorByRef ( mMotherCol );
            {
              GLensWriteHolder wlck(this);
              mQueen->CheckIn(zm);
              Add(zm);
            }
            zm->setup_ztrans(zm, &motherm);
            zm->SetRnrNode(isExtr);
            zm->SetTNode(mothern);
            zm->AssertUserData();

            if(isExtr) {
              ZGeoNode* zn = create_standalone_node(v2->GetName(), 0, n2, ovl->GetSecondMatrix());
              zn->SetColorByRef( mExtrCol );

              GLensWriteHolder wlck(zm);
              zm->Add(zn);
            } else {
              ZGeoNode* zn1 = create_standalone_node(v1->GetName(), 0, n1, ovl->GetFirstMatrix());
              zn1->SetColorByRef( mOvlpCol1 );
              ZGeoNode* zn2 = create_standalone_node(v2->GetName(), 0, n2, ovl->GetSecondMatrix());
              zn2->SetColorByRef( mOvlpCol2 );

              GLensWriteHolder wlck(zm);
              zm->Add(zn1);
              zm->Add(zn2);
            }

            break;
          }
        }
        break;
      }
    } while((gnode = git.Next()) != 0);

    if(v2 == 0) {
      ISdebug(2, "  Could not find both volumes, resetting geo-iterator.");
      top_git.Reset();
      top_gnode = top_git.Next();
      goto reiterate;
    }

  }
  printf("Import END eps=%f \n", mResol);
}

/**************************************************************************/

void ZGeoOvlMgr::RecalculateOvl()
{
  RemoveLensesViaQueen(true);

  if (gGeoManager) {
    gGeoManager->GetTopNode()->CheckOverlaps(mResol);
    if (mMinOvl > mResol) mMinOvl=mResol;
    ImportOverlaps(gGeoManager->GetListOfOverlaps(), gGeoManager->GetTopNode());
  }
}

/**************************************************************************/

void ZGeoOvlMgr::Restore()
{
  // Sets UserData to nodes with mTNode set.
  // The list was created by calling function LoadFromFile.

  static const Exc_t _eh("ZGeoOvlMgr::Restore");
  ISdebug(1, GForm("%s START", _eh.Data()));

  Stepper<ZGeoNode> mn(this);
  while(mn.step()) {
    TString path = mn->GetTitle();
    path = path(1, path.Length() - 1);

    // printf("search TNode for mother path: %s \n", path.Data());
    Ssiz_t end = path.Length();
    Ssiz_t pos = path.First("/");

    TGeoNode* tn = gGeoManager->GetTopNode();

    // check if mother tnod is not top node , that is /ALIC
    if(pos != kNPOS) {
      path = path(pos, end - pos);
      set_tnode_by_path(path, tn);
      // printf("Tnode in Restore %s \n", tn->GetName());
    }

    if(tn) {
      mn->SetTNode(tn);
      mn->AssertUserData();

      Stepper<ZGeoOvl> ovl(*mn);
      while(ovl.step()) {
	ovl->Restore( mn->GetVolume());
      }
    }
  }
  ISdebug(1, GForm("%s END", _eh.Data()));
}

/**************************************************************************/

void ZGeoOvlMgr::DumpOvlMgr()
{
  list<ZGeoNode*> gns;
  CopyListByGlass<ZGeoNode>(gns);
  for(list<ZGeoNode*>::iterator i=gns.begin(); i!=gns.end(); ++i) {
    list<ZGeoOvl*> ol;
    (*i)->CopyListByGlass<ZGeoOvl>(ol);
    for(list<ZGeoOvl*>::iterator k=ol.begin(); k!=ol.end(); ++k) {
      (*k)->DumpOvl();
    }
  }
}

/**************************************************************************/
// Protected methods
//
// These are not really needed with the new overlap import code (9.6.2006).
// Left here as their functionality might be needed in the future.
/*************************************************************************/

ZTrans ZGeoOvlMgr::get_ztrans(TGeoMatrix* gm)
{
  const Double_t* rm = gm->GetRotationMatrix();
  const Double_t* tv = gm->GetTranslation();
  ZTrans t;
  t(1,1) = rm[0]; t(1,2) = rm[1]; t(1,3) = rm[2];
  t(2,1) = rm[3]; t(2,2) = rm[4]; t(2,3) = rm[5];
  t(3,1) = rm[6]; t(3,2) = rm[7]; t(3,3) = rm[8];
  t(1,4) = tv[0]; t(2,4) = tv[1]; t(3,4) = tv[2];
  return t;
}

/**************************************************************************/

Bool_t ZGeoOvlMgr::locate_first_from_top(TGeoNode* cur_node, TGeoVolume* vol,
					 ZGeoNode* zn, lgn_t& result)
{
  if (cur_node->GetVolume() == vol) {
    zn->SetTNode(cur_node);
    zn->SetTNodeName(cur_node->GetName());
    result.push_back(cur_node);
    return true;
  }

  TGeoNode* n;
  TIter next_node(cur_node->GetVolume()->GetNodes());
  while ((n = (TGeoNode*)next_node())) {
    bool found = locate_first_from_top(n, vol, zn, result);
    if (found) {
      result.push_back(cur_node);
      return true;
    }
  }
  return false;
}

/*************************************************************************/

TString ZGeoOvlMgr::setup_absolute_matrix(TGeoNode* top_node, TGeoVolume* vol,
					 ZGeoNode* zn)
{
  lgn_t  path;
  ZTrans  mt;
  TGeoNode* gn;
  //  printf(" ZGeoOvlMgr::setup_absolute_matrix %s \n", zn->GetName());
  locate_first_from_top(top_node, vol, zn, path);
  // printf("setup_absolute_matrix zn->GetTNode()->GetName() \n", zn->GetTNode()->GetName());
  TString title;

  for(lgn_ri k=path.rbegin(); k!=path.rend(); ++k) {
    gn = *k;
    mt *= get_ztrans(gn->GetMatrix());
    title += '/';
    title += gn->GetName();
  }
  zn->SetTrans(mt);
  return title;
}

/**************************************************************************/

ZGeoNode* ZGeoOvlMgr::create_standalone_node(const Text_t* n, const Text_t* t,
					    TGeoNode* gnode, TGeoMatrix* gmatrix)
{
  ZGeoNode *nn = new ZGeoNode(n, t);

  if (gnode) {
    TGeoVolume* v = gnode->GetVolume();
    nn->SetTNode(gnode);
    if (gmatrix) nn->setup_ztrans(nn, gmatrix);
    TString m = v->GetMaterial()->GetName();
    int j = m.First('$');
    if (j != kNPOS)
      m = m(0,j);
    nn->SetMaterial(m.Data());
    nn->AssertUserData();
  }

  mQueen->CheckIn(nn);
  return nn;
}


void ZGeoOvlMgr::set_tnode_by_path(TString path, TGeoNode*& gn)
{
  static const Exc_t _eh("ZGeoOvlMgr::SetTNodeByPath");

  Bool_t last_token;
  if (path.First('/') == path.Last('/')) {
    last_token=true;
  } else {
    last_token=false;
  }

  path = path(1, path.Length() - 1);  //remove first slash in path
  Ssiz_t pos  = path.First('/');

  if (last_token) {
    TGeoVolume* vol = gn->GetVolume();
    if (vol->GetNodes()) {
      // printf("search  %s in volume %s \n", path.Data(), vol->GetName());
      TGeoNode* n = vol->FindNode(path.Data());
      if (n) {
	gn = n;
	// printf("TGeoNode %s found from path  %s in volume %s \n", gn->GetName(), path.Data(), vol->GetName());
      }
      else {
	ISerr(GForm("%s Can't find reference for %s in gGeoManager.", _eh.Data(),path.Data()));
      }
    }
  } else {
    if (pos != kNPOS) {
      TString nname = path(0, pos);
      path = path(pos, path.Length() - pos);
      // printf("temp %s \n", path.Data());
      TGeoVolume* vol = gn->GetVolume();
      if (vol->GetNodes()) {
	TGeoNode* n = vol->FindNode(nname.Data());
	if (n) {
	  gn = n;
	  set_tnode_by_path(path, gn);
	}
      }
    }
  }
}

 ZGeoOvlMgr.cxx:1
 ZGeoOvlMgr.cxx:2
 ZGeoOvlMgr.cxx:3
 ZGeoOvlMgr.cxx:4
 ZGeoOvlMgr.cxx:5
 ZGeoOvlMgr.cxx:6
 ZGeoOvlMgr.cxx:7
 ZGeoOvlMgr.cxx:8
 ZGeoOvlMgr.cxx:9
 ZGeoOvlMgr.cxx:10
 ZGeoOvlMgr.cxx:11
 ZGeoOvlMgr.cxx:12
 ZGeoOvlMgr.cxx:13
 ZGeoOvlMgr.cxx:14
 ZGeoOvlMgr.cxx:15
 ZGeoOvlMgr.cxx:16
 ZGeoOvlMgr.cxx:17
 ZGeoOvlMgr.cxx:18
 ZGeoOvlMgr.cxx:19
 ZGeoOvlMgr.cxx:20
 ZGeoOvlMgr.cxx:21
 ZGeoOvlMgr.cxx:22
 ZGeoOvlMgr.cxx:23
 ZGeoOvlMgr.cxx:24
 ZGeoOvlMgr.cxx:25
 ZGeoOvlMgr.cxx:26
 ZGeoOvlMgr.cxx:27
 ZGeoOvlMgr.cxx:28
 ZGeoOvlMgr.cxx:29
 ZGeoOvlMgr.cxx:30
 ZGeoOvlMgr.cxx:31
 ZGeoOvlMgr.cxx:32
 ZGeoOvlMgr.cxx:33
 ZGeoOvlMgr.cxx:34
 ZGeoOvlMgr.cxx:35
 ZGeoOvlMgr.cxx:36
 ZGeoOvlMgr.cxx:37
 ZGeoOvlMgr.cxx:38
 ZGeoOvlMgr.cxx:39
 ZGeoOvlMgr.cxx:40
 ZGeoOvlMgr.cxx:41
 ZGeoOvlMgr.cxx:42
 ZGeoOvlMgr.cxx:43
 ZGeoOvlMgr.cxx:44
 ZGeoOvlMgr.cxx:45
 ZGeoOvlMgr.cxx:46
 ZGeoOvlMgr.cxx:47
 ZGeoOvlMgr.cxx:48
 ZGeoOvlMgr.cxx:49
 ZGeoOvlMgr.cxx:50
 ZGeoOvlMgr.cxx:51
 ZGeoOvlMgr.cxx:52
 ZGeoOvlMgr.cxx:53
 ZGeoOvlMgr.cxx:54
 ZGeoOvlMgr.cxx:55
 ZGeoOvlMgr.cxx:56
 ZGeoOvlMgr.cxx:57
 ZGeoOvlMgr.cxx:58
 ZGeoOvlMgr.cxx:59
 ZGeoOvlMgr.cxx:60
 ZGeoOvlMgr.cxx:61
 ZGeoOvlMgr.cxx:62
 ZGeoOvlMgr.cxx:63
 ZGeoOvlMgr.cxx:64
 ZGeoOvlMgr.cxx:65
 ZGeoOvlMgr.cxx:66
 ZGeoOvlMgr.cxx:67
 ZGeoOvlMgr.cxx:68
 ZGeoOvlMgr.cxx:69
 ZGeoOvlMgr.cxx:70
 ZGeoOvlMgr.cxx:71
 ZGeoOvlMgr.cxx:72
 ZGeoOvlMgr.cxx:73
 ZGeoOvlMgr.cxx:74
 ZGeoOvlMgr.cxx:75
 ZGeoOvlMgr.cxx:76
 ZGeoOvlMgr.cxx:77
 ZGeoOvlMgr.cxx:78
 ZGeoOvlMgr.cxx:79
 ZGeoOvlMgr.cxx:80
 ZGeoOvlMgr.cxx:81
 ZGeoOvlMgr.cxx:82
 ZGeoOvlMgr.cxx:83
 ZGeoOvlMgr.cxx:84
 ZGeoOvlMgr.cxx:85
 ZGeoOvlMgr.cxx:86
 ZGeoOvlMgr.cxx:87
 ZGeoOvlMgr.cxx:88
 ZGeoOvlMgr.cxx:89
 ZGeoOvlMgr.cxx:90
 ZGeoOvlMgr.cxx:91
 ZGeoOvlMgr.cxx:92
 ZGeoOvlMgr.cxx:93
 ZGeoOvlMgr.cxx:94
 ZGeoOvlMgr.cxx:95
 ZGeoOvlMgr.cxx:96
 ZGeoOvlMgr.cxx:97
 ZGeoOvlMgr.cxx:98
 ZGeoOvlMgr.cxx:99
 ZGeoOvlMgr.cxx:100
 ZGeoOvlMgr.cxx:101
 ZGeoOvlMgr.cxx:102
 ZGeoOvlMgr.cxx:103
 ZGeoOvlMgr.cxx:104
 ZGeoOvlMgr.cxx:105
 ZGeoOvlMgr.cxx:106
 ZGeoOvlMgr.cxx:107
 ZGeoOvlMgr.cxx:108
 ZGeoOvlMgr.cxx:109
 ZGeoOvlMgr.cxx:110
 ZGeoOvlMgr.cxx:111
 ZGeoOvlMgr.cxx:112
 ZGeoOvlMgr.cxx:113
 ZGeoOvlMgr.cxx:114
 ZGeoOvlMgr.cxx:115
 ZGeoOvlMgr.cxx:116
 ZGeoOvlMgr.cxx:117
 ZGeoOvlMgr.cxx:118
 ZGeoOvlMgr.cxx:119
 ZGeoOvlMgr.cxx:120
 ZGeoOvlMgr.cxx:121
 ZGeoOvlMgr.cxx:122
 ZGeoOvlMgr.cxx:123
 ZGeoOvlMgr.cxx:124
 ZGeoOvlMgr.cxx:125
 ZGeoOvlMgr.cxx:126
 ZGeoOvlMgr.cxx:127
 ZGeoOvlMgr.cxx:128
 ZGeoOvlMgr.cxx:129
 ZGeoOvlMgr.cxx:130
 ZGeoOvlMgr.cxx:131
 ZGeoOvlMgr.cxx:132
 ZGeoOvlMgr.cxx:133
 ZGeoOvlMgr.cxx:134
 ZGeoOvlMgr.cxx:135
 ZGeoOvlMgr.cxx:136
 ZGeoOvlMgr.cxx:137
 ZGeoOvlMgr.cxx:138
 ZGeoOvlMgr.cxx:139
 ZGeoOvlMgr.cxx:140
 ZGeoOvlMgr.cxx:141
 ZGeoOvlMgr.cxx:142
 ZGeoOvlMgr.cxx:143
 ZGeoOvlMgr.cxx:144
 ZGeoOvlMgr.cxx:145
 ZGeoOvlMgr.cxx:146
 ZGeoOvlMgr.cxx:147
 ZGeoOvlMgr.cxx:148
 ZGeoOvlMgr.cxx:149
 ZGeoOvlMgr.cxx:150
 ZGeoOvlMgr.cxx:151
 ZGeoOvlMgr.cxx:152
 ZGeoOvlMgr.cxx:153
 ZGeoOvlMgr.cxx:154
 ZGeoOvlMgr.cxx:155
 ZGeoOvlMgr.cxx:156
 ZGeoOvlMgr.cxx:157
 ZGeoOvlMgr.cxx:158
 ZGeoOvlMgr.cxx:159
 ZGeoOvlMgr.cxx:160
 ZGeoOvlMgr.cxx:161
 ZGeoOvlMgr.cxx:162
 ZGeoOvlMgr.cxx:163
 ZGeoOvlMgr.cxx:164
 ZGeoOvlMgr.cxx:165
 ZGeoOvlMgr.cxx:166
 ZGeoOvlMgr.cxx:167
 ZGeoOvlMgr.cxx:168
 ZGeoOvlMgr.cxx:169
 ZGeoOvlMgr.cxx:170
 ZGeoOvlMgr.cxx:171
 ZGeoOvlMgr.cxx:172
 ZGeoOvlMgr.cxx:173
 ZGeoOvlMgr.cxx:174
 ZGeoOvlMgr.cxx:175
 ZGeoOvlMgr.cxx:176
 ZGeoOvlMgr.cxx:177
 ZGeoOvlMgr.cxx:178
 ZGeoOvlMgr.cxx:179
 ZGeoOvlMgr.cxx:180
 ZGeoOvlMgr.cxx:181
 ZGeoOvlMgr.cxx:182
 ZGeoOvlMgr.cxx:183
 ZGeoOvlMgr.cxx:184
 ZGeoOvlMgr.cxx:185
 ZGeoOvlMgr.cxx:186
 ZGeoOvlMgr.cxx:187
 ZGeoOvlMgr.cxx:188
 ZGeoOvlMgr.cxx:189
 ZGeoOvlMgr.cxx:190
 ZGeoOvlMgr.cxx:191
 ZGeoOvlMgr.cxx:192
 ZGeoOvlMgr.cxx:193
 ZGeoOvlMgr.cxx:194
 ZGeoOvlMgr.cxx:195
 ZGeoOvlMgr.cxx:196
 ZGeoOvlMgr.cxx:197
 ZGeoOvlMgr.cxx:198
 ZGeoOvlMgr.cxx:199
 ZGeoOvlMgr.cxx:200
 ZGeoOvlMgr.cxx:201
 ZGeoOvlMgr.cxx:202
 ZGeoOvlMgr.cxx:203
 ZGeoOvlMgr.cxx:204
 ZGeoOvlMgr.cxx:205
 ZGeoOvlMgr.cxx:206
 ZGeoOvlMgr.cxx:207
 ZGeoOvlMgr.cxx:208
 ZGeoOvlMgr.cxx:209
 ZGeoOvlMgr.cxx:210
 ZGeoOvlMgr.cxx:211
 ZGeoOvlMgr.cxx:212
 ZGeoOvlMgr.cxx:213
 ZGeoOvlMgr.cxx:214
 ZGeoOvlMgr.cxx:215
 ZGeoOvlMgr.cxx:216
 ZGeoOvlMgr.cxx:217
 ZGeoOvlMgr.cxx:218
 ZGeoOvlMgr.cxx:219
 ZGeoOvlMgr.cxx:220
 ZGeoOvlMgr.cxx:221
 ZGeoOvlMgr.cxx:222
 ZGeoOvlMgr.cxx:223
 ZGeoOvlMgr.cxx:224
 ZGeoOvlMgr.cxx:225
 ZGeoOvlMgr.cxx:226
 ZGeoOvlMgr.cxx:227
 ZGeoOvlMgr.cxx:228
 ZGeoOvlMgr.cxx:229
 ZGeoOvlMgr.cxx:230
 ZGeoOvlMgr.cxx:231
 ZGeoOvlMgr.cxx:232
 ZGeoOvlMgr.cxx:233
 ZGeoOvlMgr.cxx:234
 ZGeoOvlMgr.cxx:235
 ZGeoOvlMgr.cxx:236
 ZGeoOvlMgr.cxx:237
 ZGeoOvlMgr.cxx:238
 ZGeoOvlMgr.cxx:239
 ZGeoOvlMgr.cxx:240
 ZGeoOvlMgr.cxx:241
 ZGeoOvlMgr.cxx:242
 ZGeoOvlMgr.cxx:243
 ZGeoOvlMgr.cxx:244
 ZGeoOvlMgr.cxx:245
 ZGeoOvlMgr.cxx:246
 ZGeoOvlMgr.cxx:247
 ZGeoOvlMgr.cxx:248
 ZGeoOvlMgr.cxx:249
 ZGeoOvlMgr.cxx:250
 ZGeoOvlMgr.cxx:251
 ZGeoOvlMgr.cxx:252
 ZGeoOvlMgr.cxx:253
 ZGeoOvlMgr.cxx:254
 ZGeoOvlMgr.cxx:255
 ZGeoOvlMgr.cxx:256
 ZGeoOvlMgr.cxx:257
 ZGeoOvlMgr.cxx:258
 ZGeoOvlMgr.cxx:259
 ZGeoOvlMgr.cxx:260
 ZGeoOvlMgr.cxx:261
 ZGeoOvlMgr.cxx:262
 ZGeoOvlMgr.cxx:263
 ZGeoOvlMgr.cxx:264
 ZGeoOvlMgr.cxx:265
 ZGeoOvlMgr.cxx:266
 ZGeoOvlMgr.cxx:267
 ZGeoOvlMgr.cxx:268
 ZGeoOvlMgr.cxx:269
 ZGeoOvlMgr.cxx:270
 ZGeoOvlMgr.cxx:271
 ZGeoOvlMgr.cxx:272
 ZGeoOvlMgr.cxx:273
 ZGeoOvlMgr.cxx:274
 ZGeoOvlMgr.cxx:275
 ZGeoOvlMgr.cxx:276
 ZGeoOvlMgr.cxx:277
 ZGeoOvlMgr.cxx:278
 ZGeoOvlMgr.cxx:279
 ZGeoOvlMgr.cxx:280
 ZGeoOvlMgr.cxx:281
 ZGeoOvlMgr.cxx:282
 ZGeoOvlMgr.cxx:283
 ZGeoOvlMgr.cxx:284
 ZGeoOvlMgr.cxx:285
 ZGeoOvlMgr.cxx:286
 ZGeoOvlMgr.cxx:287
 ZGeoOvlMgr.cxx:288
 ZGeoOvlMgr.cxx:289
 ZGeoOvlMgr.cxx:290
 ZGeoOvlMgr.cxx:291
 ZGeoOvlMgr.cxx:292
 ZGeoOvlMgr.cxx:293
 ZGeoOvlMgr.cxx:294
 ZGeoOvlMgr.cxx:295
 ZGeoOvlMgr.cxx:296
 ZGeoOvlMgr.cxx:297
 ZGeoOvlMgr.cxx:298
 ZGeoOvlMgr.cxx:299
 ZGeoOvlMgr.cxx:300
 ZGeoOvlMgr.cxx:301
 ZGeoOvlMgr.cxx:302
 ZGeoOvlMgr.cxx:303
 ZGeoOvlMgr.cxx:304
 ZGeoOvlMgr.cxx:305
 ZGeoOvlMgr.cxx:306
 ZGeoOvlMgr.cxx:307
 ZGeoOvlMgr.cxx:308
 ZGeoOvlMgr.cxx:309
 ZGeoOvlMgr.cxx:310
 ZGeoOvlMgr.cxx:311
 ZGeoOvlMgr.cxx:312
 ZGeoOvlMgr.cxx:313
 ZGeoOvlMgr.cxx:314
 ZGeoOvlMgr.cxx:315
 ZGeoOvlMgr.cxx:316
 ZGeoOvlMgr.cxx:317
 ZGeoOvlMgr.cxx:318
 ZGeoOvlMgr.cxx:319
 ZGeoOvlMgr.cxx:320
 ZGeoOvlMgr.cxx:321
 ZGeoOvlMgr.cxx:322
 ZGeoOvlMgr.cxx:323
 ZGeoOvlMgr.cxx:324
 ZGeoOvlMgr.cxx:325
 ZGeoOvlMgr.cxx:326
 ZGeoOvlMgr.cxx:327
 ZGeoOvlMgr.cxx:328
 ZGeoOvlMgr.cxx:329
 ZGeoOvlMgr.cxx:330
 ZGeoOvlMgr.cxx:331
 ZGeoOvlMgr.cxx:332
 ZGeoOvlMgr.cxx:333
 ZGeoOvlMgr.cxx:334
 ZGeoOvlMgr.cxx:335
 ZGeoOvlMgr.cxx:336
 ZGeoOvlMgr.cxx:337
 ZGeoOvlMgr.cxx:338
 ZGeoOvlMgr.cxx:339
 ZGeoOvlMgr.cxx:340
 ZGeoOvlMgr.cxx:341
 ZGeoOvlMgr.cxx:342
 ZGeoOvlMgr.cxx:343
 ZGeoOvlMgr.cxx:344
 ZGeoOvlMgr.cxx:345
 ZGeoOvlMgr.cxx:346
 ZGeoOvlMgr.cxx:347
 ZGeoOvlMgr.cxx:348
 ZGeoOvlMgr.cxx:349
 ZGeoOvlMgr.cxx:350
 ZGeoOvlMgr.cxx:351
 ZGeoOvlMgr.cxx:352
 ZGeoOvlMgr.cxx:353
 ZGeoOvlMgr.cxx:354
 ZGeoOvlMgr.cxx:355
 ZGeoOvlMgr.cxx:356
 ZGeoOvlMgr.cxx:357
 ZGeoOvlMgr.cxx:358
 ZGeoOvlMgr.cxx:359
 ZGeoOvlMgr.cxx:360
 ZGeoOvlMgr.cxx:361
 ZGeoOvlMgr.cxx:362
 ZGeoOvlMgr.cxx:363
 ZGeoOvlMgr.cxx:364
 ZGeoOvlMgr.cxx:365
 ZGeoOvlMgr.cxx:366
 ZGeoOvlMgr.cxx:367
 ZGeoOvlMgr.cxx:368
 ZGeoOvlMgr.cxx:369
 ZGeoOvlMgr.cxx:370
 ZGeoOvlMgr.cxx:371
 ZGeoOvlMgr.cxx:372
 ZGeoOvlMgr.cxx:373
 ZGeoOvlMgr.cxx:374
 ZGeoOvlMgr.cxx:375
 ZGeoOvlMgr.cxx:376
 ZGeoOvlMgr.cxx:377
 ZGeoOvlMgr.cxx:378
 ZGeoOvlMgr.cxx:379
 ZGeoOvlMgr.cxx:380
 ZGeoOvlMgr.cxx:381
 ZGeoOvlMgr.cxx:382
 ZGeoOvlMgr.cxx:383
 ZGeoOvlMgr.cxx:384
 ZGeoOvlMgr.cxx:385
 ZGeoOvlMgr.cxx:386
 ZGeoOvlMgr.cxx:387
 ZGeoOvlMgr.cxx:388
 ZGeoOvlMgr.cxx:389
 ZGeoOvlMgr.cxx:390
 ZGeoOvlMgr.cxx:391
 ZGeoOvlMgr.cxx:392
 ZGeoOvlMgr.cxx:393
 ZGeoOvlMgr.cxx:394
 ZGeoOvlMgr.cxx:395
 ZGeoOvlMgr.cxx:396
 ZGeoOvlMgr.cxx:397
 ZGeoOvlMgr.cxx:398
 ZGeoOvlMgr.cxx:399
 ZGeoOvlMgr.cxx:400
 ZGeoOvlMgr.cxx:401
 ZGeoOvlMgr.cxx:402
 ZGeoOvlMgr.cxx:403
 ZGeoOvlMgr.cxx:404
 ZGeoOvlMgr.cxx:405
 ZGeoOvlMgr.cxx:406