ESD file is added to the list of proof output files. It is then automatically merged...
[u/mrichter/AliRoot.git] / MUON / AliMUONGainSubprocessor.cxx
CommitLineData
505bc496 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
8d8e920c 18#include "AliMUONGainSubprocessor.h"
19
20#include "AliCDBMetaData.h"
21#include "AliLog.h"
505bc496 22#include "AliMUON2DMap.h"
8d8e920c 23#include "AliMUON2DStoreValidator.h"
505bc496 24#include "AliMUONCalibParamNF.h"
25#include "AliMUONConstants.h"
505bc496 26#include "AliMUONPreprocessor.h"
81028269 27#include "AliMUONTrackerIO.h"
8d8e920c 28#include "AliMpConstants.h"
505bc496 29#include "AliMpDDLStore.h"
505bc496 30#include <Riostream.h>
31#include <TList.h>
32#include <TObjString.h>
8d8e920c 33#include <TObjString.h>
505bc496 34#include <TSystem.h>
505bc496 35#include <sstream>
36
3d1463c8 37//-----------------------------------------------------------------------------
505bc496 38/// \class AliMUONGainSubprocessor
39///
40/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK Gains.
41///
cf27231a 42/// Gains are read in from an ascii file, with the format :
43///
44///---------------------------------------------------------------------------
45///
46///BUS_PATCH MANU CHANNEL a0 a1 thres Qual
47///
48///---------------------------------------------------------------------------
505bc496 49///
50/// \author L. Aphecetche
51///
3d1463c8 52//-----------------------------------------------------------------------------
505bc496 53
54/// \cond CLASSIMP
55ClassImp(AliMUONGainSubprocessor)
56/// \endcond
57
58//_____________________________________________________________________________
59AliMUONGainSubprocessor::AliMUONGainSubprocessor(AliMUONPreprocessor* master)
60: AliMUONVSubprocessor(master,
61 "Gains",
62 "Upload MUON Tracker Gains to OCDB"),
81028269 63fGains(0x0),
64fSkip(kFALSE),
65fComment("")
505bc496 66{
67 /// default ctor
68}
69
70//_____________________________________________________________________________
71AliMUONGainSubprocessor::~AliMUONGainSubprocessor()
72{
73 /// dtor
74 delete fGains;
75}
76
77//_____________________________________________________________________________
78void
79AliMUONGainSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
80{
81 /// When starting a new run, reads in the Gains ASCII files.
82
83 const Int_t kSystem = AliMUONPreprocessor::kDAQ;
84 const char* kId = "GAINS";
85
81028269 86 fComment = "";
87 fSkip = kFALSE;
88
505bc496 89 delete fGains;
90 fGains = new AliMUON2DMap(kTRUE);
91
92 Master()->Log(Form("Reading Gain files for Run %d startTime %ld endTime %ld",
93 run,startTime,endTime));
94
95 TList* sources = Master()->GetFileSources(kSystem,kId);
96 TIter next(sources);
97 TObjString* o(0x0);
98 Int_t n(0);
99
100 while ( ( o = static_cast<TObjString*>(next()) ) )
101 {
102 TString fileName(Master()->GetFile(kSystem,kId,o->GetName()));
103 Int_t ok = ReadFile(fileName.Data());
81028269 104 if (ok>0)
505bc496 105 {
81028269 106 n += ok;
505bc496 107 }
81028269 108 else if ( ok == AliMUONTrackerIO::kDummyFile )
505bc496 109 {
81028269 110 // not an interesting file.
111 fSkip = kTRUE;
112 break;
505bc496 113 }
114 }
115
81028269 116 if ( fSkip )
117 {
118 delete fGains;
119 fGains = 0x0;
120 }
121
122 if (!n && !fSkip)
505bc496 123 {
124 Master()->Log("Failed to read any Gains");
125 delete fGains;
81028269 126 fGains = 0x0;
505bc496 127 }
81028269 128
505bc496 129 delete sources;
130}
131
132//_____________________________________________________________________________
133UInt_t
134AliMUONGainSubprocessor::Process(TMap* /*dcsAliasMap*/)
135{
136 /// Store the Gains into the CDB
137
138 if (!fGains)
139 {
140 // this is the only reason to fail for the moment : getting no Gain
81028269 141 // at all, except if the input file was a dummy one
142 if ( fSkip )
143 {
144 return 0;
145 }
146 else
147 {
148 return 1;
149 }
505bc496 150 }
151
152 AliMUON2DStoreValidator validator;
153
154 Master()->Log("Validating");
155
156 TObjArray* chambers = validator.Validate(*fGains);
157
158 if (chambers)
159 {
160 // we hereby report what's missing, but this is not a reason to fail ;-)
161 // the only reason to fail would be if we got no Gain at all
162 TList lines;
163 lines.SetOwner(kTRUE);
164
165 validator.Report(lines,*chambers);
166
167 TIter next(&lines);
168 TObjString* line;
169
170 while ( ( line = static_cast<TObjString*>(next()) ) )
171 {
172 Master()->Log(line->String().Data());
173 }
174 }
175
176 Master()->Log("Storing Gains");
177
178 AliCDBMetaData metaData;
179 metaData.SetBeamPeriod(0);
180 metaData.SetResponsible("MUON TRK");
49419555 181 metaData.SetComment(Form("Computed by AliMUONGainSubprocessor "
182 "$Id$ ; %s",fComment.Data()));
505bc496 183
184 Bool_t validToInfinity = kTRUE;
d489129d 185 Bool_t result = Master()->Store("Calib", "Gains", fGains, &metaData, 0, validToInfinity);
505bc496 186
d489129d 187 return ( result != kTRUE ); // return 0 if everything is ok
505bc496 188}
189
190//_____________________________________________________________________________
191Int_t
192AliMUONGainSubprocessor::ReadFile(const char* filename)
193{
cf27231a 194 /// Read the Gains from an ASCII file.
195 /// Format of that file is one line per channel :
196 ///-------------------------------------------------------------------------
197 ///BUS_PATCH MANU CHANNEL a0 a1 thres Qual
198 ///-------------------------------------------------------------------------
199 ///
200 /// Return kFALSE if reading was not successfull.
505bc496 201 ///
81028269 202
505bc496 203 TString sFilename(gSystem->ExpandPathName(filename));
204
205 Master()->Log(Form("Reading %s",sFilename.Data()));
81028269 206
207 Int_t n = AliMUONTrackerIO::ReadGains(sFilename.Data(),*fGains,fComment);
208
209 switch (n)
505bc496 210 {
81028269 211 case AliMUONTrackerIO::kCannotOpenFile:
212 Master()->Log(Form("Could not open %s",sFilename.Data()));
213 break;
214 case AliMUONTrackerIO::kFormatError:
215 Master()->Log(Form("File %s is not of the expected format",sFilename.Data()));
216 break;
217 case AliMUONTrackerIO::kDummyFile:
218 Master()->Log(Form("File %s is a dummy one. That's fine. I won't do anything then ;-)",sFilename.Data()));
219 break;
220 default:
221 break;
505bc496 222 }
505bc496 223
505bc496 224 return n;
225}