]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSsimulationFastPoints.cxx
Release version of ITS code
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationFastPoints.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 */
19 #include <TRandom.h>
20
21 #include "AliITS.h"
22 #include "AliRun.h"
23 #include "AliITSsimulationFastPoints.h"
24
25
26 ClassImp(AliITSsimulationFastPoints)
27
28 AliITSsimulationFastPoints::AliITSsimulationFastPoints()
29 {
30   //constructor
31   fSigmaRPhi[0] = fSigmaRPhi[1] = 12e-4;
32   fSigmaRPhi[2] = fSigmaRPhi[3] = 38e-4;
33   fSigmaRPhi[4] = fSigmaRPhi[5] = 20e-4;
34   fSigmaZ[0] = fSigmaZ[1] = 70e-4;
35   fSigmaZ[2] = fSigmaZ[3] = 28e-4;
36   fSigmaZ[4] = fSigmaZ[5] = 830e-4;
37   fSigmaDe[0] = fSigmaDe[1] = 0.72e-6;
38   fSigmaDe[2] = fSigmaDe[3] = 0.90e-6;
39   fSigmaDe[4] = fSigmaDe[5] =  5e-6;
40   fThrDe[0] = fThrDe[1] = 7.2e-6;
41   fThrDe[2] = fThrDe[3] = 2.70e-6;
42   fThrDe[4] = fThrDe[5] = 10e-6;
43 }
44
45 //-------------------------------------------------------------
46 void AliITSsimulationFastPoints::CreateFastRecPoints(AliITSmodule *mod, Int_t module, TRandom *random){
47   // Fast points simulator 
48
49    AliITS *aliITS  = (AliITS*)gAlice->GetModule("ITS");
50    AliITSgeom *gm = aliITS->GetITSgeom();
51
52    const Float_t kdEdXtoQ = 2.778e+8; 
53
54    Int_t ihit,flag,numofhits;
55    Float_t xg,yg,zg,xl,yl,zl;
56    Float_t px,py,pz;
57    //Double_t p, theta, pt, ps;
58    Float_t locals[3];
59    Float_t globals[3];
60    //Float_t xg1,yg1,zg1;
61    Double_t sigmarphi=0., sigmaz=0., sigmade=0., thrde=0.;
62    Float_t deltaXl,deltaZl,deltaDe;
63
64    Int_t hitlay, hitlad, hitdet, hitstatus, hittrack;
65    Float_t hitx, hity, hitz, hitpx, hitpy, hitpz, hitdestep;
66    
67
68    Int_t   hitstatus1, hittrack1;
69    Float_t hitx1, hity1, hitz1;
70    Float_t hitdestep1;
71
72    Float_t xMg,yMg,zMg;
73    //Float_t dx,dy,dz,ds;
74
75
76    numofhits = mod->GetNhits();
77    flag = 1;
78    for(ihit=0;ihit<numofhits;ihit++){
79      AliITShit *hit=mod->GetHit(ihit);
80      hit->GetPositionG(hitx1,hity1,hitz1);
81      hitstatus1 = hit->GetTrackStatus();
82      hitdestep1 = hit->GetIonization();
83
84      hittrack1 = hit->GetTrack();
85
86      mod->MedianHit(module,hitx1,hity1,hitz1,hitstatus1,xMg,yMg,zMg,flag);
87      if (flag!=1) {
88        hitx      = xMg;
89        hity      = yMg;
90        hitz      = zMg;
91        hit->GetDetectorID(hitlay,hitlad,hitdet);
92        hit->GetMomentumG(hitpx,hitpy,hitpz);            
93        hitdestep = hit->GetIonization();
94        hitstatus = hitstatus1;
95        hittrack  = hit->GetTrack();
96
97        if (hitdestep > 0) {
98            xg = hitx;
99            yg = hity;
100            zg = hitz;
101            // Transform to the module local frame
102            globals[0] = hitx;
103            globals[1] = hity;
104            globals[2] = hitz;
105            gm->GtoL(hitlay,hitlad,hitdet,globals,locals);
106            xl = locals[0];
107            yl = locals[1];
108            zl = locals[2];
109            px = hitpx;
110            py = hitpy;
111            pz = hitpz;
112            /*
113            // Calculate transverse momentum and pseudorapidity
114            // to allow pt and eta dependence in sigma values
115            // of the spatial resolution
116            p  = TMath::Sqrt((px*px)+(py*py)+(pz*pz));
117            theta = TMath::ACos(pz/p);
118            pt = p * TMath::Sin(theta);
119            ps = -TMath::Log(TMath::Tan(theta/2));
120            */
121
122            // Retrieve sigma values for position and energy, and energy
123            // threshold 
124            
125            sigmarphi = SigmaRPhi(hitlay);
126            sigmaz = SigmaZ(hitlay);
127            sigmade = SigmaDe(hitlay);
128            thrde = ThrDe(hitlay);
129            // Randomize position and deposited energy
130            Int_t k=3*(Int_t)((hitlay-1)/2);
131
132            deltaXl = (float)(random[k].Gaus(0,sigmarphi));
133            deltaZl = (float)(random[k+1].Gaus(0,sigmaz));
134            deltaDe = (float)(random[k+2].Gaus(0,sigmade));
135            // Apply energy threshold and trasform back to global reference 
136            // system
137            if ( (hitdestep+deltaDe) > thrde ){
138                locals[0] = xl + deltaXl;
139                locals[1] = yl;
140                locals[2] = zl + deltaZl;
141                AliITSRecPoint rp;
142                rp.fTracks[0]=hittrack;
143                rp.fTracks[1]=0;
144                rp.fTracks[2]=0;
145                rp.SetX(locals[0]);
146                rp.SetZ(locals[2]);
147                rp.SetdEdX(hitdestep+deltaDe);
148                rp.SetQ(kdEdXtoQ*(hitdestep+deltaDe));  // number of e
149                rp.SetSigmaX2(sigmarphi*sigmarphi);
150                rp.SetSigmaZ2(sigmaz*sigmaz);
151                rp.SetProbability(1.0);
152                aliITS->AddRecPoint(rp);
153                /*
154                gm->LtoG(hitlay,hitlad,hitdet,locals,globals);
155                xg1 = globals[0];
156                yg1 = globals[1];
157                zg1 = globals[2];
158                dx = TMath::Abs(xg1-hitx);
159                dy = TMath::Abs(yg1-hity);
160                dz = TMath::Abs(zg1-hitz);
161                ds = TMath::Abs(deltaDe);
162                */
163            } // if ( (hitdestep+deltaDe)
164            else flag=1;
165        } // if (hitdestep > 0)
166        else flag=1;
167      } // if (flag!=1)
168    }   
169
170 }
171 //_______________________________________________________________________
172 void AliITSsimulationFastPoints::SetSigmaRPhi(Double_t  srphi[6])
173 {
174   // set sigmas in rphi
175
176     Int_t i;
177     for (i=0; i<6; i++) {
178         fSigmaRPhi[i]=srphi[i];
179     }
180 }
181 //_______________________________________________________________________
182 void AliITSsimulationFastPoints::SetSigmaZ(Double_t  sz[6])
183 {
184   // set sigmas in z
185
186     Int_t i;
187     for (i=0; i<6; i++) {
188         fSigmaZ[i]=sz[i];
189     }
190 }
191 //_______________________________________________________________________
192 void AliITSsimulationFastPoints::SetSigmaDe(Double_t  sde[6])
193 {
194   // set sigmas in energy
195
196     Int_t i;
197     for (i=0; i<6; i++) {
198         fSigmaDe[i]=sde[i];
199     }
200 }
201 //_______________________________________________________________________
202 void AliITSsimulationFastPoints::SetThrDe(Double_t  thrde[6])
203 {
204   // set energy thersholds
205
206     Int_t i;
207     for (i=0; i<6; i++) {
208         fThrDe[i]=thrde[i];
209     }
210 }
211