Fixes for reco
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 22 Nov 2012 16:10:24 +0000 (16:10 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 22 Nov 2012 16:10:24 +0000 (16:10 +0000)
ITS/UPGRADE/AliITSURecoDet.cxx
ITS/UPGRADE/AliITSURecoDet.h
ITS/UPGRADE/AliITSURecoLayer.cxx
ITS/UPGRADE/AliITSURecoLayer.h
ITS/UPGRADE/AliITSURecoParam.cxx
ITS/UPGRADE/AliITSURecoParam.h
ITS/UPGRADE/AliITSUSeed.cxx
ITS/UPGRADE/AliITSUTrackerGlo.cxx

index 7bff734..77739e3 100644 (file)
@@ -1,10 +1,19 @@
+#include <TGeoVolume.h>
+#include <TGeoTube.h>
+#include <TGeoManager.h>
 #include "AliITSURecoDet.h"
 #include "AliITSUGeomTGeo.h"
 #include "AliITSsegmentation.h"
 #include "AliITSUSegmentationPix.h"
+#include "AliITSUReconstructor.h"
+
 
 ClassImp(AliITSURecoDet)
 
+
+const Char_t* AliITSURecoDet::fgkBeamPipeVolName = "IP_PIPE";
+
+
 //______________________________________________________
 AliITSURecoDet::AliITSURecoDet(AliITSUGeomTGeo* geom, const char* name)
 :  fNLayers(0)
@@ -67,11 +76,45 @@ Bool_t AliITSURecoDet::Build()
     AliITSURecoLayer* lra = new AliITSURecoLayer(Form("Lr%d%s%d",ilr,fGeom->GetDetTypeName(lrTyp),
                                                      lrTyp%AliITSUGeomTGeo::kMaxSegmPerDetType),
                                                 ilr,fGeom);
+    lra->SetPassive(kFALSE);
     AddLayer(lra);
   }
   //
   // build passive ITS layers
   //
+  double rMin,rMax,zMin,zMax;
+  // beam pipe
+  TGeoVolume *v = gGeoManager->GetVolume(fgkBeamPipeVolName);
+  AliITSURecoLayer* lrp = 0;
+  if (!v) AliWarning("No beam pipe found in geometry");
+  {
+    TGeoTube *t=(TGeoTube*)v->GetShape();
+    rMin = t->GetRmin();
+    rMax = t->GetRmax();
+    zMin =-t->GetDz();
+    zMax = t->GetDz();
+    lrp = new AliITSURecoLayer("BeamPipe");
+    lrp->SetRMin(rMin);
+    lrp->SetRMax(rMax);
+    lrp->SetR(0.5*(rMin+rMax));
+    lrp->SetZMin(zMin);
+    lrp->SetZMax(zMax);
+    lrp->SetPassive(kTRUE);
+    AddLayer(lrp);
+    //
+  }
+  //
+  // TPC-ITS wall
+  lrp = new AliITSURecoLayer("TPC-ITSwall");
+  lrp->SetRMin(AliITSUReconstructor::GetRecoParam()->GetTPCITSWallRMin());
+  lrp->SetRMax(AliITSUReconstructor::GetRecoParam()->GetTPCITSWallRMax());
+  lrp->SetR(0.5*(lrp->GetRMin()+lrp->GetRMax()));
+  lrp->SetZMin(-AliITSUReconstructor::GetRecoParam()->GetTPCITSWallZSpanH());
+  lrp->SetZMax( AliITSUReconstructor::GetRecoParam()->GetTPCITSWallZSpanH());
+  lrp->SetMaxStep( AliITSUReconstructor::GetRecoParam()->GetTPCITSWallMaxStep());
+  lrp->SetPassive(kTRUE);
+  AddLayer(lrp);
+  //
   IndexLayers();
   Print("lr");
   return kTRUE;
index 2f25733..bbbcb4a 100644 (file)
@@ -52,6 +52,9 @@ class AliITSURecoDet : public TNamed
   TObjArray          fLayersActive;   // active layers
   AliITSUGeomTGeo*   fGeom;           // ITS geometry
   //
+ protected:
+  static const Char_t*     fgkBeamPipeVolName;    // name of the beam pipe volume
+
  private:
   AliITSURecoDet(const AliITSURecoDet &source); 
   AliITSURecoDet& operator=(const AliITSURecoDet &source); 
index d83daa4..f83fd48 100644 (file)
@@ -75,7 +75,7 @@ AliITSURecoLayer::~AliITSURecoLayer()
 void AliITSURecoLayer::Print(Option_t* opt) const                            
 {
   //print 
-  printf("Lr %s %d (act:%+d), NSens: %4d | MaxStep:%.2f ",GetName(),GetID(),GetActiveID(),GetNSensors(),fMaxStep);
+  printf("Lr %-15s %d (act:%+d), NSens: %4d | MaxStep:%.2f ",GetName(),GetID(),GetActiveID(),GetNSensors(),fMaxStep);
   printf("%6.3f<R<%6.3f | %+8.3f<Z<%+8.3f dZ:%6.3f\n",fRMin,fRMax,fZMin,fZMax,fSensDZInv>0 ? 1/fSensDZInv : 0);
   TString opts = opt; opts.ToLower();
   if (opts.Contains("sn")) for (int i=0;i<GetNSensors();i++) GetSensor(i)->Print(opt);
@@ -102,6 +102,7 @@ void AliITSURecoLayer::Build()
   fPhiLadMin = new Double_t[fNLadders];
   fPhiLadMax = new Double_t[fNLadders];
   fSensDZInv = 0;
+  fDPhiLadInv = fNLadders/TwoPi();
   //
   for (int ild=0;ild<fNLadders;ild++) {
     fPhiLadMin[ild] = 1e9;
@@ -238,29 +239,29 @@ Int_t AliITSURecoLayer::FindSensors(const double* impPar, AliITSURecoSens *senso
   BringTo02Pi(phiMn);
   BringTo02Pi(phiMx);
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbR)); // neighbor on the right
-  if (sensN && OKforPhiMax(phiMx,sensN->GetPhiMin())) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbR)); // neighbor on the right (smaller phi)
+  if (sensN && OKforPhiMin(phiMn,sensN->GetPhiMax())) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbTR)); // neighbor on the top right
-  if (sensN && OKforPhiMax(phiMx,sensN->GetPhiMin()) && sensN->GetZMin()<zMx) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbTR)); // neighbor on the top right (smaller phi, larger Z)
+  if (sensN && OKforPhiMin(phiMn,sensN->GetPhiMax()) && sensN->GetZMin()<zMx) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbT)); // neighbor on the top
-  if (sensN && sensN->GetZMin()>zMx) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbT)); // neighbor on the top (larger Z)
+  if (sensN && sensN->GetZMin()<zMx) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbTL)); // neighbor on the top left
-  if (sensN && OKforPhiMin(phiMn,sensN->GetPhiMax()) && sensN->GetZMin()<zMx) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbTL)); // neighbor on the top left (larger Z, larger phi)
+  if (sensN && OKforPhiMax(phiMx,sensN->GetPhiMin()) && sensN->GetZMin()<zMx) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbL)); // neighbor on the left
-  if (sensN && OKforPhiMin(phiMn,sensN->GetPhiMax())) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbL)); // neighbor on the left (larger phi)
+  if (sensN && OKforPhiMax(phiMx,sensN->GetPhiMin())) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbBL)); // neighbor on the bottom left
-  if (sensN && OKforPhiMin(phiMn,sensN->GetPhiMax()) && sensN->GetZMax()>zMn) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbBL)); // neighbor on the bottom left (smaller Z, larger phi)
+  if (sensN && OKforPhiMax(phiMx,sensN->GetPhiMin()) && sensN->GetZMax()>zMn) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbB));  // neighbor on the bottom
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbB));  // neighbor on the bottom (smaller Z)
   if (sensN && sensN->GetZMax()>zMn) sensors[nsens++] = sensN;
   //
-  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbBR)); // neighbor on the bottom right
-  if (sensN && OKforPhiMax(phiMx,sensN->GetPhiMin()) && sensN->GetZMax()>zMn) sensors[nsens++] = sensN;
+  sensN = GetSensor(sens->GetNeighborID(AliITSURecoSens::kNghbBR)); // neighbor on the bottom right (smaller Z, smaller phi)
+  if (sensN && OKforPhiMin(phiMn,sensN->GetPhiMax()) && sensN->GetZMax()>zMn) sensors[nsens++] = sensN;
   //
   return nsens;
 }
index 4ca7f9d..d3a0f28 100644 (file)
@@ -36,6 +36,8 @@ class AliITSURecoLayer : public TNamed
   Double_t           GetRMax()                     const {return fRMax;}
   Double_t           GetDR()                       const {return fRMax-fRMin;}
   Double_t           GetR()                        const {return fR;}
+  Double_t           GetZMin()                     const {return fZMin;}
+  Double_t           GetZMax()                     const {return fZMax;}
   Double_t           GetMaxStep()                  const {return fMaxStep;}
   Bool_t             IsActive()                    const {return !TestBit(kPassive);}
   Bool_t             IsPassive()                   const {return TestBit(kPassive);}
@@ -45,6 +47,8 @@ class AliITSURecoLayer : public TNamed
   void               SetRMin(Double_t r)                 {fRMin = r;}
   void               SetRMax(Double_t r)                 {fRMax = r;}
   void               SetR(Double_t r)                    {fR = r;}
+  void               SetZMin(Double_t z)                 {fZMin = z;}
+  void               SetZMax(Double_t z)                 {fZMax = z;}
   void               SetPassive(Bool_t v=kTRUE)          {SetBit(kPassive,v);}
   void               SetMaxStep(Double_t st)             {fMaxStep = st>0 ? st : 0.1;}
   //
index 758425c..cbde129 100644 (file)
@@ -32,12 +32,19 @@ const Double_t AliITSURecoParam::fgkMaxDZForProlongation          = 60;
 const Double_t AliITSURecoParam::fgkMinPtForProlongation          = 0.0; 
 const Double_t AliITSURecoParam::fgkNSigmaRoadY                   = 5.;
 const Double_t AliITSURecoParam::fgkNSigmaRoadZ                   = 5.; 
-const Double_t AliITSURecoParam::fgkSigmaRoadY                    = 1000e-4;
-const Double_t AliITSURecoParam::fgkSigmaRoadZ                    = 1000e-4;
+const Double_t AliITSURecoParam::fgkSigmaRoadY                    = 1.;//1000e-4;
+const Double_t AliITSURecoParam::fgkSigmaRoadZ                    = 1.;//1000e-4;
 const Double_t AliITSURecoParam::fgkMaxTr2ClChi2                  = 15.;;
 const Double_t AliITSURecoParam::fgkTanLorentzAngle               = 0;
 //
+// hardwired params for TPC-ITS border layer
+const Double_t AliITSURecoParam::fgkTPCITSWallRMin                = 50.;
+const Double_t AliITSURecoParam::fgkTPCITSWallRMax                = 80.;
+const Double_t AliITSURecoParam::fgkTPCITSWallZSpanH              = 250.;
+const Double_t AliITSURecoParam::fgkTPCITSWallMaxStep             = 6.;
 
+
+//
 //_____________________________________________________________________________
 AliITSURecoParam::AliITSURecoParam()
   :  fNLayers(0)
@@ -48,6 +55,11 @@ AliITSURecoParam::AliITSURecoParam()
   ,fNSigmaRoadY(fgkNSigmaRoadY)
   ,fNSigmaRoadZ(fgkNSigmaRoadZ)
      //
+  ,fTPCITSWallRMin(fgkTPCITSWallRMin)
+  ,fTPCITSWallRMax(fgkTPCITSWallRMax)
+  ,fTPCITSWallZSpanH(fgkTPCITSWallZSpanH)
+  ,fTPCITSWallMaxStep(fgkTPCITSWallMaxStep)
+     //
   ,fTanLorentzAngle(0)
   ,fSigmaY2(0)
   ,fSigmaZ2(0)
@@ -183,6 +195,9 @@ void AliITSURecoParam::Print(Option_t *opt) const
   printf("%-30s\t%f\n","fNSigmaRoadY",fNSigmaRoadY);
   printf("%-30s\t%f\n","fNSigmaRoadZ",fNSigmaRoadZ);
   //
+  printf("TPC-ITS wall: %.3f<R<%.3f DZ/2=%.3f MaxStep=%.3f\n",
+        fTPCITSWallRMin,fTPCITSWallRMax,fTPCITSWallZSpanH,fTPCITSWallMaxStep);
+  //
   printf("N.Layers: %d\n",fNLayers);
   if (fNLayers>0) {
     printf("Layer-wise data:\n");
index 0a069f1..7a7aa75 100644 (file)
@@ -33,10 +33,15 @@ class AliITSURecoParam : public AliDetectorRecoParam
   Double_t    GetSigmaY2(Int_t lr)               const;
   Double_t    GetSigmaZ2(Int_t lr)               const;
   Double_t    GetMaxTr2ClChi2(Int_t lr)          const;
-
+  //
   Double_t    GetNSigmaRoadY()                   const {return fNSigmaRoadY;}
   Double_t    GetNSigmaRoadZ()                   const {return fNSigmaRoadZ;}
   //
+  Double_t    GetTPCITSWallRMin()                const {return fTPCITSWallRMin;}
+  Double_t    GetTPCITSWallRMax()                const {return fTPCITSWallRMax;}
+  Double_t    GetTPCITSWallZSpanH()              const {return fTPCITSWallZSpanH;}
+  Double_t    GetTPCITSWallMaxStep()             const {return fTPCITSWallMaxStep;}
+  //
   void        SetNLayers(Int_t n);
   void        SetTanLorentzAngle(Int_t lr, Double_t v);
   void        SetSigmaY2(Int_t lr, Double_t v);
@@ -50,8 +55,13 @@ class AliITSURecoParam : public AliDetectorRecoParam
   void        SetNSigmaRoadY(Double_t v)                              {fNSigmaRoadY=v;}
   void        SetNSigmaRoadZ(Double_t v)                              {fNSigmaRoadZ=v;}
   //
+  void        SetTPCITSWallRMin(double v)                             {fTPCITSWallRMin = v;}
+  void        SetTPCITSWallRMax(double v)                             {fTPCITSWallRMax = v;}
+  void        SetTPCITSWallZSpanH(double v)                           {fTPCITSWallZSpanH = v;}
+  void        SetTPCITSWallMaxStep(double v)                          {fTPCITSWallMaxStep = v;}
+  //
   virtual void Print(Option_t *opt="")  const;
-
+  //
  protected:
   Int_t          fNLayers;          // number of layers 
   //
@@ -62,12 +72,18 @@ class AliITSURecoParam : public AliDetectorRecoParam
   Double_t       fNSigmaRoadY;          // N sigmas for road in Y
   Double_t       fNSigmaRoadZ;          // N sigmas for road in Z
   //
+  Double_t       fTPCITSWallRMin;       // minR
+  Double_t       fTPCITSWallRMax;       // maxR
+  Double_t       fTPCITSWallZSpanH;     // half Z span
+  Double_t       fTPCITSWallMaxStep;    // max tracking step
+  //
   Double_t*      fTanLorentzAngle;  //[fNLayers] Optional Lorentz angle for each layer
   Double_t*      fSigmaY2;          //[fNLayers] addition to road width^2
   Double_t*      fSigmaZ2;          //[fNLayers] addition to road width^2
   Double_t*      fMaxTr2ClChi2;     //[fNLayers] max track-to-cluster chi2
-
   //
+
+
   static const Double_t fgkMaxDforV0dghtrForProlongation;      // default
   static const Double_t fgkMaxDForProlongation;                // default
   static const Double_t fgkMaxDZForProlongation;               // default
@@ -80,6 +96,12 @@ class AliITSURecoParam : public AliDetectorRecoParam
   static const Double_t fgkMaxTr2ClChi2;                       // default
   static const Double_t fgkTanLorentzAngle;                    // default
   //
+  // hardwired params for TPC-ITS border layer
+  static const Double_t fgkTPCITSWallRMin;                     // minR
+  static const Double_t fgkTPCITSWallRMax;                     // maxR
+  static const Double_t fgkTPCITSWallZSpanH;                   // half Z span
+  static const Double_t fgkTPCITSWallMaxStep;                  // max tracking step
+  //
  private:
   AliITSURecoParam(const AliITSURecoParam & param);
   AliITSURecoParam & operator=(const AliITSURecoParam &param);
index 39c57d7..1691543 100644 (file)
@@ -56,7 +56,7 @@ void AliITSUSeed::Print(Option_t* opt) const
   printf("Lr%d Cl:%4d Chi2Glo:%6.3f Chi2Cl:",lr,cl,GetChi2Glo());
   cl<0 ? printf("  NA  ") : printf("%6.3f",GetChi2Cl());
   printf(" |"); 
-  for (int i=0;i<=lr;i++) printf("%c",HasClusterOnLayer(i) ? '+':'-');
+  for (int i=0;i<=lr;i++) printf("%c",HasClusterOnLayer(i) ? '+':'-'); printf("|\n");
   TString opts = opt; opts.ToLower();
   if (opts.Contains("etp")) AliExternalTrackParam::Print();
   if (opts.Contains("parent") && GetParent()) GetParent()->Print(opt);
index 126ca69..32dd4a4 100644 (file)
@@ -180,7 +180,7 @@ void AliITSUTrackerGlo::FindTrack(AliESDtrack* esdTr)
   if (!NeedToProlong(esdTr)) return;  // are we interested in this track?
   if (!InitSeed(esdTr))      return;  // initialize prolongations hypotheses tree
   //
-  AliITSURecoSens *hitSens[AliITSURecoSens::kNNeighbors];
+  AliITSURecoSens *hitSens[AliITSURecoSens::kNNeighbors+1];
   AliITSUSeed seedUC;  // copy of the seed from the upper layer
   AliITSUSeed seedT;   // transient seed between the seedUC and new prolongation hypothesis
   //
@@ -208,7 +208,7 @@ void AliITSUTrackerGlo::FindTrack(AliESDtrack* esdTr)
        if (NeedToKill(&seedUC,kRWCheckFailed)) KillSeed(ilaUp,isd); 
        continue;
       }
-      int nsens = lrA->FindSensors(&fTrImpData[kTrPhi0], hitSens);  // find detectors which may be hit by the track (max 4)
+      int nsens = lrA->FindSensors(&fTrImpData[kTrPhi0], hitSens);  // find detectors which may be hit by the track
       printf("Lr:%d Ns:%d\n",ila, nsens);
       //
       for (int isn=nsens;isn--;) {
@@ -332,9 +332,9 @@ Bool_t AliITSUTrackerGlo::GetRoadWidth(AliITSUSeed* seed, int ilrA)
   sgy = Sqrt(sgy)*AliITSUReconstructor::GetRecoParam()->GetNSigmaRoadY();
   sgz = Sqrt(sgz)*AliITSUReconstructor::GetRecoParam()->GetNSigmaRoadZ();
   fTrImpData[kTrPhi0] = 0.5*(fTrImpData[kTrPhiOut]+fTrImpData[kTrPhiIn]);
-  fTrImpData[kTrZ0]   = 0.5*(fTrImpData[kTrZOut]+fTrImpData[kTrPhiIn]);
+  fTrImpData[kTrZ0]   = 0.5*(fTrImpData[kTrZOut]+fTrImpData[kTrZIn]);
   fTrImpData[kTrDPhi] = 0.5*Abs(fTrImpData[kTrPhiOut]-fTrImpData[kTrPhiIn]) + sgy/lrA->GetR();
-  fTrImpData[kTrDZ]   = 0.5*Abs(fTrImpData[kTrZOut]-fTrImpData[kTrPhiIn])   + sgz;
+  fTrImpData[kTrDZ]   = 0.5*Abs(fTrImpData[kTrZOut]-fTrImpData[kTrZIn])   + sgz;
   //  
   return kTRUE;
 }