#include <stdio.h>
#include <stdlib.h>
#include <Riostream.h>
+#include <signal.h>
// DATE
#include <event.h>
int main(int argc, char **argv) {
+ // needed for streamer application
gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
- "*",
- "TStreamerInfo",
- "RIO",
- "TStreamerInfo()");
+ "*",
+ "TStreamerInfo",
+ "RIO",
+ "TStreamerInfo()");
+ // needed for Minuit plugin
+ gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer",
+ "Minuit",
+ "TMinuitMinimizer",
+ "Minuit",
+ "TMinuitMinimizer(const char*)");
- TMinuitMinimizer m;
- gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer", "Minuit","TMinuitMinimizer",
- "Minuit", "TMinuitMinimizer(const char *)");
+ //TMinuitMinimizer m;
TVirtualFitter::SetDefaultFitter("Minuit");
- //const Char_t* tableSOD[] = {"ALL", "no", "SOD", "all", NULL, NULL};
- //monitorDeclareTable(const_cast<char**>(tableSOD));
-
char *monitor_table[] = { "ALL", "no", "PHY", "yes", "SOD", "all", NULL };
- err = monitorDeclareTable(monitor_table);
+ int err = monitorDeclareTable(monitor_table);
if(err){
printf("monitorDeclareTable() failed: %s\n", monitorDecodeError(err));
return -1;
}
int status=0, nphys=0;
- int const kNModules = 10;
+ int const kNModules = 9;
int const kNChannels = 24;
int const kNScChannels = 32;
- int const kZDCTDCGeo=4;
+ int const kZDCTDCGeo = 4;
int itdc=0, iprevtdc=-1, ihittdc=0;
float tdcData[6], tdcL0=-999.;
tdcMod[y]=tdcCh[y]=tdcSigCode[y]=tdcDet[y]=tdcSec[y]=-1;
}
- TH1F * hTDC[6];
- char ntdchist[20];
- for(Int_t it=0; it<6; it++){
- if(it==0) hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);
- else if(it==1) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);
- else if(it==2) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);
- else if(it==3) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);
- else if(it==4) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);
- else if(it==5) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",200, -200., 200.);
+ TH1F * hTDC[6]={0x0,0x0,0x0,0x0,0x0,0x0};
+ for(int it=0; it<6; it++){
+ if(it==0) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);
+ else if(it==1) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",200, -200., 200.);
+ else if(it==2) hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);
+ else if(it==3) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);
+ else if(it==4) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);
+ else if(it==5) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);
}
/* log start of process */
printf("\n ZDC MAPPING program started\n");
+ signal(SIGSEGV, SIG_DFL);
/* check that we got some arguments = list of files */
- if (argc<2) {
+ if(argc<2) {
printf("Wrong number of arguments\n");
return -1;
}
FILE *mapFile4Shuttle;
/* read the data files */
- int n;
- for(n=1;n<argc;n++){
+ for(int n=1;n<argc;n++){
status=monitorSetDataSource( argv[n] );
if (status!=0) {
/* loop on events (infinite) */
for(;;) {
-
+
+ if(nphys > 50000) break;
+
struct eventHeaderStruct *event;
eventTypeType eventT;
fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",
is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
//printf(" Mapping DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n",
- // is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
+ //is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
}
for(Int_t is=0; is<kNScChannels; is++){
fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",
is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
//if(scMod[is]!=-1) printf(" Mapping DA -> %d Scaler: mod %d ch %d, code %d det %d, sec %d\n",
- // is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
+ //is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
}
for(Int_t is=0; is<kNScChannels; is++){
fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\n",
is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
//if(tdcMod[is]!=-1) printf(" Mapping DA -> %d TDC: mod %d ch %d, code %d\n",
- // is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
+ //is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
}
for(Int_t is=0; is<kNModules; is++){
fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\n",
modGeo[is],modType[is],modNCh[is]);
//printf(" Mapping DA -> Module mapping: geo %d type %d #ch %d\n",
- // modGeo[is],modType[is],modNCh[is]);
+ //modGeo[is],modType[is],modNCh[is]);
}
//} //if (rawstream)
}// SOD event
else if(eventT==PHYSICS_EVENT){
+ for(int ij=0; ij<6; ij++) tdcData[ij]=-999.;
rawStreamZDC->SetSODReading(kTRUE);
// ----- Setting ch. mapping -----
- for(Int_t jk=0; jk<2*kNChannels; jk++){
+ for(int jk=0; jk<2*kNChannels; jk++){
rawStreamZDC->SetMapADCMod(jk, adcMod[jk]);
rawStreamZDC->SetMapADCCh(jk, adcCh[jk]);
rawStreamZDC->SetMapADCSig(jk, sigCode[jk]);
}
while(rawStreamZDC->Next()){
+ if(rawStreamZDC->GetADCModule()!=kZDCTDCGeo) continue; //skipping ADCs, scalers and trigger cards
+
if(rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){
//
itdc = rawStreamZDC->GetChannel();
- if((itdc>=8 && itdc<=13) || itdc==15){
- if(itdc==iprevtdc) ihittdc++;
- else ihittdc=0;
- iprevtdc=itdc;
- if(ihittdc<1) tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();
- //
- if(itdc==15 && ihittdc<1){
- tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();
- for(int ic=0; ic<6; ic++){
- if(tdcData[ic]!=-999. && tdcL0!=-999.) hTDC[ic]->Fill(tdcData[ic]-tdcL0);
- }
+ if(itdc==iprevtdc) ihittdc++;
+ else ihittdc=0;
+ iprevtdc=itdc;
+ //
+ if(((itdc>=8 && itdc<=13) || itdc==15) && ihittdc==0){
+ if(itdc!=15){
+ tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();
+ //
+ //printf(" ev.%d **** TDC%d %1.0f ns \n",nphys,itdc, tdcData[itdc-8]);
}
+ //
+ else if(itdc==15){
+ tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();
+ //
+ //printf(" ev.%d ++++ TDCL0 %1.0f ns \n",nphys,tdcL0);
+ //
+ for(int ic=0; ic<6; ic++){
+ if(tdcData[ic]!=-999. && tdcL0!=-999.){
+ hTDC[ic]->Fill(tdcData[ic]-tdcL0);
+ //printf(" ev.%d -> Filling histo%d: %f ns\n",nphys,ic, tdcData[ic]-tdcL0);
+ }
+ }
+ }
}
}
}
- nphys++;
-
+ nphys++;
+
+ delete rawStreamZDC;
+ rawStreamZDC = 0x0;
+ delete reader;
+
}//(if PHYSICS_EVENT)
else if(eventT==END_OF_RUN){
printf("End Of Run detected\n");
break;
}
- delete rawStreamZDC;
- rawStreamZDC = 0x0;
-
iev++;
/* free resources */
//
Float_t xUp=0., xLow=0., deltaX=0;
Int_t binMax=0, nBinsx=0;
- Float_t mean[6], sigma[6];
- TF1 *fitfun[6];
- for(Int_t k=0; k<6; k++){
+ Float_t mean[6]={0.,0.,0.,0.,0.,0.}, sigma[6]={0.,0.,0.,0.,0.,0.};
+ TF1 *fitfun[6]={0x0,0x0,0x0,0x0,0x0,0x0};
+ for(int k=0; k<6; k++){
if(hTDC[k]->GetEntries()!=0){
binMax = hTDC[k]->GetMaximumBin();
if(binMax<=1){
deltaX = xUp-xLow;
nBinsx = (hTDC[k]->GetXaxis())->GetNbins();
//printf(" xMax = %f\n", xLow+binMax*deltaX/nBinsx);
- hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.6,xLow+binMax*deltaX/nBinsx*1.24);
+ hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.75,xLow+binMax*deltaX/nBinsx*1.25);
fitfun[k] = hTDC[k]->GetFunction("gaus");
mean[k] = (Float_t) (fitfun[k]->GetParameter(1));
sigma[k] = (Float_t) (fitfun[k]->GetParameter(2));
- //printf("\t Mean value from fit = %1.2f\n", mean[k]);
+ //printf("\t Mean value from fit = %1.2f ns\n", mean[k]);
//
fprintf(fileShuttle,"\t%f\t%f\n",mean[k], sigma[k]);
}