Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGeoRegion.cxx
Go to the documentation of this file.
1 // @(#)root/geom:$Id$
2 // Author: Andrei Gheata 18/10/17
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /** \class TGeoRegion
13 \ingroup Geometry_classes
14 
15 Regions are groups of volumes having a common set of user tracking cuts.
16 
17 Class wrapper for regions used by Monte Carlo packages
18 A region is composed by a list of logical volumes and defines a set
19 of cuts. Used mainly to transport region information stored in
20 GDML format to the clients requiring it from the transient geometry.
21 
22 */
23 
24 #include "TGeoRegion.h"
25 
26 #include "TGeoManager.h"
27 
28 ClassImp(TGeoRegionCut);
29 ClassImp(TGeoRegion);
30 
31 ////////////////////////////////////////////////////////////////////////////////
32 /// Region destructor.
33 
34 TGeoRegion::~TGeoRegion()
35 {
36  fCuts.Delete();
37 }
38 
39 ////////////////////////////////////////////////////////////////////////////////
40 /// Region copy constructor.
41 TGeoRegion::TGeoRegion(const TGeoRegion &other) : TNamed(other), fVolumes(other.fVolumes)
42 {
43  for (int i = 0; i < other.GetNcuts(); ++i)
44  AddCut(*other.GetCut(i));
45 }
46 
47 ////////////////////////////////////////////////////////////////////////////////
48 /// Assignment operator.
49 TGeoRegion &TGeoRegion::operator=(const TGeoRegion &other)
50 {
51  if (&other != this) {
52  TNamed::operator=(other);
53  fVolumes.operator=(other.fVolumes);
54  for (int i = 0; i < other.GetNcuts(); ++i)
55  AddCut(*(TGeoRegionCut *)other.fCuts.At(i));
56  }
57  return *this;
58 }
59 
60 ////////////////////////////////////////////////////////////////////////////////
61 /// Add an existing volume to the region.
62 bool TGeoRegion::AddVolume(const char *name)
63 {
64  if (!gGeoManager)
65  return kFALSE;
66  TGeoVolume *vol = gGeoManager->GetVolume(name);
67  if (!vol)
68  return kFALSE;
69  AddVolume(vol);
70  return kTRUE;
71 }
72 
73 ////////////////////////////////////////////////////////////////////////////////
74 /// Add cut to the region.
75 void TGeoRegion::AddCut(const char *name, Double_t cut)
76 {
77  fCuts.Add(new TGeoRegionCut(name, cut));
78 }
79 
80 ////////////////////////////////////////////////////////////////////////////////
81 /// Add an identical cut to the region.
82 void TGeoRegion::AddCut(const TGeoRegionCut &regioncut)
83 {
84  fCuts.Add(new TGeoRegionCut(regioncut));
85 }
86 
87 ////////////////////////////////////////////////////////////////////////////////
88 /// Print region info
89 void TGeoRegion::Print(Option_t *) const
90 {
91  printf("== Region: %s\n", GetName());
92  printf(" volumes: ");
93  for (int i = 0; i < GetNvolumes(); ++i)
94  printf("%s ", GetVolume(i)->GetName());
95  printf("\n");
96  for (int i = 0; i < GetNcuts(); ++i)
97  printf(" %s value %g\n", GetCut(i)->GetName(), GetCut(i)->GetCut());
98 }