* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-*/
+/* $Id$ */
+
///////////////////////////////////////////////////////////////////////////////
// //
// Time Projection Chamber track hits object //
#include "TClonesArray.h"
#include "AliTPC.h"
-#include <iostream.h>
+#include <Riostream.h>
-struct AliTPCCurrentHitV2 {
- AliTPChit fHit;
- UInt_t fParamIndex;// - current param pointer
- UInt_t fStackIndex; // - current hit stack index
- Double_t fR; //current Radius
- Bool_t fStatus; //current status
-};
-
-
struct AliTPCTempHitInfoV2 {
enum { fkStackSize = 10000};
AliTPCTempHitInfoV2();
fCurrentHit = new AliTPCCurrentHitV2;
fVolumes =0;
fNVolumes =0;
+ fHit =0;
fgCounter1++;
fgCounter2++;
fVolumes =0;
fNVolumes=0;
}
+ if (fHit){
+ delete fHit;
+ fHit=0;
+ }
fgCounter1--;
}
{
//
//clear object
+ fSize = 0;
if (fArray){
for (Int_t i=0;i<fArray->GetEntriesFast();i++){
AliTrackHitsParamV2 * par = (AliTrackHitsParamV2 *)fArray->UncheckedAt(i);
}
if (fTempInfo){
delete fTempInfo;
+ delete fHit;
+ fHit =0;
fTempInfo =0;
}
if (fVolumes){
ddz2*=ddz2;
ratio = TMath::Sqrt(1.+ dfi2+ ddz2);
}
- dl = fStep * Short_t(TMath::Nint(drhit*ratio/fStep));
+ //
+ // dl = fStep * Short_t(TMath::Nint(drhit*ratio/fStep)); // MI change - range check
+ dl = drhit*ratio/fStep;
+ if (TMath::Abs(dl)>32765) dl =0;
+ dl = fStep * Short_t(TMath::Nint(dl));
+ //
ddl = dl - drhit*ratio;
fTempInfo->fOldR += dl/ratio;
ratio = TMath::Sqrt(1.+ dfi2+ ddz2);
}
- Double_t dl = fStep*(Short_t)TMath::Nint(dr*ratio/fStep);
+ // Double_t dl = fStep*(Short_t)TMath::Nint(dr*ratio/fStep); //MI change
+ Double_t dl = dr*ratio/fStep;
+ if (TMath::Abs(dl)>32765) dl =0;
+ dl = fStep * Short_t(TMath::Nint(dl));
+
dr = dl/ratio;
oldr+=dr;
//calculate precission
//
//add volumes to tthe list of volumes
Int_t * volumes = new Int_t[fNVolumes+1];
- if (fVolumes) memcpy(volumes,fVolumes,(fNVolumes+1)*sizeof(Int_t));
+ if (fVolumes) memcpy(volumes,fVolumes,(fNVolumes)*sizeof(Int_t));
volumes[fNVolumes]=volume;
fNVolumes++;
if (fVolumes) delete []fVolumes;
//
//set Current hit for the first hit
//
+
+ if (fArray->GetSize()<=0) {
+ fCurrentHit->fStatus = kFALSE;
+ return kFALSE;
+ }
+
AliTrackHitsParamV2 *param = (AliTrackHitsParamV2 *)fArray->At(0);
+ if (!fHit) fHit = new AliTPChit;
if (!(param) ) {
fCurrentHit->fStatus = kFALSE;
return kFALSE;
fCurrentHit->fParamIndex = 0;
fCurrentHit->fStackIndex = 0;
//
- fCurrentHit->fHit.fSector = param->fVolumeID;
- fCurrentHit->fHit.SetTrack(param->fTrackID);
- fCurrentHit->fHit.SetX(param->fR*TMath::Cos(param->fFi));
- fCurrentHit->fHit.SetY(param->fR*TMath::Sin(param->fFi));
- fCurrentHit->fHit.SetZ(param->fZ);
- fCurrentHit->fHit.fQ = param->fCharge[0];
+ //
+ ((AliTPChit*)fHit)->fSector = param->fVolumeID;
+ ((AliTPChit*)fHit)->SetTrack(param->fTrackID);
+ ((AliTPChit*)fHit)->SetX(param->fR*TMath::Cos(param->fFi));
+ ((AliTPChit*)fHit)->SetY(param->fR*TMath::Sin(param->fFi));
+ ((AliTPChit*)fHit)->SetZ(param->fZ);
+ ((AliTPChit*)fHit)->fQ = param->fCharge[0];
+ /*
+ fCurrentHit->fHit.fSector = param->fVolumeID;
+ fCurrentHit->fHit.SetTrack(param->fTrackID);
+ fCurrentHit->fHit.SetX(param->fR*TMath::Cos(param->fFi));
+ fCurrentHit->fHit.SetY(param->fR*TMath::Sin(param->fFi));
+ fCurrentHit->fHit.SetZ(param->fZ);
+ fCurrentHit->fHit.fQ = param->fCharge[0];
+ */
fCurrentHit->fR = param->fR;
return fCurrentHit->fStatus = kTRUE;
Double_t dR = fCurrentHit->fR - param->fR;
Double_t fi = param->fFi + (param->fAn*dR+param->fAd*dR*dR);
Double_t z = param->fZ + (param->fTheta*dR+param->fThetaD*dR*dR);
-
+ /*
fCurrentHit->fHit.fQ = param->fCharge[fCurrentHit->fStackIndex];
fCurrentHit->fHit.SetX(fCurrentHit->fR*TMath::Cos(fi));
fCurrentHit->fHit.SetY(fCurrentHit->fR*TMath::Sin(fi));
fCurrentHit->fHit.SetZ(z);
fCurrentHit->fHit.fSector = param->fVolumeID;
fCurrentHit->fHit.SetTrack(param->fTrackID);
+ */
+ ((AliTPChit*)fHit)->fQ = param->fCharge[fCurrentHit->fStackIndex];
+ ((AliTPChit*)fHit)->SetX(fCurrentHit->fR*TMath::Cos(fi));
+ ((AliTPChit*)fHit)->SetY(fCurrentHit->fR*TMath::Sin(fi));
+ ((AliTPChit*)fHit)->SetZ(z);
+ ((AliTPChit*)fHit)->fSector = param->fVolumeID;
+ ((AliTPChit*)fHit)->SetTrack(param->fTrackID);
+
return kTRUE;
}
-AliTPChit * AliTPCTrackHitsV2::GetHit()
+AliHit * AliTPCTrackHitsV2::GetHit()
{
//
- return (fCurrentHit->fStatus)? &fCurrentHit->fHit:0;
+ return (fCurrentHit->fStatus)? fHit:0;
//return &fCurrentHit->fHit;
}