--- tof/flight/ToFReprocessing/ToFreproc.cpp 2009/02/05 09:12:35 1.2 +++ tof/flight/ToFReprocessing/ToFreproc.cpp 2012/04/12 12:04:20 1.6 @@ -44,7 +44,8 @@ extern "C" int toftrk(); ///extern "C" int toftrk(float); #define rdtofcal rdtofcal_ -extern "C" int rdtofcal(char [], int *); +//extern "C" int rdtofcal(char [], int *); +extern "C" int rdtofcal(const char *, int *); using namespace std; @@ -57,6 +58,7 @@ TString OUTF; TString LIST; TString OPTIONS; +TString CALIBF; PamLevel2 *pam_event = NULL; @@ -75,9 +77,9 @@ pam_event->SetSELLI(2); TTree::SetMaxTreeSize(1000*Long64_t(2000000000)); // - TString outfile_t =0; + TString outfile_t = ""; outfile_t = OUTF; - outfile_t.Append("b.root"); + outfile_t.Append(".root"); TFile *outft = (TFile*)gROOT->FindObject(outfile_t); if (outft) outft->Close(); outft = new TFile(outfile_t,"RECREATE"); @@ -89,6 +91,7 @@ // outft->cd(); ToFLevel2 *tof = new ToFLevel2(); + ToFdEdx *tofdedx = new ToFdEdx(); TTree *toft = new TTree("ToF","PAMELA Level2 ToF data"); toft->SetAutoSave(900000000000000LL); tof->Set();//ELENA **TEMPORANEO?** @@ -98,6 +101,10 @@ // Int_t ntrkentry = 0; Int_t npmtentry = 0; + Float_t xleft=0; + Float_t xright=0; + Float_t yleft=0; + Float_t yright=0; // ULong64_t nevents = pam_event->GetEntries(); printf("\n\n Running on %llu events \n\n",nevents); @@ -167,7 +174,58 @@ // printf(" rhtime %u myrun %i mysrun %i \n",pam_event->GetRunInfo()->RUNHEADER_TIME,(int)myrun,(int)mysrun); mysrun = myrun; // - Int_t error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table + + + + + Int_t error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,204,dbc); // parameters stored in DB in GL_PRAM table + if ( error<0 ) { + return(1); + }; + // + tofdedx->ReadParAtt((glparam->PATH+glparam->NAME).Data()); + printf(" Reading Attenuation file: %s \n",(glparam->PATH+glparam->NAME).Data()); + + // + error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,205,dbc); // parameters stored in DB in GL_PRAM table + if ( error<0 ) { + return(1); + }; + // + tofdedx->ReadParPos((glparam->PATH+glparam->NAME).Data()); + printf(" Reading desaturation1 file: %s \n",(glparam->PATH+glparam->NAME).Data()); + + // + error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,206,dbc); // parameters stored in DB in GL_PRAM table + if ( error<0 ) { + return(1); + }; + // + tofdedx->ReadParBBneg((glparam->PATH+glparam->NAME).Data()); + printf(" Reading BBneg file: %s \n",(glparam->PATH+glparam->NAME).Data()); + + // + error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,207,dbc); // parameters stored in DB in GL_PRAM table + if ( error<0 ) { + return(1); + }; + // + tofdedx->ReadParBBpos((glparam->PATH+glparam->NAME).Data()); + printf(" Reading BBpos file: %s \n",(glparam->PATH+glparam->NAME).Data()); + + // + error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,208,dbc); // parameters stored in DB in GL_PRAM table + if ( error<0 ) { + return(1); + }; + // + tofdedx->ReadParDesatBB((glparam->PATH+glparam->NAME).Data()); + printf(" Reading desaturation2 file: %s \n",(glparam->PATH+glparam->NAME).Data()); + + tofdedx->CheckConnectors(pam_event->GetRunInfo()->RUNHEADER_TIME,glparam,dbc); + + + error=glparam->Query_GL_PARAM(pam_event->GetRunInfo()->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table if ( error<0 ) { return(1); }; @@ -176,9 +234,15 @@ // if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false; // - Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length(); - rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen); + TString pippo=(glparam->PATH+glparam->NAME).Data(); + //Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length(); + //rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen); + Int_t nlen = (Int_t)pippo.Length(); + rdtofcal(pippo.Data(),&nlen); // + + tofdedx->Clear(); + }; // @@ -186,7 +250,9 @@ //================================================================ //================================================================== //--- Define absolute time - Float_t tabs=pam_event->GetOrbitalInfo()->absTime; + UInt_t tabs=pam_event->GetOrbitalInfo()->absTime; + + if ( !(iev%100000) ) printf(" ATIME %u re %u \n",(Int_t)tabs,(UInt_t)iev); //================================================================== Float_t dedx_corr_m[2000][48],dedx_corr[48]; @@ -205,13 +271,14 @@ //----------------------------------------------------------- jj=0; + printf(" READING NEW CALIBRATION FILE: %s \n",CALIBF.Data()); - ifstream fin("adcmonitor.7th.100k.cut.dat"); - + ifstream fin(CALIBF.Data()); + //cout << "topolino" << endl; while (! fin.eof()) { fin>>t1>>tm>>t2; - // cout<>j>>xmean1>>xwidth1; @@ -221,7 +288,7 @@ // printf(" kk %i \n",jj); } // printf(" 1ical %i \n",ical); - + //cout << "pippo" << endl; fin.close(); @@ -230,7 +297,7 @@ ical = ical+1; } // ical = ical-1; - cout<<"abs time "<GetPMTid(hh,gg); // printf(" pm %i pmt_id %i pppid %i hh %i gg %i tdcc %f tdc %f adc %f \n",pm,pmt->pmt_id,pppid,hh,gg,pmt->tdc_tw,pmt->tdc,pmt->adc); }; - - + for (Int_t hh=0; hh<12;hh++){ + for (Int_t kk=0; kk<4;kk++){ + tofdedx->Init(kk,hh,adc[kk][hh]); + }; + }; // for (Int_t pm=0; pm <48 ; pm++){ // tof->GetPMTIndex(pm, gg, hh); // tofinput_.tdc[hh][gg] = (int)500.; @@ -373,33 +447,129 @@ t_tof->beta[kk] = tofoutput_.betatof_a[kk]; } // - t_tof->npmtadc = 0; - for (Int_t hh=0; hh<12;hh++){ - for (Int_t kk=0; kk<4;kk++){ - if ( tofoutput_.adctof_c[hh][kk] < 1000 ){ - // t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc); // EMILIANO - pmt_id = tof->GetPMTid(kk,hh); - t_tof->dedx.AddAt((tofoutput_.adctof_c[hh][kk]*4./dedx_corr[pmt_id]),t_tof->npmtadc); // EMILIANO - t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); - t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07 - t_tof->npmtadc++; - }; - }; - }; - // memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos)); memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos)); memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof)); memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof)); - // - new(t[ntrkentry]) ToFTrkVar(*t_tof); - ntrkentry++; - t_tof->Clear(); - // - // - // - t_pmt->Clear(); - // + // { +// Float_t xtof_temp[6]={0.,t_tof->xtofpos[0],t_tof->xtofpos[1],0.,0.,t_tof->xtofpos[2]}; +// Float_t ytof_temp[6]={t_tof->ytofpos[0],0.,0.,t_tof->ytofpos[1],t_tof->ytofpos[2],0.}; +// tofdedx->Process(pam_event->GetOrbitalInfo()->absTime,t_tof->beta[12], (Float_t *)xtof_temp,(Float_t *)ytof_temp); +// } +// t_tof->npmtadc = 0; + + +// for (Int_t hh=0; hh<12;hh++){ +// for (Int_t kk=0; kk<4;kk++){ +// pmt_id = tof->GetPMTid(kk,hh); +// if ( tofdedx->GetdEdx_pmt(pmt_id)>-1. ){ +// t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)*36./pow(dedx_corr[pmt_id],2)),t_tof->npmtadc); +// t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); +// t_tof->adcflag.AddAt(0,t_tof->npmtadc); // gf: Jan 09/07 +// t_tof->npmtadc++; +// }; +// }; +// }; + { + + Float_t xtof_temp[6]={100.,100.,100.,100.,100.,100.}; + Float_t ytof_temp[6]={100.,100.,100.,100.,100.,100.}; + + if(t_tof->xtofpos[0]<100. && t_tof->ytofpos[0]<100.){ + xtof_temp[1]=t_tof->xtofpos[0]; + ytof_temp[0]=t_tof->ytofpos[0]; + }else if(t_tof->xtofpos[0]>=100. && t_tof->ytofpos[0]<100.){ + ytof_temp[0]=t_tof->ytofpos[0]; + tof->GetPaddleGeometry(0,(Int_t)log2(tof->tof_j_flag[0]),xleft, xright, yleft, yright); + xtof_temp[1]=xleft+2.55; + }else if(t_tof->ytofpos[0]>=100. && t_tof->xtofpos[0]<100.){ + xtof_temp[1]=t_tof->xtofpos[0]; + tof->GetPaddleGeometry(1,(Int_t)log2(tof->tof_j_flag[1]),xleft, xright, yleft, yright); + ytof_temp[0]=yleft+2.75; + } + + if(t_tof->xtofpos[1]<100. && t_tof->ytofpos[1]<100.){ + xtof_temp[2]=t_tof->xtofpos[1]; + ytof_temp[3]=t_tof->ytofpos[1]; + }else if(t_tof->xtofpos[1]>=100. && t_tof->ytofpos[1]<100.){ + ytof_temp[3]=t_tof->ytofpos[1]; + tof->GetPaddleGeometry(3,(Int_t)log2(tof->tof_j_flag[3]),xleft, xright, yleft, yright); + xtof_temp[2]=xleft+4.5; + }else if(t_tof->ytofpos[1]>=100. && t_tof->xtofpos[1]<100.){ + xtof_temp[2]=t_tof->xtofpos[1]; + tof->GetPaddleGeometry(2,(Int_t)log2(tof->tof_j_flag[2]),xleft, xright, yleft, yright); + ytof_temp[3]=yleft+3.75; + } + + if(t_tof->xtofpos[2]<100. && t_tof->ytofpos[2]<100.){ + xtof_temp[5]=t_tof->xtofpos[2]; + ytof_temp[4]=t_tof->ytofpos[2]; + }else if(t_tof->xtofpos[2]>=100. && t_tof->ytofpos[2]<100.){ + ytof_temp[4]=t_tof->ytofpos[2]; + tof->GetPaddleGeometry(4,(Int_t)log2(tof->tof_j_flag[4]),xleft, xright, yleft, yright); + xtof_temp[5]=xleft+3; + }else if(t_tof->ytofpos[2]>=100. && t_tof->xtofpos[2]<100.){ + xtof_temp[5]=t_tof->xtofpos[2]; + tof->GetPaddleGeometry(5,(Int_t)log2(tof->tof_j_flag[5]),xleft, xright, yleft, yright); + ytof_temp[4]=yleft+2.5; + } +// Float_t xtof_temp[6]={0.,t_tof->xtofpos[0],t_tof->xtofpos[1],0.,0.,t_tof->xtofpos[2]}; +// Float_t ytof_temp[6]={t_tof->ytofpos[0],0.,0.,t_tof->ytofpos[1],t_tof->ytofpos[2],0.}; +// tofdedx->Process(atime,t_tof->beta[12], (Float_t *)xtof_temp,(Float_t *)ytof_temp); + tofdedx->Process(pam_event->GetOrbitalInfo()->absTime,t_tof->beta[12], (Float_t *)xtof_temp,(Float_t *)ytof_temp); + t_tof->npmtadc = 0; + for (Int_t hh=0; hh<12;hh++){ + for (Int_t kk=0; kk<4;kk++){ + pmt_id = tof->GetPMTid(kk,hh); + Int_t Iplane=-1; + Int_t Ipaddle=-1; + // Int_t IpaddleT=-1; + tof->GetPMTPaddle(pmt_id, Iplane, Ipaddle); + tof->GetPaddleGeometry(Iplane,Ipaddle,xleft,xright,yleft,yright); + if ( tofdedx->GetdEdx_pmt(pmt_id)>-1. &&((xtof_temp[Iplane]>=xleft&&xtof_temp[Iplane]<=xright) || (ytof_temp[Iplane]>=yleft&&ytof_temp[Iplane]<=yright)) ){ //attenzione:qui va inserito un controllo sulla traccia tof o sulle variabili di posizione !!!! + //t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)*4./dedx_corr[pmt_id]),t_tof->npmtadc); + //t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)*dedx_corr[pmt_id]/4.),t_tof->npmtadc);//annullo wolfrizzazione + t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)),t_tof->npmtadc);//annullo wolfrizzazione + t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); + t_tof->adcflag.AddAt(0,t_tof->npmtadc); // gf: Jan 09/07 + t_tof->npmtadc++; + }; + }; + }; + }; + + + + + + + + + + + // for (Int_t hh=0; hh<12;hh++){ + // for (Int_t kk=0; kk<4;kk++){ + // if ( tofoutput_.adctof_c[hh][kk] < 1000 ){ + // // t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc); // EMILIANO + // pmt_id = tof->GetPMTid(kk,hh); + // t_tof->dedx.AddAt((tofoutput_.adctof_c[hh][kk]*4./dedx_corr[pmt_id]),t_tof->npmtadc); // EMILIANO + // t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); + // t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07 + // t_tof->npmtadc++; + // }; + // }; + // }; + // + + // + new(t[ntrkentry]) ToFTrkVar(*t_tof); + ntrkentry++; + t_tof->Clear(); + // + // + // + t_pmt->Clear(); + // for (Int_t hh=0; hh<12;hh++){ for (Int_t kk=0; kk<4;kk++){ // new WM @@ -436,6 +606,10 @@ for (Int_t e = 0; e < 5 ; e++){ tofinput_.al_pp[e] = ptt->al[e]; }; + + // new input for 9th reduction: tracker dEdx + tofinput_.trkmip = ptt->GetDEDX(); + // // Get tracker related variables for this track // @@ -459,24 +633,63 @@ t_tof->beta[kk] = tofoutput_.beta_a[kk]; }; // + memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos)); + memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos)); + memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof)); + memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof)); + // + tofdedx->Process(pam_event->GetOrbitalInfo()->absTime,t_tof->beta[12], (Float_t *)t_tof->xtr_tof,(Float_t *)t_tof->ytr_tof); t_tof->npmtadc = 0; + for (Int_t hh=0; hh<12;hh++){ for (Int_t kk=0; kk<4;kk++){ - if ( tofoutput_.adc_c[hh][kk] < 1000 ){ - // t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc); // EMILIANO - pmt_id = tof->GetPMTid(kk,hh); - t_tof->dedx.AddAt((tofoutput_.adc_c[hh][kk]*4./dedx_corr[pmt_id]),t_tof->npmtadc); // EMILIANO + pmt_id = tof->GetPMTid(kk,hh); + Int_t Iplane=-1; + Int_t Ipaddle=-1; + Int_t IpaddleT=-1; + tof->GetPMTPaddle(pmt_id, Iplane, Ipaddle); + IpaddleT=tof->GetPaddleIdOfTrack(t_tof->xtr_tof[Iplane],t_tof->ytr_tof[Iplane], Iplane,0.0); + if ( tofdedx->GetdEdx_pmt(pmt_id) > -1. && Ipaddle==IpaddleT ){ + //t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)*4./dedx_corr[pmt_id]),t_tof->npmtadc); + //t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)*dedx_corr[pmt_id]/4.),t_tof->npmtadc);//annullo wolfrizzazione + t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)),t_tof->npmtadc);//annullo wolfrizzazione t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); - t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07 + t_tof->adcflag.AddAt(0,t_tof->npmtadc); // gf: Jan 09/07 t_tof->npmtadc++; }; + }; }; + + +// for (Int_t hh=0; hh<12;hh++){ +// for (Int_t kk=0; kk<4;kk++){ +// pmt_id = tof->GetPMTid(kk,hh); +// if ( tofdedx->GetdEdx_pmt(pmt_id) > -1. ){ +// t_tof->dedx.AddAt((tofdedx->GetdEdx_pmt(pmt_id)*36./pow(dedx_corr[pmt_id],2)),t_tof->npmtadc); +// t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); +// t_tof->adcflag.AddAt(0,t_tof->npmtadc); // gf: Jan 09/07 +// printf(" nt %i npmtadc %i dedx %f dedx corr %f\n",nt,t_tof->npmtadc,(tofdedx->GetdEdx_pmt(pmt_id)*36./pow(dedx_corr[pmt_id],2)),dedx_corr[pmt_id]); +// t_tof->npmtadc++; +// }; + +// }; +// }; +// t_tof->npmtadc = 0; +// for (Int_t hh=0; hh<12;hh++){ +// for (Int_t kk=0; kk<4;kk++){ +// if ( tofoutput_.adc_c[hh][kk] < 1000 ){ +// // t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc); // EMILIANO +// pmt_id = tof->GetPMTid(kk,hh); +// t_tof->dedx.AddAt((tofoutput_.adc_c[hh][kk]*4./dedx_corr[pmt_id]),t_tof->npmtadc); // EMILIANO +// t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc); +// t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07 +// t_tof->npmtadc++; +// }; +// }; +// }; // - memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos)); - memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos)); - memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof)); - memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof)); + // // Store the tracker track number in order to be sure to have shyncronized data during analysis // @@ -538,6 +751,7 @@ cout << "-processDir DIR - Level2 data directory \n"; cout << "-processList LIST - list of files (.txt) or single file (.root) to be analysed \n"; cout << "-outputFile PATH - name of the output file \n"; + cout << "-calibFile PATH+NAME - name of the calibration file \n"; cout << "-NumEvents XXX - number of events to be analysed \n"; cout << "--debug, -g - debug mode \n"; cout << "--help, -h - print this help \n"; @@ -588,6 +802,14 @@ continue; } // -----------------------------------------------------// + // -----------------------------------------------------// + else if (!strcmp(argv[i], "-calibFile")){ + if (++i >= argc) throw -1; + CALIBF = gSystem->ExpandPathName(argv[i]); + cout << "calibFile "<= argc) throw -1; OPTIONS = argv[i];