예제 #1
0
// 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;
}
예제 #2
0
// 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;
}
예제 #3
0
// 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;
}
예제 #4
0
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();
}
예제 #5
0
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;
}
예제 #6
0
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;
        }
}
예제 #7
0
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++;
	}
}
예제 #8
0
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();

}
예제 #9
0
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;
		}

	}
}