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 **************************************************************************/
16 ////////////////////////////////////////////////
18 // Manager class for TRD hits //
20 ////////////////////////////////////////////////
22 #include <Riostream.h>
24 #include <TClonesArray.h>
26 #include "AliTRDtrackHits.h"
27 #include "AliTRDhit.h"
29 ClassImp(AliTRDtrackHits)
31 //_____________________________________________________________________________
32 void AliTRDtrackHits::AddHitTRD(Int_t volumeID, Int_t trackID, Double_t x
33 , Double_t y, Double_t z, Int_t q, Bool_t inDrift)
46 AddHitKartez(volumeID,trackID,x,y,z,q,0);
50 //_____________________________________________________________________________
51 Bool_t AliTRDtrackHits::First()
54 // Set Current hit for the first hit
57 if (fArray->GetSize() <= 0) {
58 fCurrentHit->fStatus = kFALSE;
62 AliTrackHitsParamV2 *param = (AliTrackHitsParamV2 *) fArray->At(0);
67 fCurrentHit->fStatus = kFALSE;
71 fCurrentHit->fParamIndex = 0;
72 fCurrentHit->fStackIndex = 0;
74 ((AliTRDhit *) fHit)->SetDetector(param->fVolumeID);
75 ((AliTRDhit *) fHit)->SetTrack(param->fTrackID);
76 ((AliTRDhit *) fHit)->SetX(param->fR * TMath::Cos(param->fFi));
77 ((AliTRDhit *) fHit)->SetY(param->fR * TMath::Sin(param->fFi));
78 ((AliTRDhit *) fHit)->SetZ(param->fZ);
79 ((AliTRDhit *) fHit)->SetQ(param->fCharge[0] / 2);
80 if ((param->fCharge[0] % 2) == 0) {
81 ((AliTRDhit *) fHit)->SetAmplification();
84 ((AliTRDhit *) fHit)->SetDrift();
86 fCurrentHit->fR = param->fR;
88 return fCurrentHit->fStatus = kTRUE;
91 //set current hit to next
92 //_____________________________________________________________________________
93 Bool_t AliTRDtrackHits::Next()
96 // Set current hit to next
99 if (!(fCurrentHit->fStatus)) {
102 fCurrentHit->fStackIndex++;
104 AliTrackHitsParamV2 *param = (AliTrackHitsParamV2 *)
105 fArray->At(fCurrentHit->fParamIndex);
107 if (fCurrentHit->fStackIndex >= param->fNHits) {
108 fCurrentHit->fParamIndex++;
109 if (fCurrentHit->fParamIndex >= fArray->GetEntriesFast()) {
110 fCurrentHit->fStatus = kFALSE;
113 param = (AliTrackHitsParamV2 *) fArray->At(fCurrentHit->fParamIndex);
114 fCurrentHit->fStackIndex = 0;
115 fCurrentHit->fR = param->fR;
119 Double_t dfi2 = param->fAn;
120 dfi2 *= dfi2 * fCurrentHit->fR * fCurrentHit->fR;
121 Double_t ddz2 = param->fTheta;
123 ratio = TMath::Sqrt(1.0 + dfi2 + ddz2);
125 fCurrentHit->fR += fStep * param->fHitDistance[fCurrentHit->fStackIndex] / ratio;
127 Double_t dR = fCurrentHit->fR - param->fR;
128 Double_t fi = param->fFi + (param->fAn * dR + param->fAd * dR*dR);
129 Double_t z = param->fZ + (param->fTheta * dR + param->fThetaD * dR*dR);
131 ((AliTRDhit *) fHit)->SetQ(param->fCharge[fCurrentHit->fStackIndex] / 2);
132 if ((param->fCharge[fCurrentHit->fStackIndex] % 2) ==0) {
133 ((AliTRDhit *) fHit)->SetAmplification();
136 ((AliTRDhit *) fHit)->SetDrift();
138 ((AliTRDhit *) fHit)->SetX(fCurrentHit->fR * TMath::Cos(fi));
139 ((AliTRDhit *) fHit)->SetY(fCurrentHit->fR * TMath::Sin(fi));
140 ((AliTRDhit *) fHit)->SetZ(z);
141 ((AliTRDhit *) fHit)->SetDetector(param->fVolumeID);
142 ((AliTRDhit *) fHit)->SetTrack(param->fTrackID);