]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TPC/AliTPCcalibSummary.cxx
Tree chaching implemented and update of merging of trees
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibSummary.cxx
CommitLineData
12f69174 1/*
2// Make a summary information of calibration.
3// Store results in the summary trees
4// OCDB configuration
5
5f547d58 6Example usage:
12f69174 7
5f547d58 8gSystem->Load("libANALYSIS");
9gSystem->Load("libTPCcalib");
12f69174 10
5f547d58 11Int_t irun=119037;
12gROOT->LoadMacro("$ALICE_ROOT/TPC/scripts/OCDBscan/ConfigOCDB.C");
13ConfigOCDB(irun)
14
15AliTPCcalibSummary *calibSummary = new AliTPCcalibSummary;
16calibSummary->ProcessRun(irun);
17delete calibSummary;
12f69174 18
19*/
20
21#include <TROOT.h>
22#include <iostream>
23#include <fstream>
24#include <stdio.h>
25#include <AliCDBManager.h>
26#include <AliCDBEntry.h>
27#include <AliLog.h>
28#include <AliMagF.h>
29#include "AliTPCcalibDB.h"
30#include "AliTPCcalibDButil.h"
31#include "AliTPCAltroMapping.h"
32#include "AliTPCExB.h"
33#include "AliTPCCalROC.h"
34#include "AliTPCCalPad.h"
35#include "AliTPCSensorTempArray.h"
36#include "AliGRPObject.h"
37#include "AliTPCTransform.h"
38#include "TFile.h"
39#include "TKey.h"
40#include "TObjArray.h"
41#include "TObjString.h"
42#include "TString.h"
43#include "AliTPCCalPad.h"
44#include "AliTPCROC.h"
45#include "AliTPCParam.h"
46#include "AliTPCCalibPulser.h"
47#include "AliTPCCalibPedestal.h"
48#include "AliTPCCalibCE.h"
49#include "AliTPCExBFirst.h"
50#include "TTreeStream.h"
51#include "AliTPCTempMap.h"
52#include "TVectorD.h"
53#include "TMatrixD.h"
54#include "AliTPCCalibRaw.h"
55#include "AliSplineFit.h"
56#include "TGraphErrors.h"
57#include <AliCTPTimeParams.h>
58#include <AliTPCcalibSummary.h>
af6a50bb 59#include <TStatToolkit.h>
99369b07 60#include <TCut.h>
61#include "AliTPCCalibGlobalMisalignment.h"
62#include "AliTPCExBTwist.h"
63#include "AliTPCComposedCorrection.h"
12f69174 64//
65//
66//
67AliTPCcalibSummary::AliTPCcalibSummary():
68 TNamed(),
69 fCalibDB(0),
70 fDButil(0),
71 fPcstream(0)
72{
73 //
74 // default constructor
75 // OCDB have to be setupe before - not part of class
76 // usualy ConfigOCDB.C macro used
77 //
78 fPcstream = new TTreeSRedirector("dcsTime.root");
79 fCalibDB = AliTPCcalibDB::Instance();
80 fDButil= new AliTPCcalibDButil;
81}
82
83AliTPCcalibSummary::~AliTPCcalibSummary(){
84 //
85 // destructor - close streamer
86 //
87 delete fPcstream;
88}
89
90void AliTPCcalibSummary::Process(const char * runList, Int_t first, Int_t last){
91 //
92 // runList - listOfRuns to process
93 // first - first run to process
94 // last - last to process
95 //
96 //
97 // make list of runs
98 //
99
100 ifstream inputFile;
101 inputFile.open("run.list");
102 Int_t irun=0;
103 TArrayI runArray(100000);
104 Int_t indexes[100000];
105 Int_t nruns=0;
106 printf("Runs to process:\n");
107 if (!inputFile.is_open()) {
108 printf("Problem to open file %s\n",runList);
109 }
110 while( inputFile.good() ) {
111 inputFile >> irun;
112 printf("Run \t%d\n",irun);
113 if (irun<first) continue; // process only subset of list
114 if (last>0 && irun>last) continue; // process only subset of list
115 runArray[nruns]=irun;
116 nruns++;
117 }
118
119
120 TMath::Sort(nruns, runArray.fArray, indexes,kFALSE);
121 Int_t startTime = 0;
122 Int_t endTime = 0;
123 for (Int_t run=0; run<nruns; run++){
124 irun=runArray[indexes[run]];
125 printf("Processing run %d ...\n",irun);
126 fCalibDB->SetRun(irun);
127 fDButil->UpdateFromCalibDB();
128 fDButil->SetReferenceRun(irun);
129 fDButil->UpdateRefDataFromOCDB();
af6a50bb 130 fCalibDB->CreateGUITree("calPads.root");
131 fDButil->CreateGUIRefTree("calPadsRef.root");
12f69174 132 //
133 AliDCSSensorArray *arrHV=fCalibDB->GetVoltageSensors(irun);
134 if (!arrHV) continue;
135 for (Int_t isenHV=0; isenHV<arrHV->NumSensors(); ++isenHV){
136 AliDCSSensor *senHV=arrHV->GetSensorNum(isenHV);
137 if (!senHV) {
138 printf("Not interesting OCDB info\n");
139 continue;
140 }
141 startTime=senHV->GetStartTime();
142 endTime =senHV->GetEndTime();
143 if (startTime>0&&endTime>0) break;
144 }
145 AliDCSSensorArray* goofieArray = fCalibDB->GetGoofieSensors(irun);
99369b07 146 if (goofieArray) fDButil->FilterGoofie(goofieArray,0.5,4.,4,10,fPcstream);
12f69174 147 // don't filter goofie for the moment
148 ProcessRun(irun, startTime,endTime);
149 }
150}
151
152
153void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){
154 //
155 // Process run irun
156 //
157 fCalibDB->SetRun(irun);
158 fDButil->UpdateFromCalibDB();
159 fDButil->SetReferenceRun(irun);
160 fDButil->UpdateRefDataFromOCDB();
af6a50bb 161 fCalibDB->CreateGUITree("calPads.root");
162 fDButil->CreateGUIRefTree("calPadsRef.root");
163
12f69174 164 //
165 AliSplineFit *fitVdrift=0x0;
166 Int_t startTimeGRP=0, stopTimeGRP=0;
167 if (fCalibDB->GetGRP(irun)){
168 startTimeGRP = AliTPCcalibDB::GetGRP(irun)->GetTimeStart();
169 stopTimeGRP = AliTPCcalibDB::GetGRP(irun)->GetTimeEnd();
170 }
171 if (startTime==0){
172 startTime=startTimeGRP;
173 endTime=stopTimeGRP;
174 }
175 AliTPCSensorTempArray * tempArray = fCalibDB->GetTemperatureSensor(irun);
176 AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray);
177 AliDCSSensorArray* goofieArray = fCalibDB->GetGoofieSensors(irun);
178 //
a3b590cf 179 Int_t dtime = TMath::Max((endTime-startTime)/20,10);
12f69174 180 //
181 //Goofie statistical data
182 //
183 TVectorD vecEntries, vecMean, vecMedian,vecRMS;
184 fDButil->ProcessGoofie(vecEntries ,vecMedian, vecMean, vecRMS);
185 //
186 //CE data processing - see ProcessCEdata function for description of the results
187 //
188 TVectorD fitResultsA, fitResultsC;
189 Int_t nmaskedCE;
190 Double_t chi2ACE=0,chi2CCE=0;
191 // fDButil->ProcessCEdata("(sector<36)++gx++gy++lx++lx**2",fitResultsA,fitResultsC,nmaskedCE);
192 fDButil->ProcessCEdata("(sector<36)++gx++gy++(lx-134)++(sector<36)*(lx-134)++(ly/lx)^2",fitResultsA,fitResultsC,nmaskedCE,chi2ACE,chi2CCE);
193
194 TVectorD fitCEResultsA(7), fitCEResultsC(7);
195 Int_t noutCE;
196 Double_t chi2CEA=0,chi2CEC=0;
197 AliTPCCalPad *time0 = fDButil->CreatePadTime0CE(fitCEResultsA, fitCEResultsC, noutCE, chi2CEA, chi2CEC);
198 delete time0;
199 //
200 //
201 TVectorD vecTEntries, vecTMean, vecTRMS, vecTMedian, vecQEntries, vecQMean, vecQRMS, vecQMedian;
202 Float_t driftTimeA, driftTimeC;
203 fDButil->ProcessCEgraphs(vecTEntries, vecTMean, vecTRMS, vecTMedian,
204 vecQEntries, vecQMean, vecQRMS, vecQMedian,
205 driftTimeA, driftTimeC );
206 //
207 //
208 //
209 //drift velocity using tracks
210 //
211 // fitVdrift=fCalibDB->GetVdriftSplineFit("ALISPLINEFIT_MEAN_VDRIFT_COSMICS_ALL",irun);
212 fitVdrift=fCalibDB->CreateVdriftSplineFit("TGRAPHERRORS_MEAN_VDRIFT_COSMICS_ALL",irun);
213 //noise data Processing - see ProcessNoiseData function for description of the results
214 TVectorD vNoiseMean, vNoiseMeanSenRegions, vNoiseRMS, vNoiseRMSSenRegions;
215 Int_t nonMaskedZero=0, nNaN=0;
216 fDButil->ProcessNoiseData(vNoiseMean, vNoiseMeanSenRegions, vNoiseRMS, vNoiseRMSSenRegions, nonMaskedZero, nNaN);
217 //
218 // comparisons
219 //
220 TVectorF pedestalDeviations;
221 TVectorF noiseDeviations;
222 TVectorF pulserQdeviations;
223 Float_t varQMean;
224 Int_t npadsOutOneTB;
225 Int_t npadsOffAdd;
226 fDButil->ProcessPedestalVariations(pedestalDeviations);
227 fDButil->ProcessNoiseVariations(noiseDeviations);
228 fDButil->ProcessPulserVariations(pulserQdeviations,varQMean,npadsOutOneTB,npadsOffAdd);
229 //
230 //L3 data
231 //
5b1577ef 232 Float_t bz=AliTPCcalibDB::GetBz(irun);
233 Char_t l3pol=AliTPCcalibDB::GetL3Polarity(irun);
12f69174 234 //
abb20887 235 //QA data processing
236 //
237 TVectorD vQaOcc;
238 TVectorD vQaQtot;
239 TVectorD vQaQmax;
240 fDButil->ProcessQAData(vQaOcc, vQaQtot, vQaQmax);
241 //
12f69174 242 //calibration Pulser data processing
243 //
244 Int_t nOffChannels=0;
245 TVectorD vTimePulser;
246 nOffChannels=fDButil->GetNPulserOutliers();
247 fDButil->ProcessPulser(vTimePulser);
248 //
249 //ALTRO data
250 //
251 Int_t nMasked=0;
252 fDButil->ProcessALTROConfig(nMasked);
253 //
254 //Calib RAW data
255 //
256 Int_t nFailL1=-1;
257 if (fCalibDB->GetCalibRaw()) nFailL1=fCalibDB->GetCalibRaw()->GetNFailL1Phase();
258 //
259 //production information
260 //
261 Int_t nalien=0,nRawAlien=0,nlocal=0,nRawLocal=0;
262 //run type
263 TObjString runType(AliTPCcalibDB::GetRunType(irun).Data());
264 //
265 //
266 //
267
268 for (Int_t itime=startTime; itime<endTime; itime+=dtime){
269 //
270 TTimeStamp tstamp(itime);
271 Float_t valuePressure = fCalibDB->GetPressure(tstamp,irun,0);
272 Float_t valuePressure2 = fCalibDB->GetPressure(tstamp,irun,1);
273 Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative((UInt_t)itime,irun,0);
274 Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative((UInt_t)itime,irun,1);
275 //temperature fits
276 TLinearFitter * fitter = 0;
277 TVectorD vecTemp[10];
278 for (Int_t itype=0; itype<5; itype++)
279 for (Int_t iside=0; iside<2; iside++){
280 fitter= tempMap->GetLinearFitter(itype,iside,tstamp);
281 if (!fitter) continue;
282 fitter->Eval();
283 fitter->GetParameters(vecTemp[itype+iside*5]);
284 delete fitter;
285 }
286 //
287 //measured skirt temperatures
288 //
289 TVectorD vecSkirtTempA(18);
290 TVectorD vecSkirtTempC(18);
291 Int_t nsenTemp=tempArray->NumSensors();
292 for (Int_t isenTemp=0;isenTemp<nsenTemp;++isenTemp){
293 AliTPCSensorTemp *senTemp=(AliTPCSensorTemp*)tempArray->GetSensorNum(isenTemp);
294 if (senTemp->GetType()!=3) continue;
295 if (TMath::Sqrt(senTemp->GetX()*senTemp->GetX()+senTemp->GetY()*senTemp->GetY())<100) continue; //only skirt, outer FC vessel
296 Double_t val=senTemp->GetValue(tstamp);
297 if (senTemp->GetSide()==0)
298 vecSkirtTempA[senTemp->GetSector()]=val;
299 else
300 vecSkirtTempC[senTemp->GetSector()]=val;
301 }
302 //
303 //goofie data
304 //
305 TVectorD vecGoofie;
306 if (goofieArray){
307 vecGoofie.ResizeTo(goofieArray->NumSensors());
308 for (Int_t isensor=0; isensor<goofieArray->NumSensors();isensor++){
309 AliDCSSensor *gsensor = goofieArray->GetSensor(isensor);
310 if (gsensor){
311 vecGoofie[isensor] = gsensor->GetValue(tstamp);
312 }
313 }
314 } else {
315 vecGoofie.ResizeTo(19);
316 }
317 //
318 TVectorD voltagesIROC(36);
a3b590cf 319 TVectorD voltagesOROC(36);
99369b07 320 for(Int_t j=0; j<36; j++) voltagesIROC[j] = fCalibDB->GetChamberHighVoltage(irun, j,itime);
12f69174 321 for(Int_t j=36; j<72; j++) voltagesOROC[j-36] = fCalibDB->GetChamberHighVoltage(irun, j,itime);
322 Double_t voltIROC = TMath::Median(36, voltagesIROC.GetMatrixArray());
323 Double_t voltOROC = TMath::Median(36, voltagesOROC.GetMatrixArray());
324 //
325 Float_t coverIA=AliTPCcalibDB::GetCoverVoltage(irun,0,itime);
326 Float_t coverIC=AliTPCcalibDB::GetCoverVoltage(irun,18,itime);
327 Float_t coverOA=AliTPCcalibDB::GetCoverVoltage(irun,36,itime);
328 Float_t coverOC=AliTPCcalibDB::GetCoverVoltage(irun,54,itime);
329 Float_t skirtA=AliTPCcalibDB::GetSkirtVoltage(irun,0,itime);
330 Float_t skirtC=AliTPCcalibDB::GetSkirtVoltage(irun,18,itime);
331 Float_t ggOffA=AliTPCcalibDB::GetGGoffsetVoltage(irun,0,itime);
332 Float_t ggOffC=AliTPCcalibDB::GetGGoffsetVoltage(irun,18,itime);
333 //drift velocity
334 Float_t dvCorr=-5;
335 if (fitVdrift) dvCorr=fitVdrift->Eval(itime);
336
337 //tempMap->GetLinearFitter(0,0,itime);
338 (*fPcstream)<<"dcs"<<
339 "run="<<irun<<
340 "time="<<itime<<
341 "startTimeGRP="<<startTimeGRP<<
342 "stopTimeGRP="<<stopTimeGRP<<
343 //run type
344 "runType.="<<&runType<<
345 // voltage setting
346 "VIROC.="<<&voltagesIROC<<
347 "VOROC.="<<&voltagesOROC<<
348 "medianVIROC="<<voltIROC<<
349 "medianVOROC="<<voltOROC<<
350 "coverIA=" << coverIA <<
351 "coverIC=" << coverIC <<
352 "coverOA=" << coverOA <<
353 "coverOC=" << coverOC <<
354 "skirtA=" << skirtA <<
355 "skirtC=" << skirtC <<
356 "ggOffA=" << ggOffA <<
357 "ggOffC=" << ggOffC <<
358 //
359 "ptrel0="<<ptrelative0<< // deltaTP/TP - A side
360 "ptrel1="<<ptrelative1<< // deltaTP/TPC - C side
361 "goofie.="<<&vecGoofie<<
362 "goofieE.="<<&vecEntries<<
363 "goofieMean.="<<&vecMean<<
364 "goofieMedian.="<<&vecMedian<<
365 "goofieRMS.="<<&vecRMS<<
366 //
367 "press="<<valuePressure<<
368 "press2="<<valuePressure2<<
369 "temp00.="<<&vecTemp[0]<<
370 "temp10.="<<&vecTemp[1]<<
371 "temp20.="<<&vecTemp[2]<<
372 "temp30.="<<&vecTemp[3]<<
373 "temp40.="<<&vecTemp[4]<<
374 "temp01.="<<&vecTemp[5]<<
375 "temp11.="<<&vecTemp[6]<<
376 "temp21.="<<&vecTemp[7]<<
377 "temp31.="<<&vecTemp[8]<<
378 "temp41.="<<&vecTemp[9]<<
379 "tempSkirtA.="<<&vecSkirtTempA<<
380 "tempSkirtC.="<<&vecSkirtTempC;
381
382 ProcessDrift(irun, itime);
383 ProcessDriftCE(irun,itime);
384 ProcessDriftAll(irun,itime);
5f547d58 385 // ProcessKryptonTime(irun,itime);
12f69174 386 ProcessCTP(irun,itime);
387 ProcessAlign(irun,itime);
388 ProcessGain(irun,itime);
a3b590cf 389 //ProcessDriftCERef();
390 //ProcessPulserRef();
5b1577ef 391 //ProcessCurrent(irun,itime);
12f69174 392
393
394 (*fPcstream)<<"dcs"<<
395 //noise data
396 "meanNoise.="<<&vNoiseMean<<
397 "meanNoiseSen.="<<&vNoiseMeanSenRegions<<
398 "rmsNoise.="<<&vNoiseRMS<<
399 "rmsNoiseSen.="<<&vNoiseRMSSenRegions<<
400 "zeroNoise="<<nonMaskedZero<<
abb20887 401 "nNaN="<<nNaN<<
402 //QA data
403 "occQA.=" << &vQaOcc <<
404 "qQA.=" << &vQaQtot <<
405 "qmaxQA.=" << &vQaQmax <<
12f69174 406 //pulser data
407 "timePulser.=" << &vTimePulser <<
408 "nOffPulser="<<nOffChannels<<
409 //altro data
410 "nMasked="<<nMasked<<
411 //ce data -Jens version
412 "CEfitA.="<<&fitResultsA<<
413 "CEfitC.="<<&fitResultsC<<
414 "nmaskedCE="<<nmaskedCE<<
415 "chi2ACE="<<chi2ACE<<
416 "chi2CCE="<<chi2CCE<<
417 //ce data new - MI version
418 "CEfitAMI.="<<&fitCEResultsA<<
419 "CEfitCMI.="<<&fitCEResultsC<<
420 "chi2CEA="<<chi2CEA<<
421 "chi2CEC="<<chi2CEC<<
422 //
423 //ce graph data
424 "CEgrTEntries.="<<&vecTEntries<<
425 "CEgrTMean.="<<&vecTMean<<
426 "CEgrTRMS.="<<&vecTRMS<<
427 "CEgrTMedian.="<<&vecTMedian<<
428 "CEgrQEntries.="<<&vecQEntries<<
429 "CEgrQMean.="<<&vecQMean<<
430 "CEgrQRMS.="<<&vecQRMS<<
431 "CEgrQMedian.="<<&vecQMedian<<
432 "CEgrDriftA="<<driftTimeA<<
433 "CEgrDriftC="<<driftTimeC<<
434 //calib raw data
435 "nFailL1="<<nFailL1<<
436 // b field
437 "Bz="<< bz <<
438 "L3polarity="<<l3pol<<
439 // production information
440 "nalien="<<nalien<<
441 "nRawAlien="<<nRawAlien<<
442 "nlocal="<<nlocal<<
443 "nRawLocal="<<nRawLocal<<
444 //comparisons with ref data
445 "pedestalDeviations.="<<&pedestalDeviations<<
446 "noiseDeviations.="<<&noiseDeviations<<
447 "pulserQdeviations.="<<&pulserQdeviations<<
448 // "pulserVarQMean="<<varQMean<<
449 "pulserNpadsOutOneTB="<<npadsOutOneTB<<
450 "pulserNpadsOffAdd="<<npadsOffAdd<<
451 "driftCorrCosmAll="<<dvCorr<<
452 "\n";
453 }//end run loop
454}
455
456
457
458
459
460
461void AliTPCcalibSummary::ProcessDrift(Int_t run, Int_t timeStamp){
462 //
463 // dump drift calibration data to the tree
464 //
465 TObjArray *array =fCalibDB->GetTimeVdriftSplineRun(run);
466 TGraphErrors *laserA[3]={0,0,0};
467 TGraphErrors *laserC[3]={0,0,0};
468 TGraphErrors *cosmicAll=0;
469 static Double_t vlaserA[3]={0,0,0};
470 static Double_t vlaserC[3]={0,0,0};
471 static Double_t vcosmicAll=0;
472 static Double_t vdrift1=0;
473 vdrift1=fCalibDB->GetVDriftCorrectionTime(timeStamp,run,0,1);
474
475 if (array){
476 laserA[0]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DELAY_LASER_ALL_A");
477 laserA[1]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DRIFT_LASER_ALL_A");
478 laserA[2]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_A");
479 laserC[0]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DELAY_LASER_ALL_C");
480 laserC[1]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DRIFT_LASER_ALL_C");
481 laserC[2]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_C");
482 cosmicAll =(TGraphErrors*)array->FindObject("TGRAPHERRORS_MEAN_VDRIFT_COSMICS_ALL");
483 }
484 if (laserA[0]) vlaserA[0]= AliTPCcalibDButil::EvalGraphConst(laserA[0],timeStamp);
485 if (laserA[1]) vlaserA[1]= AliTPCcalibDButil::EvalGraphConst(laserA[1],timeStamp);
486 if (laserA[2]) vlaserA[2]= AliTPCcalibDButil::EvalGraphConst(laserA[2],timeStamp);
487 if (laserC[0]) vlaserC[0]= AliTPCcalibDButil::EvalGraphConst(laserC[0],timeStamp);
488 if (laserC[1]) vlaserC[1]= AliTPCcalibDButil::EvalGraphConst(laserC[1],timeStamp);
489 if (laserC[2]) vlaserC[2]= AliTPCcalibDButil::EvalGraphConst(laserC[2],timeStamp);
490 if (cosmicAll) vcosmicAll= AliTPCcalibDButil::EvalGraphConst(cosmicAll,timeStamp);
491 (*fPcstream)<<"dcs"<<
492 "vlaserA0="<<vlaserA[0]<<
493 "vlaserA1="<<vlaserA[1]<<
494 "vlaserA2="<<vlaserA[2]<<
495 "vlaserC0="<<vlaserC[0]<<
496 "vlaserC1="<<vlaserC[1]<<
497 "vlaserC2="<<vlaserC[2]<<
498 "vcosmicAll="<<vcosmicAll<<
499 "vdrift1="<<vdrift1;
500
501 //
502 // define distance to measurement
503 //
504 static Double_t dlaserA=0;
505 static Double_t dlaserC=0;
506 static Double_t dcosmic=0;
507 static Double_t slaserA=0;
508 static Double_t slaserC=0;
509 static Double_t scosmic=0;
510 static Double_t vclaserA[3]={0,0,0};
511 static Double_t vclaserC[3]={0,0,0};
512 static Double_t vccosmicAll=0;
513 for (Int_t i=0;i<3;i++){
514 if (laserA[i]) AliTPCcalibDButil::GetNearest(laserA[i],timeStamp,dlaserA,vclaserA[i]);
515 if (laserC[i]) AliTPCcalibDButil::GetNearest(laserC[i],timeStamp,dlaserC,vclaserC[i]);
516 }
517 if (cosmicAll) AliTPCcalibDButil::GetNearest(cosmicAll,timeStamp,dcosmic,vccosmicAll);
518 (*fPcstream)<<"dcs"<<
519 "vclaserA0="<<vclaserA[0]<<
520 "vclaserA1="<<vclaserA[1]<<
521 "vclaserA2="<<vclaserA[2]<<
522 "vclaserC0="<<vclaserC[0]<<
523 "vclaserC1="<<vclaserC[1]<<
524 "vclaserC2="<<vclaserC[2]<<
525 "vccosmicAll="<<vccosmicAll<<
526 "dlaserA="<<dlaserA<<
527 "dlaserC="<<dlaserC<<
528 "dcosmic="<<dcosmic<<
529 "slaserA="<<slaserA<<
530 "slaserC="<<slaserC<<
531 "scosmic="<<scosmic;
99369b07 532
533 static TGeoMatrix * matrixAlign=0;
534 static Double_t twistX=0;
535 static Double_t twistY=0;
536 if (matrixAlign==0){
537 AliTPCComposedCorrection * corr = (AliTPCComposedCorrection *)array->FindObject("FitCorrectionTime");
538 if (!corr) {
539 matrixAlign=new TGeoHMatrix;
540
541 }
542 if (corr){
543 AliTPCCalibGlobalMisalignment *align = (AliTPCCalibGlobalMisalignment*)corr->GetCorrections()->FindObject("FitAlignTime");
544 AliTPCExBTwist *twist = (AliTPCExBTwist*)corr->GetCorrections()->FindObject("FitExBTwistTime");
545 if (twist){
546 twistX=twist->GetXTwist();
547 twistY=twist->GetYTwist();
548 //delete twist;
549 }
550 if (align && align->GetAlignGlobal()){
551 matrixAlign = (TGeoMatrix*) (align->GetAlignGlobal()->Clone());
552 //delete align;
553 }
554 }
555 }
556 (*fPcstream)<<"dcs"<<
557 "alignTime.="<<matrixAlign<<
558 "twistX="<<twistX<<
559 "twistY="<<twistY;
12f69174 560}
561
562void AliTPCcalibSummary::ProcessDriftCE(Int_t run,Int_t timeStamp){
563 //
564 // dump drift calibration data CE
565 //
566 TObjArray *arrT=fCalibDB->GetCErocTtime();
567 AliTPCParam *param=fCalibDB->GetParameters();
568 static TVectorD tdriftCE(74);
569 static TVectorD tndriftCE(74);
570 static TVectorD vdriftCE(74);
571 static TVectorD tcdriftCE(74);
572 static TVectorD tddriftCE(74);
573 static Double_t ltime0A;
574 static Double_t ltime0C;
575 //
576 //
577 //
578 ltime0A = fDButil->GetLaserTime0(run,timeStamp,36000,0);
579 ltime0C = fDButil->GetLaserTime0(run,timeStamp,36000,1);
580 //
581 for (Int_t i=0; i<arrT->GetEntries();i++){
582 tdriftCE[i]=0;
583 vdriftCE[i]=0;
584 TGraph *graph = (TGraph*)arrT->At(i);
585 if (!graph) continue;
586 tdriftCE[i]=AliTPCcalibDButil::EvalGraphConst(graph,timeStamp);
587 Double_t deltaT,gry;
588 AliTPCcalibDButil::GetNearest(graph,timeStamp,deltaT,gry);
589 tndriftCE[i]=graph->GetN();
590 tcdriftCE[i]=gry;
591 tddriftCE[i]=deltaT;
592 if (i%36<18){
593 vdriftCE[i] =(param->GetZLength(i)/(tdriftCE[i]*param->GetTSample()*(1.-ltime0A)-param->GetL1Delay()))/param->GetDriftV();
594 }else{
595 vdriftCE[i] =(param->GetZLength(i)/(tdriftCE[i]*param->GetTSample()*(1.-ltime0A)-param->GetL1Delay()))/param->GetDriftV();
596 }
597 }
598 // export values
599 (*fPcstream)<<"dcs"<<
600 "tdriftCE.="<<&tdriftCE<< // arrival time
601 "vdriftCE.="<<&vdriftCE<< // derived drift velocity per chamber
602 "tndriftCE.="<<&tndriftCE<< // number of points (chambers)
603 "tcdriftCE.="<<&tcdriftCE<< // constant evaluation - nearest point used
604 "tddriftCE.="<<&tddriftCE<< // distance to closest measuement
605 "ltime0A="<<ltime0A<< // laser offset expected in reconstruction
606 "ltime0C="<<ltime0C; // laser offset expected in reconstruction
607 }
608
609
610void AliTPCcalibSummary::ProcessDriftAll(Int_t run,Int_t timeStamp){
611 //
612 // dump drift calibration data all calibrations form DB util
613 // test of utils
614 static Double_t vdriftCEA=0, vdriftCEC=0, vdriftCEM=0;
615 static Double_t vdriftLTA=0, vdriftLTC=0, vdriftLTM=0;
78f17711 616 static Double_t vdriftLTAon=0, vdriftLTCon=0, vdriftLTMon=0;
12f69174 617 static Double_t vdriftITS=0;
618 static Double_t vdriftP=0;
78f17711 619 static Double_t dcea=0, dcec=0, dcem=0, dla=0,dlc=0,dlm=0, dlaon=0,dlcon=0,dlmon=0, dp=0;
12f69174 620 static Double_t dits=0;
621 static Double_t ltime0A;
622 static Double_t ltime0C;
623 static Double_t ctime0;
624 static Double_t vdrift1=0;
625 vdrift1= fCalibDB->GetVDriftCorrectionTime(timeStamp,run,0,1);
626 vdriftP = fDButil->GetVDriftTPC(dp, run, timeStamp, 86400, 3600,0);
627 ctime0 = AliTPCcalibDButil::GetTriggerOffsetTPC(run,timeStamp, 36000, 3600,0);
628 //
629 vdriftCEA= fDButil->GetVDriftTPCCE(dcea,run,timeStamp,36000,0);
630 vdriftCEC= fDButil->GetVDriftTPCCE(dcec,run,timeStamp,36000,1);
631 vdriftCEM= fDButil->GetVDriftTPCCE(dcem,run,timeStamp,36000,2);
632 //
633 vdriftLTA= fDButil->GetVDriftTPCLaserTracks(dla,run,timeStamp,36000,0);
634 vdriftLTC= fDButil->GetVDriftTPCLaserTracks(dlc,run,timeStamp,36000,1);
635 vdriftLTM= fDButil->GetVDriftTPCLaserTracks(dlm,run,timeStamp,36000,2);
636 //
78f17711 637 vdriftLTAon= fDButil->GetVDriftTPCLaserTracksOnline(dlaon,run,timeStamp,36000,0);
638 vdriftLTCon= fDButil->GetVDriftTPCLaserTracksOnline(dlcon,run,timeStamp,36000,1);
639 vdriftLTMon= fDButil->GetVDriftTPCLaserTracksOnline(dlmon,run,timeStamp,36000,2);
640 //
12f69174 641 vdriftITS= fDButil->GetVDriftTPCITS(dits, run,timeStamp);
642 //
643 ltime0A = fDButil->GetLaserTime0(run,timeStamp,36000,0);
644 ltime0C = fDButil->GetLaserTime0(run,timeStamp,36000,1);
645
646 (*fPcstream)<<"dcs"<<
647 //
648 "vdriftCEA="<<vdriftCEA<< // drift velocity CE
649 "vdriftCEC="<<vdriftCEC<<
650 "vdriftCEM="<<vdriftCEM<<
651 "dcea="<<dcea<<
652 "dcec="<<dcec<<
653 "dcem="<<dcem<<
654 "vdriftLTA="<<vdriftLTA<< // drift velocity laser tracks
655 "vdriftLTC="<<vdriftLTC<<
656 "vdriftLTM="<<vdriftLTM<<
657 "dla="<<dla<<
658 "dlc="<<dlc<<
659 "dlm="<<dlm<<
78f17711 660 "vdriftLTAon="<<vdriftLTAon<< // drift velocity laser tracks and CE from online algorithm
661 "vdriftLTCon="<<vdriftLTCon<<
662 "vdriftLTMon="<<vdriftLTMon<<
663 "dlaOn="<<dlaon<<
664 "dlcOn="<<dlcon<<
665 "dlmOn="<<dlmon<<
12f69174 666 //
667 //
668 "vdriftITS="<<vdriftITS<<
669 "dits="<<dits<<
670 "ctime0="<<ctime0<<
671 "vdriftP="<<vdriftP<< // drift velocity comsic
672 "dp="<<dp<<
673 "vdrift1="<<vdrift1; // combined drift velocity
674
675}
676
677
678
679void AliTPCcalibSummary::ProcessKryptonTime(Int_t run, Int_t timeStamp){
680 //
681 // Dumping krypton calibration results
682 //
683 static TObjArray * krArray=0;
684 if (!krArray) {
685 AliCDBEntry* entry = AliCDBManager::Instance()->Get("TPC/Calib/TimeGainKrypton", run);
686 if (entry){
687 krArray = (TObjArray*)entry->GetObject();
688 }
689 }
690 static TVectorD krMean(74);
691 static TVectorD krErr(74);
692 static TVectorD krDist(74);
693 TGraphErrors *gr=0;
694 Double_t deltaT=0,gry=0;
695 if (krArray){
696 for (Int_t isec=0; isec<72; isec++){
697 krMean[isec]=0;
698 krDist[isec]=0;
699 krErr[isec]=0;
700 gr=(TGraphErrors*)krArray->At(isec);
701 if (gr) {
5647625c 702 krMean[isec]=AliTPCcalibDButil::EvalGraphConst(gr,timeStamp);
12f69174 703 AliTPCcalibDButil::GetNearest(gr, timeStamp,deltaT,gry);
704 krDist[isec]=deltaT;
705 }
706 if (72+isec<krArray->GetEntries()) {
707 gr=(TGraphErrors*)krArray->At(72+isec);
5647625c 708 if (gr) krErr[isec]=AliTPCcalibDButil::EvalGraphConst(gr,timeStamp);
12f69174 709 }
710 }
711 krMean[72]= TMath::Median(36,krMean.GetMatrixArray());
712 krMean[73]= TMath::Median(36,&(krMean.GetMatrixArray()[36]));
713 krErr[72]= TMath::Median(36,krErr.GetMatrixArray());
714 krErr[73]= TMath::Median(36,&(krErr.GetMatrixArray()[36]));
715 }
716 (*fPcstream)<<"dcs"<<
717 "krMean.="<<&krMean<<
718 "krErr.="<<&krErr<<
719 "krDist.="<<&krDist;
720}
721
722void AliTPCcalibSummary::ProcessCTP(Int_t irun, Int_t timeStamp){
723 //
724 //
725 //
726 static TClonesArray *pcarray = new TClonesArray("AliCTPInputTimeParams",1);
727 static AliCTPTimeParams *ctpParams =0;
728 ctpParams = fCalibDB->GetCTPTimeParams(); //
729 const TObjArray *arr = ctpParams->GetInputTimeParams();
730 pcarray->ExpandCreateFast(TMath::Max(arr->GetEntries(),1));
731 for (Int_t i=0; i<arr->GetEntries(); i++){
732 new ((*pcarray)[i]) AliCTPInputTimeParams(*((AliCTPInputTimeParams*)arr->At(i)));
733 }
734 (*fPcstream)<<"ctp"<<
735 "run="<<irun<<
736 "time="<<timeStamp<<
737 "ctpP.="<<ctpParams<<
738 "ctpArr="<<pcarray<<
739 "\n";
740 (*fPcstream)<<"dcs"<<
741 "ctpP.="<<ctpParams<<
742 "ctpArr="<<pcarray;
743}
744
745void AliTPCcalibSummary::ProcessGain(Int_t irun, Int_t timeStamp){
746 //
747 // Dump gain related information to the tree
748 //
749 static Float_t gainCosmic = 0;
750 static Float_t gainMIP = 0;
5647625c 751 static Float_t attachMIP = 0;
752 static Double_t dMIP=0;
753 Double_t dummy=0;
506ed125 754 static TVectorD vGainGraphIROC(36);
755 static TVectorD vGainGraphOROCmed(36);
756 static TVectorD vGainGraphOROClong(36);
757 static TVectorD vGainGraphIROCErr(36);
758 static TVectorD vGainGraphOROCmedErr(36);
759 static TVectorD vGainGraphOROClongErr(36);
760
761 TGraphErrors grDummy;
12f69174 762 TObjArray * gainSplines = fCalibDB->GetTimeGainSplinesRun(irun);
763 if (gainSplines) {
764 TGraphErrors * graphMIP = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_GAIN_BEAM_ALL");
765 TGraphErrors * graphCosmic = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_GAIN_COSMIC_ALL");
5647625c 766 TGraphErrors * graphAttach = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_ATTACHMENT_BEAM_ALL");
79d561df 767 //
506ed125 768 TGraphErrors * graphGainIROC = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_CHAMBERGAIN_SHORT_BEAM_ALL");
79d561df 769 TGraphErrors * graphGainOROCMedium = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_CHAMBERGAIN_MEDIUM_BEAM_ALL");
506ed125 770 TGraphErrors * graphGainOROCLong = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_CHAMBERGAIN_LONG_BEAM_ALL");
771
772 if (graphGainIROC && graphGainOROCMedium && graphGainOROCLong) {
773 Double_t x=0,y=0;
774 for (Int_t i=0; i<36; ++i){
775 graphGainIROC->GetPoint(i,x,y);
776 vGainGraphIROC(i)=y;
777 graphGainOROCMedium->GetPoint(i,x,y);
778 vGainGraphOROCmed(i)=y;
779 graphGainOROCLong->GetPoint(i,x,y);
780 vGainGraphOROClong(i)=y;
781 //errors
782 vGainGraphIROCErr(i) = graphGainIROC->GetEY()[i];
783 vGainGraphOROCmedErr(i) = graphGainOROCMedium->GetEY()[i];
784 vGainGraphOROClongErr(i) = graphGainOROCLong->GetEY()[i];
785 }
786 }
787
12f69174 788 if (graphMIP) gainMIP = AliTPCcalibDButil::EvalGraphConst(graphMIP,timeStamp);
789 if (graphCosmic) gainCosmic = AliTPCcalibDButil::EvalGraphConst(graphCosmic,timeStamp);
5647625c 790 if (graphAttach) attachMIP = AliTPCcalibDButil::EvalGraphConst(graphAttach,timeStamp);
506ed125 791 if (graphMIP) AliTPCcalibDButil::GetNearest(graphMIP, timeStamp, dMIP,dummy);
12f69174 792 }
506ed125 793
12f69174 794 // time dependence of gain
795 (*fPcstream)<<"dcs"<<
506ed125 796 "rocGainIROC.=" << &vGainGraphIROC <<
797 "rocGainOROCMedium.=" << &vGainGraphOROCmed <<
798 "rocGainOROCLong.=" << &vGainGraphOROClong <<
799 "rocGainErrIROC.=" << &vGainGraphIROCErr <<
800 "rocGainErrOROCMedium.=" << &vGainGraphOROCmedErr <<
801 "rocGainErrOROCLong.=" << &vGainGraphOROClongErr <<
802 "gainMIP=" << gainMIP <<
803 "attachMIP=" << attachMIP <<
804 "dMIP=" << dMIP <<
805 "gainCosmic=" << gainCosmic;
12f69174 806}
807
808
809void AliTPCcalibSummary::ProcessAlign(Int_t run, Int_t timeStamp){
810 //
811 // Proccess alignment
812 //
813 TString grnames[12]={"ALIGN_ITS", "ALIGN_ITSP", "ALIGN_ITSM", "ALIGN_ITSB",
814 "ALIGN_TRD", "ALIGN_TRDP", "ALIGN_TRDM","ALIGN_TRDB",
815 "ALIGN_TOF", "ALIGN_TOFP", "ALIGN_TOFM","ALIGN_TOFB"};
816 TString grpar[9]={"DELTAPSI", "DELTATHETA", "DELTAPHI",
817 "DELTAX", "DELTAY", "DELTAZ",
818 "DRIFTVD", "T0", "VDGY"};
819 static Double_t values[12*9];
820 static Double_t errs[12*9];
821
822 TObjArray *array =fCalibDB->GetTimeVdriftSplineRun(run);
823 TGraphErrors *gr=0;
824 for (Int_t idet=0; idet<12; idet++){
825 for (Int_t ipar=0; ipar<9; ipar++){
826 TString grName=grnames[idet];
827 grName+="_TPC_";
828 grName+=grpar[ipar];
829 if (array){
830 gr = (TGraphErrors*)array->FindObject(grName.Data());
831 }
832 values[9*idet+ipar]=0;
833 errs[9*idet+ipar]=0;
5647625c 834 if (gr) values[9*idet+ipar]=AliTPCcalibDButil::EvalGraphConst(gr,timeStamp);
12f69174 835 (*fPcstream)<<"dcs"<<
836 Form("%s=",grName.Data())<<values[9*idet+ipar];
837 (*fPcstream)<<"align"<<
838 Form("%s=",grName.Data())<<values[9*idet+ipar];
839 }
840 }
841 (*fPcstream)<<"align"<<
842 "time="<<timeStamp<<
843 "run="<<run<<
844 "\n";
845}
846
847
af6a50bb 848void AliTPCcalibSummary::ProcessDriftCERef(){
849 //
850 // Get fit of residuals if CE in respect with reference
851 // data
852 //
853 static TVectorD sec(72);
854 static TVectorD vec0(72);
855 static TVectorD vecLy(72);
856 static TVectorD vecLx(72);
857 static TVectorD vecChi2(72);
858 static TVectorD vecN(72);
859 //
860 static TVectorD vecA0(72);
861 static TVectorD vecALy(72);
862 static TVectorD vecALx(72);
863 static TVectorD vecAChi2(72);
864 //
5647625c 865 static TVectorD vecASide(4);
866 static TVectorD vecCSide(4);
af6a50bb 867 static Bool_t isCalc=kFALSE;
868
869 TFile f("calPads.root");
870 TFile fref("calPadsRef.root");
871 TTree * tree = (TTree*)f.Get("calPads");
872 TTree * treeRef = (TTree*)fref.Get("calPads");
873 tree->AddFriend(treeRef,"R");
874 tree->SetAlias("inCE","((CEQmean.fElements>35)&&abs(CETmean.fElements)<1.5&&abs(CETrms.fElements/1.2-1)<0.2)"); // outlyerTrms
875 tree->SetAlias("inCER","((R.CEQmean.fElements>35)&&abs(R.CETmean.fElements)<1.5&&abs(R.CETrms.fElements/1.2-1)<0.2)"); // outlyerTrms
876 //
877 if (!isCalc){
878 // make fits only once
879 TStatToolkit toolkit;
880 Double_t chi2=0;
881 Int_t npoints=0;
882 TVectorD param;
883 TMatrixD covar;
884 tree->SetAlias("dt","CETmean.fElements-R.CETmean.fElements");
885 TCut cutAll ="inCE&&inCER&&abs(CETmean.fElements-R.CETmean.fElements)<0.5";
886 TString fstringG=""; // global part
887 fstringG+="ly.fElements++";
888 fstringG+="(lx.fElements-134.)++";
889 for (Int_t isec=0; isec<72; isec++){
5647625c 890 TStatToolkit::FitPlane(tree,"0.264*dt", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
af6a50bb 891 if (npoints<3) continue;
892 printf("Sector=%d\n",isec);
893 vec0[isec]=param[0];
894 vecLy[isec]=param[1];
895 vecLx[isec]=param[2];
896 sec[isec]=isec;
897 vecN[isec]=npoints;
5647625c 898 vecChi2[isec]=TMath::Sqrt(chi2/npoints);
af6a50bb 899
5647625c 900 TStatToolkit::FitPlane(tree,"0.264*CETmean.fElements", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
af6a50bb 901 if (npoints<3) continue;
902 printf("Sector=%d\n",isec);
903 vecA0[isec]=param[0];
904 vecALy[isec]=param[1];
905 vecALx[isec]=param[2];
906 vecAChi2[isec]=TMath::Sqrt(chi2/npoints);
af6a50bb 907 }
908 isCalc=kTRUE;
5647625c 909 //
910 TString fstringRef=""; // global fit
911 fstringRef+="gx.fElements++";
912 fstringRef+="gy.fElements++";
913 fstringRef+="lx.fElements++";
914 TStatToolkit::FitPlane(tree,"0.264*dt", fstringG.Data(),"(sector%36)<18"+cutAll, chi2,npoints,vecASide,covar,-1,0, 10000000, kFALSE);
915 TStatToolkit::FitPlane(tree,"0.264*dt", fstringG.Data(),"(sector%36)>=18"+cutAll, chi2,npoints,vecCSide,covar,-1,0, 10000000, kFALSE);
916
af6a50bb 917 }
918 (*fPcstream)<<"dcs"<< // CE information
919 "CETSector.="<<&sec<< // sector numbers
5647625c 920 "CETRefA.="<<&vecASide<< // diff to reference A side
921 "CETRefC.="<<&vecCSide<< // diff to reference C side
922 // // fit in respect to reference data
af6a50bb 923 "CETRef0.="<<&vec0<< // offset change
924 "CETRefY.="<<&vecLy<< // slope y change - rad
925 "CETRefX.="<<&vecLx<< // slope x change - rad
926 "CETRefChi2.="<<&vecChi2<< // chi2 (rms in cm)
927 "CETRefN.="<<&vecN<< //number of accepted points
928 // // fit in respect per mean per side
929 "CET0.="<<&vecA0<< // offset change
930 "CETY.="<<&vecALy<< // slope y change - rad
931 "CETX.="<<&vecALx<< // slope x change - rad
932 "CETChi2.="<<&vecAChi2; // chi2 (rms in cm)
933}
12f69174 934
af6a50bb 935void AliTPCcalibSummary::ProcessPulserRef(){
936 //
937 // Get fit of residuals if Pulser in respect with reference
938 // data
939 //
940 static TVectorD sec(72);
941 static TVectorD vec0(72);
942 static TVectorD vecLy(72);
943 static TVectorD vecLx(72);
944 static TVectorD vecChi2(72);
945 static TVectorD vecN(72);
946 //
947 static TVectorD vecA0(72);
948 static TVectorD vecALy(72);
949 static TVectorD vecALx(72);
950 static TVectorD vecAChi2(72);
951 static Bool_t isCalc=kFALSE;
952
953 TFile f("calPads.root");
954 TFile fref("calPadsRef.root");
955 TTree * tree = (TTree*)f.Get("calPads");
956 TTree * treeRef = (TTree*)fref.Get("calPads");
957 tree->AddFriend(treeRef,"R");
958
959 tree->SetAlias("inPulser","(abs(PulserTmean.fElements-PulserTmean_Median)<1.5&&abs(PulserTrms.fElements-PulserTrms_Median)<0.2)"); // outlyerTrms
960 tree->SetAlias("inPulserR","(abs(R.PulserTmean.fElements-R.PulserTmean_Median)<1.5&&abs(R.PulserTrms.fElements-R.PulserTrms_Median)<0.2)"); // outlyerTrms
961 //
962 if (!isCalc){
963 // make fits only once
964 TStatToolkit toolkit;
965 Double_t chi2=0;
966 Int_t npoints=0;
967 TVectorD param;
968 TMatrixD covar;
969 tree->SetAlias("dt","PulserTmean.fElements-R.PulserTmean.fElements");
970 TCut cutAll ="inPulser&&inPulserR";
971 TString fstringG=""; // global part
972 fstringG+="ly.fElements++";
973 fstringG+="(lx.fElements-134.)++";
974 for (Int_t isec=0; isec<72; isec++){
975 TStatToolkit::FitPlane(tree,"dt", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
976 if (npoints<3) continue;
977 printf("Setor=%d\n",isec);
978 vec0[isec]=param[0];
979 vecLy[isec]=param[1];
980 vecLx[isec]=param[2];
981 sec[isec]=isec;
982 vecN[isec]=npoints;
983
984 TStatToolkit::FitPlane(tree,"PulserTmean.fElements", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
985 if (npoints<3) continue;
986 printf("Setor=%d\n",isec);
987 vecA0[isec]=param[0];
988 vecALy[isec]=param[1];
989 vecALx[isec]=param[2];
990 vecAChi2[isec]=TMath::Sqrt(chi2/npoints);
991 }
5647625c 992
af6a50bb 993 isCalc=kTRUE;
994 }
995 (*fPcstream)<<"dcs"<< // Pulser information
996 "PulserTSector.="<<&sec<< // sector numbers
997 // // fit in respect to reference
998 "PulserTRef0.="<<&vec0<< // offset change
999 "PulserTRefY.="<<&vecLy<< // slope y change - rad
1000 "PulserTRefX.="<<&vecLx<< // slope x change - rad
1001 "PulserTRefChi2.="<<&vecChi2<< // chi2 (rms in cm)
1002 "PulserTRefN.="<<&vecN<< //number of accepted points
1003 // // fit in respect per mean per side
1004 "PulserT0.="<<&vecA0<< // offset change
1005 "PulserTY.="<<&vecALy<< // slope y change - rad
1006 "PulserTX.="<<&vecALx<< // slope x change - rad
1007 "PulserTChi2.="<<&vecAChi2; // chi2 (rms in cm)
1008}
1009
a3b590cf 1010void AliTPCcalibSummary::ProcessCurrent(Int_t irun, Int_t itime){
1011 //
1012 // Dump current
1013 //
1014 //variables to export
1015 //
1016 static TObjArray *currentArray=new TObjArray(72); // current graphs
1017 static TObjArray *currentArray2=new TObjArray(72); // current graphs to export
1018 //
1019 static TVectorD currentIROC(36); // current snapshots
1020 static TVectorD currentOROC(36);
1021 static TVectorF sector(72); //
1022 static Double_t medcurIROC = 0;
1023 static Double_t medcurOROC = 0;
1024 //
1025 static TVectorF minROC(72); // current mean +-5 minutes
1026 static TVectorF maxROC(72);
1027 static TVectorF meanROC(72);
1028 static TVectorF medianROC(72);
1029 static Double_t meanIIROC=0;
1030 static Double_t meanIOROC=0;
1031 static Double_t medianIIROC=0;
1032 static Double_t medianIOROC=0;
1033 //
1034 AliDCSSensorArray* voltageArray = AliTPCcalibDB::Instance()->GetVoltageSensors(irun);
1035 //
1036 for(Int_t j=1; j<36; j++) currentIROC[j-1] = fCalibDB->GetChamberHighVoltage(irun, j,itime,-1,kTRUE);
1037 for(Int_t j=36; j<72; j++) currentOROC[j-36] = fCalibDB->GetChamberHighVoltage(irun, j,itime,-1,kTRUE);
1038 medcurIROC = TMath::Median(36, currentIROC.GetMatrixArray());
1039 medcurOROC = TMath::Median(36, currentOROC.GetMatrixArray());
1040
1041
1042 if (currentArray->At(0)==0){
1043 for (Int_t isec=0; isec<72; isec++){
1044 TString sensorName="";
1045 const char* sideName=(isec%36<18) ? "A":"C";
1046 if (isec<36){
1047 //IROC
1048 sensorName=Form("TPC_ANODE_I_%s%02d_IMEAS",sideName,isec%18);
1049 }else{
1050 //OROC
1051 sensorName=Form("TPC_ANODE_O_%s%02d_0_IMEAS",sideName,isec%18);
1052 }
1053
1054 AliDCSSensor *sensor = 0;
1055 if (voltageArray) sensor= voltageArray->GetSensor(sensorName);
1056 TGraph *gr=0;
1057 if (!sensor) gr=new TGraph(1);
1058 else{
1059 if (!sensor->GetGraph()) gr=new TGraph(1);
1060 else{
1061 gr=sensor->GetGraph();
1062 Double_t startTime=sensor->GetStartTime();
1063 Double_t * time = new Double_t[gr->GetN()];
1064 for (Int_t ip=0; ip<gr->GetN(); ip++){ time[ip]= (gr->GetX()[ip]*3600.)+startTime;}
1065 gr=new TGraph(gr->GetN(), time, gr->GetY());
1066 delete [] time;
1067 }
1068 }
1069 gr->Sort();
1070 currentArray->AddAt(gr, isec);
1071 currentArray->AddAt(gr->Clone(), isec);
1072 }
1073 }
1074
1075
1076 for (Int_t isec=0; isec<72; isec++){
1077 sector[isec]=isec;
1078 TGraph * gr = (TGraph*)currentArray->At(isec);
1079 TGraph * graph2 = (TGraph*)currentArray2->At(isec);
1080 Int_t firstBin= TMath::BinarySearch(gr->GetN(), gr->GetX(), itime-300.)-2;
1081 Int_t lastBin= TMath::BinarySearch(gr->GetN(), gr->GetX(), itime+300.)+2;
1082 if (firstBin<0) firstBin=0;
1083 if (lastBin>=gr->GetN()) lastBin=gr->GetN()-1;
1084 //
1085 if (firstBin<lastBin){
1086 //
1087 minROC[isec]=TMath::MinElement(lastBin-firstBin, &(gr->GetY()[firstBin]));
1088 maxROC[isec]=TMath::MaxElement(lastBin-firstBin, &(gr->GetY()[firstBin]));
1089 meanROC[isec]=TMath::Mean(lastBin-firstBin, &(gr->GetY()[firstBin]));
1090 medianROC[isec]=TMath::Median(lastBin-firstBin, &(gr->GetY()[firstBin]));
1091 graph2 = new TGraph(lastBin-firstBin, &(gr->GetX()[firstBin]), &(gr->GetY()[firstBin]));
1092 delete currentArray2->At(isec);
1093 currentArray2->AddAt(graph2,isec);
1094 }
1095 (*fPcstream)<<"dcs"<< // current information
1096 Form("current%d.=",isec)<<graph2;
1097 }
1098 meanIIROC=TMath::Mean(36, &(meanROC.GetMatrixArray()[0]));
1099 meanIOROC=TMath::Mean(36, &(meanROC.GetMatrixArray()[36]));
1100 medianIIROC=TMath::Median(36, &(meanROC.GetMatrixArray()[0]));
1101 medianIOROC=TMath::Median(36, &(meanROC.GetMatrixArray()[36]));
1102 //
1103 (*fPcstream)<<"dcs"<< // current information
1104 "isec.="<<&sector<< //sector number
1105 "IIROC.="<<&currentIROC<< // current sample at given moment
1106 "IOROC.="<<&currentOROC<< // current sample at given moment
1107 "medianIIROC="<<medcurIROC<< // median at given moment
1108 "medianIOROC="<<medcurOROC<< // median at given moment
1109 //
1110 "minIROC.="<<&minROC<< // minimum in +-5 min
1111 "maxIROC.="<<&maxROC<< // maximum in +-5 min
1112 "meanIROC.="<<&meanROC<< // mean in +-5 min
1113 "medianIROC.="<<&medianROC<< // median in +-5 min
1114 "meanIIROC5="<<meanIIROC<< // mean current in IROC +-5 minutes
1115 "meanIOROC5="<<meanIOROC<< // mean current in OROC
1116 "medianIIROC5="<<medianIIROC<< // median current in IROC
1117 "medianIOROC5="<<medianIOROC; // medianan current in OROC
1118
1119
1120 (*fPcstream)<<"current"<< // current information
1121 "time="<<itime<<
1122 "isec.="<<&sector<< //sector number
1123 "IIROC.="<<&currentIROC<< // current sample at given moment
1124 "IOROC.="<<&currentOROC<< // current sample at given moment
1125 "medianIIROC="<<medcurIROC<< // median at given moment
1126 "medianIOROC="<<medcurOROC<< // median at given moment
1127 //
1128 "minIROC.="<<&minROC<< // minimum in +-5 min
1129 "maxIROC.="<<&maxROC<< // maximum in +-5 min
1130 "meanIROC.="<<&meanROC<< // mean in +-5 min
1131 "medianIROC.="<<&medianROC<< // median in +-5 min
1132 "meanIIROC5="<<meanIIROC<< // mean current in IROC +-5 minutes
1133 "meanIOROC5="<<meanIOROC<< // mean current in OROC
1134 "medianIIROC5="<<medianIIROC<< // median current in IROC
1135 "medianIOROC5="<<medianIOROC<< // medianan current in OROC
1136 "\n";
1137
1138}
af6a50bb 1139
1140
1141
1142
1143// TCanvas * DrawCEDiff(TTree * tree){
1144
1145// TCanvas *canvasIO = new TCanvas("canvasCEIO","canvasCEIO");
1146// canvasIO->Divide(6,6);
1147// for (Int_t isec=0; isec<36; isec++){
1148// canvasIO->cd(isec+1);
1149// dcs->Draw(Form("CET0.fElements[%d]-CET0.fElements[%d]",isec+36,isec),Form("abs(CETRef0.fElements[%d])<0.3",isec),"");
1150// printf("%d\t%f\t%f\n",isec,dcs->GetHistogram()->GetMean(),dcs->GetHistogram()->GetRMS());
1151// }
1152
1153// }