From e165b64b4a67d110cef0493f5c74ad8d20970596 Mon Sep 17 00:00:00 2001 From: abercuci Date: Tue, 31 Mar 2009 12:08:42 +0000 Subject: [PATCH] - update track points definition used for alignment - fix bug (savannah 48672) --- TRD/AliTRDtrackerV1.cxx | 70 ++++++++++++++++++++--------------------- TRD/AliTRDtrackerV1.h | 39 ++++++++++++----------- 2 files changed, 55 insertions(+), 54 deletions(-) diff --git a/TRD/AliTRDtrackerV1.cxx b/TRD/AliTRDtrackerV1.cxx index 399b71a3433..ab92e5b4962 100644 --- a/TRD/AliTRDtrackerV1.cxx +++ b/TRD/AliTRDtrackerV1.cxx @@ -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]; } diff --git a/TRD/AliTRDtrackerV1.h b/TRD/AliTRDtrackerV1.h index 6acad41965d..213d9a5bd90 100644 --- a/TRD/AliTRDtrackerV1.h +++ b/TRD/AliTRDtrackerV1.h @@ -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 -- 2.39.3