]>
Commit | Line | Data |
---|---|---|
92af1877 | 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 | #include "AliTRDtrackHits.h" | |
17 | #include "TClonesArray.h" | |
18 | #include "AliTRDhit.h" | |
19 | ||
20 | #include <iostream.h> | |
21 | ||
22 | ||
23 | ClassImp(AliTRDtrackHits) | |
24 | ||
25 | void AliTRDtrackHits::AddHitTRD(Int_t volumeID, Int_t trackID, Double_t x, | |
26 | Double_t y, Double_t z,Int_t q, Bool_t inDrift) | |
27 | { | |
28 | if (inDrift) q=2*q+1; | |
29 | else q=2*q; | |
30 | AddHitKartez(volumeID, trackID,x,y,z,q); | |
31 | } | |
32 | ||
33 | Bool_t AliTRDtrackHits::First() | |
34 | { | |
35 | // | |
36 | //set Current hit for the first hit | |
37 | // | |
38 | AliTrackHitsParamV2 *param = (AliTrackHitsParamV2 *)fArray->At(0); | |
39 | if (!fHit) | |
40 | fHit = new AliTRDhit; | |
41 | if (!(param) ) { | |
42 | fCurrentHit->fStatus = kFALSE; | |
43 | return kFALSE; | |
44 | } | |
45 | // | |
46 | fCurrentHit->fParamIndex = 0; | |
47 | fCurrentHit->fStackIndex = 0; | |
48 | // | |
49 | // | |
50 | ((AliTRDhit*)fHit)->SetDetector(param->fVolumeID); | |
51 | ((AliTRDhit*)fHit)->SetTrack(param->fTrackID); | |
52 | ((AliTRDhit*)fHit)->SetX(param->fR*TMath::Cos(param->fFi)); | |
53 | ((AliTRDhit*)fHit)->SetY(param->fR*TMath::Sin(param->fFi)); | |
54 | ((AliTRDhit*)fHit)->SetZ(param->fZ); | |
55 | ((AliTRDhit*)fHit)->SetQ(param->fCharge[0]/2); | |
56 | if (param->fCharge[0]%2==0) ((AliTRDhit*)fHit)->SetAmplification(); | |
57 | else ((AliTRDhit*)fHit)->SetDrift(); | |
58 | fCurrentHit->fR = param->fR; | |
59 | ||
60 | return fCurrentHit->fStatus = kTRUE; | |
61 | } | |
62 | ||
63 | Bool_t AliTRDtrackHits::Next() | |
64 | { | |
65 | // | |
66 | // | |
67 | if (!(fCurrentHit->fStatus)) | |
68 | return kFALSE; | |
69 | ||
70 | fCurrentHit->fStackIndex++; | |
71 | ||
72 | AliTrackHitsParamV2 *param = (AliTrackHitsParamV2 *)fArray->At(fCurrentHit->fParamIndex); | |
74676fc9 | 73 | if (fCurrentHit->fStackIndex>=((UInt_t) param->fNHits)){ |
92af1877 | 74 | fCurrentHit->fParamIndex++; |
74676fc9 | 75 | if (fCurrentHit->fParamIndex>=((UInt_t) fArray->GetEntriesFast())){ |
92af1877 | 76 | fCurrentHit->fStatus=kFALSE; |
77 | return kFALSE; | |
78 | } | |
79 | param = (AliTrackHitsParamV2 *)fArray->At(fCurrentHit->fParamIndex); | |
80 | fCurrentHit->fStackIndex=0; | |
81 | fCurrentHit->fR = param->fR; | |
82 | } | |
83 | ||
84 | ||
85 | ||
86 | Double_t ratio; | |
87 | ||
88 | // Double_t dfi2 = param->fAn+2*param->fAd*(fCurrentHit->fR-param->fR); | |
89 | Double_t dfi2 = param->fAn; | |
90 | dfi2*=dfi2*fCurrentHit->fR*fCurrentHit->fR; | |
91 | // Double_t ddz2 = param->fTheta+2*param->fThetaD*(fCurrentHit->fR-param->fR); | |
92 | Double_t ddz2 = param->fTheta; | |
93 | ddz2*=ddz2; | |
94 | ratio = TMath::Sqrt(1.+ dfi2+ ddz2); | |
95 | ||
96 | ||
97 | fCurrentHit->fR += fStep*param->fHitDistance[fCurrentHit->fStackIndex]/ratio; | |
98 | ||
99 | Double_t dR = fCurrentHit->fR - param->fR; | |
100 | Double_t fi = param->fFi + (param->fAn*dR+param->fAd*dR*dR); | |
101 | Double_t z = param->fZ + (param->fTheta*dR+param->fThetaD*dR*dR); | |
102 | ||
103 | ((AliTRDhit*)fHit)->SetQ(param->fCharge[fCurrentHit->fStackIndex]/2); | |
104 | if ( param->fCharge[fCurrentHit->fStackIndex]%2==0) ((AliTRDhit*)fHit)->SetAmplification(); | |
105 | else ((AliTRDhit*)fHit)->SetDrift(); | |
106 | ((AliTRDhit*)fHit)->SetX(fCurrentHit->fR*TMath::Cos(fi)); | |
107 | ((AliTRDhit*)fHit)->SetY(fCurrentHit->fR*TMath::Sin(fi)); | |
108 | ((AliTRDhit*)fHit)->SetZ(z); | |
109 | ((AliTRDhit*)fHit)->SetDetector(param->fVolumeID); | |
110 | ((AliTRDhit*)fHit)->SetTrack(param->fTrackID); | |
111 | ||
112 | return kTRUE; | |
113 | } | |
114 |