ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$*/

///////////////////////////////////////////////////////////////////
//                                                               //
// Class to decode the SDD Raw Data from the CarlosRX format to  //
// a compressed format consisting in a word of 32 bit per cell   //
// The 32 bits for a data word are defined as follows:           //
//   31 control bit (0=data word, 1= control word)               //
//   30 -                                                        //
//   29  |                                                       //
//   28  |-> 4 bits to identify the Carlos (0-11) inside the DDL //
//   27 -                                                        //
//   26 detecor side (0= left, =right)                           //
//   25 -                                                        //
//   24  |                                                       //
//   23  |                                                       //
//   22  |                                                       //
//   21  |-> 8 bits to identify the anode number (0-255)         //
//   20  |                                                       //
//   19  |                                                       //
//   18 -                                                        //
//   17 -                                                        //
//   16  |                                                       //
//   15  |                                                       //
//   14  |                                                       //
//   13  |-> 8 bits to identify the time bin (0-255)             //
//   12  |                                                       //
//   11  |                                                       //
//   10 -                                                        //
//    9 -                                                        //
//    8  |                                                       //
//    7  |                                                       //
//    6  |                                                       //
//    5  |                                                       //
//    4  |-> 10 bit for the ADC counts                           //
//    3  |                                                       //
//    2  |                                                       //
//    1  |                                                       //
//    0 -                                                        //
//                                                               //
// Plus 2 typs of control words:                                 //
// - End of module data (needed by the Cluster Finder)           //
//       first 4 most significant bits                   = 1111  //
// - Jitter word                                                 //
//       first 4 most significant bits                   = 1000  //
//                                                               //
// Origin: F.Prino, Torino, prino@to.infn.it                     //
//                                                               //
///////////////////////////////////////////////////////////////////

#include"AliLog.h"
#include "AliITSCompressRawDataSDD.h"
#include "AliRawReader.h"
#include "AliRawReaderDate.h"
#include "AliRawReaderRoot.h"
#include "AliITSRawStreamSDD.h"


ClassImp(AliITSCompressRawDataSDD)

AliITSCompressRawDataSDD::AliITSCompressRawDataSDD():
TObject(),
fRawReader(0),
fPointerToData(0),
fSizeInMemory(0)
{
  // default constructor
}
//______________________________________________________________________
AliITSCompressRawDataSDD::~AliITSCompressRawDataSDD(){
  // raw reader is passed from outdside, don't delete it
}
//______________________________________________________________________
UInt_t AliITSCompressRawDataSDD::CompressEvent(UChar_t* inputPtr){
  // Method to be used in HLT
  UInt_t siz=0;
  memcpy(fPointerToData,inputPtr,32); // event header, 8 words
  fPointerToData+=32;
  siz+=32;
  UInt_t word=0;
  AliITSRawStreamSDD s(fRawReader);
  s.SetDecompressAmbra(kFALSE);
  Int_t mask1=0xFF000000;
  Int_t mask2=0x00FF0000;
  Int_t mask3=0x0000FF00;
  Int_t mask4=0x000000FF;
  while(s.Next()){
    if(s.IsCompletedModule()==kTRUE){
      word=UInt_t(15)<<28;
      word+=s.GetCarlosId();
      if(siz+4<fSizeInMemory){
	*(fPointerToData)=(word&mask4);
	++fPointerToData;
	*(fPointerToData)=(word&mask3)>>8;
	++fPointerToData;
	*(fPointerToData)=(word&mask2)>>16;
	++fPointerToData;
	*(fPointerToData)=(word&mask1)>>24;
	++fPointerToData;
	siz+=4;
      }
    }else if(s.IsCompletedDDL()==kTRUE){
      word=UInt_t(8)<<28;
      word+=s.GetJitter();
      if(siz+4<fSizeInMemory){
	*(fPointerToData)=(word&mask4);
	++fPointerToData;
	*(fPointerToData)=(word&mask3)>>8;
	++fPointerToData;
	*(fPointerToData)=(word&mask2)>>16;
	++fPointerToData;
	*(fPointerToData)=(word&mask1)>>24;
	++fPointerToData;
	siz+=4;
      }
    }else{
      word=s.GetCarlosId()<<27;
      word+=s.GetChannel()<<26;
      word+=s.GetCoord1()<<18;
      word+=s.GetCoord2()<<10;
      word+=s.GetEightBitSignal();
      if(siz+4<fSizeInMemory){
	*(fPointerToData)=(word&mask4);
	++fPointerToData;
	*(fPointerToData)=(word&mask3)>>8;
	++fPointerToData;
	*(fPointerToData)=(word&mask2)>>16;
	++fPointerToData;
	*(fPointerToData)=(word&mask1)>>24;
	++fPointerToData;
	siz+=4;
      }
    }
  }
  return siz;
}
 AliITSCompressRawDataSDD.cxx:1
 AliITSCompressRawDataSDD.cxx:2
 AliITSCompressRawDataSDD.cxx:3
 AliITSCompressRawDataSDD.cxx:4
 AliITSCompressRawDataSDD.cxx:5
 AliITSCompressRawDataSDD.cxx:6
 AliITSCompressRawDataSDD.cxx:7
 AliITSCompressRawDataSDD.cxx:8
 AliITSCompressRawDataSDD.cxx:9
 AliITSCompressRawDataSDD.cxx:10
 AliITSCompressRawDataSDD.cxx:11
 AliITSCompressRawDataSDD.cxx:12
 AliITSCompressRawDataSDD.cxx:13
 AliITSCompressRawDataSDD.cxx:14
 AliITSCompressRawDataSDD.cxx:15
 AliITSCompressRawDataSDD.cxx:16
 AliITSCompressRawDataSDD.cxx:17
 AliITSCompressRawDataSDD.cxx:18
 AliITSCompressRawDataSDD.cxx:19
 AliITSCompressRawDataSDD.cxx:20
 AliITSCompressRawDataSDD.cxx:21
 AliITSCompressRawDataSDD.cxx:22
 AliITSCompressRawDataSDD.cxx:23
 AliITSCompressRawDataSDD.cxx:24
 AliITSCompressRawDataSDD.cxx:25
 AliITSCompressRawDataSDD.cxx:26
 AliITSCompressRawDataSDD.cxx:27
 AliITSCompressRawDataSDD.cxx:28
 AliITSCompressRawDataSDD.cxx:29
 AliITSCompressRawDataSDD.cxx:30
 AliITSCompressRawDataSDD.cxx:31
 AliITSCompressRawDataSDD.cxx:32
 AliITSCompressRawDataSDD.cxx:33
 AliITSCompressRawDataSDD.cxx:34
 AliITSCompressRawDataSDD.cxx:35
 AliITSCompressRawDataSDD.cxx:36
 AliITSCompressRawDataSDD.cxx:37
 AliITSCompressRawDataSDD.cxx:38
 AliITSCompressRawDataSDD.cxx:39
 AliITSCompressRawDataSDD.cxx:40
 AliITSCompressRawDataSDD.cxx:41
 AliITSCompressRawDataSDD.cxx:42
 AliITSCompressRawDataSDD.cxx:43
 AliITSCompressRawDataSDD.cxx:44
 AliITSCompressRawDataSDD.cxx:45
 AliITSCompressRawDataSDD.cxx:46
 AliITSCompressRawDataSDD.cxx:47
 AliITSCompressRawDataSDD.cxx:48
 AliITSCompressRawDataSDD.cxx:49
 AliITSCompressRawDataSDD.cxx:50
 AliITSCompressRawDataSDD.cxx:51
 AliITSCompressRawDataSDD.cxx:52
 AliITSCompressRawDataSDD.cxx:53
 AliITSCompressRawDataSDD.cxx:54
 AliITSCompressRawDataSDD.cxx:55
 AliITSCompressRawDataSDD.cxx:56
 AliITSCompressRawDataSDD.cxx:57
 AliITSCompressRawDataSDD.cxx:58
 AliITSCompressRawDataSDD.cxx:59
 AliITSCompressRawDataSDD.cxx:60
 AliITSCompressRawDataSDD.cxx:61
 AliITSCompressRawDataSDD.cxx:62
 AliITSCompressRawDataSDD.cxx:63
 AliITSCompressRawDataSDD.cxx:64
 AliITSCompressRawDataSDD.cxx:65
 AliITSCompressRawDataSDD.cxx:66
 AliITSCompressRawDataSDD.cxx:67
 AliITSCompressRawDataSDD.cxx:68
 AliITSCompressRawDataSDD.cxx:69
 AliITSCompressRawDataSDD.cxx:70
 AliITSCompressRawDataSDD.cxx:71
 AliITSCompressRawDataSDD.cxx:72
 AliITSCompressRawDataSDD.cxx:73
 AliITSCompressRawDataSDD.cxx:74
 AliITSCompressRawDataSDD.cxx:75
 AliITSCompressRawDataSDD.cxx:76
 AliITSCompressRawDataSDD.cxx:77
 AliITSCompressRawDataSDD.cxx:78
 AliITSCompressRawDataSDD.cxx:79
 AliITSCompressRawDataSDD.cxx:80
 AliITSCompressRawDataSDD.cxx:81
 AliITSCompressRawDataSDD.cxx:82
 AliITSCompressRawDataSDD.cxx:83
 AliITSCompressRawDataSDD.cxx:84
 AliITSCompressRawDataSDD.cxx:85
 AliITSCompressRawDataSDD.cxx:86
 AliITSCompressRawDataSDD.cxx:87
 AliITSCompressRawDataSDD.cxx:88
 AliITSCompressRawDataSDD.cxx:89
 AliITSCompressRawDataSDD.cxx:90
 AliITSCompressRawDataSDD.cxx:91
 AliITSCompressRawDataSDD.cxx:92
 AliITSCompressRawDataSDD.cxx:93
 AliITSCompressRawDataSDD.cxx:94
 AliITSCompressRawDataSDD.cxx:95
 AliITSCompressRawDataSDD.cxx:96
 AliITSCompressRawDataSDD.cxx:97
 AliITSCompressRawDataSDD.cxx:98
 AliITSCompressRawDataSDD.cxx:99
 AliITSCompressRawDataSDD.cxx:100
 AliITSCompressRawDataSDD.cxx:101
 AliITSCompressRawDataSDD.cxx:102
 AliITSCompressRawDataSDD.cxx:103
 AliITSCompressRawDataSDD.cxx:104
 AliITSCompressRawDataSDD.cxx:105
 AliITSCompressRawDataSDD.cxx:106
 AliITSCompressRawDataSDD.cxx:107
 AliITSCompressRawDataSDD.cxx:108
 AliITSCompressRawDataSDD.cxx:109
 AliITSCompressRawDataSDD.cxx:110
 AliITSCompressRawDataSDD.cxx:111
 AliITSCompressRawDataSDD.cxx:112
 AliITSCompressRawDataSDD.cxx:113
 AliITSCompressRawDataSDD.cxx:114
 AliITSCompressRawDataSDD.cxx:115
 AliITSCompressRawDataSDD.cxx:116
 AliITSCompressRawDataSDD.cxx:117
 AliITSCompressRawDataSDD.cxx:118
 AliITSCompressRawDataSDD.cxx:119
 AliITSCompressRawDataSDD.cxx:120
 AliITSCompressRawDataSDD.cxx:121
 AliITSCompressRawDataSDD.cxx:122
 AliITSCompressRawDataSDD.cxx:123
 AliITSCompressRawDataSDD.cxx:124
 AliITSCompressRawDataSDD.cxx:125
 AliITSCompressRawDataSDD.cxx:126
 AliITSCompressRawDataSDD.cxx:127
 AliITSCompressRawDataSDD.cxx:128
 AliITSCompressRawDataSDD.cxx:129
 AliITSCompressRawDataSDD.cxx:130
 AliITSCompressRawDataSDD.cxx:131
 AliITSCompressRawDataSDD.cxx:132
 AliITSCompressRawDataSDD.cxx:133
 AliITSCompressRawDataSDD.cxx:134
 AliITSCompressRawDataSDD.cxx:135
 AliITSCompressRawDataSDD.cxx:136
 AliITSCompressRawDataSDD.cxx:137
 AliITSCompressRawDataSDD.cxx:138
 AliITSCompressRawDataSDD.cxx:139
 AliITSCompressRawDataSDD.cxx:140
 AliITSCompressRawDataSDD.cxx:141
 AliITSCompressRawDataSDD.cxx:142
 AliITSCompressRawDataSDD.cxx:143
 AliITSCompressRawDataSDD.cxx:144
 AliITSCompressRawDataSDD.cxx:145
 AliITSCompressRawDataSDD.cxx:146
 AliITSCompressRawDataSDD.cxx:147
 AliITSCompressRawDataSDD.cxx:148
 AliITSCompressRawDataSDD.cxx:149
 AliITSCompressRawDataSDD.cxx:150
 AliITSCompressRawDataSDD.cxx:151