// Get particle closest in phi Float_t getParticleClosestInPhi(Float_t px1, Float_t py1, Float_t phi2, Float_t ptThr = 0.) { Float_t thisDPhi = 4.; if( getPt(px1, py1)<ptThr ) return thisDPhi; Float_t tmpDPhi = getDeltaPhi(px1, py1, phi2); thisDPhi = tmpDPhi; return thisDPhi; }
// Get particle closest in phi Float_t getParticleClosestInPhi(UInt_t npart1, Float_t *px1, Float_t *py1, Float_t phi2, Int_t & pickedIdx, Float_t ptThr = 0., Bool_t *jetIdTight1 = 0) { pickedIdx = -1; Float_t thisDPhi = 4.; for(UInt_t k=0; k<npart1; ++k) { if( jetIdTight1 && jetIdTight1[k]==false ) continue; if( getPt(px1[k], py1[k])<ptThr ) continue; Float_t tmpDPhi = getDeltaPhi(px1[k], py1[k], phi2); if(tmpDPhi<thisDPhi) { thisDPhi = tmpDPhi; pickedIdx = k; } } return thisDPhi; }
// Get list of particles above some pt/Et std::vector<UInt_t> getListOfParticlesWithPt(UInt_t nPart, Float_t *vPx, Float_t *vPy, Float_t ptThr, bool doScale = false, Int_t *vId = 0, Float_t *vPz = 0, Bool_t *vJetIdTight = 0) { std::vector<UInt_t> listParts; bool momScale(doScale && vId && vPz); bool useJetTightId(vJetIdTight); for(UInt_t iPart=0; iPart<nPart; ++iPart) { if( useJetTightId && vJetIdTight[iPart]==false ) continue; Float_t thisPt = getPt(vPx[iPart], vPy[iPart]); if(momScale) { thisPt *= getMomScaleFactor(vId[iPart], vPx[iPart], vPy[iPart], vPz[iPart]); } if(thisPt>ptThr) listParts.push_back(iPart); } return listParts; }
CBaseSimCtrl::CBaseSimCtrl(CBaseSimParams d) : SimulationParameters(d) { int currentId = MPI::COMM_WORLD.Get_rank(); ProcCount = MPI::COMM_WORLD.Get_size(); ManagerProcId = ProcCount - 1; ChildProcCount = ProcCount - 1; Cycles = 0; epsLine = 1; InitRandomGenerator(); for (size_t i = 0; i < SimulationParameters.PtCount; i++) { auto pt = getPt(i); particles_new.push_back(pt); particles_old.push_back(pt); particles_init.push_back(pt); } PerProcCount = SimulationParameters.PtCount / ProcCount; CreateDataMapping(); }
Float_t getMaxValue(UInt_t npart, Float_t *valArr, Int_t & pickedIdx, Float_t *vPx = 0, Float_t *vPy = 0, Float_t *vPz = 0, Float_t ptThr = 0., Float_t etaThr = 999., Bool_t *vIdTight = 0) { pickedIdx = -1; Float_t thisVal = -999999.; bool usePtThr(vPx!=0 && vPy!=0 && ptThr>0.); bool useEtaThr(vPx!=0 && vPy!=0 && vPz!=0 && etaThr<990.); bool useTightId(vIdTight!=0); for(UInt_t k=0; k<npart; ++k) { if( useTightId && vIdTight[k]==false ) continue; if( usePtThr && getPt(vPx[k], vPy[k])<ptThr ) continue; if( useEtaThr && fabs(getEta(vPx[k], vPy[k], vPz[k]))>etaThr ) continue; if(valArr[k]>thisVal) { thisVal = valArr[k]; pickedIdx = k; } } return thisVal; }
void MapBuilder::drawBezierCurve(int mousex, int mousey) { for( float i = 0 ; i <= 1.1 ; i += 0.1) { // The Green Line xa = getPt( anchorPoint1.x , controlPoint1.x , i ); ya = getPt( anchorPoint1.y , controlPoint1.y , i ); xb = getPt( controlPoint1.x , anchorPoint2.x, i ); yb = getPt( controlPoint1.y , anchorPoint2.y , i ); // greenDot.setPosition(xa,ya); // Window->draw(greenDot); // greenDot.setPosition(xb,yb); // Window->draw(greenDot); // The Black Dot curvePoint.x = getPt( xa , xb , i ); curvePoint.y = getPt( ya , yb , i ); // engine->Window->mapPixelToCoords(sf::Vector2i(-curvePointPrev.x,-curvePointPrev.y)); sf::Vector2f center(curvePoint.x, curvePoint.y); sf::Vector2f vec(curvePointPrev.x-curvePoint.x, curvePointPrev.y-curvePoint.y); float length = sqrt(vec.x * vec.x + vec.y * vec.y); // std::cout << vec.x << " " << vec.y << std::endl; sf::Vector2f perp(-vec.y,vec.x); // sf::Vector2f rightperp(-vec.y,vec.x); //normalize? perp.x /= length; perp.y /= length; if(i == .1) { curvePointPrev = curvePoint; perpPrev = perp; } //top vector line sf::Vertex top[] = { sf::Vertex(sf::Vector2f(curvePoint.x, curvePoint.y),sf::Color::Red), sf::Vertex(sf::Vector2f((perp.x*20)+center.x,(perp.y)*20+center.y),sf::Color::Blue) }; sf::Vertex acrosstop[] = { sf::Vertex(sf::Vector2f((perpPrev.x*20)+curvePointPrev.x,(perpPrev.y)*20+curvePointPrev.y),sf::Color::Red), sf::Vertex(sf::Vector2f((perp.x*20)+center.x,(perp.y)*20+center.y),sf::Color::Blue) }; //bottom vector line sf::Vertex bottom[] = { sf::Vertex(sf::Vector2f(curvePoint.x, curvePoint.y),sf::Color::Red), sf::Vertex(sf::Vector2f(center.x-(perp.x*20),center.y-(perp.y)*20),sf::Color::Blue) }; sf::Vertex acrossbottom[] = { sf::Vertex(sf::Vector2f(curvePointPrev.x-(perpPrev.x*20),curvePointPrev.y-(perpPrev.y*20)),sf::Color::Red), sf::Vertex(sf::Vector2f(center.x-(perp.x*20),center.y-(perp.y)*20),sf::Color::Blue) }; sf::Vertex curve[] = { sf::Vertex(sf::Vector2f(curvePoint.x, curvePoint.y),sf::Color::Green), sf::Vertex(sf::Vector2f(curvePointPrev.x,curvePointPrev.y),sf::Color::Green) }; engine->Window->draw(top, 2, sf::Lines); engine->Window->draw(bottom, 2, sf::Lines); if(i > .1) {engine->Window->draw(acrosstop, 2, sf::Lines); engine->Window->draw(acrossbottom, 2, sf::Lines); engine->Window->draw(curve, 2, sf::Lines); } blackDot.setPosition(curvePoint.x,curvePoint.y); engine->Window->draw(blackDot); perpPrev = perp; curvePointPrev = curvePoint; } }
void Road::respawnRoad(std::vector<Cereal*> cerealArray) { Vector3* vec; float xa, ya, xb, yb, x, y; float i; int num_cereals = 0; _cerealArray = cerealArray; //Curve 1 for (i = 0; i < 1; i += 0.10) { xa = getPt(-35.0f, -35.0f, i); ya = getPt(10.0f, 35.0f, i); xb = getPt(-35.0f, -10.0f, i); yb = getPt(35.0f, 35.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //Curve 2 for (i = 0; i < 1; i += 0.20) { xa = getPt(-25.0f, -25.0f, i); ya = getPt(10.0f, 25.0f, i); xb = getPt(-25.0f, -10.0f, i); yb = getPt(25.0f, 25.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //Curve 3 for (i = 0; i < 1; i += 0.1) { xa = getPt(-8.0f, 15.0f, i); ya = getPt(34.0f, 27.0f, i); xb = getPt(15.0f, 20.0f, i); yb = getPt(26.0f, 15.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } // curve 3 interior for (i = 0; i < 1; i += 0.1) { xa = getPt(-18.0f, 5.0f, i); ya = getPt(24.0f, 17.0f, i); xb = getPt(5.0f, 10.0f, i); yb = getPt(16.0f, 5.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //Curve 4 for (double t = 0.0; t <= 1.0; t += 0.05) { vec = bezierFunc(new Vector3(17.0f, 15.0f, 0.0f), new Vector3(37.0f, 15.0f, 0.0f), new Vector3(37.0f, -30.0f, 0.0f), new Vector3(15.0f, -30.0f, 0.0f), t); _cerealArray.at(num_cereals)->setPosition(vec); num_cereals++; } //Curva 4 interior for (double t = 0.0; t <= 1.0; t += 0.08) { vec = bezierFunc(new Vector3(7.0f, 5.0f, 0.0f), new Vector3(27.0f, 4.0f, 0.0f), new Vector3(27.0f, -20.0f, 0.0f), new Vector3(5.0f, -4.0f, 0.0f), t); _cerealArray.at(num_cereals)->setPosition(vec); num_cereals++; } //curve 5 for (i = 0; i < 1; i += 0.10) { xa = getPt(15.0f, 5.0f, i); ya = getPt(-31.0f, 0.0f, i); xb = getPt(5.0f, -15.0f, i); yb = getPt(-28.0f, -22.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //curve 5 interior for (i = 0; i < 1; i += 0.2) { xa = getPt(5.0f, 3.0f, i); ya = getPt(-4.0f, -15.0f, i); xb = getPt(3.0f, -17.0f, i); yb = getPt(-15.0f, -4.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //curve 6 for (i = 0; i < 1; i += 0.10) { xa = getPt(-15.0f, -25.0f, i); ya = getPt(-22.0f, -31.0f, i); xb = getPt(-30.0f, -25.0f, i); yb = getPt(-34.0f, -9.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //curve 6 interior for (i = 0; i < 1; i += 0.18) { xa = getPt(-12.0f, -13.0f, i); ya = getPt(-6.0f, -0.0f, i); xb = getPt(-13.0f, -26.0f, i); yb = getPt(0.0f, 9.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } //curve 7 for (i = 0; i < 1; i += 0.15) { xa = getPt(-25.0f, -33.0f, i); ya = getPt(-9.0f, -0.0f, i); xb = getPt(-33.0f, -35.0f, i); yb = getPt(0.0f, 10.0f, i); x = getPt(xa, xb, i); y = getPt(ya, yb, i); _cerealArray.at(num_cereals)->setPosition(new Vector3(x, y, 1.5f)); num_cereals++; } }
void PhysicsRecord::fillData(const TrackletCollection& tracklets, const HitCollection::tTrackList& mcTruth, const HitCollection& hits, uint nLayerTriplets) { LOG << "Evaluating event " << event << " layer triplet " << layerTriplet << std::endl; //std::ofstream histo("ptCalc", std::ios::app); //uint cPt = 0; uint swPt = 0; uint rwPt = 0; std::set<uint> foundTracks; uint fakeTracks = 0; uint foundClones = 0; uint nFoundTracklets = tracklets.getTrackletOffsets()[event * nLayerTriplets + layerTriplet + 1] - tracklets.getTrackletOffsets()[event * nLayerTriplets + layerTriplet]; LOG << "Found " << nFoundTracklets << " triplets:" << std::endl; for(uint i = tracklets.getTrackletOffsets()[event * nLayerTriplets + layerTriplet]; i < tracklets.getTrackletOffsets()[event * nLayerTriplets + layerTriplet + 1]; ++i){ Tracklet tracklet(tracklets, i); float tEta = getEta(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit3())); float tPt = getPt(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit2()), Hit(hits,tracklet.hit3())); if(tracklet.isValid(hits)){ //valid triplet if(mcTruth.find(tracklet.trackId(hits)) != mcTruth.end()){ // ensure that it is a "findable track" otherwise efficiency greater one possible bool inserted = foundTracks.insert(tracklet.trackId(hits)).second; if(inserted){ //found for the first time eta[getEtaBin(tEta)].valid++; pt[getPtBin(tPt)].valid++; /*double calculatedPt = getPt(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit2()), Hit(hits,tracklet.hit3())); double mcPt = mcTruth.at(tracklet.trackId(hits))[0].simtrackpt(); histo << fabs(calculatedPt - mcPt) / mcPt << std::endl; if((fabs(calculatedPt - mcPt) / mcPt) < 0.1) cPt++; else if((fabs(calculatedPt - mcPt) / mcPt) < 0.9) swPt++; else rwPt++;*/ VLOG << zkr::cc::fore::green; VLOG << "Track " << tracklet.trackId(hits) << " : " << tracklet.hit1() << "-" << tracklet.hit2() << "-" << tracklet.hit3(); VLOG << " TIP: " << getTIP(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit2()), Hit(hits,tracklet.hit3())); VLOG << zkr::cc::console << std::endl; } else { //clone ++foundClones; eta[getEtaBin(tEta)].clones++; pt[getPtBin(tPt)].clones++; /*double calculatedPt = getPt(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit2()), Hit(hits,tracklet.hit3())); double mcPt = mcTruth.at(tracklet.trackId(hits))[0].simtrackpt(); histo << fabs(calculatedPt - mcPt) / mcPt << std::endl; if((fabs(calculatedPt - mcPt) / mcPt) < 0.1) cPt++; else if((fabs(calculatedPt - mcPt) / mcPt) < 0.9) swPt++; else rwPt++;*/ VLOG << zkr::cc::fore::yellow; VLOG << "Track " << tracklet.trackId(hits) << " : " << tracklet.hit1() << "-" << tracklet.hit2() << "-" << tracklet.hit3(); VLOG << " TIP: " << getTIP(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit2()), Hit(hits,tracklet.hit3())); VLOG << zkr::cc::console << std::endl; } } else { //not in findable tracks definition but still valid eta[getEtaBin(tEta)].misc++; pt[getPtBin(tPt)].misc++; } } else { //fake triplet ++fakeTracks; eta[getEtaBin(tEta)].fake++; pt[getPtBin(tPt)].fake++; VLOG << zkr::cc::fore::red; VLOG << "Fake: " << tracklet.hit1() << "[" << hits.getValue(HitId(),tracklet.hit1()) << "]"; VLOG << "-" << tracklet.hit2() << "[" << hits.getValue(HitId(),tracklet.hit2()) << "]"; VLOG << "-" << tracklet.hit3() << "[" << hits.getValue(HitId(),tracklet.hit3()) << "]"; VLOG << " TIP: " << getTIP(Hit(hits,tracklet.hit1()), Hit(hits,tracklet.hit2()), Hit(hits,tracklet.hit3())); VLOG << zkr::cc::console << std::endl; } } //std::cout << "\tINTERMEIDATE: correctly calculated: " << cPt << " slightly wrongly calculated: " << swPt << " really wrong " << rwPt << std::endl; //output not found tracks for(auto vTrack : mcTruth) { if( foundTracks.find(vTrack.first) == foundTracks.end()){ VLOG << "Didn't find track " << vTrack.first << std::endl; PHitWrapper innerHit(vTrack.second[0]); PHitWrapper middleHit(vTrack.second[floor(vTrack.second.size()/2)]); PHitWrapper outerHit(vTrack.second[vTrack.second.size()-1]); /*double calculatedPt = getPt(innerHit, middleHit, outerHit); double mcPt = vTrack.second[0].simtrackpt(); histo << fabs(calculatedPt - mcPt) / mcPt << std::endl; if((fabs(calculatedPt - mcPt) / mcPt) < 0.1) cPt++; else if((fabs(calculatedPt - mcPt) / mcPt) < 0.9) swPt++; else rwPt++;*/ eta[getEtaBin(getEta(innerHit, outerHit))].missed++; pt[getPtBin(getPt(innerHit, middleHit, outerHit))].missed++; } } efficiencyMean = ((double) foundTracks.size()) / Utils::clamp(mcTruth.size()); fakeRateMean = ((double) fakeTracks) / Utils::clamp(nFoundTracklets); cloneRateMean = ((double) foundClones) / Utils::clamp(nFoundTracklets); eta.fill(); pt.fill(); //std::cout << "correctly calculated: " << cPt << " slightly wrongly calculated: " << swPt << " really wrong " << rwPt << std::endl; LOG << "Efficiency: " << efficiencyMean << " FakeRate: " << fakeRateMean << " CloneRate: " << cloneRateMean << std::endl; //histo.close(); }
void Tool_Whip::Update(sf::Time p_xDtime){ if( m_eState != State::Inactive ){ sf::Vector2f cp1 = sf::Vector2f( 0.f, 0.f ); sf::Vector2f cp2 = sf::Vector2f( 0.f, 0.f ); sf::Vector2f cp3 = sf::Vector2f( 0.f, 0.f ); float _y = 0.f; float _x = 0.f; float _width = 0.f; if(m_eState == State::Passive){ if( m_fSwingStart > 0.f ){ m_fSwingStart -= p_xDtime.asSeconds() / 0.3f; }else{ setState( State::Inactive ); } m_fSwing -= p_xDtime.asSeconds() / 0.05; _y = sinf( m_fSwing ) * 200.f * m_fSwingStart; _x = -50.f * m_fSwingStart; _width = cosf( m_fSwing ) * 3 + 7.f; cp1 = sf::Vector2f( 0.f, 0.f ); cp2 = sf::Vector2f( -40.f, 0.f); cp3 = sf::Vector2f( -20.f + _x, _y ); }else if(m_eState == State::Swinging){ if( m_fSwingStart < 1.f ){ m_fSwingStart += p_xDtime.asSeconds() / 0.3f; } m_fSwing -= p_xDtime.asSeconds() / 0.05; _y = sinf( m_fSwing ) * 200.f * m_fSwingStart; _x = -50.f * m_fSwingStart; _width = cosf( m_fSwing ) * 3 + 7.f; cp1 = sf::Vector2f( 0.f, 0.f ); cp2 = sf::Vector2f( -40.f, 0.f); cp3 = sf::Vector2f( -20.f + _x, _y ); }else if(m_eState == State::Whipping){ if( m_fSwingStart < 1.f ){ m_fSwingStart += p_xDtime.asSeconds() / 0.2f; }else{ setState( State::Dragging ); } _width = 10.f; cp1 = sf::Vector2f( 0.f, 0.f ); cp2 = sf::Vector2f( -40.f, m_fWhipDist / 2 * m_fSwingStart ); cp3 = sf::Vector2f( getOrigin().x, m_fWhipDist * m_fSwingStart ); }else if(m_eState == State::Dragging){ _width = 10.f; cp1 = sf::Vector2f( 0.f, 0.f ); cp2 = sf::Vector2f( -40.f, m_fWhipDist / 2 ); cp3 = sf::Vector2f( getOrigin().x, m_fWhipDist ); } int q = 0; float lastX = 0; float lastY = 0; for( float t = 0 ; t < 1 ; t = t ) { float _color = (150.f + cosf( m_fSwing ) * 100.f) * (1.5f - t); // The interpolation Line float xa = getPt( cp1.x , cp2.x , t ); float ya = getPt( cp1.y , cp2.y , t ); float xb = getPt( cp2.x , cp3.x , t ); float yb = getPt( cp2.y , cp3.y , t ); // The resulting position float x = getPt( xa , xb , t ); float y = getPt( ya , yb , t ); //Determine angle float a = (90.f * 3.141592 / 180) + atan2f( (y - lastY), (x - lastX) ); //Add vertices m_xVerts[q].position = sf::Vector2f( x + cosf(a) * -_width * (t + 0.5f), y + sinf(a) * -_width * (t + 0.5f)); m_xVerts[q+1].position = sf::Vector2f( x + cosf(a) * _width * (t + 0.5f), y + sinf(a) * _width * (t + 0.5f) ); if( m_eState == State::Passive || m_eState == State::Swinging ){ m_xVerts[q].texCoords = sf::Vector2f( 100.f * t, 0.f); m_xVerts[q+1].texCoords = sf::Vector2f( 100.f * t, m_xpTex->getSize().y); m_xVerts[q].color = sf::Color( _color, _color, _color, 255.f ); m_xVerts[q+1].color = sf::Color( _color, _color, _color, 255.f ); }else if( m_eState == State::Whipping || m_eState == State::Dragging ){ m_xVerts[q].texCoords = sf::Vector2f( m_fWhipDist * m_fSwingStart * t, 0.f); m_xVerts[q+1].texCoords = sf::Vector2f( m_fWhipDist * m_fSwingStart * t, m_xpTex->getSize().y); m_xVerts[q].color = sf::Color::White; m_xVerts[q+1].color = sf::Color::White; } q+=2; lastX = x; lastY = y; m_xpSprite->setPosition( x, y ); m_xpSprite->setRotation( -90 + a * 180 / 3.141592 ); m_xpSprite->setScale( cosf( m_fSwing ) * 0.5f + 0.8f * m_fSwingStart, cosf( m_fSwing ) * 0.5f + 0.8f * m_fSwingStart ); m_xpSprite->setColor( sf::Color( _color, _color, _color, 255.f ) ); t += 0.05f; } } }