From 183279c1bdb502c85d1e10368c9197e1e72889b7 Mon Sep 17 00:00:00 2001 From: laphecet Date: Tue, 30 Sep 2008 13:03:26 +0000 Subject: [PATCH] Small changes to allow proper unloading of all mapping from memory --- MUON/mapping/AliMpCDB.cxx | 27 ++++++++++++++-------- MUON/mapping/AliMpCDB.h | 4 ++++ MUON/mapping/AliMpDDLStore.cxx | 36 ++++++++++++++--------------- MUON/mapping/AliMpDEStore.cxx | 1 + MUON/mapping/AliMpDEVisu.cxx | 4 +++- MUON/mapping/AliMpSegmentation.cxx | 12 ++++++---- MUON/mapping/AliMpSegmentation.h | 2 +- MUON/mapping/AliMpSt345Reader.cxx | 4 ++-- MUON/mapping/AliMpSt345Reader.h | 2 +- MUON/mapping/AliMpTriggerReader.cxx | 28 +++++++++++----------- MUON/mapping/AliMpTriggerReader.h | 2 +- 11 files changed, 70 insertions(+), 52 deletions(-) diff --git a/MUON/mapping/AliMpCDB.cxx b/MUON/mapping/AliMpCDB.cxx index fbebd55a1f1..22cc4178f2e 100644 --- a/MUON/mapping/AliMpCDB.cxx +++ b/MUON/mapping/AliMpCDB.cxx @@ -26,20 +26,19 @@ #include "AliMpCDB.h" -#include "AliMpSegmentation.h" +#include "AliCDBEntry.h" +#include "AliCDBManager.h" +#include "AliLog.h" #include "AliMpDDLStore.h" -#include "AliMpManuStore.h" +#include "AliMpDEStore.h" +#include "AliMpDataMap.h" #include "AliMpDataProcessor.h" #include "AliMpDataStreams.h" -#include "AliMpDataMap.h" - -#include "AliLog.h" -#include "AliCDBManager.h" -#include "AliCDBEntry.h" - -#include -#include +#include "AliMpManuStore.h" +#include "AliMpSegmentation.h" #include +#include +#include /// \cond CLASSIMP ClassImp(AliMpCDB) @@ -488,4 +487,12 @@ Bool_t AliMpCDB::GenerateMpRunData(const char* cdbpath, Int_t runNumber) return mp.GenerateData(dataMap); } +//______________________________________________________________________________ +void AliMpCDB::UnloadAll() +{ + /// Unload all the mapping from the memory + delete AliMpDDLStore::Instance(false); + delete AliMpSegmentation::Instance(false); + delete AliMpDEStore::Instance(false); +} diff --git a/MUON/mapping/AliMpCDB.h b/MUON/mapping/AliMpCDB.h index 0d029356b12..142b3313285 100644 --- a/MUON/mapping/AliMpCDB.h +++ b/MUON/mapping/AliMpCDB.h @@ -71,6 +71,10 @@ class AliMpCDB : public TObject { // Switch loading static void SetLoadFromData(Bool_t loadFromData); + // Unload mapping + + static void UnloadAll(); + private: /// Not implemented AliMpCDB(); diff --git a/MUON/mapping/AliMpDDLStore.cxx b/MUON/mapping/AliMpDDLStore.cxx index 6933e64e9e0..a71e94147e4 100644 --- a/MUON/mapping/AliMpDDLStore.cxx +++ b/MUON/mapping/AliMpDDLStore.cxx @@ -117,25 +117,25 @@ AliMpDDLStore::AliMpDDLStore(const AliMpDataStreams& dataStreams) fManuBridge2(), fRegionalTrigger() { - /// Standard constructor - - AliDebug(1,""); - fDDLs.SetOwner(true); - fBusPatches.SetOwner(true); - fBusPatches.SetSize(900); + /// Standard constructor + + AliDebug(1,""); + fDDLs.SetOwner(true); + fBusPatches.SetOwner(true); + fBusPatches.SetSize(900); + + // Load segmentation & DE store data + if ( ! AliMpSegmentation::Instance(false) ) + AliMpSegmentation::ReadData(dataStreams, true); - // Load segmentation & DE store data - if ( ! AliMpSegmentation::Instance(false) ) - AliMpSegmentation::ReadData(dataStreams, true); - - // Create all detection elements - ReadDDLs(); - ReadTrigger(); - SetTriggerDDLs(); - SetManus(); - ReadBusPatchSpecial(); - SetPatchModules(); - ReadBusPatchInfo(); + // Create all detection elements + ReadDDLs(); + ReadTrigger(); + SetTriggerDDLs(); + SetManus(); + ReadBusPatchSpecial(); + SetPatchModules(); + ReadBusPatchInfo(); } //______________________________________________________________________________ diff --git a/MUON/mapping/AliMpDEStore.cxx b/MUON/mapping/AliMpDEStore.cxx index d782e1a25fa..df2ac552ca4 100644 --- a/MUON/mapping/AliMpDEStore.cxx +++ b/MUON/mapping/AliMpDEStore.cxx @@ -318,6 +318,7 @@ void AliMpDEStore::FillDEs() if ( ! result ) { AliErrorClassStream() << "Error in reading DE names files" << endl; } + AliDebug(1,Form("%d detection elements were read in",fDetElements.GetSize())); } // diff --git a/MUON/mapping/AliMpDEVisu.cxx b/MUON/mapping/AliMpDEVisu.cxx index 2301ecd2330..d5a7d31db51 100644 --- a/MUON/mapping/AliMpDEVisu.cxx +++ b/MUON/mapping/AliMpDEVisu.cxx @@ -444,7 +444,9 @@ void AliMpDEVisu::DrawSlat(Option_t* option, Bool_t popup) AliMpDataStreams dataStreams; - AliMpSt345Reader reader(dataStreams); + AliMpSlatMotifMap mm; + + AliMpSt345Reader reader(dataStreams,&mm); AliMpSlat* slatCurrent = reader.ReadSlat(nameType.Data(), fCurrentPlane); AliMpSlat* slatOther = reader.ReadSlat(nameType.Data(), AliMp::OtherPlaneType(fCurrentPlane)); diff --git a/MUON/mapping/AliMpSegmentation.cxx b/MUON/mapping/AliMpSegmentation.cxx index fb1466a812f..d767773166a 100644 --- a/MUON/mapping/AliMpSegmentation.cxx +++ b/MUON/mapping/AliMpSegmentation.cxx @@ -107,14 +107,16 @@ AliMpSegmentation::AliMpSegmentation(const AliMpDataStreams& dataStreams) : TObject(), fDataStreams(dataStreams), fDetElements(0), - fMpSegmentations(), + fMpSegmentations(true), fElCardsMap(), - fSlatMotifMap(AliMpSlatMotifMap::Instance()) + fSlatMotifMap(new AliMpSlatMotifMap) { /// Standard constructor - segmentation is loaded from ASCII data files AliDebug(1,""); + fElCardsMap.SetOwner(kTRUE); + // Load DE data if ( ! AliMpDEStore::Instance(false) ) AliMpDEStore::ReadData(dataStreams); @@ -169,6 +171,8 @@ AliMpSegmentation::~AliMpSegmentation() // Segmentations are deleted with fMpSegmentations // El cards arrays are deleted with fElCardsMap + delete fSlatMotifMap; + fgInstance = 0; } @@ -211,12 +215,12 @@ AliMpSegmentation::CreateMpSegmentation(Int_t detElemId, AliMp::CathodType cath) mpSegmentation = new AliMpSectorSegmentation(sector, true); } else if ( stationType == AliMp::kStation345 ) { - AliMpSt345Reader reader(fDataStreams); + AliMpSt345Reader reader(fDataStreams,fSlatMotifMap); AliMpSlat* slat = reader.ReadSlat(deTypeName, planeType); mpSegmentation = new AliMpSlatSegmentation(slat, true); } else if ( stationType == AliMp::kStationTrigger ) { - AliMpTriggerReader reader(fDataStreams); + AliMpTriggerReader reader(fDataStreams,fSlatMotifMap); AliMpTrigger* trigger = reader.ReadSlat(deTypeName, planeType); mpSegmentation = new AliMpTriggerSegmentation(trigger, true); } diff --git a/MUON/mapping/AliMpSegmentation.h b/MUON/mapping/AliMpSegmentation.h index 0114417270f..5ba5a9ce5f1 100644 --- a/MUON/mapping/AliMpSegmentation.h +++ b/MUON/mapping/AliMpSegmentation.h @@ -85,7 +85,7 @@ class AliMpSegmentation : public TObject { AliMpExMap fElCardsMap; ///< Map of el. cards IDs to segmentations AliMpSlatMotifMap* fSlatMotifMap; ///< Map of motif, motifTypes to avoid duplications and allow proper deletion - ClassDef(AliMpSegmentation,2) // The factory for building mapping segmentations + ClassDef(AliMpSegmentation,3) // The factory for building mapping segmentations }; #endif //ALI_MP_SEGMENTATION_H diff --git a/MUON/mapping/AliMpSt345Reader.cxx b/MUON/mapping/AliMpSt345Reader.cxx index ae59f7f277c..64f7d57d9e4 100644 --- a/MUON/mapping/AliMpSt345Reader.cxx +++ b/MUON/mapping/AliMpSt345Reader.cxx @@ -56,11 +56,11 @@ ClassImp(AliMpSt345Reader) /// \endcond //_____________________________________________________________________________ -AliMpSt345Reader::AliMpSt345Reader(const AliMpDataStreams& dataStreams) +AliMpSt345Reader::AliMpSt345Reader(const AliMpDataStreams& dataStreams, AliMpSlatMotifMap* motifMap) : TObject(), fDataStreams(dataStreams), -fMotifMap(AliMpSlatMotifMap::Instance()) +fMotifMap(motifMap) { /// /// Default ctor. diff --git a/MUON/mapping/AliMpSt345Reader.h b/MUON/mapping/AliMpSt345Reader.h index 52259a4e08a..638a46029dd 100644 --- a/MUON/mapping/AliMpSt345Reader.h +++ b/MUON/mapping/AliMpSt345Reader.h @@ -37,7 +37,7 @@ class AliMpDataStreams; class AliMpSt345Reader : public TObject { public: - AliMpSt345Reader(const AliMpDataStreams& dataStreams); + AliMpSt345Reader(const AliMpDataStreams& dataStreams, AliMpSlatMotifMap* motifMap); virtual ~AliMpSt345Reader(); AliMpSlat* ReadSlat(const char* slatType, AliMp::PlaneType planeType); diff --git a/MUON/mapping/AliMpTriggerReader.cxx b/MUON/mapping/AliMpTriggerReader.cxx index bfc7cd10915..2fa77ac93bf 100644 --- a/MUON/mapping/AliMpTriggerReader.cxx +++ b/MUON/mapping/AliMpTriggerReader.cxx @@ -16,31 +16,31 @@ // $Id$ // $MpId: AliMpTriggerReader.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $ -#include #include "AliMpTriggerReader.h" -#include "AliMpMotifReader.h" -#include "AliMpFiles.h" + +#include "AliLog.h" +#include "AliMpConstants.h" #include "AliMpDataStreams.h" +#include "AliMpFiles.h" +#include "AliMpHelper.h" +#include "AliMpMotif.h" +#include "AliMpMotifPosition.h" +#include "AliMpMotifReader.h" +#include "AliMpMotifSpecial.h" #include "AliMpMotifType.h" #include "AliMpPCB.h" #include "AliMpSlat.h" #include "AliMpSlatMotifMap.h" -#include "AliMpMotifSpecial.h" -#include "AliMpMotifPosition.h" -#include "AliMpMotif.h" -#include "AliMpHelper.h" +#include "AliMpSlatMotifMap.h" #include "AliMpSt345Reader.h" #include "AliMpTrigger.h" -#include "AliMpConstants.h" - -#include "AliLog.h" - #include "Riostream.h" #include "TClass.h" -#include "TObjString.h" #include "TList.h" +#include "TObjString.h" #include "TString.h" #include +#include #include //----------------------------------------------------------------------------- @@ -64,10 +64,10 @@ const TString AliMpTriggerReader::fgkKeywordFlipX("FLIP_X"); const TString AliMpTriggerReader::fgkKeywordFlipY("FLIP_Y"); //_____________________________________________________________________________ -AliMpTriggerReader::AliMpTriggerReader(const AliMpDataStreams& dataStreams) +AliMpTriggerReader::AliMpTriggerReader(const AliMpDataStreams& dataStreams, AliMpSlatMotifMap* motifMap) : TObject(), fDataStreams(dataStreams), - fMotifMap(AliMpSlatMotifMap::Instance()), + fMotifMap(motifMap), fLocalBoardMap() { /// diff --git a/MUON/mapping/AliMpTriggerReader.h b/MUON/mapping/AliMpTriggerReader.h index acb758f679d..ed945fe259b 100644 --- a/MUON/mapping/AliMpTriggerReader.h +++ b/MUON/mapping/AliMpTriggerReader.h @@ -40,7 +40,7 @@ class TList; class AliMpTriggerReader : public TObject { public: - AliMpTriggerReader(const AliMpDataStreams& dataStreams); + AliMpTriggerReader(const AliMpDataStreams& dataStreams, AliMpSlatMotifMap* motifMap); virtual ~AliMpTriggerReader(); AliMpTrigger* ReadSlat(const char* slatType, AliMp::PlaneType planeType); -- 2.39.3