Go to the documentation of this file.00001 #include "RecoTracker/ConversionSeedGenerators/interface/PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo.h"
00002 #include "RecoTracker/ConversionSeedGenerators/interface/Quad.h"
00003 #include "FWCore/Utilities/interface/Exception.h"
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo::
00015 PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo(const edm::ParameterSet & conf)
00016 :_conf(conf),seedCollection(0),
00017 hitsfactoryPSet(conf.getParameter<edm::ParameterSet>("OrderedHitsFactoryPSet")),
00018 creatorPSet(conf.getParameter<edm::ParameterSet>("SeedCreatorPSet")),
00019 regfactoryPSet(conf.getParameter<edm::ParameterSet>("RegionFactoryPSet")),
00020 theClusterCheck(conf.getParameter<edm::ParameterSet>("ClusterCheckPSet")),
00021 theSilentOnClusterCheck(conf.getParameter<edm::ParameterSet>("ClusterCheckPSet").getUntrackedParameter<bool>("silentClusterCheck",false)){
00022
00023 init();
00024 }
00025
00026 void PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo::
00027 clear(){
00028 if(theHitsGenerator!=NULL)
00029 delete theHitsGenerator;
00030 if(theSeedCreator!=NULL)
00031 delete theSeedCreator;
00032 if(theRegionProducer!=NULL)
00033 delete theRegionProducer;
00034 }
00035
00036 void PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo::
00037 init(){
00038 theHitsGenerator = new CombinedHitQuadrupletGeneratorForPhotonConversion(hitsfactoryPSet);
00039 theSeedCreator = new SeedForPhotonConversionFromQuadruplets(creatorPSet);
00040 theRegionProducer = new GlobalTrackingRegionProducerFromBeamSpot(regfactoryPSet);
00041 }
00042
00043 void PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo::
00044 analyze(const edm::Event & event, const edm::EventSetup &setup){
00045
00046 myEsetup = &setup;
00047 myEvent = &event;
00048
00049 if(seedCollection!=0)
00050 delete seedCollection;
00051
00052 seedCollection= new TrajectorySeedCollection();
00053
00054 size_t clustsOrZero = theClusterCheck.tooManyClusters(event);
00055 if (clustsOrZero){
00056 if (!theSilentOnClusterCheck)
00057 edm::LogError("TooManyClusters") << "Found too many clusters (" << clustsOrZero << "), bailing out.\n";
00058 return ;
00059 }
00060
00061 regions = theRegionProducer->regions(event,setup);
00062
00063 event.getByLabel(_conf.getParameter<edm::InputTag>("primaryVerticesTag"), vertexHandle);
00064 if (!vertexHandle.isValid()){
00065 edm::LogError("PhotonConversionFinderFromTracks") << "Error! Can't get the product primary Vertex Collection "<< _conf.getParameter<edm::InputTag>("primaryVerticesTag") << "\n";
00066 return;
00067 }
00068
00069
00070 loop();
00071
00072
00073 #ifdef debugTSPFSLA
00074 std::stringstream ss;
00075 ss.str("");
00076 ss << "\n++++++++++++++++++\n";
00077 ss << "seed collection size " << seedCollection->size();
00078 BOOST_FOREACH(TrajectorySeed tjS,*seedCollection){
00079 po.print(ss, tjS);
00080 }
00081 edm::LogInfo("debugTrajSeedFromQuadruplets") << ss.str();
00082
00083 #endif
00084 }
00085
00086
00087 void PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo::
00088 loop(){
00089
00090
00091 ss.str("");
00092
00093 float ptMin=0.1;
00094
00095 BOOST_FOREACH(const reco::Vertex primaryVertex, *vertexHandle){
00096
00097
00098 GlobalTrackingRegion region(ptMin
00099 ,GlobalPoint(
00100 primaryVertex.position().x(),
00101 primaryVertex.position().y(),
00102 primaryVertex.position().z()
00103 )
00104 ,primaryVertex.xError()*10
00105 ,primaryVertex.zError()*10
00106 ,true
00107 );
00108
00109 #ifdef debugTSPFSLA
00110 ss << "[PrintRegion] " << region.print() << std::endl;
00111 #endif
00112
00113 inspect(region);
00114
00115 }
00116 #ifdef debugTSPFSLA
00117 edm::LogInfo("debugTrajSeedFromQuadruplets") << ss.str();
00118 #endif
00119 }
00120
00121
00122 bool PhotonConversionTrajectorySeedProducerFromQuadrupletsAlgo::
00123 inspect(const TrackingRegion & region ){
00124
00125 const OrderedSeedingHits & hitss = theHitsGenerator->run(region, *myEvent, *myEsetup);
00126
00127 unsigned int nHitss = hitss.size();
00128
00129 #ifdef debugTSPFSLA
00130 ss << "\n nHitss " << nHitss << "\n";
00131 #endif
00132
00133 if (seedCollection->empty()) seedCollection->reserve(nHitss/2);
00134
00135
00136 unsigned int iHits=0, jHits=1;
00137
00138
00139
00140
00141
00142 std::vector<Quad> quadVector;
00143
00144 for (; iHits < nHitss && jHits < nHitss; iHits+=2 , jHits+=2) {
00145
00146 #ifdef debugTSPFSLA
00147
00148 #endif
00149
00150 const SeedingHitSet & phits = hitss[iHits];
00151
00152 const SeedingHitSet & mhits = hitss[jHits];
00153
00154
00155
00156 try{
00157
00158
00159 theSeedCreator->trajectorySeed(*seedCollection, phits, mhits, region, *myEsetup, ss, quadVector);
00160 }catch(cms::Exception& er){
00161 edm::LogError("SeedingConversion") << " Problem in the Quad Seed creator " <<er.what()<<std::endl;
00162 }catch(std::exception& er){
00163 edm::LogError("SeedingConversion") << " Problem in the Quad Seed creator " <<er.what()<<std::endl;
00164 }
00165 }
00166 quadVector.clear();
00167 return true;
00168 }
00169
00170