1 #ifndef ALIFMDSTRIPINDEX_H
2 #define ALIFMDSTRIPINDEX_H
3 /**************************************************************************
4 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * Author: The ALICE Off-line Project. *
7 * Contributors are mentioned in the code where appropriate. *
9 * Permission to use, copy, modify and distribute this software and its *
10 * documentation strictly for non-commercial purposes is hereby granted *
11 * without fee, provided that the above copyright notice appears in all *
12 * copies and that both the copyright notice and this permission notice *
13 * appear in the supporting documentation. The authors make no claims *
14 * about the suitability of this software for any purpose. It is *
15 * provided "as is" without express or implied warranty. *
16 **************************************************************************/
18 // Struct to encode a strip address into one integer
19 // developed by Christian Holm Christensen (cholm@nbi.dk).
21 // The functions are static to ensure applicability from
22 // anywhere. This is needed to smoothly store strip addresses in track
25 // Added by Hans H. Dalsgaard (hans.dalsgaard@cern.ch)
28 class AliFMDStripIndex
48 virtual ~AliFMDStripIndex() {}
50 * Pack an identifier from detector coordinates
57 * @return Packed identifier
59 static UInt_t Pack(UShort_t det, Char_t rng, UShort_t sec, UShort_t str)
61 UInt_t irg = (rng == 'I' || rng == 'i' ? 0 : 1);
62 UInt_t id = (((str & 0x1FF) << 0) |
63 ((sec & 0x03F) << 9) |
64 ((irg & 0x001) << 16) |
65 ((det & 0x003) << 17));
66 return (id & kIdMask);
69 * Unpack an identifier to detector coordinates
71 * @param id Identifier to unpack
72 * @param det On return, the detector
73 * @param rng On return, the ring
74 * @param sec On return, the sector
75 * @param str On return, the strip
77 static void Unpack(UInt_t id,
78 UShort_t& det, Char_t& rng, UShort_t& sec, UShort_t& str)
80 UInt_t tmp = (kIdMask & id);
81 str = ((tmp >> 0) & 0x1FF);
82 sec = ((tmp >> 9) & 0x03F);
83 rng = ((tmp >> 16) & 0x001) ? 'O' : 'I';
84 det = ((tmp >> 17) & 0x003);
86 ClassDef(AliFMDStripIndex,1)