]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/PHOS/AliHLTPHOSRawAnalyzerPeakFinder.cxx
The peakfinder algorithm was intgrated into the HLT online processing.
[u/mrichter/AliRoot.git] / HLT / PHOS / AliHLTPHOSRawAnalyzerPeakFinder.cxx
CommitLineData
cbab66dd 1/**************************************************************************
2 * Copyright(c) 2006, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: Per Thomas Hille for the ALICE HLT Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16#include "AliHLTPHOSRawAnalyzerPeakFinder.h"
17#include <iostream>
68d9caee 18#include <cmath>
cbab66dd 19
20using std::cout;
21using std::endl;
22
23ClassImp(AliHLTPHOSRawAnalyzerPeakFinder)
24
25
68d9caee 26AliHLTPHOSRawAnalyzerPeakFinder::AliHLTPHOSRawAnalyzerPeakFinder(const AliHLTPHOSRawAnalyzerPeakFinder&):AliHLTPHOSRawAnalyzer() , fTVectorPtr(0), fAVectorPtr(0), fTVectorSize(0), fAVectorSize(0)
cbab66dd 27{
28
68d9caee 29
cbab66dd 30}
31
32
33/**
34 * The AliHLTPHOSPeakfinder class is the class for extracting the basic signal parameters
35 * "timing" and "energy" from the PHOS raw data. Physical data will for a given readout channel be
36 * a sequense of ADC digitized 10 bit integer values, however for performance reasons all values used in
37 * calculation is of type double.
38 **/
68d9caee 39AliHLTPHOSRawAnalyzerPeakFinder::AliHLTPHOSRawAnalyzerPeakFinder():AliHLTPHOSRawAnalyzer(), fTVectorPtr(0), fAVectorPtr(0), fTVectorSize(0), fAVectorSize(0)
cbab66dd 40{
a764d59b 41 // cout <<"PeakFinder:You cannot invoke the Fitter without arguments"<<endl;;
cbab66dd 42}
43
44
45
46AliHLTPHOSRawAnalyzerPeakFinder::~AliHLTPHOSRawAnalyzerPeakFinder()
47{
48
49} //end AliHLTPHOSRawAnalyzerPeakFinder
50
51void
68d9caee 52AliHLTPHOSRawAnalyzerPeakFinder::SetTVector(Double_t *tVec, Int_t size)
cbab66dd 53{
68d9caee 54 fTVectorSize = size;
55
56 if(fTVectorPtr != 0)
57 {
58 delete fTVectorPtr;
59 }
60
61 fTVectorPtr = new Double_t[size];
62
63 for(int i=0; i< size; i++)
64 {
65 fTVectorPtr[i] = tVec[i];
66 }
cbab66dd 67}
68
68d9caee 69
cbab66dd 70void
68d9caee 71AliHLTPHOSRawAnalyzerPeakFinder::SetAVector(Double_t *aVec, Int_t size)
cbab66dd 72{
68d9caee 73
74 fAVectorSize = size;
cbab66dd 75
68d9caee 76 if(fAVectorPtr != 0)
77 {
78 delete fAVectorPtr;
79 }
80
81 fAVectorPtr = new Double_t[size];
82
83 for(int i=0; i< size; i++)
84 {
85 fAVectorPtr[i] = aVec[i];
86 }
cbab66dd 87}
88
68d9caee 89
90
cbab66dd 91/**
92* Extraction of timing and energy using the Peakfinde Algorithm.
93* The. The parameters "start" and "length" defines a sub array of the data array
94* that will be used for the the fit. If start+length must not exeed the total length
95* of the Data array. "start" must be chosen as close as possible to t0.
96* The baseline must also be subtracted.
97* The length of "tVector" and "aVector" mus be equal to length.
98* "index + length" must not exeed the length of the data array set in the constructor.
99* @param start the start index of the subarray of the data array.
100* @param length the number of samples to use starting from index
101* @param tVector the peakfinder vector for timing
102* @param aVector the peakfinder vector for amplitude (energy)
103**/
104void
105AliHLTPHOSRawAnalyzerPeakFinder::Evaluate(int start, int length)
106{
68d9caee 107 // printf("\n AliHLTPHOSRawAnalyzerPeakFinder::Evaluat from index %d to %d\n", start, start + length);
cbab66dd 108 fDTof = 0;
109 fDAmpl = 0;
68d9caee 110 Int_t tmpLength;
cbab66dd 111
68d9caee 112
113 if(fTVectorPtr == 0 || fAVectorPtr == 0)
cbab66dd 114 {
115 printf("\nError: the peakfinder vectors are not specified, aborting !!!\n");
116 }
117 else
118 {
68d9caee 119
120 if(length < fTVectorSize)
121 {
122 tmpLength = length;
123 }
124 else
125 {
126 tmpLength = fTVectorSize;
127 }
cbab66dd 128
68d9caee 129 printf("\nstart = %d, length = %d\n", start, tmpLength);
cbab66dd 130
68d9caee 131 for(int i=0; i < tmpLength; i++)
cbab66dd 132 {
68d9caee 133 cout <<fFloatDataPtr[i]<< " ";
134 fDAmpl += fAVectorPtr[i]*fFloatDataPtr[i];
cbab66dd 135 }
136
68d9caee 137 cout<<endl;
138
139 for(int i=0; i < tmpLength; i++)
cbab66dd 140 {
68d9caee 141 fDTof += fTVectorPtr[i]*fFloatDataPtr[i];
142 cout <<fFloatDataPtr[i]<< " ";
143 }
144
145 cout <<endl;
146
147 if(fDAmpl > 900)
148 {
149 Double_t tmpMax = GetMaxValue(fFloatDataPtr, tmpLength);
150 if(tmpMax == 1023)
151 {
152 fDAmpl = tmpMax;
153 }
cbab66dd 154 }
155
156 fDTof = fDTof/fDAmpl;
68d9caee 157
cbab66dd 158 }
a764d59b 159
68d9caee 160 cout <<" AliHLTPHOSRawAnalyzerPeakFinder: amplitude ="<<fDAmpl<< endl;
161 cout <<" AliHLTPHOSRawAnalyzerPeakFinder: time ="<<fDTof<< endl << endl;
cbab66dd 162 //thats all
163} //end FitPeakFinder
164
165
166
167