From 7203e11a72176f8bfe4ddd3f097b3f3e887ef753 Mon Sep 17 00:00:00 2001 From: prino Date: Fri, 22 Aug 2008 15:27:08 +0000 Subject: [PATCH] Parameters of AliITSVertexer3D added in AliITSRecoParam (F.Prino) --- ITS/AliITSRecoParam.cxx | 12 ++++- ITS/AliITSRecoParam.h | 43 +++++++++++++++++- ITS/AliITSReconstructor.cxx | 14 +++++- ITS/AliITSVertexer3D.cxx | 2 +- ITS/AliITSVertexer3D.h | 14 +++++- ITS/Calib/RecoParam/Run0_999999999_v0_s0.root | Bin 5806 -> 6073 bytes 6 files changed, 80 insertions(+), 5 deletions(-) diff --git a/ITS/AliITSRecoParam.cxx b/ITS/AliITSRecoParam.cxx index b4ba0dec215..6292e93fd8c 100644 --- a/ITS/AliITSRecoParam.cxx +++ b/ITS/AliITSRecoParam.cxx @@ -67,6 +67,13 @@ fITSonly(kFALSE), fVertexer(0), fClusterFinder(0), fPID(0), +fVtxr3DZCutWide(0.), +fVtxr3DRCutWide(0.), +fVtxr3DZCutNarrow(0.), +fVtxr3DRCutNarrow(0.), +fVtxr3DPhiCutLoose(0.), +fVtxr3DPhiCutTight(0.), +fVtxr3DDCACut(0.), fMaxSnp(1.), fNSigmaYLayerForRoadY(0), fNSigmaRoadY(0), @@ -147,6 +154,7 @@ fUseChargeMatchingInClusterFinderSSD(kTRUE) SetUseAmplitudeInfo(kTRUE); SetClusterErrorsParam(1); SetClusterMisalError(0.); + SetVertexer3DDefaults(); } //_____________________________________________________________________________ AliITSRecoParam::~AliITSRecoParam() @@ -162,6 +170,7 @@ AliITSRecoParam *AliITSRecoParam::GetHighFluxParam() // make default reconstruction parameters for hig flux env. // AliITSRecoParam *param = new AliITSRecoParam(); + param->SetVertexer3DDefaults(); param->fMaxSnp = 0.95; @@ -252,6 +261,7 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam() // make default reconstruction parameters for low flux env. // AliITSRecoParam *param = new AliITSRecoParam(); + param->SetVertexer3DDefaults(); param->fMaxSnp = 0.95; @@ -333,7 +343,7 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam() param->fSigmaZDeadZoneHit2 = 0.001/12.; param->fXPassDeadZoneHits = 0.018; param->SetNLoopsSA(10); - + return param; } //_____________________________________________________________________________ diff --git a/ITS/AliITSRecoParam.h b/ITS/AliITSRecoParam.h index b242060b20b..a6d5fcc7b67 100644 --- a/ITS/AliITSRecoParam.h +++ b/ITS/AliITSRecoParam.h @@ -88,6 +88,38 @@ class AliITSRecoParam : public AliDetectorRecoParam void SetLandauFitPID() {SetPID(1);} Int_t GetPID() const {return fPID;} + void SetVertexer3DFiducialRegions(Float_t dzwid=14.0, Float_t drwid=2.5, Float_t dznar=0.5, Float_t drnar=0.5){ + SetVertexer3DWideFiducialRegion(dzwid,drwid); + SetVertexer3DNarrowFiducialRegion(dznar,drnar); + } + void SetVertexer3DWideFiducialRegion(Float_t dz=14.0, Float_t dr=2.5){ + fVtxr3DZCutWide=dz; fVtxr3DRCutWide=dr; + } + void SetVertexer3DNarrowFiducialRegion(Float_t dz=0.5, Float_t dr=0.5){ + fVtxr3DZCutNarrow=dz; fVtxr3DRCutNarrow=dr; + } + void SetVertexer3DDeltaPhiCuts(Float_t dphiloose=0.5, Float_t dphitight=0.01){ + fVtxr3DPhiCutLoose=dphiloose; + fVtxr3DPhiCutTight=dphitight; + } + void SetVertexer3DDCACut(Float_t dca=0.1){ + fVtxr3DDCACut=dca; + } + void SetVertexer3DDefaults(){ + SetVertexer3DFiducialRegions(); + SetVertexer3DDeltaPhiCuts(); + SetVertexer3DDCACut(); + } + + Float_t GetVertexer3DWideFiducialRegionZ() const {return fVtxr3DZCutWide;} + Float_t GetVertexer3DWideFiducialRegionR() const {return fVtxr3DRCutWide;} + Float_t GetVertexer3DNarrowFiducialRegionZ() const {return fVtxr3DZCutNarrow;} + Float_t GetVertexer3DNarrowFiducialRegionR() const {return fVtxr3DRCutNarrow;} + Float_t GetVertexer3DLooseDeltaPhiCut() const {return fVtxr3DPhiCutLoose;} + Float_t GetVertexer3DTightDeltaPhiCut() const {return fVtxr3DPhiCutTight;} + Float_t GetVertexer3DDCACut() const {return fVtxr3DDCACut;} + + Double_t GetSigmaY2(Int_t i) const { return fSigmaY2[i]; } Double_t GetSigmaZ2(Int_t i) const { return fSigmaZ2[i]; } @@ -282,6 +314,15 @@ class AliITSRecoParam : public AliDetectorRecoParam Int_t fClusterFinder; // ITS cf to be used (see AliITSReconstructor) Int_t fPID; // ITS PID method to be used (see AliITSReconstructor) + + Float_t fVtxr3DZCutWide; // Z extension of the wide fiducial region for vertexer 3D + Float_t fVtxr3DRCutWide; // R extension of the wide fiducial region for vertexer 3D + Float_t fVtxr3DZCutNarrow; // Z extension of the narrow fiducial region for vertexer 3D + Float_t fVtxr3DRCutNarrow; // R extension of the narrow fiducial region for vertexer 3D + Float_t fVtxr3DPhiCutLoose; // loose deltaPhi cut to define tracklets in vertexer 3D + Float_t fVtxr3DPhiCutTight; // tight deltaPhi cut to define tracklets in vertexer 3D + Float_t fVtxr3DDCACut; // cut on tracklet-to-tracklet DCA in vertexer3D + Int_t fLayersToSkip[AliITSgeomTGeo::kNLayers]; // array with layers to skip (MI,SA) // spatial resolutions of the detectors @@ -388,7 +429,7 @@ class AliITSRecoParam : public AliDetectorRecoParam Bool_t fUseChargeMatchingInClusterFinderSSD; // SSD - ClassDef(AliITSRecoParam,9) // ITS reco parameters + ClassDef(AliITSRecoParam,10) // ITS reco parameters }; #endif diff --git a/ITS/AliITSReconstructor.cxx b/ITS/AliITSReconstructor.cxx index 622e57f046b..789d9411906 100644 --- a/ITS/AliITSReconstructor.cxx +++ b/ITS/AliITSReconstructor.cxx @@ -187,7 +187,19 @@ AliVertexer* AliITSReconstructor::CreateVertexer() const } // by default an AliITSVertexer3D object is instatiated Info("CreateVertexer","a AliITSVertexer3D object has been selected\n"); - return new AliITSVertexer3D(); + AliITSVertexer3D* vtxr = new AliITSVertexer3D(); + Float_t dzw=GetRecoParam()->GetVertexer3DWideFiducialRegionZ(); + Float_t drw=GetRecoParam()->GetVertexer3DWideFiducialRegionR(); + vtxr->SetWideFiducialRegion(dzw,drw); + Float_t dzn=GetRecoParam()->GetVertexer3DNarrowFiducialRegionZ(); + Float_t drn=GetRecoParam()->GetVertexer3DNarrowFiducialRegionR(); + vtxr->SetNarrowFiducialRegion(dzn,drn); + Float_t dphil=GetRecoParam()->GetVertexer3DLooseDeltaPhiCut(); + Float_t dphit=GetRecoParam()->GetVertexer3DTightDeltaPhiCut(); + vtxr->SetDeltaPhiCuts(dphil,dphit); + Float_t dcacut=GetRecoParam()->GetVertexer3DDCACut(); + vtxr->SetDCACut(dcacut); + return vtxr; } //_____________________________________________________________________________ diff --git a/ITS/AliITSVertexer3D.cxx b/ITS/AliITSVertexer3D.cxx index 72a99b52b4a..784f8062f83 100644 --- a/ITS/AliITSVertexer3D.cxx +++ b/ITS/AliITSVertexer3D.cxx @@ -55,7 +55,7 @@ fMeanPtSelTrk(0.) SetMaxRCut(); SetZCutDiamond(); SetMaxZCut(); - SetDCAcut(); + SetDCACut(); SetDiffPhiMax(); SetMeanPSelTracks(); SetMeanPtSelTracks(); diff --git a/ITS/AliITSVertexer3D.h b/ITS/AliITSVertexer3D.h index d270cddacae..023c35bbf87 100644 --- a/ITS/AliITSVertexer3D.h +++ b/ITS/AliITSVertexer3D.h @@ -23,12 +23,24 @@ class AliITSVertexer3D : public AliITSVertexer { virtual AliESDVertex* FindVertexForCurrentEvent(TTree *itsClusterTree); AliESDVertex GetVertex3D() const {return fVert3D;} virtual void PrintStatus() const; + void SetWideFiducialRegion(Float_t dz = 14.0, Float_t dr=2.5){ + SetCoarseMaxRCut(dr); + SetZCutDiamond(dz); + } + void SetNarrowFiducialRegion(Float_t dz = 0.5, Float_t dr=0.5){ + SetMaxRCut(dr); + SetMaxZCut(dz); + } + void SetDeltaPhiCuts(Float_t dphiloose=0.5, Float_t dphitight=0.01){ + SetCoarseDiffPhiCut(dphiloose); + SetDiffPhiMax(dphitight); + } void SetCoarseDiffPhiCut(Float_t dphi = 0.5){fCoarseDiffPhiCut=dphi;} void SetCoarseMaxRCut(Float_t rad = 2.5){fCoarseMaxRCut=rad;} void SetMaxRCut(Float_t rad = 0.5){fMaxRCut=rad;} void SetZCutDiamond(Float_t zcut = 14.0){fZCutDiamond=zcut;} void SetMaxZCut(Float_t dz = 0.5){fMaxZCut=dz;} - void SetDCAcut(Float_t dca=0.1){fDCAcut=dca;} + void SetDCACut(Float_t dca=0.1){fDCAcut=dca;} void SetDiffPhiMax(Float_t pm = 0.01){fDiffPhiMax = pm;} void SetMeanPSelTracks(Float_t pGeV=0.875){fMeanPSelTrk = pGeV;} void SetMeanPtSelTracks(Float_t ptGeV=0.630){fMeanPtSelTrk = ptGeV;} diff --git a/ITS/Calib/RecoParam/Run0_999999999_v0_s0.root b/ITS/Calib/RecoParam/Run0_999999999_v0_s0.root index 46ca444ac11e803496edd7a9c810dac9b3337ec1..8a8bdf34b7739f9e96cec8de2066849f52623198 100644 GIT binary patch delta 5681 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 AJpcdz delta 5390 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