1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
5 // $MpId: AliMpSlat.h,v 1.2 2005/09/19 19:01:09 ivana Exp $
9 /// \brief A slat (building block of stations 3, 4 and 5)
11 /// Author: Laurent Aphecetche
23 # include "AliMpPad.h"
26 #ifndef ALI_MP_V_SEGMENTATION_H
27 # include "AliMpVSegmentation.h"
30 #ifndef ALI_MP_PLANE_TYPE_H
31 # include "AliMpPlaneType.h"
34 #include "AliMpContainers.h"
39 # include "AliMpExMap.h"
40 # include "TObjArray.h"
46 class AliMpMotifPosition;
50 class AliMpSlat : public TObject
57 typedef UInt_t Size_t;
61 AliMpSlat(const char* id, AliMpPlaneType bendingOrNonBending);
64 TVector2 Dimensions() const;
65 TVector2 Position() const;
67 const char* GetName() const;
69 const char* GetID() const;
71 void Add(AliMpPCB* pcbType, const TArrayI& manuList);
76 /// Find the PCB containing the pad at location (ix,any iy).
77 AliMpPCB* FindPCB(Int_t ix) const;
79 /** Find the index of the PCB containing the pad at location ix.
80 Should not be needed except to comply with Sector(), Dpx(), Dpy()
81 interface of old AliMUONVGeometrySegmentation.
82 FIXME: Remove me when VGeometrySegmentation dies at last.
84 Int_t FindPCBIndex(Int_t ix) const;
86 /// Find the PCB containing location (x,y).
87 AliMpPCB* FindPCB(Double_t x, Double_t y) const;
89 /** Find the index of the PCB containing the pad at location (x,y).
90 Should not be needed except to comply with Sector(), Dpx(), Dpy()
91 interface of old AliMUONVGeometrySegmentation.
92 FIXME: Remove me when VGeometrySegmentation dies at last.
94 Int_t FindPCBIndex(Double_t x, Double_t y) const;
96 /// Returns the i-th PCB of this slat.
97 AliMpPCB* GetPCB(Size_t i) const;
99 /// Returns the MotifPosition containing location (x,y).
100 AliMpMotifPosition* FindMotifPosition(Double_t x, Double_t y) const;
102 /// Returns the MotifPosition which id is manuid.
103 AliMpMotifPosition* FindMotifPosition(Int_t manuid) const;
105 /// Returns the MotifPosition containing the pad located at (ix,iy).
106 AliMpMotifPosition* FindMotifPosition(Int_t ix, Int_t iy) const;
108 /// Return the ids of the electronic cards (either manu or local board).
109 void GetAllElectronicCardNumbers(TArrayI& ecn) const;
111 /** Returns the max. number of pads in the x-direction contained in this slat.
112 This is a max only as for e.g. non-bending slats, the y-dimension depends
115 Int_t GetMaxNofPadsY() const;
117 /// Return the number of electronic cards (either manu or local board).
118 Int_t GetNofElectronicCards() const;
120 /// Returns the number of pads in the x-direction contained in this slat.
121 Int_t GetNofPadsX() const;
123 /// Returns the number of PCBs of this slat.
124 Size_t GetSize() const;
126 void Print(Option_t* option="") const;
128 /** This is normally only used by triggerSlats, as for ST345 slats,
129 the position is DX(),DY() simply.
131 void ForcePosition(const TVector2& pos);
135 AliMpPlaneType fPlaneType;
141 TObjArray fPCBs; // array of AliMpPCB*
142 mutable AliMpExMap fManuMap; // map of int to AliMpMotifPosition*
144 std::vector<AliMpPCB*> fPCBs;
145 std::map<int,AliMpMotifPosition*> fManuMap;
149 ClassDef(AliMpSlat,1) // A slat for stations 3,4,5