31 #include "larevt/CalibrationDBI/Interface/ChannelStatusService.h" 32 #include "larevt/CalibrationDBI/Interface/ChannelStatusProvider.h" 44 namespace geo {
class Geometry; }
102 , fCalWireModuleLabel(pset.get<
std::string >(
"CalWireModuleLabel"))
103 , fDetSimModuleLabel (pset.get<
std::string >(
"DetSimModuleLabel"))
119 fDiffsR = tfs->
make<TH1F>(
"One timestamp diffs in RawDigits",
";#Delta ADC;", 40, -19.5, 20.5);
120 fDiffsW = tfs->
make<TH1F>(
"One timestamp diffs in Wires",
";#Delta ADC;", 20, -9.5, 10.5);
121 fDiffsRW = tfs->
make<TH1F>(
"Same timestamp diffs in RD-Wires",
";#Delta ADC;", 20, -9.5, 10.5);
122 fDiffsRWvsR = tfs->
make<TH2F>(
"Same timestamp diffs in RD-Wires vs R",
";#Delta ADC;", 481,-0.5,480.5, 20, -9.5, 10.5);
123 fDiffsRWgph = tfs->
make<TH1F>(
"Same timestamp diffs in RD-Wires gph",
";#Delta ADC;", 20, -9.5, 10.5);
124 fDiffsRWvsRgph = tfs->
make<TH2F>(
"Same timestamp diffs in RD-Wires vs R gph",
";#Delta ADC;", 481,-0.5,480.5, 20, -9.5, 10.5);
125 fRawSig = tfs->
make<TH2F>(
"One event, one channel Raw",
"timestamp", 481,-0.5,480.5, 21,-0.5, 20.5);
126 fWireSig = tfs->
make<TH2F>(
"One event, one channel Wire",
"timestamp", 481,-0.5,480.5, 21, -0.5, 20.5);
128 fRD_WireMeanDiff2D = tfs->
make<TH2F>(
"Mean (Raw-CALD)-over-Raw in Window gph",
"Wire number",481,-0.05,480.5, 40, -1., 1.);
129 fRD_WireRMSDiff2D = tfs->
make<TH2F>(
"RMS (Raw-CALD)-over-Raw in Window gph",
"Wire number",481,-0.05,480.5, 10, 0., 2.);
131 fWindow = tfs->
make<TH2F>(
"tmax-tmin vs indMax",
"ticks", 200, 0, 2000, 20, -2.5, 60.5);
132 fMin = tfs->
make<TH1F>(
"Value of min",
"ticks", 21, -20.5, 0.5);
133 fMax = tfs->
make<TH1F>(
"Value of max",
"ticks", 21, 0.5, 20.5);
134 fRawIndPeak = tfs->
make<TH1F>(
"indPeakRaw",
";Induction Peaks Raw;",40,5,45);
135 fRawColPeak = tfs->
make<TH1F>(
"colPeakRaw",
";Collection Peaks Raw;",40,5,45);
136 fCalIndPeak = tfs->
make<TH1F>(
"indPeakCal",
";Induction Peaks Calibrated;",40,5,45);
137 fCalColPeak = tfs->
make<TH1F>(
"colPeakCal",
";Collection Peaks Calibrated;",40,5,45);
139 fIR = tfs->
make<TH1F>(
"Raw Ind signal",
"time ticks",4096,0.0,4096.);
140 fCR = tfs->
make<TH1F>(
"Raw Coll signal",
"time ticks",4096,0.0,4096.);
141 fIW = tfs->
make<TH1F>(
"Wire Ind signal",
"time ticks",4096,0.0,4096.);
142 fCW = tfs->
make<TH1F>(
"Wire Coll signal",
"time ticks",4096,0.0,4096.);
143 fNoiseHist = tfs->
make<TH1F>(
"Noise Histogram",
"FFT Bins",2049,0,2049);
161 lariov::ChannelStatusProvider
const& channelStatus
173 for(
unsigned int i = 0; i < wHandle->size(); ++i){
178 for(
unsigned int i = 0; i < rdHandle->size(); ++i){
185 double pedestal = rdvec[0]->GetPedestal();
186 double threshold = 9.0;
187 double signalSize = rdvec[0]->Samples();
188 uint32_t indChan0=64;
189 uint32_t indChan1=110;
190 uint32_t colChan0=312;
191 uint32_t colChan1=354;
193 ir[signalSize]=iw[signalSize]=cr[signalSize]=cw[signalSize]=1.0;
195 for(
unsigned int rd = 0; rd < rdvec.
size(); ++rd){
197 std::vector<double> signal(fft->
FFTSize());
198 for(
unsigned int wd = 0; wd < wvec.
size(); ++wd){
200 if (RawDigitsFromWire.at(wd) == rdvec[rd]){
201 std::vector<float> wirSig = wvec[wd]->Signal();
202 if(wirSig.size() > signal.size()) {
203 LOG_DEBUG(
"CalWireAna")<<
"Incompatible vector size "<<wirSig.size()
204 <<
" "<<signal.size();
207 for(
unsigned int ii = 0; ii < wirSig.size(); ++ii) {
208 signal[ii] = wirSig[ii];
212 if (wd == (wvec.
size()-1) ){
213 LOG_DEBUG(
"CalWireAna") <<
"caldata::CalWireAna:Big problem! No matching Wire for RawDigit. Bailing." << rd;
218 std::vector<double> adc(fft->
FFTSize());
220 for(
unsigned int t = 1; t < rdvec[rd]->Samples(); ++t){
221 fDiffsR->Fill(rdvec[rd]->ADC(t) - rdvec[rd]->ADC(t-1));
222 adc[t-1]=rdvec[rd]->ADC(t-1);
223 fRawSig->Fill(rd,rdvec[rd]->ADC(t));
226 adc[rdvec[rd]->Samples()-1] = rdvec[rd]->ADC(rdvec[rd]->Samples()-1);
227 if(!channelStatus.IsBad(rdvec[rd]->Channel()) &&
228 (*max_element(adc.begin(),adc.end()) < pedestal+threshold &&
229 *min_element(adc.begin(),adc.end()) >pedestal -threshold)) {
231 for(
int i = 0; i < signalSize; i++) sum+=pow(adc[i]-pedestal,2.0);
232 fNoiseRMS->Fill(TMath::Sqrt(sum/(
double)signalSize));
233 std::vector<double> temp(fft->
FFTSize());
234 std::vector<TComplex> fTemp(fft->
FFTSize()/2+1);
235 for(
int i = 0; i < signalSize; i++) temp[i]=(adc[i]-pedestal)*sin(TMath::Pi()*(
double)i/signalSize);
236 fft->
DoFFT(temp,fTemp);
240 rdvec[rd]->Channel() > indChan0 &&
241 rdvec[rd]->Channel() < indChan1){
246 rdvec[rd]->Channel() > colChan0 &&
247 rdvec[rd]->Channel() < colChan1) {
252 if(*max_element(adc.begin(),adc.end()) > pedestal+threshold)
253 fRawIndPeak->Fill(*max_element(adc.begin(),adc.end()));
254 if(*max_element(signal.begin(),signal.end()) > pedestal+threshold)
255 fCalIndPeak->Fill(*max_element(signal.begin(),signal.end()));
258 if(*max_element(adc.begin(),adc.end()) > pedestal +threshold)
259 fRawColPeak->Fill(*max_element(adc.begin(),adc.end()));
260 if(*max_element(signal.begin(),signal.end()) > pedestal+threshold)
261 fCalColPeak->Fill(*max_element(signal.begin(),signal.end()));
265 static unsigned int pulseHeight = 5;
266 unsigned int tmin = 1;
267 unsigned int tmax = 1;
268 int indMax = TMath::LocMax(signalSize,&adc[0]);
270 double sigMax = TMath::MaxElement(signalSize,&adc[0]);
272 int indMin = TMath::LocMin(signalSize,&adc[0]);
273 sigMin = TMath::MinElement(signalSize,&adc[0]);
275 tmax =
std::min(indMin+window,(
int)signalSize-1);
276 LOG_DEBUG(
"CalWireAna") <<
"Induction channel, indMin,tmin,tmax " 277 << rd<<
" " << indMin<<
" " << tmin <<
" " << tmax;
279 else if (sigMax>=pulseHeight){
281 tmax =
std::min(indMax+window,(
int)signalSize-1);
282 LOG_DEBUG(
"CalWireAna") <<
"Collection channel, tmin,tmax "<< rd<<
" " << tmin <<
" " << tmax;
287 fWindow->Fill(indMax, tmax - tmin);
289 std::vector<double> winDiffs;
292 static unsigned int tRawLead = 0;
293 for(
unsigned int t = 1; t < signalSize; ++t){
294 fDiffsW->Fill(signal[t]-signal[t-1]);
297 if (t>=tmin && t<=tmax && tmax>=pulseHeight && (t+tRawLead)<signalSize){
299 winDiffs.push_back((adc[t+tRawLead]-signal[t])/adc[t+tRawLead]);
300 fDiffsRW->Fill(adc[t+tRawLead]-signal[t]);
302 if (sigMax >= pulseHeight){
309 LOG_DEBUG(
"CalWireAna") <<
"on channel " << rdvec[rd]->Channel();
311 double tmp = TMath::Mean(winDiffs.size(),&winDiffs[0]);
312 double tmp2 = TMath::RMS(winDiffs.size(),&winDiffs[0]);
314 for (
int ii=0; ii<rdvec[rd]->Samples(); ii++) tmp3+=rdvec[rd]->ADC(ii);
315 for(
int i = 0; i < fft->
FFTSize(); i++) {
TH2F * fRD_WireMeanDiff2D
histogram of difference between original tdc value and compressesed value vs original value ...
void analyze(const art::Event &evt)
read/write access to event
Definition of basic raw digits.
void DoFFT(std::vector< T > &input, std::vector< TComplex > &output)
SigType_t SignalType(geo::PlaneID const &pid) const
Returns the type of signal on the channels of specified TPC plane.
creation of calibrated signals on wires
TH1F * fDiffsR
histogram of Raw tdc to tdc differences
TH2F * fRD_WireRMSDiff2D
histogram of difference between original tdc value and compressesed value vs original value ...
#define DEFINE_ART_MODULE(klass)
void push_back(Ptr< U > const &p)
Signal from induction planes.
std::string fCalWireModuleLabel
name of module that produced the wires
T * make(ARGS...args) const
Encapsulate the construction of a single detector plane.
void AlignedSum(std::vector< T > &input, std::vector< T > &output, bool add=true)
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
std::string fDetSimModuleLabel
TH1F * fDiffsW
histogram of Wire (post-deconvoution) tdc to tdc differences
Declaration of basic channel signal object.
Namespace collecting geometry-related classes utilities.
Base class for creation of raw signals on wires.
art framework interface to geometry description
Signal from collection planes.