]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Macro to convert the text dump of RCT into a RunTag file
authorakisiel <akisiel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Sep 2010 15:27:11 +0000 (15:27 +0000)
committerakisiel <akisiel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Sep 2010 15:27:11 +0000 (15:27 +0000)
ANALYSIS/TagMacros/ParseRCTDump.C [new file with mode: 0644]

diff --git a/ANALYSIS/TagMacros/ParseRCTDump.C b/ANALYSIS/TagMacros/ParseRCTDump.C
new file mode 100644 (file)
index 0000000..a832734
--- /dev/null
@@ -0,0 +1,410 @@
+// Macro to parse the text dump of the RCT and convert it into
+// a RunTag object. This object needs to be then merged with the
+// proper RunTag from the Run.
+//
+// Parameters:
+// Name of the text file with the dump from MonaLisa RCT page
+//
+// Author: Adam.Kisiel@cern.ch
+
+int getposition(const char *token, int poscount)
+{
+  int position = -1;
+
+  if (strstr(token, "#raw_run")) {
+    position = 0;
+    cout << "Run number at " << poscount << endl;
+  }
+  else if (strstr(token, "partition")) {
+    position = 1;
+    cout << "LHC Period at " << poscount << endl;
+  }
+  else if (strstr(token, "fillno")) {
+    position = 4;
+    cout << "Fill number at " << poscount << endl;
+  }
+  else if (strstr(token, "energy")) {
+    position = 5;
+    cout << "Beam Energy at " << poscount << endl;
+  }
+  else if (strstr(token, "intensity_per_bunch")) {
+    position = 6;
+    cout << "Bunch Intensity at " << poscount << endl;
+  }
+  else if (strstr(token, "cbeamb_abce_nopf_all")) {
+    position = 7;
+    cout << "Beam Triggers at " << poscount << endl;
+  }
+  else if (strstr(token, "cint1b_abce_nopf_all")) {
+    position = 8;
+    cout << "Collision Triggers at " << poscount << endl;
+  }
+  else if (strstr(token, "rate")) {
+    position = 9;
+    cout << "Collision rate at " << poscount << endl;
+  }
+  else if (strstr(token, "cint1_e_nopf_all")) {
+    position = 10;
+    cout << "Empty Triggers at " << poscount << endl;
+  }
+  else if (strstr(token, "cint1a_abce_nopf_all")) {
+    position = 11;
+    cout << "ASide Triggers at " << poscount << endl;
+  }
+  else if (strstr(token, "cint1c_abce_nopf_all")) {
+    position = 12;
+    cout << "CSide Triggers at " << poscount << endl;
+  }
+  else if (strstr(token, "mean_vertex_xyz")) {
+    position = 13;
+    cout << "Mean Vertex at " << poscount << endl;
+  }
+  else if (strstr(token, "vertex_quality")) {
+    position = 14;
+    cout << "Vertex Quality at " << poscount << endl;
+  }
+  else if (strstr(token, "field")) {
+    position = 15;
+    cout << "Magnetic Field at " << poscount << endl;
+  }
+  else if (strstr(token, "det_aco")) {
+    position = 16;
+    cout << "ACORDE at " << poscount << endl;
+  }
+  else if (strstr(token, "det_emc")) {
+    position = 17;
+    cout << "EMC at " << poscount << endl;
+  }
+  else if (strstr(token, "det_fmd")) {
+    position = 18;
+    cout << "FMD at " << poscount << endl;
+  }
+  else if (strstr(token, "det_hlt")) {
+    position = 19;
+    cout << "HLT at " << poscount << endl;
+  }
+  else if (strstr(token, "det_hmp")) {
+    position = 20;
+    cout << "HMPID at " << poscount << endl;
+  }
+  else if (strstr(token, "det_mch")) {
+    position = 21;
+    cout << "MCH at " << poscount << endl;
+  }
+  else if (strstr(token, "det_mtr")) {
+    position = 22;
+    cout << "MTR at " << poscount << endl;
+  }
+  else if (strstr(token, "det_phs")) {
+    position = 23;
+    cout << "PHOS at " << poscount << endl;
+  }
+  else if (strstr(token, "det_pmd")) {
+    position = 24;
+    cout << "pmd at " << poscount << endl;
+  }
+  else if (strstr(token, "det_spd")) {
+    position = 25;
+    cout << "SPD at " << poscount << endl;
+  }
+  else if (strstr(token, "det_sdd")) {
+    position = 26;
+    cout << "SDD at " << poscount << endl;
+  }
+  else if (strstr(token, "det_ssd")) {
+    position = 27;
+    cout << "SSD at " << poscount << endl;
+  }
+  else if (strstr(token, "det_tof")) {
+    position = 28;
+    cout << "TOF at " << poscount << endl;
+  }
+  else if (strstr(token, "det_tpc")) {
+    position = 29;
+    cout << "TPC at " << poscount << endl;
+  }
+  else if (strstr(token, "det_trd")) {
+    position = 30;
+    cout << "TRD at " << poscount << endl;
+  }
+  else if (strstr(token, "det_t00")) {
+    position = 31;
+    cout << "TZERO at " << poscount << endl;
+  }
+  else if (strstr(token, "det_v00")) {
+    position = 32;
+    cout << "VZERO at " << poscount << endl;
+  }
+  else if (strstr(token, "det_zdc")) {
+    position = 33;
+    cout << "ZDC at " << poscount << endl;
+  }
+  else if (strstr(token, "filling_config")) {
+    position = 39;
+    cout << "Filling Scheme at " << poscount << endl;
+  }
+  else if (strstr(token, "quality")) {
+    position = 40;
+    cout << "Quality at " << poscount << endl;
+  }
+  else if (strstr(token, "muon_trigger")) {
+    position = 41;
+    cout << "Muon Trigger at " << poscount << endl;
+  }
+  else if (strstr(token, "high_multiplicity_trigger")) {
+    position = 42;
+    cout << "High Multiplicity trigger at " << poscount << endl;
+  }
+
+  return position;
+}
+
+void ParseRCTDump(const char *insum = "rctdump.txt")
+{
+  ifstream *istr = new ifstream(insum);
+
+  char buf[10000];
+  istr->getline(buf, 10000);
+  
+  if (strstr(buf, "#raw_run"))
+    cout << "Found raw run " << endl;
+
+  char *nval;
+  char *nlin = strstr(buf, "|");
+  char *nbeg = buf-1;
+  char ntok[1000];
+  char nstr[1000];
+
+  // Parse field name list
+
+  int fieldpos[200];
+  int poscount = 0;
+  
+  do {
+    if (nlin == NULL) {
+      strcpy(ntok, nbeg+1);
+      //      ntok[nlin-nbeg-1] = '\0';
+    }
+    else {
+      strncpy(ntok, nbeg+1, nlin-nbeg-1);
+      ntok[nlin-nbeg-1] = '\0';
+    }
+
+    cout << "Token is " << ntok << endl;
+
+    fieldpos[poscount] = getposition(ntok, poscount);
+    
+    nbeg = nlin;
+    nlin = strstr(nlin+1, "|");
+    poscount++;
+  }
+  while (nlin != NULL);
+
+  strcpy(ntok, nbeg+1);
+
+  cout << "Token is " << ntok << endl;
+  
+  fieldpos[poscount] = getposition(ntok, poscount);
+  
+  TFile* ftag = TFile::Open("RunTableTagSummary.root", "recreate");
+
+  AliRunTag *tag = new AliRunTag();
+  TTree * ttag = new TTree("T","A Tree with event tags");
+  TBranch * btag = ttag->Branch("AliTAG", &tag);
+  btag->SetCompressionLevel(9);
+
+  int nfield = 0;
+
+
+  while (!istr->eof()) {
+    istr->getline(buf, 10000);
+    nlin = strstr(buf, "|");
+    nbeg = buf-1;
+
+    nfield = 0;
+
+    cout << "Line " << nlin << endl;
+    
+    int endline = 0;
+
+    while (!endline) {
+      
+      if (nlin == NULL) {
+       strcpy(ntok, nbeg+1);
+       endline = 1;
+      }
+      else {
+       strncpy(ntok, nbeg+1, nlin-nbeg-1);
+       ntok[nlin-nbeg-1] = '\0';
+      }
+      if (ntok[0] == '"') {
+       strncpy(nstr, ntok+1, strlen(ntok)-2); 
+       nstr[strlen(ntok)-2] = '\0';
+      }
+      else if (ntok[0] == '(') {
+       char *com = strstr(ntok, ";");
+       cout << ntok << " "<< com << endl;
+       strncpy(nstr, ntok+1, com-ntok-1);
+       nstr[com-ntok-1] = '\0';
+      }
+      else {
+       nstr[0] = '\0';
+       nstr[1] = '\0';
+       nstr[2] = '\0';
+      }
+
+      if (nlin != NULL) {
+       nbeg = nlin;
+       nlin = strstr(nlin+1, "|");
+      }
+
+      switch (fieldpos[nfield]) {
+      case 0:
+       tag->SetRunId(atoi(ntok));
+       break;
+      case 1:
+       tag->SetLHCPeriod(nstr);
+       break;
+      case 2:
+       break;
+      case 3:
+       break;
+      case 4:
+       tag->GetLHCTag()->SetFillNo(atoi(ntok));
+       break;
+      case 5:
+       tag->GetLHCTag()->SetBeamEnergy(atof(ntok));
+       break;
+      case 6:
+       tag->GetLHCTag()->SetBunchIntensity(atof(ntok));
+       break;
+      case 7:
+       tag->SetBeamTriggers(atol(ntok));
+       break;
+      case 8:
+       tag->SetCollisionTriggers(atol(ntok));
+       break;
+      case 9:
+       tag->SetCollisionRate(atof(ntok));
+       break;
+      case 10:
+       tag->SetEmptyTriggers(atol(ntok));
+       break;
+      case 11:
+       tag->SetASideTriggers(atol(ntok));
+       break;
+      case 12:
+       tag->SetCSideTriggers(atol(ntok));
+       break;
+      case 13:
+       tag->SetMeanVertex(atof(ntok));
+       break;
+      case 14:
+       tag->SetVertexQuality(atof(ntok));
+       break;
+      case 15:
+       tag->SetMagneticField(atoi(ntok+1));
+       break;
+      case 16:
+       tag->GetDetectorTags()->SetDetectorStatus(17, nstr);
+       break;
+      case 17:
+       tag->GetDetectorTags()->SetDetectorStatus(18, nstr);
+       break;
+      case 18:
+       tag->GetDetectorTags()->SetDetectorStatus(12, nstr);
+       break;
+      case 19:
+       tag->GetDetectorTags()->SetDetectorStatus(21, nstr);
+       break;
+      case 20:
+       tag->GetDetectorTags()->SetDetectorStatus(6, nstr);
+       break;
+      case 21:
+       tag->GetDetectorTags()->SetDetectorStatus(10, nstr);
+       break;
+      case 22:
+       tag->GetDetectorTags()->SetDetectorStatus(11, nstr);
+       break;
+      case 23:
+       tag->GetDetectorTags()->SetDetectorStatus(7, nstr);
+       break;
+      case 24:
+       tag->GetDetectorTags()->SetDetectorStatus(9, nstr);
+       break;
+      case 25:
+       tag->GetDetectorTags()->SetDetectorStatus(0, nstr);
+       break;
+      case 26:
+       tag->GetDetectorTags()->SetDetectorStatus(1, nstr);
+       break;
+      case 27:
+       tag->GetDetectorTags()->SetDetectorStatus(2, nstr);
+       break;
+      case 28:
+       tag->GetDetectorTags()->SetDetectorStatus(5, nstr);
+       break;
+      case 29:
+       tag->GetDetectorTags()->SetDetectorStatus(3, nstr);
+       break;
+      case 30:
+       tag->GetDetectorTags()->SetDetectorStatus(4, nstr);
+       break;
+      case 31:
+       tag->GetDetectorTags()->SetDetectorStatus(13, nstr);
+       break;
+      case 32:
+       tag->GetDetectorTags()->SetDetectorStatus(14, nstr);
+       break;
+      case 33:
+       tag->GetDetectorTags()->SetDetectorStatus(15, nstr);
+       break;
+      case 34:
+       // comment
+       break;
+      case 35:
+       // detectors
+       break;
+      case 36:
+       // changedby
+       break;
+      case 37:
+       // changedon
+       break;
+      case 38:
+       // run duration
+       break;
+      case 39:
+       tag->GetLHCTag()->SetFillingScheme(nstr);
+       break;
+      case 40:
+       cout << "Setting Quality ]" << nstr << "[" << atoi(nstr) << endl;
+       if (strlen(nstr) == 0)
+         tag->SetRunQuality(0);
+       else
+         tag->SetRunQuality(atoi(nstr));
+       break;
+      case 41:
+       tag->SetMuonTriggers(atol(ntok));
+       break;
+      case 42:
+       tag->SetHMTriggers(atol(ntok));
+       break;
+      }
+
+      nfield++;
+    }
+
+
+    if (nfield > 1) {
+      ttag->Fill();
+      tag->Clear("");
+    }
+  }
+
+  ftag->cd();
+  tag->Clear();
+  ttag->Write();
+  ftag->Close();
+
+}