17 #include <JANA/JApplication.h>
18 #include <JANA/JFactory.h>
50 gPARMS->SetDefaultParameter(
"CDCCOSMIC:EXCLUDERING", EXCLUDERING,
"Ring Excluded from the fit");
51 gPARMS->SetDefaultParameter(
"KALMAN:RING_TO_SKIP", EXCLUDERING);
53 if(EXCLUDERING == 0 ){
54 jout <<
"Did not set CDCCOSMIC:EXCLUDERING on the command line -- Using Biased fits" << endl;
65 JCalibration *jcalib = dapp->GetJCalibration(runnumber);
68 unsigned int numstraws[28]={42,42,54,54,66,66,80,80,93,93,106,106,123,123,
69 135,135,146,146,158,158,170,170,182,182,197,197,
72 sag_phi_offset.clear();
73 vector< map<string, double> > tvals;
74 unsigned int straw_count=0,ring_count=0;
75 if (jcalib->Get(
"CDC/sag_parameters", tvals)==
false){
76 vector<double>
temp,temp2;
77 for(
unsigned int i=0; i<tvals.size(); i++){
78 map<string, double> &row = tvals[i];
80 temp.push_back(row[
"offset"]);
81 temp2.push_back(row[
"phi"]);
84 if (straw_count==numstraws[ring_count]){
85 max_sag.push_back(temp);
86 sag_phi_offset.push_back(temp2);
103 vector <const DChargedTrack *> chargedTrackVector;
104 loop->Get(chargedTrackVector);
106 for (
unsigned int iTrack = 0; iTrack < chargedTrackVector.size(); iTrack++){
115 if (thisTimeBasedTrack->FOM < 1E-20)
continue;
116 if (!thisTimeBasedTrack->IsSmoothed)
continue;
117 vector<DTrackFitter::pull_t> pulls = thisTimeBasedTrack->
pulls;
119 for (
unsigned int i = 0; i < pulls.size(); i++){
121 double residual = thisPull.
resi;
123 double time = thisPull.
tcorr;
124 double docaphi = thisPull.
docaphi;
125 if (docaphi > TMath::Pi()) docaphi -= 2 * TMath::Pi();
126 double docaz = thisPull.
z;
127 double dz = docaz - 92.0;
128 bool isMiddle =
false, isDownstream =
false;
129 if (docaz > 70.0 && docaz < 110.0) isMiddle =
true;
130 if (docaz > 140.0) isDownstream =
true;
131 if (!isMiddle && !isDownstream)
continue;
132 double predictedDistance = thisPull.
d;
133 double distance = residual + predictedDistance;
136 if (thisCDCHit == NULL)
continue;
141 if ( EXCLUDERING != 0 && ring != EXCLUDERING)
continue;
145 sprintf(folder,
"Ring %.2i", ring);
147 const char * regionString =
"";
148 const char * regionStringPerStraw =
"";
150 regionString =
"CDCReco_Middle";
151 regionStringPerStraw =
"CDCPerStrawReco_Middle";
153 else if (isDownstream){
154 regionString =
"CDCReco_Downstream";
155 regionStringPerStraw =
"CDCPerStrawReco_Downstream";
159 Fill1DHistogram(regionString, folder,
"Residuals", residual,
"Residuals; Residual [cm]; Entries", 200, -0.05, 0.05);
161 thisTimeBasedTrack->pmag(), residual,
162 "Residual Vs. Momentum; Momentum [GeV/c]; Residual [cm]",
163 50, 0.0, 12.0, 100, -0.05, 0.05);
165 thisTimeBasedTrack->momentum().Theta()*TMath::RadToDeg(), residual,
166 "Residual Vs. Theta; Theta [deg]; Residual [cm]",
167 60, 0.0, 180.0, 100, -0.05, 0.05);
170 "Residual Vs. Z; Z (Measured from CDC center) [cm]; Residual [cm]",
171 100, -75.0, 75.0, 100, -0.05, 0.05);
173 thisTimeBasedTrack->FOM, residual,
174 "Residual Vs. Tracking FOM; Tracking FOM; Residual [cm]",
175 100, 0.0, 1.0, 100, -0.05, 0.05);
176 Fill1DHistogram(regionString, folder,
"Drift Time", time,
"Drift Time; Drift Time [ns]; Entries", 500, -10, 1500);
177 Fill1DHistogram(regionString, folder,
"Drift Distance", distance,
"Drift Distance; Drift Distance [cm]; Entries", 250, 0.0, 1.2);
178 Fill1DHistogram(regionString, folder,
"Predicted Drift Distance", predictedDistance,
"Predicted Drift Distance; Drift Distance [cm]; Entries", 250, 0.0, 1.2);
181 char strawtitle[256];
182 sprintf(strawname,
"Straw %.3i Drift time Vs phi_DOCA", straw);
183 sprintf(strawtitle,
"Ring %.2i Straw %.3i Drift time Vs phi_DOCA;#phi_{DOCA};Drift Time [ns]", ring, straw);
185 strawtitle, 8, -3.14, 3.14, 500, -10, 1500);
186 sprintf(strawname,
"Straw %.3i Predicted Drift Distance Vs phi_DOCA", straw);
187 sprintf(strawtitle,
"Ring %.2i Straw %.3i Predicted Drift Distance Vs phi_DOCA; #phi_{DOCA};Predicted Distance [cm]", ring, straw);
188 Fill2DHistogram(regionStringPerStraw,folder,strawname, docaphi, predictedDistance,
189 strawtitle, 16, -3.14, 3.14, 400, 0.0, 1.2);
190 char residualname[100];
191 char residualtitle[256];
192 sprintf(residualname,
"Straw %.3i Residual", straw);
193 sprintf(residualtitle,
"Ring %.2i Straw %.3i Residual;Residual [cm]", ring, straw);
194 Fill1DHistogram(regionStringPerStraw,folder,residualname, residual, residualtitle, 200, -0.05, 0.05);
195 sprintf(residualname,
"Straw %.3i Residual Vs. Z", straw);
196 sprintf(residualtitle,
"Ring %.2i Straw %.3i Residual;Z [cm]; Residual [cm]", ring, straw);
200 30, -75.0,75.0,200, -0.05, 0.05);
204 double delta = max_sag[ring - 1][straw - 1]*(1.-dz*dz/5625.)
205 *cos(docaphi + sag_phi_offset[ring - 1][straw - 1]);
206 sprintf(strawname,
"Straw %.3i residual Vs delta", straw);
207 sprintf(strawtitle,
"Ring %.2i Straw %.3i Residual Vs #delta; #delta [cm]; Residual [cm]",ring, straw);
208 double binwidth = 0.005;
209 if ( 2 * max_sag[ring - 1][straw - 1] > binwidth){
210 Fill2DHistogram(regionStringPerStraw,folder,strawname, delta, residual,
211 strawtitle, Int_t(2 * max_sag[ring - 1][straw - 1] / binwidth), -1 * max_sag[ring - 1][straw - 1], max_sag[ring - 1][straw - 1], 100, -0.05, 0.05);
216 sprintf(binname,
"Straw %.3i Predicted Drift Distance Vs. Drift Time", straw);
217 sprintf(bintitle,
"Ring %.2i Straw %.3i Predicted Drift Distance Vs. Drift Time", ring, straw);
218 Fill2DHistogram(regionStringPerStraw,folder,binname, time, predictedDistance,
219 bintitle, 250, -50, 200, 250, 0.0, 0.4);
221 sprintf(binname,
"Straw %.3i Predicted Drift Distance Vs. delta", straw);
222 sprintf(bintitle,
"Ring %.2i Straw %.3i Predicted Drift Distance Vs. #delta;#delta [cm]; Predicted Drift Distance - Nominal Radius [cm]", ring, straw);
223 Fill2DHistogram(regionStringPerStraw,folder,binname, delta, predictedDistance - 0.78,
224 bintitle, 20, -0.25, 0.25, 250, -0.25, 0.25);
227 sprintf(binname,
"Straw %.3i Predicted Drift Distance Vs. Drift Time Positive Delta", straw);
228 sprintf(bintitle,
"Ring %.2i Straw %.3i Predicted Drift Distance Vs. Drift Time (Positive Delta)", ring, straw);
229 Fill2DHistogram(regionStringPerStraw,folder,binname, time, predictedDistance,
230 bintitle, 250, -10, 1500, 50, 0.0, 1.2);
231 sprintf(binname,
"Straw %.3i Residual Vs. Drift Time Positive Delta", straw);
232 sprintf(bintitle,
"Ring %.2i Straw %.3i Residual Vs. Drift Time (Positive Delta)", ring, straw);
234 bintitle, 100, -10, 1500, 100, -0.05, 0.05);
235 sprintf(binname,
"Straw %.3i Residual Positive Delta", straw);
236 sprintf(bintitle,
"Ring %.2i Straw %.3i Residual (Positive Delta); Residual [cm]; Entries", ring, straw);
237 Fill1DHistogram(regionStringPerStraw,folder,binname, residual, bintitle, 200, -0.05, 0.05);
240 sprintf(binname,
"Straw %.3i Predicted Drift Distance Vs. Drift Time Negative Delta", straw);
241 sprintf(bintitle,
"Ring %.2i Straw %.3i Predicted Drift Distance Vs. Drift Time (Negative Delta)", ring, straw);
242 Fill2DHistogram(regionStringPerStraw,folder,binname, time, predictedDistance,
243 bintitle, 250, -10, 1500, 50, 0.0, 1.2);
244 sprintf(binname,
"Straw %.3i Residual Vs. Drift Time Negative Delta", straw);
245 sprintf(bintitle,
"Ring %.2i Straw %.3i Residual Vs. Drift Time (Negative Delta)", ring, straw);
247 bintitle, 100, -10, 1500, 100, -0.05, 0.05);
248 sprintf(binname,
"Straw %.3i Residual Negative Delta", straw);
249 sprintf(bintitle,
"Ring %.2i Straw %.3i Residual (Negative Delta); Residual [cm]; Entries", ring, straw);
250 Fill1DHistogram(regionStringPerStraw,folder,binname, residual, bintitle, 200, -0.05, 0.05);
253 Fill2DHistogram(regionString, folder,
"Residual Vs. Drift Time", time, residual,
254 "Residual Vs. Drift Time; Drift Time [ns]; Residual [cm]",
255 500, -10, 1500, 100, -0.05, 0.05);
256 Fill2DHistogram(regionString, folder,
"Residual Vs. Drift Distance", distance, residual,
257 "Residual Vs. Drift Distance; Drift Distance [cm]; Residual [cm]",
258 50, 0.0, 1.0, 100, -0.05, 0.05);
259 Fill2DHistogram(regionString, folder,
"Residual Vs. Predicted Drift Distance", predictedDistance, residual,
260 "Residual Vs. Predicted Drift Distance; Predicted Drift Distance [cm]; Residual [cm]",
261 50, 0.0, 1.0, 100, -0.05, 0.05);
263 Fill2DHistogram(regionString, folder,
"Predicted Drift Distance Vs. Drift Time", time, predictedDistance,
264 "Predicted Drift Distance Vs. Drift Time; Drift Time [ns]; Predicted Drift Distance [cm]",
265 500, -10, 1500, 100, 0.0, 1.0);
JEventProcessor_CDC_PerStrawReco()
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t fini(void)
Called after last event of last event source has been processed.
sprintf(text,"Post KinFit Cut")
const DTrackTimeBased * Get_TrackTimeBased(void) const
jerror_t init(void)
Called once at program start.
~JEventProcessor_CDC_PerStrawReco()
const DCDCTrackHit * cdc_hit
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
vector< DTrackFitter::pull_t > pulls
Holds pulls used in chisq calc. (not including off-diagonals)
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.