00001 //---------------------------------------------------------------------------// 00002 //bb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nu// 00003 // // 00004 // MAJORANA Simulation // 00005 // // 00006 // This code implementation is the intellectual property of the // 00007 // MAJORANA Collaboration. It is based on Geant4, an intellectual // 00008 // property of the RD44 GEANT4 collaboration. // 00009 // // 00010 // ********************* // 00011 // // 00012 // Neither the authors of this software system, nor their employing // 00013 // institutes, nor the agencies providing financial support for this // 00014 // work make any representation or warranty, express or implied, // 00015 // regarding this software system or assume any liability for its use. // 00016 // By copying, distributing or modifying the Program (or any work based // 00017 // on on the Program) you indicate your acceptance of this statement, // 00018 // and all its terms. // 00019 // // 00020 //bb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nubb0nu// 00021 //---------------------------------------------------------------------------// 00022 // 00023 // $Id: MJVWaveform.cc,v 1.2 2004/11/09 13:42:39 xliu Exp $ 00024 // 00025 // CLASS IMPLEMENTATION: MJVWaveform.cc 00026 // 00027 //---------------------------------------------------------------------------// 00033 // 00034 //---------------------------------------------------------------------------// 00045 //---------------------------------------------------------------------------// 00046 // 00047 00048 #include "io/MJLogger.hh" 00049 00050 //---------------------------------------------------------------------------// 00051 00052 #include "waveform/MJVWaveform.hh" //Present MJ Class Headers 00053 00054 //---------------------------------------------------------------------------// 00055 00056 MJVWaveform::MJVWaveform(): 00057 fChargeAllocated(false), fCurrentAllocated(false),fDigitizedAllocated(false), 00058 fChargeSignal(0), fCurrentSignal(0), fDigitizedSignal(0) 00059 {;} 00060 00061 //---------------------------------------------------------------------------// 00062 00063 MJVWaveform::MJVWaveform(const MJVWaveform & other) 00064 {;} 00065 00066 //---------------------------------------------------------------------------// 00067 00068 MJVWaveform::~MJVWaveform() 00069 { 00070 if(fChargeAllocated) delete [] fChargeSignal; 00071 if(fCurrentAllocated) delete [] fCurrentSignal; 00072 if(fDigitizedAllocated) delete [] fDigitizedSignal; 00073 } 00074 00075 //---------------------------------------------------------------------------// 00076 00077 void MJVWaveform::AddChargePoint(HepDouble charge) 00078 { 00079 if(fChargeAllocated && !fChargeArrayFull){ 00080 if(fChargeStep < fNumberOfChargePoints && !fChargeArrayFull) { 00081 fChargeSignal[fChargeStep] = charge; 00082 fChargeTime = fChargeStep++ * fChargeTimeStep; 00083 } else { 00084 fChargeArrayFull = true; 00085 MJLog(trace) << "MJVWaveform::AddChargePoint : fChargeSignal array full " 00086 << fChargeStep << " " << fNumberOfChargePoints << '\n'; 00087 } 00088 } else { 00089 MJLog(error) << "MJWaveform::AddChargePoint : Charge array not allocated." 00090 << " or full.\n"; 00091 } 00092 } 00093 00094 //---------------------------------------------------------------------------// 00095 00096 void MJVWaveform::AddCurrentPoint(HepDouble current) 00097 { 00098 if(fCurrentAllocated && !fCurrentArrayFull){ 00099 if(fCurrentStep < fNumberOfCurrentPoints) { 00100 fCurrentSignal[fCurrentStep] = current; 00101 fCurrentTime = fCurrentStep++ * fCurrentTimeStep; 00102 } else { 00103 fCurrentArrayFull = true; 00104 MJLog(trace)<<"MJVWaveform::AddCurrentPoint : fCurrentSignal array full " 00105 << fCurrentStep << " " << fNumberOfCurrentPoints << "\n"; 00106 } 00107 } else { 00108 MJLog(error)<<"MJWaveform::AddCurrentPoint : Current array not allocated" 00109 << " or full.\n"; 00110 } 00111 } 00112 00113 //---------------------------------------------------------------------------// 00114 00115 void MJVWaveform::AddDigitizedPoint(HepInt signal) 00116 { 00117 if(fDigitizedAllocated && !fDigitizedArrayFull){ 00118 if(fDigitizedStep < fNumberOfDigitizedPoints) { 00119 fDigitizedSignal[fDigitizedStep] = signal; 00120 fDigitizedTime = fDigitizedStep++ * fDigitizedTimeStep; 00121 } else { 00122 fDigitizedArrayFull = false; 00123 MJLog(trace)<<"MJVWaveform::AddDigitizedPoint : fDigitizedSignal array" 00124 << "full " << fDigitizedStep << " " 00125 << fNumberOfDigitizedPoints << '\n'; 00126 } 00127 } else { 00128 MJLog(error) << "MJWaveform::AddDigitizedPoint : Digitized array not " 00129 << "allocated or full.\n"; 00130 } 00131 } 00132 00133 //---------------------------------------------------------------------------// 00134 00135 void MJVWaveform::AllocateChargeSignal() 00136 { 00137 if(fNumberOfChargePoints > 0) { 00138 if(!(fChargeSignal = new HepDouble[fNumberOfChargePoints])){ 00139 MJLog(error) << "MJVWaveform::AllocateChargeSignal(): Array allocation" 00140 << " returned NULL pointer." << "\n"; 00141 MJLog(fatal); 00142 } 00143 } else { 00144 MJLog(error) << "MJVWaveform::AllocateChargeSignal(): Cannot allocate " 00145 << "array of size < 1 : " << fNumberOfChargePoints << "\n"; 00146 MJLog(fatal); 00147 } 00148 fChargeAllocated = true; 00149 fChargeArrayFull = false; 00150 fChargeStep = 0; 00151 fChargeTime = 0.0; 00152 MJLog(trace) << "MJVWaveform::AllocateChargeSignal(): Allocate array of" << 00153 " length : " << fNumberOfChargePoints << '\n'; 00154 } 00155 00156 //---------------------------------------------------------------------------// 00157 00158 void MJVWaveform::AllocateCurrentSignal() 00159 { 00160 if(fNumberOfCurrentPoints > 0) { 00161 if(!(fCurrentSignal = new HepDouble[fNumberOfCurrentPoints])){ 00162 MJLog(error) << "MJVWaveform::AllocateCurrentSignal(): Array allocation" 00163 << " returned NULL pointer." << "\n"; 00164 MJLog(fatal); 00165 } 00166 } else { 00167 MJLog(error) << "MJVWaveform::AllocateCurrentSignal(): Cannot allocate" << 00168 "array of size < 1 : " << fNumberOfCurrentPoints << "\n"; 00169 MJLog(fatal); 00170 } 00171 fCurrentAllocated = true; 00172 fCurrentArrayFull = false; 00173 fCurrentStep = 0; 00174 fCurrentTime = 0.0; 00175 MJLog(trace) << "MJVWaveform::AllocateCurrentSignal(): Allocate array of" << 00176 " length : " << fNumberOfCurrentPoints << '\n'; 00177 } 00178 00179 00180 //---------------------------------------------------------------------------// 00181 00182 void MJVWaveform::AllocateDigitizedSignal() 00183 { 00184 if(fNumberOfDigitizedPoints > 0) { 00185 if(!(fDigitizedSignal = new HepInt[fNumberOfDigitizedPoints])){ 00186 MJLog(error) << "MJVWaveform::AllocateDigitizedSignal(): Array" 00187 << " allocation returned NULL pointer." << "\n"; 00188 MJLog(fatal); 00189 } 00190 } else { 00191 MJLog(error) << "MJVWaveform::AllocateDigitizedSignal(): Cannot allocate"<< 00192 "array of size < 1 : " << fNumberOfDigitizedPoints << "\n"; 00193 MJLog(fatal); 00194 } 00195 fDigitizedAllocated = true; 00196 fDigitizedArrayFull = false; 00197 fDigitizedStep = 0; 00198 fDigitizedTime = 0.0; 00199 MJLog(trace) << "MJVWaveform::AllocateDigitizedSignal(): Allocated array"<< 00200 " of length : " << fNumberOfDigitizedPoints << 'n'; 00201 } 00202 00203 //---------------------------------------------------------------------------// 00204 00205 void MJVWaveform::AllocateChargeSignal(HepInt numberofpoints) 00206 { 00207 fNumberOfChargePoints = numberofpoints; 00208 AllocateChargeSignal(); 00209 } 00210 00211 //---------------------------------------------------------------------------// 00212 00213 void MJVWaveform::AllocateCurrentSignal(HepInt numberofpoints) 00214 { 00215 fNumberOfCurrentPoints = numberofpoints; 00216 AllocateCurrentSignal(); 00217 } 00218 00219 //---------------------------------------------------------------------------// 00220 00221 void MJVWaveform::AllocateDigitizedSignal(HepInt numberofpoints) 00222 { 00223 fNumberOfDigitizedPoints = numberofpoints; 00224 AllocateDigitizedSignal(); 00225 } 00226 00227 //---------------------------------------------------------------------------// 00228 00229 void MJVWaveform::IntegrateChargePoint(HepDouble charge) 00230 { 00231 if(fChargeAllocated && !fChargeArrayFull){ 00232 if(fChargeStep < fNumberOfChargePoints && !fChargeArrayFull) { 00233 fChargeSignal[fChargeStep] = fChargeStep ? 00234 charge + fChargeSignal[fChargeStep - 1] : charge; 00235 fChargeTime = fChargeStep++ * fChargeTimeStep; 00236 } else { 00237 fChargeArrayFull = true; 00238 MJLog(trace) << "MJVWaveform::AddChargePoint : fChargeSignal array full " 00239 << fChargeStep << " " << fNumberOfChargePoints << '\n'; 00240 } 00241 } else { 00242 MJLog(error) << "MJWaveform::AddChargePoint : Charge array not allocated." 00243 << " or full.\n"; 00244 } 00245 } 00246 00247 //---------------------------------------------------------------------------// 00248 00249 void MJVWaveform::SetAllZero() 00250 { 00251 HepInt i; 00252 00253 if(fChargeAllocated) 00254 for(i = 0; i < fNumberOfChargePoints; i++) 00255 fChargeSignal[i] = 0.0; 00256 if(fCurrentAllocated) 00257 for(i = 0; i < fNumberOfCurrentPoints; i++) 00258 fCurrentSignal[i] = 0.0; 00259 if(fDigitizedAllocated) 00260 for(i = 0; i < fNumberOfDigitizedPoints; i++) 00261 fDigitizedSignal[i] = 0; 00262 fChargeStep = fCurrentStep = fDigitizedStep = 0; 00263 fChargeTime = fCurrentTime = fDigitizedTime = 0.0; 00264 } 00265 00266 //---------------------------------------------------------------------------// 00267 //---------------------------------------------------------------------------// 00268 00269 00270