X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PMD%2FPMDGAINda.cxx;h=79f6e6275b479d4f134c3c8642f1af0de729f64c;hb=55f2c86a660ea7c7ca28f830c5d7215ff43f91c2;hp=51a260a08bf7c4344d6e5ed31feb57d75cfcbfe1;hpb=338c285a54b9ed0b2b2005489278fd417771446f;p=u%2Fmrichter%2FAliRoot.git diff --git a/PMD/PMDGAINda.cxx b/PMD/PMDGAINda.cxx index 51a260a08bf..79f6e6275b4 100644 --- a/PMD/PMDGAINda.cxx +++ b/PMD/PMDGAINda.cxx @@ -2,13 +2,13 @@ PMD DA for online calibration contact: basanta@phy.iitb.ac.in -Link:http://www.veccal.ernet.in/~pmd/ -Reference run: +Link: +Reference run:/afs/cern.ch/user/b/bnandi/public/gaindata/pythia100evts.date Run Type: PHYSICS DA Type: MON Number of events needed: 1 million for PB+PB, 200 milion for p+p -Input Files: -Output Files: pmd_calib.root, to be exported to the DAQ FXS +Input Files: PMD_PED.root, PMD_GAIN_CONFIGFILE, pmd_gain_tempfile.dat +Output Files: PMDGAINS.root, to be exported to the DAQ FES Trigger types used: PHYSICS_EVENT */ @@ -52,29 +52,77 @@ int main(int argc, char **argv) { "RIO", "TStreamerInfo()"); + + int status = 0; + + + Int_t filestatus = -1, totevt = -1; + Int_t maxevt = -1; + + // Reads the pedestal file and keep the values in memory for subtraction + AliPMDCalibGain calibgain; + // Fetch the pedestal file - PMD_PED.root + status = daqDA_DB_getFile("PMD_PED.root","PMD_PED.root"); + + if(!status) + { + printf("*** Pedestal file retrieved from DB *** \n"); + } + else + { + printf("*** Pedestal file NOT retrieved from DB *** \n"); + return -1; + } + + Int_t pstatus = calibgain.ExtractPedestal("PMD_PED.root"); + + if(pstatus == -3) return -3; + TTree *ic = NULL; - //TH1F::AddDirectory(0); - + // Retrieve the PMD_GAIN_CONFIGFILE + status = daqDA_DB_getFile("PMD_GAIN_CONFIGFILE","PMD_GAIN_CONFIGFILE"); + + FILE *fp1 = NULL; + + fp1 = fopen("PMD_GAIN_CONFIGFILE","r"); + + if (fp1 == NULL) + { + printf("*** PMD GAIN Configfile doesn't exist,Provide one ***\n"); + return -1; + } + else + { + fscanf(fp1,"%d %d %d\n",&filestatus, &totevt,&maxevt); + //printf("%d %d %d\n",filestatus, totevt, maxevt); + } + fclose(fp1); + if (filestatus == 1) + { + // Retrieve the Temporray ascii file from DB + status = daqDA_DB_getFile("pmd_gain_tempfile.dat","pmd_gain_tempfile.dat"); + if(!status) + { + calibgain.ReadTempFile("pmd_gain_tempfile.dat"); + } + else + { + printf("--- pmd_gain_tempfile.dat: not retrieved from DB ---\n"); + } + } + // decoding the events - int status; if (argc!=2) { printf("Wrong number of arguments\n"); return -1; } - /* open result file */ - FILE *fp=NULL; - fp=fopen("./result.txt","a"); - if (fp==NULL) { - printf("Failed to open file\n"); - return -1; - } /* define data source : this is argument 1 */ status=monitorSetDataSource( argv[1] ); @@ -95,7 +143,7 @@ int main(int argc, char **argv) { monitorSetNoWaitNetworkTimeout(1000); /* log start of process */ - printf("DA example case2 monitoring program started\n"); + printf("PMD GAIN DA - strted generating the gain of a cell\n"); /* init some counters */ int nevents_physics=0; @@ -147,7 +195,7 @@ int main(int argc, char **argv) { case PHYSICS_EVENT: nevents_physics++; - if(nevents_physics%100 == 0)printf("Physis Events = %d\n",nevents_physics); + //if(nevents_physics%100 == 0)printf("Physis Events = %d\n",nevents_physics); AliRawReader *rawReader = new AliRawReaderDate((void*)event); TObjArray *pmdddlcont = new TObjArray(); calibgain.ProcessEvent(rawReader, pmdddlcont); @@ -165,36 +213,72 @@ int main(int argc, char **argv) { } /* exit when last event received, no need to wait for TERM signal */ - if (eventT==END_OF_RUN) { - printf("EOR event detected\n"); - ic = new TTree("ic","PMD Gain tree"); - calibgain.Analyse(ic); - //break; - } - - //write the Run level file - TFile * fileRun = new TFile ("outPMDdaRun.root","RECREATE"); - TBenchmark *bench = new TBenchmark(); - bench->Start("PMD"); - bench->Stop("PMD"); - bench->Print("PMD"); - fileRun->Close(); - - /* write report */ - fprintf(fp,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total); - + ic = new TTree("ic","PMD Gain tree"); - TFile * gainRun = new TFile ("PMDGAINS.root","RECREATE"); - ic->Write(); - gainRun->Close(); - + totevt += nevents_physics++; + + fp1 = fopen("PMD_GAIN_CONFIGFILE","w+"); + + if (totevt < maxevt) + { + printf("-----------------------------------------------\n"); + printf("*** Required Number of Events not reached ***\n"); + printf("*** Number of Events processed = %d ***\n",totevt); + printf("*** Writing the intermediate ASCII file ***\n"); + printf("-----------------------------------------------\n"); + + calibgain.WriteTempFile("pmd_gain_tempfile.dat"); + + // Store the Intermediate ascii file in the DB + status = daqDA_DB_storeFile("pmd_gain_tempfile.dat","pmd_gain_tempfile.dat"); + + filestatus = 1; + fprintf(fp1,"%d %d %d\n",filestatus,totevt,maxevt); + + // Store the configfile in the DB + status = daqDA_DB_storeFile("PMD_GAIN_CONFIGFILE","PMD_GAIN_CONFIGFILE"); + + } + else if (totevt >= maxevt) + { + printf("-----------------------------------------------\n"); + printf("*** Required Number of Events reached = %d ***\n",totevt); + printf("*** Writing the PMDGAINS.root file ***\n"); + printf("-----------------------------------------------\n"); + + calibgain.Analyse(ic); + + TFile * gainRun = new TFile ("PMDGAINS.root","RECREATE"); + ic->Write(); + gainRun->Close(); + + filestatus = 0; + totevt = 0; + fprintf(fp1,"%d %d %d\n",filestatus,totevt,maxevt); + + // Store the configfile in the DB + status = daqDA_DB_storeFile("PMD_GAIN_CONFIGFILE","PMD_GAIN_CONFIGFILE"); + + } + fclose(fp1); delete ic; ic = 0; + + + /* store the result file on FES */ + + if (filestatus == 0) + { + printf("root file is created and getting exported\n"); + status = daqDA_FES_storeFile("PMDGAINS.root","gaincalib"); + } + + if (status) { + status = -2; + } - /* close result file */ - fclose(fp); return status; }