| 1 |
mocchiut |
1.1 |
// |
| 2 |
|
|
// C/C++ headers |
| 3 |
|
|
// |
| 4 |
|
|
#include <fstream> |
| 5 |
|
|
#include <string.h> |
| 6 |
|
|
// |
| 7 |
|
|
// ROOT headers |
| 8 |
|
|
// |
| 9 |
|
|
#include <TTree.h> |
| 10 |
|
|
#include <TClassEdit.h> |
| 11 |
|
|
#include <TObject.h> |
| 12 |
|
|
#include <TList.h> |
| 13 |
|
|
#include <TArrayL.h> |
| 14 |
|
|
#include <TSystem.h> |
| 15 |
|
|
#include <TSystemDirectory.h> |
| 16 |
|
|
#include <TString.h> |
| 17 |
|
|
#include <TFile.h> |
| 18 |
|
|
#include <TClass.h> |
| 19 |
|
|
#include <TCanvas.h> |
| 20 |
|
|
#include <TH1.h> |
| 21 |
|
|
#include <TH1F.h> |
| 22 |
|
|
#include <TH2D.h> |
| 23 |
|
|
#include <TLatex.h> |
| 24 |
|
|
#include <TPad.h> |
| 25 |
|
|
#include <TSQLServer.h> |
| 26 |
|
|
#include <TSQLRow.h> |
| 27 |
|
|
#include <TSQLResult.h> |
| 28 |
|
|
#include <TClonesArray.h> |
| 29 |
|
|
// |
| 30 |
|
|
// YODA headers |
| 31 |
|
|
// |
| 32 |
|
|
#include <PamelaRun.h> |
| 33 |
|
|
#include <RegistryEvent.h> |
| 34 |
|
|
#include <physics/trigger/TriggerEvent.h> |
| 35 |
|
|
|
| 36 |
|
|
// ####################################################################################################################### |
| 37 |
|
|
// |
| 38 |
|
|
// Calorimeter class CaloProcessing. Do not include CaloLevel2 (it doesn't compile I don't understand why...) |
| 39 |
|
|
// |
| 40 |
|
|
#include <CaloProcessing.h> |
| 41 |
|
|
// ####################################################################################################################### |
| 42 |
|
|
|
| 43 |
|
|
|
| 44 |
|
|
|
| 45 |
|
|
int main(){ |
| 46 |
|
|
// |
| 47 |
|
|
// definizione di variabili |
| 48 |
|
|
// |
| 49 |
|
|
TFile *l0File = 0; |
| 50 |
|
|
TTree *l0tr = 0; |
| 51 |
|
|
TBranch *l0registry = 0; |
| 52 |
|
|
TBranch *l0calo = 0; |
| 53 |
|
|
ULong64_t atime = 0ULL; |
| 54 |
|
|
UInt_t ei = 0; |
| 55 |
|
|
UInt_t re = 0; |
| 56 |
|
|
Int_t sgnl = 0; |
| 57 |
|
|
pamela::RegistryEvent *l0reg=0; |
| 58 |
|
|
TSQLServer *dbc = 0; |
| 59 |
|
|
dbc = TSQLServer::Connect("mysql://localhost/pamelaprod","anonymous",""); |
| 60 |
|
|
|
| 61 |
|
|
// |
| 62 |
|
|
// e` importante che CaloProcessing chiami QUI prima di loopare sui run il suo costruttore! |
| 63 |
|
|
// |
| 64 |
|
|
// ####################################################################################################################### |
| 65 |
|
|
CaloProcessing *event = new CaloProcessing(); |
| 66 |
|
|
CaloLevel2 *ca = 0; |
| 67 |
|
|
// ####################################################################################################################### |
| 68 |
|
|
// |
| 69 |
|
|
|
| 70 |
|
|
// |
| 71 |
|
|
// LOOP ON THE RUNS at some time... |
| 72 |
|
|
// |
| 73 |
|
|
|
| 74 |
|
|
// |
| 75 |
|
|
// now we assume to process run 24 (my run 24 not the one on gundam if any) with |
| 76 |
|
|
// |
| 77 |
|
|
ULong64_t runheadtime = 132796435910ULL; |
| 78 |
|
|
UInt_t evfrom = 179; |
| 79 |
|
|
UInt_t evto = 200; |
| 80 |
|
|
// UInt_t evto = 1354; |
| 81 |
|
|
|
| 82 |
|
|
// |
| 83 |
|
|
// Open Level0 file and branches |
| 84 |
|
|
// |
| 85 |
|
|
l0File = new TFile("/wizard3/pamela/samara/filesfromyoda//dw_050318_00100.root"); |
| 86 |
|
|
if ( !l0File ) { |
| 87 |
|
|
printf(" CALORIMETER - ERROR: problems opening Level0 file\n"); |
| 88 |
|
|
return(0); |
| 89 |
|
|
}; |
| 90 |
|
|
l0tr = (TTree*)l0File->Get("Physics"); |
| 91 |
|
|
if ( !l0tr ) { |
| 92 |
|
|
printf(" CALORIMETER - ERROR: no Physics tree in Level0 file\n"); |
| 93 |
|
|
l0File->Close(); |
| 94 |
|
|
return(0); |
| 95 |
|
|
}; |
| 96 |
|
|
l0registry = l0tr->GetBranch("Registry"); |
| 97 |
|
|
if ( !l0registry ) { |
| 98 |
|
|
printf(" CALORIMETER - ERROR: no Registry branch in Level0 tree\n"); |
| 99 |
|
|
l0File->Close(); |
| 100 |
|
|
return(0); |
| 101 |
|
|
}; |
| 102 |
|
|
// |
| 103 |
|
|
l0calo = l0tr->GetBranch("Calorimeter"); |
| 104 |
|
|
if ( !l0calo ) { |
| 105 |
|
|
printf(" CALORIMETER - ERROR: no Calorimeter branch in Level0 tree\n"); |
| 106 |
|
|
l0File->Close(); |
| 107 |
|
|
return(0); |
| 108 |
|
|
}; |
| 109 |
|
|
// |
| 110 |
|
|
l0tr->SetBranchAddress("Registry", &l0reg); |
| 111 |
|
|
|
| 112 |
|
|
|
| 113 |
|
|
|
| 114 |
|
|
|
| 115 |
|
|
// ####################################################################################################################### |
| 116 |
|
|
// |
| 117 |
|
|
// Initialize the calorimeter event object, look for the calibration which include the first header |
| 118 |
|
|
// |
| 119 |
|
|
printf(" Check for calorimeter calibrations and initialize event object \n"); |
| 120 |
|
|
event->ProcessingInit(dbc,runheadtime,sgnl,l0tr); |
| 121 |
|
|
printf("\n"); |
| 122 |
|
|
// |
| 123 |
|
|
// Check if we have to load parameter files (one time for every run) |
| 124 |
|
|
// |
| 125 |
|
|
event->ChkParam(dbc,runheadtime); // calorimeter parameter files |
| 126 |
|
|
// |
| 127 |
|
|
// ####################################################################################################################### |
| 128 |
|
|
|
| 129 |
|
|
|
| 130 |
|
|
|
| 131 |
|
|
|
| 132 |
|
|
// |
| 133 |
|
|
// run over all the events of the run |
| 134 |
|
|
// |
| 135 |
|
|
printf("\n Ready to start! \n\n"); |
| 136 |
|
|
// |
| 137 |
|
|
for ( re = evfrom; re <= evto; re++){ |
| 138 |
|
|
// |
| 139 |
|
|
l0registry->GetEntry(re); |
| 140 |
|
|
// |
| 141 |
|
|
// absolute time of this event |
| 142 |
|
|
// |
| 143 |
|
|
atime = l0reg->absTime; |
| 144 |
|
|
// |
| 145 |
|
|
// physics events is at entry number ei where |
| 146 |
|
|
// |
| 147 |
|
|
ei = l0reg->event; |
| 148 |
|
|
// |
| 149 |
|
|
|
| 150 |
|
|
|
| 151 |
|
|
|
| 152 |
|
|
// ####################################################################################################################### |
| 153 |
|
|
// |
| 154 |
|
|
// create (or clear if existing) a calorimeter level2 object |
| 155 |
|
|
// |
| 156 |
|
|
ca = new CaloLevel2(); |
| 157 |
|
|
// |
| 158 |
|
|
// check if the calibration we are using is still good, if not load another calibration |
| 159 |
|
|
// |
| 160 |
|
|
event->ChkCalib(dbc,atime); |
| 161 |
|
|
// |
| 162 |
|
|
// set this variable to one to be sure to process the event (usually I do not process the event if I don't have a track or a selftrigger event) |
| 163 |
|
|
//. =====> Notice: the event will NOT be processed if any CRC error in the calorimeter data has occured!! <===== |
| 164 |
|
|
// |
| 165 |
|
|
event->clevel1->good2 = 1; |
| 166 |
|
|
// |
| 167 |
|
|
// Calibrate calorimeter event with registry number "ei" and store output in the two structures that will be passed to fortran routine |
| 168 |
|
|
// |
| 169 |
|
|
event->Calibrate(ei); |
| 170 |
|
|
// |
| 171 |
|
|
// Calculate variables common to all tracks (qtot, nstrip, calorimeter fit parameters etc.) |
| 172 |
|
|
// |
| 173 |
|
|
event->GetCommonVar(); |
| 174 |
|
|
// |
| 175 |
|
|
// Fill common variables |
| 176 |
|
|
// |
| 177 |
|
|
event->FillCommonVar(ca); |
| 178 |
|
|
// |
| 179 |
|
|
// Clear structures used to communicate with fortran |
| 180 |
|
|
// |
| 181 |
|
|
event->ClearStructs(); |
| 182 |
|
|
// |
| 183 |
|
|
// ####################################################################################################################### |
| 184 |
|
|
// |
| 185 |
|
|
|
| 186 |
|
|
|
| 187 |
|
|
// |
| 188 |
|
|
// use the output to do something |
| 189 |
|
|
// |
| 190 |
|
|
printf(" ### Calorimeter tracking output: ### \n"); |
| 191 |
|
|
printf(" => event %i reg entry %i <= \n",re,ei); |
| 192 |
|
|
printf(" ax = %f \n",ca->impx); |
| 193 |
|
|
printf(" tanx = %f \n",ca->tanx); |
| 194 |
|
|
printf(" ay = %f \n",ca->impy); |
| 195 |
|
|
printf(" tany = %f \n",ca->tany); |
| 196 |
|
|
printf(" N. point fit x = %i \n",ca->npcfit[0]); |
| 197 |
|
|
printf(" N. point fit y = %i \n",ca->npcfit[1]); |
| 198 |
|
|
printf(" Variance fit x = %f \n",ca->varcfit[0]); |
| 199 |
|
|
printf(" Variance fit y = %f \n",ca->varcfit[1]); |
| 200 |
|
|
printf(" Energy assuming interacting electron [GeV]= %f \n",ca->elen); |
| 201 |
|
|
printf(" Error on energy [GeV]= %f \n",ca->selen); |
| 202 |
|
|
printf(" #################################### \n"); |
| 203 |
|
|
// |
| 204 |
|
|
}; |
| 205 |
|
|
|
| 206 |
|
|
|
| 207 |
|
|
|
| 208 |
|
|
// ####################################################################################################################### |
| 209 |
|
|
// |
| 210 |
|
|
// this is needed before processing another run! |
| 211 |
|
|
// |
| 212 |
|
|
event->RunClose(); |
| 213 |
|
|
// |
| 214 |
|
|
// ####################################################################################################################### |
| 215 |
|
|
|
| 216 |
|
|
|
| 217 |
|
|
|
| 218 |
|
|
// |
| 219 |
|
|
// end of the loop over the runs |
| 220 |
|
|
// |
| 221 |
|
|
|
| 222 |
|
|
} |