Updated TRD PID for electrons. Additional information from START
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 29 Apr 2006 18:20:00 +0000 (18:20 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 29 Apr 2006 18:20:00 +0000 (18:20 +0000)
START/AliSTARTReconstructor.cxx
STEER/AliESD.cxx
STEER/AliESD.h
STEER/AliESDtrack.cxx
STEER/AliESDtrack.h
TRD/AliTRDpidESD.cxx
TRD/AliTRDtrack.cxx
TRD/AliTRDtrack.h
TRD/AliTRDtracker.cxx

index 6b8e126..3deb872 100644 (file)
@@ -204,12 +204,10 @@ void AliSTARTReconstructor::FillESD(AliRunLoader* runLoader, AliESD *pESD) const
       amp[i] = frecpoints -> GetAmp(i);
     }
     pESD->SetT0zVertex(Zposition); //vertex Z position 
-    /*    
     pESD->SetT0(timeStart);        // interaction time 
-    pESD->SetT0time(*time);        // best TOF on each PMT 
-    pESD->SetT0amplitude(*amp);    // number of particles(MIPs) on each PMT
-    */    
-    //    pESD->Dump();
+    pESD->SetT0time(time);         // best TOF on each PMT 
+    pESD->SetT0amplitude(amp);     // number of particles(MIPs) on each PMT
+
     pStartLoader->UnloadRecPoints();
    
 } // vertex in 3 sigma
index e96e56c..d0dde6b 100644 (file)
@@ -41,6 +41,7 @@ AliESD::AliESD():
   fZDCEMEnergy(0),
   fZDCParticipants(0),
   fT0zVertex(0),
+  fT0timeStart(0),
   fPrimaryVertex(),
   fTracks("AliESDtrack",15000),
   fHLTConfMapTracks("AliESDHLTtrack",25000),
@@ -59,7 +60,10 @@ AliESD::AliESD():
   fFirstPHOSCluster(-1),
   fESDFMD(0x0)
 {
-
+  for (Int_t i=0; i<24; i++) {
+    fT0time[i] = 0;
+    fT0amplitude[i] = 0;
+  }
 }
 
 //______________________________________________________________________________
@@ -117,6 +121,7 @@ void AliESD::Reset()
   fZDCEMEnergy=0;
   fZDCParticipants=0;
   fT0zVertex=0;
+  fT0timeStart = 0;
   fPrimaryVertex.Reset();
   fTracks.Clear();
   fHLTConfMapTracks.Clear();
index 19560ec..67f2503 100644 (file)
@@ -162,6 +162,16 @@ public:
 
   Float_t GetT0zVertex() const {return fT0zVertex;}
   void SetT0zVertex(Float_t z) {fT0zVertex=z;}
+  Float_t GetT0() const {return fT0timeStart;}
+  void SetT0(Float_t timeStart) {fT0timeStart = timeStart;}
+  const Float_t * GetT0time() const {return fT0time;}
+  void SetT0time(Float_t time[24]) {
+    for (Int_t i=0; i<24; i++) fT0time[i] = time[i];
+  }
+  const Float_t * GetT0amplitude() const {return fT0amplitude;}
+  void SetT0amplitude(Float_t amp[24]) {
+    for (Int_t i=0; i<24; i++) fT0amplitude[i] = amp[i];
+  }
 
   Float_t GetZDCN1Energy() const {return fZDCN1Energy;}
   Float_t GetZDCP1Energy() const {return fZDCP1Energy;}
@@ -203,6 +213,9 @@ protected:
   Int_t        fZDCParticipants; // number of participants estimated by the ZDC
 
   Float_t      fT0zVertex;       // vertex z position estimated by the START
+  Float_t      fT0timeStart;     // interaction time estimated by the START
+  Float_t      fT0time[24];      // best TOF on each START PMT
+  Float_t      fT0amplitude[24]; // number of particles(MIPs) on each START PMT
   AliESDVertex fPrimaryVertex;   // Primary vertex estimated by the ITS
 
   TClonesArray fTracks;          // ESD tracks
index 1b384ae..d9ff234 100644 (file)
@@ -112,7 +112,7 @@ AliESDtrack::AliESDtrack() :
   //
   // The default ESD constructor 
   //
-  Int_t i;
+  Int_t i, j;
   for (i=0; i<AliPID::kSPECIES; i++) {
     fTrackTime[i]=0.;
     fR[i]=1.;
@@ -125,7 +125,12 @@ AliESDtrack::AliESDtrack() :
   
   for (i=0; i<3; i++)   { fKinkIndexes[i]=0;}
   for (i=0; i<3; i++)   { fV0Indexes[i]=-1;}
-  for (i=0;i<kNPlane;i++) {fTRDsignals[i]=0.; fTRDTimBin[i]=-1;}
+  for (i=0;i<kNPlane;i++) {
+    for (j=0;j<kNSlice;j++) {
+      fTRDsignals[i][j]=0.; 
+    }
+    fTRDTimBin[i]=-1;
+  }
   for (i=0;i<4;i++) {fTPCPoints[i]=-1;}
   for (i=0;i<3;i++) {fTOFLabel[i]=-1;}
   for (i=0;i<10;i++) {fTOFInfo[i]=-1;}
@@ -197,8 +202,10 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track):
   for (Int_t i=0; i<3;i++)   { fV0Indexes[i]=track.fV0Indexes[i];}
   //
   for (Int_t i=0;i<kNPlane;i++) {
-      fTRDsignals[i]=track.fTRDsignals[i]; 
-      fTRDTimBin[i]=track.fTRDTimBin[i];
+    for (Int_t j=0;j<kNSlice;j++) {
+      fTRDsignals[i][j]=track.fTRDsignals[i][j]; 
+    }
+    fTRDTimBin[i]=track.fTRDTimBin[i];
   }
   for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i]=track.fTRDr[i]; 
   for (Int_t i=0;i<AliPID::kSPECIES;i++) fTOFr[i]=track.fTOFr[i];
@@ -283,8 +290,10 @@ void AliESDtrack::MakeMiniESDtrack(){
   fTRDncls0 = 0;       
   fTRDsignal = 0;      
   for (Int_t i=0;i<kNPlane;i++) {
-      fTRDsignals[i] = 0; 
-      fTRDTimBin[i]  = 0;
+    for (Int_t j=0;j<kNSlice;j++) {
+      fTRDsignals[i][j] = 0; 
+    }
+    fTRDTimBin[i]  = 0;
   }
   for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i] = 0; 
   fTRDLabel = 0;       
index d4d8c1a..e93cf36 100644 (file)
@@ -152,11 +152,14 @@ public:
   Float_t GetTRDQuality()const {return fTRDQuality;}
   void    SetTRDBudget(Float_t budget){fTRDBudget=budget;}
   Float_t GetTRDBudget()const {return fTRDBudget;}
-  void    SetTRDsignals(Float_t dedx, Int_t i) {fTRDsignals[i]=dedx;}
+  void    SetTRDsignals(Float_t dedx, Int_t i, Int_t j) {fTRDsignals[i][j]=dedx;}
   void    SetTRDTimBin(Int_t timbin, Int_t i) {fTRDTimBin[i]=timbin;}
   void    GetTRDpid(Double_t *p) const;
   Float_t GetTRDsignal() const {return fTRDsignal;}
-  Float_t GetTRDsignals(Int_t i) const {return fTRDsignals[i];}
+  Float_t GetTRDsignals(Int_t iPlane, Int_t iSlice=-1) const { if (iSlice == -1) 
+    return (fTRDsignals[iPlane][0] + fTRDsignals[iPlane][1] + fTRDsignals[iPlane][3])/3.0;
+    return fTRDsignals[iPlane][iSlice];
+  }
   Int_t   GetTRDTimBin(Int_t i) const {return fTRDTimBin[i];}
   Float_t GetTRDchi2() const {return fTRDchi2;}
   Int_t   GetTRDclusters(Int_t *idx) const;
@@ -240,7 +243,8 @@ public:
     kTIME=0x80000000
   }; 
   enum {
-    kNPlane = 6
+    kNPlane = 6,
+    kNSlice = 3
   };
 protected:
   
@@ -294,7 +298,7 @@ protected:
   Int_t   fTRDncls;        // number of clusters assigned in the TRD
   Int_t   fTRDncls0;       // number of clusters assigned in the TRD before first material cross
   Float_t fTRDsignal;      // detector's PID signal
-  Float_t fTRDsignals[kNPlane];  // TRD signals from all six planes
+  Float_t fTRDsignals[kNPlane][kNSlice];  // TRD signals from all six planes in 3 slices each
   Int_t   fTRDTimBin[kNPlane];   // Time bin of Max cluster from all six planes
   Float_t fTRDr[AliPID::kSPECIES]; // "detector response probabilities" (for the PID)
   Int_t   fTRDLabel;       // label according TRD
@@ -333,7 +337,7 @@ protected:
 
   AliESDtrack & operator=(const AliESDtrack & ) {return *this;}
 
-  ClassDef(AliESDtrack,27)  //ESDtrack 
+  ClassDef(AliESDtrack,28)  //ESDtrack 
 };
 
 #endif 
index 52e17dc..5021833 100644 (file)
@@ -120,7 +120,7 @@ Int_t AliTRDpidESD::MakePID(AliESD *event)
     for (Int_t j=0; j<ns; j++) {
       p[j]=1.;
       for (Int_t ilayer=0; ilayer <6; ilayer++) {
-        Double_t dedx=t->GetTRDsignals(ilayer);
+        Double_t dedx=t->GetTRDsignals(ilayer,1);
         Int_t timbin=t->GetTRDTimBin(ilayer);
        p[j]*= pd->GetProbability(j,mom,dedx);
        p[j]*= pd->GetProbabilityT(j,mom,timbin);
index c8c41f7..bae9157 100644 (file)
@@ -76,7 +76,9 @@ AliTRDtrack::AliTRDtrack():
 
 {
   for (Int_t i=0; i<kNplane; i++) {
-    fdEdxPlane[i] = 0;
+    for (Int_t j=0; j<kNslice; j++) {
+      fdEdxPlane[i][j] = 0;
+    }
     fTimBinPlane[i] = -1;
   }
   for (UInt_t i=0; i<kMAXCLUSTERSPERTRACK; i++) {
@@ -86,6 +88,7 @@ AliTRDtrack::AliTRDtrack():
   }
   for (Int_t i=0; i<3; i++) fBudget[i] = 0;
 }
+
 //_____________________________________________________________________________
 AliTRDtrack::AliTRDtrack(const AliTRDcluster *c, UInt_t index, 
                          const Double_t xx[5], const Double_t cc[15], 
@@ -119,8 +122,10 @@ AliTRDtrack::AliTRDtrack(const AliTRDcluster *c, UInt_t index,
   fdEdxT=0.;
   fDE=0.;
   for (Int_t i=0;i<kNplane;i++){
-      fdEdxPlane[i] = 0.;
-      fTimBinPlane[i] = -1;
+    for (Int_t j=0; j<kNslice; j++) {
+      fdEdxPlane[i][j] = 0;
+    }
+    fTimBinPlane[i] = -1;
   }
 
   fLhElectron = 0.0;
@@ -166,9 +171,11 @@ AliTRDtrack::AliTRDtrack(const AliTRDtrack& t) : AliKalmanTrack(t)
   fdEdxT=t.fdEdxT;
   fDE=t.fDE;
   for (Int_t i=0;i<kNplane;i++){
-      fdEdxPlane[i] = t.fdEdxPlane[i];
-      fTimBinPlane[i] = t.fTimBinPlane[i];
-      fTracklets[i]   = t.fTracklets[i];
+    for (Int_t j=0; j<kNslice; j++) {
+      fdEdxPlane[i][j] = t.fdEdxPlane[i][j];
+    }
+    fTimBinPlane[i] = t.fTimBinPlane[i];
+    fTracklets[i]   = t.fTracklets[i];
   }
 
   fLhElectron = 0.0;
@@ -230,7 +237,9 @@ AliTRDtrack::AliTRDtrack(const AliKalmanTrack& t, Double_t alpha)
   fdEdx=t.GetPIDsignal();
   fDE  = 0;
   for (Int_t i=0;i<kNplane;i++){
-    fdEdxPlane[i] = 0.0;
+    for (Int_t j=0;j<kNslice;j++){
+      fdEdxPlane[i][j] = 0.0;
+    }
     fTimBinPlane[i] = -1;
   }
 
@@ -305,7 +314,9 @@ AliTRDtrack::AliTRDtrack(const AliESDtrack& t)
   fdEdx=t.GetTRDsignal();  
   fDE =0;     
   for (Int_t i=0;i<kNplane;i++){
-    fdEdxPlane[i] = t.GetTRDsignals(i);
+    for (Int_t j=0;j<kNslice;j++){
+      fdEdxPlane[i][j] = t.GetTRDsignals(i,j);
+    }
     fTimBinPlane[i] = t.GetTRDTimBin(i);
   }
 
@@ -715,6 +726,7 @@ Int_t AliTRDtrack::PropagateTo(Double_t xk,Double_t x0,Double_t rho)
   }
 
   return 1;            
+
 }     
 
 //_____________________________________________________________________________
index 74a6b9d..37f958a 100644 (file)
@@ -22,7 +22,13 @@ const unsigned kMAXCLUSTERSPERTRACK = 210;
 
 class AliTRDtrack : public AliKalmanTrack {
    
-  enum { kNdet = 540, kNstacks = 90, kNplane = 6, kNcham = 5, kNsect = 18 };
+  enum { kNdet      = 540
+       , kNstacks   = 90
+       , kNplane    = 6
+       , kNcham     = 5
+       , kNsect     = 18
+       , kNslice    = 3
+       , kNtimeBins = 22 };
 
   friend class AliTRDtracker;
 
@@ -50,7 +56,8 @@ class AliTRDtrack : public AliKalmanTrack {
    void            GetCovariance(Double_t cov[15]) const;  
    Double_t        GetdEdx() const                      { return fdEdx;          }
    Double_t        GetPIDsignal() const                 { return GetdEdx();      }
-   Float_t         GetPIDsignals(Int_t i) const         { return fdEdxPlane[i];  }
+   Float_t         GetPIDsignals(Int_t iPlane, Int_t iSlice) const 
+                                                        { return fdEdxPlane[iPlane][iSlice]; }
    Int_t           GetPIDTimBin(Int_t i) const          { return fTimBinPlane[i];}
    Double_t        GetEta() const                       { return fE;             }
 
@@ -92,7 +99,8 @@ class AliTRDtrack : public AliKalmanTrack {
    Int_t           Rotate(Double_t angle, Bool_t absolute=kFALSE);
 
    void            SetdEdx(Float_t dedx)                { fdEdx           = dedx;   }  
-   void            SetPIDsignals(Float_t dedx, Int_t i) { fdEdxPlane[i]   = dedx;   }
+   void            SetPIDsignals(Float_t dedx, Int_t iPlane, Int_t iSlice) 
+                                                        { fdEdxPlane[iPlane][iSlice] = dedx; }
    void            SetPIDTimBin(Int_t timbin, Int_t i)  { fTimBinPlane[i] = timbin; }
    void            SetLikelihoodElectron(Float_t l)     { fLhElectron     = l;      }
 
@@ -124,7 +132,7 @@ class AliTRDtrack : public AliKalmanTrack {
    Float_t         fdEdx;                                  // dE/dx 
    Float_t         fdEdxT;                                 // dE/dx  - truncated mean
    Float_t         fDE;                                    // integrated delta energy
-   Float_t         fdEdxPlane[kNplane];                    // dE/dx from all 6 planes
+   Float_t         fdEdxPlane[kNplane][kNslice];           // dE/dx from all 6 planes in 3 slices each
    Int_t           fTimBinPlane[kNplane];                  // time bin of Max cluster from all 6 planes
 
    Double_t        fAlpha;                                 // rotation angle
@@ -160,7 +168,7 @@ class AliTRDtrack : public AliKalmanTrack {
    Float_t         fBudget[3];                             // integrated material budget
    AliTRDtrack    *fBackupTrack;                           //! backup track
 
-   ClassDef(AliTRDtrack,4)                                 // TRD reconstructed tracks
+   ClassDef(AliTRDtrack,5)                                 // TRD reconstructed tracks
 
 };                     
 
index 2b83070..0467542 100644 (file)
@@ -107,7 +107,9 @@ AliTRDtracker::AliTRDtracker(const TFile *geomfile):AliTracker()
   }
   else { 
     printf("AliTRDtracker::AliTRDtracker(): can't find TRD geometry!\n");
+
     fGeom = new AliTRDgeometryFull();
+
   } 
   fGeom->ReadGeoMatrices();
 
@@ -679,8 +681,10 @@ Int_t AliTRDtracker::PropagateBack(AliESD* event)
       if (track->PropagateTo(xtof)) {
        seed->UpdateTrackParams(track, AliESDtrack::kTRDout);
         for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
-           seed->SetTRDsignals(track->GetPIDsignals(i),i);
-           seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
+          for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+            seed->SetTRDsignals(track->GetPIDsignals(i,j),i,j);
+         }
+          seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
         }
        //      seed->SetTRDtrack(new AliTRDtrack(*track));
        if (track->GetNumberOfClusters()>foundMin) found++;
@@ -690,8 +694,10 @@ Int_t AliTRDtracker::PropagateBack(AliESD* event)
        seed->UpdateTrackParams(track, AliESDtrack::kTRDout);
        //seed->SetStatus(AliESDtrack::kTRDStop);    
         for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
-           seed->SetTRDsignals(track->GetPIDsignals(i),i);
-           seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
+          for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+            seed->SetTRDsignals(track->GetPIDsignals(i,j),i,j);
+         }
+          seed->SetTRDTimBin(track->GetPIDTimBin(i),i);
         }
        //seed->SetTRDtrack(new AliTRDtrack(*track));
        found++;
@@ -770,7 +776,9 @@ Int_t AliTRDtracker::RefitInward(AliESD* event)
     AliTRDtrack *pt = new AliTRDtrack(seed2,seed2.GetAlpha());
     Int_t * indexes2 = seed2.GetIndexes();
     for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
-      pt->SetPIDsignals(seed2.GetPIDsignals(i),i);
+      for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+        pt->SetPIDsignals(seed2.GetPIDsignals(i,j),i,j);
+      }
       pt->SetPIDTimBin(seed2.GetPIDTimBin(i),i);
     }
 
@@ -794,7 +802,9 @@ Int_t AliTRDtracker::RefitInward(AliESD* event)
     if(PropagateToX(t,xTPC,fgkMaxStep)) {
       seed->UpdateTrackParams(pt, AliESDtrack::kTRDrefit);
       for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
-        seed->SetTRDsignals(pt->GetPIDsignals(i),i);
+        for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+          seed->SetTRDsignals(pt->GetPIDsignals(i,j),i,j);
+       }
         seed->SetTRDTimBin(pt->GetPIDTimBin(i),i);
       }
     }else{
@@ -809,7 +819,9 @@ Int_t AliTRDtracker::RefitInward(AliESD* event)
         CookdEdxTimBin(*pt2);
        seed->UpdateTrackParams(pt2, AliESDtrack::kTRDrefit);
         for (Int_t i=0;i<AliESDtrack::kNPlane;i++) {
-          seed->SetTRDsignals(pt2->GetPIDsignals(i),i);
+          for (Int_t j=0;j<AliESDtrack::kNSlice;j++) {
+            seed->SetTRDsignals(pt2->GetPIDsignals(i,j),i,j);
+         }
           seed->SetTRDTimBin(pt2->GetPIDTimBin(i),i);
         }
       }
@@ -2790,13 +2802,21 @@ void AliTRDtracker::CookdEdxTimBin(AliTRDtrack& TRDtrack)
   // Prashant Shukla (shukla@physi.uni-heidelberg.de)
   //
 
-  Double_t  clscharge[AliESDtrack::kNPlane], maxclscharge[AliESDtrack::kNPlane];
-  Int_t  nCluster[AliESDtrack::kNPlane], timebin[AliESDtrack::kNPlane];
+  Double_t  clscharge[AliESDtrack::kNPlane][AliESDtrack::kNSlice];
+  Double_t  maxclscharge[AliESDtrack::kNPlane];
+  Int_t     nCluster[AliESDtrack::kNPlane][AliESDtrack::kNSlice];
+  Int_t     timebin[AliESDtrack::kNPlane];
+
+  //Initialization of cluster charge per plane.  
+  for (Int_t iPlane = 0; iPlane < AliESDtrack::kNPlane; iPlane++) {
+    for (Int_t iSlice = 0; iSlice < AliESDtrack::kNSlice; iSlice++) {
+      clscharge[iPlane][iSlice] = 0.0;
+      nCluster[iPlane][iSlice] = 0;
+    }
+  }
 
   //Initialization of cluster charge per plane.  
   for (Int_t iPlane = 0; iPlane < AliESDtrack::kNPlane; iPlane++) {
-    clscharge[iPlane] = 0.0;
-    nCluster[iPlane] = 0;
     timebin[iPlane] = -1;
     maxclscharge[iPlane] = 0.0;
   }
@@ -2812,27 +2832,27 @@ void AliTRDtracker::CookdEdxTimBin(AliTRDtrack& TRDtrack)
     if (!tb) continue;
     Int_t detector = pTRDcluster->GetDetector();
     Int_t iPlane   = fGeom->GetPlane(detector);
-    clscharge[iPlane] = clscharge[iPlane]+charge;
+    Int_t iSlice = tb*AliESDtrack::kNSlice/AliTRDtrack::kNtimeBins;
+    clscharge[iPlane][iSlice] = clscharge[iPlane][iSlice]+charge;
     if(charge > maxclscharge[iPlane]) {
       maxclscharge[iPlane] = charge;
       timebin[iPlane] = tb;
     }
-    nCluster[iPlane]++;
+    nCluster[iPlane][iSlice]++;
   } // end of loop over cluster
 
   // Setting the fdEdxPlane and fTimBinPlane variabales 
   Double_t totalCharge = 0;
+
   for (Int_t iPlane = 0; iPlane < AliESDtrack::kNPlane; iPlane++) {
-    // Quality control of TRD track.
-    if (nCluster[iPlane]<= 5) {
-      clscharge[iPlane]=0.0;
-      timebin[iPlane]=-1;
+    for (Int_t iSlice = 0; iSlice < AliESDtrack::kNSlice; iSlice++) {
+      if (nCluster[iPlane][iSlice]) clscharge[iPlane][iSlice] /= nCluster[iPlane][iSlice];
+      TRDtrack.SetPIDsignals(clscharge[iPlane][iSlice], iPlane, iSlice);
+      totalCharge= totalCharge+clscharge[iPlane][iSlice];
     }
-    if (nCluster[iPlane]) clscharge[iPlane] /= nCluster[iPlane];
-    TRDtrack.SetPIDsignals(clscharge[iPlane], iPlane);
-    TRDtrack.SetPIDTimBin(timebin[iPlane], iPlane);
-    totalCharge= totalCharge+clscharge[iPlane];
+    TRDtrack.SetPIDTimBin(timebin[iPlane], iPlane);     
   }
+
   //  Int_t i;
   //  Int_t nc=TRDtrack.GetNumberOfClusters(); 
   //  Float_t dedx=0;