standardized and extend the access to data in the macro
[u/mrichter/AliRoot.git] / ITS / AliITSCompressRawDataSDD.cxx
CommitLineData
7765ca40 1/**************************************************************************
2 * Copyright(c) 2007-2009, 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
f7bcb379 16/* $Id$*/
7765ca40 17
18///////////////////////////////////////////////////////////////////
19// //
20// Class to decode the SDD Raw Data from the CarlosRX format to //
21// a compressed format consisting in a word of 32 bit per cell //
22// The 32 bits for a data word are defined as follows: //
23// 31 control bit (0=data word, 1= control word) //
24// 30 - //
25// 29 | //
26// 28 |-> 4 bits to identify the Carlos (0-11) inside the DDL //
27// 27 - //
28// 26 detecot side (0= left, =right) //
29// 25 - //
30// 24 | //
31// 23 | //
32// 22 | //
33// 21 |-> 8 bits to identify the anode number (0-255) //
34// 20 | //
35// 19 | //
36// 18 - //
37// 17 - //
38// 16 | //
39// 15 | //
40// 14 | //
41// 13 |-> 8 bits to identify the time bin (0-255) //
42// 12 | //
43// 11 | //
44// 10 - //
45// 9 - //
46// 8 | //
47// 7 | //
48// 6 | //
49// 5 | //
50// 4 |-> 10 bit for the ADC counts //
51// 3 | //
52// 2 | //
53// 1 | //
54// 0 - //
55// //
f7bcb379 56// Plus 1 type of control words: //
57// - End of module data (needed by the Cluster Finder) //
58// first 4 most significant bits = 1111 //
7765ca40 59// //
60// Origin: F.Prino, Torino, prino@to.infn.it //
61// //
62///////////////////////////////////////////////////////////////////
63
f7bcb379 64#include"AliLog.h"
7765ca40 65#include "AliITSCompressRawDataSDD.h"
66#include "AliRawReader.h"
67#include "AliRawReaderDate.h"
68#include "AliRawReaderRoot.h"
69#include "AliITSRawStreamSDD.h"
70
71
72ClassImp(AliITSCompressRawDataSDD)
73
f7bcb379 74AliITSCompressRawDataSDD::AliITSCompressRawDataSDD():
75TObject(),
76fRawReader(0),
77fPointerToData(0),
78fSizeInMemory(0),
79fEventRange(kFALSE),
80fFirstEvent(0),
81fLastEvent(0)
82{
83 // default constructor
84 fNameFile="";
85}
86//______________________________________________________________________
7765ca40 87AliITSCompressRawDataSDD::AliITSCompressRawDataSDD(TString filename):
88TObject(),
f7bcb379 89fRawReader(0),
90fPointerToData(0),
91fSizeInMemory(0),
7765ca40 92fEventRange(kFALSE),
93fFirstEvent(0),
94fLastEvent(0)
95{
f7bcb379 96 // Contructor for tests
7765ca40 97 fNameFile=filename;
98}
99//______________________________________________________________________
f7bcb379 100AliITSCompressRawDataSDD::~AliITSCompressRawDataSDD(){
101 // raw reader is passed from outdside, don't delete it
102}
103
104//______________________________________________________________________
7765ca40 105void AliITSCompressRawDataSDD::Compress(){
f7bcb379 106 // Test method to dump raw data on ascii file
7765ca40 107 Int_t iev=0;
108 if(fEventRange) iev=fFirstEvent;
f7bcb379 109
110 AliRawReader* rd;
7765ca40 111 if(fNameFile.Contains(".root")){
112 rd=new AliRawReaderRoot(fNameFile.Data(),iev);
113 }else{
114 rd=new AliRawReaderDate(fNameFile.Data(),iev);
115 }
f7bcb379 116
7765ca40 117 FILE *outtxt=fopen("data.txt","w");
947c828c 118
7765ca40 119 UInt_t word=0;
120 do{
121 rd->Reset();
122
123 AliITSRawStreamSDD s(rd);
6297cc01 124 s.SetDecompressAmbra(kFALSE);
7765ca40 125 while(s.Next()){
7765ca40 126 if(s.IsCompletedModule()==kFALSE){
127 word=s.GetCarlosId()<<27;
128 word+=s.GetChannel()<<26;
129 word+=s.GetCoord1()<<18;
130 word+=s.GetCoord2()<<10;
6297cc01 131 word+=s.GetEightBitSignal();
7765ca40 132 fprintf(outtxt,"%08X\n",word);
133 }
134 if(s.IsCompletedModule()==kTRUE){
135 word=15<<28;
136 word+=s.GetCarlosId();
137 fprintf(outtxt,"%08X\n",word);
138 }
139 }
140 iev++;
141 if(fEventRange && iev>fLastEvent) break;
142 }while(rd->NextEvent());
143 fclose(outtxt);
144}
f7bcb379 145//______________________________________________________________________
146UInt_t AliITSCompressRawDataSDD::CompressEvent(UChar_t* inputPtr){
147 // Method to be used in HLT
148 UInt_t siz=0;
149 memcpy(fPointerToData,inputPtr,32); // event header, 8 words
150 fPointerToData+=32;
151 siz+=32;
152 UInt_t word=0;
153 AliITSRawStreamSDD s(fRawReader);
6297cc01 154 s.SetDecompressAmbra(kFALSE);
f7bcb379 155 Int_t mask1=0xFF000000;
156 Int_t mask2=0x00FF0000;
157 Int_t mask3=0x0000FF00;
158 Int_t mask4=0x000000FF;
159 while(s.Next()){
160 if(s.IsCompletedModule()==kFALSE){
161 word=s.GetCarlosId()<<27;
162 word+=s.GetChannel()<<26;
163 word+=s.GetCoord1()<<18;
164 word+=s.GetCoord2()<<10;
6297cc01 165 word+=s.GetEightBitSignal();
f7bcb379 166 if(siz+4<fSizeInMemory){
2cc6c8fe 167 *(fPointerToData)=(word&mask4);
f7bcb379 168 ++fPointerToData;
169 *(fPointerToData)=(word&mask3)>>8;
170 ++fPointerToData;
2cc6c8fe 171 *(fPointerToData)=(word&mask2)>>16;
172 ++fPointerToData;
173 *(fPointerToData)=(word&mask1)>>24;
f7bcb379 174 ++fPointerToData;
175 siz+=4;
176 }
177 }
178 if(s.IsCompletedModule()==kTRUE){
179 word=15<<28;
180 word+=s.GetCarlosId();
181 if(siz+4<fSizeInMemory){
2cc6c8fe 182 *(fPointerToData)=(word&mask4);
f7bcb379 183 ++fPointerToData;
184 *(fPointerToData)=(word&mask3)>>8;
185 ++fPointerToData;
2cc6c8fe 186 *(fPointerToData)=(word&mask2)>>16;
187 ++fPointerToData;
188 *(fPointerToData)=(word&mask1)>>24;
f7bcb379 189 ++fPointerToData;
190 siz+=4;
191 }
192 }
193 }
194 return siz;
195}