Changes of Jens Wiechula
[u/mrichter/AliRoot.git] / TPC / CalibMacros / CalibEnv.C
1 /*
2 .x ~/NimStyle.C
3 .x ~/rootlogon.C
4
5 gSystem->AddIncludePath("-I$ALICE_ROOT/TPC");
6
7
8
9 .L $ALICE_ROOT/TPC/CalibMacros/CalibEnv.C+
10 Init();
11 CalibEnv("run.list");
12 GetTree();
13
14 TFile f("dcsTime.root")
15
16 //
17 // if you want to use alien OCDB
18 // 
19 gSystem->Load("libXrdClient.so");
20 gSystem->Load("libNetx.so");
21 if (!gGrid) TGrid::Connect("alien://",0,0,"t");
22
23
24
25 */
26
27 #include <iostream>
28 #include <fstream>
29 #include <stdio.h>
30 #include <AliCDBManager.h>
31 #include <AliCDBEntry.h>
32 #include <AliLog.h>
33 #include <AliMagF.h>
34 #include "AliTPCcalibDB.h"
35 #include "AliTPCcalibDButil.h"
36 #include "AliTPCAltroMapping.h"
37 #include "AliTPCExB.h"
38 #include "AliTPCCalROC.h"
39 #include "AliTPCCalPad.h"
40 #include "AliTPCSensorTempArray.h"
41 #include "AliGRPObject.h"
42 #include "AliTPCTransform.h"
43 #include "TFile.h"
44 #include "TKey.h"
45 #include "TObjArray.h"
46 #include "TObjString.h"
47 #include "TString.h"
48 #include "AliTPCCalPad.h"
49 #include "AliTPCROC.h"
50 #include "AliTPCParam.h"
51 #include "AliTPCCalibPulser.h"
52 #include "AliTPCCalibPedestal.h"
53 #include "AliTPCCalibCE.h"
54 #include "AliTPCExBFirst.h"
55 #include "TTreeStream.h"
56 #include "AliTPCTempMap.h"
57 #include "TVectorD.h"
58 #include "TMatrixD.h"
59 #include "AliTPCCalibRaw.h"
60
61
62 TTree * dcsTree=0;
63
64 void GetProductionInfo(Int_t run, Int_t &nalien, Int_t &nRawAlien, Int_t &nlocal, Int_t &nRawLocal);
65   
66 void Init2008(){
67   //
68   //
69   //
70   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
71   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Parameters","local://$ALICE_ROOT/OCDB");
72   AliCDBManager::Instance()->SetSpecificStorage("GRP/GRP/Data","local:///lustre/alice/alien/alice/data/2008/LHC08d/OCDB/");
73   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Temperature","local:///lustre/alice/alien/alice/data/2008/LHC08d/OCDB/");
74   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/HighVoltage","local:///lustre/alice/alien/alice/data/2008/LHC08d/OCDB/");
75   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Goofie","local:///lustre/alice/alien/alice/data/2008/LHC08d/OCDB/");
76   AliCDBManager::Instance()->SetRun(1);
77 }
78
79 void Init(){  
80   AliCDBManager::Instance()->SetDefaultStorage("local:///lustre/alice/alien/alice/data/2009/OCDB/");
81   AliCDBManager::Instance()->SetRun(1);
82 }
83
84 void InitAlien(const char *path="LHC08b"){
85   //
86   //
87   //
88   TString alpath="alien://folder=/alice/data/2008/";
89   alpath+=path;
90   alpath+="/OCDB";
91   
92   AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
93   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Parameters","local://$ALICE_ROOT/OCDB");
94   AliCDBManager::Instance()->SetSpecificStorage("GRP/GRP/Data",alpath.Data());
95   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Temperature",alpath.Data());
96   AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Goofie",alpath.Data());
97   AliCDBManager::Instance()->SetRun(1);
98 }
99
100
101 void CalibEnv(const char * runList){
102   //
103   //
104   //
105   AliTPCcalibDB * calibDB = AliTPCcalibDB::Instance();
106   ifstream in;
107   in.open(runList);
108   Int_t irun=0;
109   TTreeSRedirector *pcstream = new TTreeSRedirector("dcsTime.root");
110   AliTPCcalibDButil dbutil;
111   //  for (Int_t irun=startRun; irun<stopRun; irun++){
112   while(in.good()) {
113     in >> irun;
114     if (in.eof()) break;
115     if (irun==0) continue;
116     printf("Processing run %d ...\n",irun);
117     AliTPCcalibDB::Instance()->SetRun(irun);
118     dbutil.UpdateFromCalibDB();
119     AliDCSSensor * sensorPressure = AliTPCcalibDB::Instance()->GetPressureSensor(irun);
120     if (!sensorPressure) continue;
121     AliTPCSensorTempArray * tempArray = AliTPCcalibDB::Instance()->GetTemperatureSensor(irun);
122     AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray);
123     AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(irun);
124     //
125     Int_t startTime = sensorPressure->GetStartTime();
126     Int_t endTime = sensorPressure->GetEndTime();
127     Int_t startTimeGRP = AliTPCcalibDB::GetGRP(irun)->GetTimeStart();
128     Int_t stopTimeGRP  = AliTPCcalibDB::GetGRP(irun)->GetTimeEnd();
129     Int_t dtime = TMath::Max((endTime-startTime)/20,10*60);
130     //Goofie statistical data
131     TVectorD vecEntries, vecMean, vecMedian,vecRMS;
132     dbutil.ProcessGoofie(vecEntries ,vecMedian, vecMean, vecRMS);
133     //CE data processing - see ProcessCEdata function for description of the results
134     TVectorD fitResultsA, fitResultsC;
135     Int_t nmaskedCE;
136     dbutil.ProcessCEdata("gx++gy++lx++lx**2",fitResultsA,fitResultsC,nmaskedCE);
137     TVectorD vecTEntries, vecTMean, vecTRMS, vecTMedian, vecQEntries, vecQMean, vecQRMS, vecQMedian;
138     Float_t driftTimeA, driftTimeC;
139     dbutil.ProcessCEgraphs(vecTEntries, vecTMean, vecTRMS, vecTMedian,
140                            vecQEntries, vecQMean, vecQRMS, vecQMedian,
141                            driftTimeA, driftTimeC );
142     //noise data Processing - see ProcessNoiseData function for description of the results
143     TVectorD vNoiseMean, vNoiseMeanSenRegions, vNoiseRMS, vNoiseRMSSenRegions;
144     Int_t nonMaskedZero=0;
145     dbutil.ProcessNoiseData(vNoiseMean, vNoiseMeanSenRegions, vNoiseRMS, vNoiseRMSSenRegions, nonMaskedZero);
146     //L3 data 
147     Float_t bz=AliTPCcalibDB::GetBz(irun);
148     Char_t  l3pol=AliTPCcalibDB::GetL3Polarity(irun);
149     //calibration Pulser data processing
150     Int_t nOffChannels=0;
151     TVectorD vTimePulser;
152     nOffChannels=dbutil.GetNPulserOutliers();
153     dbutil.ProcessPulser(vTimePulser);
154     //ALTRO data
155     Int_t nMasked=0;
156     dbutil.ProcessALTROConfig(nMasked);
157     //Calib RAW data
158     Int_t nFailL1=-1;
159     if (calibDB->GetCalibRaw())
160       nFailL1=calibDB->GetCalibRaw()->GetNFailL1Phase();
161     //production information
162     Int_t nalien=0,nRawAlien=0,nlocal=0,nRawLocal=0;
163 //     GetProductionInfo(irun, nalien, nRawAlien, nlocal,nRawLocal);
164     //run type
165     TObjString runType(AliTPCcalibDB::GetRunType(irun).Data());
166     
167     for (Int_t itime=startTime; itime<endTime; itime+=dtime){
168       //
169       TTimeStamp tstamp(itime);
170       Float_t valuePressure  = calibDB->GetPressure(tstamp,irun,0);
171       Float_t valuePressure2 = calibDB->GetPressure(tstamp,irun,1);
172       //temperature fits
173       TLinearFitter * fitter = 0;
174       TVectorD vecTemp[10];
175       for (Int_t itype=0; itype<5; itype++)
176         for (Int_t iside=0; iside<2; iside++){
177           fitter= tempMap->GetLinearFitter(itype,iside,tstamp);   
178           if (!fitter) continue;
179           fitter->Eval();
180           fitter->GetParameters(vecTemp[itype+iside*5]);
181           delete fitter;
182         }
183       //measured skirt temperatures
184       TVectorD vecSkirtTempA(18);
185       TVectorD vecSkirtTempC(18);
186       Int_t nsenTemp=tempArray->NumSensors();
187       for (Int_t isenTemp=0;isenTemp<nsenTemp;++isenTemp){
188         AliTPCSensorTemp *senTemp=(AliTPCSensorTemp*)tempArray->GetSensorNum(isenTemp);
189         if (senTemp->GetType()!=3) continue;
190         if (TMath::Sqrt(senTemp->GetX()*senTemp->GetX()+senTemp->GetY()*senTemp->GetY())<100) continue; //only skirt, outer FC vessel
191         Double_t val=senTemp->GetValue(tstamp);
192         if (senTemp->GetSide()==0)
193           vecSkirtTempA[senTemp->GetSector()]=val;
194         else
195           vecSkirtTempC[senTemp->GetSector()]=val;
196       }
197       //goofie data
198       TVectorD vecGoofie;
199       if (goofieArray){
200         vecGoofie.ResizeTo(goofieArray->NumSensors());
201         for (Int_t isensor=0; isensor<goofieArray->NumSensors();isensor++){
202           AliDCSSensor *gsensor = goofieArray->GetSensor(isensor);
203           if (gsensor){
204             vecGoofie[isensor] = gsensor->GetValue(tstamp);
205           }
206         }
207       } else {
208         vecGoofie.ResizeTo(19);
209       }
210       Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative((UInt_t)itime,irun,0);
211       Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative((UInt_t)itime,irun,1);
212       //
213       TVectorD voltagesIROC(36);
214       TVectorD voltagesOROC(36);
215       for(Int_t j=1; j<36; j++) voltagesIROC[j-1] = AliTPCcalibDB::Instance()->GetChamberHighVoltage(irun, j,itime);
216       for(Int_t j=36; j<72; j++) voltagesOROC[j-36] = AliTPCcalibDB::Instance()->GetChamberHighVoltage(irun, j,itime);
217       Double_t voltIROC = TMath::Median(36, voltagesIROC.GetMatrixArray());
218       Double_t voltOROC = TMath::Median(36, voltagesOROC.GetMatrixArray());
219       //
220       Float_t  coverIA=AliTPCcalibDB::GetCoverVoltage(irun,0,itime);
221       Float_t  coverIC=AliTPCcalibDB::GetCoverVoltage(irun,18,itime);
222       Float_t  coverOA=AliTPCcalibDB::GetCoverVoltage(irun,36,itime);
223       Float_t  coverOC=AliTPCcalibDB::GetCoverVoltage(irun,54,itime);
224       Float_t  skirtA=AliTPCcalibDB::GetSkirtVoltage(irun,0,itime);
225       Float_t  skirtC=AliTPCcalibDB::GetSkirtVoltage(irun,18,itime);
226       Float_t  ggOffA=AliTPCcalibDB::GetGGoffsetVoltage(irun,0,itime);
227       Float_t  ggOffC=AliTPCcalibDB::GetGGoffsetVoltage(irun,18,itime);
228       
229       
230       
231       //tempMap->GetLinearFitter(0,0,itime);
232       (*pcstream)<<"dcs"<<
233         "run="<<irun<<
234         "time="<<itime<<
235         "startTimeGRP="<<startTimeGRP<<
236         "stopTimeGRP="<<stopTimeGRP<<
237         //run type
238         "runType.="<<&runType<<
239         // voltage setting
240         "VIROC.="<<&voltagesIROC<<
241         "VOROC.="<<&voltagesOROC<<
242         "medianVIROC="<<voltIROC<<
243         "medianVOROC="<<voltOROC<<
244         "coverIA=" << coverIA <<
245         "coverIC=" << coverIC <<
246         "coverOA=" << coverOA <<
247         "coverOC=" << coverOC <<
248         "skirtA=" << skirtA <<
249         "skirtC=" << skirtC <<
250         "ggOffA=" << ggOffA <<
251         "ggOffC=" << ggOffC <<
252         //
253         "ptrel0="<<ptrelative0<<  // deltaTP/TP  - A side
254         "ptrel1="<<ptrelative1<<  // deltaTP/TPC - C side
255         "goofie.="<<&vecGoofie<<
256         "goofieE.="<<&vecEntries<<
257         "goofieMean.="<<&vecMean<<
258         "goofieMedian.="<<&vecMedian<<
259         "goofieRMS.="<<&vecRMS<<
260         //
261         "press="<<valuePressure<<
262         "press2="<<valuePressure2<<
263         "temp00.="<<&vecTemp[0]<<
264         "temp10.="<<&vecTemp[1]<<
265         "temp20.="<<&vecTemp[2]<<
266         "temp30.="<<&vecTemp[3]<<
267         "temp40.="<<&vecTemp[4]<<
268         "temp01.="<<&vecTemp[5]<<
269         "temp11.="<<&vecTemp[6]<<
270         "temp21.="<<&vecTemp[7]<<
271         "temp31.="<<&vecTemp[8]<<
272         "temp41.="<<&vecTemp[9]<<
273         "tempSkirtA.="<<&vecSkirtTempA<<
274         "tempSkirtC.="<<&vecSkirtTempC;
275       
276       (*pcstream)<<"dcs"<<      
277         //noise data
278         "meanNoise.="<<&vNoiseMean<<
279         "meanNoiseSen.="<<&vNoiseMeanSenRegions<<
280         "rmsNoise.="<<&vNoiseRMS<<
281         "rmsNoiseSen.="<<&vNoiseRMSSenRegions<<
282         "zeroNoise="<<nonMaskedZero<<
283         //pulser data
284         "timePulser.=" << &vTimePulser <<
285         "nOffPulser="<<nOffChannels<<
286         //altro data
287         "nMasked="<<nMasked<<
288         //ce data
289         "CEfitA.="<<&fitResultsA<<
290         "CEfitC.="<<&fitResultsC<<
291         "nmaskedCE="<<nmaskedCE<<
292         //ce graph data
293         "CEgrTEntries.="<<&vecTEntries<<
294         "CEgrTMean.="<<&vecTMean<<
295         "CEgrTRMS.="<<&vecTRMS<<
296         "CEgrTMedian.="<<&vecTMedian<<
297         "CEgrQEntries.="<<&vecQEntries<<
298         "CEgrQMean.="<<&vecQMean<<
299         "CEgrQRMS.="<<&vecQRMS<<
300         "CEgrQMedian.="<<&vecQMedian<<
301         "CEgrDriftA="<<driftTimeA<<
302         "CEgrDriftC="<<driftTimeC<<
303         //calib raw data
304         "nFailL1="<<nFailL1<<
305         // b field
306         "Bz="<< bz <<
307         "L3polarity="<<l3pol<<
308         // production information
309         "nalien="<<nalien<<
310         "nRawAlien="<<nRawAlien<<
311         "nlocal="<<nlocal<<
312         "nRawLocal="<<nRawLocal<<
313         "\n";
314     }
315   }
316   delete pcstream;
317 }
318
319
320
321
322 void GetProductionInfo(Int_t run, Int_t &nalien, Int_t &nRawAlien, Int_t &nlocal, Int_t &nRawLocal){
323   //
324   // find number of ESDs in central and local production for run
325   //
326
327   nalien=0;
328   nRawAlien=0;
329   nlocal=0;
330   nRawLocal=0;
331   TString sNlines;
332   //find number of ESDs in alien
333   TString command="alien_find /alice/data/2009 ";
334   command += Form("%09d",run);
335   command += " | grep AliESDs.root | wc -l";
336   sNlines = gSystem->GetFromPipe(command.Data());
337   nalien=sNlines.Atoi();
338   //find number of raw files on alien
339   command="alien_find /alice/data/2009 ";
340   command += Form("%09d",run);
341   command += " | grep raw | grep -v tag | wc -l";
342   sNlines = gSystem->GetFromPipe(command.Data());
343   nRawAlien=sNlines.Atoi();
344   //find number of ESDs local
345   command="find /lustre/alice/alien/alice/data/2009 -name AliESDs.root | grep ";
346   command += Form("%09d",run);
347   command += " | wc -l";
348   sNlines = gSystem->GetFromPipe(command.Data());
349   nlocal=sNlines.Atoi();
350   //find number of local raw data files
351   command="find /lustre/alice/alien/alice/data/2009 -name \"*.root\" | grep ";
352   command += Form("%09d",run);
353   command += " | grep raw | grep -v tag | wc -l";
354   sNlines = gSystem->GetFromPipe(command.Data());
355   nRawLocal=sNlines.Atoi();
356 }
357
358 void FilterMag(const char * runList){
359   //
360   //
361   //
362   //  AliTPCcalibDB * calibDB = AliTPCcalibDB::Instance();
363   ifstream in;
364   in.open(runList);
365   Int_t irun=0;
366   while(in.good()) {
367     in >> irun;
368     if (irun==0) continue;
369     AliGRPObject *grp = AliTPCcalibDB::GetGRP(irun);
370     Float_t current = -1;
371     Float_t bz      = -1;
372 //     Float_t press   =  0;
373     if (grp){
374       current = grp->GetL3Current((AliGRPObject::Stats)0);
375       bz = 5*current/30000.;
376       printf("Run%d\tL3 current%f\tBz\t%f\n",irun,current,bz);
377     }
378     else{
379       printf("Run%d\tL3 current%f\tBz\t%f\n",irun,current,bz);
380     }
381   }
382   
383 }
384
385
386 void GetTree(){
387   TFile *fdcs = new TFile("dcsTime.root");
388   dcsTree  = (TTree*)fdcs->Get("dcs");
389   //
390   // mean temp A
391   
392   dcsTree->Draw("temp30.fElements[0]");
393   
394 }
395
396 void GetNominalValues(){
397   //
398   if (!dcsTree) return;
399 }
400
401
402
403
404 /*
405
406 AliDCSSensor * sensorPressure = AliTPCcalibDB::Instance()->GetPressureSensor(62084);
407 entry = AliCDBManager::Instance()->Get("TPC/Calib/Temperature",run);
408 AliTPCSensorTempArray * tempArray = (AliTPCSensorTempArray *)entry->GetObject();
409 AliTPCSensorTempArray * tempArray = (AliTPCSensorTempArray *)AliTPCcalibDB::Instance()->GetTemperatureSensor(62084)
410 AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray);
411 TLinearFitter * fitter = tempMap->GetLinearFitter(0,0,tempArray->GetStartTime());
412
413 AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(62084);
414
415 */
416
417 /*
418
419 void PlotPressureResol(){
420   //
421   // Example
422   //
423   dcs->Draw("100000*(press-press2-4.782)/press/sqrt(2.)>>his(100,-50,50)","run>61400","")
424   his->SetXTitle("#sigma_{P/P_{0}}(10^{-5})");
425   gPad->SaveAs("picDCS/deltaPoverP.eps");
426   gPad->SaveAs("picDCS/deltaPoverP.gif");
427
428 }
429 void PlotTresol(){
430   //
431   // T resolution example
432   // plot difference of the temperature from A and C side
433   // Supposing the error is independent - (division by sqrt(2))
434   dcs->Draw("100000*(temp30.fElements[0]-temp31.fElements[0]+0.00509)/(temp31.fElements[0]+273.15)/sqrt(2.)>>his(100,-5,5)","run>61400","");
435   his->SetXTitle("#sigma_{T/T_{0}}(10^{-5})");
436   gPad->SaveAs("picDCS/deltaToverT.eps");
437   gPad->SaveAs("picDCS/deltaToverT.gif");
438 }
439 */