]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibTime.cxx
update tasks for PbPb analysis
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibTime.cxx
index a9aa6ef2d9610835b771540b3a4b5633ce2f1995..8a63bc515882eab48d54bae84687ae8a0a65c7ff 100644 (file)
@@ -60,6 +60,7 @@ Comments to be written here:
 
 ClassImp(AliTPCcalibTime)
 
+Double_t AliTPCcalibTime::fgResHistoMergeCut = 20000000.;
 
 AliTPCcalibTime::AliTPCcalibTime() 
   :AliTPCcalibBase(),  
@@ -94,7 +95,7 @@ AliTPCcalibTime::AliTPCcalibTime()
   //
   // default constructor
   //
-  AliInfo("Default Constructor");  
+  AliDebug(5,"Default Constructor");  
   for (Int_t i=0;i<3;i++) {
     fHistVdriftLaserA[i]=0;
     fHistVdriftLaserC[i]=0;
@@ -121,7 +122,7 @@ AliTPCcalibTime::AliTPCcalibTime()
   if (1) {
     TTimeStamp s;
     Int_t time=s;
-    AliInfo(Form("Counter Constructor\t%d\t%d",counter,time));
+    AliDebug(5,Form("Counter Constructor\t%d\t%d",counter,time));
     counter++;
   }
 
@@ -177,7 +178,7 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t
   }
 
 
-  AliInfo("Non Default Constructor");
+  AliDebug(5,"Non Default Constructor");
   fTimeBins   =(EndTime-StartTime)/deltaIntegrationTimeVdrift;
   fTimeStart  =StartTime; //(((TObjString*)(mapGRP->GetValue("fAliceStartTime")))->GetString()).Atoi();
   fTimeEnd    =EndTime;   //(((TObjString*)(mapGRP->GetValue("fAliceStopTime")))->GetString()).Atoi();
@@ -267,7 +268,7 @@ AliTPCcalibTime::~AliTPCcalibTime(){
   if (1) {
     TTimeStamp s;
     Int_t time=s;
-    AliInfo(Form("Counter Destructor\t%s\t%d\t%d",GetName(),counter,time));
+    AliDebug(5,Form("Counter Destructor\t%s\t%d\t%d",GetName(),counter,time));
     counter++;
   }
   for(Int_t i=0;i<3;i++){
@@ -286,7 +287,7 @@ AliTPCcalibTime::~AliTPCcalibTime(){
     delete fArrayDz;
     fArrayDz=NULL;
   }
-  for(Int_t i=0;i<5;i++){
+  for(Int_t i=0;i<10;i++){
     if(fCosmiMatchingHisto[i]){
       delete fCosmiMatchingHisto[i];
       fCosmiMatchingHisto[i]=NULL;
@@ -306,23 +307,34 @@ AliTPCcalibTime::~AliTPCcalibTime(){
     fResHistoTPCvertex[i]=0;
   }
 
-  if (fTPCVertex[0]) {
-    for (Int_t i=0;i<12;i++)  delete fTPCVertex[i];
+  for (Int_t i=0;i<12;i++) if (fTPCVertex[i]) delete fTPCVertex[i];
+  for (Int_t i=0;i<5;i++)  if (fTPCVertexCorrelation[i]) delete fTPCVertexCorrelation[i];
+
+  if (fAlignITSTPC){
+    fAlignITSTPC->SetOwner(kTRUE);
+    fAlignTRDTPC->SetOwner(kTRUE);
+    fAlignTOFTPC->SetOwner(kTRUE);
+    
+    fAlignITSTPC->Delete();
+    fAlignTRDTPC->Delete();
+    fAlignTOFTPC->Delete();
+    delete fAlignITSTPC;
+    delete fAlignTRDTPC;
+    delete fAlignTOFTPC;
   }
-  if (fTPCVertexCorrelation[0]) {
-    for (Int_t i=0;i<5;i++)  delete fTPCVertexCorrelation[i];
+
+  if (fArrayLaserA) {
+    fArrayLaserA->SetOwner(); 
+    fArrayLaserA->Delete();
+    delete fArrayLaserA;
+  }
+
+  if (fArrayLaserA) {
+    fArrayLaserC->SetOwner(); 
+    fArrayLaserC->Delete();
+    delete fArrayLaserC;
   }
-  
-  fAlignITSTPC->SetOwner(kTRUE);
-  fAlignTRDTPC->SetOwner(kTRUE);
-  fAlignTOFTPC->SetOwner(kTRUE);
 
-  fAlignITSTPC->Delete();
-  fAlignTRDTPC->Delete();
-  fAlignTOFTPC->Delete();
-  delete fAlignITSTPC;
-  delete fAlignTRDTPC;
-  delete fAlignTOFTPC;
 }
 
 // Bool_t AliTPCcalibTime::IsLaser(const AliESDEvent *const /*event*/) const{
@@ -1085,80 +1097,99 @@ Long64_t AliTPCcalibTime::Merge(TCollection *const li) {
     }
     for (Int_t imeas=0; imeas<3; imeas++){
       if (cal->GetHistVdriftLaserA(imeas) && cal->GetHistVdriftLaserA(imeas)){
-       fHistVdriftLaserA[imeas]->Add(cal->GetHistVdriftLaserA(imeas));
-       fHistVdriftLaserC[imeas]->Add(cal->GetHistVdriftLaserC(imeas));
+        fHistVdriftLaserA[imeas]->Add(cal->GetHistVdriftLaserA(imeas));
+        fHistVdriftLaserC[imeas]->Add(cal->GetHistVdriftLaserC(imeas));
       }
     }
     //
     if (fTPCVertexCorrelation[0] && cal->fTPCVertexCorrelation[0]){
       for (Int_t imeas=0; imeas<5; imeas++){
-       if (fTPCVertexCorrelation[imeas] && cal->fTPCVertexCorrelation[imeas]) fTPCVertexCorrelation[imeas]->Add(cal->fTPCVertexCorrelation[imeas]);
+        if (fTPCVertexCorrelation[imeas] && cal->fTPCVertexCorrelation[imeas]) fTPCVertexCorrelation[imeas]->Add(cal->fTPCVertexCorrelation[imeas]);
       }
     }
-      
+
     if (fTPCVertex[0] && cal->fTPCVertex[0]) 
       for (Int_t imeas=0; imeas<12; imeas++){
-       if (fTPCVertex[imeas] && cal->fTPCVertex[imeas]) fTPCVertex[imeas]->Add(cal->fTPCVertex[imeas]);
+        if (fTPCVertex[imeas] && cal->fTPCVertex[imeas]) fTPCVertex[imeas]->Add(cal->fTPCVertex[imeas]);
       }
-    
+
     if (fMemoryMode>0) for (Int_t imeas=0; imeas<5; imeas++){
       if (fMemoryMode>1){
-       if ( cal->GetResHistoTPCCE(imeas) && cal->GetResHistoTPCCE(imeas)){
-         fResHistoTPCCE[imeas]->Add(cal->fResHistoTPCCE[imeas]);
-       }else{
-         fResHistoTPCCE[imeas]=(THnSparse*)cal->fResHistoTPCCE[imeas]->Clone();
-       }
+        if ( GetResHistoTPCCE(imeas) && cal->GetResHistoTPCCE(imeas)){
+          if ((cal->GetResHistoTPCCE(imeas)->GetEntries()+GetResHistoTPCCE(imeas)->GetEntries()) < fgResHistoMergeCut)
+            fResHistoTPCCE[imeas]->Add(cal->fResHistoTPCCE[imeas]);
+        }else{
+          fResHistoTPCCE[imeas]=(THnSparse*)cal->fResHistoTPCCE[imeas]->Clone();
+        }
       }
       //
       if ((fMemoryMode>0) &&cal->GetResHistoTPCITS(imeas) && cal->GetResHistoTPCITS(imeas)){
-       if (fMemoryMode>1 || (imeas%2)==1) fResHistoTPCITS[imeas]->Add(cal->fResHistoTPCITS[imeas]);
-       if (fMemoryMode>1) fResHistoTPCvertex[imeas]->Add(cal->fResHistoTPCvertex[imeas]);
+        if (fMemoryMode>1 || (imeas%2)==1) 
+        {
+          if (fResHistoTPCITS[imeas]->GetEntries()+(cal->fResHistoTPCITS[imeas])->GetEntries() < fgResHistoMergeCut)
+            fResHistoTPCITS[imeas]->Add(cal->fResHistoTPCITS[imeas]);
+          else
+            AliInfo(Form("fResHistoTPCITS[%i] full (has %.0f merged tracks, max allowed: %.0f)",imeas,fResHistoTPCCE[imeas]->GetEntries(),fgResHistoMergeCut));
+        }
+        if (fMemoryMode>1) 
+        {
+          if (fResHistoTPCvertex[imeas]->GetEntries()+(cal->fResHistoTPCvertex[imeas])->GetEntries() < fgResHistoMergeCut)
+            fResHistoTPCvertex[imeas]->Add(cal->fResHistoTPCvertex[imeas]);
+        }
       }
       //
       if ((fMemoryMode>1) && cal->fResHistoTPCTRD[imeas]){
-       if (fResHistoTPCTRD[imeas])
-         fResHistoTPCTRD[imeas]->Add(cal->fResHistoTPCTRD[imeas]);
-       else
-         fResHistoTPCTRD[imeas]=(THnSparse*)cal->fResHistoTPCTRD[imeas]->Clone();
+        if (fResHistoTPCTRD[imeas] && cal->fResHistoTPCTRD[imeas])
+        {
+          if (fResHistoTPCTRD[imeas]->GetEntries()+(cal->fResHistoTPCTRD[imeas])->GetEntries() < fgResHistoMergeCut)
+          fResHistoTPCTRD[imeas]->Add(cal->fResHistoTPCTRD[imeas]);
+        }
+        else
+          fResHistoTPCTRD[imeas]=(THnSparse*)cal->fResHistoTPCTRD[imeas]->Clone();
       }
       //
       if  ((fMemoryMode>1) && cal->fResHistoTPCTOF[imeas]){
-       if (fResHistoTPCTOF[imeas])
-         fResHistoTPCTOF[imeas]->Add(cal->fResHistoTPCTOF[imeas]);
-       else
-         fResHistoTPCTOF[imeas]=(THnSparse*)cal->fResHistoTPCTOF[imeas]->Clone();      
+        if (fResHistoTPCTOF[imeas] && cal->fResHistoTPCTOF[imeas])
+        {
+          if (fResHistoTPCTOF[imeas]->GetEntries()+(cal->fResHistoTPCTOF[imeas])->GetEntries() < fgResHistoMergeCut)
+            fResHistoTPCTOF[imeas]->Add(cal->fResHistoTPCTOF[imeas]);
+        }
+        else
+          fResHistoTPCTOF[imeas]=(THnSparse*)cal->fResHistoTPCTOF[imeas]->Clone();      
       }
       //
       if (cal->fArrayLaserA){
-       fArrayLaserA->Expand(fArrayLaserA->GetEntriesFast()+cal->fArrayLaserA->GetEntriesFast());
-       fArrayLaserC->Expand(fArrayLaserC->GetEntriesFast()+cal->fArrayLaserC->GetEntriesFast());
-       for (Int_t ical=0; ical<cal->fArrayLaserA->GetEntriesFast(); ical++){
-         if (cal->fArrayLaserA->UncheckedAt(ical)) fArrayLaserA->AddLast(cal->fArrayLaserA->UncheckedAt(ical)->Clone());
-         if (cal->fArrayLaserC->UncheckedAt(ical)) fArrayLaserC->AddLast(cal->fArrayLaserC->UncheckedAt(ical)->Clone());
-       }
+        fArrayLaserA->Expand(fArrayLaserA->GetEntriesFast()+cal->fArrayLaserA->GetEntriesFast());
+        fArrayLaserC->Expand(fArrayLaserC->GetEntriesFast()+cal->fArrayLaserC->GetEntriesFast());
+        for (Int_t ical=0; ical<cal->fArrayLaserA->GetEntriesFast(); ical++){
+          if (cal->fArrayLaserA->UncheckedAt(ical)) fArrayLaserA->AddLast(cal->fArrayLaserA->UncheckedAt(ical)->Clone());
+          if (cal->fArrayLaserC->UncheckedAt(ical)) fArrayLaserC->AddLast(cal->fArrayLaserC->UncheckedAt(ical)->Clone());
+        }
       }
 
     }
-    TObjArray* addArray=cal->GetHistoDrift();
-    if(!addArray) return 0;
-    TIterator* iterator = addArray->MakeIterator();
-    iterator->Reset();
-    THnSparse* addHist=NULL;
-    if ((fMemoryMode>1)) while((addHist=(THnSparseF*)iterator->Next())){
-      //      if(!addHist) continue;
-      addHist->Print();
-      THnSparse* localHist=(THnSparseF*)fArrayDz->FindObject(addHist->GetName());
-      if(!localHist){
-        localHist=new THnSparseF(addHist->GetName(),"HistVdrift;time;p/T ratio;Vdrift;run",4,fBinsVdrift,fXminVdrift,fXmaxVdrift);
-        fArrayDz->AddLast(localHist);
-      }
-      localHist->Add(addHist);
-    }
-
+    //     TObjArray* addArray=cal->GetHistoDrift();
+    //     if(!addArray) return 0;
+    //     TIterator* iterator = addArray->MakeIterator();
+    //     iterator->Reset();
+    //     THnSparse* addHist=NULL;
+    //     if ((fMemoryMode>1)) while((addHist=(THnSparseF*)iterator->Next())){
+    //       //      if(!addHist) continue;
+    //       addHist->Print();
+    //       THnSparse* localHist=(THnSparseF*)fArrayDz->FindObject(addHist->GetName());
+    //       if(!localHist){
+    //         localHist=new THnSparseF(addHist->GetName(),"HistVdrift;time;p/T ratio;Vdrift;run",4,fBinsVdrift,fXminVdrift,fXmaxVdrift);
+    //         fArrayDz->AddLast(localHist);
+    //       }
+    //       localHist->Add(addHist);
+    //     }
+    //     delete iterator;
     for(Int_t i=0;i<10;i++) if (cal->GetCosmiMatchingHisto(i)) fCosmiMatchingHisto[i]->Add(cal->GetCosmiMatchingHisto(i));
     //
     // Merge alignment
     //
+    const Int_t kMinUpdates=10;
+    const Float_t kMaxOut=0.1;
     for (Int_t itype=0; itype<3; itype++){
       //
       //
@@ -1170,19 +1201,22 @@ Long64_t AliTPCcalibTime::Merge(TCollection *const li) {
       if (!arr1) continue;
       if (!arr0) arr0=new TObjArray(arr1->GetEntriesFast());
       if (arr1->GetEntriesFast()>arr0->GetEntriesFast()){
-       arr0->Expand(arr1->GetEntriesFast());
+        arr0->Expand(arr1->GetEntriesFast());
       }
       for (Int_t i=0;i<arr1->GetEntriesFast(); i++){
-       AliRelAlignerKalman *kalman1 = (AliRelAlignerKalman *)arr1->UncheckedAt(i);
-       AliRelAlignerKalman *kalman0 = (AliRelAlignerKalman *)arr0->UncheckedAt(i);
-       if (!kalman1)  continue;
-       if (!kalman0) {arr0->AddAt(new AliRelAlignerKalman(*kalman1),i); continue;}
-       kalman0->SetRejectOutliers(kFALSE);
-       kalman0->Merge(kalman1);
+        AliRelAlignerKalman *kalman1 = (AliRelAlignerKalman *)arr1->UncheckedAt(i);
+        AliRelAlignerKalman *kalman0 = (AliRelAlignerKalman *)arr0->UncheckedAt(i);
+        if (!kalman1)  continue;
+        if (kalman1->GetNUpdates()<kMinUpdates) continue;
+        if (kalman1->GetNOutliers()>(kalman1->GetNUpdates()*kMaxOut)) continue;
+        if (!kalman0) {arr0->AddAt(new AliRelAlignerKalman(*kalman1),i); continue;}
+        kalman0->SetRejectOutliers(kFALSE);
+        kalman0->Merge(kalman1);
       }
     }
 
   }
+  delete iter;
   return 0;
 }
 
@@ -1350,7 +1384,7 @@ void  AliTPCcalibTime::ProcessSame(const AliESDtrack *const track, AliESDfriendT
     Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()};
     trackIn.GetXYZ(xyz);
     bz = AliTracker::GetBz(xyz);
-    AliTracker::PropagateTrackToBxByBz(&trackIn,r[0],1.,pimass,kFALSE);
+    AliTracker::PropagateTrackToBxByBz(&trackIn,r[0],pimass,1.,kFALSE);
     if (!trackIn.PropagateTo(r[0],bz)) break;
     nclIn++;
     trackIn.Update(&r[1],cov);    
@@ -1379,7 +1413,7 @@ void  AliTPCcalibTime::ProcessSame(const AliESDtrack *const track, AliESDfriendT
     Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()};
     trackOut.GetXYZ(xyz);
     bz = AliTracker::GetBz(xyz);
-    AliTracker::PropagateTrackToBxByBz(&trackOut,r[0],1.,pimass,kFALSE);
+    AliTracker::PropagateTrackToBxByBz(&trackOut,r[0],pimass,1.,kFALSE);
     if (!trackOut.PropagateTo(r[0],bz)) break;
     nclOut++;
     trackOut.Update(&r[1],cov);    
@@ -1467,7 +1501,7 @@ void  AliTPCcalibTime::ProcessAlignITS(AliESDtrack *const track, const AliESDfri
   const Double_t kVdErr   = 0.1;  // initial uncertainty of the vd correction 
   const Double_t kT0Err   = 3.;  // initial uncertainty of the T0 time
   const Double_t kVdYErr  = 0.05;  // initial uncertainty of the vd correction 
-  const Double_t kOutCut  = 1.0;   // outlyer cut in AliRelAlgnmentKalman
+  const Double_t kOutCut  = 3.0;   // outlyer cut in AliRelAlgnmentKalman
   const Double_t kMinPt   = 0.3;   // minimal pt
   const Double_t kMax1Pt=0.5;        //maximal 1/pt distance
   const  Int_t     kN=50;         // deepnes of history
@@ -1572,7 +1606,9 @@ void  AliTPCcalibTime::ProcessAlignITS(AliESDtrack *const track, const AliESDfri
     (*align->GetStateCov())(7,7)=kT0Err*kT0Err;
     (*align->GetStateCov())(8,8)=kVdYErr*kVdYErr;
     align->SetOutRejSigma(kOutCut+kOutCut*kN);
-    align->SetRejectOutliers(kFALSE);
+    //    align->SetRejectOutliers(kFALSE);
+    align->SetRejectOutliers(kTRUE);
+    align->SetRejectOutliersSigma2Median(kTRUE);
 
     align->SetTPCvd(AliTPCcalibDB::Instance()->GetParameters()->GetDriftV()/1000000.);
     align->SetMagField(fMagF); 
@@ -1594,8 +1630,11 @@ void  AliTPCcalibTime::ProcessAlignITS(AliESDtrack *const track, const AliESDfri
   }
   //
   Int_t nupdates=align->GetNUpdates();
-  align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates));
-  align->SetRejectOutliers(kFALSE);
+  align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates+1));
+  //  align->SetRejectOutliers(kFALSE);
+  align->SetRejectOutliers(kTRUE);
+  align->SetRejectOutliersSigma2Median(kTRUE);
+
   TTreeSRedirector *cstream = GetDebugStreamer();  
   if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){
     TVectorD gpTPC(3), gdTPC(3);
@@ -1643,16 +1682,16 @@ void  AliTPCcalibTime::ProcessAlignTRD(AliESDtrack *const track, const AliESDfri
   // 3. Update kalman filter
   //
   const Int_t    kMinTPC  = 80;    // minimal number of TPC cluster
-  const Int_t    kMinTRD  = 50;    // minimal number of TRD cluster
-  const Double_t kMinZ    = 20;    // maximal dz distance
+  const Int_t    kMinTRD  = 60;    // minimal number of TRD cluster
+  //  const Double_t kMinZ    = 20;    // maximal dz distance
   const Double_t kMaxDy   = 5.;    // maximal dy distance
   const Double_t kMaxAngle= 0.1;  // maximal angular distance
   const Double_t kSigmaCut= 10;     // maximal sigma distance to median
   const Double_t kVdErr   = 0.1;  // initial uncertainty of the vd correction 
   const Double_t kT0Err   = 3.;  // initial uncertainty of the T0 time
   const Double_t kVdYErr  = 0.05;  // initial uncertainty of the vd correction 
-  const Double_t kOutCut  = 1.0;   // outlyer cut in AliRelAlgnmentKalman
-  const Double_t kRefX    = 275;   // reference X
+  const Double_t kOutCut  = 3.0;   // outlyer cut in AliRelAlgnmentKalman
+  const Double_t kRefX    = 330;   // reference X
   const  Int_t     kN=50;         // deepnes of history
   static Int_t     kglast=0;
   static Double_t* kgdP[4]={new Double_t[kN], new Double_t[kN], new Double_t[kN], new Double_t[kN]};
@@ -1662,18 +1701,25 @@ void  AliTPCcalibTime::ProcessAlignTRD(AliESDtrack *const track, const AliESDfri
   Int_t dummycl[1000];
   if (track->GetTRDclusters(dummycl)<kMinTRD) return;  // minimal amount of clusters
   if (track->GetTPCNcls()<kMinTPC) return;  // minimal amount of clusters cut
-  if (!friendTrack->GetTRDIn()) return;  
-  if (!track->IsOn(AliESDtrack::kTRDrefit)) return;  
+  //  if (!friendTrack->GetTRDIn()) return;  
+  //  if (!track->IsOn(AliESDtrack::kTRDrefit)) return;   
   if (!track->IsOn(AliESDtrack::kTRDout)) return;  
   if (!track->GetInnerParam())   return;
   if (!friendTrack->GetTPCOut())   return;
   // exclude crossing track
   if (friendTrack->GetTPCOut()->GetZ()*track->GetInnerParam()->GetZ()<0)   return;
-  if (TMath::Abs(track->GetInnerParam()->GetZ())<kMinZ)   return;
   //
   AliExternalTrackParam &pTPC=(AliExternalTrackParam &)(*(friendTrack->GetTPCOut()));
   AliTracker::PropagateTrackToBxByBz(&pTPC,kRefX,0.1,0.1,kFALSE);
-  AliExternalTrackParam pTRD(*(friendTrack->GetTRDIn()));
+  AliExternalTrackParam *pTRDtrack = 0; 
+  TObject *calibObject=0;
+  for (Int_t l=0;(calibObject=((AliESDfriendTrack*)friendTrack)->GetCalibObject(l));++l) {
+    if ((dynamic_cast< AliTPCseed*>(calibObject))) continue;
+    if ((pTRDtrack=dynamic_cast< AliExternalTrackParam*>(calibObject))) break;
+  }
+  if (!pTRDtrack) return;
+  //  AliExternalTrackParam pTRD(*(friendTrack->GetTRDIn()));
+  AliExternalTrackParam pTRD(*(pTRDtrack));
   pTRD.Rotate(pTPC.GetAlpha());
   //  pTRD.PropagateTo(pTPC.GetX(),fMagF);
   AliTracker::PropagateTrackToBxByBz(&pTRD,pTPC.GetX(),0.1,0.1,kFALSE);
@@ -1729,7 +1775,10 @@ void  AliTPCcalibTime::ProcessAlignTRD(AliESDtrack *const track, const AliESDfri
     (*align->GetStateCov())(7,7)=kT0Err*kT0Err;
     (*align->GetStateCov())(8,8)=kVdYErr*kVdYErr;
     align->SetOutRejSigma(kOutCut+kOutCut*kN);
-    align->SetRejectOutliers(kFALSE);
+    //    align->SetRejectOutliers(kFALSE);
+    align->SetRejectOutliers(kTRUE);
+    align->SetRejectOutliersSigma2Median(kTRUE);
+
     align->SetTPCvd(AliTPCcalibDB::Instance()->GetParameters()->GetDriftV()/1000000.);
     align->SetMagField(fMagF); 
     fAlignTRDTPC->AddAt(align,htime);
@@ -1753,8 +1802,11 @@ void  AliTPCcalibTime::ProcessAlignTRD(AliESDtrack *const track, const AliESDfri
   }
   //
   Int_t nupdates=align->GetNUpdates();
-  align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates));
-  align->SetRejectOutliers(kFALSE);
+  align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates+1));
+  //  align->SetRejectOutliers(kFALSE);
+  align->SetRejectOutliers(kTRUE);
+  align->SetRejectOutliersSigma2Median(kTRUE);
+
   TTreeSRedirector *cstream = GetDebugStreamer();  
   if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){
     TVectorD gpTPC(3), gdTPC(3);
@@ -1808,7 +1860,7 @@ void  AliTPCcalibTime::ProcessAlignTOF(AliESDtrack *const track, const AliESDfri
   const Double_t   kT0Err   = 3.;  // initial uncertainty of the T0 time
   const Double_t   kVdYErr  = 0.05;  // initial uncertainty of the vd correction 
 
-  const Double_t   kOutCut  = 1.0;   // outlyer cut in AliRelAlgnmentKalman
+  const Double_t   kOutCut  = 3.0;   // outlyer cut in AliRelAlgnmentKalman
   const  Int_t     kN=50;         // deepnes of history
   static Int_t     kglast=0;
   static Double_t* kgdP[4]={new Double_t[kN], new Double_t[kN], new Double_t[kN], new Double_t[kN]};
@@ -1906,7 +1958,10 @@ void  AliTPCcalibTime::ProcessAlignTOF(AliESDtrack *const track, const AliESDfri
     (*align->GetStateCov())(7,7)=kT0Err*kT0Err;
     (*align->GetStateCov())(8,8)=kVdYErr*kVdYErr;
     align->SetOutRejSigma(kOutCut+kOutCut*kN);
-    align->SetRejectOutliers(kFALSE);
+    //    align->SetRejectOutliers(kFALSE);
+    align->SetRejectOutliers(kTRUE);
+    align->SetRejectOutliersSigma2Median(kTRUE);
+
     align->SetTPCvd(AliTPCcalibDB::Instance()->GetParameters()->GetDriftV()/1000000.);
     align->SetMagField(fMagF); 
     fAlignTOFTPC->AddAt(align,htime);
@@ -1930,8 +1985,11 @@ void  AliTPCcalibTime::ProcessAlignTOF(AliESDtrack *const track, const AliESDfri
   align->SetRunNumber(fRun );
   //
   Int_t nupdates=align->GetNUpdates();
-  align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates));
-  align->SetRejectOutliers(kFALSE);
+  align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates+1));
+  //  align->SetRejectOutliers(kFALSE);
+  align->SetRejectOutliers(kTRUE);
+  align->SetRejectOutliersSigma2Median(kTRUE);
+
   TTreeSRedirector *cstream = GetDebugStreamer();  
   if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){
     TVectorD gpTPC(3), gdTPC(3);
@@ -2011,7 +2069,7 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   fResHistoTPCTOF[0] = new THnSparseS("TPCTOF#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
   //
   // delta z
-  xminTrack[0] =-3.; xmaxTrack[0]=3.;  // 
+  xminTrack[0] =-6.; xmaxTrack[0]=6.;  // 
   fResHistoTPCCE[1] = new THnSparseS("TPCCE#Delta_{Z} (cm)","#Delta_{Z} (cm)",    5, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCITS[1] = new THnSparseS("TPCITS#Delta_{Z} (cm)","#Delta_{Z} (cm)",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCvertex[1]    = new THnSparseS("TPCVertex#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
@@ -2028,7 +2086,7 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   fResHistoTPCTOF[2] = new THnSparseS("TPCTOF#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
   //
   // delta theta-P3
-  xminTrack[0] =-0.025; xmaxTrack[0]=0.025;  // 
+  xminTrack[0] =-0.05; xmaxTrack[0]=0.05;  // 
   fResHistoTPCCE[3] = new THnSparseS("TPCCE#Delta_{#theta}","#Delta_{#theta}",    5, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCITS[3] = new THnSparseS("TPCITS#Delta_{#theta}","#Delta_{#theta}",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCvertex[3] = new THnSparseS("TPCITSv#Delta_{#theta}","#Delta_{#theta}",    4, binsTrack,xminTrack, xmaxTrack);
@@ -2145,7 +2203,8 @@ void        AliTPCcalibTime::FillResHistoTPC(const AliESDtrack * pTrack){
   const AliExternalTrackParam * pTPCIn = pTrack->GetInnerParam();
   AliExternalTrackParam pTPCvertex(*(pTrack->GetInnerParam()));
   //
-  AliExternalTrackParam lits(*pTrack);
+  if (!(pTrack->GetConstrainedParam())) return;
+  AliExternalTrackParam lits(*(pTrack->GetConstrainedParam()));
   if (TMath::Abs(pTrack->GetY())>3) return;  // beam pipe
   pTPCvertex.Rotate(lits.GetAlpha());
   //pTPCvertex.PropagateTo(pTPCvertex->GetX(),fMagF);