- d = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
- return d;
-}
-//__________________________________________________________________________________
-void AliCFTrackIsPrimaryCuts::GetBitMap(TObject* obj, TBits *bitmap) {
- //
- // retrieve the pointer to the bitmap
- //
- TBits *bm = SelectionBitMap(obj);
- *bitmap = *bm;
+ fDCA[5] = -1; // n_sigma
+ if (p[0]==-999. || p[1]==-999. || p[2]==-999.) {
+ AliError("dca info not available !");
+ fDCA[0] = -999.; // impact parameter xy
+ fDCA[1] = -999.; // impact parameter z
+ return;
+ }
+
+ AliAODEvent * evt = 0x0;
+ evt = dynamic_cast<AliAODEvent*>(fEvt);
+ if (!evt) return;
+
+ // primary vertex is the "best": tracks, SPD or TPC vertex
+ AliAODVertex * primaryVertex = evt->GetVertex(0);
+ // dca = track postion - primary vertex position
+ p[0] = p[0] - primaryVertex->GetX();
+ p[1] = p[1] - primaryVertex->GetY();
+ p[2] = p[2] - primaryVertex->GetZ();
+ // calculate dca in transverse plane
+ Float_t b[2] = {0.,0.};
+ b[0] = TMath::Sqrt(p[0]*p[0]+p[1]*p[1]);
+ b[1] = p[2];
+ // resolution
+ Double_t bCov[3] = {0.,0.,0.};
+ // how to calculate the resoultion in the transverse plane ?
+ bCov[0] = 0.; // to do: calculate cov in transverse plane
+ bCov[2] = 0.; // from cov in x and y, need to know correlation
+
+ if (bCov[0]<=0 || bCov[2]<=0) {
+ bCov[0]=0; bCov[2]=0;
+ }
+ fDCA[0] = b[0]; // impact parameter xy
+ fDCA[1] = b[1]; // impact parameter z
+ fDCA[2] = TMath::Sqrt(bCov[0]); // resolution xy
+ fDCA[3] = TMath::Sqrt(bCov[2]); // resolution z
+
+ if (!fAbsDCAToVertex) {
+ AliError("resolution of impact parameter not available, use absolute dca cut instead !");
+ if (fDCA[2] > 0) fDCA[0] = fDCA[0]/fDCA[2]; // normalised impact parameter xy
+ if (fDCA[3] > 0) fDCA[1] = fDCA[1]/fDCA[3]; // normalised impact parameter z
+ }
+
+ // get n_sigma
+ if (fDCA[2]==0 || fDCA[3]==0)
+ return;
+ fDCA[5] = 1000.;
+ Float_t d = TMath::Sqrt(TMath::Power(b[0]/fDCA[2],2) + TMath::Power(b[1]/fDCA[3],2));
+ if (TMath::Exp(-d * d / 2) < 1e-15)
+ return;
+ fDCA[5] = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
+
+ return;