//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of resCalc // Uses existing CDC circle fits (XY) and calculates // residua in XY. // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Felix Boehmer (original author) // Francesco Cusanno (adapted for the alignment manager) // Physik Department E18, TUM // //----------------------------------------------------------- #include "TpcCdcFit2DResCalc.h" #include "TClonesArray.h" #include "TClass.h" #include "CdcTrack.h" #include "TpcCluster.h" #include "TpcResidual.h" #include "TpcRefResidualCollection.h" #include "TpcAlignmentManager.h" #include #include #include TpcCdcFit2DResCalc::TpcCdcFit2DResCalc() : fCutVal(false), fAlignment(false), fMomCut(0) { fNExpectedBranches = 2; } TpcCdcFit2DResCalc::~TpcCdcFit2DResCalc() {;} bool TpcCdcFit2DResCalc::init() { if(fBranchMap.size() != fNExpectedBranches) { std::cout<<"TpcCdcFit2DResCalc::init(): "<::const_iterator it; for(it=fBranchMap.begin(); it!=fBranchMap.end(); it++) { std::string type((it->second)->GetClass()->GetName()); if(type.find(cdcTrackRefType)second; fCdcTrackBranch = it->first; foundCdcTrack=true; std::cout<<"TpcCdcFit2DResCalc::init(): "<second; foundTpcCluster=true; std::cout<<"TpcCdcFit2DResCalc::init(): "<GetEntriesFast(); // //CDC trackfit loop for(unsigned int itr=0; itrGetValid(); int nPoints = itrack->GetNpoint(); if((val>0) && fCutVal) { std::cout<<"TpcCdcFit2DResCalc::calc(): "<GetMom()GetMx(); double my = itrack->GetMy(); double r = itrack->GetRadius(); //calculate residuals in XY -------------------------- unsigned int ncl = fTpcClusterArray->GetEntriesFast(); for(unsigned int icl=0; icllocalToMaster("tpc",cl->pos()); } else { clPos = cl->pos(); } // TVector3 copy = clPos; clPos.SetZ(0.); TVector3 M(mx, my, 0.); TVector3 diff = clPos-M; double dist = diff.Mag() - r; //fiducial volume cut if(fabs(dist)>fDistCut) continue; //save residual diff.SetMag(dist); TpcResidual* resi = new TpcResidual(); resi->setResXYZ(diff); resi->setHitPos(copy); resi->setHitIndex(icl); TVector3 pP = clPos - diff; //reference position on the circle resi->setRefPos(pP); fResults.back()->addResidual(resi); } //end residual calculation ------------------------- }//end CDC trackfit loop }