64 _nsamples( iConfig.getUntrackedParameter< unsigned
int >(
"nSamples", 10 ) ),
65 _presample( iConfig.getUntrackedParameter< unsigned
int >(
"nPresamples", 2 ) ),
66 _firstsample( iConfig.getUntrackedParameter< unsigned
int >(
"firstSample", 1 ) ),
67 _lastsample( iConfig.getUntrackedParameter< unsigned
int >(
"lastSample", 2 ) ),
68 _nsamplesPN( iConfig.getUntrackedParameter< unsigned
int >(
"nSamplesPN", 50 ) ),
69 _presamplePN( iConfig.getUntrackedParameter< unsigned
int >(
"nPresamplesPN", 6 ) ),
70 _firstsamplePN( iConfig.getUntrackedParameter< unsigned
int >(
"firstSamplePN", 7 ) ),
71 _lastsamplePN( iConfig.getUntrackedParameter< unsigned
int >(
"lastSamplePN", 8 ) ),
72 _timingcutlow( iConfig.getUntrackedParameter< unsigned
int >(
"timingCutLow", 2 ) ),
73 _timingcuthigh( iConfig.getUntrackedParameter< unsigned
int >(
"timingCutHigh", 9 ) ),
74 _timingquallow( iConfig.getUntrackedParameter< unsigned
int >(
"timingQualLow", 3 ) ),
75 _timingqualhigh( iConfig.getUntrackedParameter< unsigned
int >(
"timingQualHigh", 8 ) ),
76 _ratiomincutlow( iConfig.getUntrackedParameter< double >(
"ratioMinCutLow", 0.4 ) ),
77 _ratiomincuthigh( iConfig.getUntrackedParameter< double >(
"ratioMinCutHigh", 0.95 ) ),
78 _ratiomaxcutlow( iConfig.getUntrackedParameter< double >(
"ratioMaxCutLow", 0.8 ) ),
79 _presamplecut( iConfig.getUntrackedParameter< double >(
"presampleCut", 5.0 ) ),
80 _niter( iConfig.getUntrackedParameter< unsigned
int >(
"nIter", 3 ) ),
81 _fitab( iConfig.getUntrackedParameter< bool >(
"fitAB",
false ) ),
82 _alpha( iConfig.getUntrackedParameter< double >(
"alpha", 1.5076494 ) ),
83 _beta( iConfig.getUntrackedParameter< double >(
"beta", 1.5136036 ) ),
84 _nevtmax( iConfig.getUntrackedParameter< unsigned
int >(
"nEvtMax", 200 ) ),
85 _noise( iConfig.getUntrackedParameter< double >(
"noise", 2.0 ) ),
86 _chi2cut( iConfig.getUntrackedParameter< double >(
"chi2cut", 10.0 ) ),
87 _ecalPart( iConfig.getUntrackedParameter<
std::
string >(
"ecalPart",
"EB" ) ),
88 _docorpn( iConfig.getUntrackedParameter< bool >(
"doCorPN",
false ) ),
89 _fedid( iConfig.getUntrackedParameter<
int >(
"fedID", -999 ) ),
90 _saveallevents( iConfig.getUntrackedParameter< bool >(
"saveAllEvents",
false ) ),
91 _qualpercent( iConfig.getUntrackedParameter< double >(
"qualPercent", 0.2 ) ),
92 _debug( iConfig.getUntrackedParameter<
int >(
"debug", 0 ) ),
97 runType(-1), runNum(0), fedID(-1), dccID(-1), side(2), lightside(2), iZ(1),
98 phi(-1),
eta(-1),
event(0),
color(-1),pn0(0), pn1(0), apdAmpl(0), apdAmplA(0),
99 apdAmplB(0),apdTime(0),pnAmpl(0),
100 pnID(-1), moduleID(-1), channelIteratorEE(0)
135 for(
unsigned int j=0;j<
nCrys;j++){
147 for(
unsigned int j=0;j<
nMod;j++){
203 ADCfile+=
"/APDSamplesLaser.root";
206 APDfile+=
"/APDPNLaserAllEvents.root";
212 std::stringstream
name;
213 name <<
"ADCTree" <<
i+1;
214 ADCtrees[
i]=
new TTree(name.str().c_str(),name.str().c_str());
252 std::stringstream nameabinitfile;
253 nameabinitfile <<
resdir_ <<
"/ABInit.root";
256 std::stringstream nameabfile;
257 nameabfile << resdir_ <<
"/AB.root";
271 TFile *fAB=0; TTree *ABInit=0;
273 fAB=
new TFile(nameabinitfile.str().c_str());
276 ABInit = (TTree*) fAB->Get(
"ABCol0");
297 std::stringstream nameapdfile;
298 nameapdfile << resdir_ <<
"/APDPN_LASER.root";
320 DCCHeader=pDCCHeader.
product();
322 std::cerr <<
"Error! can't get the product retrieving DCC header" <<
339 std::cerr <<
"Error! can't get the product retrieving EB crystal data " <<
347 std::cerr <<
"Error! can't get the product retrieving EE crystal data " <<
351 std::cout <<
" Wrong ecalPart in cfg file " << std::endl;
372 TheMapping = ecalmapping.
product();
374 std::cerr <<
"Error! can't get the product EcalMappingRcd"<< std::endl;
383 headerItr != DCCHeader->
end(); ++headerItr ) {
387 int fed = headerItr->fedId();
390 runType=headerItr->getRunType();
391 runNum=headerItr->getRunNumber();
392 event=headerItr->getLV1();
394 dccID=headerItr->getDccInTCCCommand();
395 fedID=headerItr->fedId();
413 if(
color<0 )
return;
439 unsigned int samplemax=0;
442 std::map <int, std::vector<double> > allPNAmpl;
443 std::map <int, std::vector<double> > allPNGain;
449 pnItr != PNDigi->
end(); ++pnItr ) {
454 pnDetId.
iPnId()<<
", dccID="<< pnDetId.
iDCCId()<< std::endl;
459 if(!isMemRelevant)
continue;
463 for (
int samId=0; samId < (*pnItr).size() ; samId++ ) {
464 pn[samId]=(*pnItr).sample(samId).adc();
465 pnG[samId]=(*pnItr).sample(samId).gainId();
466 if (samId==0) pnGain=
pnG[samId];
470 if( pnGain!=1 )
std::cout <<
"PN gain different from 1"<< std::endl;
477 chi2pn = pnfit -> doFit(samplemax,&
pnNoPed[0]);
478 if(chi2pn == 101 || chi2pn == 102 || chi2pn == 103)
pnAmpl=0.;
479 else pnAmpl= pnfit -> getAmpl();
492 pnAmpl<<
", PNgain="<< pnGain<<std::endl;
507 digiItr != EBDigi->
end(); ++digiItr ) {
512 EBDetId id_crystal(digiItr->id()) ;
516 int etaG = id_crystal.ieta() ;
517 int phiG = id_crystal.iphi() ;
521 int etaL=LocalCoord.first ;
522 int phiL=LocalCoord.second ;
525 int xtal=elecid_crystal.
xtalId();
528 int tower=elecid_crystal.
towerId();
533 unsigned int MyPn0=pnpair.first;
534 unsigned int MyPn1=pnpair.second;
538 assert( channel <
nCrys );
540 setGeomEB(etaG, phiG, module, tower, strip, xtal, apdRefTT, channel, lmr);
543 " channelID:" <<
channelID<<
" module:"<< module<<
544 " modules:"<<
modules.size()<< std::endl;
551 for (
unsigned int i=0;
i< (*digiItr).size() ; ++
i ) {
554 adc[
i]=samp_crystal.adc() ;
555 adcG[
i]=samp_crystal.gainId();
557 if (
i==0) adcGain=
adcG[
i];
576 if(allPNAmpl[mem0].
size()>MyPn0)
pn0=allPNAmpl[mem0][MyPn0];
578 if(allPNAmpl[mem1].
size()>MyPn1)
pn1=allPNAmpl[mem1][MyPn1];
606 digiItr != EEDigi->
end(); ++digiItr ) {
611 EEDetId id_crystal(digiItr->id()) ;
615 int etaG = id_crystal.iy() ;
616 int phiG = id_crystal.ix() ;
618 int iX = (phiG-1)/5+1;
619 int iY = (etaG-1)/5+1;
621 int tower=elecid_crystal.
towerId();
625 if( module>=18 &&
side==1 ) module+=2;
631 unsigned int MyPn0=pnpair.first;
632 unsigned int MyPn1=pnpair.second;
640 assert ( channel <
nCrys );
642 setGeomEE(etaG, phiG, iX, iY,
iZ, module, tower, ch, apdRefTT, channel, lmr);
646 " channelID:" <<
channelID<<
" module:"<< module<<
647 " modules:"<<
modules.size()<< std::endl;
652 if( (*digiItr).size()>10)
std::cout <<
"SAMPLES SIZE > 10!" << (*digiItr).size()<< std::endl;
656 for (
unsigned int i=0;
i< (*digiItr).size() ; ++
i ) {
659 adc[
i]=samp_crystal.adc() ;
660 adcG[
i]=samp_crystal.gainId();
663 if (
i==0) adcGain=
adcG[
i];
683 if(allPNAmpl[mem0].
size()>MyPn0)
pn0=allPNAmpl[mem0][MyPn0];
685 if(allPNAmpl[mem1].
size()>MyPn1)
pn1=allPNAmpl[mem1][MyPn1];
738 std::cout <<
"\n\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+" << std::endl;
739 std::cout <<
"\t+=+ Analyzing data: getting (alpha, beta) +=+" << std::endl;
740 TFile *fAB=0; TTree *ABInit=0;
745 ABInit = (TTree*) fAB->Get(
"ABCol0");
748 std::cout <<
"\t+=+ .................................... done +=+" << std::endl;
749 std::cout <<
"\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+" << std::endl;
759 std::stringstream del;
761 system(del.str().c_str());
762 std::cout <<
" No Laser Events "<< std::endl;
769 double BadGainEvtPercentage=0.0;
770 double BadTimingEvtPercentage=0.0;
773 int nChanBadTiming=0;
790 double BadGainChanPercentage=double(nChanBadGain)/double(nCrys);
791 double BadTimingChanPercentage=double(nChanBadTiming)/double(nCrys);
799 std::cout <<
"\n\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+" << std::endl;
800 std::cout <<
"\t+=+ Analyzing laser data: getting APD, PN, APD/PN, PN/PN +=+" << std::endl;
803 std::cout <<
"\t+=+ ............................ WARNING! APD GAIN WAS NOT 1 +=+" << std::endl;
805 std::cout <<
"\t+=+ ............................ WARNING! TIMING WAS BAD +=+" << std::endl;
814 std::stringstream
name;
815 name <<
"APDTree" <<
i+1;
817 APDtrees[
i]=
new TTree(name.str().c_str(),name.str().c_str());
823 APDtrees[
i]->Branch(
"iphi", &iphi,
"iphi/I" );
824 APDtrees[
i]->Branch(
"ieta", &ieta,
"ieta/I" );
827 APDtrees[
i]->Branch(
"towerID", &towerID,
"towerID/I" );
828 APDtrees[
i]->Branch(
"channelID", &channelID,
"channelID/I" );
832 APDtrees[
i]->Branch(
"flag", &flag,
"flag/I" );
839 APDtrees[
i]->SetBranchAddress(
"iphi", &iphi );
840 APDtrees[
i]->SetBranchAddress(
"ieta", &ieta );
843 APDtrees[
i]->SetBranchAddress(
"towerID", &towerID );
844 APDtrees[
i]->SetBranchAddress(
"channelID", &channelID );
848 APDtrees[
i]->SetBranchAddress(
"flag", &flag );
856 for (
unsigned int iref=0;iref<
nRefChan;iref++){
857 for (
unsigned int imod=0;imod<
nMod;imod++){
861 std::stringstream nameref;
862 nameref <<
"refAPDTree" <<imod<<
"_"<<iref;
864 RefAPDtrees[iref][jmod]=
new TTree(nameref.str().c_str(),nameref.str().c_str());
880 unsigned int nCol=
colors.size();
885 for (
unsigned int iM=0;iM<
nMod;iM++){
886 unsigned int iMod=
modules[iM]-1;
888 for (
unsigned int ich=0;ich<
nPNPerMod;ich++){
889 for (
unsigned int icol=0;icol<nCol;icol++){
905 for (
unsigned int iCry=0;iCry<
nCrys;iCry++){
906 for (
unsigned int icol=0;icol<nCol;icol++){
913 std::stringstream
cut;
914 cut <<
"color=="<<
colors[icol];
919 unsigned int iMod=
iModule[iCry]-1;
925 Long64_t nbytes = 0, nb = 0;
926 for (Long64_t jentry=0; jentry<
ADCtrees[iCry]->GetEntriesFast();jentry++){
927 nb =
ADCtrees[iCry]->GetEntry(jentry); nbytes += nb;
932 for(
unsigned int i=0;
i<nCol;
i++){
963 chi2 = pslsfit -> doFit(&
adcNoPed[0]);
965 if( chi2 < 0. || chi2 == 102 || chi2 == 101 ) {
970 apdAmpl = pslsfit -> getAmpl();
981 ", apdTime="<<
apdTime<< std::endl;
983 if (pn0<10 && pn1>10) {
985 }
else if (pn1<10 && pn0>10){
987 }
else pnmean=0.5*(
pn0+
pn1);
995 for (
unsigned int ichan=0;ichan<
nPNPerMod;ichan++){
1017 for(
unsigned int ir=0;ir<
nRefChan;ir++){
1036 std::stringstream del;
1038 system(del.str().c_str());
1046 for (
unsigned int iColor=0;iColor<nCol;iColor++){
1048 std::stringstream nametree;
1049 nametree <<
"APDCol"<<
colors[iColor];
1050 std::stringstream nametree2;
1051 nametree2 <<
"PNCol"<<colors[iColor];
1053 restrees[iColor]=
new TTree(nametree.str().c_str(),nametree.str().c_str());
1054 respntrees[iColor]=
new TTree(nametree2.str().c_str(),nametree2.str().c_str());
1056 restrees[iColor]->Branch(
"iphi", &iphi,
"iphi/I" );
1057 restrees[iColor]->Branch(
"ieta", &ieta,
"ieta/I" );
1061 restrees[iColor]->Branch(
"towerID", &towerID,
"towerID/I" );
1062 restrees[iColor]->Branch(
"channelID", &channelID,
"channelID/I" );
1063 restrees[iColor]->Branch(
"APD", &
APD,
"APD[6]/D" );
1064 restrees[iColor]->Branch(
"Time", &
Time,
"Time[6]/D" );
1070 restrees[iColor]->Branch(
"flag", &flag,
"flag/I" );
1072 respntrees[iColor]->Branch(
"side", &
side,
"side/I" );
1073 respntrees[iColor]->Branch(
"moduleID", &
moduleID,
"moduleID/I" );
1074 respntrees[iColor]->Branch(
"pnID", &
pnID,
"pnID/I" );
1075 respntrees[iColor]->Branch(
"PN", &
PN,
"PN[6]/D" );
1076 respntrees[iColor]->Branch(
"PNoPN", &
PNoPN,
"PNoPN[6]/D" );
1077 respntrees[iColor]->Branch(
"PNoPNA", &
PNoPNA,
"PNoPNA[6]/D" );
1078 respntrees[iColor]->Branch(
"PNoPNB", &
PNoPNB,
"PNoPNB[6]/D" );
1080 restrees[iColor]->SetBranchAddress(
"iphi", &iphi );
1081 restrees[iColor]->SetBranchAddress(
"ieta", &ieta );
1085 restrees[iColor]->SetBranchAddress(
"towerID", &towerID );
1086 restrees[iColor]->SetBranchAddress(
"channelID", &channelID );
1094 restrees[iColor]->SetBranchAddress(
"flag", &flag );
1096 respntrees[iColor]->SetBranchAddress(
"side", &
side );
1097 respntrees[iColor]->SetBranchAddress(
"moduleID", &
moduleID );
1098 respntrees[iColor]->SetBranchAddress(
"pnID", &
pnID );
1099 respntrees[iColor]->SetBranchAddress(
"PN",
PN );
1100 respntrees[iColor]->SetBranchAddress(
"PNoPN",
PNoPN );
1101 respntrees[iColor]->SetBranchAddress(
"PNoPNA",
PNoPNA );
1102 respntrees[iColor]->SetBranchAddress(
"PNoPNB",
PNoPNB );
1109 for (
unsigned int iM=0;iM<
nMod;iM++){
1110 unsigned int iMod=
modules[iM]-1;
1112 for (
unsigned int ich=0;ich<
nPNPerMod;ich++){
1113 for (
unsigned int icol=0;icol<nCol;icol++){
1122 for(
unsigned int imod=0;imod<
nMod;imod++){
1134 for (
unsigned int iCry=0;iCry<
nCrys;iCry++){
1136 unsigned int iMod=
iModule[iCry]-1;
1141 for(
unsigned int iCol=0;iCol<nCol;iCol++){
1143 std::vector<double> lowcut;
1144 std::vector<double> highcut;
1149 if(cutMin<0) cutMin=0;
1152 lowcut.push_back(cutMin);
1153 highcut.push_back(cutMax);
1157 lowcut.push_back(cutMin);
1158 highcut.push_back(cutMax);
1174 Long64_t nbytes = 0, nb = 0;
1175 for (Long64_t jentry=0; jentry<
APDtrees[iCry]->GetEntriesFast();jentry++) {
1176 nb =
APDtrees[iCry]->GetEntry(jentry); nbytes += nb;
1179 if (pn0<10 && pn1>10) {
1181 }
else if (pn1<10 && pn0>10){
1183 }
else pnmean=0.5*(
pn0+
pn1);
1188 unsigned int iCol=0;
1189 for(
unsigned int i=0;
i<nCol;
i++){
1200 for (
unsigned int ichan=0;ichan<
nPNPerMod;ichan++){
1208 if (
_debug==1)
std::cout <<
"-- debug test -- Last Loop event:"<<
event<<
" apdAmpl:"<<
apdAmpl<< std::endl;
1212 for (
unsigned int iRef=0;iRef<
nRefChan;iRef++){
1233 for(
unsigned int iColor=0;iColor<nCol;iColor++){
1235 std::vector<double> apdvec =
APDAnal[iCry][iColor]->
getAPD();
1244 for(
unsigned int i=0;
i<apdvec.size();
i++){
1246 APD[
i]=apdvec.at(
i);
1278 for (
unsigned int iM=0;iM<
nMod;iM++){
1279 unsigned int iMod=
modules[iM]-1;
1283 for (
unsigned int ch=0;ch<
nPNPerMod;ch++){
1290 for(
unsigned int iColor=0;iColor<nCol;iColor++){
1292 std::vector<double> pnvec =
PNAnal[iMod][ch][iColor]->
getPN();
1293 std::vector<double> pnopnvec =
PNAnal[iMod][ch][iColor]->
getPNoPN();
1294 std::vector<double> pnopn0vec =
PNAnal[iMod][ch][iColor]->
getPNoPN0();
1295 std::vector<double> pnopn1vec =
PNAnal[iMod][ch][iColor]->
getPNoPN1();
1297 for(
unsigned int i=0;
i<pnvec.size();
i++){
1318 std::stringstream del2;
1320 system(del2.str().c_str());
1334 for (
unsigned int i=0;
i<nCol;
i++){
1341 std::cout <<
"\t+=+ .................................................. done +=+" << std::endl;
1342 std::cout <<
"\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+" << std::endl;
1358 for (
unsigned int iref=0;iref<
nRefChan;iref++){
1381 void EcalLaserAnalyzer::setGeomEE(
int etaG,
int phiG,
int iX,
int iY,
int iZ,
int module,
int tower,
int ch ,
int apdRefTT,
int channel,
int lmr){
1394 for (
unsigned int iref=0;iref<
nRefChan;iref++){
unsigned int _firstsamplePN
void addEntry(double val)
static XYCoord localCoord(int icr)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
static int lmmod(SuperCrysCoord iX, SuperCrysCoord iY)
TAPD * APDAnal[1700][nColor]
void setAPDCut(double, double)
TPN * PNFirstAnal[22][2][nColor]
int xtalId() const
get the channel id
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
std::vector< double > getPN()
EcalLaserAnalyzer(const edm::ParameterSet &iConfig)
static int apdRefTower(int ilmr, int ilmmod)
void addEntry(double, double, double)
std::map< int, unsigned int > apdRefMap[2]
int stripId() const
get the tower id
std::string digiPNCollection_
double getDelta(int, int)
#define DEFINE_FWK_MODULE(type)
std::vector< double > getPNoPN1()
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
static int side(SuperCrysCoord iX, SuperCrysCoord iY, int iz)
void setPNCut(double, double)
void addEntry(double, double, double, double, double, double, double)
double getPNCorrectionFactor(double val0, int gain)
std::vector< EcalDCCHeaderBlock >::const_iterator const_iterator
unsigned int _timingcuthigh
void computeShape(std::string namefile, TTree *)
int towerId() const
get the tower id
double * getAdcWithoutPedestal()
const_iterator begin() const
static int lmr(EBGlobalCoord ieta, EBGlobalCoord iphi)
unsigned int _timingcutlow
TPN * PNAnal[22][2][nColor]
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
unsigned int _timingquallow
std::vector< double > getAPDoPN0()
void setTimeCut(double, double)
TTree * RefAPDtrees[2][22]
static std::pair< int, int > pn(int ilmmod)
void set2DAPDoAPD1Cut(const std::vector< double > &, const std::vector< double > &)
void setAPDoPN0Cut(double, double)
std::vector< double > getPNoPN0()
std::vector< double > getAPDoPN1()
std::string digiProducer_
int iPnId() const
get the PnId
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)
std::vector< double > getAPDoAPD0()
void set2DAPDoAPD0Cut(const std::vector< double > &, const std::vector< double > &)
TAPD * APDFirstAnal[1700][nColor]
static int electronic_channel(EBLocalCoord ix, EBLocalCoord iy)
unsigned int firstChanMod[22]
std::string digiCollection_
unsigned int isFirstChanModFilled[22]
unsigned int _lastsamplePN
std::string eventHeaderProducer_
double * getAdcWithoutPedestal()
static int apdRefTower(int ilmmod)
unsigned int _firstsample
std::string eventHeaderCollection_
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
int iDCCId() const
get the DCCId
static int lmmod(EBGlobalCoord ieta, EBGlobalCoord iphi)
std::vector< double > getAPDoAPD1()
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
std::vector< double > getAPD()
std::map< unsigned int, unsigned int > channelMapEE
unsigned int iModule[1700]
const_iterator end() const
std::string alphainitfile
static int side(EBGlobalCoord ieta, EBGlobalCoord iphi)
T const * product() const
void setGeomEB(int etaG, int phiG, int module, int tower, int strip, int xtal, int apdRefTT, int channel, int lmr)
void setGeomEE(int etaG, int phiG, int iX, int iY, int iZ, int module, int tower, int ch, int apdRefTT, int channel, int lmr)
int IsThereDataADC[1700][nColor]
std::vector< double > getVals(int)
const_iterator end() const
unsigned int _timingqualhigh
std::vector< double > getPNoPN()
static int dee(SuperCrysCoord iX, SuperCrysCoord iY, int iz)
unsigned int nevtAB[1700]
std::vector< double > getAPDoPN()
unsigned int _presamplePN
TTree * respntrees[nColor]
std::vector< double > getTime()
T const * product() const
static std::vector< int > apdRefChannels(ME::LMMid ilmmod, ME::LMRid ilmr)
static std::vector< ME::LMMid > lmmodFromDcc(ME::DCCid idcc)
static int lmr(SuperCrysCoord iX, SuperCrysCoord iY, int iz)
int channelId() const
so far for EndCap only :
const_iterator begin() const
void setAPDoPNCut(double, double)
void setAPDoPN1Cut(double, double)