]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/mapping/AliMpMotif.cxx
New class - the factory for building mapping segmentations
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpMotif.cxx
CommitLineData
dee1d5f1 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
5f91c9e8 16// $Id$
dee1d5f1 17// $MpId: AliMpMotif.cxx,v 1.7 2005/08/26 15:43:36 ivana Exp $
5f91c9e8 18// Category: motif
19//
20// Class AliMpMotif
21// ----------------
22// Class that defines a motif with its unique ID
23// and the motif type.
dbe945cc 24// Included in AliRoot: 2003/05/02
5f91c9e8 25// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
26
27#include "AliMpMotif.h"
28#include "AliMpMotifType.h"
29#include "AliMpIntPair.h"
30
31ClassImp(AliMpMotif)
32
33//_____________________________________________________________________________
34AliMpMotif::AliMpMotif()
35 : AliMpVMotif(),
36 fPadDimensions(TVector2(0.,0.))
37{
dee1d5f1 38 /// Default constructor
5f91c9e8 39}
40
41//_____________________________________________________________________________
42AliMpMotif::AliMpMotif(const TString &id, AliMpMotifType *motifType,
43 const TVector2& padDimension)
44 : AliMpVMotif(id,motifType),
45 fPadDimensions(padDimension)
46{
dee1d5f1 47 /// Standard constructor. \n
48 /// The dimension in a given direction is calculated by
49 /// multiplying the total dimension by the number of pads
5f91c9e8 50
51}
2998a151 52//_____________________________________________________________________________
53AliMpMotif::~AliMpMotif()
54{
dee1d5f1 55 /// Destructor
2998a151 56}
57
5f91c9e8 58
59//_____________________________________________________________________________
60TVector2 AliMpMotif::GetPadDimensions(const AliMpIntPair& localIndices) const
61{
dee1d5f1 62 /// Give the dimension of the specified pad in the motif
5f91c9e8 63
64 if (GetMotifType()->HasPad(localIndices))
65 return fPadDimensions;
66 else {
67 Warning("GetPadDimensions","indices outside range");
68 return TVector2(0.,0.);
69 }
70}
71
72//_____________________________________________________________________________
73TVector2 AliMpMotif::Dimensions() const
74{
dee1d5f1 75 /// Give the dimension of the motif
5f91c9e8 76
77 return TVector2(GetMotifType()->GetNofPadsX()*fPadDimensions.X(),
78 GetMotifType()->GetNofPadsY()*fPadDimensions.Y());
79}
80
81//_____________________________________________________________________________
82TVector2 AliMpMotif::PadPositionLocal(const AliMpIntPair& localIndices) const
83{
dee1d5f1 84 /// Give the local position of the pad number (ix,iy)
85 /// (0,0 is the center of the motif)
5f91c9e8 86
87 TVector2 dim=Dimensions();
88 return TVector2((2.*localIndices.GetFirst()+1.)*fPadDimensions.X()-dim.X(),
89 (2.*localIndices.GetSecond()+1.)*fPadDimensions.Y()-dim.Y());
90}
91
92//_____________________________________________________________________________
93AliMpIntPair AliMpMotif::PadIndicesLocal(const TVector2& localPos) const
94{
dee1d5f1 95 /// Return the pad indices from a given local position
96 /// or (-1,-1) if this position doesn't correspond to any valid
97 /// connection
5f91c9e8 98
99 TVector2 lowerLeft = localPos+Dimensions();
dee1d5f1 100
101 if ( lowerLeft.X() < 0 || lowerLeft.Y() < 0 )
102 {
103 return AliMpIntPair::Invalid();
104 }
105
5f91c9e8 106 Int_t ix = (Int_t)(lowerLeft.X()/(2.*fPadDimensions.X()));
107 Int_t iy = (Int_t)(lowerLeft.Y()/(2.*fPadDimensions.Y()));
108
109 if (!GetMotifType()->FindConnectionByLocalIndices(AliMpIntPair(ix,iy))) {
110 //Warning("PadIndicesLocal","Position outside motif");
111 return AliMpIntPair::Invalid();
112 }
113 return AliMpIntPair(ix,iy);
114}