//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class PndTpcProximityHTCorrelator // see PndTpcProximityHTCorrelator.hh for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Sebastian Neubert TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "PndTpcProximityHTCorrelator.h" // C/C++ Headers ---------------------- #include "TVector3.h" // Collaborating Class Headers -------- #include "PndTpcRiemannTrack.h" #include "PndTpcRiemannHit.h" #include "PndTpcCluster.h" #include "DebugLogger.h" // Class Member definitions ----------- //#define MCCORR // use ideal correlation for adjusting cuts!! PndTpcProximityHTCorrelator::PndTpcProximityHTCorrelator(double cut, double zStretch) : _proxcut(cut), _zStretch(zStretch) {} bool PndTpcProximityHTCorrelator::corr(PndTpcRiemannTrack* trk, PndTpcRiemannHit* rhit, bool& survive, double& matchQuality) { int speedupfactor = 3; int trksize = trk->getNumHits(); TVector3 posX = rhit->cluster()->pos(); //std::cout<<"PndTpcProximityHTCorrelator::corr; tracksize: "< 3){ TVector3 pos; double dis; double largecut = speedupfactor*_proxcut; //if (_zStretch < 1) largecut *= _zStretch; bool faraway = true; bool check = true; while(check){ pos = trk->getHit(i)->cluster()->pos(); dis = (posX-pos).Mag(); //std::cout<<"i "<trksize-1) i=trksize-1; } if(faraway){ matchQuality=largecut; survive=false; return true; } } // get closest hit from track double l; int index = trk->getClosestHit(rhit,l,closest-2*speedupfactor,closest+3*speedupfactor); TVector3 dist = posX - trk->getHit(index)->cluster()->pos(); // use ideal correlation for adjusting cuts!! #ifdef MCCORR double minWeight(0.9); //dist.Print(); if (dist.Mag()>_proxcut){ survive=false; return true; } double Tweight, Hweight; Tweight = trk->mcid().MaxRelWeight(); Hweight = rhit->cluster()->mcId().MaxRelWeight(); //std::cout<mcid().DominantID()<<"\n" // <cluster()->mcId().DominantID()<<"\n\n"; if(trk->mcid().DominantID()==rhit->cluster()->mcId().DominantID() && Tweight>minWeight && Hweight>minWeight){ DebugLogger::Instance()->Histo3D("HT_prox_true",dist.X(),dist.Y(),dist.Z(), -5,5,100, -5,5,100, -5,5,100); DebugLogger::Instance()->Histo("HT_prox_true_X",dist.X(),-10,10,1000); DebugLogger::Instance()->Histo("HT_prox_true_Y",dist.Y(),-10,10,1000); DebugLogger::Instance()->Histo("HT_prox_true_Z",dist.Z(),-10,10,1000); matchQuality=1-Tweight; survive=true; //std::cout<<" survive!"<Histo3D("HT_prox_false",dist.X(),dist.Y(),dist.Z(), -5,5,100, -5,5,100, -5,5,100); DebugLogger::Instance()->Histo("HT_prox_false_X",dist.X(),-10,10,1000); DebugLogger::Instance()->Histo("HT_prox_false_Y",dist.Y(),-10,10,1000); DebugLogger::Instance()->Histo("HT_prox_false_Z",dist.Z(),-10,10,1000); survive=false; } return true; #endif dist.SetZ(dist.Z()/_zStretch); l = dist.Mag(); //std::cout<<"distance in 3D: "<Histo("HT_prox_l",l,0,5,100); matchQuality=l; if(l>_proxcut){ DebugLogger::Instance()->Histo("HT_riemanncuts",1,0,20,20); survive=false; return true; } survive=true; return true; }