18 #include "boost/foreach.hpp"
21 : inputTags( iConfig.getParameter<std::vector<edm::InputTag> >(
"InputTags") ),
22 theClustersLabel( iConfig.getParameter<edm::InputTag>(
"Clusters")),
23 Prefix( iConfig.getParameter<std::string>(
"Prefix") )
25 produces <std::vector<unsigned> > (
Prefix +
"hits" );
26 produces <std::vector<float> > (
Prefix +
"strip" );
27 produces <std::vector<float> > (
Prefix +
"localtheta" );
28 produces <std::vector<float> > (
Prefix +
"localphi" );
29 produces <std::vector<float> > (
Prefix +
"localx" );
30 produces <std::vector<float> > (
Prefix +
"localy" );
31 produces <std::vector<float> > (
Prefix +
"localz" );
32 produces <std::vector<float> > (
Prefix +
"momentum" );
33 produces <std::vector<float> > (
Prefix +
"energyloss" );
34 produces <std::vector<float> > (
Prefix +
"time" );
35 produces <std::vector<int> > (
Prefix +
"particle" );
36 produces <std::vector<unsigned short> > (
Prefix +
"process" );
43 int size = clustermap.size();
44 std::auto_ptr<std::vector<unsigned> > hits (
new std::vector<unsigned> (size, 0) );
45 std::auto_ptr<std::vector<float> >
strip (
new std::vector<float> (size, -100) );
46 std::auto_ptr<std::vector<float> > localtheta (
new std::vector<float> (size, -100) );
47 std::auto_ptr<std::vector<float> > localphi (
new std::vector<float> (size, -100) );
48 std::auto_ptr<std::vector<float> > localx (
new std::vector<float> (size, -100) );
49 std::auto_ptr<std::vector<float> > localy (
new std::vector<float> (size, -100) );
50 std::auto_ptr<std::vector<float> > localz (
new std::vector<float> (size, -100) );
51 std::auto_ptr<std::vector<float> > momentum (
new std::vector<float> (size, 0) );
52 std::auto_ptr<std::vector<float> > energyloss (
new std::vector<float> (size, -1) );
53 std::auto_ptr<std::vector<float> >
time (
new std::vector<float> (size, -1) );
54 std::auto_ptr<std::vector<int> > particle (
new std::vector<int> (size,-500) );
55 std::auto_ptr<std::vector<unsigned short> >
process (
new std::vector<unsigned short> (size,0) );
72 shallow::CLUSTERMAP::const_iterator cluster =
match_cluster(
id, driftedstrip_, clustermap, *clusters);
73 if(cluster != clustermap.end()) {
74 unsigned i = cluster->second;
76 if(hits->at(i) == 1) {
77 strip->at(i) = hitstrip_;
83 momentum->at(i) = hit.
pabs();
95 iEvent.
put( localtheta,
Prefix +
"localtheta" );
96 iEvent.
put( localphi,
Prefix +
"localphi" );
100 iEvent.
put( momentum,
Prefix +
"momentum" );
101 iEvent.
put( energyloss,
Prefix +
"energyloss" );
103 iEvent.
put( particle,
Prefix +
"particle" );
104 iEvent.
put( process,
Prefix +
"process" );
109 shallow::CLUSTERMAP::const_iterator cluster = clustermap.end();
111 if( clustersDetSet != clusters.
end() ) {
113 while( right != clustersDetSet->
end() && strip_ > right->barycenter() )
116 if(right!=clustersDetSet->
end() && right!=clustersDetSet->
begin()) {
117 unsigned firstStrip = (right->barycenter()-strip_) < (strip_-left->barycenter()) ? right->firstStrip() : left->firstStrip();
118 cluster = clustermap.find( std::make_pair(
id, firstStrip));
120 else if(right != clustersDetSet->
begin())
121 cluster = clustermap.find( std::make_pair(
id, left->firstStrip()));
123 cluster = clustermap.find( std::make_pair(
id, right->firstStrip()));
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator begin() const
tuple SiStripLorentzAngle
shallow::CLUSTERMAP::const_iterator match_cluster(const unsigned &, const float &, const shallow::CLUSTERMAP &, const edmNew::DetSetVector< SiStripCluster > &) const
Geom::Theta< float > thetaAtEntry() const
fast and more accurate access to momentumAtEntry().theta()
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
data_type const * const_iterator
const_iterator find(id_type i) const
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
virtual float strip(const LocalPoint &) const =0
std::vector< edm::InputTag > inputTags
float timeOfFlight() const
Local3DPoint localPosition() const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
ShallowSimhitClustersProducer(const edm::ParameterSet &)
const_iterator end() const
float pabs() const
fast and more accurate access to momentumAtEntry().mag()
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
CLUSTERMAP make_cluster_map(const edm::Event &, edm::InputTag &)
unsigned short processType() const
float energyLoss() const
The energy deposit in the PSimHit, in ???.
void produce(edm::Event &, const edm::EventSetup &)
std::map< std::pair< uint32_t, uint16_t >, unsigned int > CLUSTERMAP
Geom::Phi< float > phiAtEntry() const
fast and more accurate access to momentumAtEntry().phi()
edm::InputTag theClustersLabel
tuple size
Write out results.
unsigned int detUnitId() const