}
//______________________________________________________________________________
-AliMpIntPair
+MpPair_t
AliMpVRowSegmentSpecial::FindRelativeLowIndicesOf(Int_t motifPositionId) const
{
/// Return the lowest pad indices where the motif of the given position ID
/// exist in this segment.
- AliMpIntPair ans(0,1000);
- AliMpIntPair ans0 = ans;
+ Int_t ans0Ix = 0;
+ Int_t ans0Iy = 1000;
+ Int_t ansIx = 0;
+ Int_t ansIy = 1000;
+
Int_t maxNofPadsX=0;
for (Int_t i=0; i<GetNofPadRows(); i++) {
AliMpPadRow* padRow = GetPadRow(i);
Int_t nofPadsX=0;
- for (Int_t j=0; j<padRow->GetNofPadRowSegments(); j++) {
+ for ( Int_t j=0; j<padRow->GetNofPadRowSegments(); j++ ) {
AliMpVPadRowSegment* padRowSegment = padRow->GetPadRowSegment(j);
nofPadsX += padRowSegment->GetNofPads();
if (padRowSegment->GetMotifPositionId() == motifPositionId) {
- if (ans.GetFirst() < nofPadsX) ans.SetFirst(nofPadsX);
- if (ans.GetSecond()>i) ans.SetSecond(i);
- // ans.First = max (nof pads of this pos ID)
- // ans.Second = min of pad row number
+ if ( ansIx < nofPadsX ) ansIx = nofPadsX;
+ if ( ansIy >i ) ansIy = i;
+ // ansIx = max (nof pads of this pos ID)
+ // ansIy = min of pad row number
}
}
- if (nofPadsX > maxNofPadsX) maxNofPadsX = nofPadsX;
+ if ( nofPadsX > maxNofPadsX ) maxNofPadsX = nofPadsX;
}
- if (ans == ans0) return AliMpIntPair::Invalid();
+ if ( ansIx == ans0Ix && ansIy == ans0Iy ) return -1;
- return AliMpIntPair(maxNofPadsX-ans.GetFirst(), ans.GetSecond());
+ return AliMp::Pair(maxNofPadsX-ansIx, ansIy);
}
//______________________________________________________________________________
}
//______________________________________________________________________________
-AliMpVMotif* AliMpVRowSegmentSpecial::FindMotif(const TVector2& position) const
+AliMpVMotif* AliMpVRowSegmentSpecial::FindMotif(Double_t x, Double_t y) const
{
/// Return the motif of this row;
- AliMpPadRow* padRow
- = FindPadRow(position.Y());
+ AliMpPadRow* padRow = FindPadRow(y);
- if (!padRow) return 0;
+ if ( ! padRow ) return 0;
- AliMpVPadRowSegment* padRowSegment
- = padRow->FindPadRowSegment(position.X());
+ AliMpVPadRowSegment* padRowSegment = padRow->FindPadRowSegment(x);
- if (!padRowSegment) return 0;
+ if (! padRowSegment ) return 0;
return padRowSegment->GetMotif();
}
//______________________________________________________________________________
-Int_t AliMpVRowSegmentSpecial::FindMotifPositionId(const TVector2& position) const
+Int_t AliMpVRowSegmentSpecial::FindMotifPositionId(Double_t x, Double_t y) const
{
/// Return the motif position identified for the given
/// geometric position.
- AliMpPadRow* padRow
- = FindPadRow(position.Y());
+ AliMpPadRow* padRow = FindPadRow(y);
- if (!padRow) return 0;
+ if ( ! padRow ) return 0;
- AliMpVPadRowSegment* padRowSegment
- = padRow->FindPadRowSegment(position.X());
+ AliMpVPadRowSegment* padRowSegment = padRow->FindPadRowSegment(x);
- if (!padRowSegment) return 0;
+ if ( ! padRowSegment ) return 0;
return padRowSegment->GetMotifPositionId();
}
}
//______________________________________________________________________________
-TVector2 AliMpVRowSegmentSpecial::MotifCenter(Int_t motifPositionId) const
+void AliMpVRowSegmentSpecial::MotifCenter(Int_t motifPositionId,
+ Double_t& x, Double_t& y) const
{
/// Return the coordinates of the motif specified with
/// the given position identifier.
// Try to get the motif position from the motif map first
AliMpMotifPosition* motifPosition
= GetRow()->GetMotifMap()->FindMotifPosition(motifPositionId);
- if (motifPosition) return motifPosition->Position();
-
- // Use slow method otherwise
- return MotifCenterSlow(motifPositionId);
+
+ if (motifPosition) {
+ x = motifPosition->GetPositionX(),
+ y = motifPosition->GetPositionY();
+ }
+ else {
+ MotifCenterSlow(motifPositionId, x, y);
+ }
}
//______________________________________________________________________________
-TVector2 AliMpVRowSegmentSpecial::Dimensions() const
+Double_t AliMpVRowSegmentSpecial::GetDimensionX() const
{
/// Return the halflengths in x, y of the row segment rectangular envelope.
Double_t x = 0.;
- Double_t y = 0.;
for (Int_t i=0; i<GetNofPadRows(); i++) {
AliMpPadRow* padRow = GetPadRow(i);
- // Add all pad rows y halfsizes
- y += padRow->HalfSizeY();
-
// Find the biggest pad rows x halfsize
Double_t xx
= (padRow->GetPadRowSegment(0)->RightBorderX() -
if (xx > x) x = xx;
}
- return TVector2(x, y);
+ return x;
+}
+
+//______________________________________________________________________________
+Double_t AliMpVRowSegmentSpecial::GetDimensionY() const
+{
+/// Return the halflengths in x, y of the row segment rectangular envelope.
+
+ Double_t y = 0.;
+ for (Int_t i=0; i<GetNofPadRows(); i++) {
+ AliMpPadRow* padRow = GetPadRow(i);
+
+ // Add all pad rows y halfsizes
+ y += padRow->HalfSizeY();
+ }
+
+ return y;
}
//______________________________________________________________________________