00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020 #include "CaloOnlineTools/EcalTools/plugins/EcalPulseShapeGrapher.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 EcalPulseShapeGrapher::EcalPulseShapeGrapher(const edm::ParameterSet& iConfig) :
00034 EBUncalibratedRecHitCollection_ (iConfig.getParameter<edm::InputTag>("EBUncalibratedRecHitCollection")),
00035 EBDigis_ (iConfig.getParameter<edm::InputTag>("EBDigiCollection")),
00036 EEUncalibratedRecHitCollection_ (iConfig.getParameter<edm::InputTag>("EEUncalibratedRecHitCollection")),
00037 EEDigis_ (iConfig.getParameter<edm::InputTag>("EEDigiCollection")),
00038 ampCut_ (iConfig.getUntrackedParameter<int>("AmplitudeCutADC", 13)),
00039 rootFilename_ (iConfig.getUntrackedParameter<std::string>("rootFilename","pulseShapeGrapher"))
00040 {
00041
00042
00043 std::vector<int> listDefaults;
00044 listDefaults.push_back(-1);
00045 listChannels_ = iConfig.getUntrackedParameter<std::vector<int> >("listChannels", listDefaults);
00046
00047 for(std::vector<int>::const_iterator itr = listChannels_.begin(); itr != listChannels_.end(); ++itr)
00048 {
00049 std::string title = "Amplitude of cry "+intToString(*itr);
00050 std::string name = "ampOfCry"+intToString(*itr);
00051 ampHistMap_[*itr] = new TH1F(name.c_str(),title.c_str(),100,0,100);
00052 ampHistMap_[*itr]->GetXaxis()->SetTitle("ADC");
00053
00054 title = "Amplitude (over 13 ADC) of cry "+intToString(*itr);
00055 name = "cutAmpOfCry"+intToString(*itr);
00056 cutAmpHistMap_[*itr] = new TH1F(name.c_str(),title.c_str(),100,0,100);
00057 cutAmpHistMap_[*itr]->GetXaxis()->SetTitle("ADC");
00058
00059 title = "Pulse shape of cry "+intToString(*itr);
00060 name = "PulseShapeCry"+intToString(*itr);
00061 pulseShapeHistMap_[*itr] = new TH2F(name.c_str(),title.c_str(),10,0,10,220,-20,2);
00062 pulseShapeHistMap_[*itr]->GetXaxis()->SetTitle("sample");
00063
00064 title = "Raw Pulse shape of cry "+intToString(*itr);
00065 name = "RawPulseShapeCry"+intToString(*itr);
00066 rawPulseShapeHistMap_[*itr] = new TH2F(name.c_str(),title.c_str(),10,0,10,500,0,500);
00067 rawPulseShapeHistMap_[*itr]->GetXaxis()->SetTitle("sample");
00068
00069 title = "Amplitude of first sample, cry "+intToString(*itr);
00070 name = "AmpOfFirstSampleCry"+intToString(*itr);
00071 firstSampleHistMap_[*itr] = new TH1F(name.c_str(),title.c_str(),300,100,400);
00072 firstSampleHistMap_[*itr]->GetXaxis()->SetTitle("ADC");
00073 }
00074
00075 fedMap_ = new EcalFedMap();
00076
00077 for (int i=0; i<10; i++)
00078 abscissa[i] = i;
00079 }
00080
00081
00082 EcalPulseShapeGrapher::~EcalPulseShapeGrapher()
00083 {
00084
00085
00086
00087
00088 }
00089
00090
00091
00092
00093
00094
00095
00096 void
00097 EcalPulseShapeGrapher::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00098 {
00099 using namespace edm;
00100 using namespace std;
00101
00102 int numHitsWithActivity = 0;
00103
00104
00105
00106
00107 Handle<EcalUncalibratedRecHitCollection> EBHits;
00108 iEvent.getByLabel(EBUncalibratedRecHitCollection_, EBHits);
00109 Handle<EcalUncalibratedRecHitCollection> EEHits;
00110 iEvent.getByLabel(EEUncalibratedRecHitCollection_, EEHits);
00111
00112
00113
00114 Handle<EBDigiCollection> EBdigis;
00115 iEvent.getByLabel(EBDigis_, EBdigis);
00116 Handle<EEDigiCollection> EEdigis;
00117 iEvent.getByLabel(EEDigis_, EEdigis);
00118
00119
00120 auto_ptr<EcalElectronicsMapping> ecalElectronicsMap(new EcalElectronicsMapping);
00121
00122
00123 for(EcalUncalibratedRecHitCollection::const_iterator hitItr = EBHits->begin(); hitItr != EBHits->end(); ++hitItr)
00124 {
00125 EcalUncalibratedRecHit hit = (*hitItr);
00126 float amplitude = hit.amplitude();
00127 EBDetId hitDetId = hit.id();
00128
00129
00130 EcalElectronicsId elecId = ecalElectronicsMap->getElectronicsId(hitDetId);
00131 int FEDid = 600+elecId.dccId();
00132 string SMname = fedMap_->getSliceFromFed(FEDid);
00133
00134 vector<int>::const_iterator itr = listChannels_.begin();
00135 while(itr != listChannels_.end() && (*itr) != hitDetId.hashedIndex())
00136 {
00137 itr++;
00138 }
00139 if(itr==listChannels_.end())
00140 continue;
00141
00142 ampHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
00143
00144 if(amplitude < ampCut_)
00145 continue;
00146
00147 cutAmpHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
00148 numHitsWithActivity++;
00149 EBDigiCollection::const_iterator digiItr= EBdigis->begin();
00150 while(digiItr != EBdigis->end() && digiItr->id() != hitItr->id())
00151 {
00152 digiItr++;
00153 }
00154 if(digiItr == EBdigis->end())
00155 continue;
00156
00157 double sampleADC[10];
00158 EBDataFrame df(*digiItr);
00159 double pedestal = 200;
00160
00161 if(df.sample(0).gainId()!=1 || df.sample(1).gainId()!=1) continue;
00162 else {
00163 sampleADC[0] = df.sample(0).adc();
00164 sampleADC[1] = df.sample(1).adc();
00165 pedestal = (double)(sampleADC[0]+sampleADC[1])/(double)2;
00166 }
00167
00168 for (int i=0; (unsigned int)i< digiItr->size(); ++i ) {
00169 EBDataFrame df(*digiItr);
00170 double gain = 12.;
00171 if(df.sample(i).gainId()==1)
00172 gain = 1.;
00173 else if(df.sample(i).gainId()==2)
00174 gain = 2.;
00175 sampleADC[i] = pedestal+(df.sample(i).adc()-pedestal)*gain;
00176 }
00177
00178
00179 for(int i=0; i<10;++i)
00180 {
00181
00182
00183
00184
00185 pulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i]-pedestal)/amplitude);
00186 rawPulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i]));
00187 }
00188 firstSampleHistMap_[hitDetId.hashedIndex()]->Fill(sampleADC[0]);
00189 }
00190
00191
00192 for(EcalUncalibratedRecHitCollection::const_iterator hitItr = EEHits->begin(); hitItr != EEHits->end(); ++hitItr)
00193 {
00194 EcalUncalibratedRecHit hit = (*hitItr);
00195 float amplitude = hit.amplitude();
00196 EEDetId hitDetId = hit.id();
00197
00198
00199 EcalElectronicsId elecId = ecalElectronicsMap->getElectronicsId(hitDetId);
00200 int FEDid = 600+elecId.dccId();
00201 string SMname = fedMap_->getSliceFromFed(FEDid);
00202
00203 vector<int>::const_iterator itr = listChannels_.begin();
00204 while(itr != listChannels_.end() && (*itr) != hitDetId.hashedIndex())
00205 {
00206 itr++;
00207 }
00208 if(itr==listChannels_.end())
00209 continue;
00210
00211 ampHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
00212
00213 if(amplitude < ampCut_)
00214 continue;
00215
00216 cutAmpHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
00217 numHitsWithActivity++;
00218 EEDigiCollection::const_iterator digiItr= EEdigis->begin();
00219 while(digiItr != EEdigis->end() && digiItr->id() != hitItr->id())
00220 {
00221 digiItr++;
00222 }
00223 if(digiItr == EEdigis->end())
00224 continue;
00225
00226 double sampleADC[10];
00227 EEDataFrame df(*digiItr);
00228 double pedestal = 200;
00229
00230 if(df.sample(0).gainId()!=1 || df.sample(1).gainId()!=1) continue;
00231 else {
00232 sampleADC[0] = df.sample(0).adc();
00233 sampleADC[1] = df.sample(1).adc();
00234 pedestal = (double)(sampleADC[0]+sampleADC[1])/(double)2;
00235 }
00236
00237 for (int i=0; (unsigned int)i< digiItr->size(); ++i ) {
00238 EEDataFrame df(*digiItr);
00239 double gain = 12.;
00240 if(df.sample(i).gainId()==1)
00241 gain = 1.;
00242 else if(df.sample(i).gainId()==2)
00243 gain = 2.;
00244 sampleADC[i] = pedestal+(df.sample(i).adc()-pedestal)*gain;
00245 }
00246
00247
00248 for(int i=0; i<10;++i)
00249 {
00250
00251
00252
00253
00254 pulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i]-pedestal)/amplitude);
00255 rawPulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i]));
00256 }
00257 firstSampleHistMap_[hitDetId.hashedIndex()]->Fill(sampleADC[0]);
00258 }
00259 }
00260
00261
00262
00263 void
00264 EcalPulseShapeGrapher::endJob() {
00265
00266 rootFilename_+=".root";
00267 file_ = new TFile(rootFilename_.c_str(),"RECREATE");
00268 TH1::AddDirectory(false);
00269
00270 for(std::vector<int>::const_iterator itr = listChannels_.begin(); itr != listChannels_.end(); ++itr)
00271 {
00272 ampHistMap_[*itr]->Write();
00273 cutAmpHistMap_[*itr]->Write();
00274 firstSampleHistMap_[*itr]->Write();
00275
00276 rawPulseShapeHistMap_[*itr]->Write();
00277 TProfile* t2 = (TProfile*) (rawPulseShapeHistMap_[*itr]->ProfileX());
00278 t2->Write();
00279
00280
00281
00282
00283 }
00284
00285
00286 file_->Write();
00287 file_->Close();
00288 }
00289
00290 std::string EcalPulseShapeGrapher::intToString(int num)
00291 {
00292 using namespace std;
00293 ostringstream myStream;
00294 myStream << num << flush;
00295 return(myStream.str());
00296 }