PED and GAIN DAs update
authorlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Jan 2010 15:42:18 +0000 (15:42 +0000)
committerlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Jan 2010 15:42:18 +0000 (15:42 +0000)
AliMUONTrackerIO.cxx : Decoding of new parameters written in the Gain file header  (added in metadata comment)
AliMUONGain.cxx      : Protection improvement of the code (parabolic fit procedure)
MUONTRKPEDda.cxx     : Store  configuration input file in DetDataBase (OnLine)
MUONTRKGAINda.cxx    : Update of calibration reference runs
READMEmchda.txt      : Readme update

Jean-Luc Charvet

MUON/AliMUONGain.cxx
MUON/AliMUONPedestal.cxx
MUON/AliMUONTrackerIO.cxx
MUON/MUONTRKGAINda.cxx
MUON/MUONTRKPEDda.cxx
MUON/READMEmchda.txt

index 8fdeea9..998f0ae 100644 (file)
@@ -232,7 +232,6 @@ TString AliMUONGain::WriteGainHeader(Int_t nInit, Int_t nEntries, Int_t nbpf2, I
   if(nInit==1)
     stream<<"//  "<< nEntries <<" DAC values  fit: "<< fnbpf1 << " pts (1st order) " << nbpf2 << " pts (2nd order) DAC=0 excluded" << endl;
   stream<<"//   *  nInit = " << nInit << "  *  f1nbp = " << fnbpf1 << "  *  f2nbp = " <<  nbpf2 << endl; 
-  stream<<"//" << endl; 
 
   stream<<"//   RUN     DAC   " << endl;
   stream<<"//-----------------" << endl;
@@ -442,10 +441,12 @@ void AliMUONGain::MakeGainStore(TString shuttleFile)
   Double_t xp[11], xpErr[11], yp[11], ypErr[11];
 
   Int_t uncalcountertotal=0 ;
+  Int_t unparabolicfit=0;
 
   while ( ( p = dynamic_cast<AliMUONVCalibParam*>(next() ) ) )
     {
       ped[0]  = p;
+      unparabolicfit=0;
 
       busPatchId = p->ID0();
       manuId     = p->ID1();
@@ -472,7 +473,6 @@ void AliMUONGain::MakeGainStore(TString shuttleFile)
            n++;
          }
 
-
          // print_peak_mean_values
          if(fPrintLevel>1)
            {
@@ -501,7 +501,7 @@ void AliMUONGain::MakeGainStore(TString shuttleFile)
              Int_t k = j + fnInit;
              x[j]    = pedMean[k];
              if(x[j]<=0.){fitproceed=0; break;}
-             if(x[j]== ADCMax())
+             if(x[j]>= ADCMax())
                {
                  if(j < nbs-1){fitproceed=0; break;}
                  else  nbpf2Dynamic=nbpf2-1;
@@ -541,8 +541,8 @@ void AliMUONGain::MakeGainStore(TString shuttleFile)
              a1 = par[1];
 
              // 2. - Translation : new origin (xLim, yLim) + parabolic fit over nbf2 points
-
-             if(nbpf2Dynamic > 1)
+             //checking:         if(busPatchId ==1841 && manuId==4)nbpf2Dynamic=2;
+             if(nbpf2Dynamic > 2)
                {
                  for (Int_t j = 0; j < nbpf2Dynamic; j++)
                    {
@@ -568,6 +568,13 @@ void AliMUONGain::MakeGainStore(TString shuttleFile)
                  prChi2P2 = TMath::Prob(chi2P2, nbpf2Dynamic-1);
                  a2 = par[0];
                }
+             else 
+               { 
+                 unparabolicfit++;
+                 (*fFilcout) << " Warning : BP = " << busPatchId << " Manu = " << manuId <<  " Channel = " << channelId <<": parabolic fit not possible (nbpf2=" <<  nbpf2Dynamic  << ") => a2=0 and linear fit OK" << std::endl;
+                 if(unparabolicfit==1) std::cout << " Warning : BP = " << busPatchId << " Manu = " << manuId <<  ": no parabolic fit for some channels (nbpf2=" <<  nbpf2Dynamic  << "), linear fit is OK (see .log for details)" << std::endl;
+                 a2=0. ; prChi2P2=0. ;
+               }
 
              par[0] = a0;
              par[1] = a1;
@@ -668,16 +675,13 @@ void AliMUONGain::MakeGainStore(TString shuttleFile)
                      delete f2Calib;
                    }
                }
-
-
              tg->Fill();
            }
-
-
          pfilew << WriteGainData(busPatchId,manuId,channelId,par[1],par[2],threshold,q);
        }
       nmanu++;
-      if(nmanu % 500 == 0)std::cout << " Nb manu = " << nmanu << std::endl;
+      Int_t step=500;
+      if(nmanu % step == 0)std::cout << " Nb manu = " << nmanu << std::endl;
     }
 
   //      print in logfile
index bfa5d29..79fcc7d 100644 (file)
@@ -321,7 +321,7 @@ void AliMUONPedestal::MakeASCIIoutput(ostream& out) const
              if(writitle==1){ 
                out<<"//"<<endl;
                out<<"//    * Puzzling (Buspatch,Manu) read in raw data ?"<<endl;}
-             occupancy=pedMean-ADCMax();
+             occupancy=TMath::Nint(pedMean-ADCMax());
              ped->SetValueAsDouble(0, 0, ADCMax());
              out<<"//      BusPatch = "<< busPatchId <<"\t ManuId =  "<< manuId << "\t occupancy = " << occupancy  <<endl;
            }
index def0cde..39f896d 100644 (file)
@@ -285,6 +285,7 @@ AliMUONTrackerIO::DecodeGains(const char* data, AliMUONVStore& gainStore,
   Int_t* runs(0x0);
   Int_t* dac(0x0);
   Int_t nDAC(0);
+  Int_t nInit(0),f1nbp(0),f2nbp(0);
   
   while ( in.getline(line,1024) )
   {
@@ -307,6 +308,13 @@ AliMUONTrackerIO::DecodeGains(const char* data, AliMUONVStore& gainStore,
           AliDebugClass(1,Form("runNumber is %d",runNumber));
         }            
       }
+      if ( sline.Contains("*  nInit =") )
+       {
+         sscanf(line,"//   *  nInit = %d  *  f1nbp = %d  *  f2nbp = %d",&nInit,&f1nbp,&f2nbp);
+         AliDebugClass(1,Form("nInit = %d",nInit));
+         AliDebugClass(1,Form("f1nbp = %d",f1nbp));
+         AliDebugClass(1,Form("f2nbp = %d",f2nbp));
+       }
       if ( sline.Contains("DAC values") )
       {
         nDAC = TString(sline(2,sline.Length()-2)).Atoi();
@@ -388,6 +396,10 @@ AliMUONTrackerIO::DecodeGains(const char* data, AliMUONVStore& gainStore,
   {
     comment += Form(";(RUN %d = DAC %d)",runs[i],dac[i]);
   }
+  comment += Form(";(nDAC = %d)",nDAC);
+  comment += Form(";(nInit = %d)",nInit);
+  comment += Form(";(f1nbp = %d)",f1nbp);
+  comment += Form(";(f2nbp = %d)",f2nbp);
   
   delete[] runs;
   delete[] dac;
index 073fee5..d718d84 100644 (file)
@@ -1,11 +1,23 @@
 /*
  Contact: Jean-Luc Charvet <jean-luc.charvet@cern.ch>
  Link: http://aliceinfo.cern.ch/static/Offline/dimuon/muon_html/README_mchda.html
- Reference Runs: 92796-92798-92800-92801-92803-92804-92807-92807-92809-92810-92811
+ Reference Runs: 
+ ndex          Run
+ 1             104525
+ 2             104527
+ 3             104528
+ 4             104530
+ 5             104531
+ 6             104532
+ 7             104533
+ 8             104534
+ 9             104535
+ 10            104537
+ 11            104539
  Run Type: CALIBRATION
  DA Type: LDC
  Number of events needed: 400 events for each calibration run (11)
- Input Files: mutrkcalibvalues and config_ldc-MTRK-S3-0
+ Input Files:  /alice/cern.ch/user/j/jcharvet/mutrkcalibvalues and /alice/cern.ch/user/j/jcharvet/config_ldc-MTRK-S0-0
  Output Files: local dir (not persistent) -> MUONTRKGAINda.par   FXS -> run<#>_MCH_<ldc>_GAINS
  Trigger types used:
  */
@@ -29,7 +41,7 @@
 
 /*
  -------------------------------------------------------------------------
- 2009-11-05 New version: MUONTRKGAINda.cxx,v 1.4
+ 2010-01-13 New version: MUONTRKGAINda.cxx,v 1.5
  -------------------------------------------------------------------------
  
  Version for MUONTRKGAINda MUON tracking
index f9ba224..d248bac 100644 (file)
@@ -1,11 +1,11 @@
 /*
   Contact: Jean-Luc Charvet <jean-luc.charvet@cern.ch>
   Link: http://aliceinfo.cern.ch/static/Offline/dimuon/muon_html/README_mchda.html
-  Reference Run:
+  Reference Run: 104540
   Run Type: PEDESTAL
   DA Type: LDC
   Number of events needed: 400 events for pedestal run
-  Input Files: mutrkpedvalues and config_ldc-MTRK-S3-0 
+  Input Files: /alice/cern.ch/user/j/jcharvet/mutrkpedvalues and /alice/cern.ch/user/j/jcharvet/config_ldc-MTRK-S0-0 
   Output Files: local dir (not persistent) -> MUONTRKPEDda.ped  FXS -> run<#>_MCH_<ldc>_PEDESTALS
   Trigger types used:
 */
@@ -29,7 +29,7 @@
 
 /*
        -------------------------------------------------------------------------
-        2009-11-05 New version: MUONTRKPEDda.cxx,v 1.4
+        2010-01-13 New version: MUONTRKPEDda.cxx,v 1.5
        -------------------------------------------------------------------------
 
        Version for MUONTRKPEDda MUON tracking
@@ -137,7 +137,7 @@ int main(Int_t argc, const char **argv)
   Int_t nEventsRecovered = 0;
   Int_t nEvents = 0;
   UInt_t runNumber   = 0;
-  Int_t nConfig = 1; 
+  Int_t nConfig = 1, writeConfig=0; 
   ofstream filcout;
 
   // decode the input line
@@ -219,28 +219,26 @@ int main(Int_t argc, const char **argv)
   // nConfig=1 : Reading configuration (or not) status via "mutrkpedvalues" file located in DetDB
   if(nConfig)
     { 
-  sprintf(dbfile,"mutrkpedvalues");
-  status=daqDA_DB_getFile(dbfile,dbfile);
-  if(status) {printf(" Failed  : input file %s is missing, status = %d\n",dbfile,status); return -1; } 
-  ifstream filein(dbfile,ios::in);
-  filein >> nConfig;
-  printf(" *** Copy: %s from DetDB to working directory  ***      Config= %d\n",dbfile,nConfig);
-    }
-  else
-    {
-      printf(" ***  Config= %d: no configuration ascii file is used \n",nConfig);
+      sprintf(dbfile,"mutrkpedvalues");
+      status=daqDA_DB_getFile(dbfile,dbfile);
+      if(status) {printf(" !!! Failed  : input file %s is missing, status = %d\n",dbfile,status); return -1; } 
+      ifstream filein(dbfile,ios::in);
+      filein >> nConfig;
+      filein >> writeConfig; // default=0, if 1 : current configuration file written in the Det.DataBase at the end of the DA
+      printf(" *** Copy: %s from DetDB to working directory  ***  Config= %d   writeConfig=%d\n",dbfile,nConfig,writeConfig);
     }
+  else  printf(" ***  Config= %d: no configuration ascii file is used \n",nConfig); 
   muonPedestal->SetconfigDA(nConfig);
 
   // nConfig=1: configuration ascii file read from DetDB
   if(nConfig)
     {
-  // MuonTrk Configuration ascii file (initCROCUS.dat -> ascii file = config_$DATE_ROLE_NAME)
-  sprintf(dbfile,"config_%s",getenv("DATE_ROLE_NAME"));
-  status=daqDA_DB_getFile(dbfile,dbfile);
-  if(status) {printf(" Failed  : Configuration file %s is missing, status = %d\n",dbfile,status); return -1; }
-  else printf(" *** Copy ascii config file: %s from DetDB to working directory and reading ...*** \n",dbfile);
-  muonPedestal->LoadConfig(dbfile);  
+      // MuonTrk Configuration ascii file (initCROCUS.dat -> ascii file = config_$DATE_ROLE_NAME)
+      sprintf(dbfile,"config_%s",getenv("DATE_ROLE_NAME"));
+      status=daqDA_DB_getFile(dbfile,dbfile);
+      if(status) {printf(" !!! Failed  : Configuration file %s is missing, status = %d\n",dbfile,status); return -1; }
+      else printf(" *** Copy ascii config file: %s from DetDB to working directory and reading ...*** \n",dbfile);
+      muonPedestal->LoadConfig(dbfile);  
     } 
 
   // Rawdeader, RawStreamHP
@@ -483,7 +481,7 @@ int main(Int_t argc, const char **argv)
  // Copying files to local DB folder defined by DAQ_DETDB_LOCAL
   Char_t *dir;
   dir= getenv("DAQ_DETDB_LOCAL");
-  unsigned int nLastVersions=90;
+  unsigned int nLastVersions=50;
   cout << "\n ***  Local DataBase: " << dir << " (Max= " << nLastVersions << ") ***" << endl;
   status = daqDA_localDB_storeFile(muonPedestal->GetHistoFileName(),nLastVersions);
   if(status)printf(" Store file : %s   status = %d\n",muonPedestal->GetHistoFileName(),status);
@@ -497,9 +495,21 @@ int main(Int_t argc, const char **argv)
   // Transferring to OCDB via the SHUTTLE (be sure that env variable DAQDALIB_PATH is set)
   printf("\n *****  STORE FILE in FES ****** \n");
   status = daqDA_FES_storeFile(shuttleFile.Data(),"PEDESTALS");
-  if (status) { printf(" Failed to export file : %s , status = %d\n",shuttleFile.Data(),status); return -1; }
+  if (status) { printf(" !!! Failed to export file : %s , status = %d\n",shuttleFile.Data(),status); return -1; }
   else printf(" %s successfully exported to FES  \n",shuttleFile.Data());
 
+  // Transferring to DetectorDataBase the configuration file if changed
+  if(writeConfig)
+    {
+      printf("\n *****  New detector configuration : STORE Config FILE in Detector DataBase ****** \n");
+      Char_t DAdbfile[256]="";
+      //      TString DAdbfile=Form("DA_config_%s",getenv("DATE_ROLE_NAME")) ;
+      sprintf(DAdbfile,"DA_config_%s",getenv("DATE_ROLE_NAME"));
+      status=daqDA_DB_storeFile(dbfile,DAdbfile);
+      if(status) {printf(" !!! Failed  : Pb to store config. file %s in DetDB (%s), status = %d\n",dbfile,DAdbfile,status); return -1; }
+      else printf(" Copy ascii current config file: %s to %s in DetDB \n",dbfile,DAdbfile);
+    }
+
   printf("\n ######## End execution : %s ######## \n",prefixDA); 
   timers.Stop();
   printf("\nExecution time : R:%7.2fs C:%7.2fs\n", timers.RealTime(), timers.CpuTime());
index 9f76bdd..fca79b4 100644 (file)
@@ -70,11 +70,13 @@ The syntax is: MUONTRKPEDda.exe "raw data file"
 
 Two input files located in the DAQ Detector database (DetDB) are needed:
 
-- muontrkpedvalues containing only one parameter "config"
+- muontrkpedvalues is built in flight in CONFIGURATION_PED.sh (ECS script) and contains two parameters "config" and "writeconfig"
   config = 1 if configuration file has to be used (OnLine case)
-  config - 0 if not (OffLine case for the time being)
+  config = 0 if not (OffLine case for the time being)
+  writeconfig=0 if configuration is unchanged
+  writeconfig=1 if configuration is changed , then new config. file is written in DetDB
 
-- config_ldc-MTRK-S3-0 : typical configuration file corresponding to MuonTracker Station 3 if (for example) DA is running on ldc-MTRK-S3-0
+- config_ldc-MTRK-S3-0 : configuration file name corresponding to MuonTracker Station 3 if (for example) DA is running on ldc-MTRK-S3-0
 
 \subsection da_ss2 Electonics gain
 
@@ -105,7 +107,7 @@ Default values are listed below
 0
 \endverbatim
 
- - config_ldc-MTRK-S3-0 : configuration file corresponding to MuonTracker station 3 if (for example) DA is running on ldc-MTRK-S3-0 
+ - config_ldc-MTRK-S3-0 : configuration file name corresponding to MuonTracker station 3 if (for example) DA is running on ldc-MTRK-S3-0 
 
 
 \section da_s3 Using the DA Offline