update of LED DA execute macro
authordsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 20 Mar 2013 12:52:47 +0000 (12:52 +0000)
committerdsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 20 Mar 2013 12:52:47 +0000 (12:52 +0000)
EMCAL/SMcalib/QA/EMCALLEDda.C

index 26e2129..f77983a 100644 (file)
@@ -1,81 +1,93 @@
-/*
-  a very basic test macro for processing LED events with AliCaloCalibSignal
-  Josh Hamblen
-*/
-#define AliDebugLevel() -1
-
-void EMCALLEDda(const int runno = 476){
+void EMCALLEDda(const int year=12, const int runno = 191741, const int streamno=8, const int segno=10, const int kMaxPhysEvents = 1000, const int debug = 1){
   
   int i, status;
+  gROOT->SetStyle("Plain");
   
   /* log start of process */
   printf("EMCAL DA started - %s\n",__FILE__);
   
   AliCaloCalibSignal * calibSignal = new 
-    AliCaloCalibSignal(AliCaloCalibSignal::kEmCal); // pedestal and noise calibration
-  
+    AliCaloCalibSignal(AliCaloCalibSignal::kEmCal); 
+
+  // setup
+  calibSignal->SetAmpCut(1);
+  calibSignal->SetReqFractionAboveAmpCutVal(0.1);
+  calibSignal->SetReqFractionAboveAmp(false);
+
+  // setup; LEDRef
+  calibSignal->SetAmpCutLEDRef(1);
+  calibSignal->SetReqLEDRefAboveAmpCutVal(false);
+
   int nevents=0;
-  // Assume we are just interested in the 1st segment, _0.root below for fname*
-  Char_t fname[256];
-  sprintf(fname, "/local/data/Run_%09d.Seq_1A.Stream_0.root",runno);
 
+  Char_t fname[256];
+  sprintf(fname, "%02d%09d0%02d.%d.root", year, runno, streamno, segno);
   AliRawReader *rawReader = NULL;
   rawReader = new AliRawReaderRoot(fname);
-  AliCaloRawStream *in = NULL; 
-  in = new AliCaloRawStream(rawReader,"EMCAL");
+
+  AliCaloRawStreamV3 *in = NULL; 
+  in = new AliCaloRawStreamV3(rawReader,"EMCAL");
+  rawReader->Select("EMCAL", 0, AliEMCALGeoParams::fgkLastAltroDDL) ; //select EMCAL DDL range
   //in->SetOldRCUFormat(kTRUE);
   
-  AliRawEventHeaderBase *aliHeader=NULL;
   int nev=0;
+  int type = 0;
+  UInt_t timestamp = 0;
+
   /* read until EOF */
-  while ( rawReader->NextEvent()) {
-    nev++;
-    
-    aliHeader = (AliRawEventHeaderBase*) rawReader->GetEventHeader();
-    calibSignal->SetRunNumber( aliHeader->Get("RunNb") ); // just for fun; keep info on last run looked at
-    
-    if ( aliHeader->Get("Type") == AliRawEventHeaderBase::kStartOfRun){
-      // set start time
-      calibSignal->SetStartTime(aliHeader->Get("Timestamp"));
-      int time = aliHeader->Get("Timestamp");
-    }
+  while ( rawReader->NextEvent() && nevents<kMaxPhysEvents) {
     
-    // set parameters for led event checking
-    calibSignal->SetAmpCut(50);
-    // for now, fraction choice is set for testbeam files:
-    // 64 channels / (a total of 24 rows * 48 cols * 12 modules) = 0.00462962963
-    calibSignal->SetReqFractionAboveAmpCutVal(0.004);
-    calibSignal->SetReqFractionAboveAmp(kTRUE);
-    calibSignal->SetUseAverage(kTRUE);
-    calibSignal->SetSecInAverage(900);
+    calibSignal->SetRunNumber( rawReader->GetRunNumber() ); // just for fun; keep info on last run looked at
+    //    cout << " Event " << nev << endl;
+
+    type = rawReader->GetType();
+    timestamp = rawReader->GetTimestamp();
     
     // select physics and calibration events now (only calibration in future)
-    if ( aliHeader->Get("Type") == AliRawEventHeaderBase::kPhysicsEvent || 
-        aliHeader->Get("Type") == AliRawEventHeaderBase::kCalibrationEvent  ) {
+    if ( type == AliRawEventHeaderBase::kCalibrationEvent  ) {
+
+      rawReader->Reset();
       
       nevents++;
-      if(nevents%1000==0)cout<<"Event "<<nevents<<endl;
-      //  Signal calibration
-      calibSignal->ProcessEvent(in,aliHeader);
+      // if(nevents%1000==0)cout<<"Event "<<nevents<<endl;
+      calibSignal->ProcessEvent(in, timestamp);
     }
+
+    nev++;
+    
   } // loop over all events in file
     /* cleanup the reading handles */
   delete in;
   delete rawReader;    
+
+  // calculate average values also, for the LED info
+  calibSignal->SetUseAverage(kTRUE);
+  calibSignal->Analyze();
   
+  // by default, we only save the full info in debug mode  
+  if (debug==0) {
+    // reset the full trees, when we are not in debug mode
+    calibSignal->GetTreeAmpVsTime()->Reset();
+    calibSignal->GetTreeLEDAmpVsTime()->Reset();
+  }
+
   //
   // write results/histograms to rootfile
   //
   
   printf ("%d physics/calibration events processed.\n",nevents);
+  
+  // create output histograms and write to file
   Char_t outname[256];
   sprintf(outname, "LED_%09d.root",runno);
-  
-  calibSignal->Save(outname);
+  //sprintf(outname, "EMCALLED.root");
+
+  TFile destFile(outname, "update");
+  destFile.cd();
+  calibSignal->Write("emcCalibSignal");
+  destFile.Close();
+
   printf("Wrote %s.\n",outname);
-  calibSignal->Analyze();
-  printf("NEvents Processed %d Accepted %d\n",calibSignal->GetNEvents(),calibSignal->GetNAcceptedEvents());
   
   // see if we can delete our analysis helper also
   delete calibSignal;