321 cout <<
" *IceRoot Exec* No data input file(s) specified." << endl;
325 Int_t ninfiles=
fInfiles->GetEntries();
328 cout <<
" *IceRoot Exec* No data input file(s) specified." << endl;
334 cout <<
"*IceRoot* Warning: no calibration available for TWR. TWR waveforms cannot be processed." << endl;
341 otree=
new TTree(
"T",
"Simple Root data converted to IceEvent structures");
351 if (otree) otree->Branch(
"IceEvent",
"IceEvent",&evt,
fBsize,
fSplit);
358 cout <<
" ***" << endl;
359 cout <<
" *** Start processing of job " << GetName() <<
" ***" << endl;
360 cout <<
" ***" << endl;
361 for (Int_t i=0; i<ninfiles; i++)
363 TObjString* sx=(TObjString*)
fInfiles->At(i);
365 inputfile=sx->GetString();
366 cout <<
" Simple Root data input file : " << inputfile.Data() << endl;
368 cout <<
" Maximum number of events to be processed : " <<
fMaxevt << endl;
369 cout <<
" Print frequency : " <<
fPrintfreq << endl;
372 cout <<
" ROOT output file : " <<
fOutfile->GetName() << endl;
373 cout <<
" Output characteristics : splitlevel = " <<
fSplit <<
" buffersize = " <<
fBsize << endl;
380 daq.SetNameTitle(
"Daq",
"Daq system used");
384 trig.SetNameTitle(
"Trigger",
"Amanda/IceCube event triggers");
386 Char_t trigname[100];
390 mcinfo.SetNameTitle(
"MCInfo",
"The MC production info");
395 Double_t* trigtime=0;
396 Double_t* triglength=0;
397 Char_t trigsourceID[100][100];
398 Char_t trigtypeID[100][100];
399 Char_t trigsubtypeID[100][100];
400 Double_t* mcweightitemvalue=0;
401 Char_t mcweightitemname[100][100];
402 Int_t eventtimemjd=0;
403 Int_t eventtimemjds=0;
404 Int_t eventtimemjdns=0;
409 Short_t waveformtype=0;
410 Short_t twreventnr=0;
412 Int_t numberbinstwr=0;
414 UInt_t* twrwaveform=0;
415 Int_t numberbinswaveform=0;
416 Double_t starttimewaveform=0;
419 Double_t* waveform=0;
421 Double_t paraboloidsigmaA=999;
422 Double_t paraboloidsigmaI=999;
428 Double_t* trackzenith=0;
429 Double_t* trackazimuth=0;
430 Double_t* trackenergy=0;
431 Char_t tracktype[1000][100];
437 Double_t starttime=0;
439 Float_t twrtime=10240;
441 TPRegexp suffix(
"_[0-9]+$");
456 Float_t pi=acos(-1.);
460 Double_t* twreventtimes=0;
462 Int_t* twreventorder=0;
466 Float_t twri3offset=0;
468 for(Int_t row=1; row<=
fJEBTDaq->GetMaxRow(); row++){
472 twri3offset=calom->
GetSignal(
"TWRI3OFFSET");
478 for (Int_t ifile=0; ifile<ninfiles; ifile++)
480 TObjString* sx=(TObjString*)
fInfiles->At(ifile);
483 inputfile=sx->GetString();
484 if (inputfile==
"")
continue;
487 input=TFile::Open(inputfile);
491 cout <<
" *IceRoot Exec* No input file found with name : " << inputfile.Data() << endl;
496 fTree=(TTree*)input->Get(
"T");
498 fTree->SetBranchAddress(
"pretrig",&pretrig);
499 fTree->SetBranchAddress(
"trignr",&trignr);
500 fTree->SetBranchAddress(
"eventtimemjd",&eventtimemjd);
501 fTree->SetBranchAddress(
"eventtimemjds",&eventtimemjds);
502 fTree->SetBranchAddress(
"eventtimemjdns",&eventtimemjdns);
503 fTree->SetBranchAddress(
"eventid",&eventid);
504 fTree->SetBranchAddress(
"runid",&runid);
505 fTree->SetBranchAddress(
"String",&String);
506 fTree->SetBranchAddress(
"OM",&OM);
507 fTree->SetBranchAddress(
"waveformtype",&waveformtype);
508 fTree->SetBranchAddress(
"twreventnr",&twreventnr);
509 fTree->SetBranchAddress(
"baseline",&baseline);
510 fTree->SetBranchAddress(
"numberbinstwr",&numberbinstwr);
511 fTree->SetBranchAddress(
"startbin",&startbin);
512 fTree->SetBranchAddress(
"numberbinswaveform",&numberbinswaveform);
513 fTree->SetBranchAddress(
"starttimewaveform",&starttimewaveform);
514 if(
fTree->GetBranch(
"binwidth"))
fTree->SetBranchAddress(
"binwidth",&binwidth);
515 fTree->SetBranchAddress(
"source",&source);
516 fTree->SetBranchAddress(
"ntracks",&ntracks);
518 Int_t ntrig=(Int_t)
fTree->GetLeaf(
"trignr")->GetMaximum();
519 trigtime=
new Double_t[ntrig+1];
520 fTree->SetBranchAddress(
"trigtime",trigtime);
521 triglength=
new Double_t[ntrig+1];
522 fTree->SetBranchAddress(
"triglength",triglength);
523 fTree->SetBranchAddress(
"trigsourceID",trigsourceID);
524 fTree->SetBranchAddress(
"trigtypeID",trigtypeID);
525 fTree->SetBranchAddress(
"trigsubtypeID",trigsubtypeID);
527 Int_t nmcinfo=(Int_t)
fTree->GetLeaf(
"Nmcinfo")->GetMaximum();
528 mcweightitemvalue=
new Double_t[nmcinfo+1];
529 fTree->SetBranchAddress(
"mcweightitemvalue",mcweightitemvalue);
530 fTree->SetBranchAddress(
"mcweightitemname",mcweightitemname);
532 Int_t nmaxbinstwr=(Int_t)
fTree->GetLeaf(
"numberbinstwr")->GetMaximum();
533 twrwaveform=
new UInt_t[nmaxbinstwr+1];
534 fTree->SetBranchAddress(
"twrwaveform",twrwaveform);
536 Int_t nmaxbinswaveform=(Int_t)
fTree->GetLeaf(
"numberbinswaveform")->GetMaximum();
537 waveform=
new Double_t[nmaxbinswaveform+1];
538 fTree->SetBranchAddress(
"waveform",waveform);
540 fTree->SetBranchAddress(
"paraboloidsigmaA",¶boloidsigmaA);
541 fTree->SetBranchAddress(
"paraboloidsigmaI",¶boloidsigmaI);
542 fTree->SetBranchAddress(
"rloglA",&rloglA);
543 fTree->SetBranchAddress(
"rloglI",&rloglI);
545 Int_t nmaxtracks=(Int_t)
fTree->GetLeaf(
"ntracks")->GetMaximum();
546 trackx=
new Double_t[nmaxtracks];
547 tracky=
new Double_t[nmaxtracks];
548 trackz=
new Double_t[nmaxtracks];
549 trackzenith=
new Double_t[nmaxtracks];
550 trackazimuth=
new Double_t[nmaxtracks];
551 trackenergy=
new Double_t[nmaxtracks];
552 fTree->SetBranchAddress(
"trackx",trackx);
553 fTree->SetBranchAddress(
"tracky",tracky);
554 fTree->SetBranchAddress(
"trackz",trackz);
555 fTree->SetBranchAddress(
"trackzenith",trackzenith);
556 fTree->SetBranchAddress(
"trackazimuth",trackazimuth);
557 fTree->SetBranchAddress(
"trackenergy",trackenergy);
558 fTree->SetBranchAddress(
"tracktype",tracktype);
564 for(Int_t ientry=0; ientry<
fTree->GetEntries(); ientry++)
566 fTree->GetEntry(ientry);
568 if(eventid!=lastevent)
576 if(otree) otree->Fill();
591 evt->
SetMJD(eventtimemjd,eventtimemjds,eventtimemjdns,0);
595 if(evt->GetDate()/10000 >= 2007){
608 for (Int_t itrack=0; itrack<ntracks; itrack++)
612 TString tracktypestring(tracktype[itrack]);
614 if(tracktypestring.Index(
"MC")>=0 || tracktypestring.Index(
"nu_mu")>=0){
619 if(tracktypestring.Index(
"MC")<0 && tracktypestring.Index(
"nu_mu")<0){
621 t.
SetId(nrecotracks);
624 Int_t suffixpos=tracktypestring.Index(suffix);
626 tracktypestring.Remove(suffixpos,tracktypestring.Length()-suffixpos);
628 t.SetName(tracktypestring);
629 t.SetTitle(tracktypestring);
632 vec[0]=trackx[itrack];
633 vec[1]=tracky[itrack];
634 vec[2]=trackz[itrack];
639 vec[0]=trackenergy[itrack];
640 if(vec[0]==0 || vec[0]!=vec[0]) vec[0]=1;
641 vec[1]=pi-trackzenith[itrack];
642 vec[2]=trackazimuth[itrack]+pi;
643 if(vec[2]>=2*pi) vec[2]-=2*pi;
647 if(tracktypestring.Index(
"paraboloidA")>=0){
649 }
else if(tracktypestring.Index(
"paraboloidI")>=0){
652 if(tracktypestring.Index(
"gulliverA")>=0){
654 }
else if(tracktypestring.Index(
"gulliverI")>=0){
659 if(trackx[itrack]!=trackx[itrack] || tracky[itrack]!=tracky[itrack] || trackz[itrack]!=trackz[itrack] ||
660 trackzenith[itrack]!=trackzenith[itrack] || trackazimuth[itrack]!=trackazimuth[itrack]){
669 if (twreventtimes)
delete[] twreventtimes;
670 twreventtimes=
new Double_t[trignr];
671 if (twreventorder)
delete[] twreventorder;
672 twreventorder=
new Int_t[trignr];
676 for(Int_t itr=0; itr<trignr; itr++){
678 if(TString(trigsourceID[itr])==
"AMANDA_TWR_DAQ"){
680 if(!nmctracks) trigtime[itr]-=globalt0+twri3offset;
683 for(Int_t itwrevent=0; itwrevent<nrtwrevents; itwrevent++){
684 if(fabs(trigtime[itr]-twreventtimes[itwrevent])<1500){
691 twreventtimes[nrtwrevents]=trigtime[itr];
698 sprintf(trigname,
"%s/%s",trigsourceID[itr],trigtypeID[itr]);
707 TMath::Sort(nrtwrevents,twreventtimes,twreventorder,0);
726 for(Int_t imcinfo=0; imcinfo<nmcinfo; imcinfo++){
727 TString mcweightitemnamestring(mcweightitemname[imcinfo]);
729 mcinfo.
SetSignal(mcweightitemvalue[imcinfo], mcweightitemname[imcinfo]);
730 if(mcweightitemnamestring.Index(
"OneWeight")>=0) evt->
SetWeight(mcweightitemvalue[imcinfo]);
742 if(omid==681)
continue;
747 aom.SetUniqueID(omid);
754 else if(waveformtype==2) {
756 cout <<
"IceRoot::Exec: Non-merged ATWD waveforms not supported in this module." << endl;
760 else if(waveformtype==3 || waveformtype==4) {
767 idom.SetUniqueID(omid);
774 else if(waveformtype==5 || waveformtype==6) {
781 tdom.SetUniqueID(omid);
789 cout <<
"IceRoot::Exec: Unknown waveform type " << waveformtype << endl;
796 if(numberbinstwr>0 && twreventnr<nrtwrevents){
809 histo.SetName(hname.Data());
814 cout <<
"IceRoot: No calibration info for OM " << omid <<
", skipping this waveform" << endl;
819 cout <<
"IceRoot: Zero bin width for OM " << omid <<
", skipping this waveform" << endl;
822 twrbuffer=(Int_t)(twrtime/binwidth);
823 extstop=(Int_t)calom->
GetSignal(
"EXTSTOP");
824 starttime=twreventtimes[twreventorder[twreventnr]]+binwidth*(startbin-twrbuffer+extstop);
825 histo.SetBins(numberbinstwr,starttime,starttime+numberbinstwr*binwidth);
826 for (Int_t jbin=1; jbin<=numberbinstwr; jbin++)
828 histo.SetBinContent(jbin,(Float_t)baseline-(Float_t)twrwaveform[jbin-1]);
832 cout <<
"IceRoot::Exec: waveformtype=1, but numberbinstwr=0 or nrtwrevents=0." << endl;
837 else if(waveformtype==2){
839 cout <<
"IceRoot::Exec: Non-merged ATWD waveform found. You should never get to here anyway." << endl;
844 else if(waveformtype==3 || waveformtype==5){
845 if(numberbinswaveform>0){
852 histo.SetName(hname.Data());
853 starttime=starttimewaveform;
854 histo.SetBins(numberbinswaveform,starttime,starttime+numberbinswaveform*binwidth);
856 for (Int_t jbin=1; jbin<=numberbinswaveform; jbin++)
858 histo.SetBinContent(jbin,waveform[jbin-1]);
867 cout <<
"IceRoot::Exec: waveformtype=" << waveformtype <<
", but numberbinswaveform=0." << endl;
872 else if(waveformtype==4 || waveformtype==6){
873 if(numberbinswaveform>0){
880 histo.SetName(hname.Data());
881 starttime=starttimewaveform;
882 histo.SetBins(numberbinswaveform,starttime,starttime+numberbinswaveform*binwidth);
883 for (Int_t jbin=1; jbin<=numberbinswaveform; jbin++)
885 histo.SetBinContent(jbin,waveform[jbin-1]);
889 cout <<
"IceRoot::Exec: waveformtype=" << waveformtype <<
", but numberbinswaveform=0." << endl;
895 cout <<
"IceRoot::Exec: Unknown waveform type " << waveformtype << endl;
906 if (otree) otree->Fill();
919 if (trigtime)
delete[] trigtime;
920 if (triglength)
delete[] triglength;
921 if (mcweightitemvalue)
delete[] mcweightitemvalue;
922 if (twrwaveform)
delete[] twrwaveform;
923 if (waveform)
delete[] waveform;
924 if (trackx)
delete[] trackx;
925 if (tracky)
delete[] tracky;
926 if (trackz)
delete[] trackz;
927 if (trackzenith)
delete[] trackzenith;
928 if (trackazimuth)
delete[] trackazimuth;
929 if (trackenergy)
delete[] trackenergy;
932 delete[] twreventtimes;
937 delete[] twreventorder;