Skip to content

Commit 25bf603

Browse files
committed
Merge remote branch 'origin/CMSSW_7_0_X' into CMSSW_7_0_X
2 parents 53423d1 + acbed17 commit 25bf603

File tree

2 files changed

+84
-33
lines changed

2 files changed

+84
-33
lines changed

SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h

+7-3
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,15 @@ class TrackerHitAssociator {
7474
// std::vector<SimHitIdpr> associateSimpleRecHit(const SiStripRecHit2D * simplerechit);
7575
void associateSimpleRecHit(const SiStripRecHit2D * simplerechit,std::vector<SimHitIdpr> & simhitid);
7676
void associateSiStripRecHit1D(const SiStripRecHit1D * simplerechit,std::vector<SimHitIdpr> & simhitid);
77+
/*
7778
void associateSimpleRecHitCluster(const SiStripCluster* clust,
7879
const uint32_t& detID,
7980
std::vector<SimHitIdpr>& theSimtrackid,
80-
std::vector<PSimHit>& simhit);
81+
std::vector<PSimHit>& clusterSimHits);
8182
void associateSimpleRecHitCluster(const SiStripCluster* clust,
8283
const uint32_t& detID,
83-
std::vector<PSimHit>& simhit);
84+
std::vector<PSimHit>& clusterSimHits);
85+
*/
8486
void associateSimpleRecHitCluster(const SiStripCluster* clust,
8587
const uint32_t& detID,
8688
std::vector<SimHitIdpr>& simtrackid);
@@ -98,6 +100,7 @@ class TrackerHitAssociator {
98100
typedef std::map<unsigned int, std::vector<PSimHit> > simhit_map;
99101
typedef simhit_map::iterator simhit_map_iterator;
100102
simhit_map SimHitMap;
103+
simhit_map SimHitSubdetMap;
101104
std::vector<PSimHit> thePixelHits;
102105

103106
private:
@@ -108,7 +111,7 @@ class TrackerHitAssociator {
108111
//ADDED NOW AS A PRIVATE MEMBER
109112
edm::Handle<CrossingFrame<PSimHit> > cf_simhit;
110113
std::vector<const CrossingFrame<PSimHit> *> cf_simhitvec;
111-
MixCollection<PSimHit> TrackerHits;
114+
/* MixCollection<PSimHit> TrackerHits; */
112115

113116
edm::Handle< edm::DetSetVector<StripDigiSimLink> > stripdigisimlink;
114117
edm::Handle< edm::DetSetVector<PixelDigiSimLink> > pixeldigisimlink;
@@ -121,6 +124,7 @@ class TrackerHitAssociator {
121124
bool StripHits;
122125

123126
bool doPixel_, doStrip_, doTrackAssoc_;
127+
bool useCFpos_;
124128

125129
};
126130

SimTracker/TrackerHitAssociation/src/TrackerHitAssociator.cc

+77-30
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e) :
2727
myEvent_(e),
2828
doPixel_( true ),
2929
doStrip_( true ),
30-
doTrackAssoc_( false ) {
30+
doTrackAssoc_( false ),
31+
useCFpos_( false ) {
3132
trackerContainers.clear();
3233
//
3334
// Take by default all tracker SimHits
@@ -56,14 +57,19 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e) :
5657
}
5758

5859
std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec));
59-
TrackerHits = (*allTrackerHits);
60+
// TrackerHits = (*allTrackerHits);
6061

6162
//Loop on PSimHit
6263
SimHitMap.clear();
64+
SimHitSubdetMap.clear();
6365

6466
MixCollection<PSimHit>::iterator isim;
6567
for (isim=allTrackerHits->begin(); isim!= allTrackerHits->end();isim++) {
6668
SimHitMap[(*isim).detUnitId()].push_back((*isim));
69+
if (useCFpos_) {
70+
DetId theDet((*isim).detUnitId());
71+
SimHitSubdetMap[theDet.subdetId()].push_back((*isim));
72+
}
6773
}
6874

6975
if(doStrip_) e.getByLabel("simSiStripDigis", stripdigisimlink);
@@ -78,7 +84,8 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e, const edm::Param
7884
myEvent_(e),
7985
doPixel_( conf.getParameter<bool>("associatePixel") ),
8086
doStrip_( conf.getParameter<bool>("associateStrip") ),
81-
doTrackAssoc_( conf.getParameter<bool>("associateRecoTracks") ){
87+
doTrackAssoc_( conf.getParameter<bool>("associateRecoTracks") ),
88+
useCFpos_( false ) {
8289

8390
//if track association there is no need to acces the CrossingFrame
8491
if(!doTrackAssoc_) {
@@ -94,20 +101,25 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e, const edm::Param
94101
cf_simhitvec.push_back(cf_simhit.product());
95102
}
96103

97-
// std::cout << "SIMHITVEC SIZE = " << cf_simhitvec.size() << std::endl;
104+
// std::cout << "SIMHITVEC SIZE = " << cf_simhitvec.size() << std::endl;
98105

99106
// TrackerHits = new MixCollection<PSimHit>(cf_simhitvec);
100107
//std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(TrackerHits);
101108
// std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec));
102109
std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec));
103-
TrackerHits = (*allTrackerHits);
110+
// TrackerHits = (*allTrackerHits);
104111

105112
//Loop on PSimHit
106113
SimHitMap.clear();
114+
SimHitSubdetMap.clear();
107115

108116
MixCollection<PSimHit>::iterator isim;
109117
for (isim=allTrackerHits->begin(); isim!= allTrackerHits->end();isim++) {
110118
SimHitMap[(*isim).detUnitId()].push_back((*isim));
119+
if (useCFpos_) {
120+
DetId theDet((*isim).detUnitId());
121+
SimHitSubdetMap[theDet.subdetId()].push_back((*isim));
122+
}
111123
}
112124

113125
}
@@ -184,7 +196,7 @@ std::vector<PSimHit> TrackerHitAssociator::associateHit(const TrackingRecHit & t
184196
{
185197
if(const SiPixelRecHit * rechit = dynamic_cast<const SiPixelRecHit *>(&thit))
186198
{
187-
//std::cout << "associate to pixelHit" << std::endl;
199+
// std::cout << "associate to pixelHit" << std::endl;
188200
associatePixelRecHit(rechit,simtrackid );
189201
}
190202
}
@@ -208,14 +220,29 @@ std::vector<PSimHit> TrackerHitAssociator::associateHit(const TrackingRecHit & t
208220
//Save the SimHits in a vector. for the macthed hits both the rphi and stereo simhits are saved.
209221
//
210222

211-
if(StripHits){
223+
// From CMSSW_6_2_0_pre8 simhitCFPos is ill-defined.
224+
// It points relative to the PSimHit collection, but we don't know whether High- or LowTof.
225+
// Before CMSSW_6_2_0_pre8 it pointed relative to base of the combined TrackerHits.
226+
if(useCFpos_ && StripHits){
212227
//USE THIS FOR STRIPS
213-
// std::cout << "NEW SIZE = " << simhitCFPos.size() << std::endl;
228+
// std::cout << "NEW SIZE = " << simhitCFPos.size() << std::endl;
214229

215-
for(size_t i=0; i<simhitCFPos.size(); i++){
216-
//std::cout << "NEW CFPOS " << simhitCFPos[i] << endl;
217-
//std::cout << "NEW LOCALPOS " << TrackerHits.getObject(simhitCFPos[i]).localPosition() << endl;
218-
result.push_back( TrackerHits.getObject(simhitCFPos[i]));
230+
// for(size_t i=0; i<simhitCFPos.size(); i++){
231+
// //std::cout << "NEW CFPOS " << simhitCFPos[i] << endl;
232+
// //std::cout << "NEW LOCALPOS " << TrackerHits.getObject(simhitCFPos[i]).localPosition() << endl;
233+
// result.push_back( TrackerHits.getObject(simhitCFPos[i]));
234+
// }
235+
std::vector<PSimHit> simHit;
236+
std::map<unsigned int, std::vector<PSimHit> >::const_iterator it = SimHitSubdetMap.find(detid.subdetId());
237+
simHit.clear();
238+
if (it!= SimHitSubdetMap.end()){
239+
simHit = it->second;
240+
241+
// std::cout << "NEW SIZE = " << simhitCFPos.size() << std::endl;
242+
for(size_t i=0; i<simhitCFPos.size(); i++){
243+
// std::cout << "NEW CFPOS " << simhitCFPos[i] << endl;
244+
result.push_back(simHit[simhitCFPos[i]]);
245+
}
219246
}
220247
}else {
221248

@@ -234,9 +261,10 @@ std::vector<PSimHit> TrackerHitAssociator::associateHit(const TrackingRecHit & t
234261

235262
for(size_t i=0; i<simtrackid.size();i++){
236263
if(simHitid == simtrackid[i].first && simHiteid == simtrackid[i].second){
237-
// cout << "Associator ---> ID" << ihit.trackId() << " Simhit x= " << ihit.localPosition().x()
238-
// << " y= " << ihit.localPosition().y() << " z= " << ihit.localPosition().x() << endl;
264+
// cout << "Associator ---> ID" << ihit.trackId() << " Simhit x= " << ihit.localPosition().x()
265+
// << " y= " << ihit.localPosition().y() << " z= " << ihit.localPosition().x() << endl;
239266
result.push_back(ihit);
267+
continue;
240268
}
241269
}
242270
}
@@ -265,6 +293,7 @@ std::vector<PSimHit> TrackerHitAssociator::associateHit(const TrackingRecHit & t
265293
// cout << "GluedDet Associator ---> ID" << ihit.trackId() << " Simhit x= " << ihit.localPosition().x()
266294
// << " y= " << ihit.localPosition().y() << " z= " << ihit.localPosition().x() << endl;
267295
result.push_back(ihit);
296+
continue;
268297
}
269298
}
270299
}
@@ -395,11 +424,12 @@ void TrackerHitAssociator::associateSiStripRecHit1D(const SiStripRecHit1D * simp
395424
associateSimpleRecHitCluster(clust,simplerechit->geographicalId(),simtrackid);
396425
}
397426

427+
/*
398428
void TrackerHitAssociator::associateSimpleRecHitCluster(const SiStripCluster* clust,
399429
const uint32_t& detID,
400-
std::vector<SimHitIdpr>& theSimtrackid, std::vector<PSimHit>& simhit)
430+
std::vector<SimHitIdpr>& theSimtrackid, std::vector<PSimHit>& clusterSimHits)
401431
{
402-
// Caller needs to clear simhit before calling this function
432+
// Caller needs to clear clusterSimHits before calling this function
403433
404434
//initialize vector
405435
theSimtrackid.clear();
@@ -408,27 +438,45 @@ void TrackerHitAssociator::associateSimpleRecHitCluster(const SiStripCluster* cl
408438
409439
associateSimpleRecHitCluster(clust, detID, theSimtrackid);
410440
411-
for(size_t i=0; i<simhitCFPos.size(); i++){
412-
simhit.push_back(TrackerHits.getObject(simhitCFPos[i]));
441+
DetId theDet(detID);
442+
std::vector<PSimHit> subDetSimHits;
443+
std::map<unsigned int, std::vector<PSimHit> >::const_iterator it = SimHitSubdetMap.find(theDet.subdetId());
444+
subDetSimHits.clear();
445+
if (it!= SimHitSubdetMap.end()){
446+
subDetSimHits = it->second;
447+
for(size_t i=0; i<simhitCFPos.size(); i++){
448+
// clusterSimHits.push_back(TrackerHits.getObject(simhitCFPos[i]));
449+
clusterSimHits.push_back(subDetSimHits[simhitCFPos[i]]);
450+
}
413451
}
414452
}
415453
416454
void TrackerHitAssociator::associateSimpleRecHitCluster(const SiStripCluster* clust,
417455
const uint32_t& detID,
418-
std::vector<PSimHit>& simhit)
456+
std::vector<PSimHit>& clusterSimHits)
419457
{
420-
// Caller needs to clear simhit before calling this function
458+
// Caller needs to clear clusterSimHits before calling this function
421459
422460
//initialize class vectors
423461
simtrackid.clear();
424462
simhitCFPos.clear();
425463
426464
associateSimpleRecHitCluster(clust, detID, simtrackid);
427465
428-
for(size_t i=0; i<simhitCFPos.size(); i++){
429-
simhit.push_back(TrackerHits.getObject(simhitCFPos[i]));
466+
467+
DetId theDet(detID);
468+
std::vector<PSimHit> subDetSimHits;
469+
std::map<unsigned int, std::vector<PSimHit> >::const_iterator it = SimHitSubdetMap.find(theDet.subdetId());
470+
subDetSimHits.clear();
471+
if (it!= SimHitSubdetMap.end()){
472+
subDetSimHits = it->second;
473+
for(size_t i=0; i<simhitCFPos.size(); i++){
474+
// clusterSimHits.push_back(TrackerHits.getObject(simhitCFPos[i]));
475+
clusterSimHits.push_back(subDetSimHits[simhitCFPos[i]]);
476+
}
430477
}
431478
}
479+
*/
432480

433481
void TrackerHitAssociator::associateSimpleRecHitCluster(const SiStripCluster* clust,
434482
const uint32_t& detID,
@@ -498,17 +546,16 @@ void TrackerHitAssociator::associateSimpleRecHitCluster(const SiStripCluster* cl
498546
idcachev.push_back(currentId);
499547
simtrackid.push_back(currentId);
500548
}
501-
549+
550+
502551
//create a vector that contains all the position (in the MixCollection) of the SimHits that contributed to the RecHit
503552
//write position only once
504553
int currentCFPos = linkiter->CFposition()-1;
505-
if(find(CFposcachev.begin(),CFposcachev.end(),currentCFPos ) == CFposcachev.end()){
506-
/*
507-
std::cout << "CHECKING CHANNEL = " << linkiter->channel() << std::endl;
508-
std::cout << "\tTrackID = " << linkiter->SimTrackId() << "\tCFPos = " << currentCFPos << std::endl;
509-
std::cout << "\tLocal Pos = " << TrackerHits.getObject(currentCFPos).localPosition()
510-
<< "\tProcess = " << TrackerHits.getObject(currentCFPos).processType() << std::endl;
511-
*/
554+
if(useCFpos_ && find(CFposcachev.begin(),CFposcachev.end(),currentCFPos ) == CFposcachev.end()){
555+
// std::cout << "CHECKING CHANNEL = " << linkiter->channel() << std::endl;
556+
// std::cout << "\tTrackID = " << linkiter->SimTrackId() << "\tCFPos = " << currentCFPos << std::endl;
557+
// std::cout << "\tLocal Pos = " << TrackerHits.getObject(currentCFPos).localPosition()
558+
// << "\tProcess = " << TrackerHits.getObject(currentCFPos).processType() << std::endl;
512559
CFposcachev.push_back(currentCFPos);
513560
simhitCFPos.push_back(currentCFPos);
514561
// simhitassoc.push_back( TrackerHits.getObject(currentCFPos));

0 commit comments

Comments
 (0)