#include "IGeometrySummaryModule.hxx" #include #include #include #include #include #include #include #include #include #include ClassImp(COMET::IGeometrySummaryModule); ClassImp(COMET::IGeometrySummaryModule::IDetectorBoundingBox); ClassImp(COMET::IGeometrySummaryModule::ITPCMicroMegasVolumes); #define CVSTAG "\ $Name: v5r19 $" #define CVSID "\ " COMET::IGeometrySummaryModule::IGeometrySummaryModule(const char *name, const char *title) { SetNameTitle(name, title); fIsEnabled = kTRUE; fDescription = "Summary of ROOT geometry"; fCVSTagName = CVSTAG; fCVSID = CVSID; } Bool_t COMET::IGeometrySummaryModule::ProcessFirstEvent(COMET::ICOMETEvent &event) { return true; } void COMET::IGeometrySummaryModule::InitializeBranches() { fFGD1 = new IDetectorBoundingBox(); fFGD1Active = new IDetectorBoundingBox(); fFGD2 = new IDetectorBoundingBox(); fFGD2Active = new IDetectorBoundingBox(); fTPC1 = new IDetectorBoundingBox(); fTPC2 = new IDetectorBoundingBox(); fTPC3 = new IDetectorBoundingBox(); fP0D = new IDetectorBoundingBox(); fP0DActive = new IDetectorBoundingBox(); fTECAL1 = new IDetectorBoundingBox(); fTECAL2 = new IDetectorBoundingBox(); fTECAL3 = new IDetectorBoundingBox(); fTECAL4 = new IDetectorBoundingBox(); fTECAL5 = new IDetectorBoundingBox(); fTECAL6 = new IDetectorBoundingBox(); fPECAL1 = new IDetectorBoundingBox(); fPECAL2 = new IDetectorBoundingBox(); fPECAL3 = new IDetectorBoundingBox(); fPECAL4 = new IDetectorBoundingBox(); fPECAL5 = new IDetectorBoundingBox(); fPECAL6 = new IDetectorBoundingBox(); fDSECAL = new IDetectorBoundingBox(); fSMRD1 = new IDetectorBoundingBox(); fSMRD2 = new IDetectorBoundingBox(); fSMRD3 = new IDetectorBoundingBox(); fSMRD4 = new IDetectorBoundingBox(); fMM = new ITPCMicroMegasVolumes(); fOutputTree->Branch("FGD1Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fFGD1, fBufferSize, fSplitLevel); fOutputTree->Branch("FGD1Active", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fFGD1Active, fBufferSize, fSplitLevel); fOutputTree->Branch("FGD2Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fFGD2, fBufferSize, fSplitLevel); fOutputTree->Branch("FGD2Active", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fFGD2Active, fBufferSize, fSplitLevel); fOutputTree->Branch("TPC1Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTPC1, fBufferSize, fSplitLevel); fOutputTree->Branch("TPC2Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTPC2, fBufferSize, fSplitLevel); fOutputTree->Branch("TPC3Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTPC3, fBufferSize, fSplitLevel); fOutputTree->Branch("P0DExtent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fP0D, fBufferSize, fSplitLevel); fOutputTree->Branch("P0DActive", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fP0DActive, fBufferSize, fSplitLevel); fOutputTree->Branch("TECAL1Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTECAL1, fBufferSize, fSplitLevel); fOutputTree->Branch("TECAL2Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTECAL2, fBufferSize, fSplitLevel); fOutputTree->Branch("TECAL3Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTECAL3, fBufferSize, fSplitLevel); fOutputTree->Branch("TECAL4Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTECAL4, fBufferSize, fSplitLevel); fOutputTree->Branch("TECAL5Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTECAL5, fBufferSize, fSplitLevel); fOutputTree->Branch("TECAL6Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fTECAL6, fBufferSize, fSplitLevel); fOutputTree->Branch("PECAL1Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fPECAL1, fBufferSize, fSplitLevel); fOutputTree->Branch("PECAL2Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fPECAL2, fBufferSize, fSplitLevel); fOutputTree->Branch("PECAL3Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fPECAL3, fBufferSize, fSplitLevel); fOutputTree->Branch("PECAL4Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fPECAL4, fBufferSize, fSplitLevel); fOutputTree->Branch("PECAL5Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fPECAL5, fBufferSize, fSplitLevel); fOutputTree->Branch("PECAL6Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fPECAL6, fBufferSize, fSplitLevel); fOutputTree->Branch("DSECALExtent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fDSECAL, fBufferSize, fSplitLevel); fOutputTree->Branch("SMRD1Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fSMRD1, fBufferSize, fSplitLevel); fOutputTree->Branch("SMRD2Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fSMRD2, fBufferSize, fSplitLevel); fOutputTree->Branch("SMRD3Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fSMRD3, fBufferSize, fSplitLevel); fOutputTree->Branch("SMRD4Extent", "COMET::IGeometrySummaryModule::IDetectorBoundingBox", &fSMRD4, fBufferSize, fSplitLevel); fOutputTree->Branch("TPCMMvolumes", "COMET::IGeometrySummaryModule::ITPCMicroMegasVolumes", &fMM, fBufferSize, fSplitLevel); } void COMET::IGeometrySummaryModule::FillBBox(COMET::IGeometryId id, IDetectorBoundingBox *box) { TVector3 centre; try{ centre = id.GetPosition(); } catch(...){ box->Minimum = centre; box->Maximum = centre; return; } COMET::IOADatabase::Get().GeomId().CdId(id); TGeoShape *vol = gGeoManager->GetCurrentVolume()->GetShape(); TGeoBBox *bbox = dynamic_cast(vol); if (bbox) { TVector3 corner(bbox->GetDX(), bbox->GetDY(), bbox->GetDZ()); TVector3 globalcorner = COMET::IGeomInfo::Get().LocalToMasterVect(id, corner.X(), corner.Y(), corner.Z()); box->Minimum = centre - globalcorner; box->Maximum = centre + globalcorner; } } bool COMET::IGeometrySummaryModule::FillTree(COMET::ICOMETEvent &event) { // reload the geometry COMET::IOADatabase::Get().RegisterGeometryLookup(NULL); COMET::IOADatabase::Get().RegisterAlignmentLookup(NULL); COMET::IOADatabase::Get().Geometry(); // first do the FGDs FillBBox(COMET::GeomId::FGD::FGD1(), fFGD1); FillBBox(COMET::GeomId::FGD::FGD2(), fFGD2); fFGD1Active->Minimum = COMET::IGeomInfo::FGD().FGD1ActiveMin(); fFGD1Active->Maximum = COMET::IGeomInfo::FGD().FGD1ActiveMax(); fFGD2Active->Minimum = COMET::IGeomInfo::FGD().FGD2ActiveMin(); fFGD2Active->Maximum = COMET::IGeomInfo::FGD().FGD2ActiveMax(); // now the P0D FillBBox(COMET::GeomId::P0D::Detector(), fP0D); fP0DActive->Minimum = COMET::IGeomInfo::P0D().ActiveMin(); fP0DActive->Maximum = COMET::IGeomInfo::P0D().ActiveMax(); // TPCs are next FillBBox(COMET::GeomId::TPC::TPC1(), fTPC1); FillBBox(COMET::GeomId::TPC::TPC2(), fTPC2); FillBBox(COMET::GeomId::TPC::TPC3(), fTPC3); // Get Barrel ECals FillBBox(COMET::GeomId::TECal::Module(0, 0), fTECAL1); FillBBox(COMET::GeomId::TECal::Module(0, 1), fTECAL2); FillBBox(COMET::GeomId::TECal::Module(0, 2), fTECAL3); FillBBox(COMET::GeomId::TECal::Module(1, 0), fTECAL4); FillBBox(COMET::GeomId::TECal::Module(1, 1), fTECAL5); FillBBox(COMET::GeomId::TECal::Module(1, 2), fTECAL6); // and the P0D ECals FillBBox(COMET::GeomId::PECal::Module(0, 0), fPECAL1); FillBBox(COMET::GeomId::PECal::Module(0, 1), fPECAL2); FillBBox(COMET::GeomId::PECal::Module(0, 2), fPECAL3); FillBBox(COMET::GeomId::PECal::Module(1, 0), fPECAL4); FillBBox(COMET::GeomId::PECal::Module(1, 1), fPECAL5); FillBBox(COMET::GeomId::PECal::Module(1, 2), fPECAL6); // and finally the DSECAL FillBBox(COMET::GeomId::DSECal::Detector(), fDSECAL); // Add TPC MM volumes for AnalysisTools EventDisplay MMmap = COMET::IGeomInfo::Get().TPC().GetMMVolumes(); fMM->MMvolumes = MMmap; // Add SMRD info std::vector smrdGeoIds; std::vector smrdModules = COMET::IGeomInfo::Get().SMRD().GetModules(); for(std::vector::iterator it = smrdModules.begin(); it!=smrdModules.end(); ++it){ smrdGeoIds.push_back((*it)->GetGeomId()); } int counter = 0; for(std::vector::iterator it2 = smrdGeoIds.begin(); it2 != smrdGeoIds.end(); ++it2){ if(counter==0) FillBBox(*it2,fSMRD1); if(counter==1) FillBBox(*it2,fSMRD2); if(counter==2) FillBBox(*it2,fSMRD3); if(counter==3) FillBBox(*it2,fSMRD4); counter++; } return true; } COMET::IGeometrySummaryModule::~IGeometrySummaryModule() {} COMET::IGeometrySummaryModule::IDetectorBoundingBox::~IDetectorBoundingBox() {} COMET::IGeometrySummaryModule::ITPCMicroMegasVolumes::~ITPCMicroMegasVolumes() {}