1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //-----------------------------------------------------------------------------
19 /// \class AliMUONHVSubprocessor
21 /// A subprocessor to read HV values for one run
23 /// It simply creates a copy of the dcsAliasMap w/o information
24 /// from the MUON TRK, and dumps this copy into the CDB
26 /// \author Laurent Aphecetche, Subatech
27 //-----------------------------------------------------------------------------
29 #include "AliMUONHVSubprocessor.h"
30 #include "AliMUONPreprocessor.h"
32 #include "AliMpDEIterator.h"
33 #include "AliMpDEManager.h"
34 #include "AliMpDCSNamer.h"
36 #include "AliCDBMetaData.h"
39 #include "Riostream.h"
41 #include "TObjString.h"
44 ClassImp(AliMUONHVSubprocessor)
47 //_____________________________________________________________________________
48 AliMUONHVSubprocessor::AliMUONHVSubprocessor(AliMUONPreprocessor* master, Bool_t includeHVcurrents)
49 : AliMUONVSubprocessor(master,
51 "Get MUON Tracker HV values from DCS"), fIncludeHVCurrents(includeHVcurrents)
56 //_____________________________________________________________________________
57 AliMUONHVSubprocessor::~AliMUONHVSubprocessor()
62 //_____________________________________________________________________________
64 AliMUONHVSubprocessor::Process(TMap* dcsAliasMap)
66 /// Make another alias map from dcsAliasMap, considering only MUON TRK aliases.
71 AliMpDCSNamer hvNamer("TRACKER");
78 aliases.SetOwner(kTRUE);
80 // we first generate a list of expected MCH DCS aliases we'll then look for
82 while ( !deIt.IsDone() )
84 Int_t detElemId = deIt.CurrentDEId();
86 switch ( AliMpDEManager::GetStationType(detElemId) )
88 case AliMp::kStation12:
90 for ( int i = 0; i <3; ++i)
92 aliases.Add(new TObjString(hvNamer.DCSAliasName(detElemId,i)));
93 if ( fIncludeHVCurrents )
95 aliases.Add(new TObjString(hvNamer.DCSAliasName(detElemId,i,AliMpDCSNamer::kDCSI)));
100 case AliMp::kStation345:
102 aliases.Add(new TObjString(hvNamer.DCSAliasName(detElemId)));
103 if ( fIncludeHVCurrents )
105 aliases.Add(new TObjString(hvNamer.DCSAliasName(detElemId,0,AliMpDCSNamer::kDCSI)));
107 for ( int i = 0; i < hvNamer.NumberOfPCBs(detElemId); ++i)
109 aliases.Add(new TObjString(hvNamer.DCSSwitchAliasName(detElemId,i)));
120 TIter next(&aliases);
122 Bool_t kNoAliases(kTRUE);
123 Int_t aliasNotFound(0);
124 Int_t valueNotFound(0);
126 TObjArray temporaryOut; // due to a bug in PVSS some iMon aliases cause problem
127 // we remove them for the moment.
128 temporaryOut.SetOwner(kTRUE);
130 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber06Left/Slat10.actual.iMon"));
131 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber06Left/Slat11.actual.iMon"));
132 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber06Left/Slat12.actual.iMon"));
133 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber07Left/Slat10.actual.iMon"));
134 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber07Left/Slat11.actual.iMon"));
135 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber07Left/Slat12.actual.iMon"));
136 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber08Left/Slat10.actual.iMon"));
137 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber08Left/Slat11.actual.iMon"));
138 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber08Left/Slat12.actual.iMon"));
139 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber09Left/Slat10.actual.iMon"));
140 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber09Left/Slat11.actual.iMon"));
141 temporaryOut.Add(new TObjString("MchHvLvLeft/Chamber09Left/Slat12.actual.iMon"));
142 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber06Right/Slat10.actual.iMon"));
143 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber06Right/Slat11.actual.iMon"));
144 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber06Right/Slat12.actual.iMon"));
145 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber07Right/Slat10.actual.iMon"));
146 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber07Right/Slat11.actual.iMon"));
147 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber07Right/Slat12.actual.iMon"));
148 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber08Right/Slat10.actual.iMon"));
149 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber08Right/Slat11.actual.iMon"));
150 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber08Right/Slat12.actual.iMon"));
151 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber09Right/Slat10.actual.iMon"));
152 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber09Right/Slat11.actual.iMon"));
153 temporaryOut.Add(new TObjString("MchHvLvRight/Chamber09Right/Slat12.actual.iMon"));
155 while ( ( alias = static_cast<TObjString*>(next()) ) )
157 TString aliasName(alias->String());
159 if ( temporaryOut.FindObject(alias->String().Data() ) )
161 // skip problematic aliases
165 TPair* hvPair = static_cast<TPair*>(dcsAliasMap->FindObject(aliasName.Data()));
173 TObjArray* values = static_cast<TObjArray*>(hvPair->Value()->Clone());
180 RemoveValuesOutsideRun(values);
181 hv.Add(new TObjString(aliasName.Data()),values);
188 Master()->Log("ERROR : no DCS values found");
194 Master()->Log(Form("WARNING %d aliases not found",aliasNotFound));
199 Master()->Log(Form("WARNING %d values not found",valueNotFound));
202 Master()->Log("INFO Aliases successfully read in");
204 AliCDBMetaData metaData;
205 metaData.SetBeamPeriod(0);
206 metaData.SetResponsible("MUON TRK");
207 metaData.SetComment("Computed by AliMUONHVSubprocessor $Id$");
209 Bool_t validToInfinity(kFALSE);
211 Bool_t result = Master()->Store("Calib","HV",&hv,&metaData,0,validToInfinity);
213 return ( result != kTRUE); // return 0 if everything is ok