CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
CastorLedAnalysis Class Reference

#include <CastorLedAnalysis.h>

Classes

struct  CALIBBUNCH
 

Public Member Functions

 CastorLedAnalysis (const edm::ParameterSet &ps)
 Constructor. More...
 
void LedDone ()
 
void LedSampleAnalysis ()
 
void LedSetup (const std::string &m_outputFileROOT)
 
void processLedEvent (const CastorDigiCollection &castor, const CastorDbService &cond)
 
 ~CastorLedAnalysis ()
 Destructor. More...
 

Private Types

typedef std::pair< TH1F *, std::pair< std::map< int, std::vector< double > >, std::vector< TH1F * > > > LEDBUNCH
 

Private Member Functions

float BinsizeCorr (float time)
 
void GetLedConst (std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT)
 
void LedCastorHists (const HcalDetId &detid, const CastorDataFrame &ledDigi, std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT, const CastorDbService &cond)
 
void LedTrendings (std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT)
 
void SetupLEDHists (int id, const HcalDetId detid, std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT)
 

Private Attributes

std::map< HcalCalibDetId, CALIBBUNCH >::iterator _meca
 
std::map< HcalDetId, std::map< int, float > >::iterator _meee
 
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol
 
struct {
   TH1F *   ALLLEDS
 
   TH1F *   CHI2
 
   TH1F *   LEDMEAN
 
   TH1F *   LEDRMS
 
   std::map< HcalDetId, std::map< int, LEDBUNCH > >   LEDTRENDS
 
castorHists
 
int evt
 
int evt_curr
 
std::map< HcalDetId, std::map< int, float > > m_AllPedVals
 
const CastorQIECoderm_coder
 
int m_endTS
 
TFile * m_file
 
int m_fitflag
 
int m_hiSaveflag
 
std::ofstream m_logFile
 
int m_nevtsample
 
std::ofstream m_outFile
 
std::string m_outputFileROOT
 
std::string m_outputFileText
 
std::string m_outputFileX
 
std::ofstream m_outputFileXML
 
const CastorPedestalm_ped
 
const CastorQIEShapem_shape
 
int m_startTS
 
bool m_usecalib
 
int sample
 
std::vector< bool > state
 

Detailed Description

Definition at line 33 of file CastorLedAnalysis.h.

Member Typedef Documentation

typedef std::pair<TH1F*,std::pair<std::map<int, std::vector<double> >,std::vector<TH1F*> > > CastorLedAnalysis::LEDBUNCH
private

Definition at line 66 of file CastorLedAnalysis.h.

Constructor & Destructor Documentation

CastorLedAnalysis::CastorLedAnalysis ( const edm::ParameterSet ps)

Constructor.

Definition at line 17 of file CastorLedAnalysis.cc.

References gather_cfg::cout, edm::ParameterSet::getUntrackedParameter(), gen::k, convertSQLitetoXML_cfg::output, and simplePhotonAnalyzer_cfi::sample.

18 {
19  // init
20  evt=0;
21  sample=0;
22  m_file=nullptr;
23  char output[100]{0};
24  // output files
25  for(int k=0;k<4;k++) state.push_back(true); // 4 cap-ids (do we care?)
26  m_outputFileText = ps.getUntrackedParameter<string>("outputFileText", "");
27  m_outputFileX = ps.getUntrackedParameter<string>("outputFileXML","");
28  if ( !m_outputFileText.empty() ) {
29  cout << "Castor LED results will be saved to " << m_outputFileText.c_str() << endl;
30  m_outFile.open(m_outputFileText.c_str());
31  }
32  m_outputFileROOT = ps.getUntrackedParameter<string>("outputFileHist", "");
33  if ( !m_outputFileROOT.empty() ) {
34  cout << "Castor LED histograms will be saved to " << m_outputFileROOT.c_str() << endl;
35  }
36 
37  m_nevtsample = ps.getUntrackedParameter<int>("nevtsample",9999999);
38  if(m_nevtsample<1)m_nevtsample=9999999;
39  m_hiSaveflag = ps.getUntrackedParameter<int>("hiSaveflag",0);
42  m_fitflag = ps.getUntrackedParameter<int>("analysisflag",2);
43  if(m_fitflag<0)m_fitflag=0;
44  if(m_fitflag>4)m_fitflag=4;
45  m_startTS = ps.getUntrackedParameter<int>("firstTS", 0);
46  if(m_startTS<0) m_startTS=0;
47  m_endTS = ps.getUntrackedParameter<int>("lastTS", 9);
48  m_usecalib = ps.getUntrackedParameter<bool>("usecalib",false);
49  m_logFile.open("CastorLedAnalysis.log");
50 
51  int runNum = ps.getUntrackedParameter<int>("runNumber",999999);
52 
53  // histogram booking
54  castorHists.ALLLEDS = new TH1F("Castor All LEDs","HF All Leds",10,0,9);
55  castorHists.LEDRMS= new TH1F("Castor All LED RMS","HF All LED RMS",100,0,3);
56  castorHists.LEDMEAN= new TH1F("Castor All LED Means","HF All LED Means",100,0,9);
57  castorHists.CHI2= new TH1F("Castor Chi2 by ndf for Landau fit","HF Chi2/ndf Landau",200,0.,50.);
58 
59  //XML file header
60  m_outputFileXML.open(m_outputFileX.c_str());
61  snprintf(output, sizeof output, "<?xml version='1.0' encoding='UTF-8'?>");
62  m_outputFileXML << output << endl;
63  snprintf(output, sizeof output, "<ROOT>");
64  m_outputFileXML << output << endl << endl;
65  snprintf(output, sizeof output, " <HEADER>");
66  m_outputFileXML << output << endl;
67  snprintf(output, sizeof output, " <TYPE>");
68  m_outputFileXML << output << endl;
69  snprintf(output, sizeof output, " <EXTENSION_TABLE_NAME>HCAL_LED_TIMING</EXTENSION_TABLE_NAME>");
70  m_outputFileXML << output << endl;
71  snprintf(output, sizeof output, " <NAME>HCAL LED Timing</NAME>");
72  m_outputFileXML << output << endl;
73  snprintf(output, sizeof output, " </TYPE>");
74  m_outputFileXML << output << endl;
75  snprintf(output, sizeof output, " <RUN>");
76  m_outputFileXML << output << endl;
77  snprintf(output, sizeof output, " <RUN_TYPE>hcal-led-timing-test</RUN_TYPE>");
78  m_outputFileXML << output << endl;
79  snprintf(output, sizeof output, " <RUN_NUMBER>%06i</RUN_NUMBER>", runNum);
80  m_outputFileXML << output << endl;
81  snprintf(output, sizeof output, " <RUN_BEGIN_TIMESTAMP>2007-07-09 00:00:00.0</RUN_BEGIN_TIMESTAMP>");
82  m_outputFileXML << output << endl;
83  snprintf(output, sizeof output, " <COMMENT_DESCRIPTION></COMMENT_DESCRIPTION>");
84  m_outputFileXML << output << endl;
85  snprintf(output, sizeof output, " </RUN>");
86  m_outputFileXML << output << endl;
87  snprintf(output, sizeof output, " </HEADER>");
88  m_outputFileXML << output << endl;
89  snprintf(output, sizeof output, "<!-- Tags secton -->");
90  m_outputFileXML << output << endl;
91  snprintf(output, sizeof output, " <ELEMENTS>");
92  m_outputFileXML << output << endl;
93  snprintf(output, sizeof output, " <DATA_SET id='-1'/>");
94  m_outputFileXML << output << endl;
95  snprintf(output, sizeof output, " <IOV id='1'>");
96  m_outputFileXML << output << endl;
97  snprintf(output, sizeof output, " <INTERVAL_OF_VALIDITY_BEGIN>2147483647</INTERVAL_OF_VALIDITY_BEGIN>");
98  m_outputFileXML << output << endl;
99  snprintf(output, sizeof output, " <INTERVAL_OF_VALIDITY_END>0</INTERVAL_OF_VALIDITY_END>");
100  m_outputFileXML << output << endl;
101  snprintf(output, sizeof output, " </IOV>");
102  m_outputFileXML << output << endl;
103  snprintf(output, sizeof output, " <TAG id='2' mode='auto'>");
104  m_outputFileXML << output << endl;
105  snprintf(output, sizeof output, " <TAG_NAME>laser_led_%06i<TAG_NAME>", runNum);
106  m_outputFileXML << output << endl;
107  snprintf(output, sizeof output, " <DETECTOR_NAME>HCAL</DETECTOR_NAME>");
108  m_outputFileXML << output << endl;
109  snprintf(output, sizeof output, " <COMMENT_DESCRIPTION></COMMENT_DESCRIPTION>");
110  m_outputFileXML << output << endl;
111  snprintf(output, sizeof output, " </TAG>");
112  m_outputFileXML << output << endl;
113  snprintf(output, sizeof output, " </ELEMENTS>");
114  m_outputFileXML << output << endl;
115  snprintf(output, sizeof output, " <MAPS>");
116  m_outputFileXML << output << endl;
117  snprintf(output, sizeof output, " <TAG idref ='2'>");
118  m_outputFileXML << output << endl;
119  snprintf(output, sizeof output, " <IOV idref='1'>");
120  m_outputFileXML << output << endl;
121  snprintf(output, sizeof output, " <DATA_SET idref='-1' />");
122  m_outputFileXML << output << endl;
123  snprintf(output, sizeof output, " </IOV>");
124  m_outputFileXML << output << endl;
125  snprintf(output, sizeof output, " </TAG>");
126  m_outputFileXML << output << endl;
127  snprintf(output, sizeof output, " </MAPS>");
128  m_outputFileXML << output << endl;
129 
130 
131 }
T getUntrackedParameter(std::string const &, T const &) const
std::ofstream m_logFile
std::vector< bool > state
std::ofstream m_outFile
std::string m_outputFileText
std::string m_outputFileX
struct CastorLedAnalysis::@40 castorHists
int k[5][pyjets_maxn]
std::ofstream m_outputFileXML
std::string m_outputFileROOT
CastorLedAnalysis::~CastorLedAnalysis ( )

Destructor.

All done, clean up!!

Definition at line 134 of file CastorLedAnalysis.cc.

References mps_fire::i.

134  {
136 
137  for(_meol=castorHists.LEDTRENDS.begin(); _meol!=castorHists.LEDTRENDS.end(); _meol++){
138  for(int i=0; i<15; i++) _meol->second[i].first->Delete();
139  }
140 
141  castorHists.ALLLEDS->Delete();
142  castorHists.LEDRMS->Delete();
143  castorHists.LEDMEAN->Delete();
144  castorHists.CHI2->Delete();
145 }
struct CastorLedAnalysis::@40 castorHists
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol

Member Function Documentation

float CastorLedAnalysis::BinsizeCorr ( float  time)
private

Definition at line 624 of file CastorLedAnalysis.cc.

References mps_fire::i, and createfilelist::int.

624  {
625 
626 // this is the bin size correction to be applied for laser data (from Andy),
627 // it comes from a pulse shape measured from TB04 data (from Jordan)
628 // This should eventually be replaced with the more thorough treatment from Phil
629 
630  float corrtime=0.;
631  static const float tstrue[32]={0.003, 0.03425, 0.06548, 0.09675, 0.128,
632  0.15925, 0.1905, 0.22175, 0.253, 0.28425, 0.3155, 0.34675, 0.378, 0.40925,
633  0.4405, 0.47175, 0.503, 0.53425, 0.5655, 0.59675, 0.628, 0.65925, 0.6905,
634  0.72175, 0.753, 0.78425, 0.8155, 0.84675, 0.878, 0.90925, 0.9405, 0.97175};
635  static const float tsreco[32]={-0.00422, 0.01815, 0.04409, 0.07346, 0.09799,
636  0.12192, 0.15072, 0.18158, 0.21397, 0.24865, 0.28448, 0.31973, 0.35449,
637  0.39208, 0.43282, 0.47244, 0.5105, 0.55008, 0.58827, 0.62828, 0.6717, 0.70966,
638  0.74086, 0.77496, 0.80843, 0.83472, 0.86044, 0.8843, 0.90674, 0.92982,
639  0.95072, 0.9726};
640 
641  int inttime=(int)time;
642  float restime=time-inttime;
643  for(int i=0; i<=32; i++) {
644  float lolim=0.; float uplim=1.; float tsdown; float tsup;
645  if(i>0){
646  lolim=tsreco[i-1];
647  tsdown=tstrue[i-1];
648  }
649  else tsdown=tstrue[31]-1.;
650  if(i<32){
651  uplim=tsreco[i];
652  tsup=tstrue[i];
653  }
654  else tsup=tstrue[0]+1.;
655  if(restime>=lolim && restime<uplim){
656  corrtime=(tsdown*(uplim-restime)+tsup*(restime-lolim)) / (uplim-lolim);
657  }
658  }
659  corrtime+=inttime;
660 
661  return corrtime;
662 }
void CastorLedAnalysis::GetLedConst ( std::map< HcalDetId, std::map< int, LEDBUNCH > > &  toolT)
private

Definition at line 156 of file CastorLedAnalysis.cc.

References HcalDetId::depth(), mps_fire::i, HcalDetId::ietaAbs(), HcalDetId::iphi(), convertSQLitetoXML_cfg::output, DetId::rawId(), mathSSE::sqrt(), HcalDetId::subdet(), and HcalDetId::zside().

156  {
157  double time2=0; double time1=0; double time3=0; double time4=0;
158  double dtime2=0; double dtime1=0; double dtime3=0; double dtime4=0;
159  char output[100]{0};
160 
161  if (m_outputFileText!=""){
162  if(m_fitflag==0 || m_fitflag==2) m_outFile<<"Det Eta,Phi,D Mean Error"<<std::endl;
163  else if(m_fitflag==1 || m_fitflag==3) m_outFile<<"Det Eta,Phi,D Peak Error"<<std::endl;
164  else if(m_fitflag==4) m_outFile<<"Det Eta,Phi,D Mean Error Peak Error MeanEv Error PeakEv Error"<<std::endl;
165  }
166  for(_meol=toolT.begin(); _meol!=toolT.end(); _meol++){
167 // scale the LED pulse to 1 event
168  _meol->second[10].first->Scale(1./evt_curr);
169  if(m_fitflag==0 || m_fitflag==4){
170  time1 = _meol->second[10].first->GetMean();
171  dtime1 = _meol->second[10].first->GetRMS()/sqrt((float)evt_curr*(m_endTS-m_startTS+1));
172  }
173  if(m_fitflag==1 || m_fitflag==4){
174 // put proper errors
175  for(int j=0; j<10; j++) _meol->second[10].first->SetBinError(j+1,_meol->second[j].first->GetRMS()/sqrt((float)evt_curr));
176  }
177  if(m_fitflag==1 || m_fitflag==3 || m_fitflag==4){
178  _meol->second[10].first->Fit("landau","Q");
179 // _meol->second[10].first->Fit("gaus","Q");
180  TF1 *fit = _meol->second[10].first->GetFunction("landau");
181 // TF1 *fit = _meol->second[10].first->GetFunction("gaus");
182  time2=fit->GetParameter(1);
183  dtime2=fit->GetParError(1);
184  }
185  if(m_fitflag==2 || m_fitflag==4){
186  time3 = _meol->second[12].first->GetMean();
187  dtime3 = _meol->second[12].first->GetRMS()/sqrt((float)_meol->second[12].first->GetEntries());
188  }
189  if(m_fitflag==3 || m_fitflag==4){
190  time4 = _meol->second[13].first->GetMean();
191  dtime4 = _meol->second[13].first->GetRMS()/sqrt((float)_meol->second[13].first->GetEntries());
192  }
193  for (int i=0; i<10; i++){
194  _meol->second[i].first->GetXaxis()->SetTitle("Pulse height (fC)");
195  _meol->second[i].first->GetYaxis()->SetTitle("Counts");
196 // if(m_hiSaveflag>0)_meol->second[i].first->Write();
197  }
198  _meol->second[10].first->GetXaxis()->SetTitle("Time slice");
199  _meol->second[10].first->GetYaxis()->SetTitle("Averaged pulse (fC)");
200  if(m_hiSaveflag>0)_meol->second[10].first->Write();
201  _meol->second[10].second.first[0].push_back(time1);
202  _meol->second[10].second.first[1].push_back(dtime1);
203  _meol->second[11].second.first[0].push_back(time2);
204  _meol->second[11].second.first[1].push_back(dtime2);
205  _meol->second[12].first->GetXaxis()->SetTitle("Mean TS");
206  _meol->second[12].first->GetYaxis()->SetTitle("Counts");
207  if(m_fitflag==2 && m_hiSaveflag>0)_meol->second[12].first->Write();
208  _meol->second[12].second.first[0].push_back(time3);
209  _meol->second[12].second.first[1].push_back(dtime3);
210  _meol->second[13].first->GetXaxis()->SetTitle("Peak TS");
211  _meol->second[13].first->GetYaxis()->SetTitle("Counts");
212  if(m_fitflag>2 && m_hiSaveflag>0)_meol->second[13].first->Write();
213  _meol->second[13].second.first[0].push_back(time4);
214  _meol->second[13].second.first[1].push_back(dtime4);
215  _meol->second[14].first->GetXaxis()->SetTitle("Peak TS error");
216  _meol->second[14].first->GetYaxis()->SetTitle("Counts");
217  if(m_fitflag>2 && m_hiSaveflag>0)_meol->second[14].first->Write();
218  _meol->second[15].first->GetXaxis()->SetTitle("Chi2/NDF");
219  _meol->second[15].first->GetYaxis()->SetTitle("Counts");
220  if(m_fitflag>2 && m_hiSaveflag>0)_meol->second[15].first->Write();
221  _meol->second[16].first->GetXaxis()->SetTitle("Integrated Signal");
222  _meol->second[16].first->Write();
223 
224 
225 // Ascii printout (need to modify to include new info)
226  HcalDetId detid = _meol->first;
227 
228  if (m_outputFileText!=""){
229  if(m_fitflag==0) {
230  m_outFile<<detid<<" "<<time1<<" "<<dtime1<<std::endl;
231  snprintf(output, sizeof output, " <DATA_SET>");
232  m_outputFileXML << output << endl;
233  snprintf(output, sizeof output, " <VERSION>version:1</VERSION>");
234  m_outputFileXML << output << endl;
235  snprintf(output, sizeof output, " <CHANNEL>");
236  m_outputFileXML << output << endl;
237  snprintf(output, sizeof output, " <EXTENSION_TABLE_NAME>HCAL_CHANNELS</EXTENSION_TABLE_NAME>");
238  m_outputFileXML << output << endl;
239  snprintf(output, sizeof output, " <ETA>%2i</ETA>", detid.ietaAbs() );
240  m_outputFileXML << output << endl;
241  snprintf(output, sizeof output, " <PHI>%2i</PHI>", detid.iphi() );
242  m_outputFileXML << output << endl;
243  snprintf(output, sizeof output, " <DEPTH>%2i</DEPTH>", detid.depth() );
244  m_outputFileXML << output << endl;
245  snprintf(output, sizeof output, " <Z>%2i</Z>", detid.zside() );
246  m_outputFileXML << output << endl;
247  if(detid.subdet() == 1) snprintf(output, sizeof output, " <DETECTOR_NAME>HB</DETECTOR_NAME>");
248  if(detid.subdet() == 2) snprintf(output, sizeof output, " <DETECTOR_NAME>HE</DETECTOR_NAME>");
249  if(detid.subdet() == 3) snprintf(output, sizeof output, " <DETECTOR_NAME>HO</DETECTOR_NAME>");
250  if(detid.subdet() == 4) snprintf(output, sizeof output, " <DETECTOR_NAME>HF</DETECTOR_NAME>");
251  m_outputFileXML << output << endl;
252  snprintf(output, sizeof output, " <HCAL_CHANNEL_ID>%10i</HCAL_CHANNEL_ID>", detid.rawId() );
253  m_outputFileXML << output << endl;
254  snprintf(output, sizeof output, " </CHANNEL>");
255  m_outputFileXML << output << endl;
256  snprintf(output, sizeof output, " <DATA>");
257  m_outputFileXML << output << endl;
258  snprintf(output, sizeof output, " <MEAN_TIME>%7f</MEAN_TIME>", time1);
259  m_outputFileXML << output << endl;
260  snprintf(output, sizeof output, " <OFFSET_TIME> 0</OFFSET_TIME>");
261  m_outputFileXML << output << endl;
262  snprintf(output, sizeof output, " <ERROR_STAT>%7f</ERROR_STAT>", dtime1);
263  m_outputFileXML << output << endl;
264  snprintf(output, sizeof output, " <ANALYSIS_FLAG>%2i</ANALYSIS_FLAG>", m_fitflag+1);
265  m_outputFileXML << output << endl;
266  snprintf(output, sizeof output, " <STATUS_WORD> 0</STATUS_WORD>");
267  m_outputFileXML << output << endl;
268  snprintf(output, sizeof output, " </DATA>");
269  m_outputFileXML << output << endl;
270  snprintf(output, sizeof output, " </DATA_SET>");
271  m_outputFileXML << output << endl;
272 
273  }
274  else if(m_fitflag==1){
275  m_outFile<<detid<<" "<<time2<<" "<<dtime2<<std::endl;
276  snprintf(output, sizeof output, " <DATA_SET>");
277  m_outputFileXML << output << endl;
278  snprintf(output, sizeof output, " <VERSION>version:1</VERSION>");
279  m_outputFileXML << output << endl;
280  snprintf(output, sizeof output, " <CHANNEL>");
281  m_outputFileXML << output << endl;
282  snprintf(output, sizeof output, " <EXTENSION_TABLE_NAME>HCAL_CHANNELS</EXTENSION_TABLE_NAME>");
283  m_outputFileXML << output << endl;
284  snprintf(output, sizeof output, " <ETA>%2i</ETA>", detid.ietaAbs() );
285  m_outputFileXML << output << endl;
286  snprintf(output, sizeof output, " <PHI>%2i</PHI>", detid.iphi() );
287  m_outputFileXML << output << endl;
288  snprintf(output, sizeof output, " <DEPTH>%2i</DEPTH>", detid.depth() );
289  m_outputFileXML << output << endl;
290  snprintf(output, sizeof output, " <Z>%2i</Z>", detid.zside() );
291  m_outputFileXML << output << endl;
292  if(detid.subdet() == 1) snprintf(output, sizeof output, " <DETECTOR_NAME>HB</DETECTOR_NAME>");
293  if(detid.subdet() == 2) snprintf(output, sizeof output, " <DETECTOR_NAME>HE</DETECTOR_NAME>");
294  if(detid.subdet() == 3) snprintf(output, sizeof output, " <DETECTOR_NAME>HO</DETECTOR_NAME>");
295  if(detid.subdet() == 4) snprintf(output, sizeof output, " <DETECTOR_NAME>HF</DETECTOR_NAME>");
296  m_outputFileXML << output << endl;
297  snprintf(output, sizeof output, " <HCAL_CHANNEL_ID>%10i</HCAL_CHANNEL_ID>", detid.rawId() );
298  m_outputFileXML << output << endl;
299  snprintf(output, sizeof output, " </CHANNEL>");
300  m_outputFileXML << output << endl;
301  snprintf(output, sizeof output, " <DATA>");
302  m_outputFileXML << output << endl;
303  snprintf(output, sizeof output, " <MEAN_TIME>%7f</MEAN_TIME>", time2);
304  m_outputFileXML << output << endl;
305  snprintf(output, sizeof output, " <OFFSET_TIME> 0</OFFSET_TIME>");
306  m_outputFileXML << output << endl;
307  snprintf(output, sizeof output, " <ERROR_STAT>%7f</ERROR_STAT>", dtime2);
308  m_outputFileXML << output << endl;
309  snprintf(output, sizeof output, " <ANALYSIS_FLAG>%2i</ANALYSIS_FLAG>", m_fitflag+1);
310  m_outputFileXML << output << endl;
311  snprintf(output, sizeof output, " <STATUS_WORD> 0</STATUS_WORD>");
312  m_outputFileXML << output << endl;
313  snprintf(output, sizeof output, " </DATA>");
314  m_outputFileXML << output << endl;
315  snprintf(output, sizeof output, " </DATA_SET>");
316  m_outputFileXML << output << endl;
317  }
318 
319  else if(m_fitflag==2){
320  m_outFile<<detid<<" "<<time3<<" "<<dtime3<<std::endl;
321  snprintf(output, sizeof output, " <DATA_SET>");
322  m_outputFileXML << output << endl;
323  snprintf(output, sizeof output, " <VERSION>version:1</VERSION>");
324  m_outputFileXML << output << endl;
325  snprintf(output, sizeof output, " <CHANNEL>");
326  m_outputFileXML << output << endl;
327  snprintf(output, sizeof output, " <EXTENSION_TABLE_NAME>HCAL_CHANNELS</EXTENSION_TABLE_NAME>");
328  m_outputFileXML << output << endl;
329  snprintf(output, sizeof output, " <ETA>%2i</ETA>", detid.ietaAbs() );
330  m_outputFileXML << output << endl;
331  snprintf(output, sizeof output, " <PHI>%2i</PHI>", detid.iphi() );
332  m_outputFileXML << output << endl;
333  snprintf(output, sizeof output, " <DEPTH>%2i</DEPTH>", detid.depth() );
334  m_outputFileXML << output << endl;
335  snprintf(output, sizeof output, " <Z>%2i</Z>", detid.zside() );
336  m_outputFileXML << output << endl;
337  if(detid.subdet() == 1) snprintf(output, sizeof output, " <DETECTOR_NAME>HB</DETECTOR_NAME>");
338  if(detid.subdet() == 2) snprintf(output, sizeof output, " <DETECTOR_NAME>HE</DETECTOR_NAME>");
339  if(detid.subdet() == 3) snprintf(output, sizeof output, " <DETECTOR_NAME>HO</DETECTOR_NAME>");
340  if(detid.subdet() == 4) snprintf(output, sizeof output, " <DETECTOR_NAME>HF</DETECTOR_NAME>");
341  m_outputFileXML << output << endl;
342  snprintf(output, sizeof output, " <HCAL_CHANNEL_ID>%10i</HCAL_CHANNEL_ID>", detid.rawId() );
343  m_outputFileXML << output << endl;
344  snprintf(output, sizeof output, " </CHANNEL>");
345  m_outputFileXML << output << endl;
346  snprintf(output, sizeof output, " <DATA>");
347  m_outputFileXML << output << endl;
348  snprintf(output, sizeof output, " <MEAN_TIME>%7f</MEAN_TIME>", time3);
349  m_outputFileXML << output << endl;
350  snprintf(output, sizeof output, " <OFFSET_TIME> 0</OFFSET_TIME>");
351  m_outputFileXML << output << endl;
352  snprintf(output, sizeof output, " <ERROR_STAT>%7f</ERROR_STAT>", dtime3);
353  m_outputFileXML << output << endl;
354  snprintf(output, sizeof output, " <ANALYSIS_FLAG>%2i</ANALYSIS_FLAG>", m_fitflag+1);
355  m_outputFileXML << output << endl;
356  snprintf(output, sizeof output, " <STATUS_WORD> 0</STATUS_WORD>");
357  m_outputFileXML << output << endl;
358  snprintf(output, sizeof output, " </DATA>");
359  m_outputFileXML << output << endl;
360  snprintf(output, sizeof output, " </DATA_SET>");
361  m_outputFileXML << output << endl;
362  }
363  else if(m_fitflag==3){
364  m_outFile<<detid<<" "<<time4<<" "<<dtime4<<std::endl;
365  snprintf(output, sizeof output, " <DATA_SET>");
366  m_outputFileXML << output << endl;
367  snprintf(output, sizeof output, " <VERSION>version:1</VERSION>");
368  m_outputFileXML << output << endl;
369  snprintf(output, sizeof output, " <CHANNEL>");
370  m_outputFileXML << output << endl;
371  snprintf(output, sizeof output, " <EXTENSION_TABLE_NAME>HCAL_CHANNELS</EXTENSION_TABLE_NAME>");
372  m_outputFileXML << output << endl;
373  snprintf(output, sizeof output, " <ETA>%2i</ETA>", detid.ietaAbs() );
374  m_outputFileXML << output << endl;
375  snprintf(output, sizeof output, " <PHI>%2i</PHI>", detid.iphi() );
376  m_outputFileXML << output << endl;
377  snprintf(output, sizeof output, " <DEPTH>%2i</DEPTH>", detid.depth() );
378  m_outputFileXML << output << endl;
379  snprintf(output, sizeof output, " <Z>%2i</Z>", detid.zside() );
380  m_outputFileXML << output << endl;
381  if(detid.subdet() == 1) snprintf(output, sizeof output, " <DETECTOR_NAME>HB</DETECTOR_NAME>");
382  if(detid.subdet() == 2) snprintf(output, sizeof output, " <DETECTOR_NAME>HE</DETECTOR_NAME>");
383  if(detid.subdet() == 3) snprintf(output, sizeof output, " <DETECTOR_NAME>HO</DETECTOR_NAME>");
384  if(detid.subdet() == 4) snprintf(output, sizeof output, " <DETECTOR_NAME>HF</DETECTOR_NAME>");
385  m_outputFileXML << output << endl;
386  snprintf(output, sizeof output, " <HCAL_CHANNEL_ID>%10i</HCAL_CHANNEL_ID>", detid.rawId() );
387  m_outputFileXML << output << endl;
388  snprintf(output, sizeof output, " </CHANNEL>");
389  m_outputFileXML << output << endl;
390  snprintf(output, sizeof output, " <DATA>");
391  m_outputFileXML << output << endl;
392  snprintf(output, sizeof output, " <MEAN_TIME>%7f</MEAN_TIME>", time4);
393  m_outputFileXML << output << endl;
394  snprintf(output, sizeof output, " <OFFSET_TIME> 0</OFFSET_TIME>");
395  m_outputFileXML << output << endl;
396  snprintf(output, sizeof output, " <ERROR_STAT>%7f</ERROR_STAT>", dtime4);
397  m_outputFileXML << output << endl;
398  snprintf(output, sizeof output, " <ANALYSIS_FLAG>%2i</ANALYSIS_FLAG>", m_fitflag+1);
399  m_outputFileXML << output << endl;
400  snprintf(output, sizeof output, " <STATUS_WORD> 0</STATUS_WORD>");
401  m_outputFileXML << output << endl;
402  snprintf(output, sizeof output, " </DATA>");
403  m_outputFileXML << output << endl;
404  snprintf(output, sizeof output, " </DATA_SET>");
405  m_outputFileXML << output << endl;
406  }
407 
408  else if(m_fitflag==4){
409  m_outFile<<detid<<" "<<time1<<" "<<dtime1<<" "<<time2<<" "<<dtime2<<" "<<time3<<" "<<dtime3<<" "<<time4<<" "<<dtime4<<std::endl;
410  }
411  }
412  }
413 }
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:142
int zside() const
get the z-side of the cell (1/-1)
Definition: HcalDetId.h:145
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
std::ofstream m_outFile
std::string m_outputFileText
int depth() const
get the tower depth
Definition: HcalDetId.h:162
T sqrt(T t)
Definition: SSEVec.h:18
int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:150
std::ofstream m_outputFileXML
int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol
void CastorLedAnalysis::LedCastorHists ( const HcalDetId detid,
const CastorDataFrame ledDigi,
std::map< HcalDetId, std::map< int, LEDBUNCH > > &  toolT,
const CastorDbService cond 
)
private

Definition at line 552 of file CastorLedAnalysis.cc.

References ecalMGPA::adc(), plotBeamSpotDB::first, CastorDbService::getCastorCoder(), CastorDbService::getCastorShape(), CastorDbService::getPedestal(), mps_fire::i, createfilelist::int, gen::k, and CastorDataFrame::size().

552  {
553 
554  map<int,LEDBUNCH> _mei;
555  _meol = toolT.find(detid);
556  _mei = _meol->second;
557  // Rest the histos if we're at the end of a 'bunch'
558  if((evt-1)%m_nevtsample==0 && state[0]){
559  for(int k=0; k<(int)state.size();k++) state[k]=false;
560  for(int i=0; i<16; i++) _mei[i].first->Reset();
561  }
562 
563  // now we have the signal in fC, let's get rid of that darn pedestal
564  // Most of this is borrowed from CastorSimpleReconstructor, so thanks Jeremy/Phil
565 
566  float max_fC = 0;
567  float ta = 0;
568  m_coder = cond.getCastorCoder(detid);
569  m_ped = cond.getPedestal(detid);
570  m_shape = cond.getCastorShape();
571  //cout << "New Digi!!!!!!!!!!!!!!!!!!!!!!" << endl;
572  for (int TS = m_startTS; TS < m_endTS && TS < ledDigi.size(); TS++){
573  int capid = ledDigi[TS].capid();
574  // BE CAREFUL: this is assuming peds are stored in ADCs
575  int adc = (int)(ledDigi[TS].adc() - m_ped->getValue(capid));
576  if (adc < 0){ adc = 0; } // to prevent negative adcs after ped subtraction, which should really only happen
577  // if you're using the wrong peds.
578  double fC = m_coder->charge(*m_shape,adc,capid);
579  //ta = (fC - m_ped->getValue(capid));
580  ta = fC;
581  //cout << "DetID: " << detid << " CapID: " << capid << " ADC: " << adc << " Ped: " << m_ped->getValue(capid) << " fC: " << fC << endl;
582  _mei[TS].first->Fill(ta);
583  _mei[10].first->AddBinContent(TS+1,ta); // This is average pulse, could probably do better (Profile?)
584  if(m_fitflag>1){
585  if(TS==m_startTS)_mei[11].first->Reset();
586  _mei[11].first->SetBinContent(TS+1,ta);
587  }
588 
589  // keep track of max TS and max amplitude (in fC)
590  if (ta > max_fC){
591  max_fC = ta;
592  }
593  }
594 
595  // Now we have a sample with pedestals subtracted and in units of fC
596  // If we are using a weighted mean (m_fitflag = 2) to extraxt timing
597  // we now want to use Phil's timing correction. This is not necessary
598  // if we are performing a Landau fit (m_fitflag = 3)
599 
600  float sum=0.;
601  for(int i=0; i<10; i++)sum=sum+_mei[11].first->GetBinContent(i+1);
602  if(sum>100){
603  if(m_fitflag==2 || m_fitflag==4){
604  float timmean=_mei[11].first->GetMean(); // let's use Phil's way instead
605  float timmeancorr=BinsizeCorr(timmean);
606  _mei[12].first->Fill(timmeancorr);
607  }
608  _mei[16].first->Fill(_mei[11].first->Integral()); // Integrated charge (may be more usfull to convert to Energy first?)
609  if(m_fitflag==3 || m_fitflag==4){
610  _mei[11].first->Fit("landau","Q");
611  TF1 *fit = _mei[11].first->GetFunction("landau");
612  _mei[13].first->Fill(fit->GetParameter(1));
613  _mei[14].first->Fill(fit->GetParError(1));
614  _mei[15].first->Fill(fit->GetChisquare()/fit->GetNDF());
615  }
616  }
617 
618 
619 
620 }
int adc(sample_type sample)
get the ADC sample (12 bits)
float getValue(int fCapId) const
get value for capId = 0..3
std::vector< bool > state
const CastorPedestal * getPedestal(const HcalGenericDetId &fId) const
const CastorQIEShape * m_shape
const CastorQIEShape * getCastorShape() const
float charge(const CastorQIEShape &fShape, unsigned fAdc, unsigned fCapId) const
ADC [0..127] + capid [0..3] -> fC conversion.
float BinsizeCorr(float time)
const CastorPedestal * m_ped
int k[5][pyjets_maxn]
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol
const CastorQIECoder * m_coder
int size() const
total number of samples in the digi
const CastorQIECoder * getCastorCoder(const HcalGenericDetId &fId) const
void CastorLedAnalysis::LedDone ( )

Definition at line 462 of file CastorLedAnalysis.cc.

References gather_cfg::cout, and simplePhotonAnalyzer_cfi::sample.

463 {
464 
465 // First process the last sample (remaining events).
467 
468 // Now do the end of run analysis: trending histos
469  if(sample>1 && m_fitflag!=4){
470  m_file->cd();
471  m_file->cd("Castor");
472  LedTrendings(castorHists.LEDTRENDS);
473  }
474 
475  // Write other histograms.
476  m_file->cd();
477  m_file->cd("Castor");
478  castorHists.ALLLEDS->Write();
479  castorHists.LEDRMS->Write();
480  castorHists.LEDMEAN->Write();
481 
482  // Write the histo file and close it
483 // m_file->Write();
484  m_file->Close();
485  cout << "Castor histograms written to " << m_outputFileROOT.c_str() << endl;
486 }
void LedTrendings(std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT)
struct CastorLedAnalysis::@40 castorHists
std::string m_outputFileROOT
void CastorLedAnalysis::LedSampleAnalysis ( )

Definition at line 416 of file CastorLedAnalysis.cc.

References simplePhotonAnalyzer_cfi::sample.

416  {
417  // it is called every m_nevtsample events (a sample) and the end of run
418  char LedSampleNum[20];
419 
420  sprintf(LedSampleNum,"LedSample_%d",sample);
421  m_file->cd();
422  m_file->mkdir(LedSampleNum);
423  m_file->cd(LedSampleNum);
424 
425 // Compute LED constants
426  GetLedConst(castorHists.LEDTRENDS);
427 }
void GetLedConst(std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT)
struct CastorLedAnalysis::@40 castorHists
void CastorLedAnalysis::LedSetup ( const std::string &  m_outputFileROOT)

Definition at line 148 of file CastorLedAnalysis.cc.

148  {
149  // open the histogram file, create directories within
150  m_file=new TFile(m_outputFileROOT.c_str(),"RECREATE");
151  m_file->mkdir("Castor");
152  m_file->cd();
153 }
std::string m_outputFileROOT
void CastorLedAnalysis::LedTrendings ( std::map< HcalDetId, std::map< int, LEDBUNCH > > &  toolT)
private

Definition at line 430 of file CastorLedAnalysis.cc.

References create_public_pileup_plots::bins, HcalDetId::depth(), objects.autophobj::float, HcalDetId::ieta(), HcalDetId::iphi(), and dataset::name.

431 {
432 
433  for(_meol=toolT.begin(); _meol!=toolT.end(); _meol++){
434  char name[1024];
435  HcalDetId detid = _meol->first;
436  sprintf(name,"LED timing trend, eta=%d phi=%d depth=%d",detid.ieta(),detid.iphi(),detid.depth());
437  int bins = _meol->second[10+m_fitflag].second.first[0].size();
438  float lo =0.5;
439  float hi = (float)bins+0.5;
440  _meol->second[10+m_fitflag].second.second.push_back(new TH1F(name,name,bins,lo,hi));
441 
442  std::vector<double>::iterator sample_it;
443 // LED timing - put content and errors
444  int j=0;
445  for(sample_it=_meol->second[10+m_fitflag].second.first[0].begin();
446  sample_it!=_meol->second[10+m_fitflag].second.first[0].end();++sample_it){
447  _meol->second[10+m_fitflag].second.second[0]->SetBinContent(++j,*sample_it);
448  }
449  j=0;
450  for(sample_it=_meol->second[10+m_fitflag].second.first[1].begin();
451  sample_it!=_meol->second[10+m_fitflag].second.first[1].end();++sample_it){
452  _meol->second[10+m_fitflag].second.second[0]->SetBinError(++j,*sample_it);
453  }
454  sprintf(name,"Sample (%d events)",m_nevtsample);
455  _meol->second[10+m_fitflag].second.second[0]->GetXaxis()->SetTitle(name);
456  _meol->second[10+m_fitflag].second.second[0]->GetYaxis()->SetTitle("Peak position");
457  _meol->second[10+m_fitflag].second.second[0]->Write();
458  }
459 }
int depth() const
get the tower depth
Definition: HcalDetId.h:162
int ieta() const
get the cell ieta
Definition: HcalDetId.h:155
int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol
void CastorLedAnalysis::processLedEvent ( const CastorDigiCollection castor,
const CastorDbService cond 
)

Definition at line 489 of file CastorLedAnalysis.cc.

References edm::SortedCollection< T, SORT >::begin(), edm::SortedCollection< T, SORT >::empty(), edm::SortedCollection< T, SORT >::end(), mps_fire::i, CastorDataFrame::id(), simplePhotonAnalyzer_cfi::sample, and edm::SortedCollection< T, SORT >::size().

491 {
492  evt++;
493  sample = (evt-1)/m_nevtsample +1;
496 
497  // HF/Castor
498  try{
499  if(castor.empty()) throw (int)castor.size();
500  for (CastorDigiCollection::const_iterator j=castor.begin(); j!=castor.end(); ++j){
501  const CastorDataFrame digi = (const CastorDataFrame)(*j);
502  _meol = castorHists.LEDTRENDS.find(digi.id());
503  if (_meol==castorHists.LEDTRENDS.end()){
504  SetupLEDHists(2,digi.id(),castorHists.LEDTRENDS);
505  }
506  LedCastorHists(digi.id(),digi,castorHists.LEDTRENDS,cond);
507  }
508  }
509  catch (int i ) {
510 // m_logFile << "Event with " << i<<" Castor Digis passed." << std::endl;
511  }
512 
513  // Call the function every m_nevtsample events
515 
516 }
std::vector< CastorDataFrame >::const_iterator const_iterator
void LedCastorHists(const HcalDetId &detid, const CastorDataFrame &ledDigi, std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT, const CastorDbService &cond)
struct CastorLedAnalysis::@40 castorHists
const_iterator end() const
void SetupLEDHists(int id, const HcalDetId detid, std::map< HcalDetId, std::map< int, LEDBUNCH > > &toolT)
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol
size_type size() const
const HcalCastorDetId & id() const
const_iterator begin() const
void CastorLedAnalysis::SetupLEDHists ( int  id,
const HcalDetId  detid,
std::map< HcalDetId, std::map< int, LEDBUNCH > > &  toolT 
)
private

Definition at line 518 of file CastorLedAnalysis.cc.

References HcalDetId::depth(), mps_fire::i, HcalDetId::ieta(), edm::eventsetup::heterocontainer::insert(), HcalDetId::iphi(), and dataset::name.

518  {
519 
520  string type = "HBHE";
521  if(id==1) type = "HO";
522  if(id==2) type = "HF";
523 
524  _meol = toolT.find(detid);
525  if (_meol==toolT.end()){
526 // if histos for this channel do not exist, create them
527  map<int,LEDBUNCH> insert;
528  char name[1024];
529  for(int i=0; i<10; i++){
530  sprintf(name,"%s Pulse height, eta=%d phi=%d depth=%d TS=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth(),i);
531  insert[i].first = new TH1F(name,name,200,0.,2000.);
532  }
533  sprintf(name,"%s LED Mean pulse, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
534  insert[10].first = new TH1F(name,name,10,-0.5,9.5);
535  sprintf(name,"%s LED Pulse, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
536  insert[11].first = new TH1F(name,name,10,-0.5,9.5);
537  sprintf(name,"%s Mean TS, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
538  insert[12].first = new TH1F(name,name,200,0.,10.);
539  sprintf(name,"%s Peak TS, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
540  insert[13].first = new TH1F(name,name,200,0.,10.);
541  sprintf(name,"%s Peak TS error, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
542  insert[14].first = new TH1F(name,name,200,0.,0.05);
543  sprintf(name,"%s Fit chi2, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
544  insert[15].first = new TH1F(name,name,100,0.,50.);
545  sprintf(name,"%s Integrated Signal, eta=%d phi=%d depth=%d",type.c_str(),detid.ieta(),detid.iphi(),detid.depth());
546  insert[16].first = new TH1F(name,name,500,0.,5000.);
547 
548  toolT[detid] = insert;
549  }
550 }
type
Definition: HCALResponse.h:21
int depth() const
get the tower depth
Definition: HcalDetId.h:162
int ieta() const
get the cell ieta
Definition: HcalDetId.h:155
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
Definition: HCMethods.h:49
int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
std::map< HcalDetId, std::map< int, LEDBUNCH > >::iterator _meol

Member Data Documentation

std::map<HcalCalibDetId,CALIBBUNCH>::iterator CastorLedAnalysis::_meca
private

Definition at line 115 of file CastorLedAnalysis.h.

std::map<HcalDetId,std::map<int,float> >::iterator CastorLedAnalysis::_meee
private

Definition at line 113 of file CastorLedAnalysis.h.

std::map<HcalDetId,std::map<int, LEDBUNCH > >::iterator CastorLedAnalysis::_meol
private

Definition at line 111 of file CastorLedAnalysis.h.

TH1F* CastorLedAnalysis::ALLLEDS

Definition at line 106 of file CastorLedAnalysis.h.

struct { ... } CastorLedAnalysis::castorHists
TH1F* CastorLedAnalysis::CHI2

Definition at line 109 of file CastorLedAnalysis.h.

int CastorLedAnalysis::evt
private

Definition at line 118 of file CastorLedAnalysis.h.

int CastorLedAnalysis::evt_curr
private

Definition at line 120 of file CastorLedAnalysis.h.

TH1F* CastorLedAnalysis::LEDMEAN

Definition at line 108 of file CastorLedAnalysis.h.

TH1F* CastorLedAnalysis::LEDRMS

Definition at line 107 of file CastorLedAnalysis.h.

std::map<HcalDetId,std::map<int, LEDBUNCH > > CastorLedAnalysis::LEDTRENDS

Definition at line 105 of file CastorLedAnalysis.h.

std::map<HcalDetId,std::map<int,float> > CastorLedAnalysis::m_AllPedVals
private

Definition at line 112 of file CastorLedAnalysis.h.

const CastorQIECoder* CastorLedAnalysis::m_coder
private

Definition at line 102 of file CastorLedAnalysis.h.

int CastorLedAnalysis::m_endTS
private

Definition at line 87 of file CastorLedAnalysis.h.

TFile* CastorLedAnalysis::m_file
private

Definition at line 72 of file CastorLedAnalysis.h.

int CastorLedAnalysis::m_fitflag
private

Definition at line 99 of file CastorLedAnalysis.h.

int CastorLedAnalysis::m_hiSaveflag
private

Definition at line 89 of file CastorLedAnalysis.h.

std::ofstream CastorLedAnalysis::m_logFile
private

Definition at line 83 of file CastorLedAnalysis.h.

int CastorLedAnalysis::m_nevtsample
private

Definition at line 88 of file CastorLedAnalysis.h.

std::ofstream CastorLedAnalysis::m_outFile
private

Definition at line 82 of file CastorLedAnalysis.h.

std::string CastorLedAnalysis::m_outputFileROOT
private

Definition at line 79 of file CastorLedAnalysis.h.

std::string CastorLedAnalysis::m_outputFileText
private

Definition at line 80 of file CastorLedAnalysis.h.

std::string CastorLedAnalysis::m_outputFileX
private

Definition at line 81 of file CastorLedAnalysis.h.

std::ofstream CastorLedAnalysis::m_outputFileXML
private

Definition at line 84 of file CastorLedAnalysis.h.

const CastorPedestal* CastorLedAnalysis::m_ped
private

Definition at line 103 of file CastorLedAnalysis.h.

const CastorQIEShape* CastorLedAnalysis::m_shape
private

Definition at line 101 of file CastorLedAnalysis.h.

int CastorLedAnalysis::m_startTS
private

Definition at line 86 of file CastorLedAnalysis.h.

bool CastorLedAnalysis::m_usecalib
private

Definition at line 90 of file CastorLedAnalysis.h.

int CastorLedAnalysis::sample
private

Definition at line 119 of file CastorLedAnalysis.h.

Referenced by svgfig.Curve::Path().

std::vector<bool> CastorLedAnalysis::state
private