]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/UPGRADE/testITSUv1/CreateITSUv1.C
Bringing the OB geometry up to date. Macros to produce material budget plots. General...
[u/mrichter/AliRoot.git] / ITS / UPGRADE / testITSUv1 / CreateITSUv1.C
CommitLineData
b705c75b 1#if !defined(__CINT__) || defined(__MAKECINT__)
2#include <TSystem.h>
3#include <TMath.h>
4#endif
5
6//---------------------------------------
7double radii2Turbo(double rMin,double rMid,double rMax, double sensW)
8{
9 // compute turbo angle from radii and sensor width
10 return TMath::ASin((rMax*rMax-rMin*rMin)/(2*rMid*sensW))*TMath::RadToDeg();
11}
12
13double radii2Phi(double rMin,double rMid,double rMax, double sensW)
14{
15 // compute phi coverage
16 return 2*TMath::ACos((rMax+rMin)*
17 (rMid*rMid+rMin*rMax-sensW*sensW/4.)/
18 (4.*rMid*rMax*rMin));
19}
20
21void CreateITSUv1()
22{
23 //
24 gSystem->Load("libITSUpgradeBase.so");
25 gSystem->Load("libITSUpgradeSim.so");
3f922a98 26 //
b705c75b 27 // build ITS upgrade detector
28 // sensitive area 13x15mm (X,Z) with 20x20 micron pitch, 2mm dead zone on readout side and 50 micron guardring
29 const double kSensThick = 18e-4;
30 const double kPitchX = 20e-4;
31 const double kPitchZ = 20e-4;
32 const int kNRow = 650;
3f922a98 33 const int kNCol = 1500;
1fc6eff6 34 const double kSiThickIB = 50e-4;
35 const double kSiThickOB = 50e-4;
b4bfafe9 36 // const double kSensThick = 120e-4; // -> sensor Si thickness
b705c75b 37 //
38 const double kReadOutEdge = 0.2; // width of the readout edge (passive bottom)
39 const double kGuardRing = 50e-4; // width of passive area on left/right/top of the sensor
40 //
41 const int kNLr = 7;
42 const int kNLrInner = 3;
65740b7a 43 const int kBuildLevel = 0;
b705c75b 44 enum {kRmn,kRmd,kRmx,kNModPerStave,kPhi0,kNStave,kNPar};
45 // Radii are from last TDR (ALICE-TDR-017.pdf Tab. 1.1, rMid is mean value)
46 const double tdr5dat[kNLr][kNPar] = {
3f922a98 47 {2.24, 2.34, 2.67, 9., 16.37, 12}, // for each inner layer: rMin,rMid,rMax,NChip/Stave, phi0, nStaves
b705c75b 48 {3.01, 3.15, 3.46, 9., 12.03, 16},
49 {3.78, 3.93, 4.21, 9., 10.02, 20},
3f922a98 50 {-1, 19.6 , -1, 4., 0. , 24}, // for others: -, rMid, -, NMod/HStave, phi0, nStaves // 24 was 49
b705c75b 51 {-1, 24.55, -1, 4., 0. , 30}, // 30 was 61
52 {-1, 34.39, -1, 7., 0. , 42}, // 42 was 88
53 {-1, 39.34, -1, 7., 0. , 48} // 48 was 100
54 };
3f922a98 55 const int nChipsPerModule = 7; // For OB: how many chips in a row
b705c75b 56
57 // create segmentations:
58 AliITSUSegmentationPix* seg0 = new AliITSUSegmentationPix(0, // segID (0:9)
3f922a98 59 1, // chips per module
60 kNCol, // ncols (total for module)
b705c75b 61 kNRow, // nrows
62 kPitchX, // default row pitch in cm
63 kPitchZ, // default col pitch in cm
64 kSensThick, // sensor thickness in cm
65 -1, // no special left col between chips
66 -1, // no special right col between chips
67 kGuardRing, // left
68 kGuardRing, // right
69 kGuardRing, // top
70 kReadOutEdge // bottom
71 ); // see AliITSUSegmentationPix.h for extra options
72 seg0->Store(AliITSUGeomTGeo::GetITSsegmentationFileName());
73 //
b705c75b 74 seg0->Print();
b705c75b 75 //
3f922a98 76 double dzLr,rLr,phi0,turbo;
b705c75b 77 int nStaveLr,nModPerStaveLr,idLr;
3f922a98 78 //
79 AliITSUv1 *ITS = new AliITSUv1("ITS Upgrade",kNLr);
b705c75b 80 ITS->SetStaveModelIB(AliITSUv1::kIBModel22);
1fc6eff6 81 ITS->SetStaveModelOB(AliITSUv1::kOBModel2);
b705c75b 82 //
83 const int kNWrapVol = 3;
84 const double wrpRMin[kNWrapVol] = { 2.1, 15.0, 32.0};
51907e19 85 const double wrpRMax[kNWrapVol] = { 7.0, 27.0+2.5, 43.0+1.5};
3f922a98 86 const double wrpZSpan[kNWrapVol] = {28.0, 86.0, 150.0};
87 //
b705c75b 88 ITS->SetNWrapVolumes(kNWrapVol); // define wrapper volumes for layers
89 for (int iw=0;iw<kNWrapVol;iw++) ITS->DefineWrapVolume(iw,wrpRMin[iw],wrpRMax[iw],wrpZSpan[iw]);
90 //
91 for (int idLr=0;idLr<kNLr;idLr++) {
92 rLr = tdr5dat[idLr][kRmd];
93 phi0 = tdr5dat[idLr][kPhi0];
3f922a98 94 //
b705c75b 95 nStaveLr = TMath::Nint(tdr5dat[idLr][kNStave]);
b705c75b 96 nModPerStaveLr = TMath::Nint(tdr5dat[idLr][kNModPerStave]);
97 int nChipsPerStaveLr = nModPerStaveLr;
3f922a98 98 //
b705c75b 99 if (idLr>=kNLrInner) {
100 nChipsPerStaveLr *= nChipsPerModule;
3f922a98 101 ITS->DefineLayer(idLr, phi0, rLr, nChipsPerStaveLr*seg0->Dz(), nStaveLr, nModPerStaveLr,
65740b7a 102 kSiThickOB, seg0->Dy(), seg0->GetChipTypeID(),kBuildLevel);
3f922a98 103 // printf("Add Lr%d: R=%6.2f DZ:%6.2f Staves:%3d NMod/Stave:%3d\n",
104 // idLr,rLr,nChipsPerStaveLr*seg0->Dz(),nStaveLr,nModPerStaveLr);
b705c75b 105 } else {
3f922a98 106 turbo = -radii2Turbo(tdr5dat[idLr][kRmn],rLr,tdr5dat[idLr][kRmx],seg0->Dx());
107 ITS->DefineLayerTurbo(idLr, phi0, rLr, nChipsPerStaveLr*seg0->Dz(), nStaveLr, nChipsPerStaveLr,
65740b7a 108 seg0->Dx(), turbo, kSiThickIB, seg0->Dy(), seg0->GetChipTypeID(),kBuildLevel);
3f922a98 109 // printf("Add Lr%d: R=%6.2f DZ:%6.2f Turbo:%+6.2f Staves:%3d NMod/Stave:%3d\n",
110 // idLr,rLr,nChipsPerStaveLr*seg0->Dz(),turbo,nStaveLr,nModPerStaveLr);
b705c75b 111 }
112 //
113 }
114 //
115}