AbsCor Class Reference

#include <AbsCor.h>

List of all members.

Public Member Functions

 AbsCor (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize ()
StatusCode execute ()
StatusCode finalize ()
double corEnergyPi0 (double eg, double theid)

Private Member Functions

double ECorrMC (double eg, double theid) const
double ErrMC (double eg, double theid) const
double E25min (int n) const
double E25max (int n) const

Private Attributes

bool ntOut
int mccor
int edgecor
int usetof
int dodatacor
int dopi0Cor
int MCuseTof
int hotcellmask
int hrunstart [10]
int hrunend [10]
int hcell [10]
int ** m_index
double ** m_par
double ** m_parphi
double e25min [28]
double e25max [28]
TGraph2DErrors * dt
TGraph2DErrors * dtErr
NTuple::Tuple * m_tuple1
NTuple::Item< double > m_ef
NTuple::Item< double > m_e5
NTuple::Item< double > m_ct
NTuple::Item< double > m_cedge
NTuple::Item< double > m_ec


Detailed Description

Definition at line 10 of file AbsCor.h.


Constructor & Destructor Documentation

AbsCor::AbsCor ( const std::string name,
ISvcLocator *  pSvcLocator 
)

Definition at line 59 of file AbsCor.cxx.

References dodatacor, dopi0Cor, edgecor, hotcellmask, mccor, MCuseTof, ntOut, and usetof.

00059                                                               :
00060   Algorithm(name, pSvcLocator) {
00061 
00062     //Declare the properties  
00063   ntOut = true;
00064   declareProperty("NTupleOut",ntOut=false);
00065   declareProperty("McCor", mccor=0);
00066   declareProperty("EdgeCor", edgecor=0);
00067   declareProperty("HotCellMask", hotcellmask=0);
00068   declareProperty("UseTof", usetof=1);
00069   declareProperty("DoDataCor", dodatacor = 1);
00070   declareProperty("DoPi0Cor",dopi0Cor=1);
00071   declareProperty("MCUseTof", MCuseTof=1);
00072 }


Member Function Documentation

double AbsCor::corEnergyPi0 ( double  eg,
double  theid 
)

double AbsCor::E25max ( int  n  )  const [private]

Definition at line 617 of file AbsCor.cxx.

References e25max.

Referenced by ECorrMC(), and ErrMC().

00618 {
00619   return e25max[n];
00620 }

double AbsCor::E25min ( int  n  )  const [private]

Definition at line 613 of file AbsCor.cxx.

References e25min.

Referenced by ECorrMC(), and ErrMC().

00614 {
00615   return e25min[n];
00616 }

double AbsCor::ECorrMC ( double  eg,
double  theid 
) const [private]

Definition at line 624 of file AbsCor.cxx.

References dt, E25max(), and E25min().

Referenced by execute().

00625 {
00626   double Energy5x5=eg;
00627   if(eg<E25min(int(theid))) eg=E25min(int(theid));
00628   if(eg>E25max(int(theid))) eg=E25max(int(theid))-0.001;
00629 
00630   if(theid<=0)theid=0.001;
00631   if(theid>=27)theid=26.999;
00632   Float_t einter = eg + 0.00001;
00633   Float_t tinter = theid+0.0001;
00634   //cout<<"inter="<< einter<<"   "<<tinter<<endl;
00635   double ecor=dt->Interpolate(einter,tinter);
00636   // cout<<"ecor="<<ecor<<endl;
00637   if(!(ecor))return Energy5x5;
00638   if(ecor<0.5)return Energy5x5;
00639   double EnergyCor=Energy5x5/ecor;
00640   return EnergyCor;
00641 }

double AbsCor::ErrMC ( double  eg,
double  theid 
) const [private]

Definition at line 644 of file AbsCor.cxx.

References dtErr, E25max(), E25min(), and showlog::err.

00645 {
00646 
00647   if(eg<E25min(int(theid))) eg=E25min(int(theid));
00648   if(eg>E25max(int(theid))) eg=E25max(int(theid))-0.001;
00649   if(theid<=0)theid=0.001;
00650   if(theid>=27)theid=26.999;
00651   Float_t einter = eg + 0.00001;
00652   Float_t tinter = theid+0.0001;
00653   double err=dtErr->Interpolate(einter,tinter);
00654   return err;
00655 }

StatusCode AbsCor::execute (  ) 

Definition at line 281 of file AbsCor.cxx.

References abs, ai, EmcID::barrel_ec(), DstEmcShower::cellId(), EmcID::crystal_id(), dodatacor, dopi0Cor, EventModel::Dst::DstEmcShowerCol, DstEmcShower::e5x5(), ECorrMC(), edgecor, energy, EventModel::EvtRec::EvtRecEvent, EventModel::EvtRec::EvtRecTrackCol, IEmcRecGeoSvc::GetCrystalPoint(), hcell, hotcellmask, hrunend, hrunstart, genRecEmupikp::i, Bes_Common::INFO, m_cedge, m_ct, m_e5, m_ec, m_ef, m_par, m_tuple1, MCuseTof, msgSvc(), ntOut, EmcID::phi_module(), pi, boss::pos, DstEmcShower::position(), EventModel::Recon::RecEmcShowerCol, runNo, DstEmcShower::setEnergy(), DstEmcShower::setStatus(), tan(), EmcID::theta_module(), and usetof.

00281                            {
00282   MsgStream log(msgSvc(), name());
00283   log << MSG::INFO << "in execute()" << endreq;
00284 //  SmartDataPtr<Event::EventH> eventHeader(eventSvc(),"/Event");
00285   SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00286   int runNo=eventHeader->runNumber();
00287 
00288   SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00289   SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(),  EventModel::EvtRec::EvtRecTrackCol);
00290   if(evtRecEvent->totalTracks()>evtRecTrkCol->size())return SUCCESS;
00291   if(evtRecEvent->totalTracks()>50)return SUCCESS;
00292 
00293   IEmcRecGeoSvc* iGeoSvc;
00294   ISvcLocator* svcLocator = Gaudi::svcLocator();
00295   StatusCode sc = svcLocator->service("EmcRecGeoSvc",iGeoSvc);
00296   if(sc!=StatusCode::SUCCESS) {
00297     cout<<"Error: Can't get EmcRecGeoSvc"<<endl;
00298   }
00299 
00300   for(int i = 0; i< evtRecEvent->totalTracks(); i++) {
00301     EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i;
00302     if(!(*itTrk)->isEmcShowerValid())continue;
00303     RecEmcShower *emcTrk = (*itTrk)->emcShower();
00304 //    if(emcTrk->energy()<0.0005)continue;
00305 
00306     /* by liucx
00307     int st = emcTrk->status();
00308     if(st>10000)continue;
00309      emcTrk->setStatus(st+20000);
00310     */
00311 
00312 
00313 
00314 //    cout<<"REC after calib EMC status =  "<<emcTrk->status()<<endl;
00315 
00316     //if(emcTrk->e5x5()<0.015)continue;
00317 
00318 //    if(emcTrk->getTime()<10||emcTrk->getTime()>30)continue;
00319 /*
00320     if(emcTrk->e5x5()<0.02){
00321       emcTrk->setEnergy(emcTrk->e5x5()*1.1);
00322       continue;
00323     }
00324 */
00325 /*
00326     int intid = emcTrk->cellId();
00327     Identifier id=Identifier(intid);
00328     int getthetaid = EmcID::theta_module(id);
00329     int getmodule = EmcID::barrel_ec(id);
00330     if(getmodule==1)getthetaid=getthetaid+6;
00331     if(getmodule==2)getthetaid=55-getthetaid;
00332 */
00333 
00334     RecEmcID id = Identifier(emcTrk->cellId());
00335 
00336     unsigned int module, ntheta, nphi;
00337     module = EmcID::barrel_ec(id);
00338     ntheta = EmcID::theta_module(id);
00339     nphi = EmcID::phi_module(id);
00340 
00341     // id=EmcID::crystal_id(module,ntheta,nphi);
00342 
00343     unsigned int thetaModule = EmcID::theta_module(id);
00344     unsigned int phiModule = EmcID::phi_module(id);
00345 
00346  
00347     double e5x5=emcTrk->e5x5();
00348     double etof=0;
00349 
00350     if(usetof==1 && (*itTrk)->isTofTrackValid()){
00351       SmartRefVector<RecTofTrack> recTofTrackVec=(*itTrk)->tofTrack();
00352       if(!recTofTrackVec.empty())etof=recTofTrackVec[0]->energy();
00353       if(etof>100.)etof=0;
00354     }
00355 
00356     double energyC;
00357 
00358     int thetaId;
00359     if (module==0||module==2) thetaId = thetaModule;
00360     if (module==1 && thetaModule<=21) thetaId = thetaModule + 6;
00361     if (module==1 && thetaModule>21)  thetaId = 43 - thetaModule + 6; 
00362 
00363     if(MCuseTof==1){
00364       energyC=ECorrMC(e5x5+etof,thetaId);
00365 
00366     } 
00367     if (MCuseTof==0) {
00368       energyC=ECorrMC(e5x5,thetaId);
00369   
00370     }
00371 
00372 
00373     /*
00374     if(usetof==1){
00375       energyC=ECorrMC(e5x5+etof,thetaId);
00376     } 
00377     if (usetof==0) {
00378       energyC=emcTrk->energy();
00379     }
00380     */
00381     //  double energyC=emcTrk->energy()+etof;
00382 /*
00383     if(energyC<=0||energyC>4.99)continue;
00384     double cor = 1.0; 
00385     if(runNo>0)cor = dt->Eval(energyC);
00386     if(cor<0.001)continue;
00387 //  cout<<cor<<endl;
00388     double energyCC= energyC/cor;
00389     emcTrk->setEnergy(energyCC);
00390 */
00391 
00392     double lnE = std::log(energyC);
00393 
00394     if (energyC>1.0) lnE=std::log(1.0);
00395     if (energyC<0.07) lnE=std::log(0.07);
00396 
00397     double lnEcor=1.0;
00398     if(dopi0Cor==1){
00399       if(runNo>0 && dodatacor==1) {
00400         lnEcor = ai[0]+ai[1]*lnE+ai[2]*lnE*lnE+ai[3]*lnE*lnE*lnE;
00401       }
00402     }
00403     if(lnEcor<0.5)continue;
00404 //    cout<<lnEcor<<" "<<etof<<endl;
00405 
00406 
00408     HepPoint3D pos(emcTrk->position());
00409 
00410     // If it is "hot", return "9999" (Hajime, Jul 2013)
00411     double enecor=1.;
00412     if(hotcellmask==1){
00413       for(int ih=0;ih<10;ih++){
00414         if(hrunstart[ih]==-1||hrunend[ih]==-1||hcell[ih]==-1)continue;
00415         if(abs(runNo)<hrunstart[ih]||abs(runNo)>hrunend[ih])continue;
00416         if (  emcTrk->cellId()==hcell[ih] ) {emcTrk->setStatus(9999);}
00417       }
00418     }
00419 
00420     if(edgecor==1){
00421 
00422       if(module==1) {   //barrel
00423         unsigned int theModule;
00424         if(thetaModule>21) {
00425           theModule = 43 - thetaModule;
00426           id = EmcID::crystal_id(module,theModule,phiModule);
00427           pos.setZ(-pos.z());
00428         } else {
00429           theModule = thetaModule;
00430         }
00431         
00432         double IRShift;
00433         if(theModule==21) {
00434           IRShift = 0;
00435           
00436         } else if(theModule==20) {
00437           IRShift = 2.5;
00438           
00439         } else {
00440           IRShift = 5.;
00441           
00442         }
00443 
00444 
00445         HepPoint3D IR(0,0,IRShift);
00446         HepPoint3D center01, center23;  //center of point0,1 and point2,3 in crystal
00447         center01 = (iGeoSvc->GetCrystalPoint(id,0)+iGeoSvc->GetCrystalPoint(id,1))/2;
00448         center23 = (iGeoSvc->GetCrystalPoint(id,2)+iGeoSvc->GetCrystalPoint(id,3))/2;
00449         
00450         double theta01,theta23,length,d;
00451         theta01 = (center01-IR).theta();
00452         theta23 = (center23-IR).theta();
00453         length = (center01-IR).mag();
00454         d = length*tan(theta01-theta23);  //length in x direction
00455         
00456         double xIn;
00457         xIn = length*tan(theta01-(pos-IR).theta())-d/2;
00458         if (xIn < (-d/2) && theModule!=21){
00459           
00460           theModule=theModule+1 ;
00461           
00462           id = EmcID::crystal_id(module,theModule,phiModule);
00463           if(theModule==21) {
00464             IRShift = 0;
00465             
00466           } else if(theModule==20) {
00467             IRShift = 2.5;
00468             
00469           } else {
00470             IRShift = 5.;
00471             
00472           }
00473           HepPoint3D IR1(0,0,IRShift);
00474           IR=IR1;
00475           center01 = (iGeoSvc->GetCrystalPoint(id,0)+iGeoSvc->GetCrystalPoint(id,1))/2;
00476           center23 = (iGeoSvc->GetCrystalPoint(id,2)+iGeoSvc->GetCrystalPoint(id,3))/2;
00477           theta01 = (center01-IR).theta();
00478           theta23 = (center23-IR).theta();
00479           length = (center01-IR).mag();
00480           d = length*tan(theta01-theta23);  //length in x direction
00481           
00482           xIn = length*tan(theta01-(pos-IR).theta())-d/2;
00483           
00484         } else if (xIn > (d/2) && theModule!=0 ){
00485           
00486           theModule=theModule-1 ;
00487           id = EmcID::crystal_id(module,theModule,phiModule);
00488           if(theModule==21) {
00489             IRShift = 0;
00490             
00491           } else if(theModule==20) {
00492             IRShift = 2.5;
00493             
00494           } else {
00495             IRShift = 5.;
00496             
00497           }
00498           
00499           HepPoint3D IR1(0,0,IRShift);
00500           IR=IR1;
00501           center01 = (iGeoSvc->GetCrystalPoint(id,0)+iGeoSvc->GetCrystalPoint(id,1))/2;
00502           center23 = (iGeoSvc->GetCrystalPoint(id,2)+iGeoSvc->GetCrystalPoint(id,3))/2;
00503           theta01 = (center01-IR).theta();
00504           theta23 = (center23-IR).theta();
00505           length = (center01-IR).mag();
00506           d = length*tan(theta01-theta23);  //length in x direction
00507           
00508           xIn = length*tan(theta01-(pos-IR).theta())-d/2;
00509         }
00510         
00511         double yIn;
00512         //    yIn = pos.phi() < 0 ? pos.phi()*180./CLHEP::pi+360.-phiModule*3.-1.1537
00513         //      : pos.phi()*180./CLHEP::pi-phiModule*3.-1.1537;
00514         
00515         yIn = pos.phi() < 0 ? pos.phi()*180./CLHEP::pi+360.-phiModule*3.-1.843
00516           : pos.phi()*180./CLHEP::pi-phiModule*3.-1.843;
00517         
00518         if(nphi==0&&yIn>100) yIn=yIn-360;
00519         if(nphi==119&&yIn<-100) yIn=yIn+360;
00520         
00521         if(yIn<-1.5-0.15){
00522           
00523           if(nphi!=0) phiModule=phiModule-1;
00524           if(nphi==0) phiModule=119;
00525           yIn = pos.phi() < 0 ? pos.phi()*180./CLHEP::pi+360.-phiModule*3.-1.843
00526             : pos.phi()*180./CLHEP::pi-phiModule*3.-1.843;
00527           if(phiModule==0&&yIn>100) yIn=yIn-360;
00528           if(phiModule==119&&yIn<-100) yIn=yIn+360;
00529           
00530         }
00531         
00532         if(yIn>1.5-0.15){
00533           
00534           
00535           if(nphi!=119) phiModule=phiModule+1;
00536           if(nphi==119) phiModule=0;
00537           
00538           yIn = pos.phi() < 0 ? pos.phi()*180./CLHEP::pi+360.-phiModule*3.-1.843
00539             : pos.phi()*180./CLHEP::pi-phiModule*3.-1.843;
00540           if(phiModule==0&&yIn>100) yIn=yIn-360;
00541           if(phiModule==119&&yIn<-100) yIn=yIn+360;
00542         }
00543         
00544         enecor=m_par[theModule][0]
00545           +m_par[theModule][1]*xIn
00546           +m_par[theModule][2]*xIn*xIn
00547           +m_par[theModule][3]*xIn*xIn*xIn
00548           +m_par[theModule][4]*xIn*xIn*xIn*xIn
00549           +m_par[theModule][5]*xIn*xIn*xIn*xIn*xIn
00550           +m_par[theModule][6]*xIn*xIn*xIn*xIn*xIn*xIn
00551           // +m_par[theModule][7]*xIn*xIn*xIn*xIn*xIn*xIn*xIn
00552           // +m_par[theModule][8]*xIn*xIn*xIn*xIn*xIn*xIn*xIn*xIn
00553           +m_par[theModule][7]*yIn
00554           +m_par[theModule][8]*yIn*yIn
00555           +m_par[theModule][9]*yIn*yIn*yIn
00556           +m_par[theModule][10]*yIn*yIn*yIn*yIn;
00558       } else{
00559         enecor=1;
00560       }
00561     } 
00563     
00564     double energyCC= energyC/(lnEcor*enecor);
00565     //     cout<<"Trk Level Corr. and Orig. "<<energyCC<<" "<<emcTrk->energy()<<endl;
00566     emcTrk->setEnergy(energyCC);
00567 
00568     if(ntOut==true){
00569       m_ef=energyCC;
00570       m_e5=emcTrk->e5x5();
00571       m_ec=energyC;
00572       m_ct=lnEcor ;
00573       m_cedge=enecor;
00574       m_tuple1->write();
00575     }
00576 
00577 
00578    }
00579 //==============Modify Dst===============================================================
00580    SmartDataPtr<RecEmcShowerCol> recEmcShowerCol(eventSvc(),  EventModel::Recon::RecEmcShowerCol);
00581    if(!recEmcShowerCol){
00582      return( StatusCode::SUCCESS);
00583    }
00584    SmartDataPtr<DstEmcShowerCol> dstEmcShowerCol(eventSvc(),  EventModel::Dst::DstEmcShowerCol);
00585    if(!dstEmcShowerCol){
00586      return( StatusCode::SUCCESS);
00587    }
00588 
00589 //   cout<<"Rec and Dst Size "<<recEmcShowerCol->size()<<" "<<dstEmcShowerCol->size()<<endl;
00590    if(recEmcShowerCol->size()!=dstEmcShowerCol->size())return SUCCESS;
00591    for(int i=0;i<recEmcShowerCol->size();i++){
00592      RecEmcShowerCol::iterator iter_rec = recEmcShowerCol->begin()+i;
00593      DstEmcShowerCol::iterator iter_dst = dstEmcShowerCol->begin()+i;
00594 //     cout<<"Rec and Dst energy       "<<(*iter_rec)->energy()<<" "<<(*iter_dst)->energy()<<endl;
00595      (*iter_dst)->setEnergy((*iter_rec)->energy());
00596      (*iter_dst)->setStatus((*iter_rec)->status());
00597 //     cout<<"DST after calib EMC status =  "<<(*iter_dst)->status()<<endl;
00598 //     cout<<"Rec == Dst?              "<<(*iter_rec)->energy()<<" "<<(*iter_dst)->energy()<<endl;
00599    }
00600   return( StatusCode::SUCCESS);
00601 }

StatusCode AbsCor::finalize (  ) 

Definition at line 604 of file AbsCor.cxx.

References Bes_Common::INFO, and msgSvc().

00604                             {
00605 
00606   MsgStream log(msgSvc(), name());
00607   log << MSG::INFO << "in finalize()" << endmsg;
00608   return StatusCode::SUCCESS;
00609 }

StatusCode AbsCor::initialize (  ) 

Definition at line 77 of file AbsCor.cxx.

References ai, cbeam, dt, dtErr, e25max, e25min, energy, calibUtil::ERROR, hcell, hrunend, hrunstart, genRecEmupikp::i, Bes_Common::INFO, ganga-rec::j, m_cedge, m_ct, m_e5, m_ec, m_ef, m_index, m_par, m_parphi, m_tuple1, mccor, MCuseTof, msgSvc(), ntOut, ntupleSvc(), deljobs::string, and usetof.

00077                              {
00078   MsgStream log(msgSvc(), name());
00079   log << MSG::INFO << "in initialize()" << endmsg;
00080   StatusCode status;
00081   if(ntOut == true){
00082     NTuplePtr nt1(ntupleSvc(), "FILE1/ec");
00083     if ( nt1 ) m_tuple1 = nt1;
00084     else {
00085       m_tuple1 = ntupleSvc()->book ("FILE1/ec", CLID_ColumnWiseTuple, "ks N-Tuple example");
00086       if ( m_tuple1 )    {
00087         status = m_tuple1->addItem ("ef",   m_ef);
00088         status = m_tuple1->addItem ("e5",   m_e5);
00089         status = m_tuple1->addItem ("ec",    m_ec);
00090         status = m_tuple1->addItem ("ct",   m_ct);
00091         status = m_tuple1->addItem ("cedge",   m_cedge);
00092       }
00093       else    { 
00094         log << MSG::ERROR << "    Cannot book N-tuple:" << long(m_tuple1) << endmsg;
00095         return StatusCode::FAILURE;
00096       }
00097     }
00098   }
00099 
00100   m_index = new int*[56];
00101   for (int j=0;j<56;j++ ) {
00102     m_index[j] = new int[120];
00103     for ( int k=0; k<120; k++) {
00104       m_index[j][k]=-1;
00105     }
00106   }
00107 
00108   m_par = new double*[22];
00109   for (int j=0;j<22;j++ ) {
00110     m_par[j] = new double[11];
00111     for ( int k=0; k<11; k++) {
00112       m_par[j][k]=-99;
00113     }
00114   }
00115 
00116   m_parphi = new double*[22];
00117   for (int j=0;j<22;j++ ) {
00118     m_parphi[j] = new double[5];
00119     for ( int k=0; k<5; k++) {
00120       m_parphi[j][k]=-99;
00121     }
00122   }
00123 
00124   ifstream EnParIn;
00125   //EnParIn.exceptions( ifstream::failbit | ifstream::badbit );
00126   string EnParInFile;
00127   EnParInFile = getenv("ABSCORROOT");
00128   EnParInFile += "/share/para.dat";
00129   EnParIn.open(EnParInFile.c_str());
00130   for(int i=0;i<22;i++) {
00131 
00132     EnParIn>>m_par[i][0]>>m_par[i][1]>>m_par[i][2]>>m_par[i][3]>>m_par[i][4]
00133            >>m_par[i][5]>>m_par[i][6]>>m_par[i][7]>>m_par[i][8]>>m_par[i][9]
00134            >>m_par[i][10];
00135   } 
00136   EnParIn.close();
00137     
00138   ifstream EnParInphi;
00139   //EnParInphi.exceptions( ifstream::failbit | ifstream::badbit );
00140   string EnParInFilephi = getenv("ABSCORROOT"); 
00141   EnParInFilephi += "/share/paraphi.dat"; 
00142   EnParInphi.open(EnParInFilephi.c_str());
00143   for(int i=0;i<22;i++) {
00144     EnParInphi>>m_parphi[i][0]>>m_parphi[i][1]>>m_parphi[i][2]>>m_parphi[i][3]>>m_parphi[i][4];
00145     
00146   } 
00147   EnParInphi.close();
00148 
00149 
00150   /* liucx
00151   string DataPathevse;
00152   DataPathevse = getenv("ABSCORROOT");
00153   DataPathevse += "/share/barmccorevse10bin.txt";
00154   ifstream inpi0;
00155   inpi0.exceptions( ifstream::failbit | ifstream::badbit );
00156   inpi0.open(DataPathevse.c_str(),ios::in);
00157 
00158   double epoint[11],peak[11],peakerr[11];
00159   for(Int_t i=0;i<11;i++){
00160     inpi0>>epoint[i];
00161     inpi0>>peak[i];
00162     inpi0>>peakerr[i];
00163   }
00164   for(Int_t i=0;i<11;i++){
00165     dt->SetPoint(i, epoint[i],peak[i]);
00166     dt->SetPointError(i,0,peakerr[i]);
00167   }
00168   */
00169 
00170   string DataPathcbeam;
00171   DataPathcbeam = getenv("ABSCORROOT");
00172   DataPathcbeam += "/share/cbeam.txt";
00173   ifstream incbeam;
00174   incbeam.exceptions( ifstream::failbit | ifstream::badbit );
00175   incbeam.open(DataPathcbeam.c_str(),ios::in);
00176   for(int i=0; i<56; i++){
00177     double tid,peak,peake,sig,sige;
00178     incbeam>>tid;
00179     incbeam>>peak;
00180     incbeam>>peake;
00181     incbeam>>sig;
00182     incbeam>>sige;
00183     cbeam[i]=1.0/peak;
00184   }
00185 
00187   string DataPathc3p;
00188   DataPathc3p = getenv("ABSCORROOT");
00189 
00190   string DataPathc3ptof;
00191   DataPathc3ptof = getenv("ABSCORROOT");
00192 
00193   cout<<"mccor = "<<mccor<<endl;
00194 
00195   DataPathc3p += "/share/c3p.txt";
00196   DataPathc3ptof += "/share/c3ptof.txt";
00197 
00198   ifstream inc3p;
00199   inc3p.exceptions( ifstream::failbit | ifstream::badbit );
00200   if(usetof==0)inc3p.open(DataPathc3p.c_str(),ios::in);
00201   if(usetof==1)inc3p.open(DataPathc3ptof.c_str(),ios::in);
00202   for(int i=0; i<4; i++){
00203     double am,ame;
00204     inc3p>>am;
00205     inc3p>>ame;
00206     ai[i]=am;
00207   }
00208 
00209   string paraPath = getenv("ABSCORROOT");
00210   if(paraPath==""){} //cout<<"EmcRec environment not set!";
00211 
00212   // Read energy correction parameters from PhotonCor/McCor
00213   if(MCuseTof==1){
00214     paraPath += "/share/evsetTof.txt";
00215   }
00216   if(MCuseTof==0){
00217     paraPath += "/share/evset.txt";
00218   }
00219 
00220   ifstream in2;
00221   in2.open(paraPath.c_str());
00222   assert(in2);
00223   double energy,thetaid,peak1,peakerr1,res,reserr;
00224   dt = new TGraph2DErrors();
00225   dtErr = new TGraph2DErrors();
00226   //for(int i=0;i<560;i++){
00227   for(int i=0;i<1484;i++){  //53*28
00228     in2>>energy;
00229     in2>>thetaid;
00230     in2>>peak1;
00231     in2>>peakerr1;
00232     in2>>res;
00233     in2>>reserr;
00234     dt->SetPoint(i,energy,thetaid,peak1);
00235     dt->SetPointError(i,0,0,peakerr1);
00236     dtErr->SetPoint(i,energy,thetaid,res);
00237     dtErr->SetPointError(i,0,0,reserr);
00238     if(i<28) e25min[int(thetaid)]=energy;
00239     if(i>=1484-28) e25max[int(thetaid)]=energy;
00240     // if(i>=560-28) e25max[int(thetaid)]=energy;
00241   }
00242   in2.close();
00243   //-------------------------
00244   // Suppression of hot crystals
00245   // Reading the map from hotcry.txt (Hajime, Jul 2013)
00246   for(int ih=0;ih<10;ih++){
00247     hrunstart[ih]=-1;
00248     hrunend[ih]=-1;
00249     hcell[ih]=-1;
00250   }
00251   int numhots=4; // numbers of hot crystals
00252   int dumring,dumphi,dummod,dumid;
00253   string HotList;
00254   HotList = getenv("ABSCORROOT");
00255   HotList += "/share/hotcry.txt";
00256   ifstream hotcrys;
00257   hotcrys.exceptions( ifstream::failbit | ifstream::badbit );
00258   hotcrys.open(HotList.c_str(),ios::in);
00259   for(int il=0; il<numhots; il++){
00260     hotcrys>>hrunstart[il];
00261     hotcrys>>hrunend[il];
00262     hotcrys>>hcell[il];
00263     hotcrys>>dumring;
00264     hotcrys>>dumphi;
00265     hotcrys>>dummod;
00266     hotcrys>>dumid;
00267   }
00268   hotcrys.close();
00269   //-------------------------
00270 
00271 
00272   log << MSG::INFO << "successfully return from initialize()" <<endmsg;
00273   return StatusCode::SUCCESS;
00274 
00275 
00276 
00277 
00278 }


Member Data Documentation

int AbsCor::dodatacor [private]

Definition at line 23 of file AbsCor.h.

Referenced by AbsCor(), and execute().

int AbsCor::dopi0Cor [private]

Definition at line 24 of file AbsCor.h.

Referenced by AbsCor(), and execute().

TGraph2DErrors* AbsCor::dt [private]

Definition at line 45 of file AbsCor.h.

Referenced by ECorrMC(), and initialize().

TGraph2DErrors* AbsCor::dtErr [private]

Definition at line 47 of file AbsCor.h.

Referenced by ErrMC(), and initialize().

double AbsCor::e25max[28] [private]

Definition at line 43 of file AbsCor.h.

Referenced by E25max(), and initialize().

double AbsCor::e25min[28] [private]

Definition at line 42 of file AbsCor.h.

Referenced by E25min(), and initialize().

int AbsCor::edgecor [private]

Definition at line 21 of file AbsCor.h.

Referenced by AbsCor(), and execute().

int AbsCor::hcell[10] [private]

Definition at line 29 of file AbsCor.h.

Referenced by execute(), and initialize().

int AbsCor::hotcellmask [private]

Definition at line 26 of file AbsCor.h.

Referenced by AbsCor(), and execute().

int AbsCor::hrunend[10] [private]

Definition at line 28 of file AbsCor.h.

Referenced by execute(), and initialize().

int AbsCor::hrunstart[10] [private]

Definition at line 27 of file AbsCor.h.

Referenced by execute(), and initialize().

NTuple::Item<double> AbsCor::m_cedge [private]

Definition at line 56 of file AbsCor.h.

Referenced by execute(), and initialize().

NTuple::Item<double> AbsCor::m_ct [private]

Definition at line 55 of file AbsCor.h.

Referenced by execute(), and initialize().

NTuple::Item<double> AbsCor::m_e5 [private]

Definition at line 54 of file AbsCor.h.

Referenced by execute(), and initialize().

NTuple::Item<double> AbsCor::m_ec [private]

Definition at line 57 of file AbsCor.h.

Referenced by execute(), and initialize().

NTuple::Item<double> AbsCor::m_ef [private]

Definition at line 53 of file AbsCor.h.

Referenced by execute(), and initialize().

int** AbsCor::m_index [private]

Definition at line 32 of file AbsCor.h.

Referenced by initialize().

double** AbsCor::m_par [private]

Definition at line 33 of file AbsCor.h.

Referenced by execute(), and initialize().

double** AbsCor::m_parphi [private]

Definition at line 34 of file AbsCor.h.

Referenced by initialize().

NTuple::Tuple* AbsCor::m_tuple1 [private]

Definition at line 52 of file AbsCor.h.

Referenced by execute(), and initialize().

int AbsCor::mccor [private]

Definition at line 20 of file AbsCor.h.

Referenced by AbsCor(), and initialize().

int AbsCor::MCuseTof [private]

Definition at line 25 of file AbsCor.h.

Referenced by AbsCor(), execute(), and initialize().

bool AbsCor::ntOut [private]

Definition at line 19 of file AbsCor.h.

Referenced by AbsCor(), execute(), and initialize().

int AbsCor::usetof [private]

Definition at line 22 of file AbsCor.h.

Referenced by AbsCor(), execute(), and initialize().


Generated on Tue Nov 29 23:17:26 2016 for BOSS_7.0.2 by  doxygen 1.4.7