]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PHOS/AliPHOSv1.cxx
New version from Y.Kharlov
[u/mrichter/AliRoot.git] / PHOS / AliPHOSv1.cxx
CommitLineData
fe4da5cc 1/////////////////////////////////////////////////////////
2// Manager and hits classes for set:PHOS version 1 //
3/////////////////////////////////////////////////////////
4
5// --- ROOT system ---
6#include "TH1.h"
7#include "TRandom.h"
8#include "TFile.h"
9#include "TTree.h"
bc9ab547 10#include "TMath.h"
fe4da5cc 11
12// --- galice header files ---
13#include "AliPHOSv1.h"
14#include "AliRun.h"
fe4da5cc 15
16ClassImp(AliPHOSv1)
17
18//______________________________________________________________________________
19
20
8c933dd7 21AliPHOSv1::AliPHOSv1()
fe4da5cc 22{
23}
24
25//______________________________________________________________________________
26
27AliPHOSv1::AliPHOSv1(const char *name, const char *title)
28 : AliPHOS(name, title)
29{
30}
31
32//___________________________________________
33void AliPHOSv1::CreateGeometry()
34{
35
6435828c 36 AliPHOS *PHOS_tmp = (AliPHOS*)gAlice->GetModule("PHOS");
fe4da5cc 37 if( NULL==PHOS_tmp )
38 {
39 printf("There isn't PHOS detector!\n");
40 return;
41 }
42// AliPHOS &PHOS = *PHOS_tmp;
43
44 //////////////////////////////////////////////////////////////////////////////
45
46 Int_t rotation_matrix_number=0;
47 Float_t par[11],
48 x,y,z;
49
50 const float cell_length = GetCrystalLength()+GetAirThickness()+GetWrapThickness()+GetPIN_Length(),
51 cell_side_size = GetCrystalSideSize()+2*GetAirThickness()+2*GetWrapThickness(),
7f8f914c 52 cradle_thikness = cell_length;
fe4da5cc 53
54 //////////////////////////////////////////////////////////////////////////////
55 // CELL volume and subvolumes creation
56 //////////////////////////////////////////////////////////////////////////////
57
58 par[0] = GetCrystalSideSize()/2 + GetWrapThickness();
59 par[1] = GetCrystalSideSize()/2 + GetWrapThickness();
60 par[2] = GetCrystalLength() /2 + GetWrapThickness()/2;
cfce8870 61 gMC->Gsvolu("WRAP","BOX ",GetPHOS_IDTMED_Tyvek(),par,3);
fe4da5cc 62
63 par[0] = GetCrystalSideSize()/2;
64 par[1] = GetCrystalSideSize()/2;
65 par[2] = GetCrystalLength()/2;
cfce8870 66 gMC->Gsvolu("CRST","BOX ",GetPHOS_IDTMED_PbWO4(),par,3);
fe4da5cc 67
68 // PIN
69 par[0] = GetPIN_SideSize()/2;
70 par[1] = GetPIN_SideSize()/2;
71 par[2] = GetPIN_Length()/2;
cfce8870 72 gMC->Gsvolu("PIN ","BOX ",GetPHOS_IDTMED_PIN(),par,3);
fe4da5cc 73
74 //////////////////////////////////////////////////////////////////////////////
7f8f914c 75 // CRADLE creation.
fe4da5cc 76 //////////////////////////////////////////////////////////////////////////////
77
78 par[0] = cell_side_size/2 * GetNz();
79 par[1] = cell_side_size/2 * GetNphi();
80 par[2] = cradle_thikness/2;
cfce8870 81 gMC->Gsvolu("PHOS","BOX ",GetPHOS_IDTMED_AIR(),par,3);
fe4da5cc 82
fe4da5cc 83
84 par[0] = cell_side_size/2 * GetNz();
85 par[1] = cell_side_size/2 * GetNphi();
86 par[2] = cell_length/2;
cfce8870 87 gMC->Gsvolu("CRS0","BOX ",GetPHOS_IDTMED_AIR(),par,3);
fe4da5cc 88
89 x = 0;
90 y = 0;
91 z = -(cradle_thikness-cell_length)/2;
cfce8870 92 gMC->Gspos("CRS0",1,"PHOS",x,y,z,0,"ONLY");
fe4da5cc 93
cfce8870 94 gMC->Gsdvn("CRS1","CRS0",GetNphi(),2);
95 gMC->Gsdvn("CELL","CRS1",GetNz() ,1);
fe4da5cc 96
97 //////////////////////////////////////////////////////////////////////////////
98 // CELL creation
99 //////////////////////////////////////////////////////////////////////////////
100
101 x = 0;
102 y = 0;
103 z = -GetWrapThickness()/2;
cfce8870 104 gMC->Gspos("CRST",1,"WRAP",x,y,z,0,"ONLY");
fe4da5cc 105
106 x = 0;
107 y = 0;
108 z = GetPIN_Length()/2;
cfce8870 109 gMC->Gspos("WRAP",1,"CELL",x,y,z,0,"ONLY");
fe4da5cc 110
111 x = 0;
112 y = 0;
113 z = -GetCrystalLength()/2-GetWrapThickness()/2;
cfce8870 114 gMC->Gspos("PIN ",1,"CELL",x,y,z,0,"ONLY");
fe4da5cc 115
116 //////////////////////////////////////////////////////////////////////////////
117 // CELL has been created.
118 //////////////////////////////////////////////////////////////////////////////
119
fe4da5cc 120
121 //////////////////////////////////////////////////////////////////////////////
122 // End of CRADLE creation.
123 //////////////////////////////////////////////////////////////////////////////
124
125
126 //////////////////////////////////////////////////////////////////////////////
127 // PHOS creation
128 //////////////////////////////////////////////////////////////////////////////
129
130 for( int i=0; i<GetCradlesAmount(); i++ )
131 {
7f8f914c 132 Float_t cradle_angle = 27.,
133 cradle_angle_pos = -90+(i-(GetCradlesAmount()-1)/2.) *
134 (cradle_angle+GetAngleBetweenCradles());
fe4da5cc 135 // Cradles are numerated in clock reversed order. (general way of angle increment)
136
7f8f914c 137 Float_t r = GetRadius() + cradle_thikness/2;
bc9ab547 138 x = r*cos(cradle_angle_pos*kPI/180);
139 y = r*sin(cradle_angle_pos*kPI/180);
fe4da5cc 140 z = 0;
141 AliMatrix(rotation_matrix_number, 0,0 , 90,90+cradle_angle_pos , 90,180+cradle_angle_pos);
cfce8870 142 gMC->Gspos("PHOS",i+1,"ALIC",x,y,z,rotation_matrix_number,"ONLY");
fe4da5cc 143
144 GetCradleAngle(i) = cradle_angle_pos;
fe4da5cc 145 }
146 AddPHOSCradles();
147
148 //////////////////////////////////////////////////////////////////////////////
149 // All is done.
150 // Print some information.
151 //////////////////////////////////////////////////////////////////////////////
152}
153
154void AliPHOSv1::StepManager()
155{
156 static Bool_t inwold=0; // Status of previous ctrak->inwvol
fe4da5cc 157 Int_t copy;
158
fe4da5cc 159 int cradle_number, cell_Z, cell_Phi; // Variables that describe cell position.
160
0a6d8768 161 if( gMC->GetMedium() == GetPHOS_IDTMED_PIN() && (gMC->IsTrackInside() || gMC->IsTrackExiting()==2) && inwold && gMC->TrackCharge()!=0 )
fe4da5cc 162 {
163 // GEANT particle just have entered into PIN diode.
164
6435828c 165 AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS");
fe4da5cc 166
0a6d8768 167 gMC->CurrentVolOffID(4,copy);
fe4da5cc 168 cradle_number = copy-1;
0a6d8768 169 gMC->CurrentVolOffID(1,copy);
fe4da5cc 170 cell_Z = copy-1;
0a6d8768 171 gMC->CurrentVolOffID(2,copy);
fe4da5cc 172 cell_Phi = copy-1;
173/*
174 cradle_number = cvolu->number[cvolu->nlevel-5]-1;
175 cell_Z = cvolu->number[cvolu->nlevel-2]-1;
176 cell_Phi = cvolu->number[cvolu->nlevel-3]-1;
177*/
178
179 TH2S &h = PHOS.GetCradle(cradle_number).fChargedTracksInPIN;
180 h.AddBinContent(h.GetBin(cell_Z,cell_Phi));
181 }
182
183 //////////////////////////////////////////////////////////////////////////////
184
cfce8870 185 if( gMC->GetMedium() == GetPHOS_IDTMED_PbWO4() )
fe4da5cc 186 {
187 // GEANT particle into crystal.
188
6435828c 189 AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS");
fe4da5cc 190
0a6d8768 191 gMC->CurrentVolOffID(5,copy);
fe4da5cc 192 cradle_number = copy-1;
0a6d8768 193 gMC->CurrentVolOffID(2,copy);
fe4da5cc 194 cell_Z = copy-1;
0a6d8768 195 gMC->CurrentVolOffID(3,copy);
fe4da5cc 196 cell_Phi = copy-1;
197/*
198 cradle_number = cvolu->number[cvolu->nlevel-6]-1;
199 cell_Z = cvolu->number[cvolu->nlevel-3]-1;
200 cell_Phi = cvolu->number[cvolu->nlevel-4]-1;
201*/
202 TH2F &h = PHOS.GetCradle(cradle_number).fCellEnergy;
cfce8870 203 h.AddBinContent(h.GetBin(cell_Z,cell_Phi),gMC->Edep());
fe4da5cc 204 }
205
206 //////////////////////////////////////////////////////////////////////////////
207
fe4da5cc 208
0a6d8768 209 inwold=gMC->IsTrackEntering(); // Save current status of GEANT variable.
fe4da5cc 210}
211