]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
AliTPCcalibAlign.cxx - Protection again 0 pointer
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 23 Jun 2010 16:26:05 +0000 (16:26 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 23 Jun 2010 16:26:05 +0000 (16:26 +0000)
AliTPCcalibCosmic.cxx  - Protection again 0 pointer
AliTPCcalibTime.cxx  AliTPCcalibTime.h   - Protection against 0 pointer + Adding the matching histogram for tracks crossing CE

TPC/AliTPCcalibAlign.cxx
TPC/AliTPCcalibCosmic.cxx
TPC/AliTPCcalibTime.cxx
TPC/AliTPCcalibTime.h

index 264837e79bd0e9a0ec7e041a25a5f79c37320d84..e2e804921b5c1f84f84a82c372fc9ae93548083b 100644 (file)
@@ -469,6 +469,7 @@ void AliTPCcalibAlign::Process(AliESDEvent *event) {
     AliTPCseed *seed0 = 0;
     //
     friendTrack = (AliESDfriendTrack *)eESDfriend->GetTrack(i0);;
+    if (!friendTrack) continue;
     for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
       if ((seed0=dynamic_cast<AliTPCseed*>(calibObject))) break;
     }
@@ -505,10 +506,12 @@ void AliTPCcalibAlign::Process(AliESDEvent *event) {
       AliTPCseed *seed0 = 0,*seed1=0;
       //
       friendTrack = (AliESDfriendTrack *)eESDfriend->GetTrack(i0);;
+      if (!friendTrack) continue;
       for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
        if ((seed0=dynamic_cast<AliTPCseed*>(calibObject))) break;
       }
       friendTrack = (AliESDfriendTrack *)eESDfriend->GetTrack(i1);;
+      if (!friendTrack) continue;
       for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
        if ((seed1=dynamic_cast<AliTPCseed*>(calibObject))) break;
       }
@@ -664,11 +667,13 @@ void  AliTPCcalibAlign::ExportTrackPoints(AliESDEvent *event){
     AliTPCseed *seed0 = 0,*seed1=0;
     //
     friendTrack = (AliESDfriendTrack *)eESDfriend->GetTrack(index0);;
+    if (!friendTrack) continue;
     for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
       if ((seed0=dynamic_cast<AliTPCseed*>(calibObject))) break;
     }
     if (index1>0){
       friendTrack = (AliESDfriendTrack *)eESDfriend->GetTrack(index1);;
+      if (!friendTrack) continue;
       for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
        if ((seed1=dynamic_cast<AliTPCseed*>(calibObject))) break;
       }
index d81a8d74280e1882ff37762f612d78fd80f17802..3aaa6dd5d6219cd3f5e70a828bdaeb14cc322321 100644 (file)
     gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
     gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+")
     AliXRDPROOFtoolkit tool;
-    TChain * chainCosmic = tool.MakeChainRandom("cosmic.txt","Track0",0,10000);
-    TChain * chainBudget = tool.MakeChainRandom("cosmic.txt","material",0,1000); 
-    TCut cutptV="abs(1/pt0V-1/pt1V)<0.1";
-    TCut cutptI="abs(1/pt0In-1/pt1In)<0.5";
-    TCut cutncl="nclmin>120";
-    TCut cutDz="abs(p0.fP[1])<50";
-    TCut cutDr="abs(p0.fP[0])<50";
+    TChain * chainCosmic = tool.MakeChainRandom("cosmicF.txt","Track0",0,10000);
     //
-    chainBudget->Draw(">>listB",cutptV+cutptI+cutncl+cutDr+cutDz,"entryList");
-    TEntryList *elistB = (TEntryList*)gDirectory->Get("listB");
-    chainBudget->SetEntryList(elistB);
+    TCut cutITSN="min(Orig0.fITSncls,Orig1.fITSncls)>2";
+    TCut cutTPCN="min(Orig0.fTPCncls,Orig1.fTPCncls)>120";
+
+    chainCosmic->Draw(">>listITS",cutITSN+cutTPCN,"entryList");
+    TEntryList *elistITS = (TEntryList*)gDirectory->Get("listITS");
+    chainCosmic->SetEntryList(elistITS);
     
-    chainBudget->SetAlias("dptrel","(pt0V-pt1V)/((pt0V+pt1V)*0.5)");
-    chainBudget->SetAlias("dptInrel","(pt0In-pt1In)/((pt0In+pt1In)*0.5)");
-    chainBudget->SetAlias("ptcorr","(pt0In-pt0V)/(pt0V)+(pt1V-pt1In)/(pt1In)");
-*/
+  */
 
 
 
@@ -551,8 +545,9 @@ void AliTPCcalibCosmic::FindPairs(AliESDEvent *event) {
 
 
    AliESDfriendTrack *friendTrack = esdFriend->GetTrack(i);
+   if (!friendTrack) continue;
    TObject *calibObject;
-   AliTPCseed *seed = 0;
+   AliTPCseed *seed = 0;   
    for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
      if ((seed=dynamic_cast<AliTPCseed*>(calibObject))) break;
    }
index 78e2578b2ea31d030768f122d7b68b34d637cb2a..e06510db53da3a7c6cc7ccdb970ced90345945fd 100644 (file)
@@ -139,6 +139,7 @@ AliTPCcalibTime::AliTPCcalibTime()
   }
   //
   for (Int_t i=0;i<5;i++) {
+    fResHistoTPCCE[i]=0;
     fResHistoTPCITS[i]=0;
     fResHistoTPCTRD[i]=0;
     fResHistoTPCTOF[i]=0;
@@ -185,6 +186,7 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t
   }
 
   for (Int_t i=0;i<5;i++) {
+    fResHistoTPCCE[i]=0;
     fResHistoTPCITS[i]=0;
     fResHistoTPCTRD[i]=0;
     fResHistoTPCTOF[i]=0;
@@ -295,10 +297,12 @@ AliTPCcalibTime::~AliTPCcalibTime(){
   }
 
   for (Int_t i=0;i<5;i++) {
+    delete fResHistoTPCCE[i];
     delete fResHistoTPCITS[i];
     delete fResHistoTPCTRD[i];
     delete fResHistoTPCTOF[i];
     delete fResHistoTPCvertex[i];
+    fResHistoTPCCE[i]=0;
     fResHistoTPCITS[i]=0;
     fResHistoTPCTRD[i]=0;
     fResHistoTPCTOF[i]=0;
@@ -860,6 +864,11 @@ Long64_t AliTPCcalibTime::Merge(TCollection *const li) {
     }
     //
     for (Int_t imeas=0; imeas<5; imeas++){
+      if (cal->GetResHistoTPCCE(imeas) && cal->GetResHistoTPCCE(imeas)){
+       fResHistoTPCCE[imeas]->Add(cal->fResHistoTPCCE[imeas]);
+      }else{
+        fResHistoTPCCE[imeas]=(THnSparse*)cal->fResHistoTPCCE[imeas]->Clone();
+      }
       if (cal->GetResHistoTPCITS(imeas) && cal->GetResHistoTPCITS(imeas)){
        fResHistoTPCITS[imeas]->Add(cal->fResHistoTPCITS[imeas]);
        fResHistoTPCvertex[imeas]->Add(cal->fResHistoTPCvertex[imeas]);
@@ -1030,10 +1039,15 @@ void  AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *
   //
   // 0. Select only track crossing the CE
   // 1. Cut on the track length
-  // 2. Refit the terack on A and C side separatelly
+  // 2. Refit the the track on A and C side separatelly
   // 3. Fill time histograms
   const Int_t kMinNcl=100;
   const Int_t kMinNclS=25;  // minimul number of clusters on the sides
+  const Double_t pimass=TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
+  const Double_t kMaxDy=1;  // maximal distance in y
+  const Double_t kMaxDsnp=0.05;  // maximal distance in snp
+  const Double_t kMaxDtheta=0.05;  // maximal distance in theta
+  
   if (!friendTrack->GetTPCOut()) return;
   //
   // 0. Select only track crossing the CE
@@ -1059,17 +1073,22 @@ void  AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *
   Double_t xyz[3]={0,0.,0.0};  
   Double_t bz   =0;
   Int_t nclIn=0,nclOut=0;
-  trackIn.ResetCovariance(30.);
-  trackOut.ResetCovariance(30.);
+  trackIn.ResetCovariance(10.);
+  trackOut.ResetCovariance(10.);
   //
   //2.a Refit inner
   // 
+  Int_t sideIn=0;
   for (Int_t irow=0;irow<159;irow++) {
     AliTPCclusterMI *cl=seed->GetClusterPointer(irow);
     if (!cl) continue;
     if (cl->GetX()<80) continue;
-    if (track->GetInnerParam()->GetZ()<0 &&(cl->GetDetector()%36)<18) break;
-    if (track->GetInnerParam()->GetZ()>0 &&(cl->GetDetector()%36)>=18) break;
+    if (sideIn==0){
+      if (cl->GetDetector()%36<18) sideIn=1;
+      if (cl->GetDetector()%36>=18) sideIn=-1;
+    }
+    if (sideIn== -1 && (cl->GetDetector()%36)<18) break;
+    if (sideIn==  1 &&(cl->GetDetector()%36)>=18) break;
     Int_t sector = cl->GetDetector();
     Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackIn.GetAlpha();
     if (TMath::Abs(dalpha)>0.01){
@@ -1078,20 +1097,27 @@ void  AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *
     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);
     if (!trackIn.PropagateTo(r[0],bz)) break;
     nclIn++;
     trackIn.Update(&r[1],cov);    
   }
   //
   //2.b Refit outer
-  // 
+  //
+  Int_t sideOut=0;
   for (Int_t irow=159;irow>0;irow--) {
     AliTPCclusterMI *cl=seed->GetClusterPointer(irow);
     if (!cl) continue;
     if (cl->GetX()<80) continue;
-    if (cl->GetZ()*track->GetOuterParam()->GetZ()<0) break;
-    if (friendTrack->GetTPCOut()->GetZ()<0 &&(cl->GetDetector()%36)<18) break;
-    if (friendTrack->GetTPCOut()->GetZ()>0 &&(cl->GetDetector()%36)>=18) break;
+    if (sideOut==0){
+      if (cl->GetDetector()%36<18) sideOut=1;
+      if (cl->GetDetector()%36>=18) sideOut=-1;
+      if (sideIn==sideOut) break;
+    }
+    if (sideOut== -1 && (cl->GetDetector()%36)<18) break;
+    if (sideOut==  1 &&(cl->GetDetector()%36)>=18) break;
+    //
     Int_t sector = cl->GetDetector();
     Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackOut.GetAlpha();
     if (TMath::Abs(dalpha)>0.01){
@@ -1100,6 +1126,7 @@ void  AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *
     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);
     if (!trackOut.PropagateTo(r[0],bz)) break;
     nclOut++;
     trackOut.Update(&r[1],cov);    
@@ -1108,6 +1135,12 @@ void  AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *
   Double_t meanX = (trackIn.GetX()+trackOut.GetX())*0.5;
   trackIn.PropagateTo(meanX,bz); 
   trackOut.PropagateTo(meanX,bz); 
+  if (TMath::Abs(trackIn.GetY()-trackOut.GetY())>kMaxDy) return;
+  if (TMath::Abs(trackIn.GetSnp()-trackOut.GetSnp())>kMaxDsnp) return;
+  if (TMath::Abs(trackIn.GetTgl()-trackOut.GetTgl())>kMaxDtheta) return;
+  if (TMath::Min(nclIn,nclOut)>kMinNclS){
+    FillResHistoTPCCE(&trackIn,&trackOut);
+  }
   TTreeSRedirector *cstream = GetDebugStreamer();
   if (cstream){
     TVectorD gxyz(3);
@@ -1120,6 +1153,8 @@ void  AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *
       "trigger="<<fTrigger<<      //  trigger
       "mag="<<fMagF<<             //  magnetic field
       //
+      "sideIn="<<sideIn<<         // side at inner part
+      "sideOut="<<sideOut<<         // side at puter part
       "xyz.="<<&gxyz<<             // global position
       "tIn.="<<&trackIn<<         // refitterd track in 
       "tOut.="<<&trackOut<<       // refitter track out
@@ -1649,10 +1684,10 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   //   Only primary tracks are selected for analysis
   //
  
-  Double_t xminTrack[4], xmaxTrack[4];
-  Int_t binsTrack[4];
-  TString axisName[4];
-  TString axisTitle[4];
+  Double_t xminTrack[5], xmaxTrack[5];
+  Int_t binsTrack[5];
+  TString axisName[5];
+  TString axisTitle[5];
   //
   binsTrack[0]  =50;
   axisName[0]   ="#Delta";
@@ -1671,9 +1706,16 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   binsTrack[3] =20;
   xminTrack[3] =-1.; xmaxTrack[3]=1.;   // 0.33 GeV cut 
   axisName[3]  ="snp";
+  axisTitle[3]  ="snp";
+  //
+  binsTrack[4] =10;
+  xminTrack[4] =120.; xmaxTrack[4]=215.;   // crossing radius for CE only 
+  axisName[4]  ="r";
+  axisTitle[4] ="r(cm)";
   //
   // delta y
   xminTrack[0] =-1.5; xmaxTrack[0]=1.5;  // 
+  fResHistoTPCCE[0] = new THnSparseS("TPCCE#Delta_{Y} (cm)","#Delta_{Y} (cm)",    5, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCITS[0] = new THnSparseS("TPCITS#Delta_{Y} (cm)","#Delta_{Y} (cm)",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCvertex[0]    = new THnSparseS("TPCVertex#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
   xminTrack[0] =-1.5; xmaxTrack[0]=1.5;  // 
@@ -1683,6 +1725,7 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   //
   // delta z
   xminTrack[0] =-3.; xmaxTrack[0]=3.;  // 
+  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);
   fResHistoTPCTRD[1] = new THnSparseS("TPCTRD#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
@@ -1691,6 +1734,7 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   //
   // delta snp-P2
   xminTrack[0] =-0.015; xmaxTrack[0]=0.015;  // 
+  fResHistoTPCCE[2] = new THnSparseS("TPCCE#Delta_{#phi}","#Delta_{#phi}",    5, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCITS[2] = new THnSparseS("TPCITS#Delta_{#phi}","#Delta_{#phi}",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCvertex[2] = new THnSparseS("TPCITSv#Delta_{#phi}","#Delta_{#phi}",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCTRD[2] = new THnSparseS("TPCTRD#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
@@ -1698,6 +1742,7 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   //
   // delta theta-P3
   xminTrack[0] =-0.025; xmaxTrack[0]=0.025;  // 
+  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);
   fResHistoTPCTRD[3] = new THnSparseS("TPCTRD#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
@@ -1705,24 +1750,51 @@ void  AliTPCcalibTime::BookDistortionMaps(){
   //
   // delta theta-P4
   xminTrack[0] =-0.2; xmaxTrack[0]=0.2;  // 
+  fResHistoTPCCE[4] = new THnSparseS("TPCCE#Delta_{1/pt}","#Delta_{1/pt}",    5, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCITS[4] = new THnSparseS("TPCITS#Delta_{1/pt}","#Delta_{1/pt}",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCvertex[4] = new THnSparseS("TPCITSv#Delta_{1/pt}","#Delta_{1/pt}",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCTRD[4] = new THnSparseS("TPCTRD#Delta_{1/pt}","#Delta_{1/pt}",    4, binsTrack,xminTrack, xmaxTrack);
   fResHistoTPCTOF[4] = new THnSparseS("TPCTOF#Delta_{1/pt}","#Delta_{1/pt}",    4, binsTrack,xminTrack, xmaxTrack);
   //
   for (Int_t ivar=0;ivar<4;ivar++){
-    for (Int_t ivar2=0;ivar2<4;ivar2++){      
-      fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
-      fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
-      fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
-      fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
-      fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
-      fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+    for (Int_t ivar2=0;ivar2<5;ivar2++){      
+      fResHistoTPCCE[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+      fResHistoTPCCE[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+      if (ivar2<4){
+       fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+       fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+       fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+       fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+       fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+       fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+      }
     }
   }
 }
 
 
+void        AliTPCcalibTime::FillResHistoTPCCE(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pTPCOut ){
+  //
+  // fill residual histograms pTPCOut-pTPCin - trac crossing CE
+  // Histogram 
+  //
+  Double_t histoX[5];
+  Double_t xyz[3];
+  pTPCIn->GetXYZ(xyz);
+  Double_t phi= TMath::ATan2(xyz[1],xyz[0]);
+  histoX[1]= pTPCIn->GetTgl();
+  histoX[2]= phi;
+  histoX[3]= pTPCIn->GetSnp();
+  histoX[4]= pTPCIn->GetX();
+  AliExternalTrackParam lout(*pTPCOut);
+  lout.Rotate(pTPCIn->GetAlpha());
+  lout.PropagateTo(pTPCIn->GetX(),fMagF);
+  //
+  for (Int_t ihisto=0; ihisto<5; ihisto++){
+    histoX[0]=lout.GetParameter()[ihisto]-pTPCIn->GetParameter()[ihisto];
+    fResHistoTPCCE[ihisto]->Fill(histoX);
+  }
+}  
 void        AliTPCcalibTime::FillResHistoTPCITS(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pITSOut ){
   //
   // fill residual histograms pTPCIn-pITSOut
index d67fc57d00e716f3d3fe01aa48292b5e243a9162..929ed587e40bd38c6d88dee5a4f25e2e865d3d74 100644 (file)
@@ -61,12 +61,14 @@ public:
   TObjArray* GetAlignTRDTPC() const {return fAlignTRDTPC;}              // alignemnt array TRD TPC match
   TObjArray* GetAlignTOFTPC() const {return fAlignTOFTPC;}              // alignemnt array TOF TPC match
 
+  THnSparse*  GetResHistoTPCCE(Int_t index) const { return (index<5) ? fResHistoTPCCE[index]:0;}        //TPC-CE    matching map
   THnSparse*  GetResHistoTPCITS(Int_t index) const { return (index<5) ? fResHistoTPCITS[index]:0;}        //TPC-ITS    matching map
   THnSparse*  GetResHistoTPCvertex(Int_t index)      const { return (index<5) ? fResHistoTPCvertex[index]   :0;}        //TPC vertex matching map
   THnSparse*  GetResHistoTPCTRD(Int_t index)   const { return (index<5) ? fResHistoTPCTRD[index]:0;}        //TPC-TRD    matching map
   THnSparse*  GetResHistoTPCTOF(Int_t index)   const { return (index<5) ? fResHistoTPCTOF[index]:0;}        //TPC-TOF    matching map
 
   void        BookDistortionMaps();      // book histograms
+  void        FillResHistoTPCCE(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pTPCOut );       // fill residual histo
   void        FillResHistoTPCITS(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pITSOut );       // fill residual histo
   void        FillResHistoTPC(const AliESDtrack * pTrack);
   void        FillResHistoTPCTRD(const AliExternalTrackParam * pTPCOut, const AliExternalTrackParam * pTRDIn );
@@ -96,6 +98,7 @@ private:
   //
   // distortion maps
   //
+  THnSparse*  fResHistoTPCCE[5];        //TPC-TPCE matching map
   THnSparse*  fResHistoTPCITS[5];        //TPC-ITS    matching map
   THnSparse*  fResHistoTPCvertex[5];           //TPC-ITS    vertex matching map
   THnSparse*  fResHistoTPCTRD[5];        //TPC-TRD    matching map