FairRoot/PandaRoot
createRootGeometry_DIRC_sepEV_MCPs.C
Go to the documentation of this file.
1 // macro that creates the Barrel DIRC geometry
2 // to be able to run this macro please be sure you have the following configuration in gconfig/g4Config.C file:
3 // TG4RunConfiguration* runConfiguration
4 // = new TG4RunConfiguration("geomRoot", "QGSP_BERT_EMV+optical", "stepLimiter+specialCuts+specialControls");
5 
6 // input parameters are:
7 // fFocusingSystem = 0 - no focusing is used
8 // fFocusingSystem = 1 - lens
9 // fFocusingSystem = 2 - forward mirror is used
10 // fprizm = kFALSE - no prism
11 // fprizm = kTRUE - prism
12 
13 // allowed configurations:
14 // fFocusingSystem = 0 && fprizm = kFALSE output file is in geometry/dirc_l0_p0.root
15 // fFocusingSystem = 0 && fprizm = kTRUE output file is in geometry/dirc_l0_p1.root
16 // fFocusingSystem = 1 && fprizm = kFALSE output file is in geometry/dirc_l1_p0.root
17 // fFocusingSystem = 2 && fprizm = kFALSE output file is in geometry/dirc_l2_p0.root
18 // fFocusingSystem = 2 && fprizm = kTRUE output file is in geometry/dirc_l2_p1.root
19 // corresponding .root files with geometry please fone in the geometry directory
20 
21 int createRootGeometry_DIRC_sepEV_MCPs(Bool_t sepEV = kTRUE, Int_t fFocusingSystem = 1, Bool_t fprizm = kFALSE){
22 
23  const Double_t pi = 3.1415926535;
24  #include <time.h>
25 
26  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
27 
28  TString vmcWorkdir = getenv("VMCWORKDIR");
29 
30  // Load this libraries
31  gSystem->Load("libGeoBase");
32  gSystem->Load("libParBase");
33  gSystem->Load("libBase");
34  gSystem->Load("libPndData");
35  gSystem->Load("libPassive");
36 
37  // variable to achieve the DIRC basic parameters
38  PndGeoDrc* fGeo = new PndGeoDrc();
39 
40  // units = cm
41 
42 
43  Double_t eps = 0.01; // epsilon
44  Double_t mirr_hthick = 0.01;
45  Double_t PDthick = 0.1;
46  Double_t MCPside = 5.3; //[cm] side length of the active area
47  Double_t PDgap1 = 0.8; // [cm]
48  Double_t PDgap2 = 1.6; //[cm]
49  Double_t EVwidth = 17.;// [cm]
50  Double_t barWidth = 3.5; //[cm]
51 
52  Double_t GlueLayer = 0.;// [cm]fGeo->GlueLayer(); // 0.0038 cm layer of the glue in the middle of the bar
53  Double_t GreaseLayer = 0.;//0.1;// [cm]fGeo->GreaseLayer(); // 1 mm layer of grease between the EV and the PD.
54  Double_t radius = 55.;//48.64;//fGeo->radius(); // 50. radius in middle of the barbox (x and y)
55  Double_t hthick = 1.725/2.;//fGeo->barHalfThick(); // 1.7/2. half thickness of the bars
56  Double_t barnum = 1.;//fGeo->barNum(); // 6 number of bars per barbox
57  Double_t bbnum = fGeo->BBoxNum(); //16. total number of sides = barboxes
58  Double_t bbGap = fGeo->BBoxGap(); //1.5 gap btw the neighboring barboxes (at the middle height)
59  Double_t pipehAngle = fGeo->PipehAngle(); //3.6 [degrees] half of the angular space needed for the target pipe
60 
61  Double_t bbox_zdown = 2.5;//fGeo->barBoxZDown(); // 130. bar box z downstream
62  Double_t bbox_zup = fGeo->barBoxZUp(); // -120. bar box z upstream
63  Double_t bbox_hlen = 0.5*(bbox_zdown - bbox_zup); // 125. bar box half length
64  Double_t bbox_shift = bbox_zup + bbox_hlen; // 5. bar box shift
65  Double_t bargap = fGeo->barGap(); // 0.01 half gap between bars
66  Double_t boxgap = fGeo->boxGap(); // 0.1 gap between bars and the bar box
67  Double_t boxthick = fGeo->boxThick(); // 0.05 thickness of the bar box
68  Double_t len = 0.; // length of the lenses block. see further
69  Double_t fSlabEnd = 0.; // [cm] position at which bar in front of EV ends
70  Double_t fdz_mirr1 = 0.;
71  Double_t fdz_mirr2 = 0.;
72  Double_t fdz_lens3 = 0.;
73  Double_t fdz_lens2 = 0.;
74  Double_t fdz_lens1 = 0.;
75 
76  Double_t sob_angleB = fGeo->EVbackAngle(); //90. [degrees] angle of the EV (usually it is 90)
77  Double_t sob_angle = 30.;//fGeo->EVangle(); //60. [degrees] opening angle of the EV
78  Double_t sob_len = fGeo->EVlen(); // 30. in current version
79  Double_t sob_shift = -bbox_hlen + bbox_shift - sob_len; // -150.
80  Double_t sob_Rout = radius + hthick + sob_len*tan(sob_angle/180.*pi)/cos(pi/bbnum/2.);
81 
82  Double_t bbAngle = ( 180. - 2.*pipehAngle - bbGap/radius/pi*180.*(bbnum/2.-1.) )/(bbnum/2.); // ~20 degrees
83  Double_t bbX = radius*bbAngle/180.*pi; // 17.45 cm
84  cout<<"bbAngle = "<<bbAngle<<", bbX = "<<bbX<<endl;
85 
86 
87  Double_t phi0 = (180.-2.*pipehAngle)/bbnum + pipehAngle;
88  Double_t dphi = (180.-2.*pipehAngle)/bbnum*2.;
89  //----------------------------------------------------------------------
90 
91  // parameters for prizm and separated EV!!!
92  Double_t EVdrop = 1.3;//fGeo->EVdrop(); //0.5 [cm] drop of the EV - inner radius
93  Double_t EVoffset = 0.;//fGeo->EVoffset(); //1. [cm] offset of the EV - outer radius
94 
95  // prizm:
96  Double_t phlength = fGeo->PrismhLength(); //4.5 [cm] half length of the prizm
97  Double_t pdrop = fGeo->PrismDrop(); //0.5 [cm] drop of the prizm - inner side
98  Double_t pangle = fGeo->PrismAngle(); //30. [degrees] angle of the edge
99  Double_t poffset = fGeo->PrismOffset(); //1.[cm] prizm offset - outer side
100  Double_t pheight = 2.*phlength * tan(pangle/180.*pi); // [cm] half heigth of the prism
101 
102  Double_t sob_Rprizm = radius + hthick + poffset + pheight + EVoffset + (sob_len-2.*phlength)*tan(60./180.*pi);
103 
104  Double_t GlueHeight = GlueLayer/cos(3.1415/2. - sob_angleB/180.*3.1415);
105  Double_t PDHeight = PDthick/cos(3.1415/2. - sob_angleB/180.*3.1415);
106  cout<<"prizm length = "<<phlength*2.<<endl;
107  cout<<"prizm height = "<<2.*phlength * tan(pangle/180.*pi)<<endl;
108 
109  //----------------------------------------------------------
110 
111  // Rotations:
112  TGeoRotation rot1;
113  rot1.RotateZ(90.);
114 
115  TString fGeoFile1= Form("prototype_MCPs",fFocusingSystem, fprizm);
116  TString fGeoFile= "../../geometry/";
117  fGeoFile+=fGeoFile1;
118  fGeoFile+=".root";
119  TFile* fi = new TFile(fGeoFile,"RECREATE");
120  cout<<"Output file = "<<fGeoFile<<endl;
121 
122  Double_t par[10];
123  Double_t aa;
124  Double_t z, density, radl, absl, w;
125  Int_t nel, numed, nz;
126 
127  new TGeoManager("Drc", "Drc");
128 
129  // MATERIALS, MIXTURES AND TRACKING MEDIA
130 // Mixture: air
131  nel = 3;
132  density = 0.001205;
133  TGeoMixture *air = new TGeoMixture("air", nel,density);
134  aa = 14.010000; z = 7.000000; w = 0.780000; // N
135  air->DefineElement(0,aa,z,w);
136  aa = 16.000000; z = 8.000000; w = 0.210000; // O
137  air->DefineElement(1,aa,z,w);
138  aa = 39.950000; z = 18.000000; w = 0.010000; // AR
139  air->DefineElement(2,aa,z,w);
140  //air->SetIndex(0);
141 // Medium: air
142  numed = 1; // medium number
143  par[0] = 0.000000; // isvol
144  par[1] = 1.000000; // ifield
145  par[2] = 30.000000; // fieldm
146  par[3] = -1.000000; // tmaxfd
147  par[4] = -1.000000; // stemax
148  par[5] = -1.000000; // deemax
149  par[6] = 0.001000; // epsil
150  par[7] = -1.000000; // stmin
151  TGeoMedium *air_m = new TGeoMedium("air", numed,air, par);
152 
153 // Mixture: DIRCairNoSens
154  nel = 3;
155  density = 0.001205;
156  TGeoMixture *DIRCairNoSens = new TGeoMixture("DIRCairNoSens", nel,density);
157  aa = 14.010000; z = 7.000000; w = 0.780000; // N
158  DIRCairNoSens->DefineElement(0,aa,z,w);
159  aa = 16.000000; z = 8.000000; w = 0.210000; // O
160  DIRCairNoSens->DefineElement(1,aa,z,w);
161  aa = 39.950000; z = 18.000000; w = 0.010000; // AR
162  DIRCairNoSens->DefineElement(2,aa,z,w);
163  //DIRCairNoSens->SetIndex(1);
164 // Medium: DIRCairNoSens
165  numed = 2; // medium number
166  par[0] = 0.000000; // isvol
167  par[1] = 1.000000; // ifield
168  par[2] = 30.000000; // fieldm
169  par[3] = -1.000000; // tmaxfd
170  par[4] = -1.000000; // stemax
171  par[5] = -1.000000; // deemax
172  par[6] = 0.001000; // epsil
173  par[7] = -1.000000; // stmin
174  TGeoMedium *DIRCairNoSens_m = new TGeoMedium("DIRCairNoSens", numed,DIRCairNoSens, par);
175 
176 // Material: DIRCcarbonFiber
177  aa = 12.011000;
178  z = 6.000000;
179  density = 2.500000;
180  radl = 16.999068;
181  absl = 32.080525;
182  TGeoMaterial *DIRCcarbonFiber = new TGeoMaterial("DIRCcarbonFiber", aa,z,density,radl,absl);
183  //DIRCcarbonFiber->SetIndex(6);
184 // Medium: DIRCcarbonFiber
185  numed = 3; // medium number
186  par[0] = 0.000000; // isvol
187  par[1] = 0.000000; // ifield
188  par[2] = 20.000000; // fieldm
189  par[3] = -1.000000; // tmaxfd
190  par[4] = -1.000000; // stemax
191  par[5] = -1.000000; // deemax
192  par[6] = 0.001000; // epsil
193  par[7] = -1.000000; // stmin
194  TGeoMedium *DIRCcarbonFiber_m = new TGeoMedium("DIRCcarbonFiber", numed,DIRCcarbonFiber, par);
195 
196 // Mixture: FusedSil
197  nel = 2;
198  density = 2.200000;
199  TGeoMixture* FusedSil = new TGeoMixture("FusedSil", nel,density);
200  aa = 28.090000; z = 14.000000; w = 0.467475; // SI
201  FusedSil->DefineElement(0,aa,z,w);
202  aa = 15.999400; z = 8.000000; w = 0.532525; // O
203  FusedSil->DefineElement(1,aa,z,w);
204  //FusedSil->SetIndex(0);
205 // Medium: FusedSil
206  numed = 4; // medium number
207  par[0] = 1.000000; // isvol
208  par[1] = 1.000000; // ifield
209  par[2] = 20.000000; // fieldm
210  par[3] = -1.000000; // tmaxfd
211  par[4] = -1.000000; // stemax
212  par[5] = -1.000000; // deemax
213  par[6] = 0.001000; // epsil
214  par[7] = -1.000000; // stmin
215  TGeoMedium *FusedSil_m = new TGeoMedium("FusedSil", numed,FusedSil, par);
216 
217 // Mixture: Epotek
218  nel = 2;
219  density = 2.200000;
220  TGeoMixture* Epotek = new TGeoMixture("Epotek", nel,density);
221  aa = 28.090000; z = 14.000000; w = 0.467475; // SI
222  Epotek->DefineElement(0,aa,z,w);
223  aa = 15.999400; z = 8.000000; w = 0.532525; // O
224  Epotek->DefineElement(1,aa,z,w);
225  //Epotek->SetIndex(0);
226 // Medium: Epotek
227  numed = 5; // medium number
228  par[0] = 1.000000; // isvol
229  par[1] = 1.000000; // ifield
230  par[2] = 20.000000; // fieldm
231  par[3] = -1.000000; // tmaxfd
232  par[4] = -1.000000; // stemax
233  par[5] = -1.000000; // deemax
234  par[6] = 0.001000; // epsil
235  par[7] = -1.000000; // stmin
236  TGeoMedium *Epotek_m = new TGeoMedium("Epotek", numed, Epotek, par);
237 
238 // Mixture: OpticalGrease
239  nel = 2;
240  density = 2.200000;
241  TGeoMixture* OpticalGrease = new TGeoMixture("OpticalGrease", nel,density);
242  aa = 28.090000; z = 14.000000; w = 0.467475; // SI
243  OpticalGrease->DefineElement(0,aa,z,w);
244  aa = 15.999400; z = 8.000000; w = 0.532525; // O
245  OpticalGrease->DefineElement(1,aa,z,w);
246  //OpticalGrease->SetIndex(0);
247 // Medium: OpticalGrease
248  numed = 6; // medium number
249  par[0] = 1.000000; // isvol
250  par[1] = 1.000000; // ifield
251  par[2] = 20.000000; // fieldm
252  par[3] = -1.000000; // tmaxfd
253  par[4] = -1.000000; // stemax
254  par[5] = -1.000000; // deemax
255  par[6] = 0.001000; // epsil
256  par[7] = -1.000000; // stmin
257  TGeoMedium *OpticalGrease_m = new TGeoMedium("OpticalGrease", numed, OpticalGrease, par);
258 
259 // Mixture: Mirror
260  nel = 2;
261  density = 2.200000;
262  TGeoMixture* Mirror = new TGeoMixture("Mirror", nel,density);
263  aa = 28.090000; z = 14.000000; w = 0.467475; // SI
264  Mirror->DefineElement(0,aa,z,w);
265  aa = 15.999400; z = 8.000000; w = 0.532525; // O
266  Mirror->DefineElement(1,aa,z,w);
267  //Mirror->SetIndex(4);
268 // Medium: Mirror
269  numed = 7; // medium number
270  par[0] = 0.000000; // isvol
271  par[1] = 0.000000; // ifield
272  par[2] = 20.000000; // fieldm
273  par[3] = -1.000000; // tmaxfd
274  par[4] = -1.000000; // stemax
275  par[5] = -1.000000; // deemax
276  par[6] = 0.001000; // epsil
277  par[7] = -1.000000; // stmin
278  TGeoMedium *Mirror_m = new TGeoMedium("Mirror", numed,Mirror, par);
279 
280 // Mixture: Marcol82
281  nel = 2;
282  density = 0.850000;
283  TGeoMixture *Marcol82 = new TGeoMixture("Marcol82", nel,density);
284  aa = 1.007940; z = 1.000000; w = 0.148605; // H
285  Marcol82->DefineElement(0,aa,z,w);
286  aa = 12.010700; z = 6.000000; w = 0.851395; // C
287  Marcol82->DefineElement(1,aa,z,w);
288  //Marcol82->SetIndex(5);
289 // Medium: Marcol82
290  numed = 8; // medium number
291  par[0] = 0.000000; // isvol
292  par[1] = 1.000000; // ifield
293  par[2] = 30.000000; // fieldm
294  par[3] = -1.000000; // tmaxfd
295  par[4] = -1.000000; // stemax
296  par[5] = -1.000000; // deemax
297  par[6] = 0.001000; // epsil
298  par[7] = -1.000000; // stmin
299  TGeoMedium *Marcol82_m = new TGeoMedium("Marcol82", numed,Marcol82, par);
300 
301 // Mixture: Marcol82-7
302  nel = 2;
303  density = 0.850000;
304  TGeoMixture *Marcol82_7 = new TGeoMixture("Marcol82-7", nel,density);
305  aa = 1.007940; z = 1.000000; w = 0.148605; // H
306  Marcol82_7->DefineElement(0,aa,z,w);
307  aa = 12.010700; z = 6.000000; w = 0.851395; // C
308  Marcol82_7->DefineElement(1,aa,z,w);
309  //Marcol82_7->SetIndex(5);
310 // Medium: Marcol82_7
311  numed = 9; // medium number
312  par[0] = 0.000000; // isvol
313  par[1] = 1.000000; // ifield
314  par[2] = 30.000000; // fieldm
315  par[3] = -1.000000; // tmaxfd
316  par[4] = -1.000000; // stemax
317  par[5] = -1.000000; // deemax
318  par[6] = 0.001000; // epsil
319  par[7] = -1.000000; // stmin
320  TGeoMedium *Marcol82_7_m = new TGeoMedium("Marcol82-7", numed,Marcol82_7, par);
321 
322 
323 // Mixture: NLAK33A
324  nel = 2;
325  density = 4.220000;
326  TGeoMixture *NLAK33A = new TGeoMixture("NLAK33A", nel, density);
327  aa = 28.090000; z = 14.000000; w = 0.467475; // SI
328  NLAK33A->DefineElement(0,aa,z,w);
329  aa = 15.999400; z = 8.000000; w = 0.532525; // O
330  NLAK33A->DefineElement(1,aa,z,w);
331  //NLAK33A->SetIndex(2);
332 // Medium: NLAK33A
333  numed = 10; // medium number
334  par[0] = 1.000000; // isvol
335  par[1] = 1.000000; // ifield
336  par[2] = 20.000000; // fieldm
337  par[3] = -1.000000; // tmaxfd
338  par[4] = -1.000000; // stemax
339  par[5] = -1.000000; // deemax
340  par[6] = 0.001000; // epsil
341  par[7] = -1.000000; // stmin
342  TGeoMedium *NLAK33A_m = new TGeoMedium("NLAK33A", numed,NLAK33A, par);
344 
345 
346 
347  // focusing systems:
348  // 0 no focusing:
349  if(fFocusingSystem == 0){
350  //Double_t flen = 0.;
351  Double_t len = GreaseLayer;
352  fSlabEnd = -bbox_hlen + bbox_shift + len;
353  cout<<"bar ends at = "<<fSlabEnd<<endl;
354  cout<<"no focusing, len = grease = "<<len<<endl;
355 
356  TGeoBBox* lay = new TGeoBBox("lay", barWidth/2./*(bbX/barnum)/2-bargap*/, hthick, GreaseLayer/2.);
357  TGeoVolume* grBar = new TGeoVolume("greaseBar", lay, gGeoManager->GetMedium("OpticalGrease"));
358  grBar->SetLineColor(kBlue);
359  grBar->SetTransparency(60);
360 
361  //fAtBarEnd = "DrcBar";
362  Double_t fdz_grease = -(bbox_hlen)+len/2.;
363  }
364 // 1 lens
365  if (fFocusingSystem == 1){ // L E N S E S (no airgaps, thin nlak33)
366  // some notes to lens operations (revision 9649) is in
367  // ~carsten/work/documents/software/PandaRoot/lens_definitions_2.pdf
368 
369  Double_t r = 75.18; // first lens radius (cm)
370  Double_t alpha = TMath::ASin(bbX/12/r); // lside -> bbX
371  Double_t a = r - r*TMath::Cos(alpha);
372  Double_t b = a + 0.5; // box dimension .6 instead of .5 due to strong curvature
373 
374  cout<<" DIRC a,b = "<<a<<" "<<b<<endl;
375 
376 
377  Double_t r2 = 75.18; // radius second lens (cm)
378  Double_t b2 = 0.2; // + a2;
379 
380  Double_t r3 = 17.95; // third lens radius (cm)
381  Double_t alpha3 = TMath::ASin(bbX/12/r3); // lside -> bbX
382  Double_t a3 = r3 - r3*TMath::Cos(alpha3);
383  Double_t b3 = a3 + 0.0; // box dimension .6 instead of .5 due to strong curvature
384 
385  // lens1 (b) + lens2 (0.6) + lens3 (b3) + gap (0.5)
386 
387  len = b + 0.2 + b3 + 0.5;//+ a2; // dimension of the box containing both lenses
388 
389  cout<<"lens focusing, DIRC len= "<<len<<endl;
390 
391  fSlabEnd = -bbox_hlen + bbox_shift + len; // used in processHits
392  cout<<"bar ends at = "<<fSlabEnd<<endl;
393 
394  // Lenses
395 
396  // Lens 1
397  Double_t t = -r +b/2;
398 
399  TGeoSphere* logicSphere= new TGeoSphere("S",0.,r, 0. ,180.,0.,360.);
400  TGeoBBox* lBox = new TGeoBBox("B", barWidth/2./*(bbX/barnum)/2-bargap*/, hthick, b/2.);
401  TGeoTranslation *tr1 = new TGeoTranslation("tr1", 0.,0., t);
402  tr1->RegisterYourself();
403  TGeoCompositeShape *cs = new TGeoCompositeShape("cs","S*(B:tr1)");
404  TGeoVolume *lens1 = new TGeoVolume("DrcLENS1",cs, gGeoManager->GetMedium("FusedSil"));
405  lens1->SetLineColor(kRed-8);
406  lens1->SetTransparency(40);
407 
408  // position lens within already shifted bar container at -(bbox_hlen-eps)+len, the lens base is -r + b
409  // with -0.01 one can make a gap visible (.1mm) for orientation
410  //barContainer->AddNode(lens1, 1,new TGeoCombiTrans(0., 0., -(bbox_hlen-eps)+len -(-r+b) /*-0.01*/, new TGeoRotation (0)));
411 /* barContainer->AddNode(lens1, 1,new TGeoCombiTrans(0., 0., -(bbox_hlen)+len -(-r+b), new TGeoRotation (0)));
412 */ fdz_lens1 = -(bbox_hlen)+len -(-r+b);
413 
414 
415  //Lens 2
416  Double_t t2 = -r2;// +b2/2 r2 is the reference point (concave lens)
417  TGeoSphere* logicSphere2 = new TGeoSphere("S2",0 ,r2, 0. ,180.,0.,360.);
418  TGeoBBox* lBox2 = new TGeoBBox("B2", barWidth/2./*(bbX/barnum)/2.-bargap*/, hthick, b2/2.); // lside -> bbX
419  TGeoTranslation *tr2 = new TGeoTranslation("tr2", 0.,0., t2);
420  tr2->RegisterYourself();
421  TGeoCompositeShape *cs2 = new TGeoCompositeShape("cs2","(B2:tr2)-S2");
422  TGeoVolume *lens2 = new TGeoVolume("DrcLENS2",cs2, gGeoManager->GetMedium("NLAK33A"));
423  lens2->SetLineColor(kRed+2);
424  lens2->SetTransparency(40);
425 
426  // place the lens exactly on lens1
427  // position lens within already shifted bar container at -(bbox_hlen-eps)+len, the lens base is -r2
428  // the tip of lens1 is at b
429  // with -0.02 one can make a gap visible (.1mm due to lens1) for orientation
430  //barContainer->AddNode(lens2, 1,new TGeoCombiTrans(0., 0., -(bbox_hlen-eps)+len -(-r2) -b /*-0.02*/, new TGeoRotation (0)));
431 /* barContainer->AddNode(lens2, 1,new TGeoCombiTrans(0., 0., -(bbox_hlen)+len -(-r2) -b , new TGeoRotation (0)));
432 */ fdz_lens2 = -(bbox_hlen)+len -(-r2) -b;
433 
434  //Lens3 (like lens1, same treatment)
435  Double_t t3 = -r3+b3/2;
436  TGeoSphere* logicSphere3= new TGeoSphere("S3",0.,r3, 0. ,180.,0.,360.);
437  TGeoBBox* lBox3 = new TGeoBBox("B3", barWidth/2./*(bbX/barnum)/2-bargap*/, hthick, b3/2.); // lside -> bbX
438  TGeoTranslation *tr3 = new TGeoTranslation("tr3", 0.,0., t3);
439  tr3->RegisterYourself();
440  TGeoCompositeShape *cs3 = new TGeoCompositeShape("cs3","S3*(B3:tr3)");
441  TGeoVolume *lens3 = new TGeoVolume("DrcLENS3",cs3, gGeoManager->GetMedium("NLAK33A"));
442  lens3->SetLineColor(kRed-6);
443  lens3->SetTransparency(40);
444 
445  // place the lens exactly on lens2 plane side
446  // position lens within already shifted bar container at -(bbox_hlen-eps)+len, the lens base is -r3 + b3
447  // with -0.03 one can make a gap visible (.1mm due to lens 1&2) for orientation
448  // b2/2 is the thickness of lens2 in the middle
449  //barContainer->AddNode(lens3, 1,new TGeoCombiTrans(0., 0., -(bbox_hlen-eps)+len -(-r3+b3) -b - b2/2 /*-0.03*/, new TGeoRotation (0)));
450 /* barContainer->AddNode(lens3, 1,new TGeoCombiTrans(0., 0., -(bbox_hlen)+len -(-r3+b3) -b - b2/2 , new TGeoRotation (0)));
451  //cout<<" DIRC r,r2,r3 = "<<r<<" "<<r2<<" "<<r3<<endl;
452 */ fdz_lens3 = -(bbox_hlen)+len -(-r3+b3) -b - b2/2. ;
453 
454  //fAtBarEnd = "DrcLENS3";
455  } // E N D O F N E W L E N S E S
456 
457  // 2 - mirror:
458  if (fFocusingSystem == 2){ // Mirrors at front
459  // Put some mirrors at the downstream end with a focal plane at the PD.
460 
461  double zpos=120.;
462 
463  // The bar is produced with "bbox_hlen-fabs(len)/2.-mirr_hthick"
464  len = -130. + zpos + 1.;
465  //len = -247.0; // negative to make space at downstream end of bar.
466 
467  Double_t len1 = 1.5; // 1st block
468 
469  Double_t mirror_angle = 0.0;// 0.0 is pointing upstream, -90.0 is pointing to the beam axis
470  Double_t focal_length = 2. * bbox_hlen + sob_len - fabs(len) + len1;
471  Double_t mirror_radius = 2. * focal_length;
472 
473  cout<<" mirror radius: "<<mirror_radius<<endl;
474 
475 
476  // no angle for the moment
477  // block
478  TGeoSphere* logicSphere = new TGeoSphere("S",0.,mirror_radius, 0. ,180.,0.,360.);
479  TGeoBBox* lBox = new TGeoBBox("B", barWidth/2./*(bbX/barnum)/2-bargap*/, hthick, fabs(len1)/2.); // lside -> bbX
480 
481  Double_t t = mirror_radius - len1/2.;
482 
483  TGeoTranslation *tr1 = new TGeoTranslation("tr1", 0.,0., t);
484  tr1->RegisterYourself();
485  TGeoCompositeShape *cs = new TGeoCompositeShape("cs","S*(B:tr1)");
486 
487  TGeoVolume *block1 = new TGeoVolume("DrcBlock1",cs, gGeoManager->GetMedium("FusedSil"));
488  block1->SetLineColor(kRed);
489  block1->SetTransparency(40);
490 
491 
492  Double_t shift1 = len1-mirror_radius; // Now the start of block1 is at zero
493  shift1 += bbox_hlen-fabs(len)-2.*mirr_hthick;
494 
495 /*
496  barContainer->AddNode(block1, 1, new TGeoCombiTrans(0., 0., shift1, new TGeoRotation (0)));
497 */ fdz_mirr1 = shift1;
498 
499 
500  Double_t gap = 0;
501  Double_t len2 = fabs(len) - len1 - gap;
502 
503  // no angle for the moment
504  // block
505  TGeoSphere* logicSphere2 = new TGeoSphere("S2",0,mirror_radius, 0. ,180.,0.,360.);
506  TGeoBBox* lBox2 = new TGeoBBox("B2", barWidth/2./*(bbX/barnum)/2-bargap*/, hthick, fabs(len2)/2.); // lside -> bbX
507 
508  // make radius part of block
509  Double_t t2 = mirror_radius + len2/2 - 1;
510 
511  TGeoTranslation *tr2 = new TGeoTranslation("tr2", 0.,0., t2);
512  tr2->RegisterYourself();
513  TGeoCompositeShape *cs2 = new TGeoCompositeShape("cs2","(B2:tr2)-S2");
514 
515  TGeoVolume *block2 = new TGeoVolume("DrcBlock2",cs2, gGeoManager->GetMedium("Mirror"));
516  block2->SetLineColor(kGreen);
517  block2->SetTransparency(40);
518 
519 
520  Double_t shift2 = -mirror_radius; // Now the start of the block is at zero
521  shift2 += bbox_hlen-fabs(len)-2*mirr_hthick; // at end of bar
522  shift2 += len1 + gap;
523 
524  fdz_mirr2 = shift2;
525 
526 /*
527  barContainer->AddNode(block2,
528  1,
529  new TGeoCombiTrans(0.,
530  0.,
531  shift2,
532  // bbox_hlen-mirror_radius-2*mirr_hthick-len2+len1+1,
533  //bbox_hlen-mirror_radius-len2+0.1,
534  new TGeoRotation (0)
535  )
536  );
537 */
538 
539 
540  Double_t flen = 0.;
541  fSlabEnd = -bbox_hlen + bbox_shift + flen;
542  cout<<"bar ends at = "<<fSlabEnd<<endl;
543 
544  //fAtBarEnd = "DrcBar";
545  } // E N D O F MIRRORS
546  //---------------------------------------------------------------------------------------------
547 
548 
549  // create top volume:
550  TGeoVolume* cave;
551  TGeoBBox* lTop = new TGeoBBox(400,400,600);
552  cave = new TGeoVolume("DIRC", lTop, air_m);
553  gGeoManager->SetTopVolume(cave);
554 
555  // create pre-top volume:
556  TGeoVolume* vLocalMother;
557  TGeoPcon* shape = new TGeoPcon("BarrelDIRCShape", 0, 360., 4);
558  shape->DefineSection(0, bbox_zdown, 35., 85.);
559  shape->DefineSection(1, bbox_zup, 35., 85.);
560  shape->DefineSection(2, bbox_zup - sob_len, 35., sob_Rout+poffset+pheight+EVoffset+PDHeight+GlueHeight);
561  shape->DefineSection(3, bbox_zup - sob_len - PDthick - GlueLayer-eps, 35., sob_Rout+poffset+pheight+EVoffset+PDHeight+GlueHeight);
562  vLocalMother = new TGeoVolume("BarrelDIRC", shape, air_m); //DIRCairNoSens_m); //################
563  cave->AddNode(vLocalMother, 0,0);
564 
565 
566  cout<<"bbox length = "<<2.*(bbox_hlen-0.5*(boxgap+boxthick))<<", prizm length = "<<2.*(phlength+0.5*(boxgap+boxthick))<<endl;
567  cout<<"prizm shift = "<<-bbox_hlen+0.5*(boxgap+boxthick)-phlength<<endl;
568 
569  // create BarBoxes:
570  TGeoBBox* logicbbL;
571  TGeoVolume *bbox;
572  if(fprizm == kFALSE){
573  logicbbL = new TGeoBBox("logicbbL", barWidth/2.+boxgap+boxthick, (2.*hthick+boxgap+boxthick+EVdrop+EVoffset)/2., bbox_hlen);
574  TGeoTrap*logicSepEVBox = new TGeoTrap("logicSepEVBox", sob_len/2.,
575  sob_angle/2.,
576  270.,
577  (2.*hthick+boxgap+boxthick+EVdrop+EVoffset +sob_len*tan(sob_angle*pi/180.))/2.,
578  EVwidth/2.+boxthick+eps,
579  EVwidth/2.+boxthick+eps,
580  0., //7
581  (2.*hthick+boxgap+boxthick+EVdrop+EVoffset)/2.,
582  EVwidth/2.+boxthick+eps,
583  EVwidth/2.+boxthick+eps,
584  0.);
585  TGeoTranslation* trseb = new TGeoTranslation("trseb", 0., sob_len/2.*tan(sob_angle*pi/180./2.), -bbox_hlen-sob_len/2.);
586  trseb->RegisterYourself();
587  TGeoCompositeShape* bboxL = new TGeoCompositeShape("bboxL", "logicbbL + logicSepEVBox:trseb");
588 
589  bbox = new TGeoVolume("DrcBarBox", bboxL,DIRCcarbonFiber_m);
590  }
591  bbox->SetLineColor(4);//(30);
592 
593 
594  TGeoBBox* logicbbS;
595  TGeoVolume *abox;
596  if(fprizm == kFALSE){
597  logicbbS = new TGeoBBox("logicbbS", barWidth/2.+boxgap, (2.*hthick+boxgap+EVdrop+EVoffset)/2., bbox_hlen);
598  TGeoTrap* logicSepEVContainer = new TGeoTrap("logicSepEVContainer", sob_len/2.,
599  sob_angle/2.,
600  270.,
601  (2.*hthick+boxgap+EVdrop+EVoffset +sob_len*tan(sob_angle*pi/180.))/2.,
602  EVwidth/2.+eps,
603  EVwidth/2.+eps,
604  0, //7
605  (2.*hthick+boxgap+EVdrop+EVoffset)/2.,
606  EVwidth/2.+eps,
607  EVwidth/2.+eps,
608  0.); //11)
609  TGeoCompositeShape* bboxS = new TGeoCompositeShape("bboxS","logicbbS + logicSepEVContainer:trseb");
610  //TGeoCompositeShape* bboxS = new TGeoCompositeShape("bboxS","logicSepEVContainer:trseb");
611  abox = new TGeoVolume("DrcAirBox", bboxS, DIRCairNoSens_m);
612  bbox->AddNode(abox, 0, new TGeoCombiTrans(0., 0., 0., new TGeoRotation(0)));
613  }
614  abox->SetLineColor(2);//(19);
615 
616  // separated EVs put into airBoxes:
617  TGeoTrap* logicEVs = new TGeoTrap("logicEVs", sob_len/2.,
618  sob_angle/2.,
619  270.,
620  (2.*hthick+EVdrop+EVoffset +sob_len*tan(sob_angle*pi/180.))/2.,
621  EVwidth/2.,
622  EVwidth/2.,
623  0,
624  (2.*hthick+EVdrop+EVoffset)/2.,
625  EVwidth/2.,
626  EVwidth/2.,
627  0.);
628  TGeoVolume *smallEVs = new TGeoVolume("DrcEVSensor", logicEVs, FusedSil_m);
629  smallEVs->SetLineColor(kMagenta+2);
630  smallEVs->SetTransparency(40);
631 
632 
633  //}
634  // put barboxes and sep. EV into right positions:
635  Double_t dx_bbox, dy_bbox, dz_bbox, phi_curr;
636 
637  for(Int_t m = 0; m < bbnum; m ++){
638  phi_curr = (90. - phi0 - dphi*m)/180.*pi;
639  if(m > bbnum/2-1){ phi_curr = (90. - phi0 - dphi*m - 2.*pipehAngle)/180.*pi; }
640  dx_bbox = radius * cos(phi_curr);
641  dy_bbox = radius * sin(phi_curr);
642  if(fprizm == 0){
643  dz_bbox = bbox_shift;
644  }
645  if(fprizm == 1){
646  dz_bbox = bbox_shift + 0.5*(boxgap+boxthick);
647  }
648  TGeoRotation rot_bbox;
649  rot_bbox.RotateZ( -phi0 - m*dphi - (TMath::Floor(2.*m/bbnum))*(2.*pipehAngle));
650  vLocalMother->AddNode(bbox, m+1, new TGeoCombiTrans(dx_bbox, dy_bbox, dz_bbox, new TGeoRotation(rot_bbox)));
651  }
652  cout<<"bar width = "<<barWidth/2./*2.*(((bbX/barnum)/2.)-bargap)*/ << ", bar with gaps = "<<(bbX/barnum)<<endl;
653  cout<<"barboxL width = "<<bbX/2.+boxgap+boxthick<<", barboxS width = "<<bbX/2.+boxgap<<endl;
654  cout<<"x="<<(((bbX/barnum)/2.)-bargap)*2<<", y="<<hthick*2<<", z="<<(bbox_hlen-fabs(len)/2.-mirr_hthick)*2<<endl<<endl;
655 
656  // create logic bar:
657  TGeoBBox* logicBar = new TGeoBBox("logicBar", barWidth/2./*((bbX/barnum)/2.)-bargap*/, hthick, bbox_hlen-fabs(len)/2.-mirr_hthick);
658  TGeoVolume* bar;
659  if(fprizm == kFALSE){
660  bar = new TGeoVolume("DrcBarSensor",logicBar, FusedSil_m );
661  //bar = new TGeoVolume("DrcBarSensor",logicBar );
662  }
663  bar->SetLineColor(kCyan-9);
664  bar->SetTransparency(60);
665 
666  // create logic mirror:
667  TGeoBBox* logicMirror = new TGeoBBox("logicMirror", barWidth/2./*bbX/barnum/2.-bargap*/, hthick, mirr_hthick);
668  TGeoVolume *mirr = new TGeoVolume("DrcMirr", logicMirror, Mirror_m);
669  mirr->SetLineColor(5);
670 
671  Double_t dx, dy, dz_bar, dz_mirr;
672 
673  for(Int_t j=0; j<barnum; j++){
674  dx = - (bbX/2.) + (bbX/barnum)/2. + j * (bbX/barnum);
675  dy = 0.;//len/2. - mirr_hthick;
676  if(fprizm == kFALSE){
677  dz_bar = fabs(len)/2.-mirr_hthick;
678  dz_mirr = bbox_hlen - mirr_hthick;
679  if(fFocusingSystem == 1){ // lens
680  abox->AddNode(lens1, 1+j, new TGeoCombiTrans(dx, dy, fdz_lens1, new TGeoRotation (0)));
681  abox->AddNode(lens2, 1+j, new TGeoCombiTrans(dx, dy, fdz_lens2, new TGeoRotation (0)));
682  abox->AddNode(lens3, 1+j, new TGeoCombiTrans(dx, dy, fdz_lens3, new TGeoRotation (0)));
683  }
684  if(fFocusingSystem == 2){ // mirror
685  abox->AddNode(block1, 1+j, new TGeoCombiTrans(dx, dy, fdz_mirr1, new TGeoRotation (0)));
686  abox->AddNode(block2, 1+j, new TGeoCombiTrans(dx, dy, fdz_mirr2, new TGeoRotation (0)));
687  }
688  if(fFocusingSystem == 0){
689  //abox->AddNode(grBar, 1, new TGeoCombiTrans(dx, dy, fdz_grease, new TGeoRotation(0)));
690  }
691  }
692  if(fprizm == kTRUE){
693  if(fFocusingSystem == 0){
694  dz_bar = -mirr_hthick - 0.5*boxgap;
695  dz_mirr = bbox_hlen -0.5*boxgap - mirr_hthick;
696  }
697  if(fFocusingSystem == 2){
698  dz_bar = -mirr_hthick - 0.5*boxgap + len/2.;
699  abox->AddNode(block1, 1+j, new TGeoCombiTrans(dx, dy, fdz_mirr1, new TGeoRotation (0)));
700  abox->AddNode(block2, 1+j, new TGeoCombiTrans(dx, dy, fdz_mirr2, new TGeoRotation (0)));
701  }
702  }
703  abox->AddNode(smallEVs, 1+j, new TGeoCombiTrans(dx,dy + sob_len/2.*tan(sob_angle*pi/180./2.),-bbox_hlen-sob_len/2.,new TGeoRotation(0)));
704  abox->AddNode(bar, 1+j, new TGeoCombiTrans(dx, dy, dz_bar, new TGeoRotation(0)));
705  if(fFocusingSystem != 2){ // not a forward mirror
706  abox->AddNode(mirr, 1+j, new TGeoCombiTrans(dx, dy, dz_mirr, new TGeoRotation(0)));
707  }
708  }
709 
710  // PhotoDetector:
711  Double_t dR;
712  Double_t xEV;
713  Double_t cosFactor1;
714 
715  TGeoPgon* logicEV1, * logicEV2, *logicEV3, * logicEV4;
716  cosFactor1 = cos(pipehAngle/180.*pi)/cos(dphi/180.*pi/2.);
717 
718  TGeoPgon *logicPD1 = new TGeoPgon("logicPD1", 93.6, 172.8, bbnum/2, 2);
719  TGeoPgon *logicPD2 = new TGeoPgon("logicPD2", -86.4, 172.8, bbnum/2, 2);
720  TGeoPgon *logicPD3 = new TGeoPgon("logicPD3", 86.4, 7.2, 1, 2);
721  TGeoPgon *logicPD4 = new TGeoPgon("logicPD4", -93.6, 7.2, 1, 2);
722 
723  if(fprizm == kFALSE){
724  if(sob_angleB == 90.){
725  cout<<"sob_angleB == 90"<<endl;
726  logicPD1->DefineSection(0, 0., radius-hthick-EVdrop, sob_Rout+EVoffset);
727  logicPD1->DefineSection(1, PDthick, radius-hthick-EVdrop, sob_Rout+EVoffset);
728  logicPD2->DefineSection(0, 0., radius-hthick-EVdrop, sob_Rout+EVoffset);
729  logicPD2->DefineSection(1, PDthick, radius-hthick-EVdrop, sob_Rout+EVoffset);
730  logicPD3->DefineSection(0, 0., (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
731  logicPD3->DefineSection(1, PDthick, (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
732  logicPD4->DefineSection(0, 0., (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
733  logicPD4->DefineSection(1, PDthick, (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
734 
735  }
736  if(sob_angleB != 90.){
737  logicPD1->DefineSection(0, 0., radius-hthick+eps, radius-hthick+eps+0.1);
738  logicPD1->DefineSection(1, xEV, sob_Rout - xEV*tan(sob_angle/180.*pi), sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1);
739  logicPD2->DefineSection(0, 0., radius-hthick+eps, radius-hthick+eps+0.1);
740  logicPD2->DefineSection(1, xEV, sob_Rout - xEV*tan(sob_angle/180.*pi), sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1);
741  logicPD3->DefineSection(0, 0., (radius-hthick+eps)*cosFactor1, (radius-hthick+eps+0.1)*cosFactor1);
742  logicPD3->DefineSection(1, xEV, (sob_Rout - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
743  logicPD4->DefineSection(0, 0., (radius-hthick+eps)*cosFactor1, (radius-hthick+eps+0.1)*cosFactor1);
744  logicPD4->DefineSection(1, xEV, (sob_Rout - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
745 
746  }
747 
748  }
749  if(fprizm == kTRUE){
750  if(sob_angleB == 90.){
751  logicPD1->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
752  logicPD1->DefineSection(1, PDthick, radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
753  logicPD2->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
754  logicPD2->DefineSection(1, PDthick, radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
755  logicPD3->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
756  logicPD3->DefineSection(1, PDthick, (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
757  logicPD4->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
758  logicPD4->DefineSection(1, PDthick, (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
759 
760  }
761  if(sob_angleB != 90.){
762  logicPD1->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, radius-hthick-pdrop-EVdrop+eps+0.1);
763  logicPD1->DefineSection(1, xEV, sob_Rprizm - xEV*tan(sob_angle/180.*pi), sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1);
764  logicPD2->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, radius-hthick-pdrop-EVdrop+eps+0.1);
765  logicPD2->DefineSection(1, xEV, sob_Rprizm - xEV*tan(sob_angle/180.*pi), sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1);
766  logicPD3->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, (radius-hthick-pdrop-EVdrop+eps+0.1)*cosFactor1);
767  logicPD3->DefineSection(1, xEV, (sob_Rprizm - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
768  logicPD4->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, (radius-hthick-pdrop-EVdrop+eps+0.1)*cosFactor1);
769  logicPD4->DefineSection(1, xEV, (sob_Rprizm - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
770  }
771  }
772 
773  TGeoCompositeShape *logicPD = new TGeoCompositeShape("logicPD","logicPD1 + logicPD2 + logicPD3 + logicPD4");
774  TGeoVolume *pd = new TGeoVolume("DrcPDSensor", logicPD, FusedSil_m);
775  pd->SetLineColor(kGreen);//-6);
776 
777  // Small PD - MCPs
778  TGeoBBox* logicMcp = new TGeoBBox("logicMcp", 5.3/2., 5.3/2., PDthick/2.);
779  TGeoBBox* logicMcpGlue = new TGeoBBox("logicMcpGlue", 5.3/2., 5.3/2., GlueLayer/2.);
780  TGeoTranslation* trmcp[9];
781  TGeoTranslation* trmcpg[9];
782  for(Int_t itr=0; itr<3; itr++){
783  Double_t dy_row = MCPside/2. - (hthick+EVdrop) + itr*(MCPside + PDgap1);
784  for(Int_t jtr=0; jtr<3; jtr++){
785  Double_t dx_row = (EVwidth/2./*((bbX/barnum)/2.)-bargap*/) - MCPside/2. - jtr*(MCPside + PDgap2);
786  TString trname = Form("trmcp%d", itr*3+jtr);
787  TString trgname = Form("trmcpg%d", itr*3+jtr);
788  trmcp[itr*3 + jtr] = new TGeoTranslation(trname, dx_row, dy_row, dz_bbox-bbox_hlen-sob_len-GlueLayer-PDthick/2.);
789  trmcp[itr*3 + jtr]->RegisterYourself();
790  trmcpg[itr*3 + jtr] = new TGeoTranslation(trgname, dx_row, dy_row, dz_bbox-bbox_hlen-sob_len-GlueLayer/2.);
791  trmcpg[itr*3 + jtr]->RegisterYourself();
792  cout<<"translation "<<trmcp[itr*3 + jtr]->GetName()<<endl;
793  }
794  }
795  TGeoCompositeShape *logicMcpMap = new TGeoCompositeShape("logicMcpMap","logicMcp:trmcp0 + logicMcp:trmcp1 + logicMcp:trmcp2 + logicMcp:trmcp3 + logicMcp:trmcp4 + logicMcp:trmcp5 + logicMcp:trmcp6 + logicMcp:trmcp7 + logicMcp:trmcp8") ;
796  TGeoVolume* Mcp = new TGeoVolume("DrcPDSensor", logicMcpMap, FusedSil_m);
797  Mcp->SetLineColor(kGreen+3);
798 
799  TGeoCompositeShape *logicMcpGlueMap = new TGeoCompositeShape("logicMcpGlueMap", "logicMcpGlue:trmcpg0 + logicMcpGlue:trmcpg1 + logicMcpGlue:trmcpg2 + logicMcpGlue:trmcpg3 + logicMcpGlue:trmcpg4 + logicMcpGlue:trmcpg5 + logicMcpGlue:trmcpg6 + logicMcpGlue:trmcpg7 + logicMcpGlue:trmcpg8");
800  TGeoVolume* McpGlue = new TGeoVolume("DrcMcpGlue", logicMcpGlueMap, OpticalGrease_m);
801  McpGlue->SetLineColor(4);//(kCyan);//-9);
802  McpGlue->SetTransparency(40);
803 
804  if(sob_angleB == 90.){
805  for(Int_t m = 0; m < bbnum; m ++){
806  phi_curr = (90. - phi0 - dphi*m)/180.*pi;
807  if(m > bbnum/2-1){ phi_curr = (90. - phi0 - dphi*m - 2.*pipehAngle)/180.*pi; }
808  dx_bbox = radius * cos(phi_curr);
809  dy_bbox = radius * sin(phi_curr);
810 
811  TGeoRotation rot_bbox;
812  rot_bbox.RotateZ( -phi0 - m*dphi - (TMath::Floor(2.*m/bbnum))*(2.*pipehAngle));
813  TGeoRotation rot_EV;
814  rot_EV.RotateZ(-90.-phi0 - m*dphi - (TMath::Floor(2.*m/bbnum))*(2.*pipehAngle));
815 
816  vLocalMother->AddNode(Mcp, m, new TGeoCombiTrans(dx_bbox, dy_bbox, 0., new TGeoRotation(rot_bbox)));
817 
818  // put glue under each Mcp:
819  //vLocalMother->AddNode(McpGlue, m, new TGeoCombiTrans(dx_bbox, dy_bbox, 0., new TGeoRotation(rot_bbox)));
820 
821  //vLocalMother->AddNode(bbox, m+1, new TGeoCombiTrans(dx_bbox, dy_bbox, dz_bbox, new TGeoRotation(rot_bbox)));
822  }
823 
824 
825  }
826  if(sob_angleB != 90.){
827  //vLocalMother->AddNode(pd, 1, new TGeoCombiTrans(0., 0., sob_shift, new TGeoRotation(0)));
828  //vLocalMother->AddNode(gluePD, 1, new TGeoCombiTrans(0., 0., sob_shift, new TGeoRotation(0)));
829  }
830  //Origin
831  //vLocalMother->AddNode(new TGeoVolume("Origin",new TGeoTube(10,10,0)),1);
832 
833  gGeoManager->CloseGeometry();
834 
835  cave->CheckOverlaps(0.1, "");
836  gGeoManager->CheckOverlaps(0.001); // [cm]
837  //gGeoManager->CheckGeometryFull();
838 
839  TObjArray *listOfOverlaps = gGeoManager->GetListOfOverlaps();
840  cout<<listOfOverlaps->GetEntries()<<endl;
841  listOfOverlaps->Print();
842 
843  cave->Write();
844  fi->Close();
845  // McpGlue->Draw("ogl");
846  cave->Draw("ogl");
847 
848  return 0;
849 }
static T ASin(const T &x)
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
Double_t EVbackAngle()
Definition: PndGeoDrc.h:148
double dy
Int_t t2
Definition: hist-t7.C:106
double r
Definition: RiemannTest.C:14
Double_t BBoxNum()
Definition: PndGeoDrc.h:136
__m128 m
Definition: P4_F32vec4.h:28
TTree * b
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Double_t EVlen()
Definition: PndGeoDrc.h:127
Double_t par[3]
#define pi
Definition: createSTT.C:60
int createRootGeometry_DIRC_sepEV_MCPs(Bool_t sepEV=kTRUE, Int_t fFocusingSystem=1, Bool_t fprizm=kFALSE)
Double_t BBoxGap()
Definition: PndGeoDrc.h:130
Double_t boxGap()
Definition: PndGeoDrc.h:116
TGeoManager * gGeoManager
static T Cos(const T &x)
Definition: PndCAMath.h:43
TGeoRotation * rot1
Double_t PipehAngle()
Definition: PndGeoDrc.h:139
Double_t PrismAngle()
Definition: PndGeoDrc.h:160
Int_t a
Definition: anaLmdDigi.C:126
Double_t barBoxZUp()
Definition: PndGeoDrc.h:108
#define cave
Definition: createSTT.C:62
TGeoShape * shape
TFile * fi
Double_t PrismDrop()
Definition: PndGeoDrc.h:154
Double_t
Double_t phi0
Definition: checkhelixhit.C:60
double eps(TVector3 v1, TVector3 v2)
const Double_t zpos
vLocalMother
Double_t z
Int_t t3
Definition: hist-t7.C:106
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
Double_t boxThick()
Definition: PndGeoDrc.h:120
double dx
Double_t PrismOffset()
Definition: PndGeoDrc.h:151
Double_t PrismhLength()
Definition: PndGeoDrc.h:157
TTree * t
Definition: bump_analys.C:13
double alpha
Definition: f_Init.h:9
TString fGeoFile
#define air
Definition: createSTT.C:72
double r2