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 **************************************************************************/
18 #include <TParticle.h>
22 #include "AliITShit.h"
23 #include "AliITSRecPoint.h"
24 #include "AliITSmodule.h"
25 #include "AliITSgeom.h"
26 #include "AliITSsimulationFastPointsV0.h"
27 #include "AliITSstatistics.h"
29 ClassImp(AliITSsimulationFastPointsV0)
31 AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0()
33 // default constructor
37 AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0(const char *dataType){
39 Info("AliITSsimulationFastPointsV0","Standard constructor %s",dataType);
40 fSx = new AliITSstatistics(2);
41 fSz = new AliITSstatistics(2);
44 //----------------------------------------------------------
45 AliITSsimulationFastPointsV0::~AliITSsimulationFastPointsV0()
53 //-------------------------------------------------------------
54 void AliITSsimulationFastPointsV0::CreateFastRecPoints(AliITSmodule *mod,Int_t module,TRandom *rndm){
55 // Fast points simulator for all of the ITS.
56 Int_t nhit,h,trk,ifirst;
57 Float_t x,y,z,t,e;// local coordinate (cm) and time of flight, and dedx.
61 if(rndm!=0) module=0; // fix unsued parameter warnings.
62 fSx->Reset(); // Start out with things clearly zeroed
63 fSz->Reset(); // Start out with things clearly zeroed
64 e = 0.; // Start out with things clearly zeroed
66 nhit = mod->GetNhits();
70 hit->GetPositionL(x,y,z,t);
71 if(ifirst) {x1=x;y1=y;z1=z;}
72 e += hit->GetIonization();
73 trk = hit->GetTrack();
74 fSx->AddValue((Double_t)x,weight);
75 fSz->AddValue((Double_t)z,weight);
77 if(hit->StatusExiting()|| // leaving volume
78 hit->StatusDisappeared()|| // interacted/decayed...
79 hit->StatusStop() // dropped below E cuts.
80 ){ // exiting track, write out RecPoint.
81 // if(fSz->GetRMS()>1.E-1) {
82 // TParticle *part = hit->GetParticle();
83 // printf("idpart %d energy %f \n",part->GetPdgCode(),part->Energy());
84 // printf("diffx=%e diffy=%e diffz=%e\n",x-x1,y-y1,z-z1);
86 switch (mod->GetLayer()){
87 case 1: case 2: // SPDs
90 case 3: case 4: // SDDs
93 case 5: case 6: // SSDs
105 //_______________________________________________________________________
106 void AliITSsimulationFastPointsV0::AddSPD(Float_t &e,
107 AliITSmodule *mod,Int_t trackNumber){
108 const Float_t kmicronTocm = 1.0e-4;
109 // const Float_t kdEdXtoQ = ;
110 const Float_t kRMSx = 12.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
111 const Float_t kRMSz = 70.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
112 Float_t a1,a2; // general float.
113 AliITSRecPoint rpSPD;
115 rpSPD.fTracks[0]=trackNumber;
118 rpSPD.SetX(fSx->GetMean());
119 rpSPD.SetZ(fSz->GetMean());
122 a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
123 // if(a1>1.E5) printf("addSPD: layer=%d track #%d dedx=%e sigmaX2= %e ",
124 // mod->GetLayer(),trackNumber,e,a1);
125 rpSPD.SetSigmaX2(a1);
126 a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
127 // if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
128 rpSPD.SetSigmaZ2(a2);
130 (mod->GetITS())->AddRecPoint(rpSPD);
132 //_______________________________________________________________________
133 void AliITSsimulationFastPointsV0::AddSDD(Float_t &e,
134 AliITSmodule *mod,Int_t trackNumber){
136 const Float_t kmicronTocm = 1.0e-4;
137 const Float_t kdEdXtoQ = 2.778e+8;
138 const Float_t kRMSx = 38.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
139 const Float_t kRMSz = 28.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
140 Float_t a1,a2; // general float.
141 AliITSRecPoint rpSDD;
143 rpSDD.fTracks[0]=trackNumber;
146 rpSDD.SetX(fSx->GetMean());
147 rpSDD.SetZ(fSz->GetMean());
149 rpSDD.SetQ(kdEdXtoQ*e);
150 a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
151 // if(a1>1.E5) printf("addSDD: layer=%d track #%d dedx=%e sigmaX2= %e ",
152 // mod->GetLayer(),trackNumber,e,a1);
153 rpSDD.SetSigmaX2(a1);
154 a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
155 // if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
156 rpSDD.SetSigmaZ2(a2);
158 (mod->GetITS())->AddRecPoint(rpSDD);
160 //_______________________________________________________________________
161 void AliITSsimulationFastPointsV0::AddSSD(Float_t &e,
162 AliITSmodule *mod,Int_t trackNumber){
164 const Float_t kmicronTocm = 1.0e-4;
165 const Float_t kdEdXtoQ = 2.778e+8;
166 const Float_t kRMSx = 20.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
167 const Float_t kRMSz = 830.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
168 Float_t a1,a2; // general float.
169 AliITSRecPoint rpSSD;
171 rpSSD.fTracks[0]=trackNumber;
174 rpSSD.SetX(fSx->GetMean());
175 rpSSD.SetZ(fSz->GetMean());
177 rpSSD.SetQ(kdEdXtoQ*e);
178 a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
179 // if(a1>1.E5) printf("addSSD: layer=%d track #%d dedx=%e sigmaX2= %e ",
180 // mod->GetLayer(),trackNumber,e,a1);
181 rpSSD.SetSigmaX2(a1);
182 a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
183 // if(a1>1.E5) printf(" sigmaZ2= %e RMSx=%e RMSz=%e\n",a2,fSx->GetRMS(),fSz->GetRMS());
184 rpSSD.SetSigmaZ2(a2);
186 (mod->GetITS())->AddRecPoint(rpSSD);
188 //_______________________________________________________________________