- update track points definition used for alignment
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 31 Mar 2009 12:08:42 +0000 (12:08 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 31 Mar 2009 12:08:42 +0000 (12:08 +0000)
- fix bug (savannah 48672)

TRD/AliTRDtrackerV1.cxx
TRD/AliTRDtrackerV1.h

index 399b71a..ab92e5b 100644 (file)
@@ -74,7 +74,9 @@ Double_t AliTRDtrackerV1::fgTopologicQA[kNConfigs] = {
   0.1112, 0.1112, 0.1112, 0.0786, 0.0786,
   0.0786, 0.0786, 0.0579, 0.0579, 0.0474,
   0.0474, 0.0408, 0.0335, 0.0335, 0.0335
-};
+};  
+const Double_t AliTRDtrackerV1::fgkX0[kNPlanes]    = {
+  300.2, 312.8, 325.4, 338.0, 350.6, 363.2};
 Int_t AliTRDtrackerV1::fgNTimeBins = 0;
 AliRieman* AliTRDtrackerV1::fgRieman = 0x0;
 TLinearFitter* AliTRDtrackerV1::fgTiltedRieman = 0x0;
@@ -106,8 +108,11 @@ AliTRDtrackerV1::AliTRDtrackerV1(AliTRDReconstructor *rec)
   Double_t loc[] = {0., 0., 0.};
   Double_t glb[] = {0., 0., 0.};
   for(Int_t ily=kNPlanes; ily--;){
-    if(!(matrix = fGeom->GetClusterMatrix(AliTRDgeometry::GetDetector(ily, 2, 0)))){
-      AliFatal(Form("Could not get matrix for chamber @ 0 2 %d.", ily));
+    Int_t ism = 0;
+    while(!(matrix = fGeom->GetClusterMatrix(AliTRDgeometry::GetDetector(ily, 2, ism)))) ism++;
+    if(!matrix){
+      AliError(Form("Could not get transformation matrix for layer %d. Use default.", ily));
+      fR[ily] = fgkX0[ily];
       continue;
     }
     matrix->LocalToMaster(loc, glb);
@@ -195,40 +200,32 @@ Bool_t AliTRDtrackerV1::GetTrackPoint(Int_t index, AliTrackPoint &p) const
   if (!tracklet) return kFALSE;
 
   // get detector for this tracklet
-  Int_t  idet     = tracklet->GetDetector();
-    
+  Int_t det = tracklet->GetDetector();
+  Int_t sec = fGeom->GetSector(det);
+  Double_t alpha = (sec+.5)*AliTRDgeometry::GetAlpha(),
+           sinA  = TMath::Sin(alpha),
+           cosA  = TMath::Cos(alpha);
   Double_t local[3];
-  local[0] = tracklet->GetX0(); 
-  local[1] = tracklet->GetYfit(0);
-  local[2] = tracklet->GetZfit(0);
+  local[0] = tracklet->GetX(); 
+  local[1] = tracklet->GetY();
+  local[2] = tracklet->GetZ();
   Double_t global[3];
-  fGeom->RotateBack(idet, local, global);
-  p.SetXYZ(global[0],global[1],global[2]);
-  
+  fGeom->RotateBack(det, local, global);
+
+  Double_t cov2D[3]; Float_t cov[6];
+  tracklet->GetCovAt(local[0], cov2D);
+  cov[0] = cov2D[0]*sinA*sinA;
+  cov[1] =-cov2D[0]*sinA*cosA;
+  cov[2] =-cov2D[1]*sinA;
+  cov[3] = cov2D[0]*cosA*cosA;
+  cov[4] = cov2D[1]*cosA;
+  cov[5] = cov2D[2];
+  // store the global position of the tracklet and its covariance matrix in the track point 
+  p.SetXYZ(global[0],global[1],global[2], cov);
   
   // setting volume id
-  AliGeomManager::ELayerID iLayer = AliGeomManager::kTRD1;
-  switch (fGeom->GetLayer(idet)) {
-  case 0:
-    iLayer = AliGeomManager::kTRD1;
-    break;
-  case 1:
-    iLayer = AliGeomManager::kTRD2;
-    break;
-  case 2:
-    iLayer = AliGeomManager::kTRD3;
-    break;
-  case 3:
-    iLayer = AliGeomManager::kTRD4;
-    break;
-  case 4:
-    iLayer = AliGeomManager::kTRD5;
-    break;
-  case 5:
-    iLayer = AliGeomManager::kTRD6;
-    break;
-  };
-  Int_t    modId = fGeom->GetSector(idet) * fGeom->Nstack() + fGeom->GetStack(idet);
+  AliGeomManager::ELayerID iLayer = AliGeomManager::ELayerID(AliGeomManager::kTRD1+fGeom->GetLayer(det));
+  Int_t    modId = fGeom->GetSector(det) * AliTRDgeometry::kNstack + fGeom->GetStack(det);
   UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, modId);
   p.SetVolumeID(volid);
     
@@ -2388,7 +2385,7 @@ Int_t AliTRDtrackerV1::MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 *ss
   }
   
   // Init anode wire position for chambers
-  Double_t x0[kNPlanes] = {300.2, 312.8, 325.4, 338.0, 350.6, 363.2},       // anode wire position
+  Double_t x0[kNPlanes],       // anode wire position
            driftLength = .5*AliTRDgeometry::AmThick() - AliTRDgeometry::DrThick(); // drift length
   TGeoHMatrix *matrix = 0x0;
   Double_t loc[] = {AliTRDgeometry::AnodePos(), 0., 0.};
@@ -2396,7 +2393,10 @@ Int_t AliTRDtrackerV1::MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 *ss
   AliTRDtrackingChamber **cIter = &stack[0];
   for(int iLayer=kNPlanes; iLayer--; cIter++){
     if(!(*cIter)) continue;
-    if(!(matrix = fGeom->GetClusterMatrix((*cIter)->GetDetector()))) continue;
+    if(!(matrix = fGeom->GetClusterMatrix((*cIter)->GetDetector()))){ 
+      continue;
+      x0[iLayer] = fgkX0[iLayer];
+    }
     matrix->LocalToMaster(loc, glb);
     x0[iLayer] = glb[0];
   }
index 6acad41..213d9a5 100644 (file)
@@ -2,7 +2,7 @@
 #define ALITRDTRACKERV1_H
 
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */ 
+* See cxx source for full Copyright notice                               */ 
 /* $Id$ */
 
 ////////////////////////////////////////////////////////////////////////////
@@ -26,9 +26,9 @@
 #endif
 
 /**************************************************************************
- * Class Status see source file                                           *
- **************************************************************************/
+* Class Status see source file                                           *
+**************************************************************************/
+
 class TFile;
 class TTreeSRedirector;
 class TClonesArray;
@@ -86,9 +86,9 @@ public:
   static Float_t  FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex);
   static Float_t  FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError);
   
-       static Double_t FitRiemanTilt(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
-       static Double_t FitLine(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
-       static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+  static Double_t FitRiemanTilt(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+  static Double_t FitLine(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+  static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0);
 
   Bool_t          IsClustersOwner() const    { return TestBit(kOwner);}
   void            SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fClusters = 0x0;}
@@ -167,20 +167,21 @@ private:
   static const Float_t     fgkLabelFraction;            // Min fraction of same label
   static const Double_t    fgkMaxSnp;                   // Maximal snp for tracking
   static const Double_t    fgkMaxStep;                  // Maximal step for tracking  
-       
-       // stand alone tracking
-       static Double_t      fgTopologicQA[kNConfigs];        //  Topologic quality
-       Double_t             fTrackQuality[kMaxTracksStack];  //  Track quality 
-       Int_t                fSeedLayer[kMaxTracksStack];     //  Seed layer
+  
+  // stand alone tracking
+  static Double_t      fgTopologicQA[kNConfigs];        //  Topologic quality
+  Double_t             fTrackQuality[kMaxTracksStack];  //  Track quality 
+  Int_t                fSeedLayer[kMaxTracksStack];     //  Seed layer
   AliTRDchamberTimeBin *fSeedTB[kNSeedPlanes]; // seeding time bin planes
-       Int_t                fSieveSeeding;                   //! Seeding iterator
-       
+  Int_t                fSieveSeeding;                   //! Seeding iterator
+  
+  static const Double_t fgkX0[kNPlanes];                // default values for the position of anode wire
   static Int_t         fgNTimeBins;                     // Timebins per plane in track prolongation 
-       static TLinearFitter *fgTiltedRieman;                 //  Fitter for the tilted Rieman fit without vertex constriant
-       static TLinearFitter *fgTiltedRiemanConstrained;      //  Fitter for the tilted Rieman fit with vertex constraint       
-       static AliRieman     *fgRieman;                       //  Fitter for the untilted Rieman fit
-       
-       ClassDef(AliTRDtrackerV1, 3)                          //  TRD tracker - tracklet based tracking
+  static TLinearFitter *fgTiltedRieman;                 //  Fitter for the tilted Rieman fit without vertex constriant
+  static TLinearFitter *fgTiltedRiemanConstrained;      //  Fitter for the tilted Rieman fit with vertex constraint    
+  static AliRieman     *fgRieman;                       //  Fitter for the untilted Rieman fit
+  
+  ClassDef(AliTRDtrackerV1, 3)                          //  TRD tracker - tracklet based tracking
 
 };
 #endif