]> git.uio.no Git - u/mrichter/AliRoot.git/blame - AD/AliADPreprocessor.cxx
Merge branch 'master_patch'
[u/mrichter/AliRoot.git] / AD / AliADPreprocessor.cxx
CommitLineData
4188a021 1#include "AliADPreprocessor.h"
2#include "AliADCalibData.h"
3#include "AliCDBMetaData.h"
4#include "AliCDBEntry.h"
5#include "AliDCSValue.h"
6#include "AliLog.h"
7#include "AliShuttleInterface.h"
8#include "AliADDataDCS.h"
9
10#include <TFile.h>
11#include <TTimeStamp.h>
12#include <TObjString.h>
13#include <TSystem.h>
14#include <TH1F.h>
15
16
17class Tlist;
18
19//
20// This class is a simple preprocessor for AD detector.
21//
22// It gets High Voltage values for a given run from DCS and Pedestal values from DAQ
23// and writes them as Calibration MetaData into OCDB/AD/Calib/Data
24// It also retrieves FEE parameters from DCS archive
25// and writes them as Trigger MetaData into OCDB/AD/Trigger/Data
26// (to be used for trigger simulation)
27//
28
29ClassImp(AliADPreprocessor)
30
31//______________________________________________________________________________________________
32AliADPreprocessor::AliADPreprocessor(AliShuttleInterface* shuttle) :
33 AliPreprocessor("AD0", shuttle),
34 fDCSData(0)
35
36{
37 // constructor
38
39 AddRunType("STANDALONE_PULSER");
40 AddRunType("STANDALONE_BC");
41 AddRunType("PHYSICS");
42
43}
44
45//______________________________________________________________________________________________
46AliADPreprocessor::~AliADPreprocessor()
47{
48 // destructor
49 delete fDCSData;
50
51}
52
53//______________________________________________________________________________________________
54void AliADPreprocessor::Initialize(Int_t run, UInt_t startTime,
55 UInt_t endTime)
56{
57 // Creates AliADDataDCS object
58
59 AliPreprocessor::Initialize(run, startTime, endTime);
60
61 Log(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
62 TTimeStamp(startTime).AsString(),
63 TTimeStamp(endTime).AsString()));
64
65 fRun = run;
66 // fStartTime = startTime;
67 // fEndTime = endTime;
68 fStartTime = GetStartTimeDCSQuery ();
69 fEndTime = GetEndTimeDCSQuery ();
70 time_t daqStart = (time_t) (((TString)GetRunParameter("DAQ_time_start")).Atoi());
71 time_t daqEnd = (time_t) (((TString)GetRunParameter("DAQ_time_end")).Atoi());
72 time_t ctpStart = (time_t) (((TString)GetRunParameter("TRGTimeStart")).Atoi());
73 time_t ctpEnd = (time_t) (((TString)GetRunParameter("TRGTimeEnd")).Atoi());
74
75 fDCSData = new AliADDataDCS(fRun, fStartTime, fEndTime,(UInt_t)daqStart, (UInt_t)daqEnd,(UInt_t)ctpStart, (UInt_t)ctpEnd);
76
77}
78
79//______________________________________________________________________________________________
80UInt_t AliADPreprocessor::Process(TMap* dcsAliasMap)
81{
82 // Fills data retrieved from DCS and DAQ into a AliADCalibData object and
83 // stores it into CalibrationDB
84
85
86 // *** GET RUN TYPE ***
87 TString runType = GetRunType();
88
89
90 // *** REFERENCE DATA ***
91
92 TString fileName;
93 AliADCalibData *calibData = new AliADCalibData();
94
95 // *************** HV From DCS ******************
96 // Fills data into a AliADDataDCS object
97 if(!dcsAliasMap) return 1;
98
99 // The Processing of the DCS input data is forwarded to AliADDataDCS
100 if (!fDCSData->ProcessData(*dcsAliasMap)) return 1;
101
102 // Writes AD PMs HV values into AD calibration object and Timing resolution parameters
103 calibData->FillDCSData(fDCSData);
104
105 // *************** From DAQ ******************
106
107 TString sourcesId = "AD0da_results";
108
109 TList* sourceList = GetFileSources(kDAQ, sourcesId.Data());
110 if (!sourceList) {
111 Log(Form("No sources found for id %s", sourcesId.Data()));
112 return 1; }
113 Log(Form("The following sources produced files with the id %s",sourcesId.Data()));
114 sourceList->Print();
115
116 TIter iter(sourceList);
117 TObjString *source;
118
119 while((source=dynamic_cast<TObjString*> (iter.Next()))){
120 fileName = GetFile(kDAQ, sourcesId.Data(), source->GetName());
121 if (fileName.Length() > 0)
122 Log(Form("Got the file %s, now we can extract some values.", fileName.Data()));
123 FILE *file;
124 if((file = fopen(fileName.Data(),"r")) == NULL){
125 Log(Form("Cannot open file %s",fileName.Data()));
126 return 1;}
127 Float_t pedMean[32], pedSigma[32], adcMean[32], adcSigma[32] ;
128 for(Int_t j=0; j<32; j++) {
129 Int_t resScan = fscanf(file,"%f %f %f %f",
130 &pedMean[j], &pedSigma[j], &adcMean[j], &adcSigma[j]);
131 if (resScan != 4) Log(Form("Bad data in file %s !",fileName.Data()));
132 }
133 fclose(file);
134
135 calibData->SetPedestal(pedMean);
136 calibData->SetSigma(pedSigma);
137 calibData->SetADCmean(adcMean);
138 calibData->SetADCsigma(adcSigma);
139 }
140
141 delete source;
142
143 // Check that everything was properly transmitted
144
145// for(Int_t j=0; j<128; j++){printf("Pedestal[%d] -> %f \n",j,calibData->GetPedestal(j));}
146// for(Int_t j=0; j<128; j++){printf("pedSigma[%d] -> %f \n",j,calibData->GetSigma(j));}
147// for(Int_t j=0; j<128; j++){printf("Gain[%d] -> %f \n",j,calibData->GetGain(j));}
148// for(Int_t j=0; j<128; j++){printf("adcSigma[%d] -> %f \n",j,calibData->GetADCsigma(j));}
149// for(Int_t j=0; j<64; j++){printf("MeanHV[%d] -> %f \n",j,calibData->GetMeanHV(j));}
150// for(Int_t j=0; j<64; j++){printf("WidthHV[%d] -> %f \n",j,calibData->GetWidthHV(j));}
151
152 // Now we store the AD Calibration Object into CalibrationDB
153
154 Bool_t resECal=kTRUE;
155
156 Bool_t result = 0;
157// if(sourceList && sourceList->GetEntries()>0)
158// {
159 AliCDBMetaData metaData;
160 metaData.SetBeamPeriod(0);
161 metaData.SetResponsible("Michal Broz");
162 metaData.SetComment("This preprocessor fills an AliADCalibData object");
163
164 resECal = Store("Calib", "Data", calibData, &metaData, 0, kTRUE);
165// }
166 if(resECal==kFALSE ) result = 1;
167
168
169 delete calibData;
170 delete sourceList;
171
172
173 return result;
174}
175