FairShip
Loading...
Searching...
No Matches
Target.cxx
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// SPDX-FileCopyrightText: Copyright CERN for the benefit of the SHiP
3// Collaboration
4
5//
6// Target.cxx
7//
8//
9// Created by Annarita Buonaura on 17/01/15.
10//
11//
12
13#include "Target.h"
14
15#include <cstring>
16#include <iosfwd> // for ostream
17#include <iostream> // for operator<<, basic_ostream,etc
18#include <tuple>
19#include <vector>
20
21#include "FairGeoBuilder.h"
22#include "FairGeoInterface.h"
23#include "FairGeoLoader.h"
24#include "FairGeoMedia.h"
25#include "FairGeoMedium.h"
26#include "FairGeoNode.h"
27#include "FairGeoTransform.h"
28#include "FairGeoVolume.h"
29#include "FairRun.h" // for FairRun
30#include "FairRun.h"
31#include "FairRuntimeDb.h" // for FairRuntimeDb
32#include "FairRuntimeDb.h"
33#include "FairVolume.h"
34#include "ShipDetectorList.h"
35#include "ShipGeoUtil.h"
36#include "ShipStack.h"
37#include "ShipUnit.h"
38#include "TGeoArb8.h"
39#include "TGeoBBox.h"
40#include "TGeoCompositeShape.h"
41#include "TGeoManager.h"
42#include "TGeoMaterial.h"
43#include "TGeoMedium.h"
44#include "TGeoTrd1.h"
45#include "TGeoTube.h"
46#include "TGeoUniformMagField.h"
47#include "TList.h" // for TListIter, TList (ptr only)
48#include "TObjArray.h" // for TObjArray
49#include "TParticle.h"
50#include "TParticleClassPDG.h"
51#include "TParticlePDG.h"
52#include "TString.h" // for TString
53#include "TVector3.h"
54#include "TVirtualMC.h"
55#include "TVirtualMCStack.h"
56#include "TargetPoint.h"
57
58using std::cout;
59using std::endl;
60
61Target::Target() : Detector("Target", kTRUE, ktauTarget) {}
62
63Target::Target(const char* name, const Double_t Ydist, Bool_t Active,
64 const char* /*Title*/)
65 : Detector(name, Active, ktauTarget) {
66 Ydistance = Ydist;
67}
68
69//--------------Options for detector construction
70void Target::SetDetectorDesign(Int_t Design) {
71 fDesign = Design;
72 Info("SetDetectorDesign", " to %i", fDesign);
73}
74
76
77void Target::MergeTopBot(Bool_t SingleEmFilm) {
78 fsingleemulsionfilm = SingleEmFilm;
79}
80
81//--------------------------
82
83void Target::SetNumberBricks(Double_t col, Double_t row, Double_t wall) {
84 fNCol = col;
85 fNRow = row;
86 fNWall = wall;
87}
88
89void Target::SetNumberTargets(Int_t target) { fNTarget = target; }
90
91void Target::SetTargetWallDimension(Double_t WallXDim_, Double_t WallYDim_,
92 Double_t WallZDim_) {
93 WallXDim = WallXDim_;
94 WallYDim = WallYDim_;
95 WallZDim = WallZDim_;
96}
97
98void Target::SetDetectorDimension(Double_t xdim, Double_t ydim, Double_t zdim) {
99 XDimension = xdim;
100 YDimension = ydim;
101 ZDimension = zdim;
102}
103
104void Target::SetEmulsionParam(Double_t EmTh, Double_t EmX, Double_t EmY,
105 Double_t PBTh, Double_t EPlW, Double_t LeadTh,
106 Double_t AllPW) {
107 EmulsionThickness = EmTh;
108 EmulsionX = EmX;
109 EmulsionY = EmY;
111 EmPlateWidth = EPlW;
112 LeadThickness = LeadTh;
113 AllPlateWidth = AllPW;
114}
115
116void Target::SetBrickParam(Double_t BrX, Double_t BrY, Double_t BrZ,
117 Double_t BrPackX, Double_t BrPackY, Double_t BrPackZ,
118 Int_t number_of_plates_) {
119 BrickPackageX = BrPackX;
120 BrickPackageY = BrPackY;
121 BrickPackageZ = BrPackZ;
122 BrickX = BrX;
123 BrickY = BrY;
124 BrickZ = BrZ;
125 number_of_plates = number_of_plates_;
126}
127
128void Target::SetCellParam(Double_t CellW) { CellWidth = CellW; }
129
130void Target::SetTTzdimension(Double_t TTZ) { TTrackerZ = TTZ; }
131
132void Target::SetMagnetHeight(Double_t Y) { fMagnetY = Y; }
133
134void Target::SetColumnHeight(Double_t Y) { fColumnY = Y; }
135
136void Target::SetBaseHeight(Double_t Y) { fMagnetBaseY = Y; }
137
138void Target::SetCoilUpHeight(Double_t H1) { fCoilH1 = H1; }
139
140void Target::SetCoilDownHeight(Double_t H2) { fCoilH2 = H2; }
141
142void Target::SetMagneticField(Double_t B) { fField = B; }
143
144void Target::SetCenterZ(Double_t z) { fCenterZ = z; }
145
146void Target::SetBaseDimension(Double_t x, Double_t y, Double_t z) {
147 fBaseX = x;
148 fBaseY = y;
149 fBaseZ = z;
150}
151
152void Target::SetPillarDimension(Double_t x, Double_t y, Double_t z) {
153 fPillarX = x;
154 fPillarY = y;
155 fPillarZ = z;
156}
157
158void Target::SetHpTParam(Int_t n, Double_t dd,
159 Double_t DZ) // need to know about HPT.cxx geometry to
160 // place additional targets
161{
162 fnHpT = n;
163 fHpTDistance = dd;
164 fHpTDZ = DZ;
165}
166
168 // cout << "Design = " << fDesign << endl;
169
170 ShipGeo::InitMedium("air");
171 TGeoMedium* air = gGeoManager->GetMedium("air");
172
173 ShipGeo::InitMedium("PlasticBase");
174 TGeoMedium* PBase = gGeoManager->GetMedium("PlasticBase");
175
176 ShipGeo::InitMedium("NuclearEmulsion");
177 TGeoMedium* NEmu = gGeoManager->GetMedium("NuclearEmulsion");
178
179 TGeoMaterial* NEmuMat =
180 NEmu->GetMaterial(); // I need the materials to build the mixture
181 TGeoMaterial* PBaseMat = PBase->GetMaterial();
182
183 Double_t rho_film = (NEmuMat->GetDensity() * 2 * EmulsionThickness +
184 PBaseMat->GetDensity() * PlasticBaseThickness) /
186 Double_t frac_emu = NEmuMat->GetDensity() * 2 * EmulsionThickness /
187 (NEmuMat->GetDensity() * 2 * EmulsionThickness +
188 PBaseMat->GetDensity() * PlasticBaseThickness);
189
191 cout << "TARGET PRINTOUT: Single volume for emulsion film chosen: average "
192 "density: "
193 << rho_film << " fraction in mass of emulsion " << frac_emu << endl;
194
195 TGeoMixture* emufilmmixture = new TGeoMixture(
196 "EmulsionFilmMixture",
197 2.00); // two nuclear emulsions separated by the plastic base
198
199 emufilmmixture->AddElement(NEmuMat, frac_emu);
200 emufilmmixture->AddElement(PBaseMat, 1. - frac_emu);
201
202 TGeoMedium* Emufilm = new TGeoMedium("EmulsionFilm", 100, emufilmmixture);
203
204 ShipGeo::InitMedium("tungsten");
205 TGeoMedium* tungsten = gGeoManager->GetMedium("tungsten");
206
207 Int_t NPlates = number_of_plates; // Number of doublets emulsion + Pb
208
209 // Definition of the target box containing emulsion bricks + target trackers
210 // (TT)
211 TGeoBBox* TargetBox =
212 new TGeoBBox("TargetBox", XDimension / 2, YDimension / 2, ZDimension / 2);
213 TGeoVolume* volTarget = new TGeoVolume("volTarget", TargetBox, air);
214
215 //
216 // Volumes definition
217 //
218
219 [[maybe_unused]] TGeoBBox* Cell =
220 new TGeoBBox("cell", BrickX / 2, BrickY / 2, CellWidth / 2);
221 [[maybe_unused]] TGeoVolume* volCell = new TGeoVolume("Cell", Cell, air);
222
223 // Brick
224 TGeoBBox* Brick = new TGeoBBox("brick", BrickX / 2, BrickY / 2, BrickZ / 2);
225 TGeoVolume* volBrick = new TGeoVolume("Brick", Brick, air);
226 volBrick->SetLineColor(kCyan);
227 volBrick->SetTransparency(1);
228 // need to separate the two cases, now with a ternary operator
229 auto* Absorber =
230 new TGeoBBox("Absorber", EmulsionX / 2, EmulsionY / 2, LeadThickness / 2);
231 auto* volAbsorber = new TGeoVolume("volAbsorber", Absorber, tungsten);
232
233 volAbsorber->SetTransparency(1);
234 volAbsorber->SetLineColor(kGray);
235 for (Int_t n = 0; n < NPlates; n++) {
236 volBrick->AddNode(
237 volAbsorber, n,
238 new TGeoTranslation(0, 0,
239 -BrickZ / 2 + BrickPackageZ / 2 + EmPlateWidth +
240 LeadThickness / 2 + n * AllPlateWidth));
241 }
242 if (fsingleemulsionfilm) { // simplified configuration, unique sensitive
243 // layer for the whole emulsion plate
244 TGeoBBox* EmulsionFilm = new TGeoBBox("EmulsionFilm", EmulsionX / 2,
245 EmulsionY / 2, EmPlateWidth / 2);
246 TGeoVolume* volEmulsionFilm =
247 new TGeoVolume("Emulsion", EmulsionFilm, Emufilm); // TOP
248 volEmulsionFilm->SetLineColor(kBlue);
249
250 if (fPassive == 0) {
251 AddSensitiveVolume(volEmulsionFilm);
252 }
253
254 for (Int_t n = 0; n < NPlates + 1; n++) {
255 volBrick->AddNode(
256 volEmulsionFilm, n,
257 new TGeoTranslation(0, 0,
258 -BrickZ / 2 + BrickPackageZ / 2 +
259 EmPlateWidth / 2 + n * AllPlateWidth));
260 }
261 } else { // more accurate configuration, two emulsion films divided by a
262 // plastic base
263 TGeoBBox* EmulsionFilm = new TGeoBBox("EmulsionFilm", EmulsionX / 2,
265 TGeoVolume* volEmulsionFilm =
266 new TGeoVolume("Emulsion", EmulsionFilm, NEmu); // TOP
267 TGeoVolume* volEmulsionFilm2 =
268 new TGeoVolume("Emulsion2", EmulsionFilm, NEmu); // BOTTOM
269 volEmulsionFilm->SetLineColor(kBlue);
270 volEmulsionFilm2->SetLineColor(kBlue);
271
272 if (fPassive == 0) {
273 AddSensitiveVolume(volEmulsionFilm);
274 AddSensitiveVolume(volEmulsionFilm2);
275 }
276 TGeoBBox* PlBase = new TGeoBBox("PlBase", EmulsionX / 2, EmulsionY / 2,
278 TGeoVolume* volPlBase = new TGeoVolume("PlasticBase", PlBase, PBase);
279 volPlBase->SetLineColor(kYellow - 4);
280 for (Int_t n = 0; n < NPlates + 1; n++) {
281 volBrick->AddNode(volEmulsionFilm2, n,
282 new TGeoTranslation(0, 0,
283 -BrickZ / 2 + BrickPackageZ / 2 +
285 n * AllPlateWidth)); // BOTTOM
286 volBrick->AddNode(
287 volEmulsionFilm, n,
288 new TGeoTranslation(
289 0, 0,
290 -BrickZ / 2 + BrickPackageZ / 2 + 3 * EmulsionThickness / 2 +
291 PlasticBaseThickness + n * AllPlateWidth)); // TOP
292 volBrick->AddNode(
293 volPlBase, n,
294 new TGeoTranslation(0, 0,
295 -BrickZ / 2 + BrickPackageZ / 2 +
297 n * AllPlateWidth)); // PLASTIC BASE
298 }
299 }
300
301 volBrick->SetVisibility(kTRUE);
302 TGeoVolume* top = gGeoManager->GetTopVolume();
303 TGeoVolumeAssembly* tTauNuDet = new TGeoVolumeAssembly("tTauNuDet");
304 top->AddNode(tTauNuDet, 1, new TGeoTranslation(0, 0, 0));
305
306 tTauNuDet->AddNode(volTarget, 1, new TGeoTranslation(0, 0, fCenterZ));
307 TGeoBBox* Row = new TGeoBBox("row", WallXDim / 2, BrickY / 2, WallZDim / 2);
308 TGeoVolume* volRow = new TGeoVolume("Row", Row, air);
309 volRow->SetLineColor(20);
310
311 Double_t d_cl_x = -WallXDim / 2;
312 for (int j = 0; j < fNCol; j++) {
313 volRow->AddNode(volBrick, j,
314 new TGeoTranslation(d_cl_x + BrickX / 2, 0, 0));
315 d_cl_x += BrickX;
316 }
317 TGeoBBox* Wall =
318 new TGeoBBox("wall", WallXDim / 2, WallYDim / 2, WallZDim / 2);
319 TGeoVolume* volWall = new TGeoVolume("Wall", Wall, air);
320 volWall->SetLineColor(kGreen);
321
322 Double_t d_cl_y = -WallYDim / 2;
323 for (int k = 0; k < fNRow; k++) {
324 volWall->AddNode(volRow, k, new TGeoTranslation(0, d_cl_y + BrickY / 2, 0));
325
326 // 2mm is the distance for the structure that holds the brick
327 d_cl_y += BrickY + Ydistance;
328 }
329 // Columns
330
331 Double_t d_cl_z = -ZDimension / 2 + TTrackerZ;
332 for (int l = 0; l < fNWall; l++) {
333 volTarget->AddNode(volWall, l,
334 new TGeoTranslation(0, 0, d_cl_z + BrickZ / 2));
335
336 // 6 cm is the distance between 2 columns of consecutive Target for TT
337 // placement
338 d_cl_z += BrickZ + TTrackerZ;
339 }
340} // end construct geometry
341
342Bool_t Target::ProcessHits(FairVolume* vol) {
344 // Set parameters at entrance of volume. Reset ELoss.
345 if (gMC->IsTrackEntering()) {
346 fELoss = 0.;
347 fTime = gMC->TrackTime() * 1.0e09;
348 fLength = gMC->TrackLength();
349 gMC->TrackPosition(fPos);
350 gMC->TrackMomentum(fMom);
351 }
352 // Sum energy loss for all steps in the active volume
353 fELoss += gMC->Edep();
354
355 // Create TargetPoint at exit of active volume
356 if (gMC->IsTrackExiting() || gMC->IsTrackStop() ||
357 gMC->IsTrackDisappeared()) {
358 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
359 // Int_t fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
360 gMC->CurrentVolID(fVolumeID);
361 Int_t detID = fVolumeID;
362 // gGeoManager->PrintOverlaps();
363
364 // cout<< "detID = " << detID << endl;
365 Int_t MaxLevel = gGeoManager->GetLevel();
366 // cout << "MaxLevel = " << MaxLevel << endl;
367 // cout << gMC->CurrentVolPath()<< endl;
368
369 std::vector<Int_t> motherV(MaxLevel);
370 Bool_t EmTop = false;
371 Int_t NPlate = 0;
372 const char* name;
373
374 name = gMC->CurrentVolName();
375 // cout << name << endl;
376
377 if (strcmp(name, "Emulsion") == 0) {
378 NPlate = detID;
379 EmTop = 1;
380 }
381 if (strcmp(name, "Emulsion2") == 0) {
382 NPlate = detID;
383 EmTop = 0;
384 }
385
386 Int_t NWall = 0, NColumn = 0, NRow = 0;
387
388 for (Int_t i = 0; i < MaxLevel; i++) {
389 motherV[i] = gGeoManager->GetMother(i)->GetNumber();
390 const char* mumname = gMC->CurrentVolOffName(i);
391 if (motherV[0] == 1 && motherV[0] != detID) {
392 if (strcmp(mumname, "Brick") == 0) NColumn = motherV[i];
393 if (strcmp(mumname, "Cell") == 0) NRow = motherV[i];
394 if (strcmp(mumname, "Row") == 0) NWall = motherV[i];
395 if ((strcmp(mumname, "Wall") == 0) && (motherV[i] == 2))
396 NWall += fNWall;
397 } else {
398 if (strcmp(mumname, "Cell") == 0) NColumn = motherV[i];
399 if (strcmp(mumname, "Row") == 0) NRow = motherV[i];
400 if (strcmp(mumname, "Wall") == 0) NWall = motherV[i];
401 if ((strcmp(mumname, "volTarget") == 0) && (motherV[i] == 2))
402 NWall += fNWall;
403 }
404 // cout << i << " " << motherV[i] << " name = " << mumname << endl;
405 }
406
407 detID = (NWall + 1) * 1E7 + (NRow + 1) * 1E6 + (NColumn + 1) * 1E4 +
408 (NPlate + 1) * 1E1 + EmTop;
409
410 fVolumeID = detID;
411
412 if (fELoss == 0.) {
413 return kFALSE;
414 }
415 TParticle* p = gMC->GetStack()->GetCurrentTrack();
416 // Int_t MotherID =gMC->GetStack()->GetCurrentParentTrackNumber();
417 Int_t pdgCode = p->GetPdgCode();
418
419 TLorentzVector Pos;
420 gMC->TrackPosition(Pos);
421 Double_t xmean = (fPos.X() + Pos.X()) / 2.;
422 Double_t ymean = (fPos.Y() + Pos.Y()) / 2.;
423 Double_t zmean = (fPos.Z() + Pos.Z()) / 2.;
424
425 AddHit(fTrackID, fVolumeID, TVector3(xmean, ymean, zmean),
426 TVector3(fMom.Px(), fMom.Py(), fMom.Pz()), fTime, fLength, fELoss,
427 pdgCode);
428
429 // Increment number of muon det points in TParticle
430 ShipStack* stack = dynamic_cast<ShipStack*>(gMC->GetStack());
431 stack->AddPoint(ktauTarget);
432 }
433
434 return kTRUE;
435}
436
437std::tuple<Int_t, Int_t, Int_t, Int_t, Bool_t> Target::DecodeBrickID(
438 Int_t detID) {
441 /*
442 \param detID detectorID for the TargetPoint
443 \return a struct providing the wall, row, column and plate number (starting
444 from 1), as well as a boolean for top/bottom emulsion layer. Examples:
445 11010031 -> Wall 1, Row 1, Column 1, Plate 3, true;
446 31010150 -> Wall 3, Row 1, Column 1, Plate 15, false;
447 */
448 auto divt_E7 = std::div(detID, 1E7);
449
450 Int_t NWall = divt_E7.quot;
451 auto divt_E6 = std::div(divt_E7.rem, 1E6);
452
453 Int_t NRow = divt_E6.quot;
454 auto divt_E4 = std::div(divt_E6.rem, 1E4);
455
456 Int_t NColumn = divt_E4.quot;
457 auto divt_E1 = std::div(divt_E4.rem, 1E1);
458
459 Int_t NPlate = divt_E1.quot;
460 Bool_t EmTop = static_cast<Bool_t>(divt_E1.rem);
461
462 return std::make_tuple(NWall, NRow, NColumn, NPlate, EmTop);
463}
@ ktauTarget
Definition: diagrams_b.h:4
Int_t fTrackID
event index
Definition: Detector.h:85
Int_t fVolumeID
track index
Definition: Detector.h:86
TLorentzVector fPos
volume id
Definition: Detector.h:87
Double_t fTime
momentum at entrance
Definition: Detector.h:89
TargetPoint * AddHit(Args &&... args)
Definition: Detector.h:38
TLorentzVector fMom
position at entrance
Definition: Detector.h:88
Double_t fCenterZ
Definition: Target.h:90
void SetMagnetHeight(Double_t Y)
Definition: Target.cxx:132
void SetHpTParam(Int_t n, Double_t dd, Double_t DZ)
Definition: Target.cxx:158
Double_t Ydistance
Definition: Target.h:130
Double_t BrickPackageY
Definition: Target.h:127
Int_t fNRow
Definition: Target.h:103
Double_t BrickY
Definition: Target.h:133
Double_t fHpTDistance
Definition: Target.h:150
void ConstructGeometry() override
Definition: Target.cxx:167
Double_t fBaseX
Definition: Target.h:142
Int_t fnHpT
Definition: Target.h:152
Double_t BrickX
Definition: Target.h:134
void MergeTopBot(Bool_t SingleEmFilm)
Definition: Target.cxx:77
Int_t fDesign
Definition: Target.h:87
Double_t fBaseZ
Definition: Target.h:144
Double_t LeadThickness
Definition: Target.h:121
Double_t PlasticBaseThickness
Definition: Target.h:120
void SetCoilDownHeight(Double_t H2)
Definition: Target.cxx:140
void SetNumberBricks(Double_t col, Double_t row, Double_t wall)
Definition: Target.cxx:83
Double_t fField
Definition: Target.h:100
static std::tuple< Int_t, Int_t, Int_t, Int_t, Bool_t > DecodeBrickID(Int_t detID)
Definition: Target.cxx:437
Double_t ZDimension
Definition: Target.h:110
void SetNumberTargets(Int_t target)
Definition: Target.cxx:89
Double_t CellWidth
Definition: Target.h:136
Double_t WallXDim
Definition: Target.h:112
Double_t EmulsionY
Definition: Target.h:118
void SetDetectorDesign(Int_t Design)
Definition: Target.cxx:70
Double_t BrickPackageZ
Definition: Target.h:128
void SetColumnHeight(Double_t Y)
Definition: Target.cxx:134
Target()
Definition: Target.cxx:61
Bool_t ProcessHits(FairVolume *v=0) override
Definition: Target.cxx:342
Int_t fNTarget
Definition: Target.h:105
void SetBrickParam(Double_t BrX, Double_t BrY, Double_t BrZ, Double_t BrPackX, Double_t BrPackY, Double_t BrPackZ, Int_t number_of_plates_)
Definition: Target.cxx:116
Double_t fHpTDZ
Definition: Target.h:151
void SetTargetWallDimension(Double_t WallXDim, Double_t WallYDim, Double_t WallZDim)
Definition: Target.cxx:91
void SetCenterZ(Double_t z)
Definition: Target.cxx:144
Double_t BrickPackageX
Definition: Target.h:126
Double_t WallYDim
Definition: Target.h:113
void SetDetectorDimension(Double_t xdim, Double_t ydim, Double_t zdim)
Definition: Target.cxx:98
Double_t fPillarX
Definition: Target.h:145
Double_t AllPlateWidth
Definition: Target.h:124
Int_t number_of_plates
Definition: Target.h:106
void SetEmulsionParam(Double_t EmTh, Double_t EmX, Double_t EmY, Double_t PBTh, Double_t EPlW, Double_t LeadTh, Double_t AllPW)
Definition: Target.cxx:104
Double_t fBaseY
Definition: Target.h:143
Double_t WallZDim
Definition: Target.h:114
void SetPillarDimension(Double_t X, Double_t Y, Double_t Z)
Definition: Target.cxx:152
Double_t YDimension
Definition: Target.h:109
Double_t fColumnY
Definition: Target.h:94
Double_t fMagnetBaseY
Definition: Target.h:95
Double_t BrickZ
Definition: Target.h:132
Double_t EmulsionThickness
Definition: Target.h:116
Int_t fNWall
Definition: Target.h:104
void SetCoilUpHeight(Double_t H1)
Definition: Target.cxx:138
void SetTTzdimension(Double_t TTZ)
Definition: Target.cxx:130
Double_t fPillarZ
Definition: Target.h:147
Bool_t fPassive
Definition: Target.h:83
void SetCellParam(Double_t CellW)
Definition: Target.cxx:128
Double_t fCoilH1
Definition: Target.h:96
Int_t fNCol
Definition: Target.h:102
Bool_t fsingleemulsionfilm
Definition: Target.h:85
void SetBaseHeight(Double_t Y)
Definition: Target.cxx:136
Double_t TTrackerZ
Definition: Target.h:139
Double_t fPillarY
Definition: Target.h:146
Double_t EmPlateWidth
Definition: Target.h:122
Double_t XDimension
Definition: Target.h:108
void MakeNuTargetPassive(Bool_t a)
Definition: Target.cxx:75
Double_t fCoilH2
Definition: Target.h:97
void SetMagneticField(Double_t B)
Definition: Target.cxx:142
Double_t EmulsionX
Definition: Target.h:117
Double_t fMagnetY
Definition: Target.h:93
void SetBaseDimension(Double_t X, Double_t Y, Double_t Z)
Definition: Target.cxx:146
#define B
Definition: memgrp.cpp:39
Int_t InitMedium(const char *name)
Definition: ShipGeoUtil.h:20
int strcmp(const String &s1, const String &s2)
Definition: relates.cpp:14