#include "AliMUON2DMapIterator.h"
#include "AliMpExMap.h"
#include "AliMpIntPair.h"
+#include "AliMpManuList.h"
+#include "AliMpDEManager.h"
+#include "AliMUONConstants.h"
/// \class AliMUON2DMap
/// \brief Basic implementation of AliMUONV2DStore container using
/// \endcond
//_____________________________________________________________________________
-AliMUON2DMap::AliMUON2DMap() : AliMUONV2DStore(), fMap(new AliMpExMap(true))
+AliMUON2DMap::AliMUON2DMap(Bool_t optimizeForDEManu)
+: AliMUONV2DStore(),
+ fMap(new AliMpExMap(true)),
+ fOptimizeForDEManu(optimizeForDEManu)
{
/// Default constructor.
+ if ( fOptimizeForDEManu )
+ {
+ Int_t nDEs(0);
+ for ( Int_t i = 0; i < AliMUONConstants::NTrackingCh(); ++i )
+ {
+ nDEs += AliMpDEManager::GetNofDEInChamber(i);
+ }
+ fMap->SetSize(nDEs);
+ }
}
//_____________________________________________________________________________
AliMUON2DMap::AliMUON2DMap(const AliMUON2DMap& other)
: AliMUONV2DStore(),
-fMap(0x0)
+fMap(0x0),
+fOptimizeForDEManu(kFALSE)
{
/// Copy constructor.
delete fMap;
}
+//_____________________________________________________________________________
+AliMUONV2DStore*
+AliMUON2DMap::CloneEmpty() const
+{
+ /// Create a void copy of *this.
+ return new AliMUON2DMap;
+}
+
//_____________________________________________________________________________
void
-AliMUON2DMap::CopyTo(AliMUON2DMap&) const
+AliMUON2DMap::CopyTo(AliMUON2DMap& dest) const
{
-/// Copy this into dest.
+ /// Copy this into dest.
- AliFatal("Implement me if needed");
+ delete dest.fMap;
+ dest.fMap = new AliMpExMap(*fMap);
+ dest.fOptimizeForDEManu = fOptimizeForDEManu;
}
//_____________________________________________________________________________
if ( !o )
{
AliMpExMap* m = new AliMpExMap(true);
+ if ( fOptimizeForDEManu )
+ {
+ Int_t n(AliMpManuList::NumberOfManus(i));
+ if (!n)
+ {
+ AliError(Form("This does not look right : i = %d is supposed to "
+ "be a DetElemId with n = %d manus!",i,n));
+ }
+ else
+ {
+ m->SetSize(n);
+ }
+ }
fMap->Add(i,m);
o = fMap->GetValue(i);
}
class AliMUON2DMap : public AliMUONV2DStore
{
public:
- AliMUON2DMap();
+ AliMUON2DMap(Bool_t optimizeForDEManu=kFALSE);
virtual ~AliMUON2DMap();
+ AliMUONV2DStore* CloneEmpty() const;
+
/// The returned iterator is owned by the client.
AliMUONVDataIterator* Iterator() const;
virtual Bool_t IsOwner() const { return kTRUE; }
virtual void Print(Option_t* opt="") const;
-
-protected:
+
AliMUON2DMap(const AliMUON2DMap& other);
AliMUON2DMap& operator = (const AliMUON2DMap& other);
private:
AliMpExMap* fMap; ///< Our internal map (an AliMpExMap of AliMpExMaps)
+ Bool_t fOptimizeForDEManu; ///< whether (i,j) pair is supposed to be (DetElemId,ManuId) (allow us to allocate right amount of memory, that's all it does.
- ClassDef(AliMUON2DMap,1) // A 2D container
+ ClassDef(AliMUON2DMap,2) // A 2D container
};
#endif