Updated comments for Doxygen - corrected warnings
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpPadRow.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 // $Id$
17 // $MpId: AliMpPadRow.cxx,v 1.8 2006/05/24 13:58:46 ivana Exp $
18 // Category: sector
19 //
20 // Class AliMpPadRow
21 // ------------------
22 // Class describing a pad row composed of the pad row segments.
23 // Included in AliRoot: 2003/05/02
24 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
25
26 #include "AliMpPadRow.h"
27 #include "AliMpPadRowLSegment.h"
28 #include "AliMpPadRowRSegment.h"
29
30 #include "AliLog.h"
31
32 #include <Riostream.h>
33
34 /// \cond CLASSIMP
35 ClassImp(AliMpPadRow)
36 /// \endcond
37
38 //_____________________________________________________________________________
39 AliMpPadRow::AliMpPadRow(AliMpXDirection direction) 
40   : TObject(),
41     fDirection(direction), 
42     fID(0) 
43 {
44 /// Standard constructor
45 }
46
47 //_____________________________________________________________________________
48 AliMpPadRow::AliMpPadRow() 
49   : TObject(),
50     fDirection(kLeft), 
51     fID(0)
52 {
53 /// Default constructor
54 }
55
56 //_____________________________________________________________________________
57 AliMpPadRow::~AliMpPadRow() 
58 {
59 /// Destructor  
60
61   for (Int_t i=0; i<GetNofPadRowSegments() ; i++)
62     delete fSegments[i];
63 }
64
65 //
66 // private methods
67 //
68
69 //_____________________________________________________________________________
70 Double_t AliMpPadRow::CurrentBorderX() const
71 {
72 /// Return the left/right x border 
73 /// (depending on the direction which the row segments are filled in).
74
75   if (GetNofPadRowSegments() == 0)
76       return fOffsetX;
77   else 
78     if (fDirection == kLeft)
79       return GetPadRowSegment(GetNofPadRowSegments()-1)->LeftBorderX();
80     else  
81       return GetPadRowSegment(GetNofPadRowSegments()-1)->RightBorderX();
82 }
83
84 //
85 // public methods
86 //
87
88 //_____________________________________________________________________________
89 AliMpVPadRowSegment* 
90 AliMpPadRow::AddPadRowSegment(AliMpMotif* motif, Int_t motifPositionId,
91                               Int_t nofPads)
92 {
93 /// Add a pad row segment.
94
95   AliMpVPadRowSegment* padRowSegment = 0;
96
97   if (fDirection == kLeft) {
98     padRowSegment 
99       = new AliMpPadRowLSegment(this, motif, motifPositionId, nofPads);
100   }    
101   else  {
102     padRowSegment 
103       = new AliMpPadRowRSegment(this, motif, motifPositionId, nofPads);
104   }     
105
106   // Set pad row segment offset
107   padRowSegment->SetOffsetX(CurrentBorderX());
108
109   // Adds the pad row segment
110 #ifdef WITH_STL
111   fSegments.push_back(padRowSegment);
112 #endif
113
114 #ifdef WITH_ROOT
115   fSegments.Add(padRowSegment);
116 #endif
117   
118   return padRowSegment;
119 }  
120   
121 //_____________________________________________________________________________
122 AliMpVPadRowSegment* AliMpPadRow::FindPadRowSegment(Double_t x) const
123 {
124 /// Find the row segment for the specified x position;
125 /// return 0 if no row segment is found.
126
127   for (Int_t i=0; i<GetNofPadRowSegments(); i++) {
128     AliMpVPadRowSegment* rs = GetPadRowSegment(i);
129     if (x >= rs->LeftBorderX() && x <= rs->RightBorderX())
130       return rs;
131   }
132   
133   return 0;    
134 }    
135
136 //_____________________________________________________________________________
137 Double_t  AliMpPadRow::HalfSizeY() const
138 {
139 /// Return the half size in y
140
141   return GetPadRowSegment(0)->HalfSizeY();
142 }
143
144 //_____________________________________________________________________________
145 void  AliMpPadRow::SetID(Int_t id)
146 {
147 /// Set the ID.
148
149   fID = id;
150 }    
151
152 //_____________________________________________________________________________
153 void  AliMpPadRow::SetOffsetX(Double_t offsetX)
154 {
155 /// Set the x offset.
156
157   fOffsetX = offsetX;
158 }    
159
160 //_____________________________________________________________________________
161 Int_t AliMpPadRow::GetID() const 
162 {
163 /// Return the pad row ID.
164
165   return fID;
166 }  
167
168 //_____________________________________________________________________________
169 Int_t AliMpPadRow::GetNofPadRowSegments() const 
170 {
171 /// Return the number of pad row segments.
172
173 #ifdef WITH_STL
174   return fSegments.size();
175 #endif
176
177 #ifdef WITH_ROOT
178   return fSegments.GetEntriesFast();
179 #endif
180 }  
181
182 //_____________________________________________________________________________
183 AliMpVPadRowSegment* AliMpPadRow::GetPadRowSegment(Int_t i) const 
184 {
185 /// Return the pad row segment with the specified number.
186
187   if (i<0 || i>=GetNofPadRowSegments()) {
188     AliWarningStream() << "Index outside range" << endl;
189     return 0;
190   }
191   
192 #ifdef WITH_STL
193   return fSegments[i];  
194 #endif
195
196 #ifdef WITH_ROOT
197   return (AliMpVPadRowSegment*)fSegments[i];  
198 #endif
199 }
200
201 //_____________________________________________________________________________
202 Int_t AliMpPadRow::GetNofPads() const 
203 {
204 /// Return the number of pads in this pad row.
205
206   Int_t nofPads=0;
207   for (Int_t i=0; i<GetNofPadRowSegments(); i++)
208     nofPads += GetPadRowSegment(i)->GetNofPads();
209
210   return nofPads;
211 }  
212