1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 // $MpId: AliMpPadRow.cxx,v 1.8 2006/05/24 13:58:46 ivana Exp $
20 //-----------------------------------------------------------------------------
23 // Class describing a pad row composed of the pad row segments.
24 // Included in AliRoot: 2003/05/02
25 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
26 //-----------------------------------------------------------------------------
28 #include "AliMpPadRow.h"
29 #include "AliMpPadRowLSegment.h"
30 #include "AliMpPadRowRSegment.h"
34 #include <Riostream.h>
41 //_____________________________________________________________________________
42 AliMpPadRow::AliMpPadRow(AliMp::XDirection direction)
44 fDirection(direction),
49 /// Standard constructor
52 //_____________________________________________________________________________
53 AliMpPadRow::AliMpPadRow()
55 fDirection(AliMp::kLeft),
60 /// Default constructor
63 //_____________________________________________________________________________
64 AliMpPadRow::~AliMpPadRow()
68 for (Int_t i=0; i<GetNofPadRowSegments() ; i++)
76 //_____________________________________________________________________________
77 Double_t AliMpPadRow::CurrentBorderX() const
79 /// Return the left/right x border
80 /// (depending on the direction which the row segments are filled in).
82 if (GetNofPadRowSegments() == 0)
85 if (fDirection == AliMp::kLeft)
86 return GetPadRowSegment(GetNofPadRowSegments()-1)->LeftBorderX();
88 return GetPadRowSegment(GetNofPadRowSegments()-1)->RightBorderX();
95 //_____________________________________________________________________________
97 AliMpPadRow::AddPadRowSegment(AliMpMotif* motif, Int_t motifPositionId,
100 /// Add a pad row segment.
102 AliMpVPadRowSegment* padRowSegment = 0;
104 if (fDirection == AliMp::kLeft) {
106 = new AliMpPadRowLSegment(this, motif, motifPositionId, nofPads);
110 = new AliMpPadRowRSegment(this, motif, motifPositionId, nofPads);
113 // Set pad row segment offset
114 padRowSegment->SetOffsetX(CurrentBorderX());
116 // Adds the pad row segment
117 fSegments.Add(padRowSegment);
119 return padRowSegment;
122 //_____________________________________________________________________________
123 AliMpVPadRowSegment* AliMpPadRow::FindPadRowSegment(Double_t x) const
125 /// Find the row segment for the specified x position;
126 /// return 0 if no row segment is found.
128 for (Int_t i=0; i<GetNofPadRowSegments(); i++) {
129 AliMpVPadRowSegment* rs = GetPadRowSegment(i);
130 if (x >= rs->LeftBorderX() && x <= rs->RightBorderX())
137 //_____________________________________________________________________________
138 Double_t AliMpPadRow::HalfSizeY() const
140 /// Return the half size in y
142 return GetPadRowSegment(0)->HalfSizeY();
145 //_____________________________________________________________________________
146 void AliMpPadRow::SetID(Int_t id)
153 //_____________________________________________________________________________
154 void AliMpPadRow::SetOffsetX(Double_t offsetX)
156 /// Set the x offset.
161 //_____________________________________________________________________________
162 Int_t AliMpPadRow::GetID() const
164 /// Return the pad row ID.
169 //_____________________________________________________________________________
170 Int_t AliMpPadRow::GetNofPadRowSegments() const
172 /// Return the number of pad row segments.
174 return fSegments.GetEntriesFast();
177 //_____________________________________________________________________________
178 AliMpVPadRowSegment* AliMpPadRow::GetPadRowSegment(Int_t i) const
180 /// Return the pad row segment with the specified number.
182 if (i<0 || i>=GetNofPadRowSegments()) {
183 AliWarningStream() << "Index outside range" << endl;
187 return (AliMpVPadRowSegment*)fSegments[i];
190 //_____________________________________________________________________________
191 Int_t AliMpPadRow::GetNofPads() const
193 /// Return the number of pads in this pad row.
196 for (Int_t i=0; i<GetNofPadRowSegments(); i++)
197 nofPads += GetPadRowSegment(i)->GetNofPads();