ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/andersj/HcalPlotter/scripts/HistoManager.cc
Revision: 1.1
Committed: Wed Jul 20 11:34:57 2011 UTC (13 years, 9 months ago) by andersj
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
inital version

File Contents

# User Rev Content
1 andersj 1.1 #include "HistoManager.h"
2     #include "TProfile.h"
3     #include <iostream>
4    
5     HistoManager::HistoManager(TDirectory* parent)
6     {
7     pedHistDir = (TDirectory*)parent->Get("PEDESTAL");
8     ledHistDir = (TDirectory*)parent->Get("LED");
9     laserHistDir = (TDirectory*)parent->Get("LASER");
10     beamHistDir = (TDirectory*)parent->Get("BEAM");
11     otherHistDir = (TDirectory*)parent->Get("OTHER");
12     }
13    
14     std::string HistoManager::nameForFlavor(HistType ht)
15     {
16     switch (ht) {
17     case(ENERGY) : return "Energy"; break;
18     case(TIME) : return "Time"; break;
19     case(PULSE) : return "Pulse"; break;
20     case(ADC) : return "ADC"; break;
21     default : return ""; break;
22     }
23     }
24    
25     std::string HistoManager::nameForEvent(EventType et)
26     {
27     switch(et) {
28     case(PEDESTAL) : return "Pedestal"; break;
29     case(LED) : return "LED"; break;
30     case(LASER) : return "Laser"; break;
31     case(BEAM) : return "Beam"; break;
32     default : return "Other"; break;
33     }
34     }
35    
36     TH1* HistoManager::GetAHistogram(const MyHcalDetId& id,
37     HistType ht,
38     EventType et)
39     {
40     std::string flavor=nameForFlavor(ht);
41     TDirectory* td;
42    
43     switch (et) {
44     case(PEDESTAL) : td=pedHistDir; break;
45     case(LED) : td=ledHistDir; break;
46     case(LASER) : td=laserHistDir; break;
47     case(BEAM) : td=beamHistDir; break;
48     case(UNKNOWN) : td=otherHistDir; break;
49     default : td=0; break;
50     }
51    
52     if (!td) {
53     printf("Event type not known, et=%d\n", et);
54     return 0;
55     }
56    
57     char name[120];
58    
59     std::string subdetStr;
60     switch (id.subdet) {
61     case (HcalBarrel) : subdetStr="HB"; break;
62     case (HcalEndcap) : subdetStr="HE"; break;
63     case (HcalOuter) : subdetStr="HO"; break;
64     case (HcalForward) : subdetStr="HF"; break;
65     default : subdetStr="Other"; break;
66     }
67    
68     TH1* retval=0;
69     sprintf(name,"%s_%s_%d_%d_%d",
70     flavor.c_str(),subdetStr.c_str(),id.ieta,id.iphi,id.depth);
71    
72     TList* keyList = td->GetListOfKeys();
73    
74     for(int keyindex = 0; keyindex<keyList->GetEntries(); ++keyindex) {
75     std::string keyname = keyList->At(keyindex)->GetName();
76     if (strstr(keyname.c_str(),name)) {
77     retval=(TH1*)td->Get(keyname.c_str());
78     break;
79     }
80     }
81    
82     return retval;
83     }
84    
85    
86    
87    
88     TH1* HistoManager::GetAHistogram(const MyElectronicsId& eid,
89     HistType ht,
90     EventType et)
91     {
92     std::string flavor=nameForFlavor(ht);
93     TDirectory* td;
94    
95     switch (et) {
96     case(PEDESTAL): td=pedHistDir; break;
97     case(LED): td=ledHistDir; break;
98     case(LASER): td=laserHistDir; break;
99     case(BEAM): td=beamHistDir; break;
100     case(UNKNOWN): td=otherHistDir; break;
101     default: td=0; break;
102     }
103    
104     if (td==0) {
105     printf("Unknown %d !\n", et);
106     return 0;
107     }
108    
109     char name[120];
110    
111    
112     char topbot;
113     if (eid.tb==0){topbot = 'b';}
114     else{topbot='t';}
115     TH1* retval=0;
116     sprintf(name,"%d_%d_HTR_%d:%d%c",
117     eid.fiber, eid.fiberChan, eid.crate, eid.Slot,topbot);
118     TList* keyList = td->GetListOfKeys();
119    
120     for(int keyindex = 0; keyindex<keyList->GetEntries(); ++keyindex) {
121     std::string keyname = keyList->At(keyindex)->GetName();
122     if ((strstr(keyname.c_str(),name))&&(strstr(keyname.c_str(),flavor.c_str()))) {
123     retval=(TH1*)td->Get(keyname.c_str());
124     break;
125     }
126     }
127    
128     return retval;
129     }
130    
131    
132     std::vector<MyHcalDetId> HistoManager::getDetIdsForType(HistType ht,
133     EventType et)
134     {
135     char keyflavor[100];
136     char keysubDet[100];
137     MyHcalDetId mydetid;
138     TDirectory* td;
139     TList* keyList;
140     std::vector<MyHcalDetId> retvals;
141    
142     std::string flavor=nameForFlavor(ht);
143    
144     switch (et) {
145     case(PEDESTAL) : td=pedHistDir; break;
146     case(LED) : td=ledHistDir; break;
147     case(LASER) : td=laserHistDir; break;
148     case(BEAM) : td=beamHistDir; break;
149     case(UNKNOWN) : td=otherHistDir; break;
150     default : td=0; break;
151     }
152    
153     if (!td) {
154     printf("Event type not known, et=%d\n", et);
155     return retvals;
156     }
157    
158     keyList = td->GetListOfKeys();
159    
160     for(int keyindex = 0; keyindex<keyList->GetEntries(); ++keyindex) {
161     int converted;
162     std::string keyname = keyList->At(keyindex)->GetName();
163     // cout << keyindex << " " << keyname << endl;
164     while (keyname.find("_")!=std::string::npos)
165     keyname.replace(keyname.find("_"),1," ");
166     converted = sscanf(keyname.c_str(),"%s %s %d %d %d",
167     keyflavor,keysubDet,
168     &mydetid.ieta,&mydetid.iphi,&mydetid.depth);
169     if( (flavor==keyflavor) && (converted==5) ) {
170     if (!strcmp(keysubDet,"HB")) mydetid.subdet=HcalBarrel;
171     else if (!strcmp(keysubDet,"HE")) mydetid.subdet=HcalEndcap;
172     else if (!strcmp(keysubDet,"HO")) mydetid.subdet=HcalOuter;
173     else if (!strcmp(keysubDet,"HF")) mydetid.subdet=HcalForward;
174     else continue; // and do not include this in the list!
175    
176     retvals.push_back(mydetid);
177     }
178     }
179    
180    
181     return retvals;
182     }
183    
184    
185     std::vector<MyElectronicsId> HistoManager::getElecIdsForType(HistType ht,
186     EventType et)
187     {
188     char keyflavor[100];
189     char keysubDet[100];
190     MyElectronicsId mydeteid;
191     TDirectory* td;
192     TList* keyList;
193     std::vector<MyElectronicsId> retvals;
194    
195     std::string flavor=nameForFlavor(ht);
196    
197     switch (et) {
198     case(PEDESTAL): td=pedHistDir; break;
199     case(LED): td=ledHistDir; break;
200     case(LASER): td=laserHistDir; break;
201     case(BEAM): td=beamHistDir; break;
202     case(UNKNOWN): td=otherHistDir; break;
203     default: td=0; break;
204     }
205     if (!td) {
206     printf("Event type not known, et=%d\n", et);
207     return retvals;
208     }
209    
210     keyList = td->GetListOfKeys();
211     if (keyList==0) return retvals;
212    
213     for(int keyindex = 0; keyindex<keyList->GetEntries(); ++keyindex) {
214     int converted;
215     std::string keyname = keyList->At(keyindex)->GetName();
216     while (keyname.find("_")!=std::string::npos)
217     keyname.replace(keyname.find("_"),1," ");
218     char bottop;
219    
220     //printf("%s\n",keyname.c_str());
221    
222     if(strstr(keyname.c_str(),"CALIB")){
223     converted = sscanf(keyname.c_str(),"%s %*s %s %*d %*d chan=%*s eid=%*d %*d %d %d HTR %d:%d%c ",
224     keyflavor,keysubDet, &mydeteid.fiber,&mydeteid.fiberChan,&mydeteid.crate,&mydeteid.Slot,&bottop);
225    
226     if (bottop=='t')
227     {mydeteid.tb=1;}
228     else
229     {mydeteid.tb=0;}
230    
231     // printf("%d converts to %d %d %d %d %c\n",converted,mydeteid.fiber,mydeteid.fiberChan,mydeteid.crate,mydeteid.Slot,bottop);
232    
233     }else{
234     converted = sscanf(keyname.c_str(),"%s %s %*d %*d %*d eid=%*d %*d %d %d HTR %d:%d%c ",
235     keyflavor,keysubDet, &mydeteid.fiber,&mydeteid.fiberChan,&mydeteid.crate,&mydeteid.Slot,&bottop);
236    
237    
238     if (bottop=='t')
239     {mydeteid.tb=1;}
240     else
241     {mydeteid.tb=0;}
242     }
243     //printf("converts to %d %d %d %d %d\n",mydeteid.fiber,mydeteid.fiberChan,mydeteid.crate,mydeteid.Slot,mydeteid.tb);
244    
245    
246     if( (flavor==keyflavor) && (converted==7) )
247    
248     retvals.push_back(mydeteid);
249    
250     }
251    
252    
253     return retvals;
254     }
255    
256