#include "AliL3MemHandler.h"
#include "AliL3DigitData.h"
#ifdef use_newio
-#include "../RAW/AliRawReaderRoot.h"
-#include "../RAW/AliRawReaderDate.h"
+#include "AliRawReaderRoot.h"
+#include "AliRawReaderDate.h"
#else
#include "AliL3DDLTPCRawStream.h"
#include "AliL3DDLRawReaderFile.h"
AliL3DDLDataFileHandler::AliL3DDLDataFileHandler()
{
+ // default constructor
fReader=0;
fTPCStream=0;
}
AliL3DDLDataFileHandler::~AliL3DDLDataFileHandler()
{
+ // destructor
FreeAll();
}
void AliL3DDLDataFileHandler::FreeAll()
{
+ // frees all heap memory
if(fReader) delete fReader;
- if(fTPCStream) delete fTPCStream;
fReader = 0;
+ if(fTPCStream) delete fTPCStream;
fTPCStream = 0;
}
#ifdef use_newio
+Bool_t AliL3DDLDataFileHandler::SetReaderInput(AliRawEvent *rawevent)
+{
+ // sets the input of the reader
+ fEvent=-1;
+ fFilename="";
+ if(fReader) delete fReader;
+ fReader=new AliRawReaderRoot(rawevent);
+ if(fTPCStream) delete fTPCStream;
+ fTPCStream=new AliTPCRawStream(fReader);
+
+ return kTRUE;
+}
+
Bool_t AliL3DDLDataFileHandler::SetReaderInput(Char_t *name,Int_t event)
{
+ // sets the input of the reader
fEvent=event;
if(fReader) delete fReader;
if(fTPCStream) delete fTPCStream;
fReader=new AliRawReaderRoot(name,event);
} else {
fFilename="";
- fReader=new AliRawReaderDate(name);
+ fReader=new AliRawReaderDate((void *)name);
}
fTPCStream=new AliTPCRawStream(fReader);
#else
Bool_t AliL3DDLDataFileHandler::SetReaderInput(Char_t *name, Bool_t add)
{
+ // sets the input of the reader
if(fReader){
LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::SetReaderInput","File Open")
<<"Reader ptr is already in use"<<ENDLOG;
}
Bool_t AliL3DDLDataFileHandler::SetReaderInput(AliL3DDLRawReaderFile *rf)
{
+ // sets the input of the reader
if(fReader){
LOG(AliL3Log::kError,"AliL3RawDataFileHandler::SetReaderInput","File Open")
<<"Reader ptr is already in use, delete it first"<<ENDLOG;
void AliL3DDLDataFileHandler::CloseReaderInput()
{
+ // closes the input of the reader
if(!fReader){
LOG(AliL3Log::kWarning,"AliL3RawDataFileHandler::CloseReaderInput","File Close")
<<"Nothing to Close"<<ENDLOG;
}
#ifdef use_newio
-Bool_t AliL3DDLDataFileHandler::IsDigit(Int_t i)
+Bool_t AliL3DDLDataFileHandler::IsDigit(Int_t /*i*/) const
{
+ // dummy
return kTRUE;
}
#endif
+#ifndef fast_raw
AliL3DigitRowData * AliL3DDLDataFileHandler::DDLData2Memory(UInt_t &nrow,Int_t event)
{
+ // transfers the DDL data to the memory
#ifdef use_newio
if((fEvent>=0)&&(event!=fEvent)){
fEvent=event;
Int_t nrows=fRowMax-fRowMin+1;
Int_t ndigitcount=0;
- Int_t ndigits[nrows];
+ Int_t * ndigits = new Int_t[nrows];
UShort_t ***charges=new UShort_t**[nrows];
for(Int_t r=fRowMin;r<=fRowMax;r++){
Int_t lrow=r-fRowMin;
for(Int_t j=0;j<AliL3Transform::GetNTimeBins();j++) charges[lrow][k][j]=0;
}
}
-
- Int_t ddls_to_search=0;
+
+ Int_t ddlsToSearch=0;
Int_t ddls[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
Int_t ddlid=-1,lddlid=-1;
for(Int_t r=fRowMin;r<=fRowMax;r++){
ddlid=70+(sector-36)*4+patch;
if((lddlid!=ddlid-1)&&(r==30)){ //dont forget the split row on the last ddl
- ddls[ddls_to_search++]=ddlid-1;
+ ddls[ddlsToSearch++]=ddlid-1;
lddlid=ddlid-1;
}
+
if((lddlid==-1)||(ddlid!=lddlid)){
- ddls[ddls_to_search++]=ddlid;
+ ddls[ddlsToSearch++]=ddlid;
lddlid=ddlid;
}
if((r==90)||(r==139)){ //dont forget the split row on the next ddl
- ddls[ddls_to_search++]=ddlid+1;
+ ddls[ddlsToSearch++]=ddlid+1;
lddlid=ddlid+1;
}
}
- //for(Int_t i=0;i<ddls_to_search;i++) cout << ddls[i] <<endl;
- for(Int_t i=0;i<ddls_to_search;i++){
+ // for(Int_t i=0;i<ddlsToSearch;i++) cout << ddls[i] <<endl;
+
+ if(ddls[0]>ddls[ddlsToSearch-1]) {
+ Int_t tempddl = ddls[0];
+ ddls[0] = ddls[ddlsToSearch-1];
+ ddls[ddlsToSearch-1] = tempddl;
+ }
#ifdef use_newio
fReader->Reset();
- fReader->Select(0,ddls[i],ddls[i]+1);
+ fReader->Select(0,ddls[0],ddls[ddlsToSearch-1]);
+ fTPCStream->Reset();
#else
fTPCStream->SetDDLID(ddls[i]); //ddl to read out
#endif
+ Int_t zerosup = AliL3Transform::GetZeroSup();
+ Int_t adcsat = AliL3Transform::GetADCSat();
+ Int_t slice,srow;
+ Int_t lrow=-1;
while (fTPCStream->Next()){
-
- UShort_t dig=fTPCStream->GetSignal();
- if(dig <= AliL3Transform::GetZeroSup()) continue;
- if(dig >= AliL3Transform::GetADCSat())
- dig = AliL3Transform::GetADCSat();
- Int_t time=fTPCStream->GetTime();
- Int_t pad=fTPCStream->GetPad();
- Int_t sector=fTPCStream->GetSector();
- Int_t row=fTPCStream->GetRow();
- Int_t slice,srow;
+ if(fTPCStream->IsNewSector() || fTPCStream->IsNewRow()) {
+ Int_t sector=fTPCStream->GetSector();
+ Int_t row=fTPCStream->GetRow();
+ AliL3Transform::Sector2Slice(slice,srow,sector,row);
+ if(slice!=fSlice){
+ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Slice")
+ <<AliL3Log::kDec<<"Found slice "<<slice<<", expected "<<fSlice<<ENDLOG;
+ continue;
+ }
+ lrow=srow-fRowMin;
+ }
//test row criteria (patch boundaries)
- AliL3Transform::Sector2Slice(slice,srow,sector,row);
if((srow<fRowMin)||(srow>fRowMax))continue;
- if(slice!=fSlice){
- LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Slice")
- <<AliL3Log::kDec<<"Found slice "<<slice<<", expected "<<fSlice<<ENDLOG;
- continue;
- }
-
- //cut out the inner cone
- Float_t xyz[3];
- AliL3Transform::Raw2Local(xyz,sector,row,pad,time);
- if(AliL3Transform::Row2X(srow)<230./250.*fabs(xyz[2]))
- continue; // why 230???
- Int_t lrow=srow-fRowMin;
- if((lrow<0)||lrow>=nrows){
- LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Row")
- <<AliL3Log::kDec<<"Row value out of bounds "<<lrow<<" "<<nrows<<ENDLOG;
- continue;
- }
- if((pad<0)||(pad>=AliL3Transform::GetNPads(srow))){
- LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Pad")
- <<AliL3Log::kDec<<"Pad value out of bounds "<<pad<<" "
- <<AliL3Transform::GetNPads(srow)<<ENDLOG;
- continue;
+ Int_t pad=fTPCStream->GetPad();
+ if(fTPCStream->IsNewPad()) {
+ if((pad<0)||(pad>=AliL3Transform::GetNPads(srow))){
+ LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Pad")
+ <<AliL3Log::kDec<<"Pad value out of bounds "<<pad<<" "
+ <<AliL3Transform::GetNPads(srow)<<ENDLOG;
+ continue;
+ }
}
+
+ Int_t time=fTPCStream->GetTime();
if((time<0)||(time>=AliL3Transform::GetNTimeBins())){
LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Time")
<<AliL3Log::kDec<<"Time out of bounds "<<time<<" "
}
//store digit
+ UShort_t dig=fTPCStream->GetSignal();
+ if(dig <= zerosup) continue;
+ if(dig >= adcsat) dig = adcsat;
+
ndigits[lrow]++; //for this row only
ndigitcount++; //total number of digits to be published
charges[lrow][pad][time]=dig;
}
- }
-
+
Int_t size = sizeof(AliL3DigitData)*ndigitcount
+ nrows*sizeof(AliL3DigitRowData);
delete charges[lrow];
}
delete charges;
+ delete [] ndigits;
return data;
}
+#else
+AliL3DigitRowData * AliL3DDLDataFileHandler::DDLData2Memory(UInt_t &nrow,Int_t event)
+{
+ // transfers the DDL data to the memory
+#ifdef use_newio
+ if((fEvent>=0)&&(event!=fEvent)){
+ fEvent=event;
+ if(fReader) delete fReader;
+ if(fTPCStream) delete fTPCStream;
+ fReader=new AliRawReaderRoot(fFilename,event);
+ fTPCStream=new AliTPCRawStream(fReader);
+ }
+#endif
+ AliL3DigitRowData *data = 0;
+ nrow=0;
+
+ if(!fReader){
+ LOG(AliL3Log::kWarning,"AliL3DDLDataFileHandler::DDLData2Memory","File")
+ <<"No Input avalible: no object AliL3DDLRawReaderFile"<<ENDLOG;
+ return 0;
+ }
+
+ Int_t nrows=fRowMax-fRowMin+1;
+
+ Int_t ddlsToSearch=0;
+ Int_t ddls[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
+ Int_t ddlid=-1,lddlid=-1;
+ for(Int_t r=fRowMin;r<=fRowMax;r++){
+
+ Int_t patch=AliL3Transform::GetPatch(r);
+ Int_t sector,row;
+ AliL3Transform::Slice2Sector(fSlice,r,sector,row);
+
+ if(sector<36) //taken from AliTPCBuffer160.cxx
+ ddlid=sector*2+patch;
+ else
+ ddlid=70+(sector-36)*4+patch;
+
+ if((lddlid==-1)||(ddlid!=lddlid)){
+ ddls[ddlsToSearch++]=ddlid;
+ lddlid=ddlid;
+ }
+ }
+ // for(Int_t i=0;i<ddlsToSearch;i++) cout << ddls[i] <<endl;
+
+#ifdef use_newio
+ fReader->Reset();
+ fReader->Select(0,ddls[0],ddls[ddlsToSearch-1]);
+ fTPCStream->Reset();
+#else
+ fTPCStream->SetDDLID(ddls[i]); //ddl to read out
+#endif
+
+ nrow = (UInt_t)nrows;
+
+ return data;
+}
+#endif
Bool_t AliL3DDLDataFileHandler::DDLData2CompBinary(Int_t event)
{
+ // transfers the DDL data to the memory and converts it
+ // to comp binary
Bool_t out = kTRUE;
UInt_t ndigits=0;
AliL3DigitRowData *digits=0;