add corresponding TRD modifications to fulfill request (Savannah #50254)
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 29 May 2009 10:38:00 +0000 (10:38 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 29 May 2009 10:38:00 +0000 (10:38 +0000)
TRD/AliTRDseedV1.h
TRD/AliTRDtrackV1.cxx

index 78f426f..b7d3d12 100644 (file)
@@ -56,9 +56,10 @@ public:
   enum ETRDtrackletStatus {
     kOwner      = BIT(14) // owner of its clusters
    ,kRowCross   = BIT(15) // pad row cross tracklet
-   ,kCalib      = BIT(16) // calibrated tracklet
-   ,kKink       = BIT(17) // kink prolongation tracklet
-   ,kStandAlone = BIT(18)
+   ,kPID        = BIT(16) // PID contributor
+   ,kCalib      = BIT(17) // calibrated tracklet
+   ,kKink       = BIT(18) // kink prolongation tracklet
+   ,kStandAlone = BIT(19) // stand alone build tracklet
   };
 
   AliTRDseedV1(Int_t det = -1);
@@ -83,6 +84,7 @@ public:
   Bool_t    IsCalibrated() const     { return TestBit(kCalib);}
   Bool_t    IsOwner() const          { return TestBit(kOwner);}
   Bool_t    IsKink() const           { return TestBit(kKink);}
+  Bool_t    HasPID() const           { return TestBit(kPID);}
   Bool_t    IsOK() const             { return GetN() > 4 && GetNUsed() < 4;}
   Bool_t    IsRowCross() const       { return TestBit(kRowCross);}
   Bool_t    IsUsable(Int_t i) const  { return fClusters[i] && !fClusters[i]->IsUsed();}
@@ -155,7 +157,8 @@ public:
   inline void SetCovRef(const Double_t *cov);
   void      SetIndexes(Int_t i, Int_t idx) { fIndexes[i]  = idx; }
   void      SetLabels(Int_t *lbls)   { memcpy(fLabels, lbls, 3*sizeof(Int_t)); }
-  void      SetKink(Bool_t k)        { SetBit(kKink, k);}
+  void      SetKink(Bool_t k = kTRUE){ SetBit(kKink, k);}
+  void      SetPID(Bool_t k = kTRUE) { SetBit(kPID, k);}
   void      SetStandAlone(Bool_t st) { SetBit(kStandAlone, st); }
   void      SetPt(Double_t pt)       { fPt = pt;}
   void      SetOwner();
index 87f6f96..1073d0d 100644 (file)
@@ -312,12 +312,12 @@ UChar_t AliTRDtrackV1::GetNumberOfTrackletsPID() const
 {
 // Retrieve number of tracklets used for PID calculation. 
 
-  UChar_t fPIDquality = 0;
+  UChar_t nPID = 0;
   Float_t *prob = 0x0;
   for(int ip=0; ip<kNplane; ip++){
     if(fTrackletIndex[ip] == 0xffff) continue;
     if(!fTracklet[ip]->IsOK()) continue;
-    if(!(prob = fTracklet[ip]->GetProbability(kFALSE))) return 0;
+    if(!(prob = fTracklet[ip]->GetProbability(kFALSE))) continue;
     
     Int_t nspec = 0; // quality check of tracklet dEdx
     for(int ispec=0; ispec<AliPID::kSPECIES; ispec++){
@@ -326,9 +326,10 @@ UChar_t AliTRDtrackV1::GetNumberOfTrackletsPID() const
     }
     if(!nspec) continue;
     
-    fPIDquality++;
+    fTracklet[ip]->SetPID();
+    nPID++;
   }
-  return fPIDquality;
+  return nPID;
 }
 
 //___________________________________________________________
@@ -629,7 +630,7 @@ Int_t   AliTRDtrackV1::PropagateToR(Double_t r,Double_t step)
     Double_t alpha = TMath::ATan2(xyz0[1],xyz0[0]);
     Rotate(alpha,kTRUE);
     GetXYZ(xyz0);      
-    if(GetProlongation(r,y,z)<0) return -1;
+    if(GetProlongation(x,y,z)<0) return -1;
     xyz1[0] = x * TMath::Cos(alpha) + y * TMath::Sin(alpha); 
     xyz1[1] = x * TMath::Sin(alpha) - y * TMath::Cos(alpha);
     xyz1[2] = z;
@@ -795,23 +796,24 @@ 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;
+  // number of tracklets used for PID calculation
+  UChar_t nPID = GetNumberOfTrackletsPID();
+  // number of tracklets attached to the track
+  UChar_t nTrk = GetNumberOfTracklets();
+  // pack the two numbers together and store them in the ESD
+  track->SetTRDntracklets(nPID | (nTrk<<3));
+  // allocate space to store raw PID signals dEdx & momentum
+  track->SetNumberOfTRDslices((nslices+2)*nPID);
+  // store raw signals
+  Double_t p, sp;
   for (Int_t ip = 0; ip < kNplane; ip++) {
     if(fTrackletIndex[ip] == 0xffff) continue;
-    n++;
-    if(!fTracklet[ip]->IsOK()) continue;
-    fTracklet[ip]->CookdEdx(nslices);
+    if(!fTracklet[ip]->HasPID()) continue;
     Float_t *dedx = fTracklet[ip]->GetdEdx();
     for (Int_t js = 0; js < nslices; js++, dedx++) track->SetTRDslice(*dedx, ip, js);
+    p = fTracklet[ip]->GetMomentum(&sp);
+    track->SetTRDmomentum(p, ip, &sp);
   }
-
-  UChar_t nPID = GetNumberOfTrackletsPID();
-  if(!nPID) track->SetTRDntracklets(n);
-  else {
-    track->SetTRDpid(fPID);
-    nPID |= (n<<3);
-    track->SetTRDntracklets(nPID);
-  }
+  // store PID probabilities
+  track->SetTRDpid(fPID);
 }