X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliTracker.cxx;h=81b2a401f6e1a11e7a511cb897ee719332cc3fd9;hb=80e93fef1261a29fb11dc3ab89698110ec74dbc9;hp=f9bbbb708516d6721d887279799babeb516b8af6;hpb=9b4aca5523d6c44b1939bb08852ca73ce4776c90;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliTracker.cxx b/STEER/AliTracker.cxx index f9bbbb70851..81b2a401f6e 100644 --- a/STEER/AliTracker.cxx +++ b/STEER/AliTracker.cxx @@ -24,6 +24,7 @@ #include #include #include +#include #include "AliMagF.h" #include "AliTracker.h" @@ -33,11 +34,9 @@ extern TGeoManager *gGeoManager; -Bool_t AliTracker::fgUniformField=kTRUE; -Double_t AliTracker::fgBz=kAlmost0Field; -const AliMagF *AliTracker::fgkFieldMap=0; Bool_t AliTracker::fFillResiduals=kFALSE; -TObjArray *AliTracker::fResiduals=0; +TObjArray **AliTracker::fResiduals=NULL; +AliRecoParam::EventSpecie_t AliTracker::fEventSpecie=AliRecoParam::kDefault; ClassImp(AliTracker) @@ -48,12 +47,13 @@ AliTracker::AliTracker(): fZ(0), fSigmaX(0.005), fSigmaY(0.005), - fSigmaZ(0.010) + fSigmaZ(0.010) { //-------------------------------------------------------------------- // The default constructor. //-------------------------------------------------------------------- - if (!fgkFieldMap) AliWarning("Field map is not set. Call AliTracker::SetFieldMap before creating a tracker!"); + if (!TGeoGlobalMagField::Instance()->GetField()) + AliWarning("Field map is not set."); } //__________________________________________________________________________ @@ -69,30 +69,39 @@ AliTracker::AliTracker(const AliTracker &atr): //-------------------------------------------------------------------- // The default constructor. //-------------------------------------------------------------------- - if (!fgkFieldMap) AliWarning("Field map is not set. Call AliTracker::SetFieldMap before creating a tracker!"); + if (!TGeoGlobalMagField::Instance()->GetField()) + AliWarning("Field map is not set."); } //__________________________________________________________________________ -void AliTracker::SetFieldMap(const AliMagF* map, Bool_t uni) { - //-------------------------------------------------------------------- - //This passes the field map to the reconstruction. - //-------------------------------------------------------------------- - if (map==0) AliFatalClass("Can't access the field map !"); - - if (fgkFieldMap) { - AliWarningClass("The magnetic field map has been already set !"); - return; - } +Double_t AliTracker::GetBz() +{ + AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField(); + if (!fld) return kAlmost0Field; + Double_t bz = -fld->SolenoidField(); + return TMath::Sign(kAlmost0Field,bz) + bz; +} - fgUniformField=uni; - fgkFieldMap=map; +//__________________________________________________________________________ +Double_t AliTracker::GetBz(const Double_t *r) { + //------------------------------------------------------------------ + // Returns Bz (kG) at the point "r" . + //------------------------------------------------------------------ + AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField(); + if (!fld) return kAlmost0Field; + Double_t bz = -fld->GetBz(r); + return TMath::Sign(kAlmost0Field,bz) + bz; +} - //Float_t r[3]={0.,0.,0.},b[3]; map->Field(r,b); - //Double_t bz=-b[2]; - - Double_t bz=-map->SolenoidField(); - fgBz=TMath::Sign(kAlmost0Field,bz) + bz; +//__________________________________________________________________________ +void AliTracker::FillClusterArray(TObjArray* /*array*/) const +{ + // Publishes all pointers to clusters known to the tracker into the + // passed object array. + // The ownership is not transfered - the caller is not expected to delete + // the clusters. + AliWarning("should be overriden by a sub-class."); } //__________________________________________________________________________ @@ -157,17 +166,7 @@ void AliTracker::UseClusters(const AliKalmanTrack *t, Int_t from) const { } } -Double_t AliTracker::GetBz(Float_t *r) { - //------------------------------------------------------------------ - // Returns Bz (kG) at the point "r" . - //------------------------------------------------------------------ - Float_t b[3]; fgkFieldMap->Field(r,b); - Double_t bz=-Double_t(b[2]); - return (TMath::Sign(kAlmost0Field,bz) + bz); -} - -Double_t -AliTracker::MeanMaterialBudget(Double_t *start,Double_t *end,Double_t *mparam) +Double_t AliTracker::MeanMaterialBudget(const Double_t *start, const Double_t *end, Double_t *mparam) { // // Calculate mean material budget and material properties between @@ -362,7 +361,7 @@ Double_t mass, Double_t maxStep, Bool_t rotateTo, Double_t maxSnp){ // Double_t ca=TMath::Cos(alphan-track->GetAlpha()), sa=TMath::Sin(alphan-track->GetAlpha()); - Double_t sf=track->GetSnp(), cf=TMath::Sqrt(1.- sf*sf); + Double_t sf=track->GetSnp(), cf=TMath::Sqrt((1.-sf)*(1.+sf)); Double_t sinNew = sf*ca - cf*sa; if (TMath::Abs(sinNew) >= maxSnp) return kFALSE; if (!track->Rotate(alphan)) return kFALSE; @@ -388,9 +387,68 @@ void AliTracker::FillResiduals(const AliExternalTrackParam *t, TH1F *h=0; AliGeomManager::ELayerID layer=AliGeomManager::VolUIDToLayer(id); - h=(TH1F*)fResiduals->At(2*layer-2); + h=(TH1F*)fResiduals[fEventSpecie]->At(2*layer-2); h->Fill(residuals[0]); - h=(TH1F*)fResiduals->At(2*layer-1); + h=(TH1F*)fResiduals[fEventSpecie]->At(2*layer-1); h->Fill(residuals[1]); + + if (layer==5) { + if (p[1]<0) { // SSD1 absolute residuals + ((TH1F*)fResiduals[fEventSpecie]->At(40))->Fill(t->GetY()-p[0]); //C side + ((TH1F*)fResiduals[fEventSpecie]->At(41))->Fill(t->GetZ()-p[1]); + } else { + ((TH1F*)fResiduals[fEventSpecie]->At(42))->Fill(t->GetY()-p[0]); //A side + ((TH1F*)fResiduals[fEventSpecie]->At(43))->Fill(t->GetZ()-p[1]); + } + } + if (layer==6) { // SSD2 absolute residuals + if (p[1]<0) { + ((TH1F*)fResiduals[fEventSpecie]->At(44))->Fill(t->GetY()-p[0]); //C side + ((TH1F*)fResiduals[fEventSpecie]->At(45))->Fill(t->GetZ()-p[1]); + } else { + ((TH1F*)fResiduals[fEventSpecie]->At(46))->Fill(t->GetY()-p[0]); //A side + ((TH1F*)fResiduals[fEventSpecie]->At(47))->Fill(t->GetZ()-p[1]); + } + } + } +void AliTracker::FillResiduals(const AliExternalTrackParam *t, + const AliCluster *c, Bool_t /*updated*/) { + // + // This function fills the histograms of residuals + // The array of these histos is external for this AliTracker class. + // Normally, this array belong to AliGlobalQADataMaker class. + // + // For the moment, the residuals are absolute ! + // + + if (!fFillResiduals) return; + if (!fResiduals) return; + + UShort_t id=c->GetVolumeId(); + const TGeoHMatrix *matrixT2L=AliGeomManager::GetTracking2LocalMatrix(id); + + // Position of the cluster in the tracking c.s. + Double_t clsTrk[3]={c->GetX(), c->GetY(), c->GetZ()}; + // Position of the cluster in the local module c.s. + Double_t clsLoc[3]={0.,0.,0.}; + matrixT2L->LocalToMaster(clsTrk,clsLoc); + + + // Position of the intersection point in the tracking c.s. + Double_t trkTrk[3]={t->GetX(),t->GetY(),t->GetZ()}; + // Position of the intersection point in the local module c.s. + Double_t trkLoc[3]={0.,0.,0.}; + matrixT2L->LocalToMaster(trkTrk,trkLoc); + + Double_t residuals[2]={trkLoc[0]-clsLoc[0], trkLoc[2]-clsLoc[2]}; + + TH1F *h=0; + AliGeomManager::ELayerID layer=AliGeomManager::VolUIDToLayer(id); + h=(TH1F*)fResiduals[fEventSpecie]->At(2*layer-2); + h->Fill(residuals[0]); + h=(TH1F*)fResiduals[fEventSpecie]->At(2*layer-1); + h->Fill(residuals[1]); + +}