00001
00002
00003
00004
00005
00006
00007
00008 #include "TH2.h"
00009 #include "TCanvas.h"
00010 #include "TFile.h"
00011 #include "TApplication.h"
00012 #include "TTree.h"
00013 #include "TF1.h"
00014 #include "TNamed.h"
00015 #include "TGraph.h"
00016 #include "TProfile.h"
00017
00018 #include "TFndHdt.h"
00019
00020
00021 using namespace FROOT;
00022
00023 TH1F *p_ped_e[12];
00024 TH1F *p_ped_p[12];
00025 TH1F *p_bha_e[12];
00026 TH1F *p_bha_p[12];
00027 TH1F *p_kaon_e[12];
00028 TH1F *p_kaon_p[12];
00029 TH1F *p_eq_e[12];
00030 TH1F *p_eq_p[12];
00031
00032 TH1F *p_EQbha_e[12];
00033 TH1F *p_EQbha_p[12];
00034
00035 TH1F *p_EQkaon_e[12];
00036 TH1F *p_EQkaon_p[12];
00037
00038
00039 TH1F *p_EQ_e[12];
00040 TH1F *p_EQ_p[12];
00041
00042 TH1F *p_OverKaonThreshold[12];
00043
00044 Int_t CurrentRunNumber;
00045
00046 Int_t KaonThreshold[K_N_TOFINO_SLABS];
00047 Int_t NevOverThreshold[K_N_TOFINO_SLABS];
00048 Int_t NevAllKaon[K_N_TOFINO_SLABS];
00049
00050 Float_t ped_table_e[K_N_TOFINO_SLABS];
00051 Float_t ped_table_p[K_N_TOFINO_SLABS];
00052 Float_t eq_table_e[K_N_TOFINO_SLABS];
00053 Float_t eq_table_p[K_N_TOFINO_SLABS];
00054
00055 TFile *fHdtFile = 0;
00056
00057 TFndHdt *fCurHdtEv = 0;
00058 TTree *fHdtTree = 0;
00059
00060 void DeclareProfiles(Int_t const &run_num_start, Int_t const &run_num_stop){
00061
00062 TString hname;
00063 TString htitle;
00064
00065 Int_t N=run_num_stop-run_num_start+2;
00066
00067 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00068 hname.Form("PedE_%d",sl+1);
00069 htitle.Form("Tofino Pedestal slab: %d e",sl+1);
00070 p_ped_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00071
00072 hname.Form("PedP_%d",sl+1);
00073 htitle.Form("Tofino Pedestal slab: %d p",sl+1);
00074 p_ped_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00075
00076 hname.Form("BhaE_%d",sl+1);
00077 htitle.Form("Tofino Bhabha Peak slab: %d e",sl+1);
00078 p_bha_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00079
00080 hname.Form("BhaP_%d",sl+1);
00081 htitle.Form("Tofino Bhabha Peak slab: %d p",sl+1);
00082 p_bha_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00083
00084 hname.Form("EqBhaE_%d",sl+1);
00085 htitle.Form("Tofino Bhabha Peak (eq.) slab: %d e",sl+1);
00086 p_EQbha_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00087
00088 hname.Form("EqBhaP_%d",sl+1);
00089 htitle.Form("Tofino Bhabha Peak (eq.) slab: %d p",sl+1);
00090 p_EQbha_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00091
00092
00093
00094
00095
00096 hname.Form("KaonE_%d",sl+1);
00097 htitle.Form("Tofino Kaon Peak slab: %d e",sl+1);
00098 p_kaon_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00099
00100 hname.Form("KaonP_%d",sl+1);
00101 htitle.Form("Tofino Kaon Peak slab: %d p",sl+1);
00102 p_kaon_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00103
00104 hname.Form("EqKaonE_%d",sl+1);
00105 htitle.Form("Tofino Kaon Peak (eq.) slab: %d e",sl+1);
00106 p_EQkaon_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00107
00108 hname.Form("EqKaonP_%d",sl+1);
00109 htitle.Form("Tofino Kaon Peak slab (eq.): %d p",sl+1);
00110 p_EQkaon_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00111
00112
00113
00114
00115
00116 hname.Form("EqE_%d",sl+1);
00117 htitle.Form("Tofino Equalization Factor slab: %d e",sl+1);
00118 p_eq_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00119
00120 hname.Form("EqP_%d",sl+1);
00121 htitle.Form("Tofino Equalization Factor slab: %d p",sl+1);
00122 p_eq_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00123
00124 hname.Form("EqFactorE_%d",sl+1);
00125 htitle.Form("Tofino Equalization Factor slab: %d e",sl+1);
00126 p_EQ_e[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00127
00128 hname.Form("EqFactorP_%d",sl+1);
00129 htitle.Form("Tofino Equalization Factor slab: %d p",sl+1);
00130 p_EQ_p[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00131
00132 hname.Form("OverKaonThreshold_%d",sl+1);
00133 htitle.Form("Tofino Ratio over kaon threshold slab: %d p",sl+1);
00134 p_OverKaonThreshold[sl] = new TH1F(hname, htitle, N, run_num_start-0.5, run_num_stop+1.5);
00135 }
00136 }
00137
00138 void SaveProfiles(const TString &fname){
00139 TFile *fOutFile = new TFile(fname,"RECREATE");
00140
00141 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00142 p_ped_e[sl]->Write();
00143 p_ped_p[sl]->Write();
00144 p_bha_e[sl]->Write();
00145 p_bha_p[sl]->Write();
00146 p_kaon_e[sl]->Write();
00147 p_kaon_p[sl]->Write();
00148 p_eq_e[sl]->Write();
00149 p_eq_p[sl]->Write();
00150 p_EQbha_e[sl]->Write();
00151 p_EQbha_p[sl]->Write();
00152
00153 p_EQkaon_e[sl]->Write();
00154 p_EQkaon_p[sl]->Write();
00155
00156 p_EQ_e[sl]->Write();
00157 p_EQ_p[sl]->Write();
00158 p_OverKaonThreshold[sl]->Write();
00159 }
00160
00161 fOutFile->Close();
00162 delete fOutFile;
00163 fOutFile = 0;
00164
00165 }
00166
00167 void CloseHdtFile(){
00168
00169 if (fHdtTree){
00170 delete fHdtTree;
00171
00172 fHdtTree = 0;
00173 }
00174
00175 if(fHdtFile){
00176 if(fHdtFile->IsOpen()) fHdtFile->Close();
00177 delete fHdtFile;
00178 fHdtFile = 0;
00179 }
00180
00181 }
00182
00183 Int_t OpenHdtFile(const TString &runtype,const Int_t &run_num){
00184
00185
00186
00187
00188 CloseHdtFile();
00189
00190 TString runname;
00191 TString fnam;
00192
00193
00194 runname = BuildRunName(runtype,run_num, kTRUE);
00195
00196
00197
00198
00199
00200
00201
00202 fnam.Form("%s/%s.hdt.root",ExpandPathName("$FND_HDT").Data(),runname.Data());
00203
00204 if(gSystem->AccessPathName(fnam)){
00205 gROOT->Warning("OpenHdtFile","file \"%s\" not found",fnam.Data());
00206 return -1;
00207 }
00208
00209 gROOT->Info("OpenHdtFile","opening file \"%s\"",fnam.Data());
00210 fHdtFile = new TFile(fnam,"OPEN");
00211
00212 return 0;
00213 }
00214
00215
00216 Int_t LoadHdtTree(){
00217
00218
00219
00220
00221 if (fHdtTree){
00222 delete fHdtTree;
00223
00224 fHdtTree = 0;
00225 }
00226
00227 fHdtTree = (TTree *) ( fHdtFile->Get("FIN_HDT_TREE") );
00228 if(!fHdtTree){
00229 gROOT->Warning("LoadHdtTree","Problems while getting HDT tree from file");
00230 return -1;
00231 }
00232
00233
00234 fHdtTree->SetBranchAddress("fndhdt",&fCurHdtEv);
00235
00236 return 0;
00237 }
00238
00239 void GetMultiplicity(Int_t *mult){
00240
00241
00242 mult[0]=0; mult[1]=0;
00243
00244 TClonesArray *TofHits = fCurHdtEv->GetTofHits();
00245 Int_t lay, slab;
00246 TFndHTof *cur_hit = 0;
00247
00248 for(Int_t ic=0;ic< TofHits->GetEntries(); ic++) {
00249 cur_hit = (TFndHTof *) ( TofHits->At(ic) );
00250 cur_hit->GetLayer_Slab(lay, slab);
00251 if(lay==E_FIN_OUTER_LAYER) continue;
00252
00253 Bool_t both_adc = kFALSE;
00254 Bool_t both_tdcl = kFALSE;
00255 Bool_t both_tdch = kFALSE;
00256 if(cur_hit->GetBothAdc() == TFndHit::E_HIT_BOTH_CH ) both_adc = kTRUE;
00257 if(cur_hit->GetBothLowTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdcl = kTRUE;
00258 if(cur_hit->GetBothHighTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdch = kTRUE;
00259
00260 Double_t adce=cur_hit->GetAdcE();
00261 Double_t adcp=cur_hit->GetAdcP();
00262
00263 if(both_tdch&&adce>0&&adcp>0){
00264 mult[1]++;
00265 }
00266 if(both_tdcl&&adce>0&&adcp>0){
00267 mult[0]++;
00268 }
00269 }
00270 }
00271
00272 Int_t GetTrigType(){
00273 TFndTrig *cur_trig = (TFndTrig *) (fCurHdtEv->GetGts());
00274 Short_t hyp_bit=cur_trig->GetPU_cont_bit(0, 0);
00275 Short_t bha_bit=cur_trig->GetPU_cont_bit(0, 1);
00276 Short_t cosm_bit=cur_trig->GetPU_cont_bit(0, 5);
00277 if ((CurrentRunNumber>=5872&&CurrentRunNumber<=5880)||
00278 (CurrentRunNumber>=5887&&CurrentRunNumber<=5905)||
00279 (CurrentRunNumber>=5912&&CurrentRunNumber<=5935)||
00280 (CurrentRunNumber>=5941&&CurrentRunNumber<=5957)||
00281 (CurrentRunNumber>=5998&&CurrentRunNumber<=6014)||
00282 (CurrentRunNumber>=6020&&CurrentRunNumber<=6014)||
00283 (CurrentRunNumber>=7290&&CurrentRunNumber<=7316)||
00284 (CurrentRunNumber>=7319&&CurrentRunNumber<=7329)||
00285 (CurrentRunNumber>=7332&&CurrentRunNumber<=7346)||
00286 (CurrentRunNumber>=7349&&CurrentRunNumber<=7364)||
00287 (CurrentRunNumber>=7367&&CurrentRunNumber<=7382)||
00288 (CurrentRunNumber>=7385&&CurrentRunNumber<=7400)||
00289 (CurrentRunNumber>=7403&&CurrentRunNumber<=7405)||
00290 (CurrentRunNumber>=7403&&CurrentRunNumber<=7405)||
00291 (CurrentRunNumber>=7407&&CurrentRunNumber<=7421)||
00292 (CurrentRunNumber>=7423&&CurrentRunNumber<=7433)||
00293 (CurrentRunNumber>=7436&&CurrentRunNumber<=7445)||
00294 (CurrentRunNumber>=7447&&CurrentRunNumber<=7453)||
00295 (CurrentRunNumber>=7458&&CurrentRunNumber<=7463)||
00296 (CurrentRunNumber>=7465&&CurrentRunNumber<=7475)||
00297 (CurrentRunNumber>=7477&&CurrentRunNumber<=7486)||
00298 (CurrentRunNumber>=7488&&CurrentRunNumber<=7497)||
00299 (CurrentRunNumber>=7499&&CurrentRunNumber<=7517)||
00300 (CurrentRunNumber>=7519&&CurrentRunNumber<=7528)||
00301 (CurrentRunNumber>=7530&&CurrentRunNumber<=7541)||
00302 (CurrentRunNumber>=7543&&CurrentRunNumber<=7552)||
00303 (CurrentRunNumber>=7554&&CurrentRunNumber<=7563)||
00304 (CurrentRunNumber>=7565&&CurrentRunNumber<=7574)||
00305 (CurrentRunNumber>=7576&&CurrentRunNumber<=7585))
00306 { hyp_bit=1; bha_bit=0; cosm_bit=0;}
00307 if ((CurrentRunNumber>=5881&&CurrentRunNumber<=5886)||
00308 (CurrentRunNumber>=5906&&CurrentRunNumber<=5911)||
00309 (CurrentRunNumber>=5936&&CurrentRunNumber<=5940)||
00310 (CurrentRunNumber>=5969&&CurrentRunNumber<=5973)||
00311 (CurrentRunNumber>=5986&&CurrentRunNumber<=5991)||
00312 (CurrentRunNumber>=7289&&CurrentRunNumber<=7289)||
00313 (CurrentRunNumber>=7317&&CurrentRunNumber<=7318)||
00314 (CurrentRunNumber>=7330&&CurrentRunNumber<=7331)||
00315 (CurrentRunNumber>=7347&&CurrentRunNumber<=7348)||
00316 (CurrentRunNumber>=7365&&CurrentRunNumber<=7366)||
00317 (CurrentRunNumber>=7383&&CurrentRunNumber<=7384)||
00318 (CurrentRunNumber>=7401&&CurrentRunNumber<=7402)||
00319 (CurrentRunNumber>=7406&&CurrentRunNumber<=7406)||
00320 (CurrentRunNumber>=7422&&CurrentRunNumber<=7422)||
00321 (CurrentRunNumber>=7434&&CurrentRunNumber<=7435)||
00322 (CurrentRunNumber>=7446&&CurrentRunNumber<=7446)||
00323 (CurrentRunNumber>=7454&&CurrentRunNumber<=7457)||
00324 (CurrentRunNumber>=7464&&CurrentRunNumber<=7464)||
00325 CurrentRunNumber==7476||CurrentRunNumber==7487||
00326 CurrentRunNumber==7498||CurrentRunNumber==7518||
00327 CurrentRunNumber==7529||CurrentRunNumber==7542||
00328 CurrentRunNumber==7553||CurrentRunNumber==7564||
00329 CurrentRunNumber==7575||CurrentRunNumber==7586)
00330 { hyp_bit=0; bha_bit=1; cosm_bit=0;}
00331 if ((CurrentRunNumber>=7587&&CurrentRunNumber<=8335)||
00332 (CurrentRunNumber>=9027&&CurrentRunNumber<=9084)||
00333 (CurrentRunNumber>=9394&&CurrentRunNumber<=9585))
00334 {
00335 if (CurrentRunNumber==7597||
00336 CurrentRunNumber==7608||
00337 CurrentRunNumber==7619||
00338 CurrentRunNumber==7630||
00339 CurrentRunNumber==7639||
00340 CurrentRunNumber==7650||
00341 CurrentRunNumber==7661||
00342 CurrentRunNumber==7670||
00343 CurrentRunNumber==7690||
00344 CurrentRunNumber==7691||
00345 CurrentRunNumber==7702||
00346 CurrentRunNumber==7713||
00347 CurrentRunNumber==7719||
00348 CurrentRunNumber==7733||
00349 CurrentRunNumber==7744||
00350 CurrentRunNumber==7756||
00351 CurrentRunNumber==7777||
00352 CurrentRunNumber==7788||
00353 CurrentRunNumber==7792||
00354 CurrentRunNumber==7793||
00355 (CurrentRunNumber>=7799&&CurrentRunNumber<=7802)||
00356 CurrentRunNumber==7814||
00357 CurrentRunNumber==7825||
00358 CurrentRunNumber==7836||
00359 CurrentRunNumber==7847||
00360 CurrentRunNumber==7858||
00361 CurrentRunNumber==7869||
00362 CurrentRunNumber==7873||
00363 CurrentRunNumber==7874||
00364 CurrentRunNumber==7885||
00365 CurrentRunNumber==7896||
00366 CurrentRunNumber==7907||
00367 CurrentRunNumber==7919||
00368 CurrentRunNumber==7921||
00369 CurrentRunNumber==7932||
00370 CurrentRunNumber==7943||
00371 CurrentRunNumber==7954||
00372 CurrentRunNumber==7965||
00373 CurrentRunNumber==7976||
00374 CurrentRunNumber==7987||
00375 CurrentRunNumber==7991||
00376 CurrentRunNumber==7992||
00377 CurrentRunNumber==7993||
00378 CurrentRunNumber==8004||
00379 CurrentRunNumber==8005||
00380 CurrentRunNumber==8023||
00381 CurrentRunNumber==8064||
00382 CurrentRunNumber==8065||
00383 CurrentRunNumber==8074||
00384 CurrentRunNumber==8085||
00385 CurrentRunNumber==8098||
00386 CurrentRunNumber==8109||
00387 CurrentRunNumber==8120||
00388 CurrentRunNumber==8131||
00389 CurrentRunNumber==8142||
00390 CurrentRunNumber==8153||
00391 CurrentRunNumber==8163||
00392 CurrentRunNumber==8174||
00393 CurrentRunNumber==8185||
00394 CurrentRunNumber==8208||
00395 CurrentRunNumber==8222||
00396 CurrentRunNumber==8233||
00397 CurrentRunNumber==8244||
00398 CurrentRunNumber==8255||
00399 CurrentRunNumber==8266||
00400 CurrentRunNumber==8277||
00401 CurrentRunNumber==8288||
00402 CurrentRunNumber==8299||
00403 CurrentRunNumber==8303||
00404 CurrentRunNumber==8308||
00405 CurrentRunNumber==8319||
00406 CurrentRunNumber==8334||
00407 CurrentRunNumber==8335||
00408 CurrentRunNumber==9029||
00409 CurrentRunNumber==9040||
00410 CurrentRunNumber==9051||
00411 CurrentRunNumber==9062||
00412 CurrentRunNumber==9073||
00413 CurrentRunNumber==9401||
00414 CurrentRunNumber==9412||
00415 CurrentRunNumber==9416||
00416 CurrentRunNumber==9428||
00417 CurrentRunNumber==9439||
00418 CurrentRunNumber==9450||
00419 CurrentRunNumber==9461||
00420 CurrentRunNumber==9472||
00421 CurrentRunNumber==9483||
00422 CurrentRunNumber==9494||
00423 CurrentRunNumber==9505||
00424 CurrentRunNumber==9516||
00425 CurrentRunNumber==9527||
00426 CurrentRunNumber==9538||
00427 CurrentRunNumber==9549||
00428 CurrentRunNumber==9560||
00429 CurrentRunNumber==9571||
00430 CurrentRunNumber==9582)
00431 { hyp_bit=0; bha_bit=1; cosm_bit=0;}
00432 else { hyp_bit=1; bha_bit=0; cosm_bit=0;}
00433 }
00434 return (Int_t) hyp_bit+2*bha_bit+32*cosm_bit;
00435 }
00436
00437 void FillHistos(){
00438
00439 TClonesArray *TofHits = fCurHdtEv->GetTofHits();
00440
00441 Int_t lay, slab;
00442 TFndHTof *cur_hit = 0;
00443 Int_t mult[2];
00444 GetMultiplicity(mult);
00445 if (GetTrigType()!=1||mult[1]!=2) return;
00446
00447 for(Int_t ic=0;ic< TofHits->GetEntries(); ic++) {
00448 cur_hit = (TFndHTof *) ( TofHits->At(ic) );
00449
00450 cur_hit->GetLayer_Slab(lay, slab);
00451
00452
00453 if(lay==E_FIN_OUTER_LAYER) continue;
00454
00455 Bool_t both_adc = kFALSE;
00456 Bool_t both_tdcl = kFALSE;
00457 Bool_t both_tdch = kFALSE;
00458 if(cur_hit->GetBothAdc() == TFndHit::E_HIT_BOTH_CH ) both_adc = kTRUE;
00459 if(cur_hit->GetBothLowTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdcl = kTRUE;
00460 if(cur_hit->GetBothHighTdc() == TFndHit::E_HIT_BOTH_CH ) both_tdch = kTRUE;
00461
00462
00463
00464
00465
00466
00467
00468 Double_t adce=cur_hit->GetAdcE();
00469 Double_t adcp=cur_hit->GetAdcP();
00470 Double_t sqradc;
00471 sqradc=sqrt((adce-ped_table_e[slab-1])*eq_table_e[slab-1]
00472 *(adcp-ped_table_p[slab-1])*eq_table_p[slab-1]);
00473
00474 if(both_tdch){
00475 if (adce>1&&adcp>1){
00476 NevAllKaon[slab-1]++;
00477 if (sqradc>KaonThreshold[slab-1]) NevOverThreshold[slab-1]++;
00478 }
00479 }
00480 }
00481 }
00482
00483 void EventLoop(const Int_t &nevs){
00484
00485 Int_t entries = fHdtTree->GetEntries();
00486
00487 Int_t cur_ev = 0;
00488 while(1){
00489 if(cur_ev >= entries){
00490 gROOT->Info("EventLoop","run completed");
00491 break;
00492 }
00493 if(nevs != -1 && cur_ev >= nevs){
00494 gROOT->Info("EventLoop","requested number of events reached");
00495 break;
00496 }
00497
00498 fHdtTree->GetEntry(cur_ev);
00499
00500 FillHistos();
00501 if(cur_ev%3000 == 0 ) cout << "cur_ev: " << cur_ev << endl;
00502
00503
00504 cur_ev++;
00505 }
00506 }
00507
00508 void FillTofFromHdt(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop,const TString &root_filename,const Int_t &nevs, Int_t B){
00509
00510 gStyle->SetOptFit(1);
00511
00512
00513
00514 for(Int_t cur_run=run_num_start; cur_run <=run_num_stop ; cur_run++){
00515 cout << "Filling from run \"" << runtype.Data() << "\" " << cur_run << endl;
00516 if(OpenHdtFile(runtype,cur_run) !=0) continue;
00517 if(LoadHdtTree() != 0) continue;
00518
00519 CurrentRunNumber = cur_run;
00520
00521 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00522 NevOverThreshold[sl]=0;
00523 NevAllKaon[sl]=0;
00524 }
00525 EventLoop(nevs);
00526 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00527 if (NevAllKaon[sl]>0){
00528 p_OverKaonThreshold[sl]->Fill(cur_run, (Double_t)NevOverThreshold[sl]/NevAllKaon[sl]);
00529 }
00530 }
00531 CloseHdtFile();
00532 }
00533
00534
00535
00536
00537
00538
00539
00540
00541 }
00542
00543 void FillTofFromHdt_TS(const TString &runtype,const Int_t &run_num){
00544 FillTofFromHdt(runtype, run_num, run_num, "", -1, 1);
00545 }
00546 void StabilityFromPeakTable(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop, const TString &directory, const TString &calib_filename, const TString &root_filename, Bool_t estimate_threshold){
00547
00548
00549 KaonThreshold[0]=350;
00550 KaonThreshold[1]=400;
00551 KaonThreshold[2]=400;
00552 KaonThreshold[3]=450;
00553 KaonThreshold[4]=470;
00554 KaonThreshold[5]=590;
00555 KaonThreshold[6]=500;
00556 KaonThreshold[7]=500;
00557 KaonThreshold[8]=500;
00558 KaonThreshold[9]=300;
00559 KaonThreshold[10]=360;
00560 KaonThreshold[11]=400;
00561
00562 Int_t start_time, stop_time;
00563 TString temp1, temp2, temp3, temp4, temp5;
00564 TString temp6, temp7, temp8, temp9, temp10;
00565
00566 std::fstream cFstrm (calib_filename.Data(), std::ios::in);
00567 if (cFstrm.fail()) return;
00568
00569 Int_t line=-1;
00570 Char_t buff[1000];
00571 while (!cFstrm.eof()){
00572 cFstrm.getline(buff, 1000);
00573 line++;
00574 }
00575 cout << "LINE=" << line << endl;
00576 cFstrm.clear();
00577 cFstrm.seekg(0, std::ios::beg);
00578
00579 Int_t start_run[line], stop_run[line];
00580 Float_t PED_e[line+1][K_N_TOFINO_SLABS], PED_p[line+1][K_N_TOFINO_SLABS];
00581 Float_t EQ_e[line+1][K_N_TOFINO_SLABS], EQ_p[line+1][K_N_TOFINO_SLABS];
00582
00583 for (Int_t i=0; i<line; i++){
00584 cFstrm >> start_run[i] >> start_time >> temp1 >> temp2 >> temp3 >> temp4 >> temp5
00585 >> stop_run[i] >> stop_time >> temp6 >> temp7 >> temp8 >> temp9 >> temp10;
00586 cout << start_run[i] << " " << stop_run[i] << endl;
00587 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00588 cFstrm >> PED_e[i][sl];
00589 }
00590 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00591 cFstrm >> PED_p[i][sl];
00592 }
00593 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00594 cFstrm >> EQ_e[i][sl];
00595 }
00596 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00597 cFstrm >> EQ_p[i][sl];
00598 }
00599 }
00600
00601 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00602 PED_e[line][sl]=0;
00603 PED_p[line][sl]=0;
00604 EQ_e[line][sl]=0;
00605 EQ_p[line][sl]=0;
00606 }
00607
00608 DeclareProfiles(run_num_start, run_num_stop);
00609
00610 Int_t i0=0;
00611
00612 for (Int_t run_num=run_num_start; run_num<=run_num_stop; run_num++){
00613
00614 Int_t i;
00615
00616 for (i=i0; i<line; i++){
00617 if (run_num>=start_run[i]&&run_num<=stop_run[i]) break;
00618 }
00619
00620 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00621 ped_table_e[sl]=PED_e[i][sl];
00622 ped_table_p[sl]=PED_p[i][sl];
00623 eq_table_e[sl]=EQ_e[i][sl];
00624 eq_table_p[sl]=EQ_p[i][sl];
00625 }
00626
00627 if (i!=line){
00628 cout << "Use the calibration table adjusted between run " <<
00629 start_run[i] << " and " << stop_run[i] << endl;
00630 i0=i;
00631 if (estimate_threshold) FillTofFromHdt_TS(runtype, run_num);
00632 }
00633
00634
00635
00636 TString table_filename="./";
00637 table_filename += directory;
00638 table_filename += "/";
00639 table_filename += runtype;
00640 table_filename += "_";
00641 table_filename += run_num;
00642 table_filename += ".txt";
00643 cout << table_filename << endl;
00644 std::fstream cFstrm_table (table_filename.Data(), std::ios::in);
00645 if (cFstrm_table.fail()) continue;
00646
00647 Double_t ped_e[12], ped_p[12];
00648 Int_t bhaentry_e[12], bhaentry_p[12];
00649 Double_t bha_e[12], bha_p[12];
00650 Int_t kaonentry_e[12], kaonentry_p[12];
00651 Double_t kaon_e[12], kaon_p[12];
00652 Double_t eq_e[12], eq_p[12];
00653
00654 for (Int_t sl=0; sl<K_N_TOFINO_SLABS; sl++){
00655 cFstrm_table >> ped_e[sl] >> ped_p[sl]
00656 >> bhaentry_e[sl] >> bha_e[sl]
00657 >> bhaentry_p[sl] >> bha_p[sl]
00658 >> kaonentry_e[sl] >> kaon_e[sl]
00659 >> kaonentry_p[sl] >> kaon_p[sl]
00660 >> eq_e[sl] >> eq_p[sl];
00661
00662 p_ped_e[sl]->Fill(run_num, ped_e[sl]);
00663 p_ped_p[sl]->Fill(run_num, ped_p[sl]);
00664
00665 if (ped_e[sl]>0&&bhaentry_e[sl]>500){
00666 p_bha_e[sl]->Fill(run_num, bha_e[sl]);
00667 p_EQbha_e[sl]->Fill(run_num, (bha_e[sl]-PED_e[i][sl])*EQ_e[i][sl]);
00668 p_eq_e[sl]->Fill(run_num, eq_e[sl]);
00669 }
00670
00671 if (ped_p[sl]>0&&bhaentry_p[sl]>500){
00672 p_bha_p[sl]->Fill(run_num, bha_p[sl]);
00673 p_EQbha_p[sl]->Fill(run_num, (bha_p[sl]-PED_p[i][sl])*EQ_p[i][sl]);
00674 p_eq_p[sl]->Fill(run_num, eq_p[sl]);
00675 }
00676
00677 if (ped_e[sl]>0&&kaon_e[sl]>ped_e[sl]){
00678 p_kaon_e[sl]->Fill(run_num, kaon_e[sl]);
00679 p_EQkaon_e[sl]->Fill(run_num, (kaon_e[sl]-PED_e[i][sl])*EQ_e[i][sl]);
00680 }
00681
00682 if (ped_p[sl]>0&&kaon_p[sl]>ped_p[sl]){
00683 p_kaon_p[sl]->Fill(run_num, kaon_p[sl]);
00684 p_EQkaon_p[sl]->Fill(run_num, (kaon_p[sl]-PED_p[i][sl])*EQ_p[i][sl]);
00685 }
00686
00687 p_EQ_e[sl]->Fill(run_num, EQ_e[i][sl]);
00688 p_EQ_p[sl]->Fill(run_num, EQ_p[i][sl]);
00689 }
00690 }
00691 SaveProfiles(root_filename);
00692 }
00693
00694 void StabilityFromPeakTable(const TString &runtype,const Int_t &run_num_start,const Int_t &run_num_stop, const TString &directory, const TString &calib_filename, const TString &root_filename){
00695 StabilityFromPeakTable(runtype, run_num_start, run_num_stop, directory,
00696 calib_filename, root_filename, false);
00697 }