1 /**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////
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) //
26 // 28 |-> 4 bits to identify the Carlos (0-11) inside the DDL //
28 // 26 detecot side (0= left, =right) //
33 // 21 |-> 8 bits to identify the anode number (0-255) //
41 // 13 |-> 8 bits to identify the time bin (0-255) //
50 // 4 |-> 10 bit for the ADC counts //
56 // Plus 1 type of control words: //
57 // - End of module data (needed by the Cluster Finder) //
58 // first 4 most significant bits = 1111 //
60 // Origin: F.Prino, Torino, prino@to.infn.it //
62 ///////////////////////////////////////////////////////////////////
65 #include "AliITSCompressRawDataSDD.h"
66 #include "AliRawReader.h"
67 #include "AliRawReaderDate.h"
68 #include "AliRawReaderRoot.h"
69 #include "AliITSRawStreamSDD.h"
72 ClassImp(AliITSCompressRawDataSDD)
74 AliITSCompressRawDataSDD::AliITSCompressRawDataSDD():
83 // default constructor
86 //______________________________________________________________________
87 AliITSCompressRawDataSDD::AliITSCompressRawDataSDD(TString filename):
96 // Contructor for tests
99 //______________________________________________________________________
100 AliITSCompressRawDataSDD::~AliITSCompressRawDataSDD(){
101 // raw reader is passed from outdside, don't delete it
104 //______________________________________________________________________
105 void AliITSCompressRawDataSDD::Compress(){
106 // Test method to dump raw data on ascii file
108 if(fEventRange) iev=fFirstEvent;
111 if(fNameFile.Contains(".root")){
112 rd=new AliRawReaderRoot(fNameFile.Data(),iev);
114 rd=new AliRawReaderDate(fNameFile.Data(),iev);
117 FILE *outtxt=fopen("data.txt","w");
123 AliITSRawStreamSDD s(rd);
124 s.SetDecompressAmbra(kFALSE);
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;
131 word+=s.GetEightBitSignal();
132 fprintf(outtxt,"%08X\n",word);
134 if(s.IsCompletedModule()==kTRUE){
136 word+=s.GetCarlosId();
137 fprintf(outtxt,"%08X\n",word);
141 if(fEventRange && iev>fLastEvent) break;
142 }while(rd->NextEvent());
145 //______________________________________________________________________
146 UInt_t AliITSCompressRawDataSDD::CompressEvent(UChar_t* inputPtr){
147 // Method to be used in HLT
149 memcpy(fPointerToData,inputPtr,32); // event header, 8 words
153 AliITSRawStreamSDD s(fRawReader);
154 s.SetDecompressAmbra(kFALSE);
155 Int_t mask1=0xFF000000;
156 Int_t mask2=0x00FF0000;
157 Int_t mask3=0x0000FF00;
158 Int_t mask4=0x000000FF;
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;
165 word+=s.GetEightBitSignal();
166 if(siz+4<fSizeInMemory){
167 *(fPointerToData)=(word&mask1)>>24;
169 *(fPointerToData)=(word&mask2)>>16;
171 *(fPointerToData)=(word&mask3)>>8;
173 *(fPointerToData)=(word&mask4);
178 if(s.IsCompletedModule()==kTRUE){
180 word+=s.GetCarlosId();
181 if(siz+4<fSizeInMemory){
182 *(fPointerToData)=(word&mask1)>>24;
184 *(fPointerToData)=(word&mask2)>>16;
186 *(fPointerToData)=(word&mask3)>>8;
188 *(fPointerToData)=(word&mask4);