ClassImp(AliMUONClusterStoreV2)
/// \endcond
+//_____________________________________________________________________________
+AliMUONClusterStoreV2::AliMUONClusterStoreV2(TRootIOCtor* /*dummy*/)
+: AliMUONVClusterStore(),
+fClusters(0x0),
+fMap(0x0),
+fMapped(kFALSE)
+{
+ /// Dummy IO ctor that does not allocate memory
+}
+
//_____________________________________________________________________________
AliMUONClusterStoreV2::AliMUONClusterStoreV2()
: AliMUONVClusterStore(),
AliMUONClusterStoreV2& AliMUONClusterStoreV2::operator=(const AliMUONClusterStoreV2& store)
{
/// Assignment operator
- fClusters = new TClonesArray(*(store.fClusters));
- fMap = 0x0;
- fMapped = kFALSE;
- if (store.fMapped) ReMap();
+ if ( this != &store )
+ {
+ fClusters = new TClonesArray(*(store.fClusters));
+ fMap = 0x0;
+ fMapped = kFALSE;
+ if (store.fMapped) ReMap();
+ }
return *this;
}
void AliMUONClusterStoreV2::Clear(Option_t*)
{
/// Clear the internal cluster array AND the index
- fClusters->Clear("C");
- if (fMap) {
- fMap->Clear("C");
- fMapped = kFALSE;
+ if ( fClusters )
+ {
+ fClusters->Clear("C");
+ if (fMap) {
+ Int_t nChamber = AliMpConstants::NofTrackingChambers();
+ for (Int_t chamber=0; chamber<nChamber; chamber++) {
+ AliMpExMap *map = static_cast<AliMpExMap *>(fMap->UncheckedAt(chamber));
+ map->Clear("C");
+ }
+ fMapped = kFALSE;
+ }
}
}
}
//_____________________________________________________________________________
-Bool_t AliMUONClusterStoreV2::Add(const AliMUONVCluster& vCluster)
+AliMUONVCluster* AliMUONClusterStoreV2::Add(const AliMUONVCluster& vCluster)
{
/// Add a cluster to this store
const AliMUONRawClusterV2* cluster = dynamic_cast<const AliMUONRawClusterV2*>(&vCluster);
if (!cluster) {
AliError(Form("Cluster is not of the expected type (%s vs AliMUONRawClusterV2)",
vCluster.ClassName()));
- return kFALSE;
+ return 0x0;
}
// check chamberId
}
// check that there is no cluster with the same Id
- if (FindObject(cluster->GetUniqueID())) {
- AliError("cluster store already contains a cluster with the same ID --> add() aborted");
- return kFALSE;
+ AliMUONVCluster *c = FindObject(cluster->GetUniqueID());
+ if (c) {
+ AliError("cluster store already contains a cluster with the same ID --> add() exited:");
+ c->Print("FULL");
+ return 0x0;
}
// add new cluster
- AliMUONVCluster *c = new((*fClusters)[fClusters->GetLast()+1]) AliMUONRawClusterV2(*cluster);
+ c = new((*fClusters)[fClusters->GetLast()+1]) AliMUONRawClusterV2(*cluster);
if (c) UpdateMap(*c);
- return kTRUE;
+ return c;
}
//_____________________________________________________________________________
// check that there is no cluster with the same Id
AliMUONVCluster *c = FindObject(AliMUONVCluster::BuildUniqueID(chamberId, detElemId, clusterIndex));
if (c) {
- AliError("cluster store already contains a cluster with the same ID --> add() aborted:");
+ AliError("cluster store already contains a cluster with the same ID --> add() exited:");
c->Print("FULL");
return 0x0;
}
/// Remove a cluster
AliMUONVCluster* c = static_cast<AliMUONVCluster*>(fClusters->Remove(&cluster));
- if (c) {
+ if (c)
+ {
fClusters->Compress();
fMapped = kFALSE;
}
+ else
+ {
+ AliError("Could not remove cluster from array");
+ }
return c;
}
// Create (or clear) the TClonesArray of map
Int_t nChamber = AliMpConstants::NofTrackingChambers();
- if (!fMap) fMap = new TClonesArray("AliMpExMap",nChamber);
- else fMap->Clear("C");
- // Create one map per chamber
- AliMpExMap *map;
- for (Int_t chamber=0; chamber<nChamber; chamber++) {
- map = new((*fMap)[chamber]) AliMpExMap(kTRUE);
- map->SetOwner(kFALSE);
+ if (!fMap) {
+ fMap = new TClonesArray("AliMpExMap",nChamber);
+
+ // Create one map per chamber
+ AliMpExMap *map;
+ for (Int_t chamber=0; chamber<nChamber; chamber++) {
+ map = new((*fMap)[chamber]) AliMpExMap;
+ map->SetOwner(kFALSE);
+ }
}
-
+ else {
+ for (Int_t chamber=0; chamber<nChamber; chamber++) {
+ AliMpExMap *map = static_cast<AliMpExMap *>(fMap->UncheckedAt(chamber));
+ map->Clear("C");
+ }
+ }
+
// Fill the maps
TIter next(fClusters);
AliMUONVCluster* cluster;