00001 #include "TTRDDubnaProc.h"
00002
00003 #include "TMbsCrateParam.h"
00004
00005 TTRDDubnaProc::TTRDDubnaProc(const char* name) : TCBMBeamtimeProc(name),fCrateInputEvent(0), fOutputEvent(0),fBeamEvent(0)
00006 {
00007 cout << "**** TTRDDubnaProc: Create instance" << name << endl;
00008
00009 fPar = (TTRDDubnaParam*) MakeParameter("TRDDubnaPar", "TTRDDubnaParam");
00010
00011 TMbsCrateParam* mbspar = dynamic_cast<TMbsCrateParam*> (GetParameter("MbsCratePar"));
00012
00013 TString obname, obtitle;
00014
00015
00016 for (int mad = 2; mad < MAX_MADC; mad++) {
00017
00018 int amad = mad - 2;
00019
00020 for (int ch = 0; ch < N_MADC_CHA; ch++) {
00021
00022 obname.Form("DUBNA/MADC%d/Pions/MADC%d_ch%d_piond", mad, mad, ch);
00023 obtitle.Form("MADC %d Channel %d pion", mad, ch);
00024 fMadc_pion[amad][ch] = MakeTH1('I', obname.Data(), obtitle.Data(), 0x3FF, 0, 0x3FF);
00025
00026 obname.Form("DUBNA/MADC%d/Electrons/MADC%d_ch%d_elect", mad, mad, ch);
00027 obtitle.Form("MADC %d Channel %d electron", mad, ch);
00028 fMadc_electron[amad][ch] = MakeTH1('I', obname.Data(), obtitle.Data(), 0x3FF, 0, 0x3FF);
00029 }
00030
00031 obname.Form("MADC%d_pion_Dubna", mad);
00032 if (GetPicture(obname.Data()) == 0) {
00033 obtitle.Form("Pion channels overview MADC %2d", mad);
00034 TGo4Picture* pic = new TGo4Picture(obname.Data(), obtitle.Data());
00035 pic->SetDivision(8, 4);
00036 for(int y=0; y<8;++y)
00037 for(int x=0;x<4;++x) {
00038 pic->Pic(y, x)->AddObject(fMadc_pion[amad][4*y+x]);
00039 pic->Pic(y, x)->SetFillAtt(5, 3001);
00040 pic->Pic(y, x)->SetRangeX(0, 200);
00041 pic->Pic(y, x)->SetLogScale(1, 1);
00042 }
00043 AddPicture(pic);
00044 }
00045
00046
00047 obname.Form("MADC%d_electron_Dubna", mad);
00048 if (GetPicture(obname.Data()) == 0) {
00049 obtitle.Form("Electron channels overview MADC %2d", mad);
00050 TGo4Picture* pic = new TGo4Picture(obname.Data(), obtitle.Data());
00051 pic->SetDivision(8, 4);
00052 for(int y=0; y<8;++y)
00053 for(int x=0;x<4;++x) {
00054 pic->Pic(y, x)->AddObject(fMadc_electron[amad][4*y+x]);
00055 pic->Pic(y, x)->SetFillAtt(5, 3001);
00056 pic->Pic(y, x)->SetRangeX(0, 200);
00057 pic->Pic(y, x)->SetLogScale(1, 1);
00058 }
00059 AddPicture(pic);
00060 }
00061 }
00062 printf("TTRDDubnaProc Histograms created \n");
00063 fflush ( stdout);
00064 }
00065
00066
00067 TTRDDubnaProc::~TTRDDubnaProc()
00068 {
00069 }
00070
00071 void TTRDDubnaProc::InitEvent(TGo4EventElement* outevnt)
00072 {
00073
00074
00075
00076 if(fCrateInputEvent==0)
00077 {
00078 TCBMBeamtimeEvent* btevent=dynamic_cast<TCBMBeamtimeEvent*>(GetInputEvent());
00079 if(btevent)
00080 {
00081 fCrateInputEvent=dynamic_cast<TMbsCrateEvent*>(btevent->GetSubEvent("MBSCRATE"));
00082 }
00083 else
00084 {
00085 fCrateInputEvent=dynamic_cast<TMbsCrateEvent*>(GetInputEvent());
00086
00087 }
00088 if(fCrateInputEvent==0) {
00089 GO4_STOP_ANALYSIS_MESSAGE("**** TTRDDubnaProc: Fatal error: input event is not a TMbsCrateEvent!!! STOP GO4");
00090 }
00091 }
00092
00093
00094
00095 if(fOutputEvent==0)
00096 {
00097 TCBMBeamtimeEvent* btevent=dynamic_cast<TCBMBeamtimeEvent*>(outevnt);
00098 if(btevent)
00099 {
00100 fOutputEvent=dynamic_cast<TTRDDubnaEvent*>(btevent->GetSubEvent("TRDDUBNA"));
00101
00102
00103 if(fBeamEvent==0)
00104 fBeamEvent=dynamic_cast<TBeamMonitorEvent*>(btevent->GetSubEvent("BEAM"));
00105 }
00106 else
00107 {
00108
00109 fOutputEvent= dynamic_cast<TTRDDubnaEvent*>(outevnt);
00110 }
00111 if(fOutputEvent==0) {
00112 GO4_STOP_ANALYSIS_MESSAGE("**** TTRDDubnaProc: Fatal error: output event is not a TTRDDubnaEvent!!! STOP GO4");
00113 }
00114 }
00115 }
00116
00117 void TTRDDubnaProc::FinalizeEvent()
00118 {
00119
00120 if (fBeamEvent && fCrateInputEvent->IsValid())
00121 {
00122
00123 for (int mad = 2; mad < MAX_MADC; mad++) {
00124 int amad = mad - 2;
00125 for (int ch = 0; ch < N_MADC_CHA; ch++) {
00126 UShort_t adc = fCrateInputEvent->fMadc[mad][ch];
00127 if(adc==0) continue;
00128
00129 if (fBeamEvent->IsPulser()) {
00130
00131 }
00132
00133 if (fBeamEvent->fIsPion)
00134 {
00135 fMadc_pion[amad][ch]->Fill(adc);
00136 fOutputEvent->fMadc_Pion[amad][ch] = adc;
00137 }
00138 if (fBeamEvent->fIsElectron)
00139 {
00140 fMadc_electron[amad][ch]->Fill(adc);
00141 fOutputEvent->fMadc_Electron[amad][ch] = adc;
00142 }
00143 }
00144 }
00145 }
00146 }
00147
00148
00149