/[PAMELA software]/calo/ground/UTILITIES/macros/CaloCALIBSCAN.c
ViewVC logotype

Annotation of /calo/ground/UTILITIES/macros/CaloCALIBSCAN.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Tue Dec 6 10:59:28 2005 UTC (19 years ago) by mocchiut
Branch: MAIN, UTILITIES
CVS Tags: start, v2r01, v2r00, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Imported sources

1 mocchiut 1.1 //
2     //- Emiliano Mocchiutti
3     //
4     // CaloCALIBSCAN.c version 1.05 (2005-11-17)
5     //
6     // The only input needed is
7     //
8     // Changelog:
9     //
10     // 1.04 - 1.05 (2005-11-17): compiled!
11     //
12     // 1.03 - 1.04 (2005-08-15): 64 bit arch bugs fixed.
13     //
14     // 1.02 - 1.03 (2005-08-04): small bugs fixed.
15     //
16     // 1.01 - 1.02 (2005-07-21): don't load anymore yodaUtility.c, use instead clone routines.
17     //
18     // 1.00 - 1.01 (2005-07-12): small changes for compilation.
19     //
20     // 0.90 - 1.00 (2005-06-28): Working. Many changes.
21     //
22     // 0.90 (2005-04-14): Created and partially working.
23     //
24     #include <fstream>
25     #include <sstream>
26     #include <string>
27     #include <TTree.h>
28     #include <TClassEdit.h>
29     #include <TObject.h>
30     #include <TList.h>
31     #include <TSystem.h>
32     #include <TSystemDirectory.h>
33     #include <TString.h>
34     #include <TFile.h>
35     #include <TClass.h>
36     #include <TCanvas.h>
37     #include <TH1.h>
38     #include <TH1F.h>
39     #include <TH2D.h>
40     #include <TLatex.h>
41     #include <TPad.h>
42     #include <TPaveLabel.h>
43     #include <TChain.h>
44     #if !defined (__CINT__)
45     #include <event/PamelaRun.h>
46     #include <event/physics/calorimeter/CalorimeterEvent.h>
47     #include <event/physics/trigger/TriggerEvent.h>
48     #include <event/CalibCalPedEvent.h>
49     #include <caloclasses.h>
50     #endif
51     #include <CaloFunctions.h>
52    
53     short int CaloCALIBSCAN(TString Filename, TString flist=""){
54     gROOT->GetListOfCanvases()->Delete("a");
55     gDirectory->GetList()->Delete();
56     #if defined (__CINT__)
57     emicheckLib();
58     stringstream llib;
59     const char *pamlib = gSystem->ExpandPathName("$PAM_LIB");
60     llib << pamlib << "/caloclasses_h.so";
61     gSystem->Load(llib.str().c_str());
62     #endif
63     TString calcalib;
64     struct Calib calib;
65     //
66     stringstream file5;
67     const char *pam_calib=gSystem->Getenv("PAM_CALIB");
68     file5.str("");
69     file5 << pam_calib << "/CaloCALIBdata.root";
70     // sprintf(file5,"%s/CaloCALIBdata.root",pam_calib);
71     //file5 = Form("%s/CaloCALIBdata.root",pam_calib);
72     //
73     Int_t nfile = 0;
74     Int_t calibex = 0;
75     Int_t fileup = 0;
76     if ( flist != "" ){
77     printf("\n You have given an input file list \n\n Files: \n");
78     ifstream in;
79     in.open(flist, ios::in);
80     char ctime[20];
81     while (1) {
82     in >> ctime;
83     if (!in.good()) break;
84     printf(" File number %i = %s \n",nfile+1,ctime);
85     nfile++;
86     // if ( nfile > 499 ) {
87     // printf(" No more than 500 files please! \n ");
88     // return;
89     //};
90     };
91     in.close();
92     if ( !nfile ) {
93     printf("\n\n The list is empty, exiting... \n\n");
94     return(0);
95     };
96     } else {
97     nfile = 1;
98     };
99     printf("\n");
100     //
101     // First check if the calibration file exists:
102     //
103     Int_t EFILE = 0;
104     printf(" Check the existence of CaloCALIBdata.root file: \n\n");
105     TFile tfile(file5.str().c_str());
106     if ( !tfile.IsZombie() ) {
107     printf(" The file already exists! It will be updated \n\n");
108     EFILE = 1;
109     tfile.Close();
110     } else {
111     printf("\n OK, I will create it!\n\n");
112     EFILE = 0;
113     };
114     // EFILE = 0;
115     //
116     // this must be done for each file.
117     //
118     Long64_t neven = 0;
119     TTree *trl1 = 0;
120     TFile *hfl1 = 0;
121     CalorimeterCalibScan *calo = new CalorimeterCalibScan();
122     if ( EFILE == 1 ){
123     //
124     // If the file doesn't exist create it
125     //
126     hfl1 = new TFile(file5.str().c_str(),"UPDATE","Calorimeter calib data");
127     calo = new CalorimeterCalibScan();
128     //
129     trl1 = (TTree*)hfl1->Get("CaloCALIBdata");
130     trl1->SetBranchAddress("Event", &calo);
131     neven = trl1->GetEntries()-1;
132     trl1->GetEntry(neven);
133     calibex = calo->evno;
134     printf("neven %i calibex = %i calo->evno %i calo->rms %f \n",(int)neven,calibex,calo->evno,calo->calrms[0][0][0]);
135     } else {
136     //
137     // If the file doesn't exist create it
138     //
139     hfl1 = new TFile(file5.str().c_str(),"RECREATE","Calorimeter calib data");
140     //
141     calo = new CalorimeterCalibScan();
142     //
143     trl1 = new TTree("CaloCALIBdata","PAMELA calorimeter calibration data");
144     trl1->Branch("Event","CalorimeterCalibScan",&calo);
145     };
146     //
147     const char *filename2 = Filename;
148     //
149     TString lfile;
150     TString sfile;
151     //
152     Int_t e = 0;
153     ifstream in;
154     in.open(flist, ios::in);
155     char ctime[20];
156     const char *nome;
157     //
158     // TString *file[17];
159     TString fififile;
160     const char *file;
161     TString filename;
162     //
163     stringstream lfillo;
164     //
165     //
166     //
167     TTree *tr;
168     pamela::CalibCalPedEvent *ce = 0;
169     pamela::PscuHeader *cph = 0;
170     pamela::EventHeader *ceh = 0;
171     Long64_t ncalibs = 0;
172     Int_t s = -1;
173     Int_t l = 0;
174     Int_t m = 0;
175     Int_t ss = 0;
176     //
177     while ( e < nfile ){
178     if ( flist != "" ){
179     in >> ctime;
180     lfillo.str("");
181     lfillo << filename2 << "/";
182     lfillo << ctime;
183     lfile = (TString)lfillo.str().c_str();
184     //file = "dw_000000_000.dat";
185     // file = emigetFilename(lfile);
186     fififile = getFilename(lfile);
187     file = fififile;
188     lfillo.str("");
189     lfillo << file;
190     sfile = (TString)lfillo.str().c_str();
191     } else {
192     lfillo.str("");
193     lfillo << filename2;
194     lfile = (TString)lfillo.str().c_str();
195     // file = "dw_000000_000.dat";
196     // file = emigetFilename(lfile);
197     fififile = getFilename(lfile);
198     file = fififile;
199     lfillo.str("");
200     lfillo << file;
201     sfile = (TString)lfillo.str().c_str();
202     };
203     //
204     filename = lfile;
205     nome = filename;
206     printf("\n Processing file number %i: %s \n\n",e+1,nome);
207     //
208     const string fil = (const char *)filename;
209     Int_t posiz = fil.find("dw_");
210     if ( posiz == -1 ) posiz = fil.find("DW_");
211     if ( posiz == -1 ) return(-1);
212     TString year;
213     stringcopy(year,filename,posiz+3,posiz+5);
214     const char *ye = year;
215     TString month;
216     stringcopy(month,filename,posiz+5,posiz+7);
217     const char *mo = month;
218     TString day;
219     stringcopy(day,filename,posiz+7,posiz+9);
220     const char *da = day;
221     TString fno;
222     stringcopy(fno,filename,posiz+10,posiz+13);
223     const char *fn = fno;
224     stringstream unino;
225     // char *unino = 0;
226     // unino = Form("%s%s%s%s",ye,mo,da,fn);
227     unino.str("");
228     unino << ye << mo;
229     unino << da << fn;
230     //
231     // upgrade data...
232     //
233     TFile *calheadFile = 0;
234     calheadFile = getEmiFile(filename, "CalibCalPed", "Header");
235     TFile *calcalibFile = 0;
236     calcalibFile = getEmiFile(filename, "CalibCalPed","Event");
237     //
238     const char *filen = filename;
239     if ( !calheadFile || !calcalibFile ) {
240     if ( calheadFile ) calheadFile->Close();
241     if ( calcalibFile ) calcalibFile->Close();
242     printf("\n\nERROR: not able to open file: %s \n",filen);
243     goto jumpfile;
244     };
245     tr = (TTree*)calheadFile->Get("Pscu");
246     tr->AddFriend("CalibCalPed", calcalibFile);
247     tr->SetBranchAddress("Header", &ceh);
248     tr->SetBranchAddress("Event", &ce);
249     ncalibs = tr->GetEntries();
250     if ( ncalibs == 0 ) goto oltre;
251     calo = new CalorimeterCalibScan();
252     s = -1;
253     l = 0;
254     m = 0;
255     for (Int_t ci = 0; ci < ncalibs ; ci++){
256     tr->GetEntry(ci);
257     //
258     // qui si deve definire "s"
259     //
260     s++;
261     if ( s == 4 ) s = 0;
262     if ( s == 0 ) ss = 0;
263     if ( s == 1 ) ss = 2;
264     if ( s == 2 ) ss = 3;
265     if ( s == 3 ) ss = 1;
266     //
267     if ( s == 0 ){
268     Double_t noca = (double)ci/100.;
269     Double_t calno = atof(unino.str().c_str())+noca;
270     calo->calno = calno;
271     calibex++;
272     calo->evno = calibex;
273     // printf("unino %s atof %f calno = %f calocalno %f \n",unino,atof(unino)+noca,calno,calo->calno);
274     };
275     //
276     //
277     //
278     if (ce->cstwerr[s] != 0 && ce->cperror[s] == 0 ) {
279     // printf("ci %i , s %i \n",ci,s);
280     cph = ceh->GetPscuHeader();
281     calo->etime[ss] = cph->GetOrbitalTime();
282     for ( Int_t d=0 ; d<11 ;d++ ){
283     Int_t pre = -1;
284     if ( s == 2 ) m = 2*d+1;
285     if ( s == 3 ) m = 2*d;
286     if ( s == 0 ) m = 2*d;
287     if ( s == 1 ) m = 2*d+1;
288     if ( s == 3 ) l = 0;
289     if ( s == 2 ) l = 0;
290     if ( s == 1 ) l = 1;
291     if ( s == 0 ) l = 1;
292     for ( Int_t j=0; j<96 ;j++){
293     if ( j%16 == 0 ) pre++;
294     calo->calped[l][m][j] = ce->calped[ss][d][j];
295     calo->cstwerr[ss] = ce->cstwerr[s];
296     calo->cperror[ss] = ce->cperror[s];
297     calo->calgood[l][m][j] = ce->calgood[ss][d][j];
298     calo->calthr[l][m][pre] = ce->calthr[ss][d][pre];
299     calo->calrms[l][m][j] = ce->calrms[ss][d][j]/4.;
300     calo->calbase[l][m][pre] = ce->calbase[ss][d][pre];
301     calo->calvar[l][m][pre] = ce->calvar[ss][d][pre];
302     };
303     };
304     };
305     //
306     if ( s == 3 ){
307     trl1->Fill();
308     calo = new CalorimeterCalibScan();
309     };
310     //
311     };
312     fileup++;
313     //
314     goto oltre;
315     jumpfile: printf(" File not processed! \n ");
316     oltre:
317     e++;
318     };
319     hfl1->Write();
320     hfl1->Close();
321     return(0);
322     }

  ViewVC Help
Powered by ViewVC 1.1.23