| 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 | /** | /** | 
| 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.; | 
| 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 | **/ | **/ | 
| 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]; | 
| 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 | // | // | 
| 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(); | 
| 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)); | 
| 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; | 
| 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 | // | // | 
| 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.; | 
| 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 | // | // |