]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HMPID/AliHMPIDDigit.cxx
area of Mathieson parametrized; hit ctor change eloss to qdc; Helix removed
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDDigit.cxx
CommitLineData
d3da6dc4 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
1d4857c5 16#include "AliHMPIDDigit.h" //class header
17#include <TClonesArray.h> //WriteRaw()
18#include <TBox.h> //Draw()
19#include <AliRawDataHeader.h> //WriteRaw()
20#include <AliDAQ.h> //WriteRaw()
21#include <Riostream.h> //WriteRaw()
d3da6dc4 22ClassImp(AliHMPIDDigit)
23
1d4857c5 24const Float_t AliHMPIDDigit::fMinPcX[]={ 0.00 , 66.60 , 0.00 , 66.60 , 0.00 , 66.60};
25const Float_t AliHMPIDDigit::fMaxPcX[]={64.00 , 130.60 , 64.00 , 130.60 , 64.00 , 130.60};
d1bf51e1 26
1d4857c5 27const Float_t AliHMPIDDigit::fMinPcY[]={ 0.00 , 42.92 , 85.84, 0.00 , 42.92 , 85.84};
28const Float_t AliHMPIDDigit::fMaxPcY[]={40.32 , 83.24 , 126.16, 40.32 , 83.24 , 126.16};
d1bf51e1 29
30
d3da6dc4 31/*
1d4857c5 32
33 y6 ---------- ---------- 126.16
34 | | | |
35 | 4 | | 5 |
36 y5 ---------- ---------- 85.84
37
38 y4 ---------- ---------- 83.24
39 | | | |
40 | 2 | | 3 | view from electronics side
41 y3 ---------- ---------- 42.92
42
43 y2 ---------- ---------- 40.32
44 | | | |
45 | 0 | | 1 |
46 y1 ---------- ---------- 0
47 x1 x2 x3 x4
48
49 0 64.00 66.60 130.60
da08475b 50Preface: all geometrical information (like left-right sides) is reported as seen from electronic side.
d3da6dc4 51
da08475b 52
53The DDL file starts with common header which size and structure is standartized and mandatory for all detectors.
d3da6dc4 54The 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.
55For HMPID the detector ID is 6 (reffered in the code as kRichRawId) while DDL indexes are from 0 to 13.
56
57Common header might be followed by the private one although HMPID has no any private header, just uses the common one.
58
da08475b 59Single HMPID D-RORC (with 2 channels) serves a single chamber so that channel 0 serves left half (PCs 0-2-4)
60 1 serves right half(PCs 1-3-5)
d3da6dc4 61
62So the LDC -chamber-ddl map is:
da08475b 63DDL index 0 -> ch 0 left -> DDL ID 0x600 DDL index 1 -> ch 1 right -> DDL ID 0x601
64DDL index 2 -> ch 1 left -> DDL ID 0x602 DDL index 3 -> ch 2 right -> DDL ID 0x603
65DDL index 4 -> ch 2 left -> DDL ID 0x604 DDL index 5 -> ch 3 right -> DDL ID 0x605
66DDL index 6 -> ch 3 left -> DDL ID 0x606 DDL index 7 -> ch 4 right -> DDL ID 0x607
67DDL index 8 -> ch 4 left -> DDL ID 0x608 DDL index 9 -> ch 5 right -> DDL ID 0x609
68DDL index 10 -> ch 5 left -> DDL ID 0x60a DDL index 11 -> ch 6 right -> DDL ID 0x60b
69DDL index 12 -> ch 6 left -> DDL ID 0x60c DDL index 13 -> ch 7 right -> DDL ID 0x60d
d3da6dc4 70
71HMPID FEE as seen by single D-RORC is composed from a number of DILOGIC chips organized in vertical stack of rows.
da08475b 72Each DILOGIC chip serves 48 channels for the 8x6 pads Channels counted from 0 to 47.
d3da6dc4 73
74The mapping inside DILOGIC chip has the following structure (see from electronics side):
da08475b 75pady
d3da6dc4 76
da08475b 775 04 10 16 22 28 34 40 46 due to repetition in column structure we may introduce per column map:
784 02 08 14 20 26 32 38 44 pady= 0 1 2 3 4 5
793 00 06 12 18 24 30 36 42 addr= 5 3 1 0 2 4
802 01 07 13 19 25 31 37 43 or vice versa
811 03 09 15 21 27 33 39 45 addr= 0 1 2 3 4 5
820 05 11 17 23 29 35 41 47 pady= 3 2 4 1 5 0
d3da6dc4 83
84 0 1 2 3 4 5 6 7 padx
85
8610 DILOGIC chips composes so called "row" in horizontal direction (reffered in the code as kNdil), so the row is 80x6 pads structure.
87DILOGIC chips in the row are counted from right to left as seen from electronics side, from 1 to 10.
8824 rows are piled up forming the whole FEE served by single D-RORC, so one DDL sees 80x144 pads separated in 3 photocathodes.
89Rows are counted from 1 to 24 from top to bottom for right half of the chamber (PCs 1-3-5) as seen from electronics side, meaning even LDC number
90 and from bottom to top for left half of the chamber (PCs 0-2-4) as seen from electronics side, meaning odd LDC number.
91
92HMPID raw word is 32 bits with the structure:
93 00000 rrrrr dddd aaaaaa qqqqqqqqqqqq
94 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)
95*/
96//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
d1bf51e1 97void AliHMPIDDigit::Draw(Option_t*)
98{
e4a3eae8 99// TMarker *pMark=new TMarker(LorsX(),LorsY(),25); pMark->SetMarkerColor(kGreen);pMark->Draw();
100 TBox *pad = new TBox(LorsX()-0.5*SizePadX(),LorsY()-0.5*SizePadY(),LorsX()+0.5*SizePadX(),LorsY()+0.5*SizePadY());
101 pad->SetFillStyle(0);pad->SetLineColor(kGreen);
102 pad->Draw();
d1bf51e1 103}
104//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1d4857c5 105void AliHMPIDDigit::Print(Option_t *opt)const
d3da6dc4 106{
107// Print current digit
108// Arguments: option string not used
109// Returns: none
1d4857c5 110 UInt_t w32; Int_t ddl,r,d,a;
111 Raw(w32,ddl,r,d,a);
112 Printf("%sDIG:(ch=%1i,pc=%1i,x=%2i,y=%2i) (%7.3f,%7.3f) Q=%8.3f TID=(%5i,%5i,%5i) raw=0x%x (ddl=%2i,r=%2i,d=%2i,a=%2i) %s",
113 opt, A2C(fPad),A2P(fPad),A2X(fPad),A2Y(fPad),LorsX(),LorsY(), Q(), fTracks[0],fTracks[1],fTracks[2],w32,ddl,r,d,a, (IsOverTh(Q()))?"":"below thr");
d3da6dc4 114}
115//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1d4857c5 116void AliHMPIDDigit::WriteRaw(TObjArray *pDigAll)
da08475b 117{
1d4857c5 118// Write a list of digits for a given chamber in raw data stream
119// Arguments: pDigAll- list of digits
120// Returns: none
121 ofstream ddlL,ddlR; //output streams, 2 per chamber
122 Int_t cntL=0,cntR=0; //data words counters for DDLs
123 AliRawDataHeader header; header.SetAttribute(0); //empty DDL header
124
125 UInt_t w32=0; Int_t ddl,r,d,a; //32 bits data word
126 for(Int_t iCh=kMinCh;iCh<=kMaxCh;iCh++){//chambers loop
127 ddlL.open(AliDAQ::DdlFileName("HMPID",2*iCh));
128 ddlR.open(AliDAQ::DdlFileName("HMPID",2*iCh+1)); //open both DDL of this chamber in parallel
129 ddlL.write((char*)&header,sizeof(header)); //write dummy header as place holder, actual
130 ddlR.write((char*)&header,sizeof(header)); //will be rewritten later when total size of DDL is known
131
132 TClonesArray *pDigCh=(TClonesArray *)pDigAll->At(iCh); //list of digits for current chamber
133 for(Int_t iDig=0;iDig<pDigCh->GetEntriesFast();iDig++){//digits loop
134 AliHMPIDDigit *pDig=(AliHMPIDDigit*)pDigCh->At(iDig);
135 pDig->Raw(w32,ddl,r,d,a);
136 if(ddl%2){
137 ddlL.write((char*)&w32,sizeof(w32)); cntL++;
138 }else{
139 ddlR.write((char*)&w32,sizeof(w32)); cntR++;
140 }
141 }//digits loop
142
143 header.fSize=sizeof(header)+cntL*sizeof(w32); ddlL.seekp(0); ddlL.write((char*)&header,sizeof(header)); ddlL.close(); //rewrite header with size set to
144 header.fSize=sizeof(header)+cntR*sizeof(w32); ddlR.seekp(0); ddlR.write((char*)&header,sizeof(header)); ddlR.close(); //number of bytes and close file
145 }//chambers loop
146}//WriteRaw()
da08475b 147//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++