X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FT0Physda.cxx;h=60abde71cb6cae302ee4f044c6d5cbd756e3879c;hb=653159b94d0bc7badf94c779e68d6f91c7e8c6c8;hp=1d0a54a193f271bbdd92b0a9dc5104174d9f849e;hpb=f824d160a40994d44dff259e8c4817a904947d8d;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/T0Physda.cxx b/T0/T0Physda.cxx index 1d0a54a193f..60abde71cb6 100644 --- a/T0/T0Physda.cxx +++ b/T0/T0Physda.cxx @@ -1,12 +1,10 @@ /* T0 DA for online calibration - -Contact: Michal.Oledzki@cern.ch -Link: http://users.jyu.fi/~mioledzk/ +Contact: AllaMaevskaya@cern.ch Run Type: PHYSICS DA Type: MON -Number of events needed: 500000 -Input Files: inPhys.dat, external parameters +Number of events needed: 10000 +Input Files: inPhys.dat, external parameters, T0/Calib/Slewing_Walk Output Files: daPhys.root, to be exported to the DAQ FXS Trigger types used: PHYSICS_EVENT ------------------------------Alla @@ -30,7 +28,9 @@ SOULD BE CHANGED BACK BEFORE BEAM #include #include #include - +#include +#include +#include //ROOT #include "TROOT.h" #include "TPluginManager.h" @@ -40,9 +40,8 @@ SOULD BE CHANGED BACK BEFORE BEAM #include "TBenchmark.h" #include "TString.h" #include "TH1.h" +#include "TMath.h" -int cbx, ccbx, t0bx, npmtA, npmtC; -float clx,cmx,cclx,ccmx, t0lx, t0hx; /* Main routine Arguments: @@ -72,17 +71,19 @@ int main(int argc, char **argv) { printf("Input file >>inPhys.dat<< not found !!!\n"); return -1; } + int kcbx, kt0bx, knpmtA, knpmtC; + float kclx,kcmx, kt0lx, kt0hx; while((c=getc(inp))!=EOF) { switch(c) { - case 'a': {fscanf(inp, "%d", &ccbx ); break;} //N of X bins hCFD1_CFD - case 'b': {fscanf(inp, "%f", &cclx ); break;} //Low x hCFD1_CFD - case 'c': {fscanf(inp, "%f", &ccmx ); break;} //High x hCFD1_CF - case 'd': {fscanf(inp, "%d", &npmtC ); break;} //number of reference PMTC - case 'e': {fscanf(inp, "%d", &npmtA ); break;} //number of reference PMTA - case 'f': {fscanf(inp, "%d", &t0bx ); break;} //N of X bins hT0 - case 'g': {fscanf(inp, "%f", &t0lx ); break;} //Low x hT0 - case 'k': {fscanf(inp, "%f", &t0hx ); break;} //High x hT0 + case 'a': {fscanf(inp, "%d", &kcbx ); break;} //N of X bins hCFD1_CFD + case 'b': {fscanf(inp, "%f", &kclx ); break;} //Low x hCFD1_CFD + case 'c': {fscanf(inp, "%f", &kcmx ); break;} //High x hCFD1_CF + case 'd': {fscanf(inp, "%d", &knpmtC ); break;} //number of reference PMTC + case 'e': {fscanf(inp, "%d", &knpmtA ); break;} //number of reference PMTA + case 'f': {fscanf(inp, "%d", &kt0bx ); break;} //N of X bins hT0 + case 'g': {fscanf(inp, "%f", &kt0lx ); break;} //Low x hT0 + case 'k': {fscanf(inp, "%f", &kt0hx ); break;} //High x hT0 } } fclose(inp); @@ -117,19 +118,56 @@ int main(int argc, char **argv) { /* log start of process */ printf("T0 monitoring program started\n"); + // Get run number + if (getenv("DATE_RUN_NUMBER")==0) { + printf("DATE_RUN_NUMBER not properly set.\n"); + return -1; + } + int runNr = atoi(getenv("DATE_RUN_NUMBER")); + + // Get the necessary OCDB files from the DAQ detector DB + if (gSystem->AccessPathName("localOCDB/T0/Calib/Slewing_Walk/",kFileExists)) { + if (gSystem->mkdir("localOCDB/T0/Calib/Slewing_Walk/",kTRUE) != 0) { + printf("Failed to create directory: localOCDB/T0/Calib/Slewing_Walk/"); + return -1; + } + } + + status = daqDA_DB_getFile("T0/Calib/Slewing_Walk","localOCDB/T0/Calib/Slewing_Walk/Run0_999999999_v0_s0.root"); + if (status) { + printf("Failed to get geometry file (GRP/Geometry/Data) from DAQdetDB, status=%d\n", status); + return -1; + } + TGraph *gr[24]; TGraph *gramp[24]; + AliCDBManager *man = AliCDBManager::Instance(); + man->SetDefaultStorage("local://localOCDB"); + man->SetRun(runNr); + AliCDBEntry *entry = AliCDBManager::Instance()->Get("T0/Calib/Slewing_Walk"); + if(entry) { + AliT0CalibWalk *fParam = (AliT0CalibWalk*)entry->GetObject(); + for (Int_t i=0; i<24; i++) { + gr[i] = fParam->GetWalk(i); + gramp[i] = fParam->GetQTC(i); + } + } + Int_t chargeQT0[24], chargeQT1[24]; + Float_t adc ,walk, amp; + // Allocation of histograms - start TH1F *hCFD1minCFD[24]; + TH1F *hCFD[24]; for(Int_t ic=0; ic<24; ic++) { - hCFD1minCFD[ic] = new TH1F(Form("CFD1minCFD%d",ic+1),"CFD-CFD",ccbx,cclx,ccmx); + hCFD1minCFD[ic] = new TH1F(Form("CFD1minCFD%d",ic+1),"CFD-CFD",kcbx,kclx,kcmx); + hCFD[ic] = new TH1F(Form("CFD%d",ic+1),"CFD",kt0bx,kt0lx,kt0hx); } - TH1F *hVertex = new TH1F("hVertex","T0 time",t0bx,t0lx,t0hx); + TH1F *hVertex = new TH1F("hVertex","T0 time",kt0bx,kt0lx,kt0hx); - - // Allocation of histograms - end + // Allocation of histograms - end + - Int_t iev=0; + Int_t iev=0; /* main loop (infinite) */ for(;;) { struct eventHeaderStruct *event; @@ -160,13 +198,13 @@ int main(int argc, char **argv) { switch (event->eventType){ - case START_OF_RUN: - break; + case START_OF_RUN: + break; case END_OF_RUN: break; - case PHYSICS_EVENT: + case PHYSICS_EVENT: // case CALIBRATION_EVENT: iev++; @@ -182,13 +220,13 @@ int main(int argc, char **argv) { AliT0RawReader *start = new AliT0RawReader(reader, kTRUE); // Read raw data - Int_t allData[105][5]; - for(Int_t i0=0;i0<105;i0++) + Int_t allData[110][5]; + for(Int_t i0=0;i0<107;i0++) for(Int_t j0=0;j0<5;j0++) allData[i0][j0] = 0; if(start->Next()){ - for (Int_t i=0; i<105; i++) { + for (Int_t i=0; i<107; i++) { for(Int_t iHit=0;iHit<5;iHit++){ allData[i][iHit]= start->GetData(i,iHit); } @@ -196,28 +234,52 @@ int main(int argc, char **argv) { } // Fill the histograms - Float_t besttimeA=9999999; + walk = adc = amp = -999; + for (Int_t in=0; in<12; in++) + { + chargeQT0[in]=allData[2*in+25][0]; + chargeQT1[in]=allData[2*in+26][0]; + } + for (Int_t in=12; in<24; in++) + { + chargeQT0[in]=allData[2*in+57][0]; + chargeQT1[in]=allData[2*in+58][0]; + } + Float_t besttimeA=9999999; Float_t besttimeC=9999999; Float_t time[24]; Float_t meanShift[24]; for (Int_t ik = 0; ik<24; ik++) - { - if(ik<12 && allData[ik+1][0]>0 - && (allData[ik+13][0]-allData[ik+1][0]) < 530 ){ - hCFD1minCFD[ik]->Fill(allData[ik+1][0]-allData[npmtC][0]); + { + if( ( chargeQT0[ik] - chargeQT1[ik])>0) { + adc = chargeQT0[ik] - chargeQT1[ik]; + // cout<Eval(Double_t(adc)); + if(amp < 0.8) continue; + if(gr[ik]) + walk = Int_t(gr[ik]->Eval(Double_t(adc) ) ); - if(ik>11 && allData[ik+45][0]>0 - && (allData[ik+57][0]-allData[ik+45][0]) <530 ){ - hCFD1minCFD[ik]->Fill(allData[ik+45][0]-allData[56+npmtA][0]); + if(ik<12 && allData[ik+1][0]>0 && allData[knpmtC][0]>0 ){ + hCFD1minCFD[ik]->Fill(allData[ik+1][0]-allData[knpmtC][0]); + if( walk >-100) hCFD[ik]->Fill(allData[ik+1][0] - walk); + // cout<GetMean(); - cout<11 && allData[ik+45][0]>0 && allData[56+knpmtA][0]>0 ) + { + hCFD1minCFD[ik]->Fill(allData[ik+45][0]-allData[56+knpmtA][0]); + if( walk >-100) hCFD[ik]->Fill(allData[ik+45][0] - walk); + // cout<GetMean(); + if(ik==knpmtC || ik==(56+knpmtA)) meanShift[ik]=0; } } //fill mean time _ fast reconstruction - if (iev > 1000 ) + if (iev > 10000 ) { for (Int_t in=0; in<12; in++) { @@ -238,14 +300,14 @@ int main(int argc, char **argv) { } if(besttimeA<9999999 &&besttimeC< 9999999) { Float_t t0 =0.001* 24.4 * Float_t( besttimeA+besttimeC)/2.; - cout<<" t0 "<Fill(t0); } } delete start; - start = 0x0; - reader->Reset(); + start = 0x0; + delete reader; + reader= 0x0; // End of fill histograms } @@ -263,14 +325,17 @@ int main(int argc, char **argv) { printf("After loop, before writing histos\n"); // write a file with the histograms - TFile *hist = new TFile(FILE_OUT,"RECREATE"); + TFile hist(FILE_OUT,"RECREATE"); for(Int_t j=0;j<24;j++){ - hCFD1minCFD[j]->Write(); - } + hCFD1minCFD[j]->SetDirectory(&hist); + hCFD1minCFD[j]->Write(); + hCFD[j]->Write(); + + } hVertex->Write(); - hist->Close(); - delete hist; + hist.Close(); + //delete hist; status=0;