49 #include "TDirectory.h"
185 if ( wavelength !=0 ) {
return; }
193 LogError(
"EcalLaserAnalyzerYousi") <<
"Cannot get product: EBRecHitCollection from: "
205 LogError(
"EcalLaserAnalyzerYousi") <<
"Cannot get product: EBdigiCollection from: "
206 <<
"getbytype" <<
" - returning.\n\n";
214 for (
int j = 0;
j < 5; ++
j) {
216 for (
int z = 0;
z<2; ++
z) {
218 TF1 peakFit(
"peakFit",
"[0] +[1]*x +[2]*x^2", 30, 50);
219 TF1 pedFit(
"pedFit",
"[0]",0,5);
221 for(
int k = 0;
k < 50;
k++){
224 pedFit.SetParameter(0,750);
226 Float_t ped = pedFit.GetParameter(0);
228 Int_t maxbin =
FitHist->GetMaximumBin();
229 peakFit.SetRange(
FitHist->GetBinCenter(maxbin)-4*
FitHist->GetBinWidth(maxbin),
231 peakFit.SetParameters(750,4,-.05);
233 Float_t
max = peakFit.Eval(-peakFit.GetParameter(1)/(2*peakFit.GetParameter(2)));
235 PN_amp[
j] = PN_amp[
j] + max - ped;
237 PN_amp[
j] = PN_amp[
j] +
max;
241 PN_amp[
j] = PN_amp[
j]/2.0;
267 Int_t
CN = hits->size();
269 for(
int j = 0;
j <
CN;
j++){
270 ID = (*hits)[
j].id();
271 theAPD = (*hits)[
j].amplitude();
272 Jitter = (*hits)[
j].jitter();
273 Chi2 = (*hits)[
j].chi2();
274 thePN = PN_amp[ (
ID.ic() + 299)/400 ];
279 C_APD[
ID.ic()-1]->Fill(theAPD);
281 C_PN[
ID.ic()-1]->Fill(thePN);
282 C_J[
ID.ic()-1]->Fill(Jitter);
284 APDPN_J->Fill(Jitter, theAPD/thePN);
288 fTree[2] = theAPD/thePN;
291 fTree[5] = (*hits)[
j].pedestal();
292 fTree[6] = iEvent.
id().
event();
294 if(((
ID.ic()-1)%20 > 9)||((
ID.ic()-1)<100)){
297 APDPN_J_H[0]->Fill(Jitter, theAPD/thePN);
301 APDPN_J_H[1]->Fill(Jitter, theAPD/thePN);
303 if((
ID.ic()-1) < 100){
310 if(((
ID.ic()-1)%20) < 10){
311 index = ((
ID.ic()-101)/400)*2 + 1;
317 index = ((
ID.ic()-101)/400)*2 + 2;
349 edm::LogInfo(
"EcalLaserAnalyzerYousi") <<
"running laser analyzer \n\n";
355 APD =
new TH2F(
"APD",
"APD", 85, 0., 85., 20, 0., 20.);
356 APD_RMS =
new TH2F(
"APD_RMS",
"APD_RMS", 85, 0., 85., 20, 0., 20.);
357 APDPN =
new TH2F(
"APDPN",
"APDPN", 85, 0., 85., 20, 0., 20.);
358 APDPN_RMS =
new TH2F(
"APDPN_RMS",
"APDPN_RMS", 85, 0., 85., 20, 0., 20.);
359 PN =
new TH2F(
"PN",
"PN", 85, 0., 85., 20, 0., 20.);
360 APDPN_J =
new TH2F(
"JittervAPDPN",
"JittervAPDPN",250, 3., 7., 250, 1., 2.);
361 APDPN_C =
new TH2F(
"Chi2vAPDPN",
"Chi2vAPDPN", 250, 0., 50., 250, 0., 5.0);
362 FitHist =
new TH1F(
"FitHist",
"FitHist", 50, 0, 50);
363 Count =
new TH2F(
"Count",
"Count", 85, 0., 1., 20, 0., 1.);
366 for(
int i = 0;
i < 1700;
i++){
367 std::ostringstream name_1;
368 std::ostringstream name_2;
369 std::ostringstream name_3;
370 std::ostringstream name_4;
371 std::ostringstream name_5;
372 name_1 <<
"C_APD_" <<
i+1;
373 name_2 <<
"C_APDPN_" << i+1;
374 name_3 <<
"C_PN_" << i+1;
375 name_4 <<
"C_J_" << i+1;
376 name_5 <<
"C_APDPN_J_" << i+1;
377 C_APD[
i] =
new TH1F(name_1.str().c_str(), name_1.str().c_str(), 2500, 0., 5000.);
378 C_APDPN[
i] =
new TH1F(name_2.str().c_str(), name_2.str().c_str(), 20000, 0., 25.);
379 C_PN[
i] =
new TH1F(name_3.str().c_str(), name_3.str().c_str(), 1000, 0., 4000.);
380 C_J[
i] =
new TH1F(name_4.str().c_str(), name_4.str().c_str(), 250, 3.0, 7.);
381 C_APDPN_J[
i] =
new TH2F(name_5.str().c_str(), name_5.str().c_str(), 250, 3.0, 6., 250, 1., 2.2);
384 for(
int i = 0;
i < 2;
i++){
385 std::ostringstream aname_1;
386 std::ostringstream aname_2;
387 std::ostringstream aname_3;
388 aname_1 <<
"peakAPD_" <<
i;
389 aname_2 <<
"peakAPDPN_" <<
i;
390 aname_3 <<
"JittervAPDPN_Half_" <<
i;
391 peakAPD[
i] =
new TH1F(aname_1.str().c_str(), aname_1.str().c_str(), 1000, 0., 5000.);
392 peakAPDPN[
i] =
new TH1F(aname_2.str().c_str(), aname_2.str().c_str(), 1000, 0., 8.);
393 APDPN_J_H[
i] =
new TH2F(aname_3.str().c_str(), aname_3.str().c_str(), 250, 3., 7., 250, 1., 2.2);
396 for(
int i = 0;
i < 9;
i++){
397 std::ostringstream bname_1;
398 std::ostringstream bname_2;
399 std::ostringstream bname_3;
400 bname_1 <<
"APD_LM_" <<
i;
401 bname_2 <<
"APDPN_LM_" <<
i;
402 bname_3 <<
"APDPN_J_LM_" <<
i;
403 APD_LM[
i] =
new TH1F(bname_1.str().c_str(), bname_1.str().c_str(), 500, 0., 5000.);
404 APDPN_LM[
i] =
new TH1F(bname_2.str().c_str(), bname_2.str().c_str(), 500, 0., 8.);
405 APDPN_J_LM[
i] =
new TH2F(bname_3.str().c_str(), bname_3.str().c_str(), 250, 3., 7., 250, 1., 2.2);
414 std::ostringstream varlist;
415 varlist <<
"APD:PN:APDPN:Jitter:Chi2:ped:EVT";
416 for(
int i = 0;
i < 1700;
i++){
417 std::ostringstream
name;
418 name <<
"C_Tree_" <<
i+1;
419 C_Tree[
i] = (TNtuple*)
new TNtuple(name.str().c_str(), name.str().c_str(),
420 varlist.str().c_str());
435 DIR = fROOT->mkdir(
Run_.c_str());
438 for(
int j = 0;
j < 1700;
j++){
439 Float_t min_r, max_r;
440 Float_t RMS, Sigma, K;
447 APD_RMS->SetBinContent(85-(
j/20), 20-(
j%20), RMS);
452 min_r =
C_APD[
j]->GetBinCenter(
C_APD[
j]->GetMaximumBin()) - K*RMS;
453 max_r =
C_APD[
j]->GetBinCenter(
C_APD[
j]->GetMaximumBin()) + K*RMS;
454 gs1 =
new TF1(
"gs1",
"gaus", min_r, max_r);
455 C_APD[
j]->Fit(
"gs1",
"RQI");
456 Sigma = gs1->GetParameter(2);
460 C_APD[
j]->Fit(
"gaus",
"QI");
461 gs1 =
C_APD[
j]->GetFunction(
"gaus");
467 APDPN_RMS->SetBinContent(85-(
j/20), 20-(
j%20), RMS);
474 gs2 =
new TF1(
"gs2",
"gaus", min_r, max_r);
476 Sigma = gs2->GetParameter(2);
481 gs2 =
C_APDPN[
j]->GetFunction(
"gaus");
489 C_PN[
j]->Fit(
"gaus",
"Q");
490 C_APD[
j]->Fit(
"gaus",
"QI");
492 C_APD[
j]->Write(
"", TObject::kOverwrite);
493 C_APDPN[
j]->Write(
"", TObject::kOverwrite);
494 C_PN[
j]->Write(
"", TObject::kOverwrite);
495 C_J[
j]->Write(
"", TObject::kOverwrite);
497 newgs1 =
C_APD[
j]->GetFunction(
"gaus");
498 newgs2 =
C_APDPN[
j]->GetFunction(
"gaus");
499 gs3 =
C_PN[
j]->GetFunction(
"gaus");
500 Float_t theAPD = newgs1->GetParameter(1);
501 APD->SetBinContent(85-(
j/20), 20-(
j%20), theAPD);
502 Float_t theAPDPN = newgs2->GetParameter(1);
503 APDPN->SetBinContent(85-(
j/20), 20-(
j%20), theAPDPN);
504 Float_t thePN = gs3->GetParameter(1);
506 PN->SetBinContent(85-(
j/20), 20-(
j%20), thePN);
507 C_Tree[
j]->Write(
"", TObject::kOverwrite);
510 for(
int i = 0;
i < 9;
i++){
511 APD_LM[
i]->Write(
"", TObject::kOverwrite);
512 APDPN_LM[
i]->Write(
"", TObject::kOverwrite);
518 APD->Write(
"", TObject::kOverwrite);
519 APD_RMS->Write(
"", TObject::kOverwrite);
520 APDPN_RMS->Write(
"", TObject::kOverwrite);
521 APDPN->Write(
"", TObject::kOverwrite);
522 APDPN_J->Write(
"", TObject::kOverwrite);
523 APDPN_C->Write(
"", TObject::kOverwrite);
524 PN->Write(
"", TObject::kOverwrite);
525 peakAPD[0]->Write(
"", TObject::kOverwrite);
526 peakAPD[1]->Write(
"", TObject::kOverwrite);
527 peakAPDPN[0]->Write(
"", TObject::kOverwrite);
528 peakAPDPN[1]->Write(
"", TObject::kOverwrite);
529 APDPN_J_H[0]->Write(
"", TObject::kOverwrite);
530 APDPN_J_H[1]->Write(
"", TObject::kOverwrite);
int adc(sample_type sample)
get the ADC sample (12 bits)
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
std::string digiProducer_
#define DEFINE_FWK_MODULE(type)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
const T & max(const T &a, const T &b)
std::string hitCollection_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
~EcalLaserAnalyzerYousi()
std::string PNdigiCollection_
EcalLaserAnalyzerYousi(const edm::ParameterSet &)