9 #include <JANA/JApplication.h>
28 map<string, double> bcalparms;
30 if ( !loop->GetCalib(
"BCAL/mc_parms", bcalparms)){
31 cout<<
"DBCALClump_factory: loading values from TOF data base"<<endl;
33 cout <<
"DBCALClumpo_factory: Error loading values from BCAL MC data base" <<endl;
40 VELOCITY = bcalparms[
"C_EFFECTIVE"];
53 const DBCALHit *BcalMatrixU[48*4][4];
54 const DBCALHit *BcalMatrixD[48*4][4];
56 int MatrixUD[48*4][4];
63 vector<const DBCALHit*> AllBcalHits;
64 loop->Get(AllBcalHits);
66 for (
int i=0;i<48*4;i++){
71 for (
int m=0;m<4;m++){
72 BcalMatrixU[i][m] = NULL;
73 BcalMatrixD[i][m] = NULL;
80 for (
int i=0; i< (int)AllBcalHits.size();i++){
81 const DBCALHit* hit = AllBcalHits[i];
84 if ((hit->
t<200.) && (hit->
t>0.)) {
94 for (
int i=0;i<48*4;i++){
95 for (
int m=0;m<4;m++){
96 if ((BcalMatrixU[i][m]) && (BcalMatrixD[i][m])){
97 float meant = (BcalMatrixU[i][m]->
t + BcalMatrixD[i][m]->
t - 390./16.75)/2.;
103 BcalMatrixU[i][m] = NULL;
104 BcalMatrixD[i][m] = NULL;
112 for (
int i=0;i<48*4;i++){
122 if (!MatrixUD[i][0]){
123 if (BcalMatrixU[i][0]){
124 if ((!BcalMatrixU[bef][0]) &&
125 (!BcalMatrixU[aft][0]) &&
126 (!BcalMatrixU[i][1]) &&
127 (!BcalMatrixU[aft][1]) &&
128 (!BcalMatrixU[aft][1])){
129 BcalMatrixU[i][0] = NULL;
132 if (BcalMatrixD[i][0]){
133 if ((!BcalMatrixD[bef][0]) &&
134 (!BcalMatrixD[aft][0]) &&
135 (!BcalMatrixD[i][1]) &&
136 (!BcalMatrixD[aft][1]) &&
137 (!BcalMatrixD[aft][1])){
138 BcalMatrixD[i][0] = NULL;
143 if (!MatrixUD[i][1]){
144 if (BcalMatrixU[i][1]){
145 if ((!BcalMatrixU[bef][1]) &&
146 (!BcalMatrixU[aft][1]) &&
147 (!BcalMatrixU[i][2]) &&
148 (!BcalMatrixU[aft][2]) &&
149 (!BcalMatrixU[aft][2])){
150 BcalMatrixU[i][1] = NULL;
153 if (BcalMatrixD[i][1]){
154 if ((!BcalMatrixD[bef][1]) &&
155 (!BcalMatrixD[aft][1]) &&
156 (!BcalMatrixD[i][2]) &&
157 (!BcalMatrixD[aft][2]) &&
158 (!BcalMatrixD[aft][2])){
159 BcalMatrixD[i][1] = NULL;
164 if (!MatrixUD[i][2]){
165 if (BcalMatrixU[i][2]){
166 if ((!BcalMatrixU[bef][2]) &&
167 (!BcalMatrixU[aft][2]) &&
168 (!BcalMatrixU[i][3]) &&
169 (!BcalMatrixU[aft][3]) &&
170 (!BcalMatrixU[aft][3])){
171 BcalMatrixU[i][2] = NULL;
174 if (BcalMatrixD[i][2]){
175 if ((!BcalMatrixD[bef][2]) &&
176 (!BcalMatrixD[aft][2]) &&
177 (!BcalMatrixD[i][3]) &&
178 (!BcalMatrixD[aft][3]) &&
179 (!BcalMatrixD[aft][3])){
180 BcalMatrixD[i][2] = NULL;
185 if (!MatrixUD[i][3]){
186 if (BcalMatrixU[i][3]){
187 if ((!BcalMatrixU[bef][3]) &&
188 (!BcalMatrixU[aft][3]) &&
189 (!BcalMatrixU[i][2]) &&
190 (!BcalMatrixU[aft][2]) &&
191 (!BcalMatrixU[aft][2])){
192 BcalMatrixU[i][3] = NULL;
195 if (BcalMatrixD[i][3]){
196 if ((!BcalMatrixD[bef][3]) &&
197 (!BcalMatrixD[aft][3]) &&
198 (!BcalMatrixD[i][2]) &&
199 (!BcalMatrixD[aft][2]) &&
200 (!BcalMatrixD[aft][2])){
201 BcalMatrixD[i][3] = NULL;
207 for (
int i=0;i<48*4;i++){
208 for (
int m=0;m<4;m++){
210 if (BcalMatrixU[i][m]){
211 EU[i] += BcalMatrixU[i][m]->
E;
214 if (BcalMatrixD[i][m]){
215 ED[i] += BcalMatrixD[i][m]->
E;
223 for (
int i=1;i<48*4-1;i++) {
224 int a = EDi[i-1]+EUi[i-1];
225 int b = EDi[i] + EUi[i];
226 int c = EDi[i+1]+EUi[i+1];
227 if ((b<2)&&(a==0)&&(c==0)){
245 for (
int i=0;i<48*4;i++){
246 if ((EU[i]>0.0)&&(ED[i]>0.0)){
258 if (MaxU==999 || MaxD==999){
275 int idxMaxU[2] = {999,999};
276 int idxMaxD[2] = {999,999};
282 for (
int k=mod-1; k<mod+2; k++) {
289 for (
int n=0;n<3;n++){
290 const DBCALHit* hitD = BcalMatrixD[idx][n];
291 const DBCALHit* hitU = BcalMatrixU[idx][n];
293 if (hitD->
E > EmaxD){
298 if (hitU->
E > EmaxU){
303 float mt = hitD->
t + hitU->
t;
316 idxMaxD[0] = idxMaxU[0];
317 idxMaxD[1] = idxMaxU[1];
319 idxMaxU[0] = idxMaxD[0];
320 idxMaxU[1] = idxMaxD[1];
336 vector <const DBCALHit*> HitListU;
337 vector <const DBCALHit*> HitListD;
338 vector <float> MeanTime;
339 vector <float> DeltaTime;
349 for (
int i=0;i<4;i++){
353 float mt = hitD->
t + hitU->
t;
357 MeanTime.push_back(mt);
361 float dt = hitD->
t - hitU->
t;
364 DeltaTime.push_back(dt);
365 sector.push_back(Idx);
371 HitListU.push_back(hitU);
373 BcalMatrixU[
Idx][i] = NULL;
390 for (
int i=0;i<4;i++){
394 float mt = hitD->
t + hitU->
t;
398 MeanTime.push_back(mt);
399 float dt = hitD->
t - hitU->
t;
402 DeltaTime.push_back(dt);
403 sector.push_back(Idx);
409 HitListU.push_back(hitU);
411 BcalMatrixU[
Idx][i] = NULL;
429 for (
int i=0;i<4;i++){
433 HitListD.push_back(hit);
435 BcalMatrixD[
Idx][i] = NULL;
452 for (
int i=0;i<4;i++){
456 HitListD.push_back(hit);
458 BcalMatrixD[
Idx][i] = NULL;
469 if ( (HitListU.size()>0) && (HitListD.size()>0) ) {
479 if ((HitListU.size()==1) || (HitListD.size()==1)){
480 if (myClump->
ClumpE[0]<50.) {
485 _data.push_back(myClump);
490 cout<<
"Error no hits in this Clump!!!! Event: "<<eventnumber<<
" cnt= "<<cnt <<endl;
vector< float > DeltaTime
static evioFileChannel * chan
jerror_t brun(JEventLoop *loop, int32_t runnumber)
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)