00001
00002
00003
00004
00005
00006
00007
00008 #include <memory>
00009 #include <string>
00010 #include <iostream>
00011
00012 #include "TH1F.h"
00013 #include "TH2F.h"
00014 #include "TFile.h"
00015 #include "math.h"
00016 #include "TMath.h"
00017 #include "TF1.h"
00018
00019 #include "CalibCalorimetry/HcalStandardModules/interface/HFLightCal.h"
00020
00021 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00022 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00023
00024 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
00025 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
00026 #include "CondFormats/HcalObjects/interface/HcalQIEShape.h"
00027 #include "CondFormats/HcalObjects/interface/HcalQIECoder.h"
00028
00029 #include "FWCore/Framework/interface/Event.h"
00030 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00031 #include "FWCore/Framework/interface/EventSetup.h"
00032 #include "FWCore/Framework/interface/ESHandle.h"
00033
00034 using namespace std;
00035 Int_t Nev, runN=0, eventN=0;
00036 Int_t itsmax[26][36][2];
00037 Int_t itspinmax[8][3];
00038
00039 namespace {
00040
00041 bool verbose = false;
00042 }
00043
00044 HFLightCal::HFLightCal (const edm::ParameterSet& fConfiguration) :
00045 hfDigiCollectionTag_(fConfiguration.getParameter<edm::InputTag>("hfDigiCollectionTag")),
00046 hcalCalibDigiCollectionTag_(fConfiguration.getParameter<edm::InputTag>("hcalCalibDigiCollectionTag")) {
00047
00048
00049 histfile = fConfiguration.getUntrackedParameter<string>("rootFile");
00050 textfile = fConfiguration.getUntrackedParameter<string>("textFile");
00051 prefile = fConfiguration.getUntrackedParameter<string>("preFile");
00052 }
00053
00054 HFLightCal::~HFLightCal () {
00055
00056 }
00057
00058 void HFLightCal::beginJob() {
00059
00060 char htit[64];
00061 Int_t neta,nphi,ndepth,nmax,nquad,npin;
00062
00063 std::cout<<std::endl<<"HFLightCal beginJob: --> "<<std::endl;
00064
00065
00066 mFile = new TFile (histfile.c_str(),"RECREATE");
00067 if ((tFile = fopen(textfile.c_str(),"w"))==NULL) {
00068 printf("\nNo output textfile open\n\n");
00069 std::cout<<"Problem with output textFILE => exit"<<std::endl;
00070 exit(1);
00071 }
00072
00073 if ((preFile = fopen(prefile.c_str(),"r"))==NULL){
00074 printf("\nNo input pre-file open\n\n");
00075 std::cout<<"Problem with input textFILE => exit"<<std::endl;
00076 exit(1);
00077 }
00078 rewind(preFile);
00079 for (int i=0; i<1728; i++) {
00080 fscanf(preFile,"%d%d%d%d\r",&neta,&nphi,&ndepth,&nmax);
00081
00082 if (neta>=29 && neta<=41 && nphi<72 && nphi>0 && ndepth>0 && ndepth<=2)
00083 itsmax[neta-29][(nphi-1)/2][ndepth-1] = nmax;
00084 else if (neta<=-29 && neta>=-41 && nphi<72 && nphi>0 && ndepth>0 && ndepth<=2)
00085 itsmax[13-neta-29][(nphi-1)/2][ndepth-1] = nmax;
00086 else {
00087 std::cout<<"Input pre-file: wrong channel record:"<<std::endl;
00088 std::cout<<"eta="<<neta<<" phi="<<nphi<<" depth="<<ndepth<<" max="<<nmax<<std::endl;
00089 }
00090 }
00091 for (int i=0; i<24; i++) {
00092 fscanf(preFile,"%d%d%d\r",&nquad,&npin,&nmax);
00093
00094 if (nquad>0 && nquad<=4 && npin<=3 && npin>0)
00095 itspinmax[nquad-1][npin-1] = nmax;
00096 else if (nquad<0 && nquad>=-4 && npin<=3 && npin>0)
00097 itspinmax[4-nquad-1][npin-1] = nmax;
00098 else {
00099 std::cout<<"Input pre-file: wrong PIN record:"<<std::endl;
00100 std::cout<<"quad="<<nquad<<" pin="<<npin<<" max="<<nmax<<std::endl;
00101 }
00102 }
00103
00104
00105 htmax = new TH1F("htmax","Max TS",10,-0.5,9.5);
00106 htmean = new TH1F("htmean","Mean signal TS",100,0,10);
00107 hsignalmean = new TH1F("hsignalmean","Mean ADC 4maxTS",1201,-25,30000);
00108 hsignalrms = new TH1F("hsignalrms","RMS ADC 4maxTS",500,0,500);
00109 hpedmean = new TH1F("hpedmean","Mean ADC 4lowTS",200,-10,90);
00110 hpedrms = new TH1F("hpedrms","RMS ADC 4lowTS",200,0,100);
00111 hspes = new TH1F("hspes","SPE if measured",200,0,40);
00112 hnpevar = new TH1F("hnpevar","~N PE input",500,0,500);
00113 hsignalmapP = new TH2F("hsignalmapP","Mean(Response) - Mean(Pedestal) HFP;#eta;#phi",26,28.5,41.5,36,0,72);
00114 hsignalRMSmapP = new TH2F("hsignalRMSmapP","RMS Response HFP;#eta;#phi",26,28.5,41.5,36,0,72);
00115 hnpemapP = new TH2F("hnpemapP","~N PE input HFP;#eta;#phi",26,28.5,41.5,36,0,72);
00116 hnpemapP->SetOption("COLZ");hsignalmapP->SetOption("COLZ");hsignalRMSmapP->SetOption("COLZ");
00117 hsignalmapM = new TH2F("hsignalmapM","Mean(Response) - Mean(Pedestal) HFM;#eta;#phi",26,-41.5,-28.5,36,0,72);
00118 hsignalRMSmapM = new TH2F("hsignalRMSmapM","RMS Response HFM;#eta;#phi",26,-41.5,-28.5,36,0,72);
00119 hnpemapM = new TH2F("hnpemapM","~N PE input HFM;#eta;#phi",26,-41.5,-28.5,36,0,72);
00120 hnpemapM->SetOption("COLZ");hsignalmapM->SetOption("COLZ");hsignalRMSmapM->SetOption("COLZ");
00121
00122 for (int i=0;i<13;i++) for (int j=0;j<36;j++) for (int k=0;k<2;k++) {
00123 if (i>10 && j%2==0) continue;
00124 sprintf(htit,"ts_+%d_%d_%d",i+29,j*2+1,k+1);
00125 hts[i][j][k] = new TH1F(htit,htit,10,-0.5,9.5);
00126 sprintf(htit,"tsmean_+%d_%d_%d",i+29,j*2+1,k+1);
00127 htsm[i][j][k] = new TH1F(htit,htit,100,0,10);
00128 sprintf(htit,"sp_+%d_%d_%d",i+29,j*2+1,k+1);
00129 hsp[i][j][k] = new TH1F(htit,htit,1201,-25,30000);
00130 sprintf(htit,"spe_+%d_%d_%d",i+29,j*2+1,k+1);
00131 hspe[i][j][k] = new TH1F(htit,htit,200,-9.5,190.5);
00132 sprintf(htit,"ped_+%d_%d_%d",i+29,j*2+1,k+1);
00133 hped[i][j][k] = new TH1F(htit,htit,200,-9.5,190.5);
00134 sprintf(htit,"ts_-%d_%d_%d",i+29,j*2+1,k+1);
00135 hts[i+13][j][k] = new TH1F(htit,htit,10,-0.5,9.5);
00136 sprintf(htit,"tsmean_-%d_%d_%d",i+29,j*2+1,k+1);
00137 htsm[i+13][j][k] = new TH1F(htit,htit,100,0,10);
00138 sprintf(htit,"sp_-%d_%d_%d",i+29,j*2+1,k+1);
00139 hsp[i+13][j][k] = new TH1F(htit,htit,1201,-25,30000);
00140 sprintf(htit,"spe_-%d_%d_%d",i+29,j*2+1,k+1);
00141 hspe[i+13][j][k] = new TH1F(htit,htit,200,-9.5,190.5);
00142 sprintf(htit,"ped_-%d_%d_%d",i+29,j*2+1,k+1);
00143 hped[i+13][j][k] = new TH1F(htit,htit,200,-9.5,190.5);
00144 }
00145
00146 for (int i=0;i<4;i++) for (int j=0;j<3;j++) {
00147 sprintf(htit,"ts_PIN%d_+Q%d",j+1,i+1);
00148 htspin[i][j] = new TH1F(htit,htit,10,-0.5,9.5);
00149 sprintf(htit,"sp_PIN%d_+Q%d",j+1,i+1);
00150 hsppin[i][j] = new TH1F(htit,htit,1601,-25,40000);
00151 sprintf(htit,"spe_PIN%d_+Q%d",j+1,i+1);
00152 hspepin[i][j] = new TH1F(htit,htit,200,-9.5,190.5);
00153 sprintf(htit,"ped_PIN%d_+Q%d",j+1,i+1);
00154 hpedpin[i][j] = new TH1F(htit,htit,200,-9.5,190.5);
00155 sprintf(htit,"tsmean_PIN%d_+Q%d",j+1,i+1);
00156 htsmpin[i][j] = new TH1F(htit,htit,100,0,10);
00157 sprintf(htit,"ts_PIN%d_-Q%d",j+1,i+1);
00158 htspin[i+4][j] = new TH1F(htit,htit,10,-0.5,9.5);
00159 sprintf(htit,"sp_PIN%d_-Q%d",j+1,i+1);
00160 hsppin[i+4][j] = new TH1F(htit,htit,1601,-25,40000);
00161 sprintf(htit,"spe_PIN%d_-Q%d",j+1,i+1);
00162 hspepin[i+4][j] = new TH1F(htit,htit,200,-9.5,190.5);
00163 sprintf(htit,"ped_PIN%d_-Q%d",j+1,i+1);
00164 hpedpin[i+4][j] = new TH1F(htit,htit,200,-9.5,190.5);
00165 sprintf(htit,"tsmean_PIN%d_-Q%d",j+1,i+1);
00166 htsmpin[i+4][j] = new TH1F(htit,htit,100,0,10);
00167 }
00168 std::cout<<std::endl<<"histfile="<<histfile.c_str()<<" textfile="<<textfile.c_str()<<std::endl;
00169 return;
00170 }
00171
00172 void HistSpecs(TH1F* hist, Double_t &mean, Double_t &rms, Double_t range=4) {
00173 Double_t xmin,xmax;
00174 mean=hist->GetMean();
00175 rms=hist->GetRMS();
00176 xmin=hist->GetXaxis()->GetXmin();
00177 xmax=hist->GetXaxis()->GetXmax();
00178 hist->SetAxisRange(mean-range*rms-100,mean+range*rms+100);
00179 mean=hist->GetMean();
00180 rms=hist->GetRMS();
00181 hist->SetAxisRange(mean-range*rms-100,mean+range*rms+100);
00182 mean=hist->GetMean();
00183 rms=hist->GetRMS();
00184 hist->SetAxisRange(xmin,xmax);
00185 return;
00186 }
00187
00188 Double_t FitFun(Double_t *x, Double_t *par) {
00189
00190
00191 Double_t sum,xx,A0,C0,r0,sigma0,mean1,sigma1,A1,C1,r1,mean2,sigma2,A2,C2,r2,mean3,sigma3,A3,C3,r3;
00192
00193 const Double_t k0=2.0, k1=1.6, k2=2.0;
00194
00195 xx=x[0];
00196 sigma0 = par[2];
00197 A0 = 2*Nev/(2+2*par[0]+par[0]*par[0]+pow(par[0],3)/3+pow(par[0],4)/12+
00198 pow(par[0],5)/60+pow(par[0],6)/360);
00199 r0 = ((xx-par[1])/sigma0);
00200 C0 = 1/(sigma0* TMath::Exp(-k0*k0/2)/k0 +
00201 sigma0*sqrt(2*3.14159)*0.5*(1+TMath::Erf(k0/1.41421)));
00202
00203 if(r0 < k0) sum = C0*A0*TMath::Exp(-0.5*r0*r0);
00204 else sum = C0*A0*TMath::Exp(0.5*k0*k0-k0*r0);
00205
00206 mean1 = par[1]+par[3];
00207 sigma1 = par[4];
00208
00209
00210 A1 = A0*par[0];
00211 C1 = 1/(sigma1* TMath::Exp(-k1*k1/2)/k1 +
00212 sigma1*sqrt(2*3.14159)*0.5*(1+TMath::Erf(k1/1.41421)));
00213 r1 = ((xx-mean1)/sigma1);
00214 if(r1 < k1) sum += C1*A1*TMath::Exp(-0.5*r1*r1);
00215 else sum += C1*A1*TMath::Exp(0.5*k1*k1-k1*r1);
00216
00217 mean2 = 2*par[3]+par[1];
00218 sigma2 = sqrt(2*sigma1*sigma1 - pow(par[2],2));
00219
00220 A2 = A0*par[0]*par[0]/2;
00221 C2 = 1/(sigma2* TMath::Exp(-k2*k2/2)/k2 +
00222 sigma2*sqrt(2*3.14159)*0.5*(1+TMath::Erf(k2/1.41421)));
00223 r2 = ((xx-mean2)/sigma2);
00224 if(r2 < k2) sum += C2*A2*TMath::Exp(-0.5*r2*r2);
00225 else sum += C2*A2*TMath::Exp(0.5*k2*k2-k2*r2);
00226
00227 mean3 = 3*par[3]+par[1];
00228 sigma3 = sqrt(3*sigma1*sigma1 - 2*pow(par[2],2));
00229 A3 = A0*par[0]*par[0]*par[0]/6;
00230 C3 = 1/(sigma3*sqrt(2*3.14159));
00231 r3 = ((xx-mean3)/sigma3);
00232 sum += C3*A3*TMath::Exp(-0.5*r3*r3);
00233
00234 return sum;
00235 }
00236
00237 void HFLightCal::endJob(void)
00238 {
00239 Double_t mean,rms,meanped,rmsped,npevar;
00240 Double_t par[5],dspe=0,dnpe;
00241 Int_t tsmax,intspe;
00242 std::cout<<std::endl<<"HFLightCal endJob --> ";
00243 fprintf(tFile,"#RunN %d Events processed %d",runN,eventN);
00244
00245 for (int i=0;i<26;i++) for (int j=0;j<36;j++) for (int k=0;k<2;k++) {
00246 if (i>10 && i<13 && j%2==0) continue;
00247 if (i>23 && j%2==0) continue;
00248 meanped=rmsped=mean=rms=0;
00249 if (hsp[i][j][k]->Integral()>0) {
00250 HistSpecs(hped[i][j][k],meanped,rmsped);
00251 HistSpecs(hsp[i][j][k],mean,rms);
00252 if (hspe[i][j][k]->Integral()>hsp[i][j][k]->Integral()*0.9 || mean<100) {
00253 HistSpecs(hspe[i][j][k],mean,rms);
00254 }
00255 hsignalmean->Fill(mean);
00256 hsignalrms->Fill(rms);
00257 hpedmean->Fill(meanped);
00258 hpedrms->Fill(rmsped);
00259 }
00260 }
00261
00262 meanped=hpedmean->GetMean();
00263 rmsped=hpedrms->GetMean();
00264 mean=hsignalmean->GetMean();
00265 rms=hsignalrms->GetMean();
00266 fprintf(tFile," MeanInput=<%.2f> [linADCcount] RMS=<%.2f>\n",mean,rms);
00267 fprintf(tFile,"#eta/phi/depth sum4maxTS RMS ~N_PE sum4lowTS RMS maxTS SPE +/- Err Comment\n");
00268 TF1* fPed = new TF1("fPed","gaus",0,120);
00269 fPed->SetNpx(200);
00270 TF1 *fTot = new TF1("fTot",FitFun ,0,200,5);
00271 fTot->SetNpx(800);
00272 for (int i=0;i<26;i++) for (int j=0;j<36;j++) for (int k=0;k<2;k++) {
00273 if (i>10 && i<13 && j%2==0) continue;
00274 if (i>23 && j%2==0) continue;
00275 HistSpecs(hped[i][j][k],meanped,rmsped);
00276 HistSpecs(hsp[i][j][k],mean,rms);
00277 par[3]=0;
00278 if (hspe[i][j][k]->Integral()>hsp[i][j][k]->Integral()*0.9 || mean<100) {
00279 HistSpecs(hspe[i][j][k],mean,rms);
00280 if (hspe[i][j][k]->Integral(1,(int) (meanped+3*rmsped+12))/Nev>0.1) {
00281
00282 if (mean+rms*3-meanped-rmsped*3>2 && rmsped>0) {
00283 par[1] = meanped;
00284 par[2] = rmsped;
00285 par[0] = hped[i][j][k]->GetMaximum();
00286 fPed->SetParameters(par);
00287 hped[i][j][k]->Fit(fPed,"BQ0");
00288 fPed->GetParameters(&par[0]);
00289 hped[i][j][k]->Fit(fPed,"B0Q","",par[1]-par[2]*3,par[1]+par[2]*3);
00290 fPed->GetParameters(par);
00291 hped[i][j][k]->Fit(fPed,"BLIQ","",par[1]-par[2]*3,par[1]+par[2]*3);
00292 fPed->GetParameters(&par[0]);
00293 Nev = (int) hspe[i][j][k]->Integral();
00294 par[0]=0.1;
00295 par[3]=10;
00296 par[4]=6;
00297 fTot->SetParameters(par);
00298 fTot->SetParLimits(0,0,2);
00299
00300 fTot->SetParLimits(1,par[1]-1,par[1]+1);
00301 fTot->FixParameter(2,par[2]);
00302 fTot->SetParLimits(3,1.2,100);
00303
00304
00305 hspe[i][j][k]->Fit(fTot,"BLEQ","");
00306 fTot->GetParameters(par);
00307 hspe[i][j][k]->Fit(fTot,"BLEQ","",-10,par[1]+par[3]*5);
00308 fTot->GetParameters(par);
00309 dspe=fTot->GetParError(3);
00310 dnpe=fTot->GetParError(0);
00311 if (par[3]<1.21 || dnpe>par[0]) par[3]=-1;
00312 else if (par[0]>1.96 || par[3]>49) par[3]=0;
00313 else {
00314 hspes->Fill(par[3]);
00315 }
00316 }
00317 }
00318 }
00319
00320
00321 npevar=0;
00322 if (par[3]>0) npevar=par[0];
00323 else {
00324 if (hspe[i][j][k]->Integral()>hsp[i][j][k]->Integral()*0.98) {
00325 HistSpecs(hspe[i][j][k],mean,rms,3);
00326 }
00327 else {
00328 HistSpecs(hsp[i][j][k],mean,rms,3);
00329 }
00330 if (rmsped>0) {
00331 if (rms*rms-rmsped*rmsped>1 && mean>meanped) {
00332 npevar=(mean-meanped)*(mean-meanped)/(rms*rms-rmsped*rmsped);
00333 }
00334 else if (mean<100) {
00335 intspe=int(hspe[i][j][k]->Integral());
00336 hspe[i][j][k]->SetAxisRange(meanped+rmsped*4,300);
00337 npevar=hspe[i][j][k]->Integral()/intspe;
00338 if (npevar>0.01) npevar=-1;
00339 else npevar=0;
00340 hspe[i][j][k]->SetAxisRange(-20,300);
00341 }
00342 }
00343 }
00344 if (npevar>5.0e-5) hnpevar->Fill(npevar);
00345
00346 if (i<13) {
00347 hsignalmapP->Fill(i+28.6+k/2.0,j*2+1,mean-meanped);
00348 hsignalRMSmapP->Fill(i+28.6+k/2.0,j*2+1,rms);
00349 if (npevar>0) hnpemapP->Fill(i+28.6+k/2.0,j*2+1,npevar);
00350 fprintf(tFile,"%3d%4d%5d %11.2f%8.2f",i+29,j*2+1,k+1,mean,rms);
00351 }
00352 else {
00353 fprintf(tFile,"%3d%4d%5d %11.2f%8.2f",13-i-29,j*2+1,k+1,mean,rms);
00354 hsignalmapM->Fill(13-i-28.6-k/2.0,j*2+1,mean-meanped);
00355 hsignalRMSmapM->Fill(13-i-28.6-k/2.0,j*2+1,rms);
00356 if (npevar>0) hnpemapM->Fill(13-i-28.6-k/2.0,j*2+1,npevar);
00357 }
00358 if (npevar>0) fprintf(tFile," %9.4f",npevar);
00359 else fprintf(tFile," 0 ");
00360 fprintf(tFile," %8.2f%8.2f",meanped,rmsped);
00361 tsmax=hts[i][j][k]->GetMaximumBin()-1;
00362 fprintf(tFile," %4d",tsmax);
00363 if (par[3]>0 && par[3]<99) fprintf(tFile,"%8.2f%7.2f",par[3],dspe);
00364 else if (npevar>0) fprintf(tFile,"%8.2f 0 ",(mean-meanped)/npevar);
00365 else fprintf(tFile," 0 0 ");
00366
00367
00368 fprintf(tFile," ");
00369 if (hsp[i][j][k]->GetEntries()<=0) fprintf(tFile,"NoSignal\n");
00370 else if (hsp[i][j][k]->GetEntries()<=10) fprintf(tFile,"Nev<10\n");
00371 else {
00372 if (hsp[i][j][k]->Integral()<=10 || mean>12000) fprintf(tFile,"SignalOffRange\n");
00373 else {
00374 if (hsp[i][j][k]->Integral()<100) fprintf(tFile,"Nev<100/");
00375 if (npevar>0 && par[3]>0 && (npevar*Nev<10 || npevar<0.001))
00376 fprintf(tFile,"LowSignal/");
00377 else if (npevar==0 && fabs(mean-meanped)<3) fprintf(tFile,"LowSignal/");
00378 if (par[3]<0) fprintf(tFile,"BadFit/");
00379 else if (par[3]==0) fprintf(tFile,"NoSPEFit/");
00380 else if (par[3]>0 && npevar>1) fprintf(tFile,"NPE>1/");
00381 if (npevar<0) fprintf(tFile,"Problem/");
00382 if (mean<2) fprintf(tFile,"LowMean/");
00383 if (rms<0.5) fprintf(tFile,"LowRMS/");
00384 if (meanped<-1) fprintf(tFile,"LowPed/");
00385 else if (meanped>25) fprintf(tFile,"HighPed/");
00386 if (rmsped<0.5 && rmsped>0) fprintf(tFile,"NarrowPed/");
00387 else if (rmsped>10) fprintf(tFile,"WidePed/");
00388 if (hped[i][j][k]->GetBinContent(201)>10) fprintf(tFile,"PedOffRange");
00389 fprintf(tFile,"-\n");
00390 }
00391 }
00392 }
00393
00394 for (int i=0;i<8;i++) for (int j=0;j<3;j++) {
00395 HistSpecs(hpedpin[i][j],meanped,rmsped);
00396 HistSpecs(hsppin[i][j],mean,rms);
00397 if (hspepin[i][j]->Integral()>hsppin[i][j]->Integral()*0.9 || mean<100) {
00398 HistSpecs(hspepin[i][j],mean,rms);
00399 }
00400 if (i<4) fprintf(tFile," PIN%d +Q%d %12.2f %6.2f",j+1,i+1,mean,rms);
00401 else fprintf(tFile," PIN%d -Q%d %12.2f %6.2f",j+1,i-3,mean,rms);
00402 fprintf(tFile," %15.2f %6.2f",meanped,rmsped);
00403 tsmax=htspin[i][j]->GetMaximumBin()-1;
00404 fprintf(tFile," %4d\n",tsmax);
00405 }
00406
00407 mFile->Write();
00408 mFile->Close();
00409 fclose(tFile);
00410 std::cout<<std::endl<<" --endJob-- done"<<std::endl;
00411 return;
00412 }
00413
00414 void HFLightCal::analyze(const edm::Event& fEvent, const edm::EventSetup& fSetup) {
00415
00416
00417 edm::EventID eventId = fEvent.id();
00418 int runNer = eventId.run ();
00419 int eventNumber = eventId.event ();
00420 if (runN==0) runN=runNer;
00421 eventN++;
00422 if (verbose) std::cout << "========================================="<<std::endl
00423 << "run/event: "<<runNer<<'/'<<eventNumber<<std::endl;
00424
00425 Double_t buf[20];
00426 Double_t maxADC,signal,ped=0,meant;
00427 Int_t maxisample=0,i1=3,i2=6;
00428
00429
00430 edm::Handle<HcalCalibDigiCollection> calib;
00431 fEvent.getByLabel(hcalCalibDigiCollectionTag_, calib);
00432 if (verbose) std::cout<<"Analysis-> total CAL digis= "<<calib->size()<<std::endl;
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486 edm::Handle<HFDigiCollection> hf_digi;
00487 fEvent.getByLabel(hfDigiCollectionTag_, hf_digi);
00488 if (verbose) std::cout<<"Analysis-> total HF digis= "<<hf_digi->size()<<std::endl;
00489
00490 for (unsigned ihit = 0; ihit < hf_digi->size (); ++ihit) {
00491 const HFDataFrame& frame = (*hf_digi)[ihit];
00492 HcalDetId detId = frame.id();
00493 int ieta = detId.ieta();
00494 int iphi = detId.iphi();
00495 int depth = detId.depth();
00496 if (verbose) std::cout <<"HF digi # " <<ihit<<": eta/phi/depth: "
00497 <<ieta<<'/'<<iphi<<'/'<< depth << std::endl;
00498
00499 if (ieta>0) ieta = ieta-29;
00500 else ieta = 13-ieta-29;
00501
00502 for (int ii=0; ii<10; ii++) buf[ii]=0;
00503 maxADC=-99;
00504 for (int isample = 0; isample < frame.size(); ++isample) {
00505 int adc = frame[isample].adc();
00506 int capid = frame[isample].capid ();
00507 double linear_ADC = frame[isample].nominal_fC();
00508 double nominal_fC = detId.subdet () == HcalForward ? 2.6 * linear_ADC : linear_ADC;
00509
00510 if (verbose) std::cout << "Analysis-> HF sample # " << isample
00511 << ", capid=" << capid
00512 << ": ADC=" << adc
00513 << ", linearized ADC=" << linear_ADC
00514 << ", nominal fC=" << nominal_fC <<std::endl;
00515
00516 hts[ieta][(iphi-1)/2][depth-1]->Fill(isample,linear_ADC);
00517 buf[isample]=linear_ADC;
00518
00519
00520
00521
00522
00523
00524 }
00525
00526 maxADC=-99;
00527 for (int ii=0; ii<frame.size(); ii++) {
00528 signal=buf[ii];
00529 if (ii<2) signal -= (buf[ii+4]+buf[ii+8])/2.0;
00530 else if (ii<4) signal -= buf[ii+4];
00531 else if (ii<6) signal -= (buf[ii+4]+buf[ii-4])/2.0;
00532 else if (ii<8) signal -= buf[ii-4];
00533 else signal -= (buf[ii-4]+buf[ii-8])/2.0;
00534 if (signal>maxADC) {
00535 maxADC=signal;
00536 maxisample=ii;
00537 }
00538 }
00539
00540 if (abs(maxisample-itsmax[ieta][(iphi-1)/2][depth-1]+1)>1) maxisample=itsmax[ieta][(iphi-1)/2][depth-1]-1;
00541 if (verbose) std::cout<<eventNumber<<"/"<<ihit<<": maxTS="<<maxisample<<endl;
00542
00543
00544 htmax->Fill(maxisample);
00545 i1=maxisample-1;
00546 i2=maxisample+2;
00547 if (i1<0) {i1=0;i2=3;}
00548 else if (i2>9) {i1=6;i2=9;}
00549 else if (i2<9 && maxisample<=itsmax[ieta][(iphi-1)/2][depth-1]-1) {
00550 if (buf[i1]<buf[i2+1]) {i1=i1+1;i2=i2+1;}
00551 }
00552 signal=buf[i1]+buf[i1+1]+buf[i1+2]+buf[i1+3];
00553 hsp[ieta][(iphi-1)/2][depth-1]->Fill(signal);
00554 hspe[ieta][(iphi-1)/2][depth-1]->Fill(signal);
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565 if (i1<2) ped=buf[8]+buf[9]+buf[6]+buf[7];
00566 else if (i1==2) ped=buf[6]+buf[9]+buf[7]+buf[0];
00567 else if (i1==3) ped=buf[0]+buf[1]+buf[2]+buf[7];
00568 else if (i1>=4) ped=buf[0]+buf[1]+buf[2]+buf[3];
00569
00570 hped[ieta][(iphi-1)/2][depth-1]->Fill(ped);
00571
00572
00573 ped=ped/4;
00574 meant=(buf[i1]-ped)*i1+(buf[i1+1]-ped)*(i1+1)+(buf[i1+2]-ped)*(i1+2)+(buf[i1+3]-ped)*(i1+3);
00575 meant /= (buf[i1]-ped)+(buf[i1+1]-ped)+(buf[i1+2]-ped)+(buf[i1+3]-ped);
00576 htmean->Fill(meant);
00577 htsm[ieta][(iphi-1)/2][depth-1]->Fill(meant);
00578 }
00579 }
00580