00001 #include "TDiamondProc.h" 00002 00003 00004 TDiamondProc::TDiamondProc(const char* name) : TCBMBeamtimeProc(name),fCrateInputEvent(0), fOutputEvent(0),fBeamEvent(0) 00005 { 00006 cout << "**** TDiamondProc: Create instance" << name << endl; 00007 00008 fPar = (TDiamondParam*) MakeParameter("DiamondPar", "TDiamondParam"); 00009 00010 TString obname, obtitle; 00011 00012 printf("TDiamondProc Histograms created \n"); 00013 fflush ( stdout); 00014 } 00015 00016 00017 TDiamondProc::~TDiamondProc() 00018 { 00019 } 00020 00021 void TDiamondProc::InitEvent(TGo4EventElement* outevnt) 00022 { 00023 // first assign input event: 00024 // since input event object is never discarded within processor lifetime, 00025 // we just search for subevent by name once to speed up processing 00026 if(fCrateInputEvent==0) 00027 { 00028 TCBMBeamtimeEvent* btevent=dynamic_cast<TCBMBeamtimeEvent*>(GetInputEvent()); 00029 if(btevent) 00030 { 00031 fCrateInputEvent=dynamic_cast<TMbsCrateEvent*>(btevent->GetSubEvent("MBSCRATE")); 00032 } 00033 else 00034 { 00035 fCrateInputEvent=dynamic_cast<TMbsCrateEvent*>(GetInputEvent()); 00036 00037 } 00038 if(fCrateInputEvent==0) { 00039 GO4_STOP_ANALYSIS_MESSAGE("**** TDiamondProc: Fatal error: input event is not a TMbsCrateEvent!!! STOP GO4"); 00040 } 00041 } 00042 // then assign output event 00043 // since output event object is never discarded within processor lifetime, 00044 // we just search for subevent by name once to speed up processing 00045 if(fOutputEvent==0) 00046 { 00047 TCBMBeamtimeEvent* btevent=dynamic_cast<TCBMBeamtimeEvent*>(outevnt); 00048 if(btevent) 00049 { 00050 fOutputEvent=dynamic_cast<TDiamondEvent*>(btevent->GetSubEvent("DIAMOND")); 00051 // since output event object is never discarded within processor lifetime, 00052 // we just search for subevent by name once to speed up processing 00053 if(fBeamEvent==0) 00054 fBeamEvent=dynamic_cast<TBeamMonitorEvent*>(btevent->GetSubEvent("BEAM")); 00055 } 00056 else 00057 { 00058 00059 fOutputEvent= dynamic_cast<TDiamondEvent*>(outevnt); 00060 } 00061 if(fOutputEvent==0) { 00062 GO4_STOP_ANALYSIS_MESSAGE("**** TDiamondProc: Fatal error: output event is not a TDiamondEvent!!! STOP GO4"); 00063 } 00064 } 00065 } 00066 00067 void TDiamondProc::FinalizeEvent() 00068 { 00069 if (fCrateInputEvent==0) return; 00070 00071 if (fCrateInputEvent->IsValid()) { 00072 // analysis of FPGA TDC data 00073 00074 for (int n=0;n<MAX_FPGA_TDC;n++) { 00075 // number of TDC messages in each FPGA 00076 unsigned num_hits = fCrateInputEvent->fFPGA[n].size(); 00077 } 00078 00079 if (fBeamEvent) { 00080 // use data from beam info - when available 00081 00082 } 00083 } 00084 }