ATLAS Offline Software
Loading...
Searching...
No Matches
CaloGeometryFromFile Class Reference

#include <CaloGeometryFromFile.h>

Inheritance diagram for CaloGeometryFromFile:
Collaboration diagram for CaloGeometryFromFile:

Public Member Functions

 CaloGeometryFromFile ()
bool LoadGeometryFromFile (const std::string &fileName, const std::string &treeName, const std::string &hashFileName="/eos/atlas/atlascerngroupdisk/proj-simul/" "CaloGeometry/cellId_vs_cellHashId_map.txt")
bool LoadFCalGeometryFromFiles (const std::array< std::string, 3 > &fileNames)
void DrawFCalGraph (int isam, int color)
virtual bool PostProcessGeometry ()
virtual void Validate ATLAS_NOT_THREAD_SAFE (int nrnd=100)
virtual const CaloDetDescrElementgetDDE (Identifier identify) const
virtual const CaloDetDescrElementgetDDE (int sampling, Identifier identify) const
virtual const CaloDetDescrElementgetDDE (int sampling, float eta, float phi, float *distance=0, int *steps=0) const
virtual const CaloDetDescrElementgetFCalDDE (int sampling, float x, float y, float z, float *distance=0, int *steps=0) const
bool getClosestFCalCellIndex (int sampling, float x, float y, int &ieta, int &iphi, int *steps=0) const
double deta (int sample, double eta) const
void minmaxeta (int sample, double eta, double &mineta, double &maxeta) const
double rzmid (int sample, double eta) const
double rzent (int sample, double eta) const
double rzext (int sample, double eta) const
double rmid (int sample, double eta) const
double rent (int sample, double eta) const
double rext (int sample, double eta) const
double zmid (int sample, double eta) const
double zent (int sample, double eta) const
double zext (int sample, double eta) const
double rpos (int sample, double eta, int subpos=CaloSubPos::SUBPOS_MID) const
double zpos (int sample, double eta, int subpos=CaloSubPos::SUBPOS_MID) const
double rzpos (int sample, double eta, int subpos=CaloSubPos::SUBPOS_MID) const
bool isCaloBarrel (int sample) const
TGraphErrors * GetGraph (unsigned int sample) const
void SetDoGraphs (bool dographs=true)
bool DoGraphs () const
TGraph * DrawGeoSampleForPhi0 (int sample, int calocol, bool print=false)
TCanvas * DrawGeoForPhi0 ()
FCAL_ChannelMapGetFCAL_ChannelMap ()
void SetFCal_ChannelMap (const FCAL_ChannelMap *fcal_ChannnelMap)
virtual void PrintMapInfo (int i, int j)

Static Public Member Functions

static std::string SamplingName (int sample)

Static Public Attributes

static const int MAX_SAMPLING = CaloCell_ID_FCS::MaxSample
static const Identifier m_debug_identify
static std::atomic< bool > m_debug =false

Protected Member Functions

virtual void addcell (const CaloDetDescrElement *cell)
virtual void post_process (int layer)
virtual void InitRZmaps ()

Protected Attributes

t_cellmap m_cells
std::vector< t_cellmapm_cells_in_sampling
std::vector< t_eta_cellmapm_cells_in_sampling_for_phi0
std::vector< std::vector< CaloGeometryLookup * > > m_cells_in_regions
std::vector< bool > m_isCaloBarrel
std::vector< double > m_min_eta_sample [2]
std::vector< double > m_max_eta_sample [2]
std::vector< FSmap< double, double > > m_rmid_map [2]
std::vector< FSmap< double, double > > m_zmid_map [2]
std::vector< FSmap< double, double > > m_rent_map [2]
std::vector< FSmap< double, double > > m_zent_map [2]
std::vector< FSmap< double, double > > m_rext_map [2]
std::vector< FSmap< double, double > > m_zext_map [2]
bool m_dographs
std::vector< TGraphErrors * > m_graph_layers
FCAL_ChannelMap m_FCal_ChannelMap
std::vector< double > m_FCal_rmin
std::vector< double > m_FCal_rmax

Private Member Functions

void calculateFCalRminRmax ()
bool checkFCalGeometryConsistency ()

Detailed Description

Definition at line 10 of file CaloGeometryFromFile.h.

Constructor & Destructor Documentation

◆ CaloGeometryFromFile()

CaloGeometryFromFile::CaloGeometryFromFile ( )

Definition at line 21 of file CaloGeometryFromFile.cxx.

Member Function Documentation

◆ addcell()

void CaloGeometry::addcell ( const CaloDetDescrElement * cell)
protectedvirtualinherited

Definition at line 67 of file CaloGeometry.cxx.

68{
69 int sampling=cell->getSampling();
70 Identifier identify=cell->identify();
71
74
75 //m_cells[identify]= new CaloDetDescrElement(*cell);
76 //m_cells_in_sampling[sampling][identify]= new CaloDetDescrElement(*cell);
77
78 CaloGeometryLookup* lookup=nullptr;
79 for(unsigned int i=0;i<m_cells_in_regions[sampling].size();++i) {
80 if(m_cells_in_regions[sampling][i]->IsCompatible(cell)) {
81 lookup=m_cells_in_regions[sampling][i];
82 //cout<<sampling<<": found compatible map"<<endl;
83 break;
84 }
85 }
86 if(!lookup) {
87 lookup=new CaloGeometryLookup(m_cells_in_regions[sampling].size());
88 m_cells_in_regions[sampling].push_back(lookup);
89 }
90 lookup->add(cell);
91}
t_cellmap m_cells
std::vector< t_cellmap > m_cells_in_sampling
std::vector< std::vector< CaloGeometryLookup * > > m_cells_in_regions
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.

◆ ATLAS_NOT_THREAD_SAFE()

virtual void Validate CaloGeometry::ATLAS_NOT_THREAD_SAFE ( int nrnd = 100)
virtualinherited

Implements ICaloGeometry.

◆ calculateFCalRminRmax()

void CaloGeometryFromFile::calculateFCalRminRmax ( )
private

Definition at line 307 of file CaloGeometryFromFile.cxx.

308{
309
310 m_FCal_rmin.resize(3, FLT_MAX);
311 m_FCal_rmax.resize(3, 0.);
312
313 double x(0.), y(0.), r(0.);
314 for (int imap = 1; imap <= 3; imap++)
315 for (auto it = m_FCal_ChannelMap.begin(imap);
316 it != m_FCal_ChannelMap.end(imap); it++) {
317 x = it->second.x();
318 y = it->second.y();
319 r = sqrt(x * x + y * y);
320 if (r < m_FCal_rmin[imap - 1])
321 m_FCal_rmin[imap - 1] = r;
322 if (r > m_FCal_rmax[imap - 1])
323 m_FCal_rmax[imap - 1] = r;
324 }
325}
#define y
#define x
FCAL_ChannelMap m_FCal_ChannelMap
std::vector< double > m_FCal_rmin
std::vector< double > m_FCal_rmax
int r
Definition globals.cxx:22

◆ checkFCalGeometryConsistency()

bool CaloGeometryFromFile::checkFCalGeometryConsistency ( )
privatevirtual

Reimplemented from CaloGeometry.

Definition at line 327 of file CaloGeometryFromFile.cxx.

328{
329
330 unsigned long long phi_index, eta_index;
331 float x, y, dx, dy;
332 long id;
333
334 long mask1[]{0x34, 0x34, 0x35};
335 long mask2[]{0x36, 0x36, 0x37};
336
337 m_FCal_rmin.resize(3, FLT_MAX);
338 m_FCal_rmax.resize(3, 0.);
339
340 for (int imap = 1; imap <= 3; imap++) {
341
342 int sampling = imap + 20;
343
344 if ((int)m_cells_in_sampling[sampling].size()
345 != 2
346 * std::distance(m_FCal_ChannelMap.begin(imap),
347 m_FCal_ChannelMap.end(imap))) {
348 std::cout
349 << "Error: Incompatibility between FCalChannel map and GEO file: "
350 "Different number of cells in m_cells_in_sampling and "
351 "FCal_ChannelMap"
352 << std::endl;
353 std::cout << "m_cells_in_sampling: "
354 << m_cells_in_sampling[sampling].size() << std::endl;
355 std::cout << "FCal_ChannelMap: "
356 << 2
357 * std::distance(m_FCal_ChannelMap.begin(imap),
358 m_FCal_ChannelMap.end(imap))
359 << std::endl;
360 return false;
361 }
362
363 for (auto it = m_FCal_ChannelMap.begin(imap);
364 it != m_FCal_ChannelMap.end(imap); it++) {
365
366 phi_index = it->first & 0xffff;
367 eta_index = it->first >> 16;
368 x = it->second.x();
369 y = it->second.y();
370 m_FCal_ChannelMap.tileSize(imap, eta_index, phi_index, dx, dy);
371
372 id = (mask1[imap - 1] << 12) + (eta_index << 5) + 2 * phi_index;
373
374 if (imap == 2)
375 id += (8 << 8);
376
377 Identifier id1((unsigned long long)(id << 44));
378 const CaloDetDescrElement *DDE1 = getDDE(id1);
379
380 id = (mask2[imap - 1] << 12) + (eta_index << 5) + 2 * phi_index;
381 if (imap == 2)
382 id += (8 << 8);
383 Identifier id2((unsigned long long)(id << 44));
384 const CaloDetDescrElement *DDE2 = getDDE(id2);
385
386 if (!TMath::AreEqualRel(x, DDE1->x(), 1.E-8)
387 || !TMath::AreEqualRel(y, DDE1->y(), 1.E-8)
388 || !TMath::AreEqualRel(x, DDE2->x(), 1.E-8)
389 || !TMath::AreEqualRel(y, DDE2->y(), 1.E-8)) {
390 std::cout
391 << "Error: Incompatibility between FCalChannel map and GEO file \n"
392 << x << " " << DDE1->x() << " " << DDE2->x() << y << " "
393 << DDE1->y() << " " << DDE2->y() << std::endl;
394 return false;
395 }
396 }
397 }
398
399 return true;
400}
HWIdentifier id2
virtual const CaloDetDescrElement * getDDE(Identifier identify) const

◆ deta()

double CaloGeometry::deta ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 752 of file CaloGeometry.cxx.

753{
754 int side=0;
755 if(eta>0) side=1;
756
757 double mineta=m_min_eta_sample[side][sample];
758 double maxeta=m_max_eta_sample[side][sample];
759
760 if(eta<mineta)
761 {
762 return fabs(eta-mineta);
763 }
764 else if(eta>maxeta)
765 {
766 return fabs(eta-maxeta);
767 }
768 else
769 {
770 double d1=fabs(eta-mineta);
771 double d2=fabs(eta-maxeta);
772 if(d1<d2) return -d1;
773 else return -d2;
774 }
775}
Scalar eta() const
pseudorapidity method
std::vector< double > m_max_eta_sample[2]
std::vector< double > m_min_eta_sample[2]

◆ DoGraphs()

bool CaloGeometry::DoGraphs ( ) const
inlineinherited

Definition at line 67 of file CaloGeometry.h.

67{return m_dographs;};

◆ DrawFCalGraph()

void CaloGeometryFromFile::DrawFCalGraph ( int isam,
int color )

Definition at line 276 of file CaloGeometryFromFile.cxx.

277{
278
279 std::stringstream ss;
280 ss << "FCal" << isam - 20 << std::endl;
281
282 const int size = m_cells_in_sampling[isam].size();
283
284 std::vector<double> x;
285 std::vector<double> y;
286 x.reserve(size);
287 y.reserve(size);
288
289 for (auto it = m_cells_in_sampling[isam].begin();
290 it != m_cells_in_sampling[isam].end(); it++) {
291 x.push_back(it->second->x());
292 y.push_back(it->second->y());
293 }
294
295 TGraph *graph = new TGraph(size, &x[0], &y[0]);
296 graph->SetLineColor(color);
297 graph->SetTitle(ss.str().c_str());
298 graph->SetMarkerStyle(21);
299 graph->SetMarkerColor(color);
300 graph->SetMarkerSize(0.5);
301 graph->GetXaxis()->SetTitle("x [mm]");
302 graph->GetYaxis()->SetTitle("y [mm]");
303
304 graph->Draw("AP");
305}
static Double_t ss

◆ DrawGeoForPhi0()

TCanvas * CaloGeometry::DrawGeoForPhi0 ( )
inherited

Definition at line 440 of file CaloGeometry.cxx.

441{
442 TCanvas* c=new TCanvas("CaloGeoForPhi0","Calo geometry for #phi~0");
443 TH2D* hcalolayout=new TH2D("hcalolayoutPhi0","Reconstruction geometry: calorimeter layout;z [mm];r [mm]",50,-7000,7000,50,0,4000);
444 hcalolayout->Draw();
445 hcalolayout->SetStats(0);
446 hcalolayout->GetYaxis()->SetTitleOffset(1.4);
447
448 TLegend* leg=new TLegend(0.30,0.13,0.70,0.37);
449 leg->SetFillStyle(0);
450 leg->SetFillColor(10);
451 leg->SetBorderSize(1);
452 leg->SetNColumns(2);
453
454 for(int sample=0;sample<MAX_SAMPLING;++sample) {
455 TGraph* gr=DrawGeoSampleForPhi0(sample,CaloGeometry_calocol[sample],(sample==17));
456 if(gr) {
457 std::string sname=Form("Sampling %2d : ",sample);
458 sname+=SamplingName(sample);
459 leg->AddEntry(gr,sname.c_str(),"LF");
460 }
461 }
462 leg->Draw();
463 return c;
464}
const int CaloGeometry_calocol[24]
#define gr
static std::string SamplingName(int sample)
TGraph * DrawGeoSampleForPhi0(int sample, int calocol, bool print=false)
static const int MAX_SAMPLING

◆ DrawGeoSampleForPhi0()

TGraph * CaloGeometry::DrawGeoSampleForPhi0 ( int sample,
int calocol,
bool print = false )
inherited

Definition at line 349 of file CaloGeometry.cxx.

350{
351 if (sample < CaloSampling::PreSamplerB || sample >= CaloSampling::Unknown) {
352 return nullptr;
353 }
354 TGraph* firstgr=nullptr;
355 cout<<"Start sample "<<sample<<" ("<<SamplingName(sample)<<")"<<endl;
356 int ngr=0;
357 for(t_eta_cellmap::iterator calo_iter=m_cells_in_sampling_for_phi0[sample].begin();calo_iter!=m_cells_in_sampling_for_phi0[sample].end();++calo_iter) {
358 const CaloDetDescrElement* theDDE=(*calo_iter).second;
359 if(theDDE) {
360 TVector3 cv;
361 TGraph* gr=new TGraph(5);
362 gr->SetLineColor(TMath::Abs(calocol));
363 gr->SetFillColor(TMath::Abs(calocol));
364 if(calocol<0) {
365 gr->SetFillStyle(1001);
366 } else {
367 gr->SetFillStyle(0);
368 }
369 gr->SetLineWidth(2);
370 double r=theDDE->r();
371 double dr=theDDE->dr();
372 double x=theDDE->x();
373 double dx=theDDE->dx();
374 double y=theDDE->y();
375 double dy=theDDE->dy();
376 double z=theDDE->z();
377 double dz=theDDE->dz()*2;
378 double eta=theDDE->eta();
379 double deta=theDDE->deta();
380
381 if(CaloSampling::PreSamplerB<=sample && sample<=CaloSampling::EMB3) {
382 dr*=2;
383 }
384 if(print) {
385 cout<<"sample="<<sample<<" r="<<r<<" dr="<<dr<<" eta="<<eta<<" deta="<<deta<<" x="<<x<<" y="<<y<<" z="<<z<<" dz="<<dz<<endl;
386 }
387 if(isCaloBarrel(sample)) {
388 cv.SetPtEtaPhi(r-dr/2,eta-deta/2,0);
389 gr->SetPoint(0,cv.Z(),cv.Pt());
390 gr->SetPoint(4,cv.Z(),cv.Pt());
391 cv.SetPtEtaPhi(r-dr/2,eta+deta/2,0);
392 gr->SetPoint(1,cv.Z(),cv.Pt());
393 cv.SetPtEtaPhi(r+dr/2,eta+deta/2,0);
394 gr->SetPoint(2,cv.Z(),cv.Pt());
395 cv.SetPtEtaPhi(r+dr/2,eta-deta/2,0);
396 gr->SetPoint(3,cv.Z(),cv.Pt());
397 } else {
398 if(sample<CaloSampling::FCAL0) {
399 cv.SetPtEtaPhi(1,eta-deta/2,0);cv*=(z-dz/2)/cv.Z();
400 gr->SetPoint(0,cv.Z(),cv.Pt());
401 gr->SetPoint(4,cv.Z(),cv.Pt());
402 cv.SetPtEtaPhi(1,eta+deta/2,0);cv*=(z-dz/2)/cv.Z();
403 gr->SetPoint(1,cv.Z(),cv.Pt());
404 cv.SetPtEtaPhi(1,eta+deta/2,0);cv*=(z+dz/2)/cv.Z();
405 gr->SetPoint(2,cv.Z(),cv.Pt());
406 cv.SetPtEtaPhi(1,eta-deta/2,0);cv*=(z+dz/2)/cv.Z();
407 gr->SetPoint(3,cv.Z(),cv.Pt());
408 } else {
409 double minr=r;
410 double maxr=r;
411 for(double px=x-dx/2;px<=x+dx/2;px+=dx) {
412 for(double py=y-dy/2;py<=y+dy/2;py+=dy) {
413 double pr=TMath::Sqrt(px*px+py*py);
414 minr=TMath::Min(minr,pr);
415 maxr=TMath::Max(maxr,pr);
416 }
417 }
418 cv.SetXYZ(minr,0,z-dz/2);
419 gr->SetPoint(0,cv.Z(),cv.Pt());
420 gr->SetPoint(4,cv.Z(),cv.Pt());
421 cv.SetXYZ(maxr,0,z-dz/2);
422 gr->SetPoint(1,cv.Z(),cv.Pt());
423 cv.SetXYZ(maxr,0,z+dz/2);
424 gr->SetPoint(2,cv.Z(),cv.Pt());
425 cv.SetXYZ(minr,0,z+dz/2);
426 gr->SetPoint(3,cv.Z(),cv.Pt());
427 }
428 }
429 //if(calocol[sample]>0) gr->Draw("Lsame");
430 // else gr->Draw("LFsame");
431 gr->Draw("LFsame");
432 if(ngr==0) firstgr=gr;
433 ++ngr;
434 }
435 }
436 cout<<"Done sample "<<sample<<" ("<<SamplingName(sample)<<")="<<ngr<<endl;
437 return firstgr;
438}
void print(char *figname, TCanvas *c1)
#define z
double deta(int sample, double eta) const
std::vector< t_eta_cellmap > m_cells_in_sampling_for_phi0
bool isCaloBarrel(int sample) const

◆ getClosestFCalCellIndex()

bool CaloGeometry::getClosestFCalCellIndex ( int sampling,
float x,
float y,
int & ieta,
int & iphi,
int * steps = 0 ) const
inherited

Definition at line 592 of file CaloGeometry.cxx.

592 {
593
594 double rmin = m_FCal_rmin.at(sampling-21);
595 double rmax = m_FCal_rmax.at(sampling-21);
596 int isam=sampling-20;
597 double a=1.;
598 const double b=0.01;
599 const int nmax=100;
600 int i=0;
601
602 const double r = sqrt(x*x +y*y);
603 if(r==0.) return false;
604 const double r_inverse=1./r;
605
606 if((r/rmax)>(rmin*r_inverse)){
607 x=x*rmax*r_inverse;
608 y=y*rmax*r_inverse;
609 while((!m_FCal_ChannelMap.getTileID(isam, a*x, a*y, ieta, iphi)) && i<nmax){
610 a-=b;
611 i++;
612 }
613 }
614 else {
615 x=x*rmin*r_inverse;
616 y=y*rmin*r_inverse;
617 while((!m_FCal_ChannelMap.getTileID(isam, a*x, a*y, ieta, iphi)) && i<nmax){
618 a+=b;
619 i++;
620 }
621
622 }
623 if(steps)*steps=i+1;
624 return i<nmax;
625}
static Double_t a
const int nmax(200)

◆ getDDE() [1/3]

const CaloDetDescrElement * CaloGeometry::getDDE ( Identifier identify) const
virtualinherited

Implements ICaloGeometry.

Definition at line 466 of file CaloGeometry.cxx.

467{
468 return m_cells.at(identify);
469}

◆ getDDE() [2/3]

const CaloDetDescrElement * CaloGeometry::getDDE ( int sampling,
float eta,
float phi,
float * distance = 0,
int * steps = 0 ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 475 of file CaloGeometry.cxx.

476{
477 if(sampling<0) return nullptr;
478 if(sampling>=MAX_SAMPLING) return nullptr;
479 if(m_cells_in_regions.at(sampling).empty()) return nullptr;
480
481 float dist = 0;
482 const CaloDetDescrElement* bestDDE=nullptr;
483 if(!distance) distance=&dist;
484 *distance=+10000000;
485 int intsteps;
486 int beststeps;
487 if(steps) beststeps=(*steps);
488 else beststeps=0;
489
490 if(sampling<21) {
491 for(int skip_range_check=0;skip_range_check<=1;++skip_range_check) {
492 for(unsigned int j=0;j<m_cells_in_regions.at(sampling).size();++j) {
493 if(!skip_range_check) {
494 if(eta<m_cells_in_regions.at(sampling).at(j)->mineta()) continue;
495 if(eta>m_cells_in_regions.at(sampling).at(j)->maxeta()) continue;
496 }
497 if(steps) intsteps=(*steps);
498 else intsteps=0;
499 if(m_debug) {
500 cout<<"CaloGeometry::getDDE : check map"<<j<<" skip_range_check="<<skip_range_check<<endl;
501 }
502 float newdist;
503 const CaloDetDescrElement* newDDE=m_cells_in_regions.at(sampling).at(j)->getDDE(eta,phi,&newdist,&intsteps);
504 if(m_debug) {
505 cout<<"CaloGeometry::getDDE : map"<<j<<" dist="<<newdist<<" best dist="<<*distance<<" steps="<<intsteps<<endl;
506 }
507 if(newdist<*distance) {
508 bestDDE=newDDE;
509 *distance=newdist;
510 if(steps) beststeps=intsteps;
511 if(newdist<-0.1) break; //stop, we are well within the hit cell
512 }
513 }
514 if(bestDDE) break;
515 }
516 } else {
517 return nullptr;
518 //for(int skip_range_check=0;skip_range_check<=1;++skip_range_check) {
519 //for(unsigned int j=0;j<m_cells_in_regions[sampling].size();++j) {
520 //if(!skip_range_check) {
521 //if(eta<m_cells_in_regions[sampling][j]->minx()) continue;
522 //if(eta>m_cells_in_regions[sampling][j]->maxx()) continue;
523 //if(phi<m_cells_in_regions[sampling][j]->miny()) continue;
524 //if(phi>m_cells_in_regions[sampling][j]->maxy()) continue;
525 //}
526 //if(steps) intsteps=*steps;
527 //else intsteps=0;
528 //if(m_debug) {
529 //cout<<"CaloGeometry::getDDE : check map"<<j<<" skip_range_check="<<skip_range_check<<endl;
530 //}
531 //float newdist;
532 //const CaloGeoDetDescrElement* newDDE=m_cells_in_regions[sampling][j]->getDDE(eta,phi,&newdist,&intsteps);
533 //if(m_debug) {
534 //cout<<"CaloGeometry::getDDE : map"<<j<<" dist="<<newdist<<" best dist="<<*distance<<" steps="<<intsteps<<endl;
535 //}
536 //if(newdist<*distance) {
537 //bestDDE=newDDE;
538 //*distance=newdist;
539 //if(steps) beststeps=intsteps;
540 //if(newdist<-0.1) break; //stop, we are well within the hit cell
541 //}
542 //}
543 //if(bestDDE) break;
544 //}
545 }
546 if(steps) *steps=beststeps;
547 return bestDDE;
548}
Scalar phi() const
phi method
static std::atomic< bool > m_debug
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space

◆ getDDE() [3/3]

const CaloDetDescrElement * CaloGeometry::getDDE ( int sampling,
Identifier identify ) const
virtualinherited

Definition at line 470 of file CaloGeometry.cxx.

471{
472 return m_cells_in_sampling.at(sampling).at(identify);
473}

◆ GetFCAL_ChannelMap()

FCAL_ChannelMap * CaloGeometry::GetFCAL_ChannelMap ( )
inlineinherited

Definition at line 72 of file CaloGeometry.h.

72{return &m_FCal_ChannelMap;}

◆ getFCalDDE()

const CaloDetDescrElement * CaloGeometry::getFCalDDE ( int sampling,
float x,
float y,
float z,
float * distance = 0,
int * steps = 0 ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 550 of file CaloGeometry.cxx.

550 {
551 int isam = sampling - 20;
552 int iphi(-100000),ieta(-100000);
553 Long64_t mask1[]{0x34,0x34,0x35};
554 Long64_t mask2[]{0x36,0x36,0x37};
555 bool found = m_FCal_ChannelMap.getTileID(isam, x, y, ieta, iphi);
556 if(steps && found) *steps=0;
557 if(!found) {
558 //cout << "Warning: Hit is not matched with any FCal cell! Looking for the closest cell" << endl;
559 found = getClosestFCalCellIndex(sampling, x, y, ieta, iphi,steps);
560 }
561 if(!found) {
562 cout << "Error: Unable to find the closest FCal cell!" << endl;
563 return nullptr;
564 }
565
566
567 //cout << "CaloGeometry::getFCalDDE: x:" << x << " y: " << y << " ieta: " << ieta << " iphi: " << iphi << " cmap->x(): " << m_FCal_ChannelMap.x(isam,ieta,iphi) << " cmap->y(): " << m_FCal_ChannelMap.y(isam,ieta,iphi) << endl;
568 Long64_t id = (ieta << 5) + 2*iphi;
569 if(isam==2)id+= (8<<8);
570
571
572
573 if(z>0) id+=(mask2[isam-1] << 12);
574 else id+=(mask1[isam-1] << 12);
575
576 id = id << 44;
577 Identifier identify((unsigned long long)id);
578 const CaloDetDescrElement* foundcell=m_cells.at(identify);
579
580 // Report the shortest distance in x or y to the face of the cell if outside the cell.
581 // If inside the cell this will be negative and be the shortest distance to a cell face.
582 float dist = 0;
583 if(!distance) distance=&dist;
584 float distanceX = abs(foundcell->x()-x) - foundcell->dx()/2;
585 float distanceY = abs(foundcell->y()-y) - foundcell->dy()/2;
586 *distance = max(distanceX,distanceY);
587
588 return foundcell;
589}
#define max(a, b)
Definition cfImp.cxx:41
bool getClosestFCalCellIndex(int sampling, float x, float y, int &ieta, int &iphi, int *steps=0) const

◆ GetGraph()

TGraphErrors * CaloGeometry::GetGraph ( unsigned int sample) const
inlineinherited

Definition at line 65 of file CaloGeometry.h.

65{return m_graph_layers[sample];};
std::vector< TGraphErrors * > m_graph_layers

◆ InitRZmaps()

void CaloGeometry::InitRZmaps ( )
protectedvirtualinherited

Definition at line 197 of file CaloGeometry.cxx.

198{
199 FSmap< double , double > rz_map_eta [2][MAX_SAMPLING];
200 FSmap< double , double > rz_map_rmid[2][MAX_SAMPLING];
201 FSmap< double , double > rz_map_zmid[2][MAX_SAMPLING];
202 FSmap< double , double > rz_map_rent[2][MAX_SAMPLING];
203 FSmap< double , double > rz_map_zent[2][MAX_SAMPLING];
204 FSmap< double , double > rz_map_rext[2][MAX_SAMPLING];
205 FSmap< double , double > rz_map_zext[2][MAX_SAMPLING];
206 FSmap< double , int > rz_map_n [2][MAX_SAMPLING];
207
208
209 for(unsigned int side=0;side<=1;++side) for(unsigned int sample=0;sample<MAX_SAMPLING;++sample)
210 {
213 }
214
215
216 for(t_cellmap::iterator calo_iter=m_cells.begin();calo_iter!=m_cells.end();++calo_iter)
217 {
218 const CaloDetDescrElement* theDDE=(*calo_iter).second;
219 if(theDDE)
220 {
221 unsigned int sample=theDDE->getSampling();
222
223 int side=0;
224 int sign_side=-1;
225 double eta_raw=theDDE->eta_raw();
226 if(eta_raw>0) {
227 side=1;
228 sign_side=+1;
229 }
230
231 if(!m_cells_in_sampling_for_phi0[sample][eta_raw]) {
232 m_cells_in_sampling_for_phi0[sample][eta_raw]=theDDE;
233 } else {
234 if(TMath::Abs(theDDE->phi()) < TMath::Abs(m_cells_in_sampling_for_phi0[sample][eta_raw]->phi())) {
235 m_cells_in_sampling_for_phi0[sample][eta_raw]=theDDE;
236 }
237 }
238
239 double min_eta=theDDE->eta()-theDDE->deta()/2;
240 double max_eta=theDDE->eta()+theDDE->deta()/2;
241 if(min_eta<m_min_eta_sample[side][sample]) m_min_eta_sample[side][sample]=min_eta;
242 if(max_eta>m_max_eta_sample[side][sample]) m_max_eta_sample[side][sample]=max_eta;
243
244 if(rz_map_eta[side][sample].find(eta_raw)==rz_map_eta[side][sample].end()) {
245 rz_map_eta [side][sample][eta_raw]=0;
246 rz_map_rmid[side][sample][eta_raw]=0;
247 rz_map_zmid[side][sample][eta_raw]=0;
248 rz_map_rent[side][sample][eta_raw]=0;
249 rz_map_zent[side][sample][eta_raw]=0;
250 rz_map_rext[side][sample][eta_raw]=0;
251 rz_map_zext[side][sample][eta_raw]=0;
252 rz_map_n [side][sample][eta_raw]=0;
253 }
254 rz_map_eta [side][sample][eta_raw]+=theDDE->eta();
255 rz_map_rmid[side][sample][eta_raw]+=theDDE->r();
256 rz_map_zmid[side][sample][eta_raw]+=theDDE->z();
257 double drh=theDDE->dr()/2;
258 double dzh=theDDE->dz();
259 if(sample<=CaloSampling::EMB3) { // ensure we have a valid sampling
260 drh=theDDE->dr();
261 }
262 // An `else` would be good here since we can't continue with a *bad* sampling...
263 // Should most likely handle the situation nicely rather than with a crash.
264
265 rz_map_rent[side][sample][eta_raw]+=theDDE->r()-drh;
266 rz_map_zent[side][sample][eta_raw]+=theDDE->z()-dzh*sign_side;
267 rz_map_rext[side][sample][eta_raw]+=theDDE->r()+drh;
268 rz_map_zext[side][sample][eta_raw]+=theDDE->z()+dzh*sign_side;
269 rz_map_n [side][sample][eta_raw]++;
270
271 }
272 }
273
274 for(int side=0;side<=1;++side)
275 {
276 for(int sample=0;sample<MAX_SAMPLING;++sample)
277 {
278
279 if(!rz_map_n[side][sample].empty())
280 {
281 for(FSmap< double , int >::iterator iter=rz_map_n[side][sample].begin();iter!=rz_map_n[side][sample].end();++iter)
282 {
283 double eta_raw=iter->first;
284 if(iter->second<1)
285 {
286 //ATH_MSG_WARNING("rz-map for side="<<side<<" sample="<<sample<<" eta_raw="<<eta_raw<<" : #cells="<<iter->second<<" !!!");
287 }
288 else
289 {
290 double eta =rz_map_eta[side][sample][eta_raw]/iter->second;
291 double rmid=rz_map_rmid[side][sample][eta_raw]/iter->second;
292 double zmid=rz_map_zmid[side][sample][eta_raw]/iter->second;
293 double rent=rz_map_rent[side][sample][eta_raw]/iter->second;
294 double zent=rz_map_zent[side][sample][eta_raw]/iter->second;
295 double rext=rz_map_rext[side][sample][eta_raw]/iter->second;
296 double zext=rz_map_zext[side][sample][eta_raw]/iter->second;
297
304 }
305 }
306 //ATH_MSG_DEBUG("rz-map for side="<<side<<" sample="<<sample<<" #etas="<<m_rmid_map[side][sample].size());
307 }
308 else
309 {
310 std::cout<<"rz-map for side="<<side<<" sample="<<sample<<" is empty!!!"<<std::endl;
311 }
312 } //sample
313 } //side
314
315 if(DoGraphs()) {
316 for(int sample=0;sample<MAX_SAMPLING;++sample) {
317 m_graph_layers[sample]=new TGraphErrors(rz_map_n[0][sample].size()+rz_map_n[1][sample].size());
318 m_graph_layers[sample]->SetMarkerColor(TMath::Abs(CaloGeometry_calocol[sample]));
319 m_graph_layers[sample]->SetLineColor(TMath::Abs(CaloGeometry_calocol[sample]));
320 int np=0;
321 for(int side=0;side<=1;++side) {
322 for(FSmap< double , int >::iterator iter=rz_map_n[side][sample].begin();iter!=rz_map_n[side][sample].end();++iter) {
323 double eta_raw=iter->first;
324 int sign_side=-1;
325 if(eta_raw>0) sign_side=+1;
326 //double eta =rz_map_eta[side][sample][eta_raw]/iter->second;
327 double rmid=rz_map_rmid[side][sample][eta_raw]/iter->second;
328 double zmid=rz_map_zmid[side][sample][eta_raw]/iter->second;
329 //double rent=rz_map_rent[side][sample][eta_raw]/iter->second;
330 //double zent=rz_map_zent[side][sample][eta_raw]/iter->second;
331 double rext=rz_map_rext[side][sample][eta_raw]/iter->second;
332 double zext=rz_map_zext[side][sample][eta_raw]/iter->second;
333 m_graph_layers[sample]->SetPoint(np,zmid,rmid);
334 /*
335 if(isCaloBarrel(sample)) {
336 m_graph_layers[sample]->SetPointError(np,0,rext-rmid);
337 } else {
338 m_graph_layers[sample]->SetPointError(np,(zext-zent)*sign_side,0);
339 }
340 */
341 m_graph_layers[sample]->SetPointError(np,(zext-zmid)*sign_side,rext-rmid);
342 ++np;
343 }
344 }
345 }
346 }
347}
static const Attributes_t empty
CaloCell_ID::CaloSample getSampling() const
cell sampling
std::vector< FSmap< double, double > > m_zent_map[2]
double zmid(int sample, double eta) const
double rent(int sample, double eta) const
double zent(int sample, double eta) const
std::vector< FSmap< double, double > > m_rext_map[2]
std::vector< FSmap< double, double > > m_zext_map[2]
std::vector< FSmap< double, double > > m_zmid_map[2]
double rmid(int sample, double eta) const
double rext(int sample, double eta) const
bool DoGraphs() const
double zext(int sample, double eta) const
std::vector< FSmap< double, double > > m_rmid_map[2]
std::vector< FSmap< double, double > > m_rent_map[2]
std::map< _Key, _Tp >::iterator iterator
Definition FSmap.h:14
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138

◆ isCaloBarrel()

bool CaloGeometry::isCaloBarrel ( int sample) const
inlinevirtualinherited

Implements ICaloGeometry.

Definition at line 62 of file CaloGeometry.h.

62{return m_isCaloBarrel[sample];};
std::vector< bool > m_isCaloBarrel

◆ LoadFCalGeometryFromFiles()

bool CaloGeometryFromFile::LoadFCalGeometryFromFiles ( const std::array< std::string, 3 > & fileNames)

Definition at line 184 of file CaloGeometryFromFile.cxx.

185{
186 std::vector<std::unique_ptr<std::istream>> electrodes;
187 std::vector<std::unique_ptr<std::streambuf>> electrodesBuf;
188 electrodes.reserve(3);
189 electrodesBuf.reserve(3);
190
191 for (uint16_t i = 0; i < 3; i++) {
192 const std::string &file = fileNames[i];
193#ifdef ENABLE_XROOTD_SUPPORT
194 if (file.find("root://") != std::string::npos) {
195 electrodesBuf.emplace_back(std::make_unique<XrdStreamBuf>(file));
196 electrodes.emplace_back(std::make_unique<std::istream>(electrodesBuf.back().get()));
197 } else {
198#endif
199 std::unique_ptr<std::ifstream> directStream = std::make_unique<std::ifstream>(file);
200 if (!directStream->is_open()) {
201 std::cout << "Error: Could not open " << file << std::endl;
202 throw std::runtime_error("Could not open file");
203 }
204 electrodes.push_back(std::move(directStream));
205#ifdef ENABLE_XROOTD_SUPPORT
206 }
207#endif
208 }
209
210 int thisTubeId;
211 int thisTubeI;
212 int thisTubeJ;
213 // int thisTubeID;
214 // int thisTubeMod;
215 double thisTubeX;
216 double thisTubeY;
217 TString tubeName;
218
219 // int second_column;
220 std::string seventh_column;
221 std::string eight_column;
222 int ninth_column;
223
224 int i;
225 for (int imodule = 1; imodule <= 3; imodule++) {
226 std::cout << "Loading FCal electrode #" << imodule << std::endl;
227
228 i = 0;
229 while (1) {
230
231 (*electrodes[imodule - 1]) >> tubeName;
232 if (electrodes[imodule - 1]->eof())
233 break;
234 (*electrodes[imodule - 1]) >> thisTubeId; // ?????
235 (*electrodes[imodule - 1]) >> thisTubeI;
236 (*electrodes[imodule - 1]) >> thisTubeJ;
237 (*electrodes[imodule - 1]) >> thisTubeX;
238 (*electrodes[imodule - 1]) >> thisTubeY;
239 (*electrodes[imodule - 1]) >> seventh_column;
240 (*electrodes[imodule - 1]) >> eight_column;
241 (*electrodes[imodule - 1]) >> ninth_column;
242
243 tubeName.ReplaceAll("'", "");
244 std::string tubeNamestring = tubeName.Data();
245
246 std::istringstream tileStream1(std::string(tubeNamestring, 1, 1));
247 std::istringstream tileStream2(std::string(tubeNamestring, 3, 2));
248 std::istringstream tileStream3(std::string(tubeNamestring, 6, 3));
249 int a1 = 0, a2 = 0, a3 = 0;
250 if (tileStream1)
251 tileStream1 >> a1;
252 if (tileStream2)
253 tileStream2 >> a2;
254 if (tileStream3)
255 tileStream3 >> a3;
256
257 std::stringstream s;
258
259 m_FCal_ChannelMap.add_tube(tubeNamestring, imodule, thisTubeId, thisTubeI,
260 thisTubeJ, thisTubeX, thisTubeY,
261 seventh_column);
262
263 i++;
264 }
265 }
266
267 m_FCal_ChannelMap.finish(); // Creates maps
268
269 electrodes.clear();
270 electrodesBuf.clear();
271
272 this->calculateFCalRminRmax();
273 return this->checkFCalGeometryConsistency();
274}
TFile * file

◆ LoadGeometryFromFile()

bool CaloGeometryFromFile::LoadGeometryFromFile ( const std::string & fileName,
const std::string & treeName,
const std::string & hashFileName = "/eos/atlas/atlascerngroupdisk/proj-simul/" "CaloGeometry/cellId_vs_cellHashId_map.txt" )

Definition at line 23 of file CaloGeometryFromFile.cxx.

26{
27 std::map<uint64_t, uint64_t> cellId_vs_cellHashId_map;
28
29 std::unique_ptr<std::istream> hashStream{};
30 std::unique_ptr<std::streambuf> hashStreamBuf{};
31#ifdef ENABLE_XROOTD_SUPPORT
32 if (hashFileName.find("root://") != std::string::npos) {
33 hashStreamBuf = std::make_unique<XrdStreamBuf>(hashFileName);
34 hashStream = std::make_unique<std::istream>(hashStreamBuf.get());
35 } else {
36#endif
37 std::unique_ptr<std::ifstream> hashStreamDirect = std::make_unique<std::ifstream>(hashFileName);
38 if (!hashStreamDirect->is_open()) {
39 std::cout << "Error: Could not open " << hashFileName << std::endl;
40 throw std::runtime_error("Could not open file");
41 }
42 hashStream = std::move(hashStreamDirect);
43#ifdef ENABLE_XROOTD_SUPPORT
44 }
45#endif
46
47 std::cout << "Loading cellId_vs_cellHashId_map" << std::endl;
48
49 int i = 0;
50 uint64_t id, hash_id;
51 while (!hashStream->eof()) {
52 i++;
53
54 *hashStream >> id >> hash_id;
55 cellId_vs_cellHashId_map[id] = hash_id;
56 if (i % 10000 == 0)
57 std::cout << "Line: " << i << " id " << std::hex << id << " hash_id "
58 << std::dec << hash_id << std::endl;
59 }
60
61 std::cout << "Done." << std::endl;
62
63 auto f = std::unique_ptr<TFile>(TFile::Open(fileName.c_str()));
64 if (!f) {
65 std::cerr << "Error: Could not open file '" << fileName << "'" << std::endl;
66 return false;
67 }
68 TTree *tree = (TTree*)f->Get(treeName.c_str());
69 if (!tree)
70 return false;
71
72 TTree *fChain = tree;
73
74 CaloDetDescrElement cell;
75
76 // List of branches
77 TBranch *b_identifier;
78 TBranch *b_calosample;
79 TBranch *b_eta;
80 TBranch *b_phi;
81 TBranch *b_r;
82 TBranch *b_eta_raw;
83 TBranch *b_phi_raw;
84 TBranch *b_r_raw;
85 TBranch *b_x;
86 TBranch *b_y;
87 TBranch *b_z;
88 TBranch *b_x_raw;
89 TBranch *b_y_raw;
90 TBranch *b_z_raw;
91 TBranch *b_deta;
92 TBranch *b_dphi;
93 TBranch *b_dr;
94 TBranch *b_dx;
95 TBranch *b_dy;
96 TBranch *b_dz;
97
98 fChain->SetMakeClass(1);
99 fChain->SetBranchAddress("identifier", &cell.m_identify, &b_identifier);
100 fChain->SetBranchAddress("calosample", &cell.m_calosample, &b_calosample);
101 fChain->SetBranchAddress("eta", &cell.m_eta, &b_eta);
102 fChain->SetBranchAddress("phi", &cell.m_phi, &b_phi);
103 fChain->SetBranchAddress("r", &cell.m_r, &b_r);
104 fChain->SetBranchAddress("eta_raw", &cell.m_eta_raw, &b_eta_raw);
105 fChain->SetBranchAddress("phi_raw", &cell.m_phi_raw, &b_phi_raw);
106 fChain->SetBranchAddress("r_raw", &cell.m_r_raw, &b_r_raw);
107 fChain->SetBranchAddress("x", &cell.m_x, &b_x);
108 fChain->SetBranchAddress("y", &cell.m_y, &b_y);
109 fChain->SetBranchAddress("z", &cell.m_z, &b_z);
110 fChain->SetBranchAddress("x_raw", &cell.m_x_raw, &b_x_raw);
111 fChain->SetBranchAddress("y_raw", &cell.m_y_raw, &b_y_raw);
112 fChain->SetBranchAddress("z_raw", &cell.m_z_raw, &b_z_raw);
113 fChain->SetBranchAddress("deta", &cell.m_deta, &b_deta);
114 fChain->SetBranchAddress("dphi", &cell.m_dphi, &b_dphi);
115 fChain->SetBranchAddress("dr", &cell.m_dr, &b_dr);
116 fChain->SetBranchAddress("dx", &cell.m_dx, &b_dx);
117 fChain->SetBranchAddress("dy", &cell.m_dy, &b_dy);
118 fChain->SetBranchAddress("dz", &cell.m_dz, &b_dz);
119
120 Long64_t nentries = fChain->GetEntriesFast();
121 for (Long64_t jentry = 0; jentry < nentries; jentry++) {
122 Long64_t ientry = fChain->LoadTree(jentry);
123 if (ientry < 0)
124 break;
125 fChain->GetEntry(jentry);
126
127 if (cellId_vs_cellHashId_map.find(cell.m_identify)
128 != cellId_vs_cellHashId_map.end()) {
129 cell.m_hash_id = cellId_vs_cellHashId_map[cell.m_identify];
130 if (cell.m_hash_id != jentry)
131 std::cout << jentry << " : ERROR hash=" << cell.m_hash_id << std::endl;
132 } else
133 std::cout << std::endl
134 << "ERROR: Cell id not found in the cellId_vs_cellHashId_map!!!"
135 << std::endl
136 << std::endl;
137
138 const CaloDetDescrElement *pcell = new CaloDetDescrElement(cell);
139 this->addcell(pcell);
140
141 if (jentry % 25000 == 0) {
142 std::cout << "Checking loading cells from file" << std::endl
143 << jentry << " : " << pcell->getSampling() << ", "
144 << pcell->identify() << std::endl;
145
146 }
147 }
148
149 f->Close();
150 bool ok = PostProcessGeometry();
151
152 std::cout << "Result of PostProcessGeometry(): " << ok << std::endl;
153
154 const CaloDetDescrElement *mcell = 0;
155 unsigned long long cellid64(3179554531063103488);
156 Identifier cellid(cellid64);
157 mcell = this->getDDE(cellid); // This is working also for the FCal
158
159 std::cout << "\n \n";
160 std::cout << "Testing whether CaloGeoGeometry is loaded properly"
161 << std::endl;
162 if (!mcell) {
163 std::cout << "Cell is not found" << std::endl;
164 }
165 else {
166 std::cout << "Identifier " << mcell->identify() << " sampling "
167 << mcell->getSampling() << " eta: " << mcell->eta()
168 << " phi: " << mcell->phi() << " CaloDetDescrElement=" << mcell
169 << std::endl
170 << std::endl;
171
172 const CaloDetDescrElement *mcell2
173 = this->getDDE(mcell->getSampling(), mcell->eta(), mcell->phi());
174 std::cout << "Identifier " << mcell2->identify() << " sampling "
175 << mcell2->getSampling() << " eta: " << mcell2->eta()
176 << " phi: " << mcell2->phi() << " CaloDetDescrElement=" << mcell2
177 << std::endl
178 << std::endl;
179 }
180
181 return ok;
182}
Identifier identify() const override final
cell identifier
virtual bool PostProcessGeometry()
virtual void addcell(const CaloDetDescrElement *cell)
TChain * tree

◆ minmaxeta()

void CaloGeometry::minmaxeta ( int sample,
double eta,
double & mineta,
double & maxeta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 778 of file CaloGeometry.cxx.

779{
780 int side=0;
781 if(eta>0) side=1;
782
785}

◆ post_process()

void CaloGeometry::post_process ( int layer)
protectedvirtualinherited

Definition at line 121 of file CaloGeometry.cxx.

122{
123 //cout<<"post processing sampling "<<sampling<<endl;
124 bool found_overlap=false;
125 for(unsigned int j=0;j<m_cells_in_regions[sampling].size();++j) {
126 /*
127 cout<<"Sample "<<sampling<<": checking map "<<j<<"/"<<m_cells_in_regions[sampling].size();
128 for(unsigned int k=0;k<m_cells_in_regions[sampling].size();++k) {
129 cout<<", "<<k<<":"<<m_cells_in_regions[sampling][k]->size();
130 }
131 cout<<endl;
132 */
133 for(unsigned int i=j+1;i<m_cells_in_regions[sampling].size();++i) {
134 if(m_cells_in_regions[sampling][i]->has_overlap(m_cells_in_regions[sampling][j])) {
135 if(!found_overlap) {
136 cout<<"Sample "<<sampling<<", starting maps : "<<m_cells_in_regions[sampling].size();
137 for(unsigned int k=0;k<m_cells_in_regions[sampling].size();++k) {
138 cout<<", "<<k<<":"<<m_cells_in_regions[sampling][k]->size();
139 }
140 cout<<endl;
141 }
142 found_overlap=true;
143 /*
144 cout<<"Sample "<<sampling<<": Found overlap between map "<<j<<" and "<<i<<", "
145 <<m_cells_in_regions[sampling].size()<<" total maps"<<endl;
146 cout<<" current configuration map "<<j<<"/"<<m_cells_in_regions[sampling].size();
147 for(unsigned int k=0;k<m_cells_in_regions[sampling].size();++k) {
148 cout<<", "<<k<<":"<<m_cells_in_regions[sampling][k]->size();
149 }
150 cout<<endl;
151
152 PrintMapInfo(sampling,j);
153 PrintMapInfo(sampling,i);
154 */
155
156 CaloGeometryLookup* toremove=m_cells_in_regions[sampling][i];
157 toremove->merge_into_ref(m_cells_in_regions[sampling][j]);
158
159 /*
160 cout<<" New ";
161 PrintMapInfo(sampling,j);
162 */
163
164 for(unsigned int k=i;k<m_cells_in_regions[sampling].size()-1;++k) {
165 m_cells_in_regions[sampling][k]=m_cells_in_regions[sampling][k+1];
166 m_cells_in_regions[sampling][k]->set_index(k);
167 }
168 m_cells_in_regions[sampling].resize(m_cells_in_regions[sampling].size()-1);
169
170 /*
171 cout<<" new configuration map "<<j<<"/"<<m_cells_in_regions[sampling].size();
172 for(unsigned int k=0;k<m_cells_in_regions[sampling].size();++k) {
173 cout<<", "<<k<<":"<<m_cells_in_regions[sampling][k]->size();
174 }
175 cout<<endl;
176 */
177
178 --i;
179 }
180 }
181 }
182
183 if(found_overlap) {
184 cout<<"Sample "<<sampling<<", final maps : "<<m_cells_in_regions[sampling].size();
185 for(unsigned int k=0;k<m_cells_in_regions[sampling].size();++k) {
186 cout<<", "<<k<<":"<<m_cells_in_regions[sampling][k]->size();
187 }
188 cout<<endl;
189 }
190
191 if(found_overlap) {
192 cout<<"Run another round of ";
193 post_process(sampling);
194 }
195}
void merge_into_ref(CaloGeometryLookup *ref)
virtual void post_process(int layer)

◆ PostProcessGeometry()

bool CaloGeometry::PostProcessGeometry ( )
virtualinherited

Implements ICaloGeometry.

Definition at line 627 of file CaloGeometry.cxx.

628{
629 for(int i=0;i<MAX_SAMPLING;++i) {
630 post_process(i);
631 for(unsigned int j=0;j<m_cells_in_regions[i].size();++j) {
632 m_cells_in_regions[i][j]->post_process();
633 }
634 //if(i>=21) break;
635 }
636
637 InitRZmaps();
638
639 /*
640 cout<<"all : "<<m_cells.size()<<endl;
641 for(int sampling=0;sampling<MAX_SAMPLING;++sampling) {
642 cout<<"cells sampling "<<sampling<<" : "<<m_cells_in_sampling[sampling].size()<<" cells";
643 cout<<", "<<m_cells_in_regions[sampling].size()<<" lookup map(s)"<<endl;
644 for(unsigned int j=0;j<m_cells_in_regions[sampling].size();++j) {
645 PrintMapInfo(sampling,j);
646 //break;
647 }
648 //if(i>0) break;
649 }
650 */
651
652 return true;
653}
virtual void InitRZmaps()

◆ PrintMapInfo()

void CaloGeometry::PrintMapInfo ( int i,
int j )
virtualinherited

Definition at line 93 of file CaloGeometry.cxx.

94{
95 cout<<" map "<<j<<": "<<m_cells_in_regions[i][j]->size()<<" cells";
96 if(i<21) {
97 cout<<", "<<m_cells_in_regions[i][j]->cell_grid_eta()<<"*"<<m_cells_in_regions[i][j]->cell_grid_phi();
98 cout<<", deta="<<m_cells_in_regions[i][j]->deta().mean()<<"+-"<<m_cells_in_regions[i][j]->deta().rms();
99 cout<<", dphi="<<m_cells_in_regions[i][j]->dphi().mean()<<"+-"<<m_cells_in_regions[i][j]->dphi().rms();
100 cout<<", mineta="<<m_cells_in_regions[i][j]->mineta()<<", maxeta="<<m_cells_in_regions[i][j]->maxeta();
101 cout<<", minphi="<<m_cells_in_regions[i][j]->minphi()<<", maxphi="<<m_cells_in_regions[i][j]->maxphi();
102 cout<<endl<<" ";
103 cout<<", mineta_raw="<<m_cells_in_regions[i][j]->mineta_raw()<<", maxeta_raw="<<m_cells_in_regions[i][j]->maxeta_raw();
104 cout<<", minphi_raw="<<m_cells_in_regions[i][j]->minphi_raw()<<", maxphi_raw="<<m_cells_in_regions[i][j]->maxphi_raw();
105 cout<<endl;
106 } else {
107 cout<<", "<<m_cells_in_regions[i][j]->cell_grid_eta()<<"*"<<m_cells_in_regions[i][j]->cell_grid_phi();
108 cout<<", dx="<<m_cells_in_regions[i][j]->dx().mean()<<"+-"<<m_cells_in_regions[i][j]->dx().rms();
109 cout<<", dy="<<m_cells_in_regions[i][j]->dy().mean()<<"+-"<<m_cells_in_regions[i][j]->dy().rms();
110 cout<<", mindx="<<m_cells_in_regions[i][j]->mindx();
111 cout<<", mindy="<<m_cells_in_regions[i][j]->mindy();
112 cout<<", minx="<<m_cells_in_regions[i][j]->minx()<<", maxx="<<m_cells_in_regions[i][j]->maxx();
113 cout<<", miny="<<m_cells_in_regions[i][j]->miny()<<", maxy="<<m_cells_in_regions[i][j]->maxy();
114 cout<<endl<<" ";
115 cout<<", minx_raw="<<m_cells_in_regions[i][j]->minx_raw()<<", maxx_raw="<<m_cells_in_regions[i][j]->maxx_raw();
116 cout<<", miny_raw="<<m_cells_in_regions[i][j]->miny_raw()<<", maxy_raw="<<m_cells_in_regions[i][j]->maxy_raw();
117 cout<<endl;
118 }
119}

◆ rent()

double CaloGeometry::rent ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 812 of file CaloGeometry.cxx.

813{
814 int side=0;
815 if(eta>0) side=1;
816
817 return m_rent_map[side][sample].find_closest(eta)->second;
818}

◆ rext()

double CaloGeometry::rext ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 837 of file CaloGeometry.cxx.

838{
839 int side=0;
840 if(eta>0) side=1;
841
842 return m_rext_map[side][sample].find_closest(eta)->second;
843}

◆ rmid()

double CaloGeometry::rmid ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 787 of file CaloGeometry.cxx.

788{
789 int side=0;
790 if(eta>0) side=1;
791
792 return m_rmid_map[side][sample].find_closest(eta)->second;
793}

◆ rpos()

double CaloGeometry::rpos ( int sample,
double eta,
int subpos = CaloSubPos::SUBPOS_MID ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 862 of file CaloGeometry.cxx.

863{
864
865 int side=0;
866 if(eta>0) side=1;
867
868 if(subpos==CaloSubPos::SUBPOS_ENT) return m_rent_map[side][sample].find_closest(eta)->second;
869 if(subpos==CaloSubPos::SUBPOS_EXT) return m_rext_map[side][sample].find_closest(eta)->second;
870
871 return m_rmid_map[side][sample].find_closest(eta)->second;
872}

◆ rzent()

double CaloGeometry::rzent ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 828 of file CaloGeometry.cxx.

829{
830 int side=0;
831 if(eta>0) side=1;
832
833 if(isCaloBarrel(sample)) return m_rent_map[side][sample].find_closest(eta)->second;
834 else return m_zent_map[side][sample].find_closest(eta)->second;
835}

◆ rzext()

double CaloGeometry::rzext ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 853 of file CaloGeometry.cxx.

854{
855 int side=0;
856 if(eta>0) side=1;
857
858 if(isCaloBarrel(sample)) return m_rext_map[side][sample].find_closest(eta)->second;
859 else return m_zext_map[side][sample].find_closest(eta)->second;
860}

◆ rzmid()

double CaloGeometry::rzmid ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 803 of file CaloGeometry.cxx.

804{
805 int side=0;
806 if(eta>0) side=1;
807
808 if(isCaloBarrel(sample)) return m_rmid_map[side][sample].find_closest(eta)->second;
809 else return m_zmid_map[side][sample].find_closest(eta)->second;
810}

◆ rzpos()

double CaloGeometry::rzpos ( int sample,
double eta,
int subpos = CaloSubPos::SUBPOS_MID ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 884 of file CaloGeometry.cxx.

885{
886 int side=0;
887 if(eta>0) side=1;
888
889 if(isCaloBarrel(sample)) {
890 if(subpos==CaloSubPos::SUBPOS_ENT) return m_rent_map[side][sample].find_closest(eta)->second;
891 if(subpos==CaloSubPos::SUBPOS_EXT) return m_rext_map[side][sample].find_closest(eta)->second;
892 return m_rmid_map[side][sample].find_closest(eta)->second;
893 } else {
894 if(subpos==CaloSubPos::SUBPOS_ENT) return m_zent_map[side][sample].find_closest(eta)->second;
895 if(subpos==CaloSubPos::SUBPOS_EXT) return m_zext_map[side][sample].find_closest(eta)->second;
896 return m_zmid_map[side][sample].find_closest(eta)->second;
897 }
898}

◆ SamplingName()

std::string CaloGeometry::SamplingName ( int sample)
staticinherited

Definition at line 900 of file CaloGeometry.cxx.

901{
902 return CaloSampling::getSamplingName(sample);
903}
static std::string getSamplingName(CaloSample theSample)
Returns a string (name) for each CaloSampling.

◆ SetDoGraphs()

void CaloGeometry::SetDoGraphs ( bool dographs = true)
inlineinherited

Definition at line 66 of file CaloGeometry.h.

66{m_dographs=dographs;};

◆ SetFCal_ChannelMap()

void CaloGeometry::SetFCal_ChannelMap ( const FCAL_ChannelMap * fcal_ChannnelMap)
inlineinherited

Definition at line 73 of file CaloGeometry.h.

73{m_FCal_ChannelMap=*fcal_ChannnelMap;}

◆ zent()

double CaloGeometry::zent ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 820 of file CaloGeometry.cxx.

821{
822 int side=0;
823 if(eta>0) side=1;
824
825 return m_zent_map[side][sample].find_closest(eta)->second;
826}

◆ zext()

double CaloGeometry::zext ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 845 of file CaloGeometry.cxx.

846{
847 int side=0;
848 if(eta>0) side=1;
849
850 return m_zext_map[side][sample].find_closest(eta)->second;
851}

◆ zmid()

double CaloGeometry::zmid ( int sample,
double eta ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 795 of file CaloGeometry.cxx.

796{
797 int side=0;
798 if(eta>0) side=1;
799
800 return m_zmid_map[side][sample].find_closest(eta)->second;
801}

◆ zpos()

double CaloGeometry::zpos ( int sample,
double eta,
int subpos = CaloSubPos::SUBPOS_MID ) const
virtualinherited

Implements ICaloGeometry.

Definition at line 874 of file CaloGeometry.cxx.

875{
876 int side=0;
877 if(eta>0) side=1;
878
879 if(subpos==CaloSubPos::SUBPOS_ENT) return m_zent_map[side][sample].find_closest(eta)->second;
880 if(subpos==CaloSubPos::SUBPOS_EXT) return m_zext_map[side][sample].find_closest(eta)->second;
881 return m_zmid_map[side][sample].find_closest(eta)->second;
882}

Member Data Documentation

◆ m_cells

t_cellmap CaloGeometry::m_cells
protectedinherited

Definition at line 100 of file CaloGeometry.h.

◆ m_cells_in_regions

std::vector< std::vector< CaloGeometryLookup* > > CaloGeometry::m_cells_in_regions
protectedinherited

Definition at line 103 of file CaloGeometry.h.

◆ m_cells_in_sampling

std::vector< t_cellmap > CaloGeometry::m_cells_in_sampling
protectedinherited

Definition at line 101 of file CaloGeometry.h.

◆ m_cells_in_sampling_for_phi0

std::vector< t_eta_cellmap > CaloGeometry::m_cells_in_sampling_for_phi0
protectedinherited

Definition at line 102 of file CaloGeometry.h.

◆ m_debug

std::atomic< bool > CaloGeometry::m_debug =false
staticinherited

Definition at line 32 of file CaloGeometry.h.

◆ m_debug_identify

const Identifier CaloGeometry::m_debug_identify
staticinherited

Definition at line 31 of file CaloGeometry.h.

◆ m_dographs

bool CaloGeometry::m_dographs
protectedinherited

Definition at line 115 of file CaloGeometry.h.

◆ m_FCal_ChannelMap

FCAL_ChannelMap CaloGeometry::m_FCal_ChannelMap
protectedinherited

Definition at line 117 of file CaloGeometry.h.

◆ m_FCal_rmax

std::vector<double> CaloGeometry::m_FCal_rmax
protectedinherited

Definition at line 118 of file CaloGeometry.h.

◆ m_FCal_rmin

std::vector<double> CaloGeometry::m_FCal_rmin
protectedinherited

Definition at line 118 of file CaloGeometry.h.

◆ m_graph_layers

std::vector< TGraphErrors* > CaloGeometry::m_graph_layers
protectedinherited

Definition at line 116 of file CaloGeometry.h.

◆ m_isCaloBarrel

std::vector< bool > CaloGeometry::m_isCaloBarrel
protectedinherited

Definition at line 105 of file CaloGeometry.h.

◆ m_max_eta_sample

std::vector< double > CaloGeometry::m_max_eta_sample[2]
protectedinherited

Definition at line 107 of file CaloGeometry.h.

◆ m_min_eta_sample

std::vector< double > CaloGeometry::m_min_eta_sample[2]
protectedinherited

Definition at line 106 of file CaloGeometry.h.

◆ m_rent_map

std::vector< FSmap< double , double > > CaloGeometry::m_rent_map[2]
protectedinherited

Definition at line 110 of file CaloGeometry.h.

◆ m_rext_map

std::vector< FSmap< double , double > > CaloGeometry::m_rext_map[2]
protectedinherited

Definition at line 112 of file CaloGeometry.h.

◆ m_rmid_map

std::vector< FSmap< double , double > > CaloGeometry::m_rmid_map[2]
protectedinherited

Definition at line 108 of file CaloGeometry.h.

◆ m_zent_map

std::vector< FSmap< double , double > > CaloGeometry::m_zent_map[2]
protectedinherited

Definition at line 111 of file CaloGeometry.h.

◆ m_zext_map

std::vector< FSmap< double , double > > CaloGeometry::m_zext_map[2]
protectedinherited

Definition at line 113 of file CaloGeometry.h.

◆ m_zmid_map

std::vector< FSmap< double , double > > CaloGeometry::m_zmid_map[2]
protectedinherited

Definition at line 109 of file CaloGeometry.h.

◆ MAX_SAMPLING

const int CaloGeometry::MAX_SAMPLING = CaloCell_ID_FCS::MaxSample
staticinherited

Definition at line 29 of file CaloGeometry.h.


The documentation for this class was generated from the following files: