75 virtual InitStatus
Init();
76 virtual void Exec(Option_t* opt);
87 Double_t
x[4] = {-999., -999.,-999.,-999.};
88 Double_t
y[4] = {-999., -999.,-999.,-999.};
89 Double_t
z[4] = {-999., -999.,-999.,-999.};
92 Double_t
param[4] = {999., 999., 999., 999.};
103 TClonesArray* fBmnSiDigitsArray;
104 TClonesArray* fSiTracks;
106 TString fOutputHitsBranchName;
107 TClonesArray* fBmnSiliconHitsArray;
108 TClonesArray* fBmnSiliconHitsXArray;
109 TClonesArray* fBmnSiliconHitsXpArray;
110 TClonesArray* fBmnSiliconHitsXYArray;
111 TClonesArray* fBmnHitsArray;
112 TClonesArray* fBmnHitsArray2;
113 TString fOutputFileName;
114 TString fInputBranchName;
115 TString fInputBranchName2;
123 Double_t half_target_regionX;
124 Double_t half_target_regionY;
126 Double_t Z0_SRC_target;
133 Double_t *AmatrInverted;
135 Double_t *AmatrArray;
137 Double_t *shiftStXtoGlob;
138 Double_t *shiftStYtoGlob;
140 Double_t *SensitiveAreaY;
142 Double_t *Ampl_strXp;
152 Double_t **shiftYbelow;
154 Double_t **Xforglfit;
155 Double_t **Xpforglfit;
156 Double_t **Yforglfit;
157 Double_t **SigmXforglfit;
158 Double_t **SigmXpforglfit;
159 Double_t **SigmYforglfit;
160 Double_t **ZstnCforglfit;
161 Double_t ***DigitsArrayX;
162 Double_t ***DigitsArrayXp;
165 Double_t ***XClust_width;
166 Double_t ***XpClust_width;
169 Double_t ***XspClust;
170 Double_t ***XpspClust;
171 Double_t ***XspClust_width;
172 Double_t ***XpspClust_width;
174 Double_t ***sumQxpsp;
177 Double_t ***XspCoord;
178 Double_t ***XpspCoord;
179 Double_t ***YspCoord;
184 Double_t ***SigmspXp;
186 Double_t ***leftoverXsp;
187 Double_t ***leftoverXpsp;
188 Double_t ***leftoverYsp;
189 Double_t ***leftoverXsigsp;
190 Double_t ***leftoverXpsigsp;
191 Double_t ***leftoverYsigsp;
192 Double_t ***leftoverX;
193 Double_t ***leftoverXp;
194 Double_t ***leftoverXsig;
195 Double_t ***leftoverXpsig;
197 vector<tracksX> vec_tracks;
198 vector<tracksX> CleanTr;
199 vector<MC_points> vec_points;
201 TH1D *hNpoint, *hChiSquareNdf, *hNtracks, *hAxglob, *hBxglob, *hAyglob,*hByglob, *hY_st_1,*hY_st_2,*hY_st_3, *hdY_st_1,*hdY_st_2,*hdY_st_3,
202 *hX_st_1,*hX_st_2,*hX_st_3, *hdX_st_1,*hdX_st_2,*hdX_st_3, *hdXp_st_1,*hdXp_st_2,*hdXp_st_3,
203 *N_eff,* D_eff,* E_eff, *hdX_st1_st2, *hdX_st2_st3, *hdX_st1_st3,*hdY_st1_st2, *hdY_st2_st3, *hdY_st1_st3,*hdXst1_0_st2_0,*hdXst1_0_st2_1,*hdXst1_1_st2_0,*hdXst1_1_st2_1,
204 *hdXst1_2_st2_0,*hdXst1_2_st2_1,*hdXst1_3_st2_0,*hdXst1_3_st2_1,*hdXst2_0_st3_1,*hdXst2_0_st3_2,*hdXst2_1_st3_1,*hdXst2_1_st3_2,*hdYst1_0_st2_0,
205 *hdYst1_0_st2_1,*hdYst1_1_st2_0,*hdYst1_1_st2_1,*hdYst1_2_st2_0,*hdYst1_2_st2_1,*hdYst1_3_st2_0,*hdYst1_3_st2_1,*hdYst2_0_st3_1,*hdYst2_0_st3_2,
206 *hdYst2_1_st3_1,*hdYst2_1_st3_2,*hX13_X2_m0,*hX13_X2_m1, *hXp13_Xp2_m0,*hXp13_Xp2_m1, *hY13_Y2_m0,*hY13_Y2_m1, *hY1m0_Y23, *hY1m1_Y23, *hY1m2_Y23, *hY1m3_Y23,
207 *hAx_first_tr, *hAx_more_first_tr, *hdAx_MC_tr, *hdAy_MC_tr,*hdX_MC_tr, *hdY_MC_tr,
208 *hAxsi_mctrue,*hAysi_mctrue,*hBxsi_mctrue,*hBysi_mctrue,
209 *hdAx_MC_tr_comb, *hdAy_MC_tr_comb, *hdX_MC_tr_comb, *hdY_MC_tr_comb,
210 *hDen_mctrSi, *hNum_mctrSi,*hEff_mctrSi, *hNtrsi_mc, *hNtrsi_reco,
211 *hDen_mcreaction, *hNum_mcreaction,*hEff_mcreaction,
212 *hdXp3_mod1, *hdXp3_mod2, *hdXXp3_mod1, *hdXXp3_mod2, *hXXp12CheckLeftover, *hXXp12CheckLeftover03,
213 *hXSi1_run8, *hXSi2_run8, *hYSi1_run8, *hYSi2_run8;
214 TH2D *hvertexXY, * hvertex_aver_XY,* hprofile_beam_z1,* hprofile_beam_z2,* hprofile_beam_z3, *hdYvsYst_1,*hdYvsYst_2,*hdYvsYst_3,
215 *hdXvsXst_1,*hdXvsXst_2,*hdXvsXst_3,
216 *hdYvsYst1_mod0, *hdYvsYst1_mod1,*hdYvsYst1_mod2,*hdYvsYst1_mod3,*hdYvsYst2_mod0,*hdYvsYst2_mod1,*hdYvsYst3_mod1,*hdYvsYst3_mod2,
217 *hdXvsXst1_0,*hdXvsXst1_1,*hdXvsXst1_2,*hdXvsXst1_3,*hdXvsXst2_0,*hdXvsXst2_1,*hdXvsXst3_1,*hdXvsXst3_2,
218 *hSi_st3mc, *hSi_st2mc, * hSi_st1mc, *hNtrsi_mc_vs_reco, *hY_XSisp1, *hY_XSisp2, *hY_XSisp3, *hY_XSisp1bef, *hY_XSisp2bef,
219 *hYXSi1_run8, *hYXSi2_run8;
220 vector<TH1D*> hoccupancyX1, hoccupancyX2, hoccupancyX3, hoccupancyXp1, hoccupancyXp2, hoccupancyXp3;
222 void StripsReading(Double_t ***, Double_t ***);
223 void PrepareArraysToProcessEvent();
224 void Case1(Int_t **, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, vector<tracksX>&,
225 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***);
226 void Case2(Int_t & , Int_t **, Double_t ***, Double_t ***, Double_t ***,Double_t ***, Double_t ***, Double_t ***, Int_t **, Int_t **,Double_t ***, Double_t ***, Double_t ***, Double_t ***, vector<tracksX>&,
227 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***,
228 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***);
229 void Case3(Int_t **, Double_t ***, Double_t ***, Double_t ***,Double_t ***, Double_t ***, Double_t ***, Int_t **, Int_t **,Double_t ***, Double_t ***, Double_t ***, Double_t ***, vector<tracksX>&,
230 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***,
231 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***);
232 void Case4(Int_t & , Int_t **, Double_t ***, Double_t ***, Double_t ***,Double_t ***, Double_t ***, Double_t ***, Int_t **, Int_t **,Double_t ***, Double_t ***, Double_t ***, Double_t ***, vector<tracksX>&,
233 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***,
234 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***);
236 void Clustering( Double_t***, Double_t *** , Double_t *** , Double_t *** , Double_t *** , Int_t **, Double_t *** , Double_t *** , Double_t *** , Int_t **);
237 void GlobalFit( Double_t **, Double_t **, Double_t **,Double_t **, Double_t **, Double_t **, Double_t *);
238 bool InvertMatrix(Double_t *, Double_t *);
239 void GetXYspatial(Int_t **NClX, Int_t **NClXp, Double_t ***XCoor, Double_t ***XpCoor, Double_t ***Xsp, Double_t ***Xpsp, Double_t ***Ysp, Int_t **NXYsp, Double_t ***SigmX, Double_t ***SigmXp, Double_t ***SigspX, Double_t ***SigspXp, Double_t ***SigspY,
240 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***,
241 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***);
242 void CoordinateCalculation(Int_t **, Int_t **, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Int_t **,
243 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***,
244 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, vector<MC_points>&, Int_t ***);
245 void calculationOfChi2(Double_t **, Double_t **, Double_t **, Double_t **, Int_t *, Int_t *, Double_t & , Double_t *);
246 void CoordinateAlignment( Int_t **, Double_t ***, Double_t ***, Double_t ***, Int_t **, Int_t **, Double_t ***, Double_t ***);
247 void RecordingTracksAfterSpatialPoints(vector<tracksX> & , vector<tracksX> & );
248 void RecordingTracks(vector<tracksX> & , vector<tracksX> & );
249 void RecordingTracks_case3(vector<tracksX> & , vector<tracksX> & );
250 void CheckPoints(Int_t **, Int_t **, Double_t ***, Double_t ***, Double_t ***, Double_t ***,Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***,
251 Int_t **, vector<tracksX> & ,Int_t **, Int_t **,Int_t **, Double_t ***, Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***);
252 void CheckLeftover(Int_t **, Int_t **,Int_t **, Double_t ***, Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***,Double_t ***, vector<tracksX> &,
253 Int_t **, Double_t ***, Double_t ***, Double_t ***, Double_t ***);
254 void PrintAllTracks(vector<tracksX> & );
255 void CountSpatialPoints(Int_t **, Int_t *);
256 void MCefficiencyCalculation(vector<MC_points>&, vector<tracksX>&);
257 void WriteSiliconHits(Int_t **, Int_t **, Int_t **,
258 Double_t ***, Double_t ***, Double_t ***, Double_t ***,
259 Double_t ***, Double_t ***, Double_t ***, Double_t ***,
260 Double_t ***, Double_t ***, Double_t ***, Double_t ***,
261 Double_t ***, Double_t ***, Double_t ***, Double_t ***,
262 Double_t ***, Double_t ***, Double_t ***, Double_t ***, Double_t ***, Int_t ***);
263 void WriteSiliconTracks(vector<tracksX>&);
265 Double_t GetXYspatial_station1_2(Int_t &, Int_t &, Double_t & , Double_t &);
266 Double_t FindClusterCenter(Double_t*, Int_t , Double_t &);
267 Bool_t SkipEvent(Int_t **, Int_t **, Double_t ***, Double_t ***);
268 Int_t Angle(Int_t &, Int_t &);
271 const float tg2_5 = tan(2.5*TMath::Pi()/180.);
272 const float sin2_5 =
sin(2.5*TMath::Pi()/180.);
273 const float cos2_5 =
cos(2.5*TMath::Pi()/180.);
274 const Int_t kBig = 300;
275 const Int_t kMaxMC = 100;
276 const Int_t nstripXp = 640;
277 const Int_t nstripXpsm = 614;
278 const Int_t fNstrips = 643;
279 const Double_t sq12 =
sqrt(12.);
281 const Double_t deltaX = 0.0095;
282 const Double_t deltaXp = 0.01030001;
283 const Double_t half_module = 6.0705;
284 const Double_t shift_after_zigzag = 0.01;
285 const Double_t Xv_av = 0.4;
286 const Double_t Yv_av = 0.4;
287 const Double_t half_roadX1_X2 = 0.11;
288 const Double_t half_roadXp1_Xp2 = 0.11;
289 const Double_t half_roadX1_X3 = 0.7;
290 const Double_t half_roadX1_Xp1 = 0.5;
291 const Double_t half_roadX2_Xp2 = 0.5;
292 const Double_t half_roadX3_Xp3 = 0.55;
293 const Double_t half_roadY1_Y2 = 0.45;
294 const Double_t half_roadXp1_Xp2_diff_sign = 0.3;
295 const Double_t half_roadX1_Xp2 = .5;
297 const Int_t PDG_Li7 = 1000030070;
298 const Int_t PDG_He4 = 1000020040;
300 Double_t Shift_toCenterOfMagnetX ;
301 Double_t Shift_toCenterOfMagnetY ;
302 Double_t Shift_toCenterOfMagnetAX ;
303 Double_t Shift_toCenterOfMagnetAY ;
308 Double_t Cut_overflow;
310 Double_t Cut_AmplStripX;
311 Double_t Cut_AmplStripXp;
312 Double_t Chi2_Globcut;