249 #include <TObjArray.h> 255 #include <TVectorF.h> 256 #include <TVectorD.h> 257 #include <TVector3.h> 258 #include <TMatrixD.h> 261 #include <TGraphErrors.h> 264 #include <TDirectory.h> 267 #include <TCollection.h> 268 #include <TTimeStamp.h> 271 #include <TSpectrum.h> 275 #include "AliRawReader.h" 276 #include "AliRawReaderRoot.h" 277 #include "AliRawReaderDate.h" 278 #include "AliRawEventHeaderBase.h" 313 fNoiseThresholdMax(5.),
314 fNoiseThresholdSum(8.),
315 fROCblackDataDown(-1),
317 fIsZeroSuppressed(kFALSE),
326 fCalRocArrayT0Err(72),
329 fCalRocArrayOutliers(72),
337 fParamArrayEventPol1(72),
338 fParamArrayEventPol2(72),
339 fTMeanArrayEvent(72),
340 fQMeanArrayEvent(72),
347 fPadTimesArrayEvent(72),
349 fPadRMSArrayEvent(72),
350 fPadPedestalArrayEvent(72),
360 fVTime0OffsetCounter(72),
363 fCurrentCETimeRef(0),
376 SetNameTitle(
"AliTPCCalibCE",
"AliTPCCalibCE");
380 for (Int_t i=0;i<1024;++i) fPadSignal[i]=0;
381 for (Int_t i=0;i<14;++i){
385 for (Int_t i=0; i<100; ++i) fBinsLastAna[i]=0;
390 fNbinsT0(sig.fNbinsT0),
391 fXminT0(sig.fXminT0),
392 fXmaxT0(sig.fXmaxT0),
393 fNbinsQ(sig.fNbinsQ),
396 fNbinsRMS(sig.fNbinsRMS),
397 fXminRMS(sig.fXminRMS),
398 fXmaxRMS(sig.fXmaxRMS),
399 fPeakDetMinus(sig.fPeakDetMinus),
400 fPeakDetPlus(sig.fPeakDetPlus),
401 fPeakIntMinus(sig.fPeakIntMinus),
402 fPeakIntPlus(sig.fPeakIntPlus),
403 fNoiseThresholdMax(sig.fNoiseThresholdMax),
404 fNoiseThresholdSum(sig.fNoiseThresholdSum),
405 fROCblackDataDown(-1),
407 fIsZeroSuppressed(sig.fIsZeroSuppressed),
416 fCalRocArrayT0Err(72),
419 fCalRocArrayOutliers(72),
423 fMeanT0rms(sig.fMeanT0rms),
424 fMeanQrms(sig.fMeanQrms),
425 fMeanRMSrms(sig.fMeanRMSrms),
427 fParamArrayEventPol1(72),
428 fParamArrayEventPol2(72),
429 fTMeanArrayEvent(72),
430 fQMeanArrayEvent(72),
431 fVEventTime(sig.fVEventTime),
432 fVEventNumber(sig.fVEventNumber),
433 fVTime0SideA(sig.fVTime0SideA),
434 fVTime0SideC(sig.fVTime0SideC),
437 fPadTimesArrayEvent(72),
439 fPadRMSArrayEvent(72),
440 fPadPedestalArrayEvent(72),
450 fVTime0OffsetCounter(72),
453 fCurrentCETimeRef(0),
454 fProcessOld(sig.fProcessOld),
455 fProcessNew(sig.fProcessNew),
456 fAnalyseNew(sig.fAnalyseNew),
467 for (Int_t iSec = 0; iSec < 72; ++iSec){
473 const TH2S *hQ = (TH2S*)sig.
fHistoQArray.UncheckedAt(iSec);
474 const TH2S *hT0 = (TH2S*)sig.
fHistoT0Array.UncheckedAt(iSec);
483 TH2S *hNew =
new TH2S(*hQ);
484 hNew->SetDirectory(0);
488 TH2S *hNew =
new TH2S(*hT0);
489 hNew->SetDirectory(0);
493 TH2S *hNew =
new TH2S(*hRMS);
494 hNew->SetDirectory(0);
501 for (Int_t iSec=0; iSec<72; ++iSec){
506 for (Int_t iEvent=0; iEvent<arr->GetSize(); ++iEvent)
515 for (Int_t iEvent=0; iEvent<arr->GetSize(); ++iEvent)
536 for (Int_t i=0; i<sig.
fArrHnDrift.GetEntries();++i){
539 TObject *newo=o->Clone(
"fHnDrift");
549 for (Int_t i=0;i<14;++i){
639 SetNameTitle(
"AliTPCCalibCE",
"AliTPCCalibCE");
642 if (config->GetValue(
"FirstTimeBin"))
fFirstTimeBin = ((TObjString*)config->GetValue(
"FirstTimeBin"))->GetString().Atoi();
643 if (config->GetValue(
"LastTimeBin"))
fLastTimeBin = ((TObjString*)config->GetValue(
"LastTimeBin"))->GetString().Atoi();
644 if (config->GetValue(
"NbinsT0"))
fNbinsT0 = ((TObjString*)config->GetValue(
"NbinsT0"))->GetString().Atoi();
645 if (config->GetValue(
"XminT0"))
fXminT0 = ((TObjString*)config->GetValue(
"XminT0"))->GetString().Atof();
646 if (config->GetValue(
"XmaxT0"))
fXmaxT0 = ((TObjString*)config->GetValue(
"XmaxT0"))->GetString().Atof();
647 if (config->GetValue(
"NbinsQ"))
fNbinsQ = ((TObjString*)config->GetValue(
"NbinsQ"))->GetString().Atoi();
648 if (config->GetValue(
"XminQ"))
fXminQ = ((TObjString*)config->GetValue(
"XminQ"))->GetString().Atof();
649 if (config->GetValue(
"XmaxQ"))
fXmaxQ = ((TObjString*)config->GetValue(
"XmaxQ"))->GetString().Atof();
650 if (config->GetValue(
"NbinsRMS"))
fNbinsRMS = ((TObjString*)config->GetValue(
"NbinsRMS"))->GetString().Atoi();
651 if (config->GetValue(
"XminRMS"))
fXminRMS = ((TObjString*)config->GetValue(
"XminRMS"))->GetString().Atof();
652 if (config->GetValue(
"XmaxRMS"))
fXmaxRMS = ((TObjString*)config->GetValue(
"XmaxRMS"))->GetString().Atof();
653 if (config->GetValue(
"PeakDetMinus"))
fPeakDetMinus = ((TObjString*)config->GetValue(
"PeakDetMinus"))->GetString().Atoi();
654 if (config->GetValue(
"PeakDetPlus"))
fPeakDetPlus = ((TObjString*)config->GetValue(
"PeakDetPlus"))->GetString().Atoi();
655 if (config->GetValue(
"PeakIntMinus"))
fPeakIntMinus = ((TObjString*)config->GetValue(
"PeakIntMinus"))->GetString().Atoi();
656 if (config->GetValue(
"PeakIntPlus"))
fPeakIntPlus = ((TObjString*)config->GetValue(
"PeakIntPlus"))->GetString().Atoi();
657 if (config->GetValue(
"NoiseThresholdMax"))
fNoiseThresholdMax = ((TObjString*)config->GetValue(
"NoiseThresholdMax"))->GetString().Atof();
658 if (config->GetValue(
"NoiseThresholdSum"))
fNoiseThresholdSum = ((TObjString*)config->GetValue(
"NoiseThresholdSum"))->GetString().Atof();
659 if (config->GetValue(
"IsZeroSuppressed"))
fIsZeroSuppressed = (Bool_t)((TObjString*)config->GetValue(
"IsZeroSuppressed"))->GetString().Atoi();
660 if (config->GetValue(
"UseL1Phase"))
fUseL1Phase = (Bool_t)((TObjString*)config->GetValue(
"UseL1Phase"))->GetString().Atoi();
661 if (config->GetValue(
"SecRejectRatio"))
fSecRejectRatio = ((TObjString*)config->GetValue(
"SecRejectRatio"))->GetString().Atof();
663 if (config->GetValue(
"ProcessOld"))
fProcessOld = (Bool_t)((TObjString*)config->GetValue(
"ProcessOld"))->GetString().Atoi();
664 if (config->GetValue(
"ProcessNew"))
fProcessNew = (Bool_t)((TObjString*)config->GetValue(
"ProcessNew"))->GetString().Atoi();
665 if (config->GetValue(
"AnalyseNew"))
fAnalyseNew = (Bool_t)((TObjString*)config->GetValue(
"AnalyseNew"))->GetString().Atoi();
668 for (Int_t i=0;i<14;++i){
682 if (&source ==
this)
return *
this;
726 const Int_t icTimeBin,
727 const Float_t csignal)
736 if (icRow<0)
return 0;
737 if (icPad<0)
return 0;
738 if (icTimeBin<0)
return 0;
771 const Int_t length,
const UInt_t startTimeBin,
const UShort_t* signal)
775 UShort_t timeBin = (UShort_t)startTimeBin;
783 if (sector<36)
return;
786 if (length<3||length>10)
return;
789 if (timeBin<280)
return;
791 Int_t cePeak=((sector/18)%2)*7+6;
795 fHnDrift->GetAxis(4)->SetRangeUser(timeBurst-2*60,timeBurst+2*60);
816 Double_t x[
kHnBinsDV]={(Double_t)sector,(Double_t)row,
817 (Double_t)padFill,(Double_t)timeBin,timeBurst};
819 for (Int_t iTimeBin = 0; iTimeBin<length; iTimeBin++){
820 Float_t sig=(Float_t)signal[iTimeBin];
834 for (Int_t iside=0;iside<2;++iside){
837 fHnDrift->GetAxis(0)->SetRangeUser(36+iside*18,53+iside*18);
838 TH1D *hproj=
fHnDrift->Projection(3);
839 hproj->GetXaxis()->SetRangeUser(700,1030);
840 Int_t maxbin=hproj->GetMaximumBin();
841 Double_t binc=hproj->GetBinCenter(maxbin);
842 hproj->GetXaxis()->SetRangeUser(binc-5,binc+5);
844 fPeaks[add+6]=(UShort_t)TMath::Nint(binc);
848 hproj->GetXaxis()->SetRangeUser(0,maxbin-10);
850 s.Search(hproj,2,
"goff");
852 TMath::Sort(6,s.GetPositionX(),index,kFALSE);
853 for (Int_t i=0; i<6; ++i){
854 fPeaks[i+add]=(UShort_t)TMath::Nint(s.GetPositionX()[index[i]]);
892 Bool_t noPedestal = kTRUE;
916 const Int_t kPedMax = 100;
925 UShort_t histo[kPedMax];
926 memset(histo,0,kPedMax*
sizeof(UShort_t));
931 if (padSignal<=0)
continue;
932 if (padSignal>max && i>10) {
936 if (padSignal>kPedMax-1)
continue;
937 histo[int(padSignal+0.5)]++;
941 for (Int_t i=1; i<kPedMax; ++i){
942 if (count1<count0*0.5) median=i;
947 Float_t count=histo[median] ,mean=histo[median]*median, rms=histo[median]*median*median ;
949 for (Int_t idelta=1; idelta<10; ++idelta){
950 if (median-idelta<=0)
continue;
951 if (median+idelta>kPedMax)
continue;
952 if (count<part*count1){
953 count+=histo[median-idelta];
954 mean +=histo[median-idelta]*(median-idelta);
955 rms +=histo[median-idelta]*(median-idelta)*(median-idelta);
956 count+=histo[median+idelta];
957 mean +=histo[median+idelta]*(median+idelta);
958 rms +=histo[median+idelta]*(median+idelta)*(median+idelta);
963 rms = TMath::Sqrt(TMath::Abs(rms/count-mean*mean));
978 if ( sector < 18 ) sector+=36;
981 if ( !vtRef )
return;
982 Int_t vtRefSize= vtRef->GetNrows();
983 if ( vtRefSize <
fNevents+1 ) vtRef->ResizeTo(vtRefSize+100);
985 while ( (*vtRef)[vtRefSize]==0 && vtRefSize>=0 ) --vtRefSize;
996 Float_t ceQmax =0, ceQsum=0, ceTime=0, ceRMS=0;
1002 Float_t minDist = 25;
1005 for ( Int_t imax=0; imax<maxima.GetNrows(); ++imax){
1008 if ( TMath::Abs( tmean-maxima[imax] ) < minDist ) {
1009 minDist = tmean-maxima[imax];
1010 cemaxpos = (Int_t)maxima[imax];
1016 for (Int_t i=cemaxpos-kCemin; i<=cemaxpos+kCemax; ++i){
1020 ceTime+=signal*(i+0.5);
1021 ceRMS +=signal*(i+0.5)*(i+0.5);
1027 if (ceQmax&&ceQsum>ceSumThreshold) {
1029 ceRMS = TMath::Sqrt(TMath::Abs(ceRMS/ceQsum-ceTime*ceTime));
1040 if ( fCurrentSector<fParam->GetNInnerSector() ) norm*=3./2.;
1063 for (Int_t iTime = pos; iTime>pos-tminus; --iTime)
1065 for (Int_t iTime = pos, iTime2=pos; iTime<pos+tplus; ++iTime, ++iTime2){
1083 if (count<maxima.GetNrows()){
1084 maxima.GetMatrixArray()[count++]=i;
1098 TVectorF maxima(15);
1110 Double_t meanT = param[1];
1111 Double_t sigmaT = param[2];
1163 Double_t time0Side[2];
1164 Double_t time0SideCount[2];
1165 time0Side[0]=0;time0Side[1]=0;time0SideCount[0]=0;time0SideCount[1]=0;
1166 for ( Int_t iSec = 36; iSec<72; ++iSec ){
1167 time0Side[(iSec/18)%2] +=
fVTime0Offset.GetMatrixArray()[iSec];
1170 if ( time0SideCount[0] >0 )
1171 time0Side[0]/=time0SideCount[0];
1172 if ( time0SideCount[1] >0 )
1173 time0Side[1]/=time0SideCount[1];
1175 AliDebug(3,Form(
"time0Side/time0SideCount: A=%.2f/%.2f, C=%.2f/%.2f",time0Side[0],time0SideCount[0],time0Side[1],time0SideCount[1]));
1178 for ( Int_t iSec = 0; iSec<72; ++iSec ){
1179 AliDebug(4,Form(
"Processing sector '%02d'\n",iSec));
1182 if ( !hMeanT )
continue;
1186 AliDebug(3,Form(
"Skipping sec. '%02d': Not enough statistics\n",iSec));
1190 Double_t entries = hMeanT->GetEffectiveEntries();
1192 Short_t *arr = hMeanT->GetArray()+1;
1194 for ( ibin=0; ibin<hMeanT->GetNbinsX(); ++ibin){
1196 if ( sum>=(entries/2.) )
break;
1207 Int_t vSize=vMeanTime->GetNrows();
1209 vMeanTime->ResizeTo(vSize+100);
1221 vMeanTime->GetMatrixArray()[
fNevents]=median;
1226 if ( !vTimes )
continue;
1233 vSize=vMeanQ->GetNrows();
1235 vMeanQ->ResizeTo(vSize+100);
1239 vMeanQ->GetMatrixArray()[
fNevents]=meanQ;
1242 Float_t time = (*vTimes).GetMatrixArray()[iChannel];
1247 if ( TMath::Abs(time) < 1e-30 ) calIrocOutliers.
SetValue(iChannel,1);
1251 if ( TMath::Abs(time) < 1e-30 ) calOrocOutliers.
SetValue(iChannel,1);
1257 GetHistoT0(iSec,kTRUE)->Fill( time-time0Side[(iSec/18)%2],iChannel );
1272 UInt_t channel=iChannel;
1291 Double_t t0Side = time0Side[(iSec/18)%2];
1292 (*streamer) <<
"DataPad" <<
1296 "Sector="<< sector <<
1300 "PadSec="<< channel <<
1301 "Time0Sec=" << t0Sec <<
1302 "Time0Side=" << t0Side <<
1306 "MeanQ=" << meanQ <<
1328 calIroc->
GlobalFit(&calIrocOutliers,0,paramPol1,matPol1,chi2Pol1,0);
1329 calIroc->
GlobalFit(&calIrocOutliers,0,paramPol2,matPol2,chi2Pol2,1);
1331 calOroc->
GlobalFit(&calOrocOutliers,0,paramPol1,matPol1,chi2Pol1,0);
1332 calOroc->
GlobalFit(&calOrocOutliers,0,paramPol2,matPol2,chi2Pol2,1);
1343 (*streamer) <<
"DataRoc" <<
1348 "hMeanT.=" << hMeanT <<
1349 "median=" << median <<
1350 "paramPol1.=" << ¶mPol1 <<
1351 "paramPol2.=" << ¶mPol2 <<
1352 "matPol1.=" << &matPol1 <<
1353 "matPol2.=" << &matPol2 <<
1354 "chi2Pol1=" << chi2Pol1 <<
1355 "chi2Pol2=" << chi2Pol2 <<
1364 if ( nSecMeanT == 0 )
return;
1386 Int_t nbinsY, Float_t ymin, Float_t ymax,
1387 const Char_t *type, Bool_t force)
1392 if ( !force || arr->UncheckedAt(sector) )
1393 return (TH2S*)arr->UncheckedAt(sector);
1397 TH2S* hist =
new TH2S(Form(
"hCalib%s%.2d",type,sector),Form(
"%s calibration histogram sector %.2d",type,sector),
1400 hist->SetDirectory(0);
1401 arr->AddAt(hist,sector);
1433 const Char_t *type, Bool_t force)
1438 if ( !force || arr->UncheckedAt(sector) )
1439 return (TH1S*)arr->UncheckedAt(sector);
1443 TH1S* hist =
new TH1S(Form(
"hCalib%s%.2d",type,sector),Form(
"%s calibration histogram sector %.2d",type,sector),
1445 hist->SetDirectory(0);
1446 arr->AddAt(hist,sector);
1456 return GetHisto(sector, arr,
"LastTmean", force);
1464 if ( !force || arr->UncheckedAt(sector) )
1465 return (TVectorF*)arr->UncheckedAt(sector);
1467 TVectorF *vect =
new TVectorF(size);
1468 arr->AddAt(vect,sector);
1534 if ( !force || arr->UncheckedAt(sector) )
1541 arr->AddAt(croc,sector);
1595 if ( !force || arr->UncheckedAt(sector) )
1596 return (
TObjArray*)arr->UncheckedAt(sector);
1602 arr->AddAt(newArr,sector);
1631 TTimeStamp begin(2010,01,01,0,0,0);
1632 TTimeStamp end(2035,01,01,0,0,0);
1633 Int_t nbinsTime=(end.GetSec()-begin.GetSec())/60;
1635 Int_t bins[
kHnBinsDV] = { 72, 96, 140, 1030, nbinsTime};
1636 Double_t xmin[
kHnBinsDV] = { 0., 0., 0., 0., (Double_t)begin.GetSec()};
1637 Double_t xmax[
kHnBinsDV] = {72., 96., 140., 1030., (Double_t)end.GetSec()};
1640 fHnDrift->GetAxis(0)->SetNameTitle(
"ROC",
"Read-out chamber number");
1641 fHnDrift->GetAxis(1)->SetNameTitle(
"Row",
"Row number");
1642 fHnDrift->GetAxis(2)->SetNameTitle(
"Pad",
"Pad number");
1643 fHnDrift->GetAxis(3)->SetNameTitle(
"Timebin",
"Time bin [x100ns]");
1644 fHnDrift->GetAxis(4)->SetNameTitle(
"EventTime",
"Event time");
1665 for ( Int_t i=0; i<72; ++i ){
1668 fVMeanQ.GetMatrixArray()[i]=0;
1694 for (Int_t iSec=0; iSec<72; ++iSec){
1701 TDirectory *dir = hRefQmerge->GetDirectory(); hRefQmerge->SetDirectory(0);
1703 if ( hRefQ ) hRefQ->Add(hRefQmerge);
1705 TH2S *hist =
new TH2S(*hRefQmerge);
1706 hist->SetDirectory(0);
1709 hRefQmerge->SetDirectory(dir);
1712 TDirectory *dir = hRefT0merge->GetDirectory(); hRefT0merge->SetDirectory(0);
1714 if ( hRefT0 ) hRefT0->Add(hRefT0merge);
1716 TH2S *hist =
new TH2S(*hRefT0merge);
1717 hist->SetDirectory(0);
1720 hRefT0merge->SetDirectory(dir);
1722 if ( hRefRMSmerge ){
1723 TDirectory *dir = hRefRMSmerge->GetDirectory(); hRefRMSmerge->SetDirectory(0);
1725 if ( hRefRMS ) hRefRMS->Add(hRefRMSmerge);
1727 TH2S *hist =
new TH2S(*hRefRMSmerge);
1728 hist->SetDirectory(0);
1731 hRefRMSmerge->SetDirectory(dir);
1739 for (Int_t iSec=0; iSec<72; ++iSec){
1747 TVectorF *vMeanTime = 0x0;
1748 TVectorF *vMeanQ = 0x0;
1751 if ( arrPol1CE && arrPol2CE ){
1754 arrPol1->Expand(
fNevents+nCEevents);
1755 arrPol2->Expand(
fNevents+nCEevents);
1757 if ( vMeanTimeCE && vMeanQCE ){
1760 vMeanTime->ResizeTo(
fNevents+nCEevents);
1761 vMeanQ->ResizeTo(
fNevents+nCEevents);
1764 for (Int_t iEvent=0; iEvent<nCEevents; ++iEvent){
1765 if ( arrPol1CE && arrPol2CE ){
1768 if ( paramPol1 && paramPol2 ){
1773 if ( vMeanTimeCE && vMeanQCE ){
1774 vMeanTime->GetMatrixArray()[
fNevents+iEvent]=vMeanTimeCE->GetMatrixArray()[iEvent];
1775 vMeanQ->GetMatrixArray()[
fNevents+iEvent]=vMeanQCE->GetMatrixArray()[iEvent];
1791 for (Int_t iEvent=0; iEvent<nCEevents; ++iEvent){
1792 Double_t evTime = eventTimes.GetMatrixArray()[iEvent];
1793 Double_t evId = eventIds.GetMatrixArray()[iEvent];
1794 Float_t t0SideA = time0SideA.GetMatrixArray()[iEvent];
1795 Float_t t0SideC = time0SideC.GetMatrixArray()[iEvent];
1806 AliError(
"Number of bursts in the instances to merge are different. No merging done!");
1809 THnSparseI *h=(THnSparseI*)
fArrHnDrift.UncheckedAt(i);
1810 THnSparseI *hce=(THnSparseI*)ce->
fArrHnDrift.UncheckedAt(i);
1811 if (h && hce) h->Add(hce);
1812 else AliError(Form(
"AliTPCCalibCE::Merge - one THnSparse missing in burst %d",i));
1832 while ( (o=next()) ){
1860 if ( (sector<-2) || (sector>71) )
return 0x0;
1861 if ( (xVariable<0) || (xVariable>2) )
return 0x0;
1862 if ( (fitType<0) || (fitType>3) )
return 0x0;
1863 if ( sector>=0 && fitType==2 && !
GetTMeanEvents(sector) )
return 0x0;
1864 if ( sector>=0 && fitType==3 && !
GetQMeanEvents(sector) )
return 0x0;
1865 if ( sector<0 && fitType!=2)
return 0x0;
1869 if ( (fitParameter<0) || (fitParameter>2) )
return 0x0;
1871 if ( aType->At(sector)==0x0 )
return 0x0;
1873 else if ( fitType==1 ){
1874 if ( (fitParameter<0) || (fitParameter>5) )
return 0x0;
1876 if ( aType->At(sector)==0x0 )
return 0x0;
1882 if ( xVariable == 2 ) {
1884 for ( Int_t i=0;i<
fNevents; ++i) (*xVar)[i]=i;
1887 Double_t *x =
new Double_t[
fNevents];
1888 Double_t *y =
new Double_t[
fNevents];
1890 for (Int_t ievent =0; ievent<
fNevents; ++ievent){
1893 if ( events->GetSize()<=ievent )
break;
1895 if ( (v!=0x0) && ((*xVar)[ievent]>0) ) { x[
npoints]=(*xVar)[ievent]; y[
npoints]=(*v)[fitParameter]; npoints++;}
1896 }
else if (fitType == 2) {
1897 Double_t xValue=(*xVar)[ievent];
1902 if ( yValue>0 && xValue>0 ) { x[
npoints]=xValue; y[
npoints]=yValue;npoints++;}
1903 }
else if (fitType == 3) {
1904 Double_t xValue=(*xVar)[ievent];
1906 if ( yValue>0 && xValue>0 ) { x[
npoints]=xValue; y[
npoints]=yValue;npoints++;}
1910 TGraph *
gr =
new TGraph(npoints);
1912 Int_t *sortIndex =
new Int_t[
npoints];
1913 TMath::Sort(npoints,x,sortIndex, kFALSE);
1914 for (Int_t i=0;i<
npoints;++i){
1915 gr->SetPoint(i,x[sortIndex[i]],y[sortIndex[i]]);
1919 if ( xVariable == 2 )
delete xVar;
1922 delete [] sortIndex;
1936 Float_t channelCounter=0;
1941 for (Int_t iSec=0; iSec<72; ++iSec){
1943 if (!hT0 )
continue;
1954 Short_t *arrayhQ = hQ->GetArray();
1955 Short_t *arrayhT0 = hT0->GetArray();
1956 Short_t *arrayhRMS = hRMS->GetArray();
1966 for (UInt_t iChannel=0; iChannel<nChannels; ++iChannel){
1969 Float_t cogTime0 = -1000;
1970 Float_t cogQ = -1000;
1971 Float_t cogRMS = -1000;
1977 Int_t offsetQ = (
fNbinsQ+2)*(iChannel+1)+1;
1978 Int_t offsetT0 = (
fNbinsT0+2)*(iChannel+1)+1;
1979 Int_t offsetRMS = (
fNbinsRMS+2)*(iChannel+1)+1;
1998 rocQ->
SetValue(iChannel, cogQ*cogQ);
1999 rocT0->
SetValue(iChannel, cogTime0);
2000 rocT0Err->
SetValue(iChannel, rmsT0);
2001 rocRMS->
SetValue(iChannel, cogRMS);
2002 rocOut->
SetValue(iChannel, cogOut);
2014 (*streamer) <<
"DataEnd" <<
2015 "Sector=" << iSec <<
2019 "PadSec=" << iChannel <<
2021 "T0=" << cogTime0 <<
2031 if ( channelCounter>0 ){
2047 for (Int_t iburst=0; iburst<
fArrHnDrift.GetEntries(); ++iburst){
2048 THnSparseI *h=(THnSparseI*)
fArrHnDrift.UncheckedAt(iburst);
2069 fHnDrift->GetAxis(4)->SetRangeUser(timestamp-2*60,timestamp+2*60);
2072 Double_t posCE[4]={0.,0.,0.,0.};
2073 Double_t widthCE[4]={0.,0.,0.,0.};
2078 for (Int_t i=0; i<4; ++i){
2079 Int_t ce=(i/2>0)*7+6;
2080 hProj->GetAxis(0)->SetRangeUser(i*18,(i+1)*18-1);
2083 Int_t nbinMax=h->GetMaximumBin();
2084 Double_t maximum=h->GetMaximum();
2087 Double_t xbinMax=h->GetBinCenter(nbinMax);
2088 TF1 fgaus(
"gaus",
"gaus",xbinMax-5,xbinMax+5);
2089 fgaus.SetParameters(maximum,xbinMax,2);
2090 fgaus.SetParLimits(1,xbinMax-5.,xbinMax+5.);
2091 fgaus.SetParLimits(2,0.2,4.);
2092 h->Fit(&fgaus,
"RQN");
2096 posCE[i]=fgaus.GetParameter(1);
2097 widthCE[i]=4*fgaus.GetParameter(2);
2098 hProj->GetAxis(0)->SetRangeUser(0,72);
2102 Float_t
vdrift=2.61301900000000000e+06;
2105 AliDebug(5,Form(
"Timestamp %f - default drift velocity %f",timestamp,vdrift));
2108 for(Long64_t ichunk=0;ichunk<hProj->GetNbins();ichunk++){
2110 Double_t adc=hProj->GetBinContent(ichunk,coord);
2113 Int_t sector = coord[0]-1;
2114 Int_t row = coord[1]-1;
2115 Int_t pad = coord[2]-1;
2116 Int_t timeBin= coord[3]-1;
2117 Double_t time =
fHnDrift->GetAxis(4)->GetBinCenter(coord[4]);
2118 Int_t side = (sector/18)%2;
2124 if (time<timestamp-120||time>timestamp+120)
continue;
2125 if (adc < 5 )
continue;
2126 if (
IsEdgePad(sector,row,pad))
continue;
2131 Int_t padmin=-2, padmax=2;
2132 Int_t timemin=-2, timemax=2;
2133 Int_t minsumperpad=2;
2136 if (TMath::Abs((Short_t)timeBin-(Short_t)posCE[sector/18])<(Short_t)widthCE[sector/18]) {
2147 Bool_t isMaximum=kTRUE;
2148 Float_t totalmass=0, tbcm=0, padcm=0, rmstb=0, rmspad=0;
2149 Double_t cogY=0, rmsY=0;
2153 for(Int_t ipad=padmin;ipad<=padmax;++ipad){
2157 for(Int_t itime=timemin;itime<=timemax;++itime){
2159 Int_t a[5]={coord[0],coord[1],coord[2]+ipad,coord[3]+itime,coord[4]};
2160 Double_t val=hProj->GetBinContent(a);
2163 tbcm +=(timeBin+itime)*val;
2164 padcm+=(pad+ipad)*val;
2167 rmstb +=(timeBin+itime)*(timeBin+itime)*val;
2168 rmspad+=(pad+ipad)*(pad+ipad)*val;
2169 rmsY +=lxyz[1]*lxyz[1]*val;
2177 if (!isMaximum)
break;
2180 if (!isMaximum||!npart)
continue;
2181 if (totalmass<npart*minsumperpad)
continue;
2182 if (!isCE&&rmspad<.1)
continue;
2193 rmstb=TMath::Sqrt(TMath::Abs(tbcm*tbcm-rmstb));
2194 rmspad=TMath::Sqrt(TMath::Abs(padcm*padcm-rmspad));
2195 rmsY=TMath::Sqrt(TMath::Abs(cogY*cogY-rmsY));
2197 Int_t cog=TMath::Nint(padcm);
2203 Double_t gz=(zlength-(tbcm*vdrift*1.e-7))*TMath::Power(-1,side);
2209 Double_t gxyz[3]={padlxyz[0],cogY,gz};
2210 Double_t lxyz[3]={padlxyz[0],cogY,gz};
2211 Double_t igxyz[3]={0,0,0};
2225 trackID=336+((sector/18)%2);
2241 Double_t oldMinDist=ltr->
fVecPhi->GetMatrixArray()[index];
2247 Double_t globmir[3]={ltr->
Xv(),ltr->
Yv(),ltr->
Zv()};
2251 gxyz[2]=gxyz[2]-(TMath::Sqrt((gxyz[0]-globmir[0])*(gxyz[0]-globmir[0])
2252 +(gxyz[1]-globmir[1])*(gxyz[1]-globmir[1])
2253 +(gxyz[2]-globmir[2])*(gxyz[2]-globmir[2])+raylength))*vdrift*TMath::Power(10.,-6.)/30000;
2256 gxyz[2]=gxyz[2]-(TMath::Sqrt((gxyz[0]-globmir[0])*(gxyz[0]-globmir[0])
2257 +(gxyz[1]-globmir[1])*(gxyz[1]-globmir[1])
2258 +(gxyz[2]-globmir[2])*(gxyz[2]-globmir[2])+raylength))*vdrift*TMath::Power(10.,-6.)/30000;
2262 if (TMath::Abs(oldMinDist)<1.e-20||oldMinDist>mindist){
2263 ltr->
fVecSec->GetMatrixArray()[index]=sector;
2264 ltr->
fVecP2->GetMatrixArray()[index]=0;
2265 ltr->
fVecPhi->GetMatrixArray()[index]=mindist;
2266 ltr->
fVecGX->GetMatrixArray()[index]=gxyz[0];
2267 ltr->
fVecGY->GetMatrixArray()[index]=gxyz[1];
2268 ltr->
fVecGZ->GetMatrixArray()[index]=gxyz[2];
2269 ltr->
fVecLX->GetMatrixArray()[index]=lxyz[0];
2270 ltr->
fVecLY->GetMatrixArray()[index]=lxyz[1];
2271 ltr->
fVecLZ->GetMatrixArray()[index]=lxyz[2];
2276 igxyz[0]=ltr->
fVecGX->GetMatrixArray()[row];
2277 igxyz[1]=ltr->
fVecGY->GetMatrixArray()[row];
2278 igxyz[2]=ltr->
fVecGZ->GetMatrixArray()[row];
2285 "timestamp=" << timestamp <<
2286 "burst=" << burst <<
2292 "timebin=" << timeBin <<
2293 "cogCE=" << posCE[sector/18] <<
2294 "withCE=" << widthCE[sector/18] <<
2295 "index=" << index <<
2297 "padcm=" << padcm <<
2298 "rmspad=" << rmspad <<
2301 "rmstb=" << rmstb <<
2305 "lx=" << padlxyz[0]<<
2307 "lypad=" << padlxyz[1]<<
2314 "igx=" << igxyz[0] <<
2315 "igy=" << igxyz[1] <<
2316 "igz=" << igxyz[2] <<
2318 "mind=" << mindist <<
2320 "trackid=" << trackID <<
2321 "trackid2=" << trackID2 <<
2322 "npart=" << npart <<
2360 for (Int_t iburst=0; iburst<
fArrHnDrift.GetEntries();++iburst){
2362 AliDebug(5,Form(
"Burst: %d (%f)",iburst,timestamp));
2365 UInt_t entries=(UInt_t)
fHnDrift->GetEntries();
2369 for (Int_t iDim=0; iDim<
fHnDrift->GetNdimensions(); ++iDim)
fHnDrift->GetAxis(iDim)->SetRange(0,0);
2386 for (Int_t itrack=0; itrack<338; ++itrack){
2387 TObject *iltr=arrIdeal->UncheckedAt(itrack);
2388 TObject *mltr=arrMeasured->UncheckedAt(itrack);
2391 "time=" << timestamp <<
2392 "burst="<< iburst <<
2404 const Double_t *peakposloc, Int_t &itrackMin2)
2410 TVector3 vP(peakpos[0],peakpos[1],peakpos[2]);
2415 Int_t lastbeam=336/2;
2416 if ( (sector/18)%2 ) {
2423 for (Int_t itrack=firstbeam; itrack<lastbeam; ++itrack){
2427 Double_t deltaZ=ltr->
GetZ()-peakpos[2];
2428 if (TMath::Abs(deltaZ)>40)
continue;
2429 vDir.SetMagThetaPhi(1,ltr->
Theta(),TMath::ASin(ltr->
GetSnp()));
2433 Double_t dist=(vDir.Cross(vSt-vP)).Mag()/vDir.Mag();
2442 Float_t mindist2=10;
2443 for (Int_t itrack=firstbeam; itrack<lastbeam; ++itrack){
2445 if ((ltr->
fVecSec->GetMatrixArray())[row]!=sector)
continue;
2447 Double_t deltaZ=ltr->
GetZ()-peakpos[2];
2448 if (TMath::Abs(deltaZ)>40)
continue;
2450 Double_t dist=TMath::Abs((ltr->
fVecLY->GetMatrixArray())[row]-peakposloc[1]);
2451 if (dist>1)
continue;
2469 if ( pad == edge1 )
return kTRUE;
2471 if ( pad == edge2 )
return kTRUE;
2483 arrMeasured->SetOwner();
2484 for(Int_t itrack=0;itrack<336;itrack++){
2502 arrMeasured->AddAt(ltrce,336);
2516 arrMeasured->AddAt(ltrce,337);
2526 for(Int_t itrack=0;itrack<338;itrack++){
2559 arr->AddAt(ltrceA,336);
2573 arr->AddAt(ltrceC,337);
2578 Int_t channelSideA=0;
2579 Int_t channelSideC=0;
2580 Int_t channelSide=0;
2583 for (Int_t isector=0; isector<72; ++isector){
2584 Int_t side=((isector/18)%2);
2585 for (UInt_t irow=0;irow<
fROC->
GetNRows(isector);++irow){
2586 for (UInt_t ipad=0;ipad<
fROC->
GetNPads(isector,irow);++ipad){
2591 channelSide=channelSideA;
2594 channelSide=channelSideC;
2597 ltrce->
fVecSec->GetMatrixArray()[channelSide]=isector;
2598 ltrce->
fVecP2->GetMatrixArray()[channelSide]=0;
2599 ltrce->
fVecPhi->GetMatrixArray()[channelSide]=0;
2600 ltrce->
fVecGX->GetMatrixArray()[channelSide]=gxyz[0];
2601 ltrce->
fVecGY->GetMatrixArray()[channelSide]=gxyz[1];
2603 ltrce->
fVecLX->GetMatrixArray()[channelSide]=lxyz[0];
2604 ltrce->
fVecLY->GetMatrixArray()[channelSide]=lxyz[1];
2608 ltrce->
fVecGZ->GetMatrixArray()[channelSide]=-0.335;
2609 ltrce->
fVecLZ->GetMatrixArray()[channelSide]=-0.335;
2613 ltrce->
fVecGZ->GetMatrixArray()[channelSide]=0.15;
2614 ltrce->
fVecLZ->GetMatrixArray()[channelSide]=0.15;
2641 static TLinearFitter fdriftA(4,
"hyp3");
2642 static TLinearFitter fdriftC(4,
"hyp3");
2643 static TLinearFitter fdriftAC(5,
"hyp4");
2648 Float_t chi2AC = 10;
2653 Double_t minres[3]={20.,1,0.8};
2655 for(Int_t i=0;i<3;i++){
2657 fdriftA.ClearPoints();
2658 fdriftC.ClearPoints();
2659 fdriftAC.ClearPoints();
2668 for (Int_t itrack=0; itrack<338; ++itrack){
2673 if ((itrack%7==0||itrack%7==6)&&itrack<336)
continue;
2674 Int_t clustercounter=0;
2679 for (Int_t index=0; index<indexMax; ++index){
2681 Double_t mGx=mltr->
fVecGX->GetMatrixArray()[index];
2682 Double_t mGy=mltr->
fVecGY->GetMatrixArray()[index];
2683 Double_t mGz=mltr->
fVecGZ->GetMatrixArray()[index];
2685 if (TMath::Abs(mGz)<1e-20 && TMath::Abs(mGy)<1e-20 && TMath::Abs(mGx)<1e-20) clustercounter++;
2687 if (clustercounter>130&&itrack<336)
continue;
2694 if (itrack>335) indexMax=557568/2;
2695 for (Int_t index=0; index<indexMax; ++index){
2696 Double_t iGx=iltr->
fVecGX->GetMatrixArray()[index];
2697 Double_t iGy=iltr->
fVecGY->GetMatrixArray()[index];
2698 Double_t iGz=iltr->
fVecGZ->GetMatrixArray()[index];
2699 Double_t iR=TMath::Sqrt(iGx*iGx+iGy*iGy);
2701 Double_t mGx=mltr->
fVecGX->GetMatrixArray()[index];
2702 Double_t mGy=mltr->
fVecGY->GetMatrixArray()[index];
2703 Double_t mGz=mltr->
fVecGZ->GetMatrixArray()[index];
2704 Double_t mR=TMath::Sqrt(mGx*mGx+mGy*mGy);
2708 if (iR<133||mR<133)
continue;
2709 if(TMath::Abs(mltr->
fVecP2->GetMatrixArray()[index])>minres[i])
continue;
2711 Double_t ldrift = (iltr->
GetSide()==0)?zlength-iGz:iGz+zlength;
2712 Double_t mdrift = (iltr->
GetSide()==0)?zlength-mGz:mGz+zlength;
2715 Double_t xxx[3] = {ldrift,iGy*ldrift/(zlength*250.), 250.-mR};
2718 fdriftA.AddPoint(xxx,mdrift,1);
2720 fdriftC.AddPoint(xxx,mdrift,1);
2723 Double_t xxx2[4] = { ldrift,iGy*ldrift/(zlength*250.), 250.-mR,
static_cast<Double_t
>(iltr->
GetSide())};
2724 fdriftAC.AddPoint(xxx2,mdrift,1);
2737 fdriftA.GetParameters(fitA);
2738 fdriftC.GetParameters(fitC);
2739 fdriftAC.GetParameters(fitAC);
2749 for (Int_t itrack=0; itrack<338; ++itrack){
2754 if ((itrack%7==0||itrack%7==6)&&itrack<336)
continue;
2755 Int_t clustercounter=0;
2760 for (Int_t index=0; index<indexMax; ++index){
2761 Double_t mGx=mltr->
fVecGX->GetMatrixArray()[index];
2762 Double_t mGy=mltr->
fVecGY->GetMatrixArray()[index];
2763 Double_t mGz=mltr->
fVecGZ->GetMatrixArray()[index];
2764 if (TMath::Abs(mGz)<1e-20 && TMath::Abs(mGy)<1e-20 && TMath::Abs(mGx)<1e-20) clustercounter++;
2766 if (clustercounter>130&&itrack<336)
continue;
2772 if (itrack>335) indexMax=557568/2;
2773 for (Int_t index=0; index<indexMax; ++index){
2774 Double_t iGx=iltr->
fVecGX->GetMatrixArray()[index];
2775 Double_t iGy=iltr->
fVecGY->GetMatrixArray()[index];
2776 Double_t iGz=iltr->
fVecGZ->GetMatrixArray()[index];
2777 Double_t iR=TMath::Sqrt(iGx*iGx+iGy*iGy);
2779 Double_t mGx=mltr->
fVecGX->GetMatrixArray()[index];
2780 Double_t mGy=mltr->
fVecGY->GetMatrixArray()[index];
2781 Double_t mGz=mltr->
fVecGZ->GetMatrixArray()[index];
2782 Double_t mR=TMath::Sqrt(mGx*mGx+mGy*mGy);
2785 if (iR<60||mR<60)
continue;
2787 Double_t ldrift = (iltr->
GetSide()==0)?zlength-iGz:iGz+zlength;
2788 Double_t mdrift = (iltr->
GetSide()==0)?zlength-mGz:mGz+zlength;
2791 if (iltr->
GetSide()==1) v=&fitC;
2793 Double_t iCorr=(*v)[0]+(*v)[1]*ldrift+(*v)[2]*iGy*ldrift/(zlength*250.)+(*v)[3]*(250.-mR);
2795 mltr->
fVecP2->GetMatrixArray()[index]=mdrift-iCorr;
2806 npointsA= fdriftA.GetNpoints();
2807 if (npointsA>0) chi2A = fdriftA.GetChisquare()/fdriftA.GetNpoints();
2811 npointsC= fdriftC.GetNpoints();
2812 if (npointsC>0) chi2C = fdriftC.GetChisquare()/fdriftC.GetNpoints();
2816 npointsAC= fdriftAC.GetNpoints();
2817 if (npointsAC>0) chi2AC = fdriftAC.GetChisquare()/fdriftAC.GetNpoints();
2826 "time=" << timestamp <<
2827 "fitA.=" << &fitA <<
2828 "fitC.=" << &fitC <<
2829 "fitAC.=" << &fitAC <<
2847 TGraphErrors *grA[7];
2848 TGraphErrors *grC[7];
2849 TGraphErrors *grAC[8];
2850 TString
names(
"GRAPH_MEAN_DELAY_LASER_ALL_;GRAPH_MEAN_DRIFT_LASER_ALL_;GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_;GRAPH_MEAN_RGRADIENT_LASER_ALL_;GRAPH_MEAN_IROCOROCOFFSET_LASER_ALL_;GRAPH_MEAN_NPOINTS_LASER_ALL_;GRAPH_MEAN_CHI2_LASER_ALL_");
2851 TString namesAC(
"GRAPH_MEAN_DELAY_LASER_ALL_;GRAPH_MEAN_DRIFT_LASER_ALL_;GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_;GRAPH_MEAN_RGRADIENT_LASER_ALL_;GRAPH_MEAN_IROCOROCOFFSET_LASER_ALL_;GRAPH_MEAN_NPOINTS_LASER_ALL_;GRAPH_MEAN_CHI2_LASER_ALL_;GRAPH_MEAN_DELAYC_LASER_ALL_");
2853 TObjArray *arrNames=names.Tokenize(
";");
2854 TObjArray *arrNamesAC=namesAC.Tokenize(
";");
2857 for (Int_t i=0; i<7; ++i){
2858 TString grName=arrNames->UncheckedAt(i)->GetName();
2860 grA[i]=(TGraphErrors*)
fArrFitGraphs->FindObject(grName.Data());
2862 grA[i]=
new TGraphErrors;
2863 grA[i]->SetName(grName.Data());
2864 grA[i]->SetTitle(grName.ReplaceAll(
"_",
" ").Data());
2869 grA[i]->SetPoint(ipoint,timestamp,fitA(i));
2870 grA[i]->SetPointError(ipoint,60,.0001);
2871 if (i<4) grA[i]->SetPointError(ipoint,60,fdriftA.GetCovarianceMatrixElement(i,i));
2875 for (Int_t i=0; i<7; ++i){
2876 TString grName=arrNames->UncheckedAt(i)->GetName();
2878 grC[i]=(TGraphErrors*)
fArrFitGraphs->FindObject(grName.Data());
2880 grC[i]=
new TGraphErrors;
2881 grC[i]->SetName(grName.Data());
2882 grC[i]->SetTitle(grName.ReplaceAll(
"_",
" ").Data());
2887 grC[i]->SetPoint(ipoint,timestamp,fitC(i));
2888 grC[i]->SetPointError(ipoint,60,.0001);
2889 if (i<4) grC[i]->SetPointError(ipoint,60,fdriftC.GetCovarianceMatrixElement(i,i));
2893 for (Int_t i=0; i<8; ++i){
2894 TString grName=arrNamesAC->UncheckedAt(i)->GetName();
2896 grAC[i]=(TGraphErrors*)
fArrFitGraphs->FindObject(grName.Data());
2898 grAC[i]=
new TGraphErrors;
2899 grAC[i]->SetName(grName.Data());
2900 grAC[i]->SetTitle(grName.ReplaceAll(
"_",
" ").Data());
2905 grAC[i]->SetPoint(ipoint,timestamp,fitAC(i));
2906 grAC[i]->SetPointError(ipoint,60,.0001);
2907 if (i<5) grAC[i]->SetPointError(ipoint,60,fdriftAC.GetCovarianceMatrixElement(i,i));
2911 printf(
"A side fit parameters:\n");
2913 printf(
"\nC side fit parameters:\n");
2915 printf(
"\nAC side fit parameters:\n");
2965 TString objName=GetName();
2972 while ( (s=(TObjString*)next()) ){
2973 TString optString=s->GetString();
2974 optString.Remove(TString::kBoth,
' ');
2975 if (optString.BeginsWith(
"name=")){
2976 objName=optString.ReplaceAll(
"name=",
"");
2978 if (optString.BeginsWith(
"type=")){
2979 optString.ReplaceAll(
"type=",
"");
2980 type=optString.Atoi();
2993 TFile
f(filename,
"recreate");
2994 ce.Write(objName.Data());
2995 fArrHnDrift.Write(
"arrHnDrift",TObject::kSingleKey);
3002 if (type==1||type==2) {
3011 if (type==2||type==3){
3023 if (type==1||type==2||type==3){
3024 for (Int_t i=0; i<72; ++i){
3044 TDirectory *backup = gDirectory;
3046 TFile
f(filename,
"recreate");
3047 Write(objName.Data());
3048 if (type==1||type==2) {
3049 histoQArray.Write(
"histoQArray",TObject::kSingleKey);
3050 histoT0Array.Write(
"histoT0Array",TObject::kSingleKey);
3051 histoRMSArray.Write(
"histoRMSArray",TObject::kSingleKey);
3052 arrHnDrift.Write(
"arrHnDrift",TObject::kSingleKey);
3059 if (type==1||type==2){
3060 for (Int_t i=0; i<72; ++i){
3069 for (Int_t i=0;i<arrHnDrift.GetEntries();++i){
3075 if ( backup ) backup->cd();
3085 if (!f.IsOpen() || f.IsZombie() )
return 0x0;
3086 TList *l=f.GetListOfKeys();
3097 while ( (key=(TKey*)next()) ){
3099 if ( o->IsA()==AliTPCCalibCE::Class() ){
3101 }
else if ( o->IsA()==TObjArray::Class() ){
3102 TString name=key->GetName();
3103 if ( name==
"histoQArray") histoQArray=(
TObjArray*)o;
3104 if ( name==
"histoT0Array") histoT0Array=(
TObjArray*)o;
3105 if ( name==
"histoRMSArray") histoRMSArray=(
TObjArray*)o;
3106 if ( name==
"arrHnDrift") arrHnDrift=(
TObjArray*)o;
3114 for (Int_t i=0; i<72; ++i){
3115 hist=(TH1*)histoQArray->UncheckedAt(i);
3116 if (hist) hist->SetDirectory(0x0);
3123 for (Int_t i=0; i<72; ++i){
3124 hist=(TH1*)histoT0Array->UncheckedAt(i);
3125 if (hist) hist->SetDirectory(0x0);
3132 for (Int_t i=0; i<72; ++i){
3133 hist=(TH1*)histoRMSArray->UncheckedAt(i);
3134 if (hist) hist->SetDirectory(0x0);
3141 for (Int_t i=0; i<arrHnDrift->GetEntries(); ++i){
3142 THnSparseI *hSparse=(THnSparseI*)arrHnDrift->UncheckedAt(i);
TObjArray fPadTimesArrayEvent
! Pad Times for the event, before mean Time0 corrections
Float_t GetPadPitchLength(Int_t isector=0, Int_t padrow=0) const
TObjArray fCalRocArrayOutliers
Array of AliTPCCalROC class for signal outliers.
Double_t GetL1PhaseTB() const
TH2S * GetHistoQ(Int_t sector, Bool_t force=kFALSE)
TVectorD * fVecGX
points vectors - globalX
Double_t fEventId
! Event Id of the current event
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
UInt_t GetNPads(UInt_t sector, UInt_t row) const
void AddCEtoIdeal(TObjArray *arr)
TObjArray fPadRMSArrayEvent
! Signal width for the event, only needed for debugging streamer
AliTPCCalROC * GetCalROC(Int_t sector) const
TVectorD fVTime0Offset
! Time0 Offset for each sector;
Int_t fROCblackDataDown
Lower edge of ROC rabge to be processed in case of black event. if -1; online drif velocity algorithm...
TVectorF * GetQMeanEvents(Int_t sector, Bool_t force=kFALSE)
Float_t GetRayLength() const
TObjArray fCalRocArrayT0
Array of AliTPCCalROC class for Time0 calibration.
Int_t GetDebugLevel() const
TObjArray fTMeanArrayEvent
Store mean arrival time for each sector event by event.
AliTPCCalPad * fPedestalTPC
! Pedestal Information whole TPC
Bool_t fAnalyseNew
! Whether to analyse the new part of the algorithm.
AliTPCCalROC * fPadNoiseROC
! Pad noise Information for current ROC
Int_t fMaxTimeBin
! time bin with maximum value
Int_t fPeakIntMinus
Peak integral range for COG determination. Bins used before max bin.
Int_t fNevents
Number of processed events.
Bool_t GetXYZ(Double_t *p) const
TVectorF * GetPadRMSEvent(Int_t sector, Bool_t force=kFALSE)
TH2S * GetHistoRMS(Int_t sector, Bool_t force=kFALSE)
TVectorF fVTime0SideA
Mean Time0 for side A for all events.
AliTPCCalPad * fPadNoiseTPC
! Pad noise Information whole TPC
UInt_t fBinsLastAna[100]
number of bin in the THnSparse during the last analysis
TObjArray fQMeanArrayEvent
Store mean arrival Charge for each sector event by event.
UShort_t fPeaks[14]
! Peak position: 4 laser layers and CE
Int_t fCurrentSector
! current sector processed
Manager and of geomety classes for set: TPC.
AliTPCCalROC * GetCalRoc(Int_t sector, TObjArray *arr, Bool_t force) const
UInt_t GetNRows(UInt_t sector) const
Int_t fLastSector
! Last sector processed
TObjArray fCalRocArrayQ
Array of AliTPCCalROC class for Charge calibration.
TObjArray fHistoTmean
! Calibration histograms of the mean CE position for all sectors
void MergeBase(const AliTPCCalibRawBase *calib)
Float_t GetValue(UInt_t row, UInt_t pad) const
Float_t fNoiseThresholdSum
Analysis Treshold for signal finding: Sum>fNoiseThresholdSum*PadNoise.
Float_t fNoiseThresholdMax
Analysis Treshold for signal finding: Max>fNoiseThresholdMax*PadNoise.
TVectorF * GetPadTimesEvent(Int_t sector, Bool_t force=kFALSE)
TVectorD fVTime0OffsetCounter
! Time0 Offset counter for each sector;
Int_t fPeakDetMinus
Consecutive timebins on rising edge to be regarded as a signal.
TObjArray * GetParamArrayPol2(Int_t sector, Bool_t force=kFALSE)
void ResetMeasured(TObjArray *const arr)
UInt_t fEventInBunch
! event in current bunch
UInt_t GetNChannels(UInt_t sector) const
AliTPCCalROC * GetCalRocRMS(Int_t sector, Bool_t force=kFALSE)
Double_t GetAlpha() const
virtual void DumpToFile(const Char_t *filename, const Char_t *dir="", Bool_t append=kFALSE)
Float_t fXmaxQ
xmax of T0 reference histogram
TObjArray fParamArrayEventPol2
Store mean arrival time parameters for each sector event by event from global parabola fit...
Float_t fSecRejectRatio
! Needed percentage of signals in one chamber. Below it will be rejected
TVectorD * fVecLZ
points vectors - localZ
Bool_t fIsZeroSuppressed
If data is Zero Suppressed -> Don't subtrakt pedestals!
void GetPositionLocal(UInt_t sector, UInt_t row, UInt_t pad, Float_t *pos)
Int_t fCurrentRow
! current row processed
Int_t fROCblackDataUp
Upper edge of ROC range to be processed in case of black event. if -1; online drif velocity algorithm...
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)
TObjArray fCalRocArrayRMS
Array of AliTPCCalROC class for signal width calibration.
virtual Int_t Update(const Int_t isector, const Int_t iRow, const Int_t iPad, const Int_t iTimeBin, const Float_t signal)
Int_t fLastTimeBin
Last Time bin used for analysis.
Float_t GetPadPitchWidth(Int_t isector=0) const
Base class for the calibration algorithms using raw data as input.
Float_t fXminRMS
xmin of T0 reference histogram
Bool_t fProcessNew
Whether to use the new algorithm.
TTreeSRedirector * GetDebugStreamer()
TObjArray fArrHnDrift
array of sparse histograms for each burst
TH2S * GetHisto(Int_t sector, TObjArray *arr, Int_t nbinsY, Float_t ymin, Float_t ymax, const Char_t *type, Bool_t force)
TVectorD * fVecLY
points vectors - localY
virtual void ResetEvent()
Int_t fCurrentChannel
! current channel processed
void CalculateDV(TObjArray *const arrIdeal, TObjArray *const arrMeasured, Int_t burst)
Bool_t fProcessOld
Whether to use the old algorithm.
Float_t fXmaxRMS
xmax of T0 reference histogram
TObjArray fPadPedestalArrayEvent
! Signal width for the event, only needed for debugging streamer
TObjArray * GetParamArray(Int_t sector, TObjArray *arr, Bool_t force=kFALSE) const
TObjArray * SetupMeasured()
TObjArray fParamArrayEventPol1
Store mean arrival time parameters for each sector event by event from global plane fit...
TVectorD * fVecLX
points vectors - localX
TVectorF * GetPadPedestalEvent(Int_t sector, Bool_t force=kFALSE)
void Merge(AliTPCCalibCE *const ce)
Surveyed Laser Track positions.
AliTPCROC * fROC
! ROC information
TVectorD * fVecGY
points vectors - globalY
TVectorD fVEventNumber
Eventnumbers of the events.
Int_t fFirstTimeBin
First Time bin used for analysis.
UInt_t fOldRunNumber
! Old Run Number
void GetPositionGlobal(UInt_t sector, UInt_t row, UInt_t pad, Float_t *pos)
Bool_t IsPeakInRange(UShort_t timebin, Int_t roc) const
TVectorD fTimeBursts
time stamps of bursts
AliTPCCalROC * GetCalRocQ(Int_t sector, Bool_t force=kFALSE)
const UInt_t * GetRowIndexes(UInt_t sector) const
Float_t fMeanT0rms
mean of the rms of all pad T0 fits, used as error estimation of T0 results
Int_t GetNeventsProcessed() const
void SetValue(UInt_t row, UInt_t pad, Float_t vd)
TVectorF * GetPadQEvent(Int_t sector, Bool_t force=kFALSE)
Int_t fStreamLevel
! level of streamer output
TVectorF fVTime0SideC
Mean Time0 for side C for all events.
TObjArray fHistoT0Array
Calibration histograms for Time0 distribution.
AliTPCParam * fParam
! TPC information
Bool_t IsEdgePad(Int_t sector, Int_t row, Int_t pad) const
Int_t fPeakDetPlus
Consecutive timebins on falling edge to be regarded as a signal.
AliTPCCalROC * GetCalRocOutliers(Int_t sector, Bool_t force=kFALSE)
virtual void ProcessBunch(const Int_t sector, const Int_t row, const Int_t pad, const Int_t length, const UInt_t startTimeBin, const UShort_t *signal)
TVectorF * GetVectSector(Int_t sector, TObjArray *arr, UInt_t size, Bool_t force=kFALSE) const
static TObjArray * GetTracks()
AliTPCCalibCE & operator=(const AliTPCCalibCE &source)
Float_t fXmaxT0
xmax of T0 reference histogram
TPC calibration base class for one ROC.
void FindCESignal(TVectorD ¶m, Float_t &qSum, const TVectorF maxima)
AliTPCCalROC * fPedestalROC
! Pedestal Information for current ROC
Float_t fPadNoise
! Noise Value of current pad
void FindPedestal(Float_t part=.6)
UInt_t fTimeStamp
! time stamp from event header
static Float_t GetCOG(Short_t *arr, Int_t nBins, Float_t xMin, Float_t xMax, Float_t *rms=0, Float_t *sum=0)
Int_t FindLaserTrackID(Int_t sector, Int_t row, const Double_t *peakpos, Double_t &mindist, const Double_t *peakposloc, Int_t &itrackMin2)
Float_t fPadSignal[1024]
! signal of current Pad
Float_t fCurrentCETimeRef
! Time refernce of the current sector
TVectorF * GetTMeanEvents(Int_t sector, Bool_t force=kFALSE)
AliTPCCalROC * GetCalRocT0Err(Int_t sector, Bool_t force=kFALSE)
TObjArray * GetParamArrayPol1(Int_t sector, Bool_t force=kFALSE)
TObjArray * fArrFitGraphs
Fit resut graphs for each parameter.
TVectorD * fVecGZ
points vectors - globalZ
#define AliDebug(logLevel, message)
TObjArray fHistoQArray
Calibration histograms for Charge distribution.
Int_t fNbinsT0
Number of bins for T0 reference histogram.
Float_t fXminQ
xmin of T0 reference histogram
TObjArray fCalRocArrayT0Err
Array of AliTPCCalROC class for the error (rms) of Time0 calibration.
Float_t fPadPedestal
! Pedestal Value of current pad
UShort_t fPeakWidths[14]
! Peak window widths
TVectorD fVEventTime
Timestamps of the events.
AliTPCCalROC * GetCalRocT0(Int_t sector, Bool_t force=kFALSE)
Int_t GetStreamLevel() const
Int_t fPeakIntPlus
Peak integral range for COG determination. Bins used after max bin.
Float_t fMeanQrms
mean of the rms of all pad Q fits, used as error estimation of Q results
TH1S * GetHistoTmean(Int_t sector, Bool_t force=kFALSE)
Float_t fMaxPadSignal
! maximum bin of current pad
Float_t fMeanRMSrms
mean of the rms of all pad TMS fits, used as error estimation of RMS results
Bool_t IsPeak(Int_t pos, Int_t tminus, Int_t tplus) const
Implementation of the TPC Central Electrode calibration.
void FindLocalMaxima(TObjArray *const arrObj, Double_t timestamp, Int_t burst)
TObjArray fHistoRMSArray
Calibration histograms for signal width distribution.
class TVectorT< Double_t > TVectorD
#define AliError(message)
Float_t GetZLength(Int_t sector=0) const
Int_t fNbinsQ
Number of bins for T0 reference histogram.
Double_t SetBurstHnDrift()
TVectorD fVMeanQ
! Mean Q for each sector;
static AliTPCCalibCE * ReadFromFile(const Char_t *filename)
TObjArray fPadQArrayEvent
! Charge for the event, only needed for debugging streamer
UInt_t fRunNumber
current run number from event header
Int_t fNbinsRMS
Number of bins for T0 reference histogram.
TGraph * MakeGraphTimeCE(Int_t sector, Int_t xVariable=0, Int_t fitType=0, Int_t fitParameter=0)
Bool_t fUseL1Phase
use L1 Phase information?
Float_t fXminT0
xmin of T0 reference histogram
THnSparseI * fHnDrift
! Histogram digits for each pad and timebin for several timestamps
class TMatrixT< Double_t > TMatrixD
TVectorD fVMeanQCounter
! Mean Q counter for each sector;
Int_t fDebugLevel
! debug level
TH2S * GetHistoT0(Int_t sector, Bool_t force=kFALSE)