79 |
|
#include "DataFormats/HepMCCandidate/interface/GenParticleCandidate.h" |
80 |
|
#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" |
81 |
|
#include "DataFormats/TrackReco/interface/Track.h" |
82 |
+ |
#include "TrackingTools/PatternTools/interface/Trajectory.h" |
83 |
+ |
#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h" |
84 |
+ |
|
85 |
|
|
86 |
|
#include "DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h" |
87 |
|
#include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h" |
121 |
|
Geometry* Geom_ECAL; |
122 |
|
Geometry* Geom_HCAL; |
123 |
|
Geometry* Geom_Muon; |
124 |
+ |
Geometry* Geom_Fwd; |
125 |
|
|
126 |
|
|
127 |
|
std::string OutputFile; |
130 |
|
std::vector<InputTag> SimVertexProducers; |
131 |
|
std::vector<InputTag> SimHitProducers; |
132 |
|
|
133 |
< |
std::vector<InputTag> TrackProducers; |
133 |
> |
std::vector<InputTag> TrajectoryProducers; |
134 |
|
std::vector<InputTag> EcalRecHitProducers; |
135 |
|
std::vector<InputTag> HcalHBHERecHitProducers; |
136 |
|
std::vector<InputTag> HcalHORecHitProducers; |
157 |
|
SimVertexProducers = iConfig.getParameter<std::vector<InputTag> >("SimVertexProducers"); |
158 |
|
SimHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimHitProducers"); |
159 |
|
|
160 |
< |
TrackProducers = iConfig.getParameter<std::vector<InputTag> >("TrackProducers"); |
160 |
> |
TrajectoryProducers = iConfig.getParameter<std::vector<InputTag> >("TrajectoryProducers"); |
161 |
|
EcalRecHitProducers = iConfig.getParameter<std::vector<InputTag> >("EcalRecHitProducers"); |
162 |
|
HcalHBHERecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHBHERecHitProducers"); |
163 |
|
HcalHORecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHORecHitProducers"); |
187 |
|
Geom_ECAL = new Geometry(); |
188 |
|
Geom_HCAL = new Geometry(); |
189 |
|
Geom_Muon = new Geometry(); |
190 |
+ |
Geom_Fwd = new Geometry(); |
191 |
+ |
|
192 |
|
|
193 |
|
|
194 |
|
// ### TRACKER GEOMETRY ### |
268 |
|
printf("Don't Save HcalEmpty, HcalTriggerTower, HcalOther\n"); |
269 |
|
continue; |
270 |
|
} |
271 |
< |
}else{ |
272 |
< |
continue; |
271 |
> |
}else if(Detid.det() == DetId::Calo){ |
272 |
> |
Geom_temp = NULL; |
273 |
> |
|
274 |
> |
// Calo Tower Geometry (SudDet=1) |
275 |
> |
// if(SubDet==1) |
276 |
> |
// //printf("Don't Save CaloTowers\n"); |
277 |
> |
// continue; |
278 |
> |
|
279 |
> |
// Forward Calo Geometry --> Castor (SudDet=3) and ZDS (SubDet=2) |
280 |
> |
if(SubDet==HcalCastorDetId::SubdetectorId || SubDet==HcalZDCDetId::SubdetectorId) |
281 |
> |
Geom_temp = Geom_Fwd; |
282 |
> |
// printf("Save FWD CaloTowers\n"); |
283 |
|
} |
284 |
|
|
285 |
|
const CaloCellGeometry* CellGeom = CaloGeom->getGeometry(Detid); |
286 |
|
GlobalPoint CellPos = CellGeom->getPosition(); |
287 |
|
const CaloCellGeometry::CornersVec CellCorners = CellGeom->getCorners(); |
288 |
|
|
289 |
< |
float cX = (CellCorners[0].x() + CellCorners[2].x())/2; |
290 |
< |
float cY = (CellCorners[0].y() + CellCorners[2].y())/2; |
291 |
< |
float cZ = (CellCorners[0].z() + CellCorners[2].z())/2; |
292 |
< |
|
293 |
< |
float wX = (CellCorners[1].x() - CellCorners[0].x())/2; |
294 |
< |
float wY = (CellCorners[1].y() - CellCorners[0].y())/2; |
295 |
< |
float wZ = (CellCorners[1].z() - CellCorners[0].z())/2; |
296 |
< |
|
297 |
< |
float hX = (CellCorners[3].x() - CellCorners[0].x())/2; |
298 |
< |
float hY = (CellCorners[3].y() - CellCorners[0].y())/2; |
299 |
< |
float hZ = (CellCorners[3].z() - CellCorners[0].z())/2; |
300 |
< |
|
301 |
< |
float F = sqrt( pow(CellCorners[4].x()+CellCorners[6].x(),2) + pow(CellCorners[4].y()+CellCorners[6].y(),2) + pow(CellCorners[4].z()+CellCorners[6].z(),2) ); |
302 |
< |
F /= sqrt( pow(CellCorners[0].x()+CellCorners[2].x(),2) + pow(CellCorners[0].y()+CellCorners[2].y(),2) + pow(CellCorners[0].z()+CellCorners[2].z(),2) ); |
303 |
< |
|
304 |
< |
Geom_temp->Add_CaloDet(Detid.rawId(), |
305 |
< |
cX , cY , cZ , |
306 |
< |
wX , wY , wZ , |
307 |
< |
hX , hY , hZ , F ); |
289 |
> |
if(Geom_temp == Geom_ECAL || Geom_temp == Geom_HCAL){ |
290 |
> |
float cX = (CellCorners[0].x() + CellCorners[2].x())/2; |
291 |
> |
float cY = (CellCorners[0].y() + CellCorners[2].y())/2; |
292 |
> |
float cZ = (CellCorners[0].z() + CellCorners[2].z())/2; |
293 |
> |
|
294 |
> |
float wX = (CellCorners[1].x() - CellCorners[0].x())/2; |
295 |
> |
float wY = (CellCorners[1].y() - CellCorners[0].y())/2; |
296 |
> |
float wZ = (CellCorners[1].z() - CellCorners[0].z())/2; |
297 |
> |
|
298 |
> |
float hX = (CellCorners[3].x() - CellCorners[0].x())/2; |
299 |
> |
float hY = (CellCorners[3].y() - CellCorners[0].y())/2; |
300 |
> |
float hZ = (CellCorners[3].z() - CellCorners[0].z())/2; |
301 |
> |
|
302 |
> |
float F = sqrt( pow(CellCorners[4].x()+CellCorners[6].x(),2) + pow(CellCorners[4].y()+CellCorners[6].y(),2) + pow(CellCorners[4].z()+CellCorners[6].z(),2) ); |
303 |
> |
F /= sqrt( pow(CellCorners[0].x()+CellCorners[2].x(),2) + pow(CellCorners[0].y()+CellCorners[2].y(),2) + pow(CellCorners[0].z()+CellCorners[2].z(),2) ); |
304 |
> |
|
305 |
> |
Geom_temp->Add_CaloDet(Detid.rawId(), |
306 |
> |
cX , cY , cZ , |
307 |
> |
wX , wY , wZ , |
308 |
> |
hX , hY , hZ , F ); |
309 |
> |
}else if(Geom_temp == Geom_Fwd){ |
310 |
> |
/* |
311 |
> |
Geom_temp->Add_FwdDet(Detid.rawId(), |
312 |
> |
CellCorners[0].x(), CellCorners[0].y(), CellCorners[0].z(), |
313 |
> |
CellCorners[1].x(), CellCorners[1].y(), CellCorners[1].z(), |
314 |
> |
CellCorners[2].x(), CellCorners[2].y(), CellCorners[2].z(), |
315 |
> |
CellCorners[3].x(), CellCorners[3].y(), CellCorners[3].z(), |
316 |
> |
CellCorners[4].x(), CellCorners[4].y(), CellCorners[4].z(), |
317 |
> |
CellCorners[5].x(), CellCorners[5].y(), CellCorners[5].z(), |
318 |
> |
CellCorners[6].x(), CellCorners[6].y(), CellCorners[6].z(), |
319 |
> |
CellCorners[7].x(), CellCorners[7].y(), CellCorners[7].z()); |
320 |
> |
printf("SubDet = %i : (%6.2f,%6.2f,%6.2f) --> 7 (%6.2f,%6.2f,%6.2f) \n", SubDet,CellCorners[0].x(), CellCorners[0].y(), CellCorners[0].z(),CellCorners[6].x(), CellCorners[6].y(), CellCorners[6].z()); |
321 |
> |
*/ |
322 |
> |
} |
323 |
|
} |
324 |
+ |
|
325 |
|
|
326 |
|
// ### MUON GEOMETRY ### |
327 |
|
|
386 |
|
ThickVector.x() -Pos.x(), ThickVector.y() -Pos.y(), ThickVector.z() -Pos.z()); |
387 |
|
} |
388 |
|
|
389 |
+ |
// ### FORWARD GEOMETRY ### |
390 |
+ |
// edm::ESHandle<CaloGeometry> ForwardGeom; |
391 |
+ |
// iSetup.get<IdealGeometryRecord>().get( ForwardGeom ); |
392 |
+ |
// const vector<DetId> FwdDets = ForwardGeom->getValidDetIds(DetId::Calo, HcalCastorDetId::SubdetectorId); |
393 |
+ |
// printf("FwdDetsSize = %i\n",FwdDets.size()); |
394 |
|
|
395 |
|
// ### Save .geom ### |
396 |
|
|
397 |
+ |
printf("FWD Size = %i\n", Geom_Fwd->Det_ECAL_ALL.size()); |
398 |
+ |
printf("FWD Size = %i\n", Geom_Fwd->Det_HCAL_ALL.size()); |
399 |
+ |
printf("FWD Size = %i\n", Geom_Fwd->Det_FWD_ALL.size()); |
400 |
+ |
|
401 |
+ |
|
402 |
+ |
|
403 |
|
Geom_Tracker->Save("Tracker.geom"); |
404 |
|
Geom_ECAL ->Save("Ecal.geom"); |
405 |
|
Geom_HCAL ->Save("Hcal.geom"); |
406 |
|
Geom_Muon ->Save("Muon.geom"); |
407 |
+ |
// Geom_Fwd ->Save("Fwd.geom"); |
408 |
+ |
|
409 |
+ |
|
410 |
|
|
411 |
|
} |
412 |
|
|
511 |
|
|
512 |
|
|
513 |
|
// ### TRACKS ### |
514 |
< |
for(unsigned int i=0;i<TrackProducers.size();i++){ |
515 |
< |
edm::Handle<std::vector< reco::Track > > h_Tracks; |
516 |
< |
iEvent.getByLabel(TrackProducers[i], h_Tracks); |
517 |
< |
std::vector< reco::Track > TrackColl = *h_Tracks.product(); |
518 |
< |
|
519 |
< |
for ( unsigned int t = 0; t < TrackColl.size(); ++t ) { |
520 |
< |
MyRecoTrack* MyrecoTrack = new MyRecoTrack; |
521 |
< |
reco::Track recoTrack =TrackColl[t]; |
514 |
> |
for(unsigned int i=0;i<TrajectoryProducers.size();i++){ |
515 |
> |
Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle; |
516 |
> |
iEvent.getByLabel(TrajectoryProducers[i], trajTrackAssociationHandle); |
517 |
> |
const TrajTrackAssociationCollection TrajToTrackMap = *trajTrackAssociationHandle.product(); |
518 |
> |
|
519 |
> |
for(TrajTrackAssociationCollection::const_iterator it = TrajToTrackMap.begin(); it!=TrajToTrackMap.end(); ++it) { |
520 |
> |
Trajectory recoTraj = *it->key; |
521 |
> |
MyRecoTrack* MyrecoTrack = new MyRecoTrack; |
522 |
> |
|
523 |
> |
MyRecoTrackInfo* info = new MyRecoTrackInfo; |
524 |
> |
info->Coll = i; |
525 |
> |
info->P = it->val->p(); |
526 |
> |
info->Pt = it->val->pt(); |
527 |
> |
info->chi2 = it->key->chiSquared(); |
528 |
> |
MyrecoTrack->Info = info; |
529 |
> |
|
530 |
> |
|
531 |
> |
std::vector<TrajectoryMeasurement> measurements = recoTraj.measurements(); |
532 |
> |
for(unsigned int h=0;h<measurements.size();h++){ |
533 |
|
|
534 |
< |
for(unsigned int h=0;h<recoTrack.recHitsSize();h++){ |
478 |
< |
TrackingRecHitRef h_it = recoTrack.recHit(h); |
534 |
> |
TrajectoryMeasurement::ConstRecHitPointer h_it = measurements[h].recHit(); |
535 |
|
if(!h_it->isValid() )continue; |
536 |
|
DetId detId = h_it->geographicalId(); |
537 |
< |
const GeomDet * theDet = tkGeom->idToDet(detId); |
538 |
< |
LocalPoint localPos = h_it->localPosition(); |
537 |
> |
// const GeomDet * theDet = tkGeom->idToDet(detId); |
538 |
> |
// LocalPoint localPos = h_it->localPosition(); |
539 |
> |
GlobalPoint globalPos = measurements[h].updatedState().globalPosition(); |
540 |
|
|
541 |
|
MyRecoHit* hit = new MyRecoHit; |
542 |
+ |
/* |
543 |
|
hit->x = theDet->surface().toGlobal(localPos).x(); |
544 |
|
hit->y = theDet->surface().toGlobal(localPos).y(); |
545 |
|
hit->z = theDet->surface().toGlobal(localPos).z(); |
546 |
+ |
*/ |
547 |
+ |
hit->x = globalPos.x(); |
548 |
+ |
hit->y = globalPos.y(); |
549 |
+ |
hit->z = globalPos.z(); |
550 |
|
hit->DetId = detId.rawId(); |
551 |
|
hit->Charge = -1; |
552 |
|
MyrecoTrack->Hits.push_back(hit); |