/[PAMELA software]/DarthVader/CalorimeterLevel2/src/CaloLevel1.cpp
ViewVC logotype

Diff of /DarthVader/CalorimeterLevel2/src/CaloLevel1.cpp

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

revision 1.4 by mocchiut, Mon Mar 26 14:02:06 2007 UTC revision 1.12 by mocchiut, Tue Nov 27 10:15:47 2007 UTC
# Line 8  Line 8 
8  ClassImp(CaloStrip);  ClassImp(CaloStrip);
9  ClassImp(CaloLevel1);  ClassImp(CaloLevel1);
10    
11    Float_t CaloStrip::UXal = CTX;
12    Float_t CaloStrip::UYal = CTY;
13    Float_t CaloStrip::UZal = CTZ;
14    Bool_t CaloStrip::paramload  = false;
15    
16  /**  /**
17   * CaloStrip default constructor   * CaloStrip default constructor
18  **/  **/
19  CaloStrip::CaloStrip() {  CaloStrip::CaloStrip() {
20    c1 = 0;    c1 = 0;
21    this->Clear();    this->Clear();
22    UseStandardAlig();  };
23    
24    /**
25     * CaloStrip default constructor
26    **/
27    CaloStrip::CaloStrip(Bool_t mechalig) {
28      c1 = 0;
29      this->Clear();
30      if ( mechalig ){
31        ismech = true;
32        paramload = true;
33        UXal = MECHCTX;
34        UYal = MECHCTY;
35        UZal = MECHCTZ;
36      } else {
37        ismech = false;
38        UseStandardAlig();
39      };
40  };  };
41    
42  /**  /**
# Line 23  CaloStrip::CaloStrip() { Line 45  CaloStrip::CaloStrip() {
45  CaloStrip::CaloStrip(CaloLevel1 *calo) {  CaloStrip::CaloStrip(CaloLevel1 *calo) {
46    c1 = calo->GetCaloLevel1();    c1 = calo->GetCaloLevel1();
47    this->Clear();    this->Clear();
48    ismech = false;    ismech = false;
49      UseStandardAlig();
50    };
51    
52    /**
53     * CaloStrip default constructor
54    **/
55    CaloStrip::CaloStrip(CaloLevel1 *calo, Bool_t mechalig) {
56      c1 = calo->GetCaloLevel1();
57      this->Clear();
58      if ( mechalig ){
59        ismech = true;
60        paramload = true;
61        UXal = MECHCTX;
62        UYal = MECHCTY;
63        UZal = MECHCTZ;
64      } else {
65        ismech = false;
66        UseStandardAlig();
67      };
68  };  };
69    
70  /**  /**
71   * Clear variables   * Clear variables
72  **/  **/
73  void CaloStrip::Clear() {    void CaloStrip::Clear(Option_t *t) {  
74    fE = 0.;    fE = 0.;
75    fX = 0.;    fX = 0.;
76    fY = 0.;    fY = 0.;
# Line 44  void CaloStrip::Clear() {   Line 85  void CaloStrip::Clear() {  
85   **/   **/
86  void CaloStrip::UseStandardAlig(){  void CaloStrip::UseStandardAlig(){
87    //    //
88    ismech = false;    if ( !paramload ){
   //  
   stringstream aligfile;  
   Int_t error = 0;  
   FILE *f = 0;  
   ifstream badfile;  
   GL_PARAM *glparam = new GL_PARAM();  
   //  
   TString host = "mysql://localhost/pamelaprod";  
   TString user = "anonymous";  
   TString psw = "";  
   const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");  
   const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");  
   const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");  
   if ( !pamdbhost ) pamdbhost = "";  
   if ( !pamdbuser ) pamdbuser = "";  
   if ( !pamdbpsw ) pamdbpsw = "";  
   if ( strcmp(pamdbhost,"") ) host = pamdbhost;  
   if ( strcmp(pamdbuser,"") ) user = pamdbuser;  
   if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;  
   TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());  
   //  
   UXal = 0.;  
   UYal = 0.;  
   UZal = 0.;  
   //  
   if ( dbc ){  
     //  
     // determine where I can find calorimeter ADC to MIP conversion file    
     //  
     printf(" Querying DB for calorimeter parameters files...\n");  
89      //      //
90        paramload = true;
91        ismech = false;
92      //      //
93        stringstream aligfile;
94        Int_t error = 0;
95        FILE *f = 0;
96        ifstream badfile;
97        GL_PARAM *glparam = new GL_PARAM();
98        //
99        TString host = "mysql://localhost/pamelaprod";
100        TString user = "anonymous";
101        TString psw = "";
102        const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");
103        const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");
104        const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");
105        if ( !pamdbhost ) pamdbhost = "";
106        if ( !pamdbuser ) pamdbuser = "";
107        if ( !pamdbpsw ) pamdbpsw = "";
108        if ( strcmp(pamdbhost,"") ) host = pamdbhost;
109        if ( strcmp(pamdbuser,"") ) user = pamdbuser;
110        if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;
111        TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
112        //
113        UXal = 0.;
114        UYal = 0.;
115        UZal = 0.;
116      //      //
117      error = 0;      if ( dbc ){
     error = glparam->Query_GL_PARAM(1000,102,dbc);  
     if ( error >= 0 ){  
118        //        //
119        aligfile.str("");        // determine where I can find calorimeter ADC to MIP conversion file  
       aligfile << glparam->PATH.Data() << "/";  
       aligfile << glparam->NAME.Data();  
120        //        //
121        printf("\n Using parameter file: \n %s \n",aligfile.str().c_str());        printf(" Querying DB for calorimeter parameters files...\n");
122        f = fopen(aligfile.str().c_str(),"rb");        //
123        if ( f ){        //
124          //
125          error = 0;
126          error = glparam->Query_GL_PARAM(1000,102,dbc);
127          if ( error >= 0 ){
128            //
129            aligfile.str("");
130            aligfile << glparam->PATH.Data() << "/";
131            aligfile << glparam->NAME.Data();
132          //          //
133          fread(&UXal,sizeof(UXal),1,f);          printf("\n Using parameter file: \n %s \n",aligfile.str().c_str());
134          fread(&UYal,sizeof(UYal),1,f);          f = fopen(aligfile.str().c_str(),"rb");
135          fread(&UZal,sizeof(UZal),1,f);          if ( f ){
136              //
137              fread(&UXal,sizeof(UXal),1,f);
138              fread(&UYal,sizeof(UYal),1,f);
139              fread(&UZal,sizeof(UZal),1,f);
140              //
141              fclose(f);
142            };
143          //          //
         fclose(f);  
144        };        };
145          dbc->Close();
146        };
147        if ( !UXal ){
148        //        //
149          printf(" No able to query DB for calorimeter parameters files\n Using hard-coded parameters \n");
150          UXal = CTX;
151          UYal = CTY;
152          UZal = CTZ;
153      };      };
154      dbc->Close();      //  
   };  
   if ( !UXal ){  
     //  
     printf(" No able to query DB for calorimeter parameters files\n Using hard-coded parameters \n");  
     UXal = CTX;  
     UYal = CTY;  
     UZal = CTZ;  
155    };    };
156    //    //
157  };  };
158    
   
   
   
   
   
159  /**  /**
160   * Given a strip returns its position in the PAMELA reference system   * Given a strip returns its position in the PAMELA reference system
161  **/  **/
# Line 146  void CaloStrip::Set(Int_t view, Int_t pl Line 187  void CaloStrip::Set(Int_t view, Int_t pl
187    fView = view + 1;    fView = view + 1;
188    fPlane = plane + 1;    fPlane = plane + 1;
189    fStrip = strip + 1;    fStrip = strip + 1;
190      //
191    if ( fPlane%2 ){    if ( fPlane%2 ){
192      lShift = -0.5;      lShift = +0.5;
193    } else {    } else {
194      lShift = 0.5;      lShift = -0.5;
195    };    };
196    //    //
   if ( fView == 2 ) lShift = - lShift;  
   //  
197    shift_.shift = lShift;    shift_.shift = lShift;
198    //    //
199    Float_t zplane[22];    Float_t zplane[22];
# Line 177  void CaloStrip::Set(Int_t view, Int_t pl Line 217  void CaloStrip::Set(Int_t view, Int_t pl
217      fX = (lPos - UXal)/10.;      fX = (lPos - UXal)/10.;
218      fY = 0.;      fY = 0.;
219      fZ = (zplane[fPlane-1] - 5.81 + UZal)/10.;          fZ = (zplane[fPlane-1] - 5.81 + UZal)/10.;    
220    } else {      //
221       } else {
222      //      //
223      // Y view      // Y view
224      //      //
# Line 285  CaloLevel1::CaloLevel1() {     Line 326  CaloLevel1::CaloLevel1() {    
326  /**  /**
327   * Clear the CaloLevel1 object   * Clear the CaloLevel1 object
328   **/   **/
329  void CaloLevel1::Clear() {      void CaloLevel1::Clear(Option_t *t) {    
330    //    //
331    istrip = 0;    istrip = 0;
332    estrip.Reset();    estrip.Reset();
# Line 323  Float_t CaloLevel1::GetEstrip(Int_t svie Line 364  Float_t CaloLevel1::GetEstrip(Int_t svie
364   * Given estrip entry returns energy plus view, plane and strip numbers   * Given estrip entry returns energy plus view, plane and strip numbers
365  **/  **/
366  Float_t CaloLevel1::DecodeEstrip(Int_t entry, Int_t &view, Int_t &plane, Int_t &strip){  Float_t CaloLevel1::DecodeEstrip(Int_t entry, Int_t &view, Int_t &plane, Int_t &strip){
367      Bool_t sat = false;
368      Float_t mip=this->DecodeEstrip(entry,view,plane,strip,sat);
369      return(mip);
370    };
371    
372    /**
373     * Given estrip entry returns energy plus view, plane, strip numbers and saturation info
374    **/
375    Float_t CaloLevel1::DecodeEstrip(Int_t entry, Int_t &view, Int_t &plane, Int_t &strip, Bool_t &saturated){
376    //    //
377    if ( entry>istrip ) return(0.);    if ( entry>istrip ){
378        //
379        printf(" ERROR: problems decoding entry %i, it seems that number of entries is %i\n",entry,istrip);
380        //
381        return(0.);
382      };
383    //    //
384    //  printf(" num lim %f \n",std::numeric_limits<Float_t>::max());    //  printf(" num lim %f \n",std::numeric_limits<Float_t>::max());
385    //  printf(" estrip.At(%i) = %i \n",entry,estrip.At(entry));    //  printf(" estrip.At(%i) = %i \n",entry,estrip.At(entry));
# Line 368  Float_t CaloLevel1::DecodeEstrip(Int_t e Line 423  Float_t CaloLevel1::DecodeEstrip(Int_t e
423    //    //
424    Float_t mip = ((Float_t)(eval - fbi*1000000000 -plom*10000000 -strip*100000))/tim;    Float_t mip = ((Float_t)(eval - fbi*1000000000 -plom*10000000 -strip*100000))/tim;
425    //    //
426      saturated = false;
427      if ( mip > 5000. ){
428        mip -= 5000.;
429        saturated = true;
430      };
431    if ( mip > 0. && mip < 99999. ) return(mip);    if ( mip > 0. && mip < 99999. ) return(mip);
432    //    //
433    printf(" WARNING: problems decoding value %i at entry %i \n",estrip.At(entry),entry);    printf(" ERROR: problems decoding value %i at entry %i \n",estrip.At(entry),entry);
434    //    //
435    view = -1;    view = -1;
436    plane = -1;    plane = -1;
# Line 382  Float_t CaloLevel1::DecodeEstrip(Int_t e Line 442  Float_t CaloLevel1::DecodeEstrip(Int_t e
442   * Returns energy released on plane nplane (where 0<= nplane <= 43, 0 = 1Y, 1 = 1X, 2 = 2Y, 3 = 2X, etc. etc.).   * Returns energy released on plane nplane (where 0<= nplane <= 43, 0 = 1Y, 1 = 1X, 2 = 2Y, 3 = 2X, etc. etc.).
443   */   */
444  Float_t CaloLevel1::qtotpl(Int_t nplane){  Float_t CaloLevel1::qtotpl(Int_t nplane){
445      Bool_t sat = false;
446      Float_t mip = this->qtotpl(nplane,sat);
447      return(mip);
448    };
449    
450    /*
451     * Returns energy released on plane nplane (where 0<= nplane <= 43, 0 = 1Y, 1 = 1X, 2 = 2Y, 3 = 2X, etc. etc.).
452     */
453    Float_t CaloLevel1::qtotpl(Int_t nplane, Bool_t &sat){
454    //    //
455      sat = false;
456    Int_t sview = 1;    Int_t sview = 1;
457    if ( nplane%2 ) sview = 0;    if ( nplane%2 ) sview = 0;
458    //    //
459    Int_t splane = nplane-(sview+1)/2;  //  Int_t splane = nplane-(sview+1)/2;
460      Int_t splane = (nplane+sview-1)/2;
461    //    //
462    Float_t totmip = qtotpl(sview,splane);    Float_t totmip = qtotpl(sview,splane,sat);
463    //    //
464    return(totmip);    return(totmip);
465    //    //
# Line 398  Float_t CaloLevel1::qtotpl(Int_t nplane) Line 469  Float_t CaloLevel1::qtotpl(Int_t nplane)
469   * Returns energy released on view "view" (0 = X, 1 = Y) and plane "plane" ( 0 <= plane <= 21 ).   * Returns energy released on view "view" (0 = X, 1 = Y) and plane "plane" ( 0 <= plane <= 21 ).
470   */   */
471  Float_t CaloLevel1::qtotpl(Int_t sview, Int_t splane){  Float_t CaloLevel1::qtotpl(Int_t sview, Int_t splane){
472      Bool_t sat = false;
473      Float_t mip = this->qtotpl(sview,splane,sat);
474      return(mip);
475    };
476    
477    /*
478     * Returns energy released on view "view" (0 = X, 1 = Y) and plane "plane" ( 0 <= plane <= 21 ).
479     */
480    Float_t CaloLevel1::qtotpl(Int_t sview, Int_t splane, Bool_t &sat){
481    //    //
482    Int_t view = -1;    Int_t view = -1;
483    Int_t plane = -1;    Int_t plane = -1;
484    Int_t strip = -1;    Int_t strip = -1;
485      Bool_t lsat = false;
486      sat = false;
487    //    //
488    Float_t mip = 0.;    Float_t mip = 0.;
489    Float_t totmip = 0.;    Float_t totmip = 0.;
# Line 410  Float_t CaloLevel1::qtotpl(Int_t sview, Line 492  Float_t CaloLevel1::qtotpl(Int_t sview,
492    //    //
493    for (Int_t i = 0; i<istrip; i++ ){    for (Int_t i = 0; i<istrip; i++ ){
494      //      //
495      mip = DecodeEstrip(i,view,plane,strip);      mip = DecodeEstrip(i,view,plane,strip,lsat);
496      //      //
497      if ( view == sview && splane == plane ) totmip += mip;      if ( view == sview && splane == plane ){
498          if ( lsat ) sat = true;
499          totmip += mip;
500        };
501      //      //
502      // entry are ordered by strip, plane and view number. Go out if you pass the input strip      // entry are ordered by strip, plane and view number. Go out if you pass the input strip
503      //      //

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.12

  ViewVC Help
Powered by ViewVC 1.1.23