#include <TrackerHitAssociator.h>
Definition at line 55 of file TrackerHitAssociator.h.
typedef std::map<unsigned int, std::vector<PSimHit> > TrackerHitAssociator::simhit_map |
Definition at line 94 of file TrackerHitAssociator.h.
typedef simhit_map::iterator TrackerHitAssociator::simhit_map_iterator |
Definition at line 95 of file TrackerHitAssociator.h.
typedef std::vector<std::string> TrackerHitAssociator::vstring [private] |
Definition at line 101 of file TrackerHitAssociator.h.
TrackerHitAssociator::TrackerHitAssociator | ( | const edm::Event & | e | ) |
Definition at line 26 of file TrackerHitAssociator.cc.
References MixCollection< T >::begin(), cf_simhit, cf_simhitvec, doPixel_, doStrip_, MixCollection< T >::end(), edm::Event::getByLabel(), i, pixeldigisimlink, edm::Handle< T >::product(), SimHitMap, stripdigisimlink, trackerContainers, and TrackerHits.
: myEvent_(e), doPixel_( true ), doStrip_( true ), doTrackAssoc_( false ) { trackerContainers.clear(); // // Take by default all tracker SimHits // trackerContainers.push_back("g4SimHitsTrackerHitsTIBLowTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTIBHighTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTIDLowTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTIDHighTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTOBLowTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTOBHighTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTECLowTof"); trackerContainers.push_back("g4SimHitsTrackerHitsTECHighTof"); trackerContainers.push_back("g4SimHitsTrackerHitsPixelBarrelLowTof"); trackerContainers.push_back("g4SimHitsTrackerHitsPixelBarrelHighTof"); trackerContainers.push_back("g4SimHitsTrackerHitsPixelEndcapLowTof"); trackerContainers.push_back("g4SimHitsTrackerHitsPixelEndcapHighTof"); // Step A: Get Inputs //MAKE THIS PRIVATE MEMBERS // edm::Handle<CrossingFrame<PSimHit> > cf_simhit; // std::vector<const CrossingFrame<PSimHit> *> cf_simhitvec; for(uint32_t i = 0; i< trackerContainers.size();i++){ e.getByLabel("mix",trackerContainers[i],cf_simhit); cf_simhitvec.push_back(cf_simhit.product()); } std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec)); TrackerHits = (*allTrackerHits); //Loop on PSimHit SimHitMap.clear(); MixCollection<PSimHit>::iterator isim; for (isim=allTrackerHits->begin(); isim!= allTrackerHits->end();isim++) { SimHitMap[(*isim).detUnitId()].push_back((*isim)); } if(doStrip_) e.getByLabel("simSiStripDigis", stripdigisimlink); if(doPixel_) e.getByLabel("simSiPixelDigis", pixeldigisimlink); }
TrackerHitAssociator::TrackerHitAssociator | ( | const edm::Event & | e, |
const edm::ParameterSet & | conf | ||
) |
Definition at line 77 of file TrackerHitAssociator.cc.
References MixCollection< T >::begin(), cf_simhit, cf_simhitvec, doPixel_, doStrip_, doTrackAssoc_, MixCollection< T >::end(), edm::Event::getByLabel(), edm::ParameterSet::getParameter(), i, pixeldigisimlink, edm::Handle< T >::product(), SimHitMap, stripdigisimlink, trackerContainers, and TrackerHits.
: myEvent_(e), doPixel_( conf.getParameter<bool>("associatePixel") ), doStrip_( conf.getParameter<bool>("associateStrip") ), doTrackAssoc_( conf.getParameter<bool>("associateRecoTracks") ){ //if track association there is no need to acces the CrossingFrame if(!doTrackAssoc_) { trackerContainers.clear(); trackerContainers = conf.getParameter<std::vector<std::string> >("ROUList"); // Step A: Get Inputs // edm::Handle<CrossingFrame<PSimHit> > cf_simhit; // std::vector<const CrossingFrame<PSimHit> *> cf_simhitvec; for(uint32_t i = 0; i< trackerContainers.size();i++){ e.getByLabel("mix",trackerContainers[i],cf_simhit); cf_simhitvec.push_back(cf_simhit.product()); } // std::cout << "SIMHITVEC SIZE = " << cf_simhitvec.size() << std::endl; // TrackerHits = new MixCollection<PSimHit>(cf_simhitvec); //std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(TrackerHits); // std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec)); std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec)); TrackerHits = (*allTrackerHits); //Loop on PSimHit SimHitMap.clear(); MixCollection<PSimHit>::iterator isim; for (isim=allTrackerHits->begin(); isim!= allTrackerHits->end();isim++) { SimHitMap[(*isim).detUnitId()].push_back((*isim)); } } if(doStrip_) e.getByLabel("simSiStripDigis", stripdigisimlink); if(doPixel_) e.getByLabel("simSiPixelDigis", pixeldigisimlink); }
virtual TrackerHitAssociator::~TrackerHitAssociator | ( | ) | [inline, virtual] |
Definition at line 64 of file TrackerHitAssociator.h.
{}
std::vector< SimHitIdpr > TrackerHitAssociator::associateGSMatchedRecHit | ( | const SiTrackerGSMatchedRecHit2D * | gsmrechit | ) |
Definition at line 672 of file TrackerHitAssociator.cc.
References SiTrackerGSMatchedRecHit2D::eeId(), SiTrackerGSMatchedRecHit2D::simtrackId(), simtrackid, and StripHits.
Referenced by associateHit(), and associateHitId().
{ StripHits = false; //GSRecHit is the FastSimulation RecHit that contains the TrackId already vector<SimHitIdpr> simtrackid; simtrackid.clear(); SimHitIdpr currentId(gsmrechit->simtrackId(), EncodedEventId(gsmrechit->eeId())); simtrackid.push_back(currentId); return simtrackid; }
std::vector< SimHitIdpr > TrackerHitAssociator::associateGSRecHit | ( | const SiTrackerGSRecHit2D * | gsrechit | ) |
Definition at line 634 of file TrackerHitAssociator.cc.
References SiTrackerGSRecHit2D::eeId(), SiTrackerGSRecHit2D::simtrackId(), simtrackid, and StripHits.
Referenced by associateHit(), and associateHitId().
{ StripHits = false; //GSRecHit is the FastSimulation RecHit that contains the TrackId already vector<SimHitIdpr> simtrackid; simtrackid.clear(); SimHitIdpr currentId(gsrechit->simtrackId(), EncodedEventId(gsrechit->eeId())); simtrackid.push_back(currentId); return simtrackid; }
std::vector< PSimHit > TrackerHitAssociator::associateHit | ( | const TrackingRecHit & | thit | ) |
Check if it's the gluedDet
Definition at line 120 of file TrackerHitAssociator.cc.
References associateGSMatchedRecHit(), associateGSRecHit(), associateMatchedRecHit(), associateMultiRecHit(), associatePixelRecHit(), associateProjectedRecHit(), associateSimpleRecHit(), associateSiStripRecHit1D(), begin, gather_cfg::cout, cond::rpcobgas::detid, end, PSimHit::eventId(), first, TrackingRecHit::geographicalId(), MixCollection< T >::getObject(), i, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, DetId::rawId(), query::result, edm::second(), simhitCFPos, SimHitMap, simtrackid, StripHits, DetId::subdetId(), sistripsummary::TEC, StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, TrackerHits, and PSimHit::trackId().
Referenced by CkfDebugger::analyseCompatibleMeasurements(), TestHits::analyze(), SiPixelRecHitsValid::analyze(), SiPixelErrorEstimation::analyze(), SiPixelTrackingRecHitsValid::analyze(), SiPixelLorentzAngle::analyze(), SiStripRecHitsValid::analyze(), TestTrackHits::analyze(), TestSmoothHits::analyze(), TestOutliers::analyze(), SiStripTrackingRecHitsValid::analyze(), CkfDebugger::associated(), associateMultiRecHit(), CkfDebugger::correctTrajectory(), GlobalRecHitsProducer::fillTrk(), GlobalRecHitsAnalyzer::fillTrk(), spr::matchedSimTrack(), CkfDebugger::nextCorrectHits(), and CkfDebugger::testSeed().
{ //check in case of TTRH if(const TransientTrackingRecHit * ttrh = dynamic_cast<const TransientTrackingRecHit *>(&thit)) { std::cout << "calling associateHit for TransientTRH" << std::endl; return associateHit(*ttrh->hit()); } //vector with the matched SimHit std::vector<PSimHit> result; // std::vector<PSimHit> result_old; //initialize vectors! simtrackid.clear(); simhitCFPos.clear(); StripHits = false; //get the Detector type of the rechit DetId detid= thit.geographicalId(); uint32_t detID = detid.rawId(); // cout << "Associator ---> get Detid " << detID << endl; //check we are in the strip tracker if(detid.subdetId() == StripSubdetector::TIB || detid.subdetId() == StripSubdetector::TOB || detid.subdetId() == StripSubdetector::TID || detid.subdetId() == StripSubdetector::TEC) { //check if it is a simple SiStripRecHit2D if(const SiStripRecHit2D * rechit = dynamic_cast<const SiStripRecHit2D *>(&thit)) { //std::cout << "associate to hit2D" << std::endl; associateSimpleRecHit(rechit, simtrackid); } else if(const SiStripRecHit1D * rechit = dynamic_cast<const SiStripRecHit1D *>(&thit)) //check if it is a SiStripRecHit1D { //std::cout << "associate to hit1D" << std::endl; associateSiStripRecHit1D(rechit,simtrackid); } else if(const SiStripMatchedRecHit2D * rechit = dynamic_cast<const SiStripMatchedRecHit2D *>(&thit)) //check if it is a matched SiStripMatchedRecHit2D { //std::cout << "associate to matched" << std::endl; simtrackid = associateMatchedRecHit(rechit); } else if(const ProjectedSiStripRecHit2D * rechit = dynamic_cast<const ProjectedSiStripRecHit2D *>(&thit)) //check if it is a ProjectedSiStripRecHit2D { //std::cout << "associate to projectedHit" << std::endl; simtrackid = associateProjectedRecHit(rechit); detid = rechit->originalHit().geographicalId(); detID = detid.rawId(); } else { //std::cout << "associate to Invalid strip hit??" << std::endl; //throw cms::Exception("Unknown RecHit Type") << "TrackerHitAssociator failed first casting of " << typeid(thit).name() << " type "; } } //check we are in the pixel tracker if( (unsigned int)(detid.subdetId()) == PixelSubdetector::PixelBarrel || (unsigned int)(detid.subdetId()) == PixelSubdetector::PixelEndcap) { if(const SiPixelRecHit * rechit = dynamic_cast<const SiPixelRecHit *>(&thit)) { //std::cout << "associate to pixelHit" << std::endl; associatePixelRecHit(rechit,simtrackid ); } } //check if these are GSRecHits (from FastSim) if(const SiTrackerGSRecHit2D * rechit = dynamic_cast<const SiTrackerGSRecHit2D *>(&thit)) { simtrackid = associateGSRecHit(rechit); } if (const SiTrackerMultiRecHit * rechit = dynamic_cast<const SiTrackerMultiRecHit *>(&thit)){ return associateMultiRecHit(rechit); } //check if these are GSMatchedRecHits (from FastSim) if(const SiTrackerGSMatchedRecHit2D * rechit = dynamic_cast<const SiTrackerGSMatchedRecHit2D *>(&thit)) { simtrackid = associateGSMatchedRecHit(rechit); } // //Save the SimHits in a vector. for the macthed hits both the rphi and stereo simhits are saved. // if(StripHits){ //USE THIS FOR STRIPS // std::cout << "NEW SIZE = " << simhitCFPos.size() << std::endl; for(size_t i=0; i<simhitCFPos.size(); i++){ //std::cout << "NEW CFPOS " << simhitCFPos[i] << endl; //std::cout << "NEW LOCALPOS " << TrackerHits.getObject(simhitCFPos[i]).localPosition() << endl; result.push_back( TrackerHits.getObject(simhitCFPos[i])); } }else { //now get the SimHit from the trackid vector<PSimHit> simHit; std::map<unsigned int, std::vector<PSimHit> >::const_iterator it = SimHitMap.find(detID); simHit.clear(); if (it!= SimHitMap.end()){ simHit = it->second; vector<PSimHit>::const_iterator simHitIter = simHit.begin(); vector<PSimHit>::const_iterator simHitIterEnd = simHit.end(); for (;simHitIter != simHitIterEnd; ++simHitIter) { const PSimHit ihit = *simHitIter; unsigned int simHitid = ihit.trackId(); EncodedEventId simHiteid = ihit.eventId(); for(size_t i=0; i<simtrackid.size();i++){ if(simHitid == simtrackid[i].first && simHiteid == simtrackid[i].second){ // cout << "Associator ---> ID" << ihit.trackId() << " Simhit x= " << ihit.localPosition().x() // << " y= " << ihit.localPosition().y() << " z= " << ihit.localPosition().x() << endl; result.push_back(ihit); } } } }else{ std::map<unsigned int, std::vector<PSimHit> >::const_iterator itrphi = SimHitMap.find(detID+2);//iterator to the simhit in the rphi module std::map<unsigned int, std::vector<PSimHit> >::const_iterator itster = SimHitMap.find(detID+1);//iterator to the simhit in the stereo module if (itrphi!= SimHitMap.end()&&itster!=SimHitMap.end()){ simHit = itrphi->second; simHit.insert(simHit.end(),(itster->second).begin(),(itster->second).end()); vector<PSimHit>::const_iterator simHitIter = simHit.begin(); vector<PSimHit>::const_iterator simHitIterEnd = simHit.end(); for (;simHitIter != simHitIterEnd; ++simHitIter) { const PSimHit ihit = *simHitIter; unsigned int simHitid = ihit.trackId(); EncodedEventId simHiteid = ihit.eventId(); //===>>>>>change here!!!! // for(size_t i=0; i<simtrackid.size();i++){ // cout << " GluedDet Associator --> check sihit id's = " << simHitid <<"; compared id's = "<< simtrackid[i] <<endl; // if(simHitid == simtrackid[i]){ //exclude the geant particles. they all have the same id for(size_t i=0; i<simtrackid.size();i++){ if(simHitid == simtrackid[i].first && simHiteid == simtrackid[i].second){ // cout << "GluedDet Associator ---> ID" << ihit.trackId() << " Simhit x= " << ihit.localPosition().x() // << " y= " << ihit.localPosition().y() << " z= " << ihit.localPosition().x() << endl; result.push_back(ihit); } } } } } } return result; }
std::vector< SimHitIdpr > TrackerHitAssociator::associateHitId | ( | const TrackingRecHit & | thit | ) |
Definition at line 280 of file TrackerHitAssociator.cc.
Referenced by TestTrackHits::analyze(), TestOutliers::analyze(), associateHitId(), associateMultiRecHitId(), CkfDebugger::assocTrackId(), CkfDebugger::correctMeas(), CkfDebugger::correctTrajectory(), TrackAssociatorByHits::getDoubleCount(), TrackAssociatorByHits::getMatchedIds(), and MuonAssociatorByHits::getMatchedIds().
{ std::vector< SimHitIdpr > simhitid; associateHitId(thit, simhitid); return simhitid; }
void TrackerHitAssociator::associateHitId | ( | const TrackingRecHit & | thit, |
std::vector< SimHitIdpr > & | simhitid | ||
) |
Definition at line 287 of file TrackerHitAssociator.cc.
References associateGSMatchedRecHit(), associateGSRecHit(), associateHitId(), associateMatchedRecHit(), associateMultiRecHitId(), associatePixelRecHit(), associateProjectedRecHit(), associateSimpleRecHit(), associateSiStripRecHit1D(), cond::rpcobgas::detid, TrackingRecHit::geographicalId(), PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, simhitCFPos, DetId::subdetId(), sistripsummary::TEC, StripSubdetector::TIB, StripSubdetector::TID, and StripSubdetector::TOB.
{ //check in case of TTRH if(const TransientTrackingRecHit * ttrh = dynamic_cast<const TransientTrackingRecHit *>(&thit)) { associateHitId(*ttrh->hit(), simtkid); } else{ simtkid.clear(); simhitCFPos.clear(); //vector with the associated Simtkid //vector with the CF position of the associated simhits //get the Detector type of the rechit DetId detid= thit.geographicalId(); //apparently not used // uint32_t detID = detid.rawId(); if (const SiTrackerMultiRecHit * rechit = dynamic_cast<const SiTrackerMultiRecHit *>(&thit)){ simtkid=associateMultiRecHitId(rechit); } //cout << "Associator ---> get Detid " << detID << endl; //check we are in the strip tracker if(detid.subdetId() == StripSubdetector::TIB || detid.subdetId() == StripSubdetector::TOB || detid.subdetId() == StripSubdetector::TID || detid.subdetId() == StripSubdetector::TEC) { //check if it is a simple SiStripRecHit2D if(const SiStripRecHit2D * rechit = dynamic_cast<const SiStripRecHit2D *>(&thit)) { associateSimpleRecHit(rechit, simtkid); } //check if it is a matched SiStripMatchedRecHit2D else if(const SiStripRecHit1D * rechit = dynamic_cast<const SiStripRecHit1D *>(&thit)) { associateSiStripRecHit1D(rechit,simtkid); } //check if it is a matched SiStripMatchedRecHit2D else if(const SiStripMatchedRecHit2D * rechit = dynamic_cast<const SiStripMatchedRecHit2D *>(&thit)) { simtkid = associateMatchedRecHit(rechit); } //check if it is a ProjectedSiStripRecHit2D else if(const ProjectedSiStripRecHit2D * rechit = dynamic_cast<const ProjectedSiStripRecHit2D *>(&thit)) { simtkid = associateProjectedRecHit(rechit); } else{ //std::cout << "associate to invalid" << std::endl; //throw cms::Exception("Unknown RecHit Type") << "TrackerHitAssociator failed second casting of " << typeid(thit).name() << " type "; } } //check we are in the pixel tracker else if( (unsigned int)(detid.subdetId()) == PixelSubdetector::PixelBarrel || (unsigned int)(detid.subdetId()) == PixelSubdetector::PixelEndcap) { if(const SiPixelRecHit * rechit = dynamic_cast<const SiPixelRecHit *>(&thit)) { associatePixelRecHit(rechit,simtkid ); } } //check if these are GSRecHits (from FastSim) if(const SiTrackerGSRecHit2D * rechit = dynamic_cast<const SiTrackerGSRecHit2D *>(&thit)) { simtkid = associateGSRecHit(rechit); } if(const SiTrackerGSMatchedRecHit2D * rechit = dynamic_cast<const SiTrackerGSMatchedRecHit2D *>(&thit)) { simtkid = associateGSMatchedRecHit(rechit); } } }
std::vector< SimHitIdpr > TrackerHitAssociator::associateMatchedRecHit | ( | const SiStripMatchedRecHit2D * | matchedrechit | ) |
Definition at line 519 of file TrackerHitAssociator.cc.
References associateSimpleRecHit(), spr::find(), SiStripMatchedRecHit2D::monoHit(), simtrackid, SiStripMatchedRecHit2D::stereoHit(), and StripHits.
Referenced by associateHit(), and associateHitId().
{ StripHits = true; vector<SimHitIdpr> matched_mono; vector<SimHitIdpr> matched_st; matched_mono.clear(); matched_st.clear(); const SiStripRecHit2D *mono = matchedrechit->monoHit(); const SiStripRecHit2D *st = matchedrechit->stereoHit(); //associate the two simple hits separately associateSimpleRecHit(mono,matched_mono ); associateSimpleRecHit(st, matched_st ); //save in a vector all the simtrack-id's that are common to mono and stereo hits if(!matched_mono.empty() && !matched_st.empty()){ simtrackid.clear(); //final result vector // std::vector<unsigned int> idcachev; std::vector<SimHitIdpr> idcachev; //for(vector<unsigned int>::iterator mhit=matched_mono.begin(); mhit != matched_mono.end(); mhit++){ for(vector<SimHitIdpr>::iterator mhit=matched_mono.begin(); mhit != matched_mono.end(); mhit++){ //save only once the ID if(find(idcachev.begin(), idcachev.end(),(*mhit)) == idcachev.end()) { idcachev.push_back(*mhit); //save if the stereoID matched the monoID if(find(matched_st.begin(), matched_st.end(),(*mhit))!=matched_st.end()){ simtrackid.push_back(*mhit); //std::cout << "matched case: saved ID " << (*mhit) << std::endl; } } } } return simtrackid; }
std::vector< PSimHit > TrackerHitAssociator::associateMultiRecHit | ( | const SiTrackerMultiRecHit * | multirechit | ) |
Definition at line 646 of file TrackerHitAssociator.cc.
References associateHit(), i, SiTrackerMultiRecHit::recHits(), findQualityFiles::size, SiTrackerMultiRecHit::weight(), and SiTrackerMultiRecHit::weights().
Referenced by associateHit().
{ std::vector<const TrackingRecHit*> componenthits = multirechit->recHits(); // std::vector<PSimHit> assimhits; int size=multirechit->weights().size(), idmostprobable=0; for (int i=0; i<size; i++){ if(multirechit->weight(i)>multirechit->weight(idmostprobable)) idmostprobable=i; } // std::vector<PSimHit> assimhits = associateHit(**mostpropable); // assimhits.insert(assimhits.end(), asstocurrent.begin(), asstocurrent.end()); //std::cout << "Returning " << assimhits.size() << " simhits" << std::endl; return associateHit(*componenthits[idmostprobable]); }
std::vector< SimHitIdpr > TrackerHitAssociator::associateMultiRecHitId | ( | const SiTrackerMultiRecHit * | multirechit | ) |
Definition at line 661 of file TrackerHitAssociator.cc.
References associateHitId(), i, SiTrackerMultiRecHit::recHits(), findQualityFiles::size, SiTrackerMultiRecHit::weight(), and SiTrackerMultiRecHit::weights().
Referenced by associateHitId().
{ std::vector<const TrackingRecHit*> componenthits = multirechit->recHits(); int size=multirechit->weights().size(), idmostprobable=0; for (int i=0; i<size; i++){ if(multirechit->weight(i)>multirechit->weight(idmostprobable)) idmostprobable=i; } return associateHitId(*componenthits[idmostprobable]); }
void TrackerHitAssociator::associatePixelRecHit | ( | const SiPixelRecHit * | pixelrechit, |
std::vector< SimHitIdpr > & | simhitid | ||
) |
Definition at line 574 of file TrackerHitAssociator.cc.
References PixelDigi::channelToPixel(), SiPixelRecHit::cluster(), edm::DetSet< T >::data, cond::rpcobgas::detid, spr::find(), TrackingRecHit::geographicalId(), edm::Ref< C, T, F >::isNull(), pixeldigisimlink, DetId::rawId(), and StripHits.
Referenced by associateHit(), and associateHitId().
{ StripHits = false; // // Pixel associator // DetId detid= pixelrechit->geographicalId(); uint32_t detID = detid.rawId(); edm::DetSetVector<PixelDigiSimLink>::const_iterator isearch = pixeldigisimlink->find(detID); if(isearch != pixeldigisimlink->end()) { //if it is not empty // edm::DetSet<PixelDigiSimLink> link_detset = (*pixeldigisimlink)[detID]; edm::DetSet<PixelDigiSimLink> link_detset = (*isearch); // edm::Ref< edm::DetSetVector<SiPixelCluster>, SiPixelCluster> const& cluster = pixelrechit->cluster(); SiPixelRecHit::ClusterRef const& cluster = pixelrechit->cluster(); //check the reference is valid if(!(cluster.isNull())){//if the cluster is valid int minPixelRow = (*cluster).minPixelRow(); int maxPixelRow = (*cluster).maxPixelRow(); int minPixelCol = (*cluster).minPixelCol(); int maxPixelCol = (*cluster).maxPixelCol(); //std::cout << " Cluster minRow " << minPixelRow << " maxRow " << maxPixelRow << std::endl; //std::cout << " Cluster minCol " << minPixelCol << " maxCol " << maxPixelCol << std::endl; edm::DetSet<PixelDigiSimLink>::const_iterator linkiter = link_detset.data.begin(); int dsl = 0; // std::vector<unsigned int> idcachev; std::vector<SimHitIdpr> idcachev; for( ; linkiter != link_detset.data.end(); linkiter++) { dsl++; std::pair<int,int> pixel_coord = PixelDigi::channelToPixel(linkiter->channel()); //std::cout << " " << dsl << ") Digi link: row " << pixel_coord.first << " col " << pixel_coord.second << std::endl; if( pixel_coord.first <= maxPixelRow && pixel_coord.first >= minPixelRow && pixel_coord.second <= maxPixelCol && pixel_coord.second >= minPixelCol ) { //std::cout << " !-> trackid " << linkiter->SimTrackId() << endl; //std::cout << " fraction " << linkiter->fraction() << endl; SimHitIdpr currentId(linkiter->SimTrackId(), linkiter->eventId()); // if(find(idcachev.begin(),idcachev.end(),linkiter->SimTrackId()) == idcachev.end()){ if(find(idcachev.begin(),idcachev.end(),currentId) == idcachev.end()){ // simtrackid.push_back(linkiter->SimTrackId()); //idcachev.push_back(linkiter->SimTrackId()); simtrackid.push_back(currentId); idcachev.push_back(currentId); } } } } else{ edm::LogError("TrackerHitAssociator")<<"no Pixel cluster reference attached"; } } }
std::vector< SimHitIdpr > TrackerHitAssociator::associateProjectedRecHit | ( | const ProjectedSiStripRecHit2D * | projectedrechit | ) |
Definition at line 558 of file TrackerHitAssociator.cc.
References associateSimpleRecHit(), ProjectedSiStripRecHit2D::originalHit(), and StripHits.
Referenced by associateHit(), and associateHitId().
{ StripHits = true; //projectedRecHit is a "matched" rechit with only one component vector<SimHitIdpr> matched_mono; matched_mono.clear(); const SiStripRecHit2D mono = projectedrechit->originalHit(); associateSimpleRecHit(&mono, matched_mono); return matched_mono; }
void TrackerHitAssociator::associateSimpleRecHit | ( | const SiStripRecHit2D * | simplerechit, |
std::vector< SimHitIdpr > & | simhitid | ||
) |
Definition at line 367 of file TrackerHitAssociator.cc.
References associateSimpleRecHitCluster(), SiStripRecHit2D::cluster(), and SiStripRecHit2D::cluster_regional().
Referenced by associateHit(), associateHitId(), associateMatchedRecHit(), and associateProjectedRecHit().
{ const SiStripCluster* clust = 0; if(simplerechit->cluster().isNonnull()) { clust=&(*simplerechit->cluster()); } else if(simplerechit->cluster_regional().isNonnull()) { clust=&(*simplerechit->cluster_regional()); } associateSimpleRecHitCluster(clust,simtrackid); }
void TrackerHitAssociator::associateSimpleRecHitCluster | ( | const SiStripCluster * | clust, |
std::vector< SimHitIdpr > & | simtrackid | ||
) |
Definition at line 429 of file TrackerHitAssociator.cc.
References SiStripCluster::amplitudes(), edm::DetSet< T >::data, cond::rpcobgas::detid, spr::find(), first, SiStripCluster::firstStrip(), SiStripCluster::geographicalId(), prof2calltree::last, DetId::rawId(), simhitCFPos, stripdigisimlink, and StripHits.
{ // std::cout <<"ASSOCIATE SIMPLE RECHIT" << std::endl; StripHits =true; DetId detid= clust->geographicalId(); uint32_t detID = detid.rawId(); //to store temporary charge information std::vector<SimHitIdpr> cache_simtrackid; cache_simtrackid.clear(); std::map<SimHitIdpr, vector<float> > temp_simtrackid; temp_simtrackid.clear(); edm::DetSetVector<StripDigiSimLink>::const_iterator isearch = stripdigisimlink->find(detID); if(isearch != stripdigisimlink->end()) { //if it is not empty //link_detset is a structure, link_detset.data is a std::vector<StripDigiSimLink> //edm::DetSet<StripDigiSimLink> link_detset = (*stripdigisimlink)[detID]; edm::DetSet<StripDigiSimLink> link_detset = (*isearch); if(clust!=0){//the cluster is valid // const edm::Ref<edm::DetSetVector<SiStripCluster>, SiStripCluster, edm::refhelper::FindForDetSetVector<SiStripCluster> > clust=simplerechit->cluster(); //float chg; int clusiz = clust->amplitudes().size(); int first = clust->firstStrip(); int last = first + clusiz; // std::cout << "CLUSTERSIZE " << clusiz << " first strip = " << first << " last strip = " << last-1 << std::endl; // std::cout << " detID = " << detID << " DETSET size = " << link_detset.data.size() << std::endl; //use a vector std::vector<SimHitIdpr> idcachev; std::vector<int> CFposcachev; for(edm::DetSet<StripDigiSimLink>::const_iterator linkiter = link_detset.data.begin(); linkiter != link_detset.data.end(); linkiter++){ //StripDigiSimLink link = *linkiter; if( (int)(linkiter->channel()) >= first && (int)(linkiter->channel()) < last ){ //check this digisimlink // printf("%s%4d%s%8d%s%3d%s%8.4f\n", "CHANNEL = ", linkiter->channel(), " TrackID = ", linkiter->SimTrackId(), // " Process = ", TrackerHits.getObject(linkiter->CFposition()-1).processType(), " fraction = ", linkiter->fraction()); /* std::cout << "CHECKING CHANNEL = " << linkiter->channel() << std::endl; std::cout << "TrackID = " << linkiter->SimTrackId() << std::endl; std::cout << "Position = " << linkiter->CFposition() << std::endl; std::cout << " POS -1 = " << TrackerHits.getObject(linkiter->CFposition()-1).localPosition() << std::endl; std::cout << " Process = " << TrackerHits.getObject(linkiter->CFposition()-1).processType() << std::endl; std::cout << " fraction = " << linkiter->fraction() << std::endl; */ SimHitIdpr currentId(linkiter->SimTrackId(), linkiter->eventId()); //create a vector with the list of SimTrack ID's of the tracks that contributed to the RecHit //write the id only once in the vector if(find(idcachev.begin(),idcachev.end(),currentId ) == idcachev.end()){ /* std::cout << " Adding track id = " << currentId.first << " Event id = " << currentId.second.event() << " Bunch Xing = " << currentId.second.bunchCrossing() << std::endl; */ idcachev.push_back(currentId); simtrackid.push_back(currentId); } //create a vector that contains all the position (in the MixCollection) of the SimHits that contributed to the RecHit //write position only once int currentCFPos = linkiter->CFposition()-1; if(find(CFposcachev.begin(),CFposcachev.end(),currentCFPos ) == CFposcachev.end()){ /* std::cout << "CHECKING CHANNEL = " << linkiter->channel() << std::endl; std::cout << "\tTrackID = " << linkiter->SimTrackId() << "\tCFPos = " << currentCFPos << std::endl; std::cout << "\tLocal Pos = " << TrackerHits.getObject(currentCFPos).localPosition() << "\tProcess = " << TrackerHits.getObject(currentCFPos).processType() << std::endl; */ CFposcachev.push_back(currentCFPos); simhitCFPos.push_back(currentCFPos); // simhitassoc.push_back( TrackerHits.getObject(currentCFPos)); } } } } else { edm::LogError("TrackerHitAssociator")<<"no cluster reference attached"; } } }
void TrackerHitAssociator::associateSimpleRecHitCluster | ( | const SiStripCluster * | clust, |
std::vector< SimHitIdpr > & | theSimtrackid, | ||
std::vector< PSimHit > & | simhit | ||
) |
Definition at line 398 of file TrackerHitAssociator.cc.
References MixCollection< T >::getObject(), i, simhitCFPos, and TrackerHits.
Referenced by associateSimpleRecHit(), associateSimpleRecHitCluster(), and associateSiStripRecHit1D().
{ // Caller needs to clear simhit before calling this function //initialize vector theSimtrackid.clear(); //initialize class vector simhitCFPos.clear(); associateSimpleRecHitCluster(clust, theSimtrackid); for(size_t i=0; i<simhitCFPos.size(); i++){ simhit.push_back(TrackerHits.getObject(simhitCFPos[i])); } }
void TrackerHitAssociator::associateSimpleRecHitCluster | ( | const SiStripCluster * | clust, |
std::vector< PSimHit > & | simhit | ||
) |
Definition at line 414 of file TrackerHitAssociator.cc.
References associateSimpleRecHitCluster(), MixCollection< T >::getObject(), i, simhitCFPos, simtrackid, and TrackerHits.
{ // Caller needs to clear simhit before calling this function //initialize class vectors simtrackid.clear(); simhitCFPos.clear(); associateSimpleRecHitCluster(clust, simtrackid); for(size_t i=0; i<simhitCFPos.size(); i++){ simhit.push_back(TrackerHits.getObject(simhitCFPos[i])); } }
void TrackerHitAssociator::associateSiStripRecHit1D | ( | const SiStripRecHit1D * | simplerechit, |
std::vector< SimHitIdpr > & | simhitid | ||
) |
Definition at line 384 of file TrackerHitAssociator.cc.
References associateSimpleRecHitCluster(), SiStripRecHit1D::cluster(), and SiStripRecHit1D::cluster_regional().
Referenced by associateHit(), and associateHitId().
{ const SiStripCluster* clust = 0; if(simplerechit->cluster().isNonnull()) { clust=&(*simplerechit->cluster()); } else if(simplerechit->cluster_regional().isNonnull()) { clust=&(*simplerechit->cluster_regional()); } associateSimpleRecHitCluster(clust,simtrackid); }
edm::Handle<CrossingFrame<PSimHit> > TrackerHitAssociator::cf_simhit [private] |
Definition at line 105 of file TrackerHitAssociator.h.
Referenced by TrackerHitAssociator().
std::vector<const CrossingFrame<PSimHit> *> TrackerHitAssociator::cf_simhitvec [private] |
Definition at line 106 of file TrackerHitAssociator.h.
Referenced by TrackerHitAssociator().
bool TrackerHitAssociator::doPixel_ [private] |
Definition at line 119 of file TrackerHitAssociator.h.
Referenced by TrackerHitAssociator().
bool TrackerHitAssociator::doStrip_ [private] |
Definition at line 119 of file TrackerHitAssociator.h.
Referenced by TrackerHitAssociator().
bool TrackerHitAssociator::doTrackAssoc_ [private] |
Definition at line 119 of file TrackerHitAssociator.h.
Referenced by TrackerHitAssociator().
const edm::Event& TrackerHitAssociator::myEvent_ [private] |
Definition at line 100 of file TrackerHitAssociator.h.
Definition at line 110 of file TrackerHitAssociator.h.
Referenced by associatePixelRecHit(), and TrackerHitAssociator().
std::vector<PSimHit> TrackerHitAssociator::simhitassoc [private] |
Definition at line 116 of file TrackerHitAssociator.h.
std::vector<int> TrackerHitAssociator::simhitCFPos [private] |
Definition at line 115 of file TrackerHitAssociator.h.
Referenced by associateHit(), associateHitId(), and associateSimpleRecHitCluster().
Definition at line 96 of file TrackerHitAssociator.h.
Referenced by associateHit(), CkfDebugger::hasDelta(), CkfDebugger::printSimHits(), and TrackerHitAssociator().
std::vector<SimHitIdpr> TrackerHitAssociator::simtrackid [private] |
Definition at line 113 of file TrackerHitAssociator.h.
Referenced by associateGSMatchedRecHit(), associateGSRecHit(), associateHit(), associateMatchedRecHit(), and associateSimpleRecHitCluster().
Definition at line 109 of file TrackerHitAssociator.h.
Referenced by associateSimpleRecHitCluster(), and TrackerHitAssociator().
bool TrackerHitAssociator::StripHits [private] |
Definition at line 117 of file TrackerHitAssociator.h.
Referenced by associateGSMatchedRecHit(), associateGSRecHit(), associateHit(), associateMatchedRecHit(), associatePixelRecHit(), associateProjectedRecHit(), and associateSimpleRecHitCluster().
std::vector<PSimHit> TrackerHitAssociator::thePixelHits |
Definition at line 97 of file TrackerHitAssociator.h.
std::vector<PSimHit> TrackerHitAssociator::theStripHits |
Definition at line 93 of file TrackerHitAssociator.h.
Definition at line 102 of file TrackerHitAssociator.h.
Referenced by TrackerHitAssociator().
Definition at line 107 of file TrackerHitAssociator.h.
Referenced by associateHit(), associateSimpleRecHitCluster(), and TrackerHitAssociator().