// ------------------------------------------------------------------ // ----- TTriglogUnpackTof ----- // ----- Created 07/07/2013 by P.-A. Loizeau ----- // ------------------------------------------------------------------ #include "TTriglogUnpackTof.h" // SubEvent ProcId from ROC library #include "commons.h" // General MBS headers #include "TofDef.h" #include "TMbsUnpackTofPar.h" // ToF specific headers #include "TTofTriglogUnpacker.h" #include "TTofTriglogBoard.h" #include "TTofScalerBoard.h" // ROOT headers #include "TClonesArray.h" #include "TFile.h" #include "TDatime.h" #include "TROOT.h" #include "TDirectory.h" // FAIR headers #include "FairLogger.h" //#include "FairRootManager.h" #include "FairRunAna.h" #include "FairRuntimeDb.h" TTriglogUnpackTof::TTriglogUnpackTof() : FairUnpack( 10, 1, roc3587::proc_Triglog, 0, 9 ), fiVerbosity(0), fMbsUnpackPar(0), fiNbEvents(0), fiFirstEventNumber(0), fiLastEventNumber(0), fbSaveTriglogBoard(kFALSE), fbSaveScalerBoards(kFALSE) { } TTriglogUnpackTof::TTriglogUnpackTof( Int_t verbose ) : FairUnpack( 10, 1, roc3587::proc_Triglog, 0, 9 ), fiVerbosity(verbose), fMbsUnpackPar(0), fiNbEvents(0), fiFirstEventNumber(0), fiLastEventNumber(0), fbSaveTriglogBoard(kFALSE), fbSaveScalerBoards(kFALSE) { } TTriglogUnpackTof::TTriglogUnpackTof( Int_t type, Int_t subType, Short_t procId, Int_t verbose, Short_t subCrate, Short_t control) : FairUnpack( type, subType, procId, subCrate, control ), fiVerbosity(verbose), fMbsUnpackPar(0), fiNbEvents(0), fiFirstEventNumber(0), fiLastEventNumber(0), fbSaveTriglogBoard(kFALSE), fbSaveScalerBoards(kFALSE) { } TTriglogUnpackTof::~TTriglogUnpackTof() { LOG(INFO)<<"**** TTriglogUnpackTof: Delete instance "<GetNbActiveBoards( tofMbs::triglog ) ) delete fTriglogUnp; } // -------------------------------------------------- // FairUnpack specific functions Bool_t TTriglogUnpackTof::Init() { LOG(INFO)<<"**** TTriglogUnpackTof: Init Params "< Found TRIGLOG subevent! LEN" <GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp->ProcessTriglog( (UInt_t*)data , uNbWords ); fiNbEvents++; LOG(DEBUG)<<"TRIGLOG unpacked!"<GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp->FinishTriglog(); else LOG(INFO)<<"No Triglog summary as 0 Triglog board active"<GetRuntimeDb(); // Unpacker parameter fMbsUnpackPar = (TMbsUnpackTofPar*) (rtdb->getContainer("TMbsUnpackTofPar")); if( 0 == fMbsUnpackPar ) return kFALSE; // PAL: Added to recover loading of parameters before initialization // rtdb->initContainers( ana->GetRunId() ); fMbsUnpackPar->printParams(); return kTRUE; } // ------------------------------------------------------------------ Bool_t TTriglogUnpackTof::CreateHistogramms() { TDirectory * oldir = gDirectory; // <= To prevent histos from being sucked in by the param file of the TRootManager! gROOT->cd(); // <= To prevent histos from being sucked in by the param file of the TRootManager! if( 0 < fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp->CreateHistos(); gDirectory->cd( oldir->GetPath() ); // <= To prevent histos from being sucked in by the param file of the TRootManager! return kTRUE; } Bool_t TTriglogUnpackTof::FillHistograms() { if( 0 < fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp->FillHistos(); return kTRUE; } void TTriglogUnpackTof::WriteHistogramms() { // There should always be only 1 active TRIGLOG board at a time if( 1 == fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) { TDirectory * oldir = gDirectory; TFile *fHist = new TFile("./tofMbsUnp.hst.root","RECREATE"); if( 1 == fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp->WriteHistos( fHist ); gDirectory->cd( oldir->GetPath() ); fHist->Close(); } // if( 1 == fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) } void TTriglogUnpackTof::DeleteHistograms() { if( 0 < fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp->DeleteHistos(); } // ------------------------------------------------------------------ Bool_t TTriglogUnpackTof::CreateUnpackers() { if( 0 == fMbsUnpackPar->GetNbActiveBoards() ) { LOG(ERROR)<<"TTriglogUnpackTof::CreateUnpackers => No active boards => No unpacker !?!?! "<GetNbActiveBoards( tofMbs::triglog ) ) fTriglogUnp = new TTofTriglogUnpacker( fMbsUnpackPar ); return kTRUE; } Bool_t TTriglogUnpackTof::RegisterOutput() { if( 0 == fMbsUnpackPar->GetNbActiveBoards() ) { LOG(ERROR)<<"TTriglogUnpackTof::RegisterOutput => No active boards => No output objects !?!?! "<GetNbActiveBoards( tofMbs::triglog ) ) { // There should always be maximum one trigger board active at a time!!! fTriglogBoardCollection = new TClonesArray( "TTofTriglogBoard", 1 ); // fManager->Register("TofTriglog","TofUnpack",fTriglogBoardCollection, kTRUE); fManager->Register( "TofTriglog","TofUnpack",fTriglogBoardCollection, fMbsUnpackPar->WriteDataInCbmOut() || fbSaveTriglogBoard); fScalerBoardCollection = new TClonesArray( "TTofScalerBoard", fMbsUnpackPar->GetNbActiveScalersB()); // fManager->Register("TofRawScalers","TofUnpack",fScalerBoardCollection, kTRUE); fManager->Register( "TofRawScalers","TofUnpack",fScalerBoardCollection, fMbsUnpackPar->WriteDataInCbmOut() || fbSaveScalerBoards); } // if( 1 == fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) else if( 1 < fMbsUnpackPar->GetNbActiveBoards( tofMbs::triglog ) ) { LOG(ERROR)<<"TMbsUnpackTofCustom::RegisterOutput => More than 1 TRIGLOG board active!!!!! recheck your VME address matrix "<GetNbActiveBoards( tofMbs::triglog ) ) return kTRUE; } Bool_t TTriglogUnpackTof::ClearOutput() { LOG(DEBUG)<<"Clear TRIGLOG"<GetNbActiveBoards( tofMbs::triglog ) ) fTriglogBoardCollection->Clear("C"); if( 0 < fMbsUnpackPar->GetNbActiveScalersB() ) fScalerBoardCollection->Clear("C"); return kTRUE; } void TTriglogUnpackTof::SetSaveTriglog( Bool_t bSaveTrlo ) { fbSaveTriglogBoard = bSaveTrlo; LOG(INFO)<<"TTriglogUnpackTof => Enable the saving of raw triglog data in analysis output file" < Enable the saving of raw scaler data in analysis output file" <