]>
Commit | Line | Data |
---|---|---|
0fe8fa07 | 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 | ||
0422a446 | 16 | #include "AliRICHDigit.h"//class header |
0fe8fa07 | 17 | |
18 | ClassImp(AliRICHDigit) | |
19 | ||
9de8d990 | 20 | /* |
21 | Any given LDC collects data from a number of D-RORC cards connected to this same LDC by separate DDLs. This data is stored in corresponding number | |
22 | of DDL buffers. | |
23 | ||
24 | Each DDL buffer corresponds to a single D-RORC. The data this buffer contains are hardware generated by D-RORC. The buffer starts with common header | |
25 | which size and structure is standartized and mandatory for all detectors. | |
26 | The header contains among other words, so called Equipment ID word. This unique value for each D-RORC is calculated as detector ID << 8 + DDL index. | |
27 | For RICH the detector ID is 6 (reffered in the code as kRichRawId) while DDL indexes are from 0 to 13. | |
28 | ||
29 | Common header might be followed by the private one although RICH has no any private header, just uses the common one. | |
30 | ||
31 | Single RICH D-RORC serves one half of a chamber i.e. 3 photocathodes aka sectors, even LDC for left part( sectors 1-3-5) and odd LDC for right part(2-4-6) | |
32 | as it's seen from electronics side. | |
33 | ||
34 | So the LDC -chamber-ddl map is: | |
35 | DDL index 0 -> ch 1 left -> DDL ID 0x600 DDL index 1 -> ch 1 right -> DDL ID 0x601 | |
36 | DDL index 2 -> ch 2 left -> DDL ID 0x602 DDL index 3 -> ch 2 right -> DDL ID 0x603 | |
37 | DDL index 4 -> ch 3 left -> DDL ID 0x604 DDL index 5 -> ch 3 right -> DDL ID 0x605 | |
38 | DDL index 6 -> ch 4 left -> DDL ID 0x606 DDL index 7 -> ch 4 right -> DDL ID 0x607 | |
39 | DDL index 8 -> ch 5 left -> DDL ID 0x608 DDL index 9 -> ch 5 right -> DDL ID 0x609 | |
40 | DDL index 10 -> ch 6 left -> DDL ID 0x60a DDL index 11 -> ch 6 right -> DDL ID 0x60b | |
41 | DDL index 12 -> ch 7 left -> DDL ID 0x60c DDL index 13 -> ch 7 right -> DDL ID 0x60d | |
42 | ||
43 | RICH FEE as seen by single D-RORC is composed from a number of DILOGIC chips organized in vertical stack of rows. | |
44 | Each DILOGIC chip serves 48 channels for the 8x6 pads (reffered in the code as kDiloX,kDiloY). Channels counted from 0 to 47. | |
45 | ||
46 | ??????? Currently the exact mapping of DILOGIC addresses to pads is not known. So we invented horizontal zig-zag ??????? | |
47 | ||
48 | 10 DILOGIC chips composes so called "row" in horizontal direction (reffered in the code as kNdilo), so the row is 80x6 pads structure. | |
49 | DILOGIC chips in the row are counted from right to left as seen from electronics side, from 1 to 10. | |
50 | 24 rows are piled up forming the whole FEE served by single D-RORC, so one DDL sees 80x144 pads separated in 3 photocathodes aka sectors. | |
51 | Rows are counted from 1 to 24 from top to bottom for right half of the chamber (sectors 2-4-6) as seen from electronics side, meaning even LDC number | |
52 | and from bottom to top for left half of the chamber (sectors 1-3-5) as seen from electronics side, meaning odd LDC number. | |
53 | ||
54 | RICH raw word is 32 bits with the structure: | |
55 | 00000 rrrrr dddd aaaaaa qqqqqqqqqqqq | |
56 | 5 bits zero 5 bits row number (1..24) 4 bits DILOGIC chip number (1..10) 6 bits DILOGIC address (0..47) 12 bits QDC value (0..4095) | |
57 | */ | |
58 | ||
59 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
0fe8fa07 | 60 | void AliRICHDigit::Print(Option_t*)const |
61 | { | |
62 | //Print current digit | |
0422a446 | 63 | //Arguments: option string not used |
64 | // Returns: none | |
9de8d990 | 65 | Printf("pad=(%2i,%2i,%3i,%3i), QDC=%8.3f, cfm=%9i, TID=(%5i,%5i,%5i) raw r=%2i d=%2i a=%2i", |
66 | C(),Pad2Sec(PadX(),PadY()),PadX(),PadY() , Qdc(), Cfm() , fTracks[0],fTracks[1],fTracks[2], R(), D(), A()); | |
0fe8fa07 | 67 | } |
9de8d990 | 68 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
0422a446 | 69 | void AliRICHDigit::Test() |
70 | { | |
db910db9 | 71 | Printf("Test of Pad2Sec:"); |
72 | Int_t x1=kFirstPad, x2=kPadsSecX, x3=kPadsSecX+1, x4=kPadsChamX;//all possible padx for corners | |
73 | Int_t y; | |
74 | ||
75 | y=kPadsChamY; | |
76 | Printf("Sector5:(%3i,%3i)->%i (%3i,%3i)->%i Sector6:(%3i,%3i)->%i (%3i,%3i)->%i",x1,y,Pad2Sec(x1,y),x2,y,Pad2Sec(x2,y),x3,y,Pad2Sec(x3,y),x4,y,Pad2Sec(x4,y)); | |
77 | y=2*kPadsSecY+1; | |
78 | Printf("Sector5:(%3i,%3i)->%i (%3i,%3i)->%i Sector6:(%3i,%3i)->%i (%3i,%3i)->%i",x1,y,Pad2Sec(x1,y),x2,y,Pad2Sec(x2,y),x3,y,Pad2Sec(x3,y),x4,y,Pad2Sec(x4,y)); | |
79 | Printf(""); | |
80 | y=2*kPadsSecY; | |
81 | Printf("Sector3:(%3i,%3i)->%i (%3i,%3i)->%i Sector4:(%3i,%3i)->%i (%3i,%3i)->%i",x1,y,Pad2Sec(x1,y),x2,y,Pad2Sec(x2,y),x3,y,Pad2Sec(x3,y),x4,y,Pad2Sec(x4,y)); | |
82 | y=kPadsSecY+1; | |
83 | Printf("Sector3:(%3i,%3i)->%i (%3i,%3i)->%i Sector4:(%3i,%3i)->%i (%3i,%3i)->%i",x1,y,Pad2Sec(x1,y),x2,y,Pad2Sec(x2,y),x3,y,Pad2Sec(x3,y),x4,y,Pad2Sec(x4,y)); | |
84 | Printf(""); | |
85 | y=kPadsSecY; | |
86 | Printf("Sector1:(%3i,%3i)->%i (%3i,%3i)->%i Sector2:(%3i,%3i)->%i (%3i,%3i)->%i",x1,y,Pad2Sec(x1,y),x2,y,Pad2Sec(x2,y),x3,y,Pad2Sec(x3,y),x4,y,Pad2Sec(x4,y)); | |
87 | y=kFirstPad; | |
88 | Printf("Sector1:(%3i,%3i)->%i (%3i,%3i)->%i Sector2:(%3i,%3i)->%i (%3i,%3i)->%i",x1,y,Pad2Sec(x1,y),x2,y,Pad2Sec(x2,y),x3,y,Pad2Sec(x3,y),x4,y,Pad2Sec(x4,y)); | |
0422a446 | 89 | } |
9de8d990 | 90 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |