#include #include #include #include #include #include #include #include #include #include #include #include "IIngridGeom.hxx" COMET::IIngridGeom::IIngridGeom() : IGeomBase() {} COMET::IIngridGeom::~IIngridGeom() {} const COMET::IScintBarGeom& COMET::IIngridGeom::GetBar(COMET::IGeometryId& geomId) const { std::map::const_iterator s = fBarList.find(geomId); if (s == fBarList.end()) { COMETSevere(geomId << " not found!!!!"); throw COMET::ENoSuchIngridBarGeom(); } return *((s->second)); } const COMET::IIngridGeom::BarMap& COMET::IIngridGeom::GetBars() const { return fBarList; } void COMET::IIngridGeom::ls() { const int maxModNum = (COMET::GeomId::Def::INGRID::kIngridModNumMask>>COMET::GeomId::Def::INGRID::kIngridTrkNumLSB); int mod[maxModNum] = {0}; int veto_h[maxModNum] = {0}; int veto_v[maxModNum] = {0}; COMETInfo("Ingrid geometry."); for (BarMap::iterator b = fBarList.begin(); b != fBarList.end(); ++b){ if ( GeomIdToObjectType(b->first) == COMET::GeomId::Def::INGRID::kIngridModule) mod[GeomIdToObjectNumber(b->first)]++; else if( GeomIdToObjectType(b->first) == COMET::GeomId::Def::INGRID::kIngridVeto){ if (GeomIdToProjection(b->first) == COMET::GeomId::Def::INGRID::kVertical) veto_v[GeomIdToObjectNumber(b->first)]++; else if (GeomIdToProjection(b->first) == COMET::GeomId::Def::INGRID::kHorizontal) veto_h[GeomIdToObjectNumber(b->first)]++; } } COMETInfo("============================================================"); COMETInfo("\t# of scintillators on"); COMETInfo("Id\tModule\tVetoH\tVetoV"); for(int i=0; iCdTop(); FindModuleBars(); } bool COMET::IIngridGeom::IsIngrid(const COMET::IGeometryId& id) const { return ( id.GetField(COMET::GeomId::Def::kDetectorIdMSB, COMET::GeomId::Def::kDetectorIdLSB) == COMET::GeomId::Def::kINGRID ); } int COMET::IIngridGeom::GeomIdToObjectType(const COMET::IGeometryId& id) const { if(! IsIngrid(id)) return -1; return id.GetField(COMET::GeomId::Def::INGRID::kIngridObjIDMSB, COMET::GeomId::Def::INGRID::kIngridObjIDLSB); } int COMET::IIngridGeom::GeomIdToObjectNumber(const COMET::IGeometryId& id) const { if(! IsIngrid(id)) return -1; return id.GetField(COMET::GeomId::Def::INGRID::kIngridModNumMSB, COMET::GeomId::Def::INGRID::kIngridModNumLSB); } int COMET::IIngridGeom::GeomIdToTracker(const COMET::IGeometryId& id) const { if(! IsIngrid(id)) return -1; return id.GetField(COMET::GeomId::Def::INGRID::kIngridTrkNumMSB, COMET::GeomId::Def::INGRID::kIngridTrkNumLSB); } int COMET::IIngridGeom::GeomIdToProjection(const COMET::IGeometryId& id) const { if(! IsIngrid(id)) return -1; return id.GetField(COMET::GeomId::Def::INGRID::kIngridProjMSB, COMET::GeomId::Def::INGRID::kIngridProjLSB); } int COMET::IIngridGeom::GeomIdToScintillator(const COMET::IGeometryId& id) const { if(! IsIngrid(id)) return -1; return id.GetField(COMET::GeomId::Def::INGRID::kIngridSciNumMSB, COMET::GeomId::Def::INGRID::kIngridSciNumLSB); } Bool_t COMET::IIngridGeom::FindModuleBars() { COMET::IScintBarGeom* bar = NULL; std::string thePath(gGeoManager->GetPath()); if (thePath.find("scinti") != std::string::npos && gGeoManager->GetCurrentNode()->GetNdaughters()==0) { COMET::IGeometryId geomId; COMET::IOADatabase::Get().GeomId().FindGeometryId(geomId); if (thePath.find("scinti_h")!=std::string::npos) { bar = new COMET::IScintBarGeom(geomId, 0, 1); } else if (thePath.find("scinti_v")!=std::string::npos) { bar = new COMET::IScintBarGeom(geomId, 1, 1); } else { bar = NULL; } if(bar) fBarList[geomId] = bar; return kTRUE; } if (gGeoManager->GetCurrentNode()->GetNdaughters()>0) { for (int i=0;iGetCurrentNode()->GetNdaughters();i++) { gGeoManager->CdDown(i); FindModuleBars(); gGeoManager->CdUp(); } } return kTRUE; }