]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSvPPRcoarseasymm.cxx
Volume ITSD slightly modified to be consistent with v5. Some improvement in the printouts
[u/mrichter/AliRoot.git] / ITS / AliITSvPPRcoarseasymm.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 Revision 1.23  2001/04/04 07:02:16  barbera
19 Position of the cylinders holding rails corrected
20
21 Revision 1.22  2001/03/29 22:01:53  barbera
22 New flag added to change the material for some service supports as asked by the PMD people. Some changes to the services due to the new drawings from the engineers
23
24 Revision 1.21  2001/03/29 05:28:56  barbera
25 Rails material changed from aluminum to carbon fiber according with the decision of the last Technical Board
26
27 Revision 1.20  2001/03/28 06:40:21  barbera
28 Central and services mother volumes made consistenf for detailed and coarse geometry. Switch for rails added to the coarse geometries
29
30 Revision 1.19  2001/03/13 18:13:30  barbera
31 Some mother volumes sligthly modified to eliminate an overlap with the absorber
32
33 Revision 1.18  2001/02/19 09:44:16  barbera
34 Copy no.2 of volume ICO2 re-inserted
35
36 Revision 1.17  2001/02/09 00:05:31  nilsen
37 Added fMajor/MinorVersion variables and made other changes to better make
38 use of the new code changes in AliITSgeom related classes.
39
40 Revision 1.16  2001/01/30 09:23:13  hristov
41 Streamers removed (R.Brun)
42
43 Revision 1.15  2001/01/17 07:41:29  barbera
44 Some media parameters modified
45
46 Revision 1.14  2001/01/15 13:13:53  barbera
47 Some comments added
48
49 Revision 1.13  2000/12/10 16:00:45  barbera
50 Added last definition of special media like end-ladder boxes and cones
51
52 Revision 1.12  2000/11/02 15:44:23  barbera
53 Services on the opposite side w.r.t the absorber modified to make room for rails
54
55 Revision 1.10  2000/10/27 17:19:50  barbera
56 Position of rails w.r.t. the interaction point corrected.
57
58 Revision 1.9  2000/10/27 13:31:29  barbera
59 Rails between ITS and TPC added.
60
61 Revision 1.8  2000/10/27 13:03:08  barbera
62 Small changes in the SPD volumes and materials
63
64 Revision 1.6  2000/10/16 14:45:37  barbera
65 Mother volume ITSD modified to avoid some overlaps
66
67 Revision 1.5  2000/10/16 13:49:15  barbera
68 Services volumes slightly modified and material added following Pierluigi Barberis' information
69
70 Revision 1.4  2000/10/07 15:33:07  barbera
71 Small corrections to the ITSV mother volume
72
73 Revision 1.3  2000/10/07 13:06:50  barbera
74 Some new materials and media defined
75
76 Revision 1.2  2000/10/07 10:58:15  barbera
77 Mother volume ITSV corrected
78
79 Revision 1.1  2000/10/06 23:09:24  barbera
80 New coarse geometry (asymmetric services
81
82 Revision 1.20  2000/10/02 21:28:08  fca
83 Removal of useless dependecies via forward declarations
84
85 Revision 1.19  2000/07/10 16:07:19  fca
86 Release version of ITS code
87
88 Revision 1.14.2.2  2000/05/19 10:09:21  nilsen
89 fix for bug with HP and Sun unix + fix for event display in ITS-working branch
90
91 Revision 1.14.2.1  2000/03/04 23:45:19  nilsen
92 Fixed up the comments/documentation.
93
94 Revision 1.14  1999/11/25 06:52:56  fca
95 Correct value of drca
96
97 Revision 1.13.2.1  1999/11/25 06:52:21  fca
98 Correct value of drca
99
100 Revision 1.13  1999/10/27 11:16:26  fca
101 Correction of problem in geometry
102
103 Revision 1.12  1999/10/22 08:25:25  fca
104 remove double definition of destructors
105
106 Revision 1.11  1999/10/22 08:16:49  fca
107 Correct destructors, thanks to I.Hrivnacova
108
109 Revision 1.10  1999/10/06 19:56:50  fca
110 Add destructor
111
112 Revision 1.9  1999/10/05 08:05:09  fca
113 Minor corrections for uninitialised variables.
114
115 Revision 1.8  1999/09/29 09:24:20  fca
116 Introduction of the Copyright and cvs Log
117
118 */
119
120 ///////////////////////////////////////////////////////////////////////////////
121 //                                                                           //
122 //  Inner Traking System version PPR coarse asymmetric                                         //
123 //  This class contains the base procedures for the Inner Tracking System    //
124 //                                                                           //
125 // Authors: R. Barbera
126 // version 6.
127 // Created  2000.
128 //
129 //  NOTE: THIS IS THE COARSE ASYMMETRIC PPR geometry of the ITS. 
130 // THIS WILL NOT WORK
131 // with the geometry or module classes or any analysis classes. You are 
132 // strongly encouraged to uses AliITSv5.
133 //                                                                           //
134 ///////////////////////////////////////////////////////////////////////////////
135 #include <iostream.h> 
136 #include <TMath.h>
137 #include <TRandom.h>
138 #include <TVector.h>
139 #include <TGeometry.h>
140 #include <TNode.h>
141 #include <TTUBE.h>
142 #include <TFile.h>    // only required for Tracking function?
143 #include <TCanvas.h>
144 #include <TObjArray.h>
145 #include <TClonesArray.h>
146
147
148 #include "AliMC.h"
149 #include "AliMagF.h"
150 #include "AliConst.h"
151
152 #include "AliITShit.h"
153 #include "AliITSvPPRcoarseasymm.h"
154 #include "AliRun.h"
155
156
157 ClassImp(AliITSvPPRcoarseasymm)
158  
159 //_____________________________________________________________________________
160 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm() {
161 ////////////////////////////////////////////////////////////////////////
162 //    Standard default constructor for the ITS version 6.
163 ////////////////////////////////////////////////////////////////////////
164
165     fIdN = 0;
166     fIdName = 0;
167     fIdSens    = 0;
168     fMajorVersion = 9;
169     fMinorVersion = 0;
170 }
171 //_____________________________________________________________________________
172 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const char *name, const char *title) : AliITS(name, title){
173 ////////////////////////////////////////////////////////////////////////
174 //    Standard constructor for the ITS version 6.
175 ////////////////////////////////////////////////////////////////////////
176
177     fIdN = 6;
178     fIdName = new TString[fIdN];
179     fIdName[0] = "ITS1";
180     fIdName[1] = "ITS2";
181     fIdName[2] = "ITS3";
182     fIdName[3] = "ITS4";
183     fIdName[4] = "ITS5";
184     fIdName[5] = "ITS6";
185     fIdSens    = new Int_t[fIdN];
186     for (Int_t i=0;i<fIdN;i++) fIdSens[i]=0;
187     fMajorVersion = 9;
188     fMinorVersion = 0;
189 }
190 //____________________________________________________________________________
191 AliITSvPPRcoarseasymm::AliITSvPPRcoarseasymm(const AliITSvPPRcoarseasymm &source){
192 ////////////////////////////////////////////////////////////////////////
193 //     Copy Constructor for ITS version 6.
194 ////////////////////////////////////////////////////////////////////////
195     if(&source == this) return;
196     Warning("Copy Constructor","Not allowed to copy AliITSvPPRcoarseasymm");
197     return;
198 }
199 //_____________________________________________________________________________
200 AliITSvPPRcoarseasymm& AliITSvPPRcoarseasymm::operator=(const AliITSvPPRcoarseasymm &source){
201 ////////////////////////////////////////////////////////////////////////
202 //    Assignment operator for the ITS version 6.
203 ////////////////////////////////////////////////////////////////////////
204   if(&source == this) return *this;
205     Warning("= operator","Not allowed to copy AliITSvPPRcoarseasymm");
206   return *this;
207 }
208 //_____________________________________________________________________________
209 AliITSvPPRcoarseasymm::~AliITSvPPRcoarseasymm() {
210 ////////////////////////////////////////////////////////////////////////
211 //    Standard destructor for the ITS version 6.
212 ////////////////////////////////////////////////////////////////////////
213 }
214
215 //__________________________________________________________________________
216 void AliITSvPPRcoarseasymm::BuildGeometry(){
217 ////////////////////////////////////////////////////////////////////////
218 //    Geometry builder for the ITS version 6.
219 ////////////////////////////////////////////////////////////////////////
220     TNode *node, *top;
221     const int kColorITS=kYellow;
222     //
223     top = gAlice->GetGeometry()->GetNode("alice");
224
225     new TTUBE("S_layer1","Layer1 of ITS","void",3.95,3.95+0.05475,12.25);
226     top->cd();
227     node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
228     node->SetLineColor(kColorITS);
229     fNodes->Add(node);
230
231     new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+0.05475,16.3);
232     top->cd();
233     node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
234     node->SetLineColor(kColorITS);
235     fNodes->Add(node);
236
237     new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.05288,21.1);
238     top->cd();
239     node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
240     node->SetLineColor(kColorITS);
241     fNodes->Add(node);
242
243     new TTUBE("S_layer4","Layer4 of ITS","void",24,24+0.05288,29.6);
244     top->cd();
245     node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
246     node->SetLineColor(kColorITS);
247     fNodes->Add(node);
248
249     new TTUBE("S_layer5","Layer5 of ITS","void",40,40+0.05382,45.1);
250     top->cd();
251     node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
252     node->SetLineColor(kColorITS);
253     fNodes->Add(node);
254
255     new TTUBE("S_layer6","Layer6 of ITS","void",45,45+0.05382,50.4);
256     top->cd();
257     node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
258     node->SetLineColor(kColorITS);
259     fNodes->Add(node);
260 }
261 //_____________________________________________________________________________
262 void AliITSvPPRcoarseasymm::CreateGeometry(){
263 ////////////////////////////////////////////////////////////////////////
264 //    This routine defines and Creates the geometry for version 6 of the ITS.
265 ////////////////////////////////////////////////////////////////////////
266   
267   //INNER RADII OF THE SILICON LAYERS 
268   Float_t rl[6]    = { 3.8095,7.,15.,24.,38.1,43.5765 };   
269   //THICKNESSES OF LAYERS (in % radiation length)
270   Float_t drl[6]   = { 1.03,1.03,0.94,0.95,0.91,0.87 };   
271   //HALF LENGTHS OF LAYERS  
272   Float_t dzl[6]   = { 14.35,14.35,25.1,32.1,49.405,55.27 };
273   //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
274   Float_t dzb[6]   = { 12.4,12.4,13.5,15.,7.5,7.5 };   
275   //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
276   Float_t drb[6]   = { rl[1]-rl[0],0.2,5.,5.,4.,4. };        
277
278  
279   Float_t dits[3], rlim, zmax;
280   Float_t zpos;
281   Float_t pcits[100], ztpc;
282   Int_t idrotm[1999], i;
283   Float_t dgh[100];
284   
285   Int_t rails = 1;       // flag for rails (1 --> rails in; 0 --> rails out)
286   Int_t suppmat = 0;     // flag to change the material of the services
287                          // supports (=0 copper, =1 aluminum, =2 carbon)  
288   rails = GetRails();
289   
290   if(rails != 0 && rails != 1) {
291      cout << "ITS - WARNING: the switch for rails is not set neither to 0 (rails out) nor to 1 (rails in)." 
292      " The default value of 1 (rails in) will be used." << endl;
293   }  
294   
295   if (rails == 0 ) {
296      cout << "ITS: Rails are out." << endl; 
297   } else {
298      cout << "ITS: Rails are in." << endl;
299   }      
300   
301   suppmat = GetSupportMaterial();   
302   
303   if (suppmat != 0 && suppmat != 1 && suppmat != 2) {
304      cout << "ITS - WARNING: the flag for the material of services supports is not set neither to 0 (copper) nor to 1 (aluminum) nor to 2 (carbon)." 
305      " The default value of 0 (copper) will be used." << endl;
306   }  
307   
308   if (suppmat == 0) {
309      cout << "ITS: The material of the services supports is copper." << endl; 
310   } else if (suppmat == 1){
311      cout << "ITS: The material of the services supports is aluminum." << endl;
312   } else {
313      cout << "ITS: The material of the services supports is carbon." << endl;
314   }      
315       
316
317   Int_t *idtmed = fIdtmed->GetArray()-199;
318   
319   //     CONVERT INTO CM (RL(SI)=9.36 CM) 
320   for (i = 0; i < 6; ++i) {
321     drl[i] = drl[i] / 100. * 9.36;
322   }
323     
324   //     FIELD CAGE HALF LENGTH 
325   
326   rlim  = 50.;
327   zmax  = 74.;
328   ztpc = 284.;
329   
330   // --- Define ghost volume containing the whole ITS (including services) 
331   //     and fill it with air 
332   
333   dgh[0] = 0.;
334   dgh[1] = 360.;
335   dgh[2] = 16.;
336   dgh[3] = -ztpc-5.-0.1;
337   dgh[4] = 46;   
338   dgh[5] = 85.;
339   dgh[6] = -ztpc;
340   dgh[7] = 46;   
341   dgh[8] = 85.;
342   dgh[9] = -ztpc;
343   dgh[10] = 46;  
344   dgh[11] = rlim+6;
345   dgh[12] = -97.5;
346   dgh[13] = 46;  
347   dgh[14] = rlim+6;
348   dgh[15] = -zmax;
349   dgh[16] = 46;  
350   dgh[17] = rlim+6;
351   dgh[18] = -48;   
352   dgh[19] = 6;
353   dgh[20] = rlim+6;
354   dgh[21] = -28.6;   
355   dgh[22] = 6;
356   dgh[23] = rlim+6;    
357   dgh[24] = -27.6;  
358   dgh[25] = 3.295;
359   dgh[26] = rlim+6; 
360   dgh[27] = 27.6;   
361   dgh[28] = 3.295;
362   dgh[29] = rlim+6;
363   dgh[30] = 28.6;   
364   dgh[31] = 6;
365   dgh[32] = rlim+6;
366   dgh[33] = 48;   
367   dgh[34] = 6;
368   dgh[35] = rlim+6;  
369   dgh[36] = zmax;
370   dgh[37] = 46;
371   dgh[38] = rlim+6;
372   dgh[39] = 97.5;
373   dgh[40] = 46;  
374   dgh[41] = rlim+6;
375   dgh[42] = ztpc;
376   dgh[43] = 62;     
377   dgh[44] = 62+4.;  
378   dgh[45] = ztpc;
379   dgh[46] = 62;     
380   dgh[47] = 85.;
381   dgh[48] = ztpc+4.+0.1;
382   dgh[49] = 62.4;
383   dgh[50] = 85.;
384   gMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 51);
385   
386   // --- Place the ghost volume in its mother volume (ALIC) and make it 
387   //     invisible 
388   
389   gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
390   //gMC->Gsatt("ITSV", "SEEN", 0); 
391
392
393   // --- Define ghost volume containing the six layers and fill it with air 
394   
395   dgh[0] = 0.;
396   dgh[1] = 360.;
397   dgh[2] = 8.;
398   dgh[3] = -zmax;  
399   dgh[4] = 46.;
400   dgh[5] = rlim;
401   dgh[6] = -47.5;    
402   dgh[7] = 6.005;
403   dgh[8] = rlim;
404   dgh[9] = -28.5;    
405   dgh[10] = 6.005;
406   dgh[11] = rlim;  
407   dgh[12] = -27.5;   
408   dgh[13] = 3.3;
409   dgh[14] = rlim;
410   dgh[15] = 27.5;    
411   dgh[16] = 3.3;
412   dgh[17] = rlim;
413   dgh[18] = 28.5;    
414   dgh[19] = 6.005;
415   dgh[20] = rlim;
416   dgh[21] = 47.5;    
417   dgh[22] = 6.005;
418   dgh[23] = rlim;
419   dgh[24] = zmax;    
420   dgh[25] = 46.;
421   dgh[26] = rlim;
422   gMC->Gsvolu("ITSD", "PCON", idtmed[275], dgh, 27);
423   
424   // --- Place the ghost volume in its mother volume (ITSV) and make it 
425   //     invisible 
426   
427   gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
428   //gMC->Gsatt("ITSD", "SEEN", 0);
429   
430
431   //     ITS LAYERS (SILICON) 
432   
433   dits[0] = rl[0];
434   dits[1] = rl[0] + drl[0];
435   dits[2] = dzl[0];
436   gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
437   gMC->Gspos("ITS1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
438   
439   dits[0] = rl[1];
440   dits[1] = rl[1] + drl[1];
441   dits[2] = dzl[1];
442   gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
443   gMC->Gspos("ITS2", 1, "ITSD", 0., 0., 0., 0, "ONLY");
444   
445   dits[0] = rl[2];
446   dits[1] = rl[2] + drl[2];
447   dits[2] = dzl[2];
448   gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
449   gMC->Gspos("ITS3", 1, "ITSD", 0., 0., 0., 0, "ONLY");
450   
451   dits[0] = rl[3];
452   dits[1] = rl[3] + drl[3];
453   dits[2] = dzl[3];
454   gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
455   gMC->Gspos("ITS4", 1, "ITSD", 0., 0., 0., 0, "ONLY");
456   
457   dits[0] = rl[4];
458   dits[1] = rl[4] + drl[4];
459   dits[2] = dzl[4];
460   gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
461   gMC->Gspos("ITS5", 1, "ITSD", 0., 0., 0., 0, "ONLY");
462   
463   dits[0] = rl[5];
464   dits[1] = rl[5] + drl[5];
465   dits[2] = dzl[5];
466   gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
467   gMC->Gspos("ITS6", 1, "ITSD", 0., 0., 0., 0, "ONLY");
468   
469   // END-LADDER ELECTRONICS BOXES AND CABLES FOR SPD
470   
471   gMC->Gsvolu("IEL1", "TUBE", idtmed[208], dits, 0); 
472   for (i = 0; i < 2; i++) {
473     dits[0] = rl[i];
474     dits[1] = dits[0] + drb[i];
475     dits[2] = dzb[i] / 2.;
476     zpos = dzl[i] + dits[2];
477     gMC->Gsposp("IEL1", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
478     gMC->Gsposp("IEL1", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
479   }
480   
481   // END-LADDER ELECTRONICS BOXES AND CABLES FOR SDD
482   
483   gMC->Gsvolu("IEL2", "TUBE", idtmed[237], dits, 0); 
484   for (i = 2; i < 3; i++) {
485     dits[0] = rl[i]-2.5;
486     dits[1] = dits[0] + drb[i];
487     dits[2] = dzb[i] / 2.;
488     zpos = dzl[i] + dits[2];
489     gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
490     gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
491   }
492   for (i = 3; i < 4; i++) {
493     dits[0] = rl[i]-1.4;
494     dits[1] = dits[0] + drb[i];
495     dits[2] = dzb[i] / 2.;
496     zpos = dzl[i] + dits[2];
497     gMC->Gsposp("IEL2", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
498     gMC->Gsposp("IEL2", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
499   }
500   
501   // END-LADDER ELECTRONICS BOXES AND CABLES FOR SSD
502   
503   gMC->Gsvolu("IEL3", "TUBE", idtmed[263], dits, 0); 
504   for (i = 4; i < 5; i++) {
505     dits[0] = rl[i]+1.4;
506     dits[1] = dits[0] + drb[i];
507     dits[2] = dzb[i] / 2.;
508     zpos = dzl[i] + dits[2];
509     gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
510     gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
511   }    
512   for (i = 5; i < 6; i++) {
513     dits[0] = rl[i]+0.4235;
514     dits[1] = dits[0] + drb[i];
515     dits[2] = dzb[i] / 2.;
516     zpos = dzl[i] + dits[2];
517     gMC->Gsposp("IEL3", i+1, "ITSD", 0., 0., zpos, 0, "ONLY", dits, 3);
518     gMC->Gsposp("IEL3", i+1+6, "ITSD", 0., 0.,-zpos, 0, "ONLY", dits, 3);
519   }        
520
521   //    DEFINE THERMAL SCREEN FOR SPD
522   
523   pcits[0] = 8.3;
524   pcits[1] = 8.5;
525   pcits[2] = 42.5;
526   gMC->Gsvolu("ICY1", "TUBE", idtmed[274], pcits, 3);   
527   gMC->Gspos("ICY1", 1, "ITSD", 0., 0., 0., 0, "ONLY");
528
529   //    DEFINE END CONES FOR SDD
530   
531   pcits[0] = (59.-42.5)/2.;
532   pcits[1] = 8.5;
533   pcits[2] = 8.5+0.1;
534   pcits[3] = 28.;
535   pcits[4] = 28.+0.1;  
536   gMC->Gsvolu("ICO1", "CONE", idtmed[238], pcits, 5);    
537   AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
538   gMC->Gspos("ICO1", 1, "ITSD", 0., 0., 42.5+pcits[0], 0, "ONLY");
539   gMC->Gspos("ICO1", 2, "ITSD", 0., 0., -(42.5+pcits[0]), idrotm[200], "ONLY");
540
541   //    DEFINE CYLINDER BETWEEN SDD AND SSD
542   
543   pcits[0] = (59.5-0.13/2.)/2.;
544   pcits[1] = (59.5+0.13/2.)/2.;
545   pcits[2] = 57.;
546   gMC->Gsvolu("ICY2", "TUBE", idtmed[274], pcits, 3);   
547   gMC->Gspos("ICY2", 1, "ITSD", 0., 0., 0., 0, "ONLY"); 
548
549   //    DEFINE END CONES FOR SSD
550   
551   pcits[0] = (74.-59.)/2.;
552   pcits[1] = 28.;
553   pcits[2] = 28.+0.1;
554   pcits[3] = 47.;
555   pcits[4] = 47.+0.1;
556   gMC->Gsvolu("ICO2", "CONE", idtmed[264], pcits, 5);    
557   gMC->Gspos("ICO2", 1, "ITSD", 0., 0., 59.+pcits[0], 0, "ONLY");
558   gMC->Gspos("ICO2", 2, "ITSD", 0., 0., -(59.+pcits[0]), idrotm[200], "ONLY");
559   
560     
561   // ****************************  SERVICES  *********************************
562   
563
564   
565   // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
566   //     UPPER PART
567   
568   dgh[0] = 46.;    
569   dgh[1] = 46.+1.0;  
570   dgh[2] = 9.5;
571   dgh[3] = 12.;
572   dgh[4] = 168.;
573   
574   if (suppmat == 0) {
575      gMC->Gsvolu("I1CU", "TUBS", idtmed[279], dgh, 5);    // copper
576   } else if (suppmat == 1) {
577      gMC->Gsvolu("I1CU", "TUBS", idtmed[285], dgh, 5);    // aluminum
578   } else {
579      gMC->Gsvolu("I1CU", "TUBS", idtmed[274], dgh, 5);    // carbon
580   }     
581   gMC->Gspos("I1CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
582   gMC->Gspos("I1CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
583   
584   // --- DEFINE CABLES AT THE END OF THE ITS CONES - COPPER PART
585   //     LOWER PART
586   
587   dgh[0] = 46.;    
588   dgh[1] = 46.+1.0;  
589   dgh[2] = 9.5;
590   dgh[3] = 192.;
591   dgh[4] = 348.;
592   
593   if (suppmat == 0) {
594      gMC->Gsvolu("I2CU", "TUBS", idtmed[279], dgh, 5);    // copper
595   } else if (suppmat == 1) {
596      gMC->Gsvolu("I2CU", "TUBS", idtmed[285], dgh, 5);    // aluminum
597   } else {
598      gMC->Gsvolu("I2CU", "TUBS", idtmed[274], dgh, 5);    // carbon
599   }     
600   gMC->Gspos("I2CU", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
601   gMC->Gspos("I2CU", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");
602
603
604   // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
605   //     UPPER PART
606   
607   dgh[0] = 46.+1.0;  
608   dgh[1] = 46.+1.0+1.5;   
609   dgh[2] = 9.5;
610   dgh[3] = 12.;
611   dgh[4] = 168.;
612   
613   gMC->Gsvolu("I1CC", "TUBS", idtmed[274], dgh, 5);  
614   gMC->Gspos("I1CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
615   gMC->Gspos("I1CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");  
616   
617   // --- DEFINE CABLES AT THE END OF THE ITS CONES - CARBON PART
618   //     LOWER PART
619   
620   dgh[0] = 46.+1.0;  
621   dgh[1] = 46.+1.0+1.5;   
622   dgh[2] = 9.5;
623   dgh[3] = 192.;
624   dgh[4] = 348.;
625   
626   gMC->Gsvolu("I2CC", "TUBS", idtmed[274], dgh, 5);  
627   gMC->Gspos("I2CC", 1, "ITSV", 0., 0., 83.5, 0, "ONLY");
628   gMC->Gspos("I2CC", 2, "ITSV", 0., 0., -83.5, idrotm[200], "ONLY");  
629
630   // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
631   //    UPPER PART
632     
633   dgh[0] = 46.;  
634   dgh[1] = 56.;
635   dgh[2] = 2.25;
636   dgh[3] = 12.;
637   dgh[4] = 168.;
638   
639   gMC->Gsvolu("IPA1", "TUBS", idtmed[285], dgh, 5);  
640   gMC->Gspos("IPA1", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");  
641   gMC->Gspos("IPA1", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY"); 
642
643
644   // --- DEFINE PATCH PANELS AT THE END OF THE ITS CONES
645   //     LOWER PART
646     
647   dgh[0] = 46.;  
648   dgh[1] = 56.;
649   dgh[2] = 2.25;
650   dgh[3] = 192.;
651   dgh[4] = 348.;
652   
653   gMC->Gsvolu("IPA2", "TUBS", idtmed[285], dgh, 5);  
654   gMC->Gspos("IPA2", 1, "ITSV", 0., 0., 95.25, 0, "ONLY");  
655   gMC->Gspos("IPA2", 2, "ITSV", 0., 0., -95.25, idrotm[200], "ONLY"); 
656
657
658   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
659   //     UPPER PART
660   
661   dgh[0] = (ztpc-97.5)/2.;
662   dgh[1] = 46.2;     
663   dgh[2] = 46.2+1.0;  
664   dgh[3] = 62.3;     
665   dgh[4] = 62.3+1.0;   
666   dgh[5] = 12.;    
667   dgh[6] = 168.;
668   if (suppmat == 0) {
669      gMC->Gsvolu("ICU1", "CONS", idtmed[279], dgh, 7);    // copper
670   } else if (suppmat == 1) {
671      gMC->Gsvolu("ICU1", "CONS", idtmed[285], dgh, 7);    // aluminum  
672   } else {
673      gMC->Gsvolu("ICU1", "CONS", idtmed[274], dgh, 7);    // carbon
674   }
675   gMC->Gspos("ICU1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");   
676   
677   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - COPPER PART
678   //     LOWER PART
679   
680   dgh[0] = (ztpc-97.5)/2.;
681   dgh[1] = 46.2;      
682   dgh[2] = 46.2+1.0;  
683   dgh[3] = 62.3;      
684   dgh[4] = 62.3+1.0;  
685   dgh[5] = 192.;    
686   dgh[6] = 348.;
687   if (suppmat == 0) {
688      gMC->Gsvolu("ICU2", "CONS", idtmed[279], dgh, 7);    // copper
689   } else if (suppmat == 1) {
690      gMC->Gsvolu("ICU2", "CONS", idtmed[285], dgh, 7);    // aluminum  
691   } else {
692      gMC->Gsvolu("ICU2", "CONS", idtmed[274], dgh, 7);    // carbon
693   }
694   gMC->Gspos("ICU2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");  
695
696
697    // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
698    //     UPPER PART
699   
700   dgh[0] = (ztpc-97.5)/2.;
701   dgh[1] = 46.2+1.0;      
702   dgh[2] = 46.2+1.0+1.5;  
703   dgh[3] = 62.3+1.0;      
704   dgh[4] = 62.3+1.0+1.5;  
705   dgh[5] = 12.;    
706   dgh[6] = 168.;  
707   gMC->Gsvolu("ICC1", "CONS", idtmed[274], dgh, 7);    
708   gMC->Gspos("ICC1", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");   
709   
710   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE ABSORBER SIDE - CARBON PART
711   //     LOWER PART
712   
713   dgh[0] = (ztpc-97.5)/2.;
714   dgh[1] = 46.2+1.0;    
715   dgh[2] = 46.2+1.0+1.5;
716   dgh[3] = 62.3+1.0;    
717   dgh[4] = 62.3+1.0+1.5;
718   dgh[5] = 192.;    
719   dgh[6] = 348.;  
720   gMC->Gsvolu("ICC2", "CONS", idtmed[274], dgh, 7);    
721   gMC->Gspos("ICC2", 1, "ITSV", 0., 0., 97.5+dgh[0], 0, "ONLY");  
722    
723   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
724   //     UPPER PART
725     
726   dgh[0] = 62.1; 
727   dgh[1] = 74.5;
728   dgh[2] = 0.5;
729   dgh[3] = 12.;
730   dgh[4] = 168.;
731   if (suppmat == 0) {
732      gMC->Gsvolu("ICU3", "TUBS", idtmed[279], dgh, 5);    // copper
733   } else if (suppmat == 1) {
734      gMC->Gsvolu("ICU3", "TUBS", idtmed[285], dgh, 5);    // aluminum
735   } else {
736      gMC->Gsvolu("ICU3", "TUBS", idtmed[274], dgh, 5);    // carbon
737     }
738   gMC->Gspos("ICU3", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");  
739
740   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - COPPER PART
741   //     LOWER PART
742   
743   dgh[0] = 62.1;  
744   dgh[1] = 74.5;
745   dgh[2] = 0.5;
746   dgh[3] = 192.;
747   dgh[4] = 348.;
748   if (suppmat == 0) {
749      gMC->Gsvolu("ICU4", "TUBS", idtmed[279], dgh, 5);    // copper
750   } else if (suppmat == 1) {
751      gMC->Gsvolu("ICU4", "TUBS", idtmed[285], dgh, 5);    // aluminum
752   } else {
753      gMC->Gsvolu("ICU4", "TUBS", idtmed[274], dgh, 5);    // carbon
754   }
755   gMC->Gspos("ICU4", 1, "ITSV", 0., 0., ztpc+1.5+dgh[2], 0, "ONLY");     
756      
757   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
758   //     UPPER PART
759
760   dgh[0] = 62.1;  
761   dgh[1] = 74.5;
762   dgh[2] = 0.75;
763   dgh[3] = 12.;
764   dgh[4] = 168.;
765   gMC->Gsvolu("ICC3", "TUBS", idtmed[274], dgh, 5);    
766   gMC->Gspos("ICC3", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");   
767     
768   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON THE ABSORBER SIDE - CARBON PART
769   //     LOWER PART
770
771   dgh[0] = 62.1;  
772   dgh[1] = 74.5;
773   dgh[2] = 0.75;
774   dgh[3] = 192.;
775   dgh[4] = 348.;
776   gMC->Gsvolu("ICC4", "TUBS", idtmed[274], dgh, 5);    
777   gMC->Gspos("ICC4", 1, "ITSV", 0., 0., ztpc+dgh[2], 0, "ONLY");  
778   
779   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
780   //     THE ABSORBER - COPPER PART - UPPER PART
781   
782   dgh[0] = 46.;      
783   dgh[1] = 46.+1.0;  
784   dgh[2] = (ztpc-97.5+1.5)/2.;
785   dgh[3] = 12.;
786   dgh[4] = 168.;
787   if (suppmat == 0) {
788      gMC->Gsvolu("ICU5", "TUBS", idtmed[279], dgh, 5);   // copper
789   } else if (suppmat == 1) {
790      gMC->Gsvolu("ICU5", "TUBS", idtmed[285], dgh, 5);   // aluminum
791   } else {
792      gMC->Gsvolu("ICU5", "TUBS", idtmed[274], dgh, 5);   // carbon
793   }
794   gMC->Gspos("ICU5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");  
795   
796   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
797   //     THE ABSORBER - COPPER PART - LOWER PART
798   
799   dgh[0] = 46.;  
800   dgh[1] = 46.+1.0;  
801   dgh[2] = (ztpc-97.5+1.5)/2.;
802   dgh[3] = 192.;
803   dgh[4] = 348.;  
804   if (suppmat == 0) {
805      gMC->Gsvolu("ICU6", "TUBS", idtmed[279], dgh, 5);   // copper
806   } else if (suppmat == 1) {
807      gMC->Gsvolu("ICU6", "TUBS", idtmed[285], dgh, 5);   // aluminum
808   } else {
809      gMC->Gsvolu("ICU6", "TUBS", idtmed[274], dgh, 5);   // carbon
810   }
811   gMC->Gspos("ICU6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");    
812   
813   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
814   //     THE ABSORBER - CARBON PART - UPPER PART
815   
816   dgh[0] = 46.+1.0;  
817   dgh[1] = 46.+1.0+1.5; 
818   dgh[2] = (ztpc-97.5)/2.;
819   dgh[3] = 12.;
820   dgh[4] = 168.;  
821   gMC->Gsvolu("ICC5", "TUBS", idtmed[274], dgh, 5);   
822   gMC->Gspos("ICC5", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");   
823   
824   // --- DEFINE CABLES/COOLING BELOW THE TPC ON THE OTHER SIDE W.R.T.
825   //     THE ABSORBER - CARBON PART - LOWER PART
826   
827   dgh[0] = 46.+1.0;   
828   dgh[1] = 46.+1.0+1.5;  
829   dgh[2] = (ztpc-97.5)/2.;
830   dgh[3] = 192.;
831   dgh[4] = 348.;  
832   gMC->Gsvolu("ICC6", "TUBS", idtmed[274], dgh, 5);   
833   gMC->Gspos("ICC6", 1, "ITSV", 0., 0., -97.5-dgh[2], 0, "ONLY");      
834
835   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
836   //     COPPER PART - UPPER PART
837     
838   dgh[0] = 46.;   
839   dgh[1] = 74.5;
840   dgh[2] = 0.5;
841   dgh[3] = 12.;
842   dgh[4] = 168.;  
843   if (suppmat == 0) {
844      gMC->Gsvolu("ICU7", "TUBS", idtmed[279], dgh, 5);   // copper
845   } else if (suppmat == 1) {
846      gMC->Gsvolu("ICU7", "TUBS", idtmed[285], dgh, 5);   // aluminum
847   } else {
848      gMC->Gsvolu("ICU7", "TUBS", idtmed[274], dgh, 5);   // carbon
849   }
850   gMC->Gspos("ICU7", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");  
851   
852   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
853   //     COPPER PART - LOWER PART
854     
855   dgh[0] = 46.; 
856   dgh[1] = 74.5;
857   dgh[2] = 0.5;
858   dgh[3] = 192.;
859   dgh[4] = 348.;   
860   if (suppmat == 0) {
861      gMC->Gsvolu("ICU8", "TUBS", idtmed[279], dgh, 5);   // copper
862   } else if (suppmat == 1) {
863      gMC->Gsvolu("ICU8", "TUBS", idtmed[285], dgh, 5);   // aluminum
864   } else {
865      gMC->Gsvolu("ICU8", "TUBS", idtmed[274], dgh, 5);   // carbon
866   }
867   gMC->Gspos("ICU8", 1, "ITSV", 0., 0., -(ztpc+1.5+dgh[2]), 0, "ONLY");      
868     
869   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
870   //     CARBON PART - UPPER PART
871   
872   dgh[0] = 46.+1.0;  
873   dgh[1] = 74.5;
874   dgh[2] = 0.75;
875   dgh[3] = 12.;
876   dgh[4] = 168.;   
877   gMC->Gsvolu("ICC7", "TUBS", idtmed[274], dgh, 5);   
878   gMC->Gspos("ICC7", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY"); 
879   
880   // --- DEFINE CABLES/COOLING BEHIND THE TPC ON OTHER SIDE W.R.T. THE ABSORBER
881   //     CARBON PART - LOWER PART
882   
883   dgh[0] = 46.+1.0;  
884   dgh[1] = 74.5;
885   dgh[2] = 0.75;
886   dgh[3] = 192.;
887   dgh[4] = 348.;     
888   gMC->Gsvolu("ICC8", "TUBS", idtmed[274], dgh, 5);   
889   gMC->Gspos("ICC8", 1, "ITSV", 0., 0., -(ztpc+dgh[2]), 0, "ONLY");        
890     
891   // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - UPPER PART
892   
893   dgh[0] = 74.5;
894   dgh[1] = 79.5;
895   dgh[2] = 2.5;
896   dgh[3] = 12.;
897   dgh[4] = 168.;    
898   gMC->Gsvolu("IHK1", "TUBS", idtmed[284], dgh, 5);  
899   gMC->Gspos("IHK1", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");   
900   
901   // --- DEFINE HOOK TO THE TPC ON OTHER SIDE W.R.T. THE ABSORBER - LOWER PART
902   
903   dgh[0] = 74.5;
904   dgh[1] = 79.5;
905   dgh[2] = 2.5;
906   dgh[3] = 192.;
907   dgh[4] = 348.;    
908   gMC->Gsvolu("IHK2", "TUBS", idtmed[284], dgh, 5);  
909   gMC->Gspos("IHK2", 1, "ITSV", 0., 0., -ztpc-dgh[2], 0, "ONLY");      
910   
911   // --- DEFINE RAILS BETWEEN THE ITS AND THE TPC
912   
913   if (rails == 1) {
914   
915      dgh[0] = 2.;          
916      dgh[1] = 8.;           
917      dgh[2] = 190.;         
918      gMC->Gsvolu("IRA1", "BOX ", idtmed[239], dgh, 3);
919      gMC->Gspos("IRA1", 1, "ITSV", 53.5, 0., -69.5, 0, "ONLY");   
920      gMC->Gsvolu("IRA2", "BOX ", idtmed[239], dgh, 3);    
921      gMC->Gspos("IRA2", 1, "ITSV", -53.5, 0., -69.5, 0, "ONLY");    
922
923      dgh[0] = 2.-0.5;    // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2      
924      dgh[1] = 8.-0.5;    // 0.5 was determined in such a way that the aluminum area is 20.9 cm^2       
925      dgh[2] = 190.;         
926      gMC->Gsvolu("IRA3", "BOX ", idtmed[275], dgh, 3);   
927      gMC->Gspos("IRA3", 1, "IRA1", 0., 0., 0., 0, "ONLY");   
928      gMC->Gsvolu("IRA4", "BOX ", idtmed[275], dgh, 3);     
929      gMC->Gspos("IRA4", 1, "IRA2", 0., 0., 0., 0, "ONLY");    
930
931   }
932
933   // --- DEFINE CYLINDERS HOLDING RAILS BETWEEN THE ITS AND THE TPC
934   
935   dgh[0] = 56.9;    
936   dgh[1] = 59.;
937   dgh[2] = 0.6;    
938   gMC->Gsvolu("ICYL", "TUBE", idtmed[285], dgh, 3);   
939   gMC->Gspos("ICYL", 1, "ALIC", 0., 0., 74.1, 0, "ONLY");       
940   gMC->Gspos("ICYL", 2, "ALIC", 0., 0., -74.1, idrotm[200], "ONLY");  
941
942   // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE CYLINDERS
943
944   dgh[0] = 0.;        
945   dgh[1] = 3.;         
946   dgh[2] = 5.;  // 5. comes from the fact that the volume has to be 567.6/2 cm^3       
947   gMC->Gsvolu("ISR1", "TUBE", idtmed[286], dgh, 3);   
948   gMC->Gspos("ISR1", 1, "ALIC", 54.9, 11., 79.5, 0, "ONLY");   
949   gMC->Gspos("ISR1", 2, "ALIC", 54.9, -11., 79.5, 0, "ONLY");   
950   gMC->Gspos("ISR1", 3, "ALIC", -54.9, 11., 79.5, 0, "ONLY"); 
951   gMC->Gspos("ISR1", 4, "ALIC", -54.9, -11., 79.5, 0, "ONLY");  
952   gMC->Gspos("ISR1", 5, "ALIC", 54.9, 11., -79.5, 0, "ONLY");   
953   gMC->Gspos("ISR1", 6, "ALIC", 54.9, -11., -79.5, 0, "ONLY");   
954   gMC->Gspos("ISR1", 7, "ALIC", -54.9, 11., -79.5, 0, "ONLY"); 
955   gMC->Gspos("ISR1", 8, "ALIC", -54.9, -11., -79.5, 0, "ONLY");         
956   
957   // --- DEFINE SUPPORTS FOR RAILS ATTACHED TO THE ABSORBER
958
959   dgh[0] = 5.;        
960   dgh[1] = 12.;         
961   dgh[2] = 5.;         
962   gMC->Gsvolu("ISR2", "BOX ", idtmed[285], dgh, 3);   
963   gMC->Gspos("ISR2", 1, "ALIC", 53.5, 0., 125.5, 0, "ONLY");
964   gMC->Gsvolu("ISR3", "BOX ", idtmed[285], dgh, 3);   
965   gMC->Gspos("ISR3", 1, "ALIC", -53.5, 0., 125.5, 0, "ONLY");  
966   
967   dgh[0] = 5.-2.;        
968   dgh[1] = 12.-2.;         
969   dgh[2] = 5.;         
970   gMC->Gsvolu("ISR4", "BOX ", idtmed[275], dgh, 3);   
971   gMC->Gspos("ISR4", 1, "ISR2", 0., 0., 0., 0, "ONLY");     
972   gMC->Gsvolu("ISR5", "BOX ", idtmed[275], dgh, 3);   
973   gMC->Gspos("ISR5", 1, "ISR3", 0., 0., 0., 0, "ONLY");
974   
975   // --- DEFINE SUPPORTS TO ATTACH THE ITS TO THE TPC
976   
977   dgh[0] = 0.;        
978   dgh[1] = 5.;         
979   dgh[2] = 2.;         
980   gMC->Gsvolu("ISR6", "TUBE", idtmed[285], dgh, 3);   
981   gMC->Gspos("ISR6", 1, "ALIC", 0., 54., 77., 0, "ONLY"); 
982   gMC->Gspos("ISR6", 2, "ALIC", 0., 54., -77., 0, "ONLY"); 
983   gMC->Gspos("ISR6", 3, "ALIC", 0., -54., -77., 0, "ONLY");                   
984     
985     
986   // --- Outputs the geometry tree in the EUCLID/CAD format 
987   
988   if (fEuclidOut) {
989     gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
990   }
991 }
992 //_____________________________________________________________________________
993 void AliITSvPPRcoarseasymm::CreateMaterials(){
994 ////////////////////////////////////////////////////////////////////////
995   //
996   // Create ITS materials
997   //     This function defines the default materials used in the Geant
998   // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
999   // AliITSvPPRcoarseasymm.
1000   // In general it is automatically replaced by
1001   // the CreatMaterials routine defined in AliITSv?. Should the function
1002   // CreateMaterials not exist for the geometry version you are using this
1003   // one is used. See the definition found in AliITSv5 or the other routine
1004   // for a complete definition.
1005   //
1006   // Water H2O
1007   Float_t awat[2]  = { 1.00794,15.9994 };
1008   Float_t zwat[2]  = { 1.,8. };
1009   Float_t wwat[2]  = { 2.,1. };
1010   Float_t denswat  = 1.;
1011   // Freon
1012   Float_t afre[2]  = { 12.011,18.9984032 };
1013   Float_t zfre[2]  = { 6.,9. };
1014   Float_t wfre[2]  = { 5.,12. };
1015   Float_t densfre  = 1.5;
1016   // Ceramics
1017   //     94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3 
1018   Float_t acer[5]  = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1019   Float_t zcer[5]  = { 13.,8.,14.,25.,      24. };
1020   Float_t wcer[5]  = { .49976,1.01233,.01307,       .01782,.00342 };
1021   Float_t denscer  = 3.6;
1022   //
1023   //     60% SiO2 , 40% G10FR4 
1024   // PC board
1025   Float_t apcb[3]  = { 28.0855,15.9994,17.749 };
1026   Float_t zpcb[3]  = { 14.,8.,8.875 };
1027   Float_t wpcb[3]  = { .28,.32,.4 };
1028   Float_t denspcb  = 1.8;
1029   // POLYETHYL
1030   Float_t apoly[2] = { 12.01,1. };
1031   Float_t zpoly[2] = { 6.,1. };
1032   Float_t wpoly[2] = { .33,.67 };
1033   // old SERVICES
1034   Float_t zserv[4] = { 1.,6.,26.,29. };
1035   Float_t aserv[4] = { 1.,12.,55.8,63.5 };
1036   Float_t wserv[4] = { .014,.086,.42,.48 };
1037   // Stainless steel
1038   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1039   Float_t zsteel[4] = { 26.,24.,28.,14. };
1040   Float_t wsteel[4] = { .715,.18,.1,.005 };
1041   
1042   
1043   Int_t  isxfld  = gAlice->Field()->Integ();
1044   Float_t sxmgmx = gAlice->Field()->Max();
1045   
1046   
1047   // --- Define the various materials for GEANT --- 
1048   
1049   //  200-224 --> Silicon Pixel Detectors (detectors, chips, buses, cooling,..)
1050   
1051   AliMaterial(0, "SPD Si$",      28.0855, 14., 2.33, 9.36, 999.);
1052   AliMaterial(1, "SPD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1053   AliMaterial(2, "SPD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
1054   AliMaterial(3, "SPD C$",       12.011,   6., 2.265,18.8, 999.);
1055   // v. dens 
1056   AliMaterial(4, "SPD Air$",    14.61, 7.3, .001205, 30423., 999.);
1057   AliMaterial(5, "SPD Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1058   AliMaterial(6, "SPD Al$",     26.981539, 13., 2.6989, 8.9, 999.);
1059   AliMixture( 7, "SPD Water $", awat, zwat, denswat, -2, wwat);
1060   AliMixture( 8, "SPD Freon$",  afre, zfre, densfre, -2, wfre);
1061   AliMaterial(9, "SPD End ladder$", 55.845, 26., 7.87/10., 1.76*10., 999.); 
1062   //AliMaterial(9, "SPD End ladder$", 55.845, 26., -7.87/10., -1.76*10., 999.);   
1063   AliMaterial(10, "SPD cone$",28.0855, 14., 2.33, 9.36, 999.);       // check !!!!
1064   // ** 
1065   AliMedium(0, "SPD Si$",        0, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1066   AliMedium(1, "SPD Si chip$",   1, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1067   AliMedium(2, "SPD Si bus$",    2, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1068   AliMedium(3, "SPD C$",         3, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1069   AliMedium(4, "SPD Air$",       4, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1070   AliMedium(5, "SPD Vacuum$",    5, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1071   AliMedium(6, "SPD Al$",        6, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1072   AliMedium(7, "SPD Water $",    7, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1073   AliMedium(8, "SPD Freon$",     8, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1074   AliMedium(9, "SPD End ladder$",9, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1075   AliMedium(10, "SPD cone$",    10, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);   
1076   
1077   //  225-249 --> Silicon Drift Detectors (detectors, chips, buses, cooling,..)
1078   
1079   AliMaterial(25, "SDD Si$",      28.0855, 14., 2.33,  9.36, 999.);
1080   AliMaterial(26, "SDD Si chip$", 28.0855, 14., 2.33,  9.36, 999.);
1081   AliMaterial(27, "SDD Si bus$",  28.0855, 14., 2.33,  9.36, 999.);
1082   AliMaterial(28, "SDD C$",       12.011,   6., 2.265,18.8,  999.);
1083   // v. dens 
1084   AliMaterial(29, "SDD Air$",     14.61, 7.3, .001205, 30423., 999.);
1085   AliMaterial(30, "SDD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16,  1e16);
1086   AliMaterial(31, "SDD Al$",      26.981539, 13., 2.6989, 8.9, 999.);
1087   // After a call with ratios by number (negative number of elements), 
1088   // the ratio array is changed to the ratio by weight, so all successive 
1089   // calls with the same array must specify the number of elements as 
1090   // positive 
1091   AliMixture(32, "SDD Water $", awat, zwat, denswat, 2, wwat);
1092   // After a call with ratios by number (negative number of elements), 
1093   // the ratio array is changed to the ratio by weight, so all successive 
1094   // calls with the same array must specify the number of elements as 
1095   // positive 
1096   AliMixture( 33, "SDD Freon$", afre, zfre, densfre, 2, wfre);
1097   AliMixture( 34, "SDD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
1098   AliMaterial(35, "SDD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1099   AliMixture( 36, "SDD Ceramics$", acer, zcer, denscer, -5, wcer);
1100   AliMaterial(37, "SDD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1101   AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999.); 
1102   AliMaterial(39, "SDD cone$",63.546, 29., 1.15, 1.265, 999.);   
1103   AliMaterial(40, "SDD M55J$",12.3565, 6.4561, 1.8097, 22.9570, 999.);         
1104   //AliMaterial(38, "SDD End ladder$", 69.9298, 29.8246, -0.3824, -36.5103, 999.); 
1105   //AliMaterial(39, "SDD cone$",63.546, 29., -1.15, -1.265, 999.);       
1106
1107   // ** 
1108   // check A and Z 
1109   AliMedium(25, "SDD Si$",        25, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1110   AliMedium(26, "SDD Si chip$",   26, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1111   AliMedium(27, "SDD Si bus$",    27, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1112   AliMedium(28, "SDD C$",         28, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1113   AliMedium(29, "SDD Air$",       29, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1114   AliMedium(30, "SDD Vacuum$",    30, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1115   AliMedium(31, "SDD Al$",        31, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1116   AliMedium(32, "SDD Water $",    32, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1117   AliMedium(33, "SDD Freon$",     33, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1118   AliMedium(34, "SDD PCB$",       34, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1119   AliMedium(35, "SDD Copper$",    35, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1120   AliMedium(36, "SDD Ceramics$",  36, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1121   AliMedium(37, "SDD Kapton$",    37, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1122   AliMedium(38, "SDD End ladder$",38, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1123   AliMedium(39, "SDD cone$",      39, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1124   AliMedium(40, "SDD M55J$",      40, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);  
1125   //  250-274 --> Silicon Strip Detectors (detectors, chips, buses, cooling,..)
1126   
1127   AliMaterial(50, "SSD Si$",      28.0855, 14., 2.33, 9.36, 999.);
1128   AliMaterial(51, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
1129   AliMaterial(52, "SSD Si bus$",  28.0855, 14., 2.33, 9.36, 999.);
1130   AliMaterial(53, "SSD C$",       12.011,   6., 2.265,18.8, 999.);
1131   // v. dens 
1132   AliMaterial(54, "SSD Air$",     14.61, 7.3, .001205, 30423., 999.);
1133   AliMaterial(55, "SSD Vacuum$",  1e-16, 1e-16, 1e-16, 1e16, 1e16);
1134   AliMaterial(56, "SSD Al$",      26.981539, 13., 2.6989, 8.9, 999.);
1135   // After a call with ratios by number (negative number of elements), 
1136   // the ratio array is changed to the ratio by weight, so all successive 
1137   // calls with the same array must specify the number of elements as 
1138   // positive 
1139   AliMixture(57, "SSD Water $", awat, zwat, denswat, 2, wwat);
1140   // After a call with ratios by number (negative number of elements), 
1141   // the ratio array is changed to the ratio by weight, so all successive 
1142   // calls with the same array must specify the number of elements as 
1143   // positive 
1144   AliMixture(58, "SSD Freon$", afre, zfre, densfre, 2, wfre);
1145   AliMixture(59, "SSD PCB$",   apcb, zpcb, denspcb, 3, wpcb);
1146   AliMaterial(60, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
1147   // After a call with ratios by number (negative number of elements), 
1148   // the ratio array is changed to the ratio by weight, so all successive 
1149   // calls with the same array must specify the number of elements as 
1150   // positive 
1151   AliMixture(61, "SSD Ceramics$", acer, zcer, denscer, 5, wcer);
1152   AliMaterial(62, "SSD Kapton$", 12.011, 6., 1.3, 31.27, 999.);
1153   // check A and Z 
1154   AliMaterial(63, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
1155   AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999.); 
1156   AliMaterial(65, "SSD cone$",63.546, 29., 1.15, 1.265, 999.);  
1157   //AliMaterial(64, "SSD End ladder$", 32.0988, 15.4021, -0.68, -35.3238, 999.); 
1158   //AliMaterial(65, "SSD cone$",63.546, 29., -1.15, -1.265, 999.);    
1159   // ** 
1160   AliMedium(50, "SSD Si$",        50, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1161   AliMedium(51, "SSD Si chip$",   51, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1162   AliMedium(52, "SSD Si bus$",    52, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1163   AliMedium(53, "SSD C$",         53, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1164   AliMedium(54, "SSD Air$",       54, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1165   AliMedium(55, "SSD Vacuum$",    55, 0,isxfld,sxmgmx, 10.,1.00, .1, .100,10.00);
1166   AliMedium(56, "SSD Al$",        56, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1167   AliMedium(57, "SSD Water $",    57, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1168   AliMedium(58, "SSD Freon$",     58, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1169   AliMedium(59, "SSD PCB$",       59, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1170   AliMedium(60, "SSD Copper$",    60, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1171   AliMedium(61, "SSD Ceramics$",  61, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1172   AliMedium(62, "SSD Kapton$",    62, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1173   AliMedium(63, "SSD G10FR4$",    63, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1174   AliMedium(64, "SSD End ladder$",64, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1175   AliMedium(65, "SSD cone$",      65, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1176
1177   //     275-299 --> General (end-caps, frames, cooling, cables, etc.) 
1178   
1179   AliMaterial(75, "GEN C$", 12.011, 6., 2.265, 18.8, 999.);
1180   // verify density 
1181   AliMaterial(76, "GEN Air$", 14.61, 7.3, .001205, 30423., 999.);
1182   AliMaterial(77, "GEN Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
1183   AliMixture( 78, "GEN POLYETHYL$", apoly, zpoly, .95, -2, wpoly);
1184   AliMixture( 79, "GEN SERVICES$",  aserv, zserv, 4.68, 4, wserv);
1185   AliMaterial(80, "GEN Copper$", 63.546, 29., 8.96, 1.43, 999.);
1186   // After a call with ratios by number (negative number of elements), 
1187   // the ratio array is changed to the ratio by weight, so all successive 
1188   // calls with the same array must specify the number of elements as 
1189   // positive 
1190   AliMixture(81, "GEN Water $", awat, zwat, denswat, 2, wwat);
1191 //  AliMaterial(82, "GEN Cables$", 12.011, 6., 2.265, 18.8, 999.);  // check !!!
1192 //  AliMaterial(83, "GEN patch pan$", 12.011, 6., 2.265, 18.8, 999.);  // check !!!  
1193 //  AliMaterial(84, "GEN serv$", 12.011, 6., 2.265, 18.8, 999.);  // check !!!  
1194   AliMixture(85, "GEN Inox$", asteel, zsteel, 7.88, 4, wsteel);
1195   AliMaterial(86, "GEN Al$",      26.981539, 13., 2.6989, 8.9, 999.);
1196   AliMaterial(87,"inox/alum$",    32.1502,15.3383,3.0705,6.9197,999.);
1197   // ** 
1198   AliMedium(75,"GEN C$",        75, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1199   AliMedium(76,"GEN Air$",      76, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1200   AliMedium(77,"GEN Vacuum$",   77, 0,isxfld,sxmgmx, 10., .10, .1, .100,10.00);
1201   AliMedium(78,"GEN POLYETHYL$",78, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1202   AliMedium(79,"GEN SERVICES$", 79, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1203   AliMedium(80,"GEN Copper$",   80, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1204   AliMedium(81,"GEN Water $",   81, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1205 //  AliMedium(82,"GEN Cables$",   82, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1206 //  AliMedium(83,"GEN patch pan$",83, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);  
1207 //  AliMedium(84,"GEN serv$",     84, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1208   AliMedium(85,"GEN Inox$",     85, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1209   AliMedium(86, "GEN Al$",      86, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1210   AliMedium(87,"inox/alum$",    87, 0,isxfld,sxmgmx, 10., .01, .1, .003, .003);
1211
1212 }
1213 //_____________________________________________________________________________
1214 void AliITSvPPRcoarseasymm::Init(){
1215 ////////////////////////////////////////////////////////////////////////
1216 //     Initialise the ITS after it has been created.
1217 ////////////////////////////////////////////////////////////////////////
1218     Int_t i;
1219
1220     cout << endl;
1221     for(i=0;i<24;i++) cout << "*";cout << " ITSvPPRcoarseasymm_Init ";
1222     for(i=0;i<25;i++) cout << "*";cout << endl;
1223 //
1224     AliITS::Init();
1225 //
1226     for(i=0;i<72;i++) cout << "*";
1227     cout << endl;
1228 }  
1229  
1230 //_____________________________________________________________________________
1231 void AliITSvPPRcoarseasymm::DrawModule(){
1232 ////////////////////////////////////////////////////////////////////////
1233 //     Draw a shaded view of the FMD version 6.
1234 ////////////////////////////////////////////////////////////////////////
1235   
1236   // Set everything unseen
1237   gMC->Gsatt("*", "seen", -1);
1238   // 
1239   // Set ALIC mother visible
1240   gMC->Gsatt("ALIC","SEEN",0);
1241   //
1242   // Set the volumes visible
1243   gMC->Gsatt("ITSD","SEEN",0);
1244   gMC->Gsatt("ITS1","SEEN",1);
1245   gMC->Gsatt("ITS2","SEEN",1);
1246   gMC->Gsatt("ITS3","SEEN",1);
1247   gMC->Gsatt("ITS4","SEEN",1);
1248   gMC->Gsatt("ITS5","SEEN",1);
1249   gMC->Gsatt("ITS6","SEEN",1);
1250
1251   gMC->Gsatt("IPCB","SEEN",1);
1252   gMC->Gsatt("ICO2","SEEN",1);
1253   gMC->Gsatt("ICER","SEEN",0);
1254   gMC->Gsatt("ISI2","SEEN",0);
1255   gMC->Gsatt("IPLA","SEEN",0);
1256   gMC->Gsatt("ICO3","SEEN",0);
1257   gMC->Gsatt("IEPX","SEEN",0);
1258   gMC->Gsatt("ISI3","SEEN",1);
1259   gMC->Gsatt("ISUP","SEEN",0);
1260   gMC->Gsatt("ICHO","SEEN",0);
1261   gMC->Gsatt("ICMO","SEEN",0);
1262   gMC->Gsatt("ICMD","SEEN",0);
1263   gMC->Gsatt("ICCO","SEEN",1);
1264   gMC->Gsatt("ICCM","SEEN",0);
1265   gMC->Gsatt("ITMD","SEEN",0);
1266   gMC->Gsatt("ITTT","SEEN",1);
1267
1268   //
1269   gMC->Gdopt("hide", "on");
1270   gMC->Gdopt("shad", "on");
1271   gMC->Gsatt("*", "fill", 7);
1272   gMC->SetClipBox(".");
1273   gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
1274   gMC->DefaultRange();
1275   gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
1276   gMC->Gdhead(1111, "Inner Tracking System Version 1");
1277   gMC->Gdman(17, 6, "MAN");
1278 }
1279 //_____________________________________________________________________________
1280 void AliITSvPPRcoarseasymm::StepManager(){
1281 ////////////////////////////////////////////////////////////////////////
1282 //    Called for every step in the ITS, then calls the AliITShit class
1283 // creator with the information to be recoreded about that hit.
1284 ////////////////////////////////////////////////////////////////////////
1285
1286 /*
1287   Int_t         copy, id;
1288   Float_t       hits[8];
1289   Int_t         vol[4];
1290   TLorentzVector position, momentum;
1291 //  TClonesArray &lhits = *fHits;
1292 //
1293 // no hits for this coarse asymmetric version.
1294 //
1295
1296   //
1297   // Track status
1298   vol[3] = 0;
1299   if(gMC->IsTrackInside())      vol[3] +=  1;
1300   if(gMC->IsTrackEntering())    vol[3] +=  2;
1301   if(gMC->IsTrackExiting())     vol[3] +=  4;
1302   if(gMC->IsTrackOut())         vol[3] +=  8;
1303   if(gMC->IsTrackDisappeared()) vol[3] += 16;
1304   if(gMC->IsTrackStop())        vol[3] += 32;
1305   if(gMC->IsTrackAlive())       vol[3] += 64;
1306   //
1307   // Fill hit structure.
1308   if( !(gMC->TrackCharge()) ) return;
1309     //
1310     // Only entering charged tracks
1311     if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {  
1312       vol[0]=1;
1313       id=gMC->CurrentVolOffID(1,copy);      
1314       vol[1]=copy;
1315       id=gMC->CurrentVolOffID(2,copy);
1316       vol[2]=copy;                       
1317     } else if(id==fIdSens[1]) {
1318       vol[0]=2;
1319       id=gMC->CurrentVolOffID(1,copy);       
1320       vol[1]=copy;
1321       id=gMC->CurrentVolOffID(2,copy);
1322       vol[2]=copy;                    
1323     } else if(id==fIdSens[2]) {
1324       vol[0]=3;
1325       vol[1]=copy;
1326       id=gMC->CurrentVolOffID(1,copy);
1327       vol[2]=copy;             
1328     } else if(id==fIdSens[3]) {
1329       vol[0]=4;
1330       vol[1]=copy;
1331       id=gMC->CurrentVolOffID(1,copy);
1332       vol[2]=copy;                  
1333     } else if(id==fIdSens[4]) {
1334       vol[0]=5;
1335       vol[1]=copy;
1336       id=gMC->CurrentVolOffID(1,copy);
1337       vol[2]=copy;               
1338     } else if(id==fIdSens[5]) {
1339       vol[0]=6;
1340       vol[1]=copy;
1341       id=gMC->CurrentVolOffID(1,copy);
1342       vol[2]=copy;                      
1343     } else return;
1344     gMC->TrackPosition(position);
1345     gMC->TrackMomentum(momentum);
1346     hits[0]=position[0];
1347     hits[1]=position[1];
1348     hits[2]=position[2];          
1349     hits[3]=momentum[0];
1350     hits[4]=momentum[1];
1351     hits[5]=momentum[2];
1352     hits[6]=gMC->Edep();
1353     hits[7]=gMC->TrackTime();
1354 //    new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1355 //
1356 // no hits for this coarse asymmetric version.
1357 //
1358 */
1359 }
1360