예제 #1
0
double Ant::getTauEta(TourNode lastNode, TourNode newNode, TourValues deltaValues)
{
    // get tau_ij, eta_ij^k
    double tau = _pm.getTau(lastNode, newNode);
    double eta = getEta(deltaValues);
    
    // calculate t_ij^alpha * n_ij^beta
    return pow(tau, _alpha) * pow(eta, _beta);
}
예제 #2
0
double getMomScaleFactor(Int_t pId, Float_t pX, Float_t pY, Float_t pZ) {

  double momSc = 1.;

  if(abs(pId)==13) momSc = 1.00 - 0.01;
  else if(abs(pId)==11) {
    if( fabs(getEta(pX, pY, pZ))<1.4442 ) 
      momSc = 1.00 - 0.02;
    else 
      momSc = 1.00 - 0.035;
  }

  return momSc;
}
예제 #3
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;
}
예제 #4
0
		// Returns formatted eta as string
		inline std::string getTextEta()
		{
			return getTimeString(getEta());
		}
예제 #5
0
// Returns formatted eta as string
std::string gt::Torrent::getTextEta()
{
	return getTimeString(getEta());
}
예제 #6
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();

}