#include <PlotSimTracks.h>
Public Member Functions | |
PlotSimTracks (const edm::EventSetup &es, std::ofstream &file_) | |
void | printSimTracks (const edm::Event &ev) |
~PlotSimTracks () | |
Private Attributes | |
std::ofstream & | file |
const CaloGeometry * | theCaloGeometry |
const TrackerGeometry * | theTracker |
Definition at line 12 of file PlotSimTracks.h.
PlotSimTracks::PlotSimTracks | ( | const edm::EventSetup & | es, |
std::ofstream & | file_ | ||
) | [explicit] |
Definition at line 59 of file PlotSimTracks.cc.
References edm::EventSetup::get(), and edm::ESHandle< T >::product().
: file(file_) { // Get tracker geometry edm::ESHandle<TrackerGeometry> trackerHandle; es.get<TrackerDigiGeometryRecord>().get(trackerHandle); theTracker = trackerHandle.product(); // Get calorimetry edm::ESHandle<CaloGeometry> calo; es.get<CaloGeometryRecord>().get(calo); theCaloGeometry = (const CaloGeometry*)calo.product(); }
PlotSimTracks::~PlotSimTracks | ( | ) |
Definition at line 73 of file PlotSimTracks.cc.
{ }
void PlotSimTracks::printSimTracks | ( | const edm::Event & | ev | ) |
Definition at line 78 of file PlotSimTracks.cc.
References DetId::Ecal, EcalBarrel, EcalEndcap, mergeVDriftHistosByStation::file, relativeConstraints::geom, edm::Event::getByLabel(), CaloSubdetectorGeometry::getGeometry(), HitInfo::getInfo(), AlCaHLTBitMon_ParallelJobs::p, p1, p2, GeomDetEnumerators::PixelBarrel, GeomDetEnumerators::PixelEndcap, PlotUtils::printHelix(), edm::Handle< T >::product(), trackerHits::simHits, python::multivaluedict::sort(), PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), detailsBasic3DVector::y, PV3DBase< T, PVType, FrameType >::z(), and z.
{ // Tracker edm::Handle<TrackingParticleCollection> simTrackHandle; ev.getByLabel("mergedtruth", simTrackHandle); const TrackingParticleCollection* simTracks = simTrackHandle.product(); // Ecal edm::Handle<edm::PCaloHitContainer> simHitsBarrel; ev.getByLabel("g4SimHits", "EcalHitsEB", simHitsBarrel); // edm::Handle<edm::PCaloHitContainer> simHitsPreshower; // ev.getByLabel("g4SimHits", "EcalHitsES", simHitsPreshower); edm::Handle<edm::PCaloHitContainer> simHitsEndcap; ev.getByLabel("g4SimHits", "EcalHitsEE", simHitsEndcap); // FIXME /* { edm::Handle<edm::SimTrackContainer> simTracks; ev.getByType<edm::SimTrackContainer>(simTracks); std::cerr << " SSSSS " << simTracks.product()->size() << std::endl; for(edm::SimTrackContainer::const_iterator t = simTracks.product()->begin(); t!= simTracks.product()->end(); t++) { std::cerr << " simTrack " << t - simTracks.product()->begin() << " " << t->type() << " " << t->charge() << " " << t->vertIndex() << " " << t->genpartIndex() << " " << t->momentum().x() << " " << t->momentum().y() << " " << t->momentum().z() << std::endl; } } */ const CaloSubdetectorGeometry* geom; // Utilities PlotUtils plotUtils; file << ", If[st, {RGBColor[0.5,0.5,0.5]"; for(TrackingParticleCollection::const_iterator simTrack = simTracks->begin(); simTrack!= simTracks->end(); simTrack++) { std::vector<PSimHit> simHits; simHits = simTrack->trackPSimHit(); // reorder with help of momentum sort(simHits.begin(), simHits.end(), sortByPabs()); for(std::vector<PSimHit>::const_iterator simHit = simHits.begin(); simHit!= simHits.end(); simHit++) { DetId id = DetId(simHit->detUnitId()); if(theTracker->idToDetUnit(id) != 0) { GlobalPoint p1 = theTracker->idToDetUnit(id)->toGlobal(simHit->localPosition()); GlobalVector v1 = theTracker->idToDetUnit(id)->toGlobal(simHit->localDirection()); // simHit file << ", Point[{" << p1.x() << "," << p1.y() << ",(" << p1.z() << "-zs)*mz}]" << std::endl; file << ", Text[StyleForm[\"s\", URL->\"SimHit | Ekin=" << simTrack->energy() - simTrack->mass() << " GeV | parent: source=" << simTrack->parentVertex()->nSourceTracks() << " daughter=" << simTrack->parentVertex()->nDaughterTracks() << HitInfo::getInfo(*simHit) << "\"], {" << p1.x() << "," << p1.y() << ",(" << p1.z() << "-zs)*mz}, {1,1}]" << std::endl; // det double x = theTracker->idToDet(id)->surface().bounds().width() /2; double y = theTracker->idToDet(id)->surface().bounds().length()/2; double z = 0.; GlobalPoint p00 = theTracker->idToDet(id)->toGlobal(LocalPoint(-x,-y,z)); GlobalPoint p01 = theTracker->idToDet(id)->toGlobal(LocalPoint(-x, y,z)); GlobalPoint p10 = theTracker->idToDet(id)->toGlobal(LocalPoint( x,-y,z)); GlobalPoint p11 = theTracker->idToDet(id)->toGlobal(LocalPoint( x, y,z)); if(theTracker->idToDet(id)->subDetector() == GeomDetEnumerators::PixelBarrel || theTracker->idToDet(id)->subDetector() == GeomDetEnumerators::PixelEndcap) file << ", If[sd, {RGBColor[0.6,0.6,0.6], "; else file << ", If[sd, {RGBColor[0.8,0.8,0.8], "; file <<"Line[{{"<< p00.x()<<","<<p00.y()<<",("<<p00.z()<<"-zs)*mz}, " <<"{"<< p01.x()<<","<<p01.y()<<",("<<p01.z()<<"-zs)*mz}, " <<"{"<< p11.x()<<","<<p11.y()<<",("<<p11.z()<<"-zs)*mz}, " <<"{"<< p10.x()<<","<<p10.y()<<",("<<p10.z()<<"-zs)*mz}, " <<"{"<< p00.x()<<","<<p00.y()<<",("<<p00.z()<<"-zs)*mz}}]}]" << std::endl; if(simHit == simHits.begin()) // vertex to first point { GlobalPoint p0(simTrack->vertex().x(), simTrack->vertex().y(), simTrack->vertex().z()); plotUtils.printHelix(p0,p1,v1, file, simTrack->charge()); } if(simHit+1 != simHits.end()) // if not last { DetId id = DetId((simHit+1)->detUnitId()); GlobalPoint p2 = theTracker->idToDetUnit(id)->toGlobal((simHit+1)->localPosition()); GlobalVector v2 = theTracker->idToDetUnit(id)->toGlobal((simHit+1)->localDirection()); plotUtils.printHelix(p1,p2,v2, file, simTrack->charge()); } // Continue to Ecal if(simHit+1 == simHits.end()) // if last { DetId id = DetId(simHit->detUnitId()); GlobalPoint p = theTracker->idToDetUnit(id)->toGlobal(simHit->localPosition()); // EB geom = theCaloGeometry->getSubdetectorGeometry(DetId::Ecal,EcalBarrel); for(edm::PCaloHitContainer::const_iterator simHit = simHitsBarrel->begin(); simHit!= simHitsBarrel->end(); simHit++) if(simHit->geantTrackId() == static_cast<int>(simTrack->g4Track_begin()->trackId()) && //the sign of trackId tells whether there was a match simHit->energy() > 0.060) { EBDetId detId(simHit->id()); const CaloCellGeometry* cell = geom->getGeometry(detId); if(cell != 0) file << ", Line[{{" << p.x() << "," << p.y() << ",(" << p.z() <<"-zs)*mz}" << ", {" << cell->getPosition().x() << "," << cell->getPosition().y() << ",(" << cell->getPosition().z() << "-zs)*mz}}]" << std::endl; } // ES // EE geom = theCaloGeometry->getSubdetectorGeometry(DetId::Ecal,EcalEndcap); for(edm::PCaloHitContainer::const_iterator simHit = simHitsEndcap->begin(); simHit!= simHitsEndcap->end(); simHit++) if(simHit->geantTrackId() == static_cast<int>(simTrack->g4Track_begin()->trackId()) && //the sign of trackId tells whether there was a match simHit->energy() > 0.060) { EEDetId detId(simHit->id()); const CaloCellGeometry* cell = geom->getGeometry(detId); if(cell != 0) file << ", Line[{{" << p.x() << "," << p.y() << ",(" << p.z() << "-zs)*mz}" << ", {" << cell->getPosition().x() << "," << cell->getPosition().y() << ",(" << cell->getPosition().z() << "-zs)*mz}}]" << std::endl; } } } } } file << "}]"; }
std::ofstream& PlotSimTracks::file [private] |
Definition at line 20 of file PlotSimTracks.h.
const CaloGeometry* PlotSimTracks::theCaloGeometry [private] |
Definition at line 22 of file PlotSimTracks.h.
const TrackerGeometry* PlotSimTracks::theTracker [private] |
Definition at line 21 of file PlotSimTracks.h.