]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HMPID/AliHMPIDDigit.cxx
Getting the trigger descriptors from CDB
[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()
8c1bbb8a 19#include <TPolyLine.h> //Draw()
1d4857c5 20#include <AliRawDataHeader.h> //WriteRaw()
ae5a42aa 21#include "AliHMPIDParam.h"
1d4857c5 22#include <AliDAQ.h> //WriteRaw()
ea925242 23#include "Riostream.h" //WriteRaw()
08f92f14 24#include "AliFstream.h"
25
d3da6dc4 26ClassImp(AliHMPIDDigit)
27
28/*
b8588e09 29 Preface: all geometrical information (like left-right sides) is reported as seen from electronic side.
30
31 d10 d1 d10 d1
32 _______________ _______________
33r24 | | | |126.16 r1
34 | 4 | | 5 |
35 | | | |
36 |_______________| |_______________|85.84
37 _______________ _______________
38 | | | |83.24
39 | 2 | | 3 |
40 | | | |
41 |_______________| |_______________|42.92
42 _______________ _______________
43 | | | |40.32
44 | 0 | | 1 |
45 | | | |
46r1 |_______________| |_______________|0 r24
47 0 64.0 66.6 130.6
1d4857c5 48
d3da6dc4 49
da08475b 50
51The DDL file starts with common header which size and structure is standartized and mandatory for all detectors.
d3da6dc4 52The 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.
53For HMPID the detector ID is 6 (reffered in the code as kRichRawId) while DDL indexes are from 0 to 13.
54
55Common header might be followed by the private one although HMPID has no any private header, just uses the common one.
56
da08475b 57Single HMPID D-RORC (with 2 channels) serves a single chamber so that channel 0 serves left half (PCs 0-2-4)
58 1 serves right half(PCs 1-3-5)
d3da6dc4 59
60So the LDC -chamber-ddl map is:
da08475b 61DDL index 0 -> ch 0 left -> DDL ID 0x600 DDL index 1 -> ch 1 right -> DDL ID 0x601
62DDL index 2 -> ch 1 left -> DDL ID 0x602 DDL index 3 -> ch 2 right -> DDL ID 0x603
63DDL index 4 -> ch 2 left -> DDL ID 0x604 DDL index 5 -> ch 3 right -> DDL ID 0x605
64DDL index 6 -> ch 3 left -> DDL ID 0x606 DDL index 7 -> ch 4 right -> DDL ID 0x607
65DDL index 8 -> ch 4 left -> DDL ID 0x608 DDL index 9 -> ch 5 right -> DDL ID 0x609
66DDL index 10 -> ch 5 left -> DDL ID 0x60a DDL index 11 -> ch 6 right -> DDL ID 0x60b
67DDL index 12 -> ch 6 left -> DDL ID 0x60c DDL index 13 -> ch 7 right -> DDL ID 0x60d
d3da6dc4 68
69HMPID FEE as seen by single D-RORC is composed from a number of DILOGIC chips organized in vertical stack of rows.
da08475b 70Each DILOGIC chip serves 48 channels for the 8x6 pads Channels counted from 0 to 47.
d3da6dc4 71
72The mapping inside DILOGIC chip has the following structure (see from electronics side):
da08475b 73pady
d3da6dc4 74
da08475b 755 04 10 16 22 28 34 40 46 due to repetition in column structure we may introduce per column map:
764 02 08 14 20 26 32 38 44 pady= 0 1 2 3 4 5
773 00 06 12 18 24 30 36 42 addr= 5 3 1 0 2 4
782 01 07 13 19 25 31 37 43 or vice versa
791 03 09 15 21 27 33 39 45 addr= 0 1 2 3 4 5
800 05 11 17 23 29 35 41 47 pady= 3 2 4 1 5 0
d3da6dc4 81
82 0 1 2 3 4 5 6 7 padx
83
8410 DILOGIC chips composes so called "row" in horizontal direction (reffered in the code as kNdil), so the row is 80x6 pads structure.
85DILOGIC chips in the row are counted from right to left as seen from electronics side, from 1 to 10.
8624 rows are piled up forming the whole FEE served by single D-RORC, so one DDL sees 80x144 pads separated in 3 photocathodes.
87Rows 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
88 and from bottom to top for left half of the chamber (PCs 0-2-4) as seen from electronics side, meaning odd LDC number.
89
90HMPID raw word is 32 bits with the structure:
91 00000 rrrrr dddd aaaaaa qqqqqqqqqqqq
92 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)
93*/
94//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
d1bf51e1 95void AliHMPIDDigit::Draw(Option_t*)
96{
e4a3eae8 97// TMarker *pMark=new TMarker(LorsX(),LorsY(),25); pMark->SetMarkerColor(kGreen);pMark->Draw();
ae5a42aa 98 TBox *pad = new
99
100TBox(LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY(),LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
8c1bbb8a 101 TPolyLine *line=new TPolyLine(5);
ae5a42aa 102 line->SetPoint(0,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
103 line->SetPoint(1,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
104 line->SetPoint(2,LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
105 line->SetPoint(3,LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
106 line->SetPoint(4,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
b8588e09 107 Int_t slice=(Int_t)fQ/20;
108 switch(slice){
109 case 0: pad->SetFillColor(kBlue); break;
110 case 1: pad->SetFillColor(kBlue+4); break;
111 case 2: pad->SetFillColor(kCyan); break;
112 case 3: pad->SetFillColor(kCyan+4); break;
113 case 4: pad->SetFillColor(kGreen); break;
114 case 5: pad->SetFillColor(kGreen+4); break;
115 case 6: pad->SetFillColor(kYellow); break;
116 case 7: pad->SetFillColor(kYellow+4); break;
117 default: pad->SetFillColor(kRed); break;
118 }
119 pad->SetUniqueID((Int_t)fQ);
8c1bbb8a 120 pad->Draw();line->Draw();
d1bf51e1 121}
122//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1d4857c5 123void AliHMPIDDigit::Print(Option_t *opt)const
d3da6dc4 124{
125// Print current digit
126// Arguments: option string not used
127// Returns: none
1d4857c5 128 UInt_t w32; Int_t ddl,r,d,a;
129 Raw(w32,ddl,r,d,a);
130 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",
ae5a42aa 131 opt, AliHMPIDParam::A2C(fPad),AliHMPIDParam::A2P(fPad),AliHMPIDParam::A2X(fPad),AliHMPIDParam::A2Y(fPad),LorsX(),LorsY(), Q(),
132 fTracks[0],fTracks[1],fTracks[2],w32,ddl,r,d,a, (AliHMPIDParam::IsOverTh(Q()))?"":"below thr");
d3da6dc4 133}
134//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1d4857c5 135void AliHMPIDDigit::WriteRaw(TObjArray *pDigAll)
da08475b 136{
1d4857c5 137// Write a list of digits for a given chamber in raw data stream
138// Arguments: pDigAll- list of digits
139// Returns: none
ae5a42aa 140 for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++){//chambers loop
08f92f14 141 AliFstream* ddlL; //output streams, 2 per chamber
142 AliFstream* ddlR;
231e66cd 143 Int_t cntL=0,cntR=0; //data words counters for DDLs
144 AliRawDataHeader header; header.SetAttribute(0); //empty DDL header
145
7e88b090 146// ddlL = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh));
147// ddlR = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh+1)); //open both DDL of this chamber in parallel
148 ddlL = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh+1)); //left and right looking at the IP
149 ddlR = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh)); //open both DDL of this chamber in parallel
08f92f14 150 ddlL->WriteBuffer((char*)&header,sizeof(header)); //write dummy header as place holder, actual
151 ddlR->WriteBuffer((char*)&header,sizeof(header)); //will be rewritten later when total size of DDL is known
1d4857c5 152
231e66cd 153 UInt_t w32=0; //32 bits data word
1d4857c5 154 TClonesArray *pDigCh=(TClonesArray *)pDigAll->At(iCh); //list of digits for current chamber
155 for(Int_t iDig=0;iDig<pDigCh->GetEntriesFast();iDig++){//digits loop
156 AliHMPIDDigit *pDig=(AliHMPIDDigit*)pDigCh->At(iDig);
b512598c 157 if(pDig->Q() < 1) continue;
231e66cd 158 Int_t ddl,r,d,a; //32 bits data word
1d4857c5 159 pDig->Raw(w32,ddl,r,d,a);
160 if(ddl%2){
08f92f14 161 ddlL->WriteBuffer((char*)&w32,sizeof(w32)); cntL++;
1d4857c5 162 }else{
08f92f14 163 ddlR->WriteBuffer((char*)&w32,sizeof(w32)); cntR++;
1d4857c5 164 }
165 }//digits loop
166
08f92f14 167 header.fSize=sizeof(header)+cntL*sizeof(w32); ddlL->Seekp(0); ddlL->WriteBuffer((char*)&header,sizeof(header)); delete ddlL; //rewrite header with size set to
168 header.fSize=sizeof(header)+cntR*sizeof(w32); ddlR->Seekp(0); ddlR->WriteBuffer((char*)&header,sizeof(header)); delete ddlR; //number of bytes and close file
1d4857c5 169 }//chambers loop
170}//WriteRaw()
da08475b 171//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++