From c79857d5d6d529d151417960e1ba26e29a8c6eb6 Mon Sep 17 00:00:00 2001 From: abercuci Date: Wed, 24 Mar 2010 12:20:31 +0000 Subject: [PATCH] updates requested by HLT - cache calibration params at tracking chamber level - recalculate cluster error parameterization for HLT during tracking chamber building - do a vertex constrained fit in case of HLT before leaving MakeSeeds --- TRD/AliTRDcluster.cxx | 28 +++++++++++------- TRD/AliTRDseedV1.cxx | 9 +++++- TRD/AliTRDtrackerV1.cxx | 26 +++++++++++------ TRD/AliTRDtrackingChamber.cxx | 54 +++++++++++++++++++++++++---------- TRD/AliTRDtrackingChamber.h | 26 ++++++++++++----- TRD/AliTRDtrackingSector.cxx | 6 ++-- TRD/AliTRDtrackingSector.h | 3 +- 7 files changed, 105 insertions(+), 47 deletions(-) diff --git a/TRD/AliTRDcluster.cxx b/TRD/AliTRDcluster.cxx index e248340a7de..211f1549a7b 100644 --- a/TRD/AliTRDcluster.cxx +++ b/TRD/AliTRDcluster.cxx @@ -851,21 +851,29 @@ void AliTRDcluster::Print(Option_t *o) const // Print cluster information // - AliInfo(Form("Det[%3d] LTrC[%+6.2f %+6.2f %+6.2f] Q[%5.1f] FLAG[in(%c) use(%c) sh(%c)] Y[%s]", + if(strcmp(o, "a")==0) { + AliInfo(Form( + "\nDet[%3d] LTrC[%+6.2f %+6.2f %+6.2f] Q[%5.1f] FLAG[in(%c) use(%c) sh(%c)] Y[%s]" + "\n LChC[c(%3d) r(%2d) t(%2d)] t-t0[%2d] Npad[%d] cen[%5.3f] mask[%d]" + "\n QS[%3d %3d %3d %3d %3d %3d %3d] S2[%e %e]" + , fDetector, GetX(), GetY(), GetZ(), fQ, + IsInChamber() ? 'y' : 'n', + IsUsed() ? 'y' : 'n', + IsShared() ? 'y' : 'n', + IsRPhiMethod(kGAUS)?"GAUS":(IsRPhiMethod(kLUT)?"LUT":"COG") + , fPadCol, fPadRow, fPadTime, fLocalTimeBin, fNPads, fCenter, fClusterMasking + , fSignals[0], fSignals[1], fSignals[2], fSignals[3] + , fSignals[4], fSignals[5], fSignals[6] + , GetSigmaY2(), GetSigmaZ2())); + } else { + AliInfo(Form("Det[%3d] LTrC[%+6.2f %+6.2f %+6.2f] Q[%5.1f] FLAG[in(%c) use(%c) sh(%c)] Y[%s]", fDetector, GetX(), GetY(), GetZ(), fQ, IsInChamber() ? 'y' : 'n', IsUsed() ? 'y' : 'n', IsShared() ? 'y' : 'n', IsRPhiMethod(kGAUS)?"GAUS":(IsRPhiMethod(kLUT)?"LUT":"COG") - )); - - if(strcmp(o, "a")!=0) return; - AliInfo(Form("LChC[c(%3d) r(%2d) t(%2d)] t-t0[%2d] Npad[%d] cen[%5.3f] mask[%d]" - , fPadCol, fPadRow, fPadTime, fLocalTimeBin, fNPads, fCenter, fClusterMasking)); - AliInfo(Form("Signals[%3d %3d %3d %3d %3d %3d %3d]" - , fSignals[0], fSignals[1], fSignals[2], fSignals[3] - , fSignals[4], fSignals[5], fSignals[6])); - + )); + } } //_____________________________________________________________________________ diff --git a/TRD/AliTRDseedV1.cxx b/TRD/AliTRDseedV1.cxx index e8b94b73ff8..c4374d7098e 100644 --- a/TRD/AliTRDseedV1.cxx +++ b/TRD/AliTRDseedV1.cxx @@ -1338,6 +1338,7 @@ Bool_t AliTRDseedV1::Fit(Bool_t tilt, Bool_t zcorr) // Recalculate cluster error based on tracking information c->SetSigmaY2(fS2PRF, fDiffT, fExB, xc[n], zcorr?zt:-1., dydx); + c->SetSigmaZ2(fPad[0]*fPad[0]/12.); // for HLT sy[n] = TMath::Sqrt(c->GetSigmaY2()); yc[n] = recoParam->UseGAUS() ? @@ -1353,7 +1354,10 @@ Bool_t AliTRDseedV1::Fit(Bool_t tilt, Bool_t zcorr) } // to few clusters - if (n < kClmin) return kFALSE; + if (n < kClmin){ + SetErrorMsg(kFitFailed); + return kFALSE; + } // fit XY if(!fitterY.Eval()){ @@ -1405,6 +1409,9 @@ Bool_t AliTRDseedV1::Fit(Bool_t tilt, Bool_t zcorr) qc[n] = TMath::Abs(c->GetQ()); xc[n] = fX0 - c->GetX(); zc[n] = c->GetZ(); + // Recalculate cluster error based on tracking information + c->SetSigmaY2(fS2PRF, fDiffT, fExB, xc[n], zcorr?(z0 - xc[n]*dzdx):-1., dydx); + c->SetSigmaZ2(fPad[0]*fPad[0]/12.); // for HLT fitterZ.AddPoint(&xc[n], -qc[n], 1.); n--;m++; } diff --git a/TRD/AliTRDtrackerV1.cxx b/TRD/AliTRDtrackerV1.cxx index 1820ee01350..8c59d17fae8 100644 --- a/TRD/AliTRDtrackerV1.cxx +++ b/TRD/AliTRDtrackerV1.cxx @@ -1126,6 +1126,10 @@ Float_t AliTRDtrackerV1::FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Doub if(!tracklets[ilr].IsUsable(itb)) continue; cl = tracklets[ilr].GetClusters(itb); if(!cl->IsInChamber()) continue; + if(cl->GetSigmaY2()<1.e-6 || cl->GetSigmaZ2()<1.e-6){ + if(AliLog::GetDebugLevel("TRD", "AliTRDtrackerV1")>1) printf("D-AliTRDtrackerV1::FitTiltedRiemanConstraint: Cluster error parameterization missing. This should appear only in HLT tests."); + continue; + } x = cl->GetX(); y = cl->GetY(); z = cl->GetZ(); @@ -1225,10 +1229,15 @@ Float_t AliTRDtrackerV1::FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigErro for(Int_t itb = 0; itb < AliTRDseedV1::kNclusters; itb++){ if(!(cl = tracklets[ipl].GetClusters(itb))) continue; if(!cl->IsInChamber()) continue; - //if (!tracklets[ipl].IsUsable(itb)) continue; + if (!tracklets[ipl].IsUsable(itb)) continue; x = cl->GetX(); y = cl->GetY(); z = cl->GetZ(); + if(cl->GetSigmaY2()<1.e-6 || cl->GetSigmaZ2()<1.e-6){ + if(AliLog::GetDebugLevel("TRD", "AliTRDtrackerV1")>1) printf("D-AliTRDtrackerV1::FitTiltedRieman: Cluster error parameterization missing. This should appear only in HLT tests."); + tracklets[ipl].Print("a"); + continue; + } dx = x - xref; // Transformation t = 1./(x*x + y*y); @@ -1959,9 +1968,9 @@ Int_t AliTRDtrackerV1::BuildTrackingContainers() { // Building tracking containers for clusters - Int_t nin =0, icl = fClusters->GetEntriesFast(); - while (icl--) { - AliTRDcluster *c = (AliTRDcluster *) fClusters->UncheckedAt(icl); + Int_t nin(0), ncl(fClusters->GetEntriesFast()); + while (ncl--) { + AliTRDcluster *c = (AliTRDcluster *) fClusters->UncheckedAt(ncl); if(c->IsInChamber()) nin++; if(fkReconstructor->IsHLT()) c->SetRPhiMethod(AliTRDcluster::kCOG); Int_t detector = c->GetDetector(); @@ -1969,13 +1978,12 @@ Int_t AliTRDtrackerV1::BuildTrackingContainers() Int_t stack = fGeom->GetStack(detector); Int_t layer = fGeom->GetLayer(detector); - fTrSec[sector].GetChamber(stack, layer, kTRUE)->InsertCluster(c, icl); + fTrSec[sector].GetChamber(stack, layer, kTRUE)->InsertCluster(c, ncl, fkReconstructor->IsHLT()); } - const AliTRDCalDet *cal = AliTRDcalibDB::Instance()->GetT0Det(); for(int isector =0; isectorGetT0Det(); AliTRDtrackingChamber *chamber = NULL; AliTRDtrackingChamber **ci = NULL; AliTRDseedV1 sseed[kMaxTracksStack*6]; // to be initialized @@ -2444,7 +2451,7 @@ Int_t AliTRDtrackerV1::Clusters2TracksStack(AliTRDtrackingChamber **stack, TClon for(Int_t ip = 0; ip < kNPlanes; ip++){ if(!(chamber = stack[ip])) continue; - chamber->Build(fGeom, cal);//Indices(fSieveSeeding); + chamber->Build(fGeom);//Indices(fSieveSeeding); } if(fkRecoParam->GetStreamLevel(AliTRDrecoParam::kTracker) > 10){ @@ -2781,6 +2788,7 @@ Int_t AliTRDtrackerV1::MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 * c if(!cseed[jLayer].AttachClusters(chamber, kTRUE)) continue; cseed[jLayer].Fit(); } + FitTiltedRiemanConstraint(&cseed[0], GetZ()); fTrackQuality[ntracks] = 1.; // dummy value ntracks++; if(ntracks == kMaxTracksStack) return ntracks; diff --git a/TRD/AliTRDtrackingChamber.cxx b/TRD/AliTRDtrackingChamber.cxx index 29b60378716..4ce8f81db18 100644 --- a/TRD/AliTRDtrackingChamber.cxx +++ b/TRD/AliTRDtrackingChamber.cxx @@ -37,6 +37,7 @@ #include "AliTRDgeometry.h" #include "AliTRDpadPlane.h" #include "AliTRDcalibDB.h" +#include "AliTRDCommonParam.h" #include "Cal/AliTRDCalDet.h" #include "Cal/AliTRDCalROC.h" @@ -47,6 +48,12 @@ AliTRDtrackingChamber::AliTRDtrackingChamber() :TObject() ,fDetector(-1) ,fX0(0.) + ,fExB(0.) + ,fVD(0.) + ,fT0(0.) + ,fS2PRF(0.) + ,fDiffL(0.) + ,fDiffT(0.) {} //_______________________________________________________ @@ -56,13 +63,23 @@ void AliTRDtrackingChamber::Clear(const Option_t *opt) } //_______________________________________________________ -void AliTRDtrackingChamber::InsertCluster(AliTRDcluster *c, Int_t index) +void AliTRDtrackingChamber::InsertCluster(AliTRDcluster *c, Int_t index, Bool_t hlt) { +// Add cluster to TB container and recalculate error parameterization (for HLT) + fTB[c->GetPadTime()].InsertCluster(c, index); + if(!hlt) return; + + // Define approximate error parameterization for HLT clusters + // if needed the fix values of + // - drift length of 1.5 can be replaced with c->GetXloc() + // - pad length can be cached from geometry in Init() + c->SetSigmaY2(fS2PRF, fDiffT, fExB, 1.5); + c->SetSigmaZ2(6.75); } //_______________________________________________________ -Bool_t AliTRDtrackingChamber::Build(AliTRDgeometry *const geo, const AliTRDCalDet *cal, Bool_t hlt) +Bool_t AliTRDtrackingChamber::Build(AliTRDgeometry *const geo) { // Init chamber and all time bins (AliTRDchamberTimeBin) // Calculates radial position of the chamber based on @@ -73,8 +90,8 @@ Bool_t AliTRDtrackingChamber::Build(AliTRDgeometry *const geo, const AliTRDCalDe return kFALSE; } - Int_t stack = geo->GetStack(fDetector); - Int_t layer = geo->GetLayer(fDetector); + Int_t stack = AliTRDgeometry::GetStack(fDetector); + Int_t layer = AliTRDgeometry::GetLayer(fDetector); AliTRDpadPlane *pp = geo->GetPadPlane(layer, stack); Double_t zl = pp->GetRow0ROC() - pp->GetRowEndROC(); Double_t z0 = geo->GetRow0(layer, stack, 0) - zl; @@ -90,25 +107,32 @@ Bool_t AliTRDtrackingChamber::Build(AliTRDgeometry *const geo, const AliTRDCalDe } if(jtb<2) return kFALSE; - // ESTIMATE POSITION OF PAD PLANE FOR THIS CHAMBER + Int_t t0 = Int_t(fT0); + fTB[t0].SetT0(); Double_t x0 = fTB[index[0]].GetX(); Double_t x1 = fTB[index[1]].GetX(); Double_t dx = (x0 - x1)/(index[1] - index[0]); - - Int_t t0 = (Int_t)cal->GetValue(fDetector); - if(!hlt){ - Double_t mean = 0.0; - AliTRDCalROC *roc = AliTRDcalibDB::Instance()->GetT0ROC(fDetector); - for(Int_t k = 0; kGetNchannels(); k++) mean += roc->GetValue(k); - mean /= roc->GetNchannels(); - t0 = (Int_t)(cal->GetValue(fDetector) + mean); - } - fTB[t0].SetT0(); fX0 = x0 + dx*(index[0] - t0); return kTRUE; } + +//_______________________________________________________ +void AliTRDtrackingChamber::Init(Int_t det) +{ +// Init detector number and Cache calibration parameters + + fDetector = det; + AliTRDcalibDB *calib = AliTRDcalibDB::Instance(); + fT0 = calib->GetT0Average(fDetector); + fVD = calib->GetVdriftAverage(fDetector); + fS2PRF = calib->GetPRFROC(fDetector)->GetMean(); fS2PRF *= fS2PRF; + fExB = AliTRDCommonParam::Instance()->GetOmegaTau(fVD); + AliTRDCommonParam::Instance()->GetDiffCoeff(fDiffL, + fDiffT, fVD); +} + //_______________________________________________________ Int_t AliTRDtrackingChamber::GetNClusters() const { diff --git a/TRD/AliTRDtrackingChamber.h b/TRD/AliTRDtrackingChamber.h index da6adc3a421..bc03336fa1e 100644 --- a/TRD/AliTRDtrackingChamber.h +++ b/TRD/AliTRDtrackingChamber.h @@ -25,7 +25,6 @@ #include "AliTRDseedV1.h" #endif -class AliTRDCalDet; class AliTRDgeometry; class AliTRDReconstructor; class AliTRDtrackingChamber : public TObject @@ -36,30 +35,43 @@ public: virtual ~AliTRDtrackingChamber(){} void Bootstrap(const AliTRDReconstructor *rec); - Bool_t Build(AliTRDgeometry *const geo, const AliTRDCalDet *cal, Bool_t hlt = kFALSE); + Bool_t Build(AliTRDgeometry *const geo); void Clear(const Option_t *opt = NULL); - Int_t GetDetector() const {return fDetector;} + Int_t GetDetector() const { return fDetector;} Int_t GetNClusters() const; Double_t GetQuality(); Bool_t GetSeedingLayer(AliTRDchamberTimeBin *&layer, AliTRDgeometry * const geo, const AliTRDReconstructor *rec); Float_t GetX() const {return fX0;} AliTRDchamberTimeBin* GetTB(int tb) {return tb >= 0 && tb < AliTRDseedV1::kNtb ? &fTB[tb] : NULL;} - void InsertCluster(AliTRDcluster *c, Int_t index); + Float_t GetExB() const { return fExB;} + Float_t GetVD() const { return fVD;} + Float_t GetT0() const { return fT0;} + Float_t GetS2PRF() const { return fS2PRF;} + Float_t GetDiffL() const { return fDiffL;} + Float_t GetDiffT() const { return fDiffT;} + + void Init(Int_t det); + void InsertCluster(AliTRDcluster *c, Int_t index, Bool_t hlt=kFALSE); void Print(Option_t *opt = NULL) const; - void SetDetector(Int_t det) { fDetector = det;} void SetOwner(); void Update(); private: Int_t fDetector; // detector number - Float_t fX0; // approximate position of the pad plane + Float_t fX0; // radial position of the pad plane + Float_t fExB; // tg(a_L) for chamber + Float_t fVD; // drift velocity for chamber + Float_t fT0; // time 0 for chamber + Float_t fS2PRF; // sigma^2 PRF for xd->0 and phi=a_L + Float_t fDiffL; // longitudinal diffusion coefficient + Float_t fDiffT; // transversal diffusion coefficient AliTRDchamberTimeBin fTB[AliTRDseedV1::kNtb]; // time bins - ClassDef(AliTRDtrackingChamber, 1) // TRD tracker container for one chamber + ClassDef(AliTRDtrackingChamber, 2) // TRD tracker container for one chamber }; #endif // ALITRDTRACKINGCHAMBER_H diff --git a/TRD/AliTRDtrackingSector.cxx b/TRD/AliTRDtrackingSector.cxx index 99789dcee3c..af3f42b223b 100644 --- a/TRD/AliTRDtrackingSector.cxx +++ b/TRD/AliTRDtrackingSector.cxx @@ -61,7 +61,7 @@ AliTRDtrackingSector::AliTRDtrackingSector(AliTRDgeometry *geo, Int_t gs) //_____________________________________________________________________________ -void AliTRDtrackingSector::Init(const AliTRDReconstructor *rec, const AliTRDCalDet *cal) +void AliTRDtrackingSector::Init(const AliTRDReconstructor *rec) { // Steer building of tracking chambers and build tracking sector. // Propagate radial position information (calibration/alignment aware) from chambers to sector level @@ -74,7 +74,7 @@ void AliTRDtrackingSector::Init(const AliTRDReconstructor *rec, const AliTRDCalD if(!(tb = (*tc)->GetTB(itb))) continue; tb->SetReconstructor(rec); } - (*tc)->Build(fGeom, cal, rec->IsHLT()); + (*tc)->Build(fGeom); } Int_t nl; @@ -129,7 +129,7 @@ AliTRDtrackingChamber* AliTRDtrackingSector::GetChamber(Int_t stack, Int_t layer for(Int_t ic = ch+1; ic= 0 ? 1 : 0; AliTRDtrackingChamber *chmb = fChamber[Int_t(fIndex[ch])] = new AliTRDtrackingChamber(); - chmb->SetDetector(AliTRDgeometry::GetDetector(layer, stack, fSector)); + chmb->Init(AliTRDgeometry::GetDetector(layer, stack, fSector)); return chmb; } diff --git a/TRD/AliTRDtrackingSector.h b/TRD/AliTRDtrackingSector.h index 84f56c82a0c..a9887b98295 100644 --- a/TRD/AliTRDtrackingSector.h +++ b/TRD/AliTRDtrackingSector.h @@ -21,7 +21,6 @@ #include "AliTRDgeometry.h" #endif -class AliTRDCalDet; class AliTRDReconstructor; class AliTRDtrackingChamber; class AliTRDtrackingSector @@ -40,7 +39,7 @@ public: AliTRDtrackingChamber** GetStack(Int_t stack); Int_t GetSector() const {return fSector;} - void Init(const AliTRDReconstructor *rec, const AliTRDCalDet *cal); + void Init(const AliTRDReconstructor *rec); void Print(Option_t *opt = NULL) const; void SetGeometry(AliTRDgeometry *const geo) {fGeom = geo;} -- 2.43.0