Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cosmic muon validation #8199

Merged
merged 4 commits into from
Mar 20, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
47 changes: 44 additions & 3 deletions CommonTools/RecoAlgos/interface/CosmicTrackingParticleSelector.h
Expand Up @@ -22,6 +22,9 @@

#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
#include <Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h>
#include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
#include "SimTracker/TrackAssociatorESProducer/src/TrackAssociatorByPositionESProducer.hh"

#include <DataFormats/GeometrySurface/interface/Surface.h>
#include <DataFormats/GeometrySurface/interface/GloballyPositioned.h>
#include <Geometry/CommonDetUnit/interface/GeomDet.h>
Expand Down Expand Up @@ -91,6 +94,8 @@ class CosmicTrackingParticleSelector {

edm::ESHandle<TrackerGeometry> tracker;
iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
edm::ESHandle<GlobalTrackingGeometry> theGeometry;
iSetup.get<GlobalTrackingGeometryRecord>().get(theGeometry);

edm::ESHandle<MagneticField> theMF;
iSetup.get<IdealMagneticFieldRecord>().get(theMF);
Expand All @@ -102,9 +107,15 @@ class CosmicTrackingParticleSelector {
double radius(9999);
bool found(0);

int ii=0;
DetId::Detector det;
int subdet;

edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"TOT Number of PSimHits = "<< tpr->numberOfHits() << ", Number of Tracker PSimHits = "<< tpr->numberOfTrackerHits() <<"\n";

if (simHitsTPAssoc.isValid()==0) {
edm::LogError("TrackAssociation") << "Invalid handle!";
edm::LogError("CosmicTrackingParticleSelector") << "Invalid handle!";
return false;
}
std::pair<TrackingParticleRef, TrackPSimHitRef> clusterTPpairWithDummyTP(tpr,TrackPSimHitRef());//SimHit is dummy: for simHitTPAssociationListGreater
Expand All @@ -113,32 +124,62 @@ class CosmicTrackingParticleSelector {
clusterTPpairWithDummyTP, SimHitTPAssociationProducer::simHitTPAssociationListGreater);
for(auto ip = range.first; ip != range.second; ++ip) {
TrackPSimHitRef it = ip->second;
const GeomDet* tmpDet = tracker->idToDet( DetId(it->detUnitId()) ) ;
++ii;
const GeomDet* tmpDet = theGeometry->idToDet( DetId(it->detUnitId()) ) ;
if (!tmpDet) {
edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"***WARNING: PSimHit "<<ii <<", no GeomDet for: "<<it->detUnitId()<<". Skipping it.";
continue;
} else {
det = DetId(it->detUnitId()).det();
subdet = DetId(it->detUnitId()).subdetId();
}

LocalVector lv = it->momentumAtEntry();
Local3DPoint lp = it->localPosition ();
GlobalVector gv = tmpDet->surface().toGlobal( lv );
GlobalPoint gp = tmpDet->surface().toGlobal( lp );
edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"PSimHit "<<ii<<", Detector = "<<det<<", subdet = "<<subdet
<<"\t Radius = "<< gp.perp() << ", z = "<< gp.z()
<<"\t pt = "<< gv.perp() << ", pz = "<< gv.z();
edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"\t trackId = "<<it->trackId()<<", particleType = "<<it->particleType()<<", processType = "<<it->processType();

// discard hits related to low energy debris from the primary particle
if (it->processType()!=0) continue;

if(gp.perp()<radius){
found=true;
radius = gp.perp();
finalGV = gv;
finalGP = gp;
}
}
edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"\n"<<"FINAL State at InnerMost Hit: Radius = "<< finalGP.perp() << ", z = "<< finalGP.z()
<<", pt = "<< finalGV.perp() << ", pz = "<< finalGV.z();

if(!found) return 0;
else
{
FreeTrajectoryState ftsAtProduction(finalGP,finalGV,TrackCharge(tpr->charge()),theMF.product());
TSCBLBuilderNoMaterial tscblBuilder;
TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction,*bs);//as in TrackProducerAlgorithm
if(!tsAtClosestApproach.isValid()){
std::cout << "WARNING: tsAtClosestApproach is not valid" << std::endl;
edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"*** WARNING in CosmicTrackingParticleSelector: tsAtClosestApproach is not valid." <<"\n";
return 0;
}
else
{
momentum = tsAtClosestApproach.trackStateAtPCA().momentum();
vertex = tsAtClosestApproach.trackStateAtPCA().position();

edm::LogVerbatim("CosmicTrackingParticleSelector")
<<"FINAL State extrapolated at PCA: Radius = "<< vertex.perp() << ", z = "<< vertex.z()
<<", pt = "<< momentum.perp() << ", pz = "<< momentum.z() <<"\n";

return (
tpr->numberOfTrackerLayers() >= minHit_ &&
sqrt(momentum.perp2()) >= ptMin_ &&
Expand Down
14 changes: 7 additions & 7 deletions SimMuon/MCTruth/plugins/MuonAssociatorEDProducer.cc
Expand Up @@ -11,15 +11,15 @@ MuonAssociatorEDProducer::MuonAssociatorEDProducer(const edm::ParameterSet& pars
parset_(parset)
{

LogTrace("MuonAssociatorEDProducer") << "constructing MuonAssociatorEDProducer" << parset_.dump();
edm::LogVerbatim("MuonAssociatorEDProducer") << "constructing MuonAssociatorEDProducer";
produces<reco::RecoToSimCollection>();
produces<reco::SimToRecoCollection>();
tpToken_=consumes<TrackingParticleCollection>(tpTag);
tracksToken_=consumes<edm::View<reco::Track> >(tracksTag);

/// Perform some sanity checks of the configuration
edm::LogVerbatim("MuonAssociatorByHits") << "constructing MuonAssociatorByHits" << parset_.dump();
edm::LogVerbatim("MuonAssociatorByHits") << "\n MuonAssociatorByHits will associate reco::Tracks with "<<tracksTag
LogTrace("MuonAssociatorEDProducer") << "constructing MuonAssociatorByHits" << parset_.dump();
edm::LogVerbatim("MuonAssociatorEDProducer") << "\n MuonAssociatorByHits will associate reco::Tracks with "<<tracksTag
<< "\n\t\t and TrackingParticles with "<<tpTag;
const std::string recoTracksLabel = tracksTag.label();
const std::string recoTracksInstance = tracksTag.instance();
Expand All @@ -29,13 +29,13 @@ MuonAssociatorEDProducer::MuonAssociatorEDProducer(const edm::ParameterSet& pars
if (recoTracksLabel == "standAloneMuons" || recoTracksLabel == "standAloneSETMuons" ||
recoTracksLabel == "cosmicMuons" || recoTracksLabel == "hltL2Muons") {
if (parset_.getParameter<bool>("UseTracker")) {
edm::LogWarning("MuonAssociatorByHits")
edm::LogWarning("MuonAssociatorEDProducer")
<<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
<<"\n with UseTracker = true"<<"\n ---> setting UseTracker = false ";
parset_.addParameter<bool>("UseTracker",false);
}
if (!parset_.getParameter<bool>("UseMuon")) {
edm::LogWarning("MuonAssociatorByHits")
edm::LogWarning("MuonAssociatorEDProducer")
<<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
<<"\n with UseMuon = false"<<"\n ---> setting UseMuon = true ";
parset_.addParameter<bool>("UseMuon",true);
Expand All @@ -46,13 +46,13 @@ MuonAssociatorEDProducer::MuonAssociatorEDProducer(const edm::ParameterSet& pars
recoTracksLabel == "hltL3TkTracksFromL2" ||
(recoTracksLabel == "hltL3Muons" && recoTracksInstance == "L2Seeded")) {
if (parset_.getParameter<bool>("UseMuon")) {
edm::LogWarning("MuonAssociatorByHits")
edm::LogWarning("MuonAssociatorEDProducer")
<<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
<<"\n with UseMuon = true"<<"\n ---> setting UseMuon = false ";
parset_.addParameter<bool>("UseMuon",false);
}
if (!parset_.getParameter<bool>("UseTracker")) {
edm::LogWarning("MuonAssociatorByHits")
edm::LogWarning("MuonAssociatorEDProducer")
<<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
<<"\n with UseTracker = false"<<"\n ---> setting UseTracker = true ";
parset_.addParameter<bool>("UseTracker",true);
Expand Down
Expand Up @@ -92,34 +92,33 @@ namespace {
InputDumper::dump(const TrackHitsCollection& tC, const TrackingParticleCollection& tPC) const {
using namespace std;
// reco::Track collection
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")<<"\n"<<"reco::Track collection --- size = "<<tC.size();

edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")<<"\n"<<"reco::Track collection --- size = "<<tC.size();

// TrackingParticle collection
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")<<"\n"<<"TrackingParticle collection --- size = "<<tPC.size();
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")<<"\n"<<"TrackingParticle collection --- size = "<<tPC.size();
int j = 0;
for(TrackingParticleCollection::const_iterator ITER=tPC.begin(); ITER!=tPC.end(); ITER++, j++) {
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"TrackingParticle "<<j<<", q = "<<ITER->charge()<<", p = "<<ITER->p()
<<", pT = "<<ITER->pt()<<", eta = "<<ITER->eta()<<", phi = "<<ITER->phi();

edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"\t pdg code = "<<ITER->pdgId()<<", made of "<<ITER->numberOfHits()<<" PSimHit"
<<" (in "<<ITER->numberOfTrackerLayers()<<" layers)"
<<" from "<<ITER->g4Tracks().size()<<" SimTrack:";
for (TrackingParticle::g4t_iterator g4T=ITER->g4Track_begin(); g4T!=ITER->g4Track_end(); g4T++) {
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"\t\t Id:"<<g4T->trackId()<<"/Evt:("<<g4T->eventId().event()<<","<<g4T->eventId().bunchCrossing()<<")";
}
}

if (crossingframe) {
std:: unique_ptr<MixCollection<SimTrack> > SimTk( new MixCollection<SimTrack>(simtracksXF_.product()) );
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")<<"\n"<<"CrossingFrame<SimTrack> collection with InputTag = "<<simtracksXFTag
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")<<"\n"<<"CrossingFrame<SimTrack> collection with InputTag = "<<simtracksXFTag
<<" has size = "<<SimTk->size();
int k = 0;
for (MixCollection<SimTrack>::MixItr ITER=SimTk->begin(); ITER!=SimTk->end(); ITER++, k++) {
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"SimTrack "<<k
<<" - Id:"<<ITER->trackId()<<"/Evt:("<<ITER->eventId().event()<<","<<ITER->eventId().bunchCrossing()<<")"
<<" pdgId = "<<ITER->type()<<", q = "<<ITER->charge()<<", p = "<<ITER->momentum().P()
Expand All @@ -128,34 +127,34 @@ namespace {
}

std::unique_ptr<MixCollection<SimVertex> > SimVtx( new MixCollection<SimVertex>(simvertsXF_.product()) );
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")<<"\n"<<"CrossingFrame<SimVertex> collection with InputTag = "<<simtracksXFTag
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")<<"\n"<<"CrossingFrame<SimVertex> collection with InputTag = "<<simtracksXFTag
<<" has size = "<<SimVtx->size();
int kv = 0;
for (MixCollection<SimVertex>::MixItr VITER=SimVtx->begin(); VITER!=SimVtx->end(); VITER++, kv++){
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"SimVertex "<<kv
<< " : "<< *VITER <<endl;
}
}
else {
const edm::SimTrackContainer simTC = *(simtracks_.product());
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")<<"\n"<<"SimTrack collection with InputTag = "<<simtracksTag
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")<<"\n"<<"SimTrack collection with InputTag = "<<simtracksTag
<<" has size = "<<simTC.size()<<endl;
int k = 0;
for(edm::SimTrackContainer::const_iterator ITER=simTC.begin(); ITER!=simTC.end(); ITER++, k++){
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"SimTrack "<<k
<<" - Id:"<<ITER->trackId()<<"/Evt:("<<ITER->eventId().event()<<","<<ITER->eventId().bunchCrossing()<<")"
<<" pdgId = "<<ITER->type()<<", q = "<<ITER->charge()<<", p = "<<ITER->momentum().P()
<<", pT = "<<ITER->momentum().Pt()<<", eta = "<<ITER->momentum().Eta()<<", phi = "<<ITER->momentum().Phi()
<<"\n * "<<*ITER <<endl;
}
const edm::SimVertexContainer simVC = *(simverts_.product());
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")<<"\n"<<"SimVertex collection with InputTag = "<<"g4SimHits"
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")<<"\n"<<"SimVertex collection with InputTag = "<<"g4SimHits"
<<" has size = "<<simVC.size()<<endl;
int kv = 0;
for (edm::SimVertexContainer::const_iterator VITER=simVC.begin(); VITER!=simVC.end(); VITER++, kv++){
edm::LogVerbatim("MuonToTrackingParticleAssociatorByHits")
edm::LogVerbatim("MuonToTrackingParticleAssociatorEDProducer")
<<"SimVertex "<<kv
<< " : "<< *VITER <<endl;
}
Expand Down
4 changes: 2 additions & 2 deletions SimMuon/MCTruth/src/PSimHitMap.cc
Expand Up @@ -5,11 +5,11 @@ void PSimHitMap::fill(const edm::Event & e)
{
theMap.clear();
edm::Handle<CrossingFrame<PSimHit> > cf;
LogTrace("MuonCSCDigis") << "getting CrossingFrame<PSimHit> collection ";
LogTrace("PSimHitMap") << "getting CrossingFrame<PSimHit> collection ";
e.getByToken(sh_token, cf);

MixCollection<PSimHit> simHits(cf.product());
LogTrace("MuonCSCDigis") <<"... size = "<<simHits.size();
LogTrace("PSimHitMap") <<"... size = "<<simHits.size();

// arrange the hits by detUnit
for(MixCollection<PSimHit>::MixItr hitItr = simHits.begin();
Expand Down
Expand Up @@ -12,12 +12,12 @@
#include <boost/shared_ptr.hpp>

class CosmicParametersDefinerForTPESProducer: public edm::ESProducer{
typedef boost::shared_ptr<ParametersDefinerForTP> ReturnType;
typedef boost::shared_ptr<CosmicParametersDefinerForTP> ReturnType;

public:
CosmicParametersDefinerForTPESProducer(const edm::ParameterSet & p);
virtual ~CosmicParametersDefinerForTPESProducer();
boost::shared_ptr<ParametersDefinerForTP> produce(const TrackAssociatorRecord &);
boost::shared_ptr<CosmicParametersDefinerForTP> produce(const TrackAssociatorRecord &);

};

Expand Down