Commit d6ef6986 authored by giac91's avatar giac91
Browse files

Removed unused files, added macro folder, cleaned up Makefile.

Removed files remain in initial commit, so can be recovered.
parent 390ec407
......@@ -11,119 +11,23 @@ LFLAGS = $(GFLAGS) $(shell root-config --libs) -lMinuit -lz -lm $(ROOTANALIBS) $
all: PF lib
# BM : bin/BeamMap_analysis.exe
# PA : bin/Persistence_analysis.exe
# BM2: bin/BeamMap2_analysis.exe
# PDE: bin/PDE_loader.exe
# PDE2: bin/PDE_threshold_baseline.exe
PF : bin/PulseFinding.exe
# PS : bin/PmtStability.exe
# TM: bin/TimeDistribution.exe
# AN : bin/Analysis.exe
# DAN : bin/DarkAnalysis.exe
lib : lib/libSipmAnalysis.so
lib/libSipmAnalysis.so : obj/Waveform.o obj/WaveformProcessor.o obj/LecroyFile.o obj/V1730File.o obj/DataFile.o obj/RootDict.o #obj/LecroyHdfFile.o
g++ -shared -fPIC -o lib/libSipmAnalysis.so $^ $(LFLAGS)
# bin/Analysis.exe : obj/Analysis.o obj/ntpAnalysis.o
# g++ -o bin/Analysis.exe $^ $(LFLAGS)
# bin/DarkAnalysis.exe : obj/DarkAnalysis.o obj/DarkNtpAnalysis.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/DarkAnalysis.exe $^ $(LFLAGS)
bin/PulseFinding.exe : obj/PulseFinding.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o #obj/LecroyHdfFile.o
g++ -o bin/PulseFinding.exe $^ $(LFLAGS)
# bin/BeamMap_analysis.exe : obj/BeamMap_analysis.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/BeamMap_analysis.exe $^ $(LFLAGS)
# bin/BeamMap2_analysis.exe : obj/BeamMap2_analysis.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/BeamMap2_analysis.exe $^ $(LFLAGS)
# bin/Persistence_analysis.exe : obj/Persistence_analysis.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/Persistence_analysis.exe $^ $(LFLAGS)
# bin/PDE_loader.exe : obj/PDE_loader.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/PDE_loader.exe $^ $(LFLAGS)
# bin/PDE_threshold_baseline.exe : obj/PDE_threshold_baseline.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/PDE_threshold_baseline.exe $^ $(LFLAGS)
# bin/TimeDistribution.exe : obj/TimeDistribution.o obj/LecroyHdfFile.o obj/LecroyFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/TimeDistribution.exe $^ $(LFLAGS)
# bin/PmtStability.exe : obj/PmtStability.o obj/LecroyHdfFile.o obj/V1730File.o obj/WaveformProcessor.o obj/Waveform.o obj/DataFile.o
# g++ -o bin/PmtStability.exe $^ $(LFLAGS)
obj/Analysis.o : code/Analysis.cxx code/ntpAnalysis.h
g++ -o obj/Analysis.o code/Analysis.cxx $(CFLAGS)
# obj/DarkAnalysis.o : code/DarkAnalysis.cxx code/DarkNtpAnalysis.h
# g++ -o obj/DarkAnalysis.o code/DarkAnalysis.cxx $(CFLAGS)
# obj/ntpAnalysis.o : code/ntpAnalysis.cxx code/ntpAnalysis.h
# g++ -c -o obj/ntpAnalysis.o $(CFLAGS) code/ntpAnalysis.cxx
# obj/DarkNtpAnalysis.o : code/DarkNtpAnalysis.cxx code/DarkNtpAnalysis.h
# g++ -c -o obj/DarkNtpAnalysis.o $(CFLAGS) code/DarkNtpAnalysis.cxx
# obj/BeamMap_analysis.o : code/BeamMap_analysis.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/BeamMap_analysis.o code/BeamMap_analysis.cxx $(CFLAGS)
# obj/BeamMap2_analysis.o : code/BeamMap2_analysis.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/BeamMap2_analysis.o code/BeamMap2_analysis.cxx $(CFLAGS)
# obj/Persistence_analysis.o : code/Persistence_analysis.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/Persistence_analysis.o code/Persistence_analysis.cxx $(CFLAGS)
# obj/PDE_loader.o : code/PDE_loader.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/PDE_loader.o code/PDE_loader.cxx $(CFLAGS)
# obj/PDE_threshold_baseline.o : code/PDE_threshold_baseline.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/PDE_threshold_baseline.o code/PDE_threshold_baseline.cxx $(CFLAGS)
obj/PulseFinding.o : code/PulseFinding.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
g++ -o obj/PulseFinding.o code/PulseFinding.cxx $(CFLAGS)
# obj/TimeDistribution.o : code/TimeDistribution.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/TimeDistribution.o code/TimeDistribution.cxx $(CFLAGS)
# obj/PmtStability.o : code/PmtStability.cxx code/Waveform.h code/LecroyHdfFile.h code/V1730File.h code/WaveformProcessor.h
# g++ -o obj/PmtStability.o code/PmtStability.cxx $(CFLAGS)
obj/Waveform.o : code/Waveform.cxx code/Waveform.h
g++ -o obj/Waveform.o code/Waveform.cxx $(CFLAGS)
obj/DataFile.o : code/DataFile.h code/DataFile.cxx
g++ -o obj/DataFile.o code/DataFile.cxx $(CFLAGS)
# obj/LecroyHdfFile.o : code/LecroyHdfFile.cxx code/LecroyHdfFile.h code/Waveform.h code/DataFile.h
# g++ -o obj/LecroyHdfFile.o code/LecroyHdfFile.cxx $(CFLAGS)
obj/LecroyFile.o : code/LecroyFile.cxx code/LecroyFile.h code/Waveform.h code/DataFile.h
g++ -o obj/LecroyFile.o code/LecroyFile.cxx $(CFLAGS)
obj/V1730File.o : code/V1730File.cxx code/V1730File.h code/Waveform.h code/DataFile.h
g++ -o obj/V1730File.o code/V1730File.cxx $(CFLAGS)
obj/WaveformProcessor.o : code/WaveformProcessor.cxx code/V1730File.h
g++ -c -o obj/WaveformProcessor.o $(CFLAGS) code/WaveformProcessor.cxx
obj/RootDict.o : code/Waveform.h code/LecroyFile.h code/V1730File.h code/WaveformProcessor.h code/DataFile.h code/Linkdef.h # code/LecroyHdfFile.h
# rootcint -f code/RootDict.cxx -c -I/home/deap/nEXO/packages/hdf5-1.8.13/hdf5/include -I$ROOTANADIR $^
rootcint -f code/RootDict.cxx -c -I$(ROOTANADIR) $^
g++ -c -o$@ code/RootDict.cxx $(CFLAGS)
g++ -c -o $@ code/RootDict.cxx $(CFLAGS)
obj/%.o: code/%.cxx
g++ -c -o $@ $< $(CFLAGS)
clean:
rm -f obj/* bin/* lib/*
#include <sys/stat.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "ntpAnalysis.h"
void Analyse(ntpAnalysis analysis, int aRun, int aRun2);
int main(int argc, char** argv)
{
//possible to combine two runs with different timing resolutions
int aRun = argc>1 ? atoi(argv[1]) : 0;
int aRun2 = argc>2 ? atoi(argv[2]) : 0;
if(argc == 2)
{
ntpAnalysis analysis (aRun);
Analyse(analysis, aRun, 0);
}
else if(argc == 3)
{
ntpAnalysis analysis (aRun, aRun2);
Analyse(analysis, aRun, aRun2);
}
else
{
std::cout << "Usage: Analysis.exe [run#1] [run#2]. Run#2 optional. See nEXO/RunInfo.txt for run numbers." << std::endl;
exit(1);
}
}
void Analyse(ntpAnalysis analysis, int aRun, int aRun2)
{
analysis.calculateAllParameters(aRun, aRun2, 6e-9);
analysis.writeAll();
// ntpAnalysis.makePlots(1);
}
/*******************************************************************************
* Distribution.cxx
*
* Description:
* Reads a wfm file and produces an ntuple with the distribution of the pulses
* for waveforms in that wfm file.
*
* History:
* v0.1 2011/12/14 Initial file (Kyle Boone, kyboone@gmail.com)
*******************************************************************************/
#include <sys/stat.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "LecroyFile.h"
#include "WaveformProcessor.h"
#include "TFile.h"
#include "TNtuple.h"
#include "TF1.h"
#include "TH1.h"
// Parameters
int main(int argc, char** argv){
int aRun = argc>1 ? atoi(argv[1]) : 0;
int aFitType = argc>2 ? atoi(argv[2]) : 0;
int aNEventMax = argc>3 ? atoi(argv[3]) : 100000000;
int aChannel = argc>4 ? atoi(argv[4]) : 1;
char aRunInfo[100];
if(argc>5) sprintf(aRunInfo,"ntp%s/%sRunInfo.txt",argv[5],argv[5]);
else strcpy(aRunInfo,"RunInfo.txt");
WaveformProcessor wfProc(aRunInfo,aRun,5,aChannel);
// --- Open output file
//>>> Strip directory name from file name
int slashIndex=0;
for(int index=0; index<strlen(wfProc.getFileName()); index++){
if(strncmp(wfProc.getFileName()+index,"/",1)==0) slashIndex=index;
}
char outFileName[200];
if(argc>5){
sprintf(outFileName,"ntp%s/%s.Ch%iFit%i",argv[5],wfProc.getFileName()+slashIndex,aChannel, aFitType);
}
else{
sprintf(outFileName,"ntp/%s.Ch%iFit%i",wfProc.getFileName()+slashIndex,aChannel, aFitType);
}
//sprintf(outFileName,"/home/huth/Desktop/nEXO/testdata%s.fanat%i",wfProc.getFileName()+slashIndex,aFitType);
std::cout << outFileName << " " << wfProc.getBaselineRMS() << slashIndex << std::endl;
TFile outFile(outFileName ,"RECREATE");
TNtuple ntp("ntp","ntp",
"evt:tt:blmu:blRMS:np:pbl:paa:pa:pt:pq:pw:tchi2:fa:ft:frt:fft:ff2:fft2:fblmu:fchi2:ndf:frchi2:frndf");
float ntpCont[20];
int skippedcount = 0;
// ---
int nEvent = wfProc.getWaveformCount();
if(nEvent>aNEventMax) nEvent=aNEventMax;
for(int iEvent=0; iEvent<nEvent; iEvent++){
wfProc.readNextWaveform();
int skipFit=0;
if(wfProc.processBaseline() && wfProc.findPulse()){
wfProc.fit(aFitType);
}
else{
skippedcount++;
skipFit=1;
}
//std::cout << "Event: " << iEvent <<"\t nPulses: "
// << wfProc.getNPulse() << std::endl;
for(int iPulse=0; iPulse<wfProc.getNPulse(); iPulse++){
ntpCont[0]=iEvent;
ntpCont[1]=wfProc.getTriggerTime();
ntpCont[2]=wfProc.getBaselineMu();
ntpCont[3]=wfProc.getBaselineRMS();
ntpCont[4]=wfProc.getNPulse();
ntpCont[5]=wfProc.getPulseBaseline(iPulse);
ntpCont[6]=wfProc.getPulseAbsAmplitude(iPulse);
ntpCont[7]=wfProc.getPulseAmplitude(iPulse);
ntpCont[8]=wfProc.getPulseTime(iPulse);
ntpCont[9]=wfProc.getPulseCharge(iPulse);
ntpCont[10]=wfProc.getPulseWidth(iPulse);
ntpCont[11]=wfProc.getSPTemplateChi2(iPulse);
ntpCont[12]=wfProc.getFitAmplitude(iPulse);
ntpCont[13]=wfProc.getFitTime(iPulse);
ntpCont[14]=wfProc.getFitRiseTime(iPulse);
ntpCont[15]=wfProc.getFitFallTime(iPulse);
ntpCont[16]=wfProc.getFitTime2Frac(iPulse);
ntpCont[17]=wfProc.getFitFallTime2(iPulse);
ntpCont[18]=wfProc.getFitBaseline(iPulse);
ntpCont[19]=wfProc.getChi2(iPulse);
ntpCont[20]=skipFit? -1 : wfProc.getNDF(iPulse);
ntpCont[21]=wfProc.getChi2Refit(iPulse);
ntpCont[22]=wfProc.getNDFRefit(iPulse);
ntp.Fill(ntpCont);
}
if(iEvent==0) wfProc.getBaselineHisto()->Write();
if(floor(iEvent*200./nEvent)==(iEvent*200./nEvent)){
std::cout << iEvent << "/" << nEvent << std::endl; //"\r";
//std::cout.flush();
}
//if(iEvent>195000) std::cout << iEvent << std::endl;
}
std::cout << "Writing output in " << outFileName << std::endl;
std::cout << "Skipped " << skippedcount << " triggers." << std::endl;
ntp.Write();
}
#include <sys/stat.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "DarkNtpAnalysis.h"
int main(int argc, char** argv)
{
//possible to combine two runs with different timing resolutions
int aRun = argc>1 ? atoi(argv[1]) : 0;
int mode = argc>2 ? atoi(argv[2]) : 0;
double par1 = argc>3 ? atoi(argv[3]) : 0;
int par2 = argc>4 ? atoi(argv[4]) : 0;
/* Modes:
0 - Create Time Distribution with a window of par1, 100 bins, no fit
1 - Create Time Distribution with a window of par1, 1000 bins, no fit
2 - Create Normalised Time Distribution with a window of par1, 100 bins, fit
3 - Create Normalised Time Distribution with a window of par1, 1000 bins, fit
4 - Fits pulses, not time dist
*/
if(argc >= 2)
{
DarkNtpAnalysis analysis;
analysis.calculateAllParameters(aRun, mode, par1, par2);
analysis.writeAll(aRun, mode);
}
else
{
std::cout << "Usage: Analysis.exe [run#1]. See nEXO/RunInfo.txt for run numbers." << std::endl;
exit(1);
}
}
#include <sys/stat.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "DarkNtpAnalysis.h"
int main(int argc, char** argv)
{
//possible to combine two runs with different timing resolutions
int aRun1 = argc>1 ? atoi(argv[1]) : 0;
double window = argc>2 ? atoi(argv[2]) : 0;
int aRun2 = argc>3 ? atoi(argv[3]) : 0;
if(argc == 3)
{
DarkNtpAnalysis* analysis = new DarkNtpAnalysis(aRun1, window);
analysis.calculateAllParameters();
analysis.writeAll();
}
else if (argc == 4)
{
DarkNtpAnalysis* analysis = new DarkNtpAnalysis(aRun1, aRun2, window);
analysis.calculateAllParameters();
analysis.writeAll();
}
else
{
std::cout << "Usage: Analysis.exe [run#1] [windowsize] [run#2]. See nEXO/RunInfo.txt for run numbers." << std::endl;
exit(1);
}
}
/*******************************************************************************
* DarkNtpAnalysis.cxx
*
* Description:
* Analyzes an NTuple for dark noise, afterpulse probability, etc. Also provides
* formatting for histogram generation.
*
*******************************************************************************/
#include <sys/stat.h>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "TFile.h"
#include "TNtuple.h"
#include "TF1.h"
#include "TROOT.h"
#include "TH1.h"
#include "TGraph.h"
#include "TMath.h"
#include "TCanvas.h"
#include "DarkNtpAnalysis.h"
#include "WaveformProcessor.h"
#include "LecroyFile.h"
#include "LecroyHdfFile.h"
#include "Waveform.h"
using namespace std;
DarkNtpAnalysis::DarkNtpAnalysis() //add functionality for arun
{
}
//par[0] = tau, par[1] = p_ap, par[2] = tau_ap
double fitFunction(double *x, double *par)
{
double arg1 = 0, arg2 = 0, fitval = 0;
if(par[0] != 0) arg1 = 1/par[0]; // 1/tau
if(par[2] != 0) arg2 = arg1 + 1/par[2]; // (1/tau + 1/tau_k)
//fitval = par[1]*exp(-1*x[0]*arg2)*arg2 + arg1*exp(-1*x[0]*arg1)*(1-par[1]);
fitval = par[1]*arg2*exp(-1*x[0]*arg2) + arg1*exp(-1*x[0]*arg1) + par[1]/par[2]*exp(-1*x[0]/par[2]);
return fitval;
}
//For collection data from a single data file
void DarkNtpAnalysis::processData(int aRun, bool savepulses, double maxTime, int histId)
{
char* name = getFileName(aRun, "./RunInfo.txt", fittype);
TFile* f1 = new TFile(name);
TNtuple* ntp = (TNtuple*) f1->Get("ntp");
NtpCont* cont = (NtpCont*) ntp->GetArgs();
int nPulse = ntp->GetEntries();
int iPulse = 0;
int numpeaks;
int numpairs = 0;
int numevents = 0;
double peaktimes[10];
double peakamps[10];
double time;
int firstpeak = 0;
int secondpeak = 0;
double timediff;
bool subpeak = false;
bool xtalk = false;
bool prepeak = false;
for(int i = 0; i < 10; i++) xtalkcounts[i] = 0;
int xtalksample = 0;
pulseAmplitude = 0;
pulseRiseTime = 0;
pulseFallTime = 0;
pulseChi2 = 0;
UNCpulseAmplitude = 0;
UNCpulseRiseTime = 0;
UNCpulseFallTime = 0;
UNCpulseChi2 = 0;
double ampvalues[300000];
double risevalues[300000];
double fallvalues[300000];
double chivalues[300000];
int numfittedpeaks = 0;
totalevents = 1000000;
int numaftertrigger = 0;
int peakcounts [10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
cout << nPulse << endl;
while(iPulse<nPulse)
{
//Stores data for all peaks in a given event
ntp->GetEntry(iPulse);
if(aRun % 10 != 0){
numpeaks = cont->nfp;
peaktimes[0] = cont->ft;
peakamps[0] = cont->fa;
}
else{
numpeaks = cont->np;
peaktimes[0] = cont->pt;
peakamps[0] = cont->pa;
}
peakcount += numpeaks; //////////
for(int i=1; i<numpeaks; i++)
{
iPulse++;
if(aRun % 10 != 0){
ntp->GetEntry(iPulse);
peaktimes[i] = cont->ft;
peakamps[i] = cont->fa;
}
else{
ntp->GetEntry(iPulse);
peaktimes[i] = cont->pt;
peakamps[i] = cont->pa;
}
}
//Checks for pre-trigger peaks
for(int i=0; i<numpeaks; i++)
{
if((peaktimes[i] < -5e-8) && (peaktimes[i] > -5e-7)) prepeak = true;
else if (peaktimes[i] > -5e-8) numaftertrigger++;
}
//Finds the first peak of the event after the trigger
for(int i=1; i<numpeaks; i++)
{
if(peaktimes[firstpeak] > -5e-8)
{
if((peaktimes[i] >-5e-8) && (peaktimes[i] < peaktimes[firstpeak])) firstpeak = i;
}
else firstpeak = i;
}
numevents++;
//Counts cross-talk
if(numevents % (totalevents/10) == 0) xtalksample++;
if(peakamps[firstpeak]*polarity > xtalkthresh)
{
//cout << "Peak amp: " << peakamps[firstpeak]*polarity << " xtalkthresh: " << xtalkthresh << " CROSSTALK FOUND" << endl;
numxtalk++;
xtalkcounts[xtalksample]++;
xtalk = true;
}
if((xtalk == false) &&(prepeak == false))
{
//Checks for a subsequent peak
for(int i=0; i<numpeaks; i++)
{
if(peaktimes[i] > peaktimes[firstpeak])
{
subpeak = true;
}
}
if(subpeak == true)
{
//Finds the subsequent peak
for(int i=1; i<numpeaks; i++)
{
if(peaktimes[secondpeak] > peaktimes[firstpeak])
{
if((peaktimes[i] > peaktimes[firstpeak]) && (peaktimes[i] < peaktimes[secondpeak])) secondpeak = i;
}
else secondpeak = i;
}
//Calculates the time difference between the two and puts into a histogram
timediff = peaktimes[secondpeak] - peaktimes[firstpeak];
if ((timediff < maxTime) && (histId == 0)) TimeDist->Fill(timediff*1e9);
else if ((timediff < maxTime) && (histId == 1)) TimeDist1->Fill(timediff*1e9);
else if ((timediff < maxTime) && (histId == 2)) TimeDist2->Fill(timediff*1e9);
if ((histId == 1) && (timediff > apulsingmax1) && (timediff < maxTime)) numpairs++;
else if ((histId == 2) && (timediff > 5e-9) && (timediff < apulsingmax1)) numpairs++;
}
else if ((numpeaks == 1) && (willFit == true))
{
//Calculated parameters related to the fit shape
WaveformProcessor* wfProc = new WaveformProcessor("RunInfo.txt",aRun);
wfProc->setQuietMode(true);
wfProc->readWaveform(cont->evt);
wfProc->processBaseline();
wfProc->findPulse();
if(wfProc->getNPulse()==1)
{
wfProc->setFitOption("QR0");
wfProc->fitSingle(fittype);
if((fittype==7)){
wfProc->reFitMulti();
}
if(savepulses == true)
{
gROOT->SetBatch();
TCanvas *c1 = new TCanvas("PulsesFit", "PulsesFit", 900, 700);
Waveform* wf = wfProc->getCurrentWaveform();
wf->SetLineColor(1);
wf->Draw();
TGraph* GPulse = wfProc->getPulseGraph();
GPulse->SetMarkerStyle(23);
GPulse->SetMarkerColor(2);
GPulse->Draw("p");
wfProc->getFitFunction()->Draw("same");
if((fittype==8)) wfProc->getFitFunction2()->Draw("same");
char filename [100];
sprintf(filename, "/home/deap/nEXO/Pulse Fits 2/%d/Single Pulse/%d-%d.pdf", aRun, cont->evt, fittype);
c1->SaveAs(filename);
delete wf;
delete c1;
delete GPulse;
}
pulseAmplitude = pulseAmplitude * numfittedpeaks + wfProc->getFitAmplitude(0);
pulseAmplitude /= (numfittedpeaks+1);
ampvalues [numfittedpeaks] = pulseAmplitude;
pulseRiseTime = pulseRiseTime * numfittedpeaks + wfProc->getFitRiseTime();
pulseRiseTime /= (numfittedpeaks+1);
risevalues [numfittedpeaks] = pulseRiseTime;
pulseFallTime = pulseFallTime * numfittedpeaks + wfProc->getFitFallTime();
pulseFallTime /= (numfittedpeaks+1);
fallvalues [numfittedpeaks] = pulseFallTime;
pulseChi2 = pulseChi2 * numfittedpeaks + wfProc->getChi2();
pulseChi2 /= (numfittedpeaks+1);
chivalues [numfittedpeaks] = pulseChi2;
numfittedpeaks++;
}
delete wfProc;
}
}