Previous commit had the bad side-effect of changing the behaviour of Raw QA to comput...
[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//_____________________________________________________________________________
61void
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
90 if (!n)
91 {
92 Master()->Log("Failed to read any occupancy");
93 delete fOccupancyMap;
94 fOccupancyMap = 0;
95 }
96 delete sources;
97}
98
99//_____________________________________________________________________________
100UInt_t
101AliMUONOccupancySubprocessor::Process(TMap* /*dcsAliasMap*/)
102{
103 /// Store the occupancy map into the CDB
104
105 if (!fOccupancyMap)
106 {
107 // this is the only reason to fail for the moment : getting no occupancy
108 // at all.
109 return 1;
110 }
111
112 Master()->Log("Storing occupancy map");
113
114 AliCDBMetaData metaData;
115 metaData.SetBeamPeriod(0);
116 metaData.SetResponsible("MUON TRK");
117 TString comment("Computed by AliMUONOccupancySubprocessor $Id$");
118 comment.ReplaceAll("$","");
119 metaData.SetComment(comment.Data());
120
121 Bool_t validToInfinity = kFALSE;
122 Bool_t result = Master()->Store("Calib", "OccupancyMap", fOccupancyMap, &metaData, 0, validToInfinity);
123
124 return ( result != kTRUE ); // return 0 if everything is ok.
125}
126
127//_____________________________________________________________________________
128Int_t
129AliMUONOccupancySubprocessor::ReadFile(const char* filename)
130{
131 /// Read the occupancy from an ASCII file. \n
132 /// Return kFALSE if reading was not successfull. \n
133 ///
134
135 TString sFilename(gSystem->ExpandPathName(filename));
136
137 Master()->Log(Form("Reading %s",sFilename.Data()));
138
139 Int_t n = AliMUONTrackerIO::ReadOccupancy(sFilename.Data(),*fOccupancyMap);
140
141 switch (n)
142 {
143 case -1:
144 Master()->Log(Form("Could not open %s",sFilename.Data()));
145 break;
146 }
147
148 return n;
149}
150
151
152//_____________________________________________________________________________
153void
154AliMUONOccupancySubprocessor::Print(Option_t* opt) const
155{
156 /// ouput to screen
157 if (fOccupancyMap) fOccupancyMap->Print("",opt);
158}
159