22 #include <TObjArray.h>
25 #include <TDirectory.h>
27 #include <TGraphErrors.h>
28 #include <AliCDBStorage.h>
29 #include <AliDCSSensorArray.h>
31 #include <AliDCSSensor.h>
33 #include <AliCDBEntry.h>
34 #include <AliCDBManager.h>
36 #include <AliSplineFit.h>
49 #include "AliMathBase.h"
50 #include "AliRelAlignerKalman.h"
68 fPulserOutlier(new
AliTPCCalPad("PulserOutliers","PulserOutliers")),
80 fRefPedestalMasked(0x0),
84 fRefPulserOutlier(new
AliTPCCalPad("RefPulserOutliers","RefPulserOutliers")),
85 fRefPulserMasked(0x0),
92 fRefALTROAcqStart(0x0),
93 fRefALTROAcqStop(0x0),
101 fCETmaxLimitAbs(1.5),
102 fPulTmaxLimitAbs(1.5),
165 Int_t &noutliersCE, Double_t &
chi2A, Double_t &chi2C,
AliTPCCalPad *
const outCE)
175 fitString.ReplaceAll(
"++",
"#");
176 Int_t ndim=fitString.CountChar(
'#')+2;
177 fitResultsA.ResizeTo(ndim);
178 fitResultsC.ResizeTo(ndim);
187 if (outCE) out=outCE;
205 for (UInt_t irow=0;irow<nrows;++irow){
206 UInt_t npads=rocData->
GetNPads(irow);
207 for (UInt_t ipad=0;ipad<npads;++ipad){
210 if (rocMasked && rocMasked->
GetValue(irow,ipad)) {
216 if (irow<2) rocOut->
SetValue(irow,ipad,1);
218 if (irow>nrows-3) rocOut->
SetValue(irow,ipad,1);
221 if (ipad==0||ipad==npads-1) rocOut->
SetValue(irow,ipad,1);
222 Float_t valTmean=rocData->
GetValue(irow,ipad);
224 if ( !(TMath::Abs(valTmean)>
kAlmost0) ) {
238 Float_t chi2Af,chi2Cf;
242 if (!outCE)
delete out;
246 TVectorD &vecQEntries, TVectorD &vecQMean, TVectorD &vecQRMS, TVectorD &vecQMedian,
247 Float_t &driftTimeA, Float_t &driftTimeC )
252 vecTEntries.ResizeTo(72);
253 vecTMean.ResizeTo(72);
254 vecTRMS.ResizeTo(72);
255 vecTMedian.ResizeTo(72);
256 vecQEntries.ResizeTo(72);
257 vecQMean.ResizeTo(72);
258 vecQRMS.ResizeTo(72);
259 vecQMedian.ResizeTo(72);
273 for (Int_t isec=0;isec<74;++isec){
274 TGraph *
gr=(TGraph*)arrT->At(isec);
278 values.ResizeTo(npoints);
281 for (Int_t ipoint=4; ipoint<
npoints; ipoint++){
282 if (gr->GetY()[ipoint]>500 && gr->GetY()[ipoint]<1020 ){
283 values[nused]=gr->GetY()[ipoint];
288 if (isec<72) vecTEntries[isec]= nused;
291 vecTMedian[isec] = TMath::Median(nused,values.GetMatrixArray());
292 vecTMean[isec] = TMath::Mean(nused,values.GetMatrixArray());
293 vecTRMS[isec] = TMath::RMS(nused,values.GetMatrixArray());
294 }
else if (isec==72){
295 driftTimeA=TMath::Median(nused,values.GetMatrixArray());
296 }
else if (isec==73){
297 driftTimeC=TMath::Median(nused,values.GetMatrixArray());
303 for (Int_t isec=0;isec<arrQ->GetEntriesFast();++isec){
304 TGraph *
gr=(TGraph*)arrQ->At(isec);
308 values.ResizeTo(npoints);
310 for (Int_t ipoint=0; ipoint<
npoints; ipoint++){
311 if (gr->GetY()[ipoint]>10 && gr->GetY()[ipoint]<500 ){
312 values[nused]=gr->GetY()[ipoint];
317 vecQEntries[isec]= nused;
319 vecQMedian[isec] = TMath::Median(nused,values.GetMatrixArray());
320 vecQMean[isec] = TMath::Mean(nused,values.GetMatrixArray());
321 vecQRMS[isec] = TMath::RMS(nused,values.GetMatrixArray());
329 TVectorD &vNoiseRMS, TVectorD &vNoiseRMSSenRegions,
330 Int_t &nonMaskedZero, Int_t &nNaN)
339 const UInt_t infoSize=4;
340 vNoiseMean.ResizeTo(infoSize);
341 vNoiseMeanSenRegions.ResizeTo(infoSize);
342 vNoiseRMS.ResizeTo(infoSize);
343 vNoiseRMSSenRegions.ResizeTo(infoSize);
345 vNoiseMeanSenRegions.Zero();
347 vNoiseRMSSenRegions.Zero();
351 TVectorD c(infoSize);
352 TVectorD cs(infoSize);
364 for (UInt_t irow=0;irow<nrows;++irow){
365 UInt_t npads=noiseROC->
GetNPads(irow);
366 for (UInt_t ipad=0;ipad<npads;++ipad){
368 if (rocMasked && rocMasked->
GetValue(irow,ipad))
continue;
369 Float_t noiseVal=noiseROC->
GetValue(irow,ipad);
376 if ( !(noiseVal<10000000) ){
377 AliInfo(Form(
"Warning: nan detected in (sec,row,pad - val): %02d,%02d,%03d - %.1f\n",isec,irow,ipad,noiseVal));
381 Int_t cpad=(Int_t)ipad-(Int_t)npads/2;
383 if (ipad<2||npads-ipad-1<2) masksen=0;
386 if (irow>19&&irow<46){
387 if (TMath::Abs(cpad)<7) masksen=0;
390 vNoiseMean[type]+=noiseVal;
391 vNoiseRMS[type]+=noiseVal*noiseVal;
394 vNoiseMeanSenRegions[type]+=noiseVal;
395 vNoiseRMSSenRegions[type]+=noiseVal*noiseVal;
401 if ((nrows-irow-1)<3) masksen=0;
403 Int_t padEdge=(Int_t)TMath::Min(ipad,npads-ipad);
404 if (padEdge<((((Int_t)irow-76)/4+1))*2) masksen=0;
409 vNoiseMean[type]+=noiseVal;
410 vNoiseRMS[type]+=noiseVal*noiseVal;
413 vNoiseMeanSenRegions[type]+=noiseVal;
414 vNoiseRMSSenRegions[type]+=noiseVal*noiseVal;
420 vNoiseMean[type]+=noiseVal;
421 vNoiseRMS[type]+=noiseVal*noiseVal;
424 vNoiseMeanSenRegions[type]+=noiseVal;
425 vNoiseRMSSenRegions[type]+=noiseVal*noiseVal;
432 vNoiseMean[type]+=noiseVal;
433 vNoiseRMS[type]+=noiseVal*noiseVal;
436 vNoiseMeanSenRegions[type]+=noiseVal;
437 vNoiseRMSSenRegions[type]+=noiseVal*noiseVal;
445 const Double_t verySmall=0.0000000001;
446 for (UInt_t i=0;i<infoSize;++i){
453 AliInfo(Form(
"i: %d - m: %.3f, c: %.0f, r: %.3f\n",i,vNoiseMean[i],c[i],vNoiseRMS[i]));
454 mean=vNoiseMean[i]/c[i];
456 rms=TMath::Sqrt(TMath::Abs(rms/c[i]-mean*mean));
461 if (cs[i]>verySmall){
462 meanSen=vNoiseMeanSenRegions[i]/cs[i];
463 rmsSen=vNoiseRMSSenRegions[i];
464 rmsSen=TMath::Sqrt(TMath::Abs(rmsSen/cs[i]-meanSen*meanSen));
466 vNoiseMeanSenRegions[i]=meanSen;
467 vNoiseRMSSenRegions[i]=rmsSen;
480 const UInt_t infoSize = 72;
482 vQaOcc.ResizeTo(infoSize);
484 vQaQtot.ResizeTo(infoSize);
486 vQaQmax.ResizeTo(infoSize);
493 AliInfo(
"No QA data");
498 AliInfo(
"No QA data");
504 TVectorD normOcc(infoSize);
505 TVectorD normQ(infoSize);
509 AliInfo(Form(
"Sector %d\n", isec));
514 if (!occupancyROC)
continue;
515 if (!nclusterROC)
continue;
517 if (!qmaxROC)
continue;
521 AliInfo(Form(
"Nchannels %d\n", nchannels));
523 for (UInt_t ichannel=0;ichannel<nchannels;++ichannel){
525 vQaOcc[isec] += occupancyROC->
GetValue(ichannel);
528 Float_t nClusters = nclusterROC->
GetValue(ichannel);
529 normQ[isec] += nClusters;
530 vQaQtot[isec]+=nClusters*qROC->
GetValue(ichannel);
531 vQaQmax[isec]+=nClusters*qmaxROC->
GetValue(ichannel);
538 if (normOcc[isec]>0) vQaOcc[isec] /= normOcc[isec];
539 else vQaOcc[isec] = 0;
542 vQaQtot[isec] /= normQ[isec];
543 vQaQmax[isec] /= normQ[isec];
558 const UInt_t infoSize=4;
560 vMeanTime.ResizeTo(infoSize);
563 TVectorD c(infoSize);
571 if (!tmeanROC)
continue;
574 for (UInt_t ichannel=0;ichannel<nchannels;++ichannel){
575 if (rocOut && rocOut->
GetValue(ichannel))
continue;
576 Float_t val=tmeanROC->
GetValue(ichannel);
578 vMeanTime[type]+=val;
583 for (UInt_t itype=0; itype<infoSize; ++itype){
584 if (c[itype]>0) vMeanTime[itype]/=c[itype];
585 else vMeanTime[itype]=0;
598 for (UInt_t ichannel=0; ichannel<rocMasked->
GetNchannels();++ichannel){
599 if (rocMasked->
GetValue(ichannel)) ++nMasked;
631 vecEntries.ResizeTo(nsensors);
632 vecMedian.ResizeTo(nsensors);
633 vecMean.ResizeTo(nsensors);
634 vecRMS.ResizeTo(nsensors);
642 Double_t kBig=100000000000.;
644 vecEntries.ResizeTo(nsensors);
645 vecMedian.ResizeTo(nsensors);
646 vecMean.ResizeTo(nsensors);
647 vecRMS.ResizeTo(nsensors);
649 for (Int_t isensor=0; isensor<
fGoofieArray->NumSensors();isensor++){
650 AliDCSSensor *gsensor =
fGoofieArray->GetSensor(isensor);
651 if (gsensor && gsensor->GetGraph()){
652 Int_t
npoints = gsensor->GetGraph()->GetN();
654 values.ResizeTo(npoints);
656 for (Int_t ipoint=0; ipoint<
npoints; ipoint++){
657 if (TMath::Abs(gsensor->GetGraph()->GetY()[ipoint])>kEpsilon &&
658 TMath::Abs(gsensor->GetGraph()->GetY()[ipoint])<kBig ){
659 values[nused]=gsensor->GetGraph()->GetY()[ipoint];
664 vecEntries[isensor]= nused;
666 vecMedian[isensor] = TMath::Median(nused,values.GetMatrixArray());
667 vecMean[isensor] = TMath::Mean(nused,values.GetMatrixArray());
668 vecRMS[isensor] = TMath::RMS(nused,values.GetMatrixArray());
680 TVectorF vThres(npar);
684 pedestalDeviations.ResizeTo(npar);
685 for (Int_t i=0;i<npar;++i){
686 pedestalDeviations.GetMatrixArray()[i]=0;
687 vThres.GetMatrixArray()[i]=(i+1)*.5;
698 for (UInt_t irow=0;irow<nrows;++irow){
700 for (UInt_t ipad=0;ipad<npads;++ipad){
702 if (mROC ->GetValue(irow,ipad))
continue;
703 if (mRefROC->
GetValue(irow,ipad))
continue;
704 Float_t deviation=TMath::Abs(pROC->
GetValue(irow,ipad)-pRefROC->
GetValue(irow,ipad));
705 for (Int_t i=0;i<npar;++i){
706 if (deviation>vThres[i])
707 ++pedestalDeviations.GetMatrixArray()[i];
714 for (Int_t i=0;i<npar;++i){
715 pedestalDeviations.GetMatrixArray()[i]/=nActive;
726 TVectorF vThres(npar);
730 noiseDeviations.ResizeTo(npar);
731 for (Int_t i=0;i<npar;++i){
732 noiseDeviations.GetMatrixArray()[i]=0;
733 vThres.GetMatrixArray()[i]=(i+1)*.05;
744 for (UInt_t irow=0;irow<nrows;++irow){
746 for (UInt_t ipad=0;ipad<npads;++ipad){
748 if (mROC ->GetValue(irow,ipad))
continue;
749 if (mRefROC->
GetValue(irow,ipad))
continue;
750 if (nRefROC->
GetValue(irow,ipad)==0)
continue;
751 Float_t deviation=(nROC->
GetValue(irow,ipad)/nRefROC->
GetValue(irow,ipad))-1;
752 for (Int_t i=0;i<npar;++i){
753 if (deviation>vThres[i])
754 ++noiseDeviations.GetMatrixArray()[i];
761 for (Int_t i=0;i<npar;++i){
762 noiseDeviations.GetMatrixArray()[i]/=nActive;
768 Int_t &npadsOutOneTB, Int_t &npadsOffAdd)
774 TVectorF vThres(npar);
778 pulserQdeviations.ResizeTo(npar);
779 for (Int_t i=0;i<npar;++i){
780 pulserQdeviations.GetMatrixArray()[i]=0;
785 vThres.GetMatrixArray()[0]=.005;
786 vThres.GetMatrixArray()[1]=.01;
787 vThres.GetMatrixArray()[2]=.05;
788 vThres.GetMatrixArray()[3]=.1;
802 Float_t ptmean=ptROC->
GetMean(oROC);
804 for (UInt_t irow=0;irow<nrows;++irow){
806 for (UInt_t ipad=0;ipad<npads;++ipad){
808 if (mROC ->GetValue(irow,ipad))
continue;
809 if (mRefROC->
GetValue(irow,ipad))
continue;
811 if (ipad==0||ipad==npads-1)
continue;
813 Float_t pq=pqROC->
GetValue(irow,ipad);
814 Float_t pqRef=pqRefROC->
GetValue(irow,ipad);
815 Float_t pt=ptROC->
GetValue(irow,ipad);
818 Float_t deviation=TMath::Abs(pqRef)>1e-20?TMath::Abs(pq/pqRef-1):-999;
819 for (Int_t i=0;i<npar;++i){
820 if (deviation>vThres[i])
821 ++pulserQdeviations.GetMatrixArray()[i];
823 if (pqRef>11&&pq<11) ++npadsOffAdd;
826 if (TMath::Abs(pt-ptmean)>1) ++npadsOutOneTB;
832 for (Int_t i=0;i<npar;++i){
833 pulserQdeviations.GetMatrixArray()[i]/=nActive;
875 if (!tmeanROC||!qmeanROC) {
885 for (UInt_t irow=0;irow<nrows;++irow){
886 UInt_t npads=tmeanROC->
GetNPads(irow);
887 for (UInt_t ipad=0;ipad<npads;++ipad){
888 Int_t outlier=0,masked=0;
889 Float_t q=qmeanROC->
GetValue(irow,ipad);
892 if (rocMasked && rocMasked->
GetValue(irow,ipad)) masked=1;
894 if (ipad==0||ipad==npads-1) masked=1;
899 if ( !(q<10000000) || !(t<10000000)) outlier=1;
900 outROC->
SetValue(irow,ipad,outlier+masked);
920 if (model==0||model==1){
925 if (!rocPulTmean)
continue;
928 Float_t mean=rocPulTmean->
GetMean(rocOut);
936 for (UInt_t irow=0;irow<nrows;++irow){
937 UInt_t npads=rocTime0->
GetNPads(irow);
938 for (UInt_t ipad=0;ipad<npads;++ipad){
939 Float_t time=rocPulTmean->
GetValue(irow,ipad);
944 if ( TMath::Abs(time)<
kAlmost0 ) time=mean;
946 Float_t val=time-mean;
951 }
else if (model==2){
952 Double_t pgya,pgyc,pchi2a,pchi2c;
958 ProcessCEdata(
"(sector<36)++gy++gx++(lx-134)++(sector<36)*(lx-134)++(ly/lx)^2",vA,vC,nOut,chi2A, chi2C,&outCE);
961 if (!padFit) {
delete padPulser;
return 0;}
966 padTime0->
Add(padFit,-1);
976 rocTime0->
GlobalFit(rocOutCE,kFALSE,vFitROC,mFitROC,chi2);
978 Float_t mean=rocPulTmean->
GetMean(rocOutPul);
981 for (UInt_t irow=0;irow<nrows;++irow){
982 UInt_t npads=rocTime0->
GetNPads(irow);
983 for (UInt_t ipad=0;ipad<npads;++ipad){
984 Float_t timePulser=rocPulTmean->
GetValue(irow,ipad)-mean;
986 Float_t valOut=rocCEfit->
GetValue(irow,ipad);
987 if (!rocOutPul->
GetValue(irow,ipad)) valOut+=timePulser;
988 rocTime0->
SetValue(irow,ipad,valOut);
997 padTime0->
Add(-median);
1005 if (roc==0)
return 0.;
1013 for (Int_t irow=row-10;irow<row+10;++irow){
1014 if (irow<0||irow>(Int_t)tpcRoc->
GetNRows(sector)-1)
continue;
1015 for (Int_t ipad=pad-10; ipad<pad+10;++ipad){
1016 if (ipad<0||ipad>(Int_t)tpcRoc->
GetNPads(sector,irow)-1)
continue;
1018 if (altroRoc!=altroCurr)
continue;
1019 if ( rocOut && rocOut->
GetValue(irow,ipad) )
continue;
1020 Float_t val=roc->
GetValue(irow,ipad);
1033 TDirectory *currDir=gDirectory;
1060 AliWarning(
"Referenc map not set!");
1065 AliCDBEntry* entry = 0x0;
1066 Bool_t hasAnyChanged=kFALSE;
1069 cdbPath=
"TPC/Calib/Pedestals";
1071 hasAnyChanged=
kTRUE;
1079 entry->SetOwner(
kTRUE);
1087 cdbPath=
"TPC/Calib/PadNoise";
1089 hasAnyChanged=
kTRUE;
1096 entry->SetOwner(
kTRUE);
1103 cdbPath=
"TPC/Calib/Pulser";
1105 hasAnyChanged=
kTRUE;
1115 entry->SetOwner(
kTRUE);
1125 cdbPath=
"TPC/Calib/CE";
1127 hasAnyChanged=
kTRUE;
1137 entry->SetOwner(
kTRUE);
1147 cdbPath=
"TPC/Calib/AltroConfig";
1149 hasAnyChanged=
kTRUE;
1160 entry->SetOwner(
kTRUE);
1192 cdbPath=
"TPC/Calib/QA";
1194 hasAnyChanged=
kTRUE;
1200 entry->SetOwner(
kTRUE);
1203 AliError(Form(
"Could not get object from entry '%s'\nPlease check!!!",entry->GetId().GetPath().Data()));
1227 AliError(Form(
"Could not get object from entry '%s'\nPlease check!!!",entry->GetId().GetPath().Data()));
1232 AliError(Form(
"Could not get '%s' from TObjArray in entry '%s'\nPlease check!!!",objName,entry->GetId().GetPath().Data()));
1245 AliError(Form(
"Could not get object from entry '%s'\nPlease check!!!",entry->GetId().GetPath().Data()));
1259 AliError(Form(
"Could not get reference run number for object '%s'\nPlease check availability!!!",cdbPath));
1262 AliCDBEntry *entry=AliCDBManager::Instance()->Get(
"TPC/Calib/AltroConfig", run);
1264 AliError(Form(
"Could not get reference object '%s'\nPlease check availability!!!",cdbPath));
1268 if (pad) pad->SetNameTitle(name,name);
1269 entry->SetOwner(
kTRUE);
1278 TString cdbPath=
"TPC/Calib/Ref";
1279 AliCDBEntry *entry=AliCDBManager::Instance()->Get(cdbPath.Data(), run);
1281 AliError(Form(
"Could not get reference object '%s'\nPlease check availability!!!",cdbPath.Data()));
1285 entry->SetOwner(
kTRUE);
1286 fRefMap=(TMap*)(entry->GetObject());
1287 AliCDBId &
id=entry->GetId();
1288 fRefValidity.Form(
"%d_%d_v%d_s%d",
id.GetFirstRun(),
id.GetLastRun(),
id.GetVersion(),
id.GetSubVersion());
1306 AliError(Form(
"Could not get reference run number for object '%s'\nPlease check availability!!!",cdbPath));
1309 AliCDBEntry *entry=AliCDBManager::Instance()->Get(cdbPath, run);
1311 AliError(Form(
"Could not get reference object '%s'\nPlease check availability!!!",cdbPath));
1322 if (!str)
return -2;
1323 return (Int_t)str->GetString().Atoi();
1330 TObjString *
str=
dynamic_cast<TObjString*
>(
fRefMap->GetValue(type));
1331 if (!str)
return -1;
1332 return (Int_t)str->GetString().Atoi();
1370 if (!rocData)
continue;
1375 Double_t trocMedian = rocData->
GetMedian();
1377 if (!rocData || !rocCEQ || !rocCETrms || !rocData) {
1385 for (UInt_t irow=0;irow<nrows;++irow){
1386 UInt_t npads=rocData->
GetNPads(irow);
1387 for (UInt_t ipad=0;ipad<npads;++ipad){
1389 Float_t valTmean=rocData->
GetValue(irow,ipad);
1390 Float_t valQmean=rocCEQ->
GetValue(irow,ipad);
1391 Float_t valTrms =rocCETrms->
GetValue(irow,ipad);
1393 if (rocMasked && rocMasked->
GetValue(irow,ipad)) {
1399 if (irow<2) rocOut->
SetValue(irow,ipad,1);
1401 if (irow>nrows-3) rocOut->
SetValue(irow,ipad,1);
1404 if (ipad==0||ipad==npads-1) rocOut->
SetValue(irow,ipad,1);
1406 if ( TMath::Abs(valTmean)<
kAlmost0) {
1417 if (valQmean<minSignal) {
1423 if (valTrms<cutTrmsMin*rmsMedian || valTrms>cutTrmsMax*rmsMedian){
1429 if (TMath::Abs(valTmean-trocMedian)>cutMaxDistT){
1459 if (!out) out=
new AliTPCCalPad(
"outPulser",
"outPulser");
1474 Double_t rocMedianT = rocData->
GetMedian();
1475 Double_t rocMedianQ = rocPulserQ->
GetMedian();
1476 Double_t rocRMSQ = rocPulserQ->
GetRMS();
1477 Double_t rocMedianTrms = rocPulserTrms->
GetMedian();
1478 Double_t rocRMSTrms = rocPulserTrms->
GetRMS();
1479 for (UInt_t ichannel=0;ichannel<rocData->
GetNchannels();++ichannel){
1481 Float_t valTmean=rocData->
GetValue(ichannel);
1482 Float_t valQmean=rocPulserQ->
GetValue(ichannel);
1483 Float_t valTrms =rocPulserTrms->
GetValue(ichannel);
1484 Float_t valMasked =0;
1485 if (rocMasked) valMasked = rocMasked->
GetValue(ichannel);
1487 if (valMasked>0.5) isOut=1;
1488 if (TMath::Abs(valTmean-rocMedianT)>cutTime) isOut=1;
1489 if (TMath::Abs(valQmean-rocMedianQ)>cutnRMSQ*rocRMSQ) isOut=1;
1490 if (TMath::Abs(valTrms-rocMedianTrms)>cutnRMSrms*rocRMSTrms) isOut=1;
1492 if (isOut) noutliersPulser++;
1533 const char *formulaIn=
"(-1.+2.*(sector<36))*0.5++gx++gy++(lx-134.)++(-1.+2.*(sector<36))*0.5*(lx-134)++((ly/lx)^2/(0.1763)^2)";
1535 const char *formulaAll=
"1++(-1.+2.*(sector<36))*0.5++gx++gy++(lx-134.)++(-1.+2.*(sector<36))*0.5*(lx-134)++((ly/lx)^2/(0.1763)^2)";
1537 const char *formulaOut=
"0++0*(-1.+2.*(sector<36))*0.5++0*gx++gy++0*(lx-134.)++0*(-1.+2.*(sector<36))*0.5*(lx-134)++0*((ly/lx)^2/(0.1763)^2)";
1541 Double_t pgya,pgyc,pchi2a,pchi2c;
1549 padPulser->SetName(
"padPulser");
1550 padPulserOut->SetName(
"padPulserOut");
1551 padCE->SetName(
"padCE");
1552 padCEIn->SetName(
"padCEIn");
1553 padCEOut->SetName(
"padCEOut");
1554 padOut->SetName(
"padOut");
1566 Double_t ceMedian = rocCE->
GetMedian(rocCEOut);
1567 Double_t pulserMedian = rocPulser->
GetMedian(rocCEOut);
1568 for (UInt_t ichannel=0;ichannel<rocOut->
GetNchannels();++ichannel){
1569 if (rocPulserOut->
GetValue(ichannel)>0) {
1570 rocPulser->
SetValue(ichannel,pulserMedian);
1573 if (rocCEOut->
GetValue(ichannel)>0) {
1574 rocCE->
SetValue(ichannel,ceMedian);
1582 padCE->
Add(padPulser,-1);
1587 Float_t chi2Af,chi2Cf;
1588 padCE->
GlobalSidesFit(padOut,formulaIn,fitResultsA,fitResultsC,dummy,dummy,chi2Af,chi2Cf);
1593 padCEFitGY->SetName(
"padCEFitGy");
1596 padCEFit->SetName(
"padCEFit");
1599 padCEDiff->SetName(
"padCEDiff");
1600 padCEDiff->
Add(padCEFit,-1.);
1603 padCE->
Add(padCEFitGY,-1.);
1605 padCE->
Add(padPulser,1.);
1606 Double_t padmedian = padCE->
GetMedian();
1607 padCE->
Add(-padmedian);
1618 Double_t diffMedian = rocCEDiff->
GetMedian(rocOut);
1619 for (UInt_t ichannel=0;ichannel<rocOut->
GetNchannels();++ichannel){
1620 if (rocOut->
GetValue(ichannel)==0)
continue;
1621 Float_t value=rocCEFit->
GetValue(ichannel)-rocCEFitGY->
GetValue(ichannel)-diffMedian-padmedian;
1644 delete padPulserOut;
1664 if(!graph)
return 0;
1665 if(graph->GetN() < 1)
return 0;
1668 index = TMath::BinarySearch(graph->GetN(), graph->GetX(),xref);
1669 if (index<0) index=0;
1670 if(graph->GetN()==1) {
1671 dx = xref-graph->GetX()[index];
1674 if (index>=graph->GetN()-1) index=graph->GetN()-2;
1675 if (xref-graph->GetX()[index]>graph->GetX()[index]-xref) index++;
1676 dx = xref-graph->GetX()[index];
1678 y = graph->GetY()[index];
1697 const Float_t kLaserCut=0.0005;
1698 const Int_t kMaxPeriod=3600*24*30*12;
1699 const Int_t kMinPoints=20;
1706 if (!array)
return 0;
1708 TGraphErrors *laserA[3]={0,0,0};
1709 TGraphErrors *laserC[3]={0,0,0};
1710 TGraphErrors *cosmicAll=0;
1711 laserA[1]=(TGraphErrors*)array->FindObject(
"GRAPH_MEAN_DRIFT_LASER_ALL_A");
1712 laserC[1]=(TGraphErrors*)array->FindObject(
"GRAPH_MEAN_DRIFT_LASER_ALL_C");
1713 cosmicAll =(TGraphErrors*)array->FindObject(
"TGRAPHERRORS_MEAN_VDRIFT_COSMICS_ALL");
1716 if (!cosmicAll)
return 0;
1717 Int_t nmeasC=cosmicAll->GetN();
1718 Float_t *tdelta =
new Float_t[nmeasC];
1720 for (Int_t i=0;i<nmeasC;i++){
1721 if (TMath::Abs(cosmicAll->GetX()[i]-timeStamp)>deltaT)
continue;
1722 Float_t ccosmic=cosmicAll->GetY()[i];
1723 Double_t yA=0,yC=0,dA=0,dC=0;
1724 if (laserA[1])
GetNearest(laserA[1], cosmicAll->GetX()[i],dA,yA);
1725 if (laserC[1])
GetNearest(laserC[1], cosmicAll->GetX()[i],dC,yC);
1729 if (TMath::Sqrt(dA*dA+dC*dC)>deltaTLaser)
continue;
1731 if (TMath::Abs(yA-yC)<kLaserCut) {
1734 if (i%2==0) claser=yA;
1735 if (i%2==1) claser=yC;
1737 tdelta[nused]=ccosmic-claser;
1740 if (nused<kMinPoints &&deltaT<kMaxPeriod) {
1744 if (nused<kMinPoints) {
1749 Double_t median = TMath::Median(nused,tdelta);
1750 Double_t mean = TMath::Mean(nused,tdelta);
1752 return (valType==0) ? median:mean;
1776 if (!array)
return 0;
1777 TGraphErrors *cosmicAll=0;
1778 cosmicAll =(TGraphErrors*)array->FindObject(
"TGRAPHERRORS_MEAN_VDRIFT_COSMICS_ALL");
1779 if (!cosmicAll)
return 0;
1785 if (timeStamp>cosmicAll->GetX()[cosmicAll->GetN()-1]) vcosmic=cosmicAll->GetY()[cosmicAll->GetN()-1];
1786 if (timeStamp<cosmicAll->GetX()[0]) vcosmic=cosmicAll->GetY()[0];
1823 if (!AliCDBManager::Instance()->GetDefaultStorage()){
1824 AliError(
"Default Storage not set. Cannot create reference calibration Tree!");
1828 TString file=filename;
1901 if (!param)
return 0;
1904 dv*=param->
GetDriftV()/2.61301900000000000e+06;
1905 if (dv>1e-20) dv=1/dv-1;
1911 AliDCSSensor *press = (AliDCSSensor*)cearray->FindObject(
"CavernAtmosPressure");
1922 if (side==0) dv -= corrPTA;
1923 if (side==1) dv -= corrPTC;
1924 if (side==2) dv -= (corrPTA+corrPTC)/2;
1933 TGraphErrors *grlaserA=0;
1934 TGraphErrors *grlaserC=0;
1935 Double_t vlaserA=0, vlaserC=0;
1936 if (!array)
return 0;
1937 grlaserA=(TGraphErrors*)array->FindObject(
"GRAPH_MEAN_DRIFT_LASER_ALL_A");
1938 grlaserC=(TGraphErrors*)array->FindObject(
"GRAPH_MEAN_DRIFT_LASER_ALL_C");
1940 if (grlaserA && grlaserA->GetN()>0) {
1942 if (TMath::Abs(dist)>deltaT) vlaserA= deltaY;
1945 if (grlaserC && grlaserC->GetN()>0) {
1947 if (TMath::Abs(dist)>deltaT) vlaserC= deltaY;
1950 if (side==0)
return vlaserA;
1951 if (side==1)
return vlaserC;
1952 Double_t mdrift=(vlaserA+vlaserC)*0.5;
1953 if (!grlaserA)
return vlaserC;
1954 if (!grlaserC)
return vlaserA;
1970 if (!arrT)
return 0;
1976 Double_t corrPTA = 0, corrPTC=0;
1977 Double_t ltime0A = 0, ltime0C=0;
1979 Double_t corrA=0, corrC=0;
1980 Double_t timeA=0, timeC=0;
1982 TGraph *graphA = (TGraph*)arrT->At(72);
1983 TGraph *graphC = (TGraph*)arrT->At(73);
1984 if (!graphA && !graphC)
return 0.;
1985 if (graphA &&graphA->GetN()>0) {
1988 Int_t mtime =TMath::Nint((graphA->GetX()[0]+graphA->GetX()[graphA->GetN()-1])*0.5);
1990 if(ltime0A < kEpsilon)
return 0;
1991 if (driftCalib) corrPTA = driftCalib->
GetPTRelative(timeStamp,0);
1995 if (graphC&&graphC->GetN()>0){
1998 Int_t mtime=TMath::Nint((graphC->GetX()[0]+graphC->GetX()[graphC->GetN()-1])*0.5);
2000 if(ltime0C < kEpsilon)
return 0;
2001 if (driftCalib) corrPTC = driftCalib->
GetPTRelative(timeStamp,0);
2006 if (side ==0 )
return corrA;
2007 if (side ==1 )
return corrC;
2008 Double_t corrM= (corrA+corrC)*0.5;
2009 if (!graphA) corrM=corrC;
2010 if (!graphC) corrM=corrA;
2019 TGraphErrors *graph=0;
2021 if (!array)
return 0;
2023 graph = (TGraphErrors*)array->FindObject(
"ALIGN_ITSB_TPC_DRIFTVD");
2024 if (!graph) graph = (TGraphErrors*)array->FindObject(
"ALIGN_TOFB_TPC_DRIFTVD");
2025 if (!graph)
return 0;
2041 TGraphErrors *graph=0;
2043 if (!array)
return 0;
2044 graph = (TGraphErrors*)array->FindObject(
"ALIGN_ITSB_TPC_T0");
2045 if (!graph) graph = (TGraphErrors*)array->FindObject(
"ALIGN_ITSB_TPC_T0");
2046 if (!graph)
return 0;
2062 AliCDBStorage* storage = AliCDBManager::Instance()->GetSpecificStorage(
"TPC/Calib/Temperature");
2063 if (!storage) storage = AliCDBManager::Instance()->GetDefaultStorage();
2064 if (!storage)
return 0;
2065 TString
path=storage->GetURI();
2069 if (path.Contains(
"local")){
2070 path.ReplaceAll(
"local://",
"");
2071 path+=
"TPC/Calib/Temperature";
2072 command=Form(
"ls %s | sed s/_/\\ /g | awk '{print \"r\"$2}' ",path.Data());
2074 runsT=gSystem->GetFromPipe(command);
2079 TArrayI indexes(arr->GetEntries());
2080 TArrayI
runs(arr->GetEntries());
2082 {
for (Int_t irun=0;irun<arr->GetEntries();irun++){
2083 Int_t irunN = atoi(arr->At(irun)->GetName());
2084 if (irunN<startRun)
continue;
2085 if (irunN>stopRun)
continue;
2086 runs[naccept]=irunN;
2093 TMath::Sort(
fRuns.fN,
runs.fArray, indexes.fArray,kFALSE);
2094 for (Int_t irun=0; irun<
fRuns.fN; irun++)
fRuns[irun]=
runs[indexes[irun]];
2097 AliCDBEntry * entry = 0;
2098 {
for (Int_t irun=0;irun<
fRuns.fN; irun++){
2099 entry = AliCDBManager::Instance()->Get(
"TPC/Calib/Temperature",
fRuns[irun]);
2100 if (!entry)
continue;
2102 if (!tmpRun)
continue;
2103 fRunsStart[irun]=tmpRun->GetStartTime().GetSec();
2104 fRunsStop[irun]=tmpRun->GetEndTime().GetSec();
2114 Int_t index0 = TMath::BinarySearch(
fRuns.fN,
fRunsStop.fArray,itime);
2115 Int_t index1 = TMath::BinarySearch(
fRuns.fN,
fRunsStart.fArray,itime);
2117 for (Int_t index=index0; index<=index1; index++){
2123 if (cindex<0) cindex =(index0+index1)/2;
2127 return fRuns[cindex];
2138 if (!graph)
return 0;
2140 Int_t npoints0 = graph->GetN();
2145 if (npoints0<kMinPoints)
return 0;
2147 Double_t *outx=
new Double_t[npoints0];
2148 Double_t *outy=
new Double_t[npoints0];
2149 for (Int_t iter=0; iter<3; iter++){
2151 for (Int_t ipoint=0; ipoint<npoints0; ipoint++){
2152 if (graph->GetY()[ipoint]==0)
continue;
2153 if (iter>0 &&TMath::Abs(graph->GetY()[ipoint]-medianY)>sigmaCut*rmsY)
continue;
2154 outx[
npoints] = graph->GetX()[ipoint];
2155 outy[
npoints] = graph->GetY()[ipoint];
2158 if (npoints<=1)
break;
2159 medianY =TMath::Median(npoints,outy);
2160 rmsY =TMath::RMS(npoints,outy);
2163 if (npoints>1) graphOut=
new TGraph(npoints,outx,outy);
2174 if (!graph)
return 0;
2176 Int_t npoints0 = graph->GetN();
2181 if (npoints0<kMinPoints)
return 0;
2183 Double_t *outx=
new Double_t[npoints0];
2184 Double_t *outy=
new Double_t[npoints0];
2185 for (Int_t iter=0; iter<3; iter++){
2187 for (Int_t ipoint=0; ipoint<npoints0; ipoint++){
2188 if (graph->GetY()[ipoint]==0)
continue;
2189 if (iter>0 &&TMath::Abs(graph->GetY()[ipoint]-medianY)>cut)
continue;
2190 outx[
npoints] = graph->GetX()[ipoint];
2191 outy[
npoints] = graph->GetY()[ipoint];
2194 if (npoints<=1)
break;
2195 medianY =TMath::Median(npoints,outy);
2199 if (npoints>1) graphOut=
new TGraph(npoints,outx,outy);
2211 Int_t kMinPoints=10;
2212 Int_t npoints0 = graph->GetN();
2214 Float_t medianErr=0, rmsErr=0;
2217 if (npoints0<kMinPoints)
return 0;
2219 Double_t *outx=
new Double_t[npoints0];
2220 Double_t *outy=
new Double_t[npoints0];
2221 Double_t *erry=
new Double_t[npoints0];
2222 Double_t *nerry=
new Double_t[npoints0];
2223 Double_t *errx=
new Double_t[npoints0];
2225 for (Int_t iter=0; iter<3; iter++){
2227 for (Int_t ipoint=0; ipoint<npoints0; ipoint++){
2228 nerry[
npoints] = graph->GetErrorY(ipoint);
2229 if (iter>0 &&TMath::Abs(nerry[npoints]-medianErr)>sigmaCut*rmsErr)
continue;
2230 erry[
npoints] = graph->GetErrorY(ipoint);
2231 outx[
npoints] = graph->GetX()[ipoint];
2232 outy[
npoints] = graph->GetY()[ipoint];
2233 errx[
npoints] = graph->GetErrorY(ipoint);
2236 if (npoints==0)
break;
2237 medianErr=TMath::Median(npoints,erry);
2238 medianY =TMath::Median(npoints,outy);
2239 rmsErr =TMath::RMS(npoints,erry);
2241 TGraphErrors *graphOut=0;
2242 if (npoints>1) graphOut=
new TGraphErrors(npoints,outx,outy,errx,erry);
2255 Int_t
npoints = graph->GetN();
2256 Int_t *indexes=
new Int_t[
npoints];
2257 Double_t *outx=
new Double_t[
npoints];
2258 Double_t *outy=
new Double_t[
npoints];
2259 TMath::Sort(npoints, graph->GetX(),indexes,kFALSE);
2260 for (Int_t i=0;i<
npoints;i++) outx[i]=graph->GetX()[indexes[i]];
2261 for (Int_t i=0;i<
npoints;i++) outy[i]=graph->GetY()[indexes[i]];
2262 for (Int_t i=0;i<
npoints;i++) graph->GetX()[i]=outx[i];
2263 for (Int_t i=0;i<
npoints;i++) graph->GetY()[i]=outy[i];
2273 Int_t
npoints = graph->GetN();
2274 Double_t *outy=
new Double_t[
npoints];
2276 for (Int_t ipoint=0; ipoint<
npoints; ipoint++){
2277 Double_t lx=graph->GetX()[ipoint];
2278 Int_t index0=TMath::BinarySearch(npoints, graph->GetX(),lx-delta);
2279 Int_t index1=TMath::BinarySearch(npoints, graph->GetX(),lx+delta);
2280 if (index0<0) index0=0;
2281 if (index1>=npoints-1) index1=npoints-1;
2282 if ((index1-index0)>1){
2283 outy[ipoint] = TMath::Mean(index1-index0, &(graph->GetY()[index0]));
2285 outy[ipoint]=graph->GetY()[ipoint];
2306 for (Int_t ipoint=0; ipoint<
npoints; ipoint++){
2307 graph->GetY()[ipoint] = outy[ipoint];
2316 AliInfoGeneral(
"AliTPCcalibDButil",
"AliTPCcalibDButil::EvalGraphConst: 0 pointer\n");
2320 if (graph->GetN()<1){
2321 AliInfoGeneral(
"AliTPCcalibDButil",
"AliTPCcalibDButil::EvalGraphConst: Empty graph \n");
2326 if (xref<graph->GetX()[0])
return graph->GetY()[0];
2327 if (xref>graph->GetX()[graph->GetN()-1])
return graph->GetY()[graph->GetN()-1];
2331 if(graph->GetN()==1)
2332 return graph->Eval(graph->GetX()[0]);
2335 return graph->Eval(xref);
2342 AliInfoGeneral(
"AliTPCcalibDButil",
"AliTPCcalibDButil::EvalGraphConst: 0 pointer\n");
2345 if (graph->GetKnots()<1){
2346 AliInfoGeneral(
"AliTPCcalibDButil",
"AliTPCcalibDButil::EvalGraphConst: Empty graph");
2349 if (xref<graph->GetX()[0])
return graph->GetY0()[0];
2350 if (xref>graph->GetX()[graph->GetKnots()-1])
return graph->GetY0()[graph->GetKnots()-1];
2351 return graph->Eval( xref);
2368 AliSplineFit *
fit = sensor->GetFit();
2369 if (!fit)
return 0.;
2370 Int_t nknots = fit->GetKnots();
2377 Double_t *yin0 =
new Double_t[nknots];
2378 Double_t *yin1 =
new Double_t[nknots];
2381 for (Int_t iknot=0; iknot< nknots; iknot++){
2382 if (fit->GetY0()[iknot]>ymin && fit->GetY0()[iknot]<ymax){
2383 yin0[naccept] = fit->GetY0()[iknot];
2384 yin1[naccept] = fit->GetY1()[iknot];
2385 if (TMath::Abs(fit->GetY1()[iknot])>maxdy) yin1[naccept]=0;
2397 Double_t medianY0=0, medianY1=0;
2398 Double_t rmsY0 =0, rmsY1=0;
2399 medianY0 = TMath::Median(naccept, yin0);
2400 medianY1 = TMath::Median(naccept, yin1);
2401 rmsY0 = TMath::RMS(naccept, yin0);
2402 rmsY1 = TMath::RMS(naccept, yin1);
2409 for (Int_t iknot=0; iknot< nknots; iknot++){
2411 if (TMath::Abs(fit->GetY0()[iknot]-medianY0)>sigmaCut*rmsY0) isOK=kFALSE;
2412 if (TMath::Abs(fit->GetY1()[iknot]-medianY1)>sigmaCut*rmsY1) isOK=kFALSE;
2413 if (nknots<2) fit->GetY1()[iknot]=0;
2414 if (TMath::Abs(fit->GetY1()[iknot])>maxdy) fit->GetY1()[iknot]=0;
2416 fit->GetY0()[iknot]=medianY0;
2417 fit->GetY1()[iknot]=0;
2424 return Float_t(naccept)/Float_t(nknots);
2435 const Double_t kMaxDy=0.1;
2436 Int_t nsensors=tempArray->NumSensors();
2437 if (nsensors==0)
return 0.;
2439 for (Int_t isensor=0; isensor<nsensors; isensor++){
2440 AliDCSSensor *sensor = tempArray->GetSensorNum(isensor);
2441 if (!sensor)
continue;
2443 if (sensor->GetFit()==0){
2445 tempArray->RemoveSensorNum(isensor);
2450 return Float_t(naccept)/Float_t(nsensors);
2472 const Int_t kMinPoints =10;
2473 const Int_t kMinSectors=12;
2474 const Int_t kMinTime =400;
2478 if (!cearray)
return;
2484 AliDCSSensor * cavernPressureCE = (AliDCSSensor *) cearray->FindObject(
"CavernAtmosPressure");
2485 if ( tempMapCE && cavernPressureCE){
2494 driftCalib->SetName(
"driftPTCE");
2495 driftCalib->SetTitle(
"driftPTCE");
2496 cearray->AddLast(driftCalib);
2503 for (Int_t i=0; i<72;i++){
2504 TGraph *graph= (TGraph*)arrT->At(i);
2505 if (!graph)
continue;
2507 if (graph->GetN()<kMinPoints){
2512 if (tmin<0) tmin = graph->GetX()[0];
2513 if (tmax<0) tmax = graph->GetX()[graph->GetN()-1];
2515 if (tmin>graph->GetX()[0]) tmin=graph->GetX()[0];
2516 if (tmax<graph->GetX()[graph->GetN()-1]) tmax=graph->GetX()[graph->GetN()-1];
2521 TArrayF arrA(100000), arrC(100000);
2523 Double_t medianA=0, medianC=0;
2524 Double_t rmsA=0, rmsC=0;
2525 for (Int_t isec=0; isec<72;isec++){
2526 TGraph *graph= (TGraph*)arrT->At(isec);
2527 if (!graph)
continue;
2528 for (Int_t ipoint=kMinPoints-1; ipoint<graph->GetN();ipoint++){
2529 if (graph->GetY()[ipoint]<kMinTime)
continue;
2530 if (nA>=arrA.fN) arrA.Set(nA*2);
2531 if (nC>=arrC.fN) arrC.Set(nC*2);
2532 if (isec%36<18) arrA[nA++]= graph->GetY()[ipoint];
2533 if (isec%36>=18) arrC[nC++]= graph->GetY()[ipoint];
2537 medianA=TMath::Median(nA,arrA.fArray);
2538 rmsA =TMath::RMS(nA,arrA.fArray);
2541 medianC=TMath::Median(nC,arrC.fArray);
2542 rmsC =TMath::RMS(nC,arrC.fArray);
2547 TArrayD vecX(100000), vecY(100000);
2548 for (Int_t isec=0; isec<72;isec++){
2549 TGraph *graph= (TGraph*)arrT->At(isec);
2550 if (!graph)
continue;
2551 Double_t median = (isec%36<18) ? medianA: medianC;
2552 Double_t rms = (isec%36<18) ? rmsA: rmsC;
2555 for (Int_t ipoint=0; ipoint<graph->GetN();ipoint++){
2556 if (TMath::Abs(graph->GetY()[ipoint]-median)>cutAbs)
continue;
2557 if (TMath::Abs(graph->GetY()[ipoint]-median)>cutSigma*rms)
continue;
2558 vecX[naccept]= graph->GetX()[ipoint];
2559 vecY[naccept]= graph->GetY()[ipoint];
2562 if (naccept<kMinPoints){
2563 arrT->AddAt(0,isec);
2567 TGraph *graph2 =
new TGraph(naccept, vecX.fArray, vecY.fArray);
2569 arrT->AddAt(graph2,isec);
2574 for (Int_t i=0; i<72;i++){
2575 TGraph *graph= (TGraph*)arrT->At(i);
2576 if (!graph)
continue;
2581 if (!graphTS0)
continue;
2582 if (graphTS0->GetN()<kMinPoints) {
2589 if (!graphTS)
continue;
2594 (*pcstream)<<
"filterCE"<<
2599 "graphTS0.="<<graphTS0<<
2600 "graphTS.="<<graphTS<<
2604 arrT->AddAt(graphTS,i);
2610 TArrayF xA(200), yA(200), eA(200), xC(200),yC(200), eC(200);
2611 Int_t meanPoints=(nA+nC)/72;
2612 for (Int_t itime=0; itime<200; itime++){
2614 Double_t time=tmin+(tmax-tmin)*Float_t(itime)/200.;
2615 for (Int_t i=0; i<72;i++){
2616 TGraph *graph= (TGraph*)arrT->At(i);
2617 if (!graph)
continue;
2618 if (graph->GetN()<(meanPoints/4))
continue;
2619 if ( (i%36)<18 ) arrA[nA++]=graph->Eval(time);
2620 if ( (i%36)>=18 ) arrC[nC++]=graph->Eval(time);
2624 yA[itime]=(nA>0)? TMath::Mean(nA,arrA.fArray):0;
2625 yC[itime]=(nC>0)? TMath::Mean(nC,arrC.fArray):0;
2626 eA[itime]=(nA>0)? TMath::RMS(nA,arrA.fArray):0;
2627 eC[itime]=(nC>0)? TMath::RMS(nC,arrC.fArray):0;
2630 Double_t rmsTA = TMath::RMS(200,yA.fArray)+TMath::Mean(200,eA.fArray);
2631 Double_t rmsTC = TMath::RMS(200,yC.fArray)+TMath::Mean(200,eC.fArray);
2634 (*pcstream)<<
"filterAC"<<
2643 TGraphErrors *grA =
new TGraphErrors(200,xA.fArray,yA.fArray,0, eA.fArray);
2644 TGraphErrors *grC =
new TGraphErrors(200,xC.fArray,yC.fArray,0, eC.fArray);
2646 if (graphTSA&&graphTSA->GetN())
SmoothGraph(graphTSA,deltaT);
2648 if (graphTSC&&graphTSC->GetN()>0)
SmoothGraph(graphTSC,deltaT);
2651 if (nA<kMinSectors) arrT->AddAt(0,72);
2652 else arrT->AddAt(graphTSA,72);
2653 if (nC<kMinSectors) arrT->AddAt(0,73);
2654 else arrT->AddAt(graphTSC,73);
2663 const Int_t kMinPoints=1;
2667 for (Int_t i=0; i<arrT->GetEntries();i++){
2668 TGraphErrors *graph=
dynamic_cast<TGraphErrors*
>(arrT->At(i));
2669 if (!graph)
continue;
2670 if (graph->GetN()<kMinPoints){
2675 TGraphErrors *graph2 = NULL;
2676 if(graph->GetN()<10) {
2677 graph2 =
new TGraphErrors(graph->GetN(),graph->GetX(),graph->GetY(),graph->GetEX(),graph->GetEY());
2679 delete graph; arrT->AddAt(0,i);
continue;
2685 delete graph; arrT->AddAt(0,i);
continue;
2688 if (graph2->GetN()<1) {
2689 delete graph; arrT->AddAt(0,i);
continue;
2691 graph2->SetName(graph->GetName());
2692 graph2->SetTitle(graph->GetTitle());
2693 arrT->AddAt(graph2,i);
2695 (*pcstream)<<
"filterTracks"<<
2700 "graph2.="<<graph2<<
2718 Double_t kMinDelay=0.01;
2719 Double_t kMinDelayErr=0.0001;
2722 if (!array)
return 0;
2723 TGraphErrors *tlaser=0;
2725 if (side==0) tlaser=(TGraphErrors*)array->FindObject(
"GRAPH_MEAN_DELAY_LASER_ALL_A");
2726 if (side==1) tlaser=(TGraphErrors*)array->FindObject(
"GRAPH_MEAN_DELAY_LASER_ALL_C");
2728 if (!tlaser)
return 0;
2729 Int_t npoints0= tlaser->GetN();
2730 if (npoints0==0)
return 0;
2731 Double_t *xlaser =
new Double_t[npoints0];
2732 Double_t *ylaser =
new Double_t[npoints0];
2734 for (Int_t i=0;i<npoints0;i++){
2736 if (tlaser->GetY()[i]<=kMinDelay)
continue;
2737 if (tlaser->GetErrorY(i)>TMath::Abs(kMinDelayErr))
continue;
2744 Int_t index0=TMath::BinarySearch(npoints, xlaser, Double_t(timeStamp-deltaT))-1;
2745 Int_t index1=TMath::BinarySearch(npoints, xlaser, Double_t(timeStamp+deltaT))+1;
2747 if (index0<0) index0=0;
2748 if (index1>=npoints-1) index1=npoints-1;
2749 if (index1-index0<kMinPoints) {
2756 Double_t mean = TMath::Mean(index1-index0, &(ylaser[index0]));
2775 const Int_t kMinPoints = 3;
2778 TGraph *graphvd = goofieArray->GetSensorNum(2)->GetGraph();
2779 TGraph *graphan = goofieArray->GetSensorNum(8)->GetGraph();
2780 TGraph *graphaf = goofieArray->GetSensorNum(9)->GetGraph();
2781 TGraph *graphpt = goofieArray->GetSensorNum(15)->GetGraph();
2782 if (!graphvd)
return;
2783 if (graphvd->GetN()<kMinPoints){
2785 goofieArray->GetSensorNum(2)->SetGraph(0);
2795 Double_t medianpt=0;
2796 Double_t medianvd=0, sigmavd=0;
2797 Double_t medianan=0;
2798 Double_t medianaf=0;
2799 Int_t entries=graphvd->GetN();
2800 Double_t yvdn[10000];
2803 for (Int_t ipoint=0; ipoint<entries; ipoint++){
2804 if (graphpt->GetY()[ipoint]<=0.0000001)
continue;
2805 if (graphvd->GetY()[ipoint]/graphpt->GetY()[ipoint]<minVd)
continue;
2806 if (graphvd->GetY()[ipoint]/graphpt->GetY()[ipoint]>maxVd)
continue;
2807 yvdn[nvd++]=graphvd->GetY()[ipoint];
2809 if (nvd<kMinPoints){
2811 goofieArray->GetSensorNum(2)->SetGraph(0);
2815 Int_t nuni = TMath::Min(TMath::Nint(nvd*0.4+2), nvd-1);
2816 if (nuni>=kMinPoints){
2817 AliMathBase::EvaluateUni(nvd, yvdn, medianvd,sigmavd,nuni);
2819 medianvd = TMath::Median(nvd, yvdn);
2838 TGraph graphOut(*graphvd);
2839 for (Int_t i=0; i<entries;i++){
2841 Bool_t isOut=kFALSE;
2842 if (graphpt->GetY()[i]<=0.0000001) { graphOut.GetY()[i]=1;
continue;}
2843 if (graphvd->GetY()[i]/graphpt->GetY()[i]<minVd || graphvd->GetY()[i]/graphpt->GetY()[i]>maxVd) { graphOut.GetY()[i]=1;
continue;}
2845 if (TMath::Abs((graphvd->GetY()[i]/graphpt->GetY()[i])/medianvd-1.)<0.05)
2847 if (TMath::Abs(graphpt->GetY()[i]/medianpt-1.)>0.02) isOut|=
kTRUE;
2848 if (TMath::Abs(graphan->GetY()[i]/medianan-1.)>0.2) isOut|=
kTRUE;
2849 if (TMath::Abs(graphaf->GetY()[i]/medianaf-1.)>0.2) isOut|=
kTRUE;
2850 graphOut.GetY()[i]= (isOut)?1:0;
2853 if (nOK<kMinPoints) {
2855 goofieArray->GetSensorNum(2)->SetGraph(0);
2861 TVectorF vmedianArray(goofieArray->NumSensors());
2862 TVectorF vrmsArray(goofieArray->NumSensors());
2863 Double_t xnew[10000];
2864 Double_t ynew[10000];
2866 junk.SetOwner(
kTRUE);
2870 for (Int_t isensor=0; isensor<goofieArray->NumSensors();isensor++){
2872 AliDCSSensor *sensor = goofieArray->GetSensorNum(isensor);
2873 TGraph *graphOld=0, *graphNew=0, * graphNew0=0,*graphNew1=0,*graphNew2=0;
2875 if (!sensor)
continue;
2876 graphOld = sensor->GetGraph();
2878 sensor->SetGraph(0);
2880 for (Int_t i=0;i<entries;i++){
2881 if (graphOut.GetY()[i]>0.5)
continue;
2882 xnew[nused]=graphOld->GetX()[i];
2883 ynew[nused]=graphOld->GetY()[i];
2886 graphNew =
new TGraph(nused,xnew,ynew);
2887 junk.AddLast(graphNew);
2888 junk.AddLast(graphOld);
2892 junk.AddLast(graphNew0);
2895 junk.AddLast(graphNew1);
2898 vrmsArray[isensor] =TMath::RMS(graphNew2->GetN(),graphNew2->GetY());
2903 vmedianArray[isensor]=median;
2909 if (!graphOld) { isOK=kFALSE; graphOld =&graphOut;}
2910 if (!graphNew0) { isOK=kFALSE; graphNew0=graphOld;}
2911 if (!graphNew1) { isOK=kFALSE; graphNew1=graphOld;}
2912 if (!graphNew2) { isOK=kFALSE; graphNew2=graphOld;}
2913 (*pcstream)<<
"goofieA"<<
2914 Form(
"isOK_%d.=",isensor)<<isOK<<
2915 Form(
"s_%d.=",isensor)<<sensor<<
2916 Form(
"gr_%d.=",isensor)<<graphOld<<
2917 Form(
"gr0_%d.=",isensor)<<graphNew0<<
2918 Form(
"gr1_%d.=",isensor)<<graphNew1<<
2919 Form(
"gr2_%d.=",isensor)<<graphNew2;
2920 if (isOK) sensor->SetGraph(graphNew2);
2922 (*pcstream)<<
"goofieA"<<
2923 "vmed.="<<&vmedianArray<<
2924 "vrms.="<<&vrmsArray<<
2945 if (!array)
return 0;
2946 if (array->GetEntries()<=0)
return 0;
2948 Int_t entriesFast = array->GetEntriesFast();
2950 TVectorD *valArray[9];
2951 for (Int_t i=0; i<9; i++){
2952 valArray[i] =
new TVectorD(entriesFast);
2955 for (Int_t ikalman=0; ikalman<entriesFast; ikalman++){
2956 AliRelAlignerKalman * kalman = (AliRelAlignerKalman *) array->UncheckedAt(ikalman);
2957 if (!kalman)
continue;
2958 if (TMath::Abs(kalman->GetTPCvdCorr()-1)>maxvd)
continue;
2959 if (kalman->GetNUpdates()<minStat)
continue;
2960 if (Float_t(kalman->GetNUpdates())/Float_t(kalman->GetNTracks())<minFraction)
continue;
2961 kalman->GetState(state);
2962 for (Int_t ipar=0; ipar<9; ipar++)
2963 (*valArray[ipar])[naccept]=state[ipar];
2967 if (naccept<1)
return 0;
2968 TMatrixD *pstat=
new TMatrixD(9,3);
2969 TMatrixD &
stat=*pstat;
2970 for (Int_t ipar=0; ipar<9; ipar++){
2971 stat(ipar,0)=TMath::Mean(naccept, valArray[ipar]->GetMatrixArray());
2972 stat(ipar,1)=TMath::Median(naccept, valArray[ipar]->GetMatrixArray());
2973 stat(ipar,2)=TMath::RMS(naccept, valArray[ipar]->GetMatrixArray());
2975 for (Int_t i=0; i<9; i++){
2990 if (!array)
return 0;
2991 if (array->GetEntries()<=0)
return 0;
2992 if (!statP)
return 0;
2993 const TMatrixD&
stat = *statP;
2995 const Double_t kerrsTime[9]={
2996 0.00001, 0.00001, 0.00001,
2997 0.001, 0.001, 0.001,
2998 0.002, 0.01, 0.001};
3001 Int_t entries = array->GetEntriesFast();
3003 AliRelAlignerKalman * sKalman =0;
3005 for (Int_t i=0; i<entries; i++){
3006 Int_t index=(direction)? entries-i-1:i;
3007 AliRelAlignerKalman * kalman = (AliRelAlignerKalman *) array->UncheckedAt(index);
3008 if (!kalman)
continue;
3010 kalman->GetState(state);
3011 for (Int_t ipar=0; ipar<9; ipar++){
3012 if (TMath::Abs(state[ipar]-
stat(ipar,1))>sigmaCut*
stat(ipar,2)) isOK=kFALSE;
3014 if (!sKalman &&isOK) {
3015 sKalman=
new AliRelAlignerKalman(*kalman);
3016 sKalman->SetRejectOutliers(kFALSE);
3017 sKalman->SetRunNumber(kalman->GetRunNumber());
3018 sKalman->SetTimeStamp(kalman->GetTimeStamp());
3020 if (!sKalman)
continue;
3021 Double_t deltaT=TMath::Abs(Int_t(kalman->GetTimeStamp())-Int_t(sKalman->GetTimeStamp()))/3600.;
3022 for (Int_t ipar=0; ipar<9; ipar++){
3026 (*(sKalman->GetStateCov()))(ipar,ipar)+=deltaT*kerrsTime[ipar]*kerrsTime[ipar];
3028 sKalman->SetRunNumber(kalman->GetRunNumber());
3029 if (!isOK) sKalman->SetRunNumber(0);
3030 sArray->AddAt(
new AliRelAlignerKalman(*sKalman),index);
3031 if (!isOK)
continue;
3032 sKalman->SetRejectOutliers(kFALSE);
3033 sKalman->SetRunNumber(kalman->GetRunNumber());
3034 sKalman->SetTimeStamp(kalman->GetTimeStamp());
3035 sKalman->Merge(kalman);
3036 sArray->AddAt(
new AliRelAlignerKalman(*sKalman),index);
3048 if (!arrayP)
return 0;
3049 if (arrayP->GetEntries()<=0)
return 0;
3050 if (!arrayM)
return 0;
3051 if (arrayM->GetEntries()<=0)
return 0;
3053 Int_t entries = arrayP->GetEntriesFast();
3056 for (Int_t i=0; i<entries; i++){
3057 AliRelAlignerKalman * kalmanP = (AliRelAlignerKalman *) arrayP->UncheckedAt(i);
3058 AliRelAlignerKalman * kalmanM = (AliRelAlignerKalman *) arrayM->UncheckedAt(i);
3059 if (!kalmanP)
continue;
3060 if (!kalmanM)
continue;
3062 AliRelAlignerKalman *kalman = NULL;
3063 if(kalmanP->GetRunNumber() != 0 && kalmanM->GetRunNumber() != 0) {
3064 kalman =
new AliRelAlignerKalman(*kalmanP);
3065 kalman->Merge(kalmanM);
3067 else if (kalmanP->GetRunNumber() == 0) {
3068 kalman =
new AliRelAlignerKalman(*kalmanM);
3070 else if (kalmanM->GetRunNumber() == 0) {
3071 kalman =
new AliRelAlignerKalman(*kalmanP);
3076 array->AddAt(kalman,i);
3094 TFile *fin =
TFile::Open(Form(
"%s/map/treeMapping.root",baseDir.Data()));
3096 TTree *
tMain = (TTree*)fin->Get(
"calPads");
3097 tMain->SetAlias(
"Pad0",
"MapPadLength.fElements==7.5");
3098 tMain->SetAlias(
"Pad1",
"MapPadLength.fElements==10.0");
3099 tMain->SetAlias(
"Pad2",
"MapPadLength.fElements==15.0");
3101 tMain->SetAlias(
"dRowNorm0",
"(row.fElements/32-1)");
3102 tMain->SetAlias(
"dRowNorm1",
"(row.fElements/32-1)");
3103 tMain->SetAlias(
"dRowNorm2",
"((row.fElements-63)/16-1)");
3104 tMain->SetAlias(
"dRowNorm",
"(row.fElements<63)*(row.fElements/32-1)+(row.fElements>63)*((row.fElements-63)/16-1)");
3105 tMain->SetAlias(
"dPhiNorm",
"(ly.fElements/lx.fElements)/(pi/18)");
3107 tMain->SetAlias(
"fsector",
"(sector%36)+(0.5+9*atan2(ly.fElements,lx.fElements)/pi)");
3108 tMain->SetAlias(
"posEdge",
"((pi/18.)-abs(atan(ly.fElements/lx.fElements)))*lx.fElements");
3111 TString inputTreesKrCalib = gSystem->GetFromPipe(Form(
"ls %s/KryptonCalib/20*/calibKr/*.tree.root",baseDir.Data()));
3112 TObjArray *arrInputTreesKrCalib = inputTreesKrCalib.Tokenize(
"\n");
3114 for (Int_t itree=0; itree<arrInputTreesKrCalib->GetEntriesFast(); ++itree) {
3115 TFile *fin2 =
TFile::Open(arrInputTreesKrCalib->At(itree)->GetName());
3116 TTree *tin = (TTree*)fin2->Get(
"calPads");
3118 TString friendName=gSystem->BaseName(arrInputTreesKrCalib->At(itree)->GetName());
3119 friendName.ReplaceAll(
"calibKr.",
"");
3120 friendName.ReplaceAll(
".tree.root",
"");
3121 friendName=
"Kr."+friendName;
3122 tMain->AddFriend(tin,friendName.Data());
3140 tMain->SetAlias((friendName+
".spectrMean_LTMRatio").Data(),
3141 TString::Format(
"(%s.spectrMean.fElements/(%s.spectrMean_LTM+0))",
3142 friendName.Data(),friendName.Data()).Data());
3144 tMain->SetAlias((friendName+
".spectrMean_MedianRatio").Data(),
3145 TString::Format(
"(%s.spectrMean.fElements/(%s.spectrMean_Median+0))",
3146 friendName.Data(),friendName.Data()).Data());
3147 tMain->SetAlias((friendName+
".spectrMean_MeanRatio").Data(),
3148 TString::Format(
"(%s.spectrMean.fElements/(%s.spectrMean_Mean+0))",
3149 friendName.Data(),friendName.Data()).Data());
3150 tMain->SetAlias((friendName+
".spectrMean_MeanRatio").Data(),
3151 TString::Format(
"(%s.spectrMean.fElements/%s.spectrMean_Mean)",
3152 friendName.Data(),friendName.Data()).Data());
3154 tMain->SetAlias((friendName+
".fitMean_LTMRatio").Data(),
3155 TString::Format(
"(%s.fitMean.fElements/(%s.fitMean_LTM+0))",
3156 friendName.Data(),friendName.Data()).Data());
3157 tMain->SetAlias((friendName+
".fitRMS_LTMRatio").Data(),
3158 TString::Format(
"(%s.fitRMS.fElements/(%s.fitRMS_LTM+0))",
3159 friendName.Data(),friendName.Data()).Data());
3161 tMain->SetAlias((friendName+
".fitMean_MedianRatio").Data(),
3162 TString::Format(
"(%s.fitMean.fElements/(%s.fitMean_Median+0))",
3163 friendName.Data(),friendName.Data()).Data());
3164 tMain->SetAlias((friendName+
".fitRMS_MedianRatio").Data(),
3165 TString::Format(
"(%s.fitRMS.fElements/(%s.fitRMS_Median+0))",
3166 friendName.Data(),friendName.Data()).Data());
3167 tMain->SetAlias((friendName+
".fitMean_MeanRatio").Data(),
3168 TString::Format(
"(%s.fitMean.fElements/(%s.fitMean_Mean+0))",
3169 friendName.Data(),friendName.Data()).Data());
3170 tMain->SetAlias((friendName+
".fitRMS_MeanRatio").Data(),
3171 TString::Format(
"(%s.fitRMS.fElements/(%s.fitRMS_Mean+0))",
3172 friendName.Data(),friendName.Data()).Data());
3173 tMain->SetAlias((friendName+
".fitMean_MeanRatio").Data(),
3174 TString::Format(
"(%s.fitMean.fElements/%s.fitMean_Mean)",
3175 friendName.Data(),friendName.Data()).Data());
3180 TString inputTreesQACalib = gSystem->GetFromPipe(Form(
"ls %s/calibQAdEdx/20*/*.tree.root",baseDir.Data()));
3181 TObjArray *arrInputTreesQACalib = inputTreesQACalib.Tokenize(
"\n");
3183 for (Int_t itree=0; itree<arrInputTreesQACalib->GetEntriesFast(); ++itree) {
3184 TFile *fin2 =
TFile::Open(arrInputTreesQACalib->At(itree)->GetName());
3185 TTree *tin = (TTree*)fin2->Get(
"calPads");
3187 TString friendName=gSystem->BaseName(arrInputTreesQACalib->At(itree)->GetName());
3188 friendName.ReplaceAll(
"calibQA.",
"");
3189 friendName.ReplaceAll(
".tree.root",
"");
3190 friendName=
"QA."+friendName;
3191 tMain->AddFriend(tin,friendName.Data());
3194 tMain->SetAlias((friendName+
".MaxCharge_LTMRatio").Data(),
3195 TString::Format(
"(%s.MaxCharge.fElements/%s.MaxCharge_LTM)",
3196 friendName.Data(),friendName.Data()).Data());
3198 tMain->SetAlias((friendName+
".MaxCharge_MedianRatio").Data(),
3199 TString::Format(
"(%s.MaxCharge.fElements/%s.MaxCharge_Median)",
3200 friendName.Data(),friendName.Data()).Data());
3201 tMain->SetAlias((friendName+
".MaxCharge_MeanRatio").Data(),
3202 TString::Format(
"(%s.MaxCharge.fElements/%s.MaxCharge_Mean)",
3203 friendName.Data(),friendName.Data()).Data());
3205 tMain->SetAlias((friendName+
".MeanCharge_LTMRatio").Data(),
3206 TString::Format(
"(%s.MeanCharge.fElements/%s.MeanCharge_LTM)",
3207 friendName.Data(),friendName.Data()).Data());
3209 tMain->SetAlias((friendName+
".MeanCharge_MedianRatio").Data(),
3210 TString::Format(
"(%s.MeanCharge.fElements/%s.MeanCharge_Median)",
3211 friendName.Data(),friendName.Data()).Data());
3212 tMain->SetAlias((friendName+
".MeanCharge_MeanRatio").Data(),
3213 TString::Format(
"(%s.MeanCharge.fElements/%s.MeanCharge_Mean)",
3214 friendName.Data(),friendName.Data()).Data());
3230 TString inputTreesPulserCalib = gSystem->GetFromPipe(Form(
"ls %s/calibPulser/20*/*.tree.root",baseDir.Data()));
3231 TObjArray *arrInputTreesPulserCalib = inputTreesPulserCalib.Tokenize(
"\n");
3232 for (Int_t itree=0; itree<arrInputTreesPulserCalib->GetEntriesFast(); ++itree) {
3233 TFile *fin2 =
TFile::Open(arrInputTreesPulserCalib->At(itree)->GetName());
3234 TTree *tin = (TTree*)fin2->Get(
"calPads");
3236 TString friendName=gSystem->BaseName(arrInputTreesPulserCalib->At(itree)->GetName());
3237 friendName.ReplaceAll(
"calibPulser.",
"");
3238 friendName.ReplaceAll(
".tree.root",
"");
3239 friendName=
"Pulser."+friendName;
3240 tMain->AddFriend(tin,friendName.Data());
3243 tMain->SetAlias((friendName+
".CEQmean_LTMRatio").Data(),
3244 TString::Format(
"(%s.CEQmean.fElements/%s.CEQmean_LTM)",
3245 friendName.Data(),friendName.Data()).Data());
3246 tMain->SetAlias((friendName+
".CEQmean_MedianRatio").Data(),
3247 TString::Format(
"(%s.CEQmean.fElements/%s.CEQmean_Median)",
3248 friendName.Data(),friendName.Data()).Data());
3249 tMain->SetAlias((friendName+
".CEQmean_MeanRatio").Data(),
3250 TString::Format(
"(%s.CEQmean.fElements/%s.CEQmean_Mean)",
3251 friendName.Data(),friendName.Data()).Data());
3253 tMain->SetAlias((friendName+
".CETmean_LTMDelta").Data(),
3254 TString::Format(
"(%s.CETmean.fElements-%s.CETmean_LTM)",
3255 friendName.Data(),friendName.Data()).Data());
3256 tMain->SetAlias((friendName+
".CETmean_MedianDelta").Data(),
3257 TString::Format(
"(%s.CETmean.fElements-%s.CETmean_Median)",
3258 friendName.Data(),friendName.Data()).Data());
3259 tMain->SetAlias((friendName+
".CETmean_MeanDelta").Data(),
3260 TString::Format(
"(%s.CETmean.fElements-%s.CETmean_Mean)",
3261 friendName.Data(),friendName.Data()).Data());
3277 TString inputTreesDistortionCalib =
"";
3278 if (selection.Contains(
".list")){
3279 inputTreesDistortionCalib=gSystem->GetFromPipe(Form(
"cat %s",selection.Data()));
3281 inputTreesDistortionCalib=gSystem->GetFromPipe(Form(
"find %s -iname \"%s\"",baseDir.Data(),selection.Data()));
3286 for (Int_t itree=0; itree<arrInputTreesDistortionCalib->GetEntriesFast(); ++itree) {
3287 TString fstring = arrInputTreesDistortionCalib->At(itree)->GetName();
3288 if (fstring.Index(
"Prefix:")==0){
3289 treePrefix=TString(&(fstring[7]));
3292 if (fstring.Index(
"#")==0){
3295 TFile *finput=
TFile::Open(arrInputTreesDistortionCalib->At(itree)->GetName());
3296 TString strFile=arrInputTreesDistortionCalib->At(itree)->GetName();
3298 Int_t plength=path->GetEntries();
3299 if (!finput)
continue;
3300 TList* list = finput->GetListOfKeys();
3301 Int_t nkeys=list->GetEntries();
3302 for (Int_t ikey=0; ikey<nkeys; ikey++){
3303 TKey * key = (TKey*)list->At(ikey);
3304 if (strstr(key->GetClassName(),
"TTree")==0)
continue;
3305 TTree *
tree =
dynamic_cast<TTree*
>(finput->Get(list->At(ikey)->GetName()));
3306 if (!tree)
continue;
3307 TString friendName=
"";
3308 if (treePrefix.Length()==0) {
3309 friendName=TString::Format(
"%s.%s.%s",path->At(plength-3)->GetName(),path->At(plength-2)->GetName(), tree->GetName());
3311 friendName=TString::Format(
"%s.%s",treePrefix.Data(), tree->GetName());
3313 ::Info(
"AliTPCcalibDButil::ConnectDistortionTrees",
"%s",friendName.Data());
3316 tree =
dynamic_cast<TTree*
>(finput->Get(list->At(ikey)->GetName()));
3318 tMain->AddFriend(tree,friendName.Data());
3338 TString inputTreesCalPad = gSystem->GetFromPipe(Form(
"ls %s/%s",baseDir.Data(), pattern.Data()));
3339 TObjArray *arrInputTreesCalPad = inputTreesCalPad.Tokenize(
"\n");
3341 for (Int_t itree=0; itree<arrInputTreesCalPad->GetEntriesFast(); ++itree) {
3342 TFile *fin2 =
TFile::Open(arrInputTreesCalPad->At(itree)->GetName());
3343 TTree *tin = (TTree*)fin2->Get(
"calPads");
3345 TString friendName=arrInputTreesCalPad->At(itree)->GetName();
3346 friendName.ReplaceAll(
"//",
"/");
3347 friendName.ReplaceAll(baseDir.Data(),
"");
3348 friendName.ReplaceAll(
"^/",
"");
3349 friendName.ReplaceAll(
"/",
".");
3350 friendName.ReplaceAll(
".tree.",
".");
3351 friendName.ReplaceAll(
".root",
"");
3352 printf(
"%s\n", friendName.Data());
3353 ::Info(
"AliTPCcalibDButil::ConnectCalPadTrees",
"%s",friendName.Data());
3354 if (tMain==0) tMain=tin;
3355 tMain->AddFriend(tin,friendName.Data());
3356 TObjArray * branches=tin->GetListOfBranches();
3357 Int_t nBranches=branches->GetEntries();
3358 for (Int_t ibranch=0; ibranch<nBranches; ibranch++){
3359 TString bname=branches->At(ibranch)->GetName();
3360 if (bname.Contains(
".")>0){
3361 bname.ReplaceAll(
".",
"");
3363 tin->SetAlias((bname).Data(), (bname+
".fElements").Data());
3364 tMain->SetAlias((friendName+
"."+bname).Data(), (friendName+
"."+bname+
".fElements").Data());
3368 if (branches->FindObject(bname+
"_LTM")!=0){
3369 tMain->SetAlias((friendName+
"."+bname+
"_MeanRatio").Data(), (friendName+
"."+bname+
".fElements/"+friendName+
"."+bname+
"_Mean").Data());
3370 tMain->SetAlias((friendName+
"."+bname+
"_MedianRatio").Data(), (friendName+
"."+bname+
".fElements/"+friendName+
"."+bname+
"_Median").Data());
3371 tMain->SetAlias((friendName+
"."+bname+
"_LTMRatio").Data(), (friendName+
"."+bname+
".fElements/"+friendName+
"."+bname+
"_LTM").Data());
3372 tMain->SetAlias((friendName+
"."+bname+
"_MeanDelta").Data(), (friendName+
"."+bname+
".fElements-"+friendName+
"."+bname+
"_Mean").Data());
3373 tMain->SetAlias((friendName+
"."+bname+
"_MedianDelta").Data(), (friendName+
"."+bname+
".fElements-"+friendName+
"."+bname+
"_Median").Data());
3374 tMain->SetAlias((friendName+
"."+bname+
"_LTMDelta").Data(), (friendName+
"."+bname+
".fElements-"+friendName+
"."+bname+
"_LTM").Data());
3377 tMain->SetAlias((friendName+
"."+bname+
"_Med3Ratio").Data(), (friendName+
"."+bname+
".fElements/"+friendName+
"."+bname+
"Med3.fElements").Data());
3378 tMain->SetAlias((friendName+
"."+bname+
"_Med5Ratio").Data(), (friendName+
"."+bname+
".fElements/"+friendName+
"."+bname+
"Med5.fElements").Data());
3379 tMain->SetAlias((friendName+
"."+bname+
"_Par6GRatio").Data(), (friendName+
"."+bname+
".fElements/"+friendName+
"."+bname+
"Par6G.fElements").Data());
3380 tMain->SetAlias((friendName+
"."+bname+
"_Med3Delta").Data(), (friendName+
"."+bname+
".fElements-"+friendName+
"."+bname+
"Med3.fElements").Data());
3381 tMain->SetAlias((friendName+
"."+bname+
"_Med5Delta").Data(), (friendName+
"."+bname+
".fElements-"+friendName+
"."+bname+
"Med5.fElements").Data());
3382 tMain->SetAlias((friendName+
"."+bname+
"_Par6GDelta").Data(), (friendName+
"."+bname+
".fElements-"+friendName+
"."+bname+
"Par6G.fElements").Data());
static AliTPCcalibDB * Instance()
TObjArray * GetCEfitsDrift() const
static Double_t EvalGraphConst(TGraph *const graph, Double_t xref)
AliTPCCalPad * fCETmean
central electrode mean time information
TMap * fCurrentRefMap
reference data map of entries currently loaded
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
AliTPCCalPad * fRefPulserTrms
Reference pulser rms time information.
UInt_t GetNPads(UInt_t sector, UInt_t row) const
Float_t GetZSigma() const
TObjArray * GetCEData() const
Float_t fCETmaxLimitAbs
maximum variation in CE data before pads will be treated as outliers
TFile * Open(const char *filename, Long64_t &nevents)
AliTPCCalPad * fRefCETrms
Reference central electrode rms time information.
AliTPCCalPad * fRefPadNoise
Reference noise information.
void ProcessGoofie(TVectorD &vecEntries, TVectorD &vecMedian, TVectorD &vecMean, TVectorD &vecRMS)
AliTPCCalROC * GetCalROC(Int_t sector) const
AliTPCCalPad * fRefALTROAcqStop
Reference accquistion stop time bin.
static TTree * ConnectCalPadTrees(TString baseDir, TString pattern, TTree *tMain, Bool_t checkAliases)
AliTPCCalPad * fRefPedestalMasked
Reference masked channels in pedestal run.
AliTPCCalPad * fRefPedestals
Reference pedestal information.
AliTPCCalPad * CreatePulserOutlyerMap(Int_t &noutliersPulser, AliTPCCalPad *const pulserOut=0, Float_t cutTime=3, Float_t cutnRMSQ=5, Float_t cutnRMSrms=5)
Float_t GetMeanAltro(const AliTPCCalROC *roc, const Int_t row, const Int_t pad, AliTPCCalROC *const rocOut=0x0)
static Int_t GetNearest(TGraph *graph, Double_t xref, Double_t &dx, Double_t &y)
TArrayI fRunsStart
start time for given run
AliTPCCalPad * GetMaxCharge() const
static Double_t GetVDriftTPC(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0)
static void FilterGoofie(AliDCSSensorArray *goofieArray, Double_t deltaT=2, Double_t cutSigma=4., Double_t minVdn=8.5, Double_t maxVdn=9.05, TTreeSRedirector *const pcstream=0)
Double_t GetMedian(AliTPCCalROC *const outlierROC=0, EPadType padType=kAll) const
Double_t GetRMS(AliTPCCalROC *const outlierROC=0, EPadType padType=kAll) const
AliTPCCalPad * GetAltroMasked(const char *cdbPath, const char *name)
Bool_t CreateGUIRefTree(const char *filename="")
virtual ~AliTPCcalibDButil()
AliTPCmapper * fMapper
TPC mapping handler.
void ProcessQAData(TVectorD &vQaOcc, TVectorD &vQaQtot, TVectorD &vQaQmax)
Manager and of geomety classes for set: TPC.
static void FilterTracks(Int_t run, Double_t cutSigma=20., TTreeSRedirector *const pcstream=0)
UInt_t GetNRows(UInt_t sector) const
Float_t GetDriftV() const
Int_t GetReferenceRun(const char *type) const
Float_t fIrocTimeOffset
timing offset between IROC and OROC in timebins
static TObjArray * SmoothRelKalman(TObjArray *const array, const TMatrixD *statP, Bool_t direction, Float_t sigmaCut)
TFile f("CalibObjects.root")
Float_t GetValue(UInt_t row, UInt_t pad) const
void Multiply(Float_t c1)
AliTPCCalPad * fRefPulserTmean
Reference pulser mean time information.
AliTPCdataQA * fRefDataQA
Reference data QA.
Double_t GetMedian(AliTPCCalPad *outlierPad=0, AliTPCCalROC::EPadType padType=AliTPCCalROC::kAll) const
static TGraphErrors * FilterGraphMedianErr(TGraphErrors *graph, Float_t sigmaCut, Double_t &medianY)
static Float_t FilterSensor(AliDCSSensor *sensor, Double_t ymin, Double_t ymax, Double_t maxdy, Double_t sigmaCut)
TTreeSRedirector * pcstream
UInt_t GetNChannels(UInt_t sector) const
TObjArray * arrInputTreesDistortionCalib
AliTPCParam * GetParameters() const
static Double_t GetVDriftTPCCE(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2)
AliTPCCalPad * fRefCETmean
Reference central electrode mean time information.
AliTPCCalPad * GetPedestals() const
static void FilterCE(Double_t deltaT=100, Double_t cutAbs=10, Double_t cutSigma=4., TTreeSRedirector *const pcstream=0)
void UpdateRefDataFromOCDB()
AliTPCCalPad * GetNTimeBins() const
void GlobalFit(const AliTPCCalROC *ROCoutliers, Bool_t robust, TVectorD &fitParam, TMatrixD &covMatrix, Float_t &chi2, Int_t fitType=1, Double_t chi2Threshold=5, Double_t robustFraction=0.7, Double_t err=1, EPadType padType=kAll)
TString fRefValidity
validity range of reference data
Int_t GetEventCounter() const
Float_t fPulQminLimit
minimum charge value for Pulser Signals before pads will be treated as outliers
AliTPCCalPad * GetTimePosition() const
AliTPCdataQA * GetDataQA() const
AliTPCCalPad * fRefALTROMasked
Reference ALTRO masked channels information.
Int_t GetFEC(Int_t roc, Int_t padrow, Int_t pad) const
static Double_t GetTime0TPCITS(Double_t &dist, Int_t run, Int_t timeStamp)
Float_t GetL1Delay() const
Class providing the calculation of derived quantities (mean,rms,fits,...) of calibration entries...
void ProcessNoiseVariations(TVectorF &noiseDeviations)
AliTPCCalPad * CreatePadTime0(Int_t model, Double_t &gyA, Double_t &gyC, Double_t &chi2A, Double_t &chi2C)
static TMatrixD * MakeStatRelKalman(TObjArray *const array, Float_t minFraction, Int_t minStat, Float_t maxvd)
AliTPCCalPad * fPedestals
pedestal information
static AliTPCCalPad * CreateCalPadFit(const char *fitFormula, const TVectorD &fitParamSideA, const TVectorD &fitParamSideC)
Int_t fNpulserOutliers
number of outliers from Pulser calibration
AliDCSSensorArray * fGoofieArray
Goofie Data.
TArrayI fRuns
run list with OCDB info
AliTPCCalPad * fPulserOutlier
pulser outlier map
static TGraph * FilterGraphMedian(TGraph *const graph, Float_t sigmaCut, Double_t &medianY)
void ProcessPulser(TVectorD &vMeanTime)
static Float_t FilterTemperature(AliTPCSensorTempArray *tempArray, Double_t ymin=15, Double_t ymax=22, Double_t sigmaCut=5)
UInt_t GetNPads(UInt_t row) const
AliTPCCalPad * GetRefCalPad(AliCDBEntry *entry, const char *objName)
AliTPCCalPad * fRefALTROFPED
Reference fixed pedestal value.
AliTPCCalPad * fPulserQmean
pulser mean q information
UInt_t GetNInnerSector() const
AliTPCCalPad * GetCEQmean() const
const char * GetRefValidity() const
TArrayI fRunsStop
stop time for given run
TObjArray * GetCErocTtime() const
Bool_t HasRefChanged(const char *cdbPath)
void ProcessNoiseData(TVectorD &vNoiseMean, TVectorD &vNoiseMeanSenRegions, TVectorD &vNoiseRMS, TVectorD &vNoiseRMSSenRegions, Int_t &nonMaskedZero, Int_t &nNaN)
AliTPCCalPad * fPadNoise
noise information
Double_t GetMean(AliTPCCalROC *const outlierROC=0, EPadType padType=kAll) const
void PulserOutlierMap(AliTPCCalPad *pulOut, const AliTPCCalPad *pulT, const AliTPCCalPad *pulQ)
void UpdateRunInformations(Int_t run, Bool_t force=kFALSE)
AliTPCCalPad * fRefPulserOutlier
Reference pulser outlier map.
Geometry class for a single ROC.
Float_t GetTSample() const
std::vector< RunInfo > runs
AliTPCCalPad * fRefCEQmean
Reference central electrode mean q information.
AliTPCCalPad * GetPulserQmean() const
void SetValue(UInt_t row, UInt_t pad, Float_t vd)
void ProcessPedestalVariations(TVectorF &pedestalDeviations)
AliTPCCalPad * GetCETmean() const
AliTPCCalPad * GetPadNoise() const
AliTPCCalPad * GetPulserTmean() const
AliTPCCalPad * GetPulserTrms() const
AliTPCCalibRaw * fRefCalibRaw
Reference raw calibration object.
AliTPCCalPad * fCETrms
central electrode rms time information
AliTPCCalibRaw * fCalibRaw
raw calibration object
TObjArray * GetTimeVdriftSplineRun(Int_t run)
void ProcessALTROConfig(Int_t &nMasked)
AliTPCCalPad * fPulserTmean
pulser mean time information
Int_t GetChip(Int_t roc, Int_t padrow, Int_t pad) const
TPC calibration base class for one ROC.
AliTPCCalPad * GetNPads() const
AliTPCCalPad * fRefALTROZsThr
Reference zero suppression threshol.
static void Sort(TGraph *graph)
static TGraph * FilterGraphMedianAbs(TGraph *graph, Float_t cut, Double_t &medianY)
Int_t GetCurrentReferenceRun(const char *type) const
const char * GetGUIRefTreeDefaultName()
void UpdateRefPulserOutlierMap()
AliTPCCalPad * GetMeanCharge() const
UInt_t GetNchannels() const
AliTPCCalPad * fRefALTROAcqStart
Reference accquistion start time bin.
AliDCSSensorArray * GetGoofieSensors(Int_t run)
void DumpToFile(const char *fileName)
AliTPCCalPad * fRefPulserQmean
Reference pulser mean q information.
TObjArray * GetCErocQtime() const
static Double_t GetVDriftTPCLaserTracksCommon(Double_t &dist, Int_t timeStamp, Double_t deltaT, Int_t side, TObjArray *const array)
static TTree * ConnectGainTrees(TString baseDir)
Preprocessor class for HLT and DAQ.
void SetReferenceRun(Int_t run=-1)
void ProcessPulserVariations(TVectorF &pulserQdeviations, Float_t &varQMean, Int_t &npadsOutOneTB, Int_t &npadsOffAdd)
TPC calibration class for parameters which saved per pad.
static void SmoothGraph(TGraph *graph, Double_t delta)
void SetRefFile(const char *filename)
static Double_t GetVDriftTPCITS(Double_t &dist, Int_t run, Int_t timeStamp)
AliCDBEntry * GetRefEntry(const char *cdbPath)
AliTPCCalPad * GetNLocalMaxima() const
static Double_t GetVDriftTPCLaserTracks(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2)
AliTPCCalPad * CreateCEOutlyerMap(Int_t &noutliersCE, AliTPCCalPad *const ceOut=0, Float_t minSignal=10, Float_t cutTrmsMin=0.9, Float_t cutTrmsMax=1.2, Float_t cutMaxDistT=0.7)
Int_t MakeRunList(Int_t startRun, Int_t stopRun)
TMap * fRefMap
latest map to reference information
static Double_t GetLaserTime0(Int_t run, Int_t timeStamp, Int_t deltaT, Int_t side)
static AliTPCROC * Instance()
void GlobalSidesFit(const AliTPCCalPad *PadOutliers, const char *fitFormula, TVectorD &fitParamSideA, TVectorD &fitParamSideC, TMatrixD &covMatrixSideA, TMatrixD &covMatrixSideC, Float_t &chi2SideA, Float_t &chi2SideC, AliTPCCalPad *pointError=0, Bool_t robust=kFALSE, Double_t robustFraction=0.7)
void AddComponent(TObject *obj)
static AliTPCCalROC * CreateGlobalFitCalROC(TVectorD &fitParam, Int_t sector, EPadType padType=kAll, AliTPCCalROC *oldTPCCalROC=0)
Float_t GetZLength(Int_t sector=0) const
AliTPCCalPad * GetNoThreshold() const
static TTree * ConnectPulserTrees(TString baseDir, TTree *tree=0)
AliTPCCalPad * fCEQmean
central electrode mean q information
AliTPCCalPad * fRefCEMasked
Reference masked channels in laser run.
AliTPCCalPad * fPulserTrms
pulser rms time information
AliTPCCalPad * CreatePadTime0CE(TVectorD &fitResultsA, TVectorD &fitResultsC, Int_t &nOut, Double_t &chi2A, Double_t &chi2C, const char *dumpfile=0)
AliTPCCalPad * GetALTROMasked() const
void UpdatePulserOutlierMap()
static TTree * ConnectDistortionTrees(TString baseDir, TString selection, TTree *tMain)
AliTPCdataQA * fDataQA
data qa
void ProcessCEdata(const char *fitFormula, TVectorD &fitResultsA, TVectorD &fitResultsC, Int_t &noutliersCE, Double_t &chi2A, Double_t &chi2C, AliTPCCalPad *const outCE=0)
AliTPCCalPad * fRefPulserMasked
Reference masked channels in pulser run.
AliTPCcalibDB * fCalibDB
pointer to calibDB object
AliTPCCalPad * GetCETrms() const
void Multiply(Float_t c1)
void ProcessCEgraphs(TVectorD &vecTEntries, TVectorD &vecTMean, TVectorD &vecTRMS, TVectorD &vecTMedian, TVectorD &vecQEntries, TVectorD &vecQMean, TVectorD &vecQRMS, TVectorD &vecQMedian, Float_t &driftTimeA, Float_t &driftTimeC)
Double_t GetPTRelative(UInt_t absTimeSec, Int_t side)
AliTPCCalibRaw * GetCalibRaw() const
Int_t FindRunTPC(Int_t itime, Bool_t debug=kFALSE)
static Double_t GetVDriftTPCLaserTracksOnline(Double_t &dist, Int_t, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2)
static Double_t GetTriggerOffsetTPC(Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0)
AliTPCCalPad * fALTROMasked
ALTRO masked channels information.