HMPID DA for online calibration
-Contact: Levente.Molnar@ba.infn.it, Giacomo.Volpe@ba.infn.it
-Link: http://richpc1.ba.infn.it/~levente/Files4Public/ValidateHmpidDA/
-Run Type: PEDESTAL -- but we select on the PHYSICS_EVENTS in th HMPIDda.cxx
-DA Type: LDC
-Number of events needed: 1000 events
-Input Files: Raw pedestal file, EXTERNAL config file: HmpidSigmaCut.txt on both HMPID LDCs
-Output Files: 14 txt files including pedestal values
-Trigger types used: PEDESTAL RUN (selecting on PHYSICS_EVENT)
+Contact: Levente.Molnar@cern.ch, Giacomo.Volpe@ba.infn.it
+Link: https://twiki.cern.ch/twiki/bin/view/ALICE/DAInstructions
+Run Type: PEDESTAL -- but we select on the PHYSICS_EVENTS in the HMPIDda.cxx
+DA Type: LDC
+Reference Run: 78734
+Number of events needed: ~ 1000 events
+Input Files: Raw pedestal file, EXTERNAL config files: HmpDaqDaConfig.txt, HmpDeadChannelMap.txt on all HMPID LDCs
+Output Files: 2 x 14 txt files including pedestal and error values
+Trigger types used: CALIBRATION RUN (but selecting on PHYSICS_EVENT)
*/
#include "TObject.h"
#include "TPluginManager.h"
+//AMORE
+#include <AmoreDA.h>
+
int main(int argc, char **argv){
- int status;
+ int status=0;
+ const Char_t *hmpConfigFile = "HmpDaqDaConfig.txt";
+ const Char_t *hmpDeadChannelMapFile = "HmpDeadChannelMap.txt";
+ const Int_t ddlOffset = 1536;
+ TString hmpIn,hmpIn2;
+ TString feeIn;
+
/* log start of process */
printf("HMPID DA program started\n");
- gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
- "*",
- "TStreamerInfo",
- "RIO",
- "TStreamerInfo()");
+ gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo","*","TStreamerInfo","RIO","TStreamerInfo()");
/* check that we got some arguments = list of files */
if (argc<2) {
return -1;
}
- /* copy locally a file from daq detector config db
- status=daqDA_DB_getFile("myconfig","./myconfig.txt");
- if (status) {
- printf("Failed to get config file : %d\n",status);
- return -1;
- }
- and possibly use it */
+ /* copy locally a file from daq detector config db */
+
+ hmpIn=Form("./%s",hmpConfigFile);
+ status=daqDA_DB_getFile(hmpConfigFile,hmpIn.Data());
+ if (status) { printf("Failed to get HMPID config file status: %d\n",status);return -1; }
+ hmpIn2=Form("./%s",hmpDeadChannelMapFile);
+ status=daqDA_DB_getFile(hmpDeadChannelMapFile,hmpIn2.Data());
+ if (status) { printf("Failed to get HMPID dead channel file status: %d\n",status);return -1; }
+
/* report progress */
daqDA_progressReport(10);
-
-
-
+
/* define wait event timeout - 1s max */
monitorSetNowait();
monitorSetNoWaitNetworkTimeout(1000);
/* set local storage of ped files for Fe2C */
-
+
/* init the pedestal calculation */
AliHMPIDCalib *pCal=new AliHMPIDCalib();
- /* Set the number of sigma cuts inside the file HmpidSigmaCut.txt on BOTH LDCs! */
+ /* Set the number of sigma cuts inside the file HmpidSigmaCut.txt on all LDCs! */
/* If the file is NOT present then the default cut 3 will be used!*/
-
- //pCal->SetSigCutFromFile("HmpidSigmaCut.txt");
- pCal->SetSigCutFromShell("HMPID_SIGMA_CUT"); //decision to make later: wether to use file or env variable...
- pCal->SetDaOutFromShell("HMPID_DA_OUT"); //decision to make later: wether to use file or env variable...
- pCal->SetFeeInFromShell("HMPID_FEE_IN"); //decision to make later: wether to use file or env variable...
-
-
- /* ONLY set this option to kTRUE if you want to create the ADC dsitributions for all 161280 pads!!!!*/
- /* kTRUE is not suggested for production mode b/c of the memory consumption! */
- pCal->SetWriteHistoPads(kFALSE); //use this option for default production useage!!!
- //pCal->SetWriteHistoPads(kTRUE); //only for expert debug
- //pCal->SetWriteHistoPads(kTRUE,kTRUE,13); //DO NOT USE THIS OPTION!
-
+ pCal->SetSigCutFromFile(hmpIn);
+ pCal->SetDeadChannelMapFromFile(hmpIn2);
/* init event counter */
Int_t firstEvt=0;
printf("End of monitoring file has been reached! \n");
break;
}
-
-
if (status!=0) {
printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
return -1;
if (eventT==PHYSICS_EVENT || eventT==CALIBRATION_EVENT ) { //updated: 18/02/2008 based on http://alice-ecs.web.cern.ch/alice-ecs/runtypes_3.16.html
runNum=(unsigned long)event->eventRunNb; //assuming that only one run is processed at a time
ldcId=(unsigned long)event->eventLdcId;
- if(iEvtNcal==firstEvt && pCal->GetWritePads()==kTRUE)
- {
- if(pCal->GetLargePads()==kFALSE) pCal->InitFile((Int_t)ldcId); //The number for iEvtNcal should be the same as for the first value
- else pCal->InitFile((Int_t)runNum); //The number for iEvtNcal should be the same as for the first value
- }
iEvtNcal++;
AliRawReader *reader = new AliRawReaderDate((void*)event);
- AliHMPIDRawStream stream(reader);
+ AliHMPIDRawStream stream(reader);stream.SetTurbo(kTRUE); //raw data decoding without error checks SetTurbo(kTRUE)
while(stream.Next())
{
for(Int_t iPad=0;iPad<stream.GetNPads();iPad++) {
/* report progress */
daqDA_progressReport(90);
- TString sDaOut=pCal->GetDaOutFromShell();
-
- for(Int_t nDDL=0; nDDL < AliHMPIDRawStream::kNDDL; nDDL++) {
-
+ /* send pedestal and error files to DAQ FXS */
+ for(Int_t nDDL=0; nDDL < AliHMPIDRawStream::kNDDL; nDDL++) {
+ feeIn=Form("thr%d.dat",ddlOffset+nDDL);
/* Calculate pedestal for the given ddl, if there is no ddl go t next */
- if(!pCal->CalcPedestal(nDDL,Form("%sHmpidPedDdl%02i.txt",sDaOut.Data(),nDDL),iEvtNcal)) continue;
- /* to create pedestal file as Paolo uncomment the line */
-// if(!pCal->CalcPedestalPaolo(nDDL,Form("%sHmpidPedDdl%02i.txt",sDaOut.Data(),nDDL),iEvtNcal)) continue;
- if(!pCal->WriteErrors(nDDL,Form("%sHmpidErrorsDdl%02i.txt",sDaOut.Data(),nDDL),iEvtNcal)) continue;
-
- /* store the result file on FES */
-
- status=daqDA_FES_storeFile(Form("%sHmpidPedDdl%02i.txt",sDaOut.Data(),nDDL),Form("HMPID_DA_Pedestals_ddl=%02i",nDDL));
- if (status) { printf("Failed to export file : %d\n",status); }
- status=daqDA_FES_storeFile(Form("%sHmpidErrorsDdl%02i.txt",sDaOut.Data(),nDDL),Form("HMPID_DA_Errors_ddl=%02i",nDDL));
- if (status) { printf("Failed to export file : %d\n",status); }
-
+ if(pCal->CalcPedestal(nDDL,Form("HmpidPedDdl%02i.txt",nDDL),Form("%s",feeIn.Data()),iEvtNcal)) {
+ status=daqDA_DB_storeFile(feeIn.Data(),feeIn.Data()); //store a single threshold file for a DDL in DAQ DB
+ if (status) { printf("Failed to store file %s in DAQ DB, status: %d\n",feeIn.Data(),status); }
+ status=daqDA_FES_storeFile(Form("HmpidPedDdl%02i.txt",nDDL),Form("HmpidPedDdl%02i.txt",nDDL)); //store a single pedestal file for a DDL
+ if (status) { printf("Failed to export file on FES: %d\n",status); }
+ }//pedestals and thresholds
+ if(pCal->WriteErrors(nDDL,Form("HmpidErrorsDdl%02i.txt",nDDL),iEvtNcal)) {
+ status=daqDA_FES_storeFile(Form("HmpidErrorsDdl%02i.txt",nDDL),Form("HmpidErrorsDdl%02i.txt",nDDL));
+ if (status) { printf("Failed to export file : %d\n",status); }
+ }//errors
}//nDDL
- if(pCal->GetWritePads()==kTRUE) pCal->CloseFile();
+ /* send files to AMORE DB */
+ daqDA_progressReport(95);
+ Int_t statusAmoreDA=0;
+ amore::da::AmoreDA amoreDA(amore::da::AmoreDA::kSender);
+ for(Int_t iCh=0; iCh < AliHMPIDParam::kMaxCh; iCh++) {
+ statusAmoreDA+=amoreDA.Send(Form("fPedMeanMap%d",iCh), pCal->GetPedMeanMap(iCh));
+ statusAmoreDA+=amoreDA.Send(Form("fPedSigMap%d",iCh), pCal->GetPedSigMap(iCh));
+ }
+ for(Int_t iCh=0;iCh<=AliHMPIDParam::kMaxCh;iCh++)
+ {
+ for(Int_t iFee=0;iFee<6;iFee++)
+ {
+ statusAmoreDA+=amoreDA.Send(Form("f1DPedMean_Ch%d_FEE_%d",iCh,iFee),pCal->GetPedMean(6*iCh+iFee));
+ statusAmoreDA+=amoreDA.Send(Form("f1DPedSigma_Ch%d_FEE_%d",iCh,iFee),pCal->GetPedSigma(6*iCh+iFee));
+ }
+ }
+
delete pCal;
- if (status) return -1;
+ if(status) return -1;
+ if(statusAmoreDA) return -1;
/* report progress */
daqDA_progressReport(100);
return status;
}
+