00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #define DIAGNOSTICS
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <Stiostream.h>
00026 #include <unistd.h>
00027 #include "Stiostream.h"
00028
00029 #include <string>
00030 #include <vector>
00031 #include <utility>
00032 #include <algorithm>
00033
00034
00035 #include "Randomize.h"
00036
00037 #include "StCoordinates.hh"
00038 #include "StTpcCoordinateTransform.hh"
00039
00040
00041
00042 #include "StTpcSimpleGeometry.hh"
00043 #include "StTpcSimpleSlowControl.hh"
00044 #include "StTpcSimpleElectronics.hh"
00045 #include "StSimpleMagneticField.hh"
00046 #include "StTrsDeDx.hh"
00047
00048
00049 #include "StTrsFastChargeTransporter.hh"
00050 #include "StTrsSlowAnalogSignalGenerator.hh"
00051 #include "StTrsFastDigitalSignalGenerator.hh"
00052
00053
00054 #include "StTrsChargeSegment.hh"
00055 #include "StTrsMiniChargeSegment.hh"
00056 #include "StTrsAnalogSignal.hh"
00057 #include "StTrsWireBinEntry.hh"
00058 #include "StTrsWireHistogram.hh"
00059
00060 #include "StTrsSector.hh"
00061 #include "StTrsDigitalSector.hh"
00062
00063 #define VERBOSE 1
00064 #define ivb if(VERBOSE)
00065
00066
00067
00068
00069 int main (int argc,char* argv[])
00070 {
00071 int breakNumber = 1;
00072
00073 int opt = 1;
00074 int c;
00075 bool usage = (argc > 1 ? false : true);
00076 while ((c = getopt(argc, argv,"b:")) != EOF)
00077 switch (c) {
00078 case 'b':
00079 if (argc < ++opt +1)
00080 usage = true;
00081 breakNumber = atoi(argv[opt++]);
00082 break;
00083 default:
00084 break;
00085 }
00086
00087 PR(breakNumber);
00088
00089
00090
00091
00092
00093
00094 string geoFile("../run/TPCgeo.conf");
00095 if (access(geoFile.c_str(),R_OK)) {
00096 cerr << "ERROR:\n" << geoFile << " cannot be opened" << endl;
00097
00098 cerr << "Exitting..." << endl;
00099 exit(1);
00100 }
00101
00102 string scFile("../run/sc.conf");
00103 if (access(scFile.c_str(),R_OK)) {
00104 cerr << "ERROR:\n" << scFile << " cannot be opened" << endl;
00105 cerr << "Exitting..." << endl;
00106 exit(1);
00107 }
00108
00109 string electronicsFile("../run/electronics.conf");
00110 if (access(electronicsFile.c_str(),R_OK)) {
00111 cerr << "ERROR:\n" << electronicsFile << " cannot be opened" << endl;
00112 cerr << "Exitting..." << endl;
00113 exit(1);
00114 }
00115
00116 string magFile("../run/example.conf");
00117 if (access(magFile.c_str(),R_OK)) {
00118 cerr << "ERROR:\n" << magFile << " cannot be opened" << endl;
00119 cerr << "Exitting..." << endl;
00120 exit(1);
00121 }
00122
00123
00124
00125
00126 StTpcGeometry *geomDb =
00127 StTpcSimpleGeometry::instance(geoFile.c_str());
00128
00129 StTpcSlowControl *scDb =
00130 StTpcSimpleSlowControl::instance(scFile.c_str());
00131
00132
00133 StMagneticField *magDb =
00134 StSimpleMagneticField::instance(magFile.c_str());
00135
00136 StTpcElectronics *electronicsDb =
00137 StTpcSimpleElectronics::instance(electronicsFile.c_str());
00138
00139 string gas("Ar");
00140 StTrsDeDx myEloss(gas);
00141 myEloss.print();
00142
00143
00144
00145
00146 StTrsSector *sector = new StTrsSector(geomDb);
00147
00148
00149 StTrsDigitalSector *digitalSector = new StTrsDigitalSector(geomDb);
00150
00151
00152
00153
00154 StTrsChargeTransporter *trsTransporter =
00155 StTrsFastChargeTransporter::instance(geomDb, scDb, &myEloss, magDb);
00156
00157
00158
00159
00160
00161
00162 StTrsWireHistogram *theWirePlane =
00163 StTrsWireHistogram::instance(geomDb, scDb);
00164
00165
00166
00167
00168 StTrsAnalogSignalGenerator *trsAnalogSignalGenerator =
00169 StTrsSlowAnalogSignalGenerator::instance(geomDb, scDb, electronicsDb, sector);
00170 dynamic_cast<StTrsSlowAnalogSignalGenerator*>(trsAnalogSignalGenerator)->
00171 setChargeDistribution(StTrsSlowAnalogSignalGenerator::endo);
00172
00173
00174 dynamic_cast<StTrsSlowAnalogSignalGenerator*>(trsAnalogSignalGenerator)->
00175
00176 setElectronicSampler(StTrsSlowAnalogSignalGenerator::symmetricGaussianApproximation);
00177
00178
00179
00180
00181 trsAnalogSignalGenerator->setDeltaPad(2);
00182
00183
00184
00185
00186 StTrsDigitalSignalGenerator *trsDigitalSignalGenerator =
00187 StTrsFastDigitalSignalGenerator::instance(electronicsDb, sector, digitalSector);
00188
00189
00190
00191 double bg = 3;
00192
00193
00194 float dE = 2.444*keV;
00195 float dS = 1.*centimeter;
00196 vector<int> all[3];
00197
00198 StThreeVector<double> position(0.,1500.*millimeter,200.*millimeter);
00199 StThreeVector<double> momentum(1.*GeV,0.,0.);
00200
00201 StTrsChargeSegment aSegment(position,
00202 momentum,
00203 dE,
00204 dS);
00205
00206 PR(aSegment);
00207 list<StTrsMiniChargeSegment> comp;
00208 list<StTrsMiniChargeSegment>::iterator iter;
00209
00210 aSegment.split(&myEloss, magDb, breakNumber, &comp);
00211
00212 copy(comp.begin(), comp.end(), ostream_iterator<StTrsMiniChargeSegment>(cout,"\n"));
00213 cout << endl;
00214
00215 PR(comp.size());
00216
00217
00218 for(iter = comp.begin();
00219 iter != comp.end();
00220 iter++) {
00221
00222 cout << endl;
00223 PR(*iter);
00224
00225
00226
00227 trsTransporter->transportToWire(*iter);
00228
00229
00230
00231
00232
00233
00234 StTrsWireBinEntry anEntry(iter->position(), iter->charge());
00235 PR(anEntry);
00236 theWirePlane->addEntry(anEntry);
00237
00238 }
00239
00240 cout << "\a***************************\a\n" << endl;
00241
00242
00243
00244
00245
00246
00247
00248 trsAnalogSignalGenerator->inducedChargeOnPad(theWirePlane);
00249
00250
00251 cout << "sampleAnalogSiganl() " << endl;
00252 trsAnalogSignalGenerator->sampleAnalogSignal();
00253
00254
00255
00256
00257
00258 trsDigitalSignalGenerator->digitizeSignal();
00259
00260
00261
00262
00263
00264
00265 return 0;
00266 }