91 input_(iConfig.getUntrackedParameter<std::string>(
"inputprocess",
"castorreco")),
92 towercut_(iConfig.getUntrackedParameter<double>(
"towercut",0.65)),
93 mintime_(iConfig.getUntrackedParameter<double>(
"mintime",-999)),
94 maxtime_(iConfig.getUntrackedParameter<double>(
"maxtime",999))
97 produces<CastorTowerCollection>();
117 using namespace reco;
118 using namespace TMath;
128 int nRecHits = InputRecHits->size();
131 <<
"2. entering CastorTowerProducer"<<std::endl;
134 LogDebug(
"CastorTowerProducer") <<
"Warning: You are trying to run the Tower algorithm with 0 input rechits.";
139 double poscastortowerarray[4][16];
140 double negcastortowerarray[4][16];
146 for (
int j = 0;
j < 16;
j++) {
147 poscastortowerarray[3][
j] = -2.94524 +
j*0.3927;
148 poscastortowerarray[0][
j] = 0.;
149 poscastortowerarray[1][
j] = 0.;
150 poscastortowerarray[2][
j] = 0.;
152 negcastortowerarray[3][
j] = -2.94524 +
j*0.3927;
153 negcastortowerarray[0][
j] = 0.;
154 negcastortowerarray[1][
j] = 0.;
155 negcastortowerarray[2][
j] = 0.;
161 std::vector<DetId> channels =
p->getAllChannels();
164 for (
unsigned int i = 0;
i < InputRecHits->size();
i++) {
173 for (std::vector<DetId>::iterator channel = channels.begin();channel != channels.end();channel++) {
174 if (channel->rawId() == genericID.
rawId()) {
182 double Erechit = rechit_p->energy();
184 int sector =
id.sector();
186 if (module < 3) zrechit = -14390 - 24.75 - 49.5*(module-1);
187 if (module > 2) zrechit = -14390 - 99 - 49.5 - 99*(module-3);
188 double phirechit = -100;
189 if (sector < 9) phirechit = 0.19635 + (sector-1)*0.3927;
190 if (sector > 8) phirechit = -2.94524 + (sector - 9)*0.3927;
196 for (
int j=0;
j<16;
j++) {
199 if (TMath::Abs(phirechit - poscastortowerarray[3][
j]) < 0.0001) {
203 poscastortowerarray[0][
j]+=Erechit;
204 if (module < 3) {poscastortowerarray[1][
j]+=Erechit;}
else {poscastortowerarray[2][
j]+=Erechit;}
205 poscastorusedrechits[
j].push_back(rechit_p);
207 negcastortowerarray[0][
j]+=Erechit;
208 if (module < 3) {negcastortowerarray[1][
j]+=Erechit;}
else {negcastortowerarray[2][
j]+=Erechit;}
209 negcastorusedrechits[
j].push_back(rechit_p);
219 double fem, Ehot, depth;
220 double rhoTower = 88.5;
223 for (
int k=0;
k<16;
k++) {
232 fem = poscastortowerarray[1][
k]/poscastortowerarray[0][
k];
237 <<
"tower "<<
k+1<<
": fem = "<<fem<<
" ,depth = "<<depth<<
" ,Ehot = "<<Ehot<<std::endl;
239 TowerPoint temptowerposition(rhoTower,5.9,poscastortowerarray[3][
k]);
240 Point towerposition(temptowerposition);
242 CastorTower newtower(poscastortowerarray[0][k],towerposition,poscastortowerarray[1][k],poscastortowerarray[2][k],fem,depth,Ehot,
243 poscastorusedrechits[k]);
244 OutputTowers->push_back(newtower);
250 fem = negcastortowerarray[1][
k]/negcastortowerarray[0][
k];
255 <<
"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;
257 TowerPoint temptowerposition(rhoTower,-5.9,negcastortowerarray[3][
k]);
258 Point towerposition(temptowerposition);
260 CastorTower newtower(negcastortowerarray[0][k],towerposition,negcastortowerarray[1][k],negcastortowerarray[2][k],fem,depth,Ehot,
261 negcastorusedrechits[k]);
262 OutputTowers->push_back(newtower);
267 iEvent.
put(OutputTowers);
274 <<
"Starting CastorTowerProducer";
280 <<
"Ending CastorTowerProducer";
285 using namespace reco;
293 double Erechit = rechit_p->energy();
297 if (module < 3) zrechit = -14390 - 24.75 - 49.5*(module-1);
298 if (module > 2) zrechit = -14390 - 99 - 49.5 - 99*(module-3);
300 if(Erechit > Ehot) Ehot = Erechit;
301 depth+=Erechit*zrechit;
edm::SortedCollection< CastorRecHit > CastorRecHitCollection
ROOT::Math::RhoZPhiPoint CellPoint
#define DEFINE_FWK_MODULE(type)
std::vector< reco::CastorTower > CastorTowerCollection
ROOT::Math::RhoEtaPhiPoint TowerPoint
int bad(Items const &cont)
uint32_t rawId() const
get the raw id
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
virtual void produce(edm::Event &, const edm::EventSetup &)
edm::RefVector< CastorRecHitCollection > CastorRecHitRefVector
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double > > XYZPointD
point in space with cartesian internal representation
CastorTowerProducer(const edm::ParameterSet &)
virtual void ComputeTowerVariable(const edm::RefVector< edm::SortedCollection< CastorRecHit > > &usedRecHits, double &Ehot, double &depth)
ProductID id() const
Accessor for product ID.
tuple size
Write out results.