24 static Int_t volidmax = 0;
27 if ((Int_t)
fHash.size()<volidmax)
29 fHash.resize(volidmax);
30 for(i=0;i<
fHash.size();i++)
35 if (
fHash[volId]==NULL)
44 fHash[volId]->isPsTen=iten*2;
45 if (lisPS)
fHash[volId]->isPsTen+=1;
47 ten=
fHash[volId]->isPsTen/2;
48 isPS=
fHash[volId]->isPsTen%2;
49 return fHash[volId]->cell;
59 vector<ecalCell*> cells=
fStructure[i]->GetCells();
60 copy(cells.begin(),cells.end(), back_inserter(
fCells));
72 : TNamed(
"ecalStructure",
"Calorimeter structure"),
115 number=(i*100+j)*100;
122 cerr <<
"-I- ecalStructure::Construct(): calorimeter matrix created." << endl;
125 list<ecalCell*> neib;
126 vector<ecalCell*> cl;
127 vector<ecalCell*>::const_iterator pcl;
179 for(pcl=cl.begin();pcl!=cl.end();++pcl)
189 if (find(lst.begin(),lst.end(),mod)==lst.end())
196 list<ecalCell*>::const_iterator p;
197 for(p=from.begin();p!=from.end();++p)
198 if (find(where.begin(),where.end(),(*p))==where.end())
206 if (find(lst.begin(),lst.end(),cell)==lst.end())
221 Float_t mx1=cell->
GetX1();
222 Float_t mx2=cell->
GetX2();
223 Float_t my1=cell->
GetY1();
224 Float_t my2=cell->
GetY2();
229 list<ecalCell*> neib;
231 list<ecalModule*> tml;
232 list<ecalModule*>::const_iterator ptml;
233 list<ecalCell*>::const_iterator ptl;
249 cerr <<
"Error during creating neighbors lists." << endl;
250 cerr <<
"Can't' find any modules neighbors to cell." << endl;
251 cerr <<
"Cell: CenterX=" << x <<
", CenterY=" << y <<
"." << endl;
255 for(ptml=tml.begin();ptml!=tml.end();++ptml) {
262 cerr <<
"Error during creating neighbors lists." << endl;
263 cerr <<
"Can't' find any cells neighbors to cell." << endl;
264 cerr <<
"Cell: CenterX=" << x <<
", CenterY=" << y <<
"." << endl;
267 for(ptl=tl.begin();ptl!=tl.end();++ptl) {
272 cx=(*ptl)->GetCenterX();
273 cy=(*ptl)->GetCenterY();
274 if (fabs(mx1-x2)<dd) {
275 if ((cy-y+2*dy>-dd&&cy-y-dy/2<dd)||fabs(y-dy-y1)<dd||fabs(y-dy-y2)<dd) {
278 if ((cy-y-2*dy<dd&&cy-y+dy/2>-dd)||fabs(y+dy-y1)<dd||fabs(y+dy-y2)<dd) {
282 if (fabs(my1-y2)<dd) {
283 if ((cx-x+2*dx>-dd&&cx-x-dx/2<dd)||fabs(x-dx-x1)<dd||fabs(x-dx-x2)<dd) {
286 if ((cx-x-2*dx<dd&&cx-x+dx/2>-dd)||fabs(x+dx-x1)<dd||fabs(x+dx-x2)<dd) {
290 if (fabs(mx2-x1)<dd) {
291 if ((cy-y+2*dy>-dd&&cy-y-dy/2<dd)||fabs(y-dy-y1)<dd||fabs(y-dy-y2)<dd) {
294 if ((cy-y-2*dy<dd&&cy-y+dy/2>-dd)||fabs(y+dy-y1)<dd||fabs(y+dy-y2)<dd) {
298 if (fabs(my2-y1)<dd) {
299 if ((cx-x+2*dx>-dd&&cx-x-dx/2<dd)||fabs(x-dx-x1)<dd||fabs(x-dx-x2)<dd) {
302 if ((cx-x-2*dx<dd&&cx-x+dx/2>-dd)||fabs(x+dx-x1)<dd||fabs(x+dx-x2)<dd) {
314 list<ecalCell*>::const_iterator p=
fCells.begin();
318 (*p)->ResetEnergyFast();
334 Int_t mnum=hitId/100;
335 Int_t cellx = mnum/100;
336 Int_t celly = mnum%100;
337 mnum =
GetNum(cellx, celly);
344 Int_t cellnum=hitId%100;
346 Int_t cx=cellnum%10-1;
347 Int_t cy=cellnum/10-1;
349 if (module==NULL||cx<0||cy<0||cx>=module->GetType()||cy>=module->GetType()) {x=0; y=0;
return;}
350 cell=
module->At(cx,cy);
351 x=cell->GetCenterX();
352 y=cell->GetCenterY();
362 Int_t mnum=hitId/100;
363 Int_t cellx = mnum/100;
364 Int_t celly = mnum%100;
365 mnum =
GetNum(cellx, celly);
371 Int_t cellnum=hitId%100;
372 Int_t cx=cellnum%10-1;
373 Int_t cy=cellnum/10-1;
375 if (module==NULL||cx<0||cy<0||cx>=module->GetType()||cy>=module->GetType())
378 return module->At(cx,cy);
387 Int_t modulenum = hitId/100;
388 Int_t cellx = modulenum/100;
389 Int_t celly = modulenum%100;
391 Int_t innernum = hitId%100;
392 Int_t iny = innernum/10;
393 Int_t inx = innernum%10;
397 x = (cellx-1)* msize + inx;
398 y = (celly-1)* msize + iny;
404 Int_t modulenum = hitId/100;
405 Int_t cellx = modulenum/100;
406 Int_t celly = modulenum%100;
void SetNeighborsList(std::list< ecalCell * > &neib)
Float_t GetCenterX() const
Float_t GetCenterY() const
Double_t GetModuleSize() const
char GetType(Int_t x, Int_t y) const
ecalStructure(ecalInf *ecalinf)
ecalModule * GetModule(Float_t x, Float_t y) const
Int_t GetType(const Int_t hitId) const
ecalCell * GetCell(Float_t x, Float_t y) const
std::vector< __ecalCellWrapper * > fHash
Int_t GetNumber(Int_t x, Int_t y) const
void CreateNLists(ecalCell *cell)
ecalCell * GetHitCell(const Int_t hitId) const
Int_t GetNum(Int_t x, Int_t y) const
std::vector< ecalModule * > fStructure
ecalModule * CreateModule(char type, Int_t number, Float_t x1, Float_t y1, Float_t x2, Float_t y2)
void GetGlobalCellXY(const Int_t hitId, Int_t &x, Int_t &y) const
std::list< ecalCell * > fCells
void GetHitXY(const Int_t hitId, Float_t &x, Float_t &y) const
static Bool_t GetCellCoordInf(Int_t fVolumeID, Float_t &x, Float_t &y, Int_t &tenergy)
void _add_not_null(ecalModule *mod, list< ecalModule * > &lst)