From 7eafe398de04a2da0222ce2c14a9d3343739b2b4 Mon Sep 17 00:00:00 2001 From: laphecet Date: Fri, 19 Jun 2009 16:06:45 +0000 Subject: [PATCH] Update of the "data cleaning" part of the reconstruction. We introduce a new DA (MUONTRKOCCda, the version here is really a 1.0 one...) to compute the occupancy of the tracker (at the MANU level). This DA is supposed to run for all events of all PHYSICS runs. The DA outputs an ASCII file onto the FXS. A new subprocessor (AliMUONOccupancySubprocessor) then reads this file (using an updated version of AliMUONTrackerIO) and upload an AliMUONVStore of the occupancy map to the OCDB (MUON/Calib/OccupancyMap). The occupancy map might then be used in AliMUONPadStatusMaker (depending on new parameters in AliMUONRecoParam) to reject some manus during the "calibration" stage of the reconstruction. Note that this new occupancy map supersedes the usage of the KillMap, which is now discontinued (and removed from the code and the svn OCDB). --- MUON/AliMUONCDB.cxx | 71 ++--- MUON/AliMUONCDB.h | 4 +- MUON/AliMUONCalibrationData.cxx | 38 +-- MUON/AliMUONCalibrationData.h | 15 +- MUON/AliMUONOccupancySubprocessor.cxx | 159 ++++++++++ MUON/AliMUONOccupancySubprocessor.h | 46 +++ MUON/AliMUONPadStatusMaker.cxx | 155 ++++------ MUON/AliMUONPadStatusMaker.h | 13 +- MUON/AliMUONPainterDataSourceFrame.cxx | 14 +- MUON/AliMUONRecoParam.cxx | 23 +- MUON/AliMUONRecoParam.h | 29 +- MUON/AliMUONTrackerACFDataMaker.cxx | 15 +- MUON/AliMUONTrackerData.cxx | 284 ++++++++++++++++-- MUON/AliMUONTrackerData.h | 10 + MUON/AliMUONTrackerIO.cxx | 100 ++++++ MUON/AliMUONTrackerIO.h | 3 + MUON/AliMUONTrackerOCDBDataMaker.cxx | 28 +- MUON/AliMUONTrackerOCDBDataMaker.h | 1 - MUON/AliMUONTrackerPreprocessor.cxx | 13 +- MUON/AliMUONTrackerPreprocessor.h | 4 +- MUON/CMake_libMUONshuttle.txt | 1 + MUON/MUONshuttleLinkDef.h | 1 + MUON/TestMUONPreprocessor.C | 8 +- MUON/libMUONshuttle.pkg | 3 +- .../Calib/KillMap/Run0_999999999_v0_s0.root | Bin 2784 -> 0 bytes .../OccupancyMap/Run0_999999999_v0_s0.root | Bin 0 -> 95776 bytes 26 files changed, 800 insertions(+), 238 deletions(-) create mode 100644 MUON/AliMUONOccupancySubprocessor.cxx create mode 100644 MUON/AliMUONOccupancySubprocessor.h delete mode 100644 OCDB/MUON/Calib/KillMap/Run0_999999999_v0_s0.root create mode 100644 OCDB/MUON/Calib/OccupancyMap/Run0_999999999_v0_s0.root diff --git a/MUON/AliMUONCDB.cxx b/MUON/AliMUONCDB.cxx index 2f50e4b6659..1561ef12683 100644 --- a/MUON/AliMUONCDB.cxx +++ b/MUON/AliMUONCDB.cxx @@ -34,6 +34,7 @@ #include "AliMUON1DMap.h" #include "AliMUON2DMap.h" #include "AliMUON2DStoreValidator.h" +#include "AliMUONCalibParamND.h" #include "AliMUONCalibParamNF.h" #include "AliMUONCalibParamNI.h" #include "AliMUONConstants.h" @@ -533,56 +534,51 @@ AliMUONCDB::MakePedestalStore(AliMUONVStore& pedestalStore, Bool_t defaultValues //_____________________________________________________________________________ Int_t -AliMUONCDB::MakeKillMapStore(AliMUONVStore& killMapStore) +AliMUONCDB::MakeOccupancyMapStore(AliMUONVStore& occupancyMapStore, Bool_t defaultValues) { - /// Create a kill map. + /// Create an occupancy map. AliCodeTimerAuto(""); - Int_t nchannels(0); Int_t nmanus(0); - const Int_t kChannels(AliMpConstants::ManuNofChannels()); - - const Float_t kFractionOfDeadManu(0.1); // within [0.,1.] - - if ( kFractionOfDeadManu == 0.0 ) return 0.0; - Int_t detElemId; Int_t manuId; AliMpManuIterator it; + Int_t nevents(1000); + while ( it.Next(detElemId,manuId) ) { - // skip a given fraction of manus - if ( gRandom->Uniform() > kFractionOfDeadManu) continue; - ++nmanus; - AliMUONVCalibParam* kill = new AliMUONCalibParamNI(1,kChannels,detElemId,manuId,0); + AliMUONVCalibParam* occupancy = new AliMUONCalibParamND(5,1,detElemId,manuId,0); + Double_t occ = 0.0; + AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId); - for ( Int_t manuChannel = 0; manuChannel < kChannels; ++manuChannel ) - { - if ( ! de->IsConnectedChannel(manuId,manuChannel) ) continue; - - ++nchannels; - - kill->SetValueAsInt(manuChannel,0,1); - - } - Bool_t ok = killMapStore.Add(kill); + Int_t numberOfChannelsInManu = de->NofChannelsInManu(manuId); + + if (!defaultValues) occ = gRandom->Rndm(1.0); + + Double_t sumn = occ*nevents; + + occupancy->SetValueAsFloat(0,0,sumn); + occupancy->SetValueAsFloat(0,1,sumn); + occupancy->SetValueAsFloat(0,2,sumn); + occupancy->SetValueAsInt(0,3,numberOfChannelsInManu); + occupancy->SetValueAsInt(0,4,nevents); + + Bool_t ok = occupancyMapStore.Add(occupancy); if (!ok) { AliError(Form("Could not set DetElemId=%d manuId=%d",detElemId,manuId)); } - if ( fMaxNofChannelsToGenerate > 0 && nchannels >= fMaxNofChannelsToGenerate ) break; } - AliInfo(Form("%d Manus and %d channels.",nmanus,nchannels)); - return nchannels; + return nmanus; } //_____________________________________________________________________________ @@ -1119,22 +1115,19 @@ AliMUONCDB::WritePedestals(Bool_t defaultValues, //_____________________________________________________________________________ void -AliMUONCDB::WriteKillMap(Bool_t defaultValues, - Int_t startRun, Int_t endRun) +AliMUONCDB::WriteOccupancyMap(Bool_t defaultValues, + Int_t startRun, Int_t endRun) { - /// generate kill map values (either empty one if defaultValues=true, or - /// random one, see MakeKillMapStore) and + /// generate occupancy map values (either empty one if defaultValues=true, or + /// random one, see MakeOccupancyMapStore) and /// store them into CDB located at cdbpath, with a validity period /// ranging from startRun to endRun - AliMUONVStore* killMapStore = Create2DMap(); - if ( !defaultValues ) - { - Int_t ngenerated = MakeKillMapStore(*killMapStore); - AliInfo(Form("Ngenerated = %d",ngenerated)); - } - WriteToCDB("MUON/Calib/KillMap",killMapStore,startRun,endRun,defaultValues); - delete killMapStore; + AliMUONVStore* occupancyMapStore = Create2DMap(); + Int_t ngenerated = MakeOccupancyMapStore(*occupancyMapStore,defaultValues); + AliInfo(Form("Ngenerated = %d",ngenerated)); + WriteToCDB("MUON/Calib/OccupancyMap",occupancyMapStore,startRun,endRun,defaultValues); + delete occupancyMapStore; } @@ -1214,6 +1207,6 @@ AliMUONCDB::WriteTracker(Bool_t defaultValues, Int_t startRun, Int_t endRun) WriteGains(defaultValues,startRun,endRun); WriteCapacitances(defaultValues,startRun,endRun); WriteNeighbours(startRun,endRun); - WriteKillMap(startRun,endRun,defaultValues); + WriteOccupancyMap(startRun,endRun,defaultValues); } diff --git a/MUON/AliMUONCDB.h b/MUON/AliMUONCDB.h index f5e4edbe3da..0c779021d2b 100644 --- a/MUON/AliMUONCDB.h +++ b/MUON/AliMUONCDB.h @@ -41,7 +41,7 @@ public: Int_t MakeCapacitanceStore(AliMUONVStore& capaStore, Bool_t defaultValues); Int_t MakeCapacitanceStore(AliMUONVStore& capaStore, const char* file); Int_t MakeGainStore(AliMUONVStore& gainStore, Bool_t defaultValues); - Int_t MakeKillMapStore(AliMUONVStore& killMapStore); + Int_t MakeOccupancyMapStore(AliMUONVStore& occupancyMapStore, Bool_t defaultValues); Int_t MakeLocalTriggerMaskStore(AliMUONVStore& ltm) const; Int_t MakeRegionalTriggerConfigStore(AliMUONRegionalTriggerConfig& rtm) const; @@ -73,7 +73,7 @@ public: void WriteGains(Bool_t defaultValues, Int_t startRun, Int_t endRun=AliCDBRunRange::Infinity()); void WriteCapacitances(Bool_t defaultValues, Int_t startRun=0, Int_t endRun=AliCDBRunRange::Infinity()); void WriteCapacitances(const char* file, Int_t startRun=0, Int_t endRun=AliCDBRunRange::Infinity()); - void WriteKillMap(Bool_t defaultValues, Int_t startRun, Int_t endRun=AliCDBRunRange::Infinity()); + void WriteOccupancyMap(Bool_t defaultValues, Int_t startRun, Int_t endRun=AliCDBRunRange::Infinity()); void WriteLocalTriggerMasks(Int_t startRun=0, Int_t endRun=AliCDBRunRange::Infinity()); void WriteRegionalTriggerConfig(Int_t startRun=0, Int_t endRun=AliCDBRunRange::Infinity()); diff --git a/MUON/AliMUONCalibrationData.cxx b/MUON/AliMUONCalibrationData.cxx index b0306eb433f..08ed4414e24 100644 --- a/MUON/AliMUONCalibrationData.cxx +++ b/MUON/AliMUONCalibrationData.cxx @@ -70,7 +70,7 @@ fTriggerLut(0x0), fTriggerEfficiency(0x0), fCapacitances(0x0), fNeighbours(0x0), -fKillMap(0x0) +fOccupancyMap(0x0) { /// Default ctor. @@ -84,7 +84,7 @@ fKillMap(0x0) { Gains(); Pedestals(); - KillMap(); + OccupancyMap(); HV(); TriggerDCS(); LocalTriggerBoardMasks(0); @@ -211,10 +211,10 @@ AliMUONCalibrationData::CreateObject(Int_t runNumber, const char* path, Int_t* s //_____________________________________________________________________________ AliMUONVStore* -AliMUONCalibrationData::CreateKillMap(Int_t runNumber, Int_t* startOfValidity) +AliMUONCalibrationData::CreateOccupancyMap(Int_t runNumber, Int_t* startOfValidity) { - /// Create a new killmap store from the OCDB for a given run - return dynamic_cast(CreateObject(runNumber,"MUON/Calib/KillMap",startOfValidity)); + /// Create a new occupancy map store from the OCDB for a given run + return dynamic_cast(CreateObject(runNumber,"MUON/Calib/OccupancyMap",startOfValidity)); } //_____________________________________________________________________________ @@ -360,34 +360,16 @@ AliMUONCalibrationData::LocalTriggerBoardMasks(Int_t localBoardNumber) const //_____________________________________________________________________________ AliMUONVStore* -AliMUONCalibrationData::KillMap() const +AliMUONCalibrationData::OccupancyMap() const { - /// Get kill map - if (!fKillMap) + /// Get occupancy map + if (!fOccupancyMap) { - fKillMap = CreateKillMap(fRunNumber); + fOccupancyMap = CreateOccupancyMap(fRunNumber); } - return fKillMap; + return fOccupancyMap; } -//_____________________________________________________________________________ -AliMUONVCalibParam* -AliMUONCalibrationData::KillMap(Int_t detElemId, Int_t manuId) const -{ - /// Return the killmap for a given (detElemId, manuId) pair. - /// A return value of 0x0 is quite possible, meaning the manu should - /// not be killed ;-) - - AliMUONVStore* killMap = KillMap(); - if (!killMap) - { - return 0x0; - } - - return static_cast(killMap->FindObject(detElemId,manuId)); -} - - //_____________________________________________________________________________ AliMUONVStore* AliMUONCalibrationData::Pedestals() const diff --git a/MUON/AliMUONCalibrationData.h b/MUON/AliMUONCalibrationData.h index d06d84b35a9..fbc9da47da9 100644 --- a/MUON/AliMUONCalibrationData.h +++ b/MUON/AliMUONCalibrationData.h @@ -60,8 +60,8 @@ public: /// Create a local trigger mask store (which must be deleted) for a given run static AliMUONVStore* CreateLocalTriggerBoardMasks(Int_t runNumber, Int_t* startOfValidity=0); - /// Create a kill map store (which must be deleted) from OCDB for the given run - static AliMUONVStore* CreateKillMap(Int_t runNumber, Int_t* startOfValidity=0); + /// Create an occupancy map store (which must be deleted) from OCDB for the given run + static AliMUONVStore* CreateOccupancyMap(Int_t runNumber, Int_t* startOfValidity=0); /// Create a pedestal store (which must be deleted) from OCDB for the given run static AliMUONVStore* CreatePedestals(Int_t runNumber, Int_t* startOfValidity=0); @@ -101,11 +101,8 @@ public: /// Get the pedestal store AliMUONVStore* Pedestals() const; - /// Get the kill map store - AliMUONVStore* KillMap() const; - - /// Get the kill map calibration object for channels within (detElemId,manuId). - AliMUONVCalibParam* KillMap(Int_t detElemId, Int_t manuId) const; + /// Get the occupancy map store + AliMUONVStore* OccupancyMap() const; /// Get the Pedestal calibration object for channels within (detElemId,manuId). AliMUONVCalibParam* Pedestals(Int_t detElemId, Int_t manuId) const; @@ -154,9 +151,9 @@ private: mutable AliMUONVStore* fCapacitances; //!< Manu capacitances mutable AliMUONVStore* fNeighbours; //!< list of neighbours for all channels - mutable AliMUONVStore* fKillMap; //!< kill map + mutable AliMUONVStore* fOccupancyMap; //!< occupancy map - ClassDef(AliMUONCalibrationData,9) // Storage for all MUON calibration data. + ClassDef(AliMUONCalibrationData,10) // Storage for all MUON calibration data. }; #endif diff --git a/MUON/AliMUONOccupancySubprocessor.cxx b/MUON/AliMUONOccupancySubprocessor.cxx new file mode 100644 index 00000000000..5ff5afbb60a --- /dev/null +++ b/MUON/AliMUONOccupancySubprocessor.cxx @@ -0,0 +1,159 @@ +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +// $Id$ + +#include "AliMUONOccupancySubprocessor.h" + +#include "AliCDBMetaData.h" +#include "AliMUON2DMap.h" +#include "AliMUONPreprocessor.h" +#include "AliMUONTrackerIO.h" +#include "TObjString.h" +#include "TSystem.h" + +//----------------------------------------------------------------------------- +/// \class AliMUONOccupancySubprocessor +/// +/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK occupancy. +/// +/// Values to compute the occupancy are read in from an ascii file, +/// with the format : \n +///---------------------------------------------------------------------------\n +/// BUS_PATCH MANU_ADDR SUM_N NEVENTS +///---------------------------------------------------------------------------\n +/// +/// \author L. Aphecetche +//----------------------------------------------------------------------------- + +/// \cond CLASSIMP +ClassImp(AliMUONOccupancySubprocessor) +/// \endcond + +//_____________________________________________________________________________ +AliMUONOccupancySubprocessor::AliMUONOccupancySubprocessor(AliMUONPreprocessor* master) +: AliMUONVSubprocessor(master,"Occupancy","Upload MUON Tracker occupancy to OCDB"), +fOccupancyMap(0x0) +{ + /// Default ctor +} + +//_____________________________________________________________________________ +AliMUONOccupancySubprocessor::~AliMUONOccupancySubprocessor() +{ + /// dtor + delete fOccupancyMap; +} + +//_____________________________________________________________________________ +void +AliMUONOccupancySubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime) +{ + /// When starting a new run, reads in the occupancy ASCII files. + + const Int_t kSystem = AliMUONPreprocessor::kDAQ; + const char* kId = "OCCUPANCY"; + + delete fOccupancyMap; + fOccupancyMap = new AliMUON2DMap(kTRUE); + + Master()->Log(Form("Reading occupancy file for Run %d startTime %ld endTime %ld", + run,startTime,endTime)); + + TList* sources = Master()->GetFileSources(kSystem,kId); + TIter next(sources); + TObjString* o(0x0); + Int_t n(0); + + while ( ( o = static_cast(next()) ) ) + { + TString fileName(Master()->GetFile(kSystem,kId,o->GetName())); + Int_t ok = ReadFile(fileName.Data()); + if (ok>0) + { + n += ok; + } + } + + if (!n) + { + Master()->Log("Failed to read any occupancy"); + delete fOccupancyMap; + fOccupancyMap = 0; + } + delete sources; +} + +//_____________________________________________________________________________ +UInt_t +AliMUONOccupancySubprocessor::Process(TMap* /*dcsAliasMap*/) +{ + /// Store the occupancy map into the CDB + + if (!fOccupancyMap) + { + // this is the only reason to fail for the moment : getting no occupancy + // at all. + return 1; + } + + Master()->Log("Storing occupancy map"); + + AliCDBMetaData metaData; + metaData.SetBeamPeriod(0); + metaData.SetResponsible("MUON TRK"); + TString comment("Computed by AliMUONOccupancySubprocessor $Id$"); + comment.ReplaceAll("$",""); + metaData.SetComment(comment.Data()); + + Bool_t validToInfinity = kFALSE; + Bool_t result = Master()->Store("Calib", "OccupancyMap", fOccupancyMap, &metaData, 0, validToInfinity); + + return ( result != kTRUE ); // return 0 if everything is ok. +} + +//_____________________________________________________________________________ +Int_t +AliMUONOccupancySubprocessor::ReadFile(const char* filename) +{ + /// Read the occupancy from an ASCII file. \n + /// Return kFALSE if reading was not successfull. \n + /// + + TString sFilename(gSystem->ExpandPathName(filename)); + + Master()->Log(Form("Reading %s",sFilename.Data())); + + Int_t n = AliMUONTrackerIO::ReadOccupancy(sFilename.Data(),*fOccupancyMap); + + switch (n) + { + case -1: + Master()->Log(Form("Could not open %s",sFilename.Data())); + break; + } + + return n; +} + + +//_____________________________________________________________________________ +void +AliMUONOccupancySubprocessor::Print(Option_t* opt) const +{ + /// ouput to screen + if (fOccupancyMap) fOccupancyMap->Print("",opt); +} + diff --git a/MUON/AliMUONOccupancySubprocessor.h b/MUON/AliMUONOccupancySubprocessor.h new file mode 100644 index 00000000000..c58276dd765 --- /dev/null +++ b/MUON/AliMUONOccupancySubprocessor.h @@ -0,0 +1,46 @@ +#ifndef ALIMUONOCCUPANCYSUBPROCESSOR_H +#define ALIMUONOCCUPANCYSUBPROCESSOR_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* See cxx source for full Copyright notice */ + +// $Id$ + +/// \ingroup shuttle +/// \class AliMUONOccupancySubprocessor +/// \brief Implementation of AliMUONVSubprocessor for MUON TRK occupancy +/// +// Author Laurent Aphecetche + +#ifndef ALIMUONVSUBPROCESSOR_H +# include "AliMUONVSubprocessor.h" +#endif + +class AliMUONVStore; + +class AliMUONOccupancySubprocessor : public AliMUONVSubprocessor +{ +public: + AliMUONOccupancySubprocessor(AliMUONPreprocessor* master); + virtual ~AliMUONOccupancySubprocessor(); + + void Initialize(Int_t run, UInt_t startTime, UInt_t endTime); + UInt_t Process(TMap* dcsAliasMap); + void Print(Option_t* opt="") const; + +private: + + /// Not implemented + AliMUONOccupancySubprocessor(const AliMUONOccupancySubprocessor&); + /// Not implemented + AliMUONOccupancySubprocessor& operator=(const AliMUONOccupancySubprocessor&); + + Int_t ReadFile(const char* filename); + +private: + AliMUONVStore* fOccupancyMap; //!< Occupancy map (at the manu level) for the MUON TRK + + ClassDef(AliMUONOccupancySubprocessor,1) // A shuttle preprocessor for MUON TRK occupancy +}; + +#endif diff --git a/MUON/AliMUONPadStatusMaker.cxx b/MUON/AliMUONPadStatusMaker.cxx index 8fa756c024d..2fa5c262d1e 100644 --- a/MUON/AliMUONPadStatusMaker.cxx +++ b/MUON/AliMUONPadStatusMaker.cxx @@ -26,15 +26,13 @@ #include "AliMUONPadStatusMaker.h" -#include "AliQAv1.h" - #include "AliMUON2DMap.h" #include "AliMUON2DStoreValidator.h" #include "AliMUONCalibParamNI.h" #include "AliMUONCalibrationData.h" #include "AliMUONStringIntMap.h" #include "AliMUONVCalibParam.h" -#include "AliMUONVTrackerData.h" +#include "AliMUONTrackerData.h" #include "AliMpArea.h" #include "AliMpArrayI.h" @@ -75,77 +73,26 @@ fHVSt12Limits(0,5000), fHVSt345Limits(0,5000), fPedMeanLimits(0,4095), fPedSigmaLimits(0,4095), -fManuOccupancyLimits(0,0.1), +fManuOccupancyLimits(0,1.0), +fBusPatchOccupancyLimits(0,1.0), +fDEOccupancyLimits(0,1.0), fStatus(new AliMUON2DMap(true)), fHV(new TExMap), fPedestals(calibData.Pedestals()), fGains(calibData.Gains()), -fTrackerData(0x0), -fKillMap(calibData.KillMap()) +fTrackerData(0x0) { /// ctor AliDebug(1,Form("ped store %s gain store %s", fPedestals->ClassName(), fGains->ClassName())); - TString qaFileName(AliQAv1::GetQADataFileName("MUON",calibData.RunNumber())); - - // search the QA file in memory first. - TFile* f = static_cast(gROOT->GetListOfFiles()->FindObject(qaFileName.Data())); - - if (!f) - { - // then tries to open it - if ( gSystem->AccessPathName(qaFileName.Data()) == kFALSE ) - { - f = TFile::Open(qaFileName.Data()); - if ( f ) - { - AliDebug(1,Form("Got %s from disk",qaFileName.Data())); - } - } - } - else - { - AliDebug(1,Form("Got %s from memory",qaFileName.Data())); - } - - if (f) - { - TDirectory* d = gDirectory; - - f->cd("MUON/Raws"); - - TIter next(gDirectory->GetListOfKeys()); - TKey* key; - - while ( ( key = static_cast(next()) ) && !fTrackerData ) - { - TString name(key->GetName()); - - if ( name.Contains("CALZ") ) - { - fTrackerData = dynamic_cast(key->ReadObj()); - } - - } - - gDirectory = d; - - if ( fTrackerData ) - { - AliInfo(Form("Will make a cut on MANU occupancy from TrackerData=%s",fTrackerData->GetName())); - } - else - { - AliWarning(Form("Found a QA file = %s, but could not get the expected TrackerData in there... (probably not a serious problem though)", - f->GetName())); - } - } - else + if ( calibData.OccupancyMap() ) { - AliWarning("Did not find QA file, so will not use manu occupancy as a criteria"); - } + AliInfo("Will use occupancy map to cut, if so required in AliMUONRecoParam"); + /// create a tracker data from the occupancy map + fTrackerData = new AliMUONTrackerData("OCC","OCC",*(calibData.OccupancyMap())); + } } //_____________________________________________________________________________ @@ -154,6 +101,7 @@ AliMUONPadStatusMaker::~AliMUONPadStatusMaker() /// dtor. delete fStatus; delete fHV; + delete fTrackerData; } //_____________________________________________________________________________ @@ -165,9 +113,9 @@ AliMUONPadStatusMaker::AsString(Int_t status) Int_t pedStatus; Int_t gainStatus; Int_t hvStatus; - Int_t otherStatus; + Int_t occStatus; - DecodeStatus(status,pedStatus,hvStatus,gainStatus,otherStatus); + DecodeStatus(status,pedStatus,hvStatus,gainStatus,occStatus); TString s; @@ -193,9 +141,12 @@ AliMUONPadStatusMaker::AsString(Int_t status) if ( hvStatus & kHVSwitchOFF ) s+="& HV has switch OFF "; if ( hvStatus & kHVMissing ) s+="& HV is missing "; - if ( otherStatus & kManuOccupancyTooHigh ) s+="& manu occupancy too high "; - if ( otherStatus & kManuOccupancyTooLow ) s+="& manu occupancy too low "; - if ( otherStatus & kKilled ) s+="& killed"; + if ( occStatus & kManuOccupancyTooHigh ) s+="& manu occupancy too high "; + if ( occStatus & kManuOccupancyTooLow ) s+="& manu occupancy too low "; + if ( occStatus & kBusPatchOccupancyTooHigh ) s+="& bus patch occupancy too high "; + if ( occStatus & kBusPatchOccupancyTooLow ) s+="& bus patch occupancy too low "; + if ( occStatus & kDEOccupancyTooHigh ) s+="& DE occupancy too high "; + if ( occStatus & kDEOccupancyTooLow ) s+="& DE occupancy too low "; if ( s[0] == '&' ) s[0] = ' '; @@ -220,13 +171,13 @@ Int_t AliMUONPadStatusMaker::BuildStatus(Int_t pedStatus, Int_t hvStatus, Int_t gainStatus, - Int_t otherStatus) + Int_t occStatus) { /// Build a complete status from specific parts (ped,hv,gain) return ( hvStatus & 0xFF ) | ( ( pedStatus & 0xFF ) << 8 ) | ( ( gainStatus & 0xFF ) << 16 ) | - ( ( otherStatus & 0xFF ) << 24 ) ; + ( ( occStatus & 0xFF ) << 24 ) ; } //_____________________________________________________________________________ @@ -235,11 +186,11 @@ AliMUONPadStatusMaker::DecodeStatus(Int_t status, Int_t& pedStatus, Int_t& hvStatus, Int_t& gainStatus, - Int_t& otherStatus) + Int_t& occStatus) { /// Decode complete status into specific parts (ped,hv,gain) - otherStatus = ( status & 0xFF000000 ) >> 24; + occStatus = ( status & 0xFF000000 ) >> 24; gainStatus = ( status & 0xFF0000 ) >> 16; pedStatus = ( status & 0xFF00 ) >> 8; hvStatus = (status & 0xFF); @@ -528,16 +479,9 @@ AliMUONPadStatusMaker::ComputeStatus(Int_t detElemId, Int_t manuId) const AliMUONVCalibParam* gains = static_cast(fGains->FindObject(detElemId,manuId)); - AliMUONVCalibParam* kill(0x0); - - if ( fKillMap ) - { - kill = static_cast(fKillMap->FindObject(detElemId,manuId)); - } - Int_t hvStatus = HVStatus(detElemId,manuId); - Int_t otherStatus = OtherStatus(detElemId,manuId); + Int_t occStatus = OccupancyStatus(detElemId,manuId); for ( Int_t manuChannel = 0; manuChannel < param->Size(); ++manuChannel ) { @@ -578,12 +522,7 @@ AliMUONPadStatusMaker::ComputeStatus(Int_t detElemId, Int_t manuId) const gainStatus = kGainMissing; } - if ( kill && (kill->ValueAsInt(manuChannel,0) > 0) ) - { - otherStatus |= kKilled; - } - - Int_t status = BuildStatus(pedStatus,hvStatus,gainStatus,otherStatus); + Int_t status = BuildStatus(pedStatus,hvStatus,gainStatus,occStatus); param->SetValueAsIntFast(manuChannel,0,status); } @@ -593,22 +532,52 @@ AliMUONPadStatusMaker::ComputeStatus(Int_t detElemId, Int_t manuId) const //_____________________________________________________________________________ Int_t -AliMUONPadStatusMaker::OtherStatus(Int_t detElemId, Int_t manuId) const +AliMUONPadStatusMaker::OccupancyStatus(Int_t detElemId, Int_t manuId) const { /// Get the "other" status for a given manu + + Int_t rv(0); + if ( fTrackerData ) { - Double_t occ = fTrackerData->Manu(detElemId,manuId,2); - if ( occ < fManuOccupancyLimits.X() ) + const Int_t occIndex = 2; + + Double_t occ = fTrackerData->DetectionElement(detElemId,occIndex); + + if ( occ <= fDEOccupancyLimits.X() ) + { + rv |= kDEOccupancyTooLow; + } + else if ( occ > fDEOccupancyLimits.Y() ) { - return kManuOccupancyTooLow; + rv |= kDEOccupancyTooHigh; } - if ( occ > fManuOccupancyLimits.Y() ) + + Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId); + + occ = fTrackerData->BusPatch(busPatchId,occIndex); + + if ( occ <= fBusPatchOccupancyLimits.X() ) + { + rv |= kBusPatchOccupancyTooLow; + } + else if ( occ > fBusPatchOccupancyLimits.Y() ) + { + rv |= kBusPatchOccupancyTooHigh; + } + + occ = fTrackerData->Manu(detElemId,manuId,occIndex); + + if ( occ <= fManuOccupancyLimits.X() ) + { + rv |= kManuOccupancyTooLow; + } + else if ( occ > fManuOccupancyLimits.Y() ) { - return kManuOccupancyTooHigh; + rv |= kManuOccupancyTooHigh; } } - return 0; + return rv; } //_____________________________________________________________________________ diff --git a/MUON/AliMUONPadStatusMaker.h b/MUON/AliMUONPadStatusMaker.h index 859bc390adb..17704a4f747 100644 --- a/MUON/AliMUONPadStatusMaker.h +++ b/MUON/AliMUONPadStatusMaker.h @@ -122,7 +122,7 @@ private: Int_t HVStatus(Int_t detElemId, Int_t manuId) const; - Int_t OtherStatus(Int_t detElemId, Int_t manuId) const; + Int_t OccupancyStatus(Int_t detElemId, Int_t manuId) const; void SetHVStatus(Int_t detElemId, Int_t index, Int_t status) const; @@ -174,11 +174,14 @@ private: }; /// Other - enum EOtherStatus + enum EOccupancyStatus { kManuOccupancyTooLow = (1<<1), kManuOccupancyTooHigh = (1<<2), - kKilled = (1<<3) + kBusPatchOccupancyTooLow = (1<<3), + kBusPatchOccupancyTooHigh = (1<<4), + kDEOccupancyTooLow = (1<<5), + kDEOccupancyTooHigh = (1<<6), }; const AliMUONCalibrationData& fkCalibrationData; //!< helper class to get data access (not owner) @@ -194,6 +197,8 @@ private: TVector2 fPedSigmaLimits; //!< Low and High threshold for pedestal sigma TVector2 fManuOccupancyLimits; //!< Low and High manu occupancy limits + TVector2 fBusPatchOccupancyLimits; //!< Low and High buspatch occupancy limits + TVector2 fDEOccupancyLimits; //!< Low and High DE occupancy limits AliMUONVStore* fStatus; //!< statuses of the pads @@ -204,8 +209,6 @@ private: AliMUONVTrackerData* fTrackerData; //!< to get occupancies... - AliMUONVStore* fKillMap; //!< to selectively force killing of some channels - ClassDef(AliMUONPadStatusMaker,0) // Creates pad statuses from ped,gain,hv }; diff --git a/MUON/AliMUONPainterDataSourceFrame.cxx b/MUON/AliMUONPainterDataSourceFrame.cxx index 784e27df0d7..1866ebdfc71 100644 --- a/MUON/AliMUONPainterDataSourceFrame.cxx +++ b/MUON/AliMUONPainterDataSourceFrame.cxx @@ -171,13 +171,13 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, /// OCDB selection - fOCDBTypes->AddEntry("Pedestals",0); - fOCDBTypes->AddEntry("Gains",1); - fOCDBTypes->AddEntry("Capacitances",2); + fOCDBTypes->AddEntry("Pedestals",0); + fOCDBTypes->AddEntry("Gains",1); + fOCDBTypes->AddEntry("Capacitances",2); fOCDBTypes->AddEntry("HV",3); - fOCDBTypes->AddEntry("KillMap",4); - fOCDBTypes->Select(0); - fOCDBTypes->Resize(100,20); + fOCDBTypes->AddEntry("Occupancy",4); + fOCDBTypes->Select(0); + fOCDBTypes->Resize(100,20); TGButton* createOCDBButton = new TGTextButton(fOCDBSelector,"Create data source"); createOCDBButton->Connect("Clicked()", @@ -208,7 +208,7 @@ AliMUONPainterDataSourceFrame::AliMUONPainterDataSourceFrame(const TGWindow* p, fACFTypes->AddEntry("Gains",1); fACFTypes->AddEntry("Capacitances",2); fACFTypes->AddEntry("HV",3); - fACFTypes->AddEntry("KillMap",4); + fACFTypes->AddEntry("Occupancy",4); fACFTypes->Select(0); fACFTypes->Resize(100,20); diff --git a/MUON/AliMUONRecoParam.cxx b/MUON/AliMUONRecoParam.cxx index 87d1a7024ab..4e99779ed71 100644 --- a/MUON/AliMUONRecoParam.cxx +++ b/MUON/AliMUONRecoParam.cxx @@ -270,9 +270,10 @@ void AliMUONRecoParam::SetCosmicParam() } for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE; fBypassSt45 = 0; - fPadGoodnessMask = 0xC00BE80; + fPadGoodnessMask = 0x400BE80; // Ped Mean is Zero | Ped Mean Too Low | Ped Mean Too High | Ped Sigma Too Low | Ped Sigma Too High | Ped is missing | HV is missing | manu occupancy too high fMaxTriggerTracks = 100; fMaxTrackCandidates = 10000; + SetManuOccupancyLimits(-1,0.5); // reject manu above occ=50% } @@ -437,9 +438,15 @@ void AliMUONRecoParam::Print(Option_t *option) const cout << Form("%e <= Gain linear term <= %e",GainA1LowLimit(),GainA1HighLimit()) << endl; cout << Form("%e <= Gain quadratic term <= %e",GainA2LowLimit(),GainA2HighLimit()) << endl; cout << Form("%5.0f <= Gain threshold term <= %5.0f",GainThresLowLimit(),GainThresHighLimit()) << endl; - + cout << Form("And we cut on charge >= %7.2f x ( pedestal sigma ) ",ChargeSigmaCut()) << endl; + cout << "Occupancy limits are :" << endl; + + cout << Form("%7.2f <= Manu occupancy < %7.2f",ManuOccupancyLowLimit(),ManuOccupancyHighLimit()) << endl; + cout << Form("%7.2f <= Buspatch occupancy < %7.2f",BuspatchOccupancyLowLimit(),BuspatchOccupancyHighLimit()) << endl; + cout << Form("%7.2f <= DE occupancy < %7.2f",DEOccupancyLowLimit(),DEOccupancyHighLimit()) << endl; + cout << "chamber non bending resolution = |"; for (Int_t iCh = 0; iCh < 10; iCh++) cout << Form(" %6.3f |",fDefaultNonBendingReso[iCh]); cout << endl; @@ -480,9 +487,17 @@ AliMUONRecoParam::SetDefaultLimits() fGainThresLimits[0] = 0; fGainThresLimits[1] = 4095; - fPadGoodnessMask = 0x8008080; // Ped is missing | HV is missing | killed + fPadGoodnessMask = 0x8080; // Ped is missing | HV is missing + + fManuOccupancyLimits[0] = -1.0; + fManuOccupancyLimits[1] = 1.0; + + fBuspatchOccupancyLimits[0] = -1.0; + fBuspatchOccupancyLimits[1] = 1.0; + + fDEOccupancyLimits[0] = -1.0; + fDEOccupancyLimits[1] = 1.0; - fChargeSigmaCut = 4.0; } diff --git a/MUON/AliMUONRecoParam.h b/MUON/AliMUONRecoParam.h index 798143c2b14..829f2339ed1 100644 --- a/MUON/AliMUONRecoParam.h +++ b/MUON/AliMUONRecoParam.h @@ -264,14 +264,33 @@ class AliMUONRecoParam : public AliDetectorRecoParam /// Get the maximum number of track candidates above which the tracking abort Int_t GetMaxTrackCandidates() const {return fMaxTrackCandidates;} - virtual void Print(Option_t *option = "") const; + /// Set the limits for the acceptable manu occupancy + void SetManuOccupancyLimits(float low, float high) { fManuOccupancyLimits[0]=low; fManuOccupancyLimits[1]=high; } + /// Retrieve low value of manu occupancy limit + Float_t ManuOccupancyLowLimit() const { return fManuOccupancyLimits[0]; } + /// Retrieve high value of manu occupancy limit + Float_t ManuOccupancyHighLimit() const { return fManuOccupancyLimits[1]; } + + /// Set the limits for the acceptable bp occupancy + void SetBuspatchOccupancyLimits(float low, float high) { fBuspatchOccupancyLimits[0]=low; fBuspatchOccupancyLimits[1]=high; } + /// Retrieve low value of bp occupancy limit + Float_t BuspatchOccupancyLowLimit() const { return fBuspatchOccupancyLimits[0]; } + /// Retrieve high value of bp occupancy limit + Float_t BuspatchOccupancyHighLimit() const { return fBuspatchOccupancyLimits[1]; } + + /// Set the limits for the acceptable DE occupancy + void SetDEOccupancyLimits(float low, float high) { fDEOccupancyLimits[0]=low; fDEOccupancyLimits[1]=high; } + /// Retrieve low value of DE occupancy limit + Float_t DEOccupancyLowLimit() const { return fDEOccupancyLimits[0]; } + /// Retrieve high value of DE occupancy limit + Float_t DEOccupancyHighLimit() const { return fDEOccupancyLimits[1]; } + virtual void Print(Option_t *option = "") const; private: void SetDefaultLimits(); - private: /// clustering mode: NOCLUSTERING, PRECLUSTER, PRECLUSTERV2, PRECLUSTERV3, COG,
@@ -355,13 +374,17 @@ class AliMUONRecoParam : public AliDetectorRecoParam
   
   Bool_t     fSelectTrackOnSlope; ///< select track candidates according to their slope (instead of their impact parameter)
   
+  Double32_t fManuOccupancyLimits[2]; ///< low and high thresholds for manu occupancy cut
+  Double32_t fBuspatchOccupancyLimits[2]; ///< low and high thresholds for bus patch occupancy cut
+  Double32_t fDEOccupancyLimits[2]; ///< low and high thresholds for DE occupancy cut
+  
   // functions
   void SetLowFluxParam();
   void SetHighFluxParam();
   void SetCosmicParam();
   
   
-  ClassDef(AliMUONRecoParam,13) // MUON reco parameters
+  ClassDef(AliMUONRecoParam,14) // MUON reco parameters
 };
 
 #endif
diff --git a/MUON/AliMUONTrackerACFDataMaker.cxx b/MUON/AliMUONTrackerACFDataMaker.cxx
index 1e9d52921c6..f94e07bee1b 100644
--- a/MUON/AliMUONTrackerACFDataMaker.cxx
+++ b/MUON/AliMUONTrackerACFDataMaker.cxx
@@ -77,7 +77,15 @@ AliMUONTrackerACFDataMaker::AliMUONTrackerACFDataMaker(const char* acfPath,
       store = new AliMUON1DMap(20000);
       AliMUONTrackerIO::ReadCapacitances(filename.Data(),*store);
     }
-    
+    else if ( stype == "OCCUPANCY" )
+    {
+      store = new AliMUON2DMap(true);
+      AliMUONTrackerIO::ReadOccupancy(filename.Data(),*store);
+      fData = new AliMUONTrackerData(Form("OCC%d",number),"OccupancyMap",*store);
+      fData->SetDimensionName(0,"One");
+      fData->SetDimensionName(1,"Zero");
+    }
+  
     if (!store)
     {
       fIsValid = kFALSE;
@@ -87,7 +95,12 @@ AliMUONTrackerACFDataMaker::AliMUONTrackerACFDataMaker(const char* acfPath,
       return;
     }
     
+  if (stype != "OCCUPANCY" ) 
+  {
     fData->Add(*store);
+  }
+  
+  delete store;
 }
 
 //_____________________________________________________________________________
diff --git a/MUON/AliMUONTrackerData.cxx b/MUON/AliMUONTrackerData.cxx
index 4c83e97f29f..97453da6182 100644
--- a/MUON/AliMUONTrackerData.cxx
+++ b/MUON/AliMUONTrackerData.cxx
@@ -43,7 +43,9 @@
 #include 
 #include 
 #include 
+#include 
 #include 
+#include 
 #include 
 
 /// \class AliMUONTrackerData
@@ -95,6 +97,154 @@ fNofEventsPerDDL(0x0)
   Clear();
 }
 
+//_____________________________________________________________________________
+AliMUONTrackerData::AliMUONTrackerData(const char* name, const char* title,
+                                       const AliMUONVStore& manuValues)
+: AliMUONVTrackerData(name,title),
+fIsSingleEvent(kFALSE),
+fChannelValues(0x0),
+fManuValues(0x0),
+fBusPatchValues(0x0),
+fDEValues(0x0),
+fChamberValues(0x0),
+fPCBValues(0x0),
+fDimension(0),
+fNevents(0),
+fDimensionNames(0x0),
+fExternalDimensionNames(0x0),
+fExternalDimension(0),
+fHistogramming(0x0),
+fHistos(0x0),
+fXmin(0.0),
+fXmax(0.0),
+fIsChannelLevelEnabled(kFALSE),
+fIsManuLevelEnabled(kTRUE),
+fNofDDLs(0),
+fNofEventsPerDDL(0x0)
+{  
+  /// ctor with pre-computed values at the manu level
+  /// In this case, we force fIsChannelLevelEnabled = kFALSE
+  /// ctor
+  
+  if (manuValues.GetSize()==0)
+  {
+    AliFatal("Cannot create a tracker data from nothing in that case !");
+  }
+  
+  if ( !AliMpDDLStore::Instance(kFALSE) && !AliMpManuStore::Instance(kFALSE) )
+  {
+    AliError("Cannot work without (full) mapping");
+    return;
+  }
+  
+  TIter next(manuValues.CreateIterator());
+  AliMUONVCalibParam* m = static_cast(next());
+  
+  Int_t dimension = ( m->Dimension() - fgkExtraDimension - fgkVirtualExtraDimension ) / 2;
+  
+  fDimension = External2Internal(dimension)+fgkExtraDimension;
+  
+  fDimensionNames = new TObjArray(fDimension+fgkVirtualExtraDimension);
+  fExternalDimensionNames = new TObjArray(dimension);
+  fExternalDimension = dimension;
+  fHistogramming = new Int_t[fExternalDimension];
+  memset(fHistogramming,0,sizeof(Int_t)); // histogramming is off by default. Use MakeHistogramForDimension to turn it on.
+
+  fExternalDimensionNames->SetOwner(kTRUE);
+  fDimensionNames->SetOwner(kTRUE);  
+  fDimensionNames->AddAt(new TObjString("occ"),IndexOfOccupancyDimension());
+  fDimensionNames->AddAt(new TObjString("N"),IndexOfNumberDimension());
+  fDimensionNames->AddAt(new TObjString("n"),NumberOfDimensions()-fgkVirtualExtraDimension);
+  Clear();
+  TArrayI nevents(AliDAQ::NumberOfDdls("MUONTRK"));
+  AssertStores();
+  
+  next.Reset();
+  AliMUONVCalibParam* external;
+  
+  while ( ( external = static_cast(next()) ) )
+  {
+    Int_t detElemId, manuId;
+    
+    GetDEManu(*external,detElemId,manuId);
+    
+    AliMUONVCalibParam* chamber(0x0);
+    AliMUONVCalibParam* de(0x0);
+    AliMUONVCalibParam* busPatch(0x0);
+    AliMUONVCalibParam* pcb(0x0);
+    AliMUONVCalibParam* manu(0x0);
+    AliMUONVCalibParam* channel(0x0);
+    AliMpDetElement* mpde(0x0);
+    
+    AliMUONVCalibParam* wec = new AliMUONCalibParamND(external->Dimension()-1,1,detElemId,manuId,0);
+    // as external, but without event count
+    wec->SetValueAsDouble(0,0,external->ValueAsDouble(0,0));
+    wec->SetValueAsDouble(0,1,external->ValueAsDouble(0,1));
+    wec->SetValueAsDouble(0,2,external->ValueAsDouble(0,2));
+    wec->SetValueAsDouble(0,3,external->ValueAsDouble(0,3));
+    
+    Int_t mid = GetParts(wec,chamber,de,busPatch,pcb,manu,channel,mpde);
+
+    if ( manuId != mid ) 
+    {
+      AliError(Form("Something is wrong for DE %5d : manuId = %d vs mid = %d",detElemId,manuId,mid));
+      continue;
+    }
+    
+    if ( manuId < 0 ) 
+    {
+      AliError("Got a < 0 manuId. Should not happen here !");
+      continue;
+    }
+    
+    assert(channel==0x0);
+    
+    Int_t n1 = manu->ValueAsInt(0,IndexOfNumberDimension());
+    Int_t n2 = external->ValueAsInt(0,IndexOfNumberDimension());
+    if  ( n1 != n2 )
+    {
+      AliError(Form("Incoherent number of manu channels for DE %5d MANU %5d : %d vs %d",
+                    detElemId,manuId,n1,n2));
+    }
+    
+    Int_t nevt = external->ValueAsInt(0,4);
+    
+    Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId);
+
+    Int_t ddl = AliMpDDLStore::Instance()->GetDDLfromBus(busPatchId);
+
+    if ( nevents[ddl] == 0 ) 
+    {
+      nevents[ddl] = nevt;
+    }
+    else
+    {
+      if ( nevents.At(ddl) != nevt ) 
+      {
+        AliError(Form("Nevt mismatch for DE %5d MANU %5d DDL %d : %d vs %d",
+                      detElemId,manuId,ddl,nevents.At(ddl),nevt));
+        continue;
+      }
+    }
+    
+    for ( Int_t i = 0; i < wec->Dimension()-1; ++i ) 
+    {
+      manu->SetValueAsDouble(0,i,manu->ValueAsDouble(0,i) + wec->ValueAsDouble(0,i));
+      
+      busPatch->SetValueAsDouble(0,i,busPatch->ValueAsDouble(0,i) + wec->ValueAsDouble(0,i));
+      
+      de->SetValueAsDouble(0,i,de->ValueAsDouble(0,i) + wec->ValueAsDouble(0,i));
+      
+      chamber->SetValueAsDouble(0,i,chamber->ValueAsDouble(0,i) + wec->ValueAsDouble(0,i));
+    }    
+    delete wec;
+  }  
+  
+  UpdateNumberOfEvents(&nevents);
+
+}
+
+
 //_____________________________________________________________________________
 AliMUONTrackerData::~AliMUONTrackerData()
 {
@@ -330,21 +480,10 @@ AliMUONTrackerData::Replace(const AliMUONVStore& store)
 
 //_____________________________________________________________________________
 Bool_t
-AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bool_t replace)
+AliMUONTrackerData::UpdateNumberOfEvents(TArrayI* nevents)
 {
-  /// Add the given external store to our internal store
+  /// Update the number of events
   
-  AliCodeTimerAuto(GetName());
-    
-  if ( !replace)
-  {
-    if ( IsSingleEvent() && NumberOfEvents(-1) == 1 ) 
-    {
-      AliError(Form("%s is supposed to be single event only",GetName()));
-      return kFALSE;
-    }  
-  }
-
   if (!fNofDDLs)
   {
     fNofDDLs = AliDAQ::NumberOfDdls("MUONTRK");
@@ -354,7 +493,7 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bo
       fNofEventsPerDDL[i] = 0;
     }
   }
-    
+  
   if (nevents)
   {
     if (nevents->GetSize() != fNofDDLs ) 
@@ -378,6 +517,14 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bo
       fNevents = TMath::Max(fNevents,fNofEventsPerDDL[i]);
     }
   }
+  return kTRUE;
+}
+
+//_____________________________________________________________________________
+void
+AliMUONTrackerData::AssertStores()
+{
+  /// Insure our stores are allocated
   
   if (!fChamberValues)
   {
@@ -397,10 +544,10 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bo
       deIt.Next();
     }
     
-		if ( fIsChannelLevelEnabled ) 
-		{
-			fChannelValues = new AliMUON2DMap(kTRUE);
-		}
+    if ( fIsChannelLevelEnabled ) 
+    {
+      fChannelValues = new AliMUON2DMap(kTRUE);
+    }
     if  ( fIsManuLevelEnabled ) 
     {
       fManuValues = new AliMUON2DMap(kTRUE);
@@ -410,6 +557,28 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bo
     fDEValues = new AliMUON1DMap(numberOfDEs);
     fChamberValues = new AliMUON1DArray;
   }
+}
+
+//_____________________________________________________________________________
+Bool_t
+AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bool_t replace)
+{
+  /// Add the given external store to our internal store
+  
+  AliCodeTimerAuto(GetName());
+    
+  if ( !replace)
+  {
+    if ( IsSingleEvent() && NumberOfEvents(-1) == 1 ) 
+    {
+      AliError(Form("%s is supposed to be single event only",GetName()));
+      return kFALSE;
+    }  
+  }
+
+  UpdateNumberOfEvents(nevents);
+  
+  AssertStores();
   
   TIter next(store.CreateIterator());
   AliMUONVCalibParam* external;
@@ -427,9 +596,13 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bo
       return kFALSE;
     }
     
-
-    AliMUONVCalibParam* chamber, *de, *busPatch, *pcb, *manu, *channel;
-    AliMpDetElement* mpde;
+    AliMUONVCalibParam* chamber(0x0);
+    AliMUONVCalibParam* de(0x0);
+    AliMUONVCalibParam* busPatch(0x0);
+    AliMUONVCalibParam* pcb(0x0);
+    AliMUONVCalibParam* manu(0x0);
+    AliMUONVCalibParam* channel(0x0);
+    AliMpDetElement* mpde(0x0);
     
     Int_t manuId = GetParts(external,chamber,de,busPatch,pcb,manu,channel,mpde);
     
@@ -1110,6 +1283,9 @@ AliMUONTrackerData::GetParts(AliMUONVCalibParam* external,
 {
   /// Get containers at all levels
  
+  chamber = de = busPatch = pcb = manu = channel = 0x0;
+  mpde = 0x0;
+  
   AliMpDDLStore* ddlStore = AliMpDDLStore::Instance();
   
   Int_t detElemId;
@@ -1138,7 +1314,10 @@ AliMUONTrackerData::GetParts(AliMUONVCalibParam* external,
     pcbIndex = namer.ManuId2PCBIndex(detElemId,manuId);
   }
   
-  channel = ChannelParam(detElemId,manuId,external);
+  if ( fIsChannelLevelEnabled ) 
+  {
+    channel = ChannelParam(detElemId,manuId,external);
+  }
   
   manu = ManuParam(detElemId,manuId,kTRUE);
   
@@ -1616,4 +1795,65 @@ AliMUONTrackerData::Streamer(TBuffer &R__b)
   }
 }
 
+//_____________________________________________________________________________
+Bool_t 
+AliMUONTrackerData::ExportAsASCIIOccupancyFile(const char* filename, Int_t runNumber) const
+{
+  /// Export only the occupancy part, in a format compatible with what
+  /// the online occupancy DA is writing
+  
+  if ( ! AliMpDDLStore::Instance(kFALSE) )
+  {
+    AliError("Mapping not loaded. Cannot work");
+    return kFALSE;
+  }
+  
+  if (!fManuValues)
+  {
+    AliError("No manu values. Cannot work");
+    return kFALSE;
+  }
+  
+  ofstream out(filename);
+  
+  if (out.bad())
+  {
+    AliError(Form("Cannot create file %s",filename));
+    return kFALSE;
+  }
+  
+  out << "//===========================================================================" << endl;
+  out << "//  Hit counter exported from $Id$" << endl;
+  out << "//===========================================================================" << endl;
+  out << "//" << endl;
+  out << "//       * Run Number          : " << runNumber << endl;
+  out << "//       * File Creation Date  : " << TTimeStamp().AsString("l") << endl;
+  out << "//---------------------------------------------------------------------------" << endl;
+  out << "//  BP   MANU  SUM_N  NEVENTS" << endl;
+  out << "//---------------------------------------------------------------------------" << endl;
+  
+  TIter next(fManuValues->CreateIterator());
+  AliMUONVCalibParam* manu;
+  
+  while ( ( manu = static_cast(next()) ) )
+  {
+    Int_t detElemId = manu->ID0();
+    Int_t manuId = manu->ID1();
+    Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId);
+    Int_t ddl = AliMpDDLStore::Instance()->GetDDLfromBus( busPatchId);
+    if ( busPatchId < 0 || ddl < 0 )
+    {
+      AliError(Form("Got invalid (DE,manu,bp,ddl)=(%d,%d,%d,%d). Skipping it",detElemId,manuId,busPatchId,ddl));
+      continue;
+    }
+
+    Int_t nevents = fNofEventsPerDDL[ddl];
+    
+    out << Form("%5d %5d %10d %10d",busPatchId,manuId,manu->ValueAsInt(0,IndexOfOccupancyDimension()),nevents) << endl;
+  }
+  
+  out.close();
+  return kTRUE;
+}
+
 
diff --git a/MUON/AliMUONTrackerData.h b/MUON/AliMUONTrackerData.h
index 307560f9c74..ebe2c07503d 100644
--- a/MUON/AliMUONTrackerData.h
+++ b/MUON/AliMUONTrackerData.h
@@ -27,6 +27,10 @@ public:
   AliMUONTrackerData(const char* name="", const char* title="", 
                      Int_t dimension=0,
                      Bool_t issingleevent=kFALSE);
+  
+  AliMUONTrackerData(const char* name, const char* title,
+                     const AliMUONVStore& manuValues);
+  
   virtual ~AliMUONTrackerData();
 
   Bool_t Add(const AliMUONTrackerData& data);
@@ -121,6 +125,8 @@ public:
   /// To allow merging of different objects
   virtual Long64_t Merge(TCollection* list);
     
+  Bool_t ExportAsASCIIOccupancyFile(const char* filename, Int_t runNumber) const;
+  
 private:
     
   void FillHisto(Int_t detElemId, Int_t manuId, Int_t manuChannel,
@@ -201,6 +207,10 @@ private:
   
   void Add1D(const AliMUONVStore& src, AliMUONVStore& dest) const;
   
+  void AssertStores();
+  
+  Bool_t UpdateNumberOfEvents(TArrayI* nevents);
+  
 private:
   
   Bool_t fIsSingleEvent; ///< whether we can deal with more than one event
diff --git a/MUON/AliMUONTrackerIO.cxx b/MUON/AliMUONTrackerIO.cxx
index c117e3e48f5..caa6446cf3f 100644
--- a/MUON/AliMUONTrackerIO.cxx
+++ b/MUON/AliMUONTrackerIO.cxx
@@ -31,10 +31,12 @@ ClassImp(AliMUONTrackerIO)
 /// \endcond
 
 #include "AliLog.h"
+#include "AliMUONCalibParamND.h"
 #include "AliMUONCalibParamNF.h"
 #include "AliMUONVStore.h"
 #include "AliMpConstants.h"
 #include "AliMpDDLStore.h"
+#include "AliMpDetElement.h"
 #include 
 #include 
 #include 
@@ -53,6 +55,104 @@ AliMUONTrackerIO::~AliMUONTrackerIO()
   /// dtor
 }
 
+//_____________________________________________________________________________
+Int_t 
+AliMUONTrackerIO::ReadOccupancy(const char* filename,AliMUONVStore& occupancyMap)
+{
+  /// Read occupancy file created by online DA
+  /// and append values to the occupancyMap store.
+  /// Expected format of the file is :
+  /// busPatchId manuId sumofn nevt
+  
+  TString sFilename(gSystem->ExpandPathName(filename));
+  
+  std::ifstream in(sFilename.Data());
+  if (!in.good()) 
+  {
+    return kCannotOpenFile;
+  }
+  
+  TString datastring;
+  ostringstream stream;
+  char line[1024];
+  while ( in.getline(line,1024) )
+  	stream << line << "\n";
+  datastring = TString(stream.str().c_str());
+  
+  in.close();
+  
+  return DecodeOccupancy(datastring,occupancyMap);
+  
+}
+
+//_____________________________________________________________________________
+Int_t 
+AliMUONTrackerIO::DecodeOccupancy(TString data, AliMUONVStore& occupancyMap)
+{
+  /// Decode occupancy string created append values to the occupancyMap store.
+  /// Expected format of the file is :
+  /// busPatchId manuId sumofn nevt
+ 
+  if ( ! AliMpDDLStore::Instance(kFALSE) )
+  {
+    AliErrorClass("Mapping not loaded. Cannot work");
+    return 0;
+  }
+  
+  char line[1024];
+  istringstream in(data.Data());
+  
+  Int_t n(0);
+  
+  while ( in.getline(line,1024) )
+  {
+    AliDebugClass(3,Form("line=%s",line));
+    if ( line[0] == '/' && line[1] == '/' ) continue;
+    std::istringstream sin(line);
+    
+    Int_t busPatchId, manuId;
+    Int_t numberOfEvents;
+    Double_t sumn;
+
+    sin >> busPatchId >> manuId >> sumn >> numberOfEvents;
+    
+    Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromBus(busPatchId);
+
+    AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
+
+    Int_t numberOfChannelsInManu = -1;
+    
+    if (de) numberOfChannelsInManu = de->NofChannelsInManu(manuId);
+
+    if ( numberOfChannelsInManu <= 0 ) 
+    {
+      AliErrorClass(Form("BP %5d DE %5d MANU %5d nchannels=%d",busPatchId,detElemId,manuId,numberOfChannelsInManu));
+      continue;      
+    }
+    
+    AliMUONVCalibParam* occupancy = 
+    static_cast(occupancyMap.FindObject(detElemId,manuId));
+    if (occupancy) 
+    {
+      AliErrorClass(Form("DE %5d MANU %5d is already there ?!",detElemId,manuId));
+      continue;
+    }
+        
+    occupancy = new AliMUONCalibParamND(5,1,detElemId,manuId,0);
+
+    occupancyMap.Add(occupancy);
+    
+    occupancy->SetValueAsDouble(0,0,sumn);
+    occupancy->SetValueAsDouble(0,1,sumn); // with only 0 and 1s, sumw = sumw2 = sumn
+    occupancy->SetValueAsDouble(0,2,sumn);
+    occupancy->SetValueAsInt(0,3,numberOfChannelsInManu);
+    occupancy->SetValueAsInt(0,4,numberOfEvents);
+    ++n;
+  }
+  
+  return n;
+}
+
 //_____________________________________________________________________________
 Int_t 
 AliMUONTrackerIO::ReadPedestals(const char* filename, AliMUONVStore& pedStore)
diff --git a/MUON/AliMUONTrackerIO.h b/MUON/AliMUONTrackerIO.h
index b6f95c86025..510b7ca1f66 100644
--- a/MUON/AliMUONTrackerIO.h
+++ b/MUON/AliMUONTrackerIO.h
@@ -31,6 +31,9 @@ public:
   static Int_t ReadGains(const char* filename, AliMUONVStore& gainStore, TString& comment);
   static Int_t DecodeGains(TString data, AliMUONVStore& gainStore, TString& comment);
   
+  static Int_t ReadOccupancy(const char* filename, AliMUONVStore& occupancyMap);
+  static Int_t DecodeOccupancy(TString data, AliMUONVStore& occupancyMap);
+  
   static Int_t ReadCapacitances(const char* filename, AliMUONVStore& capaStore);
   
   /// Error code constants
diff --git a/MUON/AliMUONTrackerOCDBDataMaker.cxx b/MUON/AliMUONTrackerOCDBDataMaker.cxx
index 1eb440569a3..00735e9791e 100644
--- a/MUON/AliMUONTrackerOCDBDataMaker.cxx
+++ b/MUON/AliMUONTrackerOCDBDataMaker.cxx
@@ -73,10 +73,14 @@ AliMUONTrackerOCDBDataMaker::AliMUONTrackerOCDBDataMaker(const char* ocdbPath,
 		store = AliMUONCalibrationData::CreatePedestals(runNumber,&startOfValidity);
 		fData = CreateDataPedestals(startOfValidity);
 	}
-	else if ( stype == "KILLMAP" )
+	else if ( stype == "OCCUPANCY" )
 	{
-		store = AliMUONCalibrationData::CreateKillMap(runNumber,&startOfValidity);
-		fData = CreateDataKillMap(startOfValidity);
+		store = AliMUONCalibrationData::CreateOccupancyMap(runNumber,&startOfValidity);
+    
+    fData = new AliMUONTrackerData(Form("OCC%d",runNumber),"OccupancyMap",*store);
+    
+    fData->SetDimensionName(0,"One");
+    fData->SetDimensionName(1,"Zero");
 	}
 	else if ( stype == "GAINS" ) 
 	{
@@ -110,8 +114,11 @@ AliMUONTrackerOCDBDataMaker::AliMUONTrackerOCDBDataMaker(const char* ocdbPath,
 		return;
 	}
 	
-	fData->Add(*store);
-	
+  if ( type != "OCCUPANCY" )
+  {
+    fData->Add(*store);
+	}
+  
 	delete store;
 }
 
@@ -162,17 +169,6 @@ AliMUONTrackerOCDBDataMaker::CreateDataPedestals(Int_t runNumber)
   return data;
 }
 
-//_____________________________________________________________________________
-AliMUONVTrackerData*
-AliMUONTrackerOCDBDataMaker::CreateDataKillMap(Int_t runNumber)
-{
-  /// Create data to hold pedestal values
-  
-  AliMUONVTrackerData* data  = new AliMUONTrackerData(Form("KILL%d",runNumber),"KillMap",1,kTRUE);
-  data->SetDimensionName(0,"Kill");
-  return data;
-}
-
 //_____________________________________________________________________________
 AliMUONVStore*
 AliMUONTrackerOCDBDataMaker::CreateHVStore(TMap& m)
diff --git a/MUON/AliMUONTrackerOCDBDataMaker.h b/MUON/AliMUONTrackerOCDBDataMaker.h
index 029bfe26365..18b6354427a 100644
--- a/MUON/AliMUONTrackerOCDBDataMaker.h
+++ b/MUON/AliMUONTrackerOCDBDataMaker.h
@@ -66,7 +66,6 @@ public:
   static AliMUONVStore* SplitQuality(const AliMUONVStore& gains);
 
   static AliMUONVTrackerData* CreateDataPedestals(Int_t runNumber);
-  static AliMUONVTrackerData* CreateDataKillMap(Int_t runNumber);
   static AliMUONVTrackerData* CreateDataGains(Int_t runNumber);
   static AliMUONVTrackerData* CreateDataCapacitances(Int_t runNumber);
   
diff --git a/MUON/AliMUONTrackerPreprocessor.cxx b/MUON/AliMUONTrackerPreprocessor.cxx
index 739cd660c0a..2dfd08264e0 100644
--- a/MUON/AliMUONTrackerPreprocessor.cxx
+++ b/MUON/AliMUONTrackerPreprocessor.cxx
@@ -21,6 +21,7 @@
 #include "AliMUONHVSubprocessor.h"
 #include "AliMUONGMSSubprocessor.h"
 #include "AliMUONGainSubprocessor.h"
+#include "AliMUONOccupancySubprocessor.h"
 
 #include "AliLog.h"
 #include "AliShuttleInterface.h"
@@ -45,10 +46,11 @@ ClassImp(AliMUONTrackerPreprocessor)
 //_____________________________________________________________________________
 AliMUONTrackerPreprocessor::AliMUONTrackerPreprocessor(AliShuttleInterface* shuttle)
 : AliMUONPreprocessor("MCH",shuttle),
-  fPedestalSubprocessor(new AliMUONPedestalSubprocessor(this)),
-  fGMSSubprocessor(new AliMUONGMSSubprocessor(this)),    
-  fHVSubprocessor(new AliMUONHVSubprocessor(this)),
-  fGainSubprocessor(new AliMUONGainSubprocessor(this))
+fPedestalSubprocessor(new AliMUONPedestalSubprocessor(this)),
+fGMSSubprocessor(new AliMUONGMSSubprocessor(this)),    
+fHVSubprocessor(new AliMUONHVSubprocessor(this)),
+fGainSubprocessor(new AliMUONGainSubprocessor(this)),
+fOccupancySubprocessor(new AliMUONOccupancySubprocessor(this))
 {
   /// ctor. 
     
@@ -67,6 +69,7 @@ AliMUONTrackerPreprocessor::~AliMUONTrackerPreprocessor()
   delete fGMSSubprocessor;
   delete fHVSubprocessor;
   delete fGainSubprocessor;
+  delete fOccupancySubprocessor;
 }
 
 //_____________________________________________________________________________
@@ -101,7 +104,9 @@ AliMUONTrackerPreprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTi
   {
     Bool_t useDCS(kTRUE);
     Add(fHVSubprocessor,useDCS); // to be called only for physics runs
+    Add(fOccupancySubprocessor);
     Log("INFO-Will run HV subprocessor");
+    Log("INFO-Will run Occupancy subprocessor");
   }
   else
   {
diff --git a/MUON/AliMUONTrackerPreprocessor.h b/MUON/AliMUONTrackerPreprocessor.h
index 2808d6fd68a..78420f9296e 100644
--- a/MUON/AliMUONTrackerPreprocessor.h
+++ b/MUON/AliMUONTrackerPreprocessor.h
@@ -18,6 +18,7 @@ class AliMUONPedestalSubprocessor;
 class AliMUONGMSSubprocessor;
 class AliMUONHVSubprocessor;
 class AliMUONGainSubprocessor;
+class AliMUONOccupancySubprocessor;
 
 class TObjArray;
 
@@ -40,8 +41,9 @@ private:
   AliMUONGMSSubprocessor*      fGMSSubprocessor;      ///< GMS subprocessor
   AliMUONHVSubprocessor*       fHVSubprocessor;       ///< HV subprocessor
   AliMUONGainSubprocessor* fGainSubprocessor; ///< Gain subprocessor
+  AliMUONOccupancySubprocessor* fOccupancySubprocessor; ///< Occupancy subprocessor
   
-  ClassDef(AliMUONTrackerPreprocessor,2) // MUON Tracker Shuttle preprocessor
+  ClassDef(AliMUONTrackerPreprocessor,3) // MUON Tracker Shuttle preprocessor
 };
 
 #endif
diff --git a/MUON/CMake_libMUONshuttle.txt b/MUON/CMake_libMUONshuttle.txt
index 06e26f6be65..990d5e83c1c 100644
--- a/MUON/CMake_libMUONshuttle.txt
+++ b/MUON/CMake_libMUONshuttle.txt
@@ -11,6 +11,7 @@ AliMUONTrackerPreprocessor.cxx
 AliMUONTriggerSubprocessor.cxx 
 AliMUONTriggerDCSSubprocessor.cxx 
 AliMUONTriggerPreprocessor.cxx
+AliMUONOccupancySubprocessor.cxx
 )
 
 # fill list of header files from list of source files
diff --git a/MUON/MUONshuttleLinkDef.h b/MUON/MUONshuttleLinkDef.h
index 21f59999f5f..a418b67b461 100644
--- a/MUON/MUONshuttleLinkDef.h
+++ b/MUON/MUONshuttleLinkDef.h
@@ -18,5 +18,6 @@
 #pragma link C++ class AliMUONTriggerSubprocessor+;
 #pragma link C++ class AliMUONTriggerDCSSubprocessor+;
 #pragma link C++ class AliMUONTriggerPreprocessor+;
+#pragma link C++ class AliMUONOccupancySubprocessor+;
 
 #endif
diff --git a/MUON/TestMUONPreprocessor.C b/MUON/TestMUONPreprocessor.C
index 4330be859f8..214cbb32828 100644
--- a/MUON/TestMUONPreprocessor.C
+++ b/MUON/TestMUONPreprocessor.C
@@ -67,6 +67,8 @@
 ///    LDC3.gain
 /// GMS/
 ///    GMS.root
+/// OCCUPANCY/
+///    mch.occupancy
 /// PEDESTALS/
 ///    LDC0.ped
 ///    LDC1.ped
@@ -184,6 +186,8 @@ void TestMUONPreprocessor(Int_t runNumber=80,
   shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","GAINS","LDC2",Form("%s/GAINS/LDC2.gain",sourceDirectory));
   shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","GAINS","LDC3",Form("%s/GAINS/LDC3.gain",sourceDirectory));
 
+  shuttle->AddInputFile(AliTestShuttle::kDAQ,"MCH","OCCUPANCY","MON",Form("%s/OCCUPANCY/mch.occupancy",sourceDirectory));
+
   // and GMS file
   shuttle->AddInputFile(AliTestShuttle::kDCS,"MCH","GMS","GMS",Form("%s/GMS/GMS.root",sourceDirectory));
 
@@ -270,14 +274,14 @@ TMap* CreateDCSAliasMap(const char* inputCDB, Int_t runNumber)
 	// HV Switch (St345 only)
 	TObjArray* valueSet = new TObjArray;
 	valueSet->SetOwner(kTRUE);
-	Bool_t value = kTRUE;
+	Bool_t bvalue = kTRUE;
 //      Float_t r = random.Uniform();
 //      if ( r < 0.007 ) value = kFALSE;      
 //      if ( aliasName.Contains("DE513sw2") ) value = kFALSE;
       
 	for ( UInt_t timeStamp = 0; timeStamp < 60*3; timeStamp += 60 )
 	{
-	  AliDCSValue* dcsValue = new AliDCSValue(value,timeStamp);
+	  AliDCSValue* dcsValue = new AliDCSValue(bvalue,timeStamp);
 	  valueSet->Add(dcsValue);
 	}
 	aliasMap->Add(new TObjString(*alias),valueSet);
diff --git a/MUON/libMUONshuttle.pkg b/MUON/libMUONshuttle.pkg
index f69ed8b65d9..76f09caefa6 100644
--- a/MUON/libMUONshuttle.pkg
+++ b/MUON/libMUONshuttle.pkg
@@ -11,7 +11,8 @@ AliMUONGainSubprocessor.cxx \
 AliMUONTrackerPreprocessor.cxx \
 AliMUONTriggerSubprocessor.cxx \
 AliMUONTriggerDCSSubprocessor.cxx \
-AliMUONTriggerPreprocessor.cxx
+AliMUONTriggerPreprocessor.cxx \
+AliMUONOccupancySubprocessor.cxx
 
 HDRS:= $(SRCS:.cxx=.h)
 
diff --git a/OCDB/MUON/Calib/KillMap/Run0_999999999_v0_s0.root b/OCDB/MUON/Calib/KillMap/Run0_999999999_v0_s0.root
deleted file mode 100644
index e40befaa8736146ad0e9c7c415d13c245a037e10..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2784
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
M?m=R~Do;WG0qL-0EC2ui

literal 0
HcmV?d00001

-- 
2.39.3