/** @file CbmStsReco.cxx ** @author Volker Friese ** @date 11.03.2019 **/ #include "CbmStsReco.h" #include "TClonesArray.h" #include "FairLogger.h" #include "FairRun.h" #include "FairRuntimeDb.h" #include "CbmStsDigitizeParameters.h" #include "CbmStsFindClusters.h" #include "CbmStsFindHits.h" #include "CbmStsSetup.h" // ----- Constructor --------------------------------------------------- CbmStsReco::CbmStsReco() : FairTask("StsReco", 1), fMode(kCbmTimeslice), fSetup(nullptr), fDigiPar(nullptr), fGlobalPar(), fIsSensorConditionsDefault(kTRUE), fIsModuleParametersDefault(kTRUE) { } // ------------------------------------------------------------------------- // ----- Destructor ---------------------------------------------------- CbmStsReco::~CbmStsReco() { } // ------------------------------------------------------------------------- // ----- Hard-code default parameters ----------------------------------- void CbmStsReco::DefineDefaultParameters() { // Sensor conditions Double_t vDep = 70.; // full-depletion voltage Double_t vBias = 140.; // bias voltage Double_t temp = 268.; // temperature Double_t cCoup = 17.5; // Coupling capacitance Double_t cInter = 1.; // Inter-strip capacitance fGlobalPar.SetSensorConditions(vDep, vBias, temp, cCoup, cInter); // Module parameters Double_t dynRange = 75000.; // Dynamic range [e] Double_t threshold = 3000.; // Threshold [e] Int_t nAdc = 32; // Number of ADC channels Double_t tResol = 5.; // Time resolution [ns] Double_t deadTime = 800.; // Single-channel dead time [ns] Double_t noise = 1000.; // Noise RMS [e] Double_t zeroNoiseRate = 3.9789e-3; // Zero-threshold noise rate [1/ns] Double_t deadChannelFrac = 0.; // Fraction of dead channels fGlobalPar.SetModuleParameters(dynRange, threshold, nAdc, tResol, deadTime, noise, zeroNoiseRate, deadChannelFrac); } // ------------------------------------------------------------------------- // ----- Initialisation ------------------------------------------------ InitStatus CbmStsReco::Init() { // --- Something for the screen std::cout << std::endl; LOG(INFO) << "==========================================================" << FairLogger::endl; LOG(INFO) << GetName() << ": Initialising " << FairLogger::endl; // --- Check input array (StsDigi). If not present, set task inactive. auto digis = dynamic_cast (FairRootManager::Instance()->GetObject("StsDigi")); if ( ! digis ) { digis = dynamic_cast (FairRootManager::Instance()->GetObject("CbmStsDigi")); } if ( ! digis ) { LOG(INFO) << GetName() << ": No StsDigi input array present; " << "task will be inactive." << FairLogger::endl; return kERROR; } // --- In event mode: check input array (Event). // --- If not present, set task inactive. if ( fMode == kCbmEvent ) { auto events = dynamic_cast (FairRootManager::Instance()->GetObject("Event")); // auto events = FairRootManager::Instance()->GetTClonesArray("Event"); if ( ! events ) { LOG(INFO) << GetName() << ": Event-by-event mode selected, " << "but no event branch present."; return kFATAL; } } // --- If no parameters are available from the database, // --- instantiate the parameter container and set the // --- parameters. if ( ! fDigiPar ) { LOG(INFO) << GetName() << ": no parameter container from database." << FairLogger::endl; fDigiPar = new CbmStsDigitizeParameters(fGlobalPar); } // --- Set physics processes CbmStsPhysics::Instance()->SetProcesses(fDigiPar->GetELossModel(), fDigiPar->GetUseLorentzShift(), fDigiPar->GetUseDiffusion(), fDigiPar->GetUseCrossTalk(), fDigiPar->GetGenerateNoise()); CbmStsPhysics::Instance()->ShowProcesses(); // --- Initialise STS setup fSetup = CbmStsSetup::Instance(); fSetup->Init(); fSetup->SetSensorConditions(fDigiPar); fSetup->SetModuleParameters(fDigiPar); // --- Instantiate the cluster finder Add(new CbmStsFindClusters(fMode)); // --- Instantiate the hit finder Add(new CbmStsFindHits(fMode)); return kSUCCESS; } // ------------------------------------------------------------------------- // ----- Set parameter containers -------------------------------------- void CbmStsReco::SetParContainers() { FairRuntimeDb* rtdb = FairRun::Instance()->GetRuntimeDb(); assert(rtdb); fDigiPar = static_cast (rtdb->getContainer("CbmStsDigitizeParameters")); } // ------------------------------------------------------------------------- ClassImp(CbmStsReco)