update TRD code for PbPb 2011
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Nov 2011 08:42:47 +0000 (08:42 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Nov 2011 08:42:47 +0000 (08:42 +0000)
- use new alignment/roads in tracking (Johannes/Dariusz/Alex)
- use new ExB/v drift calibration in reconstruction (Raphaelle/Theo/Alex)
- use chamber status in tracking and save it in ESD track (Raphaelle/Alex)
- use same/opposite sign track selection in AttachClusters (Alex)
- remove updates of tracklet reference after track update by TRD (Alex)

OCDB/TRD/Align/Data/Run151536_999999999_v3_s0.root [new file with mode: 0644]
OCDB/TRD/Calib/TrkAttach/Run151536_999999999_v0_s1.root [new file with mode: 0644]
TRD/AliTRDseedV1.cxx
TRD/AliTRDseedV1.h
TRD/AliTRDtrackV1.cxx
TRD/AliTRDtrackerV1.cxx
TRD/AliTRDtransform.cxx
TRD/AliTRDtransform.h
TRD/Cal/AliTRDCalTrkAttach.cxx
TRD/Cal/AliTRDCalTrkAttach.h
TRD/Cal/AliTRDmakeTrkDB.C

diff --git a/OCDB/TRD/Align/Data/Run151536_999999999_v3_s0.root b/OCDB/TRD/Align/Data/Run151536_999999999_v3_s0.root
new file mode 100644 (file)
index 0000000..e0079e6
Binary files /dev/null and b/OCDB/TRD/Align/Data/Run151536_999999999_v3_s0.root differ
diff --git a/OCDB/TRD/Calib/TrkAttach/Run151536_999999999_v0_s1.root b/OCDB/TRD/Calib/TrkAttach/Run151536_999999999_v0_s1.root
new file mode 100644 (file)
index 0000000..1dc6081
Binary files /dev/null and b/OCDB/TRD/Calib/TrkAttach/Run151536_999999999_v0_s1.root differ
index 3845362..4fc2f7c 100644 (file)
@@ -1018,6 +1018,8 @@ Bool_t  AliTRDseedV1::AttachClusters(AliTRDtrackingChamber *const chamber, Bool_
 // Parameters
 //  - chamber : pointer to tracking chamber container used to search the tracklet
 //  - tilt    : switch for tilt correction during road building [default true]
+//  - chgPos  : mark same[kFALSE] and opposite[kTRUE] sign tracks with respect to Bz field sign [default true]
+//  - ev      : event number for debug purposes [default = -1]
 // Output
 //  - true    : if tracklet found successfully. Failure can happend because of the following:
 //      -
@@ -1075,13 +1077,13 @@ Bool_t  AliTRDseedV1::AttachClusters(AliTRDtrackingChamber *const chamber, Bool_
   if(fkReconstructor->IsHLT()) cp.SetRPhiMethod(AliTRDcluster::kCOG);
   if(!IsCalibrated()) Calibrate();
 
-  Int_t kroadyShift(0);
+/*  Int_t kroadyShift(0);
   Float_t bz(AliTrackerBase::GetBz());
   if(TMath::Abs(bz)>2.){
     if(bz<0.) kroadyShift = chgPos ? +1 : -1;
     else kroadyShift = chgPos ? -1 : +1;
-  }
-  AliDebug(4, Form("\n       syTrk[cm]=%4.2f dydxTrk[deg]=%+6.2f rs[%d] Chg[%c] rY[cm]=%4.2f rZ[cm]=%5.2f TC[%c]", syRef, TMath::ATan(fYref[1])*TMath::RadToDeg(), kroadyShift, chgPos?'+':'-', kroady, kroadz, tilt?'y':'n'));
+  }*/
+  AliDebug(4, Form("\n       syTrk[cm]=%4.2f dydxTrk[deg]=%+6.2f Chg[%c] rY[cm]=%4.2f rZ[cm]=%5.2f TC[%c]", syRef, TMath::ATan(fYref[1])*TMath::RadToDeg(), chgPos?'+':'-', kroady, kroadz, tilt?'y':'n'));
   Double_t phiTrk(TMath::ATan(fYref[1])),
            thtTrk(TMath::ATan(fZref[1]));
 
@@ -2033,6 +2035,9 @@ Bool_t AliTRDseedV1::FitRobust(Bool_t chg)
     } else { 
       kScalePulls = attach->GetScaleCov();//*lyScaler;
     }
+    // Retrieve chamber status
+    SetChmbGood(calibration->IsChamberGood(fDet));
+    if(!IsChmbGood()) kScalePulls*=10.;
   }  
   Double_t xc[kNclusters], yc[kNclusters], sy[kNclusters];
   Int_t n(0),           // clusters used in fit 
index 67350b7..d83427f 100644 (file)
@@ -66,6 +66,7 @@ public:
    ,kKink       = BIT(18) // kink prolongation tracklet
    ,kStandAlone = BIT(19) // tracklet build during stand alone track finding
    ,kPrimary    = BIT(20) // tracklet from a primary track candidate
+   ,kChmbGood   = BIT(21) // status of the detector from calibration view point
   };
 
   enum ETRDtrackletError { // up to 8 bits
@@ -96,6 +97,7 @@ public:
   void      Init(const AliRieman *fit);
   Bool_t    IsEqual(const TObject *inTracklet) const;
   Bool_t    IsCalibrated() const     { return TestBit(kCalib);}
+  Bool_t    IsChmbGood() const       { return TestBit(kChmbGood);}
   Bool_t    IsOwner() const          { return TestBit(kOwner);}
   Bool_t    IsKink() const           { return TestBit(kKink);}
   Bool_t    IsPrimary() const        { return TestBit(kPrimary);}
@@ -178,6 +180,7 @@ public:
   void      Reset(Option_t *opt="");
 
   void      SetC(Float_t c, Int_t typ=0) { fC[typ] = c;}
+  void      SetChmbGood(Bool_t k = kTRUE){ SetBit(kChmbGood, k);}
   void      SetChi2(Float_t chi2)    { fChi2 = chi2;}
   inline void SetCovRef(const Double_t *cov);
   void      SetErrorMsg(ETRDtrackletError err)  { SETBIT(fErrorMsg, err);}
index 38148d0..28f01ef 100644 (file)
@@ -882,8 +882,11 @@ void AliTRDtrackV1::UpdateESDtrack(AliESDtrack *track)
     // first implementation store no. of time bins filled in tracklet (5bits  see "y" bits) and
     // no. of double clusters in case of pad row cross (4bits see "x" bits)
     // bit map for tracklet quality xxxxyyyyy
+    // 27.10.11 A.Bercuci
+    // add chamber status bit "z" bit 
+    // bit map for tracklet quality zxxxxyyyyy
     Int_t nCross(fTracklet[ip]->IsRowCross()?fTracklet[ip]->GetTBcross():0);
-    spd = Double_t(fTracklet[ip]->GetTBoccupancy() | (nCross<<5));
+    spd = Double_t(fTracklet[ip]->GetTBoccupancy() | (nCross<<5) | (fTracklet[ip]->IsChmbGood()<<9));
     track->SetTRDmomentum(p, ip, &spd);
     track->SetTRDslice(fTracklet[ip]->GetdQdl(), ip, 0); // Set Summed dEdx into the first slice
   }
index e49f378..45b8126 100644 (file)
@@ -875,7 +875,11 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
         AliDebug(4, "Failed Tracklet Init");
         break;
       }
-      if(!ptrTracklet->AttachClusters(chamber, kTRUE, t.Charge()>0?kTRUE:kFALSE, fEventInFile)){
+      // Select attachment base on track to B field sign not only track charge which is buggy
+      // mark kFALSE same sign tracks and kTRUE opposite sign tracks
+      // A.Bercuci 3.11.2011
+      Float_t prod(t.GetBz()*t.Charge());
+      if(!ptrTracklet->AttachClusters(chamber, kTRUE, prod<0.?kTRUE:kFALSE, fEventInFile)){
         t.SetStatus(AliTRDtrackV1::kNoAttach, ily);
         if(debugLevel>3){
           AliTRDseedV1 trackletCp(*ptrTracklet);
@@ -984,7 +988,10 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
   
 
     // register tracklet with the tracker and track
-    ptrTracklet->Update(&t);
+    // Save inside the tracklet the track parameters BEFORE track update.
+    // Commented out their overwriting AFTER track update
+    // A.Bercuci 3.11.2011
+    //ptrTracklet->Update(&t); 
     ptrTracklet = SetTracklet(ptrTracklet);
     Int_t index(fTracklets->GetEntriesFast()-1);
     t.SetTracklet(ptrTracklet, index);
index 6be6039..b17d918 100644 (file)
@@ -48,8 +48,10 @@ AliTRDtransform::AliTRDtransform()
   ,fCalPRFROC(0x0)
   ,fkCalVdriftDet(0x0)
   ,fkCalT0Det(0x0)
+  ,fkCalExBDet(0x0)
   ,fCalVdriftDetValue(0)
   ,fCalT0DetValue(0)
+  ,fCalExBDetValue(0)
   ,fSamplingFrequency(0)
   ,fPadPlane(0x0)
   ,fZShiftIdeal(0)
@@ -73,6 +75,7 @@ AliTRDtransform::AliTRDtransform()
   // Get the calibration objects for the global calibration
   fkCalVdriftDet     = fCalibration->GetVdriftDet();
   fkCalT0Det         = fCalibration->GetT0Det();
+  fkCalExBDet        = fCalibration->GetExBDet();
 
 }
 
@@ -87,8 +90,10 @@ AliTRDtransform::AliTRDtransform(Int_t det)
   ,fCalPRFROC(0x0)
   ,fkCalVdriftDet(0x0)
   ,fkCalT0Det(0x0)
+  ,fkCalExBDet(0x0)
   ,fCalVdriftDetValue(0)
   ,fCalT0DetValue(0)
+  ,fCalExBDetValue(0)
   ,fSamplingFrequency(0)
   ,fPadPlane(0x0)
   ,fZShiftIdeal(0)
@@ -112,6 +117,7 @@ AliTRDtransform::AliTRDtransform(Int_t det)
   // Get the calibration objects for the global calibration
   fkCalVdriftDet     = fCalibration->GetVdriftDet();
   fkCalT0Det         = fCalibration->GetT0Det();
+  fkCalExBDet        = fCalibration->GetExBDet();
 
   SetDetector(det);
 
@@ -128,8 +134,10 @@ AliTRDtransform::AliTRDtransform(const AliTRDtransform &t)
   ,fCalPRFROC(0x0)
   ,fkCalVdriftDet(0x0)
   ,fkCalT0Det(0x0)
+  ,fkCalExBDet(0x0)
   ,fCalVdriftDetValue(0)
   ,fCalT0DetValue(0)
+  ,fCalExBDetValue(0)
   ,fSamplingFrequency(0)
   ,fPadPlane(0x0)
   ,fZShiftIdeal(0)
@@ -151,7 +159,7 @@ AliTRDtransform::AliTRDtransform(const AliTRDtransform &t)
   }
   fkCalVdriftDet     = fCalibration->GetVdriftDet();
   fkCalT0Det         = fCalibration->GetT0Det();
-
+  fkCalExBDet        = fCalibration->GetExBDet();
 }
 
 //_____________________________________________________________________________
@@ -191,16 +199,19 @@ void AliTRDtransform::Copy(TObject &t) const
   if (fCalibration) {
     ((AliTRDtransform &) t).fkCalVdriftDet   = fCalibration->GetVdriftDet();
     ((AliTRDtransform &) t).fkCalT0Det       = fCalibration->GetT0Det();
+    ((AliTRDtransform &) t).fkCalExBDet      = fCalibration->GetExBDet();
   }
   else {
     ((AliTRDtransform &) t).fkCalVdriftDet   = 0;
     ((AliTRDtransform &) t).fkCalT0Det       = 0;
+    ((AliTRDtransform &) t).fkCalExBDet      = 0;
   }
   ((AliTRDtransform &) t).fCalVdriftROC      = 0x0;
   ((AliTRDtransform &) t).fCalT0ROC          = 0x0;
   ((AliTRDtransform &) t).fCalPRFROC         = 0x0;
   ((AliTRDtransform &) t).fCalVdriftDetValue = 0; 
   ((AliTRDtransform &) t).fCalT0DetValue     = 0;
+  ((AliTRDtransform &) t).fCalExBDetValue     = 0;
   ((AliTRDtransform &) t).fSamplingFrequency = 0;
   ((AliTRDtransform &) t).fPadPlane          = 0x0;
   ((AliTRDtransform &) t).fZShiftIdeal       = 0;
@@ -236,6 +247,7 @@ void AliTRDtransform::SetDetector(Int_t det)
   // Get the detector wise defined calibration values
   fCalVdriftDetValue = fkCalVdriftDet->GetValue(det);
   fCalT0DetValue     = fkCalT0Det->GetValue(det);
+  fCalExBDetValue    = fkCalExBDet->GetValue(det);
 
   // Shift needed to define Z-position relative to middle of chamber
   Int_t layer        = Geometry().GetLayer(det);
@@ -275,7 +287,7 @@ Bool_t AliTRDtransform::Transform(AliTRDcluster *c)
   Double_t t0  = fCalT0DetValue     + fCalT0ROC->GetValue(col,row);
   t0 /= fSamplingFrequency;
   // ExB correction
-  Double_t exb = AliTRDCommonParam::Instance()->GetOmegaTau(vd);
+  Double_t exb = fCalExBDetValue;//AliTRDCommonParam::Instance()->GetOmegaTau(vd);
 
   Float_t x = c->GetXloc(t0, vd);
 
index b46e704..18f3b62 100644 (file)
@@ -53,8 +53,10 @@ class AliTRDtransform : public TObject {
   AliTRDCalROC       *fCalPRFROC;           //  Pad wise PRF calibration object
   const AliTRDCalDet *fkCalVdriftDet;       //  ROC wise Vdrift calibration object
   const AliTRDCalDet *fkCalT0Det;           //  ROC wise T0 calibration object
+  const AliTRDCalDet *fkCalExBDet;          //  ROC wise ExB calibration object
   Double_t            fCalVdriftDetValue;   //  ROC wise Vdrift calibration value
   Double_t            fCalT0DetValue;       //  ROC wise T0 calibration value
+  Double_t            fCalExBDetValue;      //  Det wise ExB calibration value
 
   Double_t            fSamplingFrequency;   //  ADC sampling frequency
 
index 88dd361..2a79169 100644 (file)
@@ -34,8 +34,9 @@
 
 #include "AliLog.h"
 
-#include "AliTRDCalTrkAttach.h"
 #include "AliTRDcalibDB.h"
+#include "AliTRDgeometry.h"
+#include "AliTRDCalTrkAttach.h"
 
 ClassImp(AliTRDCalTrkAttach)
 
@@ -71,13 +72,13 @@ Double_t AliTRDCalTrkAttach::CookLikelihood(Bool_t chg, Int_t ly, Float_t pt, Fl
     return 0.;
   }
   //check likelihood array  
-  if (!fLike || fLike->GetEntries() != 6*2*kNcalib) {
+  if (!fLike || fLike->GetEntries() != AliTRDgeometry::kNlayer*kNcharge*kNcalib) {
     AliError("No usable AttachClusters calib object.");
     return 0.;
   }
-  
+  Int_t offset(ly*kNcalib*kNcharge); // offset for layer
   TGraphErrors *g(NULL);
-  if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kResPos)+Int_t(chg)))){
+  if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kResPos)*kNcharge+Int_t(chg)))){
     AliError("Failed retrieving AttachClusters graph.");
     return 0.;
   }
@@ -109,7 +110,7 @@ Double_t AliTRDCalTrkAttach::CookLikelihood(Bool_t chg, Int_t ly, Float_t pt, Fl
   dd      = (dyr - dym)/sym; dd*=dd;
   f[0] = TMath::Exp(-0.5*dd);
   // +++ process dphi
-  if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kResAng)+Int_t(chg)))){
+  if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kResAng)*kNcharge+Int_t(chg)))){
     AliError("Failed retrieving AttachClusters graph.");
     return 0.;
   }
@@ -119,7 +120,7 @@ Double_t AliTRDCalTrkAttach::CookLikelihood(Bool_t chg, Int_t ly, Float_t pt, Fl
   dd      = (dphi - dpm)/spm; dd*=dd;
   f[1] = TMath::Exp(-0.5*dd);
   // +++ process no of clusters
-  if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kNclMean)+Int_t(chg)))){
+  if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kNclMean)*kNcharge+Int_t(chg)))){
     AliError("Failed retrieving AttachClusters graph.");
     return 0.;
   }
@@ -129,7 +130,7 @@ Double_t AliTRDCalTrkAttach::CookLikelihood(Bool_t chg, Int_t ly, Float_t pt, Fl
  
   // process phi dependences
   // +++ process <s>/s
-  if(!(g = (TGraphErrors*)fLike->At(ly*8+2*Int_t(kSigma)+Int_t(chg)))){
+  if(!(g = (TGraphErrors*)fLike->At(offset+Int_t(kSigma)*kNcharge+Int_t(chg)))){
     AliError("Failed retrieving AttachClusters graph.");
     return 0.;
   }
@@ -156,7 +157,7 @@ Double_t AliTRDCalTrkAttach::CookLikelihood(Bool_t chg, Int_t ly, Float_t pt, Fl
   Double_t sm = boundary?y1:((phiTrk*(y0-y1) + (x0*y1-x1*y0))*invdx),
            ssm = 0.5*(g->GetErrorY(ip)+g->GetErrorY(jp));
   dd      = (sr - sm)/ssm; dd*=dd;
-  f[3] = TMath::Exp(-0.5*dd);
+  f[3] = 1.;//TMath::Exp(-0.5*dd);
 
   // Calculate likelihood
   Double_t length = f[0]*f[0]+f[1]*f[1]+f[2]*f[2]+f[3]*f[3];
@@ -188,12 +189,12 @@ Bool_t AliTRDCalTrkAttach::LoadReferences(const Char_t *file)
          cs[2] = {'n', 'p'};
 
   if(fLike) fLike->Clear();
-  else fLike = new TObjArray(6*2*kNcalib);
-  for(Int_t ily(0); ily<6; ily++){
+  else fLike = new TObjArray(AliTRDgeometry::kNlayer*kNcharge*kNcalib);
+  for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
     for(Int_t icalib(0); icalib<kNcalib; icalib++){
-      for(Int_t isgn(0); isgn<2; isgn++){
+      for(Int_t isgn(0); isgn<kNcharge; isgn++){
         if(!(g = (TGraphErrors*)gFile->Get(Form("%c%c%d", co[icalib], cs[isgn], ily)))) return kFALSE;
-        fLike->AddAt(g, ily*8+2*icalib+isgn);
+        fLike->AddAt(g, kNcharge*(ily*kNcalib+icalib)+isgn);
       }
     }
   }
index 24a824c..1d78646 100644 (file)
@@ -19,13 +19,16 @@ class TObjArray;
 class AliTRDCalTrkAttach : public TNamed
 {
 public:
-  enum ETRDCalTrkAttachCalib {    
+  enum ETRDCalTrkAttachCalib {
     kResPos = 0    // relative position residual location
    ,kResAng        // angular residual location
    ,kSigma         // relative error location
    ,kNclMean       // mean no. of clusters/tracklet location
    ,kNcalib        // no. of calib objects
   };
+  enum ETRDCalTrkAttachParam {
+    kNcharge = 2
+  };
 
   AliTRDCalTrkAttach();
   virtual ~AliTRDCalTrkAttach();
index 665222d..50ba824 100644 (file)
@@ -10,11 +10,11 @@ void AliTRDmakeTrkDB(const Char_t *file)
   metaData->SetObjectClassName("TObjArray");\r
   metaData->SetResponsible("Alexandru Bercuci");\r
   metaData->SetBeamPeriod(1);\r
-  metaData->SetAliRootVersion("05-27-06b"); //root version\r
+  metaData->SetAliRootVersion("05-30-02"); //root version\r
   metaData->SetComment(\r
     "Likelihoods for Attach Cluster.\n"\r
-    " Tunned on Pb-Pb run 137161.");\r
-  AliCDBId id("TRD/Calib/TrkAttach", 95352, AliCDBRunRange::Infinity()); \r
+    " Tunned on p-p run 159580.");\r
+  AliCDBId id("TRD/Calib/TrkAttach", 151536, AliCDBRunRange::Infinity());\r
   AliTRDCalTrkAttach attach;\r
   if(!attach.LoadReferences(file)) return;\r
 //   attach.SetNsgmDy(Int_t ns0, Int_t ns1);\r