Fix in TRDslices transfer of AOD->ESD constructor
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 16 Nov 2012 09:36:53 +0000 (09:36 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 16 Nov 2012 09:36:53 +0000 (09:36 +0000)
STEER/ESD/AliESDtrack.cxx

index 2e35251..469f194 100644 (file)
@@ -562,15 +562,14 @@ AliESDtrack::AliESDtrack(const AliVTrack *track) :
   track->GetITSdEdxSamples(itsdEdx);
   SetITSdEdxSamples(itsdEdx);
   //
-  SetTPCsignal(track->GetTPCsignal(),fTPCsignalS,track->GetTPCsignalN()); // No signalS in AODPid
-  SetTPCdEdxInfo(track->GetTPCdEdxInfo());
+  SetTPCsignal(track->GetTPCsignal(),fTPCsignalS,track->GetTPCsignalN()); // No signalS in AODPi
+  AliTPCdEdxInfo * dEdxInfo = track->GetTPCdEdxInfo();
+  if (dEdxInfo) SetTPCdEdxInfo(new AliTPCdEdxInfo(*dEdxInfo));
   //
-  fTRDnSlices = track->GetNumberOfTRDslices();
-  if (fTRDnSlices>0) {
-    fTRDslices = new Double32_t[fTRDnSlices*6];
-    for (int isl=fTRDnSlices;isl--;) 
-      for (int ipl=6;ipl--;) 
-       SetTRDslice(track->GetTRDslice(ipl,isl),ipl,isl);
+  int ntrdsl = track->GetNumberOfTRDslices()/6;
+  if (ntrdsl>0) {    
+    SetNumberOfTRDslices((ntrdsl+2)*kTRDnPlanes);
+    for (int isl=ntrdsl;isl--;) for (int ipl=kTRDnPlanes;ipl--;) SetTRDslice(track->GetTRDslice(ipl,isl),ipl,isl);
   }
   //
   fTRDncls = track->GetTRDncls();
@@ -2151,7 +2150,7 @@ void  AliESDtrack::SetTRDslice(Double_t q, Int_t plane, Int_t slice) {
   }
   Int_t ns=GetNumberOfTRDslices();
   if ((slice<0) || (slice>=ns)) {
-    AliError("Wrong TRD slice !");
+    AliError(Form("Wrong TRD slice %d/%d, NSlices=%d",plane,slice,ns));
     return;
   }
   Int_t n=plane*ns + slice;