Skip to content

Commit

Permalink
Merge pull request #8612 from abbiendi/cosmicMuonValidation_74X
Browse files Browse the repository at this point in the history
Backport to 74X of PR #8199 (cosmicMuonValidation)
  • Loading branch information
cmsbuild committed Apr 21, 2015
2 parents ef4bb6a + c0dbcac commit eed3cbf
Show file tree
Hide file tree
Showing 13 changed files with 1,021 additions and 768 deletions.
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
43 changes: 13 additions & 30 deletions SimTracker/TrackAssociation/plugins/TrackMCQuality.cc
Expand Up @@ -22,7 +22,7 @@

// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/EDProducer.h"
#include "FWCore/Framework/interface/global/EDProducer.h"

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
Expand All @@ -39,21 +39,19 @@
// class decleration
//

class TrackMCQuality : public edm::EDProducer {
class TrackMCQuality : public edm::global::EDProducer<> {
public:
explicit TrackMCQuality(const edm::ParameterSet&);
~TrackMCQuality();

private:
virtual void beginJob() override ;
virtual void produce(edm::Event&, const edm::EventSetup&) override;
virtual void endJob() override ;
virtual void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;

// ----------member data ---------------------------

edm::InputTag label_tr;
edm::InputTag label_tp;
edm::InputTag label_associator;
edm::EDGetTokenT<reco::TrackToTrackingParticleAssociator> label_tr;
edm::EDGetTokenT<TrackingParticleCollection> label_tp;
edm::EDGetTokenT<edm::View<reco::Track> > label_associator;
};

//
Expand All @@ -69,14 +67,10 @@ class TrackMCQuality : public edm::EDProducer {
// constructors and destructor
//
TrackMCQuality::TrackMCQuality(const edm::ParameterSet& pset):
label_tr(pset.getParameter< edm::InputTag >("label_tr")),
label_tp(pset.getParameter< edm::InputTag >("label_tp")),
label_associator(pset.getParameter< edm::InputTag >("associator"))
label_tr(consumes<reco::TrackToTrackingParticleAssociator>(pset.getParameter< edm::InputTag >("label_tr"))),
label_tp(consumes<TrackingParticleCollection>(pset.getParameter< edm::InputTag >("label_tp"))),
label_associator(consumes<edm::View<reco::Track> >(pset.getParameter< edm::InputTag >("associator")))
{
consumes<reco::TrackToTrackingParticleAssociator>(label_associator);
consumes<TrackingParticleCollection>(label_tp);
consumes<edm::View<reco::Track> >(label_tr);

produces<reco::TrackCollection>();
}

Expand All @@ -92,18 +86,18 @@ TrackMCQuality::~TrackMCQuality()

// ------------ method called to produce the data ------------
void
TrackMCQuality::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
TrackMCQuality::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const
{

using namespace edm;
Handle<reco::TrackToTrackingParticleAssociator> associator;
iEvent.getByLabel(label_associator,associator);
iEvent.getByToken(label_associator,associator);

Handle<TrackingParticleCollection> TPCollection ;
iEvent.getByLabel(label_tp, TPCollection);
iEvent.getByToken(label_tp, TPCollection);

Handle<edm::View<reco::Track> > trackCollection;
iEvent.getByLabel (label_tr, trackCollection );
iEvent.getByToken(label_tr, trackCollection );

reco::RecoToSimCollection recSimColl=associator->associateRecoToSim(trackCollection,
TPCollection);
Expand Down Expand Up @@ -134,16 +128,5 @@ TrackMCQuality::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
iEvent.put(outTracks);
}

// ------------ method called once each job just before starting event loop ------------
void
TrackMCQuality::beginJob()
{
}

// ------------ method called once each job just after ending the event loop ------------
void
TrackMCQuality::endJob() {
}

//define this as a plug-in
DEFINE_FWK_MODULE(TrackMCQuality);

0 comments on commit eed3cbf

Please sign in to comment.