| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

CalibDataHistogram.cc

Go to the documentation of this file.
00001 // ******************************* 
00002 // ***** 
00003 
00004 #include "CalibDataHistogram.h"
00005 #include "Event/CalibReadoutHeader.h"
00006 #include "Event/CalibReadoutPmtCrate.h"
00007 
00008 #include "GaudiKernel/MsgStream.h"
00009 #include "GaudiKernel/IHistogramSvc.h"
00010 #include "GaudiKernel/SmartDataPtr.h"
00011 #include "GaudiKernel/DataObject.h"
00012 #include "GaudiKernel/ITHistSvc.h"
00013 
00014 #include "StatisticsSvc/IStatisticsSvc.h"
00015 
00016 #include "TH1F.h"
00017 #include "TH2F.h"
00018 #include "TStyle.h"
00019 using namespace std;
00020 using namespace DayaBay;
00021 CalibDataHistogram::CalibDataHistogram(const string& name, ISvcLocator* svcloc)
00022   : GaudiAlgorithm(name, svcloc),m_statsSvc(0)
00023 {
00024   declareProperty("PrintFreq",        m_printFreq=0);
00025   declareProperty("MaxTotalCharge",   m_maxTotalCharge=10000.);
00026   declareProperty("MinChannelCharge", m_minCharge=0.);
00027   declareProperty("MaxChannelCharge", m_maxCharge=3000.);
00028   declareProperty("MinChannelTime",   m_minTime=-2000.);
00029   declareProperty("MaxChannelTime",   m_maxTime=-500.);
00030 
00031 
00032   for(int i=0;i!=DETNUMPLUS;i++)
00033     for(int j=0;j!=RINGPLUS;j++)
00034       for(int k=0;k!=COLUMNPLUS;k++)
00035         {
00036           //kh_pmt[i][j][k]   = 0;
00037           h_charge[i][j][k] = NULL;
00038           h_time[i][j][k]   = NULL;
00039         }
00040 
00041   for(int i=0;i!=DETNUMPLUS;i++)
00042     {
00043       //kh_sum[i]                = 0;
00044       h_sum_FEEQSUM[i]         = NULL;
00045       h_sum_Charge_PMT[i]      = NULL;
00046       h_sum_Mean_Charge_PMT[i] = NULL;
00047       h_sum_RMS_Charge_PMT[i]  = NULL;
00048       h_sum_Time_PMT[i]        = NULL;
00049       h_sum_Mean_Time_PMT[i]   = NULL;
00050       h_sum_RMS_Time_PMT[i]    = NULL;
00051       h_sum_Charge_Ratio[i]    = NULL;
00052       h_sum_Charge_Patton[i]   = NULL;
00053     }
00054 
00055 }
00056 
00057 CalibDataHistogram::~CalibDataHistogram()
00058 {
00059 }
00060 
00061 StatusCode CalibDataHistogram::initialize()
00062 {
00063   debug() << "initialize()" << endreq;
00064   
00065   
00066   StatusCode status;
00067 
00068   status = service("StatisticsSvc", m_statsSvc, true);
00069   //  status = service("THistSvc", m_thistsvc);
00070   if(status.isFailure() )
00071     {
00072       info() << "Unable to retrieve pointer to THistSvc" << endreq;
00073       return status;
00074     }
00075 
00076   return StatusCode::SUCCESS;
00077 }
00078 
00079 StatusCode CalibDataHistogram::finalize()
00080 {
00081   //for(unsigned int i=0;i<MAXRING;i++) {
00082   //  for(unsigned int j=0;j<MAXCOLUMN;j++) {
00083   //    h_sum_Mean_Charge_PMT->Fill(i*24+j,h_charge[i][j]->GetMean());
00084   //    h_sum_RMS_Charge_PMT->Fill(i*24+j,h_charge[i][j]->GetRMS());
00085   //    h_sum_Mean_Time_PMT->Fill(i*24+j,h_time[i][j]->GetMean());
00086   //    h_sum_RMS_Time_PMT->Fill(i*24+j,h_time[i][j]->GetRMS());
00087   //  }
00088   //}
00089 
00090   debug() << MSG::DEBUG << "finalize()" << endreq;
00091 
00092   //  if( m_statsSvc ) {
00093   //    m_statsSvc->release();
00094   //  }
00095 
00096   return StatusCode::SUCCESS;
00097 }
00098 
00099 StatusCode CalibDataHistogram::execute()
00100 {
00101   debug() << "execute() ______________________________ begin" << endreq;
00102   
00103   
00104   CalibReadoutHeader* croh = get<CalibReadoutHeader>("/Event/CalibReadout/CalibReadoutHeader");
00105   if (croh == 0) 
00106     {
00107       error() << " =======> Requested Object can not be accessable." << endreq;
00108       return StatusCode::FAILURE;
00109     }
00110   
00111   CalibReadout* calibReadout = const_cast<CalibReadout*>(croh->calibReadout());
00112   CalibReadoutPmtCrate* calibCrate = dynamic_cast<CalibReadoutPmtCrate*>(calibReadout);
00113   CalibReadoutPmtCrate::PmtChannelReadouts calibChannels = calibCrate->channelReadout();
00114   
00115   //******************************* which detector == DetID
00116   const DayaBay::Detector detector = calibReadout->detector();
00117   
00118   //*******************************
00119   
00120   double qsum  = 0;
00121   double qmax  = 0;
00122 
00123   int ring     = 0;
00124   int column   = 0;
00125 
00126   double pmtid = 0;
00127 
00128   double sumCharge    = 0;
00129   double earliestTime = 0;
00130 
00131   CalibReadoutPmtCrate::PmtChannelReadouts::iterator it;
00132 
00133   unsigned int DetId   = detector.detectorId();
00134 
00135   for (it=calibChannels.begin(); it != calibChannels.end(); it++) 
00136     {
00137       AdPmtSensor sensorId(it->pmtSensorId().fullPackedData());
00138       ring = sensorId.ring();
00139       column = sensorId.column();
00140       
00142       stringstream path;
00143       path<<"/file1/";
00144 
00145       ostringstream ossSiteDetId;
00146       ossSiteDetId<<Site::AsString(detector.site())<<"/"<<DetectorId::AsString(detector.detectorId())<<"/";
00147       
00148       ostringstream ossPmtRing,ossPmtColumn;
00149       ossPmtRing<<setw(2)<<setfill('0')<<ring;
00150       ossPmtColumn<<setw(2)<<setfill('0')<<column;
00151 
00152       string pathDir = path.str()+ossSiteDetId.str();
00153 
00154       string pathPmtRingColumn = "Ring"+ossPmtRing.str()+"_"+"Column"+ossPmtColumn.str()+"/";
00155 
00156       string pathALL    = pathDir+pathPmtRingColumn;
00157       string pathSumDir = pathDir+"Calib/";
00158 
00159       if(h_charge[DetId][ring][column]==NULL)
00160         {
00161           h_charge[DetId][ring][column] = new TH1F("Charge","Charge",1000, 0, m_maxCharge);
00162           m_statsSvc->put((pathALL+"Charge").c_str(), h_charge[DetId][ring][column]);
00163 
00164           h_time[DetId][ring][column] = new TH1F("Time","Time",1000, m_minTime, m_maxTime);
00165           m_statsSvc->put((pathALL+"Time").c_str(), h_time[DetId][ring][column]);
00166 
00167           //kh_pmt[DetId][ring][column] = 1;
00168         }
00169 
00170       if(h_sum_FEEQSUM[DetId]==NULL)
00171         {
00172           h_sum_FEEQSUM[DetId]         = new TH1F("h_sum_FEEQSUM", "h_FEEQSUM", 5000 , 0, m_maxTotalCharge);
00173           m_statsSvc->put((pathSumDir+"h_sum_FEEQSUM").c_str(), h_sum_FEEQSUM[DetId]);
00174 
00175 
00176           h_sum_Charge_PMT[DetId]      = new TH2F("h_sum_ChargePMT", "h_sum_ChargePMT", 
00177                                                   MAXRING*MAXCOLUMN, 0.5, MAXRING*MAXCOLUMN+0.5, 3000, 0, m_maxCharge);
00178           m_statsSvc->put((pathSumDir+"h_sum_ChargePMT").c_str(), h_sum_Charge_PMT[DetId]);
00179 
00180 
00181           h_sum_Mean_Charge_PMT[DetId] = new TH1F("h_sum_MeanChargePMT", "h_sum_MeanChargePMT",
00182                                                   MAXRING*MAXCOLUMN, 0.5, MAXRING*MAXCOLUMN+0.5);
00183           m_statsSvc->put((pathSumDir+"h_sum_MeanChargePMT").c_str(), h_sum_Mean_Charge_PMT[DetId]);
00184 
00185 
00186           h_sum_RMS_Charge_PMT[DetId]  = new TH1F("h_sum_RMSChargePMT", "h_sum_RMSChargePMT",
00187                                                   MAXRING*MAXCOLUMN, 0.5, MAXRING*MAXCOLUMN+0.5);
00188           m_statsSvc->put((pathSumDir+"h_sum_RMSChargePMT").c_str(), h_sum_RMS_Charge_PMT[DetId]);
00189 
00190 
00191           h_sum_Time_PMT[DetId]        = new TH2F("h_sum_TimePMT", "h_sum_TimePMT", 
00192                                                   MAXRING*MAXCOLUMN, 0.5, MAXRING*MAXCOLUMN+0.5, 1000, m_minTime, m_maxTime);
00193           m_statsSvc->put((pathSumDir+"h_sum_TimePMT").c_str(), h_sum_Time_PMT[DetId]);
00194 
00195 
00196           h_sum_Mean_Time_PMT[DetId]   =new TH1F("h_sum_MeanTimePMT", "h_sum_MeanTimePMT",
00197                                                  MAXRING*MAXCOLUMN, 0.5, MAXRING*MAXCOLUMN+0.5) ;
00198           m_statsSvc->put((pathSumDir+"h_sum_MeanTimePMT").c_str(), h_sum_Mean_Time_PMT[DetId]);
00199 
00200 
00201           h_sum_RMS_Time_PMT[DetId]    = new TH1F("h_sum_RMSTimePMT", "h_sum_RMSTimePMT",
00202                                                   MAXRING*MAXCOLUMN, 0.5, MAXRING*MAXCOLUMN+0.5);
00203           m_statsSvc->put((pathSumDir+"h_sum_RMSTimePMT").c_str(), h_sum_RMS_Time_PMT[DetId]);
00204 
00205 
00206           h_sum_Charge_Ratio[DetId]    = new TH2F("h_sum_ChargeRatio", "h_sum_ChargeRatio",
00207                                                   5000 , 0, m_maxTotalCharge, 1000, 0, 1);
00208           m_statsSvc->put((pathSumDir+"h_sum_ChargeRatio").c_str(), h_sum_Charge_Ratio[DetId]);
00209 
00210 
00211           h_sum_Charge_Patton[DetId]   = new TH2F("h_sum_ChargePatton","h_sum_ChargePatton",49,0.25,24.75,19,-0.75,8.75);
00212           m_statsSvc->put((pathSumDir+"h_sum_ChargePatton").c_str(), h_sum_Charge_Patton[DetId]);
00213           
00214 
00215           //kh_sum[DetId] = 1;
00216         }
00217       
00219       
00220       if(ring==0) 
00221         {
00222           pmtid = 192+column-1;
00223         } 
00224       else 
00225         {
00226           pmtid = (ring-1)*24+column-1;
00227         }
00228       
00229       sumCharge = it->sumCharge();
00230       earliestTime = it->earliestTime();
00231       
00232       if(sumCharge > qmax) qmax = sumCharge;
00233       qsum += sumCharge;
00234       
00235       for(unsigned int i=0; i<it->size(); i++) 
00236         {
00237 
00238           h_charge[DetId][ring][column]->Fill(it->charge(i));
00239           h_time[DetId][ring][column]->Fill(it->time(i));
00240 
00241           h_sum_Charge_PMT[DetId]->Fill(pmtid,it->charge(i));
00242           h_sum_Time_PMT[DetId]->Fill(pmtid,it->time(i));
00243 
00244           //      h_charge->Fill(it->charge(i));
00245           //      h_time->Fill(it->time(i));
00246           
00247           //      h_sum_Charge_PMT_Det1st->Fill(pmtid,it->charge(i));
00248           //      h_sum_Time_PMT_Det1st->Fill(pmtid,it->time(i));
00249         }
00250     }
00251 
00252   
00253   h_sum_FEEQSUM[DetId]->Fill(qsum);
00254   if(qsum>0) h_sum_Charge_Ratio[DetId]->Fill(qsum,qmax/qsum);
00255 
00256   debug() << "execute() ______________________________ end" << endreq;
00257   return StatusCode::SUCCESS;
00258 }
00259 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:26:19 2011 for DQMRawData by doxygen 1.4.7