#include "AliFMDHit.h" // ALIFMDHIT_H
// #include "AliFMDDigit.h" // ALIFMDDIGIT_H
#include "AliFMDParameters.h" // ALIFMDPARAMETERS_H
-// #include <AliRunDigitizer.h> // ALIRUNDIGITIZER_H
+// #include <AliDigitizationInput.h> // ALIRUNDIGITIZER_H
//#include <AliRun.h> // ALIRUN_H
#include <AliLoader.h> // ALILOADER_H
#include <AliRun.h> // ALILOADER_H
AliFMDMap::kMaxSectors,
AliFMDMap::kMaxStrips),
fShapingTime(6),
- fStoreTrackRefs(kTRUE)
+ fStoreTrackRefs(kTRUE),
+ fIgnoredLabels(0)
{
AliFMDDebug(1, ("Constructed"));
// Default ctor - don't use it
}
//____________________________________________________________________
-AliFMDBaseDigitizer::AliFMDBaseDigitizer(AliRunDigitizer* manager)
- : AliDigitizer(manager, "AliFMDBaseDigitizer", "FMD Digitizer base class"),
+AliFMDBaseDigitizer::AliFMDBaseDigitizer(AliDigitizationInput* digInput)
+ : AliDigitizer(digInput, "AliFMDBaseDigitizer", "FMD Digitizer base class"),
fFMD(0),
fRunLoader(0),
- fEdep(AliFMDMap::kMaxDetectors,
- AliFMDMap::kMaxRings,
- AliFMDMap::kMaxSectors,
- AliFMDMap::kMaxStrips),
+ fEdep(0), // nDet==0 means 51200 slots
fShapingTime(6),
- fStoreTrackRefs(kTRUE)
+ fStoreTrackRefs(kTRUE),
+ fIgnoredLabels(0)
{
// Normal CTOR
AliFMDDebug(1, ("Constructed"));
: AliDigitizer(name, title),
fFMD(0),
fRunLoader(0),
- fEdep(AliFMDMap::kMaxDetectors,
- AliFMDMap::kMaxRings,
- AliFMDMap::kMaxSectors,
- AliFMDMap::kMaxStrips),
+ fEdep(0), // nDet==0 means 51200 slots
fShapingTime(6),
- fStoreTrackRefs(kTRUE)
+ fStoreTrackRefs(kTRUE),
+ fIgnoredLabels(0)
{
// Normal CTOR
AliFMDDebug(1, (" Constructed"));
// Destructor
}
+//____________________________________________________________________
+AliFMDBaseDigitizer&
+AliFMDBaseDigitizer::operator=(const AliFMDBaseDigitizer& o)
+{
+ //
+ // Assignment operator
+ //
+ // Return:
+ // Reference to this object
+ //
+ if (&o == this) return *this;
+ AliDigitizer::operator=(o);
+ fRunLoader = o.fRunLoader;
+ fEdep = o.fEdep;
+ fShapingTime = o.fShapingTime;
+ fStoreTrackRefs = o.fStoreTrackRefs;
+ fIgnoredLabels = o.fIgnoredLabels;
+ return *this;
+}
+
//____________________________________________________________________
Bool_t
AliFMDBaseDigitizer::Init()
{
// Add edep contribution from (detector,ring,sector,strip) to cache
AliFMDParameters* param = AliFMDParameters::Instance();
-
+ AliFMDDebug(10, ("Adding contribution %7.5f for FMD%d%c[%2d,%3d] "
+ " from %d tracks (%s)",
+ edep,
+ detector,
+ ring,
+ sector,
+ strip,
+ nTrack,
+ (isPrimary ? "primary" : "secondary")));
// Check if strip is `dead'
if (param->IsDead(detector, ring, sector, strip)) {
AliFMDDebug(5, ("FMD%d%c[%2d,%3d] is marked as dead",
detector, ring, sector, strip));
// Sum energy deposition
+ Int_t oldN = entry.fN;
entry.fEdep += edep;
entry.fN += nTrack;
if (isPrimary) entry.fNPrim += nTrack;
if (fStoreTrackRefs) {
- Int_t oldN = entry.fLabels.fN;
- entry.fLabels.Set(entry.fN);
- for (Int_t i = 0; i < nTrack; i++)
+ if (entry.fLabels.fN < entry.fN) {
+ AliFMDDebug(15, ("== New label array size %d, was %d, added %d",
+ entry.fN, entry.fLabels.fN, nTrack));
+ entry.fLabels.Set(entry.fN);
+ }
+ for (Int_t i = 0; i < nTrack; i++) {
+ AliFMDDebug(15, ("=> Setting track label # %d", oldN+i));
entry.fLabels[oldN + i] = tracknos[i];
+ AliFMDDebug(15, ("<= Setting track label # %d", oldN+i));
+ }
}
- AliFMDDebug(15, ("Adding contribution %f to FMD%d%c[%2d,%3d] (%f) track %d",
- edep, detector, ring, sector, strip,
- entry.fEdep, (nTrack > 0 ? tracknos[0] : -1)));
+ AliFMDDebug(15,("Adding contribution %f to FMD%d%c[%2d,%3d] (%f) track %d",
+ edep, detector, ring, sector, strip,
+ entry.fEdep, (nTrack > 0 ? tracknos[0] : -1)));
}
// the digits array (AliFMD::fDigits)
//
AliFMDDebug(5, ("Will now digitize all the summed signals"));
+ fIgnoredLabels = 0;
AliFMDGeometry* geometry = AliFMDGeometry::Instance();
TArrayI counts(4);
} // Sector
} // Ring
} // Detector
+ if (fIgnoredLabels > 0)
+ AliWarning(Form("%d track labels could not be associated with digits "
+ "due to limited storage facilities in AliDigit",
+ fIgnoredLabels));
}
//____________________________________________________________________
Short_t count2,
Short_t count3,
Short_t count4,
- UShort_t /* ntot */,
+ UShort_t ntot,
UShort_t /* nprim */,
const TArrayI& refs) const
{
// Add a digit or summable digit
-
fFMD->AddDigitByFields(detector, ring, sector, strip,
- count1, count2, count3, count4, refs);
+ count1, count2, count3, count4,
+ ntot, fStoreTrackRefs ? refs.fArray : 0);
+ if (fStoreTrackRefs && ntot > 3) fIgnoredLabels += ntot - 3;
}
//____________________________________________________________________
//____________________________________________________________________
void
-AliFMDBaseDigitizer::StoreDigits(AliLoader* loader)
+AliFMDBaseDigitizer::StoreDigits(const AliLoader* loader)
{
// Write the digits to disk
AliFMDDebug(5, ("Storing %d digits", fFMD->Digits()->GetEntries()));