+
+ //store truncated mean
+ track->SetTRDsignal(fTruncatedMean);
+ track->SetTRDNchamberdEdx(fNchamberdEdx);
+ track->SetTRDNclusterdEdx(fNclusterdEdx);
+}
+
+//_______________________________________________________________
+Double_t AliTRDtrackV1::CookTruncatedMean(const Bool_t kinvq, const Double_t mag, const Int_t charge, const Int_t kcalib, Int_t &nch, Int_t &ncls, TVectorD *Qs, TVectorD *Xs, Int_t timeBin0, Int_t timeBin1, Int_t tstep) const
+{
+ //
+ //Origin: Xianguo Lu <xianguo.lu@cern.ch>, Marian Ivanov <marian.ivanov@cern.ch>
+ //
+
+ TVectorD arrayQ(200), arrayX(200);
+ ncls = AliTRDdEdxReconUtils::GetArrayClusterQ(kinvq, &arrayQ, &arrayX, this, timeBin0, timeBin1, tstep);
+
+ const TObjArray *cobj = kcalib ? AliTRDdEdxCalibUtils::GetObj(kinvq, mag, charge) : NULL;
+
+ const Double_t tmean = AliTRDdEdxReconUtils::ToyCook(kinvq, ncls, &arrayQ, &arrayX, cobj);
+
+ nch = AliTRDdEdxReconUtils::UpdateArrayX(ncls, &arrayX);
+
+ if(Qs && Xs){
+ (*Qs)=arrayQ;
+ (*Xs)=arrayX;
+ }
+
+ //printf("\ntest %.10f %d %d\n", tmean, nch, ncls);
+
+ return tmean;
+}
+
+//_______________________________________________________________
+TObject* AliTRDtrackV1::Clone(const char* newname) const
+{
+ // temporary override TObject::Clone to avoid crashes in reco
+ AliTRDtrackV1* src = (AliTRDtrackV1*)this;
+ Bool_t isown = src->IsOwner();
+ AliInfo(Form("src_owner %d",isown));
+ AliTRDtrackV1* dst = new AliTRDtrackV1(*src);
+ if (isown) {
+ src->SetBit(kOwner);
+ dst->SetOwner();
+ }
+ return dst;