/* * TpcClusterCalibDataset.cxx * * Created on: Apr 24, 2015 * Author: mberger */ #include "TpcClusterCalibDataset.h" #include "TH2.h" #include "TH1.h" #include #include #include TpcClusterCalibDataset::TpcClusterCalibDataset(int nbinsZ, double startZ, double endZ) : fnZbins(nbinsZ), fminZ(startZ), fmaxZ(endZ), fnCluster(0), fuseTheta(false), fnThetabins(0), fminTheta(0), fmaxTheta(0), fnClusterTheta(0), fbinWidthTheta(0) { fDataA1 = new std::vector [nbinsZ]; fDataA2 = new std::vector [nbinsZ]; fbinWidth=(endZ-startZ)/nbinsZ; fDataThetaA1=NULL; fDataThetaA2=NULL; fDataZThetaA1=NULL; fDataZThetaA2=NULL; } TpcClusterCalibDataset::TpcClusterCalibDataset(int nbinsZ, double startZ, double endZ, int nbinsTheta, double startTheta, double endTheta) : fnZbins(nbinsZ), fminZ(startZ), fmaxZ(endZ), fnCluster(0), fuseTheta(true), fnThetabins(nbinsTheta), fminTheta(startTheta), fmaxTheta(endTheta), fnClusterTheta(0) { fbinWidth=(endZ-startZ)/nbinsZ; fDataA1 = new std::vector [nbinsZ]; fDataA2 = new std::vector [nbinsZ]; fbinWidthTheta=(endTheta-startTheta)/nbinsTheta; fDataThetaA1 = new std::vector [nbinsTheta]; fDataThetaA2 = new std::vector [nbinsTheta]; fDataZThetaA1 = new std::vector [nbinsZ*nbinsTheta]; fDataZThetaA2 = new std::vector [nbinsZ*nbinsTheta]; /* for (int i=0;i++;i [nbinsTheta]; fDataZThetaA2[i]=new std::vector [nbinsTheta]; } */ } TpcClusterCalibDataset::TpcClusterCalibDataset(const TpcClusterCalibDataset& other) : fnZbins(other.fnZbins), fminZ(other.fminZ), fmaxZ(other.fmaxZ), fbinWidth(other.fbinWidth), fnCluster(other.fnCluster), fuseTheta(other.fuseTheta), fnThetabins(other.fnThetabins), fminTheta(other.fminTheta), fmaxTheta(other.fmaxTheta), fnClusterTheta(other.fnClusterTheta), fbinWidthTheta(other.fbinWidthTheta) { //be aware that this copy constructor doesn't copy the data! fDataA1 = new std::vector [other.fnZbins]; fDataA2 = new std::vector [other.fnZbins]; fDataThetaA1 = new std::vector [other.fnThetabins]; fDataThetaA2 = new std::vector [other.fnThetabins]; fDataZThetaA1 = new std::vector [other.fnZbins*other.fnThetabins]; fDataZThetaA2 = new std::vector [other.fnZbins*other.fnThetabins]; /* for (int i=0;i++;i [other.fnThetabins]; fDataZThetaA2[i]=new std::vector [other.fnThetabins]; } */ } TpcClusterCalibDataset::~TpcClusterCalibDataset() { delete[] fDataA1; delete[] fDataA2; if (fDataThetaA1!=NULL) delete[] fDataThetaA1; if (fDataThetaA2!=NULL) delete[] fDataThetaA2; if(fDataZThetaA1!=NULL) { delete[] fDataZThetaA1; } if(fDataZThetaA2!=NULL) { delete[] fDataZThetaA2; } } void TpcClusterCalibDataset::setTheta(int nbinsTheta, double startTheta, double endTheta) { fuseTheta=true; fnThetabins=nbinsTheta; fminTheta=startTheta; fmaxTheta=endTheta; fbinWidthTheta=(fmaxTheta-fminTheta)/fnThetabins; fDataThetaA1 = new std::vector [fnThetabins]; fDataThetaA2 = new std::vector [fnThetabins]; } void TpcClusterCalibDataset::Reset(TString opt) { for(int i=0;ifnZbins) { std::cout<<"TpcClusterCalibDataset::Fill: zbin "<fnThetabins) { std::cout<<"TpcClusterCalibDataset::Fill: thetaBin "<fnZbins) { std::cout<<"TpcClusterCalibDataset::FillZTheta: zbin "<fnThetabins) { std::cout<<"TpcClusterCalibDataset::FillZTheta: thetaBin "<* TpcClusterCalibDataset::getZbinData(int iset, int ibin) { if(iset==1) return (&fDataA1[ibin]); else if(iset==2) return (&fDataA2[ibin]); std::cout<<"TpcClusterCalibDataset::getZbinData Dataset "< 0 ? sqrt( (rms*rms) /(2*nentries) ) : 0. ); } double TpcClusterCalibDataset::getMeanError(int iset, int firstBin,int lastBin) { int nentries=0; for(int i=firstBin;i<=lastBin;i++) if(iset==1) nentries+=fDataA1[i].size(); //for(int j=0;j0?rms/sqrt(nentries):0); } TH2D TpcClusterCalibDataset::getHist(int iset) { TString name="Pulls Axis "; name += iset; TH2D hist(name,name,75,0,75,400,-20,20); for(int i=0;i=fnThetabins) { std::cout<<"requested bin out of range ("<=fnThetabins) { std::cout<<"requested Theta bin out of range ("<=fnZbins) { std::cout<<"requested Z bin out of range ("<