]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibCalib.cxx
adding getter for the streamer info list, do not add streamer infos which are already...
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibCalib.cxx
index b7ea0f8d72442dec22d4dd739aca956b186441b3..e8d108ccb7e20018ff5c5b8afcde6e64c89891e6 100644 (file)
@@ -58,6 +58,7 @@
 
 #include "AliTPCcalibDB.h"
 #include "AliTPCTransform.h"
+#include "AliTPCRecoParam.h"
 #include "AliTPCclusterMI.h"
 #include "AliTPCseed.h"
 #include "AliTPCPointCorrection.h"
 ClassImp(AliTPCcalibCalib)
 
 AliTPCcalibCalib::AliTPCcalibCalib():
-    AliTPCcalibBase()
+AliTPCcalibBase(),
+  fApplyExBCorrection(1),      // apply ExB correction
+  fApplyTOFCorrection(1),      // apply TOF correction
+  fApplyPositionCorrection(1), // apply position correction
+  fApplySectorAlignment(1),    // apply sector alignment
+  fApplyRPhiCorrection(1),     // apply R-Phi correction
+  fApplyRCorrection(1)         // apply Radial correction
+
 {
   //
   // Constructor
@@ -74,7 +82,13 @@ AliTPCcalibCalib::AliTPCcalibCalib():
 
 
 AliTPCcalibCalib::AliTPCcalibCalib(const Text_t *name, const Text_t *title) 
-  :AliTPCcalibBase()
+  :AliTPCcalibBase(),
+  fApplyExBCorrection(1),      // apply ExB correction
+  fApplyTOFCorrection(1),      // apply TOF correction
+  fApplyPositionCorrection(1), // apply position correction
+  fApplySectorAlignment(1),    // apply sector alignment
+  fApplyRPhiCorrection(1),     // apply R-Phi correction
+  fApplyRCorrection(1)         // apply Radial correction
 {  
   SetName(name);
   SetTitle(title);
@@ -82,7 +96,14 @@ AliTPCcalibCalib::AliTPCcalibCalib(const Text_t *name, const Text_t *title)
 
 
 AliTPCcalibCalib::AliTPCcalibCalib(const AliTPCcalibCalib&calib):
-  AliTPCcalibBase(calib)
+  AliTPCcalibBase(calib),
+  fApplyExBCorrection(calib.GetApplyExBCorrection()),
+  fApplyTOFCorrection(calib.GetApplyTOFCorrection()),
+  fApplyPositionCorrection(calib.GetApplyPositionCorrection()),
+  fApplySectorAlignment(calib.GetApplySectorAlignment()),
+  fApplyRPhiCorrection(calib.GetApplyRPhiCorrection()),
+  fApplyRCorrection(calib.GetApplyRCorrection())
+
 {
   //
   // copy constructor
@@ -139,15 +160,15 @@ void     AliTPCcalibCalib::Process(AliESDEvent *event){
       if ((seed=dynamic_cast<AliTPCseed*>(calibObject))) break;
     }
     if (!seed) continue;
-    RefitTrack(track, seed);
+    RefitTrack(track, seed,event->GetMagneticField());
   }
   return;
 }
 
-Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
+Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed, Float_t magesd){
   //
   // Refit track
-  //
+  // if magesd==0 forget the curvature
 
   //
   // 0 - Setup transform object
@@ -155,6 +176,15 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
   AliTPCTransform *transform = AliTPCcalibDB::Instance()->GetTransform() ;
   transform->SetCurrentRun(fRun);
   transform->SetCurrentTimeStamp((UInt_t)fTime);
+  if(!fApplyExBCorrection) { // disable ExB correction in transform
+    if(transform->GetCurrentRecoParam())
+      transform->GetCurrentRecoParamNonConst()->SetUseExBCorrection(0);
+  }
+  if(!fApplyTOFCorrection) { // disable TOF correction in transform
+    if(transform->GetCurrentRecoParam())
+      transform->GetCurrentRecoParamNonConst()->SetUseTOFCorrection(kFALSE);
+  }
+
   //
   // First apply calibration
   //
@@ -165,6 +195,7 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
     AliTPCclusterMI cl0(*cluster);
     Double_t x[3]={cluster->GetRow(),cluster->GetPad(),cluster->GetTimeBin()};
     Int_t i[1]={cluster->GetDetector()};
+
     transform->Transform(x,i,0,1);
     //
     // get position correction
@@ -173,8 +204,10 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
     if (cluster->GetDetector()>35) ipad=1;
     Float_t dy =AliTPCClusterParam::SPosCorrection(0,ipad,cluster->GetPad(),cluster->GetTimeBin(),cluster->GetZ(),cluster->GetSigmaY2(),cluster->GetSigmaZ2(),cluster->GetMax());
     Float_t dz =AliTPCClusterParam::SPosCorrection(1,ipad,cluster->GetPad(),cluster->GetTimeBin(),cluster->GetZ(),cluster->GetSigmaY2(),cluster->GetSigmaZ2(),cluster->GetMax());
+    // if(fApplyPositionCorrection) {
     //x[1]-=dy;
     //x[2]-=dz;
+    // }
     //
     // Apply sector alignment
     //
@@ -184,7 +217,7 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
                                                               cluster->GetY(),cluster->GetZ());
     Double_t dzq = AliTPCPointCorrection::SGetCorrectionSector(2,cluster->GetDetector()%36,cluster->GetX(),
                                                               cluster->GetY(),cluster->GetZ());
-    if (kTRUE){
+    if (fApplySectorAlignment){
       x[0]-=dxq;
       x[1]-=dyq;
       x[2]-=dzq;
@@ -198,9 +231,11 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
     // R correction
     Double_t corrR   = corr->CorrectionOutR0(kFALSE,kFALSE,cluster->GetX(),cluster->GetY(),cluster->GetZ(),cluster->GetDetector());
 
-    if (kTRUE){
+    if (fApplyRPhiCorrection){
       if (cluster->GetY()>0) x[1]+=corrclY;  // rphi correction
       if (cluster->GetY()<0) x[1]-=corrclY;  // rphi correction
+    }
+    if (fApplyRCorrection){      
       x[0]+=corrR;                           // radial correction
     }
 
@@ -243,8 +278,10 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
   covar[2]=10.*10.;
   covar[5]=10.*10./(64.*64.);
   covar[9]=10.*10./(64.*64.);
-  covar[14]=1*1;
-
+  covar[14]=0.3*0.3;
+  if (TMath::Abs(magesd)<0.05) {
+     covar[14]=0.025*0.025;
+  }
   // 
   // And now do refit
   //
@@ -252,7 +289,10 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
   AliExternalTrackParam * trackOutOld = (AliExternalTrackParam*)track->GetOuterParam();
 
   AliExternalTrackParam trackIn  = *trackOutOld;
-  trackIn.ResetCovariance(200.);
+  if (TMath::Abs(magesd)<0.05) {
+    ((Double_t&)(trackIn.GetParameter()[4]))=0.000000001;
+  }  
+  trackIn.ResetCovariance(20.);
   trackIn.AddCovariance(covar);
   Double_t xyz[3];
   Int_t nclIn=0,nclOut=0;
@@ -266,8 +306,9 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
     if (cl->GetX()<80) continue;
     Int_t sector = cl->GetDetector();
     Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackIn.GetAlpha();
-    if (TMath::Abs(dalpha)>0.01)
-      trackIn.Rotate(TMath::DegToRad()*(sector%18*20.+10.));
+    if (TMath::Abs(dalpha)>0.01){
+      if (!trackIn.Rotate(TMath::DegToRad()*(sector%18*20.+10.))) break;
+    }
     Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()};
     Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
     AliTPCseed::GetError(cl, &trackIn,cov[0],cov[2]);
@@ -283,7 +324,10 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
   }
   //
   AliExternalTrackParam trackOut = trackIn;
-  trackOut.ResetCovariance(200.);
+  if (TMath::Abs(magesd)<0.05) {
+    ((Double_t&)(trackOut.GetParameter()[4]))=0.000000001;
+  }
+  trackOut.ResetCovariance(20.);
   trackOut.AddCovariance(covar);
   //
   // Refit out
@@ -296,8 +340,9 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
     Int_t sector = cl->GetDetector();
     Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackOut.GetAlpha();
 
-    if (TMath::Abs(dalpha)>0.01)
-      trackOut.Rotate(TMath::DegToRad()*(sector%18*20.+10.));
+    if (TMath::Abs(dalpha)>0.01){
+      if (!trackOut.Rotate(TMath::DegToRad()*(sector%18*20.+10.))) break;
+    }
     Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()};
 
     Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation    
@@ -328,8 +373,9 @@ Bool_t  AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){
     if (cl->GetX()<80) continue;
     Int_t sector = cl->GetDetector();
     Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackIn.GetAlpha();
-    if (TMath::Abs(dalpha)>0.01)
-      trackIn.Rotate(TMath::DegToRad()*(sector%18*20.+10.));
+    if (TMath::Abs(dalpha)>0.01){
+      if (!trackIn.Rotate(TMath::DegToRad()*(sector%18*20.+10.))) break;
+    }
     Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()};
     Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
     AliTPCseed::GetError(cl, &trackIn,cov[0],cov[2]);
@@ -408,6 +454,10 @@ Bool_t AliTPCcalibCalib::RejectCluster(AliTPCclusterMI* cl, AliExternalTrackPara
 
   Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation    
   AliTPCseed::GetError(cl, param,cov[0],cov[2]);
+  if (param->GetSigmaY2()<0 || param->GetSigmaZ2()<0){
+    AliError("Wrong parameters");
+    return kFALSE;
+  }
   Double_t py = (cl->GetY()-param->GetY())/TMath::Sqrt(cov[0]*cov[0]+param->GetSigmaY2());
   Double_t pz = (cl->GetZ()-param->GetZ())/TMath::Sqrt(cov[2]*cov[2]+param->GetSigmaZ2());
   //