ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$
// $MpId: AliMpPadRow.cxx,v 1.8 2006/05/24 13:58:46 ivana Exp $
// Category: sector

//-----------------------------------------------------------------------------
// Class AliMpPadRow
// ------------------
// Class describing a pad row composed of the pad row segments.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpPadRow.h"
#include "AliMpPadRowLSegment.h"
#include "AliMpPadRowRSegment.h"

#include "AliLog.h"

#include <Riostream.h>

using std::endl;
/// \cond CLASSIMP
ClassImp(AliMpPadRow)
/// \endcond

//_____________________________________________________________________________
AliMpPadRow::AliMpPadRow(AliMp::XDirection direction) 
  : TObject(),
    fDirection(direction), 
    fID(0),
    fOffsetX(0),
    fSegments() 
{
/// Standard constructor
}

//_____________________________________________________________________________
AliMpPadRow::AliMpPadRow() 
  : TObject(),
    fDirection(AliMp::kLeft), 
    fID(0),
    fOffsetX(0),
    fSegments() 
{
/// Default constructor
}

//_____________________________________________________________________________
AliMpPadRow::~AliMpPadRow() 
{
/// Destructor  

  for (Int_t i=0; i<GetNofPadRowSegments() ; i++)
    delete fSegments[i];
}

//
// private methods
//

//_____________________________________________________________________________
Double_t AliMpPadRow::CurrentBorderX() const
{
/// Return the left/right x border 
/// (depending on the direction which the row segments are filled in).

  if (GetNofPadRowSegments() == 0)
      return fOffsetX;
  else 
    if (fDirection == AliMp::kLeft)
      return GetPadRowSegment(GetNofPadRowSegments()-1)->LeftBorderX();
    else  
      return GetPadRowSegment(GetNofPadRowSegments()-1)->RightBorderX();
}

//
// public methods
//

//_____________________________________________________________________________
AliMpVPadRowSegment* 
AliMpPadRow::AddPadRowSegment(AliMpMotif* motif, Int_t motifPositionId,
                              Int_t nofPads)
{
/// Add a pad row segment.

  AliMpVPadRowSegment* padRowSegment = 0;

  if (fDirection == AliMp::kLeft) {
    padRowSegment 
      = new AliMpPadRowLSegment(this, motif, motifPositionId, nofPads);
  }    
  else  {
    padRowSegment 
      = new AliMpPadRowRSegment(this, motif, motifPositionId, nofPads);
  }     

  // Set pad row segment offset
  padRowSegment->SetOffsetX(CurrentBorderX());

  // Adds the pad row segment
  fSegments.Add(padRowSegment);
  
  return padRowSegment;
}  
  
//_____________________________________________________________________________
AliMpVPadRowSegment* AliMpPadRow::FindPadRowSegment(Double_t x) const
{
/// Find the row segment for the specified x position;
/// return 0 if no row segment is found.

  for (Int_t i=0; i<GetNofPadRowSegments(); i++) {
    AliMpVPadRowSegment* rs = GetPadRowSegment(i);
    if (x >= rs->LeftBorderX() && x <= rs->RightBorderX())
      return rs;
  }
  
  return 0;    
}    

//_____________________________________________________________________________
Double_t  AliMpPadRow::HalfSizeY() const
{
/// Return the half size in y

  return GetPadRowSegment(0)->HalfSizeY();
}

//_____________________________________________________________________________
void  AliMpPadRow::SetID(Int_t id)
{
/// Set the ID.

  fID = id;
}    

//_____________________________________________________________________________
void  AliMpPadRow::SetOffsetX(Double_t offsetX)
{
/// Set the x offset.

  fOffsetX = offsetX;
}    

//_____________________________________________________________________________
Int_t AliMpPadRow::GetID() const 
{
/// Return the pad row ID.

  return fID;
}  

//_____________________________________________________________________________
Int_t AliMpPadRow::GetNofPadRowSegments() const 
{
/// Return the number of pad row segments.

  return fSegments.GetEntriesFast();
}  

//_____________________________________________________________________________
AliMpVPadRowSegment* AliMpPadRow::GetPadRowSegment(Int_t i) const 
{
/// Return the pad row segment with the specified number.

  if (i<0 || i>=GetNofPadRowSegments()) {
    AliWarningStream() << "Index outside range" << endl;
    return 0;
  }
  
  return (AliMpVPadRowSegment*)fSegments[i];  
}

//_____________________________________________________________________________
Int_t AliMpPadRow::GetNofPads() const 
{
/// Return the number of pads in this pad row.

  Int_t nofPads=0;
  for (Int_t i=0; i<GetNofPadRowSegments(); i++)
    nofPads += GetPadRowSegment(i)->GetNofPads();

  return nofPads;
}  

 AliMpPadRow.cxx:1
 AliMpPadRow.cxx:2
 AliMpPadRow.cxx:3
 AliMpPadRow.cxx:4
 AliMpPadRow.cxx:5
 AliMpPadRow.cxx:6
 AliMpPadRow.cxx:7
 AliMpPadRow.cxx:8
 AliMpPadRow.cxx:9
 AliMpPadRow.cxx:10
 AliMpPadRow.cxx:11
 AliMpPadRow.cxx:12
 AliMpPadRow.cxx:13
 AliMpPadRow.cxx:14
 AliMpPadRow.cxx:15
 AliMpPadRow.cxx:16
 AliMpPadRow.cxx:17
 AliMpPadRow.cxx:18
 AliMpPadRow.cxx:19
 AliMpPadRow.cxx:20
 AliMpPadRow.cxx:21
 AliMpPadRow.cxx:22
 AliMpPadRow.cxx:23
 AliMpPadRow.cxx:24
 AliMpPadRow.cxx:25
 AliMpPadRow.cxx:26
 AliMpPadRow.cxx:27
 AliMpPadRow.cxx:28
 AliMpPadRow.cxx:29
 AliMpPadRow.cxx:30
 AliMpPadRow.cxx:31
 AliMpPadRow.cxx:32
 AliMpPadRow.cxx:33
 AliMpPadRow.cxx:34
 AliMpPadRow.cxx:35
 AliMpPadRow.cxx:36
 AliMpPadRow.cxx:37
 AliMpPadRow.cxx:38
 AliMpPadRow.cxx:39
 AliMpPadRow.cxx:40
 AliMpPadRow.cxx:41
 AliMpPadRow.cxx:42
 AliMpPadRow.cxx:43
 AliMpPadRow.cxx:44
 AliMpPadRow.cxx:45
 AliMpPadRow.cxx:46
 AliMpPadRow.cxx:47
 AliMpPadRow.cxx:48
 AliMpPadRow.cxx:49
 AliMpPadRow.cxx:50
 AliMpPadRow.cxx:51
 AliMpPadRow.cxx:52
 AliMpPadRow.cxx:53
 AliMpPadRow.cxx:54
 AliMpPadRow.cxx:55
 AliMpPadRow.cxx:56
 AliMpPadRow.cxx:57
 AliMpPadRow.cxx:58
 AliMpPadRow.cxx:59
 AliMpPadRow.cxx:60
 AliMpPadRow.cxx:61
 AliMpPadRow.cxx:62
 AliMpPadRow.cxx:63
 AliMpPadRow.cxx:64
 AliMpPadRow.cxx:65
 AliMpPadRow.cxx:66
 AliMpPadRow.cxx:67
 AliMpPadRow.cxx:68
 AliMpPadRow.cxx:69
 AliMpPadRow.cxx:70
 AliMpPadRow.cxx:71
 AliMpPadRow.cxx:72
 AliMpPadRow.cxx:73
 AliMpPadRow.cxx:74
 AliMpPadRow.cxx:75
 AliMpPadRow.cxx:76
 AliMpPadRow.cxx:77
 AliMpPadRow.cxx:78
 AliMpPadRow.cxx:79
 AliMpPadRow.cxx:80
 AliMpPadRow.cxx:81
 AliMpPadRow.cxx:82
 AliMpPadRow.cxx:83
 AliMpPadRow.cxx:84
 AliMpPadRow.cxx:85
 AliMpPadRow.cxx:86
 AliMpPadRow.cxx:87
 AliMpPadRow.cxx:88
 AliMpPadRow.cxx:89
 AliMpPadRow.cxx:90
 AliMpPadRow.cxx:91
 AliMpPadRow.cxx:92
 AliMpPadRow.cxx:93
 AliMpPadRow.cxx:94
 AliMpPadRow.cxx:95
 AliMpPadRow.cxx:96
 AliMpPadRow.cxx:97
 AliMpPadRow.cxx:98
 AliMpPadRow.cxx:99
 AliMpPadRow.cxx:100
 AliMpPadRow.cxx:101
 AliMpPadRow.cxx:102
 AliMpPadRow.cxx:103
 AliMpPadRow.cxx:104
 AliMpPadRow.cxx:105
 AliMpPadRow.cxx:106
 AliMpPadRow.cxx:107
 AliMpPadRow.cxx:108
 AliMpPadRow.cxx:109
 AliMpPadRow.cxx:110
 AliMpPadRow.cxx:111
 AliMpPadRow.cxx:112
 AliMpPadRow.cxx:113
 AliMpPadRow.cxx:114
 AliMpPadRow.cxx:115
 AliMpPadRow.cxx:116
 AliMpPadRow.cxx:117
 AliMpPadRow.cxx:118
 AliMpPadRow.cxx:119
 AliMpPadRow.cxx:120
 AliMpPadRow.cxx:121
 AliMpPadRow.cxx:122
 AliMpPadRow.cxx:123
 AliMpPadRow.cxx:124
 AliMpPadRow.cxx:125
 AliMpPadRow.cxx:126
 AliMpPadRow.cxx:127
 AliMpPadRow.cxx:128
 AliMpPadRow.cxx:129
 AliMpPadRow.cxx:130
 AliMpPadRow.cxx:131
 AliMpPadRow.cxx:132
 AliMpPadRow.cxx:133
 AliMpPadRow.cxx:134
 AliMpPadRow.cxx:135
 AliMpPadRow.cxx:136
 AliMpPadRow.cxx:137
 AliMpPadRow.cxx:138
 AliMpPadRow.cxx:139
 AliMpPadRow.cxx:140
 AliMpPadRow.cxx:141
 AliMpPadRow.cxx:142
 AliMpPadRow.cxx:143
 AliMpPadRow.cxx:144
 AliMpPadRow.cxx:145
 AliMpPadRow.cxx:146
 AliMpPadRow.cxx:147
 AliMpPadRow.cxx:148
 AliMpPadRow.cxx:149
 AliMpPadRow.cxx:150
 AliMpPadRow.cxx:151
 AliMpPadRow.cxx:152
 AliMpPadRow.cxx:153
 AliMpPadRow.cxx:154
 AliMpPadRow.cxx:155
 AliMpPadRow.cxx:156
 AliMpPadRow.cxx:157
 AliMpPadRow.cxx:158
 AliMpPadRow.cxx:159
 AliMpPadRow.cxx:160
 AliMpPadRow.cxx:161
 AliMpPadRow.cxx:162
 AliMpPadRow.cxx:163
 AliMpPadRow.cxx:164
 AliMpPadRow.cxx:165
 AliMpPadRow.cxx:166
 AliMpPadRow.cxx:167
 AliMpPadRow.cxx:168
 AliMpPadRow.cxx:169
 AliMpPadRow.cxx:170
 AliMpPadRow.cxx:171
 AliMpPadRow.cxx:172
 AliMpPadRow.cxx:173
 AliMpPadRow.cxx:174
 AliMpPadRow.cxx:175
 AliMpPadRow.cxx:176
 AliMpPadRow.cxx:177
 AliMpPadRow.cxx:178
 AliMpPadRow.cxx:179
 AliMpPadRow.cxx:180
 AliMpPadRow.cxx:181
 AliMpPadRow.cxx:182
 AliMpPadRow.cxx:183
 AliMpPadRow.cxx:184
 AliMpPadRow.cxx:185
 AliMpPadRow.cxx:186
 AliMpPadRow.cxx:187
 AliMpPadRow.cxx:188
 AliMpPadRow.cxx:189
 AliMpPadRow.cxx:190
 AliMpPadRow.cxx:191
 AliMpPadRow.cxx:192
 AliMpPadRow.cxx:193
 AliMpPadRow.cxx:194
 AliMpPadRow.cxx:195
 AliMpPadRow.cxx:196
 AliMpPadRow.cxx:197
 AliMpPadRow.cxx:198
 AliMpPadRow.cxx:199
 AliMpPadRow.cxx:200
 AliMpPadRow.cxx:201