56 _nsamples( iConfig.getUntrackedParameter< unsigned
int >(
"nSamples", 10 ) ),
57 _presample( iConfig.getUntrackedParameter< unsigned
int >(
"nPresamples", 3 ) ),
58 _firstsample( iConfig.getUntrackedParameter< unsigned
int >(
"firstSample", 1 ) ),
59 _lastsample( iConfig.getUntrackedParameter< unsigned
int >(
"lastSample", 2 ) ),
60 _samplemin( iConfig.getUntrackedParameter< unsigned
int >(
"sampleMin", 3 ) ),
61 _samplemax( iConfig.getUntrackedParameter< unsigned
int >(
"sampleMax", 9 ) ),
62 _nsamplesPN( iConfig.getUntrackedParameter< unsigned
int >(
"nSamplesPN", 50 ) ),
63 _presamplePN( iConfig.getUntrackedParameter< unsigned
int >(
"nPresamplesPN", 6 ) ),
64 _firstsamplePN( iConfig.getUntrackedParameter< unsigned
int >(
"firstSamplePN", 7 ) ),
65 _lastsamplePN( iConfig.getUntrackedParameter< unsigned
int >(
"lastSamplePN", 8 ) ),
66 _niter( iConfig.getUntrackedParameter< unsigned
int >(
"nIter", 3 ) ),
67 _chi2max( iConfig.getUntrackedParameter< double >(
"chi2Max", 10.0 ) ),
68 _timeofmax( iConfig.getUntrackedParameter< double >(
"timeOfMax", 4.5 ) ),
69 _ecalPart( iConfig.getUntrackedParameter<
std::
string >(
"ecalPart",
"EB" ) ),
70 _fedid( iConfig.getUntrackedParameter<
int >(
"fedID", -999 ) ),
76 towerID(-1), channelID(-1),runType(-1), runNum(0), fedID(-1), dccID(-1), side(-1), iZ(1),
77 phi(-1),
eta(-1),
event(0), apdAmpl(0),apdTime(0),pnAmpl(0),
78 pnID(-1), moduleID(-1), channelIteratorEE(0)
135 rootfile+=
"/TmpTreeTestPulseAnalyzer.root";
141 std::stringstream
name;
144 trees[
i]=
new TTree(name.str().c_str(),name.str().c_str());
148 trees[
i]->Branch(
"iphi", &
phi,
"phi/I" );
149 trees[
i]->Branch(
"ieta", &
eta,
"eta/I" );
161 trees[
i]->SetBranchAddress(
"ieta", &
eta );
162 trees[
i]->SetBranchAddress(
"iphi", &
phi );
178 for(
unsigned int j=0;j<
nCrys;j++){
188 for(
unsigned int j=0;j<
nMod;j++){
195 std::stringstream namefile;
196 namefile <<
resdir_ <<
"/APDPN_TESTPULSE.root";
216 DCCHeader=pDCCHeader.
product();
263 TheMapping = ecalmapping.
product();
265 std::cerr <<
"Error! can't get the product EcalMappingRcd"<< std::endl;
276 int fed = headerItr->fedId();
280 runType=headerItr->getRunType();
281 runNum=headerItr->getRunNumber();
282 event=headerItr->getLV1();
284 dccID=headerItr->getDccInTCCCommand();
285 fedID=headerItr->fedId();
322 std::map <int, std::vector<double> > allPNAmpl;
323 std::map <int, std::vector<int> > allPNGain;
329 bool isMemRelevant=
false;
330 for (
unsigned int imem=0;imem<
dccMEM.size();imem++){
337 if(!isMemRelevant)
continue;
339 for (
int samId=0; samId < (*pnItr).size() ; samId++ ) {
340 pn[samId]=(*pnItr).sample(samId).adc();
341 pnG[samId]=(*pnItr).sample(samId).gainId();
343 if(pnG[samId]!=1)
std::cout <<
"PN gain different from 1 for sample "<<samId<< std::endl;
344 if (samId==0) pngain=pnG[samId];
345 if (samId>0) pngain=
TMath::Max(pnG[samId],pngain);
351 bl=dsum/((double) _presamplePN);
355 ypnrange[
k]=
pn[
k] - bl;
357 if(ypnrange[k] > val_max) {
358 val_max= ypnrange[
k]; samplemax=
k;
362 chi2pn = pnfit -> doFit(samplemax,&ypnrange[0]);
364 if(chi2pn == 101 || chi2pn == 102 || chi2pn == 103)
pnAmpl=0.;
365 else pnAmpl= pnfit -> getAmpl();
368 allPNGain[pnDetId.
iDCCId()].push_back(pngain);
378 pstpfit -> init_errmat(10.);
389 EBDetId id_crystal(digiItr->id()) ;
392 int etaG = id_crystal.ieta() ;
393 int phiG = id_crystal.iphi() ;
399 etaL=LocalCoord.first ;
400 phiL=LocalCoord.second ;
411 int xtal=elecid_crystal.
xtalId();
422 unsigned int MyPn0=pnpair.first;
423 unsigned int MyPn1=pnpair.second;
445 for (
unsigned int i=0;
i< (*digiItr).size() ; ++
i ) {
448 adc[
i]=samp_crystal.adc() ;
449 adcG[
i]=samp_crystal.gainId();
451 if (
i==0) adcgain=adcG[
i];
458 if(k<_presample-1) dsum1+=
adc[
k];
461 bl=dsum/((double)_presample);
464 yrange[
k]=
adc[
k] - bl;
465 if(yrange[k] > val_max) {
466 val_max= yrange[
k]; samplemax=
k;
483 chi2 = pstpfit -> fit_third_degree_polynomial(&yrange[0],
ret_data);
488 if( val_max > 100000. || chi2 < 0. || chi2 == 102 ) {
500 trees[channel]->Fill();
508 EEDetId id_crystal(digiItr->id()) ;
511 phi = id_crystal.ix() ;
512 eta = id_crystal.iy() ;
514 int iX = (
phi-1)/5+1;
515 int iY = (
eta-1)/5+1;
529 if( module>=18 &&
side==1 ) module+=2;
536 unsigned int MyPn0=pnpair.first;
537 unsigned int MyPn1=pnpair.second;
561 assert (channel <
nCrys);
566 for (
unsigned int i=0;
i< (*digiItr).size() ; ++
i ) {
569 adc[
i]=samp_crystal.adc() ;
570 adcG[
i]=samp_crystal.gainId();
572 if (
i==0) adcgain=adcG[
i];
581 if(k<_presample-1) dsum1+=
adc[
k];
584 bl=dsum/((double)_presample);
587 yrange[
k]=
adc[
k] - bl;
588 if(yrange[k] > val_max) {
589 val_max= yrange[
k]; samplemax=
k;
595 if(
side==1) dccMEMIndex+=2;
609 chi2 = pstpfit -> fit_third_degree_polynomial(&yrange[0],
ret_data);
614 if( val_max > 100000. || chi2 < 0. || chi2 == 102 ) {
626 trees[channel]->Fill();
646 std::stringstream del;
648 system(del.str().c_str());
650 std::cout <<
" No TP Events "<< std::endl;
654 std::cout <<
"\n\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+" << std::endl;
655 std::cout <<
"\t+=+ Analyzing test pulse data: getting APD, PN +=+" << std::endl;
664 restrees=
new TTree(
"TPAPD",
"TPAPD");
667 restrees->Branch(
"iphi", &
iphi,
"iphi/I" );
668 restrees->Branch(
"ieta", &
ieta,
"ieta/I" );
669 restrees->Branch(
"dccID", &
dccID,
"dccID/I" );
670 restrees->Branch(
"side", &
side,
"side/I" );
671 restrees->Branch(
"towerID", &
towerID,
"towerID/I" );
672 restrees->Branch(
"channelID", &
channelID,
"channelID/I" );
673 restrees->Branch(
"moduleID", &
moduleID,
"moduleID/I" );
674 restrees->Branch(
"flag", &
flag,
"flag/I" );
675 restrees->Branch(
"gain", &
gain,
"gain/I" );
676 restrees->Branch(
"APD", &
APD,
"APD[6]/D" );
683 restrees->SetBranchAddress(
"iphi", &
iphi );
684 restrees->SetBranchAddress(
"ieta", &
ieta );
685 restrees->SetBranchAddress(
"dccID", &
dccID );
686 restrees->SetBranchAddress(
"side", &
side );
687 restrees->SetBranchAddress(
"towerID", &
towerID );
688 restrees->SetBranchAddress(
"channelID", &
channelID );
689 restrees->SetBranchAddress(
"moduleID", &
moduleID );
690 restrees->SetBranchAddress(
"flag", &
flag );
691 restrees->SetBranchAddress(
"gain", &
gain );
692 restrees->SetBranchAddress(
"APD",
APD );
701 TMom *APDAnal[1700][10];
702 TMom *PNAnal[9][2][10];
705 for (
unsigned int iMod=0;iMod<
nMod;iMod++){
706 for (
unsigned int ich=0;ich<2;ich++){
707 for (
unsigned int ig=0;ig<
nGainPN;ig++){
708 PNAnal[iMod][ich][ig]=
new TMom();
713 for (
unsigned int iCry=0;iCry<
nCrys;iCry++){
715 for(
unsigned int iG=0;iG<
nGainAPD;iG++){
716 APDAnal[iCry][iG]=
new TMom();
723 unsigned int iMod=
iModule[iCry]-1;
728 Long64_t nbytes = 0, nb = 0;
729 for (Long64_t jentry=0; jentry<
trees[iCry]->GetEntriesFast();jentry++) {
730 nb =
trees[iCry]->GetEntry(jentry); nbytes += nb;
745 if (
trees[iCry]->GetEntries()<10){
747 for (
int j=0;j<6;j++){
760 for (
unsigned int ig=0;ig<
nGainAPD;ig++){
779 for (
unsigned int ig=0;ig<
nGainPN;ig++){
780 for (
unsigned int iMod=0;iMod<
nMod;iMod++){
781 for (
int ch=0;ch<2;ch++){
788 PN[1]= PNAnal[iMod][ch][ig]->
getRMS();
789 PN[2]= PNAnal[iMod][ch][ig]->
getM3();
791 PN[4]= PNAnal[iMod][ch][ig]->
getMin();
792 PN[5]= PNAnal[iMod][ch][ig]->
getMax();
806 std::stringstream del;
808 system(del.str().c_str());
817 std::cout <<
"\t+=+ ...................................... done +=+" << std::endl;
818 std::cout <<
"\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+" << std::endl;
std::string eventHeaderProducer_
void addEntry(double val)
static XYCoord localCoord(int icr)
T getParameter(std::string const &) const
std::map< int, int > channelMapEE
T getUntrackedParameter(std::string const &, T const &) const
static int lmmod(SuperCrysCoord iX, SuperCrysCoord iY)
static std::vector< ME::DCCid > memFromDcc(ME::DCCid idcc)
int xtalId() const
get the channel id
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
unsigned int iModule[1700]
void analyze(const edm::Event &e, const edm::EventSetup &c) override
int stripId() const
get the tower id
#define DEFINE_FWK_MODULE(type)
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
std::string digiCollection_
static int side(SuperCrysCoord iX, SuperCrysCoord iY, int iz)
std::vector< EcalDCCHeaderBlock >::const_iterator const_iterator
unsigned int _firstsample
int towerId() const
get the tower id
unsigned int _presamplePN
const_iterator begin() const
std::string digiProducer_
std::string eventHeaderCollection_
EcalTestPulseAnalyzer(const edm::ParameterSet &iConfig)
unsigned int _lastsamplePN
unsigned int _firstsamplePN
static std::pair< int, int > pn(int ilmmod)
int hashedIndex(int ieta, int iphi)
EcalElectronicsId getElectronicsId(const DetId &id) const
Get the electronics id for this det id.
static std::pair< int, int > pn(int dee, int ilmod)
static int electronic_channel(EBLocalCoord ix, EBLocalCoord iy)
std::string digiPNCollection_
int iDCCId() const
get the DCCId
static int lmmod(EBGlobalCoord ieta, EBGlobalCoord iphi)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
unsigned int firstChanMod[9]
const_iterator end() const
~EcalTestPulseAnalyzer() override
static int side(EBGlobalCoord ieta, EBGlobalCoord iphi)
T const * product() const
const_iterator end() const
std::vector< int > dccMEM
EcalLogicID towerID(EcalElectronicsId const &)
unsigned int isFirstChanModFilled[9]
T const * product() const
static std::vector< ME::LMMid > lmmodFromDcc(ME::DCCid idcc)
int channelId() const
so far for EndCap only :
const_iterator begin() const