#include "AliITSdigitSDD.h"
#include "AliRawReader.h"
#include "AliVMERawStream.h"
-#include "AliITSRawStreamSDDv2.h"
-#include "AliITSRawStreamSDDv3.h"
-#include "AliITSRawStreamSDD.h"
+#include "AliITSRawStreamSDDBeamTest.h"
+#include "AliITSRawStreamSDDBeamTestNov04.h"
#include "AliITSBeamTestDigSDD.h"
#include "AliITSEventHeader.h"
#include "AliITSgeom.h"
switch(fBtPer){
case kNov04:
- fStreamer = new AliITSRawStreamSDDv3(fReader);
+ fStreamer = new AliITSRawStreamSDDBeamTestNov04(fReader);
break;
case kAug04:
AliVMERawStream vmeStreamer(fReader);
if(fSDDEvType==2) fITSHeader->SetEventTypeSDD(kCalibration1);
if(fSDDEvType==3) fITSHeader->SetEventTypeSDD(kCalibration2);
fReader->Reset();
- fStreamer = new AliITSRawStreamSDDv2(fReader);
+ fStreamer = new AliITSRawStreamSDDBeamTest(fReader);
break;
}
#include "AliITSBeamTestDig.h"
-class AliITSRawStreamSDD;
+class AliITSRawStreamSDDBeamTest;
typedef enum {kAug04,kNov04} BeamtestPeriod_t;
// November 2004 = kNov04
// August 2004 = kAug04
Int_t fThreshold; // Low carlos threshold
- AliITSRawStreamSDD* fStreamer; //! SDD streamer
+ AliITSRawStreamSDDBeamTest* fStreamer; //! SDD streamer
private:
Int_t GetEventType();
- ClassDef(AliITSBeamTestDigSDD,1) // An Alice SDD beam test digitizer
+ ClassDef(AliITSBeamTestDigSDD,2) // An Alice SDD beam test digitizer
};
AliError("This method must be implemented in a derived class");
return -1;
};
- virtual Int_t GetJitter() {
+ virtual Int_t GetJitter() const {
AliError("This method must be implemented in a derived class");
return -1;
- }; // non cinst in a derived class
+ };
protected :
fLowThresholdArray[im][1]=0;
}
for(Int_t i=0;i<kFifoWords;i++) fNfifo[i]=0;
- for(Int_t i=0;i<kDDLsNumber;i++) fSkip[i]=0;
fRawReader->Reset();
fRawReader->Select("ITSSDD");
virtual Int_t GetEightBitSignal() const {return fEightBitSignal;}
virtual Int_t GetCarlosId() const {return fCarlosId;}
virtual Int_t GetEventId() const {return fEventId;}
- virtual Int_t GetJitter() {return fJitter;} // not const in a daughter class
+ virtual Int_t GetJitter() const {return fJitter;}
- virtual Int_t ReadJitter() const {return 0;}
virtual void SetDecompressAmbra(Bool_t deco=kTRUE){
fDecompressAmbra=deco;
}
virtual void SetDDLModuleMap(AliITSDDLModuleMapSDD* ddlsdd){
if(!fDDLModuleMap) fDDLModuleMap=new AliITSDDLModuleMapSDD();
- fDDLModuleMap->SetDDLMap(ddlsdd);}
- virtual void SetLowCarlosThreshold(Int_t th, Int_t i)
- {fLowThreshold[i]=th;}
+ fDDLModuleMap->SetDDLMap(ddlsdd);
+ }
virtual void SetZeroSuppLowThreshold(Int_t iMod, Int_t iSid, Int_t th)
{fLowThresholdArray[iMod][iSid]=th;}
Int_t GetModuleNumber(UInt_t iDDL, UInt_t iModule) const {
AliITSDDLModuleMapSDD* fDDLModuleMap; // mapping DDL/module -> module number
UInt_t fData; // data read for file
Bool_t fResetSkip; // flag for end of DDL data
- Int_t fSkip[kDDLsNumber];// obsolete -- needed to compile AliITSRawStreamSDDv2
+
Int_t fEventId; // event ID from header
Int_t fCarlosId; // carlos ID
Int_t fChannel; // current channel
Bool_t fReadCode[kModulesPerDDL][2]; // next bits are code or data
UInt_t fReadBits[kModulesPerDDL][2]; // number of bits to read
Int_t fLowThresholdArray[kSDDModules][2]; // array with low thresholds for all modules
- Int_t fLowThreshold[2]; // obsolete -- needed to compile AliITSRawStreamSDDv2
+
Int_t fNfifo[kFifoWords]; // FIFO number
Int_t fTimeBin[kModulesPerDDL][2]; // current timebin [ncarlos][nchannels]
Int_t fAnode[kModulesPerDDL][2]; // current anode [ncarlos][nchannels]
/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * 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. *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id: $*/
///////////////////////////////////////////////////////////////////////////////
///
-/// This class provides access to ITS SDD digits in test beam raw data,
-/// for beam test of August 2004
+/// This class provides access to ITS SDD digits in beam test raw data
///
///////////////////////////////////////////////////////////////////////////////
-#include "AliITSRawStreamSDDv2.h"
+#include "AliLog.h"
+#include "AliITSRawStreamSDDBeamTest.h"
#include "AliRawReader.h"
-ClassImp(AliITSRawStreamSDDv2)
+ClassImp(AliITSRawStreamSDDBeamTest)
+
+const UInt_t AliITSRawStreamSDDBeamTest::fgkCodeLength[8] = {8, 18, 2, 3, 4, 5, 6, 7};
-AliITSRawStreamSDDv2::AliITSRawStreamSDDv2(AliRawReader* rawReader) :
- AliITSRawStreamSDD(rawReader)
-
+//______________________________________________________________________
+AliITSRawStreamSDDBeamTest::AliITSRawStreamSDDBeamTest(AliRawReader* rawReader) :
+ AliITSRawStream(rawReader),
+fData(0),
+fSkip(0),
+fEventId(0),
+fCarlosId(-1),
+fChannel(0),
+fJitter(0)
{
// create an object to read ITS SDD raw digits
-
-
fRawReader->Reset();
fRawReader->SelectEquipment(17, 204, 204);
+
+
+}
+
+//______________________________________________________________________
+UInt_t AliITSRawStreamSDDBeamTest::ReadBits()
+{
+// read bits from the given channel
+ UInt_t result = (fChannelData[fCarlosId][fChannel] & ((1<<fReadBits[fCarlosId][fChannel]) - 1));
+ fChannelData[fCarlosId][fChannel] >>= fReadBits[fCarlosId][fChannel];
+ fLastBit[fCarlosId][fChannel] -= fReadBits[fCarlosId][fChannel];
+ return result;
}
+//______________________________________________________________________
+Int_t AliITSRawStreamSDDBeamTest::DecompAmbra(Int_t value) const
+{
+ // AMBRA decompression (from 8 to 10 bit)
+
+ if ((value & 0x80) == 0) {
+ return value & 0x7f;
+ } else if ((value & 0x40) == 0) {
+ return 0x081 + ((value & 0x3f) << 1);
+ } else if ((value & 0x20) == 0) {
+ return 0x104 + ((value & 0x1f) << 3);
+ } else {
+ return 0x208 + ((value & 0x1f) << 4);
+ }
+
+}
-Bool_t AliITSRawStreamSDDv2::Next()
+//______________________________________________________________________
+Bool_t AliITSRawStreamSDDBeamTest::Next()
{
// read the next raw digit
// returns kFALSE if there is no digit left
// skip the first 8 words
- while (fSkip[0] < 8) {
+ while (fSkip < 8) {
if (!fRawReader->ReadNextInt(fData)) return kFALSE;
if ((fData >> 30) == 0x01) continue; // JTAG word
- if (fSkip[0] == 4) {
+ if (fSkip == 4) {
if (fData != 0) {
Error("Next", "data not valid: %8.8d", fData);
return kFALSE;
}
}
- fSkip[0]++;
+ fSkip++;
}
while (kTRUE) {
}
+
+
--- /dev/null
+#ifndef ALIITSRAWSTREAMSDDBEAMTEST_H
+#define ALIITSRAWSTREAMSDDBEAMTEST_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id: $ */
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This class provides access to ITS SDD digits in raw data
+/// (default=simulated data).
+///////////////////////////////////////////////////////////////////////////////
+
+#include "AliITSRawStream.h"
+
+class AliRawReader;
+
+
+class AliITSRawStreamSDDBeamTest: public AliITSRawStream {
+ public :
+ AliITSRawStreamSDDBeamTest(AliRawReader* rawReader);
+
+ virtual ~AliITSRawStreamSDDBeamTest(){};
+
+ virtual Bool_t Next();
+
+ virtual Int_t GetAnode() const {return fCoord1;}
+ virtual Int_t GetTime() const {return fCoord2;}
+ virtual Int_t GetChannel() const {return fChannel;}
+ virtual Int_t GetCarlosId() const {return fCarlosId;}
+ virtual Int_t GetEventId() const {return fEventId;}
+
+ virtual Int_t ReadJitter(){
+ AliError("Method implemented in only for Nov04 beam test");
+ fJitter=0;
+ return fJitter;
+ }
+ virtual void SetLowCarlosThreshold(Int_t th, Int_t i)
+ {fLowThreshold[i]=th;}
+
+ protected:
+ virtual UInt_t ReadBits();
+ virtual Int_t DecompAmbra(Int_t value) const;
+
+ enum {kModulesPerDDL = 12}; // number of modules in each DDL
+
+ static const UInt_t fgkCodeLength[8]; //code length
+
+ UInt_t fData; // data read for file
+ Int_t fSkip; // counter of header words to be skipped
+ Int_t fEventId; // event ID from header
+ Int_t fCarlosId; // carlos ID
+ Int_t fChannel; // current channel
+ Int_t fJitter; // jitter between L0 and pascal stop (x25ns)
+ ULong64_t fChannelData[kModulesPerDDL][2];// packed data for the 2 channels
+ UInt_t fLastBit[kModulesPerDDL][2]; // last filled bit in fChannelData
+ UInt_t fChannelCode[kModulesPerDDL][2];// current channel code
+ Bool_t fReadCode[kModulesPerDDL][2]; // next bits are code or data
+ UInt_t fReadBits[kModulesPerDDL][2]; // number of bits to read
+
+ Int_t fLowThreshold[2]; // carlos low threshold
+ Int_t fTimeBin[kModulesPerDDL][2]; // current timebin [ncarlos][nchannels]
+ Int_t fAnode[kModulesPerDDL][2]; // current anode [ncarlos][nchannels]
+
+ ClassDef(AliITSRawStreamSDDBeamTest, 1) // class for reading ITS SDD raw digits from beam tests
+};
+
+#endif
bit 1 : parity error CARLOS ch 1
bit 0 : parity error CARLOS ch 2
*/
-#include "AliITSRawStreamSDDv3.h"
+#include "AliITSRawStreamSDDBeamTestNov04.h"
#include "AliRawReader.h"
-ClassImp(AliITSRawStreamSDDv3)
+ClassImp(AliITSRawStreamSDDBeamTestNov04)
-AliITSRawStreamSDDv3::AliITSRawStreamSDDv3(AliRawReader* rawReader) :
- AliITSRawStreamSDD(rawReader)
+AliITSRawStreamSDDBeamTestNov04::AliITSRawStreamSDDBeamTestNov04(AliRawReader* rawReader) :
+ AliITSRawStreamSDDBeamTest(rawReader)
{
// create an object to read ITS SDD raw digits
}
-Bool_t AliITSRawStreamSDDv3::Next()
+Bool_t AliITSRawStreamSDDBeamTestNov04::Next()
{
// read the next raw digit
// returns kFALSE if there is no digit left
// skip the first 8 words
- while (fSkip[0] < 9) {
+ while (fSkip < 9) {
if (!fRawReader->ReadNextInt(fData)) return kFALSE;
if ((fData >> 30) == 0x01) continue; // JTAG word
- fSkip[0]++;
+ fSkip++;
}
Int_t countFoot=0;
}
-Int_t AliITSRawStreamSDDv3::GetJitter() {
+Int_t AliITSRawStreamSDDBeamTestNov04::ReadJitter() {
// Reads the value of the jitter between L0 and pascal stop
// written in the last word of the buffer
if (!fRawReader->ReadNextInt(fData)){
- Error("GetJitter","Jitter word not found!!");
+ Error("ReadJitter","Jitter word not found!!");
return -1; // read last word
}
if ( (fData&0xff000000) != 0xff000000) {
- Error("GetJitter","wrong mask on Jitter word (0xffxxxxxx): %8.8x",fData);
+ Error("ReadJitter","wrong mask on Jitter word (0xffxxxxxx): %8.8x",fData);
return -1; // read last word
}
fJitter = fData&0x000000ff;
if (fJitter<0x7 || fJitter>0xe) {
- Warning("GetJitter","Unexpected jitter value %2.2x (%8.8x)",fJitter,fData);
+ Warning("ReadJitter","Unexpected jitter value %2.2x (%8.8x)",fJitter,fData);
return fJitter; // read last word
}
if (fRawReader->ReadNextInt(fData)){
- Error("GetJitter","The equipment payload contains something after jitter");
+ Error("ReadJitter","The equipment payload contains something after jitter");
return -1; // read last word
}
return fJitter;
-#ifndef ALIITSRAWSTREAMSDDV2_H
-#define ALIITSRAWSTREAMSDDV2_H
+#ifndef ALIITSRAWSTREAMSDDBEAMTESTNOV04_H
+#define ALIITSRAWSTREAMSDDBEAMTESTNOV04_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice */
-/* $Id$ */
+/* $Id: */
///////////////////////////////////////////////////////////////////////////////
///
///
///////////////////////////////////////////////////////////////////////////////
-#include "AliITSRawStreamSDD.h"
+#include "AliITSRawStreamSDDBeamTest.h"
class AliRawReader;
-class AliITSRawStreamSDDv2: public AliITSRawStreamSDD {
+class AliITSRawStreamSDDBeamTestNov04: public AliITSRawStreamSDDBeamTest {
public :
- AliITSRawStreamSDDv2(AliRawReader* rawReader);
- virtual ~AliITSRawStreamSDDv2() {};
+ AliITSRawStreamSDDBeamTestNov04(AliRawReader* rawReader);
+ virtual ~AliITSRawStreamSDDBeamTestNov04() {};
virtual Bool_t Next();
-
+ virtual Int_t ReadJitter();
private :
-
- ClassDef(AliITSRawStreamSDDv2, 1) // class for reading ITS SDD raw digits
+
+ ClassDef(AliITSRawStreamSDDBeamTestNov04, 1) // class for reading ITS SDD raw digits
};
#endif
virtual Int_t GetAnode() const {return fCoord1;}
virtual Int_t GetTime() const {return fCoord2;}
virtual Int_t GetChannel() const {return fChannel;}
- virtual Int_t GetJitter() {return fJitter;}
+ virtual Int_t GetJitter() const {return fJitter;}
virtual Int_t GetCarlosId() const {return fCarlosId;}
virtual UInt_t GetDataWord() const {return fData;}
+++ /dev/null
-#ifndef ALIITSRAWSTREAMSDDV3_H
-#define ALIITSRAWSTREAMSDDV3_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-/* $Id$ */
-
-///////////////////////////////////////////////////////////////////////////////
-///
-/// This class provides access to ITS SDD digits in test beam raw data.
-///
-///////////////////////////////////////////////////////////////////////////////
-
-#include "AliITSRawStreamSDD.h"
-
-class AliRawReader;
-
-
-class AliITSRawStreamSDDv3: public AliITSRawStreamSDD {
- public :
- AliITSRawStreamSDDv3(AliRawReader* rawReader);
- virtual ~AliITSRawStreamSDDv3() {};
-
- virtual Bool_t Next();
- virtual Int_t GetJitter();
- private :
-
-
- ClassDef(AliITSRawStreamSDDv3, 1) // class for reading ITS SDD raw digits
-};
-
-#endif
AliITSDDLRawData.cxx
AliITSRawStream.cxx
AliITSRawStreamSDDCompressed.cxx
- AliITSRawStreamSDDv2.cxx
- AliITSRawStreamSDDv3.cxx
+ AliITSRawStreamSDDBeamTest.cxx
+ AliITSRawStreamSDDBeamTestNov04.cxx
AliITSRawStreamSSD.cxx
AliITSRawStreamSDD.cxx
AliITSCompressRawDataSDD.cxx
#pragma link C++ class AliITSRawStream+;
#pragma link C++ class AliITSRawStreamSDD+;
#pragma link C++ class AliITSRawStreamSDDCompressed+;
-#pragma link C++ class AliITSRawStreamSDDv2+;
-#pragma link C++ class AliITSRawStreamSDDv3+;
+#pragma link C++ class AliITSRawStreamSDDBeamTest+;
+#pragma link C++ class AliITSRawStreamSDDBeamTestNov04+;
#pragma link C++ class AliITSCompressRawDataSDD+;
#pragma link C++ class AliITSRawStreamSPD+;
#pragma link C++ class AliITSRawStreamSSD+;
AliITSDDLRawData.cxx \
AliITSRawStream.cxx \
AliITSRawStreamSDDCompressed.cxx \
- AliITSRawStreamSDDv2.cxx \
- AliITSRawStreamSDDv3.cxx \
+ AliITSRawStreamSDDBeamTest.cxx \
+ AliITSRawStreamSDDBeamTestNov04.cxx \
AliITSRawStreamSSD.cxx \
AliITSRawStreamSDD.cxx \
AliITSCompressRawDataSDD.cxx \