146 size_t n = TrajToTrackMap.
size();
147 std::vector<DeDxData> dedxEstimate(n);
157 vector<DeDxTools::RawHits> hits;
160 const vector<TrajectoryMeasurement> & measurements = traj->measurements();
161 for(vector<TrajectoryMeasurement>::const_iterator it = measurements.begin(); it!=measurements.end(); it++){
163 if( !trajState.
isValid())
continue;
167 double cosine = trackDirection.
z()/trackDirection.
mag();
169 if(
const SiStripMatchedRecHit2D* matchedHit=dynamic_cast<const SiStripMatchedRecHit2D*>(recHit)){
180 mono.
detId= matchedHit->monoId();
181 stereo.
detId= matchedHit->stereoId();
187 const SiStripRecHit2D* singleHit=&(projectedHit->originalHit());
193 mono.
detId= singleHit->geographicalId();
195 hits.push_back(mono);
196 }
else if(
const SiStripRecHit2D* singleHit=dynamic_cast<const SiStripRecHit2D*>(recHit)){
203 mono.
detId= singleHit->geographicalId();
205 hits.push_back(mono);
206 }
else if(
const SiStripRecHit1D* single1DHit=dynamic_cast<const SiStripRecHit1D*>(recHit)){
213 mono.
detId= single1DHit->geographicalId();
215 hits.push_back(mono);
216 }
else if(
const SiPixelRecHit* pixelHit=dynamic_cast<const SiPixelRecHit*>(recHit)){
223 pixel.
charge = pixelHit->cluster()->charge();
225 pixel.
detId= pixelHit->geographicalId();
226 hits.push_back(pixel);
231 int NClusterSaturating = 0;
232 for(
size_t i=0;
i < hits.size();
i++)
234 stModInfo* MOD =
MODsColl[hits[
i].detId];
235 float pathLen = MOD->Thickness/
std::abs(hits[
i].angleCosine);
236 float charge = MOD->Normalization*hits[
i].charge*
std::abs(hits[
i].angleCosine);
237 dedxHits.push_back(
DeDxHit( charge, MOD->Distance, pathLen, hits[
i].detId) );
239 if(hits[i].NSaturating>0)NClusterSaturating++;
242 sort(dedxHits.begin(),dedxHits.end(),less<DeDxHit>());
247 val_and_error.second = NClusterSaturating;
249 dedxEstimate[
j] =
DeDxData(val_and_error.first, val_and_error.second, dedxHits.size() );
251 filler.insert(trackCollectionHandle, dedxEstimate.begin(), dedxEstimate.end());
256 iEvent.
put(trackDeDxEstimateAssociation);
edm::EDGetTokenT< TrajTrackAssociationCollection > m_trajTrackAssociationTag
friend struct const_iterator
const_iterator end() const
last iterator over the map (read only)
edm::EDGetTokenT< reco::TrackCollection > m_tracksTag
bool getByToken(EDGetToken token, Handle< PROD > &result) const
LocalVector localDirection() const
std::vector< DeDxHit > DeDxHitCollection
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Abs< T >::type abs(const T &t)
BaseDeDxEstimator * m_estimator
virtual std::pair< float, float > dedx(const reco::DeDxHitCollection &Hits)=0
size_type size() const
map size
key_type key() const
Accessor for product key.
T const * product() const
__gnu_cxx::hash_map< unsigned int, stModInfo *, __gnu_cxx::hash< unsigned int >, isEqual > MODsColl
const_iterator begin() const
first iterator over the map (read only)
int getCharge(const SiStripCluster *Cluster, int &Saturating_Strips, const uint32_t &)