35 #include "TPostScript.h"
45 cout <<
"[DTNoiseComputation]: Constructor" <<endl;
55 theFile =
new TFile(rootFileName.c_str(),
"READ");
59 theNewFile =
new TFile(newRootFileName.c_str(),
"RECREATE");
74 string CheckHistoName;
77 TH1F *hAverageNoiseHisto;
78 TH1F *hAverageNoiseIntegratedHisto;
79 TH1F *hAverageNoiseHistoPerCh;
80 TH1F *hAverageNoiseIntegratedHistoPerCh;
84 string AverageNoiseName;
85 string AverageNoiseIntegratedName;
86 string AverageNoiseNamePerCh;
87 string AverageNoiseIntegratedNamePerCh;
92 vector<DTChamber*>::const_iterator ch_it = dtGeom->chambers().begin();
93 vector<DTChamber*>::const_iterator ch_end = dtGeom->chambers().end();
95 for (; ch_it != ch_end; ++ch_it) {
97 vector<const DTSuperLayer*>::const_iterator sl_it = (*ch_it)->superLayers().begin();
98 vector<const DTSuperLayer*>::const_iterator sl_end = (*ch_it)->superLayers().end();
100 for(; sl_it != sl_end; ++sl_it) {
102 vector<const DTLayer*>::const_iterator l_it = (*sl_it)->layers().begin();
103 vector<const DTLayer*>::const_iterator l_end = (*sl_it)->layers().end();
105 for(; l_it != l_end; ++l_it) {
110 CheckHistoName =
"DigiOccupancy_" + getLayerName(dtLId);
111 TH1F *hCheckHisto = (TH1F *)
theFile->Get(CheckHistoName.c_str());
114 stringstream wheel; wheel << ch.
wheel();
117 if(someHowNoisyC.find(make_pair(ch.
wheel(),ch.
station())) == someHowNoisyC.end()) {
118 TString histoName_someHowNoisy =
"somehowNoisyCell_W"+wheel.str()+
"_St"+station.str();
119 hsomeHowNoisyC =
new TH1F(histoName_someHowNoisy,histoName_someHowNoisy,getMaxNumBins(ch),1,getMaxNumBins(ch)+1);
120 someHowNoisyC[make_pair(ch.
wheel(),ch.
station())]=hsomeHowNoisyC;
123 if(noisyC.find(make_pair(ch.
wheel(),ch.
station())) == noisyC.end()) {
124 TString histoName_noisy =
"noisyCell_W"+wheel.str()+
"_St"+station.str();
125 hnoisyC =
new TH1F(histoName_noisy,histoName_noisy,getMaxNumBins(ch),1,getMaxNumBins(ch)+1);
130 if(AvNoisePerSuperLayer.find(dtLId.
superlayerId()) == AvNoisePerSuperLayer.end()) {
131 AverageNoiseName =
"AverageNoise_" + getSuperLayerName(dtLId.
superlayerId());
132 hAverageNoiseHisto =
new TH1F(AverageNoiseName.c_str(), AverageNoiseName.c_str(), 200, 0, 10000);
133 AverageNoiseIntegratedName =
"AverageNoiseIntegrated_" + getSuperLayerName(dtLId.
superlayerId());
134 hAverageNoiseIntegratedHisto =
new TH1F(AverageNoiseIntegratedName.c_str(), AverageNoiseIntegratedName.c_str(), 200, 0, 10000);
135 AvNoisePerSuperLayer[dtLId.
superlayerId()] = hAverageNoiseHisto;
136 AvNoiseIntegratedPerSuperLayer[dtLId.
superlayerId()] = hAverageNoiseIntegratedHisto;
138 cout <<
" New Average Noise Histo per SuperLayer : " << hAverageNoiseHisto->GetName() << endl;
139 cout <<
" New Average Noise Integrated Histo per SuperLayer : " << hAverageNoiseHisto->GetName() << endl;
143 AverageNoiseNamePerCh =
"AverageNoise_" + getChamberName(dtLId);
144 hAverageNoiseHistoPerCh =
new TH1F(AverageNoiseNamePerCh.c_str(), AverageNoiseNamePerCh.c_str(), 200, 0, 10000);
145 AverageNoiseIntegratedNamePerCh =
"AverageNoiseIntegrated_" + getChamberName(dtLId);
146 hAverageNoiseIntegratedHistoPerCh =
new TH1F(AverageNoiseIntegratedNamePerCh.c_str(), AverageNoiseIntegratedNamePerCh.c_str(), 200, 0, 10000);
150 cout <<
" New Average Noise Histo per chamber : " << hAverageNoiseHistoPerCh->GetName() << endl;
153 HistoName =
"DigiOccupancy_" + getLayerName(dtLId);
155 hOccHisto = (TH1F *)
theFile->Get(HistoName.c_str());
156 int numBin = hOccHisto->GetXaxis()->GetNbins();
159 theAverageNoise[wireID]= hOccHisto->GetBinContent(
bin);
160 if(theAverageNoise[wireID] != 0) {
161 AvNoisePerSuperLayer[dtLId.
superlayerId()]->Fill(theAverageNoise[wireID]);
169 HistoName =
"DigiOccupancy_" + getLayerName(dtLId);
171 hOccHisto = (TH1F *)
theFile->Get(HistoName.c_str());
172 numBin = hOccHisto->GetXaxis()->GetNbins();
175 theAverageNoise[wireID]= hOccHisto->GetBinContent(
bin);
176 if(hOccHisto->GetBinContent(
bin)<100){
178 AvNoise += hOccHisto->GetBinContent(
bin);
180 if(hOccHisto->GetBinContent(
bin)>100 && hOccHisto->GetBinContent(
bin)<500){
182 cout<<
"filling somehow noisy cell"<<endl;
184 if(hOccHisto->GetBinContent(
bin)>500){
186 cout<<
"filling noisy cell"<<endl;
189 AvNoise = AvNoise/numCell;
190 cout<<
"theAverageNoise for layer "<<getLayerName(dtLId)<<
" is : "<<AvNoise << endl;
194 int updates = MaxEvents/1000;
195 for(
int evt=0; evt<updates; evt++){
196 stringstream toAppend; toAppend << evt;
197 Histo2Name =
"DigiPerWirePerEvent_" + getLayerName(dtLId) +
"_" + toAppend.str();
199 hEvtHisto = (TH2F *)
theFile->Get(Histo2Name.c_str());
202 cout <<
" New Histo with the number of events per evt per wire: " << hEvtHisto->GetName() << endl;
203 theEvtMap[dtLId].push_back(hEvtHisto);
219 cout <<
"[DTNoiseComputation] endjob called!" <<endl;
220 TH1F *hEvtDistance=0;
221 TF1 *ExpoFit =
new TF1(
"ExpoFit",
"expo", 0.5, 1000.5);
222 ExpoFit->SetMarkerColor();
224 TProfile *theNoiseHisto =
new TProfile(
"theNoiseHisto",
"Time Constant versus Average Noise",100000,0,100000);
228 for(
map<
DTLayerId, vector<TH2F*> >::const_iterator lHisto = theEvtMap.begin();
229 lHisto != theEvtMap.end();
231 for(
int bin=1;
bin<(*lHisto).second[0]->GetYaxis()->GetNbins();
bin++){
234 for(
int i=0;
i<int((*lHisto).second.size());
i++){
235 for(
int evt=1; evt<=(*lHisto).second[
i]->GetXaxis()->GetNbins(); evt++){
236 if((*lHisto).second[
i]->GetBinContent(evt,
bin) == 0) distanceEvt++;
238 if(toDel.find(wire) == toDel.end()) {
240 stringstream toAppend; toAppend <<
bin;
241 string Histo =
"EvtDistancePerWire_" + getLayerName((*lHisto).first) +
"_" + toAppend.str();
242 hEvtDistance =
new TH1F(Histo.c_str(),Histo.c_str(), 50000,0.5,50000.5);
244 hEvtDistance->Fill(distanceEvt);
249 if(toDel.find(wire) != toDel.end()){
250 theHistoEvtDistancePerWire[wire] = hEvtDistance;
252 theHistoEvtDistancePerWire[wire]->Fit(
"ExpoFit",
"R");
253 funct = theHistoEvtDistancePerWire[wire]->GetFunction(
"ExpoFit");
254 double par0 = funct->GetParameter(0);
255 double par1 = funct->GetParameter(1);
256 cout<<
"par0: "<<par0<<
" par1: "<<par1<<endl;
257 double chi2rid = funct->GetChisquare()/funct->GetNDF();
259 theTimeConstant[wire]=1;
261 theTimeConstant[wire]=par1;
263 theHistoEvtDistancePerWire[wire]->Write();
271 for(map<DTWireId, double>::const_iterator AvNoise = theAverageNoise.begin();
272 AvNoise != theAverageNoise.end();
275 theNoiseHisto->Fill((*AvNoise).second, theTimeConstant[wire]);
276 cout<<
"Layer: "<<getLayerName(wire.layerId())<<
" wire: "<<wire.wire()<<endl;
277 cout<<
"The Average noise: "<<(*AvNoise).second<<endl;
278 cout<<
"The time constant: "<<theTimeConstant[wire]<<endl;
281 theNoiseHisto->Write();
287 double integratedNoise,
bin, halfBin, maxBin;
288 for(map<DTSuperLayerId, TH1F*>::const_iterator AvNoiseHisto = AvNoisePerSuperLayer.begin();
289 AvNoiseHisto != AvNoisePerSuperLayer.end();
292 numBin = (*AvNoiseHisto).second->GetXaxis()->GetNbins();
293 maxBin = (*AvNoiseHisto).second->GetXaxis()->GetXmax();
294 bin= double(maxBin/numBin);
295 halfBin=double(bin/2);
297 (*AvNoiseHisto).second->Write();
298 for(
int i=1;
i<numBin;
i++){
299 integratedNoise+=(*AvNoiseHisto).second->GetBinContent(
i);
300 AvNoiseIntegratedPerSuperLayer[(*AvNoiseHisto).first]->Fill(halfBin,integratedNoise);
304 AvNoiseIntegratedPerSuperLayer[(*AvNoiseHisto).first]->Write();
307 for(map<DTChamberId, TH1F*>::const_iterator AvNoiseHisto = AvNoisePerChamber.begin();
308 AvNoiseHisto != AvNoisePerChamber.end();
311 numBin = (*AvNoiseHisto).second->GetXaxis()->GetNbins();
312 maxBin = (*AvNoiseHisto).second->GetXaxis()->GetXmax();
316 (*AvNoiseHisto).second->Write();
317 for(
int i=1;
i<numBin;
i++){
318 integratedNoise+=(*AvNoiseHisto).second->GetBinContent(
i);
319 AvNoiseIntegratedPerChamber[(*AvNoiseHisto).first]->Fill(halfBin,integratedNoise);
323 AvNoiseIntegratedPerChamber[(*AvNoiseHisto).first]->Write();
329 vector<DTChamber*>::const_iterator chamber_it = dtGeom->chambers().begin();
330 vector<DTChamber*>::const_iterator chamber_end = dtGeom->chambers().end();
332 for (; chamber_it != chamber_end; ++chamber_it) {
333 vector<const DTSuperLayer*>::const_iterator sl_it = (*chamber_it)->superLayers().begin();
334 vector<const DTSuperLayer*>::const_iterator sl_end = (*chamber_it)->superLayers().end();
336 for(; sl_it != sl_end; ++sl_it) {
338 vector<const DTLayer*>::const_iterator l_it = (*sl_it)->layers().begin();
339 vector<const DTLayer*>::const_iterator l_end = (*sl_it)->layers().end();
341 string canvasName =
"c" + getSuperLayerName(sl);
342 TCanvas
c1(canvasName.c_str(),canvasName.c_str(),600,780);
343 TLegend *
leg=
new TLegend(0.5,0.6,0.7,0.8);
344 for(; l_it != l_end; ++l_it) {
346 string HistoName =
"DigiOccupancy_" + getLayerName(layerId);
348 TH1F *hOccHisto = (TH1F *)
theFile->Get(HistoName.c_str());
350 string TitleHisto =
"AverageNoise_" + getSuperLayerName(sl);
351 cout<<
"TitleHisto : "<<TitleHisto<<endl;
352 hOccHisto->SetTitle(TitleHisto.c_str());
353 stringstream layer; layer << layerId.
layer();
354 string legendHisto =
"layer " + layer.str();
355 leg->AddEntry(hOccHisto,legendHisto.c_str(),
"L");
356 hOccHisto->SetMaximum(getYMaximum(sl));
358 if(layerId.
layer() == 1)
361 hOccHisto->Draw(
"same");
362 hOccHisto->SetLineColor(layerId.
layer());
375 for(
map<pair<int,int>, TH1F*>::const_iterator nCell = noisyC.begin();
376 nCell != noisyC.end();
379 (*nCell).second->Write();
381 for(
map<pair<int,int>, TH1F*>::const_iterator somehownCell = someHowNoisyC.begin();
382 somehownCell != someHowNoisyC.end();
385 (*somehownCell).second->Write();
403 stringstream Layer; Layer << lId.
layer();
404 stringstream superLayer; superLayer << dtSLId.
superlayer();
405 stringstream wheel; wheel << dtChId.
wheel();
407 stringstream sector; sector << dtChId.
sector();
411 +
"_St" + station.str()
412 +
"_Sec" + sector.str()
413 +
"_SL" + superLayer.str()
414 +
"_L" + Layer.str();
424 stringstream superLayer; superLayer << dtSLId.
superlayer();
425 stringstream wheel; wheel << dtChId.
wheel();
427 stringstream sector; sector << dtChId.
sector();
429 string SuperLayerName =
431 +
"_St" + station.str()
432 +
"_Sec" + sector.str()
433 +
"_SL" + superLayer.str();
435 return SuperLayerName;
444 stringstream wheel; wheel << dtChId.
wheel();
446 stringstream sector; sector << dtChId.
sector();
450 +
"_St" + station.str()
451 +
"_Sec" + sector.str();
462 for(
int SL=1; SL<=3; SL++){
463 if(!(chId.
station()==4 && SL==2)){
464 for (
int L=1;
L<=4;
L++){
466 string HistoName =
"DigiOccupancy_" + getLayerName(layerId);
468 TH1F *hOccHisto = (TH1F *)
theFile->Get(HistoName.c_str());
470 if (hOccHisto->GetXaxis()->GetXmax()>maximum)
471 maximum = hOccHisto->GetXaxis()->GetNbins();
483 double dummy =
pow(10.,10.);
485 for (
int L=1;
L<=4;
L++){
487 string HistoName =
"DigiOccupancy_" + getLayerName(layerId);
489 TH1F *hOccHisto = (TH1F *)
theFile->Get(HistoName.c_str());
491 if (hOccHisto->GetMaximum(dummy)>maximum)
492 maximum = hOccHisto->GetMaximum(dummy);
DTNoiseComputation(const edm::ParameterSet &ps)
Constructor.
T getUntrackedParameter(std::string const &, T const &) const
int getMaxNumBins(const DTChamberId &chId) const
double getYMaximum(const DTSuperLayerId &slId) const
void beginRun(const edm::Run &, const edm::EventSetup &setup)
DTChamberId chamberId() const
Return the corresponding ChamberId.
int layer() const
Return the layer number.
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
std::string getChamberName(const DTLayerId &lId) const
Get the name of the chamber.
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
int superlayer() const
Return the superlayer number (deprecated method name)
std::string getLayerName(const DTLayerId &lId) const
Get the name of the layer.
std::string getSuperLayerName(const DTSuperLayerId &slId) const
Get the name of the superLayer.
virtual ~DTNoiseComputation()
Destructor.
int station() const
Return the station number.
int wheel() const
Return the wheel number.
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
Power< A, B >::type pow(const A &a, const B &b)