1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
23 #include "AliITSsimulationFastPoints.h"
26 ClassImp(AliITSsimulationFastPoints)
28 AliITSsimulationFastPoints::AliITSsimulationFastPoints()
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;
45 //-------------------------------------------------------------
46 void AliITSsimulationFastPoints::CreateFastRecPoints(AliITSmodule *mod, Int_t module, TRandom *random){
47 // Fast points simulator
49 AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
50 AliITSgeom *gm = aliITS->GetITSgeom();
52 const Float_t kdEdXtoQ = 2.778e+8;
54 Int_t ihit,flag,numofhits;
55 Float_t xg,yg,zg,xl,yl,zl;
57 //Double_t p, theta, pt, ps;
60 //Float_t xg1,yg1,zg1;
61 Double_t sigmarphi=0., sigmaz=0., sigmade=0., thrde=0.;
62 Float_t deltaXl,deltaZl,deltaDe;
64 Int_t hitlay, hitlad, hitdet, hitstatus, hittrack;
65 Float_t hitx, hity, hitz, hitpx, hitpy, hitpz, hitdestep;
68 Int_t hitstatus1, hittrack1;
69 Float_t hitx1, hity1, hitz1;
73 //Float_t dx,dy,dz,ds;
76 numofhits = mod->GetNhits();
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();
84 hittrack1 = hit->GetTrack();
86 mod->MedianHit(module,hitx1,hity1,hitz1,hitstatus1,xMg,yMg,zMg,flag);
91 hit->GetDetectorID(hitlay,hitlad,hitdet);
92 hit->GetMomentumG(hitpx,hitpy,hitpz);
93 hitdestep = hit->GetIonization();
94 hitstatus = hitstatus1;
95 hittrack = hit->GetTrack();
101 // Transform to the module local frame
105 gm->GtoL(hitlay,hitlad,hitdet,globals,locals);
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));
122 // Retrieve sigma values for position and energy, and energy
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);
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
137 if ( (hitdestep+deltaDe) > thrde ){
138 locals[0] = xl + deltaXl;
140 locals[2] = zl + deltaZl;
142 rp.fTracks[0]=hittrack;
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);
154 gm->LtoG(hitlay,hitlad,hitdet,locals,globals);
158 dx = TMath::Abs(xg1-hitx);
159 dy = TMath::Abs(yg1-hity);
160 dz = TMath::Abs(zg1-hitz);
161 ds = TMath::Abs(deltaDe);
163 } // if ( (hitdestep+deltaDe)
165 } // if (hitdestep > 0)
171 //_______________________________________________________________________
172 void AliITSsimulationFastPoints::SetSigmaRPhi(Double_t srphi[6])
174 // set sigmas in rphi
177 for (i=0; i<6; i++) {
178 fSigmaRPhi[i]=srphi[i];
181 //_______________________________________________________________________
182 void AliITSsimulationFastPoints::SetSigmaZ(Double_t sz[6])
187 for (i=0; i<6; i++) {
191 //_______________________________________________________________________
192 void AliITSsimulationFastPoints::SetSigmaDe(Double_t sde[6])
194 // set sigmas in energy
197 for (i=0; i<6; i++) {
201 //_______________________________________________________________________
202 void AliITSsimulationFastPoints::SetThrDe(Double_t thrde[6])
204 // set energy thersholds
207 for (i=0; i<6; i++) {