]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/UPGRADE/AliITSURecoLayer.h
Fix in the algo of finding the sensors on the way of the track.
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSURecoLayer.h
index 435276e6a1a87a32e0dd713c39e7e926b0d2a29f..b3ada71d826ec7c6ea777eaace18159fbae981cf 100644 (file)
@@ -3,9 +3,13 @@
 
 #include <TNamed.h>
 #include <TObjArray.h>
+#include <TClonesArray.h>
+#include "AliITSURecoSens.h"
+
 class AliITSUGeomTGeo;
 class AliITSsegmentation;
-class AliITSURecoSens;
+class AliCluster;
+
 
 ///////////////////////////////////////////////////////////////////////
 //                                                                   //
@@ -19,38 +23,63 @@ class AliITSURecoLayer : public TNamed
 {
  public:
   //
-  enum {kPassive=BIT(14)};
+  enum {kPassive=BIT(14)                 // layer is passive
+       ,kOwnsClusterArray=BIT(15)       // owner of cluster array, delete in destructor
+  };
   AliITSURecoLayer(const char* name);
-  AliITSURecoLayer(const char* name, Int_t activeID,Int_t nsens,AliITSUGeomTGeo* gm,const AliITSsegmentation* segm);
+  AliITSURecoLayer(const char* name, Int_t activeID,AliITSUGeomTGeo* gm);
   virtual ~AliITSURecoLayer();
   //
-  Bool_t             Build();
+  void               ProcessClusters(Int_t mode=0);
   //
   Int_t              GetID()                       const {return (int)GetUniqueID();}
   Int_t              GetActiveID()                 const {return fActiveID;}
   Int_t              GetNSensors()                 const {return fNSensors;}
+  Int_t              GetNLadders()                 const {return fNLadders;}
+  Int_t              GetNSensInLadder()            const {return fNSensInLadder;}
   Double_t           GetRMin()                     const {return fRMin;}
   Double_t           GetRMax()                     const {return fRMax;}
+  Double_t           GetDR()                       const {return fRMax-fRMin;}
   Double_t           GetR()                        const {return fR;}
+  Double_t           GetR(Int_t dir)               const {return dir==0 ? fR : (dir<0 ? fRMin : fRMax);}
+  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);}
+  Bool_t             GetOwnsClusterArray()         const {return TestBit(kOwnsClusterArray);}
   //
   void               SetID(Int_t i)                      {SetUniqueID(i);} 
   void               SetActiveID(Int_t i)                {fActiveID = i;} 
   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               SetOwnsClusterArray(Bool_t v=kTRUE) {SetBit(kOwnsClusterArray,v);}
+  void               SetMaxStep(Double_t st)             {fMaxStep = st>0 ? st : 0.1;}
   //
-  AliITSURecoSens*   GetSensor(Int_t i)            const {return (AliITSURecoSens*)fSensors.UncheckedAt(i);}
+  AliITSURecoSens*   GetSensor(Int_t i)            const {return i<0 ? 0:(AliITSURecoSens*)fSensors[i];}
   AliITSURecoSens*   GetSensor(Int_t ld,Int_t is)  const {return GetSensor(ld*fNSensInLadder+is);}
-  void               AddSensor(const AliITSURecoSens* mod); 
+  AliITSURecoSens*   GetSensorFromID(Int_t i)      const;
+  TClonesArray*      GetClusters()                 const {return (TClonesArray*)fClusters;}
+  TClonesArray**     GetClustersAddress()                {return (TClonesArray**)&fClusters;}  
+  Int_t              GetNClusters()                const {return fClusters ? fClusters->GetEntriesFast() : 0;}
+  AliCluster*        GetCluster(Int_t icl)         const {return (AliCluster*)fClusters->UncheckedAt(icl);}
+  void               SetClusters(TClonesArray* cl)       {fClusters = cl;}
   //
-  Int_t              FindSensors(const double* impPar, AliITSURecoSens **sensors);
+  //  Int_t              FindSensors(const double* impPar, AliITSURecoSens *sensors[AliITSURecoSens::kNNeighbors], int mcLab=-1);
+  Int_t              FindSensors(const double* impPar, AliITSURecoSens *sensors[AliITSURecoSens::kNNeighbors]);
   //
   virtual void       Print(Option_t* option = "")  const;
-
+  virtual Bool_t     IsSortable()                  const {return kTRUE;}
+  virtual Bool_t     IsEqual(const TObject* obj)   const;
+  virtual Int_t      Compare(const TObject* obj)   const;
+  //
+ protected:
+  void               Build();
+  //
  protected:
   Int_t              fActiveID;  // ID within active layers
   Int_t              fNSensors;  // N of modules
@@ -66,9 +95,10 @@ class AliITSURecoLayer : public TNamed
   Double_t           fPhiOffs;   // offset in phi for 1st ladder
   Double_t           fSensDZInv; // inverse mean sensor Z span
   Double_t           fDPhiLadInv;// inverse mean ladder dphi
-  TObjArray          fSensors;   // sensors
+  Double_t           fMaxStep;   // max step in tracking X allowed within layer
+  AliITSURecoSens**  fSensors;   // sensors
   AliITSUGeomTGeo*   fITSGeom;   // geometry interface
-  const AliITSsegmentation* fkSegm;     // layer segmentation
+  TClonesArray*      fClusters;  // clusters of the layer
   //
  private:
   AliITSURecoLayer(const AliITSURecoLayer &source);