Store number of TRD tracklets on ESD for tracking and PID. Reuse data
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 Mar 2009 10:22:30 +0000 (10:22 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 Mar 2009 10:22:30 +0000 (10:22 +0000)
member fTRDpidQuality as fTRDntracklets to store both scalers.

Alex

13 files changed:
STEER/AliESDtrack.cxx
STEER/AliESDtrack.h
TRD/AliTRDQADataMakerRec.cxx
TRD/AliTRDpidESD.cxx
TRD/AliTRDtrackV1.cxx
TRD/AliTRDtracker.cxx
TRD/AliTRDtrackerV1.cxx
TRD/qaAnalysis/AliTRDqaESDFriends.cxx
TRD/qaAnalysis/AliTRDqaElectronSpectra.cxx
TRD/qaAnalysis/AliTRDqaEnergyDeposit.cxx
TRD/qaAnalysis/AliTRDqaJPsi.cxx
TRD/qaRec/AliTRDcheckESD.cxx
TRD/qaRec/AliTRDtrackInfoGen.cxx

index 44669f7..e62d1fe 100644 (file)
@@ -211,7 +211,7 @@ AliESDtrack::AliESDtrack() :
   fITSClusterMap(0),
   fTRDncls(0),
   fTRDncls0(0),
-  fTRDpidQuality(0),
+  fTRDntracklets(0),
   fTRDnSlices(0),
   fTRDslices(0x0)
   
@@ -299,7 +299,7 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track):
   fITSClusterMap(track.fITSClusterMap),
   fTRDncls(track.fTRDncls),
   fTRDncls0(track.fTRDncls0),
-  fTRDpidQuality(track.fTRDpidQuality),
+  fTRDntracklets(track.fTRDntracklets),
   fTRDnSlices(track.fTRDnSlices),
   fTRDslices(0x0)
 {
@@ -398,7 +398,7 @@ AliESDtrack::AliESDtrack(const AliVTrack *track) :
   fITSClusterMap(0),
   fTRDncls(0),
   fTRDncls0(0),
-  fTRDpidQuality(0),
+  fTRDntracklets(0),
   fTRDnSlices(0),
   fTRDslices(0x0)
 {
@@ -516,7 +516,7 @@ AliESDtrack::AliESDtrack(TParticle * part) :
   fITSClusterMap(0),
   fTRDncls(0),
   fTRDncls0(0),
-  fTRDpidQuality(0),
+  fTRDntracklets(0),
   fTRDnSlices(0),
   fTRDslices(0x0)
 {
@@ -823,7 +823,7 @@ AliESDtrack &AliESDtrack::operator=(const AliESDtrack &source){
   fITSClusterMap = source.fITSClusterMap; 
   fTRDncls   = source.fTRDncls;       
   fTRDncls0  = source.fTRDncls0;      
-  fTRDpidQuality  = source.fTRDpidQuality
+  fTRDntracklets  = source.fTRDntracklets
   return *this;
 }
 
@@ -994,7 +994,7 @@ void AliESDtrack::MakeMiniESDtrack(){
   for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i] = 0; 
   fTRDLabel = 0;       
   fTRDQuality  = 0;
-  fTRDpidQuality = 0;
+  fTRDntracklets = 0;
   if(fTRDnSlices)
     delete[] fTRDslices;
   fTRDslices=0x0;
index dbc1a2b..9db4d9e 100644 (file)
@@ -205,8 +205,9 @@ public:
   void    SetTRDpid(const Double_t *p);
   
 // A.Bercuci
-  void    SetTRDpidQuality(UChar_t q){fTRDpidQuality = q;}
-  UChar_t GetTRDpidQuality() const {return fTRDpidQuality;}
+  void    SetTRDntracklets(UChar_t q){fTRDntracklets = q;}
+  UChar_t GetTRDntrackletsPID() const {return (fTRDntracklets>>3)&7;}
+  UChar_t GetTRDntracklets() const {return fTRDntracklets&7;}
 // end A.Bercuci
 
   void     SetNumberOfTRDslices(Int_t n);
@@ -407,7 +408,7 @@ protected:
   UChar_t fITSClusterMap;  // map of clusters, one bit per a layer
   UChar_t fTRDncls;        // number of clusters assigned in the TRD
   UChar_t fTRDncls0;       // number of clusters assigned in the TRD before first material cross
-  UChar_t fTRDpidQuality;   // TRD PID quality according to number of planes. 6 is the best
+  UChar_t fTRDntracklets;  // number of TRD tracklets used for tracking/PID
 
   Int_t fTRDnSlices;     // number of slices used for PID in the TRD
   Double32_t *fTRDslices;  //[fTRDnSlices] 
@@ -417,7 +418,7 @@ protected:
  private:
 
   AliESDtrack & operator=(const AliESDtrack & );
-  ClassDef(AliESDtrack,47)  //ESDtrack 
+  ClassDef(AliESDtrack,48)  //ESDtrack 
 };
 
 #endif 
index 2668688..4a525bd 100644 (file)
@@ -504,7 +504,7 @@ void AliTRDQADataMakerRec::MakeESDs(AliESDEvent * esd)
     GetESDsData(28)->Fill(track->GetTRDBudget());
     GetESDsData(29)->Fill(track->GetTRDchi2());
     GetESDsData(30)->Fill(track->GetTRDTimBin(0));
-    GetESDsData(31)->Fill(track->GetTRDpidQuality());
+    GetESDsData(31)->Fill(track->GetTRDntrackletsPID());
     
     
     // dedx
@@ -523,7 +523,7 @@ void AliTRDQADataMakerRec::MakeESDs(AliESDEvent * esd)
     }
 
     // probabilities uniformity
-    if (track->GetTRDpidQuality() < 6) continue;
+    if (track->GetTRDntrackletsPID() < 6) continue;
     GetESDsData(35)->Fill(paramOut->GetZ()/paramOut->GetX());
     
     Int_t idx = 5 * sector + stack;
index a09ea31..32c1be3 100644 (file)
@@ -212,7 +212,7 @@ Int_t AliTRDpidESD::MakePID(AliESDEvent *event)
 
     // book PID to the track
     t->SetTRDpid(p);
-    t->SetTRDpidQuality(nPlanePID);
+    t->SetTRDntracklets(nPlanePID<<3);
   }
   
   return 0;
index 9b042eb..bdf9f45 100644 (file)
@@ -293,7 +293,7 @@ Bool_t AliTRDtrackV1::CookPID()
   for(int ip=0; ip<kNplane; ip++){
     if(fTrackletIndex[ip] == 0xffff) continue;
     if(!fTracklet[ip]->IsOK()) continue;
-    if(!(prob = fTracklet[ip]->GetProbability())) return kFALSE;
+    if(!(prob = fTracklet[ip]->GetProbability(kTRUE))) return kFALSE;
     
     Int_t nspec = 0; // quality check of tracklet dEdx
     for(int ispec=0; ispec<AliPID::kSPECIES; ispec++){
@@ -372,21 +372,20 @@ Int_t  AliTRDtrackV1::GetClusterIndex(Int_t id) const
 //_______________________________________________________________
 Double_t AliTRDtrackV1::GetPredictedChi2(const AliTRDseedV1 *trklt) const
 {
-  //
-  // Get the predicted chi2
-  //
-  
-  Double_t x      = trklt->GetX0();
-  Double_t p[2]   = { trklt->GetYat(x)
-                    , trklt->GetZat(x) };
-  Double_t cov[3];
-  trklt->GetCovAt(x, cov);
-  
-  const Double_t *cc = GetCovariance();
-  Double_t dy = p[0]-GetY(); dy*=dy;
-  Double_t s2 = cov[0]+cc[0];
-  return s2 > 0. ? dy/s2 : 0.; 
-  //return AliExternalTrackParam::GetPredictedChi2(p, cov);
+// Compute chi2 between tracklet and track. The value is calculated at the radial position of the track
+// equal to the reference radial position of the tracklet (see AliTRDseedV1)
+// 
+// The chi2 estimator is computed according to the following formula
+// BEGIN_LATEX
+// #chi^{2}=(X_{trklt}-X_{track})(C_{trklt}+C_{track})^{-1}(X_{trklt}-X_{track})^{T}
+// END_LATEX
+// where X=(y z), the position of the track/tracklet in the yz plane
+// 
+
+  Double_t x = GetX();
+  Double_t p[2]   = { trklt->GetYat(x), trklt->GetZat(x)};
+  Double_t cov[3]; trklt->GetCovAt(x, cov);
+  return AliExternalTrackParam::GetPredictedChi2(p, cov);
 }
 
 //_______________________________________________________________
@@ -791,16 +790,20 @@ void AliTRDtrackV1::UpdateESDtrack(AliESDtrack *track)
   Int_t nslices = fReconstructor->IsEightSlices() ? (Int_t)AliTRDpidUtil::kNNslices : (Int_t)AliTRDpidUtil::kLQslices;
   track->SetNumberOfTRDslices(nslices);
 
+  Int_t n = 0;
   for (Int_t ip = 0; ip < kNplane; ip++) {
     if(fTrackletIndex[ip] == 0xffff) continue;
+    n++;
     if(!fTracklet[ip]->IsOK()) continue;
     fTracklet[ip]->CookdEdx(nslices);
     Float_t *dedx = fTracklet[ip]->GetdEdx();
     for (Int_t js = 0; js < nslices; js++, dedx++) track->SetTRDslice(*dedx, ip, js);
   }
 
-  // copy PID to ESD
-  if(!fPIDquality) return;
-  track->SetTRDpid(fPID);
-  track->SetTRDpidQuality(fPIDquality);
+  if(!fPIDquality) track->SetTRDntracklets(n);
+  else {
+    track->SetTRDpid(fPID);
+    n |= (fPIDquality<<3);
+    track->SetTRDntracklets(n);
+  }
 }
index 6656ffa..2ff6df2 100644 (file)
@@ -736,7 +736,7 @@ Int_t AliTRDtracker::RefitInward(AliESDEvent *event)
     pt->SetPIDMethod(AliTRDtrack::kLQ);
     pt->CookPID(pidQ);
     seed->SetTRDpid(pt->GetPID());
-    seed->SetTRDpidQuality(pidQ);
+    seed->SetTRDntracklets(pidQ<<3);
 
     // update calibration
     if(calibra->GetHisto2d()) calibra->UpdateHistograms(pt);
@@ -3730,14 +3730,15 @@ Int_t AliTRDtracker::Freq(Int_t n, const Int_t *inlist
   // The size of output array has is 2*n 
   //
 
-  if (n <= 0) return 0;
+  if (n <= 0) {
+    return 0;
+  }
 
-  // Temporary array for sorting
-  Int_t *sindexS = new Int_t[n];   
-  Int_t *sindexF = new Int_t[2*n];
-  memset(outlist, 0, 2*n*sizeof(Int_t));
-  memset(sindexS, 0, n*sizeof(Int_t));
-  memset(sindexF, 0, 2*n*sizeof(Int_t));
+  Int_t *sindexS = new Int_t[n];   // Temporary array for sorting
+  Int_t *sindexF = new Int_t[2*n];   
+  for (Int_t i = 0; i < n; i++) {
+    sindexF[i] = 0;
+  }
 
   TMath::Sort(n,inlist,sindexS,down); 
  
index 041a257..d32fee1 100644 (file)
@@ -404,7 +404,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event)
   if(quality) delete [] quality;
   
 
-  AliInfo(Form("Number of seeds: %d", nSeed));
+  AliInfo(Form("Number of TPC seeds: %d", nSeed));
   AliInfo(Form("Number of back propagated TRD tracks: %d", found));
       
   // run stand alone tracking
@@ -988,13 +988,13 @@ Float_t AliTRDtrackerV1::FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigErro
   // Containers for Least-square fitter
   for(Int_t ipl = 0; ipl < kNPlanes; ipl++){
     if(!tracklets[ipl].IsOK()) continue;
+    tilt = tracklets[ipl].GetTilt();
     for(Int_t itb = 0; itb < AliTRDseedV1::kNclusters; itb++){
       if(!(cl = tracklets[ipl].GetClusters(itb))) continue;
       if (!tracklets[ipl].IsUsable(itb)) continue;
       x = cl->GetX();
       y = cl->GetY();
       z = cl->GetZ();
-      tilt = tracklets[ipl].GetTilt();
       dx = x - xref;
       // Transformation
       t = 1./(x*x + y*y);
@@ -2169,15 +2169,15 @@ Double_t AliTRDtrackerV1::BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int
   // The overall chamber quality is given by the product of this 2 contributions.
   // 
 
-  Double_t chamberQ[kNPlanes]; memset(chamberQ, 0, kNPlanes*sizeof(Double_t));
+  Double_t chamberQ[kNPlanes];
   AliTRDtrackingChamber *chamber = 0x0;
   for(int iplane=0; iplane<kNPlanes; iplane++){
     if(!(chamber = stack[iplane])) continue;
     chamberQ[iplane] = (chamber = stack[iplane]) ?  chamber->GetQuality() : 0.;
   }
 
-  Double_t tconfig[kNConfigs]; memset(tconfig, 0, kNConfigs*sizeof(Double_t));
-  Int_t planes[] = {0, 0, 0, 0};
+  Double_t tconfig[kNConfigs];
+  Int_t planes[4];
   for(int iconf=0; iconf<kNConfigs; iconf++){
     GetSeedingConfig(iconf, planes);
     tconfig[iconf] = fgTopologicQA[iconf];
index b325113..1076982 100644 (file)
@@ -150,7 +150,7 @@ void AliTRDqaESDFriends::Exec(Option_t *)
     UInt_t status = track->GetStatus();
     if (!(status & AliESDtrack::kTRDrefit)) continue;
     if (!(status & AliESDtrack::kTRDpid)) continue;
-    if (track->GetTRDpidQuality() < 6) continue;
+    if (track->GetTRDntrackletsPID() < 6) continue;
 
     // standard selection
     AliESDfriend *fr = (AliESDfriend*)fESD->FindListObject("AliESDfriend");
index 4ea7bfb..a75e13a 100644 (file)
@@ -226,7 +226,7 @@ void AliTRDqaElectronSpectra::Exec(Option_t *)
     UInt_t status = track->GetStatus();
     if (!(status & AliESDtrack::kTRDrefit)) continue;
     if (!(status & AliESDtrack::kTRDpid)) continue;
-    if (track->GetTRDpidQuality() < 6) continue;
+    if (track->GetTRDntrackletsPID() < 6) continue;
 
     Int_t sm = AliTRDqaAT::GetSector(paramOut->GetAlpha());
     Int_t stack = 5*sm + AliTRDqaAT::GetStack(paramOut);
index e963c4b..04816e5 100644 (file)
@@ -177,7 +177,7 @@ void AliTRDqaEnergyDeposit::Exec(Option_t *)
     UInt_t status = track->GetStatus();
     if (!(status & AliESDtrack::kTRDrefit)) continue;
     if (!(status & AliESDtrack::kTRDpid)) continue;
-    if (track->GetTRDpidQuality() < 6) continue;
+    if (track->GetTRDntrackletsPID() < 6) continue;
 
     // standard selection
     
index 6a609fa..a445807 100644 (file)
@@ -225,7 +225,7 @@ void AliTRDqaJPsi::Exec(Option_t *)
     FillHist(track, step++);    
 
     if (!(status & AliESDtrack::kTRDpid)) continue;
-    if (track->GetTRDpidQuality() < 6) continue;
+    if (track->GetTRDntracklets() < 6) continue;
 
     cTracks[knSteps *charge + step]++;
     FillHist(track, step++);  
index 6c8f01d..a5fa2a5 100644 (file)
@@ -184,7 +184,7 @@ void AliTRDcheckESD::Exec(Option_t *){
     // TRD PID
     Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p);
     // pid quality
-    esdTrack->GetTRDpidQuality();
+    //esdTrack->GetTRDntrackletsPID();
 
     // look at external track param
     const AliExternalTrackParam *op = esdTrack->GetOuterParam();
@@ -233,7 +233,7 @@ void AliTRDcheckESD::Exec(Option_t *){
       } else {
         TRDin=1;
         if(esdTrack->GetNcls(2)) TRDout=1;
-        if(esdTrack->GetTRDpidQuality()>=4) TRDpid=1;
+        if(esdTrack->GetTRDntrackletsPID()>=4) TRDpid=1;
       }
     } else { // track stopped in TPC 
       ref = mcParticle->GetTrackReference(TMath::Max(iref-1, 0));
index 3ee8dff..d462867 100644 (file)
@@ -251,7 +251,7 @@ void AliTRDtrackInfoGen::Exec(Option_t *){
     fTrackInfo->SetTrackId(esdTrack->GetID());
     Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p);
     fTrackInfo->SetESDpid(p);
-    fTrackInfo->SetESDpidQuality(esdTrack->GetTRDpidQuality());
+    fTrackInfo->SetESDpidQuality(esdTrack->GetTRDntrackletsPID());
     fTrackInfo->SetLabel(label);
     fTrackInfo->SetNumberOfClustersRefit(esdTrack->GetNcls(2));
     // some other Informations which we may wish to store in order to find problematic cases