25 int plane = strip.
plane();
27 LogTrace(
"PreShowerClusterAlgo") <<
"Preshower Seeded Algorithm - looking for clusters";
28 LogTrace(
"PreShowerClusterAlgo")<<
"Preshower is intersected at strip" << strip.
strip() <<
",at plane" << plane ;
32 std::vector< std::pair<DetId,float> > dummy;
34 LogTrace(
"PreShowerClusterAlgo") <<
" Creating a null-cluster" ;
38 if ( strip ==
ESDetId(0) )
return nullcluster;
47 navigator.setHome(strip);
50 LogTrace(
"PreShowerClusterAlgo") <<
"Total number of strips in the central road:" <<
road_2d.size() ;
53 ESDetId strip_north = navigator.north();
54 findRoad(strip_north,navigator,plane);
56 ESDetId strip_south = navigator.south();
57 findRoad(strip_south,navigator,plane);
61 ESDetId strip_east = navigator.east();
62 findRoad(strip_east,navigator,plane);
64 ESDetId strip_west = navigator.west();
65 findRoad(strip_west,navigator,plane);
68 LogTrace(
"PreShowerClusterAlgo") <<
"Total number of strips in all three roads:" <<
road_2d.size() ;
73 RecHitsMap::iterator max_it;
75 std::vector<ESDetId>::iterator itID;
77 LogTrace(
"PreShowerClusterAlgo") <<
"ID ="<<*itID ;
79 RecHitsMap::iterator strip_it =
rechits_map->find(*itID);
82 LogTrace(
"PreShowerClusterAlgo") <<
" strip is " <<
ESDetId(strip_it->first) <<
"E ="<< strip_it->second.energy();
84 float E = strip_it->second.energy();
92 if ( !found )
return nullcluster;
96 recHits_pos.insert(std::make_pair(max_it->first, max_it->second));
97 used_s->insert(max_it->first);
98 LogTrace(
"PreShowerClusterAlgo") <<
"Central hottest strip" <<
ESDetId(max_it->first) <<
"is saved with energy E =" << E_max ;
103 navigator.setHome(max_it->first);
104 ESDetId startES = max_it->first;
108 int nadjacents_east = 0;
109 while ( (next=navigator.east()) !=
ESDetId(0) && next != startES && nadjacents_east < 2 ) {
111 LogTrace(
"PreShowerClusterAlgo") <<
"Adjacent east #" << nadjacents_east <<
":"<<
next ;
113 RecHitsMap::iterator strip_it =
rechits_map->find(next);
117 clusterRecHits.
push_back(strip_it->second);
119 if ( nadjacents_east==1 ) strip_1 =
next;
120 used_s->insert(strip_it->first);
121 LogTrace(
"PreShowerClusterAlgo") <<
"East adjacent strip #" << nadjacents_east <<
"is saved with energy E =" << strip_it->second.energy() ;
126 int nadjacents_west = 0;
127 while ( (next=navigator.west()) !=
ESDetId(0) && next != startES && nadjacents_west < 2 ) {
129 LogTrace(
"PreShowerClusterAlgo") <<
"Adjacent west #" << nadjacents_west <<
":"<<
next ;
131 RecHitsMap::iterator strip_it =
rechits_map->find(next);
133 clusterRecHits.
push_back(strip_it->second);
134 if ( nadjacents_west==1 ) strip_2 =
next;
135 used_s->insert(strip_it->first);
136 LogTrace(
"PreShowerClusterAlgo") <<
"West adjacent strip #" << nadjacents_west <<
"is saved with energy E =" << strip_it->second.energy();
140 else if (plane == 2) {
143 int nadjacents_north = 0;
144 while ( (next=navigator.north()) !=
ESDetId(0) && next != startES && nadjacents_north < 2 ) {
146 LogTrace(
"PreShowerClusterAlgo") <<
"Adjacent north #" << nadjacents_north <<
":"<<
next ;
148 RecHitsMap::iterator strip_it =
rechits_map->find(next);
150 clusterRecHits.
push_back(strip_it->second);
151 if ( nadjacents_north==1 ) strip_1 =
next;
152 used_s->insert(strip_it->first);
153 LogTrace(
"PreShowerClusterAlgo") <<
"North adjacent strip #" << nadjacents_north <<
"is saved with energy E =" << strip_it->second.energy() ;
158 int nadjacents_south = 0;
159 while ( (next=navigator.south()) !=
ESDetId(0) && next != startES && nadjacents_south < 2 ) {
161 LogTrace(
"PreShowerClusterAlgo") <<
"Adjacent south #" << nadjacents_south <<
":"<<
next ;
163 RecHitsMap::iterator strip_it =
rechits_map->find(next);
165 clusterRecHits.
push_back(strip_it->second);
166 if ( nadjacents_south==1 ) strip_2 =
next;
167 used_s->insert(strip_it->first);
168 LogTrace(
"PreShowerClusterAlgo") <<
"South adjacent strip #" << nadjacents_south <<
"is saved with energy E =" << strip_it->second.energy() ;
173 LogTrace(
"PreShowerClusterAlgo") <<
" Wrong plane number" << plane <<
", null cluster will be returned! " << std::endl;
177 LogTrace(
"PreShowerClusterAlgo") <<
"Total size of clusterRecHits is" << clusterRecHits.
size();
178 LogTrace(
"PreShowerClusterAlgo") <<
"Two adjacent strips for position calculation are:" << strip_1 <<
"and" << strip_2;
182 RecHitsMap::iterator strip_it1, strip_it2;
185 recHits_pos.insert(std::make_pair(strip_it1->first, strip_it1->second));
189 recHits_pos.insert(std::make_pair(strip_it2->first, strip_it2->second));
192 RecHitsMap::iterator
cp;
193 double energy_pos = 0;
197 for (cp = recHits_pos.begin(); cp!=recHits_pos.end(); cp++ ) {
198 double E = cp->second.energy();
202 x_pos += E * position.
x();
203 y_pos += E * position.
y();
204 z_pos += E * position.
z();
211 Point pos(x_pos,y_pos,z_pos);
212 LogTrace(
"PreShowerClusterAlgo") <<
"ES Cluster position =" <<
"("<< x_pos <<
","<< y_pos <<
","<< z_pos <<
")";
218 std::vector<std::pair<DetId,float > > usedHits;
219 for (it=clusterRecHits.
begin(); it != clusterRecHits.
end(); it++) {
220 Eclust += it->energy();
221 usedHits.push_back(std::pair<DetId,float > (it->id(),1.));
228 LogTrace(
"PreShowerClusterAlgo") <<
" ES Cluster is created with:" ;
229 LogTrace(
"PreShowerClusterAlgo") <<
" energy =" << cluster.
energy();
230 LogTrace(
"PreShowerClusterAlgo") <<
" (eta,phi) =" <<
"("<<cluster.
eta()<<
","<<cluster.
phi()<<
")";
231 LogTrace(
"PreShowerClusterAlgo") <<
" nhits =" << cluster.
nhits();
233 LogTrace(
"PreShowerClusterAlgo") <<
" (x,y,z) =" <<
"(" << cluster.
x() <<
", "<< cluster.
y() <<
","<< cluster.
z()<<
")" ;
249 if (
used_s->find(candidate_it->first) !=
used_s->end())
250 LogTrace(
"PreShowerClusterAlgo") <<
" This strip is in use";
252 LogTrace(
"PreShowerClusterAlgo") <<
" No such a strip in rechits_map";
254 LogTrace(
"PreShowerClusterAlgo") <<
"Strip energy" << candidate_it->second.energy() <<
"is below threshold";
257 if ( (
used_s->find(candidate_it->first) !=
used_s->end()) ||
270 if ( strip ==
ESDetId(0) )
return;
273 theESNav.setHome(strip);
276 LogTrace(
"PreShowerClusterAlgo") <<
"findRoad starts from strip" << strip;
281 LogTrace(
"PreShowerClusterAlgo") <<
" Go to the East ";
283 while ( ((next=theESNav.east()) !=
ESDetId(0) && next != strip) ) {
284 LogTrace(
"PreShowerClusterAlgo") <<
"East:" << n_east <<
"current strip is"<<
next;
292 LogTrace(
"PreShowerClusterAlgo") <<
"Go to the West" ;
295 while ( ((next=theESNav.west()) !=
ESDetId(0) && next != strip )) {
296 LogTrace(
"PreShowerClusterAlgo") <<
"West: " << n_west <<
"current strip is" <<
next ;
302 LogTrace(
"PreShowerClusterAlgo") <<
"Total number of strips found in the road at 1-st plane is" << n_east+n_west ;
305 else if (plane == 2) {
308 LogTrace(
"PreShowerClusterAlgo") <<
"Go to the North";
310 while ( ((next=theESNav.north()) !=
ESDetId(0) && next != strip) ) {
311 LogTrace(
"PreShowerClusterAlgo") <<
"North:" << n_north <<
"current strip is" <<
next ;
319 LogTrace(
"PreShowerClusterAlgo") <<
"Go to the South";
322 while ( ((next=theESNav.south()) !=
ESDetId(0) && next != strip) ) {
324 LogTrace(
"PreShowerClusterAlgo") <<
"South:" << n_south <<
"current strip is" <<
next ;
331 LogTrace(
"PreShowerClusterAlgo") <<
"Total number of strips found in the road at 2-nd plane is" << n_south+n_north;
335 LogTrace(
"PreShowerClusterAlgo") <<
" Wrong plane number, null cluster will be returned!";
CaloNavigator< ESDetId > EcalPreshowerNavigator
const math::XYZPoint & position() const
cluster centroid position
void findRoad(ESDetId strip, EcalPreshowerNavigator theESNav, int plane)
std::map< DetId, EcalRecHit > RecHitsMap
void push_back(T const &t)
reco::PreshowerCluster makeOneCluster(ESDetId strip, HitsID *used_strips, RecHitsMap *rechits_map, const CaloSubdetectorGeometry *&geometry_p, CaloSubdetectorTopology *&topology_p)
double z() const
z coordinate of cluster centroid
static int position[TOTALCHAMBERS][3]
double eta() const
pseudorapidity of cluster centroid
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
bool goodStrip(RecHitsMap::iterator candidate_it)
double x() const
x coordinate of cluster centroid
double energy() const
cluster energy
int nhits() const
Number of RecHits the cluster.
std::vector< ESDetId > road_2d
std::vector< EcalRecHit >::iterator iterator
const_iterator end() const
double y() const
y coordinate of cluster centroid
double preshClusterEnergyCut_
double phi() const
azimuthal angle of cluster centroid
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
double preshStripEnergyCut_
const_iterator begin() const