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;
268 Int_t CN = hits->size();
270 for(
int j = 0;
j < CN;
j++){
271 ID = (*hits)[
j].id();
272 cy = 20-(
ID.ic()-1)%20;
273 cx = 85-(
ID.ic()-1)/20;
274 theAPD = (*hits)[
j].amplitude();
275 Jitter = (*hits)[
j].jitter();
276 Chi2 = (*hits)[
j].chi2();
277 thePN = PN_amp[ (
ID.ic() + 299)/400 ];
282 C_APD[
ID.ic()-1]->Fill(theAPD);
284 C_PN[
ID.ic()-1]->Fill(thePN);
285 C_J[
ID.ic()-1]->Fill(Jitter);
287 APDPN_J->Fill(Jitter, theAPD/thePN);
291 fTree[2] = theAPD/thePN;
294 fTree[5] = (*hits)[
j].pedestal();
295 fTree[6] = iEvent.
id().
event();
297 if(((
ID.ic()-1)%20 > 9)||((
ID.ic()-1)<100)){
300 APDPN_J_H[0]->Fill(Jitter, theAPD/thePN);
304 APDPN_J_H[1]->Fill(Jitter, theAPD/thePN);
306 if((
ID.ic()-1) < 100){
313 if(((
ID.ic()-1)%20) < 10){
314 index = ((
ID.ic()-101)/400)*2 + 1;
320 index = ((
ID.ic()-101)/400)*2 + 2;
352 edm::LogInfo(
"EcalLaserAnalyzerYousi") <<
"running laser analyzer \n\n";
358 APD =
new TH2F(
"APD",
"APD", 85, 0., 85., 20, 0., 20.);
359 APD_RMS =
new TH2F(
"APD_RMS",
"APD_RMS", 85, 0., 85., 20, 0., 20.);
360 APDPN =
new TH2F(
"APDPN",
"APDPN", 85, 0., 85., 20, 0., 20.);
361 APDPN_RMS =
new TH2F(
"APDPN_RMS",
"APDPN_RMS", 85, 0., 85., 20, 0., 20.);
362 PN =
new TH2F(
"PN",
"PN", 85, 0., 85., 20, 0., 20.);
363 APDPN_J =
new TH2F(
"JittervAPDPN",
"JittervAPDPN",250, 3., 7., 250, 1., 2.);
364 APDPN_C =
new TH2F(
"Chi2vAPDPN",
"Chi2vAPDPN", 250, 0., 50., 250, 0., 5.0);
365 FitHist =
new TH1F(
"FitHist",
"FitHist", 50, 0, 50);
366 Count =
new TH2F(
"Count",
"Count", 85, 0., 1., 20, 0., 1.);
369 for(
int i = 0;
i < 1700;
i++){
370 std::ostringstream name_1;
371 std::ostringstream name_2;
372 std::ostringstream name_3;
373 std::ostringstream name_4;
374 std::ostringstream name_5;
375 name_1 <<
"C_APD_" <<
i+1;
376 name_2 <<
"C_APDPN_" << i+1;
377 name_3 <<
"C_PN_" << i+1;
378 name_4 <<
"C_J_" << i+1;
379 name_5 <<
"C_APDPN_J_" << i+1;
380 C_APD[
i] =
new TH1F(name_1.str().c_str(), name_1.str().c_str(), 2500, 0., 5000.);
381 C_APDPN[
i] =
new TH1F(name_2.str().c_str(), name_2.str().c_str(), 20000, 0., 25.);
382 C_PN[
i] =
new TH1F(name_3.str().c_str(), name_3.str().c_str(), 1000, 0., 4000.);
383 C_J[
i] =
new TH1F(name_4.str().c_str(), name_4.str().c_str(), 250, 3.0, 7.);
384 C_APDPN_J[
i] =
new TH2F(name_5.str().c_str(), name_5.str().c_str(), 250, 3.0, 6., 250, 1., 2.2);
387 for(
int i = 0;
i < 2;
i++){
388 std::ostringstream aname_1;
389 std::ostringstream aname_2;
390 std::ostringstream aname_3;
391 aname_1 <<
"peakAPD_" <<
i;
392 aname_2 <<
"peakAPDPN_" <<
i;
393 aname_3 <<
"JittervAPDPN_Half_" <<
i;
394 peakAPD[
i] =
new TH1F(aname_1.str().c_str(), aname_1.str().c_str(), 1000, 0., 5000.);
395 peakAPDPN[
i] =
new TH1F(aname_2.str().c_str(), aname_2.str().c_str(), 1000, 0., 8.);
396 APDPN_J_H[
i] =
new TH2F(aname_3.str().c_str(), aname_3.str().c_str(), 250, 3., 7., 250, 1., 2.2);
399 for(
int i = 0;
i < 9;
i++){
400 std::ostringstream bname_1;
401 std::ostringstream bname_2;
402 std::ostringstream bname_3;
403 bname_1 <<
"APD_LM_" <<
i;
404 bname_2 <<
"APDPN_LM_" <<
i;
405 bname_3 <<
"APDPN_J_LM_" <<
i;
406 APD_LM[
i] =
new TH1F(bname_1.str().c_str(), bname_1.str().c_str(), 500, 0., 5000.);
407 APDPN_LM[
i] =
new TH1F(bname_2.str().c_str(), bname_2.str().c_str(), 500, 0., 8.);
408 APDPN_J_LM[
i] =
new TH2F(bname_3.str().c_str(), bname_3.str().c_str(), 250, 3., 7., 250, 1., 2.2);
417 std::ostringstream varlist;
418 varlist <<
"APD:PN:APDPN:Jitter:Chi2:ped:EVT";
419 for(
int i = 0;
i < 1700;
i++){
420 std::ostringstream
name;
421 name <<
"C_Tree_" <<
i+1;
422 C_Tree[
i] = (TNtuple*)
new TNtuple(name.str().c_str(), name.str().c_str(),
423 varlist.str().c_str());
438 DIR = fROOT->mkdir(
Run_.c_str());
441 for(
int j = 0;
j < 1700;
j++){
442 Float_t min_r, max_r;
443 Float_t RMS,
Sigma, K;
450 APD_RMS->SetBinContent(85-(
j/20), 20-(
j%20), RMS);
455 min_r =
C_APD[
j]->GetBinCenter(
C_APD[
j]->GetMaximumBin()) - K*RMS;
456 max_r =
C_APD[
j]->GetBinCenter(
C_APD[
j]->GetMaximumBin()) + K*RMS;
457 gs1 =
new TF1(
"gs1",
"gaus", min_r, max_r);
458 C_APD[
j]->Fit(
"gs1",
"RQI");
459 Sigma = gs1->GetParameter(2);
463 C_APD[
j]->Fit(
"gaus",
"QI");
464 gs1 =
C_APD[
j]->GetFunction(
"gaus");
470 APDPN_RMS->SetBinContent(85-(
j/20), 20-(
j%20), RMS);
477 gs2 =
new TF1(
"gs2",
"gaus", min_r, max_r);
479 Sigma = gs2->GetParameter(2);
484 gs2 =
C_APDPN[
j]->GetFunction(
"gaus");
492 C_PN[
j]->Fit(
"gaus",
"Q");
493 C_APD[
j]->Fit(
"gaus",
"QI");
495 C_APD[
j]->Write(
"", TObject::kOverwrite);
496 C_APDPN[
j]->Write(
"", TObject::kOverwrite);
497 C_PN[
j]->Write(
"", TObject::kOverwrite);
498 C_J[
j]->Write(
"", TObject::kOverwrite);
500 newgs1 =
C_APD[
j]->GetFunction(
"gaus");
501 newgs2 =
C_APDPN[
j]->GetFunction(
"gaus");
502 gs3 =
C_PN[
j]->GetFunction(
"gaus");
503 Float_t theAPD = newgs1->GetParameter(1);
504 APD->SetBinContent(85-(
j/20), 20-(
j%20), theAPD);
505 Float_t theAPDPN = newgs2->GetParameter(1);
506 APDPN->SetBinContent(85-(
j/20), 20-(
j%20), theAPDPN);
507 Float_t thePN = gs3->GetParameter(1);
509 PN->SetBinContent(85-(
j/20), 20-(
j%20), thePN);
510 C_Tree[
j]->Write(
"", TObject::kOverwrite);
513 for(
int i = 0;
i < 9;
i++){
514 APD_LM[
i]->Write(
"", TObject::kOverwrite);
515 APDPN_LM[
i]->Write(
"", TObject::kOverwrite);
521 APD->Write(
"", TObject::kOverwrite);
522 APD_RMS->Write(
"", TObject::kOverwrite);
523 APDPN_RMS->Write(
"", TObject::kOverwrite);
524 APDPN->Write(
"", TObject::kOverwrite);
525 APDPN_J->Write(
"", TObject::kOverwrite);
526 APDPN_C->Write(
"", TObject::kOverwrite);
527 PN->Write(
"", TObject::kOverwrite);
528 peakAPD[0]->Write(
"", TObject::kOverwrite);
529 peakAPD[1]->Write(
"", TObject::kOverwrite);
530 peakAPDPN[0]->Write(
"", TObject::kOverwrite);
531 peakAPDPN[1]->Write(
"", TObject::kOverwrite);
532 APDPN_J_H[0]->Write(
"", TObject::kOverwrite);
533 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_
static const char * Sigma
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
~EcalLaserAnalyzerYousi()
std::string PNdigiCollection_
EcalLaserAnalyzerYousi(const edm::ParameterSet &)