00001 #include "RecoTracker/SpecialSeedGenerators/interface/BeamHaloPairGenerator.h" 00002 #include "RecoTracker/TkSeedingLayers/interface/SeedingLayerSetsBuilder.h" 00003 00004 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00005 using namespace ctfseeding; 00006 00007 00008 BeamHaloPairGenerator::BeamHaloPairGenerator(const edm::ParameterSet& conf): conf_(conf){ 00009 edm::LogInfo("CtfSpecialSeedGenerator|BeamHaloPairGenerator") << "Constructing BeamHaloPairGenerator"; 00010 theMaxTheta=conf.getParameter<double>("maxTheta"); 00011 theMaxTheta=fabs(sin(theMaxTheta)); 00012 } 00013 00014 00015 SeedingLayerSets BeamHaloPairGenerator::init(const edm::EventSetup& es){ 00016 edm::ParameterSet leyerPSet = conf_.getParameter<edm::ParameterSet>("LayerPSet"); 00017 SeedingLayerSetsBuilder lsBuilder(leyerPSet); 00018 SeedingLayerSets lss = lsBuilder.layers(es); 00019 return lss; 00020 } 00021 00022 00023 const OrderedSeedingHits& BeamHaloPairGenerator::run(const TrackingRegion& region, 00024 const edm::Event& e, 00025 const edm::EventSetup& es){ 00026 hitPairs.clear(); 00027 SeedingLayerSets lss = init(es); 00028 SeedingLayerSets::const_iterator iLss; 00029 for (iLss = lss.begin(); iLss != lss.end(); iLss++){ 00030 SeedingLayers ls = *iLss; 00031 if (ls.size() != 2){ 00032 throw cms::Exception("CtfSpecialSeedGenerator") << "You are using " << ls.size() <<" layers in set instead of 2 "; 00033 } 00034 std::vector<SeedingHit> innerHits = region.hits(e, es, &ls[0]); 00035 std::vector<SeedingHit> outerHits = region.hits(e, es, &ls[1]); 00036 std::vector<SeedingHit>::const_iterator iOuterHit; 00037 for (iOuterHit = outerHits.begin(); iOuterHit != outerHits.end(); iOuterHit++){ 00038 std::vector<SeedingHit>::const_iterator iInnerHit; 00039 for (iInnerHit = innerHits.begin(); iInnerHit != innerHits.end(); iInnerHit++){ 00040 //do something in there... if necessary 00041 const TransientTrackingRecHit::ConstRecHitPointer & crhpi = *iInnerHit; 00042 const TransientTrackingRecHit::ConstRecHitPointer & crhpo = *iOuterHit; 00043 GlobalVector d=crhpo->globalPosition() - crhpi->globalPosition(); 00044 double ABSsinDtheta = fabs(sin(d.theta())); 00045 LogDebug("BeamHaloPairGenerator")<<"position1: "<<crhpo->globalPosition() 00046 <<" position2: "<<crhpi->globalPosition() 00047 <<" |sin(Dtheta)|: "<< ABSsinDtheta <<((ABSsinDtheta>theMaxTheta)?" skip":" keep"); 00048 00049 if (ABSsinDtheta>theMaxTheta) {;continue;} 00050 00051 hitPairs.push_back(OrderedHitPair(*iInnerHit, 00052 *iOuterHit)); 00053 } 00054 } 00055 } 00056 return hitPairs; 00057 }