28 #define BuiltInNaN __builtin_nan("")
36 map<string, double> tofparms;
38 if ( !loop->GetCalib(
"TOF/tof_parms", tofparms)){
41 C_EFFECTIVE = tofparms[
"TOF_C_EFFECTIVE"];
43 E_THRESHOLD = tofparms[
"TOF_E_THRESHOLD"];
44 ATTEN_LENGTH = tofparms[
"TOF_ATTEN_LENGTH"];
46 cout <<
"DTOFPaddleHit_factory: Error loading values from TOF data base" <<endl;
56 TOF_NUM_PLANES = TOFGeom[0]->Get_NPlanes();
57 TOF_NUM_BARS = TOFGeom[0]->Get_NBars();
58 HALFPADDLE = TOFGeom[0]->Get_HalfLongBarLength();
60 ENERGY_ATTEN_FACTOR=exp(HALFPADDLE/ATTEN_LENGTH);
61 TIME_COINCIDENCE_CUT=2.*HALFPADDLE/C_EFFECTIVE;
63 if(loop->GetCalib(
"TOF/propagation_speed", propagation_speed))
64 jout <<
"Error loading /TOF/propagation_speed !" << endl;
66 if (loop->GetCalib(
"TOF/attenuation_lengths",AttenuationLengths))
67 jout <<
"Error loading /TOF/attenuation_lengths !" <<endl;
80 vector<const DTOFHit*> hits;
81 loop->Get(hits,TOF_POINT_TAG.c_str());
83 vector<const DTOFHit*> P1hitsL;
84 vector<const DTOFHit*> P1hitsR;
85 vector<const DTOFHit*> P2hitsL;
86 vector<const DTOFHit*> P2hitsR;
100 for (
unsigned int i = 0; i < hits.size(); i++){
105 P2hitsR.push_back(hit);
108 P2hitsL.push_back(hit);
113 P1hitsR.push_back(hit);
116 P1hitsL.push_back(hit);
123 for (
unsigned int i=0; i<P1hitsL.size(); i++){
124 int bar = P1hitsL[i]->bar;
125 if ((bar < TOFGeom[0]->Get_FirstShortBar() ) || (bar > TOFGeom[0]->Get_LastShortBar())) {
126 for (
unsigned int j=0; j<P1hitsR.size(); j++){
127 if (bar==P1hitsR[j]->bar
128 && fabs(P1hitsR[j]->t-P1hitsL[i]->t)<TIME_COINCIDENCE_CUT
129 && (P1hitsL[i]->dE>E_THRESHOLD || P1hitsR[j]->dE>E_THRESHOLD)){
135 hit->AddAssociatedObject(P1hitsL[i]);
138 hit->AddAssociatedObject(P1hitsR[j]);
140 _data.push_back(hit);
146 for (
unsigned int i=0; i<P1hitsL.size(); i++){
147 int bar = P1hitsL[i]->bar;
150 if ((bar < TOFGeom[0]->Get_FirstShortBar()) || (bar > TOFGeom[0]->Get_LastShortBar())) {
151 for (
unsigned int j=0; j<P1hitsR.size(); j++){
152 if (bar==P1hitsR[j]->bar){
159 if (P1hitsL[i]->dE>E_THRESHOLD){
167 hit->AddAssociatedObject(P1hitsL[i]);
169 _data.push_back(hit);
175 for (
unsigned int i=0; i<P1hitsR.size(); i++){
176 int bar = P1hitsR[i]->bar;
179 if ((bar < TOFGeom[0]->Get_FirstShortBar()) || (bar > TOFGeom[0]->Get_LastShortBar())) {
180 for (
unsigned int j=0; j<P1hitsL.size(); j++){
181 if (bar==P1hitsL[j]->bar){
188 if (P1hitsR[i]->dE>E_THRESHOLD){
196 hit->AddAssociatedObject(P1hitsR[i]);
198 _data.push_back(hit);
203 for (
unsigned int i=0; i<P2hitsL.size(); i++){
204 int bar = P2hitsL[i]->bar;
205 if ((bar < TOFGeom[0]->Get_FirstShortBar()) || (bar > TOFGeom[0]->Get_LastShortBar() )){
206 for (
unsigned int j=0; j<P2hitsR.size(); j++){
207 if (bar==P2hitsR[j]->bar
208 && fabs(P2hitsR[j]->t-P2hitsL[i]->t)<TIME_COINCIDENCE_CUT
209 && (P2hitsL[i]->dE>E_THRESHOLD || P2hitsR[j]->dE>E_THRESHOLD)){
215 hit->AddAssociatedObject(P2hitsL[i]);
218 hit->AddAssociatedObject(P2hitsR[j]);
220 _data.push_back(hit);
226 for (
unsigned int i=0; i<P2hitsL.size(); i++){
227 int bar = P2hitsL[i]->bar;
230 if ((bar < TOFGeom[0]->Get_FirstShortBar()) || (bar > TOFGeom[0]->Get_LastShortBar())) {
231 for (
unsigned int j=0; j<P2hitsR.size(); j++){
232 if (bar==P2hitsR[j]->bar){
239 if (P2hitsL[i]->dE>E_THRESHOLD){
247 hit->AddAssociatedObject(P2hitsL[i]);
249 _data.push_back(hit);
255 for (
unsigned int i=0; i<P2hitsR.size(); i++){
256 int bar = P2hitsR[i]->bar;
259 if ((bar < TOFGeom[0]->Get_FirstShortBar()) || (bar > TOFGeom[0]->Get_LastShortBar())) {
260 for (
unsigned int j=0; j<P2hitsL.size(); j++){
261 if (bar==P2hitsL[j]->bar){
268 if (P2hitsR[i]->dE>E_THRESHOLD){
276 hit->AddAssociatedObject(P2hitsR[i]);
278 _data.push_back(hit);
284 for (
int i=0;i<(int)_data.size(); i++) {
289 if (hit->
E_north > E_THRESHOLD) {
292 if (hit->
E_south > E_THRESHOLD) {
298 double v=propagation_speed[id];
309 float xl = HALFPADDLE - pos;
310 float xr = HALFPADDLE + pos;
311 int idl = hit->
orientation*TOF_NUM_PLANES*TOF_NUM_BARS + hit->
bar-1;
312 int idr = idl+TOF_NUM_BARS;
313 float d1 = AttenuationLengths[idl][0];
314 float d2 = AttenuationLengths[idl][1];
316 float att_left = ( TMath::Exp(-144./d1) + TMath::Exp(-144./d2)) /
317 ( TMath::Exp(-xl/d1) + TMath::Exp(-xl/d2));
318 d1 = AttenuationLengths[idr][0];
319 d2 = AttenuationLengths[idr][1];
320 float att_right = ( TMath::Exp(-144./d1) + TMath::Exp(-144./d2)) /
321 ( TMath::Exp(-xr/d1) + TMath::Exp(-xr/d2));
jerror_t brun(JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
jerror_t evnt(JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
File: DTOFHit.h Created: Tue Jan 18 16:15:26 EST 2011 Creator: B. Zihlmann Purpose: Container class t...