• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

beamtime/cern-oct12/go4/MSFFM/TTRDMuensterFrankfurtProc.cxx (r4864/r3725)

Go to the documentation of this file.
00001 #include "TTRDMuensterFrankfurtProc.h"
00002 
00003 #include "TGo4Log.h"
00004 
00005 #include "spadic/Message.h"
00006 
00007 #define USED_SPADIC          13
00008 
00009 //#define USED_SPADIC_2012     10  // subset of (must be <=) USED_SPADIC to limits histos in pictures
00010 #define USED_SPADIC_2012     6  // subset of (must be <=) USED_SPADIC to limits histos in pictures
00011 
00012 int numy_2012 = 3; // number of rows in pictures 2012
00013 
00014 // number (+1) of used spadics during CERN Oct 2011 beamtime
00015 // NOTE: since susibo index starts with one, we do not use index 0, but assign one more
00016 
00017 // 2012 -----------------------
00018 Int_t SpMap[MAX_SPADIC]      = {  0, 11, 10, 18,  5, 19, 15,  2,  1,  2, 12,  6,  4, 16, 17,  3, 14,  7,  8,  9};  // map of Spadics in TRD order
00019 Int_t SpaPosMap[USED_SPADIC] = {  0, 11, 10, 18,  5, 19, 15,  2,  1,  4, 12,  6, 16 };  // map of present Spadics - defines order e.g. in MFInputSpadics picture
00020 
00021 Double_t minCorrMatrix[MAX_SPADIC][NUM_SPADIC_CHA] = {
00022   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},//0
00023   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00024   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00025   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00026   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00027   {0.120, 0.120, 0.120, 0.120, 0.120, 0.120, 0.120, 0.120},//5
00028   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00029   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00030   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00031   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00032   {0.110, 0.110, 0.110, 0.110, 0.110, 0.110, 0.110, 0.110},//10
00033   {0.119, 0.119, 0.119, 0.119, 0.119, 0.119, 0.119, 0.119},
00034   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000}, 
00035   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00036   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00037   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},//15
00038   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00039   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000}, 
00040   {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000},
00041   {0.115, 0.115, 0.115, 0.115, 0.115, 0.115, 0.115, 0.115}
00042 };
00043 
00044 //  Int_t StMap[MAX_SPADIC]      = {  0, 11, 10, 18,  1,  2, 12,  6, 15,  4, 16, 17,  5,  3, 14,  7,  8,  9, 13, 19 };  // map of top    Spadics - used only in MSxTopShapeRatio
00045 //  Int_t SbMap[MAX_SPADIC]      = {  0, 11, 10, 18,  1,  2, 12,  6, 15,  4, 16, 17,  5,  3, 14,  7,  8,  9, 13, 19 };  // map of bottom Spadics - used only in MSxBottomShapeRatio
00046 
00047 // 2011 -----------------------
00048   // 19.10.2011                      // MS                           // FF           // unused
00049 //2011  Int_t SpMap[MAX_SPADIC]      = {  0,  1,  2, 11, 12, 10,  6, 15, 18,  4, 16, 17,  5,  3, 14,  7,  8,  9, 13, 19 };  // map of Spadics in TRD order
00050 //2011  Int_t StMap[MAX_SPADIC]      = {  0,  1, 11, 10, 15,  0,  0,  0,  0,  4, 16, 17,  5,  3, 14,  7,  8,  9, 13, 19 };  // map of top    Spadics 
00051 //2011  Int_t SbMap[MAX_SPADIC]      = {  0,  2, 12,  6, 18,  0,  0,  0,  0,  4, 16, 17,  5,  3, 14,  7,  8,  9, 13, 19 };  // map of bottom Spadics 
00052 //  Int_t SuMap[MAX_SPADIC]      = {  0,  1,  5, 10,  9, 12,  7, 17, 18, 15, 13,  2,  6, 16, 14,  4,  3, 11,  8, 19 };  // histo mapping
00053   //                                0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
00054 //2011  Int_t SpaPosMap[USED_SPADIC] = {  0,  1, 11, 10, 15,  2, 12,  6, 18,  4, 16, 17,  5 };  // map of 12 used Spadics
00055 
00056 TPrincipal* principal = new TPrincipal(NUM_SPADIC_CHA,"ND");
00057 TMatrixD* cova = NULL;
00058 Int_t counter = 0;
00059 
00060 void TTRDMuensterFrankfurtProc::PulseFitter(TH1* Pulse, Double_t hitTime, Double_t maxAmpl, Int_t sid)
00061 {
00062   //counter++;
00063   pulseFit[sid]->SetParameter(0,maxAmpl*10);                       //p[0]: gain constant 
00064   pulseFit[sid]->SetParLimits(0,0,256*100);
00065   pulseFit[sid]->SetParameter(1,0.09*45);                          //p[1]: time constant 
00066   pulseFit[sid]->SetParLimits(1,0.07*45,0.12*45);
00067   pulseFit[sid]->SetParameter(2,/*0.16*/(hitTime-5));            //p[2]: delay
00068   pulseFit[sid]->SetParLimits(2,0.8*(hitTime-5),1.2*(hitTime-5));
00069   pulseFit[sid]->SetParameter(3,0);                                //p[3]: baseline
00070   pulseFit[sid]->SetParLimits(3,-50,50);
00071   pulseFit[sid]->SetRange(hitTime-5,45);
00072   Pulse->Fit(pulseFit[sid],"QNR0");
00073   fSpadic_gainConstantFit[sid]->Fill(pulseFit[sid]->GetParameter(0));
00074   fSpadic_timeConstantFit[sid]->Fill(pulseFit[sid]->GetParameter(1) / 45.);
00075   fSpadic_delayFit[sid]->Fill(pulseFit[sid]->GetParameter(2));
00076   fSpadic_baselineFit[sid]->Fill(pulseFit[sid]->GetParameter(3));
00077   fSpadic_chiSquareFit[sid]->Fill(pulseFit[sid]->GetChisquare()/(Double_t)pulseFit[sid]->GetNDF());
00078   //cout << counter << endl;
00079 }
00080 
00081 void TTRDMuensterFrankfurtProc::CancelNoise_Cova(Int_t sid, TH1* inPulse[NUM_SPADIC_CHA],TH1* outPulse[NUM_SPADIC_CHA], TSpadicData* theSpadic, bool debug)
00082 {
00083   //const double lowercorthreshold = 0.112;
00084   //const double uppercorthreshold = 0.112;
00085   //const double nosignalcorthreshold = 0.1;
00086   Double_t cortest[NUM_SPADIC_CHA];
00087   Double_t inputarray[SPADIC_TRACE_SIZE][NUM_SPADIC_CHA] = {{0.0}};
00088   Double_t minIntegral = 265*45;
00089   Double_t tempIntegral = 0.0;
00090   int minch = -1;//GetMinimumChannel(input);
00091   for(Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++){
00092     tempIntegral = 0.0;
00093     outPulse[ch]->Reset();
00094     theSpadic->fSpadicSignalCh[ch] = false;
00095     for(Int_t bin = 0; bin < SPADIC_TRACE_SIZE; bin++){  
00096       inputarray[bin][ch] = inPulse[ch]->GetBinContent(inPulse[ch]->FindBin(bin));
00097       tempIntegral += inputarray[bin][ch];
00098     }
00099     if (tempIntegral < minIntegral){
00100       minIntegral = tempIntegral;
00101       minch = ch;
00102     }
00103   }
00104   int noise_ch_counter=0;
00105 
00106   Double_t thisisnoise[SPADIC_TRACE_SIZE] = {0.0};
00107   //pulseFit = new TF1("pulseFit","([0] / pow([1], 2)) * (x - [2]) * exp( -1 * (x - [2]) / [1]) + [3]",0,45);
00108 
00109   for(int t=0;t<SPADIC_TRACE_SIZE;t++){
00110     principal->AddRow(inputarray[t]);
00111   }
00112   principal->MakePrincipals();
00113   cova = (TMatrixD*)principal->GetCovarianceMatrix();
00114   
00115   Int_t lastSigCh = -1;
00116   for(int ch=0;ch<NUM_SPADIC_CHA;ch++){
00117     cortest[ch] = TMatrixDRow (*cova,minch)(ch);
00118     fSpadic_CorrMatrix[sid][ch]->Fill(cortest[ch]);
00119     //if(cortest[ch] > lowercorthreshold){
00120     if (fSpadic_corrMatrixWindow[sid][ch]->Test(cortest[ch])) {
00121       theSpadic->fSpadicSignalCh[ch] = false; // hase been set based on simple algorithm in the onlinemonitor step spadicmonitor. is over writen now based on correlation matrix if Run_Simplenoisereduction==false
00122       noise_ch_counter++;
00123       for(Int_t bin = 0; bin < SPADIC_TRACE_SIZE; bin++){
00124         thisisnoise[bin] += inputarray[bin][ch];
00125       }
00126     }
00127     else { //debug
00128       theSpadic->fSpadicSignalCh[ch] = true; // hase been set based on simple algorithm in the onlinemonitor step spadicmonitor. is over writen now based on correlation matrix if Run_Simplenoisereduction==false
00129       if (lastSigCh != -1)
00130         lastSigCh = ch;
00131     } //debug
00132   }
00133   for(Int_t bin = 0; bin < SPADIC_TRACE_SIZE; bin++){
00134     thisisnoise[bin] /= (double)noise_ch_counter;
00135   }  
00136   Int_t hitTime[NUM_SPADIC_CHA] = {0};
00137   Double_t maxAmpl[NUM_SPADIC_CHA] = {0.0};
00138   Double_t signal = 0.0;
00139   Int_t maxCh = 0;
00140   if (fSpadic_Clustersize[sid] != NULL) fSpadic_Clustersize[sid]->Fill(NUM_SPADIC_CHA - noise_ch_counter); //debug
00141   for (int ch=0; ch<NUM_SPADIC_CHA; ch++){
00142     for (int k=0; k<SPADIC_TRACE_SIZE; k++){
00143       signal = inPulse[ch]->GetBinContent(inPulse[ch]->FindBin(k)) - thisisnoise[k];
00144       if (signal > maxAmpl[ch]) {
00145         maxAmpl[ch] = signal;
00146         hitTime[ch] = k;
00147       }
00148       outPulse[ch]->Fill(k, signal);
00149     }
00150     fSpadic_CorrMatrix_hitTime[sid][ch]->Fill(cortest[ch], hitTime[ch]);
00151     fSpadic_CorrMatrix_maxAmpl[sid][ch]->Fill(cortest[ch], maxAmpl[ch]);
00152     if (maxAmpl[ch] > maxAmpl[maxCh])
00153       maxCh = ch;
00154   }
00155   if (maxAmpl[maxCh] > 10) {
00156     PulseFitter(outPulse[maxCh], hitTime[maxCh], maxAmpl[maxCh], sid);
00157    }
00158   principal->Clear();  
00159 }
00160 
00161 
00162 TTRDMuensterFrankfurtProc::TTRDMuensterFrankfurtProc(const char* name) : TCBMBeamtimeProc(name),
00163                                                                          fSpadicInputEvent(0), 
00164                                                                          fOutputEvent(0),
00165                                                                          fBeamEvent(0),
00166                                                                          fHodo1(0),
00167                                                                          fHodo2(0)
00168 {
00169   TGo4Log::Info("TTRDMuensterFrankfurtProcTTRDSpadicProc: Create instance %s", name);
00170 
00171   fPar = (TTRDMuensterFrankfurtParam*) MakeParameter("TRDMuensterFrankfurtPar", "TTRDMuensterFrankfurtParam");
00172 
00173   // reset slow control variables:
00174   fEpicsTrdGasFlow = 0.0;
00175   fEpicsTrdIntegGasFlow = 0.0;
00176   for (int mst = 0; mst < MSTRDNUM; ++mst) {
00177     fEpicsMSTRD_Drift_U[mst] = 0;
00178     fEpicsMSTRD_Drift_I[mst] = 0;
00179     fEpicsMSTRD_Anode_U[mst] = 0;
00180     fEpicsMSTRD_Anode_I[mst] = 0;
00181     fEpicsMSTRD_Sus_U[mst] = 0;
00182     fEpicsMSTRD_Sus_I[mst] = 0;
00183     fEpicsMSTRD_Spa_U[mst] = 0;
00184     fEpicsMSTRD_Spa_I[mst] = 0;
00185   }
00186   for (int i = 0; i < MPOD01SLOT; i++)
00187     fEpicsMSTRD_Temp[i] = 0;
00188 
00189   for (int i = 0; i < RICHNUM; ++i) {
00190     fEpics_Rich_U[i] = 0;
00191     fEpics_Rich_I[i] = 0;
00192   }
00193 
00194   // end epics slow control init
00195  
00196   /* simple SPADIC online JAM:*/
00197   TString obname;
00198   TString obtitle;
00199   TString foldername;
00200   TH1* his=0;
00201 
00202   one = new TLine(0,1,45,1);
00203 
00204   TString SuDeId[MAX_SPADIC] = {/*00*/ "dummy",            
00205                                 /*01*/ "",                 
00206                                 /*02*/ "MiniTRD",                 
00207                                 /*03*/ "",                 
00208                                 /*04*/ "",                
00209                                 /*05*/ "FFM_5+5",                 
00210                                 /*06*/ "",                 
00211                                 /*07*/ "",                
00212                                 /*08*/ "",                
00213                                 /*09*/ "",                 
00214                                 /*10*/ "MS_N_II",                
00215                                 /*11*/ "MS_R_I",                 
00216                                 /*12*/ "",                 
00217                                 /*13*/ "",                
00218                                 /*14*/ "",                 
00219                                 /*15*/ "MiniTRD",                 
00220                                 /*16*/ "",                 
00221                                 /*17*/ "",                  
00222                                 /*18*/ "MS_J_III",                 
00223                                 /*19*/ "FFM_4+4",
00224                                 /*20*/ "",
00225                                 /*21*/ "",
00226                                 /*22*/ "",
00227                                 /*23*/ ""
00228   };
00229 
00230   fSpadic_MSxyHitPadplane[0] = MakeTH2('I',"MuensterFrankfurt/MSxyHitPadplaneTRD1_2","MS x y Hit Pad Plane TRD 1 2",65,-32.5,32.5,65,-32.5,32.5,"x [mm]","y [mm]");
00231   fSpadic_MSxyHitPadplane[0]->SetContour(99);
00232   fSpadic_MSxyHitPadplane[1] = MakeTH2('I',"MuensterFrankfurt/MSxyHitPadplaneTRD3_4","MS x y Hit Pad Plane TRD 3 4",65,-32.5,32.5,65,-32.5,32.5,"x [mm]","y [mm]");
00233   fSpadic_MSxyHitPadplane[1]->SetContour(99);
00234   fSpadic_MSxyHitplane[0] = MakeTH2('I',"MuensterFrankfurt/MSxyHitplaneTRD1_2","MS x y Hit Plane TRD 1 2",65,-32.5,32.5,65,-32.5,32.5,"x [mm]","y [mm]");
00235   fSpadic_MSxyHitplane[0]->SetContour(99);
00236   fSpadic_MSxyHitplane[1] = MakeTH2('I',"MuensterFrankfurt/MSxyHitplaneTRD3_4","MS x y Hit Plane TRD 3 4",65,-32.5,32.5,65,-32.5,32.5,"x [mm]","y [mm]");
00237   fSpadic_MSxyHitplane[1]->SetContour(99);
00238 
00239   for (Int_t i = 0; i < 3; i++){
00240     obname.Form("MuensterFrankfurt/BeamProfile2D_TRD%d",i+1);
00241     obtitle.Form("2D Beam Profil of MS TRD %d",i+1);
00242     fSpadic_beamProfil[i] = MakeTH2('I',obname.Data(),obtitle.Data(),240,-60,60,240,-60,60,"x position [mm]","y position [mm]");
00243     fSpadic_beamProfil[i]->SetContour(99);  
00244     obname.Form("MuensterFrankfurt/deltaPos_TRD%d",i+1);
00245     obtitle.Form("offset of reco. pos. of MS TRD %d",i+1);
00246     fSpadic_deltaPos[i] = MakeTH2('I',obname.Data(),obtitle.Data(),240,-60,60,240,-60,60,"x position [mm]","#delta x position [mm]");
00247     fSpadic_deltaPos[i]->SetContour(99); 
00248   }
00249   //  //                           0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
00250   //  Int_t SpMap[MAX_SPADIC] = {  0,  1,  2, 11, 12,  3,  6, 15, 18,  4,  5, 16, 17, 10, 14,  7,  8,  9, 13, 19 };  // Spadics in TRD order
00251   //  Int_t SuMap[MAX_SPADIC] = {  0,  1,  5,  3,  9, 10,  7, 17, 18, 15, 13,  2,  6, 16, 14,  4, 11, 12,  8, 19 };  // histo mapping
00252 
00253 
00254   //  // 19.10.2011                  // MS                           // FF          // unused
00255   //  Int_t SpMap[MAX_SPADIC] = {  0,  1,  2, 11, 12,  3,  6, 15, 18,  4, 16, 17,  5, 10, 14,  7,  8,  9, 13, 19 };  // map of Spadics in TRD order
00256   //  Int_t SuMap[MAX_SPADIC] = {  0,  1,  5,  3,  9, 12,  7, 17, 18, 15, 13,  2,  6, 16, 14,  4, 10, 11,  8, 19 };  // histo mapping
00257   //  //                           0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
00258 
00259 
00260   //  if (!fPar->reSortSusibo)
00261   //    for (Int_t sid = 0; sid < MAX_SPADIC; sid++)
00262   //      SuMap[sid] = sid;
00263 
00264   TString MsId[MSTRDNUM] = {"dummy","336_2010","336_2011","444_2010","444_2011"};
00265   const Int_t timeMemory = 1800; // 1h with 1 event per 2sec
00266   
00267   fSpadic_pidMixing = MakeTH1('I',"PIDmixing","PIDmixing",5,-2.5,2.5);
00268 
00269   fEpics_TrdGasFlowMonitor = MakeTH1('D',"EPICS_TrdGasMonitor/GasFlowRate","TrdGasFlowMonitor", timeMemory,-timeMemory,0,"relative event id","XeCO_{2} flow [l/h]");
00270   fEpics_TrdIntegGasFlowMonitor = MakeTH1('D',"EPICS_TrdGasMonitor/IntegratedGasFlow","IntegTrdGasFlowMonitor", timeMemory,-timeMemory,0,"relative event id","integrated XeCO_{2} flow [l]");
00271 
00272   fEpics_MonitorU[0] = MakeTH1('D',"EPICS_BeamMonitor/Cherenkov_1_U",     "Cherenkov 1",      timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00273   fEpics_MonitorI[0] = MakeTH1('D',"EPICS_BeamMonitor/Cherenkov_1_I",     "Cherenkov 1",      timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00274   fEpics_MonitorU[1] = MakeTH1('D',"EPICS_BeamMonitor/Cherenkov_2_U",     "Cherenkov 2",      timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00275   fEpics_MonitorI[1] = MakeTH1('D',"EPICS_BeamMonitor/Cherenkov_2_I",     "Cherenkov 2",      timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00276   fEpics_MonitorU[2] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_1x_U",    "Hodoscope 1x",     timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00277   fEpics_MonitorI[2] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_1x_I",    "Hodoscope 1x",     timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00278   fEpics_MonitorU[3] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_1y_U",    "Hodoscope 1y",     timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00279   fEpics_MonitorI[3] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_1y_I",    "Hodoscope 1y",     timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00280   fEpics_MonitorU[4] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_2x_U",    "Hodoscope 2x",     timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00281   fEpics_MonitorI[4] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_2x_I",    "Hodoscope 2x",     timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00282   fEpics_MonitorU[5] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_2y_U",    "Hodoscope 2y",     timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00283   fEpics_MonitorI[5] = MakeTH1('D',"EPICS_BeamMonitor/Hodoscope_2y_I",    "Hodoscope 2y",     timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00284   fEpics_MonitorU[6] = MakeTH1('D',"EPICS_BeamMonitor/Calorimeter_Veto_U","Calorimeter Veto", timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00285   fEpics_MonitorI[6] = MakeTH1('D',"EPICS_BeamMonitor/Calorimeter_Veto_I","Calorimeter Veto", timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00286   fEpics_MonitorU[7] = MakeTH1('D',"EPICS_BeamMonitor/Calorimeter_U",     "Calorimeter",      timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00287   fEpics_MonitorI[7] = MakeTH1('D',"EPICS_BeamMonitor/Calorimeter_I",     "Calorimeter",      timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00288   fEpics_MonitorU[8] = MakeTH1('D',"EPICS_BeamMonitor/Scintillator_1_U",  "Scintillator 1",   timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00289   fEpics_MonitorI[8] = MakeTH1('D',"EPICS_BeamMonitor/Scintillator_1_I",  "Scintillator 1",   timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00290   fEpics_MonitorU[9] = MakeTH1('D',"EPICS_BeamMonitor/Scintillator_2_U",  "Scintillator 2",   timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00291   fEpics_MonitorI[9] = MakeTH1('D',"EPICS_BeamMonitor/Scintillator_2_I",  "Scintillator 2",   timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00292 
00293   for (Int_t sl = 0; sl < MPOD00SLOT; sl++) {
00294     for (Int_t ch = 0; ch < MPOD00CHA; ch++) {
00295       obname.Form("EPICS_MS/MS_Mpod00/Slot%02i/00Slot%02iChannel%02i_U",sl,sl,ch);
00296       obtitle.Form("Mpod00 Slot%02i Channel%02i Voltage",sl,ch);
00297       fEpicsMSMpod00_Monitor_U[sl][ch] = MakeTH1('D',obname,obtitle,timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00298       obname.Form("EPICS_MS/MS_Mpod00/Slot%02i/00Slot%02iChannel%02i_I",sl,sl,ch);
00299       obtitle.Form("Mpod00 Slot%02i Channel%02i Current",sl,ch);
00300       fEpicsMSMpod00_Monitor_I[sl][ch] = MakeTH1('D',obname,obtitle,timeMemory,-timeMemory,0,"relative event id","LV current [A]");  // LV
00301     }
00302   }
00303   
00304   for (Int_t sl = 0; sl < MPOD01SLOT; sl++) {
00305     for (Int_t ch = 0; ch < MPOD01CHA; ch++) {
00306       obname.Form("EPICS_MS/MS_Mpod01/Slot%02i/01Slot%02iChannel%02i_U",sl,sl,ch);
00307       obtitle.Form("Mpod01 Slot%02i Channel%02i Voltage",sl,ch);
00308       fEpicsMSMpod01_Monitor_U[sl][ch] = MakeTH1('D',obname,obtitle,timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00309       obname.Form("EPICS_MS/MS_Mpod01/Slot%02i/01Slot%02iChannel%02i_I",sl,sl,ch);
00310       obtitle.Form("Mpod01 Slot%02i Channel%02i Current",sl,ch);
00311       fEpicsMSMpod01_Monitor_I[sl][ch] = MakeTH1('D',obname,obtitle,timeMemory,-timeMemory,0,"relative event id","HV current [nA]");  // HV
00312     }
00313   }
00314   
00315   obname.Form("MuensterFrankfurt/Spadic_S2Ncnt");
00316   obtitle.Form("Spadic S/N counter of good events");
00317   fSpadic_S2Ncnt = MakeTH1('D', obname.Data(), obtitle.Data(), MAX_SPADIC, 0.5, MAX_SPADIC+0.5,"Susibo ID", "S/N counter");
00318 
00319   obname.Form("MuensterFrankfurt/Spadic_S2N");
00320   obtitle.Form("Spadic S/N");
00321   fSpadic_S2N = MakeTH1('D', obname.Data(), obtitle.Data(), MAX_SPADIC, 0.5, MAX_SPADIC+0.5,"Susibo ID", "S/N");
00322   for (UInt_t sid = 1; sid < MAX_SPADIC; sid++)
00323     fSpadic_S2N->GetXaxis()->SetBinLabel(sid, SuDeId[sid].Data());
00324 
00325   obname.Form("MuensterFrankfurt/Spadic_S2Nclean");
00326   obtitle.Form("Spadic S/N after data cleaning");
00327   fSpadic_S2Ncleaned = MakeTH1('D', obname.Data(), obtitle.Data(), MAX_SPADIC, 0.5, MAX_SPADIC+0.5,"Susibo ID", "S/N");
00328   for (UInt_t sid = 1; sid < MAX_SPADIC; sid++)
00329     fSpadic_S2Ncleaned->GetXaxis()->SetBinLabel(sid, SuDeId[sid].Data());
00330 
00331   for (int i = 1; i < RICHNUM; ++i) {
00332     obname.Form("EPICS_MS/MAPMT%02d_U",i);
00333     obtitle.Form("MAPMT%02d_U",i);
00334     fEpics_RichU[i] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00335     obname.Form("EPICS_MS/MAPMT%02d_I",i);
00336     obtitle.Form("MAPMT%02d_I",i);
00337     fEpics_RichI[i] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","current [nA]");
00338   }
00339 
00340   for (int mst = 1; mst < MSTRDNUM; ++mst) {
00341     obname.Form("EPICS_MS/%s_AnodeU",MsId[mst].Data());
00342     obtitle.Form("MS%s_AnodeU",MsId[mst].Data());
00343     fEpicsMSTRD_AnodeU[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","anode voltage [V]");
00344     obname.Form("EPICS_MS/%s_AnodeI",MsId[mst].Data());
00345     obtitle.Form("MS%s_AnodeI",MsId[mst].Data());
00346     fEpicsMSTRD_AnodeI[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","anode current [nA]");
00347     obname.Form("EPICS_MS/%s_DriftU",MsId[mst].Data());
00348     obtitle.Form("MS%s_DriftU",MsId[mst].Data());
00349     fEpicsMSTRD_DriftU[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","drift voltage [V]");
00350     obname.Form("EPICS_MS/%s_DriftI",MsId[mst].Data());
00351     obtitle.Form("MS%s_DriftI",MsId[mst].Data());
00352     fEpicsMSTRD_DriftI[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","drift current [nA]");
00353     obname.Form("EPICS_MS/%s_SusiboU",MsId[mst].Data());
00354     obtitle.Form("MS%s_SusiboU",MsId[mst].Data());
00355     fEpicsMSTRD_SusU[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00356     obname.Form("EPICS_MS/%s_SusiboI",MsId[mst].Data());
00357     obtitle.Form("MS%s_SusiboI",MsId[mst].Data());
00358     fEpicsMSTRD_SusI[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","current [A]");
00359     obname.Form("EPICS_MS/%s_SpadicU",MsId[mst].Data());
00360     obtitle.Form("MS%s_SpadicU",MsId[mst].Data());
00361     fEpicsMSTRD_SpaU[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","voltage [V]");
00362     obname.Form("EPICS_MS/%s_SpadicI",MsId[mst].Data());
00363     obtitle.Form("MS%s_SpadicI",MsId[mst].Data());
00364     fEpicsMSTRD_SpaI[mst] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","current [A]");
00365   }
00366   for (Int_t i = 0; i < MPOD01SLOT; i++) {
00367     obname.Form("EPICS_MS/T%d",i);
00368     obtitle.Form("MST%d",i);
00369     fEpicsMSTRD_T[i] = MakeTH1('D', obname.Data(), obtitle.Data(), timeMemory,-timeMemory,0,"relative event id","drift module temperatur [°C]");
00370   }
00371 
00372   obname.Form("MuensterFrankfurt/Spadic_TriggerEfficiency");
00373   obtitle.Form("number of good events after all cuts");
00374   fSpadic_efficiency = MakeTH1('I', obname.Data(), obtitle.Data(), MAX_SPADIC, -0.5, MAX_SPADIC-0.5,  "SuID", "good events after all cuts");
00375   fSpadic_efficiency->GetXaxis()->SetBinLabel( 1,"all");
00376 
00377   obname.Form("MuensterFrankfurt/Alignment/Alignment_x_FiberHod1_Alignment_x_FiberHod2");
00378   obtitle.Form("x Alignment fiber hodoscope 1 to fiber hodoscope 2");
00379   fFiberHod1_2_x_alignment = MakeTH2('I', obname.Data(), obtitle.Data(), 70, -35, 35, 70, -35, 35,"x pos. Fiber Hodoscope 1","x pos. Fiber Hodoscope 2");
00380   fFiberHod1_2_x_alignment->SetContour(99);
00381 
00382   obname.Form("MuensterFrankfurt/Alignment/Alignment_y_FiberHod1_Alignment_y_FiberHod2");
00383   obtitle.Form("y Alignment fiber hodoscope 1 to fiber hodoscope 2");
00384   fFiberHod1_2_y_alignment = MakeTH2('I', obname.Data(), obtitle.Data(), 70, -35, 35, 70, -35, 35,"y pos. Fiber Hodoscope 1","y pos. Fiber Hodoscope 2");
00385   fFiberHod1_2_y_alignment->SetContour(99);
00386 
00387   obname.Form("MuensterFrankfurt/Alignment/Alignment_FiberHod_dx_vs_x");
00388   obtitle.Form("Alignment fiber hodoscope 2-1 dx vs fiber hodoscope 1 x");
00389   fFiberHod1_2_dx_vs_x_alignment = MakeTH2('I', obname.Data(), obtitle.Data(), 70, -35, 35, 140, -70, 70,"x pos. Fiber Hodoscope 1","dx pos. Fiber Hodoscope 2-1");
00390   fFiberHod1_2_dx_vs_x_alignment->SetContour(99);
00391 
00392   obname.Form("MuensterFrankfurt/Alignment/Alignment_FiberHod_dy_vs_y");
00393   obtitle.Form("Alignment fiber hodoscope 2-1 dy vs fiber hodoscope 1 y");
00394   fFiberHod1_2_dy_vs_y_alignment = MakeTH2('I', obname.Data(), obtitle.Data(), 70, -35, 35, 140, -70, 70,"y pos. Fiber Hodoscope 1","dy pos. Fiber Hodoscope 2-1");
00395   fFiberHod1_2_dy_vs_y_alignment->SetContour(99);
00396 
00397   for (UInt_t sid = 1; sid < MAX_SPADIC; sid++) {
00398 
00399     if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
00400 
00401     obname.Form("pulseFit%d",sid);
00402     pulseFit[sid] = new TF1(obname.Data(),"([0] / pow([1], 2)) * (x - [2]) * exp( -1.0 * (x - [2]) / [1]) + [3]",5,45);
00403     pulseFit[sid]->SetParName(0,"Gain");
00404     pulseFit[sid]->SetParName(1,"Time");
00405     pulseFit[sid]->SetParName(2,"Delay");
00406     pulseFit[sid]->SetParName(3,"Baseline");
00407     pulseFit[sid]->SetLineStyle(2);
00408     pulseFit[sid]->SetLineColor(1);
00409     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_gainConstantFit", sid, sid);
00410     obtitle.Form("gainConstant of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00411     fSpadic_gainConstantFit[sid] = MakeTH1('I', obname.Data(), obtitle.Data(), 501,-10,5000,  "gain", "#");
00412 
00413     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_timeConstantFit", sid, sid);
00414     obtitle.Form("timeConstant of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00415     fSpadic_timeConstantFit[sid] = MakeTH1('I', obname.Data(), obtitle.Data(), 500,0.05,0.15,  "time constant", "#");
00416 
00417     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_delayFit", sid, sid);
00418     obtitle.Form("delay of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00419     fSpadic_delayFit[sid] = MakeTH1('I', obname.Data(), obtitle.Data(), 450,0,45,  "delay", "#");
00420 
00421     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_baselineFit", sid, sid);
00422     obtitle.Form("baseline of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00423     fSpadic_baselineFit[sid] = MakeTH1('I', obname.Data(), obtitle.Data(), 600,-10,50,  "baseline", "#");
00424 
00425     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_chiSquareFit", sid, sid);
00426     obtitle.Form("chiSquare of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00427     fSpadic_chiSquareFit[sid] = MakeTH1('I', obname.Data(), obtitle.Data(), 160,-10,150,  "chiSquare/NDF", "#");
00428 
00429     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Clustersize", sid, sid);
00430     obtitle.Form("Clustersize of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00431     fSpadic_Clustersize[sid] = MakeTH1('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA+1, -0.5, NUM_SPADIC_CHA+0.5,  "Cluster size [channels]", "#");
00432 
00433     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_FingerCorr", sid, sid);
00434     obtitle.Form("correlation with finger sintilator spadic %d MF (%s)", sid, SuDeId[sid].Data());
00435     fSpadic_FingerCorr[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5,4,-0.5,3.5, "Spadic Channel Number", "Finger Sint. Channel Number");
00436     fSpadic_FingerCorr[sid]->SetContour(99); 
00437 
00438     obname.Form("%d (%s)",sid, SuDeId[sid].Data());
00439     fSpadic_efficiency->GetXaxis()->SetBinLabel(1+sid, obname.Data());
00440       
00441     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_NoiseDistMF", sid, sid);
00442     obtitle.Form("RMS of ADC distribution of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00443     fSpadic_NoiseDistMF[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5,  "Channel Number", "RMS of ADC distribution [ADC values]");
00444 
00445     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_NoiseDist2DMF", sid, sid);
00446     obtitle.Form("RMS of ADC distribution of spadic %d 2D MF (%s)", sid, SuDeId[sid].Data());
00447     fSpadic_NoiseDist2DMF[sid] = MakeTH2('D', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5, 305, -50, 255,  "Channel Number", "RMS of ADC distribution [ADC values]");
00448     fSpadic_NoiseDist2DMF[sid]->SetContour(99);  
00449        
00450     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_PedelPosMF", sid, sid);
00451     obtitle.Form("Pedestal (Mean of ADC value distribution) of Spadic %d MF (%s)", sid, SuDeId[sid].Data());
00452     fSpadic_PedelPosMF[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5,  "Channel Number", "Mean of ADC distribution [ADC values]");
00453 
00454     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_PedelPos2DMF", sid, sid);
00455     obtitle.Form("Pedestal (Mean of ADC value distribution) of Spadic %d 2D MF (%s)", sid, SuDeId[sid].Data());
00456     fSpadic_PedelPos2DMF[sid] = MakeTH2('D', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5, 305, -50, 255,  "Channel Number", "Mean of ADC distribution [ADC values]");
00457     fSpadic_PedelPos2DMF[sid]->SetContour(99); 
00458     
00459     for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
00460       obname.Form("MuensterFrankfurt/Spadic_%d/Channel%d/Spadic%d_ch%d_CorrMatrixMF", sid, ch, sid, ch);
00461       obtitle.Form("Correlation Matrix value distribution %2d  %2d MF (%s)", sid, ch, SuDeId[sid].Data());
00462       fSpadic_CorrMatrix[sid][ch] = MakeTH1('I', obname.Data(), obtitle.Data(), 600, -0.1, 0.2, "Correlation", "Counts");
00463 
00464       obname.Form("MuensterFrankfurt/Spadic_%d/Channel%d/Spadic%d_ch%d_CorrMatrix_hitTimeMF", sid, ch, sid, ch);
00465       obtitle.Form("Correlation Matrix value distribution vs. hit time %2d  %2d MF (%s)", sid, ch, SuDeId[sid].Data());
00466       fSpadic_CorrMatrix_hitTime[sid][ch] = MakeTH2('I', obname.Data(), obtitle.Data(), 600, -0.1, 0.2, SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, "Correlation", "hit time [time bin]");
00467 
00468       obname.Form("MuensterFrankfurt/Spadic_%d/Channel%d/Spadic%d_ch%d_CorrMatrix_maxAmplMF", sid, ch, sid, ch);
00469       obtitle.Form("Correlation Matrix value distribution vs. max. amplitude %2d  %2d MF (%s)", sid, ch, SuDeId[sid].Data());
00470       fSpadic_CorrMatrix_maxAmpl[sid][ch] = MakeTH2('I', obname.Data(), obtitle.Data(), 600, -0.1, 0.2, 266,-10,256, "Correlation", "max. amplitude [ADCs]");
00471 
00472       obname.Form("Spadic_%d/Channel%d/Spadic%d_ch%d_ADCdistMF", sid, ch, sid, ch);
00473       obtitle.Form("ADC value distribution %2d  %2d MF (%s)", sid, ch, SuDeId[sid].Data());
00474       fSpadic_ADCdistMF[sid][ch] = MakeTH1('I', obname.Data(), obtitle.Data(), 256, -256/2, 256/2, "ADC value", "Counts");
00475     }
00476     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_SHAPE_pi2D", sid, sid);
00477     obtitle.Form("Average pulse shape of spadic %d (pion) 2D (%s)", sid, SuDeId[sid].Data());
00478     fSpadic_pi_shape2D[sid] = MakeTH2('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, 300, -44, 255);
00479     fSpadic_pi_shape2D[sid]->SetContour(99); 
00480 
00481     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_SHAPE_pi", sid, sid);
00482     obtitle.Form("Average pulse shape of spadic %d (pion) (%s)", sid, SuDeId[sid].Data());
00483     fSpadic_pi_shape[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE);
00484 
00485     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_SHAPEcnt_pi", sid, sid);
00486     obtitle.Form("Counts for average pulse shape of spadic %d (pion) (%s)", sid, SuDeId[sid].Data());
00487     fSpadic_pi_shapecnt[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE);
00488 
00489     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_SHAPE_el2D", sid, sid);
00490     obtitle.Form("Average pulse shape of spadic %d (electron) 2D (%s)", sid, SuDeId[sid].Data());
00491     fSpadic_el_shape2D[sid] = MakeTH2('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, 300, -44, 255);
00492     fSpadic_el_shape2D[sid]->SetContour(99); 
00493 
00494     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_SHAPE_el", sid, sid);
00495     obtitle.Form("Average pulse shape of spadic %d (electron) (%s)", sid, SuDeId[sid].Data());
00496     fSpadic_el_shape[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE);
00497 
00498     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_SHAPEcnt_el", sid, sid);
00499     obtitle.Form("Counts for average pulse shape of spadic %d (electron) (%s)", sid, SuDeId[sid].Data());
00500     fSpadic_el_shapecnt[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE);      
00501   
00502     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_PID", sid, sid);
00503     obtitle.Form("Spadic %d Particle ID (%s)", sid, SuDeId[sid].Data());
00504     fSpadic_pid[sid] = MakeTH1('I', obname.Data(), obtitle.Data(),4,-0.5,3.5);
00505     fSpadic_pid[sid]->GetXaxis()->SetBinLabel( 1,"all");
00506     fSpadic_pid[sid]->GetXaxis()->SetBinLabel( 2,"no PID");
00507     fSpadic_pid[sid]->GetXaxis()->SetBinLabel( 3,"electron");
00508     fSpadic_pid[sid]->GetXaxis()->SetBinLabel( 4,"pion");
00509 
00510     S2N[sid] = new TLatex(0.1,0.8,"S/N=xy");
00511     S2N[sid]->SetTextAlign(12);
00512     S2N[sid]->SetTextSize(0.04);
00513     S2N[sid]->SetNDC();
00514     S2N[sid]->SetName(Form("S2N%dLatex",sid));
00515     if (sid == 10) {
00516       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_00", sid, sid);
00517       obtitle.Form("Spadic %d intensity (%s) 00", sid, SuDeId[sid].Data());
00518       fSpadic_intens_el_00 = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00519       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_10", sid, sid);
00520       obtitle.Form("Spadic %d intensity (%s) 10", sid, SuDeId[sid].Data());
00521       fSpadic_intens_el_10 = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00522       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_01", sid, sid);
00523       obtitle.Form("Spadic %d intensity (%s) 01", sid, SuDeId[sid].Data());
00524       fSpadic_intens_el_01 = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00525       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_11", sid, sid);
00526       obtitle.Form("Spadic %d intensity (%s) 11", sid, SuDeId[sid].Data());
00527       fSpadic_intens_el_11 = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00528 
00529       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_left", sid, sid);
00530       obtitle.Form("Spadic %d intensity (%s)", sid, SuDeId[sid].Data());
00531       fSpadic_intens_el_left = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00532       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_right", sid, sid);
00533       obtitle.Form("Spadic %d intensity (%s)", sid, SuDeId[sid].Data());
00534       fSpadic_intens_el_right = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00535 
00536     }
00537     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens", sid, sid);
00538     obtitle.Form("Spadic %d intensity (%s)", sid, SuDeId[sid].Data());
00539     fSpadic_intens[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00540 
00541     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens3pad", sid, sid);
00542     obtitle.Form("Spadic %d intensity 3 pad cluster (%s)", sid, SuDeId[sid].Data());
00543     fSpadic_intens_3pad[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6);
00544 
00545     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_pi", sid, sid);
00546     obtitle.Form("Spadic %d intensity (pion) (%s)", sid, SuDeId[sid].Data());
00547     fSpadic_pi_intens[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6); 
00548 
00549     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_pi_over", sid, sid);
00550     obtitle.Form("Spadic %d intensity (pion) (%s) overflow", sid, SuDeId[sid].Data());
00551     fSpadic_pi_intens_over[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6); 
00552 
00553     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_pi_under", sid, sid);
00554     obtitle.Form("Spadic %d intensity (pion) (%s) underflow", sid, SuDeId[sid].Data());
00555     fSpadic_pi_intens_under[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6); 
00556 
00557     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el", sid, sid);
00558     obtitle.Form("Spadic %d intensity (electron) (%s)", sid, SuDeId[sid].Data());
00559     fSpadic_el_intens[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6); 
00560 
00561     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_over", sid, sid);
00562     obtitle.Form("Spadic %d intensity (electron) (%s) overflow", sid, SuDeId[sid].Data());
00563     fSpadic_el_intens_over[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6); 
00564 
00565     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Intens_el_under", sid, sid);
00566     obtitle.Form("Spadic %d intensity (electron) (%s) underflow", sid, SuDeId[sid].Data());
00567     fSpadic_el_intens_under[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 300, 0, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE / 6); 
00568 
00569     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_PadMax", sid, sid);
00570     obtitle.Form("Spadic %d pad with maximum charge (%s)", sid, SuDeId[sid].Data());
00571     fSpadic_padMax[sid] = MakeTH1('D', obname.Data(), obtitle.Data(),NUM_SPADIC_CHA, 0, NUM_SPADIC_CHA); 
00572 
00573     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_RecoPos", sid, sid);
00574     obtitle.Form("Spadic %d reco. position (%s)", sid, SuDeId[sid].Data());
00575     fSpadic_recoPos[sid] = MakeTH1('D', obname.Data(), obtitle.Data(),NUM_SPADIC_CHA * fPar->fPadwidth[sid], 0, NUM_SPADIC_CHA * fPar->fPadwidth[sid]); 
00576 
00577 
00578     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_Statistics", sid, sid);
00579     obtitle.Form("Spadic %d statistics (%s)", sid, SuDeId[sid].Data());           
00580     fSpadic_statistics[sid] = MakeTH1('D', obname.Data(), obtitle.Data(), 15, -0.5, 14.5); 
00581     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 1,"all events");
00582     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 2,"noise");
00583     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 3,"above threshold");
00584     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 4,"in time window");
00585     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 5,"above intens");
00586     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 6,"wright pad max");
00587     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 7,"no overflow");
00588     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 8,"no undershoot");
00589     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 9,"not a border pad");
00590     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 10,"not multi hit");
00591     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 11,"good");
00592     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel(12,"pion");
00593     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel(13,"electron");
00594     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel(14,"no ID");
00595    
00596     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_PRFMF", sid, sid);
00597     obtitle.Form("PRF of spadic %d MF (%s)", sid, SuDeId[sid].Data());
00598     fSpadic_PRFMF[sid] = MakeTH2('D', obname.Data(), obtitle.Data(), 400, -1.5, 1.5, 100, 0, 1);
00599     fSpadic_PRFMF[sid]->SetContour(99); 
00600 
00601     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_maxAmplitude", sid, sid);
00602     obtitle.Form("Spadic %d amplitude of signal with maximum charge (%s)", sid, SuDeId[sid].Data());
00603     fSpadic_maxAmplitude[sid] = MakeTH1('D', obname.Data(), obtitle.Data(),300, -44, 256); 
00604 
00605     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_el_maxAmplitude", sid, sid);
00606     obtitle.Form("Spadic %d electron amplitude of signal with maximum charge (%s)", sid, SuDeId[sid].Data());
00607     fSpadic_el_maxAmplitude[sid] = MakeTH1('D', obname.Data(), obtitle.Data(),300, -44, 256); 
00608 
00609     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_pi_maxAmplitude", sid, sid);
00610     obtitle.Form("Spadic %d pion amplitude of signal with maximum charge (%s)", sid, SuDeId[sid].Data());
00611     fSpadic_pi_maxAmplitude[sid] = MakeTH1('D', obname.Data(), obtitle.Data(),300, -44, 256); 
00612 
00613     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime", sid, sid);
00614     obtitle.Form("Spadic %d hit time of signal with maximum charge (%s)", sid, SuDeId[sid].Data());
00615     fSpadic_hitTime[sid] = MakeTH1('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE); 
00616 
00617     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_el_hitTime", sid, sid);
00618     obtitle.Form("Spadic %d electron hit time of signal with maximum charge (%s)", sid, SuDeId[sid].Data());
00619     fSpadic_el_hitTime[sid] = MakeTH1('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE);
00620  
00621     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_pi_hitTime", sid, sid);
00622     obtitle.Form("Spadic %d pion hit time of signal with maximum charge (%s)", sid, SuDeId[sid].Data());
00623     fSpadic_pi_hitTime[sid] = MakeTH1('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE); 
00624 
00625     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime_maxAmplitude", sid, sid);
00626     obtitle.Form("Spadic %d hit time of signal with maximum charge vs. maximum amplitude(%s)", sid, SuDeId[sid].Data());
00627     fSpadic_hitTime_maxAmplitude[sid] = MakeTH2('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE,300, -44, 256,"hit time [time bin]","max. ampl. [ADC values]"); 
00628 
00629     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime_position", sid, sid);
00630     obtitle.Form("Spadic %d hit time of signal with maximum charge vs reco. position(%s)", sid, SuDeId[sid].Data());
00631     fSpadic_hitTime_position[sid] = MakeTH2('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE,NUM_SPADIC_CHA * fPar->fPadwidth[sid]*100, 0, NUM_SPADIC_CHA * fPar->fPadwidth[sid],"hit time [time bin]","reco. pos [mm]"); 
00632 
00633     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime_Hodo1Yposition", sid, sid);
00634     obtitle.Form("Spadic %d hit time of signal with maximum charge vs Hodo 1 y position(%s)", sid, SuDeId[sid].Data());
00635     fSpadic_hitTime_Hodo1Yposition[sid] = MakeTH2('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, 70, -35, 35,"hit time [time bin]","y pos. Fiber Hodoscope 1 [mm]");
00636 
00637     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime_Hodo2Yposition", sid, sid);
00638     obtitle.Form("Spadic %d hit time of signal with maximum charge vs Hodo 2 y position(%s)", sid, SuDeId[sid].Data());
00639     fSpadic_hitTime_Hodo2Yposition[sid] = MakeTH2('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, 70, -35, 35,"hit time [time bin]","y pos. Fiber Hodoscope 2 [mm]");
00640 
00641     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime_Hodo1Xposition", sid, sid);
00642     obtitle.Form("Spadic %d hit time of signal with maximum charge vs Hodo 1 x position(%s)", sid, SuDeId[sid].Data());
00643     fSpadic_hitTime_Hodo1Xposition[sid] = MakeTH2('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, 70, -35, 35,"hit time [time bin]","x pos. Fiber Hodoscope 1 [mm]");
00644 
00645     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_hitTime_Hodo2Xposition", sid, sid);
00646     obtitle.Form("Spadic %d hit time of signal with maximum charge vs Hodo 2 x position(%s)", sid, SuDeId[sid].Data());
00647     fSpadic_hitTime_Hodo2Xposition[sid] = MakeTH2('I', obname.Data(), obtitle.Data(),SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, 70, -35, 35,"hit time [time bin]","x pos. Fiber Hodoscope 2 [mm]");
00648 
00649     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_overflow_Hodo1position", sid, sid);
00650     obtitle.Form("Spadic %d hit time of signal with maximum charge vs Hodo 2 x position(%s)", sid, SuDeId[sid].Data());
00651     fSpadic_overflow_Hodo1position[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), 70, -35, 35, 70, -35, 35,"x pos. Fiber Hodoscope 1 [mm]","y pos. Fiber Hodoscope 1 [mm]");
00652 
00653     obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_overflow_Hodo2position", sid, sid);
00654     obtitle.Form("Spadic %d hit time of signal with maximum charge vs Hodo 2 x position(%s)", sid, SuDeId[sid].Data());
00655     fSpadic_overflow_Hodo2position[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), 70, -35, 35, 70, -35, 35,"x pos. Fiber Hodoscope 2 [mm]","y pos. Fiber Hodoscope 2 [mm]");
00656 
00657     //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00658     obname.Form("Spadic%d/Spadic%d_minAmplitudeGate", sid, sid);
00659     obtitle.Form("minimum amplitude gate %d (%s)", sid, SuDeId[sid].Data());
00660     fSpadic_minAmplitudeCond[sid] = MakeWinCond(obname.Data(), 10, 255, fSpadic_maxAmplitude[sid]->GetName());
00661 
00662     obname.Form("Spadic%d/Spadic%d_minIntensityGate", sid, sid);
00663     obtitle.Form("minimum intensity gate %d (%s)", sid, SuDeId[sid].Data());
00664     fSpadic_minIntensCond[sid] = MakeWinCond(obname.Data(), 50, 255 * NUM_SPADIC_CHA * SPADIC_TRACE_SIZE, fSpadic_intens[sid]->GetName());
00665 
00666     obname.Form("Spadic%d/Spadic%d_hitTimeGate", sid, sid);
00667     obtitle.Form("hit time gate %d (%s)", sid, SuDeId[sid].Data());
00668     fSpadic_hitTimeCond[sid] = MakeWinCond(obname.Data(), 12, 25, fSpadic_hitTime[sid]->GetName());
00669 
00670     obname.Form("Spadic%d/Spadic%d_integWindow", sid, sid);
00671     obtitle.Form("integration window %d (%s)", sid, SuDeId[sid].Data());
00672     fSpadic_integWindow[sid] = MakeWinCond(obname.Data(), 0, SPADIC_TRACE_SIZE, fSpadic_el_shape[sid]->GetName());
00673 
00674     obname.Form("Spadic%d/Spadic%d_padMaxWindow", sid, sid);
00675     obtitle.Form("used pad max %d (%s)", sid, SuDeId[sid].Data());
00676     fSpadic_padMaxWindow[sid] = MakeWinCond(obname.Data(), 1, NUM_SPADIC_CHA-1, fSpadic_padMax[sid]->GetName());
00677 
00678     for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
00679       obname.Form("Spadic%d/Channel%d/Spadic%d_ch%d_CorrMatrixWindowMF", sid, ch, sid, ch);
00680       obtitle.Form("used correlation to separate signal from noise ch %d SUSIBO %d (%s)", ch, sid, SuDeId[sid].Data());
00681       fSpadic_corrMatrixWindow[sid][ch] = MakeWinCond(obname.Data(), minCorrMatrix[sid][ch], 1.0, fSpadic_CorrMatrix[sid][ch]->GetName());
00682     }
00683     //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00684 
00685     for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
00686       // trace histogram:
00687       obname.Form("MuensterFrankfurt/Spadic_%d/Channel%d/Spadic%d_ch%d_input", sid, ch, sid, ch);
00688       obtitle.Form("MSFF Trace %2d  %2d (%s)", sid, ch, SuDeId[sid].Data());
00689       fSpadic_input[sid][ch] = MakeTH1('F', obname.Data(), obtitle.Data(),
00690                                        SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, "time (40ns)");
00691 
00692       obname.Form("MuensterFrankfurt/Spadic_%d/Channel%d/Spadic%d_ch%d_baseline", sid, ch, sid, ch);
00693       obtitle.Form("MSFF Trace %2d  %2d (%s)", sid, ch, SuDeId[sid].Data());
00694       fSpadic_baseline[sid][ch] = MakeTH1('F', obname.Data(), obtitle.Data(),
00695                                           SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, "time (40ns)");
00696 
00697       obname.Form("MuensterFrankfurt/Spadic_%d/Channel%d/Spadic%d_ch%d_output", sid, ch, sid, ch);
00698       obtitle.Form("MSFF Compensated %2d  %2d (%s)", sid, ch, SuDeId[sid].Data());
00699       fSpadic_output[sid][ch] = MakeTH1('F', obname.Data(), obtitle.Data(),
00700                                         SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, "time (40ns)");
00701     }
00702 
00703     obname.Form("MuensterFrankfurt/Alignment/Alignment_x_FiberHod1_Spadic%d", sid);
00704     obtitle.Form("x Alignment Spadic %d (%s) to fiber hodoscope 1", sid, SuDeId[sid].Data());
00705     //    fFiberHod1_x_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], -0.5 * fPar->fPadwidth[sid], (NUM_SPADIC_CHA-0.5) * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"x pos. Fiber Hodoscope 1");
00706     fFiberHod1_x_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], 0 * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"x pos. Fiber Hodoscope 1");
00707     fFiberHod1_x_alignment[sid]->SetContour(99);
00708 
00709     obname.Form("MuensterFrankfurt/Alignment/Alignment_y_FiberHod1_Spadic%d", sid);
00710     obtitle.Form("y Alignment Spadic %d (%s) to fiber hodoscope 1", sid, SuDeId[sid].Data());
00711     //    fFiberHod1_y_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], -0.5 * fPar->fPadwidth[sid], (NUM_SPADIC_CHA-0.5) * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"y pos. Fiber Hodoscope 1");
00712     fFiberHod1_y_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], 0 * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"y pos. Fiber Hodoscope 1");
00713     fFiberHod1_y_alignment[sid]->SetContour(99);
00714 
00715     obname.Form("MuensterFrankfurt/Alignment/Alignment_x_FiberHod2_Spadic%d", sid);
00716     obtitle.Form("x Alignment Spadic %d (%s) to fiber hodoscope 2", sid, SuDeId[sid].Data());
00717     //    fFiberHod2_x_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], -0.5 * fPar->fPadwidth[sid], (NUM_SPADIC_CHA-0.5) * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"x pos. Fiber Hodoscope 2");
00718     fFiberHod2_x_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], 0 * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"x pos. Fiber Hodoscope 2");
00719     fFiberHod2_x_alignment[sid]->SetContour(99);
00720 
00721     obname.Form("MuensterFrankfurt/Alignment/Alignment_y_FiberHod2_Spadic%d", sid);
00722     obtitle.Form("y Alignment Spadic %d (%s) to fiber hodoscope 2", sid, SuDeId[sid].Data());
00723     //    fFiberHod2_y_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], -0.5 * fPar->fPadwidth[sid], (NUM_SPADIC_CHA-0.5) * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"y pos. Fiber Hodoscope 2");
00724     fFiberHod2_y_alignment[sid] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], 0 * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid], 70, -35, 35, SuDeId[sid].Data(),"y pos. Fiber Hodoscope 2");
00725     fFiberHod2_y_alignment[sid]->SetContour(99);
00726 
00727   }
00728 
00729   Int_t i = 0;
00730   for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
00731     if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
00732     for (UInt_t sid2 = sid; sid2 < MAX_SPADIC; sid2++) {
00733       if (TSpadicEvent::ConfigSpadics[sid2] == 0) continue;
00734       obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", sid, sid2);
00735       obtitle.Form("Correlations Spadic %d (%s) Spadic %d (%s)", sid, SuDeId[sid].Data(), sid2, SuDeId[sid2].Data());
00736       fSpadic_correlation[i] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5, NUM_SPADIC_CHA, -0.5, NUM_SPADIC_CHA-0.5, SuDeId[sid].Data(), SuDeId[sid2]);
00737       fSpadic_correlation[i]->SetContour(99); 
00738 
00739       obname.Form("MuensterFrankfurt/Alignment/Alignment_Spadic%d_%d", sid, sid2);
00740       obtitle.Form("Alignment Spadic %d (%s) Spadic %d (%s)", sid, SuDeId[sid].Data(), sid2, SuDeId[sid2].Data());
00741       //      fSpadic_alignment[i] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], -0.5 * fPar->fPadwidth[sid], (NUM_SPADIC_CHA-0.5) * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid2], -0.5 * fPar->fPadwidth[sid2], (NUM_SPADIC_CHA-0.5) * fPar->fPadwidth[sid2], SuDeId[sid].Data(), SuDeId[sid2]);
00742       fSpadic_alignment[i] = MakeTH2('I', obname.Data(), obtitle.Data(), NUM_SPADIC_CHA * fPar->fPadwidth[sid], 0 * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid], NUM_SPADIC_CHA * fPar->fPadwidth[sid2], 0 * fPar->fPadwidth[sid2], NUM_SPADIC_CHA * fPar->fPadwidth[sid2], SuDeId[sid].Data(), SuDeId[sid2]);
00743       fSpadic_alignment[i]->SetContour(99); 
00744 
00745       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", sid, sid, sid2);
00746       obtitle.Form("Average pulse shape of spadic %d (pion) (%s)", sid, SuDeId[sid].Data());
00747       fSpadic_pi_shapeRatio[i] = MakeTH1('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, SuDeId[sid].Data(), SuDeId[sid2] );
00748 
00749       obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", sid, sid, sid2);
00750       obtitle.Form("Average pulse shape of spadic %d (electron) (%s)", sid, SuDeId[sid].Data());
00751       fSpadic_el_shapeRatio[i] = MakeTH1('D', obname.Data(), obtitle.Data(), SPADIC_TRACE_SIZE, 0, SPADIC_TRACE_SIZE, SuDeId[sid].Data(), SuDeId[sid2]);
00752 
00753       i++;
00754       //cout << i << " " << sid << " " << sid2 << endl;
00755     }
00756   }
00757 
00759   // TODO
00760   /*
00761     for (UInt_t sid = 0; sid < MAX_SPADICV10; sid++) {
00762     for (UInt_t ch = 0; ch < MAX_SPADICV10CHANNELS; ch++) {
00763     // JAM just an example trace histogram for each channel
00764     obname.Form("MuensterFrankfurt/SpadicV10_%d/Channel%d/Spadic%d_ch%d_input",
00765     sid, ch, sid, ch);
00766     obtitle.Form("MSFF V1.0 Trace %2d %2d", sid, ch);
00767     fSpadicV10_input[sid][ch] = MakeTH1('F', obname.Data(), obtitle.Data(),SPADICV10_TRACE_SIZE, 0, SPADICV10_TRACE_SIZE, "time (50ns)");
00768     }
00769     }
00770   */
00771 
00772 
00773   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  PICTURE
00774 
00775   if (GetPicture("SpadicFiberHod1XAlignment")==0) {
00776     TGo4Picture* pic = new TGo4Picture("SpadicFiberHod1XAlignment","Hodo 1 X");
00777     int numy = numy_2012;
00778     int numx = (USED_SPADIC_2012-1) / numy;
00779     if (numx*numy < (USED_SPADIC_2012 - 1))  numx++;
00780     pic->SetDivision(numy, numx);
00781       
00782     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00783       int nx = (uid-1) / numy;
00784       int ny = (uid-1) % numy;
00785       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00786       pic->Pic(ny, nx)->AddObject(fFiberHod1_x_alignment[SpaPosMap[uid]]);
00787     }
00788     AddPicture(pic,"MuensterFrankfurt");
00789   }
00790 
00791   if (GetPicture("SpadicFiberHod1YAlignment")==0) {
00792     TGo4Picture* pic = new TGo4Picture("SpadicFiberHod1YAlignment","Hodo 1 Y");
00793     int numy = numy_2012;
00794     int numx = (USED_SPADIC_2012-1) / numy;
00795     if (numx*numy < (USED_SPADIC_2012 - 1)) 
00796       numx++;
00797     pic->SetDivision(numy, numx);
00798       
00799     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00800       int nx = (uid-1) / numy;
00801       int ny = (uid-1) % numy;
00802       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00803       pic->Pic(ny, nx)->AddObject(fFiberHod1_y_alignment[SpaPosMap[uid]]);
00804     }
00805     AddPicture(pic,"MuensterFrankfurt");
00806   }
00807 
00808   if (GetPicture("SpadicFiberHod2XAlignment")==0) {
00809     TGo4Picture* pic = new TGo4Picture("SpadicFiberHod2XAlignment","Hodo 2 X");
00810     int numy = numy_2012;
00811     int numx = (USED_SPADIC_2012-1) / numy;
00812     if (numx*numy < (USED_SPADIC_2012 - 1))  numx++;
00813     pic->SetDivision(numy, numx);
00814       
00815     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00816       int nx = (uid-1) / numy;
00817       int ny = (uid-1) % numy;
00818       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00819       pic->Pic(ny, nx)->AddObject(fFiberHod2_x_alignment[SpaPosMap[uid]]);
00820     }
00821     AddPicture(pic,"MuensterFrankfurt");
00822   }
00823 
00824   if (GetPicture("SpadicFiberHod2YAlignment")==0) {
00825     TGo4Picture* pic = new TGo4Picture("SpadicFiberHod2YAlignment","Hodo 2 Y");
00826     int numy = numy_2012;
00827     int numx = (USED_SPADIC_2012-1) / numy;
00828     if (numx*numy < (USED_SPADIC_2012 - 1)) 
00829       numx++;
00830     pic->SetDivision(numy, numx);
00831       
00832     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00833       int nx = (uid-1) / numy;
00834       int ny = (uid-1) % numy;
00835       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00836       pic->Pic(ny, nx)->AddObject(fFiberHod2_y_alignment[SpaPosMap[uid]]);
00837     }
00838     AddPicture(pic,"MuensterFrankfurt");
00839   }
00840 
00841   if (GetPicture("SpadicOverflowVsHodoposition")==0) {
00842     TGo4Picture* pic = new TGo4Picture("SpadicOverflowVsHodoposition","Gain vs. position");
00843     pic->SetDivision(4, 2);
00844     if (TSpadicEvent::ConfigSpadics[11] != 0){
00845       pic->Pic(0, 0)->AddObject(fSpadic_overflow_Hodo1position[11]);
00846       pic->Pic(0, 1)->AddObject(fSpadic_overflow_Hodo2position[11]);
00847     }
00848     if (TSpadicEvent::ConfigSpadics[10] != 0){
00849       pic->Pic(1, 0)->AddObject(fSpadic_overflow_Hodo1position[10]);
00850       pic->Pic(1, 1)->AddObject(fSpadic_overflow_Hodo2position[10]);
00851     }
00852     if (TSpadicEvent::ConfigSpadics[5] != 0){
00853       pic->Pic(2, 0)->AddObject(fSpadic_overflow_Hodo1position[5]);
00854       pic->Pic(2, 1)->AddObject(fSpadic_overflow_Hodo2position[5]);
00855     }
00856     if (TSpadicEvent::ConfigSpadics[19] != 0){
00857       pic->Pic(3, 0)->AddObject(fSpadic_overflow_Hodo1position[19]);
00858       pic->Pic(3, 1)->AddObject(fSpadic_overflow_Hodo2position[19]);
00859     }
00860     /*
00861       int numy = numy_2012;
00862       int numx = 2;
00863       pic->SetDivision(numy, numx);
00864       
00865       for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00866       //int nx = (uid-1) / numy;
00867       int ny = (uid-1);// % numy;
00868       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00869       pic->Pic(ny, 0)->AddObject(fSpadic_overflow_Hodo1position[SpaPosMap[uid]]);
00870       pic->Pic(ny, 1)->AddObject(fSpadic_overflow_Hodo2position[SpaPosMap[uid]]);
00871       }
00872     */
00873     AddPicture(pic,"MuensterFrankfurt");
00874   }
00875 
00876   if (GetPicture("SpadicHitPlane")==0) {
00877     TGo4Picture* pic = new TGo4Picture("SpadicHitPlane","Spadic Hit Plane");
00878     pic->SetDivision(2,2);
00879     pic->Pic(0, 0)->AddObject(fSpadic_MSxyHitPadplane[0]);
00880     pic->Pic(0, 1)->AddObject(fSpadic_MSxyHitPadplane[1]);
00881     pic->Pic(1, 0)->AddObject(fSpadic_MSxyHitplane[0]);
00882     pic->Pic(1, 0)->SetLogScale(2,1);
00883     pic->Pic(1, 1)->AddObject(fSpadic_MSxyHitplane[1]);
00884     pic->Pic(1, 0)->SetLogScale(2,1);
00885     AddPicture(pic,"MuensterFrankfurt/2011");
00886   }
00887 
00888   if (GetPicture("MS3Summary")==0) {
00889     TGo4Picture* pic = new TGo4Picture("MS3Summary"," ");
00890     int numy = 4;
00891     int numx = 3;//4;//8;
00892     pic->SetDivision(numy, numx);
00893     int nx = 0;//(sid-1);
00894     for (UInt_t sid = 1; sid < 4; sid++) {     
00895       int ny = 0;
00896       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
00897       pic->Pic(ny, nx)->SetRangeY(-20, 255);
00898       pic->Pic(ny, nx)->AddObject(fSpadic_pi_shape[SpMap[sid]]);
00899       pic->Pic(ny, nx)->AddObject(fSpadic_el_shape[SpMap[sid]]);
00900 
00901       ny = 1;
00902       //pic->Pic(ny, nx)->SetAutoScale(kFALSE);
00903       pic->Pic(ny, nx)->SetRangeY(-20, 255);
00904       pic->Pic(ny, nx)->SetLogScale(2,1);
00905       pic->Pic(ny, nx)->AddObject(fSpadic_pi_shape2D[SpMap[sid]]);
00906 
00907       ny = 2;
00908       //pic->Pic(ny, nx)->SetAutoScale(kFALSE);
00909       pic->Pic(ny, nx)->SetRangeY(-20, 255);
00910       pic->Pic(ny, nx)->SetLogScale(2,1);
00911       pic->Pic(ny, nx)->AddObject(fSpadic_el_shape2D[SpMap[sid]]);
00912 
00913       ny = 3;
00914       pic->Pic(ny, nx)->AddObject(fSpadic_intens[SpMap[sid]]);
00915       //pic->Pic(ny, nx)->AddObject(fSpadic_intens_3pad[SpMap[sid]]);
00916       pic->Pic(ny, nx)->AddObject(fSpadic_el_intens[SpMap[sid]]);
00917       pic->Pic(ny, nx)->AddObject(fSpadic_pi_intens[SpMap[sid]]);
00918 
00919       nx++;
00920     }
00921     AddPicture(pic,"MuensterFrankfurt/2012");
00922   }
00923 
00924   if (GetPicture("SpadicSignal2Noise")==0) {
00925     TGo4Picture* pic = new TGo4Picture("SpadicSignal2Noise","Signal to Noise");
00926     pic->SetDivision(1,1);
00927     pic->Pic(0, 0)->SetAutoScale(kFALSE);
00928     pic->Pic(0, 0)->SetRangeY(1, 255./20.);
00929     pic->Pic(0, 0)->AddObject(fSpadic_S2N);
00930     AddPicture(pic,"MuensterFrankfurt/kaputt");
00931   }
00932 
00933   if (GetPicture("SpadicPID")==0) {
00934     TGo4Picture* pic = new TGo4Picture("SpadicPID", "Particle ID");
00935     int numy = numy_2012;
00936     int numx = (USED_SPADIC_2012-1) / numy;
00937     if (numx*numy < (USED_SPADIC_2012 - 1)) 
00938       numx++;
00939     pic->SetDivision(numy, numx);
00940       
00941     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00942       int nx = (uid-1) / numy;
00943       int ny = (uid-1) % numy;
00944 
00945       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
00946       pic->Pic(ny, nx)->SetRangeY(1, 25000);
00947       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00948       pic->Pic(ny, nx)->AddObject(fSpadic_pid[SpaPosMap[uid]]);
00949     }
00950     AddPicture(pic,"MuensterFrankfurt");
00951   }
00952   if (GetPicture("SpadicEfficiency")==0) {
00953     TGo4Picture* pic = new TGo4Picture("SpadicEfficiency", "Trigger Efficiency");         
00954     pic->Pic(0, 0)->AddObject(fSpadic_efficiency);    
00955     AddPicture(pic,"MuensterFrankfurt");
00956   }
00957   if (GetPicture("MFmaxAmplitude")==0) {
00958     TGo4Picture* pic = new TGo4Picture("MFmaxAmplitude","max. amplitude on pad max");
00959     int numy = numy_2012;
00960     int numx = (USED_SPADIC_2012-1) / numy;
00961     if (numx*numy < (USED_SPADIC_2012 - 1)) 
00962       numx++;
00963     pic->SetDivision(numy, numx);
00964       
00965     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00966       int nx = (uid-1) / numy;
00967       int ny = (uid-1) % numy;
00968       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00969       pic->Pic(ny, nx)->AddObject(fSpadic_maxAmplitude[SpaPosMap[uid]]);
00970       pic->Pic(ny, nx)->AddObject(fSpadic_el_maxAmplitude[SpaPosMap[uid]]);
00971       pic->Pic(ny, nx)->AddObject(fSpadic_pi_maxAmplitude[SpaPosMap[uid]]);
00972       pic->Pic(ny, nx)->AddCondition(fSpadic_minAmplitudeCond[SpaPosMap[uid]]);
00973     }
00974     AddPicture(pic,"MuensterFrankfurt");
00975   }
00976 
00977   if (GetPicture("MFhitTime")==0) {
00978     TGo4Picture* pic = new TGo4Picture("MFhitTime","hit time on pad max");
00979     int numy = numy_2012;
00980     int numx = (USED_SPADIC_2012-1) / numy;
00981     if (numx*numy < (USED_SPADIC_2012 - 1)) 
00982       numx++;
00983     pic->SetDivision(numy, numx);
00984       
00985     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
00986       int nx = (uid-1) / numy;
00987       int ny = (uid-1) % numy;
00988       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
00989       pic->Pic(ny, nx)->AddObject(fSpadic_hitTime[SpaPosMap[uid]]);
00990       pic->Pic(ny, nx)->AddObject(fSpadic_el_hitTime[SpaPosMap[uid]]);
00991       pic->Pic(ny, nx)->AddObject(fSpadic_pi_hitTime[SpaPosMap[uid]]);
00992       pic->Pic(ny, nx)->AddCondition(fSpadic_hitTimeCond[SpaPosMap[uid]]);
00993     }
00994     AddPicture(pic,"MuensterFrankfurt");
00995   }
00996 
00997   if (GetPicture("MFmaxIntensity")==0) {
00998     TGo4Picture* pic = new TGo4Picture("MFmaxIntensity","integrated intensity on 3 max pads");
00999     int numy = numy_2012;
01000     int numx = (USED_SPADIC_2012-1) / numy;
01001     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01002       numx++;
01003     pic->SetDivision(numy, numx);
01004       
01005     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01006       int nx = (uid-1) / numy;
01007       int ny = (uid-1) % numy;
01008       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01009       pic->Pic(ny, nx)->AddObject(fSpadic_intens[SpaPosMap[uid]]);
01010       pic->Pic(ny, nx)->AddCondition(fSpadic_minIntensCond[SpaPosMap[uid]]);
01011     }
01012     AddPicture(pic,"MuensterFrankfurt");
01013   }
01014 
01015 
01016   if (GetPicture("MFFingerCorr")==0) {
01017     TGo4Picture* pic = new TGo4Picture("MFFingerCorr","Correlation with Finger Sint.");
01018     int numy = numy_2012;
01019     int numx = (USED_SPADIC_2012-1) / numy;
01020     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01021       numx++;
01022     pic->SetDivision(numy, numx);
01023       
01024     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01025       int nx = (uid-1) / numy;
01026       int ny = (uid-1) % numy;
01027       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01028       pic->Pic(ny, nx)->AddObject(fSpadic_FingerCorr[SpaPosMap[uid]]);
01029     }
01030     AddPicture(pic,"MuensterFrankfurt/2011");
01031   }
01032 
01033   /*  
01034   // previously TSpadicProc.cxx 30.08.2011
01035 
01036   obname.Form("Traces_Spadic%d", sid);
01037   pSpadic_traces[sid] = GetPicture(obname.Data());
01038   if (pSpadic_traces[sid] == 0) {
01039   obtitle.Form("Pulse Traces of Spadic %d", sid);
01040   pSpadic_traces[sid] = new TGo4Picture(obname.Data(), obtitle.Data());
01041   pSpadic_traces[sid]->SetDivision(NUM_SPADIC_CHA / 4, 4);
01042 
01043   for (ch = 0; ch < NUM_SPADIC_CHA; ch++) {
01044   pSpadic_traces[sid]->Pic(ch / 4, ch % 4)->AddObject(fSpadic_input[sid][ch]);
01045   pSpadic_traces[sid]->Pic(ch / 4, ch % 4)->AddObject(fSpadic_trace_noisecorr[sid][ch]); 
01046   pSpadic_traces[sid]->Pic(ch / 4, ch % 4)->SetAutoScale(kFALSE);
01047   pSpadic_traces[sid]->Pic(ch / 4, ch % 4)->SetRangeY(-50, 255);
01048   }
01049          
01050   AddPicture(pSpadic_traces[sid]);
01051   }
01052   */
01053   /*
01054     if (GetPicture("")==0) {
01055     TGo4Picture* pic = new TGo4Picture("","");
01056     int numy = numy_2012;
01057     int numx = (MAX_SPADIC-1) / numy;
01058     if (numx*numy < (MAX_SPADIC - 1)) numx++;
01059     pic->SetDivision(numy, numx);
01060       
01061     for (UInt_t sid = 1; sid < MAX_SPADIC; sid++) {
01062     int nx = (sid-1) / numy;
01063     int ny = (sid-1) % numy;
01064     pic->Pic(ny, nx)->AddObject();
01065     }
01066     AddPicture(pic,"MuensterFrankfurt");
01067     }
01068   */
01069 
01070   if (GetPicture("MS4Summary")==0) {
01071     TGo4Picture* pic = new TGo4Picture("MS4Summary"," ");
01072     int numy = 4;
01073     int numx = 4;//8;
01074     pic->SetDivision(numy, numx);
01075     int nx = 0;//(sid-1);
01076     for (UInt_t sid = 1; sid < 9; sid++) {     
01077       int ny = 0;
01078       if (sid % 2 == 1)
01079         continue;
01080       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01081       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01082       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01083       pic->Pic(ny, nx)->AddObject(fSpadic_pi_shape[SpMap[sid]]);
01084       pic->Pic(ny, nx)->AddObject(fSpadic_el_shape[SpMap[sid]]);
01085       ny = 1;
01086       //pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01087       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01088       pic->Pic(ny, nx)->SetLogScale(2,1);
01089       pic->Pic(ny, nx)->AddObject(fSpadic_pi_shape2D[SpMap[sid]]);
01090       ny = 2;
01091       //pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01092       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01093       pic->Pic(ny, nx)->SetLogScale(2,1);
01094       pic->Pic(ny, nx)->AddObject(fSpadic_el_shape2D[SpMap[sid]]);
01095       ny = 3;
01096       pic->Pic(ny, nx)->AddObject(fSpadic_intens[SpMap[sid]]);
01097       pic->Pic(ny, nx)->AddObject(fSpadic_el_intens[SpMap[sid]]);
01098       pic->Pic(ny, nx)->AddObject(fSpadic_pi_intens[SpMap[sid]]);
01099       nx++;
01100     }
01101     AddPicture(pic,"MuensterFrankfurt/2011");
01102   }
01103 
01104   // reduced to 12
01105   if (GetPicture("MFShape")==0) {
01106     TGo4Picture* pic = new TGo4Picture("MFShape","Electron and Pion Pulse Shape");
01107     int numy = numy_2012;
01108     int numx = (USED_SPADIC_2012-1) / numy;
01109     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01110       numx++;
01111     pic->SetDivision(numy, numx);
01112       
01113     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01114       int nx = (uid-1) / numy;
01115       int ny = (uid-1) % numy;
01116 
01117       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01118       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01119       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01120       pic->Pic(ny, nx)->AddObject(fSpadic_pi_shape[SpaPosMap[uid]]);
01121       pic->Pic(ny, nx)->AddObject(fSpadic_el_shape[SpaPosMap[uid]]);
01122       pic->Pic(ny, nx)->AddObject( S2N[SpaPosMap[uid]]);
01123     }
01124     AddPicture(pic,"MuensterFrankfurt");
01125   }
01126 
01127   if (GetPicture("MFShapeRatio")==0) {
01128     const UInt_t first_MF_Spadic =  1;
01129     const UInt_t  last_MF_Spadic =  5;
01130     Int_t d_MF_Spadic = last_MF_Spadic - first_MF_Spadic + 1;
01131     TGo4Picture* pic = new TGo4Picture("MFShapeRatio", "MF Signal Shape Ratio");
01132     pic->SetDivision(d_MF_Spadic, d_MF_Spadic);
01133     //DEDE
01134     for (UInt_t sid = first_MF_Spadic; sid <= last_MF_Spadic; sid++) {
01135       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01136       for (UInt_t sid2 = sid; sid2 <= last_MF_Spadic; sid2++) {
01137         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01138         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->SetAutoScale(kFALSE);
01139         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->SetRangeY(-1, 3);
01140 
01141         if (SpMap[sid] <= SpMap[sid2])
01142           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", SpMap[sid], SpMap[sid], SpMap[sid2]);
01143         else
01144           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", SpMap[sid2], SpMap[sid2], SpMap[sid]);
01145         his=GetHistogram(obname.Data());
01146         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->AddObject(his);
01147         if (SpMap[sid] <= SpMap[sid2])
01148           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", SpMap[sid], SpMap[sid], SpMap[sid2]);
01149         else
01150           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", SpMap[sid2], SpMap[sid2], SpMap[sid]);
01151         his=GetHistogram(obname.Data());
01152 
01153         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->AddObject(his);
01154         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->AddObject(one);
01155         //cout << "  " << sid << " " << sid2 << endl;
01156       }
01157     }
01158     AddPicture(pic,"MuensterFrankfurt");
01159   }
01160 
01161   // reduced to 12
01162   if (GetPicture("MFShapeP2D")==0) {
01163     TGo4Picture* pic = new TGo4Picture("MFShapeP2D","Pion Pulse Shape 2D");
01164     int numy = numy_2012;
01165     int numx = (USED_SPADIC_2012-1) / numy;
01166     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01167       numx++;
01168     pic->SetDivision(numy, numx);
01169       
01170     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01171    
01172       int nx = (uid-1) / numy;
01173       int ny = (uid-1) % numy;
01174 
01175       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01176       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01177       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01178       pic->Pic(ny, nx)->AddObject(fSpadic_pi_shape2D[SpaPosMap[uid]]);
01179     }
01180     AddPicture(pic,"MuensterFrankfurt");
01181   }
01182 
01183   // reduced to 12
01184   if (GetPicture("MFShapeE2D")==0) {
01185     TGo4Picture* pic = new TGo4Picture("MFShapeE2D","Electron Pulse Shape 2D");
01186     int numy = numy_2012;
01187     int numx = (USED_SPADIC_2012-1) / numy;
01188     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01189       numx++;
01190     pic->SetDivision(numy, numx);
01191       
01192     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01193       int nx = (uid-1) / numy;
01194       int ny = (uid-1) % numy;
01195 
01196       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01197       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01198       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01199       pic->Pic(ny, nx)->AddObject(fSpadic_el_shape2D[SpaPosMap[uid]]);
01200     }
01201     AddPicture(pic,"MuensterFrankfurt");
01202   }
01203 
01204   // reduced to 12
01205   if (GetPicture("MFSpectrum")==0) {
01206     TGo4Picture* pic = new TGo4Picture("MFSpectrum","Integrated and Clustered Intens for Electrons and Pions");
01207     int numy = (USED_SPADIC_2012-1);
01208     int numx = 2;
01209     pic->SetDivision(numy, numx);
01210       
01211     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {   
01212       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01213       int nx = 0;
01214       int ny = (uid-1);
01215       //pic->Pic(ny, nx)->AddObject(fSpadic_intens   [SpaPosMap[uid]]);      
01216       pic->Pic(ny, nx)->AddObject(fSpadic_pi_intens[SpaPosMap[uid]]);
01217       pic->Pic(ny, nx)->AddObject(fSpadic_pi_intens_over[SpaPosMap[uid]]);
01218       pic->Pic(ny, nx)->AddObject(fSpadic_pi_intens_under[SpaPosMap[uid]]);
01219       nx = 1;
01220       ny = (uid-1);
01221       pic->Pic(ny, nx)->AddObject(fSpadic_el_intens[SpaPosMap[uid]]);
01222       pic->Pic(ny, nx)->AddObject(fSpadic_el_intens_over[SpaPosMap[uid]]);
01223       pic->Pic(ny, nx)->AddObject(fSpadic_el_intens_under[SpaPosMap[uid]]);
01224     }
01225     AddPicture(pic,"MuensterFrankfurt");
01226   }
01227 
01228   if (GetPicture("MFSpectrumComparison")==0) {
01229     TGo4Picture* pic = new TGo4Picture("MFSpectrumComparison","Integrated and Clustered Intens for Electrons and Pions Comparison");
01230     pic->SetDivision(1, 2);      
01231     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01232       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01233       pic->Pic(0, 0)->AddObject(fSpadic_el_intens[SpaPosMap[uid]]);
01234       pic->Pic(0, 1)->AddObject(fSpadic_pi_intens[SpaPosMap[uid]]);
01235     }
01236     AddPicture(pic,"MuensterFrankfurt");
01237   }
01238 
01239   // reduced to 12
01240   if (GetPicture("MFInputSpadics")==0) {
01241     TGo4Picture* pic = new TGo4Picture("MFInputSpadics", "Input: MSFF Superposition of all shapes");
01242     int numy = numy_2012;
01243     int numx = (USED_SPADIC_2012-1) / numy;
01244     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01245       numx++;
01246     pic->SetDivision(numy, numx);
01247       
01248     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01249       int nx = (uid-1) / numy;
01250       int ny = (uid-1) % numy;
01251          
01252       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01253       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01254       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01255       for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) 
01256         pic->Pic(ny, nx)->AddObject(fSpadic_input[SpaPosMap[uid]][ch]);
01257     }
01258     AddPicture(pic,"MuensterFrankfurt");
01259   }
01260    
01261   // reduced to 12
01262   if (GetPicture("MFOutputSpadics")==0) {
01263     TGo4Picture* pic = new TGo4Picture("MFOutputSpadics", "Output: MSFF Superposition of all shapes");
01264     int numy = numy_2012;
01265     int numx = (USED_SPADIC_2012-1) / numy;
01266     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01267       numx++;
01268     pic->SetDivision(numy, numx);
01269       
01270     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01271       int nx = (uid-1) / numy;
01272       int ny = (uid-1) % numy;
01273          
01274       pic->Pic(ny, nx)->SetAutoScale(kFALSE);
01275       pic->Pic(ny, nx)->SetRangeY(-20, 255);
01276       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01277       for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
01278         pic->Pic(ny, nx)->AddObject(fSpadic_output[SpaPosMap[uid]][ch]);
01279         //pic->Pic(ny, nx)->AddObject(pulseFit[SpaPosMap[uid]]);
01280       }
01281     }
01282     AddPicture(pic,"MuensterFrankfurt");
01283   }
01284 
01285   // reduced to 12
01286   if (GetPicture("MFSpadicPRF")==0) {
01287     TGo4Picture* pic = new TGo4Picture("MFSpadicPRF", "PRF for noise correction quality test MF");
01288     int numy = numy_2012;
01289     int numx = (USED_SPADIC_2012-1) / numy;
01290     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01291       numx++;
01292     pic->SetDivision(numy, numx);
01293       
01294     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01295       int nx = (uid-1) / numy;
01296       int ny = (uid-1) % numy;
01297       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01298       pic->Pic(ny, nx)->AddObject(fSpadic_PRFMF[SpaPosMap[uid]]);
01299     }
01300     AddPicture(pic,"MuensterFrankfurt");
01301   }
01302 
01303   // reduced to 12
01304   if (GetPicture("MFSpadicRecPos")==0) {
01305     TGo4Picture* pic = new TGo4Picture("MFSpadicRecPos", "PRF based position reconstruction");
01306     int numy = numy_2012;
01307     int numx = (USED_SPADIC_2012-1) / numy;
01308     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01309       numx++;
01310     pic->SetDivision(numy, numx);
01311       
01312     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01313       int nx = (uid-1) / numy;
01314       int ny = (uid-1) % numy;
01315       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01316       pic->Pic(ny, nx)->AddObject(fSpadic_recoPos[SpaPosMap[uid]]);
01317     }
01318     AddPicture(pic,"MuensterFrankfurt");
01319   }
01320 
01321   // reduced to 12
01322   if (GetPicture("MFStatistics")==0) {
01323     TGo4Picture* pic = new TGo4Picture("MFStatistics", "Beam and Chamber Statistics");
01324     int numy = numy_2012;
01325     int numx = (USED_SPADIC_2012-1) / numy;
01326     if (numx*numy < (USED_SPADIC_2012 - 1)) 
01327       numx++;
01328     pic->SetDivision(numy, numx);
01329       
01330     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01331       int nx = (uid-1) / numy;
01332       int ny = (uid-1) % numy;
01333       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01334       pic->Pic(ny, nx)->AddObject(fSpadic_statistics[SpaPosMap[uid]]);
01335     }
01336     AddPicture(pic,"MuensterFrankfurt");
01337   }
01338  
01339   if (GetPicture("MFSpadicCorrMatrixdist")==0) {
01340     TGo4Picture* pic = new TGo4Picture("MFSpadicCorrMatrixdist", "Distribution of correlation matrix values, for noise analysis");
01341     int numy = USED_SPADIC_2012;
01342     int numx = NUM_SPADIC_CHA;
01343     pic->SetDivision(numy, numx);
01344     int nx = 0;
01345     int ny = 0;
01346     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {    
01347       ny = uid-1;
01348       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;    
01349       for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
01350         nx = ch;
01351         pic->Pic(ny, nx)->SetLogScale(2,1);
01352         pic->Pic(ny, nx)->AddObject(fSpadic_CorrMatrix[SpaPosMap[uid]][ch]);
01353         pic->Pic(ny, nx)->AddCondition(fSpadic_corrMatrixWindow[SpaPosMap[uid]][ch]);
01354       }
01355     }
01356     AddPicture(pic,"MuensterFrankfurt");
01357   }
01358 
01359   if (GetPicture("MFSpadicCorrMatrix_hitTime")==0) {
01360     TGo4Picture* pic = new TGo4Picture("MFSpadicCorrMatrix_hitTime", "Distribution of correlation matrix values vs. hit time, for noise analysis");
01361     int numy = USED_SPADIC_2012;
01362     int numx = NUM_SPADIC_CHA;
01363     pic->SetDivision(numy, numx);
01364     int nx = 0;
01365     int ny = 0;
01366     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {    
01367       ny = uid-1;
01368       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;    
01369       for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
01370         nx = ch;
01371         pic->Pic(ny, nx)->SetLogScale(2,1);
01372         pic->Pic(ny, nx)->AddObject(fSpadic_CorrMatrix_hitTime[SpaPosMap[uid]][ch]);
01373         //pic->Pic(ny, nx)->AddCondition(fSpadic_corrMatrixWindow[SpaPosMap[uid]][ch]);
01374       }
01375     }
01376     AddPicture(pic,"MuensterFrankfurt");
01377   }
01378 
01379   if (GetPicture("MFSpadicCorrMatrix_maxAmpl")==0) {
01380     TGo4Picture* pic = new TGo4Picture("MFSpadicCorrMatrix_maxAmpl", "Distribution of correlation matrix values vs. max. amplitude, for noise analysis");
01381     int numy = USED_SPADIC_2012;
01382     int numx = NUM_SPADIC_CHA;
01383     pic->SetDivision(numy, numx);
01384     int nx = 0;
01385     int ny = 0;
01386     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {    
01387       ny = uid-1;
01388       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;    
01389       for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
01390         nx = ch;
01391         pic->Pic(ny, nx)->SetLogScale(2,1);
01392         pic->Pic(ny, nx)->AddObject(fSpadic_CorrMatrix_maxAmpl[SpaPosMap[uid]][ch]);
01393         //pic->Pic(ny, nx)->AddCondition(fSpadic_corrMatrixWindow[SpaPosMap[uid]][ch]);
01394       }
01395     }
01396     AddPicture(pic,"MuensterFrankfurt");
01397   }
01398 
01399   // reduced to 12
01400   if (GetPicture("MFSpadicADCdist")==0) {
01401     TGo4Picture* pic = new TGo4Picture("MFSpadicADCdist", "Distribution of ADC values, for noise analysis");
01402     int numy = numy_2012;
01403     int numx = (USED_SPADIC_2012-1) / numy;
01404     if (numx*numy < (USED_SPADIC_2012 - 1))
01405       numx++;
01406     pic->SetDivision(numy, numx);
01407 
01408     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01409       int nx = (uid-1) / numy;
01410       int ny = (uid-1) % numy;
01411       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01412       for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) 
01413         pic->Pic(ny, nx)->AddObject(fSpadic_ADCdistMF[SpaPosMap[uid]][ch]);
01414     }
01415     AddPicture(pic,"MuensterFrankfurt");
01416   }
01417 
01418   // reduced to 12
01419   if (GetPicture("MFSpadicNoiseDist")==0) {
01420     TGo4Picture* pic = new TGo4Picture("MFSpadicNoiseDist", "Noise-Distribution (RMS) of ADC distribution");
01421     int numy = numy_2012;
01422     int numx = (USED_SPADIC_2012-1) / numy;
01423     if (numx*numy < (USED_SPADIC_2012 - 1))
01424       numx++;
01425     pic->SetDivision(numy, numx);
01426 
01427     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01428       int nx = (uid-1) / numy;
01429       int ny = (uid-1) % numy;
01430       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01431       pic->Pic(ny, nx)->AddObject(fSpadic_NoiseDistMF[SpaPosMap[uid]]);
01432     }
01433     AddPicture(pic,"MuensterFrankfurt");
01434   }
01435 
01436   // reduced to 12
01437   if (GetPicture("MFSpadicNoiseDist2D")==0) {
01438     TGo4Picture* pic = new TGo4Picture("MFSpadicNoiseDist2D", "Noise-Distribution (RMS) of ADC distribution 2D");
01439     int numy = numy_2012;
01440     int numx = (USED_SPADIC_2012-1) / numy;
01441     if (numx*numy < (USED_SPADIC_2012 - 1))
01442       numx++;
01443     pic->SetDivision(numy, numx);
01444 
01445     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01446       int nx = (uid-1) / numy;
01447       int ny = (uid-1) % numy;
01448       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01449       pic->Pic(ny, nx)->AddObject(fSpadic_NoiseDist2DMF[SpaPosMap[uid]]);
01450     }
01451     AddPicture(pic,"MuensterFrankfurt");
01452   }
01453 
01454   // reduced to 12
01455   if (GetPicture("MFSpadicPedePos")==0) {
01456     TGo4Picture* pic = new TGo4Picture("MFSpadicPedePos", "Pedestal Position (Mean) of ADC distribution");
01457     int numy = numy_2012;
01458     int numx = (USED_SPADIC_2012-1) / numy;
01459     if (numx*numy < (USED_SPADIC_2012 - 1))
01460       numx++;
01461     pic->SetDivision(numy, numx);
01462 
01463     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01464       int nx = (uid-1) / numy;
01465       int ny = (uid-1) % numy;
01466       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01467       pic->Pic(ny, nx)->AddObject(fSpadic_PedelPosMF[SpaPosMap[uid]]);
01468     }
01469     AddPicture(pic,"MuensterFrankfurt");
01470   }
01471 
01472   // reduced to 12
01473   if (GetPicture("MFSpadicPedePos2D")==0) {
01474     TGo4Picture* pic = new TGo4Picture("MFSpadicPedePos2D", "Pedestal Position (Mean) of ADC distribution 2D");
01475     int numy = numy_2012;
01476     int numx = (USED_SPADIC_2012-1) / numy;
01477     if (numx*numy < (USED_SPADIC_2012 - 1))
01478       numx++;
01479     pic->SetDivision(numy, numx);
01480 
01481     for (UInt_t uid = 1; uid < USED_SPADIC_2012; uid++) {
01482       int nx = (uid-1) / numy;
01483       int ny = (uid-1) % numy;
01484       if (TSpadicEvent::ConfigSpadics[SpaPosMap[uid]] == 0) continue;
01485       pic->Pic(ny, nx)->AddObject(fSpadic_PedelPos2DMF[SpaPosMap[uid]]);
01486     }
01487     AddPicture(pic,"MuensterFrankfurt");
01488   }
01489 
01490   if (GetPicture("TRD_Gas")==0) {
01491     TGo4Picture* pic = new TGo4Picture("TRD_Gas", "");
01492     pic->SetDivision(2, 1);
01493     pic->Pic(0, 0)->SetAutoScale(kFALSE);
01494     pic->Pic(0, 0)->SetRangeY(0, 15);
01495     pic->Pic(0, 0)->AddObject(fEpics_TrdGasFlowMonitor);
01496     pic->Pic(1, 0)->SetAutoScale(kFALSE);
01497     pic->Pic(1, 0)->SetRangeY(0, 3300);
01498     pic->Pic(1, 0)->AddObject(fEpics_TrdIntegGasFlowMonitor);
01499     AddPicture(pic,"MuensterEPICS");
01500   }
01501 
01502   if (GetPicture("HV_LV")==0) {
01503     TGo4Picture* pic = new TGo4Picture("HV_LV", "HV: left: Drift - right: Anode -- LV: left: Spadic - right: Susibo");
01504 
01505     int numx = 4;
01506     int numy = MSTRDNUM-1;
01507     pic->SetDivision(numy, numx);
01508 
01509     for (Int_t i = 1; i < MSTRDNUM; i++) { 
01510       //HV
01511       pic->Pic(0, i-1)->SetAutoScale(kFALSE);
01512       pic->Pic(0, i-1)->SetRangeY(-40, 800);
01513       pic->Pic(0, i-1)->AddObject(fEpicsMSTRD_DriftU[i]);
01514       pic->Pic(0, i-1)->AddObject(fEpicsMSTRD_DriftI[i]);
01515       pic->Pic(1, i-1)->SetAutoScale(kFALSE);
01516       pic->Pic(1, i-1)->SetRangeY(-100, 2200); 
01517       pic->Pic(1, i-1)->AddObject(fEpicsMSTRD_AnodeU[i]);
01518       pic->Pic(1, i-1)->AddObject(fEpicsMSTRD_AnodeI[i]);
01519       //LV
01520       pic->Pic(2, i-1)->SetAutoScale(kFALSE);
01521       pic->Pic(2, i-1)->SetRangeY(-0.2, 6);
01522       pic->Pic(2, i-1)->AddObject(fEpicsMSTRD_SpaU[i]);
01523       pic->Pic(2, i-1)->AddObject(fEpicsMSTRD_SpaI[i]);
01524       pic->Pic(3, i-1)->SetAutoScale(kFALSE);
01525       pic->Pic(3, i-1)->SetRangeY(-0.2, 6);
01526       pic->Pic(3, i-1)->AddObject(fEpicsMSTRD_SusU[i]);
01527       pic->Pic(3, i-1)->AddObject(fEpicsMSTRD_SusI[i]);
01528     }
01529     AddPicture(pic,"MuensterEPICS");
01530   } 
01531 
01532   if (GetPicture("Mpod Temperatures")==0) {
01533     TGo4Picture* pic = new TGo4Picture("Mpod Temperatures", "Temperature of Mpod modules");
01534     pic->SetDivision(5, 2);
01535     pic->Pic(0, 0)->SetAutoScale(kFALSE);
01536     pic->Pic(0, 0)->SetRangeY(0, 70);
01537     pic->Pic(0, 0)->AddObject(fEpicsMSTRD_T[0]);
01538     pic->Pic(1, 0)->SetAutoScale(kFALSE);
01539     pic->Pic(1, 0)->SetRangeY(0, 70);
01540     pic->Pic(1, 0)->AddObject(fEpicsMSTRD_T[1]);
01541     pic->Pic(2, 0)->SetAutoScale(kFALSE);
01542     pic->Pic(2, 0)->SetRangeY(0, 70);
01543     pic->Pic(2, 0)->AddObject(fEpicsMSTRD_T[2]);
01544     pic->Pic(3, 0)->SetAutoScale(kFALSE);
01545     pic->Pic(3, 0)->SetRangeY(0, 70);
01546     pic->Pic(3, 0)->AddObject(fEpicsMSTRD_T[3]);
01547     pic->Pic(4, 0)->SetAutoScale(kFALSE);
01548     pic->Pic(4, 0)->SetRangeY(0, 70);
01549     pic->Pic(4, 0)->AddObject(fEpicsMSTRD_T[4]);
01550     pic->Pic(0, 1)->SetAutoScale(kFALSE);
01551     pic->Pic(0, 1)->SetRangeY(0, 70);
01552     pic->Pic(0, 1)->AddObject(fEpicsMSTRD_T[5]);
01553     pic->Pic(1, 1)->SetAutoScale(kFALSE);
01554     pic->Pic(1, 1)->SetRangeY(0, 70);
01555     pic->Pic(1, 1)->AddObject(fEpicsMSTRD_T[6]);
01556     pic->Pic(2, 1)->SetAutoScale(kFALSE);
01557     pic->Pic(2, 1)->SetRangeY(0, 70);
01558     pic->Pic(2, 1)->AddObject(fEpicsMSTRD_T[7]);
01559     pic->Pic(3, 1)->SetAutoScale(kFALSE);
01560     pic->Pic(3, 1)->SetRangeY(0, 70);
01561     pic->Pic(3, 1)->AddObject(fEpicsMSTRD_T[8]);
01562     pic->Pic(4, 1)->SetAutoScale(kFALSE);
01563     pic->Pic(4, 1)->SetRangeY(0, 70);
01564     pic->Pic(4, 1)->AddObject(fEpicsMSTRD_T[9]);
01565     AddPicture(pic,"MuensterEPICS");
01566   }
01567   
01568   if (GetPicture("Beam_Monitor_HV")==0) {
01569     TGo4Picture* pic = new TGo4Picture("Beam_Monitor_HV", "Beam_Monitor_HV");
01570     pic->SetDivision(5, 2);
01571     pic->Pic(0, 0)->SetAutoScale(kFALSE);
01572     pic->Pic(0, 0)->SetRangeY(-100, 3000);
01573     pic->Pic(0, 0)->AddObject(fEpics_MonitorU[0]);
01574     pic->Pic(0, 0)->AddObject(fEpics_MonitorI[0]);
01575     pic->Pic(0, 1)->SetAutoScale(kFALSE);
01576     pic->Pic(0, 1)->SetRangeY(-100, 3000);
01577     pic->Pic(0, 1)->AddObject(fEpics_MonitorU[1]);
01578     pic->Pic(0, 1)->AddObject(fEpics_MonitorI[1]);
01579 
01580     pic->Pic(1, 0)->SetAutoScale(kFALSE);
01581     pic->Pic(1, 0)->SetRangeY(-100, 3000);
01582     pic->Pic(1, 0)->AddObject(fEpics_MonitorU[2]);
01583     pic->Pic(1, 0)->AddObject(fEpics_MonitorI[2]);
01584     pic->Pic(1, 1)->SetAutoScale(kFALSE);
01585     pic->Pic(1, 1)->SetRangeY(-100, 3000);
01586     pic->Pic(1, 1)->AddObject(fEpics_MonitorU[3]);
01587     pic->Pic(1, 1)->AddObject(fEpics_MonitorI[3]);
01588 
01589     pic->Pic(2, 0)->SetAutoScale(kFALSE);
01590     pic->Pic(2, 0)->SetRangeY(-100, 3000);
01591     pic->Pic(2, 0)->AddObject(fEpics_MonitorU[4]);
01592     pic->Pic(2, 0)->AddObject(fEpics_MonitorI[4]);
01593     pic->Pic(2, 1)->SetAutoScale(kFALSE);
01594     pic->Pic(2, 1)->SetRangeY(-100, 3000);
01595     pic->Pic(2, 1)->AddObject(fEpics_MonitorU[5]);
01596     pic->Pic(2, 1)->AddObject(fEpics_MonitorI[5]);
01597 
01598     pic->Pic(3, 0)->SetAutoScale(kFALSE);
01599     pic->Pic(3, 0)->SetRangeY(-100, 3000);
01600     pic->Pic(3, 0)->AddObject(fEpics_MonitorU[6]);
01601     pic->Pic(3, 0)->AddObject(fEpics_MonitorI[6]);
01602     pic->Pic(3, 1)->SetAutoScale(kFALSE);
01603     pic->Pic(3, 1)->SetRangeY(-100, 3000);
01604     pic->Pic(3, 1)->AddObject(fEpics_MonitorU[7]);
01605     pic->Pic(3, 1)->AddObject(fEpics_MonitorI[7]);
01606 
01607     pic->Pic(4, 0)->SetAutoScale(kFALSE);
01608     pic->Pic(4, 0)->SetRangeY(-100, 3000);
01609     pic->Pic(4, 0)->AddObject(fEpics_MonitorU[8]);
01610     pic->Pic(4, 0)->AddObject(fEpics_MonitorI[8]);
01611     pic->Pic(4, 1)->SetAutoScale(kFALSE);
01612     pic->Pic(4, 1)->SetRangeY(-100, 3000);
01613     pic->Pic(4, 1)->AddObject(fEpics_MonitorU[9]);
01614     pic->Pic(4, 1)->AddObject(fEpics_MonitorI[9]);
01615     AddPicture(pic,"MuensterEPICS");
01616   }
01617 
01618   for (Int_t sl = 0; sl < MPOD00SLOT; sl++) {
01619     TString name;
01620     name.Form("MS_MPOD00_SLOT%02i U I",sl);
01621     if (GetPicture(name)==0) {
01622       TGo4Picture* pic = new TGo4Picture(name,name);     
01623       Int_t nCol = Int_t(sqrt(MPOD00CHA) + 0.5);
01624       pic->SetDivision(nCol, nCol);
01625       Int_t iRow(0), iCol(0);
01626       for (Int_t ch = 0; ch < MPOD00CHA; ch++){
01627         if (iCol == nCol) {
01628           iRow++;
01629           iCol = 0;
01630         }
01631         pic->Pic(iRow, iCol)->SetAutoScale(kFALSE);
01632         pic->Pic(iRow, iCol)->SetRangeY(-100, 3000);
01633         pic->Pic(iRow, iCol)->AddObject(fEpicsMSMpod00_Monitor_U[sl][ch]);
01634         pic->Pic(iRow, iCol)->AddObject(fEpicsMSMpod00_Monitor_I[sl][ch]);
01635         iCol++;
01636       }
01637       AddPicture(pic,"MuensterEPICS");
01638     }   
01639   }
01640 
01641   for (Int_t sl = 0; sl < MPOD01SLOT; sl++) {
01642     TString name;
01643     name.Form("MS_MPOD01_SLOT%02i U I",sl);
01644     if (GetPicture(name)==0) {
01645       TGo4Picture* pic = new TGo4Picture(name,name);     
01646       Int_t nCol = Int_t(sqrt(MPOD01CHA) + 0.5);
01647       pic->SetDivision(nCol, nCol);
01648       Int_t iRow(0), iCol(0);
01649       for (Int_t ch = 0; ch < MPOD01CHA; ch++){
01650         if (iCol == nCol) {
01651           iRow++;
01652           iCol = 0;
01653         }
01654         pic->Pic(iRow, iCol)->SetAutoScale(kFALSE);
01655         pic->Pic(iRow, iCol)->SetRangeY(-100, 3000);
01656         pic->Pic(iRow, iCol)->AddObject(fEpicsMSMpod01_Monitor_U[sl][ch]);
01657         pic->Pic(iRow, iCol)->AddObject(fEpicsMSMpod01_Monitor_I[sl][ch]);
01658         iCol++;
01659       }
01660       AddPicture(pic,"MuensterEPICS");
01661     }   
01662   }
01663 
01664   /*  // this is the RICH camera 2011
01665       if (GetPicture("RICH_HV")==0) {
01666       TGo4Picture* pic = new TGo4Picture("RICH_HV", "HV on MAPMTs");
01667 
01668       //                        0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16
01669       int mapx [RICHNUM] = {  0,  0,  0,  1,  1,  2,  2,  3,  3,  0,  0,  1,  1,  2,  2,  3,  3 };
01670       int mapy [RICHNUM] = {  0,  0,  1,  0,  1,  0,  1,  0,  1,  2,  3,  2,  3,  2,  3,  2,  3 };
01671       int numx = 4;
01672       int numy = 4;
01673       pic->SetDivision(numy, numx);
01674       int posx = 0;
01675       int posy = 0;
01676 
01677       for (Int_t i = 1; i < RICHNUM; i++) { 
01678       posx = mapx[i];
01679       posy = mapy[i];
01680       //      posx = (i-1) % numx;
01681       //      posy = (i-1) / numx;
01682 
01683       //RICH HV
01684       pic->Pic(posy, posx)->SetAutoScale(kFALSE);
01685       pic->Pic(posy, posx)->SetRangeY(-100, 2500); 
01686       pic->Pic(posy, posx)->AddObject(fEpics_RichU[i]);
01687       pic->Pic(posy, posx)->AddObject(fEpics_RichI[i]);
01688       }
01689       AddPicture(pic,"BeamMonitorEPICS");
01690       } 
01691   */  
01692 
01693   // 19.10.2011                  // MS                           // FF          // unused
01694   //  Int_t SpMap[MAX_SPADIC] = {  0,  1,  2, 11, 12,  3,  6, 15, 18,  4, 16, 17,  5, 10, 14,  7,  8,  9, 13, 19 };  // map of Spadics in TRD order
01695   //  Int_t SuMap[MAX_SPADIC] = {  0,  1,  5,  3,  9, 12,  7, 17, 18, 15, 13,  2,  6, 16, 14,  4, 10, 11,  8, 19 };  // histo mapping
01696 
01697   // all 12 Spadics
01698   if (GetPicture("MFCorrelations")==0) {
01699     const UInt_t first_MF_Spadic =  1;
01700     const UInt_t  last_MF_Spadic = 12;
01701     Int_t d_MF_Spadic = last_MF_Spadic - first_MF_Spadic + 1;
01702     TGo4Picture* pic = new TGo4Picture("MFCorrelations", "MF Beam and Chamber Correlation");
01703     pic->SetDivision(d_MF_Spadic, d_MF_Spadic);
01704     for (UInt_t sid = first_MF_Spadic; sid <= last_MF_Spadic; sid++) {
01705       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01706       for (UInt_t sid2 = sid; sid2 <= last_MF_Spadic; sid2++) {
01707         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01708         if (SpMap[sid] <= SpMap[sid2])
01709           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01710         else
01711           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01712         his=GetHistogram(obname.Data());
01713         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->AddObject(his, "colz");
01714         //      pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->SetLogScale(2,1);
01715         //cout << "  " << sid << " " << sid2 << endl;
01716       }
01717     }
01718     AddPicture(pic,"MuensterFrankfurt/2011");
01719   }
01720 
01721   if (GetPicture("MFAlignment")==0) {
01722     const UInt_t first_MF_Spadic =  1;
01723     const UInt_t  last_MF_Spadic = 12;
01724     Int_t d_MF_Spadic = last_MF_Spadic - first_MF_Spadic + 1;
01725     TGo4Picture* pic = new TGo4Picture("MFAlignment", "MF Beam and Chamber Alignment");
01726     pic->SetDivision(d_MF_Spadic, d_MF_Spadic);
01727     for (UInt_t sid = first_MF_Spadic; sid <= last_MF_Spadic; sid++) {
01728       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01729       for (UInt_t sid2 = sid; sid2 <= last_MF_Spadic; sid2++) {
01730         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01731         if (SpMap[sid] <= SpMap[sid2])
01732           obname.Form("MuensterFrankfurt/Alignment/Alignment_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01733         else
01734           obname.Form("MuensterFrankfurt/Alignment/Alignment_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01735         his=GetHistogram(obname.Data());
01736         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->AddObject(his, "colz");
01737         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic)->SetLogScale(2,1);
01738         //cout << "  " << sid << " " << sid2 << endl;
01739       }
01740     }
01741     AddPicture(pic,"MuensterFrankfurt/2011");
01742   }
01743 
01744   if (GetPicture("MS3Alignment")==0) {
01745     const UInt_t first_MS_Spadic = 1;
01746     const UInt_t  last_MS_Spadic = 3;
01747     Int_t d_MS_Spadic = last_MS_Spadic - first_MS_Spadic + 1;
01748     TGo4Picture* pic = new TGo4Picture("MS3Alignment", "MS Beam and Chamber Alignment");
01749     pic->SetDivision(d_MS_Spadic, d_MS_Spadic);
01750     for (UInt_t sid = first_MS_Spadic; sid <= last_MS_Spadic; sid++) {
01751       for (UInt_t sid2 = sid; sid2 <= last_MS_Spadic; sid2++) {
01752         if (SpMap[sid] <= SpMap[sid2])
01753           obname.Form("MuensterFrankfurt/Alignment/Alignment_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01754         else
01755           obname.Form("MuensterFrankfurt/Alignment/Alignment_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01756         his=GetHistogram(obname.Data());
01757         pic->Pic(sid-first_MS_Spadic, sid2-first_MS_Spadic)->AddObject(his, "colz");
01758         pic->Pic(sid-first_MS_Spadic, sid2-first_MS_Spadic)->SetLogScale(2,1);
01759         //cout << "  " << sid << " " << sid2 << endl;
01760       }
01761     }
01762     AddPicture(pic,"MuensterFrankfurt/2012");
01763   }
01764 
01765   // all 3 Muenster Spadics 2012
01766   if (GetPicture("MS3Correlations")==0) {
01767     const UInt_t first_M3_Spadic = 1;
01768     const UInt_t  last_M3_Spadic = 3;
01769     Int_t d_M3_Spadic = last_M3_Spadic - first_M3_Spadic + 1;
01770     TGo4Picture* pic = new TGo4Picture("MS3Correlations", "MS 3 Beam and Chamber Correlation");
01771     pic->SetDivision(d_M3_Spadic, d_M3_Spadic);
01772     for (UInt_t sid = first_M3_Spadic; sid <= last_M3_Spadic; sid++) {
01773       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01774       for (UInt_t sid2 = sid; sid2 <= last_M3_Spadic; sid2++) {
01775         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01776         if (SpMap[sid] <= SpMap[sid2])
01777           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01778         else
01779           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01780         his=GetHistogram(obname.Data());
01781         pic->Pic(sid-first_M3_Spadic, sid2-first_M3_Spadic)->AddObject(his, "colz");
01782         //      pic->Pic(sid-first_M_Spadic, sid2-first_M_Spadic)->SetLogScale(2,1);
01783         //cout << "  " << sid << " " << sid2 << endl;
01784       }
01785     }
01786     AddPicture(pic,"MuensterFrankfurt/2012");
01787   }
01788 
01789   //  //  Int_t SbMap[MAX_SPADIC]      = {  0,  2, 12,  6, 18,  0,  0,  0,  0,  4, 16, 17,  5, 10, 14,  7,  8,  9, 13, 19 };  // map of bottom Spadics 
01790   //  if (GetPicture("MS4BotShapeRatio")==0) {
01791   //    const UInt_t first_MF_Spadic = 1;
01792   //    const UInt_t  last_MF_Spadic = 4;
01793   //    Int_t d_MF_Spadic = last_MF_Spadic - first_MF_Spadic + 1;
01794   //    TGo4Picture* pic = new TGo4Picture("MS4BotShapeRatio", "MS 4 bottom Signal Shape Ratio");
01795   //    pic->SetDivision(d_MF_Spadic-1, d_MF_Spadic-1);
01796   //    for (UInt_t sid = first_MF_Spadic; sid <= last_MF_Spadic; sid++) {
01797   //      if (TSpadicEvent::ConfigSpadics[SbMap[sid]] == 0) continue;
01798   //      for (UInt_t sid2 = sid; sid2 <= last_MF_Spadic; sid2++) {
01799   //    if (TSpadicEvent::ConfigSpadics[SbMap[sid2]] == 0) continue;
01800   //        if (sid == sid2) continue;
01801   //
01802   //        pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->SetAutoScale(kFALSE);
01803   //        pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->SetRangeY(-1, 3);
01804   //
01805   //    if (SbMap[sid] <= SbMap[sid2])
01806   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", SbMap[sid], SbMap[sid], SbMap[sid2]);
01807   //    else
01808   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", SbMap[sid2], SbMap[sid2], SbMap[sid]);
01809   //    his=GetHistogram(obname.Data());
01810   //    pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(his);
01811   //    if (SbMap[sid] <= SbMap[sid2])
01812   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", SbMap[sid], SbMap[sid], SbMap[sid2]);
01813   //    else
01814   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", SbMap[sid2], SbMap[sid2], SbMap[sid]);
01815   //    his=GetHistogram(obname.Data());
01816   //
01817   //    pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(his);
01818   //    pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(one);
01819   //    //cout << "  " << sid << " " << sid2 << endl;
01820   //      }
01821   //    }
01822   //    AddPicture(pic,"MuensterFrankfurt/2011");
01823   //  }
01824   //
01825   //  //  Int_t StMap[MAX_SPADIC]      = {  0,  1, 11,  3, 15,  0,  0,  0,  0,  4, 16, 17,  5, 10, 14,  7,  8,  9, 13, 19 };  // map of top    Spadics 
01826   //  if (GetPicture("MS4TopShapeRatio")==0) {
01827   //    const UInt_t first_MF_Spadic = 1;
01828   //    const UInt_t  last_MF_Spadic = 4;
01829   //    Int_t d_MF_Spadic = last_MF_Spadic - first_MF_Spadic + 1;
01830   //    TGo4Picture* pic = new TGo4Picture("MS4TopShapeRatio", "MS 4 top Signal Shape Ratio");
01831   //    pic->SetDivision(d_MF_Spadic-1, d_MF_Spadic-1);
01832   //    for (UInt_t sid = first_MF_Spadic; sid <= last_MF_Spadic; sid++) {
01833   //      if (TSpadicEvent::ConfigSpadics[StMap[sid]] == 0) continue;
01834   //      for (UInt_t sid2 = sid; sid2 <= last_MF_Spadic; sid2++) {
01835   //    if (TSpadicEvent::ConfigSpadics[StMap[sid2]] == 0) continue;
01836   //        if (sid == sid2) continue;
01837   //
01838   //        pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->SetAutoScale(kFALSE);
01839   //        pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->SetRangeY(-1, 3);
01840   //
01841   //    if (StMap[sid] <= StMap[sid2])
01842   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", StMap[sid], StMap[sid], StMap[sid2]);
01843   //    else
01844   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", StMap[sid2], StMap[sid2], StMap[sid]);
01845   //    his=GetHistogram(obname.Data());
01846   //    pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(his);
01847   //    if (StMap[sid] <= StMap[sid2])
01848   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", StMap[sid], StMap[sid], StMap[sid2]);
01849   //    else
01850   //      obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", StMap[sid2], StMap[sid2], StMap[sid]);
01851   //    his=GetHistogram(obname.Data());
01852   //
01853   //    pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(his);
01854   //    pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(one);
01855   //    //cout << "  " << sid << " " << sid2 << endl;
01856   //      }
01857   //    }
01858   //    AddPicture(pic,"MuensterFrankfurt/2011");
01859   //  }
01860 
01861   if (GetPicture("MS3TopShapeRatio")==0) {
01862     const UInt_t first_MF_Spadic = 1;
01863     const UInt_t  last_MF_Spadic = 3;
01864     Int_t d_MF_Spadic = last_MF_Spadic - first_MF_Spadic + 1;
01865     TGo4Picture* pic = new TGo4Picture("MS3TopShapeRatio", "MS 3 top Signal Shape Ratio");
01866     pic->SetDivision(d_MF_Spadic-1, d_MF_Spadic-1);
01867     for (UInt_t sid = first_MF_Spadic; sid <= last_MF_Spadic; sid++) {
01868       for (UInt_t sid2 = sid; sid2 <= last_MF_Spadic; sid2++) {
01869         if (sid == sid2) continue;
01870 
01871         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->SetAutoScale(kFALSE);
01872         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->SetRangeY(-1, 3);
01873 
01874         if (SpMap[sid] <= SpMap[sid2])
01875           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", SpMap[sid], SpMap[sid], SpMap[sid2]);
01876         else
01877           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_el_Ratio", SpMap[sid2], SpMap[sid2], SpMap[sid]);
01878         his=GetHistogram(obname.Data());
01879         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(his);
01880         if (SpMap[sid] <= SpMap[sid2])
01881           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", SpMap[sid], SpMap[sid], SpMap[sid2]);
01882         else
01883           obname.Form("MuensterFrankfurt/Spadic_%d/Spadic%d_%d_SHAPE_pi_Ratio", SpMap[sid2], SpMap[sid2], SpMap[sid]);
01884         his=GetHistogram(obname.Data());
01885 
01886         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(his);
01887         pic->Pic(sid-first_MF_Spadic, sid2-first_MF_Spadic-1)->AddObject(one);
01888         //cout << "  " << sid << " " << sid2 << endl;
01889       }
01890     }
01891     AddPicture(pic,"MuensterFrankfurt/2012");
01892   }
01893 
01894   // all 8 Muenster Spadics 2011
01895   if (GetPicture("MS8Correlations")==0) {
01896     const UInt_t first_M8_Spadic = 1;
01897     const UInt_t  last_M8_Spadic = 8;
01898     Int_t d_M8_Spadic = last_M8_Spadic - first_M8_Spadic + 1;
01899     TGo4Picture* pic = new TGo4Picture("MS8Correlations", "MS 8 Beam and Chamber Correlation");
01900     pic->SetDivision(d_M8_Spadic, d_M8_Spadic);
01901     for (UInt_t sid = first_M8_Spadic; sid <= last_M8_Spadic; sid++) {
01902       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01903       for (UInt_t sid2 = sid; sid2 <= last_M8_Spadic; sid2++) {
01904         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01905         if (SpMap[sid] <= SpMap[sid2])
01906           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01907         else
01908           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01909         his=GetHistogram(obname.Data());
01910         pic->Pic(sid-first_M8_Spadic, sid2-first_M8_Spadic)->AddObject(his, "colz");
01911         //      pic->Pic(sid-first_M8_Spadic, sid2-first_M8_Spadic)->SetLogScale(2,1);
01912         //cout << "  " << sid << " " << sid2 << endl;
01913       }
01914     }
01915     AddPicture(pic,"MuensterFrankfurt/2011");
01916   }
01917 
01918   // all 4 Muenster 336 Spadics 2011
01919   if (GetPicture("MS336Correlations")==0) {
01920     const UInt_t first_M336_Spadic = 1;
01921     const UInt_t  last_M336_Spadic = 4;
01922     Int_t d_M336_Spadic = last_M336_Spadic - first_M336_Spadic + 1;
01923     TGo4Picture* pic = new TGo4Picture("MS336Correlations", "MS 336 Beam and Chamber Correlation");
01924     pic->SetDivision(d_M336_Spadic, d_M336_Spadic);
01925     for (UInt_t sid = first_M336_Spadic; sid <= last_M336_Spadic; sid++) {
01926       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01927       for (UInt_t sid2 = sid; sid2 <= last_M336_Spadic; sid2++) {
01928         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01929         if (SpMap[sid] <= SpMap[sid2])
01930           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01931         else
01932           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01933         his=GetHistogram(obname.Data());
01934         pic->Pic(sid-first_M336_Spadic, sid2-first_M336_Spadic)->AddObject(his, "colz");
01935         //      pic->Pic(sid-first_M336_Spadic, sid2-first_M336_Spadic)->SetLogScale(2,1);
01936         //cout << "  " << sid << " " << sid2 << endl;
01937       }
01938     }
01939     AddPicture(pic,"MuensterFrankfurt/2011");
01940   }
01941 
01942   // all 4 Muenster 444 Spadics 2011
01943   if (GetPicture("MS444Correlations")==0) {
01944     const UInt_t first_M444_Spadic = 5;
01945     const UInt_t  last_M444_Spadic = 8;
01946     Int_t d_M444_Spadic = last_M444_Spadic - first_M444_Spadic + 1;
01947     TGo4Picture* pic = new TGo4Picture("MS444Correlations", "MS 444 Beam and Chamber Correlation");
01948     pic->SetDivision(d_M444_Spadic, d_M444_Spadic);
01949     for (UInt_t sid = first_M444_Spadic; sid <= last_M444_Spadic; sid++) {
01950       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01951       for (UInt_t sid2 = sid; sid2 <= last_M444_Spadic; sid2++) {
01952         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01953         if (SpMap[sid] <= SpMap[sid2])
01954           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01955         else
01956           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01957         his=GetHistogram(obname.Data());
01958         pic->Pic(sid-first_M444_Spadic, sid2-first_M444_Spadic)->AddObject(his, "colz");
01959         //      pic->Pic(sid-first_M444_Spadic, sid2-first_M444_Spadic)->SetLogScale(2,1);
01960         //cout << "  " << sid << " " << sid2 << endl;
01961       }
01962     }
01963     AddPicture(pic,"MuensterFrankfurt/2011");
01964   }
01965 
01966   // all 4 Frankfurt Spadics
01967   if (GetPicture("FF2Correlations")==0) {
01968     const UInt_t first_F_Spadic =  4;
01969     const UInt_t last_F_Spadic  =  5;
01970     Int_t d_F_Spadic = last_F_Spadic - first_F_Spadic + 1;
01971     TGo4Picture* pic = new TGo4Picture("FF2Correlations", "F Beam and Chamber Correlation");
01972     pic->SetDivision(d_F_Spadic, d_F_Spadic);
01973     for (UInt_t sid = first_F_Spadic; sid <= last_F_Spadic; sid++) {
01974       if (TSpadicEvent::ConfigSpadics[SpMap[sid]] == 0) continue;
01975       for (UInt_t sid2 = sid; sid2 <= last_F_Spadic; sid2++) {
01976         if (TSpadicEvent::ConfigSpadics[SpMap[sid2]] == 0) continue;
01977         if (SpMap[sid] <= SpMap[sid2])
01978           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid], SpMap[sid2]);
01979         else
01980           obname.Form("MuensterFrankfurt/Correlations/Correlation_Spadic%d_%d", SpMap[sid2], SpMap[sid]);
01981         his=GetHistogram(obname.Data());
01982         pic->Pic(sid-first_F_Spadic, sid2-first_F_Spadic)->AddObject(his, "colz");
01983         //      pic->Pic(sid-first_F_Spadic, sid2-first_F_Spadic)->SetLogScale(2,1);
01984         //cout << "  " << sid << " " << sid2 << endl;
01985       }
01986     }
01987     AddPicture(pic,"MuensterFrankfurt/2012");
01988   }
01989   
01990   if (GetPicture("MFSpadicBeamProfile2D")==0) {
01991     TGo4Picture* pic = new TGo4Picture("MFSpadicBeamProfile2D", "MF Spadic Beam Profile 2D");
01992   
01993     pic->SetDivision(2, 2);
01994 
01995     for (UInt_t uid = 0; uid < 4; uid++) {
01996       int nx = (uid) / 2;
01997       int ny = (uid) % 2;
01998       if (TSpadicEvent::ConfigSpadics[uid] == 0) continue;
01999       pic->Pic(ny, nx)->AddObject(fSpadic_beamProfil[uid]);
02000     }
02001     AddPicture(pic,"MuensterFrankfurt");
02002   }
02003 
02004   if (GetPicture("MFSpadicDeltaPos2D")==0) {
02005     TGo4Picture* pic = new TGo4Picture("MFSpadicDeltaPos2D", "MF Spadic delta pos. 2D");
02006   
02007     pic->SetDivision(2, 2);
02008 
02009     for (UInt_t uid = 0; uid < 4; uid++) {
02010       int nx = (uid) / 2;
02011       int ny = (uid) % 2;
02012       if (TSpadicEvent::ConfigSpadics[uid] == 0) continue;
02013       pic->Pic(ny, nx)->AddObject(fSpadic_deltaPos[uid]);
02014     }
02015     AddPicture(pic,"MuensterFrankfurt");
02016   }
02017 
02018   TGo4Log::Info("TTRDMuensterFrankfurtProc: Histograms created");
02019 }
02020 
02021   TTRDMuensterFrankfurtProc::~TTRDMuensterFrankfurtProc()
02022   {
02023   }
02024 
02025   void TTRDMuensterFrankfurtProc::InitEvent(TGo4EventElement* outevnt)
02026   {
02027     // first assign input event:
02028     // since input event object is never discarded within processor lifetime,
02029     // we just search for subevent by name once to speed up processing
02030     if(fSpadicInputEvent==0)
02031       {
02032         TCBMBeamtimeEvent* btevent=dynamic_cast<TCBMBeamtimeEvent*>(GetInputEvent());
02033         if(btevent)
02034           {
02035             fCrateInputEvent=dynamic_cast<TMbsCrateEvent*>(btevent->GetSubEvent("MBSCRATE"));
02036             fSpadicInputEvent=dynamic_cast<TSpadicEvent*>(btevent->GetSubEvent("SPADIC"));
02037             fSpadicV10InputEvent=dynamic_cast<TSpadicV10Event*>(btevent->GetSubEvent("SPADICV10"));
02038             fEpicsInputEvent=dynamic_cast<TEpicsEvent*>(btevent->GetSubEvent("EPICS"));
02039           }
02040         else
02041           {
02042             fSpadicInputEvent=dynamic_cast<TSpadicEvent*>(GetInputEvent());
02043 
02044           }
02045         if(fSpadicInputEvent==0) {
02046           GO4_STOP_ANALYSIS_MESSAGE("**** TTRDMuensterFrankfurtProc: Fatal error: input event is not a TSpadicEvent!!! STOP GO4");
02047         }
02048         if(fEpicsInputEvent==0) {
02049           Message(2,"**** TBeamMonitorProc: could not find TEpicsEvent!"); // but do not stop...
02050         }
02051         if(fSpadicV10InputEvent==0) {
02052           Message(2,"**** TBeamMonitorProc: could not find Spadiv V1.0 input Event!"); // but do not stop...
02053         }
02054 
02055       }
02056 
02057     // then assign output event
02058     // since output event object is never discarded within processor lifetime,
02059     // we just search for subevent by name once to speed up processing
02060     if(fOutputEvent==0)
02061       {
02062         TCBMBeamtimeEvent* btevent=dynamic_cast<TCBMBeamtimeEvent*>(outevnt);
02063         if(btevent)
02064           {
02065             fOutputEvent=dynamic_cast<TTRDMuensterFrankfurtEvent*>(btevent->GetSubEvent("TRDMSFFM"));
02066             fHodo1 = dynamic_cast<TFiberHodEvent*>(btevent->GetSubEvent("Hodo1"));
02067             fHodo2 = dynamic_cast<TFiberHodEvent*>(btevent->GetSubEvent("Hodo2"));
02068             fBeamEvent = dynamic_cast<TBeamMonitorEvent*>(btevent->GetSubEvent("BEAM"));
02069           }
02070         else
02071           {
02072             fOutputEvent= dynamic_cast<TTRDMuensterFrankfurtEvent*>(outevnt);
02073           }
02074         if(fOutputEvent==0) {
02075           GO4_STOP_ANALYSIS_MESSAGE("**** TTRDMuensterFrankfurtProc: Fatal error: output event is not a TTRDMuensterFrankfurtEvent!!! STOP GO4");
02076         }
02077       }
02078   }
02079 
02080 void TTRDMuensterFrankfurtProc::FinalizeEvent()
02081 {
02082   // 19.10.2011                      // MS                           // FF          // unused
02083   //  Int_t SpMap[MAX_SPADIC] = {  0,  1,  2, 11, 12,  3,  6, 15, 18,  4, 16, 17,  5, 10, 14,  7,  8,  9, 13, 19 };  // map of Spadics in TRD order
02084   //  Int_t SuMap[MAX_SPADIC] = {  0,  1,  5,  3,  9, 12,  7, 17, 18, 15, 13,  2,  6, 16, 14,  4, 10, 11,  8, 19 };  // histo mapping
02085 
02086   Bool_t ChMap[MAX_SPADIC]; // = { false };
02087   // remap the bottom Spadics
02088   ChMap[SpMap[2]]  = true;   //  ChMap[ 2] = true;
02089   ChMap[SpMap[4]]  = true;   //  ChMap[12] = true;
02090   ChMap[SpMap[6]]  = true;   //  ChMap[ 6] = true;
02091   ChMap[SpMap[8]]  = true;   //  ChMap[18] = true;
02092                    
02093   ChMap[SpMap[1]]  = false;
02094   ChMap[SpMap[3]]  = false;
02095   ChMap[SpMap[5]]  = false;
02096   ChMap[SpMap[7]]  = false;
02097 
02098   ChMap[SpMap[9]]  = false;
02099   ChMap[SpMap[10]] = false;
02100   ChMap[SpMap[11]] = false;
02101   ChMap[SpMap[12]] = true;
02102 
02103   Int_t PID[MAX_SPADIC] = {8};
02104   Int_t PIDV10[MAX_SPADICV10] = {8};
02105 
02106   if(fEpicsInputEvent && fEpicsInputEvent->IsValid()) // check if new update has been done
02107     {
02108       // map local variables to epics pvs in data stream:
02109       TString varName;
02110       fEpicsTrdGasFlow = fEpicsInputEvent->GetDouble("CBM:TRD:GFM0:Flow");
02111       fEpicsTrdIntegGasFlow = fEpicsInputEvent->GetDouble("CBM:TRD:GFM0:Total");
02112       for (Int_t sl = 0; sl < MPOD00SLOT; sl++) {
02113         for (Int_t ch = 0; ch < MPOD00CHA; ch++) {
02114           /*name scheme CBM:TRD:WIENLV_U%i%02i, LV*/
02115           varName.Form("CBM:TRD:WIENLV_U%i%02i:vmon",sl,ch);
02116           fEpicsMSMpod00_U[sl][ch] = fEpicsInputEvent->GetDouble(varName.Data());
02117           varName.Form("CBM:TRD:WIENLV_U%i%02i:imon",sl,ch);
02118           fEpicsMSMpod00_I[sl][ch] = fEpicsInputEvent->GetDouble(varName.Data());
02119         }
02120       }
02121       for (Int_t sl = 0; sl < MPOD01SLOT; sl++) {
02122         for (Int_t ch = 0; ch < MPOD01CHA; ch++) {
02123           /*name scheme CBM:TRD:ISEGHV_U%i%02i, HV*/
02124           varName.Form("CBM:TRD:ISEGHV_U%i%02i:vmon",sl,ch);
02125           fEpicsMSMpod01_U[sl][ch] = fEpicsInputEvent->GetDouble(varName.Data());
02126           varName.Form("CBM:TRD:ISEGHV_U%i%02i:imon",sl,ch);
02127           fEpicsMSMpod01_I[sl][ch] = fEpicsInputEvent->GetDouble(varName.Data());
02128         }
02129       }
02130       fEpicsMSTRD_Drift_U[1] = fEpicsMSMpod01_U[2][0];
02131       fEpicsMSTRD_Drift_I[1] = fEpicsMSMpod01_I[2][0];
02132       fEpicsMSTRD_Anode_U[1] = fEpicsMSMpod01_U[3][0];
02133       fEpicsMSTRD_Anode_I[1] = fEpicsMSMpod01_I[3][0];
02134       fEpicsMSTRD_Drift_U[2] = fEpicsMSMpod01_U[2][1];
02135       fEpicsMSTRD_Drift_I[2] = fEpicsMSMpod01_I[2][1];
02136       fEpicsMSTRD_Anode_U[2] = fEpicsMSMpod01_U[3][1];
02137       fEpicsMSTRD_Anode_I[2] = fEpicsMSMpod01_I[3][1];
02138       fEpicsMSTRD_Drift_U[3] = fEpicsMSMpod01_U[2][2];
02139       fEpicsMSTRD_Drift_I[3] = fEpicsMSMpod01_I[2][2];
02140       fEpicsMSTRD_Anode_U[3] = fEpicsMSMpod01_U[3][2];
02141       fEpicsMSTRD_Anode_I[3] = fEpicsMSMpod01_I[3][2];
02142       fEpicsMSTRD_Drift_U[4] = fEpicsMSMpod01_U[2][3];
02143       fEpicsMSTRD_Drift_I[4] = fEpicsMSMpod01_I[2][3];
02144       fEpicsMSTRD_Anode_U[4] = fEpicsMSMpod01_U[3][3];
02145       fEpicsMSTRD_Anode_I[4] = fEpicsMSMpod01_I[3][3];
02146 
02147       fEpicsMSTRD_Temp[0] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U000:temp");
02148       fEpicsMSTRD_Temp[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U100:temp");
02149       fEpicsMSTRD_Temp[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U200:temp");
02150       fEpicsMSTRD_Temp[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U300:temp");
02151       fEpicsMSTRD_Temp[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U400:temp");
02152       fEpicsMSTRD_Temp[5] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U500:temp");
02153       fEpicsMSTRD_Temp[6] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U600:temp");
02154       fEpicsMSTRD_Temp[7] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U700:temp");
02155       fEpicsMSTRD_Temp[8] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U800:temp");
02156       fEpicsMSTRD_Temp[9] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U900:temp");
02157 
02158       fEpicsMSTRD_Sus_U[1] = fEpicsMSMpod01_U[0][1];
02159       fEpicsMSTRD_Sus_I[1] = fEpicsMSMpod01_I[0][1];
02160       fEpicsMSTRD_Spa_U[1] = fEpicsMSMpod01_U[0][0];
02161       fEpicsMSTRD_Spa_I[1] = fEpicsMSMpod01_I[0][0];
02162       fEpicsMSTRD_Sus_U[2] = fEpicsMSMpod01_U[0][3];
02163       fEpicsMSTRD_Sus_I[2] = fEpicsMSMpod01_I[0][3];
02164       fEpicsMSTRD_Spa_U[2] = fEpicsMSMpod01_U[0][2];
02165       fEpicsMSTRD_Spa_I[2] = fEpicsMSMpod01_I[0][2];
02166       fEpicsMSTRD_Sus_U[3] = fEpicsMSMpod01_U[0][5];
02167       fEpicsMSTRD_Sus_I[3] = fEpicsMSMpod01_I[0][5];
02168       fEpicsMSTRD_Spa_U[3] = fEpicsMSMpod01_U[0][4];
02169       fEpicsMSTRD_Spa_I[3] = fEpicsMSMpod01_I[0][4];
02170       fEpicsMSTRD_Sus_U[4] = fEpicsMSMpod01_U[0][7];
02171       fEpicsMSTRD_Sus_I[4] = fEpicsMSMpod01_I[0][7];
02172       fEpicsMSTRD_Spa_U[4] = fEpicsMSMpod01_U[0][6];
02173       fEpicsMSTRD_Spa_I[4] = fEpicsMSMpod01_I[0][6];
02174 
02175       fEpics_Monitor_U[0] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U500:vmon");
02176       fEpics_Monitor_I[0] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U500:imon");
02177       fEpics_Monitor_U[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U501:vmon");
02178       fEpics_Monitor_I[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U501:imon");
02179       fEpics_Monitor_U[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U502:vmon");
02180       fEpics_Monitor_I[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U502:imon");
02181       fEpics_Monitor_U[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U503:vmon");
02182       fEpics_Monitor_I[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U503:imon");
02183       fEpics_Monitor_U[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U504:vmon");
02184       fEpics_Monitor_I[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U504:imon");
02185       fEpics_Monitor_U[5] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U505:vmon");
02186       fEpics_Monitor_I[5] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U505:imon");
02187       fEpics_Monitor_U[6] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U506:vmon");
02188       fEpics_Monitor_I[6] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U506:imon");
02189       fEpics_Monitor_U[7] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U507:vmon");
02190       fEpics_Monitor_I[7] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U507:imon");
02191       fEpics_Monitor_U[8] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U600:vmon");
02192       fEpics_Monitor_I[8] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U600:imon");
02193       fEpics_Monitor_U[9] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U601:vmon");
02194       fEpics_Monitor_I[9] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U601:imon");
02195 
02196       /*
02197         fEpicsMSTRD_Drift_U[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U102:vmon");
02198         fEpicsMSTRD_Drift_I[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U102:imon");
02199         fEpicsMSTRD_Anode_U[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U202:vmon");
02200         fEpicsMSTRD_Anode_I[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U202:imon");
02201         fEpicsMSTRD_Drift_U[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U103:vmon");
02202         fEpicsMSTRD_Drift_I[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U103:imon");
02203         fEpicsMSTRD_Anode_U[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U203:vmon");
02204         fEpicsMSTRD_Anode_I[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U203:imon");
02205         fEpicsMSTRD_Drift_U[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U104:vmon");
02206         fEpicsMSTRD_Drift_I[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U104:imon");
02207         fEpicsMSTRD_Anode_U[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U204:vmon");
02208         fEpicsMSTRD_Anode_I[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U204:imon");
02209         fEpicsMSTRD_Drift_U[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U105:vmon");
02210         fEpicsMSTRD_Drift_I[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U105:imon");
02211         fEpicsMSTRD_Anode_U[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U205:vmon");
02212         fEpicsMSTRD_Anode_I[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U205:imon");
02213         fEpicsMSTRD_Temp[0] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U0:temp");
02214         fEpicsMSTRD_Temp[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U100:temp");
02215         fEpicsMSTRD_Temp[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U200:temp");
02216         fEpicsMSTRD_Temp[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U300:temp");
02217         fEpicsMSTRD_Sus_U[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U1:vmon");
02218         fEpicsMSTRD_Sus_I[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U1:imon");
02219         fEpicsMSTRD_Spa_U[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U0:vmon");
02220         fEpicsMSTRD_Spa_I[1] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U0:imon");
02221         fEpicsMSTRD_Sus_U[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U3:vmon");
02222         fEpicsMSTRD_Sus_I[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U3:imon");
02223         fEpicsMSTRD_Spa_U[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U2:vmon");
02224         fEpicsMSTRD_Spa_I[2] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U2:imon");
02225         fEpicsMSTRD_Sus_U[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U5:vmon");
02226         fEpicsMSTRD_Sus_I[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U5:imon");
02227         fEpicsMSTRD_Spa_U[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U4:vmon");
02228         fEpicsMSTRD_Spa_I[3] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U4:imon");
02229         fEpicsMSTRD_Sus_U[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U7:vmon");
02230         fEpicsMSTRD_Sus_I[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U7:imon");
02231         fEpicsMSTRD_Spa_U[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U6:vmon");
02232         fEpicsMSTRD_Spa_I[4] = fEpicsInputEvent->GetDouble("CBM:TRD:ISEGHV_U6:imon");
02233 
02234         fEpics_Rich_U[1]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U0:vmon");
02235         fEpics_Rich_I[1]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U0:imon");
02236         fEpics_Rich_U[2]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U1:vmon");
02237         fEpics_Rich_I[2]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U1:imon");
02238         fEpics_Rich_U[3]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U2:vmon");
02239         fEpics_Rich_I[3]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U2:imon");
02240         fEpics_Rich_U[4]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U3:vmon");
02241         fEpics_Rich_I[4]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U3:imon");
02242         fEpics_Rich_U[5]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U4:vmon");
02243         fEpics_Rich_I[5]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U4:imon");
02244         fEpics_Rich_U[6]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U5:vmon");
02245         fEpics_Rich_I[6]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U5:imon");
02246         fEpics_Rich_U[7]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U6:vmon");
02247         fEpics_Rich_I[7]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U6:imon");
02248         fEpics_Rich_U[8]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U7:vmon");
02249         fEpics_Rich_I[8]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U7:imon");
02250 
02251         fEpics_Rich_U[9]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U8:vmon");
02252         fEpics_Rich_I[9]  = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U8:imon");
02253         fEpics_Rich_U[10] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U9:vmon");
02254         fEpics_Rich_I[10] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U9:imon");
02255         fEpics_Rich_U[11] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U10:vmon");
02256         fEpics_Rich_I[11] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U10:imon");
02257         fEpics_Rich_U[12] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U11:vmon");
02258         fEpics_Rich_I[12] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U11:imon");
02259         fEpics_Rich_U[13] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U12:vmon");
02260         fEpics_Rich_I[13] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U12:imon");
02261         fEpics_Rich_U[14] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U13:vmon");
02262         fEpics_Rich_I[14] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U13:imon");
02263         fEpics_Rich_U[15] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U14:vmon");
02264         fEpics_Rich_I[15] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U14:imon");
02265         fEpics_Rich_U[16] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U15:vmon");
02266         fEpics_Rich_I[16] = fEpicsInputEvent->GetDouble("CBM:GIE:ISEGHV_U15:imon");
02267       */
02268       // JAM: we do not histogram these here, since this can be configured in generic epics monitor
02269       // however, special plots can be filled here.
02270     }
02271  
02272   if(fEpicsInputEvent &&  fEpicsInputEvent->IsValid()){
02273     Int_t nBin = fEpics_TrdGasFlowMonitor->GetNbinsX();
02274     for (Int_t ibin = 1; ibin <= nBin; ibin++){
02275       if (ibin < nBin) {
02276         fEpics_TrdGasFlowMonitor->SetBinContent(ibin,fEpics_TrdGasFlowMonitor->GetBinContent(ibin + 1));
02277         fEpics_TrdIntegGasFlowMonitor->SetBinContent(ibin,fEpics_TrdIntegGasFlowMonitor->GetBinContent(ibin + 1));
02278       } else {
02279         fEpics_TrdGasFlowMonitor->SetBinContent(ibin,fEpicsTrdGasFlow);
02280         fEpics_TrdIntegGasFlowMonitor->SetBinContent(ibin,fEpicsTrdIntegGasFlow);
02281       }
02282     }
02283     for (Int_t sl = 0; sl < MPOD00SLOT; sl++) {
02284       for (Int_t ch = 0; ch < MPOD00CHA; ch++) {
02285         Int_t nbin =  fEpicsMSMpod00_Monitor_U[sl][ch]->GetNbinsX();
02286         for (Int_t ibin = 1; ibin <= nbin; ibin++){
02287           if (ibin < nbin) {
02288             fEpicsMSMpod00_Monitor_U[sl][ch]->SetBinContent(ibin,fEpicsMSMpod00_Monitor_U[sl][ch]->GetBinContent(ibin + 1));
02289             fEpicsMSMpod00_Monitor_I[sl][ch]->SetBinContent(ibin,fEpicsMSMpod00_Monitor_I[sl][ch]->GetBinContent(ibin + 1));
02290           }
02291           else {
02292             fEpicsMSMpod00_Monitor_U[sl][ch]->SetBinContent(ibin,fEpicsMSMpod00_U[sl][ch]);
02293             fEpicsMSMpod00_Monitor_I[sl][ch]->SetBinContent(ibin,fEpicsMSMpod00_I[sl][ch]);  // LV I in A
02294           }
02295         }
02296       }
02297     }
02298 
02299     for (Int_t sl = 0; sl < MPOD01SLOT; sl++) {
02300       for (Int_t ch = 0; ch < MPOD01CHA; ch++) {
02301         Int_t nbin =  fEpicsMSMpod01_Monitor_U[sl][ch]->GetNbinsX();
02302         for (Int_t ibin = 1; ibin <= nbin; ibin++){
02303           if (ibin < nbin) {
02304             fEpicsMSMpod01_Monitor_U[sl][ch]->SetBinContent(ibin,fEpicsMSMpod01_Monitor_U[sl][ch]->GetBinContent(ibin + 1));
02305             fEpicsMSMpod01_Monitor_I[sl][ch]->SetBinContent(ibin,fEpicsMSMpod01_Monitor_I[sl][ch]->GetBinContent(ibin + 1));
02306           }
02307           else {
02308             fEpicsMSMpod01_Monitor_U[sl][ch]->SetBinContent(ibin,fEpicsMSMpod01_U[sl][ch]);
02309             fEpicsMSMpod01_Monitor_I[sl][ch]->SetBinContent(ibin,fEpicsMSMpod01_I[sl][ch] * 1e9 );  // HV I in nA
02310           }
02311         }
02312       }
02313     }
02314 
02315     for (Int_t i = 0; i < 8; i++) {
02316       Int_t nbin = fEpics_MonitorU[i]->GetNbinsX();
02317       for (Int_t ibin = 1; ibin <= nbin; ibin++){
02318         if (ibin < nbin) {
02319           fEpics_MonitorU[i]->SetBinContent(ibin, fEpics_MonitorU[i]->GetBinContent(ibin + 1));
02320           fEpics_MonitorI[i]->SetBinContent(ibin, fEpics_MonitorI[i]->GetBinContent(ibin + 1));
02321         }
02322         else {
02323           fEpics_MonitorU[i]->SetBinContent(ibin, fEpics_Monitor_U[i]);
02324           if (fPar->show_currentSpikes)
02325             fEpics_MonitorI[i]->SetBinContent(ibin, fEpics_Monitor_I[i] * 1e9 );  // scaleup I to make it visible in the plots
02326           else
02327             if (fEpics_Monitor_I[i] < 0.5)
02328               fEpics_MonitorI[i]->SetBinContent(ibin, fEpics_Monitor_I[i] * 1e9 );  // scaleup I to make it visible in the plots
02329             else
02330               fEpics_MonitorI[i]->SetBinContent(ibin, fEpics_MonitorI[i]->GetBinContent(ibin - 1) ); // use previous entry
02331         }
02332       }
02333     }
02334     
02335     for (Int_t mstrd = 1; mstrd < MSTRDNUM; mstrd++) {
02336       Int_t nbin = fEpicsMSTRD_AnodeU[mstrd]->GetNbinsX();
02337       for (Int_t ibin = 1; ibin <= nbin; ibin++){
02338         if (ibin < nbin) {
02339           fEpicsMSTRD_DriftU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_DriftU[mstrd]->GetBinContent(ibin + 1));
02340           fEpicsMSTRD_DriftI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_DriftI[mstrd]->GetBinContent(ibin + 1));
02341           fEpicsMSTRD_AnodeU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_AnodeU[mstrd]->GetBinContent(ibin + 1));
02342           fEpicsMSTRD_AnodeI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_AnodeI[mstrd]->GetBinContent(ibin + 1));
02343           fEpicsMSTRD_SpaU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_SpaU[mstrd]->GetBinContent(ibin + 1));
02344           fEpicsMSTRD_SpaI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_SpaI[mstrd]->GetBinContent(ibin + 1));
02345           fEpicsMSTRD_SusU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_SusU[mstrd]->GetBinContent(ibin + 1));
02346           fEpicsMSTRD_SusI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_SusI[mstrd]->GetBinContent(ibin + 1));
02347           if (mstrd == 1){
02348             fEpicsMSTRD_T[0]->SetBinContent(ibin, fEpicsMSTRD_T[0]->GetBinContent(ibin + 1));
02349             fEpicsMSTRD_T[1]->SetBinContent(ibin, fEpicsMSTRD_T[1]->GetBinContent(ibin + 1));
02350             fEpicsMSTRD_T[2]->SetBinContent(ibin, fEpicsMSTRD_T[2]->GetBinContent(ibin + 1));
02351             fEpicsMSTRD_T[3]->SetBinContent(ibin, fEpicsMSTRD_T[3]->GetBinContent(ibin + 1));
02352             fEpicsMSTRD_T[4]->SetBinContent(ibin, fEpicsMSTRD_T[4]->GetBinContent(ibin + 1));
02353             fEpicsMSTRD_T[5]->SetBinContent(ibin, fEpicsMSTRD_T[5]->GetBinContent(ibin + 1));
02354             fEpicsMSTRD_T[6]->SetBinContent(ibin, fEpicsMSTRD_T[6]->GetBinContent(ibin + 1));
02355             fEpicsMSTRD_T[7]->SetBinContent(ibin, fEpicsMSTRD_T[7]->GetBinContent(ibin + 1));
02356             fEpicsMSTRD_T[8]->SetBinContent(ibin, fEpicsMSTRD_T[8]->GetBinContent(ibin + 1));
02357             fEpicsMSTRD_T[9]->SetBinContent(ibin, fEpicsMSTRD_T[9]->GetBinContent(ibin + 1));
02358           }
02359         }
02360         else {
02361           // Drift HV
02362           fEpicsMSTRD_DriftU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Drift_U[mstrd]);
02363           if (fPar->show_currentSpikes)
02364             fEpicsMSTRD_DriftI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Drift_I[mstrd]  * 1e9);
02365           else
02366             if (fEpicsMSTRD_Drift_I[mstrd] < 0.5) // Filter know hardware errors
02367               fEpicsMSTRD_DriftI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Drift_I[mstrd] * 1e9);
02368           // Anode HV
02369           fEpicsMSTRD_AnodeU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Anode_U[mstrd]);
02370           if (fPar->show_currentSpikes)
02371             fEpicsMSTRD_AnodeI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Anode_I[mstrd] * 1e9);
02372           else
02373             if (fEpicsMSTRD_Anode_I[mstrd] < 0.5) // Filter know hardware errors
02374               fEpicsMSTRD_AnodeI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Anode_I[mstrd] * 1e9);
02375           // MS TRD LV
02376           fEpicsMSTRD_SpaU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Spa_U[mstrd]);
02377           fEpicsMSTRD_SpaI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Spa_I[mstrd] * 10);
02378           fEpicsMSTRD_SusU[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Sus_U[mstrd]);
02379           fEpicsMSTRD_SusI[mstrd]->SetBinContent(ibin, fEpicsMSTRD_Sus_I[mstrd]);
02380           if (mstrd == 1){
02381             fEpicsMSTRD_T[0]->SetBinContent(ibin, fEpicsMSTRD_Temp[0]);
02382             fEpicsMSTRD_T[1]->SetBinContent(ibin, fEpicsMSTRD_Temp[1]);
02383             fEpicsMSTRD_T[2]->SetBinContent(ibin, fEpicsMSTRD_Temp[2]);
02384             fEpicsMSTRD_T[3]->SetBinContent(ibin, fEpicsMSTRD_Temp[3]);
02385             fEpicsMSTRD_T[4]->SetBinContent(ibin, fEpicsMSTRD_Temp[4]);
02386             fEpicsMSTRD_T[5]->SetBinContent(ibin, fEpicsMSTRD_Temp[5]);
02387             fEpicsMSTRD_T[6]->SetBinContent(ibin, fEpicsMSTRD_Temp[6]);
02388             fEpicsMSTRD_T[7]->SetBinContent(ibin, fEpicsMSTRD_Temp[7]);
02389             fEpicsMSTRD_T[8]->SetBinContent(ibin, fEpicsMSTRD_Temp[8]);
02390             fEpicsMSTRD_T[9]->SetBinContent(ibin, fEpicsMSTRD_Temp[9]);
02391           }
02392         }
02393       }
02394     }
02395 
02396     // RICH
02397     for (Int_t irich = 1; irich < RICHNUM; irich++) {
02398       Int_t nbin = fEpics_RichU[irich]->GetNbinsX();
02399       for (Int_t ibin = 1; ibin <= nbin; ibin++){
02400         if (ibin < nbin) {
02401           fEpics_RichU[irich]->SetBinContent(ibin, fEpics_RichU[irich]->GetBinContent(ibin + 1));
02402           fEpics_RichI[irich]->SetBinContent(ibin, fEpics_RichI[irich]->GetBinContent(ibin + 1));
02403         } else {
02404           // Anode HV
02405           fEpics_RichU[irich]->SetBinContent(ibin, fEpics_Rich_U[irich]);
02406           if (fPar->show_currentSpikes)
02407             fEpics_RichI[irich]->SetBinContent(ibin, fEpics_Rich_I[irich] * 1e7);
02408           else
02409             if (fEpics_Rich_I[irich] < 0.5) // Filter know hardware errors
02410               fEpics_RichI[irich]->SetBinContent(ibin, fEpics_Rich_I[irich] * 1e7);
02411         }
02412       }
02413     }
02414   }
02415 
02416 
02417 
02418 
02419 
02420 
02421   if(fCrateInputEvent && fCrateInputEvent->IsPulser()) {
02422     // SL: do we need to process data when pulser event is there?
02423     // One could estimate some backgrounds for QDCs or Spadics here
02424     // For the moment just return
02425 
02426     return;
02427   }
02428 
02429   if (fBeamEvent) {
02430 
02431 
02433     // JAM: this may be moved to third analysis "tracking" step?
02434     Int_t xNrFiberHod1Cluster(0); Int_t xNrFiberHod2Cluster(0);
02435     Int_t yNrFiberHod1Cluster(0); Int_t yNrFiberHod2Cluster(0);
02436     Double_t xPosFiberHod1(0); Double_t xPosFiberHod2(0);
02437     Double_t yPosFiberHod1(0); Double_t yPosFiberHod2(0);
02438     if (fHodo1 && (fHodo1->NumHits()>0)) {
02439       xNrFiberHod1Cluster = fHodo1->NumHits();
02440       yNrFiberHod1Cluster = fHodo1->NumHits();
02441       xPosFiberHod1 = fHodo1->Hit(0).X;
02442       yPosFiberHod1 = fHodo1->Hit(0).Y;
02443 
02444     }
02445 
02446     // just provided something for the second hodoscope
02447     if (fHodo2 && (fHodo2->NumHits()>0)) {
02448       xNrFiberHod2Cluster = fHodo2->NumHits();
02449       yNrFiberHod2Cluster = fHodo2->NumHits();
02450       xPosFiberHod2 = fHodo2->Hit(0).X;
02451       yPosFiberHod2 = fHodo2->Hit(0).Y;
02452     }
02453     else {
02454 
02455     }
02456     if (fHodo1 && (fHodo1->NumHits()>0) && fHodo2 && (fHodo2->NumHits()>0)){
02457       fFiberHod1_2_x_alignment->Fill(xPosFiberHod1,xPosFiberHod2);
02458       fFiberHod1_2_y_alignment->Fill(yPosFiberHod1,yPosFiberHod2);
02459 
02460       fFiberHod1_2_dx_vs_x_alignment->Fill(xPosFiberHod1,xPosFiberHod2-xPosFiberHod1);
02461       fFiberHod1_2_dy_vs_y_alignment->Fill(yPosFiberHod1,yPosFiberHod2-yPosFiberHod1);
02462     }
02464     // here processing of NEW SPADIC V1.0
02465     // TODO implement reasonable things -
02466 
02467     // still spadic v1.0 is optional input
02468     if (fSpadicV10InputEvent) {
02469 
02470       for (UInt_t sid = 0; sid < MAX_SPADICV10; sid++) {
02471         TSpadicV10Data* theSpadicOne =
02472           dynamic_cast<TSpadicV10Data*>(fSpadicV10InputEvent->getEventElement(
02473                                                                               sid));
02474         if (theSpadicOne == 0)
02475           continue; // skip not configured ones
02476         if (!theSpadicOne->IsValid())
02477           continue; // required to suppress empty spadic data!
02478         // TODO: select here which spadics belong to the trd setup (for the moment all :))
02479 
02480 
02481         //cout <<"TTRDMuensterFrankfurtProc has spadic v1 data for sid"<<sid << endl;
02482         if (!fBeamEvent->fIsElectron && !fBeamEvent->fIsPion)
02483           PIDV10[sid] = 0;
02484         if (fBeamEvent->fIsPion)
02485           PIDV10[sid] = -1;
02486         if (fBeamEvent->fIsElectron)
02487           PIDV10[sid] = 1;
02488 
02489         // this shows how to process messages of each spadic data container:
02490 
02491         for (UInt_t MessageNr = 0;
02492              MessageNr < theSpadicOne->fExtMessages.size(); MessageNr++) {
02493           // cout << "  Processing message " << MessageNr << "from SPADIC " << sid << endl
02494 
02495           TSpadicV10MessageExtended msg = theSpadicOne->fExtMessages.at(
02496                                                                         MessageNr);
02497           if (msg.GetMessageType() != sp605::MSG_HIT)
02498             continue; // only interrested in HIT messages
02499 
02500           // extraxt message information
02501           UInt_t spadicNr = msg.GetSpadicNumber(); // should be the same as sid!
02502           UInt_t channel = msg.GetFullChNum(); // 0..MAX_SPADICV10CHANNELS = 32
02503           if(spadicNr>MAX_SPADICV10 || channel>MAX_SPADICV10CHANNELS)
02504             {
02505               std::cout<<"Spadic 1.0 indices in message out of range: ("<<spadicNr<<","<<channel<<"), skip message" << std::endl;
02506               continue;
02507             }
02508           //Double_t hitTime = msg.GetTriggerDeltaT(); // optionally check trigger delta times selected by spadiv10monitor
02509 
02510           // access to the trace of this message:
02511           sp605::Message & data = msg.GetSpadicV10Message();
02512           for (UInt_t bin = 0; bin < data.getTraceSize(); bin++) {
02513             int16_t val = data.getTrace(bin);
02514             fSpadicV10_input[spadicNr][channel]->SetBinContent(bin + 1, (int) val);
02515             // TODO: implement meaningful things here, like for spadic 0.3
02516             // HERE SPADIC 1.0 ANALYSIS
02517             //...
02518             //...
02520           } // for bin
02521         } // messagenr
02522       } // for (UInt_t sid = 0
02523     } // if spadicv10
02524 
02525 
02527       // here processing of SPADIC V0.3 as before:
02528     fSpadic_efficiency->Fill(0);
02529     Double_t rawData[NUM_SPADIC_CHA][SPADIC_TRACE_SIZE] = {{0.0}};
02530     Double_t cleanData[NUM_SPADIC_CHA][SPADIC_TRACE_SIZE] = {{0.0}};
02531     Double_t intensCh[NUM_SPADIC_CHA] = {0};
02532 
02533     Int_t maxChCorr[MAX_SPADIC] = {-1};
02534     Double_t dxPosCorr[MAX_SPADIC] = {0};
02535     Bool_t overnflowtingTB[NUM_SPADIC_CHA][SPADIC_TRACE_SIZE] = {{false}};
02536     Double_t intens[MAX_SPADIC] = {0};
02537     Double_t rowIntens[MAX_SPADIC] = {0};
02538  
02539     for (UInt_t sid = 1; sid < MAX_SPADIC; sid++)  //JAM: histogram index starts with 1 here!
02540       {
02541         TSpadicData* theSpadic=dynamic_cast<TSpadicData*>(fSpadicInputEvent->getEventElement(sid));
02542         if(theSpadic==0) continue; // skip not configured ones
02543         if(!theSpadic->IsValid()) continue; // required to suppress empty spadic data!
02544         //cout <<"TTRDMuensterFrankfurtProc has spadic data for sid"<<sid << endl;
02545         if (!fBeamEvent->fIsElectron && !fBeamEvent->fIsPion)
02546           PID[sid] = 0;
02547         if (fBeamEvent->fIsPion) 
02548           PID[sid] = -1;
02549         if (fBeamEvent->fIsElectron) 
02550           PID[sid] = 1;
02551 
02552         if (fPar->reSortChannel){
02553           if (fPar->ChMap[sid]) {
02554             Double_t tempSpadic[NUM_SPADIC_CHA][SPADIC_TRACE_SIZE];
02555             for (Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02556               for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02557                 tempSpadic[ch][bin] = theSpadic->fSpadicCompensated[ch][bin];
02558               }
02559             }
02560             for (Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02561               for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02562                 //              theSpadic->fSpadicCompensated[ch][bin] =  tempSpadic[UInt_t(ch - (NUM_SPADIC_CHA-1))][bin];
02563                 theSpadic->fSpadicCompensated[ch][bin] =  tempSpadic[UInt_t((NUM_SPADIC_CHA-1)-ch)][bin];
02564               }
02565             }
02566           }
02567         }
02568 
02569         // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Filter overflow events
02570         Bool_t overflow = false;
02571         Bool_t undershoot = false;
02572         for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02573           for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {         
02574             if (theSpadic->fSpadicOverflows[ch][bin]){
02575               overflow = true;
02576               overnflowtingTB[ch][bin] = true;
02577             }
02578             if (theSpadic->fSpadicUndershoots[ch][bin]){
02579               undershoot = true;
02580             }
02581           }
02582         }
02583           
02584         if (!fPar->Use_OverflowEvents && overflow)
02585           continue;
02586 
02587         Int_t maxCh(-1), maxSignal(0);
02588         Double_t baseline(0.0), signal(0.0);
02589         for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {            
02590           baseline = 0.0;
02591           signal = 0.0;
02592 
02593           // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Baseline correction
02594           if (fPar->Run_PedestleCorrection) {
02595             for (unsigned bin = 0; (Int_t)bin <= fPar->pedestalTB; bin++) {
02596               if (fPar->Run_SimpleNoiseReduction)
02597                 baseline += theSpadic->fSpadicCompensated[ch][bin];
02598               else
02599                 baseline += theSpadic->fSpadicPulse[ch][bin];
02600             }
02601             if (fPar->pedestalTB > 0 && fPar->pedestalTB < SPADIC_TRACE_SIZE)
02602               baseline /= (Double_t)fPar->pedestalTB;
02603             else
02604               baseline = 0.0;
02605             for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02606               if (fPar->Run_SimpleNoiseReduction)
02607                 rawData[ch][bin] = theSpadic->fSpadicCompensated[ch][bin];
02608               else
02609                 rawData[ch][bin] = theSpadic->fSpadicPulse[ch][bin];
02610             }
02611           }
02613           Float_t pedestal[NUM_SPADIC_CHA] = {0.0};                     
02614           if (!theSpadic->fSpadicSignalCh[ch]){
02615             for (UInt_t bin = 0; bin < SPADIC_TRACE_SIZE-1; bin++){
02616               if (fPar->Run_SimpleNoiseReduction)
02617                 fSpadic_input[sid][ch]->SetBinContent(bin + 1,theSpadic->fSpadicCompensated[ch][bin]);
02618               else
02619                 fSpadic_input[sid][ch]->SetBinContent(bin + 1,theSpadic->fSpadicPulse[ch][bin]);
02620               pedestal[ch] += rawData[ch][bin];
02621               fSpadic_ADCdistMF[sid][ch]->Fill(rawData[ch][bin]);
02622             }
02623             pedestal[ch] /= SPADIC_TRACE_SIZE;
02624             fSpadic_PedelPos2DMF[sid]->Fill(ch,pedestal[ch]);
02625           } 
02626           fSpadic_NoiseDistMF[sid]->SetBinContent(ch+1, fSpadic_ADCdistMF[sid][ch]->GetRMS());          
02627           fSpadic_NoiseDist2DMF[sid]->Fill(ch, fSpadic_ADCdistMF[sid][ch]->GetRMS());
02628           fSpadic_PedelPosMF[sid]->SetBinContent(ch+1, fSpadic_ADCdistMF[sid][ch]->GetMean());          
02629                 
02631           for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02632             rawData[ch][bin] -= baseline;
02633             fSpadic_baseline[sid][ch]->SetBinContent(bin + 1,rawData[ch][bin]);
02634             signal += rawData[ch][bin];
02635 
02636           }
02637           
02638           // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Find channel with maximum signal
02639           if (signal > maxSignal){
02640             maxSignal = signal;
02641             maxCh = ch;
02642           }
02643         }
02644         // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Noise correction CancelNoise_Cova
02645         if (!fPar->Run_SimpleNoiseReduction) {    
02646           if (!fSpadic_baseline[sid] || !fSpadic_output[sid] || !(TSpadicData*)theSpadic) continue;
02647           CancelNoise_Cova((Int_t)sid, fSpadic_baseline[sid], fSpadic_output[sid], (TSpadicData*)theSpadic, false);
02648           for (Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02649             for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02650               cleanData[ch][bin] = fSpadic_output[sid][ch]->GetBinContent(bin + 1);
02651             }
02652           }
02653         }
02654         // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Find correlated channel
02655           
02656         //      Float_t max = 0;
02657         //      Int_t maxCorr = -1;
02658         Int_t nSignalChannel = 0;
02659         Bool_t channelSignal[NUM_SPADIC_CHA] = {false};
02660         for (Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02661           if (theSpadic->fSpadicSignalCh[ch]) {
02662             nSignalChannel++;
02663             channelSignal[ch] = true;
02664           }
02665         }
02666         /*
02667           Double_t corrMatrix[NUM_SPADIC_CHA][NUM_SPADIC_CHA] = {{0}};
02668           for (Int_t iChannel = 0; iChannel < NUM_SPADIC_CHA; iChannel++){
02669           Double_t iAverage = 0;
02670           for (Int_t TimeBin = 0; TimeBin < SPADIC_TRACE_SIZE; TimeBin++)
02671           iAverage += rawData[iChannel][TimeBin];
02672           iAverage /= Float_t(NUM_SPADIC_CHA);
02673           for (Int_t jChannel = 0; jChannel < NUM_SPADIC_CHA; jChannel++){
02674           corrMatrix[iChannel][jChannel] = 0;
02675      
02676           Double_t jAverage = 0;
02677           for (Int_t TimeBin = 0; TimeBin < SPADIC_TRACE_SIZE; TimeBin++){
02678           jAverage += rawData[jChannel][TimeBin];
02679           }
02680           jAverage /= Float_t(NUM_SPADIC_CHA);
02681           Double_t Eij = 0;
02682           Double_t Ei = 0;
02683           Double_t Ej = 0;
02684           for (Int_t TimeBin = 0; TimeBin < SPADIC_TRACE_SIZE; TimeBin++){
02685           Eij += (rawData[iChannel][TimeBin] - iAverage) * (rawData[jChannel][TimeBin] - jAverage);
02686           Ei += fabs(rawData[iChannel][TimeBin] - iAverage);
02687           Ej += fabs(rawData[jChannel][TimeBin] - jAverage);
02688           }      
02689           corrMatrix[iChannel][jChannel] = (Eij / (Ei * Ej) - 0.0222) * 10000;
02690           if (corrMatrix[iChannel][jChannel] > max){
02691           max = corrMatrix[iChannel][jChannel];
02692           maxCorr = jChannel;
02693           }        
02694           }
02695           }
02696           for (Int_t iChannel = 0; iChannel < NUM_SPADIC_CHA; iChannel++){
02697           for (Int_t jChannel = 0; jChannel < NUM_SPADIC_CHA; jChannel++){
02698           corrMatrix[iChannel][jChannel] /= max;
02699           }
02700           }
02701           for (Int_t jChannel = 0; jChannel < NUM_SPADIC_CHA; jChannel++){
02702           if (corrMatrix[maxCorr][jChannel] >= 0.20){
02703           channelSignal[jChannel] = true;
02704           nSignalChannel++;
02705           }
02706           }
02707         */
02708 
02709 
02710 
02711         // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Noise correction
02712         Double_t maxAmp[NUM_SPADIC_CHA] = {0};
02713         Int_t hitTime[NUM_SPADIC_CHA] = {0};
02714         Double_t average;
02715 
02716         Double_t intens3pads = 0;
02717         Double_t intensSignalPads = 0;
02718         for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02719           average = 0.;
02720           for (Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02721             //maxAmp[ch] = 0.;  
02722             //hitTime[ch] = 0.;
02723             //if (ch < maxCh-1 || ch > maxCh+1)
02724             if (!channelSignal[ch])
02725               average += rawData[ch][bin];
02726           }
02727           average /= (Double_t(NUM_SPADIC_CHA - nSignalChannel));             
02728           for (Int_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {
02729             //      TH1* tracehis = fSpadic_output[sid][ch]; 
02730             //if (!theSpadic->fSpadicOverflows[ch][bin])
02731             if (fPar->Run_SimpleNoiseReduction){
02732               cleanData[ch][bin] = rawData[ch][bin] - average;
02733               //else
02734               //cleanData[ch][bin] = rawData[ch][bin];
02735               //tracehis
02736               fSpadic_output[sid][ch]->SetBinContent(bin + 1, cleanData[ch][bin]);
02737             }
02738             if (fSpadic_integWindow[sid]->Test(bin)) {
02739               intensCh[ch] += cleanData[ch][bin];
02740               if (theSpadic->fSpadicSignalCh[ch])
02741                 intensSignalPads += cleanData[ch][bin];
02742               if (ch >= maxCh-1 && ch <= maxCh+1)
02743                 intens3pads += cleanData[ch][bin];
02744             }
02745             //if (ch == maxCh)
02746             if (cleanData[ch][bin] > maxAmp[ch]){
02747               maxAmp[ch] = cleanData[ch][bin];
02748               hitTime[ch] = bin;
02749             }
02750             rowIntens[sid] += intensCh[ch];
02751           }
02752 
02753         }
02754         fSpadic_maxAmplitude[sid]->Fill(maxAmp[maxCh]);
02755         fSpadic_hitTime[sid]->Fill(hitTime[maxCh]);
02756         fSpadic_hitTime_maxAmplitude[sid]->Fill(hitTime[maxCh],maxAmp[maxCh]);
02757         if (fHodo1 && (fHodo1->NumHits()>0) && fHodo2 && (fHodo2->NumHits()>0)){
02758           fSpadic_hitTime_Hodo1Xposition[sid]->Fill(hitTime[maxCh],xPosFiberHod1);
02759           fSpadic_hitTime_Hodo2Xposition[sid]->Fill(hitTime[maxCh],xPosFiberHod2);
02760           fSpadic_hitTime_Hodo1Yposition[sid]->Fill(hitTime[maxCh],yPosFiberHod1);
02761           fSpadic_hitTime_Hodo2Yposition[sid]->Fill(hitTime[maxCh],yPosFiberHod2);
02762           if (overflow){
02763             fSpadic_overflow_Hodo1position[sid]->Fill(xPosFiberHod1,yPosFiberHod1);
02764             fSpadic_overflow_Hodo2position[sid]->Fill(xPosFiberHod2,yPosFiberHod2);
02765           }
02766         }
02767         if (fBeamEvent->fIsPion){
02768           fSpadic_pi_maxAmplitude[sid]->Fill(maxAmp[maxCh]);
02769           fSpadic_pi_hitTime[sid]->Fill(hitTime[maxCh]);
02770         }
02771         if (fBeamEvent->fIsElectron){
02772           fSpadic_el_maxAmplitude[sid]->Fill(maxAmp[maxCh]);
02773           fSpadic_el_hitTime[sid]->Fill(hitTime[maxCh]);
02774         }
02775         maxChCorr[sid] = maxCh;
02776         fSpadic_padMax[sid]->Fill(maxCh);
02777 
02778         if(fPar->Use_ClusteredSignal)
02779           intens[sid] = intensSignalPads;
02780         else
02781           intens[sid] = intens3pads;
02782         
02783         /*
02784           fSpadic_intens[sid]->Fill(intensSignalPads);
02785           if (fBeamEvent->fIsPion)
02786           fSpadic_pi_intens[sid]->Fill(intensSignalPads);
02787           if (fBeamEvent->fIsElectron) 
02788           fSpadic_el_intens[sid]->Fill(intensSignalPads);
02789         */
02790         if (fBeamEvent->fIsElectron){
02791           if (sid == 10) {
02792             if (fSpadic_hitTimeCond[sid]->Test(hitTime[maxCh])){
02793               if (fSpadic_minAmplitudeCond[sid]->Test(maxAmp[maxCh])){
02794                 if (fSpadic_padMaxWindow[sid]->Test(maxCh)) {
02795                   if ((xPosFiberHod1 < 0 && xPosFiberHod2 < 0) && (yPosFiberHod1 < 0  && yPosFiberHod2 < 0))
02796                     fSpadic_intens_el_00->Fill(intens[sid]);
02797                   else if ((xPosFiberHod1 >= 0 && xPosFiberHod2 >= 0) && (yPosFiberHod1 < 0 && yPosFiberHod2 < 0))
02798                     fSpadic_intens_el_10->Fill(intens[sid]);
02799                   else if ((xPosFiberHod1 < 0 && xPosFiberHod2 < 0 ) && (yPosFiberHod1 >= 0  && yPosFiberHod2 >= 0))
02800                     fSpadic_intens_el_01->Fill(intens[sid]);
02801                   else if ((xPosFiberHod1 >= 0 && xPosFiberHod2 >= 0) && (yPosFiberHod1 >= 0  && yPosFiberHod2 >= 0))
02802                     fSpadic_intens_el_11->Fill(intens[sid]);
02803                   if (maxCh < 4)
02804                     fSpadic_intens_el_left->Fill(intens[sid]);
02805                   else
02806                     fSpadic_intens_el_right->Fill(intens[sid]);
02807                 }
02808               }
02809             }
02810           }
02811         }
02812         if (fSpadic_hitTimeCond[sid]->Test(hitTime[maxCh])){
02813           if (fSpadic_minAmplitudeCond[sid]->Test(maxAmp[maxCh])){
02814             //if (maxCh >= 1 && maxCh < NUM_SPADIC_CHA - 1){
02815             if (!fPar->Merge_Rows) {
02816               if (fSpadic_padMaxWindow[sid]->Test(maxCh)) {
02817                 if (intensCh[maxCh] / (intensCh[maxCh-1] + intensCh[maxCh] + intensCh[maxCh+1]) > 0.33) { // => signal on the channel wich is supposed to have the highest signal has less than 1/3 of the total signal -> misidentified maximum channel
02818                   // 0 == all; 1 == noPID; 2 == electron; 3 == pion //
02819                   Int_t intensBin = fSpadic_intens[sid]->FindBin(intens[sid]);
02820                   Int_t pidBin = 1; 
02821                   Int_t nBin = fSpadic_intens[sid]->GetNbinsX();
02822                   Int_t nEntries;
02823                   Double_t value(0), value_over(0), value_under(0), value_3pad(0);
02824                   TH1 *spectrum=0;
02825                   TH1 *spectrum_over = NULL;
02826                   TH1 *spectrum_under = NULL;
02827                   TH1 *spectrum_3pad = NULL;
02828                   if (fBeamEvent->fIsPion){
02829                     spectrum = fSpadic_pi_intens[sid];
02830                     spectrum_over = fSpadic_pi_intens_over[sid];
02831                     spectrum_under = fSpadic_pi_intens_under[sid];
02832                     //spectrum_3pad = fSpadic_intens_3pad[sid];
02833                     pidBin = fSpadic_pid[sid]->FindBin(3);
02834                   }
02835                   if (fBeamEvent->fIsElectron){
02836                     spectrum = fSpadic_el_intens[sid];
02837                     spectrum_over = fSpadic_el_intens_over[sid];
02838                     spectrum_under = fSpadic_el_intens_under[sid];
02839                     pidBin = fSpadic_pid[sid]->FindBin(2);
02840                   }
02841                   if (!(fBeamEvent->fIsPion) && !(fBeamEvent->fIsElectron)){
02842                     pidBin = fSpadic_pid[sid]->FindBin(1);
02843                     nEntries = fSpadic_pid[sid]->GetBinContent(pidBin);
02844                     fSpadic_pid[sid]->SetBinContent(pidBin, nEntries + 1);
02845                   }
02846                   for (Int_t iBin = 1; iBin <= nBin; iBin++) {
02847                     nEntries = fSpadic_pid[sid]->GetBinContent(fSpadic_pid[sid]->FindBin(0));
02848                     value = fSpadic_intens[sid]->GetBinContent(iBin) * nEntries;
02849                     if (iBin == intensBin){
02850                       value++;
02851                       fSpadic_pid[sid]->SetBinContent(1, nEntries + 1);
02852                     }
02853                     fSpadic_intens[sid]->SetBinContent(iBin, value / (nEntries + 1));
02854                     if (pidBin > 2) {
02855                       nEntries = fSpadic_pid[sid]->GetBinContent(pidBin);
02856                       value = spectrum->GetBinContent(iBin) * nEntries;
02857                       value_over = spectrum_over->GetBinContent(iBin) * nEntries;
02858                       value_under = spectrum_under->GetBinContent(iBin) * nEntries;
02859                       //value_3pad = spectrum_3pad->GetBinContent(iBin) * nEntries;
02860                       if (iBin == intensBin){
02861                         value++;
02862                         //value_3pad++;
02863                         if (overflow)
02864                           value_over++;
02865                         if (undershoot)
02866                           value_under++;
02867                         fSpadic_pid[sid]->SetBinContent(pidBin, nEntries + 1);
02868                       }
02869                       spectrum->SetBinContent(iBin, value / (nEntries + 1));
02870                       spectrum_over->SetBinContent(iBin, value_over / (nEntries + 1));
02871                       spectrum_under->SetBinContent(iBin, value_under / (nEntries + 1));
02872                       //spectrum_3pad->SetBinContent(iBin, value_3pad / (nEntries + 1));
02873                     }
02874                   }     
02875                 }
02876               }
02877             }
02878             if (fSpadic_minIntensCond[sid]->Test(intens[sid])){
02879               // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Signal/Noise
02880               Double_t avNoise = 0;
02881               Double_t maxNoise = 0;
02882               Double_t minNoise = 255;
02883               Double_t avSignal = 0;
02884               Double_t avNoiseClean = 0;
02885               Double_t avSignalClean = 0;
02886               for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02887                 if (bin < 5){
02888                   avNoise += uint8_t(theSpadic->fSpadicPulse[maxCh][bin]);
02889                   if (uint8_t(theSpadic->fSpadicPulse[maxCh][bin]) > maxNoise)
02890                     maxNoise = uint8_t(theSpadic->fSpadicPulse[maxCh][bin]);
02891                   if (uint8_t(theSpadic->fSpadicPulse[maxCh][bin]) < minNoise)
02892                     minNoise = uint8_t(theSpadic->fSpadicPulse[maxCh][bin]);
02893                   avNoiseClean += cleanData[maxCh][bin];
02894                 }
02895                 if (bin > 14 && bin < 20){
02896                   avSignal += uint8_t(theSpadic->fSpadicPulse[maxCh][bin]);     
02897                   avSignalClean += cleanData[maxCh][bin];
02898                 }  
02899               }
02900               TString s2n = ("S/N=xx");
02901               if (avNoise != 0){
02902                 double val = avSignal / (maxNoise - minNoise); // /avNoise;
02903                 double weight = fSpadic_S2Ncnt->GetBinContent(sid);
02904                 double value0 = fSpadic_S2N->GetBinContent(sid);
02905                 s2n.Form("S/N=%f",(value0 * weight + val) / (weight + 1.));
02906                 fSpadic_S2N->SetBinContent(sid, (value0 * weight + val) / (weight + 1.));
02907                 fSpadic_S2Ncnt->SetBinContent(sid, weight + 1);
02908               }
02909               if (avNoiseClean != 0){
02910                 double  val = avSignalClean/avNoiseClean;
02911                 double  weight = fSpadic_S2Ncnt->GetBinContent(sid) -1;
02912                 double  value0 = fSpadic_S2Ncleaned->GetBinContent(sid);
02913                 fSpadic_S2Ncleaned->SetBinContent(sid, (value0 * weight + val) / (weight + 1.));                
02914               }
02915               S2N[sid]->SetText(0.1,0.8,s2n.Data());
02916               
02917               //maxChCorr[sid] = maxCh;
02918               //fSpadic_padMax[sid]->Fill(maxCh);
02919               // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PRF  
02920               //if (maxCh >= 1 && maxCh < NUM_SPADIC_CHA - 1){
02921               if (fSpadic_padMaxWindow[sid]->Test(maxCh)) {
02922                 fSpadic_efficiency->Fill(sid);
02923                 Double_t dxPos = 0.5 * log((intensCh[maxCh+1] / intensCh[maxCh-1])) / log((pow(intensCh[maxCh],2) / (intensCh[maxCh+1] * intensCh[maxCh-1])));
02924 
02925                 //              dxPosCorr[sid] = dxPos * fPar->fPadwidth[sid] + maxCh * fPar->fPadwidth[sid] + fPar->fPadwidth[sid];
02926                 //              fSpadic_recoPos[sid]->Fill( ( dxPos + maxCh + 0.5 ) * fPar->fPadwidth[sid]);  // reconstructed position (0..57)
02927 
02928                 dxPosCorr[sid] = (dxPos + maxCh + 0.5) * fPar->fPadwidth[sid]; // reconstructed position (-1/2 pad .. 7 1/2 pad)
02929                 fSpadic_recoPos[sid]->Fill( dxPosCorr[sid] );                  // reconstructed position (   0 pad .. 8 pad)
02930                 fSpadic_hitTime_position[sid]->Fill(hitTime[maxCh], dxPosCorr[sid]);   
02931                 Double_t chargePercent = intensCh[maxCh-1] / (intensCh[maxCh-1] + intensCh[maxCh] + intensCh[maxCh+1]);
02932                 fSpadic_PRFMF[sid]->Fill(-dxPos-1,chargePercent);
02933                 //PRF1D->Fill(-dxPos-pWidth,chargePercent);
02934                 chargePercent = intensCh[maxCh] / (intensCh[maxCh-1] + intensCh[maxCh] + intensCh[maxCh+1]);
02935                 fSpadic_PRFMF[sid]->Fill(dxPos,chargePercent);
02936                 //PRF1D->Fill(dxPos,chargePercent);
02937                 chargePercent = intensCh[maxCh+1] / (intensCh[maxCh-1] + intensCh[maxCh] + intensCh[maxCh+1]);
02938                 fSpadic_PRFMF[sid]->Fill(-dxPos+1,chargePercent);
02939                 //PRF1D->Fill(-dxPos+pWidth,chargePercent);
02940                 
02941               } 
02942 
02943               // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Average pulse shape
02944               //for (UInt_t ch = 0; ch < NUM_SPADIC_CHA; ch++) {              
02945               if (fBeamEvent->fIsPion) {
02946                 for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02947                   double val = cleanData[maxCh][bin]; // take from previous ste
02948                   fSpadic_pi_shape2D[sid]->Fill(bin, val);
02949                   //double val = fSpadicInputEvent->fSpadicCompensated[sid][ch][bin]; // take from previous step
02950                   double weight = fSpadic_pi_shapecnt[sid]->GetBinContent(bin+1);
02951                   double value0 = fSpadic_pi_shape[sid]->GetBinContent(bin+1);
02952                         
02953                   fSpadic_pi_shape[sid]->SetBinContent(bin+1, (value0 * weight + val) / (weight + 1.));
02954                   fSpadic_pi_shapecnt[sid]->SetBinContent(bin+1, weight+1.);
02955                 }
02956               }         
02957               if (fBeamEvent->fIsElectron) {
02958                 for (unsigned bin = 0; bin < SPADIC_TRACE_SIZE; bin++) {
02959                   double val = cleanData[maxCh][bin];
02960                   fSpadic_el_shape2D[sid]->Fill(bin, val);
02961                   //double val = fSpadicInputEvent->fSpadicCompensated[sid][ch][bin]; // take from previous step
02962                   double weight = fSpadic_el_shapecnt[sid]->GetBinContent(bin+1);
02963                   double value0 = fSpadic_el_shape[sid]->GetBinContent(bin+1);
02964                         
02965                   fSpadic_el_shape[sid]->SetBinContent(bin+1, (value0 * weight + val) / (weight + 1.));
02966                   fSpadic_el_shapecnt[sid]->SetBinContent(bin+1, weight+1.);
02967                 }        
02968               }
02969 
02970               //        } // for ch
02971             }//fSpadic_minIntensCond
02972           }//fSpadic_minAmplitudeCond
02973         }//fSpadic_hitTimeCond
02974         // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Multihit 
02975          
02976         //      Int_t maxCounter = 0;
02977         Bool_t multiHit = false;
02978         /*
02979           Double_t delta(0), preDelta(0);
02980           for (Int_t bin = 0; bin < SPADIC_TRACE_SIZE-1; bin++){
02981           delta = cleanData[maxCh][bin+1] - cleanData[maxCh][bin];            
02982           if (delta < 0 && preDelta > 0 && cleanData[maxCh][bin] >= 0.75 * maxAmp[maxCh])
02983           maxCounter++;
02984           if(maxCounter > 2)
02985           multiHit = true;
02986             
02987           preDelta = delta;
02988           }
02989     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 1,"all events");
02990     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 2,"noise");
02991     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 3,"above threshold");
02992     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 4,"in time window");
02993     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 5,"above intens");
02994     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 6,"wrong pad max");
02995     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 7,"no overflow");
02996     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 8,"no undershoot");
02997     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 9,"not a border pad");
02998     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 10,"not multi hit");
02999     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel( 11,"good");
03000     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel(12,"pion");
03001     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel(13,"electron");
03002     fSpadic_statistics[sid]->GetXaxis()->SetBinLabel(14,"no ID");
03003 
03004         */
03005         // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Statistics
03006         fSpadic_statistics[sid]->Fill(0);           // all triggerd events
03007         if (fSpadic_minAmplitudeCond[sid]->Test(maxAmp[maxCh])) 
03008           {
03009             fSpadic_statistics[sid]->Fill(2);         // events above noise level
03010             if (fSpadic_hitTimeCond[sid]->Test(hitTime[maxCh]))
03011               {
03012                 fSpadic_statistics[sid]->Fill(3);
03013                 if (fSpadic_minIntensCond[sid]->Test(intens[sid]))
03014                   {
03015                     fSpadic_statistics[sid]->Fill(4);
03016                     if (intensCh[maxCh] / (intensCh[maxCh-1] + intensCh[maxCh] + intensCh[maxCh+1]) > 0.33) {
03017                       fSpadic_statistics[sid]->Fill(5);              
03018                       if (!overflow)   fSpadic_statistics[sid]->Fill(6);       // not overflow events  
03019                       if (!undershoot) fSpadic_statistics[sid]->Fill(7);
03020                       //if (maxCh >= 1 && maxCh < NUM_SPADIC_CHA-1){
03021                       if (fSpadic_padMaxWindow[sid]->Test(maxCh))
03022                         {
03023                           fSpadic_statistics[sid]->Fill(8);     // pad max is in the center              
03024                           if (!multiHit)
03025                             {
03026                               fSpadic_statistics[sid]->Fill(9);     // hit has 1 maximum
03027                               fSpadic_statistics[sid]->Fill(10);     //  (good event)
03028                               if (fBeamEvent->fIsPion) fSpadic_statistics[sid]->Fill(11);   // good pion event               
03029                               if (fBeamEvent->fIsElectron) fSpadic_statistics[sid]->Fill(12); // good electron event
03030                               if (!fBeamEvent->fIsPion && !fBeamEvent->fIsElectron)
03031                                 {
03032                                   fSpadic_statistics[sid]->Fill(13); // good event but not electron or pion
03033                                 }
03034                             }
03035                         }       
03036                     }      
03037                   }
03038               }
03039           }
03040         //}
03041         
03042         if (!fSpadic_minAmplitudeCond[sid]->Test(maxAmp[maxCh]) || 
03043             !fSpadic_hitTimeCond[sid]->Test(hitTime[maxCh])     || 
03044             !fSpadic_minIntensCond[sid]->Test(intens[sid])      ||
03045             !(intensCh[maxCh] / (intensCh[maxCh-1] + intensCh[maxCh] + intensCh[maxCh+1]) > 0.33)||
03046             overflow                                            ||
03047             multiHit
03048             ){
03049           fSpadic_statistics[sid]->Fill(1);         // noise events
03050         }
03051 
03052       }// for sid
03053     //Int_t pairs[4][4] = {{1,2}, {11,12}, {3,6}, {15,18}};;
03054     for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03055       if (fPar->Merge_Rows) {
03056         //if (fSpadic_padMaxWindow[sid]->Test(maxCh)) {
03057         // 0 == all; 1 == noPID; 2 == electron; 3 == pion //
03058         Int_t intensBin=0;
03059         if (sid == 4 || sid == 16 || sid == 17|| sid == 5)
03060           intensBin = fSpadic_intens[sid]->FindBin(intens[sid]);
03061         else {
03062           if (sid == 1 || sid == 2)
03063             intensBin = fSpadic_intens[sid]->FindBin(intens[1] + intens[2]);
03064           if (sid == 11 || sid == 12)
03065             intensBin = fSpadic_intens[sid]->FindBin(intens[11] + intens[12]);
03066           if (sid == 3 || sid == 6)
03067             intensBin = fSpadic_intens[sid]->FindBin(intens[3] + intens[6]);
03068           if (sid == 15 || sid == 18)
03069             intensBin = fSpadic_intens[sid]->FindBin(intens[15] + intens[18]);
03070         }
03071 
03072         Int_t pidBin = 1; 
03073         Int_t nBin = fSpadic_intens[sid]->GetNbinsX();
03074         Int_t nEntries;
03075         Double_t value;
03076         TH1 *spectrum=0;
03077         if (fBeamEvent->fIsPion){
03078           spectrum = fSpadic_pi_intens[sid];
03079           pidBin = fSpadic_pid[sid]->FindBin(3);
03080         }
03081         if (fBeamEvent->fIsElectron){
03082           spectrum = fSpadic_el_intens[sid];
03083           pidBin = fSpadic_pid[sid]->FindBin(2);
03084         }
03085         if (!(fBeamEvent->fIsPion) && !(fBeamEvent->fIsElectron)){
03086           pidBin = fSpadic_pid[sid]->FindBin(1);
03087           nEntries = fSpadic_pid[sid]->GetBinContent(pidBin);
03088           fSpadic_pid[sid]->SetBinContent(pidBin, nEntries + 1);
03089         }
03090         for (Int_t iBin = 1; iBin <= nBin; iBin++) {
03091           nEntries = fSpadic_pid[sid]->GetBinContent(fSpadic_pid[sid]->FindBin(0));
03092           value = fSpadic_intens[sid]->GetBinContent(iBin) * nEntries;
03093           if (iBin == intensBin){
03094             value++;
03095             fSpadic_pid[sid]->SetBinContent(1, nEntries + 1);
03096           }
03097           fSpadic_intens[sid]->SetBinContent(iBin, value / (nEntries + 1));
03098           if (pidBin > 2) {
03099             nEntries = fSpadic_pid[sid]->GetBinContent(pidBin);
03100             value = spectrum->GetBinContent(iBin) * nEntries;
03101             if (iBin == intensBin){
03102               value++;
03103               fSpadic_pid[sid]->SetBinContent(pidBin, nEntries + 1);
03104             }
03105             spectrum->SetBinContent(iBin, value / (nEntries + 1));
03106           }
03107         }       
03108         //      }
03109       }
03110     }
03111     Bool_t mixing = false;
03112     for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03113       for (UInt_t sid2 = 1; sid2 < MAX_SPADIC; sid2++) {
03114         if (PID[sid] != PID[sid2])
03115           mixing = true;
03116         fSpadic_pidMixing->Fill(PID[sid] - PID[sid2]);
03117       }
03118     }
03119     /*
03120       if (mixing){
03121       for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++)
03122       printf("%d ",PID[sid]);
03123       printf("\n");
03124       }
03125     */
03126     // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Correlation
03127 
03128     Int_t i = 0;
03129     for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03130       if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
03131       /*
03132         if (fCrateInputEvent->fData1182[0][0] > 450)
03133         fSpadic_FingerCorr[sid]->Fill(maxChCorr[sid],0);
03134         if (fCrateInputEvent->fData1182[0][3] > 450)
03135         fSpadic_FingerCorr[sid]->Fill(maxChCorr[sid],1);
03136         if (fCrateInputEvent->fData1182[0][5] > 450)
03137         fSpadic_FingerCorr[sid]->Fill(maxChCorr[sid],2);
03138         if (fCrateInputEvent->fData1182[0][7] > 450)
03139         fSpadic_FingerCorr[sid]->Fill(maxChCorr[sid],3);
03140       */
03141       for (UInt_t sid2 = sid; sid2 < MAX_SPADIC; sid2++) {
03142         if (TSpadicEvent::ConfigSpadics[sid2] == 0) continue;
03143         if (maxChCorr[sid] > -1 && maxChCorr[sid2] > -1){
03144           if (fPar->Run_SpadicCorrelation) 
03145             if (!(maxChCorr[sid] == 0 && maxChCorr[sid2] == 0))
03146               fSpadic_correlation[i]->Fill(maxChCorr[sid],maxChCorr[sid2]);//Correlation
03147           if (fPar->Run_Alignment) 
03148             if (!(dxPosCorr[sid] == 0 && dxPosCorr[sid2] == 0))
03149               fSpadic_alignment[i]->Fill(dxPosCorr[sid],dxPosCorr[sid2]);//Alignment
03150           for (Int_t bin = 0; bin <= SPADIC_TRACE_SIZE; bin++) {
03151             if (fSpadic_el_shape[sid2]->GetBinContent(bin+1) != 0)
03152               fSpadic_el_shapeRatio[i]->SetBinContent(bin+1, fSpadic_el_shape[sid]->GetBinContent(bin+1) / fSpadic_el_shape[sid2]->GetBinContent(bin+1));
03153             if (fSpadic_pi_shape[sid2]->GetBinContent(bin+1) != 0)
03154               fSpadic_pi_shapeRatio[i]->SetBinContent(bin+1, fSpadic_pi_shape[sid]->GetBinContent(bin+1) / fSpadic_pi_shape[sid2]->GetBinContent(bin+1));
03155           }
03156         }
03157         i++;
03158       } 
03159     }
03160     // <<<<<<<<<<<<<<<< y TRD
03161     Int_t pairs[4][2] = {{ 1, 2},{11,12},{10, 6},{15,18}};
03162     Float_t yPos[4] = {0.0};
03163     //    Float_t ratio = 0.0;
03164     for (Int_t pid = 0; pid < 4; pid++) {
03165       if (TSpadicEvent::ConfigSpadics[pairs[pid][0]] == 0 || TSpadicEvent::ConfigSpadics[pairs[pid][1]] == 0 || TSpadicEvent::ConfigSpadics[pairs[pid+2][1]]) continue;
03166       //      y = a*exp(-0.5*((x-b)/c)^2); b=0; a=1; y==Q1/Q2; c=para;
03167       //      x = c*sqrt(-2*ln(y/a))+b;
03168       //      x = c*sqrt(-2*ln(Q1/Q2));
03169       /*
03170         if (intens[pairs[pid][0]] < intens[pairs[pid][1]])
03171         ratio = intens[pairs[pid][0]] / intens[pairs[pid][1]];
03172         else
03173         ratio = intens[pairs[pid][1]] / intens[pairs[pid][0]];
03174       */
03175       //yPos[pid] = fPar->sigmaPRF[pid] * sqrt(-2.0 * log (intens[pairs[pid][0]] / intens[pairs[pid][1]]));
03176       //yPos[pid] = fPar->sigmaPRF[pid] * sqrt(-2.0 * log(ratio));
03177       yPos[pid] = fPar->sigmaPRF[pid] * sqrt(-2.0 * log (rowIntens[pairs[pid][0]] / rowIntens[pairs[pid][1]]));
03178 
03179       Float_t averageX = 0;
03180       Int_t counter = 0;
03181       if (dxPosCorr[pairs[pid][0]] > 0){
03182         averageX += dxPosCorr[pairs[pid][0]];
03183         counter++;
03184       }
03185       if (dxPosCorr[pairs[pid][1]] > 0){
03186         averageX += dxPosCorr[pairs[pid][1]];
03187         counter++;
03188       }
03189       averageX /= counter;
03190       if (intens[pairs[pid][0]] < intens[pairs[pid][1]])
03191         yPos[pid] *= -1.;
03192       fSpadic_beamProfil[pid]->Fill(averageX, yPos[pid]);
03193     }
03194     /*
03195       for (Int_t pid = 0; pid < 2; pid++) {
03196       fSpadic_deltaPos[pid]->Fill(dxPosCorr[pairs[pid][1]], dxPosCorr[pairs[pid][1]]-dxPosCorr[pairs[pid+2][1]]);
03197       fSpadic_deltaPos[pid+2]->Fill(yPos[pid], yPos[pid]-yPos[pid+2]);
03198       }
03199     */
03200     /*
03201       fSpadic_MSxyHitplane[0]->Fill(
03202       dxPosCorr[2]-3.5*fPar->fPadwidth[2],
03203       dxPosCorr[12]-3.5*fPar->fPadwidth[12]);
03204       fSpadic_MSxyHitplane[1]->Fill(
03205       dxPosCorr[6]-3.5*fPar->fPadwidth[6],
03206       dxPosCorr[18]-3.5*fPar->fPadwidth[18]);
03207     
03208       fSpadic_MSxyHitPadplane[0]->Fill(
03209       (maxChCorr[2] -3.5)*fPar->fPadwidth[2],
03210       -(maxChCorr[12]-3.5)*fPar->fPadwidth[12]);
03211       fSpadic_MSxyHitPadplane[1]->Fill(
03212       (maxChCorr[6] -3.5)*fPar->fPadwidth[6],
03213       -(maxChCorr[18]-3.5)*fPar->fPadwidth[18]);
03214     */
03215 
03216 
03217 
03218     // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FiberHod
03219     // <<<<<<<<<<<<<<<< x
03220     if (xNrFiberHod1Cluster > 0)
03221       for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03222         if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
03223         fFiberHod1_x_alignment[sid]->Fill(dxPosCorr[sid],xPosFiberHod1);
03224       }
03225     // <<<<<<<<<<<<<<<< y
03226     if (yNrFiberHod1Cluster > 0)
03227       for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03228         if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
03229         fFiberHod1_y_alignment[sid]->Fill(dxPosCorr[sid],yPosFiberHod1);
03230       }
03231     //Int_t pairs[4][2] = {{ 1, 2},{ 3, 6},{11,12},{15,18}};
03232   
03233 
03234     if (xNrFiberHod2Cluster > 0)
03235       for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03236         if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
03237         fFiberHod2_x_alignment[sid]->Fill(dxPosCorr[sid],xPosFiberHod2);
03238       }
03239     // <<<<<<<<<<<<<<<< y
03240     if (yNrFiberHod2Cluster > 0)
03241       for (UInt_t sid = 1; sid < MAX_SPADIC-1; sid++) {
03242         if (TSpadicEvent::ConfigSpadics[sid] == 0) continue;
03243         fFiberHod2_y_alignment[sid]->Fill(dxPosCorr[sid],yPosFiberHod2);
03244       }
03245 
03246 
03247   } // BeamEvent
03248 }

Generated on Tue Dec 10 2013 04:52:17 for ROCsoft by  doxygen 1.7.1