new functionality and new class added
[u/mrichter/AliRoot.git] / MUON / AliMUONOccupancySubprocessor.cxx
CommitLineData
7eafe398 1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
17
18#include "AliMUONOccupancySubprocessor.h"
19
20#include "AliCDBMetaData.h"
21#include "AliMUON2DMap.h"
22#include "AliMUONPreprocessor.h"
23#include "AliMUONTrackerIO.h"
24#include "TObjString.h"
25#include "TSystem.h"
26
27//-----------------------------------------------------------------------------
28/// \class AliMUONOccupancySubprocessor
29///
30/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK occupancy.
31///
32/// Values to compute the occupancy are read in from an ascii file,
33/// with the format : \n
34///---------------------------------------------------------------------------\n
35/// BUS_PATCH MANU_ADDR SUM_N NEVENTS
36///---------------------------------------------------------------------------\n
37///
38/// \author L. Aphecetche
39//-----------------------------------------------------------------------------
40
41/// \cond CLASSIMP
42ClassImp(AliMUONOccupancySubprocessor)
43/// \endcond
44
45//_____________________________________________________________________________
46AliMUONOccupancySubprocessor::AliMUONOccupancySubprocessor(AliMUONPreprocessor* master)
47: AliMUONVSubprocessor(master,"Occupancy","Upload MUON Tracker occupancy to OCDB"),
48fOccupancyMap(0x0)
49{
50 /// Default ctor
51}
52
53//_____________________________________________________________________________
54AliMUONOccupancySubprocessor::~AliMUONOccupancySubprocessor()
55{
56 /// dtor
57 delete fOccupancyMap;
58}
59
60//_____________________________________________________________________________
6c870207 61Bool_t
7eafe398 62AliMUONOccupancySubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
63{
64 /// When starting a new run, reads in the occupancy ASCII files.
65
66 const Int_t kSystem = AliMUONPreprocessor::kDAQ;
67 const char* kId = "OCCUPANCY";
68
69 delete fOccupancyMap;
70 fOccupancyMap = new AliMUON2DMap(kTRUE);
71
72 Master()->Log(Form("Reading occupancy file for Run %d startTime %ld endTime %ld",
73 run,startTime,endTime));
74
75 TList* sources = Master()->GetFileSources(kSystem,kId);
76 TIter next(sources);
77 TObjString* o(0x0);
78 Int_t n(0);
79
80 while ( ( o = static_cast<TObjString*>(next()) ) )
81 {
82 TString fileName(Master()->GetFile(kSystem,kId,o->GetName()));
83 Int_t ok = ReadFile(fileName.Data());
84 if (ok>0)
85 {
86 n += ok;
87 }
88 }
89
6c870207 90 delete sources;
91
7eafe398 92 if (!n)
93 {
94 Master()->Log("Failed to read any occupancy");
95 delete fOccupancyMap;
96 fOccupancyMap = 0;
6c870207 97 return kFALSE;
7eafe398 98 }
6c870207 99 return kTRUE;
7eafe398 100}
101
102//_____________________________________________________________________________
103UInt_t
104AliMUONOccupancySubprocessor::Process(TMap* /*dcsAliasMap*/)
105{
106 /// Store the occupancy map into the CDB
107
108 if (!fOccupancyMap)
109 {
110 // this is the only reason to fail for the moment : getting no occupancy
111 // at all.
112 return 1;
113 }
114
115 Master()->Log("Storing occupancy map");
116
117 AliCDBMetaData metaData;
118 metaData.SetBeamPeriod(0);
119 metaData.SetResponsible("MUON TRK");
120 TString comment("Computed by AliMUONOccupancySubprocessor $Id$");
121 comment.ReplaceAll("$","");
122 metaData.SetComment(comment.Data());
123
124 Bool_t validToInfinity = kFALSE;
125 Bool_t result = Master()->Store("Calib", "OccupancyMap", fOccupancyMap, &metaData, 0, validToInfinity);
126
127 return ( result != kTRUE ); // return 0 if everything is ok.
128}
129
130//_____________________________________________________________________________
131Int_t
132AliMUONOccupancySubprocessor::ReadFile(const char* filename)
133{
134 /// Read the occupancy from an ASCII file. \n
135 /// Return kFALSE if reading was not successfull. \n
136 ///
137
138 TString sFilename(gSystem->ExpandPathName(filename));
139
140 Master()->Log(Form("Reading %s",sFilename.Data()));
141
142 Int_t n = AliMUONTrackerIO::ReadOccupancy(sFilename.Data(),*fOccupancyMap);
143
144 switch (n)
145 {
146 case -1:
147 Master()->Log(Form("Could not open %s",sFilename.Data()));
148 break;
149 }
150
151 return n;
152}
153
154
155//_____________________________________________________________________________
156void
157AliMUONOccupancySubprocessor::Print(Option_t* opt) const
158{
159 /// ouput to screen
160 if (fOccupancyMap) fOccupancyMap->Print("",opt);
161}
162