From bb82dd46d17d356bef1b2e67911414e64456d4cf Mon Sep 17 00:00:00 2001 From: Florian Uhlig <f.uhlig@gsi.de> Date: Thu, 11 Feb 2021 18:01:37 +0100 Subject: [PATCH] much: Add gFile + gDirectory protection --- core/detectors/much/CbmMuchGeoScheme.cxx | 11 ++++++-- core/detectors/much/CbmMuchSegmentAuto.cxx | 9 +++++-- core/detectors/much/CbmMuchSegmentManual.cxx | 9 +++++-- core/detectors/much/CbmMuchSegmentSector.cxx | 9 +++++-- reco/detectors/much/CbmMuchFindHitsGem.cxx | 26 ++++++++++++------- .../much/CbmMuchHitProducerIdeal.cxx | 10 +++++-- reco/detectors/much/qa/CbmMuchHitFinderQa.cxx | 9 +++++++ sim/detectors/much/CbmMuchDigitizeGem.cxx | 19 +++++++++++--- 8 files changed, 78 insertions(+), 24 deletions(-) diff --git a/core/detectors/much/CbmMuchGeoScheme.cxx b/core/detectors/much/CbmMuchGeoScheme.cxx index 1ae081aba6..f5425451a8 100644 --- a/core/detectors/much/CbmMuchGeoScheme.cxx +++ b/core/detectors/much/CbmMuchGeoScheme.cxx @@ -135,12 +135,19 @@ void CbmMuchGeoScheme::Init(TObjArray* stations, Int_t flag) { // ------------------------------------------------------------------------- void CbmMuchGeoScheme::Init(TString digiFileName, Int_t flag) { - TFile* oldfile = gFile; + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + TFile* file = new TFile(digiFileName); TObjArray* stations = (TObjArray*) file->Get("stations"); file->Close(); file->Delete(); - gFile = oldfile; + + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + Init(stations, flag); } // ------------------------------------------------------------------------- diff --git a/core/detectors/much/CbmMuchSegmentAuto.cxx b/core/detectors/much/CbmMuchSegmentAuto.cxx index fe08db8a6d..672ee236bd 100644 --- a/core/detectors/much/CbmMuchSegmentAuto.cxx +++ b/core/detectors/much/CbmMuchSegmentAuto.cxx @@ -230,13 +230,18 @@ void CbmMuchSegmentAuto::FinishTask() { printf("Station%i segmented\n", i + 1); } + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + // Save parameters - TFile* oldfile = gFile; TFile* f = new TFile(fDigiFileName, "RECREATE"); fStations->Write("stations", 1); f->Close(); - gFile = oldfile; + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; DrawSegmentation(); diff --git a/core/detectors/much/CbmMuchSegmentManual.cxx b/core/detectors/much/CbmMuchSegmentManual.cxx index e6018f93c5..1162c38b47 100644 --- a/core/detectors/much/CbmMuchSegmentManual.cxx +++ b/core/detectors/much/CbmMuchSegmentManual.cxx @@ -261,13 +261,18 @@ void CbmMuchSegmentManual::SegmentMuch() { printf("Station %i segmented\n", iStation + 1); } + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + // Save parameters - TFile* oldfile = gFile; TFile* f = new TFile(fDigiFileName, "RECREATE"); fStations->Write("stations", 1); f->Close(); - gFile = oldfile; + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; // Draw colored stations DrawSegmentation(); diff --git a/core/detectors/much/CbmMuchSegmentSector.cxx b/core/detectors/much/CbmMuchSegmentSector.cxx index 283587da2e..24ec4dc9b0 100644 --- a/core/detectors/much/CbmMuchSegmentSector.cxx +++ b/core/detectors/much/CbmMuchSegmentSector.cxx @@ -144,13 +144,18 @@ void CbmMuchSegmentSector::SegmentMuch() { printf("Station %i segmented\n", iStation + 1); } + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + // Save parameters - TFile* oldfile = gFile; TFile* f = new TFile(fDigiFileName, "RECREATE"); fStations->Write("stations", 1); f->Close(); - gFile = oldfile; + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; DrawSegmentation(); } diff --git a/reco/detectors/much/CbmMuchFindHitsGem.cxx b/reco/detectors/much/CbmMuchFindHitsGem.cxx index a7dc2d83d9..9a18f06417 100644 --- a/reco/detectors/much/CbmMuchFindHitsGem.cxx +++ b/reco/detectors/much/CbmMuchFindHitsGem.cxx @@ -1,6 +1,6 @@ /* * CbmMuchFindHitsGem.cxx - * + * * Modified on 08/08/2019 : Hit reconstruction in Event (in time slice) and Time slice mode * Default is time slice (kCbmTimeSlice) and it will run in event mode (kCbmEvent) if find event branch in the tree * @authors Vikas Singhal and Ajit Kumar @@ -78,13 +78,13 @@ InitStatus CbmMuchFindHitsGem::Init() { // fDigis will not be used now. Just for checking. Need to remove /*fDigis = (TClonesArray*) ioman->GetObject("MuchDigi"); - if (! fDigis) - fDigis = (TClonesArray*) ioman->GetObject("MuchBeamTimeDigi"); - if (! fDigis) - fDigis = (TClonesArray*) ioman->GetObject("CbmMuchBeamTimeDigi"); - if (! fDigis) - fDigis = (TClonesArray*) ioman->GetObject("CbmMuchDigi"); - if (! fDigis) + if (! fDigis) + fDigis = (TClonesArray*) ioman->GetObject("MuchBeamTimeDigi"); + if (! fDigis) + fDigis = (TClonesArray*) ioman->GetObject("CbmMuchBeamTimeDigi"); + if (! fDigis) + fDigis = (TClonesArray*) ioman->GetObject("CbmMuchDigi"); + if (! fDigis) LOG(info) << "MuchFindHitsGem: No MuchDigi or MuchBeamTimeDigi or CbmMuchDigi or CbmMuchBeamTimeDigi exist"; */ @@ -117,12 +117,18 @@ InitStatus CbmMuchFindHitsGem::Init() { IsOutputBranchPersistent("MuchPixelHit")); // Initialize GeoScheme - TFile* oldfile = gFile; + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + TFile* file = new TFile(fDigiFile); TObjArray* stations = (TObjArray*) file->Get("stations"); file->Close(); file->Delete(); - gFile = oldfile; + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + fGeoScheme->Init(stations, fFlag); return kSUCCESS; } diff --git a/reco/detectors/much/CbmMuchHitProducerIdeal.cxx b/reco/detectors/much/CbmMuchHitProducerIdeal.cxx index f719cb34e7..f6182355c9 100644 --- a/reco/detectors/much/CbmMuchHitProducerIdeal.cxx +++ b/reco/detectors/much/CbmMuchHitProducerIdeal.cxx @@ -45,12 +45,18 @@ InitStatus CbmMuchHitProducerIdeal::Init() { // Initialize GeoScheme fGeoScheme = CbmMuchGeoScheme::Instance(); - TFile* oldfile = gFile; + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + TFile* file = new TFile(fDigiFile); TObjArray* stations = (TObjArray*) file->Get("stations"); file->Close(); file->Delete(); - gFile = oldfile; + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + fGeoScheme->Init(stations, fId); return kSUCCESS; } diff --git a/reco/detectors/much/qa/CbmMuchHitFinderQa.cxx b/reco/detectors/much/qa/CbmMuchHitFinderQa.cxx index 6b397aaeb3..ebe7f84917 100644 --- a/reco/detectors/much/qa/CbmMuchHitFinderQa.cxx +++ b/reco/detectors/much/qa/CbmMuchHitFinderQa.cxx @@ -138,7 +138,16 @@ InitStatus CbmMuchHitFinderQa::Init() { // Reading Much Digis from CbmMuchDigiManager which are stored as vector fDigiManager = CbmDigiManager::Instance(); + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + TFile* f = new TFile(fGeoFileName, "R"); + + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + TObjArray* stations = (TObjArray*) f->Get("stations"); fGeoScheme->Init(stations, fFlag); diff --git a/sim/detectors/much/CbmMuchDigitizeGem.cxx b/sim/detectors/much/CbmMuchDigitizeGem.cxx index 419df13c14..dd38dc25e4 100644 --- a/sim/detectors/much/CbmMuchDigitizeGem.cxx +++ b/sim/detectors/much/CbmMuchDigitizeGem.cxx @@ -2,8 +2,8 @@ *@author Vikas Singhal <vikas@vecc.gov.in> *@since 15.01.2020 *@version 4.0 - *@description: Using std::vector for digi and match containers. - *@author Ekata Nandy (ekata@vecc.gov.in) + *@description: Using std::vector for digi and match containers. + *@author Ekata Nandy (ekata@vecc.gov.in) *@since 21.06.19 : RPC digitization parameters(for 3rd and 4th MUCH station) now have been implemented along with GEM param// eters (1st and 2nd station) @author Ekata Nandy (ekata@vecc.gov.in) *@description: ADC channels number is 32.GEM & RPC has different charge threshold value and dynamic range, so SetAdc has been changed acc// ordingly. ADC value starts from 1 to 32. ADC 0 has been excluded as it gives wrong x, y, t. @author Ekata Nandy *@author Vikas Singhal <vikas@vecc.gov.in> @@ -378,7 +378,9 @@ InitStatus CbmMuchDigitizeGem::Init() { // Initialize GeoScheme - TFile* oldfile = gFile; + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; TFile* file = new TFile(fDigiFile); if (!file->IsOpen()) LOG(fatal) << fName << ": parameter file " << fDigiFile @@ -386,7 +388,9 @@ InitStatus CbmMuchDigitizeGem::Init() { TObjArray* stations = (TObjArray*) file->Get("stations"); file->Close(); file->Delete(); - gFile = oldfile; + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; fGeoScheme->Init(stations, fFlag); @@ -808,11 +812,18 @@ void CbmMuchDigitizeGem::Finish() { LOG(info) << "====================================="; /* + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; TFile *f1 =new TFile ("pri_el_info.root","RECREATE"); hPriElAfterDriftpathgem->Write(); hPriElAfterDriftpathrpc->Write(); hadcGEM->Write(); hadcRPC->Write(); + f1->Close(); + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; */ //if (fDaq) ReadAndRegister(-1.); } -- GitLab