82 mctruthMatchingInfo_ =
88 inputTagEcalRecHitsEB_
90 inputTagEcalRecHitsEE_
98 produces<reco::PFSimParticleCollection>();
101 (
"ParticleFilter" );
103 mySimEvent =
new FSimEvent( particleFilter_ );
122 mySimEvent->initializePdt(&(*pdt));
130 LogDebug(
"PFSimParticleProducer")<<
"START event: "<<iEvent.
id().
event()
131 <<
" in run "<<iEvent.
id().
run()<<endl;
137 std::vector<unsigned> recTrackSimID;
143 typedef std::pair<double, unsigned> hitSimID;
144 typedef std::list< std::pair<double, unsigned> >::iterator ITM;
145 std::vector< std::list <hitSimID> > caloHitsEBID(62000);
146 std::vector<double> caloHitsEBTotE(62000,0.0);
148 if(mctruthMatchingInfo_){
157 = iEvent.
getByLabel(inputTagFamosSimHits_,pcalohits);
162 err<<
"could not find pcaloHit "<<
"famosSimHits:EcalHitsEB";
163 LogError(
"PFSimParticleProducer")<<err.str()<<endl;
173 edm::PCaloHitContainer::const_iterator it
174 = pcalohits.
product()->begin();
175 edm::PCaloHitContainer::const_iterator itend
191 if(it->energy() > 0.0) {
192 std::pair<double, unsigned> phitsimid
193 = make_pair(it->energy(),it->geantTrackId());
194 caloHitsEBID[
detid.hashedIndex()].push_back(phitsimid);
195 caloHitsEBTotE[
detid.hashedIndex()]
206 LogDebug(
"PFSimParticleProducer")<<
"getting PFRecTracks"<<endl;
207 iEvent.
getByLabel(inputTagRecTracks_, recTracks);
210 LogError(
"PFSimParticleProducer")<<err
211 <<
" cannot get collection "
212 <<
"particleFlowBlock"<<
":"
219 getSimIDs( recTracks, recTrackSimID );
224 if( processParticles_) {
226 auto_ptr< reco::PFSimParticleCollection >
234 err<<
"cannot find sim tracks: "<<inputTagSim_;
235 LogError(
"PFSimParticleProducer")<<err.str()<<endl;
243 found = iEvent.
getByLabel(inputTagSim_,simVertices);
246 <<
"cannot find sim vertices: "<<inputTagSim_<<endl;
258 mySimEvent->fill( *simTracks, *simVertices );
264 for(
unsigned i=0;
i<mySimEvent->nTracks();
i++) {
279 unsigned recTrackID = 99999;
280 vector<unsigned> recHitContrib;
281 vector<double> recHitContribFrac;
283 if(mctruthMatchingInfo_){
285 for(
unsigned lo=0; lo<recTrackSimID.size();
287 if(
i == recTrackSimID[lo] ) {
299 bool found = iEvent.
getByLabel(inputTagEcalRecHitsEB_,
303 err<<
"could not find rechits "<< inputTagEcalRecHitsEB_;
304 LogError(
"PFSimParticleProducer")<<err.str()<<endl;
314 = rhcHandle.
product()->begin();
318 for(;it_rh!=itend_rh;++it_rh)
327 ITM it_phit = caloHitsEBID[rhit_hi].begin();
328 ITM itend_phit = caloHitsEBID[rhit_hi].end();
329 for(;it_phit!=itend_phit;++it_phit)
331 if(
i == it_phit->second)
335 bool alreadyin =
false;
336 for(
unsigned ihit = 0; ihit < recHitContrib.size();
338 if(
detid.rawId() == recHitContrib[ihit])
342 double pcalofraction = 0.0;
343 if(caloHitsEBTotE[rhit_hi] != 0.0)
345 = (it_phit->first/caloHitsEBTotE[rhit_hi])*100.0;
348 recHitContrib.push_back(it_rh->id());
349 recHitContribFrac.push_back(pcalofraction);
380 originVtx.position().y(),
381 originVtx.position().z() );
393 particle.addPoint(pointOrig);
413 particle.addPoint(pointEnd);
417 particle.addPoint(dummy);
427 posLayer1, momLayer1);
429 particle.addPoint( layer1Pt );
435 particle.addPoint(dummy);
444 posLayer2, momLayer2);
446 particle.addPoint( layer2Pt );
452 particle.addPoint(dummy);
464 particle.addPoint( ecalPt );
470 particle.addPoint(dummy);
475 particle.addPoint(dummy);
486 posHCALin, momHCALin);
488 particle.addPoint( hcalPtin );
497 posHCALout, momHCALout);
499 particle.addPoint( hcalPtout );
508 posHOEntrance, momHOEntrance);
510 particle.addPoint( hoPtin );
518 particle.addPoint(dummy);
521 pOutputPFSimParticleCollection->push_back( particle );
524 iEvent.
put(pOutputPFSimParticleCollection);
529 <<
" in run "<<iEvent.
id().
run()<<endl;
533 std::vector<unsigned>& recTrackSimID )
539 for(
unsigned i=0;
i<trackh->size();
i++) {
551 = trackref->recHitsBegin();
553 = trackref->recHitsEnd();
555 it != rhitend; it++){
557 if( (*it)->isValid() ){
567 for(
unsigned int st_index=0;st_index<rechit->
nSimTrackIds();++st_index){
568 recTrackSimID.push_back(rechit->
simTrackId(st_index));
PFSimParticleProducer(const edm::ParameterSet &)
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
reconstructed track used as an input to particle flow
bool noEndVertex() const
no end vertex
float charge() const
charge
const RawParticle & hoEntrance() const
The particle at HCAL exir.
const FSimVertex & endVertex() const
end vertex
const RawParticle & hcalExit() const
The particle at HCAL exir.
double y() const
y of vertex
double z() const
z of vertex
virtual void beginRun(const edm::Run &r, const edm::EventSetup &c) override
const XYZTLorentzVector & momentum() const
Temporary (until move of SimTrack to Mathcore) - No! Actually very useful.
const RawParticle & layer1Entrance() const
The particle at Preshower Layer 1.
std::vector< EcalRecHit >::const_iterator const_iterator
std::vector< PFSimParticle > PFSimParticleCollection
collection of PFSimParticle objects
const std::vector< int > & daughters() const
Vector of daughter indices.
double x() const
x of vertex
const reco::TrackRef & trackRef() const
void getData(T &iHolder) const
virtual void produce(edm::Event &, const edm::EventSetup &) override
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
int hashedIndex(int ieta, int iphi)
Point of closest approach from beam axis (initial point in the case of PFSimParticle) ...
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
const math::XYZTLorentzVector & position() const
Temporary (until CMSSW moves to Mathcore) - No ! Actually very useful.
virtual int32_t simTrackId(size_t i) const
const RawParticle & ecalEntrance() const
The particle at ECAL entrance.
const FSimVertex & vertex() const
Origin vertex.
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
true particle for particle flow
T const * product() const
XYZPointD XYZPoint
point in space with cartesian internal representation
virtual size_t nSimTrackIds() const
int type() const
particle type (HEP PDT convension)
int id() const
the index in FBaseSimEvent and other vectors
const RawParticle & layer2Entrance() const
The particle at Preshower Layer 2.
bool noMother() const
no mother particle
const RawParticle & hcalEntrance() const
The particle at HCAL entrance.
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
void getSimIDs(const TrackHandle &trackh, std::vector< unsigned > &recTrackSimID)
const FSimTrack & mother() const
mother
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection