Correction for cluster error (Ruben)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 27 Sep 2010 16:32:20 +0000 (16:32 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 27 Sep 2010 16:32:20 +0000 (16:32 +0000)
ITS/AliITSClusterParam.cxx
ITS/AliITStrackerMI.cxx

index af913ac..cb13e12 100644 (file)
@@ -358,23 +358,14 @@ Int_t AliITSClusterParam::GetErrorParamAngle(Int_t layer,
   Double_t sigmax=1000.0,sigmaz=1000.0;
   
   Int_t volId = (Int_t)cl->GetVolumeId();
-  Double_t tra[3]; AliGeomManager::GetTranslation(volId,tra);
-  Double_t rot[9]; AliGeomManager::GetRotation(volId,rot);
-
-
-  Double_t phitr = TMath::ATan(tgphitr);
-  Double_t alpha = TMath::ATan2(tra[1],tra[0]);
-  Double_t phiglob = alpha+phitr;
-  Double_t p[3]; 
-  p[0] = TMath::Cos(phiglob);
-  p[1] = TMath::Sin(phiglob);
-  p[2] = tgl;
-  TVector3 pvecXY(p[0],p[1],0.);
-  TVector3 normvecXY(rot[1],rot[4],0.);
-
-
-  Double_t angleAzi = pvecXY.Angle(normvecXY);
+  Double_t rotMA[9]; AliGeomManager::GetRotation(volId,rotMA);      // misaligned rotation
+  Double_t rotOR[9]; AliGeomManager::GetOrigRotation(volId,rotOR);  // original rotation
+  // difference in phi of original and misaligned sensors
+  double cross = rotOR[1]*rotMA[4]-rotOR[4]*rotMA[1];
+  cross /= TMath::Sqrt( (1.-rotOR[7]*rotOR[7]) * (1.-rotMA[7]*rotMA[7]) );
+  Double_t angleAzi = TMath::Abs(TMath::ATan(tgphitr) - TMath::ASin(cross) );
   Double_t anglePol = TMath::Abs(TMath::ATan(tgl));
+
   if(angleAzi>0.5*TMath::Pi()) angleAzi = TMath::Pi()-angleAzi;
   if(anglePol>0.5*TMath::Pi()) anglePol = TMath::Pi()-anglePol;
   Double_t angleAziDeg = angleAzi*180./TMath::Pi();
index d176033..6c22ebf 100644 (file)
@@ -877,7 +877,7 @@ Bool_t AliITStrackerMI::GetTrackPointTrackingError(Int_t index,
   detxy[1] = det.GetR()*TMath::Sin(det.GetPhi());
   Double_t alpha = t->GetAlpha();
   Double_t xdetintrackframe = detxy[0]*TMath::Cos(alpha)+detxy[1]*TMath::Sin(alpha);
-  Float_t phi = TMath::ASin(t->GetSnpAt(xdetintrackframe,GetBz()));
+  Float_t phi = TMath::ASin(t->GetSnpAt(xdetintrackframe+cl->GetX(),GetBz()));
   phi += alpha-det.GetPhi();
   Float_t tgphi = TMath::Tan(phi);
 
@@ -3744,15 +3744,15 @@ Double_t AliITStrackerMI::GetPredictedChi2MI(AliITStrackMI* track, const AliITSR
   //
   // Compute predicted chi2
   //
+  // Take into account the mis-alignment (bring track to cluster plane)
+  Double_t xTrOrig=track->GetX();
+  if (!track->Propagate(xTrOrig+cluster->GetX())) return 1000.;
   Float_t erry,errz,covyz;
   Float_t theta = track->GetTgl();
   Float_t phi   = track->GetSnp();
-  phi = TMath::Abs(phi)*TMath::Sqrt(1./((1.-phi)*(1.+phi)));
+  phi *= TMath::Sqrt(1./((1.-phi)*(1.+phi)));
   AliITSClusterParam::GetError(layer,cluster,theta,phi,track->GetExpQ(),erry,errz,covyz);
   AliDebug(2,Form(" chi2: tr-cl   %f  %f   tr X %f cl X %f",track->GetY()-cluster->GetY(),track->GetZ()-cluster->GetZ(),track->GetX(),cluster->GetX()));
-  // Take into account the mis-alignment (bring track to cluster plane)
-  Double_t xTrOrig=track->GetX();
-  if (!track->Propagate(xTrOrig+cluster->GetX())) return 1000.;
   AliDebug(2,Form(" chi2: tr-cl   %f  %f   tr X %f cl X %f",track->GetY()-cluster->GetY(),track->GetZ()-cluster->GetZ(),track->GetX(),cluster->GetX()));
   Double_t chi2 = track->GetPredictedChi2MI(cluster->GetY(),cluster->GetZ(),erry,errz,covyz);
   // Bring the track back to detector plane in ideal geometry