1 /**************************************************************************
2 * Copyright(c) 2007, 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 **************************************************************************/
17 #include "AliTPCPreprocessor.h"
18 #include "AliShuttleInterface.h"
20 #include "AliCDBMetaData.h"
21 #include "AliDCSValue.h"
23 #include "AliTPCSensorTempArray.h"
24 #include "AliTPCROC.h"
25 #include "AliTPCCalROC.h"
26 #include "AliTPCCalPad.h"
27 #include "AliTPCCalibPedestal.h"
32 #include <TTimeStamp.h>
34 const Int_t kValCutTemp = 100; // discard temperatures > 100 degrees
35 const Int_t kDiffCutTemp = 5; // discard temperature differences > 5 degrees
36 const TString kPedestalRunType = "PEDESTAL_RUN"; // pedestal run identifier
39 // This class is the SHUTTLE preprocessor for the TPC detector.
40 // It contains several components, this far the part containing
41 // temperatures is implemented
44 ClassImp(AliTPCPreprocessor)
46 //______________________________________________________________________________________________
47 AliTPCPreprocessor::AliTPCPreprocessor(AliShuttleInterface* shuttle) :
48 AliPreprocessor("TPC",shuttle),
49 fConfEnv(0), fTemp(0), fPressure(0), fConfigOK(kTRUE), fROC(0)
52 fROC = AliTPCROC::Instance();
54 //______________________________________________________________________________________________
55 // AliTPCPreprocessor::AliTPCPreprocessor(const AliTPCPreprocessor& org) :
56 // AliPreprocessor(org),
57 // fConfEnv(0), fTemp(0), fPressure(0), fConfigOK(kTRUE)
59 // // copy constructor not implemented
60 // // -- missing underlying copy constructor in AliPreprocessor
62 // Fatal("AliTPCPreprocessor", "copy constructor not implemented");
64 // // fTemp = new AliTPCSensorTempArray(*(org.fTemp));
67 //______________________________________________________________________________________________
68 AliTPCPreprocessor::~AliTPCPreprocessor()
75 //______________________________________________________________________________________________
76 AliTPCPreprocessor& AliTPCPreprocessor::operator = (const AliTPCPreprocessor& )
78 Fatal("operator =", "assignment operator not implemented");
83 //______________________________________________________________________________________________
84 void AliTPCPreprocessor::Initialize(Int_t run, UInt_t startTime,
87 // Creates AliTestDataDCS object
89 AliPreprocessor::Initialize(run, startTime, endTime);
91 AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
92 TTimeStamp(startTime).AsString(),
93 TTimeStamp(endTime).AsString()));
95 // Preprocessor configuration
97 AliCDBEntry* entry = GetFromOCDB("Config", "Preprocessor");
98 if (entry) fConfEnv = (TEnv*) entry->GetObject();
100 Log("AliTPCPreprocsessor: Preprocessor Config OCDB entry missing.\n");
105 // Temperature sensors
108 entry = GetFromOCDB("Config", "Temperature");
109 if (entry) confTree = (TTree*) entry->GetObject();
111 Log("AliTPCPreprocsessor: Temperature Config OCDB entry missing.\n");
115 fTemp = new AliTPCSensorTempArray(fStartTime, fEndTime, confTree);
116 fTemp->SetValCut(kValCutTemp);
117 fTemp->SetDiffCut(kDiffCutTemp);
123 entry = GetFromOCDB("Config", "Pressure");
124 if (entry) confTree = (TTree*) entry->GetObject();
126 Log("AliTPCPreprocsessor: Pressure Config OCDB entry missing.\n");
130 fPressure = new AliDCSSensorArray(fStartTime, fEndTime, confTree);
134 //______________________________________________________________________________________________
135 UInt_t AliTPCPreprocessor::Process(TMap* dcsAliasMap)
137 // Fills data into TPC calibrations objects
139 // Amanda servers provide information directly through dcsAliasMap
141 if (!dcsAliasMap) return 9;
142 if (dcsAliasMap->GetEntries() == 0 ) return 9;
143 if (!fConfigOK) return 9;
145 TString runType = GetRunType();
147 // Temperature sensors are processed by AliTPCCalTemp
150 UInt_t tempResult = MapTemperature(dcsAliasMap);
151 UInt_t result=tempResult;
155 UInt_t pressureResult = MapPressure(dcsAliasMap);
156 result += pressureResult;
158 // Other calibration information will be retrieved through FXS files
160 // TList* fileSourcesDAQ = GetFile(AliShuttleInterface::kDAQ, "pedestals");
161 // const char* fileNamePed = GetFile(AliShuttleInterface::kDAQ, "pedestals", "LDC1");
163 // TList* fileSourcesHLT = GetFile(AliShuttleInterface::kHLT, "calib");
164 // const char* fileNameHLT = GetFile(AliShuttleInterface::kHLT, "calib", "LDC1");
167 if(runType == kPedestalRunType) {
168 Int_t pedestalSource = AliShuttleInterface::kDAQ;
169 TString source = fConfEnv->GetValue("Pedestal","DAQ");
171 if ( source == "HLT" ) pedestalSource = AliShuttleInterface::kHLT;
172 UInt_t pedestalResult = ExtractPedestals(pedestalSource);
173 result += pedestalResult;
180 //______________________________________________________________________________________________
181 UInt_t AliTPCPreprocessor::MapTemperature(TMap* dcsAliasMap)
184 // extract DCS temperature maps. Perform fits to save space
187 TMap *map = fTemp->ExtractDCS(dcsAliasMap);
189 fTemp->MakeSplineFit(map);
190 AliInfo(Form("Temperature values extracted, fits performed.\n"));
192 Log("AliTPCPreprocsessor: no temperature map extracted. \n");
196 // Now store the final CDB file
199 AliCDBMetaData metaData;
200 metaData.SetBeamPeriod(0);
201 metaData.SetResponsible("Haavard Helstrup");
202 metaData.SetComment("Preprocessor AliTPC data base entries.");
204 Bool_t storeOK = Store("Calib", "Temperature", fTemp, &metaData, 0, kFALSE);
205 if ( !storeOK ) result=1;
212 //______________________________________________________________________________________________
214 UInt_t AliTPCPreprocessor::MapPressure(TMap* dcsAliasMap)
217 // extract DCS temperature maps. Perform fits to save space
220 TMap *map = fPressure->ExtractDCS(dcsAliasMap);
222 fPressure->MakeSplineFit(map);
223 AliInfo(Form("Pressure values extracted, fits performed.\n"));
225 Log("AliTPCPreprocsessor: no atmospheric pressure map extracted. \n");
229 // Now store the final CDB file
232 AliCDBMetaData metaData;
233 metaData.SetBeamPeriod(0);
234 metaData.SetResponsible("Haavard Helstrup");
235 metaData.SetComment("Preprocessor AliTPC data base entries.");
237 Bool_t storeOK = Store("Calib", "Pressure", fPressure, &metaData, 0, 0);
238 if ( !storeOK ) result=1;
247 //______________________________________________________________________________________________
249 UInt_t AliTPCPreprocessor::ExtractPedestals(Int_t sourceFXS)
252 // Read pedestal file from file exchage server
253 // Keep original entry from OCDB in case no new pedestals are available
255 AliTPCCalPad *calPadPed=0;
256 AliCDBEntry* entry = GetFromOCDB("Calib", "Pedestals");
257 if (entry) calPadPed = (AliTPCCalPad*)entry->GetObject();
258 if ( calPadPed==NULL ) {
259 Log("AliTPCPreprocsessor: No previous TPC pedestal entry available.\n");
260 calPadPed = new AliTPCCalPad("PedestalsMean","PedestalsMean");
263 AliTPCCalPad *calPadRMS=0;
264 entry = GetFromOCDB("Calib", "Noise");
265 if (entry) calPadRMS = (AliTPCCalPad*)entry->GetObject();
266 if ( calPadRMS==NULL ) {
267 Log("AliTPCPreprocsessor: No previous TPC noise entry available.\n");
268 calPadRMS = new AliTPCCalPad("PedestalsRMS","PedestalsRMS");
274 Int_t nSectors = fROC->GetNSectors();
275 TList* list = GetFileSources(sourceFXS,"pedestals");
278 // loop through all files from LDCs
281 while (list->At(index)!=NULL) {
282 TObjString* fileNameEntry = (TObjString*) list->At(index);
283 if (fileNameEntry!=NULL) {
284 TString fileName = GetFile(sourceFXS, "pedestals",
285 fileNameEntry->GetString().Data());
286 TFile *f = TFile::Open(fileName);
287 AliTPCCalibPedestal *calPed;
288 f->GetObject("AliTPCCalibPedestal",calPed);
290 // replace entries for the sectors available in the present file
292 for (Int_t sector=0; sector<nSectors; sector++) {
293 AliTPCCalROC *rocPed=calPed->GetCalRocPedestal(sector, kFALSE);
294 if ( rocPed ) calPadPed->SetCalROC(rocPed,sector);
295 AliTPCCalROC *rocRMS=calPed->GetCalRocRMS(sector, kFALSE);
296 if ( rocRMS ) calPadRMS->SetCalROC(rocRMS,sector);
302 // Store updated pedestal entry to OCDB
304 AliCDBMetaData metaData;
305 metaData.SetBeamPeriod(0);
306 metaData.SetResponsible("Haavard Helstrup");
307 metaData.SetComment("Preprocessor AliTPC data base entries.");
309 Bool_t storeOK = Store("Calib", "Pedestals", calPadPed, &metaData, 0, kTRUE);
310 if ( !storeOK ) ++result;
311 storeOK = Store("Calib", "PadNoise", calPadRMS, &metaData, 0, kTRUE);
312 if ( !storeOK ) ++result;
319 //______________________________________________________________________________________________