]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONTriggerSegmentation.h
- All mapping enums within namespace (AliMp).
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerSegmentation.h
1 #ifndef ALIMUONTRIGGERSEGMENTATION_H
2 #define ALIMUONTRIGGERSEGMENTATION_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 /// \ingroup base
9 /// \class AliMUONTriggerSegmentation
10 /// \brief Segmentation for trigger modules
11 ///
12 /// New implementation of AliMUONVGeometryDESegmentation, based on  
13 /// mapping package.
14
15 #ifndef ALIMUONVGEOMETRYDESEGMENTATION_H
16 #include "AliMUONVGeometryDESegmentation.h"
17 #endif
18
19 #ifndef ALI_MP_PLANE_TYPE_H
20 #include "AliMpPlaneType.h"
21 #endif
22
23 #ifndef ALI_MP_PAD_H
24 #include "AliMpPad.h"
25 #endif
26
27 class AliMpTrigger;
28 class AliMpTriggerSegmentation;
29
30 class AliMUONTriggerSegmentation : public AliMUONVGeometryDESegmentation 
31 {
32  public:
33
34   AliMUONTriggerSegmentation();
35   AliMUONTriggerSegmentation(AliMpVSegmentation* segmentation,
36                                Int_t detElemId, AliMp::PlaneType bendingOrNonBending);
37   virtual ~AliMUONTriggerSegmentation();
38       
39   /// Distance between 1 pad and a position
40   virtual Float_t Distance2AndOffset(Int_t /*iX*/, Int_t /*iY*/, 
41                                      Float_t /*X*/, Float_t /*Y*/, 
42                                      Int_t * /*dummy*/);
43   
44   virtual Float_t Dpx() const;
45   virtual Float_t Dpy() const;
46   virtual Float_t Dpx(Int_t sectorCode) const;
47   virtual Float_t Dpy(Int_t sectorCode) const;
48   
49   virtual void Draw(Option_t*/*opt*/ = "");
50   
51   void FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, 
52                 Float_t dx, Float_t dy);
53
54   virtual Bool_t HasPad(Float_t /*x*/, Float_t /*y*/, Float_t /*z*/);
55   virtual Bool_t HasPad(Int_t ix, Int_t iy);
56   
57   virtual AliMUONGeometryDirection GetDirection();
58   virtual const AliMpVSegmentation* GetMpSegmentation() const;
59
60   virtual Float_t GetAnod(Float_t /*xhit*/) const;
61
62   virtual void GetPadI(Float_t x ,Float_t y ,Int_t   &ix,Int_t &iy);
63   virtual void GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy);
64   virtual void GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y);
65   virtual void GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z);
66                   
67   virtual void Init(Int_t) {} ///< Not implemented
68   
69   virtual void IntegrationLimits(Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
70   
71   virtual Int_t ISector();
72   virtual Int_t Ix();
73   virtual Int_t Iy();
74   
75   Int_t LineNumber() const;
76   
77   virtual Int_t MorePads();
78  
79   virtual void Neighbours(Int_t iX, Int_t iY, Int_t* Nlist, 
80                           Int_t Xlist[10], Int_t Ylist[10]);
81   virtual void NextPad();
82     
83   virtual Int_t Npx() const;
84   virtual Int_t Npy() const;
85
86   void Print(Option_t* opt="") const;
87   
88   virtual void SetDAnod(Float_t /*D*/);
89
90   virtual Int_t Sector(Int_t ix, Int_t iy);
91   virtual void SetHit(Float_t xhit, Float_t yhit); 
92   virtual void SetHit(Float_t xhit, Float_t yhit, Float_t zhit);
93
94   virtual void SetPad(Int_t ix, Int_t iy);
95   virtual void SetPadSize(Float_t, Float_t);
96   
97   virtual void GetNParallelAndOffset(Int_t /*iX*/, Int_t /*iY*/, 
98                                      Int_t */*Nparallel*/, Int_t */*Offset*/);
99   virtual Int_t SigGenCond(Float_t /*x*/, Float_t /*y*/, Float_t /*z*/);
100   virtual void SigGenInit(Float_t /*x*/, Float_t /*y*/, Float_t /*z*/);
101   virtual void GiveTestPoints(Int_t &/*n*/, Float_t * /*x*/, Float_t */*y*/) const;
102   virtual void SetCorrFunc(Int_t /*dum*/, TF1* /*func*/);
103   virtual TF1* CorrFunc(Int_t) const;
104   virtual Int_t Sector(Float_t /*x*/, Float_t /*y*/);
105
106 public:
107
108     void GetPadLoc2Glo(Int_t ixLoc, Int_t iyLoc, Int_t& ixGlo, Int_t& iyGlo) const;
109     void GetPadGlo2Loc(Int_t ixLoc, Int_t iyLoc, Int_t& ixGlo, Int_t& iyGlo) const;
110     
111     void PC2LA(Int_t ixPC, Int_t iyPC, Int_t& ixLA, Int_t& iyLA) const;
112     void LA2PC(Int_t ixLA, Int_t iyLA, Int_t& ixPC, Int_t& iyPC) const;
113     
114     void IGlo2ILoc(Int_t ixGlo, Int_t iyGlo, Int_t& ixLA, Int_t& iyLA) const;
115     void ILoc2IGlo(Int_t ixLA, Int_t iyLA, Int_t& ixGlo, Int_t& iyGlo) const;
116     
117     Int_t ModuleColNum(Int_t ixGlo) const;
118     
119 protected:
120
121     AliMUONTriggerSegmentation(const AliMUONTriggerSegmentation& rhs);
122     AliMUONTriggerSegmentation& operator=(const AliMUONTriggerSegmentation& rhs);
123
124 private:
125     Int_t fDetElemId;          ///< det elem Id
126     AliMp::PlaneType fPlaneType; ///< plane type
127     const AliMpTrigger* fSlat; ///< slat
128     AliMpTriggerSegmentation* fSlatSegmentation; ///< mapping segmentation
129 //    AliMpVPadIterator* fPadIterator; //!
130     AliMpPad fCurrentPad; //!< FIXME: should not be needed, if we externalise the SetPad, SetHit, IntegrationLimits methods which have nothing to do here anyway, together with the iteration methods FirstPad, NextPad, MorePads, which have nothing to do here either.
131     Float_t fXhit;        //!< x-position of hit
132     Float_t fYhit;        //!< y-position of hit
133     Int_t fLineNumber;    ///< Line number of that detection element (from 1 to 9)
134     
135     ClassDef(AliMUONTriggerSegmentation,2) // Trigger segmentation
136 };
137 #endif
138
139
140
141
142
143