e.g:
kalmanFit0->SetInstance(kalmanFit0); //
kalmanFit0->InitTransformation(); //
+ //
TF2 fxRZdz("fxRZdz","sign(y)*1000*(AliTPCkalmanFit::SGetTPCDeltaXYZ(0,-1,x,0,y)-AliTPCkalmanFit::SGetTPCDeltaXYZ(0,-1,x,0,y-1))",85,245,-250,250);
fxRZdz->Draw("");
+ TF2 fxRZ("fxRZ","sign(y)*10*(AliTPCkalmanFit::SGetTPCDeltaXYZ(0,-1,x,0,y))",85,245,-250,250);
+ fxRZ->Draw("");
+
*/
-void AliTPCkalmanFit::FitTrackLinear(AliTrackPointArray &points, TTreeSRedirector *debug){
+void AliTPCkalmanFit::FitTrackLinear(AliTrackPointArray &points, TTreeSRedirector *debug, Float_t scalingRMSY, Float_t scalingRMSZ){
//
//
Double_t errz2 = chi2Z;
//set error - it is hack
Float_t *cov = (Float_t*) point.GetCov();
- cov[1] = erry2+kOff0;
- cov[2] = errz2+kOff0;
+ cov[1] = (erry2+kOff0)*scalingRMSY;
+ cov[2] = (errz2+kOff0)*scalingRMSZ;
UpdateLinear(point,debug);
if (!points.GetPoint(point,npoints-1-ipoint)) continue;
//set error - it is hack
cov = (Float_t*) point.GetCov();
- cov[1] = erry2+kOff0;
- cov[2] = errz2+kOff0;
+ cov[1] = (erry2+kOff0)*scalingRMSY;
+ cov[2] = (errz2+kOff0)*scalingRMSZ;
UpdateLinear(point,debug);
}
//
//
}
+void AliTPCkalmanFit::AddCovariance(const char * varName, Double_t sigma){
+ //
+ //
+ //
+ if (fCalibCovar) return;
+ if (!fCalibration) return;
+ if (!fCalibration->FindObject(varName)) return;
+ Int_t ncalibs = fCalibration->GetEntries();
+ TString strVar(varName);
+ for (Int_t icalib=0;icalib<ncalibs; icalib++){
+ AliTPCTransformation * transform = (AliTPCTransformation *)fCalibration->At(icalib);
+ if (strVar.CompareTo(transform->GetName())==0){
+ (*fCalibCovar)(icalib,icalib)+=sigma*sigma;
+ }
+ }
+}
+
void AliTPCkalmanFit::PropagateTime(Int_t time){
//
}
}
}
- return (nrow>0);
+ return (nrow>0);
}
-Bool_t AliTPCkalmanFit::DumpCalib(const char *mask){
+Bool_t AliTPCkalmanFit::DumpCalib(const char *mask, Float_t correlationCut){
//
// Print calibration entries - name, value, error
//
TMatrixD &mat = *fCalibCovar;
Int_t nrow= mat.GetNrows();
TString strMask(mask);
+ TVectorD vecCorrSum(nrow);
+ for (Int_t irow=0; irow<nrow; irow++){
+ vecCorrSum[irow]=0;
+ for (Int_t icol=0; icol<nrow; icol++){
+ Double_t diag = TMath::Sqrt(TMath::Abs(mat(irow,irow)*mat(icol,icol)));
+ Double_t corr0 = mat(irow,icol)/diag;
+ vecCorrSum[irow]+=TMath::Abs(corr0);
+ }
+ vecCorrSum[irow]-=1.;
+ vecCorrSum[irow]*=0.5;
+ }
+
for (Int_t irow=0; irow<nrow; irow++){
AliTPCTransformation * trans0 = GetTransformation(irow);
TString strName(trans0->GetName());
if (mask){
if (!strName.Contains(mask)) continue;
}
- printf("%d\t%s\t%f\t%f\n",
+ if (vecCorrSum[irow]<correlationCut) continue;
+ printf("%d\t%s\t%f\t%f\t%f\n",
irow,
trans0->GetName(),
(*fCalibParam)(irow,0),
- TMath::Sqrt(mat(irow,irow)));
+ TMath::Sqrt(mat(irow,irow)), vecCorrSum[irow]);
}
return (nrow>0);
}
//
void SetStatus(const char * name, Bool_t setOn, Bool_t isOr=kTRUE);
//
- void FitTrackLinear(AliTrackPointArray& points, TTreeSRedirector *debug=0);
+ void FitTrackLinear(AliTrackPointArray& points, TTreeSRedirector *debug=0, Float_t scalingRMSY=1., Float_t scalingRMSZ=1.);
void DumpTrackLinear(AliTrackPointArray& points, TTreeSRedirector *debug);
void UpdateLinear(AliTrackPoint &point, TTreeSRedirector *debug=0);
void Propagate(TTreeSRedirector *debug=0);
void PropagateTime(Int_t time);
+ void AddCovariance(const char * varName, Double_t sigma);
void Update(const AliTPCkalmanFit * kalman);
static AliTrackPointArray * SortPoints(AliTrackPointArray &points);
Bool_t CheckCovariance(TMatrixD &covar, Float_t maxEl);
Bool_t DumpCorelation(Double_t threshold, const char *mask0=0, const char *mask1=0);
- Bool_t DumpCalib(const char *mask=0);
+ Bool_t DumpCalib(const char *mask=0, Float_t correlationCut=-1);
//
Double_t GetTPCDeltaXYZ(Int_t coord, Int_t volID, Double_t x, Double_t y, Double_t z);
static Double_t SGetTPCDeltaXYZ(Int_t coord, Int_t volID, Double_t x, Double_t y, Double_t z);