AliTPCcalibSummary.h - adding trend info of relative change of pulser and CE timing - in respect with reference run
AliTPCcalibTracks.h AliTPCcalibTracks.cxx - adding tracklet residual histograms
AliTPCCalPad.h AliTPCCalPad.cxx - make calib pad from the histogram
Marian
}
+
+
+AliTPCCalPad * AliTPCCalPad::MakeCalPadFromHistoRPHI(TH2 * hisA, TH2* hisC){
+ //
+ // Make cal pad from r-phi histograms
+ //
+ AliTPCROC *proc= AliTPCROC::Instance();
+ AliTPCCalPad *calPad = new AliTPCCalPad("his","his");
+ Float_t globalPos[3];
+ for (Int_t isec=0; isec<72; isec++){
+ AliTPCCalROC* calRoc = calPad->GetCalROC(isec);
+ TH2 * his = ((isec%36<18) ? hisA:hisC);
+ for (UInt_t irow=0; irow<calRoc->GetNrows(); irow+=1){
+ Int_t jrow=irow;
+ if (isec>=36) jrow+=63;
+ Float_t xrow=proc->GetPadRowRadii(isec, irow);
+ for (UInt_t ipad=0;ipad<proc->GetNPads(isec,irow);ipad+=1){
+ proc->GetPositionGlobal(isec,irow,ipad, globalPos);
+ Double_t phi=TMath::ATan2(globalPos[1],globalPos[0]);
+ //if (phi<0) phi+=TMath::Pi()*2;
+ Int_t bin=his->FindBin(phi,jrow);
+ Float_t value= his->GetBinContent(bin);
+ calRoc->SetValue(irow,ipad,value);
+ }
+ }
+ }
+ return calPad;
+}
class TH1F;
class TCanvas;
class TTree;
+class TH2;
class AliTPCCalPad : public TNamed {
public:
//
static TCanvas * MakeReportPadSector(TTree *chain, const char* varName, const char*varTitle, const char *axisTitle, Float_t min, Float_t max, const char * cutUser="");
static TCanvas * MakeReportPadSector2D(TTree *chain, const char* varName, const char*varTitle, const char *axisTitle, Float_t min, Float_t max, const char *cutUser="");
-
+ static AliTPCCalPad *MakeCalPadFromHistoRPHI(TH2 * hisA, TH2* hisC);
protected:
AliTPCCalROC *fROC[kNsec]; // Array of ROC objects which contain the values per pad
ClassDef(AliTPCCalPad,1) // TPC calibration class for parameters which are saved per pad
#include "TGraphErrors.h"
#include <AliCTPTimeParams.h>
#include <AliTPCcalibSummary.h>
+#include <TStatToolkit.h>
+#include <TCut.h>
//
//
//
fDButil->UpdateFromCalibDB();
fDButil->SetReferenceRun(irun);
fDButil->UpdateRefDataFromOCDB();
+ fCalibDB->CreateGUITree("calPads.root");
+ fDButil->CreateGUIRefTree("calPadsRef.root");
//
AliDCSSensorArray *arrHV=fCalibDB->GetVoltageSensors(irun);
if (!arrHV) continue;
fDButil->UpdateFromCalibDB();
fDButil->SetReferenceRun(irun);
fDButil->UpdateRefDataFromOCDB();
+ fCalibDB->CreateGUITree("calPads.root");
+ fDButil->CreateGUIRefTree("calPadsRef.root");
+
//
AliSplineFit *fitVdrift=0x0;
Int_t startTimeGRP=0, stopTimeGRP=0;
ProcessCTP(irun,itime);
ProcessAlign(irun,itime);
ProcessGain(irun,itime);
+ ProcessDriftCERef();
+ ProcessPulserRef();
(*fPcstream)<<"dcs"<<
}
+void AliTPCcalibSummary::ProcessDriftCERef(){
+ //
+ // Get fit of residuals if CE in respect with reference
+ // data
+ //
+ static TVectorD sec(72);
+ static TVectorD vec0(72);
+ static TVectorD vecLy(72);
+ static TVectorD vecLx(72);
+ static TVectorD vecChi2(72);
+ static TVectorD vecN(72);
+ //
+ static TVectorD vecA0(72);
+ static TVectorD vecALy(72);
+ static TVectorD vecALx(72);
+ static TVectorD vecAChi2(72);
+ //
+ static TVectorD vecQ(72);
+ static TVectorD vecQRef(72);
+ static Bool_t isCalc=kFALSE;
+
+ TFile f("calPads.root");
+ TFile fref("calPadsRef.root");
+ TTree * tree = (TTree*)f.Get("calPads");
+ TTree * treeRef = (TTree*)fref.Get("calPads");
+ tree->AddFriend(treeRef,"R");
+ tree->SetAlias("inCE","((CEQmean.fElements>35)&&abs(CETmean.fElements)<1.5&&abs(CETrms.fElements/1.2-1)<0.2)"); // outlyerTrms
+ tree->SetAlias("inCER","((R.CEQmean.fElements>35)&&abs(R.CETmean.fElements)<1.5&&abs(R.CETrms.fElements/1.2-1)<0.2)"); // outlyerTrms
+ //
+ if (!isCalc){
+ // make fits only once
+ TStatToolkit toolkit;
+ Double_t chi2=0;
+ Int_t npoints=0;
+ TVectorD param;
+ TMatrixD covar;
+ tree->SetAlias("dt","CETmean.fElements-R.CETmean.fElements");
+ TCut cutAll ="inCE&&inCER&&abs(CETmean.fElements-R.CETmean.fElements)<0.5";
+ TString fstringG=""; // global part
+ fstringG+="ly.fElements++";
+ fstringG+="(lx.fElements-134.)++";
+ for (Int_t isec=0; isec<72; isec++){
+ TStatToolkit::FitPlane(tree,"2.64*dt", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
+ if (npoints<3) continue;
+ printf("Sector=%d\n",isec);
+ vec0[isec]=param[0];
+ vecLy[isec]=param[1];
+ vecLx[isec]=param[2];
+ sec[isec]=isec;
+ vecN[isec]=npoints;
+
+ TStatToolkit::FitPlane(tree,"2.64*CETmean.fElements", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
+ if (npoints<3) continue;
+ printf("Sector=%d\n",isec);
+ vecA0[isec]=param[0];
+ vecALy[isec]=param[1];
+ vecALx[isec]=param[2];
+ vecAChi2[isec]=TMath::Sqrt(chi2/npoints);
+ tree->Draw("CETmean.fElements",Form("sector==%d",isec)+cutAll);
+ tree->Draw("CETmean.fElements/R.CETmean.fElements",Form("sector==%d",isec)+cutAll);
+ }
+ isCalc=kTRUE;
+ }
+ (*fPcstream)<<"dcs"<< // CE information
+ "CETSector.="<<&sec<< // sector numbers
+ // // fit in respect to reference
+ "CETRef0.="<<&vec0<< // offset change
+ "CETRefY.="<<&vecLy<< // slope y change - rad
+ "CETRefX.="<<&vecLx<< // slope x change - rad
+ "CETRefChi2.="<<&vecChi2<< // chi2 (rms in cm)
+ "CETRefN.="<<&vecN<< //number of accepted points
+ // // fit in respect per mean per side
+ "CET0.="<<&vecA0<< // offset change
+ "CETY.="<<&vecALy<< // slope y change - rad
+ "CETX.="<<&vecALx<< // slope x change - rad
+ "CETChi2.="<<&vecAChi2; // chi2 (rms in cm)
+}
+void AliTPCcalibSummary::ProcessPulserRef(){
+ //
+ // Get fit of residuals if Pulser in respect with reference
+ // data
+ //
+ static TVectorD sec(72);
+ static TVectorD vec0(72);
+ static TVectorD vecLy(72);
+ static TVectorD vecLx(72);
+ static TVectorD vecChi2(72);
+ static TVectorD vecN(72);
+ //
+ static TVectorD vecA0(72);
+ static TVectorD vecALy(72);
+ static TVectorD vecALx(72);
+ static TVectorD vecAChi2(72);
+ static Bool_t isCalc=kFALSE;
+
+ TFile f("calPads.root");
+ TFile fref("calPadsRef.root");
+ TTree * tree = (TTree*)f.Get("calPads");
+ TTree * treeRef = (TTree*)fref.Get("calPads");
+ tree->AddFriend(treeRef,"R");
+
+ tree->SetAlias("inPulser","(abs(PulserTmean.fElements-PulserTmean_Median)<1.5&&abs(PulserTrms.fElements-PulserTrms_Median)<0.2)"); // outlyerTrms
+ tree->SetAlias("inPulserR","(abs(R.PulserTmean.fElements-R.PulserTmean_Median)<1.5&&abs(R.PulserTrms.fElements-R.PulserTrms_Median)<0.2)"); // outlyerTrms
+ //
+ if (!isCalc){
+ // make fits only once
+ TStatToolkit toolkit;
+ Double_t chi2=0;
+ Int_t npoints=0;
+ TVectorD param;
+ TMatrixD covar;
+ tree->SetAlias("dt","PulserTmean.fElements-R.PulserTmean.fElements");
+ TCut cutAll ="inPulser&&inPulserR";
+ TString fstringG=""; // global part
+ fstringG+="ly.fElements++";
+ fstringG+="(lx.fElements-134.)++";
+ for (Int_t isec=0; isec<72; isec++){
+ TStatToolkit::FitPlane(tree,"dt", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
+ if (npoints<3) continue;
+ printf("Setor=%d\n",isec);
+ vec0[isec]=param[0];
+ vecLy[isec]=param[1];
+ vecLx[isec]=param[2];
+ sec[isec]=isec;
+ vecN[isec]=npoints;
+
+ TStatToolkit::FitPlane(tree,"PulserTmean.fElements", fstringG.Data(),Form("sector==%d",isec)+cutAll, chi2,npoints,param,covar,-1,0, 10000000, kFALSE);
+ if (npoints<3) continue;
+ printf("Setor=%d\n",isec);
+ vecA0[isec]=param[0];
+ vecALy[isec]=param[1];
+ vecALx[isec]=param[2];
+ vecAChi2[isec]=TMath::Sqrt(chi2/npoints);
+ }
+ isCalc=kTRUE;
+ }
+ (*fPcstream)<<"dcs"<< // Pulser information
+ "PulserTSector.="<<&sec<< // sector numbers
+ // // fit in respect to reference
+ "PulserTRef0.="<<&vec0<< // offset change
+ "PulserTRefY.="<<&vecLy<< // slope y change - rad
+ "PulserTRefX.="<<&vecLx<< // slope x change - rad
+ "PulserTRefChi2.="<<&vecChi2<< // chi2 (rms in cm)
+ "PulserTRefN.="<<&vecN<< //number of accepted points
+ // // fit in respect per mean per side
+ "PulserT0.="<<&vecA0<< // offset change
+ "PulserTY.="<<&vecALy<< // slope y change - rad
+ "PulserTX.="<<&vecALx<< // slope x change - rad
+ "PulserTChi2.="<<&vecAChi2; // chi2 (rms in cm)
+}
+
+
+
+
+
+// TCanvas * DrawCEDiff(TTree * tree){
+
+// TCanvas *canvasIO = new TCanvas("canvasCEIO","canvasCEIO");
+// canvasIO->Divide(6,6);
+// for (Int_t isec=0; isec<36; isec++){
+// canvasIO->cd(isec+1);
+// dcs->Draw(Form("CET0.fElements[%d]-CET0.fElements[%d]",isec+36,isec),Form("abs(CETRef0.fElements[%d])<0.3",isec),"");
+// printf("%d\t%f\t%f\n",isec,dcs->GetHistogram()->GetMean(),dcs->GetHistogram()->GetRMS());
+// }
+
+// }
void ProcessAlign(Int_t run, Int_t timeStamp);
void ProcessGain(Int_t run, Int_t timeStamp);
+ void ProcessDriftCERef();
+ void ProcessPulserRef();
protected:
AliTPCcalibDB *fCalibDB; //! pointer to the TPC calib manager
AliTPCcalibDButil *fDButil; //! pointer to the TPC calib db utils
#include "TSystem.h"
#include "TStatToolkit.h"
#include "TCut.h"
+#include "THnSparse.h"
AliTPCcalibBase(),
fClusterParam(0),
fROC(0),
+ fHisDeltaY(0), // THnSparse - delta Y
+ fHisDeltaZ(0), // THnSparse - delta Z
+ fHisRMSY(0), // THnSparse - rms Y
+ fHisRMSZ(0), // THnSparse - rms Z
+ fHisQmax(0), // THnSparse - qmax
+ fHisQtot(0), // THnSparse - qtot
fArrayAmpRow(0),
fArrayAmp(0),
fArrayQDY(0),
//
// AliTPCcalibTracks default constructor
//
- SetDebugLevel(1);
if (GetDebugLevel() > 0) cout << "AliTPCcalibTracks' default constructor called" << endl;
}
AliTPCcalibBase(calibTracks),
fClusterParam(0),
fROC(0),
+ fHisDeltaY(0), // THnSparse - delta Y
+ fHisDeltaZ(0), // THnSparse - delta Z
+ fHisRMSY(0), // THnSparse - rms Y
+ fHisRMSZ(0), // THnSparse - rms Z
+ fHisQmax(0), // THnSparse - qmax
+ fHisQtot(0), // THnSparse - qtot
fArrayAmpRow(0),
fArrayAmp(0),
fArrayQDY(0),
AliTPCcalibBase(),
fClusterParam(0),
fROC(0),
+ fHisDeltaY(0), // THnSparse - delta Y
+ fHisDeltaZ(0), // THnSparse - delta Z
+ fHisRMSY(0), // THnSparse - rms Y
+ fHisRMSZ(0), // THnSparse - rms Z
+ fHisQmax(0), // THnSparse - qmax
+ fHisQtot(0), // THnSparse - qtot
fArrayAmpRow(0),
fArrayAmp(0),
fArrayQDY(0),
}
fCuts = cuts;
SetDebugLevel(logLevel);
+ MakeHistos();
TH1::AddDirectory(kFALSE);
fcalPadRegionChargeVsDriftlength->Delete();
delete fcalPadRegionChargeVsDriftlength;
}
+ delete fHisDeltaY; // THnSparse - delta Y
+ delete fHisDeltaZ; // THnSparse - delta Z
+ delete fHisRMSY; // THnSparse - rms Y
+ delete fHisRMSZ; // THnSparse - rms Z
+ delete fHisQmax; // THnSparse - qmax
+ delete fHisQtot; // THnSparse - qtot
+
}
// To be called in the selector
// first AcceptTrack is evaluated, then calls all the following analyse functions:
// FillResolutionHistoLocal(track)
- // AlignUpDown(track, esd)
+
//
if (GetDebugLevel() > 5) Info("Process","Starting to process the track...");
Int_t accpetStatus = AcceptTrack(track);
if (accpetStatus == 0) {
FillResolutionHistoLocal(track);
- // AlignUpDown(track, esd);
}
else fRejectedTracksHisto->Fill(accpetStatus);
}
fFitterParY.Eval();
fFitterParZ.Eval();
Double_t chi2 = (fFitterParY.GetChisquare() + fFitterParZ.GetChisquare()) / (2. * nclFound - 6.);
- //if (chi2 > kCutChi2) fRejectedTracksHisto->Fill(9);
- //if (chi2 > kCutChi2) fClusterCutHisto->Fill(2, irow);
- //if (chi2 > kCutChi2) continue; // if chi^2 is too big goto next padrow
TTreeSRedirector *cstream = GetDebugStreamer();
if (cstream){
(*cstream)<<"Cut9"<<
TMatrixD chi2Z(difZT, TMatrixD::kMult, mulZ);
cchi2 += chi2Z(0, 0);
- // REMOVE KINK - TO be fixed - proper chi2 calculation for curved track to be implemented
- //if (chi2 * 0.25 > kCutChi2) fRejectedTracksHisto->Fill(8);
- //if (chi2 * 0.25 > kCutChi2) fClusterCutHisto->Fill(3, irow);
- //if (chi2 * 0.25 > kCutChi2) continue; // if chi2 is too big goto next padrow
- // fit tracklet with polynom of 2nd order and two polynoms of 1st order
- // take both polynoms of 1st order, calculate difference of their parameters
- // add covariance matrixes and calculate chi2 of this difference
- // if this chi2 is bigger than a given threshold, assume that the current cluster is
- // a kink an goto next padrow
-
if (cstream){
(*cstream)<<"Cut8"<<
"chi2="<<cchi2<<
if (GetDebugLevel() > 20) Info("FillResolutionHistoLocal","Filling 'TPCSelectorDebug.root', irow = %i", irow);
FillResolutionHistoLocalDebugPart(track, cluster0, irow, angley, anglez, nclFound, kDelta);
} // if (useForResol && nclFound > 2 * kMinRatio * kDelta)
+ //
+ // Fill THN histograms
+ //
+ Double_t xvar[9];
+ xvar[1]=padSize;
+ xvar[2]=1.-TMath::Abs(cluster0->GetZ())/250.;
+ xvar[3]=cluster0->GetMax();
+ xvar[5]=angley;
+ xvar[6]=anglez;
+
+ xvar[4]=cluster0->GetPad()-TMath::Nint(cluster0->GetPad());
+ xvar[0]=deltay;
+ fHisDeltaY->Fill(xvar);
+ xvar[0]=TMath::Sqrt(cluster0->GetSigmaY2());
+ fHisRMSY->Fill(xvar);
+
+ xvar[4]=cluster0->GetTimeBin()-TMath::Nint(cluster0->GetTimeBin());
+ xvar[0]=deltaz;
+ fHisDeltaZ->Fill(xvar);
+ xvar[0]=TMath::Sqrt(cluster0->GetSigmaZ2());
+ fHisRMSZ->Fill(xvar);
} // loop over all padrows along the track: for (Int_t irow = 0; irow < 159; irow++)
} // FillResolutionHistoLocal(...)
// fCalPadClusterPerPadRaw->Add(calibTracks->GetfCalPadClusterPerPadRaw());
counter++;
if (GetDebugLevel() > 5) cout << "filling lists, object " << counter << " added." << endl;
+ AddHistos(calibTracks);
}
+void AliTPCcalibTracks::MakeHistos(){
+ //
+ ////make THnSparse
+ //
+ //THnSparse *fHisDeltaY; // THnSparse - delta Y
+ //THnSparse *fHisDeltaZ; // THnSparse - delta Z
+ //THnSparse *fHisRMSY; // THnSparse - rms Y
+ //THnSparse *fHisRMSZ; // THnSparse - rms Z
+ //THnSparse *fHisQmax; // THnSparse - qmax
+ //THnSparse *fHisQtot; // THnSparse - qtot
+ // cluster performance bins
+ // 0 - variable of interest
+ // 1 - pad type - 0- short 1-medium 2-long pads
+ // 2 - drift length - drift length -0-1
+ // 3 - Qmax - Qmax - 2- 400
+ // 4 - cog - COG position - 0-1
+ // 5 - tan(phi) - local y angle
+ // 6 - tan(theta) - local z angle
+ // 7 - sector - sector number
+ Double_t xminTrack[8], xmaxTrack[8];
+ Int_t binsTrack[8];
+ TString axisName[8];
+
+ //
+ binsTrack[0]=100;
+ axisName[0] ="var";
+
+ binsTrack[1] =3;
+ xminTrack[1] =0; xmaxTrack[1]=3;
+ axisName[1] ="pad type";
+ //
+ binsTrack[2] =10;
+ xminTrack[2] =0; xmaxTrack[2]=1;
+ axisName[2] ="drift length";
+ //
+ binsTrack[3] =10;
+ xminTrack[3] =1; xmaxTrack[3]=400;
+ axisName[3] ="Qmax";
+ //
+ binsTrack[4] =10;
+ xminTrack[4] =0; xmaxTrack[4]=1;
+ axisName[4] ="cog";
+ //
+ binsTrack[5] =10;
+ xminTrack[5] =0; xmaxTrack[5]=2;
+ axisName[5] ="tan(phi)";
+ //
+ binsTrack[6] =10;
+ xminTrack[6] =0; xmaxTrack[6]=2;
+ axisName[6] ="tan(theta)";
+ //
+ xminTrack[0] =-0.5; xmaxTrack[0]=0.5;
+ fHisDeltaY=new THnSparseS("#Delta_{y} (cm)","#Delta_{y} (cm)", 7, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =-0.5; xmaxTrack[0]=0.5;
+ fHisDeltaZ=new THnSparseS("#Delta_{z} (cm)","#Delta_{z} (cm)", 7, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =0.; xmaxTrack[0]=0.5;
+ fHisRMSY=new THnSparseS("#RMS_{y} (cm)","#RMS_{y} (cm)", 7, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =0.; xmaxTrack[0]=0.5;
+ fHisRMSZ=new THnSparseS("#RMS_{z} (cm)","#RMS_{z} (cm)", 7, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =0.; xmaxTrack[0]=100;
+ fHisQmax=new THnSparseS("Qmax (ADC)","Qmax (ADC)", 7, binsTrack,xminTrack, xmaxTrack);
+
+ xminTrack[0] =0.; xmaxTrack[0]=250;
+ fHisQtot=new THnSparseS("Qtot (ADC)","Qtot (ADC)", 7, binsTrack,xminTrack, xmaxTrack);
+ BinLogX(fHisDeltaY,3);
+ BinLogX(fHisDeltaZ,3);
+ BinLogX(fHisRMSY,3);
+ BinLogX(fHisRMSZ,3);
+ BinLogX(fHisQmax,3);
+ BinLogX(fHisQtot,3);
+
+}
+
+void AliTPCcalibTracks::AddHistos(AliTPCcalibTracks* calib){
+ //
+ // Add histograms
+ //
+ if (calib->fHisDeltaY) fHisDeltaY->Add(calib->fHisDeltaY);
+ if (calib->fHisDeltaZ) fHisDeltaZ->Add(calib->fHisDeltaZ);
+ if (calib->fHisRMSY) fHisRMSY->Add(calib->fHisRMSY);
+ if (calib->fHisRMSZ) fHisRMSZ->Add(calib->fHisRMSZ);
+}
void Process(AliESDEvent *event) {AliTPCcalibBase::Process(event);};
void Process(AliESDtrack *track, Int_t runNo=-1){AliTPCcalibBase::Process(track,runNo);};
virtual Long64_t Merge(TCollection *li);
+ void AddHistos(AliTPCcalibTracks* calib);
void MakeResPlotsQTree(Int_t minEntries = 100, const char* pathName = "plots");
static void MakeQPosNormAll(TTree * chain, AliTPCClusterParam * param, Int_t maxPoints=1000000);
void MakeReport(Int_t stat, const char* pathName = "plots"); // calls all functions that procude pictures, results are written to pathName, stat is the minimal statistic threshold
AliTPCCalPad* GetfCalPadClusterPerPadRaw() const {return fCalPadClusterPerPadRaw;}
AliTPCCalPadRegion* GetCalPadRegionchargeVsDriftlength() const {return fcalPadRegionChargeVsDriftlength;}
AliTPCcalibTracksCuts* GetCuts() {return fCuts;}
+ void MakeHistos(); //make THnSparse
protected:
private:
void FillResolutionHistoLocalDebugPart(AliTPCseed *track, AliTPCclusterMI *cluster0, Int_t irow, Float_t angley, Float_t anglez, Int_t nclFound, Int_t kDelta);
AliTPCClusterParam *fClusterParam; // pointer to cluster parameterization
AliTPCROC *fROC; //!
+ THnSparse *fHisDeltaY; // THnSparse - delta Y
+ THnSparse *fHisDeltaZ; // THnSparse - delta Z
+ THnSparse *fHisRMSY; // THnSparse - rms Y
+ THnSparse *fHisRMSZ; // THnSparse - rms Z
+ THnSparse *fHisQmax; // THnSparse - qmax
+ THnSparse *fHisQtot; // THnSparse - qtot
+
+
TObjArray *fArrayAmpRow; // array with amplitudes versus row for given sector
TObjArray *fArrayAmp; // array with amplitude for sectors
TObjArray *fArrayQDY; // q binned delta Y histograms
TObjArray *fArrayQRMSZ; // q binned delta Z histograms
TObjArray *fArrayChargeVsDriftlength; // array of arrays of TProfiles with charge vs. driftlength for each padsize and sector
AliTPCCalPadRegion *fcalPadRegionChargeVsDriftlength; // CalPadRegion, one TProfile for charge vs. driftlength for each padsize and sector
+
TH1F *fDeltaY; // integrated delta y histo
TH1F *fDeltaZ; // integrated delta z histo
TObjArray *fResolY; // array of resolution histograms Y