//void MakeBigRIPSTree(char *outfile="bigrips.root"){
void MakeBigRIPSTree(char *infile, char *outfile="bigrips.root"){

  //signal(SIGINT,stop_interrupt); // CTRL + C , interrupt

  gSystem->Load("libXMLParser.so");
  gSystem->Load("libanaroot.so");

  TArtStoreManager * sman = TArtStoreManager::Instance();
  TArtEventStore *estore = new TArtEventStore();
  estore->SetInterrupt(&stoploop);
  estore->Open(infile);
  //estore->Open(1);

  TArtBigRIPSParameters *para = TArtBigRIPSParameters::Instance();
  para->LoadParameter("db/BigRIPSPPAC.xml");
  para->LoadParameter("db/BigRIPSPlastic.xml");
  para->LoadParameter("db/BigRIPSIC.xml");
  para->LoadParameter("db/FocalPlane.xml");
  TArtCalibPID *brcalib= new TArtCalibPID();
  TArtCalibTSRef *tsrefcalib= new TArtCalibTSRef();

  TFile *fout = new TFile(outfile,"RECREATE");
  TTree *tree = new TTree("tree","tree");

  // define data nodes which are supposed to be dumped to tree 
  TClonesArray * info_array = 
    (TClonesArray *)sman->FindDataContainer("EventInfo");
  tree->Branch(info_array->GetName(),&info_array);
  TClonesArray * ppac_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSPPAC");
  tree->Branch(ppac_array->GetName(),&ppac_array);
  TClonesArray * pla_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSPlastic");
  tree->Branch(pla_array->GetName(),&pla_array);
  TClonesArray * ic_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSIC");
  tree->Branch(ic_array->GetName(),&ic_array);
  TClonesArray * fpl_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSFocalPlane");
  tree->Branch(fpl_array->GetName(),&fpl_array);

  int neve = 0;
  while(estore->GetNextEvent()){
    if(neve%1000==0)
      cout << "event: " << neve << endl;

    tsrefcalib->LoadData();
    brcalib->ClearData();
    brcalib->ReconstructData();

    tree->Fill();
    neve ++;
  }

  fout->Write();
  fout->Close();


}
void CheckBLDet(char * ridffile="test.ridf") {

    gSystem->Load("libanacore.so");

    bool deton[12][numdet];
    for(int i=0; i<12; i++) for(int j=0; j<numdet; j++) deton[i][j] = false;

    TArtEventStore *estore = new TArtEventStore();
    TArtRawEventObject *rawevent = new TArtRawEventObject();

    TFile *fout = new TFile("dataid.root","RECREATE");
    TNtuple *ntp = new TNtuple("ntp","ntp","sys:cat:det:dtype:val");
    estore->Initialize(rawevent);
    estore->Open(ridffile);
    //  estore->LoadMapConfig("conf/mapper.conf");

    int neve = 0;
    while(estore->GetNextEvent() && neve<100) {

        int eve_number=rawevent->GetEventNumber();
        long long int t_stamp=rawevent->GetTimeStamp();
        cout <<"event:"<<neve <<" ev#:"<<eve_number
             <<" timestamp:" <<t_stamp <<endl;

        for(int i=0; i<rawevent->GetNumSeg(); i++) {
            TArtRawSegmentObject *seg = rawevent->GetSegment(i);
            int device = seg->GetDevice();
            int fp = seg->GetFP();
            int detector = seg->GetDetector();
            int module = seg->GetModule();
            if(fp<12&&detector<numdet) {
                deton[fp][detector] = true;

                cout << "    seg:"<< i <<" dev:"<< device <<
                     " fp:"<<fp<< " det:"<<detector<< " " << detname[detector] << " mod:"<<module
                     << " #data=" << seg->GetNumData() << endl;
            }
            else {
                cout << "    seg:"<< i <<" dev:"<< device <<
                     " fp:"<<fp<< " det:"<<detector<< " mod:"<<module
                     << " #data=" << seg->GetNumData() << endl;
            }
        }

        rawevent->Clear();
        neve ++;
    }
    fout->Write();
    fout->Close();

    for(int i=0; i<12; i++) {
        cout << "fpl " << i << ": ";
        for(int j=0; j<numdet; j++)if(deton[i][j])
                cout << detname[j] << " ";
        cout << endl;
    }
}
void CheckDALIDet(char * ridffile="test.ridf"){

  gSystem->Load("libanacore.so");

  TArtEventStore *estore = new TArtEventStore();
  estore->Open(ridffile);
  TArtRawEventObject *rawevent = estore->GetRawEventObject();

  TFile *fout = new TFile("dataid.root","RECREATE");
  TNtuple *ntp = new TNtuple("ntp","ntp","geo:ch:val");

  int neve = 0;
  while(estore->GetNextEvent() && neve<100){

    int eve_number=rawevent->GetEventNumber();
    for(int i=0;i<rawevent->GetNumSeg();i++){
      TArtRawSegmentObject *seg = rawevent->GetSegment(i);
      int device = seg->GetDevice();
      int fp = seg->GetFP();
      int detector = seg->GetDetector();
      int module = seg->GetModule();
      if(DALI==device&&DALIA==detector){
	cout << "    seg:"<< i <<" dev:"<< device 
	     << " fp:"<<fp<< " det:"<<detector<< " mod:"<<module
	     << " #data=" << seg->GetNumData() << endl;
	for(int j=0;j<seg->GetNumData();j++){
	  TArtRawDataObject *d = seg->GetData(j);
	  int geo = d->GetGeo();
	  int ch = d->GetCh();
	  unsigned int val = d->GetVal();
	  cout << "       geo:" << geo 
	       << " ch:" << ch << " val:" << val << endl;
	  ntp->Fill((float)geo,(float)ch,(float)val);
	}
      }
    }

    rawevent->Clear();
    neve ++;
  }
  fout->Write();
  fout->Close();

}
void RIDF2DataId(){

  gSystem->Load("libanacore.so");

  TArtEventStore *estore = new TArtEventStore();
  estore->Open("test.ridf");
  TArtRawEventObject *rawevent = estore->GetRawEventObject();

  TFile *fout = new TFile("dataid.root","RECREATE");
  TNtuple *ntp = new TNtuple("ntp","ntp","sys:cat:det:dtype:val");

  int neve = 0;
  while(estore->GetNextEvent() && neve < 10000){

    for(int i=0;i<rawevent->GetNumSeg();i++){
      TArtRawSegmentObject *seg = rawevent->GetSegment(i);
      int device = seg->GetDevice();
      int fp = seg->GetFP();
      int detector = seg->GetDetector();
      int module = seg->GetModule();

      for(int j=0;j<seg->GetNumData();j++){
	TArtRawDataObject *d = seg->GetData(j);
	int geo = d->GetGeo(); 
	int ch = d->GetCh();
	int val = d->GetVal(); 
	int cat = d->GetCategoryID(); 
	int det = d->GetDetectorID(); 
	int id = d->GetDatatypeID(); 

	ntp->Fill((float)detector,(float)cat,(float)det,(float)id,(float)val);
      }
    }

    estore->ClearData();
    neve ++;
  }

  fout->Write();
  fout->Close();

}
void RecoTrack_wSks(char *ridffile="./ridf/sm_com/sdaq02/run0208.ridf", Int_t nevent=100000000000){
//void RecoTrack_wSks(char *ridffile="./ridf/sm_com/sdaq02/run0208.ridf", Int_t nevent=100){

  TArtStoreManager * sman = TArtStoreManager::Instance();
  TArtEventStore *estore = new TArtEventStore;
  estore->Open(ridffile);

  TArtBigRIPSParameters * bripsparameters = TArtBigRIPSParameters::Instance();
  bripsparameters->LoadParameter((char*)"db/BigRIPSPlastic.xml");

  TArtSAMURAIParameters * samuraiparameters = TArtSAMURAIParameters::Instance();
  samuraiparameters->LoadParameter((char*)"db/SAMURAIFDC1.xml");
  samuraiparameters->LoadParameter((char*)"db/SAMURAIFDC2.xml");

  TArtCalibPlastic * calpla     = new TArtCalibPlastic;
  TArtCalibSAMURAI * calsamurai = new TArtCalibSAMURAI;

  TArtRecoFragment *reco = new TArtRecoFragment();
  TClonesArray *fdc1trks = (TClonesArray*)sman->FindDataContainer("SAMURAIFDC1Track");
  TClonesArray *fdc2trks = (TClonesArray*)sman->FindDataContainer("SAMURAIFDC2Track");
  TClonesArray *frags = (TClonesArray*)sman->FindDataContainer("SAMURAIFragment");

  calsamurai->LoadDCTDCDistribution((char*)"db/dc/run0203.root"); // for 3T Brho scan analysis

  Double_t fdc1chi2, fdc2chi2;
  Double_t delta, brho, trchi2, trpos[3], trl2hod;
  Double_t f3plat, f3plaq;
  Double_t f13plat, f13plaq;
  Int_t trstatus, trnhit;

  TFile *fout = new TFile("fout.root","RECREATE");
  TTree *otree = new TTree("otree","otree");
  otree->Branch("f3plaq",&f3plaq,"f3plaq/D");
  otree->Branch("f3plat",&f3plat,"f3plat/D");
  otree->Branch("f13plaq",&f13plaq,"f13plaq/D");
  otree->Branch("f13plat",&f13plat,"f13plat/D");
  otree->Branch("tr1chi2",&fdc1chi2,"tr1chi1/D");
  otree->Branch("tr2chi2",&fdc2chi2,"tr2chi1/D");
  otree->Branch("delta",&delta,"delta/D");

  otree->Branch("trstatus",&trstatus,"trstatus/I");
  otree->Branch("brho",&brho,"brho/D");
  otree->Branch("trchi2",&trchi2,"trchi2/D");
  otree->Branch("trnhit",&trnhit,"trnhit/I");
  otree->Branch("trpos",trpos,"trpos[3]/D");
  otree->Branch("trl2hod",&trl2hod,"trl2hod/D");

  int neve = 0;
  while(estore->GetNextEvent()&&neve < nevent){

    if(neve%1000==0) cout << "event: " << neve << endl;

    //    if(neve<33410) {neve ++; continue;} if(neve%100==0) cout << "event: " << neve << endl;

    calpla->ClearData();
    calsamurai->ClearData();
    reco->ClearData();

    calpla->ReconstructData();
    calsamurai->ReconstructData();
    reco->ReconstructData();

    f3plat = -9999; f3plaq = -9999;
    f13plat = -9999; f13plaq = -9999;
    fdc1chi2 = -9999; fdc2chi2 = -9999;
    delta = -9999; 
    brho = -9999;
    trchi2 = -9999;
    for(int i=0;i<3;i++) trpos[i] = -9999;
    trl2hod = -9999;
    trstatus = 0;
    trnhit = -1;

    TArtPlastic *pla = calpla->FindPlastic((char*)"F3pl");
    if(pla){
      if(pla->GetTLRaw() > 0 && pla->GetTRRaw() > 0)
	f3plat = ((Double_t)pla->GetTLRaw() + (Double_t)pla->GetTRRaw())/2;
      if(pla->GetQLRaw() > 0 && pla->GetQRRaw() > 0)
	f3plaq = pla->GetQAveRaw();
    }
    else{
      cout << "cannot find f3pla object!!" << endl;
    }

    pla = calpla->FindPlastic((char*)"F13pl-1");
    if(pla){
      if(pla->GetTLRaw() > 0 && pla->GetTRRaw() > 0)
	f13plat = ((Double_t)pla->GetTLRaw() + (Double_t)pla->GetTRRaw())/2;
      if(pla->GetQLRaw() > 0 && pla->GetQRRaw() > 0)
	f13plaq = pla->GetQAveRaw();
    }
    else{
      cout << "cannot find f13pla-1 object!!" << endl;
    }

    int nfdc1trks = fdc1trks->GetEntries();
    int nfdc2trks = fdc2trks->GetEntries();
    int nfrags = frags->GetEntries();

    cout << "num of fdc1trks in event: " << nfdc1trks << endl;
    for(int i=0;i<nfdc1trks&&i<1;i++){
      TArtDCTrack *trk = (TArtDCTrack*)fdc1trks->At(i);
      int nhit = trk->GetNumHitLayer();
      int ndf  = trk->GetNDF();
      fdc1chi2 = trk->GetChi2()/(double)ndf;
      /*
      cout << "fdc1tr " << i << endl;
      cout << "chi2/ndf: " << fdc1chi2 << endl;
      cout << "    nhit: " << nhit << endl;
      for(int j=0;j<nhit;j++){
	cout << "       hitx[" << j << "]= " << trk->GetHitXPosition(j);
	cout << "       hitz[" << j << "]= " << trk->GetHitZPosition(j);
	cout << "    planeid[" << j << "]= " << trk->GetHitPlaneID(j) << endl; 
      }
      */
    }

    cout << "num of fdc2trks in event: " << nfdc2trks << endl;
    for(int i=0;i<nfdc2trks&&i<1;i++){
      TArtDCTrack *trk = (TArtDCTrack*)fdc2trks->At(i);
      int nhit = trk->GetNumHitLayer();
      int ndf  = trk->GetNDF();
      fdc2chi2 = trk->GetChi2()/(double)ndf;;
      /*
      cout << "fdc2tr " << i << endl;
      cout << "  chi2: " << fdc2chi2 << endl;
      cout << "  nhit: " << nhit << endl;
      for(int j=0;j<nhit;j++){
	cout << "       hitx[" << j << "]= " << trk->GetHitXPosition(j);
	cout << "       hitz[" << j << "]= " << trk->GetHitZPosition(j);
	cout << "    planeid[" << j << "]= " << trk->GetHitPlaneID(j) << endl; 
      }
      */
    }

    cout << "num of frags in event: " << nfrags << endl;

    for(int i=0;i<nfrags&&i<1;i++){
      TArtFragment *f= (TArtFragment*)frags->At(i);
      delta = f->GetDelta();
      brho = f->GetBrho();
      trchi2 = f->GetChi2();
      trpos[0] = f->GetPrimaryPosition().X();
      trpos[1] = f->GetPrimaryPosition().Y();
      trpos[2] = f->GetPrimaryPosition().Z();
      trl2hod = f->GetPathLengthToHOD();
      trstatus = f->GetRKtraceStatus() ? 1 : 0;
      trnhit = f->GetNHit();

      cout << "Ana Delta:" << delta << endl;
      cout << "Ana  Brho:" << brho << endl;
    }

    otree->Fill();
    neve ++;


    cout << endl;
    cout << endl;
    cout << endl;

  }

  fout->Write();
  fout->Close();

}
//void MakeFullBigRIPSTree(char *outfile="bigrips.root"){
void MakeFullBigRIPSTree(char *infile, char *outfile="bigrips.root"){

  //  signal(SIGINT,stop_interrupt); // CTRL + C , interrupt

  gSystem->Load("libXMLParser.so");
  gSystem->Load("libanaroot.so");

  TArtStoreManager * sman = TArtStoreManager::Instance();
  TArtEventStore *estore = new TArtEventStore();
  estore->SetInterrupt(&stoploop);
  estore->Open(infile);
  //  estore->Open(2); // bigrips online

  TArtBigRIPSParameters *para = TArtBigRIPSParameters::Instance();
  para->LoadParameter("db/BigRIPSPPAC.xml");
  para->LoadParameter("db/BigRIPSPlastic.xml");
  para->LoadParameter("db/BigRIPSIC.xml");
  para->LoadParameter("db/FocalPlane.xml");
  TArtCalibPID *brcalib = new TArtCalibPID();
  TArtCalibCoin *calcoin= new TArtCalibCoin();
  TArtRecoPID  *brreco = new TArtRecoPID();

  // setting up rips parameters
  TArtRIPS * rips3to5 = brreco->DefineNewRIPS(3,5,"matrix/mat1.mat",7.5715); // f3 - f5
  TArtRIPS * rips5to7 = brreco->DefineNewRIPS(5,7,"matrix/mat2.mat",7.0675); // f5 - f7

  // setting up tof
  TArtTOF * tof3to7  = brreco->DefineNewTOF("F3pl","F7pl",242.513,5);

  // setting up beam id devices
  //  TArtBeam *beam35 = brreco->DefineNewBeam(rips3to5,tof3to7,"F7IC");
  //  TArtBeam *beam57 = brreco->DefineNewBeam(rips5to7,tof3to7,"F7IC");
  //  TArtBeam *beam35ic11 = brreco->DefineNewBeam(rips3to5,tof3to7,"F11IC");
  //TArtBeam *beam57ic11 = brreco->DefineNewBeam(rips5to7,tof3to7,"F11IC");
  TArtBeam *beam37ic7 = brreco->DefineNewBeam(rips3to5,rips5to7,tof3to7,"F11IC");
  //  TArtBeam *beam37ic11 = brreco->DefineNewBeam(rips3to5,rips5to7,tof3to7,"F11IC");

  TFile *fout = new TFile(outfile,"RECREATE");
  TTree *tree = new TTree("tree","tree");

  Int_t maxbit;
  tree->Branch("maxbit",&maxbit,"maxbit/I");
  // define data nodes which are supposed to be dumped to tree 
  TClonesArray * info_array = 
    (TClonesArray *)sman->FindDataContainer("EventInfo");
  tree->Branch(info_array->GetName(),&info_array);
  TClonesArray * ppac_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSPPAC");
  tree->Branch(ppac_array->GetName(),&ppac_array);
  TClonesArray * pla_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSPlastic");
  tree->Branch(pla_array->GetName(),&pla_array);
  TClonesArray * ic_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSIC");
  tree->Branch(ic_array->GetName(),&ic_array);
  TClonesArray * fpl_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSFocalPlane");
  tree->Branch(fpl_array->GetName(),&fpl_array);
  TClonesArray * tof_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSTOF");
  tree->Branch(tof_array->GetName(),&tof_array);
  TClonesArray * rips_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSRIPS");
  tree->Branch(rips_array->GetName(),&rips_array);
  TClonesArray * beam_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSBeam");
  tree->Branch(beam_array->GetName(),&beam_array);

  TArtBeam *beam = (TArtBeam*)beam_array->At(0);

  int neve = 0;
  while(estore->GetNextEvent()){
    maxbit = 0;
    if(neve%1000==0)
      cout << "event: " << neve << endl;

    calcoin->ClearData();
    calcoin->LoadData();
    brcalib->ClearData();
    brcalib->ReconstructData();
    brreco->ClearData();
    brreco->ReconstructData();

    //    beam->SetAoQ(beam->GetAoQ()-0.042);

    Int_t tbit = ((TArtEventInfo*)info_array->At(0))->GetTriggerBit();
    for(int i=1;;i++){
      if(tbit%2 == 1)
	maxbit = i;
      else break;

      tbit = tbit/2;
    }
    tree->Fill();

    neve ++;
  }

  fout->Write();
  fout->Close();


}
Beispiel #7
0
// void MakeAllTree(char *infile, char *outfile="run0025.root"){
int main(int argc, char** argv){

  if(argc!=2){
    cout << "Usage: ./maketree <run_number>" << endl;
    exit(-1);
  }

  //  signal(SIGINT,stop_interrupt); // CTRL + C , interrupt

  // ========= Define input and output files
  Int_t RunNumber = std::atoi(argv[argc-1]);
  cout << endl << "---> Start analyzing Run# = " << RunNumber << endl;
  char* inputfilename  = (char*)Form("./ridf/72Fe/psp14%04d.ridf",RunNumber);
  char* outputfilename = (char*)Form("./rootfiles/yama_run%04d.root",RunNumber);

  // Create StoreManager both for calibration "TArtCalib..." and treatment "TArtReco..."
  //------------------------------------------------------------------------------------
  TArtStoreManager * sman = TArtStoreManager::Instance();
  
  // Create EventStore to control the loop and get the EventInfo
  //------------------------------------------------------------
/*
  TArtEventStore *estore = new TArtEventStore();
  estore->SetInterrupt(&stoploop); 
  estore->Open(infile);
  std::cout<<"estore ->"<< infile <<std::endl;
*/

  cout << "---> Open file name = " << inputfilename << endl << endl;
  TArtEventStore *estore = new TArtEventStore();
  estore->SetInterrupt(&stoploop); 
  int es = estore->Open(inputfilename);
  if(es==0){
    cout << endl << " === No data file === " << endl << endl;
    exit(-1);
  }
  cout << endl << endl;

  // Create BigRIPSParameters to get Plastics, PPACs, ICs and FocalPlanes parameters from ".xml" files
  //--------------------------------------------------------------------------------------------------	
  TArtBigRIPSParameters *para = TArtBigRIPSParameters::Instance();
  para->LoadParameter("db/BigRIPSPPAC.xml");
  para->LoadParameter("db/BigRIPSPlastic.xml");
  para->LoadParameter("db/BigRIPSIC.xml");
  para->LoadParameter("db/FocalPlane.xml");
  para->SetFocusPosOffset(8,138.5);

  // Create CalibPID to get and calibrate raw data ( CalibPID -> 
  //[CalibPPAC , CalibIC, CalibPlastic , CalibFocalPlane] 
  TArtCalibPID *brcalib     = new TArtCalibPID();
  TArtCalibPPAC *ppaccalib  = brcalib->GetCalibPPAC();
  TArtCalibPlastic *plasticcalib = brcalib->GetCalibPlastic();

  // Create RecoPID to get calibrated data and to reconstruct TOF, AoQ, Z, ... (RecoPID -> 
  //[ RecoTOF , RecoRIPS , RecoBeam] )
  TArtRecoPID *recopid = new TArtRecoPID();

  //para->PrintListOfPPACPara();
  //return;

  // Definition of observables we want to reconstruct
  std::cout << "Defining bigrips parameters" << std::endl;  
  //TArtRIPS *rips3to5 = recopid->DefineNewRIPS(3,5,"matrix/mat1.mat",5.45); // F3 - F5
  //TArtRIPS *rips5to7 = recopid->DefineNewRIPS(5,7,"matrix/mat2.mat",4.665); // F5 - F7
  //TArtRIPS *rips8to9 = recopid->DefineNewRIPS(8,9,"matrix/F8F9_LargeAccAchr.mat",3.831); // F8 - F9
  //TArtRIPS *rips9to11 = recopid->DefineNewRIPS(9,11,"matrix/F9F11_LargeAccAchr.mat",3.805); // F9 - F11  
  TArtRIPS *rips3to5 =  recopid->DefineNewRIPS(3, 5,"matrix/mat1.mat","D3"); // F3 - F5  
  TArtRIPS *rips5to7 =  recopid->DefineNewRIPS(5, 7,"matrix/mat2.mat","D5"); // F5 - F7
  TArtRIPS *rips8to9 =  recopid->DefineNewRIPS(8, 9,"matrix/F8F9_LargeAccAchr.mat","D7"); // F8 - F9
  TArtRIPS *rips9to11 = recopid->DefineNewRIPS(9,11,"matrix/F9F11_LargeAccAchr.mat","D8"); // F9 - F11 

/*
  TArtRIPS *rips3to5 = recopid->DefineNewRIPS(3,5,"matrix/mat1.mat",6.303); // F3 - F5
  TArtRIPS *rips5to7 = recopid->DefineNewRIPS(5,7,"matrix/mat2.mat",5.788); // F5 - F7
  TArtRIPS *rips8to9 = recopid->DefineNewRIPS(8,9,"matrix/F8F9_LargeAccAchr.mat",4.609); // F8 - F9
  TArtRIPS *rips9to11 = recopid->DefineNewRIPS(9,11,"matrix/F9F11_LargeAccAchr.mat",4.566); // F9 - F11  
*/
  // Reconstruction of TOF DefineNewTOF(fisrt plane, second plane, time offset)
  TArtTOF *tof3to7  = recopid->DefineNewTOF("F3pl","F7pl",302,5); // F3 - F7
  //TArtTOF *tof8to11 = recopid->DefineNewTOF("F8pl","F11pl-1",-160.5,9); // F8 - F11
  TArtTOF *tof8to11 = recopid->DefineNewTOF("F8pl","F11pl-1",-749.2,9); // F8 - F11
  // Reconstruction of IC observables for ID
  TArtBeam *beam_br_35 = recopid->DefineNewBeam(rips3to5,rips5to7,tof3to7,"F7IC");
  TArtBeam *beam_br_57 = recopid->DefineNewBeam(rips5to7,tof3to7,"F7IC");   
  TArtBeam *beam_zd_89 = recopid->DefineNewBeam(rips8to9,tof8to11,"F11IC");
  TArtBeam *beam_zd_911 = recopid->DefineNewBeam(rips9to11,tof8to11,"F11IC");

  //to get trigger pattern
  //TArtEventInfo *evtinfo=new TArtEventInfo();

  // Create DALIParameters to get ".xml"
  //------------------------------------

  TArtDALIParameters *dpara = TArtDALIParameters::Instance();
  dpara->LoadParameter("db/DALI.xml");
  
  // Create CalibDALI to get and calibrate raw data
  //-----------------------------------------------
  TArtCalibDALI *dalicalib = new TArtCalibDALI();
  //TArtCalibDALI *dalicalib2 = new TArtCalibDALI();

  // Create MINOSParameters to get ".xml"
  //------------------------------------

  TArtMINOSParameters *mpara = new TArtMINOSParameters("MINOSParameters","MINOSParameters");
  mpara->LoadParameters("./db/MINOS.xml");

  // Parameters for the MINOS ANALYSIS
  string ConfigBeam;
  double MINOSthresh;
  double TimeBinElec; //in ns
  double VDrift; //in cm/µs
  double Tshaping; // in ns
  double DelayTrig; // in ns
  double DALIOffset;

  ifstream ConfigFile;
  ConfigFile.open("./../ConfigFileSetup.txt");
  string Header;
  ConfigFile >> ConfigBeam;
  ConfigFile >> Header >> MINOSthresh;
  ConfigFile >> Header >> TimeBinElec;
  ConfigFile >> Header >> VDrift;
  ConfigFile >> Header >> Tshaping;
  ConfigFile >> Header >> DelayTrig;
  ConfigFile >> Header >> DALIOffset;
  ConfigFile.close();

  
  // Create CalibMINOS to get and calibrate raw data
  //-----------------------------------------------
  TArtCalibMINOS *minoscalib = new TArtCalibMINOS();
  TArtAnalyzedMINOS *minosanalyzed = new TArtAnalyzedMINOS(minoscalib);
  TArtTrackMINOS *minostrack = new TArtTrackMINOS();
  TArtVertexMINOS *minosvertex = new TArtVertexMINOS();

  std::cout<<"para"<<std::endl;

/*
  TFile *fout = new TFile(outfile,"RECREATE");
  TTree *tree = new TTree("tree","tree");
*/

  cout << endl << "---> Output file name = " << outputfilename << endl << endl;
  TFile *fout = new TFile(outputfilename,"RECREATE");
  TTree *tree = new TTree("tree","tree");

  // define data nodes which are supposed to be dumped to tree 
  //EventInfo is importand for the fBit information to know the trigger!
  TClonesArray * info_array = (TClonesArray *)sman->FindDataContainer("EventInfo");
  std::cout<<info_array->GetName()<<std::endl;
  tree->Branch(info_array->GetName(),&info_array);
  
  TClonesArray * ppac_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSPPAC");
  std::cout<<ppac_array->GetName()<<std::endl;
  tree->Branch(ppac_array->GetName(),&ppac_array);
  
  TClonesArray * pla_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSPlastic");
  tree->Branch(pla_array->GetName(),&pla_array);
 
  TClonesArray * ic_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSIC");
  tree->Branch(ic_array->GetName(),&ic_array);
  
  TClonesArray * fpl_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSFocalPlane");
  tree->Branch(fpl_array->GetName(),&fpl_array);
  
  //Dali data
  TClonesArray * dali_array=
   (TClonesArray *)sman->FindDataContainer("DALINaI");
  tree->Branch(dali_array->GetName(),&dali_array);
  
  //PID reconstructed data:
  TClonesArray *rips_array = 
   (TClonesArray *)sman->FindDataContainer("BigRIPSRIPS");
  std::cout<<rips_array->GetName()<<std::endl;     
  tree->Branch(rips_array->GetName(),&rips_array); 
  
  TClonesArray *tof_array  = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSTOF");
  std::cout<<tof_array->GetName()<<std::endl;     
  tree->Branch(tof_array->GetName(),&tof_array);   
  
  TClonesArray *beam_array = 
    (TClonesArray *)sman->FindDataContainer("BigRIPSBeam");	
  std::cout<<beam_array->GetName()<<std::endl;     
  tree->Branch(beam_array->GetName(),&beam_array); 

  TClonesArray *analyzedminos_array = 
    (TClonesArray *)sman->FindDataContainer("AnalyzedMINOS");
  std::cout<<analyzedminos_array->GetName()<<std::endl;
  tree->Branch(analyzedminos_array->GetName(),&analyzedminos_array);

  TClonesArray *trackminos_array = 
    (TClonesArray *)sman->FindDataContainer("TrackMINOS");
  std::cout<<trackminos_array->GetName()<<std::endl;
  tree->Branch(trackminos_array->GetName(),&trackminos_array);

/*
  //minos
  anaminos_array =(TClonesArray *)sman->FindDataContainer("AnalyzedMINOS");
  tree->Branch(anaminos_array->GetName(),&anaminos_array);
  trackminos_array =(TClonesArray *)sman->FindDataContainer("TrackMINOS");
  tree->Branch(trackminos_array->GetName(),&trackminos_array);
*/

  //_________________________________________________________________________
  //Making new branches
  
  //%%%%%%%%%%%%%%%%%%%%%%
  //BigRIPS
  Double_t fF8PPACX[4]   = {-999.};
  Double_t fF8PPACY[4]   = {-999.};
  Double_t fF8PPACZ[4]   = {-999.};
  Double_t fF8PosX[2]    = {-999.};
  Double_t fF8PosY[2]    = {-999.};
  Double_t fF8PosZ[2]    = {-999.};

  Double_t fXTar        = -999.;
  Double_t fYTar        = -999.;

  Int_t fGoodPPACFocus[12] = {0};
  Int_t fGoodPPACFocusOr[12] = {0};

  tree->Branch("xtar",&fXTar,"fXTar/D");
  tree->Branch("ytar",&fYTar,"fYTar/D");
  //tree->Branch("f8ppacx",fF8PPACX,"fF8PPACX[6]/D");
  //tree->Branch("f8ppacy",fF8PPACY,"fF8PPACY[6]/D");
  //tree->Branch("f8posx",fF8PosX,"fF8PosX[3]/D");
  //tree->Branch("f8posy",fF8PosY,"fF8PosY[3]/D");
  tree->Branch("fgoodppacfocus",fGoodPPACFocus,"fGoodPPACFocus[12]/I");
  tree->Branch("fgoodppacfocusor",fGoodPPACFocusOr,"fGoodPPACFocusOr[12]/I");
    
  //%%%%%%%%%%%%%%%%%%%%%%
  //DALI
  Int_t dalimultwotime = 0;
  Int_t dalimult = 0;
  Int_t dalitimetruemult = 0;
  Int_t dalimultthres = 0;
  Int_t dalitimetruemultthres = 0;

  tree->Branch("dalimultwotime",&dalimultwotime,"dalimultwotime/I");
  tree->Branch("dalimult",&dalimult,"dalimult/I");
  tree->Branch("dalitimetruemult",&dalitimetruemult,"dalitimetruemult/I");
  tree->Branch("dalimultthres",&dalimultthres,"dalimultthres/I");
  tree->Branch("dalitimetruemultthres",&dalitimetruemultthres,"dalitimetruemultthres/I");

  //%%%%%%%%%%%%%%%%%%%%%%
  //MINOS

  Double_t z_vertex=0.;
  tree->Branch("z_vertex",&z_vertex,"z_vertex/D");

  Double_t beta_vertex=0.;
  tree->Branch("beta_vertex",&beta_vertex,"beta_vertex/D");

  int neve = 0;
  while(estore->GetNextEvent()){
    if(neve%1000==0)
      std::cout << "event: " << neve << std::endl;
      
    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    //Making the BigRIPS tree calibration
    brcalib->ClearData();
    brcalib->ReconstructData();
    
    //Reconstructiong the PID
    recopid->ClearData();
    recopid->ReconstructData();
  
    //Reconstructing the scattering angle:
    //Beam spot on target reconstruction
    fXTar=-999.;
    fYTar=-999.;
     
    for(int i=0;i<4;i++){
      fF8PPACX[i] = -999.;
      fF8PPACY[i] = -999.;
      fF8PPACZ[i] = -999.;
    }
    
    for(int i=0;i<2;i++){
      fF8PosX[i] = -999.;
      fF8PosY[i] = -999.;
      fF8PosZ[i] = -999.;
    }
    
    for(int i=0;i<12;i++) {
      fGoodPPACFocus[i] = 0;
      fGoodPPACFocusOr[i] = 0;
    }
    
    bool  fired[14] = {false};
    bool  posRec = false;
    
    TArtPPAC *fppac[12];
    fppac[0] = ppaccalib->FindPPAC("F8PPAC-1A");
    fppac[1] = ppaccalib->FindPPAC("F8PPAC-1B");
    fppac[2] = ppaccalib->FindPPAC("F8PPAC-2A");
    fppac[3] = ppaccalib->FindPPAC("F8PPAC-2B");
    fppac[4] = ppaccalib->FindPPAC("F9PPAC-1A");
    fppac[5] = ppaccalib->FindPPAC("F9PPAC-1B");
    fppac[6] = ppaccalib->FindPPAC("F9PPAC-2A");
    fppac[7] = ppaccalib->FindPPAC("F9PPAC-2B");
    fppac[8] = ppaccalib->FindPPAC("F11PPAC-1A");
    fppac[9] = ppaccalib->FindPPAC("F11PPAC-1B");
    fppac[10] = ppaccalib->FindPPAC("F11PPAC-2A");
    fppac[11] = ppaccalib->FindPPAC("F11PPAC-2B");

    for(int i=0;i<12;i++){
      if(fppac[i]!=0){
        if(fppac[i]->IsFiredX()&&fppac[i]->IsFiredY()) fired[i] = true;
      } 
    }

    if(fppac[0]!=0&&fppac[1]!=0&&fppac[2]!=0&&fppac[3]!=0){
      if(fppac[0]->IsFiredX()&&fppac[1]->IsFiredX()&&fppac[2]->IsFiredX()&&fppac[3]->IsFiredX()) fGoodPPACFocus[8] = 1;
      if((fppac[0]->IsFiredX()||fppac[1]->IsFiredX())&&(fppac[2]->IsFiredX()||fppac[3]->IsFiredX())) 
        fGoodPPACFocusOr[8] = 1;
    }
    if(fppac[4]!=0&&fppac[5]!=0&&fppac[6]!=0&&fppac[7]!=0){
      if(fppac[4]->IsFiredX()&&fppac[5]->IsFiredX()&&fppac[6]->IsFiredX()&&fppac[7]->IsFiredX()) fGoodPPACFocus[9] = 1;
      if((fppac[4]->IsFiredX()||fppac[5]->IsFiredX())&&(fppac[6]->IsFiredX()||fppac[7]->IsFiredX())) 
        fGoodPPACFocusOr[9] = 1;
    }
    if(fppac[8]!=0&&fppac[9]!=0&&fppac[10]!=0&&fppac[11]!=0){
      if(fppac[8]->IsFiredX()&&fppac[9]->IsFiredX()&&fppac[10]->IsFiredX()&&fppac[11]->IsFiredX()) fGoodPPACFocus[11] = 1;
      if((fppac[8]->IsFiredX()||fppac[9]->IsFiredX())&&(fppac[10]->IsFiredX()||fppac[11]->IsFiredX())) 
        fGoodPPACFocusOr[11] = 1;
    }

    for(int i=0;i<4;i++){
      if(fired[i]==false) continue;
      fF8PPACX[i] = fppac[i]->GetX();
      fF8PPACY[i] = fppac[i]->GetY();
      fF8PPACZ[i] = fppac[i]->GetXZPos();
    }

    //For the F8 scattering angle:
    for(int i=0;i<2;i++){
      if(fired[2*i]==true&&fired[2*i+1]==true) {
        fF8PosX[i] = (fppac[2*i]->GetX()+fppac[2*i+1]->GetX())/2; 
        fF8PosY[i] = (fppac[2*i]->GetY()+fppac[2*i+1]->GetY())/2; 
        fF8PosZ[i] = (fppac[2*i]->GetXZPos()+fppac[2*i+1]->GetXZPos())/2;
        //posRec = true;
      }
      else if (fired[2*i]==true||fired[2*i+1]==true){
        int j;
        posRec = true;
        if (fired[2*i]==true) j = 2*i;
        else j = 2*i+1;
        
        fF8PosX[i] = fppac[j]->GetX(); 
        fF8PosY[i] = fppac[j]->GetY(); 
        fF8PosZ[i] = fppac[j]->GetXZPos(); 
      }  
      else continue;
      //cout<<"posX: "<<posX[i]<<endl;
    }
    
    if( (fired[0]==true||fired[1]==true) && 
        (fired[2]==true||fired[3]==true)) posRec = true;

    if(posRec) {
      
      double mX = (fF8PosX[1]-fF8PosX[0])/(fF8PosZ[1]-fF8PosZ[0]);
      double mY = (fF8PosY[1]-fF8PosY[0])/(fF8PosZ[1]-fF8PosZ[0]);
      
      fXTar = fF8PosX[1] + mX * 880;
      fYTar = fF8PosY[1] + mY * 880;
    }

    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    //Making MINOS
    minoscalib->ClearData();
    minosanalyzed->ClearData();
    minostrack->ClearData();
    minosvertex->ClearData();
    minoscalib->ReconstructData();
    minosanalyzed->ReconstructData(); 
    minostrack->ReconstructData();
    minosvertex->ReconstructVertex();
    // Convert the reconstructed vertex in z (mm)
    z_vertex = minosvertex->GetZvCal(1e-3*VDrift, TimeBinElec, DelayTrig); //time bin*(ns/us)*vdrift(cm/us) == z_vertex in cm
    beta_vertex = minosvertex->GetBetaV();


    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    //Making DALI
    dalicalib->ClearData();
    //dalicalib->SetPlTime(plasticcalib->FindPlastic("F8pl")->GetTime());
    //dalicalib->SetVertex(z_vertex-DALIOffset/10.);
    //dalicalib->SetBeta(beta_vertex);

/*
    dalicalib2->ClearData();
    //dalicalib2->SetPlTime(plasticcalib->FindPlastic("F8pl")->GetTime());
    //dalicalib2->SetVertex(z_vertex-DALIOffset/10.);
    //dalicalib2->SetBeta(beta_vertex);
*/
       //Add above to remove F8plastic tof.
    dalicalib->ReconstructData();
    //dalicalib2->ReconstructData();
    
    dalimultwotime = dalicalib->GetMultWithoutT();
    dalimult = dalicalib->GetMult();
    dalitimetruemult = dalicalib->GetTimeTrueMult();
    dalimultthres = dalicalib->GetMultThres();
    dalitimetruemultthres = dalicalib->GetTimeTrueMultThres();
 


    tree->Fill();
    neve++;
  }
  cout<<"Writing the tree."<<endl;
  
  fout->Write();
  fout->Close();
}
Beispiel #8
0
void MakeDALITree(UInt_t run){
  gSystem->Load("libXMLParser.so");
  gSystem->Load("libanaroot.so");

  TArtStoreManager * sman = TArtStoreManager::Instance();
  TArtEventStore *estore = new TArtEventStore();
  estore->SetInterrupt(&stoploop);
  //estore->Open(0);
  Char_t* name = "calibration";
  UInt_t run_=run;
  if(run>200){
    name = "calib2XO";
    run_=run-200;
  }else if(run>100){
    name = "labr14Ni";
    run_=run-100;
  }
  estore -> Open(Form("data/ridf/ggdaq04/%s%04d.ridf",name,run_));

  //  estore -> Open(Form("ridf/ggdaq04/labr14Ni%04d.ridf",run));

  TArtDALIParameters *dpara = TArtDALIParameters::Instance();
  dpara->LoadParameter("db/DALI.xml");
  TArtCalibDALI *dalicalib= new TArtCalibDALI();

  //check if the tree is readable, otherwise change here to array and save once in a while during the loop and delete the tree, start again.
  //TFile *fout[100];
  //TTree *tree;
   
  Char_t* path = "data/Histo/calib/";
  Char_t* rename;
  if(run<34)
    rename = "before_empty/run";
  else if(run<39)
    rename = "before_Sn132/run";
  else if(run<43)
    rename = "before_Sn128/run";
  else if(run<46)
    rename = "during_Sn128/run";
  else if(run<52)
    rename = "after_Sn128/run";
  else 
    rename = "after_exp/run";
  TFile *fout = new TFile(Form("%s%s%04d.root",path,rename,run),"RECREATE");
  TTree *tree = new TTree("tree","tree");
  
  // define data nodes which are supposed to be dumped to tree 
  TClonesArray * info_array = (TClonesArray *)sman->FindDataContainer("EventInfo");
  TArtRawEventObject* frawevent = (TArtRawEventObject *)sman->FindDataContainer("RawEvent");
  std::cout<<info_array->GetName()<<std::endl;
  //std::cout<<info_array->GetDate()<<std::endl;
  tree->Branch(info_array->GetName(),&info_array);

  TClonesArray * dali_array=
     (TClonesArray *)sman->FindDataContainer("DALINaI");
  tree->Branch(dali_array->GetName(),&dali_array);

  Int_t MIDGAIN[8] = {0x0};
  Int_t LOWGAIN[8] = {0x0};
  Int_t HIGAIN[8]  = {0x0};

  tree->Branch("MIDGAIN",MIDGAIN,"MIDGAIN[8]/I");
  tree->Branch("LOWGAIN",LOWGAIN,"LOWGAIN[8]/I");
  tree->Branch("HIGAIN" ,HIGAIN ,"HIGAIN[8]/I");

  int neve = 0;
  Int_t ii = -1;
  UInt_t  fQTC[3][8] = {28, 29, 30, 1, 31, 4, 3, 2,
			24, 25, 26, 6, 27, 9, 8, 7,
			20, 21, 22,11, 23,14,13,12};
  TRandom3 rndm;

  while( estore->GetNextEvent() ){
    //while(neve<9000000){
    //	  estore->GetNextEvent();
    if(neve%500000==0){
      std::cout << "event: " << neve << std::endl;
      //not tested
/*
      if(neve%(Int_t)1e7==0){
	if(neve!=0){
	  fout[ii]->Write();
	  delete tree;
	}    
	ii++;
	if(ii > 99){
	  std::cout<< "file array is not big enough please increase the array size"<<std::endl;
	  return;
	}
	tree = new TTree("tree","tree");
	fout[ii] = new TFile(Form("rootfiles/calibration/calibration%04d_%i.root",run,ii),"RECREATE");
	}*/
    }

    dalicalib->ClearData();
    dalicalib->ReconstructData();

    Int_t tref = -9000;
    Int_t qtc_dummy[2][130];
    for( int i=0; i<130; i++ ){
      for( int j=0; j<2; j++ ){
	qtc_dummy[j][i] = -9999;
      }
    }
    for(int i=0; i<frawevent -> GetNumSeg(); i++){
      TArtRawSegmentObject *seg = frawevent -> GetSegment(i);
      Int_t fpl = seg -> GetFP();
      if(fpl==8){
	for(int j=0; j < seg -> GetNumData(); j++){
	  TArtRawDataObject *d = seg -> GetData(j);
	  Int_t geo  = d -> GetGeo();
	  Int_t ch   = d -> GetCh();
	  Int_t val  = d -> GetVal();
	  Int_t edge = d -> GetEdge();
	  if(geo==9) qtc_dummy[edge][ch] = val + (rndm.Rndm()- 0.5);
	  //if(ch == fQTC[1][1] )cout<<qtc_dummy[edge][ch]<< " qtc_dummy  "<<ch<<endl;
	  if(geo ==9 && ch==127 && edge == 0) tref = val;					
	}//for
      }//if
    }//for
  
    for(short ilabr=0; ilabr<8; ilabr++){
      HIGAIN[ilabr]  = (qtc_dummy[1][ fQTC[0][ilabr] ] - qtc_dummy[0][ fQTC[0][ilabr] ]);
      MIDGAIN[ilabr] = (qtc_dummy[1][ fQTC[1][ilabr] ] - qtc_dummy[0][ fQTC[1][ilabr] ]);
      LOWGAIN[ilabr] = (qtc_dummy[1][ fQTC[2][ilabr] ] - qtc_dummy[0][ fQTC[2][ilabr] ]);
    }
    tree->Fill();
    neve ++;
  }
  fout->Write();
  fout->Close();

 

}
void CalibPID(){

  bool printGif = true;

  gStyle->SetOptStat(111111);
  gSystem->Load("libXMLParser.so");
  gSystem->Load("libanacore.so");
  gSystem->Load("libanabrips.so");

  TArtBigRIPSParameters *setup = new TArtBigRIPSParameters();
  setup->LoadParameter("db/BigRIPSPPAC.xml");
  setup->LoadParameter("db/BigRIPSPlastic.xml");
  setup->LoadParameter("db/BigRIPSIC.xml");
  setup->LoadParameter("db/FocalPlane.xml");

  TArtEventStore *estore = new TArtEventStore();
  estore->Open("test.ridf");
  // call after TArtBigRIPSParameters.
  TArtCalibPID *mycalib= new TArtCalibPID();

  TFile *fout = new  TFile("dst.root","RECREATE");
  TTree *otree = new TTree("dst","anaroot dst");
  gROOT->cd();
  gSystem->AddIncludePath("-I$TARTSYS/include/");
  gROOT->ProcessLine(".L Functions.C+");
  DefineOutputCA(otree);

  /* prepare tree */
  Double_t F3PPAC1A_X; otree->Branch("F3PPAC1A_X",&F3PPAC1A_X,"F3PPAC1A_X/D");
  Double_t F3PPAC1A_Y; otree->Branch("F3PPAC1A_Y",&F3PPAC1A_Y,"F3PPAC1A_Y/D");
  Double_t F3PPAC1B_X; otree->Branch("F3PPAC1B_X",&F3PPAC1B_X,"F3PPAC1B_X/D");
  Double_t F3PPAC1B_Y; otree->Branch("F3PPAC1B_Y",&F3PPAC1A_Y,"F3PPAC1B_Y/D");
  Double_t F3PPAC2A_X; otree->Branch("F3PPAC2A_X",&F3PPAC2A_X,"F3PPAC2A_X/D");
  Double_t F3PPAC2A_Y; otree->Branch("F3PPAC2A_Y",&F3PPAC2A_Y,"F3PPAC2A_Y/D");
  Double_t F3PPAC2B_X; otree->Branch("F3PPAC2B_X",&F3PPAC2B_X,"F3PPAC2B_X/D");
  Double_t F3PPAC2B_Y; otree->Branch("F3PPAC2B_Y",&F3PPAC2A_Y,"F3PPAC2B_Y/D");

  Double_t F3X; otree->Branch("F3X",&F3X,"F3X/D");
  Double_t F3A; otree->Branch("F3A",&F3A,"F3A/D");
  Double_t F3Y; otree->Branch("F3Y",&F3Y,"F3Y/D");
  Double_t F3B; otree->Branch("F3B",&F3B,"F3B/D");

  Double_t F3PLA_TL; otree->Branch("F3PLA_TL",&F3PLA_TL,"F3PLA_TL/D");
  Double_t F3PLA_TR; otree->Branch("F3PLA_TR",&F3PLA_TR,"F3PLA_TR/D");
  Int_t F3PLA_QL; otree->Branch("F3PLA_QL",&F3PLA_QL,"F3PLA_QL/I");
  Int_t F3PLA_QR; otree->Branch("F3PLA_QR",&F3PLA_QR,"F3PLA_QR/I");

  Double_t F5PPAC1A_X; otree->Branch("F5PPAC1A_X",&F5PPAC1A_X,"F5PPAC1A_X/D");
  Double_t F5PPAC1A_Y; otree->Branch("F5PPAC1A_Y",&F5PPAC1A_Y,"F5PPAC1A_Y/D");
  Double_t F5PPAC1B_X; otree->Branch("F5PPAC1B_X",&F5PPAC1B_X,"F5PPAC1B_X/D");
  Double_t F5PPAC1B_Y; otree->Branch("F5PPAC1B_Y",&F5PPAC1A_Y,"F5PPAC1B_Y/D");
  Double_t F5PPAC2A_X; otree->Branch("F5PPAC2A_X",&F5PPAC2A_X,"F5PPAC2A_X/D");
  Double_t F5PPAC2A_Y; otree->Branch("F5PPAC2A_Y",&F5PPAC2A_Y,"F5PPAC2A_Y/D");
  Double_t F5PPAC2B_X; otree->Branch("F5PPAC2B_X",&F5PPAC2B_X,"F5PPAC2B_X/D");
  Double_t F5PPAC2B_Y; otree->Branch("F5PPAC2B_Y",&F5PPAC2A_Y,"F5PPAC2B_Y/D");

  Double_t F5X; otree->Branch("F5X",&F5X,"F5X/D");
  Double_t F5A; otree->Branch("F5A",&F5A,"F5A/D");
  Double_t F5Y; otree->Branch("F5Y",&F5Y,"F5Y/D");
  Double_t F5B; otree->Branch("F5B",&F5B,"F5B/D");

  Double_t F7PPAC1A_X; otree->Branch("F7PPAC1A_X",&F7PPAC1A_X,"F7PPAC1A_X/D");
  Double_t F7PPAC1A_Y; otree->Branch("F7PPAC1A_Y",&F7PPAC1A_Y,"F7PPAC1A_Y/D");
  Double_t F7PPAC1B_X; otree->Branch("F7PPAC1B_X",&F7PPAC1B_X,"F7PPAC1B_X/D");
  Double_t F7PPAC1B_Y; otree->Branch("F7PPAC1B_Y",&F7PPAC1A_Y,"F7PPAC1B_Y/D");
  Double_t F7PPAC2A_X; otree->Branch("F7PPAC2A_X",&F7PPAC2A_X,"F7PPAC2A_X/D");
  Double_t F7PPAC2A_Y; otree->Branch("F7PPAC2A_Y",&F7PPAC2A_Y,"F7PPAC2A_Y/D");
  Double_t F7PPAC2B_X; otree->Branch("F7PPAC2B_X",&F7PPAC2B_X,"F7PPAC2B_X/D");
  Double_t F7PPAC2B_Y; otree->Branch("F7PPAC2B_Y",&F7PPAC2A_Y,"F7PPAC2B_Y/D");

  Double_t F7X; otree->Branch("F7X",&F7X,"F7X/D");
  Double_t F7A; otree->Branch("F7A",&F7A,"F7A/D");
  Double_t F7Y; otree->Branch("F7Y",&F7Y,"F7Y/D");
  Double_t F7B; otree->Branch("F7B",&F7B,"F7B/D");

  Double_t F7PLA_TL; otree->Branch("F7PLA_TL",&F7PLA_TL,"F7PLA_TL/D");
  Double_t F7PLA_TR; otree->Branch("F7PLA_TR",&F7PLA_TR,"F7PLA_TR/D");
  Int_t F7PLA_QL; otree->Branch("F7PLA_QL",&F7PLA_QL,"F7PLA_QL/I");
  Int_t F7PLA_QR; otree->Branch("F7PLA_QR",&F7PLA_QR,"F7PLA_QR/I");

  Int_t ICQ[8];
  otree->Branch("ICQ",&ICQ,"ICQ[8]/I");

  TArtCalibPPAC *cppac = mycalib->GetCalibPPAC();
  TArtCalibPlastic *cpla = mycalib->GetCalibPlastic();
  TArtCalibIC *cic = mycalib->GetCalibIC();
  TArtCalibFocalPlane *cfpl = mycalib->GetCalibFocalPlane();

  std::cout << "start to scan" << std::endl;

  int neve = 0;
  while(estore->GetNextEvent() && neve<1000){
    if(neve%1000==0)
      cout << "event: " << neve << endl;
    mycalib->ReconstructData();

    F3PPAC1A_X=-9999; F3PPAC1A_Y=-9999; F3PPAC1B_X=-9999; F3PPAC1B_Y=-9999;
    F3PPAC2A_X=-9999; F3PPAC2A_Y=-9999; F3PPAC2B_X=-9999; F3PPAC2B_Y=-9999;
    F5PPAC1A_X=-9999; F5PPAC1A_Y=-9999; F5PPAC1B_X=-9999; F5PPAC1B_Y=-9999;
    F5PPAC2A_X=-9999; F5PPAC2A_Y=-9999; F5PPAC2B_X=-9999; F5PPAC2B_Y=-9999;
    F7PPAC1A_X=-9999; F7PPAC1A_Y=-9999; F7PPAC1B_X=-9999; F7PPAC1B_Y=-9999;
    F7PPAC2A_X=-9999; F7PPAC2A_Y=-9999; F7PPAC2B_X=-9999; F7PPAC2B_Y=-9999;
    F3PLA_TL=-9999; F3PLA_TR=-9999; F3PLA_QL=-9999; F3PLA_QR=-9999; 
    F7PLA_TL=-9999; F7PLA_TR=-9999; F7PLA_QL=-9999; F7PLA_QR=-9999; 
    for(int i=0;i<8;i++)ICQ[i] = -9999;
    F3X=-9999; F3A=-9999; F3Y=-9999; F3B=-9999;
    F5X=-9999; F5A=-9999; F5Y=-9999; F5B=-9999;
    F7X=-9999; F7A=-9999; F7Y=-9999; F7B=-9999;

    TArtPPAC *tppac;
    tppac = cppac->FindPPAC("F3PPAC-1A");
    if(tppac){F3PPAC1A_X = tppac->GetX(); F3PPAC1A_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F3PPAC-1B");
    if(tppac){F3PPAC1B_X = tppac->GetX(); F3PPAC1B_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F3PPAC-2A");
    if(tppac){F3PPAC2A_X = tppac->GetX(); F3PPAC2A_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F3PPAC-2B");
    if(tppac){F3PPAC2B_X = tppac->GetX(); F3PPAC2B_Y = tppac->GetY();}

    tppac = cppac->FindPPAC("F5PPAC-1A");
    if(tppac){F5PPAC1A_X = tppac->GetX(); F5PPAC1A_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F5PPAC-1B");
    if(tppac){F5PPAC1B_X = tppac->GetX(); F5PPAC1B_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F5PPAC-2A");
    if(tppac){F5PPAC2A_X = tppac->GetX(); F5PPAC2A_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F5PPAC-2B");
    if(tppac){F5PPAC2B_X = tppac->GetX(); F5PPAC2B_Y = tppac->GetY();}

    tppac = cppac->FindPPAC("F7PPAC-1A");
    if(tppac){F7PPAC1A_X = tppac->GetX(); F7PPAC1A_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F7PPAC-1B");
    if(tppac){F7PPAC1B_X = tppac->GetX(); F7PPAC1B_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F7PPAC-2A");
    if(tppac){F7PPAC2A_X = tppac->GetX(); F7PPAC2A_Y = tppac->GetY();}
    tppac = cppac->FindPPAC("F7PPAC-2B");
    if(tppac){F7PPAC2B_X = tppac->GetX(); F7PPAC2B_Y = tppac->GetY();}

    TArtPlastic *tpla;
    tpla = cpla->FindPlastic("F3pl");
    if(tpla){
      F3PLA_TL = tpla->GetTimeL(); F3PLA_TR = tpla->GetTimeR(); 
      F3PLA_QL = tpla->GetQLRaw(); F3PLA_QR = tpla->GetQRRaw(); 
    }
    tpla = cpla->FindPlastic("F7pl");
    if(tpla){
      F7PLA_TL = tpla->GetTimeL(); F7PLA_TR = tpla->GetTimeR(); 
      F7PLA_QL = tpla->GetQLRaw(); F7PLA_QR = tpla->GetQRRaw(); 
    }

    TArtIC *tic = cic->FindIC("F11IC");
    if(tic) for(int i=0;i<8;i++)ICQ[i] = tic->GetRawADC(i);

    TArtFocalPlane *tfpl;
    TVectorD *vec;
    tfpl = cfpl->FindFocalPlane(3); 
    if(tfpl){vec=tfpl->GetOptVector(); F3X=(*vec)(0); F3A=(*vec)(1); F3Y=(*vec)(2); F3B=(*vec)(3);}
    tfpl = cfpl->FindFocalPlane(5); 
    if(tfpl){vec=tfpl->GetOptVector(); F5X=(*vec)(0); F5A=(*vec)(1); F5Y=(*vec)(2); F5B=(*vec)(3);}
    tfpl = cfpl->FindFocalPlane(7); 
    if(tfpl){vec=tfpl->GetOptVector(); F7X=(*vec)(0); F7A=(*vec)(1); F7Y=(*vec)(2); F7B=(*vec)(3);}

    otree->Fill();
    mycalib->ClearData();
    estore->ClearData();
    neve ++;

  }

  fout->Write();
  fout->Close();

  return;
}