66 #include "TObjString.h"
76 #include <ext/hash_map>
83 using namespace __gnu_cxx;
84 using __gnu_cxx::hash_map;
128 virtual void algoEndJob ()
override;
132 void algoAnalyzeTheTree();
133 void algoComputeMPVandGain();
136 void getPeakOfLandau(TH1* InputHisto,
double* FitResults,
double LowRange=50,
double HighRange=5400);
137 bool IsGoodLandauFit(
double* FitResults);
139 void MakeCalibrationMap();
140 bool produceTagFilter();
206 template <
class T>
bool operator () (
const T& PseudoDetId1,
const T& PseudoDetId2) {
return PseudoDetId1==PseudoDetId2; }
210 __gnu_cxx::hash_map<unsigned int, stAPVGain*, __gnu_cxx::hash<unsigned int>,
isEqual >
APVsColl;
214 if(A->GetNbinsX() == B->GetNbinsX()){
217 for(
int x=0;
x<=B->GetNbinsX()+1;
x++){
218 for(
int y=0;y<=B->GetNbinsY()+1; y++){
219 A->SetBinContent(
x,y,A->GetBinContent(
x,y)+B->GetBinContent(
x,y));
271 dbe->setCurrentFolder(
"AlCaReco/SiStripGains/");
274 Charge_Vs_Index =
dbe->book2D(
"Charge_Vs_Index" ,
"Charge_Vs_Index" , 88625, 0 , 88624,2000,0,4000);
289 auto const &
Det = tkGeom->dets();
293 unsigned int Index=0;
294 for(
unsigned int i=0;
i<
Det.size();
i++){
302 if(!DetUnit)
continue;
305 unsigned int NAPV = Topo.
nstrips()/128;
307 for(
unsigned int j=0;
j<NAPV;
j++){
323 APV->
x = DetUnit->position().basicVector().x();
324 APV->
y = DetUnit->position().basicVector().y();
325 APV->
z = DetUnit->position().basicVector().z();
326 APV->
Eta = DetUnit->position().basicVector().eta();
327 APV->
Phi = DetUnit->position().basicVector().phi();
328 APV->
R = DetUnit->position().basicVector().transverse();
329 APV->
Thickness = DetUnit->surface().bounds().thickness();
341 for(
unsigned int i=0;
i<
Det.size();
i++){
346 if(!DetUnit)
continue;
349 unsigned int NROCRow = Topo.
nrows()/(80.);
350 unsigned int NROCCol = Topo.
ncolumns()/(52.);
352 for(
unsigned int j=0;
j<NROCRow;
j++){
353 for(
unsigned int i=0;
i<NROCCol;
i++){
368 APV->
x = DetUnit->position().basicVector().x();
369 APV->
y = DetUnit->position().basicVector().y();
370 APV->
z = DetUnit->position().basicVector().z();
371 APV->
Eta = DetUnit->position().basicVector().eta();
372 APV->
Phi = DetUnit->position().basicVector().phi();
373 APV->
R = DetUnit->position().basicVector().transverse();
374 APV->
Thickness = DetUnit->surface().bounds().thickness();
416 if(gainHandle->getNumberOfTags()!=2){
edm::LogError(
"SiStripGainFromCalibTree")<<
"NUMBER OF GAIN TAG IS EXPECTED TO BE 2\n";fflush(stdout);
exit(0);};
417 float newPreviousGain = gainHandle->getApvGain(APV->
APVId,gainHandle->getRange(APV->
DetId, 1),1);
421 float newPreviousGainTick = gainHandle->getApvGain(APV->
APVId,gainHandle->getRange(APV->
DetId, 0),1);
495 FitResults[0] = -0.5;
497 FitResults[2] = -0.5;
499 FitResults[4] = -0.5;
505 TF1* MyLandau =
new TF1(
"MyLandau",
"landau",LowRange, HighRange);
506 MyLandau->SetParameter(1,300);
507 InputHisto->Fit(MyLandau,
"0QR WW");
510 FitResults[0] = MyLandau->GetParameter(1);
511 FitResults[1] = MyLandau->GetParError(1);
512 FitResults[2] = MyLandau->GetParameter(2);
513 FitResults[3] = MyLandau->GetParError(2);
514 FitResults[4] = MyLandau->GetChisquare() / MyLandau->GetNDF();
515 FitResults[5] = MyLandau->GetParameter(0);
521 if(FitResults[0] <= 0 )
return false;
531 printf(
"Openning file %3i/%3i --> %s\n",
i+1, (
int)
VInputFiles.size(), (
char*)(
VInputFiles[
i].c_str())); fflush(stdout);
532 TChain*
tree =
new TChain(
"gainCalibrationTree/tree");
535 TString EventPrefix(
"");
536 TString EventSuffix(
"");
538 TString TrackPrefix(
"track");
539 TString TrackSuffix(
"");
541 TString CalibPrefix(
"GainCalibration");
542 TString CalibSuffix(
"");
544 unsigned int eventnumber = 0; tree->SetBranchAddress(EventPrefix +
"event" + EventSuffix, &eventnumber ,
NULL);
545 unsigned int runnumber = 0; tree->SetBranchAddress(EventPrefix +
"run" + EventSuffix, &runnumber ,
NULL);
546 std::vector<bool>* TrigTech = 0; tree->SetBranchAddress(EventPrefix +
"TrigTech" + EventSuffix, &TrigTech ,
NULL);
548 std::vector<double>* trackchi2ndof = 0; tree->SetBranchAddress(TrackPrefix +
"chi2ndof" + TrackSuffix, &trackchi2ndof ,
NULL);
549 std::vector<float>* trackp = 0; tree->SetBranchAddress(TrackPrefix +
"momentum" + TrackSuffix, &trackp ,
NULL);
550 std::vector<float>* trackpt = 0; tree->SetBranchAddress(TrackPrefix +
"pt" + TrackSuffix, &trackpt ,
NULL);
551 std::vector<double>* tracketa = 0; tree->SetBranchAddress(TrackPrefix +
"eta" + TrackSuffix, &tracketa ,
NULL);
552 std::vector<double>* trackphi = 0; tree->SetBranchAddress(TrackPrefix +
"phi" + TrackSuffix, &trackphi ,
NULL);
553 std::vector<unsigned int>* trackhitsvalid = 0; tree->SetBranchAddress(TrackPrefix +
"hitsvalid" + TrackSuffix, &trackhitsvalid,
NULL);
555 std::vector<int>* trackindex = 0; tree->SetBranchAddress(CalibPrefix +
"trackindex" + CalibSuffix, &trackindex ,
NULL);
556 std::vector<unsigned int>* rawid = 0; tree->SetBranchAddress(CalibPrefix +
"rawid" + CalibSuffix, &rawid ,
NULL);
557 std::vector<float>* localdirx = 0; tree->SetBranchAddress(CalibPrefix +
"localdirx" + CalibSuffix, &localdirx ,
NULL);
558 std::vector<float>* localdiry = 0; tree->SetBranchAddress(CalibPrefix +
"localdiry" + CalibSuffix, &localdiry ,
NULL);
559 std::vector<float>* localdirz = 0; tree->SetBranchAddress(CalibPrefix +
"localdirz" + CalibSuffix, &localdirz ,
NULL);
560 std::vector<unsigned short>* firststrip = 0; tree->SetBranchAddress(CalibPrefix +
"firststrip" + CalibSuffix, &firststrip ,
NULL);
561 std::vector<unsigned short>* nstrips = 0; tree->SetBranchAddress(CalibPrefix +
"nstrips" + CalibSuffix, &nstrips ,
NULL);
562 std::vector<bool>* saturation = 0; tree->SetBranchAddress(CalibPrefix +
"saturation" + CalibSuffix, &saturation ,
NULL);
563 std::vector<bool>* overlapping = 0; tree->SetBranchAddress(CalibPrefix +
"overlapping" + CalibSuffix, &overlapping ,
NULL);
564 std::vector<bool>* farfromedge = 0; tree->SetBranchAddress(CalibPrefix +
"farfromedge" + CalibSuffix, &farfromedge ,
NULL);
565 std::vector<unsigned int>*
charge = 0; tree->SetBranchAddress(CalibPrefix +
"charge" + CalibSuffix, &charge ,
NULL);
566 std::vector<float>*
path = 0; tree->SetBranchAddress(CalibPrefix +
"path" + CalibSuffix, &path ,
NULL);
567 std::vector<float>* chargeoverpath = 0; tree->SetBranchAddress(CalibPrefix +
"chargeoverpath" + CalibSuffix, &chargeoverpath,
NULL);
568 std::vector<unsigned char>* amplitude = 0; tree->SetBranchAddress(CalibPrefix +
"amplitude" + CalibSuffix, &litude ,
NULL);
569 std::vector<double>* gainused = 0; tree->SetBranchAddress(CalibPrefix +
"gainused" + CalibSuffix, &gainused ,
NULL);
572 printf(
"Number of Events = %i + %i = %i\n",
NEvent,(
unsigned int)tree->GetEntries(),(
unsigned int)(
NEvent+tree->GetEntries()));
573 printf(
"Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n");
574 printf(
"Looping on the Tree :");
575 int TreeStep = tree->GetEntries()/50;
if(TreeStep<=1)TreeStep=1;
576 for (
unsigned int ientry = 0; ientry < tree->GetEntries(); ientry++) {
577 if(ientry%TreeStep==0){printf(
".");fflush(stdout);}
578 tree->GetEntry(ientry);
586 unsigned int FirstAmplitude=0;
587 for(
unsigned int i=0;
i<(*chargeoverpath).size();
i++){
588 FirstAmplitude+=(*nstrips)[
i];
589 int TI = (*trackindex)[
i];
600 if(APV->
SubDet>2 && (*farfromedge)[
i] ==
false )
continue;
601 if(APV->
SubDet>2 && (*overlapping)[
i] ==
true )
continue;
621 bool Saturation =
false;
622 for(
unsigned int s=0;
s<(*nstrips)[
i];
s++){
623 int StripCharge = (*amplitude)[FirstAmplitude-(*nstrips)[
i]+
s];
627 if(StripCharge>1024){
630 }
else if(StripCharge>254){
634 Charge += StripCharge;
638 Charge = (*charge)[
i];
640 Charge = (*charge)[
i]/265.0;
645 double ClusterChargeOverPath = ( (double) Charge )/(*path)[
i] ;
647 if(
Validation) {ClusterChargeOverPath/=(*gainused)[
i];}
664 }
else if(APV->
Eta>0){
682 double FitResults[6];
683 double MPVmean = 300;
688 printf(
"Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n");
689 printf(
"Fitting Charge Distribution :");
692 if(I%TreeStep==0){printf(
".");fflush(stdout);}
694 if(APV->
Bin<0) APV->
Bin = chvsidx->GetXaxis()->FindBin(APV->
Index);
698 Proj = (TH1F*)(chvsidx->ProjectionY(
"",chvsidx->GetXaxis()->FindBin(APV->
Index),chvsidx->GetXaxis()->FindBin(APV->
Index),
"e"));
703 int SecondAPVId = APV->
APVId;
704 if(SecondAPVId%2==0){ SecondAPVId = SecondAPVId+1; }
else{ SecondAPVId = SecondAPVId-1; }
706 if(APV2->
Bin<0) APV2->
Bin = chvsidx->GetXaxis()->FindBin(APV2->
Index);
707 TH1F* Proj2 = (TH1F*)(chvsidx->ProjectionY(
"",APV2->
Bin,APV2->
Bin,
"e"));
708 if(Proj2){Proj->Add(Proj2,1);
delete Proj2;}
710 for(
unsigned int i=0;
i<16;
i++){
711 __gnu_cxx::hash_map<unsigned int, stAPVGain*, __gnu_cxx::hash<unsigned int>,
isEqual >::iterator tmpit;
716 if(APV2->
Bin<0) APV2->
Bin = chvsidx->GetXaxis()->FindBin(APV2->
Index);
717 TH1F* Proj2 = (TH1F*)(chvsidx->ProjectionY(
"",APV2->
Bin,APV2->
Bin,
"e"));
718 if(Proj2){Proj->Add(Proj2,1);
delete Proj2;}
726 APV->
FitMPV = FitResults[0];
751 unsigned int tree_Index;
752 unsigned int tree_Bin;
753 unsigned int tree_DetId;
754 unsigned char tree_APVId;
755 unsigned char tree_SubDet;
762 float tree_Thickness;
764 float tree_FitMPVErr;
766 float tree_FitWidthErr;
767 float tree_FitChi2NDF;
770 double tree_PrevGain;
771 double tree_PrevGainTick;
772 double tree_NEntries;
776 MyTree = tfs->
make<TTree> (
"APVGain",
"APVGain");
777 MyTree->Branch(
"Index" ,&tree_Index ,
"Index/i");
778 MyTree->Branch(
"Bin" ,&tree_Bin ,
"Bin/i");
779 MyTree->Branch(
"DetId" ,&tree_DetId ,
"DetId/i");
780 MyTree->Branch(
"APVId" ,&tree_APVId ,
"APVId/b");
781 MyTree->Branch(
"SubDet" ,&tree_SubDet ,
"SubDet/b");
782 MyTree->Branch(
"x" ,&tree_x ,
"x/F");
783 MyTree->Branch(
"y" ,&tree_y ,
"y/F");
784 MyTree->Branch(
"z" ,&tree_z ,
"z/F");
785 MyTree->Branch(
"Eta" ,&tree_Eta ,
"Eta/F");
786 MyTree->Branch(
"R" ,&tree_R ,
"R/F");
787 MyTree->Branch(
"Phi" ,&tree_Phi ,
"Phi/F");
788 MyTree->Branch(
"Thickness" ,&tree_Thickness ,
"Thickness/F");
789 MyTree->Branch(
"FitMPV" ,&tree_FitMPV ,
"FitMPV/F");
790 MyTree->Branch(
"FitMPVErr" ,&tree_FitMPVErr ,
"FitMPVErr/F");
791 MyTree->Branch(
"FitWidth" ,&tree_FitWidth ,
"FitWidth/F");
792 MyTree->Branch(
"FitWidthErr" ,&tree_FitWidthErr,
"FitWidthErr/F");
793 MyTree->Branch(
"FitChi2NDF" ,&tree_FitChi2NDF ,
"FitChi2NDF/F");
794 MyTree->Branch(
"FitNorm" ,&tree_FitNorm ,
"FitNorm/F");
795 MyTree->Branch(
"Gain" ,&tree_Gain ,
"Gain/D");
796 MyTree->Branch(
"PrevGain" ,&tree_PrevGain ,
"PrevGain/D");
797 MyTree->Branch(
"PrevGainTick" ,&tree_PrevGainTick,
"PrevGainTick/D");
798 MyTree->Branch(
"NEntries" ,&tree_NEntries ,
"NEntries/D");
799 MyTree->Branch(
"isMasked" ,&tree_isMasked ,
"isMasked/O");
802 FILE* Gains = stdout;
803 fprintf(Gains,
"NEvents = %i\n",
NEvent);
804 fprintf(Gains,
"NTracks = %i\n",
NTrack);
807 fprintf(Gains,
"Number of Pixel Dets = %lu\n",static_cast<unsigned long>(
NPixelDets));
808 fprintf(Gains,
"Number of Strip APVs = %lu\n",static_cast<unsigned long>(
NStripAPVs));
812 fprintf(Gains,
"NEvents = %i\n",
NEvent);
813 fprintf(Gains,
"NTracks = %i\n",
NTrack);
816 fprintf(Gains,
"Number of Strip APVs = %lu\n",static_cast<unsigned long>(
NStripAPVs));
817 fprintf(Gains,
"Number of Pixel Dets = %lu\n",static_cast<unsigned long>(
NPixelDets));
822 if(APV==
NULL)
continue;
826 tree_Index = APV->
Index;
828 tree_DetId = APV->
DetId;
829 tree_APVId = APV->
APVId;
830 tree_SubDet = APV->
SubDet;
838 tree_FitMPV = APV->
FitMPV;
842 tree_FitChi2NDF = APV->
FitChi2;
844 tree_Gain = APV->
Gain;
851 if(tree_DetId==402673324){
852 printf(
"%i | %i : %f --> %f (%f)\n", tree_DetId, tree_APVId, tree_PrevGain, tree_Gain, tree_NEntries);
858 if(Gains)fclose(Gains);
871 edm::LogWarning(
"SiStripGainFromCalibTree")<<
"produceTagFilter -> Return false: ratio of GOOD/TOTAL is too low: " << (1.0 *
GOOD) / (
GOOD+
BAD) << endl;
883 edm::LogWarning(
"SiStripGainFromCalibTree")<<
"getNewObject -> will not produce a paylaod because produceTagFilter returned false " << endl;
889 std::vector<float>* theSiStripVector =
NULL;
890 unsigned int PreviousDetId = 0;
893 if(APV==
NULL){ printf(
"Bug\n");
continue; }
894 if(APV->
SubDet<=2)
continue;
895 if(APV->
DetId != PreviousDetId){
896 if(theSiStripVector!=
NULL){
898 if ( !obj->
put(PreviousDetId,range) ) printf(
"Bug to put detId = %i\n",PreviousDetId);
900 theSiStripVector =
new std::vector<float>;
901 PreviousDetId = APV->
DetId;
903 theSiStripVector->push_back(APV->
Gain);
905 if(theSiStripVector!=
NULL){
907 if ( !obj->
put(PreviousDetId,range) ) printf(
"Bug to put detId = %i\n",PreviousDetId);
921 TChain* t1 =
new TChain(
"SiStripCalib/APVGain");
924 unsigned int tree_DetId;
925 unsigned char tree_APVId;
928 t1->SetBranchAddress(
"DetId" ,&tree_DetId );
929 t1->SetBranchAddress(
"APVId" ,&tree_APVId );
930 t1->SetBranchAddress(
"Gain" ,&tree_Gain );
932 for (
unsigned int ientry = 0; ientry < t1->GetEntries(); ientry++) {
933 t1->GetEntry(ientry);
960 const Trajectory* traj = association->key.get();
972 vector<TrajectoryMeasurement> measurements = traj->
measurements();
973 for(vector<TrajectoryMeasurement>::const_iterator measurement_it = measurements.begin(); measurement_it!=measurements.end(); measurement_it++){
975 if( !trajState.
isValid() )
continue;
987 for(
unsigned int h=0;
h<2;
h++){
988 if(!sistripmatchedhit &&
h==1){
990 }
else if(sistripmatchedhit &&
h==0){
992 DetId = sistripmatchedhit->
monoId();
993 }
else if(sistripmatchedhit &&
h==1){
995 DetId = sistripmatchedhit->
stereoId();
996 }
else if(sistripsimplehit){
997 StripCluster = (sistripsimplehit->
cluster()).
get();
999 }
else if(sistripsimple1dhit){
1000 StripCluster = (sistripsimple1dhit->
cluster()).
get();
1002 }
else if(sipixelhit &&
h==0){
1003 PixelCluster = (sipixelhit->
cluster()).
get();
1010 double cosine = trackDirection.
z()/trackDirection.
mag();
1012 bool Saturation =
false;
1013 bool Overlapping =
false;
1015 double PrevGain = 1;
1023 const auto& Ampls = StripCluster->
amplitudes();
1025 APVId = FirstStrip/128;
1026 APV =
APVsColl[(DetId<<4) | (FirstStrip/128)];
1027 Path = (10.0*APV->
Thickness)/fabs(cosine);
1032 PrevGain = *(detGainRange.first + APVId);
1035 for(
unsigned int a=0;
a<Ampls.size();
a++){
1037 if(Ampls[
a] >=254)Saturation =
true;
1040 if(FirstStrip==0 )Overlapping=
true;
1041 if(FirstStrip==128 )Overlapping=
true;
1042 if(FirstStrip==256 )Overlapping=
true;
1043 if(FirstStrip==384 )Overlapping=
true;
1044 if(FirstStrip==512 )Overlapping=
true;
1045 if(FirstStrip==640 )Overlapping=
true;
1047 if(FirstStrip<=127 && FirstStrip+Ampls.size()>127)Overlapping=
true;
1048 if(FirstStrip<=255 && FirstStrip+Ampls.size()>255)Overlapping=
true;
1049 if(FirstStrip<=383 && FirstStrip+Ampls.size()>383)Overlapping=
true;
1050 if(FirstStrip<=511 && FirstStrip+Ampls.size()>511)Overlapping=
true;
1051 if(FirstStrip<=639 && FirstStrip+Ampls.size()>639)Overlapping=
true;
1053 if(FirstStrip+Ampls.size()==127 )Overlapping=
true;
1054 if(FirstStrip+Ampls.size()==255 )Overlapping=
true;
1055 if(FirstStrip+Ampls.size()==383 )Overlapping=
true;
1056 if(FirstStrip+Ampls.size()==511 )Overlapping=
true;
1057 if(FirstStrip+Ampls.size()==639 )Overlapping=
true;
1058 if(FirstStrip+Ampls.size()==767 )Overlapping=
true;
1062 if(Overlapping ==
true )
continue;
1068 bool Saturation =
false;
1070 for(
unsigned int s=0;
s<Ampls.size();
s++){
1071 int StripCharge = Ampls[
s];
1075 if(StripCharge>1024){
1078 }
else if(StripCharge>254){
1082 charge += StripCharge;
1086 }
else if(PixelCluster){
1087 const auto& Ampls = PixelCluster->
pixelADC();
1090 APVId = ((FirstRow/80)<<3 | (FirstCol/52));
1091 APV =
APVsColl[(DetId<<4) | APVId];
1092 Path = (10.0*APV->
Thickness)/fabs(cosine);
1094 for(
unsigned int a=0;
a<Ampls.size();
a++){
1096 if(Ampls[
a] >=254)Saturation =
true;
1103 double ClusterChargeOverPath = ( (double) charge )/
Path ;
1104 if(
Validation) {ClusterChargeOverPath/=PrevGain;}
1121 }
else if(APV->
Eta>0){
1143 if (dynamic_cast<const StripGeomDetUnit*>(it)==0 && dynamic_cast<const PixelGeomDetUnit*>(it)==0) {
1144 edm::LogWarning(
"SiStripGainFromCalibTree")<<
"this detID doesn't seem to belong to the Tracker" << std::endl;
1149 const TrapezoidalPlaneBounds* trapezoidalBounds( dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
1150 const RectangularPlaneBounds* rectangularBounds( dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
1152 double DistFromBorder = 1.0;
1155 if(trapezoidalBounds)
1157 std::array<const float, 4>
const &
parameters = (*trapezoidalBounds).parameters();
1159 HalfLength = parameters[3];
1160 }
else if(rectangularBounds){
1162 }
else{
return false;}
1164 if (fabs(HitLocalPos.
y())+HitLocalError.
yy() >= (HalfLength - DistFromBorder) )
return false;
ClusterRef cluster() const
double p() const
momentum vector magnitude
T getParameter(std::string const &) const
virtual int nstrips() const =0
T getUntrackedParameter(std::string const &, T const &) const
unsigned int MinTrackHits
unsigned int stereoId() const
MonitorElement * Charge_Vs_PathlengthTIB
virtual float length() const =0
edm::InputTag theTracksLabel
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
SiStripApvGain * getNewObject() override
friend struct const_iterator
virtual int ncolumns() const =0
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual void algoBeginRun(const edm::Run &run, const edm::EventSetup &iSetup) override
~SiStripGainFromCalibTree()
#define DEFINE_FWK_MODULE(type)
SiStripCluster const & monoCluster() const
LocalVector localDirection() const
LocalPoint localPosition() const
MonitorElement * Charge_Vs_PathlengthTECM2
unsigned int NClusterPixel
virtual void algoEndRun(const edm::Run &run, const edm::EventSetup &iSetup) override
double tagCondition_GoodFrac
SiStripGainFromCalibTree(const edm::ParameterSet &)
virtual int nrows() const =0
MonitorElement * Charge_Vs_PathlengthTOB
const Bounds & bounds() const
void storeOnTree(TFileService *tfs)
T * make(const Args &...args) const
make new ROOT object
uint16_t firstStrip() const
const Plane & surface() const
The nominal surface of the GeomDet.
LocalError positionError() const
void MakeCalibrationMap()
double MaxTrackChiOverNdf
bool put(const uint32_t &detID, Range input)
uint32_t rawId() const
get the raw id
T x() const
Cartesian x coordinate.
std::vector< stAPVGain * > APVsCollOrdered
DataContainer const & measurements() const
__gnu_cxx::hash_map< unsigned int, stAPVGain *, __gnu_cxx::hash< unsigned int >, isEqual > APVsColl
MonitorElement * Charge_Vs_PathlengthTECM1
void algoComputeMPVandGain()
MonitorElement * Charge_Vs_PathlengthTECP2
MonitorElement * Charge_Vs_PathlengthTECP1
double eta() const
pseudorapidity of momentum vector
double chi2() const
chi-squared of the fit
bool IsGoodLandauFit(double *FitResults)
double ndof() const
number of degrees of freedom of the fit
MonitorElement * Charge_Vs_Index_Absolute
edm::EDGetTokenT< edm::View< reco::Track > > tracksToken
virtual void algoBeginJob(const edm::EventSetup &iSetup) override
std::pair< ContainerIterator, ContainerIterator > Range
edm::EDGetTokenT< TrajTrackAssociationCollection > associationsToken
const std::complex< double > I
ClusterRef cluster() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
unsigned short numberOfValidHits() const
number of valid hits found
const LocalTrajectoryError & localError() const
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
const std::vector< uint16_t > & pixelADC() const
vector< string > VInputFiles
virtual void algoEndJob() override
virtual void algoAnalyze(const edm::Event &, const edm::EventSetup &) override
bool IsFarFromBorder(TrajectoryStateOnSurface *trajState, const uint32_t detid, const edm::EventSetup *iSetup)
MonitorElement * Charge_Vs_PathlengthTIDM
bool merge(LuminosityBlockRange &lh, LuminosityBlockRange &rh)
void getPeakOfLandau(TH1 *InputHisto, double *FitResults, double LowRange=50, double HighRange=5400)
ClusterRef cluster() const
void algoAnalyzeTheTree()
void setDoStore(const bool doStore)
When set to false the payload will not be written to the db.
SiStripCluster const & stereoCluster() const
Pixel cluster – collection of neighboring pixels above threshold.
MonitorElement * Charge_Vs_Index
TH2F * getTH2F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
double tagCondition_NClusters
unsigned int monoId() const
DetId geographicalId() const
volatile std::atomic< bool > shutdown_flag false
TH2F * getTH2F(void) const
MonitorElement * Charge_Vs_PathlengthTIDP
const std::vector< uint8_t > & amplitudes() const
unsigned int NClusterStrip
void merge(TH2 *A, TH2 *B)