#include #include #include #include #include #include #include #include #include "histContainers.h" #include "TCtrack.h" #include "TCalign.h" using std::string; void trackHistContainer::fillRes(TCtrack* track,bool unbiased){ TCalign* a = TCalign::getInstance(); TMatrixT rot(3,3); TVector3 dummyV; double dummyD; histogramChi2->Fill(track->getChi2()/track->getNDF()); histogramChi2rough->Fill(track->getChi2()/track->getNDF()); histogramChi2Rrough->Fill(track->getChi2()/track->getNDF()); histogramNDF->Fill(track->getNDF()); histogramAx->Fill(track->getAx()); histogramAy->Fill(track->getAy()); histogramBx->Fill(track->getBx()); histogramBy->Fill(track->getBy()); hitmapTPC->Fill(track->getAx()*100+track->getBx(),track->getAy()*100+track->getBy()); for(unsigned int i=0;inCl();++i){ TCcluster tmpcl = track->getCl(i); double uCl=tmpcl.posUVW().x(); double z=tmpcl.posXYZ().z(); TVector3 trackCross(track->getAx()*z+track->getBx(),track->getAy()*z+track->getBy(),z); TVector3 trackCrossUVW=a->XYZtoUVW(tmpcl.getId(),trackCross); TVector3 resid=tmpcl.getRes(); TMatrixT coVarTrackParam = track->getErrMatrix(); a->getConv(tmpcl.getId(),dummyV,rot,dummyD); TMatrixT D(2,1); D[0][0]=rot[0][0]; D[1][0]=rot[1][0]; TMatrixT D_T= D.T(); D.T(); TMatrixT T(4,2); T[0][0]=z; T[0][1]=0; T[1][0]=1; T[1][1]=0; T[2][0]=0; T[2][1]=z; T[3][0]=0; T[3][1]=1; TMatrixT T_T=T.T(); T.T(); TMatrixT sigmaU= D_T*T_T*coVarTrackParam*T*D; // double dx=1;//sqrt(z*z*dax*dax+dbx*dbx+2*z*covar[0][1]); //double dy=1;//sqrt(z*z*day*day+dby*dby+2*z*covar[2][3]); // cout<0&&tmpcl.getId()<9){ if(!unbiased){ // std::cout<<"filling "<<(tmpcl.getId()-1)<Fill(resid.x()); residualVu2Dhist.at(tmpcl.getId()-1)->Fill(uCl,resid.x()); residualVuProfile.at(tmpcl.getId()-1)->Fill(uCl,resid.x()); residualVuTrack2Dhist.at(tmpcl.getId()-1)->Fill(trackCrossUVW.x(),resid.x()); residualVuTrackProfile.at(tmpcl.getId()-1)->Fill(trackCrossUVW.x(),resid.x()); xPos.at(tmpcl.getId()-1)->Fill(tmpcl.posXYZ().x()); yPos.at(tmpcl.getId()-1)->Fill(tmpcl.posXYZ().y()); u.at(tmpcl.getId()-1)->Fill(uCl); trackErr.at(tmpcl.getId()-1)->Fill(sqrt(sigmaU[0][0])); trackErrProfile.at(tmpcl.getId()-1)->Fill(uCl,sqrt(sigmaU[0][0])); }else{ double residX=trackCrossUVW.x()-uCl; residual.at(tmpcl.getId()-1)->Fill(residX); residualVu2Dhist.at(tmpcl.getId()-1)->Fill(uCl,residX); residualVuProfile.at(tmpcl.getId()-1)->Fill(uCl,residX); residualVuTrack2Dhist.at(tmpcl.getId()-1)->Fill(trackCrossUVW.x(),residX); residualVuTrackProfile.at(tmpcl.getId()-1)->Fill(trackCrossUVW.x(),residX); xPos.at(tmpcl.getId()-1)->Fill(tmpcl.posXYZ().x()); yPos.at(tmpcl.getId()-1)->Fill(tmpcl.posXYZ().y()); u.at(tmpcl.getId()-1)->Fill(uCl); trackErr.at(tmpcl.getId()-1)->Fill(sqrt(sigmaU[0][0])); trackErrProfile.at(tmpcl.getId()-1)->Fill(uCl,sqrt(sigmaU[0][0])); } } } // cout<Write(); residualVu2Dhist.at(i)->Write(); residualVuProfile.at(i)->Write(); residualVuTrack2Dhist.at(i)->Write(); residualVuTrackProfile.at(i)->Write(); xPos.at(i)->Write(); yPos.at(i)->Write(); u.at(i)->Write(); trackErr.at(i)->Write(); trackErrProfile.at(i)->Write(); } hitmapTPC->Write(); histogramNDF->Write(); histogramChi2->Write(); histogramChi2rough->Write(); histogramChi2Rrough->Write(); histogramAx->Write(); histogramAy->Write(); histogramBx->Write(); histogramBy->Write(); file->Close(); delete file; }