CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
CastorTowerProducer Class Reference

#include <RecoLocalCalo/Castor/src/CastorTowerProducer.cc>

Inheritance diagram for CastorTowerProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 CastorTowerProducer (const edm::ParameterSet &)
 
 ~CastorTowerProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Types

typedef edm::SortedCollection
< CastorRecHit
CastorRecHitCollection
 
typedef edm::RefVector
< CastorRecHitCollection
CastorRecHitRefVector
 
typedef std::vector
< reco::CastorTower
CastorTowerCollection
 
typedef ROOT::Math::RhoZPhiPoint CellPoint
 
typedef math::XYZPointD Point
 
typedef ROOT::Math::RhoEtaPhiPoint TowerPoint
 

Private Member Functions

virtual void beginJob ()
 
virtual void ComputeTowerVariable (const edm::RefVector< edm::SortedCollection< CastorRecHit > > &usedRecHits, double &Ehot, double &depth)
 
virtual void endJob ()
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 

Private Attributes

std::string input_
 
double maxtime_
 
double mintime_
 
double towercut_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Description: CastorTower Reconstruction Producer. Produce CastorTowers from CastorCells. Implementation:

Definition at line 45 of file CastorTowerProducer.cc.

Member Typedef Documentation

Definition at line 60 of file CastorTowerProducer.cc.

Definition at line 62 of file CastorTowerProducer.cc.

Definition at line 61 of file CastorTowerProducer.cc.

typedef ROOT::Math::RhoZPhiPoint CastorTowerProducer::CellPoint
private

Definition at line 59 of file CastorTowerProducer.cc.

Definition at line 57 of file CastorTowerProducer.cc.

typedef ROOT::Math::RhoEtaPhiPoint CastorTowerProducer::TowerPoint
private

Definition at line 58 of file CastorTowerProducer.cc.

Constructor & Destructor Documentation

CastorTowerProducer::CastorTowerProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 83 of file CastorTowerProducer.cc.

83  :
84  input_(iConfig.getUntrackedParameter<std::string>("inputprocess","castorreco")),
85  towercut_(iConfig.getUntrackedParameter<double>("towercut",1.)),
86  mintime_(iConfig.getUntrackedParameter<double>("mintime",-999)),
87  maxtime_(iConfig.getUntrackedParameter<double>("maxtime",999))
88 {
89  //register your products
90  produces<CastorTowerCollection>();
91  //now do what ever other initialization is needed
92 }
T getUntrackedParameter(std::string const &, T const &) const
CastorTowerProducer::~CastorTowerProducer ( )

Definition at line 95 of file CastorTowerProducer.cc.

96 {
97  // do anything here that needs to be done at desctruction time
98  // (e.g. close files, deallocate resources etc.)
99 }

Member Function Documentation

void CastorTowerProducer::beginJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 247 of file CastorTowerProducer.cc.

References LogDebug.

247  {
248  LogDebug("CastorTowerProducer")
249  <<"Starting CastorTowerProducer";
250 }
#define LogDebug(id)
void CastorTowerProducer::ComputeTowerVariable ( const edm::RefVector< edm::SortedCollection< CastorRecHit > > &  usedRecHits,
double &  Ehot,
double &  depth 
)
privatevirtual

Definition at line 258 of file CastorTowerProducer.cc.

References edm::Ref< C, T, F >::id(), module::module(), and dt_dqm_sourceclient_common_cff::reco.

Referenced by produce().

258  {
259 
260  using namespace reco;
261 
262  double Etot = 0;
263 
264  // loop over the cells used in the tower k
265  for (CastorRecHitRefVector::iterator it = usedRecHits.begin(); it != usedRecHits.end(); it++) {
266  edm::Ref<CastorRecHitCollection> rechit_p = *it;
267 
268  double Erechit = rechit_p->energy();
269  HcalCastorDetId id = rechit_p->id();
270  int module = id.module();
271  double zrechit = 0;
272  if (module < 3) zrechit = -14390 - 24.75 - 49.5*(module-1);
273  if (module > 2) zrechit = -14390 - 99 - 49.5 - 99*(module-3);
274 
275  if(Erechit > Ehot) Ehot = Erechit;
276  depth+=Erechit*zrechit;
277  Etot+=Erechit;
278  }
279 
280  depth/=Etot;
281  Ehot/=Etot;
282 }
module()
Definition: vlib.cc:994
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:243
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:238
refhelper::RefVectorTrait< CastorRecHitCollection, T, F >::iterator_type iterator
Definition: RefVector.h:40
ProductID id() const
Accessor for product ID.
Definition: Ref.h:255
Definition: vlib.h:209
void CastorTowerProducer::endJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 253 of file CastorTowerProducer.cc.

References LogDebug.

253  {
254  LogDebug("CastorTowerProducer")
255  <<"Ending CastorTowerProducer";
256 }
#define LogDebug(id)
void CastorTowerProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::EDProducer.

Definition at line 107 of file CastorTowerProducer.cc.

References ComputeTowerVariable(), edm::Event::getByLabel(), i, edm::Ref< C, T, F >::id(), input_, j, gen::k, LogDebug, maxtime_, mintime_, module::module(), edm::Event::put(), dt_dqm_sourceclient_common_cff::reco, and towercut_.

107  {
108 
109  using namespace edm;
110  using namespace reco;
111  using namespace TMath;
112 
113  // Produce CastorTowers from CastorCells
114 
116  iEvent.getByLabel(input_,InputRecHits);
117 
118  std::auto_ptr<CastorTowerCollection> OutputTowers (new CastorTowerCollection);
119 
120  // get and check input size
121  int nRecHits = InputRecHits->size();
122 
123  LogDebug("CastorTowerProducer")
124  <<"2. entering CastorTowerProducer"<<std::endl;
125 
126  if (nRecHits==0)
127  LogDebug("CastorTowerProducer") <<"Warning: You are trying to run the Tower algorithm with 0 input rechits.";
128 
129  // declare castor array
130  // (0,x): Energies - (1,x): emEnergies - (2,x): hadEnergies - (3,x): phi position
131 
132  double poscastortowerarray[4][16];
133  double negcastortowerarray[4][16];
134 
135  CastorRecHitRefVector poscastorusedrechits[16];
136  CastorRecHitRefVector negcastorusedrechits[16];
137 
138  // set phi values and everything else to zero
139  for (int j = 0; j < 16; j++) {
140  poscastortowerarray[3][j] = -2.94524 + j*0.3927;
141  poscastortowerarray[0][j] = 0.;
142  poscastortowerarray[1][j] = 0.;
143  poscastortowerarray[2][j] = 0.;
144 
145  negcastortowerarray[3][j] = -2.94524 + j*0.3927;
146  negcastortowerarray[0][j] = 0.;
147  negcastortowerarray[1][j] = 0.;
148  negcastortowerarray[2][j] = 0.;
149  }
150 
151  // loop over rechits to build castortowerarray[4][16] and castorusedrechits[16]
152  for (unsigned int i = 0; i < InputRecHits->size(); i++) {
153 
155 
156  double Erechit = rechit_p->energy();
157  HcalCastorDetId id = rechit_p->id();
158  int module = id.module();
159  int sector = id.sector();
160  double zrechit = 0;
161  if (module < 3) zrechit = -14390 - 24.75 - 49.5*(module-1);
162  if (module > 2) zrechit = -14390 - 99 - 49.5 - 99*(module-3);
163  double phirechit = -100;
164  if (sector < 9) phirechit = 0.19635 + (sector-1)*0.3927;
165  if (sector > 8) phirechit = -2.94524 + (sector - 9)*0.3927;
166 
167  // add time conditions for the rechit
168  if (rechit_p->time() > mintime_ && rechit_p->time() < maxtime_) {
169 
170  // loop over the 16 towers possibilities
171  for ( int j=0;j<16;j++) {
172 
173  // phi matching condition
174  if (TMath::Abs(phirechit - poscastortowerarray[3][j]) < 0.0001) {
175 
176  // condition over rechit z value
177  if (zrechit > 0.) {
178  poscastortowerarray[0][j]+=Erechit;
179  if (module < 3) {poscastortowerarray[1][j]+=Erechit;} else {poscastortowerarray[2][j]+=Erechit;}
180  poscastorusedrechits[j].push_back(rechit_p);
181  } else {
182  negcastortowerarray[0][j]+=Erechit;
183  if (module < 3) {negcastortowerarray[1][j]+=Erechit;} else {negcastortowerarray[2][j]+=Erechit;}
184  negcastorusedrechits[j].push_back(rechit_p);
185  } // end condition over rechit z value
186  } // end phi matching condition
187  } // end loop over the 16 towers possibilities
188  } // end time conditions
189 
190  } // end loop over rechits to build castortowerarray[4][16] and castorusedrechits[16]
191 
192  // make towers of the arrays
193 
194  double fem, Ehot, depth;
195  double rhoTower = 88.5;
196 
197  // loop over the 16 towers possibilities
198  for (int k=0;k<16;k++) {
199 
200  fem = 0;
201  Ehot = 0;
202  depth = 0;
203 
204  // select the positive towers with E > Ecut
205  if (poscastortowerarray[0][k] > towercut_) {
206 
207  fem = poscastortowerarray[1][k]/poscastortowerarray[0][k];
208  CastorRecHitRefVector usedRecHits = poscastorusedrechits[k];
209  ComputeTowerVariable(usedRecHits,Ehot,depth);
210 
211  LogDebug("CastorTowerProducer")
212  <<"tower "<<k+1<<": fem = "<<fem<<" ,depth = "<<depth<<" ,Ehot = "<<Ehot<<std::endl;
213 
214  TowerPoint temptowerposition(rhoTower,5.9,poscastortowerarray[3][k]);
215  Point towerposition(temptowerposition);
216 
217  CastorTower newtower(poscastortowerarray[0][k],towerposition,poscastortowerarray[1][k],poscastortowerarray[2][k],fem,depth,Ehot,
218  poscastorusedrechits[k]);
219  OutputTowers->push_back(newtower);
220  } // end select the positive towers with E > Ecut
221 
222  // select the negative towers with E > Ecut
223  if (negcastortowerarray[0][k] > towercut_) {
224 
225  fem = negcastortowerarray[1][k]/negcastortowerarray[0][k];
226  CastorRecHitRefVector usedRecHits = negcastorusedrechits[k];
227  ComputeTowerVariable(usedRecHits,Ehot,depth);
228 
229  LogDebug("CastorTowerProducer")
230  <<"tower "<<k+1 << " energy = " << negcastortowerarray[0][k] << "EM = " << negcastortowerarray[1][k] << "HAD = " << negcastortowerarray[2][k] << "phi = " << negcastortowerarray[3][k] << ": fem = "<<fem<<" ,depth = "<<depth<<" ,Ehot = "<<Ehot<<std::endl;
231 
232  TowerPoint temptowerposition(rhoTower,-5.9,negcastortowerarray[3][k]);
233  Point towerposition(temptowerposition);
234 
235  CastorTower newtower(negcastortowerarray[0][k],towerposition,negcastortowerarray[1][k],negcastortowerarray[2][k],fem,depth,Ehot,
236  negcastorusedrechits[k]);
237  OutputTowers->push_back(newtower);
238  } // end select the negative towers with E > Ecut
239 
240  } // end loop over the 16 towers possibilities
241 
242  iEvent.put(OutputTowers);
243 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
module()
Definition: vlib.cc:994
ROOT::Math::RhoEtaPhiPoint TowerPoint
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
edm::RefVector< CastorRecHitCollection > CastorRecHitRefVector
math::XYZPoint Point
int j
Definition: DBlmapReader.cc:9
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
int k[5][pyjets_maxn]
virtual void ComputeTowerVariable(const edm::RefVector< edm::SortedCollection< CastorRecHit > > &usedRecHits, double &Ehot, double &depth)
ProductID id() const
Accessor for product ID.
Definition: Ref.h:255
std::vector< CastorTower > CastorTowerCollection
collection of CastorTower objects
Definition: CastorTower.h:136
Definition: vlib.h:209

Member Data Documentation

std::string CastorTowerProducer::input_
private

Definition at line 63 of file CastorTowerProducer.cc.

Referenced by produce().

double CastorTowerProducer::maxtime_
private

Definition at line 66 of file CastorTowerProducer.cc.

Referenced by produce().

double CastorTowerProducer::mintime_
private

Definition at line 65 of file CastorTowerProducer.cc.

Referenced by produce().

double CastorTowerProducer::towercut_
private

Definition at line 64 of file CastorTowerProducer.cc.

Referenced by produce().