CMS 3D CMS Logo

SeedGeneratorForCRack.cc

Go to the documentation of this file.
00001 #include "RecoTracker/SpecialSeedGenerators/interface/SeedGeneratorForCRack.h"
00002 #include "FWCore/Framework/interface/EventSetup.h"
00003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00004 #include "RecoTracker/TkHitPairs/interface/CosmicLayerPairs.h"
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006 #include "DataFormats/GeometryCommonDetAlgo/interface/GlobalError.h"
00007 #include "RecoTracker/TkSeedGenerator/interface/SeedFromConsecutiveHits.h"
00008 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00009 #include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h"
00010 #include "TrackingTools/Records/interface/TransientRecHitRecord.h" 
00011 void 
00012 SeedGeneratorForCRack::init(const SiStripRecHit2DCollection &collstereo,
00013                               const SiStripRecHit2DCollection &collrphi ,
00014                               const SiStripMatchedRecHit2DCollection &collmatched,
00015                               const edm::EventSetup& iSetup)
00016 {
00017   iSetup.get<IdealMagneticFieldRecord>().get(magfield);
00018   iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
00019   thePropagatorAl=    new PropagatorWithMaterial(alongMomentum,0.1057,&(*magfield) );
00020   thePropagatorOp=    new PropagatorWithMaterial(oppositeToMomentum,0.1057,&(*magfield) );
00021   theUpdator=         new KFUpdator();
00022   
00023   // get the transient builder
00024 
00025   edm::ESHandle<TransientTrackingRecHitBuilder> theBuilder;
00026 
00027   iSetup.get<TransientRecHitRecord>().get(builderName,theBuilder);
00028   TTTRHBuilder = theBuilder.product();
00029   CosmicLayerPairs cosmiclayers(geometry);
00030   cosmiclayers.init(collstereo,collrphi,collmatched,iSetup);
00031   thePairGenerator=new CosmicHitPairGenerator(cosmiclayers,iSetup);
00032   HitPairs.clear();
00033   thePairGenerator->hitPairs(region,HitPairs,iSetup);
00034   LogDebug("CosmicSeedFinder") <<"Initialized with " << HitPairs.size() << " hit pairs" << std::endl;
00035 }
00036 
00037 SeedGeneratorForCRack::SeedGeneratorForCRack(edm::ParameterSet const& conf):
00038   conf_(conf)
00039 {  
00040   float ptmin=conf_.getParameter<double>("ptMin");
00041   float originradius=conf_.getParameter<double>("originRadius");
00042   float halflength=conf_.getParameter<double>("originHalfLength");
00043   float originz=conf_.getParameter<double>("originZPosition");
00044   seedpt = conf_.getParameter<double>("SeedPt");
00045 
00046   builderName = conf_.getParameter<std::string>("TTRHBuilder");   
00047   geometry=conf_.getUntrackedParameter<std::string>("GeometricStructure","STANDARD");
00048   region=GlobalTrackingRegion(ptmin,originradius,
00049                               halflength,originz);
00050   multipleScatteringFactor=conf_.getUntrackedParameter<double>("multipleScatteringFactor", 1.0);
00051   seedMomentum =conf_.getUntrackedParameter<double>("SeedMomentum",1);
00052   edm::LogInfo("SeedGeneratorForCRack")<<" PtMin of track is "<<ptmin<< 
00053     " The Radius of the cylinder for seeds is "<<originradius <<"cm"  << " The set Seed Momentum" <<  seedpt;
00054 }
00055 
00056 void SeedGeneratorForCRack::run(TrajectorySeedCollection &output,const edm::EventSetup& iSetup){
00057   seeds(output,iSetup,region);
00058   delete thePairGenerator;
00059   delete thePropagatorAl;
00060   delete thePropagatorOp;
00061   delete theUpdator; 
00062 }
00063 
00064 void SeedGeneratorForCRack::seeds(TrajectorySeedCollection &output,
00065                                     const edm::EventSetup& iSetup,
00066                                     const TrackingRegion& region){
00067   for(uint is=0;is<HitPairs.size();is++){
00068 
00069     GlobalPoint inner = tracker->idToDet((*(HitPairs[is].inner())).geographicalId())->surface().toGlobal((*(HitPairs[is].inner())).localPosition());
00070     GlobalPoint outer = tracker->idToDet((*(HitPairs[is].outer())).geographicalId())->surface().toGlobal((*(HitPairs[is].outer())).localPosition());
00071     
00072     LogDebug("CosmicSeedFinder") <<"inner point of the seed "<<inner <<" outer point of the seed "<<outer; 
00073     TransientTrackingRecHit::ConstRecHitPointer inrhit=TTTRHBuilder->build(HitPairs[is].inner());
00074     TransientTrackingRecHit::ConstRecHitPointer outrhit = TTTRHBuilder->build((HitPairs[is].outer()));
00075 
00076     edm::OwnVector<TrackingRecHit> hits;
00077     hits.push_back((*(HitPairs[is].outer())).clone());
00078 
00079     for (int i=0;i<2;i++){
00080       //FIRST STATE IS CALCULATED CONSIDERING THAT THE CHARGE CAN BE POSITIVE OR NEGATIVE
00081       int predsign=(2*i)-1;
00082       if((outer.y()-inner.y())>0){
00083         GlobalVector momentum = GlobalVector(inner-outer);
00084         momentum = momentum.unit()*seedMomentum;
00085         GlobalTrajectoryParameters Gtp(inner,
00086                                        momentum,
00087                                        predsign, 
00088                                        &(*magfield));
00089         AlgebraicSymMatrix errMatrix = AlgebraicSymMatrix(5,1);
00090         TSOS innerState = TSOS(Gtp, CurvilinearTrajectoryError(errMatrix), tracker->idToDet(((const TrackingRecHit *)HitPairs[is].inner())->geographicalId())->surface());
00091         const TSOS innerUpdated = theUpdator->update(innerState, *inrhit);
00092         //Cosmic Seed update inner...
00093         LogDebug("CosmicSeedFinder") << " FirstTSOS " << innerUpdated;
00094         
00095         //First propagation
00096         const TSOS outerState =
00097           thePropagatorOp->propagate(innerUpdated,
00098                                      tracker->idToDet((*(HitPairs[is].outer())).geographicalId())->surface());
00099         if ( outerState.isValid()) {
00100           LogDebug("CosmicSeedFinder") <<"outerState "<<outerState;
00101           TSOS outerUpdated= theUpdator->update( outerState,*outrhit);
00102           //fudge factor for multiple scattering
00103           outerUpdated.rescaleError( multipleScatteringFactor);
00104           if ( outerUpdated.isValid()) {
00105             LogDebug("CosmicSeedFinder") <<"outerUpdated "<<outerUpdated;
00106             
00107             PTrajectoryStateOnDet *PTraj=  
00108               transformer.persistentState(outerUpdated, (*(HitPairs[is].outer())).geographicalId().rawId());
00109             output.push_back(TrajectorySeed(*PTraj,hits,alongMomentum));
00110             delete PTraj;
00111             
00112           }else      edm::LogWarning("CosmicSeedFinder") << " SeedForCosmics first update failed ";
00113         }else      edm::LogWarning("CosmicSeedFinder") << " SeedForCosmics first propagation failed ";
00114       
00115       
00116       }
00117       else{
00118         GlobalVector momentum= GlobalVector(outer-inner);
00119         momentum=momentum.unit()*seedMomentum;
00120         GlobalTrajectoryParameters Gtp(inner,
00121                                        momentum,
00122                                        predsign, 
00123                                        &(*magfield));
00124         AlgebraicSymMatrix errMatrix = AlgebraicSymMatrix(5,1);
00125         TSOS innerState = TSOS(Gtp, CurvilinearTrajectoryError(errMatrix), tracker->idToDet(((const TrackingRecHit *)HitPairs[is].inner())->geographicalId())->surface());
00126         const TSOS innerUpdated = theUpdator->update(innerState, *inrhit);
00127         LogDebug("CosmicSeedFinder") << " FirstTSOS "<< innerState;
00128         
00129         //First propagation
00130         const TSOS outerState =
00131           thePropagatorOp->propagate(innerUpdated,
00132                                      tracker->idToDet((*(HitPairs[is].outer())).geographicalId())->surface());
00133         if ( outerState.isValid()) {
00134           
00135           LogDebug("CosmicSeedFinder") <<"outerState "<<outerState;
00136           TSOS outerUpdated = theUpdator->update( outerState,*outrhit);
00137           //fudge factor for multiple scattering
00138           outerUpdated.rescaleError( multipleScatteringFactor);
00139           if ( outerUpdated.isValid()) {
00140           LogDebug("CosmicSeedFinder") <<"outerUpdated "<<outerUpdated;
00141           PTrajectoryStateOnDet *PTraj=  
00142             transformer.persistentState(outerUpdated,(*(HitPairs[is].outer())).geographicalId().rawId());
00143           output.push_back(TrajectorySeed(*PTraj,hits,oppositeToMomentum));
00144           delete PTraj;
00145         
00146           }else      edm::LogWarning("CosmicSeedFinder") << " SeedForCosmics first update failed ";
00147         }else      edm::LogWarning("CosmicSeedFinder") << " SeedForCosmics first propagation failed ";
00148       }
00149     }
00150   }
00151 }
00152 

Generated on Tue Jun 9 17:45:46 2009 for CMSSW by  doxygen 1.5.4