]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliLVTree.cxx
AliHBTReaderKineTree.cxx
[u/mrichter/AliRoot.git] / AliGeant4 / AliLVTree.cxx
1 // $Id$
2 // Category: geometry
3 //
4 // Author: I. Hrivnacova
5 //
6 // Class AliLVTree
7 // ---------------------------
8 // See the class description in the header file.
9
10 #include "AliLVTree.h"
11 #include "AliGlobals.h"
12 #include "AliLVStructure.h"
13 #include "AliModule.h"
14 #ifdef G4VIS_USE
15 #include "AliColourStore.h"
16 #endif
17
18 #include "TG4GeometryServices.h"
19
20 #include <G4LogicalVolumeStore.hh>
21 #include <G4LogicalVolume.hh>
22 #ifdef G4VIS_USE
23 #include <G4Colour.hh>
24 #include <G4VisAttributes.hh>
25 #endif
26
27 AliLVTree* AliLVTree::fgInstance = 0;
28
29 //_____________________________________________________________________________
30 AliLVTree* AliLVTree::Instance() 
31 {
32 // Static singleton access method.
33 // ---
34
35   if (!fgInstance) new AliLVTree();
36   
37   return fgInstance;
38 }  
39
40 //_____________________________________________________________________________
41 AliLVTree::AliLVTree()
42   : fMessenger(this) 
43 {
44 // Protected singleton constructor.
45 // ---
46
47   fgInstance = this;
48 }
49
50 //_____________________________________________________________________________
51 AliLVTree::AliLVTree(const AliLVTree& right)
52   : fMessenger(this)
53 {
54 // Protected singleton copy constructor.
55 // ---
56 //
57   AliGlobals::Exception(
58     "Attempt to copy AliLVTree singleton.");
59 }
60
61 //_____________________________________________________________________________
62 AliLVTree::~AliLVTree() {
63 //
64 }
65
66 // operators
67
68 //_____________________________________________________________________________
69 AliLVTree& AliLVTree::operator=(const AliLVTree& right)
70 {    
71   // check assignement to self
72   if (this == &right) return *this;
73
74   AliGlobals::Exception(
75     "Attempt to assign AliLVTree singleton.");
76     
77   return *this;  
78
79 }
80
81 // protected methods
82
83 //_____________________________________________________________________________
84 void AliLVTree::RegisterLogicalVolume(G4LogicalVolume* lv, const G4String& path,
85                                       AliLVStructure& lvStructure) const
86 {
87 // Registers logical volume lv in the structure.
88 // ---        
89
90   lvStructure.AddNewVolume(lv, path);
91   
92   // register daughters
93   G4int nofDaughters = lv->GetNoDaughters();
94   if (nofDaughters>0) {
95     G4String previousName = "";
96     for (G4int i=0; i<nofDaughters; i++) {
97       G4LogicalVolume* lvd = lv->GetDaughter(i)->GetLogicalVolume();
98       G4String currentName = lvd->GetName();
99       if (currentName != lv->GetName() && currentName != previousName) { 
100         G4String newPath = path + lv->GetName() +"/";
101         RegisterLogicalVolume(lvd, newPath, lvStructure);
102         previousName = currentName;
103       }
104     }
105   }     
106 }          
107
108 //_____________________________________________________________________________
109 void AliLVTree::Warn(const G4String& where, const G4String& lvName) const                              
110 {
111 // Prints warning "volume not found".
112 // ---
113   
114    G4String text("AliLVTree::" + where + ": " + lvName + " volume not found.");
115    AliGlobals::Warning(text);
116 }
117
118 //_____________________________________________________________________________
119 void AliLVTree::Warn(const G4String& where) const
120 {                              
121 // Prints warning "volume not specified".
122 // ---
123   
124    G4String text("AliLVTree::" + where + ": " + " volume not specified.");
125    AliGlobals::Warning(text);
126 }
127
128 // public methods
129
130 //_____________________________________________________________________________
131 void AliLVTree::List(const G4String& lvName) const
132 {
133 // Lists logical volumes tree (daughters) of the logical volume 
134 // with specified lvName.
135 // ---- 
136
137   G4LogicalVolume* lv 
138     = TG4GeometryServices::Instance()->FindLogicalVolume(lvName);
139
140   if (lv) {
141     G4String path = "";
142     AliLVStructure lvStructure(path);
143     RegisterLogicalVolume(lv, path, lvStructure);
144     lvStructure.ListTree();
145   }
146   else 
147     Warn("List", lvName);
148 }    
149
150 //_____________________________________________________________________________
151 void AliLVTree::List(G4LogicalVolume* lv) const
152 {
153 // Lists logical volumes tree of the given lv.
154 // ---- 
155
156   if (!lv) {
157     Warn("List");
158     return; 
159   }  
160   
161   List(lv->GetName());
162 }
163
164 //_____________________________________________________________________________
165 void AliLVTree::ListLong(const G4String& lvName) const
166 {
167 // Lists logical volumes tree (daughters) of the logical volume 
168 // with specified lvName with numbers of daughters (physical volumes).
169 // ---- 
170
171   G4LogicalVolume* lv 
172     = TG4GeometryServices::Instance()->FindLogicalVolume(lvName);
173
174   if (lv) {
175     G4String path = "";
176     AliLVStructure lvStructure(path);
177     RegisterLogicalVolume(lv, path, lvStructure);
178     lvStructure.ListTreeLong();
179   }
180   else 
181     Warn("ListLong", lvName);
182 }
183
184 //_____________________________________________________________________________
185 void AliLVTree::ListLong(G4LogicalVolume* lv) const
186 {
187 // Lists logical volumes tree with numbers of daughters 
188 // (physical volumes) of the given lv.
189 // ---- 
190
191   if (!lv) {
192     Warn("ListLong");
193     return; 
194   }  
195   
196   ListLong(lv->GetName());
197 }
198
199 #ifdef G4VIS_USE
200
201 //_____________________________________________________________________________
202 void AliLVTree::SetLVTreeVisibility(G4LogicalVolume* lv, 
203                                     G4bool visibility) const
204
205 // Sets visibility to the logical volumes tree (daughters) of 
206 // the logical volume lv.
207 // ---
208
209   if (!lv) {
210     Warn("SetLVTreeVisibility");
211     return; 
212   }  
213   
214   G4String path = "";
215   AliLVStructure lvStructure(path);
216   RegisterLogicalVolume(lv, path, lvStructure);
217   lvStructure.SetTreeVisibility(visibility);
218 }
219
220 //_____________________________________________________________________________
221 void AliLVTree::SetVolumeVisibility(G4LogicalVolume* lv, 
222                                     G4bool visibility) const
223
224 // Sets visibility to the specified logical volume.
225 // ---
226
227   if (!lv) {
228     Warn("SetVolumeVisibility");
229     return; 
230   }  
231   
232   const G4VisAttributes* kpVisAttributes = lv->GetVisAttributes ();
233   G4VisAttributes* newVisAttributes; 
234   if (kpVisAttributes) {
235     G4Colour oldColour   = kpVisAttributes->GetColour();
236     newVisAttributes = new G4VisAttributes(oldColour); 
237   }  
238   else
239     newVisAttributes = new G4VisAttributes();
240   delete kpVisAttributes;
241
242   newVisAttributes->SetVisibility(visibility); 
243
244   lv->SetVisAttributes(newVisAttributes);
245 }
246
247 //_____________________________________________________________________________
248 void AliLVTree::SetLVTreeColour(G4LogicalVolume* lv, 
249                                 const G4String& colName) const
250
251 // Sets colour to the logical volumes tree (daughters) of 
252 // the logical volume lv.
253 // ---
254
255   if (!lv) {
256     Warn("SetLVTreeColour");
257     return; 
258   }  
259   
260   G4String path = "";
261   AliLVStructure lvStructure(path);
262   RegisterLogicalVolume(lv, path, lvStructure);
263   lvStructure.SetTreeVisibility(true);
264   lvStructure.SetTreeColour(colName);
265 }
266
267 //_____________________________________________________________________________
268 void AliLVTree::SetVolumeColour(G4LogicalVolume* lv,
269                                 const G4String& colName) const
270 {
271 // Sets colour to the specified logical volume.
272 // ---
273
274   if (!lv) {
275     Warn("SetVolumeColour");
276     return; 
277   }  
278   
279   const G4VisAttributes* kpVisAttributes = lv->GetVisAttributes ();
280   delete kpVisAttributes;
281
282   G4VisAttributes* newVisAttributes = new G4VisAttributes(); 
283
284   AliColourStore* pColours = AliColourStore::Instance();
285   const G4Colour kColour = pColours->GetColour(colName);
286   newVisAttributes->SetVisibility(true); 
287   newVisAttributes->SetColour(kColour);
288
289   lv->SetVisAttributes(newVisAttributes);
290 }
291
292 #endif //G4VIS_USE
293