Tag filename was incorrectly composed if reconstruction started not from 1st ev.
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 10 Dec 2011 22:29:56 +0000 (22:29 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 10 Dec 2011 22:29:56 +0000 (22:29 +0000)
Added Add method to merge tags of same chunk reconstructed in few steps

STEER/STEERBase/AliRunTag.cxx
STEER/STEERBase/AliRunTag.h

index ef6a803..3634949 100644 (file)
@@ -170,7 +170,6 @@ AliRunTag& AliRunTag::operator = (const AliRunTag& tag) {
     fAliceCalibrationVersion  = tag.fAliceCalibrationVersion ; 
     fAliceDataType            = tag.fAliceDataType ; 
     //    fNumEvents                = tag.fNumEvents ;
-    fNumFiles                 = tag.fNumFiles;
     fBeamTriggers             = tag.fBeamTriggers;
     fCollisionTriggers       = tag.fCollisionTriggers;
     fEmptyTriggers           = tag.fEmptyTriggers;
@@ -204,7 +203,7 @@ AliRunTag& AliRunTag::operator = (const AliRunTag& tag) {
       fEventSpecies = new Bool_t[fESLength] ; 
       memcpy(fEventSpecies, tag.fEventSpecies, fESLength*sizeof(Bool_t)) ;
     }
-    for (int ifl=0; ifl<fNumFiles; ifl++) {
+    for (int ifl=0; ifl<tag.fNumFiles; ifl++) {
       AddFileTag(new AliFileTag(*tag.GetFileTag(ifl)));
     }
 //     for (int ifile=0; ifile<tag.GetFileTags()->GetEntries(); ifile++)
@@ -214,6 +213,48 @@ AliRunTag& AliRunTag::operator = (const AliRunTag& tag) {
 }
 
 //___________________________________________________________________________
+Bool_t AliRunTag::Add(const AliRunTag* tag) 
+{
+  // merge two pieces
+  if (fAliceRunId==-1) { // empty
+    *this = *tag;
+    return kTRUE;
+  }
+  if (fAliceRunId != tag->fAliceRunId) {    
+    AliWarning(Form("Run IDs are different: %d %d",fAliceRunId,tag->fAliceRunId)); 
+    return kFALSE;
+  }
+  // real merging
+  fBeamTriggers       += tag->fBeamTriggers;
+  fCollisionTriggers  += tag->fCollisionTriggers;
+  fEmptyTriggers      += tag->fEmptyTriggers;
+  fASideTriggers      += tag->fASideTriggers;
+  fCSideTriggers      += tag->fCSideTriggers;
+  fHMTriggers         += tag->fHMTriggers;
+  fMuonTriggers       += tag->fMuonTriggers;
+  AliFileTag* eftag = 0;
+  //
+  for (int i=0;i<tag->fNumFiles;i++) {
+    AliFileTag* tftag = (AliFileTag*)tag->GetFileTag(i);
+    if (fNumFiles>0) eftag = (AliFileTag*)GetFileTag(fNumFiles-1);
+    else { 
+      eftag = new AliFileTag(); 
+      eftag->SetMD5("");
+      eftag->SetTURL("");
+      eftag->SetSize(0);
+      AddFileTag(eftag);
+    }
+    int nev = tftag->GetNEvents();
+    for (int j=0;j<nev;j++) {
+      AliEventTag* tge = (AliEventTag*)tftag->GetEventTag(j);
+      if (tge) eftag->AddEventTag(*tge);
+    }
+  }
+  
+  return kTRUE; 
+}
+
+//___________________________________________________________________________
 void AliRunTag::CopyStandardContent(AliRunTag *oldtag) {
   //function that copies the run, lhc and detector levels
   SetRunId(oldtag->GetRunId());
index deb14f8..5f57912 100644 (file)
@@ -32,6 +32,7 @@ class AliRunTag : public TObject {
   virtual ~AliRunTag();
   AliRunTag(const AliRunTag& qa) ;   
   AliRunTag& operator = (const AliRunTag& tag) ;
+  Bool_t Add(const AliRunTag* tag) ;
   //____________________________________________________//
   void SetRunId(Int_t Pid) {fAliceRunId = Pid;}
   void SetMagneticField(Float_t Pmag) {fAliceMagneticField = Pmag;}
@@ -117,7 +118,7 @@ class AliRunTag : public TObject {
   Bool_t *   GetEventSpecies() const {return fEventSpecies;}   
   Int_t      GetESLength() const { return fESLength ; }
   Int_t      GetFileId(const char *guid);
-  
+  Int_t      GetNumFiles() const {return fNumFiles;}
   TString    GetActiveTriggerClasses() const {return fActiveTriggerClasses; }
 
   //____________________________________________________//