00001 #include "TofRec/TofCheckData.h"
00002 #include "DstEvent/TofHitStatus.h"
00003 #include <iostream>
00004
00005 TofCheckData::TofCheckData( NTuple::Tuple*& trk, NTuple::Tuple*& cbtrk, NTuple::Tuple*& cetrk, NTuple::Tuple*& cetftrk ):trk_tuple(trk),cbtrk_tuple(cbtrk),cetrk_tuple(cetrk),cetftrk_tuple(cetftrk) {
00006
00007 if(!trk_tuple) {
00008 std::cerr<<" Error: invalid pionter in TofCheckData(NTuple::Tuple*) for trk_tple"<<std::endl;
00009 }
00010 else{
00011 trk_tuple->addItem("run", trk_run );
00012 trk_tuple->addItem("event", trk_event );
00013 trk_tuple->addItem("toftrackid", trk_toftrackid );
00014 trk_tuple->addItem("trackid", trk_trackid );
00015 trk_tuple->addItem("charge", trk_charge );
00016 trk_tuple->addItem("p", 5, trk_p );
00017 trk_tuple->addItem("tofid", trk_tofid );
00018 trk_tuple->addItem("strip", trk_strip );
00019 trk_tuple->addItem("raw", trk_raw );
00020 trk_tuple->addItem("readout", trk_readout );
00021 trk_tuple->addItem("counter", trk_counter );
00022 trk_tuple->addItem("cluster", trk_cluster );
00023 trk_tuple->addItem("barrel", trk_barrel );
00024 trk_tuple->addItem("east", trk_east );
00025 trk_tuple->addItem("layer", trk_layer );
00026 trk_tuple->addItem("over", trk_overflow );
00027 trk_tuple->addItem("cluster", trk_cluster );
00028 trk_tuple->addItem("multihit", trk_multihit );
00029 trk_tuple->addItem("ncounter", trk_ncounter );
00030 trk_tuple->addItem("neast", trk_neast );
00031 trk_tuple->addItem("nwest", trk_nwest );
00032 trk_tuple->addItem("mrpc", trk_mrpc );
00033 trk_tuple->addItem("path", trk_path );
00034 trk_tuple->addItem("zrhit", trk_zrhit );
00035 trk_tuple->addItem("ph", trk_ph );
00036 trk_tuple->addItem("tof", trk_tof );
00037 trk_tuple->addItem("errtof", trk_errtof );
00038 trk_tuple->addItem("beta", trk_beta );
00039 trk_tuple->addItem("texpe", trk_texpe );
00040 trk_tuple->addItem("texpmu", trk_texpmu );
00041 trk_tuple->addItem("texppi", trk_texppi );
00042 trk_tuple->addItem("texpk", trk_texpk );
00043 trk_tuple->addItem("texpp", trk_texpp );
00044 trk_tuple->addItem("offe", trk_offe );
00045 trk_tuple->addItem("offmu", trk_offmu );
00046 trk_tuple->addItem("offpi", trk_offpi );
00047 trk_tuple->addItem("offk", trk_offk );
00048 trk_tuple->addItem("offp", trk_offp );
00049 trk_tuple->addItem("sige", trk_sige );
00050 trk_tuple->addItem("sigmu", trk_sigmu );
00051 trk_tuple->addItem("sigpi", trk_sigpi );
00052 trk_tuple->addItem("sigk", trk_sigk );
00053 trk_tuple->addItem("sigp", trk_sigp );
00054 trk_tuple->addItem("qual", trk_quality );
00055 trk_tuple->addItem("t0", trk_t0 );
00056 trk_tuple->addItem("errt0", trk_errt0 );
00057 trk_tuple->addItem("errz", trk_errz );
00058 trk_tuple->addItem("phi", trk_phi );
00059 trk_tuple->addItem("errphi", trk_errphi );
00060 trk_tuple->addItem("e", trk_energy );
00061 trk_tuple->addItem("erre", trk_errenergy );
00062 }
00063
00064 if(!cbtrk_tuple) {
00065 std::cerr<<" Error: invalid pionter in TofCheckData(NTuple::Tuple*) for cbtrk_tple"<<std::endl;
00066 }
00067 else{
00068 cbtrk_tuple->addItem("run", cbtrk_run );
00069 cbtrk_tuple->addItem("event", cbtrk_event );
00070 cbtrk_tuple->addItem("tofid", cbtrk_tofid );
00071 cbtrk_tuple->addItem("qual", cbtrk_qual );
00072 cbtrk_tuple->addItem("texp", cbtrk_texp );
00073 cbtrk_tuple->addItem("tdc1", cbtrk_tdc1 );
00074 cbtrk_tuple->addItem("tdc2", cbtrk_tdc2 );
00075 cbtrk_tuple->addItem("adc1", cbtrk_adc1 );
00076 cbtrk_tuple->addItem("adc2", cbtrk_adc2 );
00077 cbtrk_tuple->addItem("zhit", cbtrk_zhit );
00078 cbtrk_tuple->addItem("dzhit", cbtrk_dzhit );
00079 cbtrk_tuple->addItem("sint", cbtrk_sintheta );
00080 cbtrk_tuple->addItem("p", cbtrk_p );
00081 cbtrk_tuple->addItem("q", cbtrk_q );
00082 cbtrk_tuple->addItem("path", cbtrk_path );
00083 }
00084
00085 if(!cetrk_tuple) {
00086 std::cerr<<" Error: invalid pionter in TofCheckData(NTuple::Tuple*) for cetrk_tple"<<std::endl;
00087 }
00088 else{
00089 cetrk_tuple->addItem("run", cetrk_run );
00090 cetrk_tuple->addItem("event", cetrk_event );
00091 cetrk_tuple->addItem("tofid", cetrk_tofid );
00092 cetrk_tuple->addItem("qual", cetrk_qual );
00093 cetrk_tuple->addItem("texp", cetrk_texp );
00094 cetrk_tuple->addItem("tdc", cetrk_tdc );
00095 cetrk_tuple->addItem("adc", cetrk_adc );
00096 cetrk_tuple->addItem("rhit", cetrk_rhit );
00097 cetrk_tuple->addItem("drhit", cetrk_drhit );
00098
00099 cetrk_tuple->addItem("p", cetrk_p );
00100 cetrk_tuple->addItem("q", cetrk_q );
00101 cetrk_tuple->addItem("path", cetrk_path );
00102 }
00103
00104 if(!cetftrk_tuple) {
00105 std::cerr<<" Error: invalid pionter in TofCheckData(NTuple::Tuple*) for cetftrk_tple"<<std::endl;
00106 }
00107 else{
00108 cetftrk_tuple->addItem("run", cetftrk_run );
00109 cetftrk_tuple->addItem("event", cetftrk_event );
00110 cetftrk_tuple->addItem("tofid", cetftrk_tofid );
00111 cetftrk_tuple->addItem("qual", cetftrk_qual );
00112 cetftrk_tuple->addItem("texp", cetftrk_texp );
00113 cetftrk_tuple->addItem("tdc1", cetftrk_tdc1 );
00114 cetftrk_tuple->addItem("tdc2", cetftrk_tdc2 );
00115 cetftrk_tuple->addItem("adc1", cetftrk_adc1 );
00116 cetftrk_tuple->addItem("adc2", cetftrk_adc2 );
00117 cetftrk_tuple->addItem("zhit", cetftrk_zhit );
00118 cetftrk_tuple->addItem("dzhit", cetftrk_dzhit );
00119 cetftrk_tuple->addItem("sint", cetftrk_sintheta );
00120 cetftrk_tuple->addItem("p", cetftrk_p );
00121 cetftrk_tuple->addItem("q", cetftrk_q );
00122 cetftrk_tuple->addItem("path", cetftrk_path );
00123 }
00124 }
00125
00126
00127 void TofCheckData::Fill(Event::EventHeader& eventHeader, RecTofTrack*& recTof, RecMdcKalTrack*& kalTrack, bool fillTrk ) {
00128
00129 int charge = 0;
00130 double p[5]= {0.};
00131 if( fillTrk ) {
00132 kalTrack->setPidType( RecMdcKalTrack::electron );
00133 double kappa = kalTrack->kappa();
00134 if( kappa>0 ) { charge = 1; }
00135 else { charge = -1; }
00136 if( abs(kappa)<1.0e-6 ) { kappa = 1.0e-6; }
00137 p[0] = abs(sqrt( 1.0 + kalTrack->tanl()*kalTrack->tanl() ) / kappa);
00138 kalTrack->setPidType( RecMdcKalTrack::muon );
00139 kappa = kalTrack->kappa();
00140 if( abs(kappa)<1.0e-6 ) { kappa = 1.0e-6; }
00141 p[1] = abs(sqrt( 1.0 + kalTrack->tanl()*kalTrack->tanl() ) / kappa );
00142 kalTrack->setPidType( RecMdcKalTrack::pion );
00143 kappa = kalTrack->kappa();
00144 if( abs(kappa)<1.0e-6 ) { kappa = 1.0e-6; }
00145 p[2] = abs(sqrt( 1.0 + kalTrack->tanl()*kalTrack->tanl() ) / kappa );
00146 kalTrack->setPidType( RecMdcKalTrack::kaon );
00147 kappa = kalTrack->kappa();
00148 if( abs(kappa)<1.0e-6 ) { kappa = 1.0e-6; }
00149 p[3] = abs(sqrt( 1.0 + kalTrack->tanl()*kalTrack->tanl() ) / kappa );
00150 kalTrack->setPidType( RecMdcKalTrack::proton );
00151 kappa = kalTrack->kappa();
00152 if( abs(kappa)<1.0e-6 ) { kappa = 1.0e-6; }
00153 p[4] = abs(sqrt( 1.0 + kalTrack->tanl()*kalTrack->tanl() ) / kappa );
00154 }
00155 trk_run = eventHeader.runNumber();
00156 trk_event = eventHeader.eventNumber();
00157 trk_toftrackid = recTof->tofTrackID();
00158 trk_trackid = recTof->trackID();
00159 trk_charge = charge;
00160 for( unsigned int i=0; i<5; i++ ) {
00161 trk_p[i] = p[i];
00162 }
00163 trk_tofid = recTof->tofID();
00164 trk_strip = recTof->strip();
00165 TofHitStatus* hitStatus = new TofHitStatus;
00166 hitStatus->setStatus( recTof->status() );
00167 trk_raw = hitStatus->is_raw();
00168 trk_readout = hitStatus->is_readout();
00169 trk_counter = hitStatus->is_counter();
00170 trk_cluster = hitStatus->is_cluster();
00171 trk_barrel = hitStatus->is_barrel();
00172 trk_east = hitStatus->is_east();
00173 trk_layer = hitStatus->layer();
00174 trk_overflow = hitStatus->is_overflow();
00175 trk_multihit = hitStatus->is_multihit();
00176 trk_ncounter = hitStatus->ncounter();
00177 trk_neast = hitStatus->neast();
00178 trk_nwest = hitStatus->nwest();
00179 trk_mrpc = hitStatus->is_mrpc();
00180 delete hitStatus;
00181
00182
00183
00184
00185
00186
00187
00188
00189 trk_path = recTof->path();
00190 trk_zrhit = recTof->zrhit();
00191 trk_ph = recTof->ph();
00192 trk_tof = recTof->tof();
00193 trk_errtof = recTof->errtof();
00194 trk_beta = recTof->beta();
00195 trk_texpe = recTof->texpElectron();
00196 trk_texpmu = recTof->texpMuon();
00197 trk_texppi = recTof->texpPion();
00198 trk_texpk = recTof->texpKaon();
00199 trk_texpp = recTof->texpProton();
00200 trk_offe = recTof->toffsetElectron();
00201 trk_offmu = recTof->toffsetMuon();
00202 trk_offpi = recTof->toffsetPion();
00203 trk_offk = recTof->toffsetKaon();
00204 trk_offp = recTof->toffsetProton();
00205 trk_sige = recTof->sigmaElectron();
00206 trk_sigmu = recTof->sigmaMuon();
00207 trk_sigpi = recTof->sigmaPion();
00208 trk_sigk = recTof->sigmaKaon();
00209 trk_sigp = recTof->sigmaProton();
00210 trk_quality = recTof->quality();
00211 trk_t0 = recTof->t0();
00212 trk_errt0 = recTof->errt0();
00213 trk_errz = recTof->errz();
00214 trk_phi = recTof->phi();
00215 trk_errphi = recTof->errphi();
00216 trk_energy = recTof->energy();
00217 trk_errenergy = recTof->errenergy();
00218 trk_tuple->write();
00219 return;
00220 }
00221
00222
00223 void TofCheckData::FillBarrel(Event::EventHeader& eventHeader, RecBTofCalHit*& recBTof ) {
00224
00225 cbtrk_run = eventHeader.runNumber();
00226 cbtrk_event = eventHeader.eventNumber();
00227 cbtrk_tofid = recBTof->mod();
00228 cbtrk_qual = recBTof->qual();
00229 cbtrk_texp = recBTof->tpred(1);
00230 cbtrk_tdc1 = recBTof->tdc1();
00231 cbtrk_tdc2 = recBTof->tdc2();
00232 cbtrk_adc1 = recBTof->adc1();
00233 cbtrk_adc2 = recBTof->adc2();
00234 cbtrk_zhit = recBTof->zHit();
00235 cbtrk_dzhit = recBTof->dzHit();
00236 cbtrk_sintheta = recBTof->sinTheta();
00237 cbtrk_p = recBTof->p();
00238 cbtrk_q = recBTof->Q();
00239 cbtrk_path = recBTof->path();
00240 cbtrk_tuple->write();
00241 return;
00242 }
00243
00244
00245 void TofCheckData::Fill(Event::EventHeader& eventHeader, RecETofCalHit*& recETof ) {
00246
00247 cetrk_run = eventHeader.runNumber();
00248 cetrk_event = eventHeader.eventNumber();
00249 cetrk_tofid = recETof->mod();
00250 cetrk_qual = recETof->qual();
00251 cetrk_texp = recETof->tpred(1);
00252 cetrk_tdc = recETof->tdc();
00253 cetrk_adc = recETof->adc();
00254 cetrk_rhit = recETof->rHit();
00255 cetrk_drhit = recETof->drHit();
00256
00257 cetrk_p = recETof->p();
00258 cetrk_q = recETof->Q();
00259 cetrk_path = recETof->path();
00260 cetrk_tuple->write();
00261 return;
00262 }
00263
00264 void TofCheckData::FillETF(Event::EventHeader& eventHeader, RecBTofCalHit*& recBTof ) {
00265
00266 cetftrk_run = eventHeader.runNumber();
00267 cetftrk_event = eventHeader.eventNumber();
00268 cetftrk_tofid = recBTof->mod();
00269 cetftrk_qual = recBTof->qual();
00270 cetftrk_texp = recBTof->tpred(1);
00271 cetftrk_tdc1 = recBTof->tdc1();
00272 cetftrk_tdc2 = recBTof->tdc2();
00273 cetftrk_adc1 = recBTof->adc1();
00274 cetftrk_adc2 = recBTof->adc2();
00275 cetftrk_zhit = recBTof->zHit();
00276 cetftrk_dzhit = recBTof->dzHit();
00277 cetftrk_sintheta = recBTof->sinTheta();
00278 cetftrk_p = recBTof->p();
00279 cetftrk_q = recBTof->Q();
00280 cetftrk_path = recBTof->path();
00281 cetftrk_tuple->write();
00282 return;
00283 }
00284
00285
00286 void TofCheckData::FillCol(Event::EventHeader& eventHeader, RecTofTrackCol& recTofTrackCol, RecMdcKalTrackCol& kalTrackCol) {
00287 RecTofTrackCol::iterator iter_tof = recTofTrackCol.begin();
00288 for( ; iter_tof!=recTofTrackCol.end(); iter_tof++ ) {
00289 RecMdcKalTrackCol::iterator iter_kal = kalTrackCol.begin();
00290 for( ; iter_kal!=kalTrackCol.end(); iter_kal++ ) {
00291 if( (*iter_tof)->trackID() == (*iter_kal)->trackId() ) break;
00292 }
00293 Fill( eventHeader, *iter_tof, *iter_kal, iter_kal!=kalTrackCol.end() );
00294 }
00295 return;
00296 }
00297
00298 void TofCheckData::FillCol(Event::EventHeader& eventHeader, RecBTofCalHitCol& recBTofCalHitCol) {
00299 RecBTofCalHitCol::iterator iter_btof = recBTofCalHitCol.begin();
00300 for( ; iter_btof!=recBTofCalHitCol.end(); iter_btof++ ) {
00301 if( fabs( (*iter_btof)->dzHit() - 1.0 )<1.0e-6 ) {
00302 FillBarrel( eventHeader, *iter_btof );
00303 }
00304 else {
00305 FillETF( eventHeader, *iter_btof );
00306 }
00307 }
00308 return;
00309 }
00310
00311 void TofCheckData::FillCol(Event::EventHeader& eventHeader, RecETofCalHitCol& recETofCalHitCol) {
00312 RecETofCalHitCol::iterator iter_etof = recETofCalHitCol.begin();
00313 for( ; iter_etof!=recETofCalHitCol.end(); iter_etof++ ) {
00314 Fill( eventHeader, *iter_etof );
00315 }
00316 return;
00317 }