Tunning lumimeters
[u/mrichter/AliRoot.git] / OADB / AliOADBFillingScheme.cxx
1 //-------------------------------------------------------------------------
2 //     OADB container for filling scheme information (BX ids, name ...)
3 //     Author: Michele Floris, CERN
4 //-------------------------------------------------------------------------
5
6 #include "AliOADBFillingScheme.h"
7 #include "TMap.h"
8 #include "AliLog.h"
9 #include "TBrowser.h"
10 #include "TFolder.h"
11 #include <iostream>
12
13 using namespace std;
14
15 ClassImp(AliOADBFillingScheme)
16
17
18 AliOADBFillingScheme::AliOADBFillingScheme() : TNamed("AliOADBFillingScheme", "OADB object storing filling scheme infos"), fFSName(""), fBXIds(0){
19   // default ctor
20
21   
22 }
23 AliOADBFillingScheme::AliOADBFillingScheme(char* name) : TNamed(name, "OADB object storing filling scheme infos"), fFSName(""), fBXIds(0){
24   // ctor
25   Init();
26 }
27
28 void AliOADBFillingScheme::Init() {
29   // initialize pointers
30   fBXIds = new TMap();
31   fFSName = "";
32
33 }
34
35 AliOADBFillingScheme::~AliOADBFillingScheme(){
36   // dtor
37
38   if(fBXIds)           delete fBXIds;
39
40 }
41
42 // AliOADBFillingScheme::AliOADBFillingScheme(const AliOADBFillingScheme& cont) {
43 //   // Copy ctor
44 //   AliError("To be implemented");
45 // }
46
47 // AliOADBFillingScheme& AliOADBFillingScheme::operator=(const AliOADBFillingScheme& cont) {
48 //   //Assignment operator
49 //   AliError("To be implemented");
50 // }
51   
52 // Getters
53
54 const char *  AliOADBFillingScheme::GetBXIDs(const char * beamSide) const 
55 {
56   //  Returns the bunch crossing numbers for the different beam classes. By default this is empty
57
58   if( !strcmp(beamSide,"ACE") && !(TObjString*)fBXIds->GetValue(beamSide)) 
59     AliWarning("Beware, no correction for the BXIDs for ACE");
60
61   if (!strcmp(beamSide, "AC") && !(TObjString*)fBXIds->GetValue(beamSide)) {
62
63     TString  &bxa =  ((TObjString*)fBXIds->GetValue("A"))->String(); 
64     TString  &bxc =  ((TObjString*)fBXIds->GetValue("C"))->String();
65     if(bxa.IsNull() && bxc.IsNull()) return "";
66     if(bxc.IsNull())         return bxa.Data();
67     if(bxa.IsNull())         return bxc.Data();
68     static TString bxBoth = bxa.Data();
69     bxBoth += bxc.Data();
70     return bxBoth.Data();
71
72   } 
73
74   if(!(TObjString*)fBXIds->GetValue(beamSide)) return "";
75
76   TString  &bx =  ((TObjString*)fBXIds->GetValue(beamSide))->String(); 
77   if(bx.IsNull()) return "";
78   return bx.Data();
79   
80 }
81
82 void AliOADBFillingScheme::Browse(TBrowser *b)
83 {
84    // Browse this object.
85    // If b=0, there is no Browse call TObject::Browse(0) instead.
86    //         This means TObject::Inspect() will be invoked indirectly
87
88
89   if (b) {
90     // Creates a folder for each beam type containing the list of corresponding bx ids
91     b->Add(new TObjString(Form("Filling Scheme %s",GetFillingSchemeName())));
92     TIterator * mapIter = fBXIds->MakeIterator();
93     TObjString * key = 0;
94     while ((key = (TObjString*) mapIter->Next())) {
95       TFolder * folder = new TFolder(key->String().Data(), "beam side");
96       TObjString * value = (TObjString*) fBXIds->GetValue(key);
97       TObjArray * tokens = value->String().Tokenize(" ");
98       TIterator * tokIter = tokens->MakeIterator();
99       TObjString * bxNum = 0;
100       while ((bxNum = (TObjString*) tokIter->Next())){
101         folder->Add(bxNum);
102       }
103       b->Add(folder);
104       delete tokIter;
105       delete tokens;
106     }
107     delete mapIter;    
108   }     
109   else
110     TObject::Browse(b);
111 }
112
113 void AliOADBFillingScheme::Print(Option_t* option) const {
114   // Print Class contents
115   // Option is passed to TMap::Print
116   cout << "Filling scheme Name " <<  fFSName.Data() << option << endl;
117   fBXIds->Print(option);
118 }