#include "AliTRDdigit.h"
#include "AliTRDgeometry.h"
#include "AliTRDSignalIndex.h"
+#include "AliTRDReconstructor.h"
ClassImp(AliTRDdigitsManager)
const Int_t AliTRDdigitsManager::fgkNDict = kNDict;
//_____________________________________________________________________________
-AliTRDdigitsManager::AliTRDdigitsManager()
+AliTRDdigitsManager::AliTRDdigitsManager(Bool_t rawRec)
:TObject()
,fEvent(0)
,fTree(0)
,fUseDictionaries(kTRUE)
,fTreeD(0)
,fBranch(0)
+ ,fDets(AliTRDgeometry::Ndet())
+ ,fRawRec(rawRec)
{
//
// Default constructor
//
+
+ if(fRawRec)
+ {
+ fDets=1;
+ fRawRec=kTRUE;
+ }
for (Int_t iDict = 0; iDict < kNDict; iDict++)
{
fDict[iDict] = NULL;
- }
-
- fSignalIndexes = new TObjArray(AliTRDgeometry::Ndet());
-
+ }
}
//_____________________________________________________________________________
,fUseDictionaries(kTRUE)
,fTreeD(m.fTree)
,fBranch(m.fBranch)
+ ,fDets(m.fDets)
+ ,fRawRec(m.fRawRec)
{
//
// AliTRDdigitsManager copy constructor
// AliTRDdigitsManager destructor
//
+
if (fDigits)
{
fDigits->Delete();
for (Int_t iDict = 0; iDict < kNDict; iDict++)
{
- fDict[iDict]->Delete();
- delete fDict[iDict];
- fDict[iDict] = NULL;
+ if(fDict[iDict])
+ {
+ fDict[iDict]->Delete();
+ delete fDict[iDict];
+ fDict[iDict] = NULL;
+ }
}
if (fSignalIndexes)
((AliTRDdigitsManager &) m).fEvent = fEvent;
((AliTRDdigitsManager &) m).fHasSDigits = fHasSDigits;
- ((AliTRDdigitsManager &) m).fDigits = fDigits;
+ ((AliTRDdigitsManager &) m).fDigits = fDigits;
for(Int_t i=0; i<kNDict; i++)
{
((AliTRDdigitsManager &) m).fDict[i] = fDict[i];
}
((AliTRDdigitsManager &) m).fSignalIndexes = fSignalIndexes;
((AliTRDdigitsManager &) m).fUseDictionaries = fUseDictionaries;
+ ((AliTRDdigitsManager &) m).fDets = fDets;
+ ((AliTRDdigitsManager &) m).fRawRec = fRawRec;
TObject::Copy(m);
fDigits->Delete();
delete fDigits;
}
- fDigits = new TObjArray(AliTRDgeometry::Ndet());
- for (Int_t index = 0; index < AliTRDgeometry::Ndet(); index++)
- {
- AliTRDarraySignal *chamber= new AliTRDarraySignal();
- chamber->SetNdet(index);
- fDigits->AddAt(chamber,index);
- }
+ fDigits = new TObjArray(fDets);
+ for (Int_t index = 0; index < fDets; index++)
+ fDigits->AddAt(new AliTRDarraySignal(),index);
}
else
{
fDigits->Delete();
delete fDigits;
}
- fDigits = new TObjArray(AliTRDgeometry::Ndet());
- for (Int_t index = 0; index < AliTRDgeometry::Ndet(); index++)
- {
- AliTRDarrayADC *chamber= new AliTRDarrayADC();
- chamber->SetNdet(index);
- fDigits->AddAt(chamber,index);
- }
+ fDigits = new TObjArray(fDets);
+ for (Int_t index = 0; index < fDets;index++)
+ fDigits->AddAt(new AliTRDarrayADC(),index);
}
if (fUseDictionaries)
delete fDict[iDict];
}
for(Int_t iDict = 0; iDict < kNDict; iDict++)
- {
- fDict[iDict] = new TObjArray(AliTRDgeometry::Ndet());
- }
+ fDict[iDict] = new TObjArray(fDets);
for (Int_t iDict = 0; iDict < kNDict; iDict++)
- {
- for (Int_t index = 0; index < AliTRDgeometry::Ndet(); index++)
- {
- AliTRDarrayDictionary *dictio= new AliTRDarrayDictionary();
- dictio->SetNdet(index);
- fDict[iDict]->AddAt(dictio,index);
- }
- }
+ for (Int_t index = 0; index < fDets; index++)
+ fDict[iDict]->AddAt(new AliTRDarrayDictionary(),index);
}
-
- for (Int_t i = 0; i < AliTRDgeometry::Ndet(); i++)
+
+ if(fSignalIndexes)
{
- fSignalIndexes->AddLast(new AliTRDSignalIndex());
- }
+ fSignalIndexes->Delete();
+ delete fSignalIndexes;
+ }
+ fSignalIndexes = new TObjArray(fDets);
+ for (Int_t i = 0; i < fDets; i++)
+ fSignalIndexes->AddLast(new AliTRDSignalIndex());
}
// Reset the data arrays
//
- if (fDigits)
+ if (fDigits)
{
fDigits->Delete();
delete fDigits;
}
-
- for (Int_t iDict = 0; iDict < kNDict; iDict++)
- {
- if (fDict[iDict])
- {
- fDict[iDict]->Delete();
- delete fDict[iDict];
- }
- }
-
if (fHasSDigits)
{
- fDigits = new TObjArray(AliTRDgeometry::Ndet());
- for (Int_t index = 0; index < AliTRDgeometry::Ndet(); index++)
- {
- AliTRDarraySignal *chamber= new AliTRDarraySignal();
- chamber->SetNdet(index);
- fDigits->AddAt(chamber,index);
- }
+ fDigits = new TObjArray(fDets);
+ for (Int_t index = 0; index < fDets; index++)
+ fDigits->AddAt(new AliTRDarraySignal(),index);
}
- else
+ else
{
- fDigits = new TObjArray(AliTRDgeometry::Ndet());
- for (Int_t index = 0; index < AliTRDgeometry::Ndet(); index++)
+ fDigits = new TObjArray(fDets);
+ for (Int_t index = 0; index < fDets; index++)
+ fDigits->AddAt(new AliTRDarrayADC(),index);
+ }
+
+ for (Int_t iDict = 0; iDict < kNDict; iDict++)
+ {
+ if (fDict[iDict])
{
- AliTRDarrayADC *chamber= new AliTRDarrayADC();
- chamber->SetNdet(index);
- fDigits->AddAt(chamber,index);
+ fDict[iDict]->Delete();
+ delete fDict[iDict];
+ fDict[iDict]=NULL;
}
}
-
if (fUseDictionaries)
{
for(Int_t iDict = 0; iDict < kNDict; iDict++)
- {
- fDict[iDict] = new TObjArray(AliTRDgeometry::Ndet());
- }
+ fDict[iDict] = new TObjArray(fDets);
+
for (Int_t iDict = 0; iDict < kNDict; iDict++)
- {
- for (Int_t index = 0; index < AliTRDgeometry::Ndet(); index++)
- {
- AliTRDarrayDictionary *dictio= new AliTRDarrayDictionary();
- dictio->SetNdet(index);
- fDict[iDict]->AddAt(dictio,index);
- }
- }
+ for (Int_t index = 0; index < fDets; index++)
+ fDict[iDict]->AddAt(new AliTRDarrayDictionary(),index);
}
-
- for (Int_t i = 0; i < AliTRDgeometry::Ndet(); i++)
+
+ if(fSignalIndexes)
{
- AliTRDSignalIndex *idx = (AliTRDSignalIndex *) fSignalIndexes->At(i);
- if (idx) idx->Reset();
+ fSignalIndexes->Delete();
+ delete fSignalIndexes;
}
+ fSignalIndexes = new TObjArray(fDets);
+ for (Int_t i = 0; i < fDets; i++)
+ fSignalIndexes->AddLast(new AliTRDSignalIndex());
+}
+//_____________________________________________________________________________
+void AliTRDdigitsManager::ResetArrays(Int_t det)
+{
+ Int_t RecoDet = fRawRec ? 0 : det;
+
+ RemoveDigits(RecoDet);
+ RemoveDictionaries(RecoDet);
+ RemoveIndexes(RecoDet);
+
+ if (fHasSDigits)
+ fDigits->AddAt(new AliTRDarraySignal(),RecoDet);
+ else
+ fDigits->AddAt(new AliTRDarrayADC(),RecoDet);
+
+ if (fUseDictionaries)
+ {
+ for (Int_t iDict = 0; iDict < kNDict; iDict++)
+ fDict[iDict]->AddAt(new AliTRDarrayDictionary(),RecoDet);
+ }
+
+ fSignalIndexes->AddAt(new AliTRDSignalIndex(),RecoDet);
}
//_____________________________________________________________________________
// Returns the amplitude of a digit
//
- if (!GetDigits(det))
- {
- return 0;
- }
+ if (!GetDigits(det)) return 0;
return ((Short_t) ((AliTRDarrayADC *) GetDigits(det))->GetDataB(row,col,time));
// Returns the pad status for the requested pad
//
- if (!GetDigits(det))
- {
- return 0;
- }
+ if (!GetDigits(det)) return 0;
return ((UChar_t) ((AliTRDarrayADC *) GetDigits(det))->GetPadStatus(row,col,time));
// Returns the digits array for one detector
//
+ Int_t RecoDet = fRawRec ? 0 : det;
+
if (!fDigits)
{
return 0x0;
if (!fHasSDigits)
{
- return (AliTRDarrayADC *) fDigits->At(det);
+ ((AliTRDarrayADC *) fDigits->At(RecoDet))->SetNdet(det);
+ return (AliTRDarrayADC *) fDigits->At(RecoDet);
}
else
{
// Returns the sdigits array for one detector
//
+ Int_t RecoDet = fRawRec ? 0 : det;
+
if (!fDigits)
{
// AliDebug(1,"NO FDIGITS!");
if (fHasSDigits)
{
- return (AliTRDarraySignal *) fDigits->At(det);
+ ((AliTRDarraySignal *) fDigits->At(RecoDet))->SetNdet(det);
+ return (AliTRDarraySignal *) fDigits->At(RecoDet);
}
else
{
// Returns the dictionary for one detector
//
+ Int_t RecoDet = fRawRec ? 0 : det;
+
if (fUseDictionaries == kFALSE)
{
return 0x0;
}
- return (AliTRDarrayDictionary *) fDict[i]->At(det);
+ ((AliTRDarrayDictionary *) fDigits->At(RecoDet))->SetNdet(det);
+ return (AliTRDarrayDictionary *) fDict[i]->At(RecoDet);
}
// Returns indexes of active pads
//
- return (AliTRDSignalIndex *) fSignalIndexes->At(det);
+ Int_t RecoDet = fRawRec ? 0 : det;
+
+ return (AliTRDSignalIndex *) fSignalIndexes->At(RecoDet);
}
// Clear memory at det for Digits
//
- if (fDigits->At(det))
+ Int_t RecoDet = fRawRec ? 0 : det;
+
+ if (fDigits->At(RecoDet))
{
- fDigits->RemoveAt(det);
+ if (fHasSDigits)
+ {
+ AliTRDarraySignal *arr = (AliTRDarraySignal *) fDigits->RemoveAt(RecoDet);
+ delete arr;
+ }
+ else
+ {
+ AliTRDarrayADC *arr = (AliTRDarrayADC *) fDigits->RemoveAt(RecoDet);
+ delete arr;
+ }
}
}
// Clear memory
//
+ Int_t RecoDet = fRawRec ? 0 : det;
+
if (fUseDictionaries == kFALSE)
{
return;
for (Int_t i = 0; i < kNDict; i++)
{
- if (fDict[i]->At(det))
+ if (fDict[i]->At(RecoDet))
{
- fDict[i]->RemoveAt(det);
+ AliTRDarrayDictionary *arr = (AliTRDarrayDictionary *) fDict[i]->RemoveAt(RecoDet);
+ delete arr;
}
}
}
+//_____________________________________________________________________________
+void AliTRDdigitsManager::RemoveIndexes(Int_t det)
+{
+ //
+ // Clear memory
+ //
+
+ Int_t RecoDet = fRawRec ? 0 : det;
+
+ if (fSignalIndexes->At(RecoDet))
+ {
+ AliTRDSignalIndex *arr = (AliTRDSignalIndex *) fSignalIndexes->RemoveAt(RecoDet);
+ delete arr;
+ }
+
+}
+
+
//_____________________________________________________________________________
void AliTRDdigitsManager::ClearIndexes(Int_t det)
{
//
// Clear memory
//
+
+ Int_t RecoDet = fRawRec ? 0 : det;
- ((AliTRDSignalIndex *) fSignalIndexes->At(det))->ClearAll();
+ ((AliTRDSignalIndex *) fSignalIndexes->At(RecoDet))->ClearAll();
}
Int_t isig = digits->GetDataB(ir,ic,it);
if (isig > 0)
{
- indexes->AddIndexTBin(ir,ic,it);
+ indexes->AddIndexRC(ir,ic);
}
} // tbins
} // cols
// Loop through all detectors and read them from the tree
Bool_t status = kTRUE;
- for (Int_t iDet = 0; iDet < AliTRDgeometry::Ndet(); iDet++)
+ for (Int_t iDet = 0; iDet < fDets; iDet++)
{
if(fHasSDigits)
{
// Loop through all detectors and read them from the tree
Bool_t status = kTRUE;
- for (Int_t iDet = 0; iDet < AliTRDgeometry::Ndet(); iDet++)
+ for (Int_t iDet = 0; iDet < fDets; iDet++)
{
AliTRDarrayDictionary *dataArray = (AliTRDarrayDictionary *) object->At(iDet);
if (!dataArray)
// Loop through all detectors and fill them into the tree
Bool_t status = kTRUE;
- for (Int_t iDet = 0; iDet < AliTRDgeometry::Ndet(); iDet++)
+ for (Int_t iDet = 0; iDet < fDets; iDet++)
{
if (fHasSDigits)
{
// Loop through all detectors and fill them into the tree
Bool_t status = kTRUE;
- for (Int_t iDet = 0; iDet < AliTRDgeometry::Ndet(); iDet++)
+ for (Int_t iDet = 0; iDet < fDets; iDet++)
{
const AliTRDarrayDictionary *kDataArray = (AliTRDarrayDictionary *) array3->At(iDet);
if (!kDataArray)