/[PAMELA software]/calo/flight/CaloEnergy/src/CaloEnergy.cpp
ViewVC logotype

Diff of /calo/flight/CaloEnergy/src/CaloEnergy.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by mocchiut, Mon Jul 13 16:10:23 2009 UTC revision 1.7 by mocchiut, Wed Aug 12 14:44:10 2009 UTC
# Line 35  CaloEnergy::CaloEnergy(PamLevel2 *l2p, B Line 35  CaloEnergy::CaloEnergy(PamLevel2 *l2p, B
35    //    //
36  }  }
37    
38    void CaloEnergy::UseCaloPreSampler(){
39      //
40      // use the presampler setting forcefitmode to 1000 means to force the DV routine to find the track inside the calorimeter using the "shower" approach developed for electrons
41      //
42      if ( !cp ) cp = new CaloPreSampler(L2);
43      cp->SplitInto(0,22);
44      cp->SetForceFitMode(1000);
45    //   cp->UseTracker(false);
46    //   cp->ForceCaloFit();
47    //   cp->SetDebug(true);
48    //   cp->Process();
49      if ( clong ) clong->SetCaloLevel2Pointer(cp->GetLevel2Pointer());
50    }
51    
52    
53    void CaloEnergy::UseLongFit(){
54      fPl = 0;
55      fLong = true;
56      if ( !clong ){
57        clong = new CaloLong(L2);
58        if ( cp ) clong->SetCaloLevel2Pointer(cp->GetLevel2Pointer());
59        clong->SplitInto(0,22);
60      };
61      //
62    }
63    
64  void CaloEnergy::Set(){  void CaloEnergy::Set(){
65      //
66      // set default values, NB default conversion factor for energy is just very approximated!
67      //
68    OBT = 0;    OBT = 0;
69    PKT = 0;    PKT = 0;
70    atime = 0;    atime = 0;
# Line 48  void CaloEnergy::Set(){ Line 77  void CaloEnergy::Set(){
77    //    //
78    debug = false;    debug = false;
79    //    //
80      indep = false;
81      //
82    fLong = false;    fLong = false;
83    fPl = 1;    fPl = 1;
84    fRad = -1;    fRad = -1;
85      cp = NULL;
86      clong = NULL;
87      x0max = -1.;
88    //    //
89    this->DefineGeometry();    this->DefineGeometry();
90    fXosel =true;    fXosel =true;
# Line 75  void CaloEnergy::SetMinimumContainment(T Line 109  void CaloEnergy::SetMinimumContainment(T
109    if ( section.Contains("YE") ) fYemin = plane;    if ( section.Contains("YE") ) fYemin = plane;
110  }  }
111    
112    void CaloEnergy::SetMinimumContainment(Int_t plane){
113      this->SetMinimumContainment("XEXOYEYO",plane);
114    }
115    
116  Int_t CaloEnergy::GetMinimumContainment(TString section){  Int_t CaloEnergy::GetMinimumContainment(TString section){
117    section.ToUpper();    section.ToUpper();
118    if ( section.Contains("XO") ) return(fXomin);    if ( section.Contains("XO") ) return(fXomin);
# Line 93  void CaloEnergy::SetConversionFactor(TSt Line 131  void CaloEnergy::SetConversionFactor(TSt
131    if ( section.Contains("YE") ) fConv_rye = conv;    if ( section.Contains("YE") ) fConv_rye = conv;
132  }  }
133    
134    void CaloEnergy::SetConversionFactor(Float_t conv){
135      this->SetConversionFactor("XEXOYEYO",conv);
136    }
137    
138  Float_t CaloEnergy::GetConversionFactor(TString section){  Float_t CaloEnergy::GetConversionFactor(TString section){
139    section.ToUpper();    section.ToUpper();
140    if ( section.Contains("XO") ) return(fConv_rxo);    if ( section.Contains("XO") ) return(fConv_rxo);
# Line 112  Int_t CaloEnergy::GetMaxplane(TString se Line 154  Int_t CaloEnergy::GetMaxplane(TString se
154    return(-1);    return(-1);
155  }  }
156    
157    Float_t CaloEnergy::GetEnergyAtMaxplane(TString section){
158      section.ToUpper();
159      if ( section.Contains("XO") ) return xomax_en;
160      if ( section.Contains("XE") ) return xemax_en;
161      if ( section.Contains("YO") ) return yomax_en;
162      if ( section.Contains("YE") ) return yemax_en;
163      return(-1);
164    }
165    
166    Float_t CaloEnergy::GetMaxEnergy(TString section){
167      section.ToUpper();
168      if ( fLong ){
169        this->Process(section);    
170        return fXOen_maxplane;
171      } else {
172        if ( section.Contains("XO") ) return fXOen_maxplane;
173        if ( section.Contains("XE") ) return fXEen_maxplane;
174        if ( section.Contains("YO") ) return fYOen_maxplane;
175        if ( section.Contains("YE") ) return fYEen_maxplane;
176      };
177      return(-1);
178    }
179    
180    Float_t CaloEnergy::GetMaxEnergy(){  
181      if ( fLong ){
182        if ( debug ) printf(" oh! call process! with asntr %s and sntr %s \n",asntr.Data(),sntr.Data());
183        this->Process(asntr);
184      };
185      return((fXEen_maxplane+fYOen_maxplane+fYEen_maxplane+fXOen_maxplane));
186    }
187    
188  void CaloEnergy::DefineGeometry(){  void CaloEnergy::DefineGeometry(){
189    //    //
190      // Use CaloStrip to determine once the position of border strips for each section
191      //
192      //
193    fM = 2. + 0.096; // real position from cbar    fM = 2. + 0.096; // real position from cbar
194    fM1 = 2. - 0.122 - 0.096; // due to calculation of xe1 etc.    fM1 = 2. - 0.122 - 0.096; // due to calculation of xe1 etc.
195    if ( fM1 < 0. ) fM1 = 0.;    if ( fM1 < 0. ) fM1 = 0.;
196    //    //
197    CaloStrip *cs = new CaloStrip(fSimu);    CaloStrip *cs = new CaloStrip(fSimu);
198      //
199    // vista y piano 0 striscia 0    // view y plane 0 strip 0
200    cs->Set(1,0,0);    cs->Set(1,0,0);
201    xe1= cs->GetY();    xe1= cs->GetY();
202    z1= cs->GetZ();    //  z1= cs->GetZ();
203    // vista y piano 0 striscia 31    // view y plane 0 strip 31
204    cs->Set(1,0,31);    cs->Set(1,0,31);
205    xe2= cs->GetY();    xe2= cs->GetY();
206    // vista y piano 0 striscia 32    // view y plane 0 strip 32
207    cs->Set(1,0,32);    cs->Set(1,0,32);
208    xe3= cs->GetY();    xe3= cs->GetY();
209    // vista y piano 0 striscia 63    // view y plane 0 strip 63
210    cs->Set(1,0,63);    cs->Set(1,0,63);
211    xe4= cs->GetY();    xe4= cs->GetY();
212    // vista y piano 0 striscia 64    // view y plane 0 strip 64
213    cs->Set(1,0,64);    cs->Set(1,0,64);
214    xe5= cs->GetY();    xe5= cs->GetY();
215    // vista y piano 0 striscia 95    // view y plane 0 strip 95
216    cs->Set(1,0,95);    cs->Set(1,0,95);
217    xe6= cs->GetY();    xe6= cs->GetY();
218    
219    // vista x piano 0 striscia 0    // view x plane 0 strip 0
220    cs->Set(0,0,0);    cs->Set(0,0,0);
221    yo1= cs->GetX();    yo1= cs->GetX();
222    z2= cs->GetZ();    //  z2= cs->GetZ();
223    // vista x piano 0 striscia 31    // view x plane 0 strip 31
224    cs->Set(0,0,31);    cs->Set(0,0,31);
225    yo2= cs->GetX();    yo2= cs->GetX();
226    // vista x piano 0 striscia 32    // view x plane 0 strip 32
227    cs->Set(0,0,32);    cs->Set(0,0,32);
228    yo3= cs->GetX();    yo3= cs->GetX();
229    // vista x piano 0 striscia 63    // view x plane 0 strip 63
230    cs->Set(0,0,63);    cs->Set(0,0,63);
231    yo4= cs->GetX();    yo4= cs->GetX();
232    // vista x piano 0 striscia 64    // view x plane 0 strip 64
233    cs->Set(0,0,64);    cs->Set(0,0,64);
234    yo5= cs->GetX();    yo5= cs->GetX();
235    // vista x piano 0 striscia 95    // view x plane 0 strip 95
236    cs->Set(0,0,95);    cs->Set(0,0,95);
237    yo6= cs->GetX();    yo6= cs->GetX();
238    
239        
240    // vista y piano 1 striscia 0    // view y plane 1 strip 0
241    cs->Set(1,1,0);    cs->Set(1,1,0);
242    xo1= cs->GetY();    xo1= cs->GetY();
243    z3= cs->GetZ();    //  z3= cs->GetZ();
244    // vista y piano 1 striscia 31    // view y plane 1 strip 31
245    cs->Set(1,1,31);    cs->Set(1,1,31);
246    xo2= cs->GetY();    xo2= cs->GetY();
247    // vista y piano 1 striscia 32    // view y plane 1 strip 32
248    cs->Set(1,1,32);    cs->Set(1,1,32);
249    xo3= cs->GetY();    xo3= cs->GetY();
250    // vista y piano 1 striscia 63    // view y plane 1 strip 63
251    cs->Set(1,1,63);    cs->Set(1,1,63);
252    xo4= cs->GetY();    xo4= cs->GetY();
253    // vista y piano 1 striscia 64    // view y plane 1 strip 64
254    cs->Set(1,1,64);    cs->Set(1,1,64);
255    xo5= cs->GetY();    xo5= cs->GetY();
256    // vista y piano 1 striscia 95    // view y plane 1 strip 95
257    cs->Set(1,1,95);    cs->Set(1,1,95);
258    xo6= cs->GetY();    xo6= cs->GetY();
259        
260    // vista x piano 1 striscia 0    // view x plane 1 strip 0
261    cs->Set(0,1,0);    cs->Set(0,1,0);
262    ye1= cs->GetX();    ye1= cs->GetX();
263    z4= cs->GetZ();    //  z4= cs->GetZ();
264    // vista x piano 1 striscia 31    // view x plane 1 strip 31
265    cs->Set(0,1,31);    cs->Set(0,1,31);
266    ye2= cs->GetX();    ye2= cs->GetX();
267    // vista x piano 1 striscia 32    // view x plane 1 strip 32
268    cs->Set(0,1,32);    cs->Set(0,1,32);
269    ye3= cs->GetX();    ye3= cs->GetX();
270    // vista x piano 1 striscia 63    // view x plane 1 strip 63
271    cs->Set(0,1,63);    cs->Set(0,1,63);
272    ye4= cs->GetX();    ye4= cs->GetX();
273    // vista x piano 1 striscia 64    // view x plane 1 strip 64
274    cs->Set(0,1,64);    cs->Set(0,1,64);
275    ye5= cs->GetX();    ye5= cs->GetX();
276    // vista x piano 1 striscia 95    // view x plane 1 strip 95
277    cs->Set(0,1,95);    cs->Set(0,1,95);
278    ye6= cs->GetX();    ye6= cs->GetX();
279    
# Line 205  void CaloEnergy::DefineGeometry(){ Line 281  void CaloEnergy::DefineGeometry(){
281    for (Int_t p = 0; p<22; p ++){    for (Int_t p = 0; p<22; p ++){
282      for (Int_t v = 0; v<2; v++ ){        for (Int_t v = 0; v<2; v++ ){  
283        cs->Set(v,p,0);        cs->Set(v,p,0);
284        trk_z[p][v]= cs->GetZ();                  // << cooordinata Z piano        trk_z[p][v]= cs->GetZ();                  //  Z coord for each plane
285      };      };
286    };    };
287    //    //
# Line 215  void CaloEnergy::DefineGeometry(){ Line 291  void CaloEnergy::DefineGeometry(){
291    
292  void CaloEnergy::Clear(){  void CaloEnergy::Clear(){
293    //    //
294      // clear variables
295      //
296    fPartsel = false;    fPartsel = false;
297    fSel = false;    fSel = false;
298    fXosel = false;    fXosel = false;
# Line 231  void CaloEnergy::Clear(){ Line 309  void CaloEnergy::Clear(){
309    fMax_planexo = 0;    fMax_planexo = 0;
310    fMax_planexe = 0;    fMax_planexe = 0;
311    fMax_planeyo = 0;    fMax_planeyo = 0;
312    fMax_planeye = 0;    fMax_planeye = 0;
313    memset(enstrip,0,2*22*96*(sizeof(Float_t)));      xomax_en= 0.;
314      xemax_en= 0.;
315      yomax_en= 0.;
316      yemax_en= 0.;
317      //
318     memset(enstrip,0,2*22*96*(sizeof(Float_t)));  
319    en = 0.;    en = 0.;
320    view = 0;    view = 0;
321    plane = 0;    plane = 0;
# Line 245  void CaloEnergy::Clear(){ Line 328  void CaloEnergy::Clear(){
328    fYeout = 0;    fYeout = 0;
329    fXoout = 0;    fXoout = 0;
330    fXeout = 0;    fXeout = 0;
331      fXEen_maxplane = 0.;  
332      fXOen_maxplane = 0.;  
333      fYEen_maxplane = 0.;  
334      fYOen_maxplane = 0.;  
335    memset(en_xep,0,11*sizeof(Float_t));    memset(en_xep,0,11*sizeof(Float_t));
336    memset(en_yep,0,11*sizeof(Float_t));    memset(en_yep,0,11*sizeof(Float_t));
337    memset(en_xop,0,11*sizeof(Float_t));    memset(en_xop,0,11*sizeof(Float_t));
# Line 291  void CaloEnergy::Print(){ Line 378  void CaloEnergy::Print(){
378    printf(" energyxo:.............. %f \n",energyxo);    printf(" energyxo:.............. %f \n",energyxo);
379    printf(" energyye:.............. %f \n",energyye);    printf(" energyye:.............. %f \n",energyye);
380    printf(" energyyo:.............. %f \n",energyyo);    printf(" energyyo:.............. %f \n",energyyo);
381      printf(" x0max   :.............. %f \n",x0max);
382    printf(" debug   :.............. %i \n",debug);    printf(" debug   :.............. %i \n",debug);
383    
384    printf("========================================================================\n");    printf("========================================================================\n");
# Line 299  void CaloEnergy::Print(){ Line 387  void CaloEnergy::Print(){
387    
388  void CaloEnergy::Delete(){  void CaloEnergy::Delete(){
389    Clear();    Clear();
390      delete this;
391  }  }
392    
393    
394  Bool_t CaloEnergy::IsInsideAcceptance(TString section){  Bool_t CaloEnergy::IsInsideAcceptance(TString section){
395    //    //
396      // check if the event is inside the acceptance of the given section(s)
397    //      //  
398    TString ntr = section;    TString ntr = section;
399    if ( !L2 ){    if ( !L2 ){
# Line 326  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 416  Bool_t CaloEnergy::IsInsideAcceptance(TS
416      newentry = true;      newentry = true;
417    };    };
418    //    //
419      // if we have already called this method for this event and no input changed then return fSel and exit
420      //
421    if ( !newentry ) return fSel;    if ( !newentry ) return fSel;
422    //    //
423      // process the event
424      //
425    if ( debug ) printf(" ########## IsInsideAcceptance ######### \n");    if ( debug ) printf(" ########## IsInsideAcceptance ######### \n");
426    //    //
427      // clear variables
428      //
429    this->Clear();    this->Clear();
430    //    //
431    section.ToUpper();    section.ToUpper();
432    //    //
433    Int_t ss = Int_t(section.Contains("XO"))+Int_t(section.Contains("XE"))+Int_t(section.Contains("YO"))+Int_t(section.Contains("YE"));    // Count the number of section(s) given as input
434    if ( !ss ){    //
435      Int_t fNumSec = Int_t(section.Contains("XO"))+Int_t(section.Contains("XE"))+Int_t(section.Contains("YO"))+Int_t(section.Contains("YE"));
436      if ( !fNumSec ){
437      printf(" ERROR: section must be XO or XE or YO or YE while it is %s \n",section.Data());      printf(" ERROR: section must be XO or XE or YO or YE while it is %s \n",section.Data());
438      return false;      return false;
439    };    };
440    //    //
441      // If the presampler object exists then use the presampler output instead of the level2 output
442      //
443      CaloLevel2 *cl2 = NULL;
444      if ( cp ){
445        cl2 = cp->GetCaloLevel2();
446      } else {
447        cl2 = L2->GetCaloLevel2();
448      };
449      //
450      // get the energy for every strip of the calorimeter
451    //    //
452    for (Int_t ch=0; ch< L2->GetCaloLevel1()->istrip; ch++){    for (Int_t ch=0; ch< L2->GetCaloLevel1()->istrip; ch++){
453      en = L2->GetCaloLevel1()->DecodeEstrip(ch,view,plane,strip);      en = L2->GetCaloLevel1()->DecodeEstrip(ch,view,plane,strip);
454      enstrip[view][plane][strip]=en;      enstrip[view][plane][strip]=en;
455    };    };
456      //
457      // sum energy plane by plane for each sections
458      //
459    for (Int_t i=0;i<11;i++){    for (Int_t i=0;i<11;i++){
460      for(strip=0; strip<96; strip++) {      for(strip=0; strip<96; strip++) {
461        if ( fRad < 0 ){        if ( fRad < 0 ){
462            //
463            // run over all the strips of the plane
464            //
465          en_xep[i] += enstrip[1][2*i][strip];          en_xep[i] += enstrip[1][2*i][strip];
466          en_yop[i] += enstrip[0][2*i][strip];          en_yop[i] += enstrip[0][2*i][strip];
467          en_xop[i] += enstrip[1][2*i+1][strip];          en_xop[i] += enstrip[1][(2*i)+1][strip];
468          en_yep[i] += enstrip[0][2*i+1][strip];          en_yep[i] += enstrip[0][(2*i)+1][strip];
469        } else {        } else {
470          if ( strip >= L2->GetCaloLevel2()->cibar[2*i][1]-1-fRad &&  strip <= L2->GetCaloLevel2()->cibar[2*i][1]-1+fRad ) en_xep[i] += enstrip[1][2*i][strip];          //
471          if ( strip >= L2->GetCaloLevel2()->cibar[2*i][0]-1-fRad &&  strip <= L2->GetCaloLevel2()->cibar[2*i][0]-1+fRad ) en_yop[i] += enstrip[0][2*i][strip];          // use only the strips inside a cylinder of given radius fRad
472          if ( strip >= L2->GetCaloLevel2()->cibar[2*i+1][1]-1-fRad &&  strip <= L2->GetCaloLevel2()->cibar[2*i+1][1]-1+fRad ) en_xop[i] += enstrip[1][2*i+1][strip];          //
473          if ( strip >= L2->GetCaloLevel2()->cibar[2*i+1][0]-1-fRad &&  strip <= L2->GetCaloLevel2()->cibar[2*i+1][0]-1+fRad ) en_yep[i] += enstrip[0][2*i+1][strip];          if ( strip >= cl2->cibar[2*i][1]-1-fRad &&  strip <= cl2->cibar[2*i][1]-1+fRad ) en_xep[i] += enstrip[1][2*i][strip];
474            if ( strip >= cl2->cibar[2*i][0]-1-fRad &&  strip <= cl2->cibar[2*i][0]-1+fRad ) en_yop[i] += enstrip[0][2*i][strip];
475            if ( strip >= cl2->cibar[(2*i)+1][1]-1-fRad &&  strip <= cl2->cibar[(2*i)+1][1]-1+fRad ) en_xop[i] += enstrip[1][(2*i)+1][strip];
476            if ( strip >= cl2->cibar[(2*i)+1][0]-1-fRad &&  strip <= cl2->cibar[(2*i)+1][0]-1+fRad ) en_yep[i] += enstrip[0][(2*i)+1][strip];
477        };        };
478      };      };
479      energyxe += en_xep[i];      energyxe += en_xep[i];
# Line 364  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 481  Bool_t CaloEnergy::IsInsideAcceptance(TS
481      energyxo += en_xop[i];      energyxo += en_xop[i];
482      energyye += en_yep[i];      energyye += en_yep[i];
483    };    };
   Float_t en_maxplane = 0.;    
   Float_t max_en= 0.;  
484    //    //
485    for (Int_t ipl =0; ipl < 11; ipl ++) {    // Find the plane of maximum for each section
486      if(en_xop[ipl] > max_en) {    //
487        max_en = en_xop[ipl];    //
488        fMax_planexo = ipl;    Int_t xen = 0;
489      Int_t yon = 0;
490      Int_t xon = 0;
491      Int_t yen = 0;
492      //
493      if ( section.Contains("XE") ){
494        yon++;
495        xon++;
496        yen++;
497        for (Int_t ipl =0; ipl < 11; ipl ++) {
498          if(en_xep[ipl] > xemax_en) {
499            xemax_en = en_xep[ipl];
500            fMax_planexe = ipl;
501        };        };
502        };
503      };
504      //
505      if ( section.Contains("YO") ){
506        xon++;
507        yen++;
508        for (Int_t ipl =0; ipl < 11; ipl ++) {
509          if(en_yop[ipl] > yomax_en) {
510            yomax_en = en_yop[ipl];
511            fMax_planeyo = ipl;
512          };
513        };
514      };
515      //
516      if ( section.Contains("XO") ){
517        yen++;
518        for (Int_t ipl =0; ipl < 11; ipl ++) {
519          if(en_xop[ipl] > xomax_en) {
520            xomax_en = en_xop[ipl];
521            fMax_planexo = ipl;
522          };
523        };
524    };    };
525    //    //
526    max_en = 0.;    if ( section.Contains("YE") ){
527    for (Int_t ipl =0; ipl < 11; ipl ++) {      for (Int_t ipl =0; ipl < 11; ipl ++) {
528      if(en_xep[ipl] > max_en) {        if(en_yep[ipl] > yemax_en) {
529        max_en = en_xep[ipl];          yemax_en = en_yep[ipl];
530        fMax_planexe = ipl;          fMax_planeye = ipl;
531          };
532      };      };
533    };    };
534    //    //
535    max_en = 0.;    // the maximum is given externally as X0, convert it to plane and section
536    for (Int_t ipl =0; ipl < 11; ipl ++) {    //
537      if(en_yop[ipl] > max_en) {    if ( x0max > 0. ){
538        max_en = en_yop[ipl];      if ( debug ) printf(" CALCULATE MAX PLANE GIVEN X0 ASSUMING PERPENDICULAR TRACK \n");
539        fMax_planeyo = ipl;      Int_t wpl = (Int_t)roundf(x0max/0.76);
540        Bool_t isY = false;
541        if ( ((x0max/0.76)-(Float_t)wpl) > 0. ) isY = true;
542        xomax_en = 0.;
543        yemax_en = 0.;
544        xemax_en = 0.;
545        yomax_en = 0.;
546        //
547        if ( !(wpl%2) ){
548          // 0, 2, 4, ...
549          if ( isY ){
550            if ( section.Contains("YO") ) yomax_en = 1000.;
551            if ( section.Contains("XE") ) xemax_en = 500.;
552            fMax_planeyo=wpl/2;
553            fMax_planexe=wpl/2;
554            if ( section.Contains("XO") ) xomax_en = 10.;
555            if ( section.Contains("YE") ) yemax_en = 5.;
556          } else {
557            if ( section.Contains("YO") ) yomax_en = 500.;
558            if ( section.Contains("XE") ) xemax_en = 1000.;
559            fMax_planeyo=wpl/2;
560            fMax_planexe=wpl/2;
561            if ( section.Contains("XO") ) xomax_en = 5.;
562            if ( section.Contains("YE") ) yemax_en = 10.;
563          };
564        } else {
565          // 1, 3, 5, ...
566          if ( isY ){
567            if ( section.Contains("YE") ) yemax_en = 1000.;
568            if ( section.Contains("XO") ) xomax_en = 500.;
569            fMax_planeye=(wpl-1)/2;
570            fMax_planexo=(wpl-1)/2;
571            if ( section.Contains("XE") ) xemax_en = 10.;
572            if ( section.Contains("YO") ) yomax_en = 5.;
573          } else {
574            if ( section.Contains("YE") ) yemax_en = 500.;
575            if ( section.Contains("XO") ) xomax_en = 1000.;
576            fMax_planeye=(wpl-1)/2;
577            fMax_planexo=(wpl-1)/2;
578            if ( section.Contains("XE") ) xemax_en = 5.;
579            if ( section.Contains("YO") ) yomax_en = 10.;
580          };
581      };      };
582        if ( debug ) printf(" x0max %f x0max/0.76 %f wpl %i isY %i yomax_en %f xemax_en %f yemax_en %f xomax_en %f fMaxplane %i %i %i %i\n",x0max,(x0max/0.76),wpl,isY,yomax_en,xemax_en,yemax_en,xomax_en,fMax_planeyo,fMax_planexe,fMax_planeye,fMax_planexo);
583    };    };
584    //    //
585    max_en = 0.;    Int_t nPl = fPl;
586    for (Int_t ipl =0; ipl < 11; ipl ++) {    //
587      if(en_yep[ipl] > max_en) {    // Set the maximum in case of coherent mode was selected
588        max_en = en_yep[ipl];    //
589        fMax_planeye = ipl;    if ( !indep ){
590        nPl = 0;
591        if ( debug ) printf(" A: Check maximum, coherent mode: xoen %f yoen %f xeen %f yeen %f xomax %i yomax %i xemax %i yemax %i\n",xomax_en,yomax_en,xemax_en,yemax_en,fMax_planexo,fMax_planeyo,fMax_planexe,fMax_planeye);
592        Int_t nummod = 0;
593        Int_t numexpl = 0;
594        if ( xomax_en > xemax_en && xomax_en > yemax_en && xomax_en > yomax_en ){
595          //
596          // Section XO contains the maximum energy release per plane of the whole calorimeter
597          //
598          if ( debug ) printf(" XO is MAX %i %i %i %i\n",xen,yon,xon,yen);
599          //
600          // fMax_plane is the plane of maximum + number of additional dE/dx measurement counting planes from 0 to 43
601          //
602          fMax_plane = (fNumSec * fMax_planexo) +(Float_t)xon + fPl;
603          //
604          // nummod is the integer part of the number of modules in which the maximum is contained
605          //
606          nummod = (Int_t)(((Float_t)fMax_plane)/(Float_t)fNumSec);
607          //
608          // numexpl is the number of additional planes (0,1,2) inside the module
609          //
610          numexpl = (Int_t)((Float_t)fMax_plane-(Float_t)fNumSec*(Float_t)nummod);
611          //
612      };      };
613        if ( xemax_en > xomax_en && xemax_en > yemax_en && xemax_en > yomax_en ){
614          if ( debug ) printf(" XE is MAX %i %i %i %i\n",xen,yon,xon,yen);
615          fMax_plane = (fNumSec * fMax_planexe) +(Float_t)xen + fPl;
616          nummod = (Int_t)(((Float_t)fMax_plane)/(Float_t)fNumSec);
617          numexpl = (Int_t)((Float_t)fMax_plane-(Float_t)fNumSec*(Float_t)nummod);
618          //
619       };
620    
621        if ( yemax_en > xomax_en && yemax_en > xemax_en && yemax_en > yomax_en ){
622          if ( debug ) printf(" YE is MAX %i %i %i %i\n",xen,yon,xon,yen);
623          fMax_plane = (fNumSec * fMax_planeye) +(Float_t)yen + fPl;
624          nummod = (Int_t)(((Float_t)fMax_plane)/(Float_t)fNumSec);
625          numexpl = (Int_t)((Float_t)fMax_plane-(Float_t)fNumSec*(Float_t)nummod);
626          //
627        };
628        if ( yomax_en > xemax_en && yomax_en > yemax_en && yomax_en > xomax_en ){
629          if ( debug ) printf(" YO is MAX %i %i %i %i\n",xen,yon,xon,yen);
630          fMax_plane = (fNumSec * fMax_planeyo) +(Float_t)yon + fPl;
631          nummod = (Int_t)(((Float_t)fMax_plane)/(Float_t)fNumSec);
632          numexpl = (Int_t)((Float_t)fMax_plane-(Float_t)fNumSec*(Float_t)nummod);
633          //
634        };
635        //
636        // find the plane up to which is necessary to integrate the energy for each section
637        //
638        Int_t a = 0;
639        Int_t b = 0;
640        Int_t c = 0;
641        if ( numexpl > xen ) a = 1;
642        if ( numexpl > yon ) b = 1;
643        if ( numexpl > xon ) c = 1;
644        fMax_planexe = nummod;
645        fMax_planeyo = nummod - 1 + a;
646        fMax_planexo = nummod - 1 + b;
647        fMax_planeye = nummod - 1 + c;      
648        if ( debug ) printf(" fMax_plane %f nummod %i numexpl %i a %i b %i c %i \n",fMax_plane,nummod,numexpl,a,b,c);
649        if ( debug ) printf(" DONE: Check maximum, coherent mode: xoen %f yoen %f xeen %f yeen %f xomax %i yomax %i xemax %i yemax %i\n",xomax_en,yomax_en,xemax_en,yemax_en,fMax_planexo,fMax_planeyo,fMax_planexe,fMax_planeye);
650    };    };
651    //    //
652      // for each plane of the calorimeter find the position of the track in the direction along the strip (where we do not have a measurement from the selected plane) by looking at the plane above/below of the other view and extrapolating the trajectory to the given plane
653      //
654    Float_t  track_coordx[22][2];    Float_t  track_coordx[22][2];
655    Float_t  track_coordy[22][2];    Float_t  track_coordy[22][2];
656    //    //
657    Float_t tgx_cl2;    Float_t tgx_cl2;
658    Float_t tgy_cl2;      Float_t tgy_cl2;  
659    tgx_cl2 = L2->GetCaloLevel2()->tanx[0];    tgx_cl2 = cl2->tanx[0];
660    tgy_cl2 = L2->GetCaloLevel2()->tany[0];    tgy_cl2 = cl2->tany[0];
661    //    //
662    for (Int_t p=0; p<22; p++){        for (Int_t p=0; p<22; p++){    
663      track_coordy[p][1] = L2->GetCaloLevel2()->cbar[p][1];      track_coordy[p][1] = cl2->cbar[p][1];
664      track_coordx[p][1] = L2->GetCaloLevel2()->cbar[p][0] - fabs(trk_z[p][1]-trk_z[p][0])*tgx_cl2;      track_coordx[p][1] = cl2->cbar[p][0] - fabs(trk_z[p][1]-trk_z[p][0])*tgx_cl2;
665      track_coordx[p][0] = L2->GetCaloLevel2()->cbar[p][0];      track_coordx[p][0] = cl2->cbar[p][0];
666      track_coordy[p][0] = L2->GetCaloLevel2()->cbar[p][1] - fabs(trk_z[p][1]-trk_z[p][0])*tgy_cl2;      track_coordy[p][0] = cl2->cbar[p][1] - fabs(trk_z[p][1]-trk_z[p][0])*tgy_cl2;
667      if ( debug ) printf(" p %i track_coordy[p][1] %f track_coordx[p][1] %f track_coordx[p][0] %f  track_coordy[p][0] %f \n",p,track_coordy[p][1],track_coordx[p][1],track_coordx[p][0],track_coordy[p][0]);      if ( debug ) printf(" p %i track_coordy[p][1] %f track_coordx[p][1] %f track_coordx[p][0] %f  track_coordy[p][0] %f \n",p,track_coordy[p][1],track_coordx[p][1],track_coordx[p][0],track_coordy[p][0]);
668    };    };
669    //    //
670    if ( debug ) printf(" acceptance ss %i tgx %f tgy %f\n",ss,tgx_cl2,tgy_cl2);    if ( debug ) printf(" acceptance fNumSec %i tgx %f tgy %f\n",fNumSec,tgx_cl2,tgy_cl2);
671    //    //
672    if ( section.Contains("XO") ){    if ( section.Contains("XO") ){
673        //
674        // check event is inside XO acceptance
675        //
676      for (Int_t i=0; i<11; i++) {      for (Int_t i=0; i<11; i++) {
677        if        if
678          (          (
679           (((track_coordx[2*i+1][1]>=(-12.054+fM))&&           (((track_coordx[(2*i)+1][1]>=(-12.054+fM))&&
680             (track_coordx[2*i+1][1]<=(-4.246-fM)))&&             (track_coordx[(2*i)+1][1]<=(-4.246-fM)))&&
681            (((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo1 + fM1)&&            (((cl2->cbar[(2*i)+1][1]>=xo1 + fM1)&&
682              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo2 - fM1 ))||              (cl2->cbar[(2*i)+1][1]<=xo2 - fM1 ))||
683             ((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo3 + fM1)&&             ((cl2->cbar[(2*i)+1][1]>=xo3 + fM1)&&
684              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo4 - fM1 ))||              (cl2->cbar[(2*i)+1][1]<=xo4 - fM1 ))||
685             ((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo5 + fM1)&&             ((cl2->cbar[(2*i)+1][1]>=xo5 + fM1)&&
686              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo6 - fM1 ))))||              (cl2->cbar[(2*i)+1][1]<=xo6 - fM1 ))))||
687                    
688           (((track_coordx[2*i+1][1]>=(-4.004+fM))&&           (((track_coordx[(2*i)+1][1]>=(-4.004+fM))&&
689             (track_coordx[2*i+1][1]<=(3.804-fM)))&&             (track_coordx[(2*i)+1][1]<=(3.804-fM)))&&
690            (((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo1 + fM1)&&            (((cl2->cbar[(2*i)+1][1]>=xo1 + fM1)&&
691              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo2 - fM1 ))||              (cl2->cbar[(2*i)+1][1]<=xo2 - fM1 ))||
692             ((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo3 + fM1)&&             ((cl2->cbar[(2*i)+1][1]>=xo3 + fM1)&&
693              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo4 - fM1))||              (cl2->cbar[(2*i)+1][1]<=xo4 - fM1))||
694             ((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo5 + fM1)&&             ((cl2->cbar[(2*i)+1][1]>=xo5 + fM1)&&
695              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo6 - fM1 ))))||              (cl2->cbar[(2*i)+1][1]<=xo6 - fM1 ))))||
696                    
697           (((track_coordx[2*i+1][1]>=(4.046+fM))&&           (((track_coordx[(2*i)+1][1]>=(4.046+fM))&&
698             (track_coordx[2*i+1][1]<=(11.854-fM)))&&             (track_coordx[(2*i)+1][1]<=(11.854-fM)))&&
699            (((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo1 + fM1)&&            (((cl2->cbar[(2*i)+1][1]>=xo1 + fM1)&&
700              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo2 - fM1))||              (cl2->cbar[(2*i)+1][1]<=xo2 - fM1))||
701             ((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo3 + fM1)&&             ((cl2->cbar[(2*i)+1][1]>=xo3 + fM1)&&
702              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo4 - fM1 ))||              (cl2->cbar[(2*i)+1][1]<=xo4 - fM1 ))||
703             ((L2->GetCaloLevel2()->cbar[2*i+1][1]>=xo5 + fM1)&&             ((cl2->cbar[(2*i)+1][1]>=xo5 + fM1)&&
704              (L2->GetCaloLevel2()->cbar[2*i+1][1]<=xo6 - fM1 ))))              (cl2->cbar[(2*i)+1][1]<=xo6 - fM1 ))))
705           ){           ){
706          fXosel = true;          fXosel = true;
707          fXoout = i;          fXoout = i;
# Line 454  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 710  Bool_t CaloEnergy::IsInsideAcceptance(TS
710          break;          break;
711        };        };
712      };      };
713      if ( !fXosel && fXoout >= fXomin && fXoout >= (Int_t)(fMax_planexo+fPl) ){      //
714        if ( debug ) printf(" XO: this event is only partially contained: fXoout %i fXomin %i fMax_planexo + fPl %i \n",fXoout,fXomin,(Int_t)(fMax_planexo+fPl));      // if it goes out of the acceptance BUT the plane up to which we are integrating the energy is contained then the event is "partially" contained
715        //
716        if ( !fXosel && fXoout >= fXomin && fXoout >= (Int_t)(fMax_planexo+nPl) ){
717          if ( debug ) printf(" XO: this event is only partially contained: fXoout %i fXomin %i fMax_planexo + nPl %i \n",fXoout,fXomin,(Int_t)(fMax_planexo+nPl));
718        fPartsel = true;        fPartsel = true;
719        fXosel = true;        fXosel = true;
720      };      };
721        //
722        // event is contained (or partially contained) hence we can integrate energy up to the maximum and calculate the energy as measured by this section
723        //
724      if ( fXosel ){      if ( fXosel ){
725        en_maxplane = 0.;          for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planexo+nPl)) ;iplm++) fXOen_maxplane += en_xop[iplm];
726        for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planexo+fPl)) ;iplm++) en_maxplane += en_xop[iplm];        fEnergyxo = fXOen_maxplane/fConv_rxo;
       fEnergyxo = en_maxplane/fConv_rxo;  
727      };      };
728    };    };
729    //    //
# Line 472  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 733  Bool_t CaloEnergy::IsInsideAcceptance(TS
733          (          (
734           (((track_coordx[2*i][1]>=(-11.854+fM))&&           (((track_coordx[2*i][1]>=(-11.854+fM))&&
735             (track_coordx[2*i][1]<=(-4.046-fM)))&&             (track_coordx[2*i][1]<=(-4.046-fM)))&&
736            (((L2->GetCaloLevel2()->cbar[2*i][1]>=xe1 + fM1)&&            (((cl2->cbar[2*i][1]>=xe1 + fM1)&&
737              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe2 - fM1 ))||              (cl2->cbar[2*i][1]<=xe2 - fM1 ))||
738             ((L2->GetCaloLevel2()->cbar[2*i][1]>=xe3 + fM1)&&             ((cl2->cbar[2*i][1]>=xe3 + fM1)&&
739              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe4 - fM1 ))||              (cl2->cbar[2*i][1]<=xe4 - fM1 ))||
740             ((L2->GetCaloLevel2()->cbar[2*i][1]>=xe5 + fM1)&&             ((cl2->cbar[2*i][1]>=xe5 + fM1)&&
741              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe6 - fM1 ))))||              (cl2->cbar[2*i][1]<=xe6 - fM1 ))))||
742                    
743           (((track_coordx[2*i][1]>=(-3.804+fM))&&           (((track_coordx[2*i][1]>=(-3.804+fM))&&
744             (track_coordx[2*i][1]<=(4.004-fM)))&&             (track_coordx[2*i][1]<=(4.004-fM)))&&
745            (((L2->GetCaloLevel2()->cbar[2*i][1]>=xe1 + fM1)&&            (((cl2->cbar[2*i][1]>=xe1 + fM1)&&
746              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe2 - fM1 ))||              (cl2->cbar[2*i][1]<=xe2 - fM1 ))||
747             ((L2->GetCaloLevel2()->cbar[2*i][1]>=xe3 + fM1)&&             ((cl2->cbar[2*i][1]>=xe3 + fM1)&&
748              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe4 - fM1))||              (cl2->cbar[2*i][1]<=xe4 - fM1))||
749             ((L2->GetCaloLevel2()->cbar[2*i][1]>=xe5 + fM1)&&             ((cl2->cbar[2*i][1]>=xe5 + fM1)&&
750              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe6 - fM1 ))))||              (cl2->cbar[2*i][1]<=xe6 - fM1 ))))||
751                    
752           (((track_coordx[2*i][1]>=(4.246+fM))&&           (((track_coordx[2*i][1]>=(4.246+fM))&&
753             (track_coordx[2*i][1]<=(12.054-fM)))&&             (track_coordx[2*i][1]<=(12.054-fM)))&&
754            (((L2->GetCaloLevel2()->cbar[2*i][1]>=xe1 + fM1)&&            (((cl2->cbar[2*i][1]>=xe1 + fM1)&&
755              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe2 - fM1))||              (cl2->cbar[2*i][1]<=xe2 - fM1))||
756             ((L2->GetCaloLevel2()->cbar[2*i][1]>=xe3 + fM1)&&             ((cl2->cbar[2*i][1]>=xe3 + fM1)&&
757              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe4 - fM1 ))||              (cl2->cbar[2*i][1]<=xe4 - fM1 ))||
758             ((L2->GetCaloLevel2()->cbar[2*i][1]>=xe5 + fM1)&&             ((cl2->cbar[2*i][1]>=xe5 + fM1)&&
759              (L2->GetCaloLevel2()->cbar[2*i][1]<=xe6 - fM1 ))))              (cl2->cbar[2*i][1]<=xe6 - fM1 ))))
760           ){           ){
761          fXesel = true;          fXesel = true;
762          fXeout = i;          fXeout = i;
# Line 504  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 765  Bool_t CaloEnergy::IsInsideAcceptance(TS
765          break;          break;
766        };        };
767      };      };
768      if ( !fXesel && fXeout >= fXemin && fXeout >= (Int_t)(fMax_planexe+fPl) ){      if ( !fXesel && fXeout >= fXemin && fXeout >= (Int_t)(fMax_planexe+nPl) ){
769        if ( debug ) printf(" XE: this event is only partially contained: fXeout %i fXemin %i fMax_planexe + fPl %i \n",fXeout,fXemin,(Int_t)(fMax_planexe+fPl));        if ( debug ) printf(" XE: this event is only partially contained: fXeout %i fXemin %i fMax_planexe + nPl %i \n",fXeout,fXemin,(Int_t)(fMax_planexe+nPl));
770        fPartsel = true;        fPartsel = true;
771        fXesel = true;        fXesel = true;
772      };      };
773      if ( fXesel ){      if ( fXesel ){
774        en_maxplane = 0.;          for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planexe+nPl)) ;iplm++) fXEen_maxplane += en_xep[iplm];
775        for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planexe+fPl)) ;iplm++) en_maxplane += en_xep[iplm];        fEnergyxe = fXEen_maxplane/fConv_rxe;
       fEnergyxe = en_maxplane/fConv_rxe;  
776      };      };
777    };      };  
778    //    //
# Line 520  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 780  Bool_t CaloEnergy::IsInsideAcceptance(TS
780      for (Int_t i=0; i<11; i++) {      for (Int_t i=0; i<11; i++) {
781        if        if
782          (          (
783           (((track_coordy[2*i+1][0]>=(-12.154+fM))&&           (((track_coordy[(2*i)+1][0]>=(-12.154+fM))&&
784             (track_coordy[2*i+1][0]<=(-4.346-fM)))&&             (track_coordy[(2*i)+1][0]<=(-4.346-fM)))&&
785            (((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye1 + fM1)&&            (((cl2->cbar[(2*i)+1][0]>=ye1 + fM1)&&
786              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye2 - fM1 ))||              (cl2->cbar[(2*i)+1][0]<=ye2 - fM1 ))||
787             ((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye3 + fM1)&&             ((cl2->cbar[(2*i)+1][0]>=ye3 + fM1)&&
788              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye4 - fM1 ))||              (cl2->cbar[(2*i)+1][0]<=ye4 - fM1 ))||
789             ((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye5 + fM1)&&             ((cl2->cbar[(2*i)+1][0]>=ye5 + fM1)&&
790              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye6 - fM1 ))))||              (cl2->cbar[(2*i)+1][0]<=ye6 - fM1 ))))||
791                    
792           (((track_coordy[2*i+1][0]>=(-4.104+fM))&&           (((track_coordy[(2*i)+1][0]>=(-4.104+fM))&&
793             (track_coordy[2*i+1][0]<=(3.704-fM)))&&             (track_coordy[(2*i)+1][0]<=(3.704-fM)))&&
794            (((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye1 + fM1)&&            (((cl2->cbar[(2*i)+1][0]>=ye1 + fM1)&&
795              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye2 - fM1 ))||              (cl2->cbar[(2*i)+1][0]<=ye2 - fM1 ))||
796             ((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye3 + fM1)&&             ((cl2->cbar[(2*i)+1][0]>=ye3 + fM1)&&
797              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye4 - fM1))||              (cl2->cbar[(2*i)+1][0]<=ye4 - fM1))||
798             ((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye5 + fM1)&&             ((cl2->cbar[(2*i)+1][0]>=ye5 + fM1)&&
799              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye6 - fM1 ))))||              (cl2->cbar[(2*i)+1][0]<=ye6 - fM1 ))))||
800                    
801           (((track_coordy[2*i+1][0]>=(3.946+fM))&&           (((track_coordy[(2*i)+1][0]>=(3.946+fM))&&
802             (track_coordy[2*i+1][0]<=(11.754-fM)))&&             (track_coordy[(2*i)+1][0]<=(11.754-fM)))&&
803            (((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye1 + fM1)&&            (((cl2->cbar[(2*i)+1][0]>=ye1 + fM1)&&
804              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye2 - fM1))||              (cl2->cbar[(2*i)+1][0]<=ye2 - fM1))||
805             ((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye3 + fM1)&&             ((cl2->cbar[(2*i)+1][0]>=ye3 + fM1)&&
806              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye4 - fM1 ))||              (cl2->cbar[(2*i)+1][0]<=ye4 - fM1 ))||
807             ((L2->GetCaloLevel2()->cbar[2*i+1][0]>=ye5 + fM1)&&             ((cl2->cbar[(2*i)+1][0]>=ye5 + fM1)&&
808              (L2->GetCaloLevel2()->cbar[2*i+1][0]<=ye6 - fM1 ))))              (cl2->cbar[(2*i)+1][0]<=ye6 - fM1 ))))
809           ){           ){
810          fYesel = true;          fYesel = true;
811          fYeout = i;          fYeout = i;
# Line 554  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 814  Bool_t CaloEnergy::IsInsideAcceptance(TS
814          break;          break;
815        };        };
816      };      };
817      if ( !fYesel && fYeout >= fYemin && fYeout >= (Int_t)(fMax_planeye+fPl) ){      if ( !fYesel && fYeout >= fYemin && fYeout >= (Int_t)(fMax_planeye+nPl) ){
818        if ( debug ) printf(" YE: this event is only partially contained: fYeout %i fYemin %i fMax_planeye + fPl %i \n",fYeout,fYemin,(Int_t)(fMax_planeye+fPl));        if ( debug ) printf(" YE: this event is only partially contained: fYeout %i fYemin %i fMax_planeye + nPl %i \n",fYeout,fYemin,(Int_t)(fMax_planeye+nPl));
819        fPartsel = true;        fPartsel = true;
820        fYesel = true;        fYesel = true;
821      };      };
822      if ( fYesel ){      if ( fYesel ){
823        en_maxplane = 0.;          for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planeye+nPl)) ;iplm++) fYEen_maxplane += en_yep[iplm];
824        for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planeye+fPl)) ;iplm++) en_maxplane += en_yep[iplm];        fEnergyye = fYEen_maxplane/fConv_rye;
       fEnergyye = en_maxplane/fConv_rye;  
825      };      };
826    };      };  
827    //    //
828    if ( section.Contains("YO") ){    if ( section.Contains("YO") ){
829      for (Int_t i=0; i<11; i++) {      for (Int_t i=0; i<11; i++) {
830        if ( debug ) printf(" i %i track_coordy[2*i][0] %f L2->GetCaloLevel2()->cbar[2*i][0] %f \n",i,track_coordy[2*i][0],L2->GetCaloLevel2()->cbar[2*i][0]);        if ( debug ) printf(" i %i track_coordy[2*i][0] %f cl2->cbar[2*i][0] %f \n",i,track_coordy[2*i][0],cl2->cbar[2*i][0]);
831        if ( debug ) printf(" i %i fm %f fm1 %f yo1 %g yo2 %f yo3 %f yo4 %f yo5 %f yo6 %f \n",i,fM,fM1,yo1,yo2,yo3,yo4,yo5,yo6);        if ( debug ) printf(" i %i fm %f fm1 %f yo1 %g yo2 %f yo3 %f yo4 %f yo5 %f yo6 %f \n",i,fM,fM1,yo1,yo2,yo3,yo4,yo5,yo6);
832        if        if
833          (          (
834           (((track_coordy[2*i][0]>=(-11.954+fM))&&           (((track_coordy[2*i][0]>=(-11.954+fM))&&
835             (track_coordy[2*i][0]<=(-4.146-fM)))&&             (track_coordy[2*i][0]<=(-4.146-fM)))&&
836            (((L2->GetCaloLevel2()->cbar[2*i][0]>=yo1 + fM1)&&            (((cl2->cbar[2*i][0]>=yo1 + fM1)&&
837              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo2 - fM1 ))||              (cl2->cbar[2*i][0]<=yo2 - fM1 ))||
838             ((L2->GetCaloLevel2()->cbar[2*i][0]>=yo3 + fM1)&&             ((cl2->cbar[2*i][0]>=yo3 + fM1)&&
839              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo4 - fM1 ))||              (cl2->cbar[2*i][0]<=yo4 - fM1 ))||
840             ((L2->GetCaloLevel2()->cbar[2*i][0]>=yo5 + fM1)&&             ((cl2->cbar[2*i][0]>=yo5 + fM1)&&
841              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo6 - fM1 ))))||              (cl2->cbar[2*i][0]<=yo6 - fM1 ))))||
842                    
843           (((track_coordy[2*i][0]>=(-3.904+fM))&&           (((track_coordy[2*i][0]>=(-3.904+fM))&&
844             (track_coordy[2*i][0]<=(+3.904-fM)))&&             (track_coordy[2*i][0]<=(+3.904-fM)))&&
845            (((L2->GetCaloLevel2()->cbar[2*i][0]>=yo1 + fM1)&&            (((cl2->cbar[2*i][0]>=yo1 + fM1)&&
846              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo2 - fM1 ))||              (cl2->cbar[2*i][0]<=yo2 - fM1 ))||
847             ((L2->GetCaloLevel2()->cbar[2*i][0]>=yo3 + fM1)&&             ((cl2->cbar[2*i][0]>=yo3 + fM1)&&
848              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo4 - fM1))||              (cl2->cbar[2*i][0]<=yo4 - fM1))||
849             ((L2->GetCaloLevel2()->cbar[2*i][0]>=yo5 + fM1)&&             ((cl2->cbar[2*i][0]>=yo5 + fM1)&&
850              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo6 - fM1 ))))||              (cl2->cbar[2*i][0]<=yo6 - fM1 ))))||
851                    
852           (((track_coordy[2*i][0]>=(4.146+fM))&&           (((track_coordy[2*i][0]>=(4.146+fM))&&
853             (track_coordy[2*i][0]<=(11.954-fM)))&&             (track_coordy[2*i][0]<=(11.954-fM)))&&
854            (((L2->GetCaloLevel2()->cbar[2*i][0]>=yo1 + fM1)&&            (((cl2->cbar[2*i][0]>=yo1 + fM1)&&
855              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo2 - fM1))||              (cl2->cbar[2*i][0]<=yo2 - fM1))||
856             ((L2->GetCaloLevel2()->cbar[2*i][0]>=yo3 + fM1)&&             ((cl2->cbar[2*i][0]>=yo3 + fM1)&&
857              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo4 - fM1 ))||              (cl2->cbar[2*i][0]<=yo4 - fM1 ))||
858             ((L2->GetCaloLevel2()->cbar[2*i][0]>=yo5 + fM1)&&             ((cl2->cbar[2*i][0]>=yo5 + fM1)&&
859              (L2->GetCaloLevel2()->cbar[2*i][0]<=yo6 - fM1 ))))              (cl2->cbar[2*i][0]<=yo6 - fM1 ))))
860           ){           ){
861          fYosel = true;          fYosel = true;
862          fYoout = i;          fYoout = i;
# Line 606  Bool_t CaloEnergy::IsInsideAcceptance(TS Line 865  Bool_t CaloEnergy::IsInsideAcceptance(TS
865          break;          break;
866        };        };
867      };      };
868      if ( !fYosel && fYoout >= fYomin && fYoout >= (Int_t)(fMax_planeyo+fPl) ){      if ( !fYosel && fYoout >= fYomin && fYoout >= (Int_t)(fMax_planeyo+nPl) ){
869        if ( debug ) printf(" YO: this event is only partially contained: fYoout %i fYomin %i fMax_planeyo + fPl %i \n",fYoout,fYomin,(Int_t)(fMax_planeyo+fPl));        if ( debug ) printf(" YO: this event is only partially contained: fYoout %i fYomin %i fMax_planeyo + nPl %i \n",fYoout,fYomin,(Int_t)(fMax_planeyo+nPl));
870        fPartsel = true;        fPartsel = true;
871        fYosel = true;        fYosel = true;
872      };      };
873      if ( fYosel ){      if ( fYosel ){
874        en_maxplane = 0.;          for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planeyo+nPl)) ;iplm++) fYOen_maxplane += en_yop[iplm];
875        for (Int_t iplm=0;iplm<=TMath::Min(10,(Int_t)(fMax_planeyo+fPl)) ;iplm++) en_maxplane += en_yop[iplm];        fEnergyyo = fYOen_maxplane/fConv_ryo;
       fEnergyyo = en_maxplane/fConv_ryo;  
876      };      };
877    };      };  
878    //    //
879    fSel = ( fXesel || fYesel || fXosel || fYosel );    // Count the number of sections in which the event is contained
880      //
881    fCount = (Float_t)((Int_t)fXesel+(Int_t)fXosel+(Int_t)fYesel+(Int_t)fYosel);    fCount = (Float_t)((Int_t)fXesel+(Int_t)fXosel+(Int_t)fYesel+(Int_t)fYosel);
882      //
883      if ( indep ){
884        //
885        // independent mode, average the energy measurement and max plane of the contained sections
886        //
887        fSel = ( fXesel || fYesel || fXosel || fYosel );
888        fMax_plane = (Float_t)(fMax_planeyo+fMax_planeye+fMax_planexo+fMax_planexe)/fCount;
889        fEnergy = (fEnergyxe+fEnergyyo+fEnergyye+fEnergyxo)/fCount;
890        //
891      } else {
892        //
893        // coherent mode, sum the energy [MIP] of the given sections and convert using fConv_rxo. **** NB: it is assumed that the conversion factor is unique and the method SetConvertionFactor(Float_t) has been used**** The event is selected only if it is contained in all the given sections
894        //
895        if ( fCount != fNumSec ){
896          fSel = false;
897        } else {
898          fSel = true;
899        };
900        fEnergy = (fXEen_maxplane+fYOen_maxplane+fYEen_maxplane+fXOen_maxplane)/fConv_rxo;
901      };
902      //
903      if ( debug ) printf("sel %i indep %i fMax_plane %f conv_r %f en_maxplane %f encalo %f  \n",fSel,indep,fMax_plane,fConv_rxo,fXOen_maxplane,fEnergy);
904    if ( debug ) printf(" IsInside XE %i XO %i YE %i YO %i => SEL %i \n",fXesel,fXosel,fYesel,fYosel,fSel);    if ( debug ) printf(" IsInside XE %i XO %i YE %i YO %i => SEL %i \n",fXesel,fXosel,fYesel,fYosel,fSel);
905    fMax_plane = (Float_t)(fMax_planeyo+fMax_planeye+fMax_planexo+fMax_planexe)/fCount;    //
906    fEnergy = (fEnergyxe+fEnergyyo+fEnergyye+fEnergyxo)/fCount;    // finish exit
   if ( debug ) printf(" fMax_plane %f conv_r %f en_maxplane %f encalo %f  \n",fMax_plane,fConv_rxo,en_maxplane,fEnergy);  
907    //    //
908    return fSel;    return fSel;
909    //    //
# Line 637  void CaloEnergy::Process(){ Line 917  void CaloEnergy::Process(){
917    
918  void CaloEnergy::Process(TString section){  void CaloEnergy::Process(TString section){
919    //      //  
920      // process the event
921      //
922    TString ntr = section;    TString ntr = section;
923    if ( !L2 ){    if ( !L2 ){
924      printf(" ERROR: cannot find PamLevel2 object, use the correct constructor or check your program!\n");      printf(" ERROR: cannot find PamLevel2 object, use the correct constructor or check your program!\n");
# Line 658  void CaloEnergy::Process(TString section Line 940  void CaloEnergy::Process(TString section
940      newentry = true;      newentry = true;
941    };    };
942    //    //
943      // if we have already called this method for this event and no input changed then return fSel and exit
944      //
945    if ( !newentry ) return;    if ( !newentry ) return;
946    //    //
947      // process the event
948      //
949    if ( debug ) printf(" Processing event at OBT %u PKT %u time %u section %s\n",OBT,PKT,atime,section.Data());    if ( debug ) printf(" Processing event at OBT %u PKT %u time %u section %s\n",OBT,PKT,atime,section.Data());
950    //    //
951    //  this->Clear();    // check if the cylinder of integration can go out of the sensor given the frame which has been set (if we use all the calorimeter fRad is < 0 and the printout is suppressed)
952    //    //
953    if ( (fM1+0.122-0.244*(Float_t)fRad) < 0. ) printf("Error: (fM1+0.122-0.244*(Float_t)fRad) < 0. fM1 %f fRad %i %f \n",fM1,fRad,(fM1+0.122-0.244*(Float_t)fRad));    if ( (fM1+0.122-0.244*(Float_t)fRad) < 0. ) printf("Error: (fM1+0.122-0.244*(Float_t)fRad) < 0. fM1 %f fRad %i %f \n",fM1,fRad,(fM1+0.122-0.244*(Float_t)fRad));
954    //    //
955    if ( fLong ){    if ( fLong ){
956      // use long fit to measure energy      if ( debug ) printf(" ==================================================================> LONGITUDINAL FIT! \n");
957        //
958        // use long fit to measure energy
959        //
960        if ( this->IsInsideAcceptance(section) ){
961          //
962          if ( debug ) printf(" ==================================================================> LONG INSIDE! \n");
963          //
964          Float_t myene[2][22];
965          memset(myene,0,(sizeof(Float_t))*2*22);
966          for (Int_t j=0; j<11; j++){
967            if ( section.Contains("XE") ) myene[1][2*j] = en_xep[j];
968            if ( section.Contains("YO") ) myene[0][2*j] = en_yop[j];
969            if ( section.Contains("XO") ) myene[1][(2*j)+1] = en_xop[j];
970            if ( section.Contains("YE") ) myene[0][(2*j)+1] = en_yep[j];    
971          };
972          clong->UnMaskSections();
973          if ( !(section.Contains("YE")) ) clong->MaskSection("YE");
974          if ( !(section.Contains("YO")) ) clong->MaskSection("YO");
975          if ( !(section.Contains("XO")) ) clong->MaskSection("XO");
976          if ( !(section.Contains("XE")) ) clong->MaskSection("XE");
977          clong->ForceNextFit();
978          clong->SetEnergies(myene);
979          if ( debug ){
980            clong->Fit(true);
981          } else {
982            clong->Fit();
983          };      
984          fXOen_maxplane = clong->Get_E0();
985          fYOen_maxplane  = 0.;
986          fYEen_maxplane = 0.;
987          fXEen_maxplane = 0.;
988          fEnergy=fXOen_maxplane/fConv_rxo;
989          if ( fEnergy != fEnergy || clong->Get_fitresult() != 0 ) fEnergy = -1.;
990          //      if ( fEnergy != fEnergy ) fEnergy = 1.;
991          //
992        } else {
993          //
994          // if the event is not in the acceptance, return a negative energy.
995          //
996          if ( debug ) printf(" Outside acceptance \n");
997          fEnergy *= -1.;
998          //
999        };
1000        //
1001    } else {    } else {
1002      //      //
1003        // use the energy measurement
1004        //
1005      if ( this->IsInsideAcceptance(section) ){      if ( this->IsInsideAcceptance(section) ){
1006        //        //
1007          // the event is good
1008          //
1009        if ( debug ) printf(" XE %i XO %i YE %i YO %i \n",fXesel,fXosel,fYesel,fYosel);        if ( debug ) printf(" XE %i XO %i YE %i YO %i \n",fXesel,fXosel,fYesel,fYosel);
1010        //        //
1011      } else {      } else {
1012          //
1013          // if the event is not in the acceptance, return a negative energy.
1014          //
1015        if ( debug ) printf(" Outside acceptance \n");        if ( debug ) printf(" Outside acceptance \n");
1016        fEnergy = -1.;        fEnergy *= -1.;
1017          //
1018      };      };
1019    };    };
1020    //    //

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.23