Bug fix related to reconstruction of simulated data in raw format (E. Fragiacomo)
[u/mrichter/AliRoot.git] / ITS / AliITSRawStreamSSD.cxx
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
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 ///
20 /// This class provides access to ITS SSD digits in raw data.
21 //  Revised by Enrico Fragiacomo
22 //  Last update: 2007/09/06
23 ///
24 ///////////////////////////////////////////////////////////////////////////////
25
26 #include "Riostream.h"
27 #include "AliITSRawStreamSSD.h"
28 #include "AliRawReader.h"
29 #include "AliLog.h"
30
31 ClassImp(AliITSRawStreamSSD)
32   
33   
34   const Int_t AliITSRawStreamSSD::fgkDDLModuleMap[kDDLsNumber][kModulesPerDDL] = {
35
36     //DDL[32][]=   
37     { 1214,1215,1224,1225,1222,1223,1220,1221,1218,1219,1216,1217,
38       1192,1193,1202,1203,1200,1201,1198,1199,1196,1197,1194,1195,
39       1170,1171,1180,1181,1178,1179,1176,1177,1174,1175,1172,1173,
40       1148,1149,1158,1159,1156,1157,1154,1155,1152,1153,1150,1151,
41       2121,2122,2119,2120,2117,2118,2115,2116,2113,2114,2111,2112,
42       2096,2097,2094,2095,2092,2093,2090,2091,2088,2089,2086,2087,
43       2071,2072,2069,2070,2067,2068,2065,2066,2063,2064,2061,2062,
44       2046,2047,2044,2045,2042,2043,2040,2041,2038,2039,2036,2037,
45       2021,2022,2019,2020,2017,2018,2015,2016,2013,2014,2011,2012},
46     
47     //DDL[33][]=   
48     {1126,1127,1136,1137,1134,1135,1132,1133,1130,1131,1128,1129,
49      1104,1105,1114,1115,1112,1113,1110,1111,1108,1109,1106,1107,
50      1082,1083,1092,1093,1090,1091,1088,1089,1086,1087,1084,1085,
51      1060,1061,1070,1071,1068,1069,1066,1067,1064,1065,1062,1063,
52      1038,1039,1048,1049,1046,1047,1044,1045,1042,1043,1040,1041,
53      1996,1997,1994,1995,1992,1993,1990,1991,1988,1989,1986,1987,
54      1971,1972,1969,1970,1967,1968,1965,1966,1963,1964,1961,1962,
55      1946,1947,1944,1945,1942,1943,1940,1941,1938,1939,1936,1937,
56      1921,1922,1919,1920,1917,1918,1915,1916,1913,1914,1911,1912},
57     
58     //DDL[34][]=   
59     {1016,1017,1026,1027,1024,1025,1022,1023,1020,1021,1018,1019,
60       994, 995,1004,1005,1002,1003,1000,1001, 998, 999, 996, 997,
61       972, 973, 982, 983, 980, 981, 978, 979, 976, 977, 974, 975,
62       950, 951, 960, 961, 958, 959, 956, 957, 954, 955, 952, 953,
63      1896,1897,1894,1895,1892,1893,1890,1891,1888,1889,1886,1887,
64      1871,1872,1869,1870,1867,1868,1865,1866,1863,1864,1861,1862,
65      1846,1847,1844,1845,1842,1843,1840,1841,1838,1839,1836,1837,
66      1821,1822,1819,1820,1817,1818,1815,1816,1813,1814,1811,1812,
67      1796,1797,1794,1795,1792,1793,1790,1791,1788,1789,1786,1787},
68     
69     //DDL[35][]=   
70     { 928, 929, 938, 939, 936, 937, 934, 935, 932, 933, 930, 931,
71       906, 907, 916, 917, 914, 915, 912, 913, 910, 911, 908, 909,
72       884, 885, 894, 895, 892, 893, 890, 891, 888, 889, 886, 887,
73       862, 863, 872, 873, 870, 871, 868, 869, 866, 867, 864, 865,
74      1771,1772,1769,1770,1767,1768,1765,1766,1763,1764,1761,1762,
75      1746,1747,1744,1745,1742,1743,1740,1741,1738,1739,1736,1737,
76      1721,1722,1719,1720,1717,1718,1715,1716,1713,1714,1711,1712,
77      1696,1697,1694,1695,1692,1693,1690,1691,1688,1689,1686,1687,
78      1671,1672,1669,1670,1667,1668,1665,1666,1663,1664,1661,1662},
79     
80     //DDL[36][]=   
81     { 840, 841, 850, 851, 848, 849, 846, 847, 844, 845, 842, 843,
82       818, 819, 828, 829, 826, 827, 824, 825, 822, 823, 820, 821,
83       796, 797, 806, 807, 804, 805, 802, 803, 800, 801, 798, 799,
84       774, 775, 784, 785, 782, 783, 780, 781, 778, 779, 776, 777,
85      1646,1647,1644,1645,1642,1643,1640,1641,1638,1639,1636,1637,
86      1621,1622,1619,1620,1617,1618,1615,1616,1613,1614,1611,1612,
87      1596,1597,1594,1595,1592,1593,1590,1591,1588,1589,1586,1587,
88      1571,1572,1569,1570,1567,1568,1565,1566,1563,1564,1561,1562,
89      1546,1547,1544,1545,1542,1543,1540,1541,1538,1539,1536,1537},
90     
91     //DDL[37][]=   
92     { 752, 753, 762, 763, 760, 761, 758, 759, 756, 757, 754, 755,
93       730, 731, 740, 741, 738, 739, 736, 737, 734, 735, 732, 733,
94       708, 709, 718, 719, 716, 717, 714, 715, 712, 713, 710, 711,
95       686, 687, 696, 697, 694, 695, 692, 693, 690, 691, 688, 689,
96       664, 665, 674, 675, 672, 673, 670, 671, 668, 669, 666, 667,
97      1521,1522,1519,1520,1517,1518,1515,1516,1513,1514,1511,1512,
98      1496,1497,1494,1495,1492,1493,1490,1491,1488,1489,1486,1487,
99      1471,1472,1469,1470,1467,1468,1465,1466,1463,1464,1461,1462,
100      1446,1447,1444,1445,1442,1443,1440,1441,1438,1439,1436,1437},
101     
102     //DDL[38][]=   
103     { 642, 643, 652, 653, 650, 651, 648, 649, 646, 647, 644, 645,
104       620, 621, 630, 631, 628, 629, 626, 627, 624, 625, 622, 623,
105       598, 599, 608, 609, 606, 607, 604, 605, 602, 603, 600, 601,
106       576, 577, 586, 587, 584, 585, 582, 583, 580, 581, 578, 579,
107      1421,1422,1419,1420,1417,1418,1415,1416,1413,1414,1411,1412,
108      1396,1397,1394,1395,1392,1393,1390,1391,1388,1389,1386,1387,
109      1369,1371,1365,1367,1361,1363,1357,1359,1353,1355,1349,1351,
110      1346,1347,1344,1345,1342,1343,1340,1341,1338,1339,1336,1337,
111      1321,1322,1319,1320,1317,1318,1315,1316,1313,1314,1311,1312},
112     
113     //DDL[39][]=   
114     { 554, 555, 564, 565, 562, 563, 560, 561, 558, 559, 556, 557,
115       532, 533, 542, 543, 540, 541, 538, 539, 536, 537, 534, 535,
116       510, 511, 520, 521, 518, 519, 516, 517, 514, 515, 512, 513,
117      1236,1237,1246,1247,1244,1245,1242,1243,1240,1241,1238,1239,
118      1296,1297,1294,1295,1292,1293,1290,1291,1288,1289,1286,1287,
119      1271,1272,1269,1270,1267,1268,1265,1266,1263,1264,1261,1262,
120      2196,2197,2194,2195,2192,2193,2190,2191,2188,2189,2186,2187,
121      2171,2172,2169,2170,2167,2168,2165,2166,2163,2164,2161,2162,
122      2146,2147,2144,2145,2142,2143,2140,2141,2138,2139,2136,2137},
123     
124     //DDL[40][]=   
125     {2060,2110,1205,1204,1206,1207,1209,1208,1211,1210,1213,1212,
126        -1,2085,1183,1182,1184,1185,1187,1186,1189,1188,1191,1190,
127        -1,2010,1161,1160,1162,1163,1165,1164,1167,1166,1169,1168,
128        -1,2035,1139,1138,1140,1141,1143,1142,1145,1144,1147,1146,
129      2099,2098,2101,2100,2103,2102,2105,2104,2107,2106,2109,2108,
130      2074,2073,2076,2075,2078,2077,2080,2079,2082,2081,2084,2083,
131      2049,2048,2051,2050,2053,2052,2055,2054,2057,2056,2059,2058,
132      2024,2023,2026,2025,2028,2027,2030,2029,2032,2031,2034,2033,
133      1999,1998,2001,2000,2003,2002,2005,2004,2007,2006,2009,2008},
134     
135     //DDL[41][]=   
136     {  -1,1960,1117,1116,1118,1119,1121,1120,1123,1122,1125,1124,
137        -1,1985,1095,1094,1096,1097,1099,1098,1101,1100,1103,1102,
138        -1,1910,1073,1072,1074,1075,1077,1076,1079,1078,1081,1080,
139      1935,  -1,1051,1050,1052,1053,1055,1054,1057,1056,1059,1058,
140        -1,  -1,1029,1028,1030,1031,1033,1032,1035,1034,1037,1036,
141      1974,1973,1976,1975,1978,1977,1980,1979,1982,1981,1984,1983,
142      1949,1948,1951,1950,1953,1952,1955,1954,1957,1956,1959,1958,
143      1924,1923,1926,1925,1928,1927,1930,1929,1932,1931,1934,1933,
144      1899,1898,1901,1900,1903,1902,1905,1904,1907,1906,1909,1908},
145     
146     //DDL[42][]=   
147     {1835,1885,1007,1006,1008,1009,1011,1010,1013,1012,1015,1014,
148        -1,1860, 985, 984, 986, 987, 989, 988, 991, 990, 993, 992,
149        -1,1785, 963, 962, 964, 965, 967, 966, 969, 968, 971, 970,
150        -1,1810, 941, 940, 942, 943, 945, 944, 947, 946, 949, 948,
151      1874,1873,1876,1875,1878,1877,1880,1879,1882,1881,1884,1883,
152      1849,1848,1851,1850,1853,1852,1855,1854,1857,1856,1859,1858,
153      1824,1823,1826,1825,1828,1827,1830,1829,1832,1831,1834,1833,
154      1799,1798,1801,1800,1803,1802,1805,1804,1807,1806,1809,1808,
155      1774,1773,1776,1775,1778,1777,1780,1779,1782,1781,1784,1783},
156     
157     //DDL[43][]=   
158     {  -1,1735, 919, 918, 920, 921, 923, 922, 925, 924, 927, 926,
159        -1,1760, 897, 896, 898, 899, 901, 900, 903, 902, 905, 904,
160        -1,1685, 875, 874, 876, 877, 879, 878, 881, 880, 883, 882,
161      1710,1660, 853, 852, 854, 855, 857, 856, 859, 858, 861, 860,
162      1749,1748,1751,1750,1753,1752,1755,1754,1757,1756,1759,1758,
163      1724,1723,1726,1725,1728,1727,1730,1729,1732,1731,1734,1733,
164      1699,1698,1701,1700,1703,1702,1705,1704,1707,1706,1709,1708,
165      1674,1673,1676,1675,1678,1677,1680,1679,1682,1681,1684,1683,
166      1649,1648,1651,1650,1653,1652,1655,1654,1657,1656,1659,1658},
167     
168     //DDL[44][]=   
169     {1585,1635, 831, 830, 832, 833, 835, 834, 837, 836, 839, 838,
170        -1,1610, 809, 808, 810, 811, 813, 812, 815, 814, 817, 816,
171        -1,1535, 787, 786, 788, 789, 791, 790, 793, 792, 795, 794,
172        -1,1560, 765, 764, 766, 767, 769, 768, 771, 770, 773, 772,
173      1624,1623,1626,1625,1628,1627,1630,1629,1632,1631,1634,1633,
174      1599,1598,1601,1600,1603,1602,1605,1604,1607,1606,1609,1608,
175      1574,1573,1576,1575,1578,1577,1580,1579,1582,1581,1584,1583,
176      1549,1548,1551,1550,1553,1552,1555,1554,1557,1556,1559,1558,
177      1524,1523,1526,1525,1528,1527,1530,1529,1532,1531,1534,1533},
178     
179     //DDL[45][]=   
180     {  -1,1485, 743, 742, 744, 745, 747, 746, 749, 748, 751, 750,
181        -1,1510, 721, 720, 722, 723, 725, 724, 727, 726, 729, 728,
182        -1,1435, 699, 698, 700, 701, 703, 702, 705, 704, 707, 706,
183      1460,  -1, 677, 676, 678, 679, 681, 680, 683, 682, 685, 684,
184        -1,  -1, 655, 654, 656, 657, 659, 658, 661, 660, 663, 662,
185      1499,1498,1501,1500,1503,1502,1505,1504,1507,1506,1509,1508,
186      1474,1473,1476,1475,1478,1477,1480,1479,1482,1481,1484,1483,
187      1449,1448,1451,1450,1453,1452,1455,1454,1457,1456,1459,1458,
188      1424,1423,1426,1425,1428,1427,1430,1429,1432,1431,1434,1433},
189     
190     //DDL[46][]=   
191     {  -1,1410, 633, 632, 634, 635, 637, 636, 639, 638, 641, 640,
192        -1,1385, 611, 610, 612, 613, 615, 614, 617, 616, 619, 618,
193        -1,1310, 589, 588, 590, 591, 593, 592, 595, 594, 597, 596,
194        -1,1335, 567, 566, 568, 569, 571, 570, 573, 572, 575, 574,
195      1399,1398,1401,1400,1403,1402,1405,1404,1407,1406,1409,1408,
196      1374,1373,1376,1375,1378,1377,1380,1379,1382,1381,1384,1383,
197      1350,1348,1354,1352,1358,1356,1362,1360,1366,1364,1370,1368,
198      1324,1323,1326,1325,1328,1327,1330,1329,1332,1331,1334,1333,
199      1299,1298,1301,1300,1303,1302,1305,1304,1307,1306,1309,1308},
200     
201     //DDL[47][]=   
202     {  -1,1260, 545, 544, 546, 547, 549, 548, 551, 550, 553, 552,
203        -1,1285, 523, 522, 524, 525, 527, 526, 529, 528, 531, 530,
204        -1,2160, 501, 500, 502, 503, 505, 504, 507, 506, 509, 508,
205      2185,2135,1227,1226,1228,1229,1231,1230,1233,1232,1235,1234,
206      1274,1273,1276,1275,1278,1277,1280,1279,1282,1281,1284,1283,
207      1249,1248,1251,1250,1253,1252,1255,1254,1257,1256,1259,1258,
208      2174,2173,2176,2175,2178,2177,2180,2179,2182,2181,2184,2183,
209      2149,2148,2151,2150,2153,2152,2155,2154,2157,2156,2159,2158,
210      2124,2123,2126,2125,2128,2127,2130,2129,2132,2131,2134,2133}
211     
212   };
213
214
215 AliITSRawStreamSSD::AliITSRawStreamSSD(AliRawReader* rawReader) :
216   AliITSRawStream(rawReader),
217   fddl(0),
218   fad(0),
219   fadc(0),
220   flag(0),
221   fData(0) {
222   // create an object to read ITS SSD raw digits
223   
224   //  fRawReader->Reset();
225   fRawReader->Select("ITSSSD");
226 }
227
228
229 Bool_t AliITSRawStreamSSD::Next()
230 {
231   // read the next raw digit
232   // returns kFALSE if there is no digit left
233
234   flag=0;
235   fPrevModuleID = fModuleID;
236   if (!fRawReader->ReadNextInt(fData)) return kFALSE;
237   
238   // new coding following IGF Memo - M.Rossewij - 22-06-2004
239   fSignal = (fData & 0x00000FFF); // signal coded in the first 12 bits 
240   fSignal  = (fSignal > 2048) ? fSignal - 4096 : fSignal;
241                 
242   UInt_t slot = (fData >> 28) & 0x0000000F;  // slot range 1 - 9
243   UInt_t adc =  (fData >> 24) & 0x0000000F;  // adc range 0 - 5 AND 8 - 13;
244   UInt_t relModuleID = (slot-1) * 12;        // 0 - 96
245   relModuleID += (adc<6) ? adc : (adc-2);   // adds 0 - 5 AND 6 - 11
246
247
248
249   flag=1;
250   // relModuleID range 0 - 108
251   if(relModuleID > kModulesPerDDL){
252     fRawReader->AddMajorErrorLog(kWrongModuleIdErr,Form("Module ID = %d > %d (max)",relModuleID,kModulesPerDDL));
253     AliWarning(Form("Module ID = %d > %d (max)",relModuleID,kModulesPerDDL));
254     return kFALSE;
255   }
256   if(relModuleID < 0){
257     AliWarning(Form("Module ID = %d < 0",relModuleID));
258     return kFALSE;
259   }
260   flag=0;
261
262
263
264   fModuleID = fgkDDLModuleMap[fRawReader->GetDDLID()][relModuleID];
265       
266   fCoord2 =  (fData >> 12) & 0x000007FF; 
267   fCoord1 = (fCoord2 < 768) ? 0 : 1; // strip 0 - 767 are Pside, strip 768 - 1535 are Nside
268   fCoord2 = (fCoord1 == 0) ? fCoord2 : (1535 - fCoord2);
269
270   /*
271   cout<<"AliITSRawStreamSSD baseword="<<fData<<" slot="<<slot<<" adc="<<adc
272       <<" relModuleID="<<relModuleID<<" ddl="<<fRawReader->GetDDLID()
273       <<" coord1="<<fCoord1<<" coord2="<<fCoord2<<" signal"<<fSignal
274       <<" fModuleID="<<fModuleID<<endl;
275   */
276
277   fadc=adc;
278   fad=slot;
279   fddl=fRawReader->GetDDLID();
280   
281   return kTRUE;
282 }