示例#1
0
void KVAvailableRunsFile::RemoveDuplicateLines(KVNumberList lines_to_be_removed)
{
   // Remove from available runs file all lines whose numbers are in the list

   //does runlist exist ?
   if (!OpenAvailableRunsFile()) {
      Error("Remove", "Error opening available runs file");
      return;
   }
   //open temporary file
   TString tmp_file_path(GetFileName());
   ofstream tmp_file;
   KVBase::OpenTempFile(tmp_file_path, tmp_file);

   //loop over lines in fRunlist file
   //all lines which are not in list are directly copied to temp file
   TString line;
   Int_t line_number=1;
   line.ReadLine(fRunlist);

   lines_to_be_removed.Begin();
   Int_t next_line_to_remove = 0;
   if(!lines_to_be_removed.End()) next_line_to_remove = lines_to_be_removed.Next();

   while (fRunlist.good()) {

       if(line_number!=next_line_to_remove)
           tmp_file << line.Data() << endl;
       else {
           if(!lines_to_be_removed.End()) next_line_to_remove = lines_to_be_removed.Next();
       }
       line_number++;
       line.ReadLine(fRunlist);

   }

   CloseAvailableRunsFile();
   TString fRunlist_path;
   AssignAndDelete(fRunlist_path,
                   gSystem->ConcatFileName(GetFilePath(),
                                           GetFileName()));
   //keep lock on runsfile
   if( !runlist_lock.Lock( fRunlist_path.Data() ) ) return;

   //close temp file
   tmp_file.close();

   //copy temporary file to KVFiles directory, overwrite previous
   gSystem->CopyFile(tmp_file_path, fRunlist_path, kTRUE);
   //set access permissions to 664
   gSystem->Chmod(fRunlist_path.Data(), CHMODE(6,6,4));
   //delete temp file
   gSystem->Unlink(tmp_file_path);
   //unlock runsfile
   runlist_lock.Release();
}
示例#2
0
void KVLVContainer::ActivateItemsWithColumnData(const Char_t* colname, KVNumberList data, Bool_t activ)
{
    KVLVColumnData* CD = fColData[((KVListView*)GetListView())->GetColumnNumber(colname)];
    TGFrameElement* el;
    TIter next(fList);
    TGLVEntry* f = 0;
    Long_t val;
    data.Begin();
    while (!data.End()) {
        Int_t nd = data.Next();
        //printf("nd=%d\n",nd);
        next.Reset();
        Bool_t find = kFALSE;
        while ((el = (TGFrameElement*) next()) && !find) {
            f = (TGLVEntry*) el->fFrame;
            CD->GetData((TObject*)f->GetUserData(), val);
            if (val == nd) {
                find = kTRUE;
                if (activ) ActivateItemFromSelectAll(el);
                else DeActivateItem(el);
            }
        }
    }
    fClient->NeedRedraw(this);
}
示例#3
0
void CsICalib::InitTelescope(Int_t si_num ,Int_t csi_num)
{
    
    Char_t si_name [128] = "null";
    Char_t csi_name [128] = "null";

    sprintf(si_name, "SIE_%02i", si_num+1); 
    sprintf(csi_name, "CSI%02i", csi_num+1);

    Char_t tel_name [128] = "null";
    sprintf(tel_name, "SIE_%02i_CSI%02i", si_num+1, csi_num+1);

    list = 0;        
//    KVList *grid_list = 0;
    kvid = 0;
    KVNumberList runList = 0;

    list = (KVList*) gIDGridManager->GetGrids();
		
    if(list != 0){
	
		Int_t entries = (Int_t) list->GetEntries();
//		Int_t kHasGrids = 0;

		KVIDGrid *tmpGrid = 0;
//		Int_t nGridsForRun = 0;

		for(Int_t i=0; i<entries; i++){
    			tmpGrid = (KVIDGrid*) list->At(i);
    			if(tmpGrid != 0){
        			runList = (KVNumberList) tmpGrid->GetRuns();
        			runList.Begin();
        			while( !runList.End() ){
            				UInt_t next_val = (UInt_t) runList.Next();
            				if(next_val == gIndra->GetCurrentRunNumber()){
						if(strcmp(tmpGrid->GetName(),tel_name)==0){
							kvid = tmpGrid;
							}
						}
					
        				}
    				}
			} 
			
			      				
		if(kvid != 0){

        }else{  
	    /*printf("Error: 'kvid' assignment failed\n");
	    cout<<"si_num : "<<si_num<<" csi_num : "<<csi_num<<endl; 
	    cout<<"name : "<<tel_name<<endl;*/ 	    
        }
    }else{
        //printf("Error: 'list' assignment failed\n");   
    }

}
示例#4
0
void CsICalib::InitTelescopeSiTof(Int_t si_num)
{

    Char_t tel_name [128] = "null";
    sprintf(tel_name, "SIE%i_TOF",si_num+1);	
	
    list_sitof = 0;        
//    KVList *grid_list = 0;
    kvid_sitof = 0;
    KVNumberList runList = 0;

    list_sitof = (KVList*) gIDGridManager->GetGrids();
		
    if(list_sitof != 0){
		Int_t entries = (Int_t) list_sitof->GetEntries();
//		Int_t kHasGrids = 0;

		KVIDGrid *tmpGrid = 0;
//		Int_t nGridsForRun = 0;

		for(Int_t i=0; i<entries; i++){
    			tmpGrid = (KVIDGrid*) list_sitof->At(i);
    			if(tmpGrid != 0){				
				runList = (KVNumberList) tmpGrid->GetRuns();
        			runList.Begin();
        			while( !runList.End() ){
            				UInt_t next_val = (UInt_t) runList.Next();
            				if(next_val == gIndra->GetCurrentRunNumber()){
						if(strcmp(tmpGrid->GetName(),tel_name)==0){
							kvid_sitof = tmpGrid;
							}
						}
					
        				}
    				}
			} 
			
			      				
		if(kvid_chiosi != 0){

        }else{  
	    printf("Error: 'kvid_sitof' assignment failed\n");
	    cout<<"name : "<<tel_name<<endl; 	    
        }
    }else{
        //printf("Error: 'list' assignment failed\n");   
    }

return;
}
示例#5
0
void KVINDRA::BuildLayer(const Char_t* name)
{
   // Build layer 'name' with infos in file "$KVROOT/KVFiles/data/indra-struct.[dataset].env"

   KVLayer* layer = new KVLayer;
   Int_t number = fStrucInfos.GetValue(Form("INDRA.Layer.%s.Number", name), 0);
   layer->SetName(name);
   layer->SetNumber(number);
   Add(layer);
   Info("BuildLayer", "Building layer %d:%s", number, name);
   KVNumberList rings = fStrucInfos.GetValue(Form("INDRA.Layer.%s.Rings", name), "");
   rings.Begin();
   while (!rings.End()) {
      Int_t ring_num = rings.Next();
      TString prefix = Form("INDRA.Layer.%s.Ring.%d", name, ring_num);
      KVRing* ring = BuildRing(ring_num, prefix);
      layer->Add(ring);
   }
}
示例#6
0
//___________________________________________________________________________________________
void KVValues::ComputeAdditionalValues(Int_t min, Int_t max)
{

   if (min < 0)   min = 0;
   if (max == -1) max = kval_add;

   KVNumberList* nl = 0;
   TFormula* fm = 0;

   for (Int_t ff = min; ff < max; ff += 1) {
      nl = (KVNumberList*)kpar_add->At(ff);
      fm = (TFormula*)kform_add->At(ff);
      nl->Begin();
      while (!nl->End()) {
         Int_t nn = nl->Next();
         fm->SetParameter(nn, values[nn]);
      }
      values[kval_tot - kval_add + ff] = fm->Eval(0);
   }
}
示例#7
0
KVIonRangeTableMaterial* KVRangeYanez::MakeNaturallyOccuringElementMixture(Int_t z)
{
   // create a material containing the naturally occuring isotopes of the given element,
   // weighted according to their abundance.

   if (!gNDTManager) {
      Error("MakeNaturallyOccuringElementMixture",
            "Nuclear data tables have not been initialised");
      return NULL;
   }
   KVElementDensity* ed = (KVElementDensity*)gNDTManager->GetData(z, z, "ElementDensity");
   if (!ed) {
      Error("AddElementalMaterial",
            "No element found in ElementDensity NDT-table with Z=%d", z);
      return 0x0;
   }
   TString state = "solid";
   if (ed->IsGas()) state = "gas";
   KVRangeYanezMaterial* mat =
      new KVRangeYanezMaterial(this,
                               ed->GetElementName(),
                               ed->GetElementSymbol(),
                               state, ed->GetValue());
   KVNucleus nuc(z);
   KVNumberList isotopes = nuc.GetKnownARange();
   isotopes.Begin();
   while (!isotopes.End()) {

      nuc.SetA(isotopes.Next());
      Double_t abundance = nuc.GetAbundance() / 100.;
      if (abundance > 0.) mat->AddMixtureElement(z, nuc.GetA(), 1, abundance);

   }
   mat->Initialize();
   return (KVIonRangeTableMaterial*)mat;
}
示例#8
0
//_____________________________________________________________________________________________________//
KVIDGrid* KVIDTelescope::CalculateDeltaE_EGrid(TH2* haa_zz, Bool_t Zonly, Int_t npoints)
{
   //Genere une grille dE-E (perte d'energie - energie residuelle)
   //Le calcul est fait pour chaque couple comptant de charge (Z) et masse (A)
   //au moins un coup dans l'histogramme haa_zz definit :
   // Axe X -> Z
   // Axe Y -> A
   //
   //- Si Zonly=kTRUE (kFALSE par defaut), pour un Z donne, le A choisi est la valeur entiere la
   //plus proche de la valeur moyenne <A>
   //- Si Zonly=kFALSE et que pour un Z donne il n'y a qu'un seul A associe, les lignes correspondants
   //a A-1 et A+1 sont ajoutes
   //- Si a un Z donne, il n'y a aucun A, pas de ligne tracee
   //un noyau de A et Z donne n'est considere que s'il retourne KVNucleus::IsKnown() = kTRUE
   //
   // Warning : the grid is not added to the list of the telescope and MUST BE DELETED by the user !

   if (GetSize() <= 1) return 0;

   TClass* cl = new TClass(GetDefaultIDGridClass());
   KVIDGrid* idgrid = (KVIDGrid*)cl->New();
   delete cl;

   idgrid->AddIDTelescope(this);
   idgrid->SetOnlyZId(Zonly);

   KVDetector* det_de = GetDetector(1);
   if (!det_de)      return 0;
   KVDetector* det_eres = GetDetector(2);
   if (!det_eres)    return 0;

   KVNucleus part;
   Info("CalculateDeltaE_EGrid",
        "Calculating dE-E grid: dE detector = %s, E detector = %s",
        det_de->GetName(), det_eres->GetName());

   KVIDCutLine* B_line = (KVIDCutLine*)idgrid->Add("OK", "KVIDCutLine");
   Int_t npoi_bragg = 0;
   B_line->SetName("Bragg_line");
   B_line->SetAcceptedDirection("right");

   Double_t SeuilE = 0.1;

   for (Int_t nx = 1; nx <= haa_zz->GetNbinsX(); nx += 1) {

      Int_t zz = TMath::Nint(haa_zz->GetXaxis()->GetBinCenter(nx));
      KVNumberList nlA;
      Double_t sumA = 0, sum = 0;
      for (Int_t ny = 1; ny <= haa_zz->GetNbinsY(); ny += 1) {
         Double_t stat = haa_zz->GetBinContent(nx, ny);
         if (stat > 0) {
            Double_t val = haa_zz->GetYaxis()->GetBinCenter(ny);
            nlA.Add(TMath::Nint(val));
            sumA += val * stat;
            sum  += stat;
         }
      }
      sumA /= sum;
      Int_t nA = nlA.GetNValues();
      if (nA == 0) {
         Warning("CalculateDeltaE_EGrid", "no count for Z=%d", zz);
      } else {
         if (Zonly) {
            nlA.Clear();
            nlA.Add(TMath::Nint(sumA));
         } else {
            if (nA == 1) {
               Int_t aref = nlA.Last();
               nlA.Add(aref - 1);
               nlA.Add(aref + 1);
            }
         }
         part.SetZ(zz);
//            printf("zz=%d\n",zz);
         nlA.Begin();
         while (!nlA.End()) {
            Int_t aa = nlA.Next();
            part.SetA(aa);
//                printf("+ aa=%d known=%d\n",aa,part.IsKnown());
            if (part.IsKnown()) {

               //loop over energy
               //first find :
               //  ****E1 = energy at which particle passes 1st detector and starts to enter in the 2nd one****
               //      E2 = energy at which particle passes the 2nd detector
               //then perform npoints calculations between these two energies and use these
               //to construct a KVIDZALine

               Double_t E1, E2;
               //find E1
               //go from SeuilE MeV to det_de->GetEIncOfMaxDeltaE(part.GetZ(),part.GetA()))
               Double_t E1min = SeuilE, E1max = det_de->GetEIncOfMaxDeltaE(zz, aa);
               E1 = (E1min + E1max) / 2.;

               while ((E1max - E1min) > SeuilE) {

                  part.SetEnergy(E1);
                  det_de->Clear();
                  det_eres->Clear();

                  det_de->DetectParticle(&part);
                  det_eres->DetectParticle(&part);
                  if (det_eres->GetEnergy() > SeuilE) {
                     //particle got through - decrease energy
                     E1max = E1;
                     E1 = (E1max + E1min) / 2.;
                  } else {
                     //particle stopped - increase energy
                     E1min = E1;
                     E1 = (E1max + E1min) / 2.;
                  }
               }

               //add point to Bragg line
               Double_t dE_B = det_de->GetMaxDeltaE(zz, aa);
               Double_t E_B = det_de->GetEIncOfMaxDeltaE(zz, aa);
               Double_t Eres_B = det_de->GetERes(zz, aa, E_B);
               B_line->SetPoint(npoi_bragg++, Eres_B, dE_B);

               //find E2
               //go from E1 MeV to maximum value where the energy loss formula is valid
               Double_t E2min = E1, E2max = det_eres->GetEmaxValid(part.GetZ(), part.GetA());
               E2 = (E2min + E2max) / 2.;

               while ((E2max - E2min > SeuilE)) {

                  part.SetEnergy(E2);
                  det_de->Clear();
                  det_eres->Clear();

                  det_de->DetectParticle(&part);
                  det_eres->DetectParticle(&part);
                  if (part.GetEnergy() > SeuilE) {
                     //particle got through - decrease energy
                     E2max = E2;
                     E2 = (E2max + E2min) / 2.;
                  } else {
                     //particle stopped - increase energy
                     E2min = E2;
                     E2 = (E2max + E2min) / 2.;
                  }
               }

//                    printf("z=%d a=%d E1=%lf E2=%lf\n",zz,aa,E1,E2);
               KVIDZALine* line = (KVIDZALine*)idgrid->Add("ID", "KVIDZALine");
               if (TMath::Even(zz)) line->SetLineColor(4);
               line->SetAandZ(aa, zz);

               Double_t logE1 = TMath::Log(E1);
               Double_t logE2 = TMath::Log(E2);
               Double_t dLog = (logE2 - logE1) / (npoints - 1.);

               for (Int_t i = 0; i < npoints; i++) {
                  Double_t E = TMath::Exp(logE1 + i * dLog);
                  Double_t Eres = 0.;
                  Int_t niter = 0;
                  while (Eres < SeuilE && niter <= 20) {
                     det_de->Clear();
                     det_eres->Clear();

                     part.SetEnergy(E);

                     det_de->DetectParticle(&part);
                     det_eres->DetectParticle(&part);

                     Eres = det_eres->GetEnergy();
                     E += SeuilE;

                     niter += 1;
                  }
                  if (!(niter > 20)) {
                     Double_t dE = det_de->GetEnergy();
                     Double_t gEres, gdE;
                     line->GetPoint(i - 1, gEres, gdE);
                     line->SetPoint(i, Eres, dE);
                  }
               }

            }
         }

      }

   }

   return idgrid;

}
示例#9
0
void KV_CCIN2P3_GE::Run()
{
   //Processes the job requests for the batch system.
   //In normal mode, this submits one job for the data analyser fAnalyser
   //In multijobs mode, this submits one job for each run in the runlist associated to fAnalyser

   if (!CheckJobParameters()) return;

   if (MultiJobsMode()) {
      if (fAnalyser->InheritsFrom("KVDataSetAnalyser")) {
         //submit jobs for every GetRunsPerJob() runs in runlist
         KVDataSetAnalyser* ana = dynamic_cast<KVDataSetAnalyser*>(fAnalyser);
         KVNumberList runs = ana->GetRunList();
         runs.Begin();
         Int_t remaining_runs = runs.GetNValues();
         fCurrJobRunList.Clear();
         while (remaining_runs && !runs.End()) {
            Int_t run = runs.Next();
            remaining_runs--;
            fCurrJobRunList.Add(run);
            if ((fCurrJobRunList.GetNValues() == GetRunsPerJob()) || runs.End()) {
               // submit job for GetRunsPerJob() runs (or less if we have reached end of runlist 'runs')
               ana->SetRuns(fCurrJobRunList, kFALSE);
               ana->SetFullRunList(runs);
               SubmitJob();
               fCurrJobRunList.Clear();
            }
         }
         ana->SetRuns(runs, kFALSE);
      }
      else if (fAnalyser->InheritsFrom("KVSimDirAnalyser")) {
         // here we understand "run" to mean "file"
         KVSimDirAnalyser* ana = dynamic_cast<KVSimDirAnalyser*>(fAnalyser);
         TList* file_list = ana->GetFileList();
         Int_t remaining_runs = ana->GetNumberOfFilesToAnalyse();
         fCurrJobRunList.Clear();
         TList cur_file_list;
         TObject* of;
         TIter it(file_list);
         Int_t file_no = 1;
         while ((of = it())) {
            cur_file_list.Add(of);
            fCurrJobRunList.Add(file_no);
            remaining_runs--;
            file_no++;
            if ((fCurrJobRunList.GetNValues() == GetRunsPerJob()) || (remaining_runs == 0)) {
               // submit job for GetRunsPerJob() files (or less if we have reached end of list)
               ana->SetFileList(&cur_file_list);
               SubmitJob();
               fCurrJobRunList.Clear();
               cur_file_list.Clear();
            }
         }
         ana->SetFileList(file_list);
      }
   }
   else {
      SubmitJob();
   }

}
示例#10
0
void CsICalib::InitTelescopeChioSi(Int_t ci_num, Int_t si_num)
{
    
    Char_t si_name [128] = "null";
    Char_t ci_name [128] = "null";

    sprintf(si_name, "SIE_%02i", si_num+1); 
    sprintf(ci_name, "CI_%02i", ci_num);

    Char_t tel_name [128] = "null";
    //sprintf(tel_name, "CI_%02i_SIE_%02i", ci_num, si_num+1);
    sprintf(tel_name, "CI_01_SIE_18");	//Similar grids (using energies) for all Chio-Si combinaisons
    //cout<<"tel_name 1: "<<tel_name<<endl; 	
	
    list_chiosi = 0;        
//    KVList *grid_list = 0;
    kvid_chiosi = 0;
    KVNumberList runList = 0;

    list_chiosi = (KVList*) gIDGridManager->GetGrids();
		
    if(list_chiosi != 0){
		//cout<<"list_chiosi!=0"<<endl;
		Int_t entries = (Int_t) list_chiosi->GetEntries();
//		Int_t kHasGrids = 0;

		KVIDGrid *tmpGrid = 0;
//		Int_t nGridsForRun = 0;

		for(Int_t i=0; i<entries; i++){
    			tmpGrid = (KVIDGrid*) list_chiosi->At(i);
    			if(tmpGrid != 0){
				//cout<<"tmpGrid!=0"<<endl;				
				runList = (KVNumberList) tmpGrid->GetRuns();
        			runList.Begin();
        			while( !runList.End() ){
            				UInt_t next_val = (UInt_t) runList.Next();
            				if(next_val == gIndra->GetCurrentRunNumber()){
						//cout<<"next_val : "<<next_val<<endl;
						//L->Log<<"name : "<<tmpGrid->GetName()<<endl;
						if(strcmp(tmpGrid->GetName(),tel_name)==0){
							//L->Log<<"tel_name 2 : "<<tmpGrid->GetName()<<endl;
							//cout<<"tel_name 2: "<<tel_name<<endl;
							kvid_chiosi = tmpGrid;
							}
						}
					
        				}
    				}
			} 
			
			      				
		if(kvid_chiosi != 0){

        }else{  
	    printf("Error: 'kvid_chiosi' assignment failed\n");
	    cout<<"ci_num : "<<ci_num<<" si_num : "<<si_num+1<<endl; 
	    cout<<"name : "<<tel_name<<endl; 	    
        }
    }else{
        //printf("Error: 'list' assignment failed\n");   
    }

return;
}