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 **************************************************************************/
17 //////////////////////////////////////////////////////////
18 // implements fast simulation //
21 //////////////////////////////////////////////////////////
27 #include "AliITShit.h"
28 #include "AliITSRecPoint.h"
29 #include "AliITSmodule.h"
30 #include "AliITSgeom.h"
32 #include "AliITSsimulationFastPoints.h"
35 ClassImp(AliITSsimulationFastPoints)
37 AliITSsimulationFastPoints::AliITSsimulationFastPoints()
40 fSigmaRPhi[0] = fSigmaRPhi[1] = 12e-4;
41 fSigmaRPhi[2] = fSigmaRPhi[3] = 38e-4;
42 fSigmaRPhi[4] = fSigmaRPhi[5] = 20e-4;
43 fSigmaZ[0] = fSigmaZ[1] = 120e-4; // resolution for 425 micron pixels
44 fSigmaZ[2] = fSigmaZ[3] = 28e-4;
45 fSigmaZ[4] = fSigmaZ[5] = 830e-4;
46 fSigmaDe[0] = fSigmaDe[1] = 0.72e-6;
47 fSigmaDe[2] = fSigmaDe[3] = 0.90e-6;
48 fSigmaDe[4] = fSigmaDe[5] = 5e-6;
49 fThrDe[0] = fThrDe[1] = 7.2e-6;
50 fThrDe[2] = fThrDe[3] = 2.70e-6;
51 fThrDe[4] = fThrDe[5] = 10e-6;
54 //-------------------------------------------------------------
55 void AliITSsimulationFastPoints::CreateFastRecPoints(Int_t module, TClonesArray* recp){
56 // Fast points simulator
57 AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
59 CreateFastRecPoints((AliITSmodule *)(aliITS->GetModule(module)),
62 //-------------------------------------------------------------
63 void AliITSsimulationFastPoints::CreateFastRecPoints(AliITSmodule *mod,
67 // Fast points simulator
69 TClonesArray &pt=*recp;
70 AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
71 AliITSgeom *gm = aliITS->GetITSgeom();
72 const Float_t kdEdXtoQ = 2.778e+8;
74 Int_t ihit,flag,numofhits;
77 Double_t sigmarphi=0., sigmaz=0., sigmade=0., thrde=0.;
78 Float_t deltaXl,deltaZl,deltaDe;
80 Int_t hitlay, hitlad, hitdet, hitstatus;
81 Float_t hitpx, hitpy, hitpz, hitdestep;
83 Int_t hitstatus1, hittrack1;
84 Float_t hitx1, hity1, hitz1;
88 numofhits = mod->GetNhits();
89 //printf("numofhits %d \n",numofhits);
90 for(ihit=0;ihit<numofhits;ihit++){
91 AliITShit *hit=mod->GetHit(ihit);
92 hit->GetPositionG(hitx1,hity1,hitz1);
93 hitstatus1 = hit->GetTrackStatus();
94 hitdestep1 = hit->GetIonization();
95 hittrack1 = hit->GetTrack();
97 mod->MedianHit(module,hitx1,hity1,hitz1,hitstatus1,xMg,yMg,zMg,flag);
99 hitdestep = hit->GetIonization();
102 hit->GetDetectorID(hitlay,hitlad,hitdet);
103 hit->GetMomentumG(hitpx,hitpy,hitpz);
104 hitstatus = hitstatus1;
105 // Transform to the module local frame
109 gm->GtoL(hitlay,hitlad,hitdet,globals,locals);
110 // Retrieve sigma values for position and energy, and energy
112 sigmarphi = SigmaRPhi(hitlay);
113 sigmaz = SigmaZ(hitlay);
114 sigmade = SigmaDe(hitlay);
115 thrde = ThrDe(hitlay);
116 deltaXl = random->Gaus(0,sigmarphi);
117 deltaZl = random->Gaus(0,sigmaz);
118 deltaDe = random->Gaus(0,sigmade);
120 // Apply energy threshold and trasform back to global reference
123 if ( (hitdestep+deltaDe) > thrde ){
124 locals[0] += deltaXl;
125 locals[2] += deltaZl;
127 rp.fTracks[0]=hit->GetTrack();
128 // rp.fTracks[0]=mod->GetHitTrackIndex(ihit);
133 rp.SetdEdX(hitdestep+deltaDe);
134 rp.SetQ(kdEdXtoQ*(hitdestep+deltaDe)); // number of e
135 rp.SetSigmaX2(sigmarphi*sigmarphi);
136 rp.SetSigmaZ2(sigmaz*sigmaz);
137 new (pt[irecp]) AliITSRecPoint(rp);
139 } // end if ( (hitdestep+deltaDe)
140 } // end if (hitdestep > 0)
141 } // end if (flag!=1)
144 //_______________________________________________________________________
145 void AliITSsimulationFastPoints::SetSigmaRPhi(Double_t srphi[6])
147 // set sigmas in rphi
150 for (i=0; i<6; i++) {
151 fSigmaRPhi[i]=srphi[i];
154 //_______________________________________________________________________
155 void AliITSsimulationFastPoints::SetSigmaZ(Double_t sz[6])
160 for (i=0; i<6; i++) {
164 //_______________________________________________________________________
165 void AliITSsimulationFastPoints::SetSigmaDe(Double_t sde[6])
167 // set sigmas in energy
170 for (i=0; i<6; i++) {
174 //_______________________________________________________________________
175 void AliITSsimulationFastPoints::SetThrDe(Double_t thrde[6])
177 // set energy thersholds
180 for (i=0; i<6; i++) {