00001
00010 #include <iostream>
00011 #include <stdlib.h>
00012 #include <stdio.h>
00013 #include <string.h>
00014
00015
00016
00017
00018
00019
00020 using namespace std;
00021
00022 class Altro{
00023 public:
00024 Altro(int timebins, short* Channel);
00025 ~Altro();
00026
00027 void ConfigAltro(int ONBaselineCorrection1, int ONTailcancellation, int ONBaselineCorrection2, int ONClipping, int ONZerosuppression);
00028 void ConfigBaselineCorrection_1(int mode, int ValuePeDestal, int *PedestalMem, int polarity);
00029 void ConfigTailCancellationFilter(int K1, int K2, int K3, int L1, int L2, int L3);
00030 void ConfigBaselineCorrection_2(int HighThreshold, int LowThreshold, int Offset, int Presamples, int Postsamples);
00031 void ConfigZerosuppression(int Threshold, int MinSamplesaboveThreshold, int Presamples, int Postsamples);
00032 void PrintParameters();
00033 void RunEmulation();
00034 float calculatecompression();
00035
00036 enum { DIN_FPD, DIN_FT, DIN_FDIN, DIN_FDIN_VPD, DIN_VPD_FPD, DIN_VPD_FT, DIN_VPD_FDIN, DIN_VPD_FDIN_VPD, FDIN_FPD, FDIN_VPD_FPD, FT_FPD, FT_FT, FDIN_FDIN,FDIN_VPD_FDIN_VPD, DIN_FPD1, DIN_FPD2
00053 };
00054 private:
00055 int ftimebins;
00056
00057 short *channelIn;
00058 short *channelShort;
00059 public:
00060 short *ADCkeep;
00061 private:
00062 int fOnBSL1;
00063 int fOnTCF;
00064 int fOnBSL2;
00065 int fOnClip;
00066 int fOnZSU;
00067
00068 int fConfiguredAltro;
00069 int fConfiguredBSL1;
00070 int fConfiguredTCF;
00071 int fConfiguredBSL2;
00072 int fConfiguredZSU;
00073
00074 int fBSL1mode;
00075 int fBSL1ValuePeDestal;
00076 int* fBSL1PedestalMem;
00077 int fBSL1polarity;
00078
00079 float fTCFK1;
00080 float fTCFK2;
00081 float fTCFK3;
00082 float fTCFL1;
00083 float fTCFL2;
00084 float fTCFL3;
00085
00086 int fTCFK1Int;
00087 int fTCFK2Int;
00088 int fTCFK3Int;
00089 int fTCFL1Int;
00090 int fTCFL2Int;
00091 int fTCFL3Int;
00092
00093 int fBSL2HighThreshold;
00094 int fBSL2LowThreshold;
00095 int fBSL2Offset;
00096 int fBSL2Presamples;
00097 int fBSL2Postsamples;
00098
00099 int fZSUThreshold;
00100 int fZSUMinSamplesaboveThreshold;
00101 int fZSUPresamples;
00102 int fZSUPostsamples;
00103
00104 void BaselineCorrection_1(int mode, int FixedPeDestal, int *PedestalMem, int polarity);
00105 void TailCancellationFilter_FixedPoint(int K1, int K2, int K3, int L1, int L2, int L3);
00106 void BaselineCorrection_2_RTL(int HighThreshold, int LowThreshold, int Offset, int Presamples, int Postsamples);
00107 void Clipping();
00108 void Zerosuppression(int Threshold, int MinSamplesaboveThreshold, int Presamples, int Postsamples);
00109
00110 short getElement(short* Array,int index);
00111 void setElement(short* Array,int index,short value);
00112
00113 int inBand(int ADC,int bsl, int LowThreshold, int HighThreshold);
00114 int inRange(int parameter,int Low,int High,const char *Module,const char *ParameterName);
00115 short GetShortChannel(int i);
00116 short GetKeepChannel(int i);
00117 int multiply36(int P, int N);
00118 long long mask(long long in, int left, int right);
00119 long long maskandshift(long long in, int left, int right);
00120 };