本文整理汇总了C++中TObject::Clone方法的典型用法代码示例。如果您正苦于以下问题:C++ TObject::Clone方法的具体用法?C++ TObject::Clone怎么用?C++ TObject::Clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TObject
的用法示例。
在下文中一共展示了TObject::Clone方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InitMergeObjects
void InitMergeObjects( TDirectory *target, TFile *source ) {
TString path( (char*)strstr( target->GetPath(), ":" ) );
path.Remove( 0, 1 );
source->cd( path );
TDirectory *current_sourcedir = gDirectory;
// loop over all keys in this directory
TIter nextkey( current_sourcedir->GetListOfKeys() );
TKey *key;
while ( (key = (TKey*)nextkey())) {
// read object from source file
source->cd( path );
TObject *obj = key->ReadObj();
const char* obj_name= obj->GetName();
TString pathname = path + TString("/") + key->GetName();
if ( obj->IsA()->InheritsFrom( "TH1" ) ) {
target->cd( path );
TObject *h2 = obj->Clone();
MergeObjects.Add(new TObjString(pathname),h2);
}
else if ( obj->IsA()->InheritsFrom( "TTree" ) ) {
//TChain *ch = new TChain(obj_name); // Not quite right. Mike Anderson Julyl 1 2008
TChain *ch = new TChain(pathname);
MergeChains.Add(new TObjString(pathname),ch);
ch->Add(source->GetName());
} else if ( obj->IsA()->InheritsFrom( "TDirectory" ) ) {
// it's a subdirectory
cout << "Found subdirectory " << obj->GetName() << endl;
// create a new subdir of same name and title in the target file
target->cd();
TDirectory *newdir = target->mkdir( obj->GetName(), obj->GetTitle() );
// newdir is now the starting point of another round of merging
// newdir still knows its depth within the target file via
// GetPath(), so we can still figure out where we are in the recursion
InitMergeObjects( newdir, source );
} else {
// object is of no type that we know or can handle
cout << "Unknown object type, name: "
<< obj->GetName() << " title: " << obj->GetTitle() << endl;
}
} // while ( ( TKey *key = (TKey*)nextkey() ) )
}
示例2: loadRootDir
void histoBook::loadRootDir( TDirectory* tDir, string path ){
//cout << "histoBook.loadRootDir] Path : " << path << endl;
TList* list;
if ( tDir ){
list = tDir->GetListOfKeys();
} else {
cout << "[histoBook.loadRootDir] Bad Directory Given " << endl;
return;
}
TIter next(list);
TKey* key;
TObject* obj;
while ( (key = (TKey*)next()) ) {
obj = key->ReadObj() ;
if ( 0 == strcmp(obj->IsA()->GetName(),"TDirectoryFile") ){
TDirectoryFile* dir = (TDirectoryFile*)obj;
string nPath = path + dir->GetName();
if ( path == (string) "" )
nPath = path + dir->GetName();
else
nPath = path + "/" + dir->GetName();
cd( nPath );
loadRootDir( dir, nPath );
} else if ( obj ){
if ( (strcmp(obj->IsA()->GetName(),"TProfile")!=0) && (!obj->InheritsFrom("TH2") && (!obj->InheritsFrom("TH1"))) ) {
// not a 1d or 2d histogram
} else {
// add it to the book
//cout << "Adding : " << obj->GetName() << endl;
add( obj->GetName(), (TH1*)obj->Clone( obj->GetName() ) );
}
}
}
}
示例3: add
void add(const char* outHistName, const char* patORpfx) {
TRegexp reg(patORpfx, kFALSE);
TList* list = gDirectory->GetList() ;
TIterator* iter = list->MakeIterator();
TObject* obj = 0;
TObject* hist = 0;
Bool_t makeOutHist = false;
hist = gDirectory->Get(outHistName);
//If out hist does not exist, remember to create it
if (! hist) makeOutHist = true;
while (obj = iter->Next()) {
if (! obj->InheritsFrom(TH1::Class())) continue;
TString name = obj->GetName();
//Don't add out hist
if (name == TString(outHistName)) continue;
if (TString(patORpfx).MaybeRegexp()) {
if (TString(obj->GetName()).Index(reg) < 0 ) continue;
} else if (! name.BeginsWith(patORpfx)) continue;
if (makeOutHist) {
hist = obj->Clone(outHistName);
if (hist->InheritsFrom(TH2::Class()))
((TH2*)hist)->Reset();
else
((TH1*)hist)->Reset();
((TH1*)hist)->SetTitle(outHistName);
((TH1*)hist)->Sumw2();
makeOutHist = false;
}
((TH1*)hist)->Add((TH1*)obj);
}
}
示例4: switch
// Histograms will be scaled by x-section, Nevents, Luminosity,
// filter-efficiency if InputType is supplied
//
TH1 *get(const string &path, TFile *input, const InputType &input_type = UNKNOWN)
{
TObject *object = input->Get(path.c_str());
if (!object)
{
cerr << "failed to get: " << path << endl;
return 0;
}
TH1 *hist = dynamic_cast<TH1 *>(object->Clone());
if (!hist)
{
cerr << "object does not seem to be TH1" << endl;
return 0;
}
switch(input_type)
{
case QCD_BC_PT20_30:
{
hist->Scale(2.361e8 * luminosity * 5.9e-4 / 2071515);
break;
}
case QCD_BC_PT30_80:
{
hist->Scale(5.944e7 * luminosity * 2.42e-3 / 2009881);
break;
}
case QCD_BC_PT80_170:
{
hist->Scale(8.982e5 * luminosity * 1.05e-2 / 1071954);
break;
}
case QCD_EM_PT20_30:
{
hist->Scale(2.361e8 * luminosity * 1.06e-2 / 35577687);
break;
}
case QCD_EM_PT30_80:
{
hist->Scale(5.944e7 * luminosity * 6.1e-2 / 55173330);
break;
}
case QCD_EM_PT80_170:
{
hist->Scale(8.982e5 * luminosity * 1.59e-1 / 7852884);
break;
}
case TTJETS:
{
// Use NLO x-section: 157.5 instead of LO: 94.76
//
hist->Scale(157.5 * luminosity * 1.0 / 2748612);
break;
}
case ZJETS:
{
// Use NLO x-section: 3048 instead of LO: 2475
//
hist->Scale(3048 * luminosity * 1.0 / 29414670);
break;
}
case WJETS:
{
// Use NLO x-section: 31314 instead of LO: 27770
//
hist->Scale(31314 * luminosity * 1.0 / 39705660);
break;
}
case RERECO: // Fall through
case PROMPT: // Do nothing
break;
default:
{
cerr << "unknown type: can not scale the plot" << endl;
break;
}
}
if (UNKNOWN != input_type)
style(hist, input_type);
return hist;
}
示例5: loadHist
void loadHist(const char* filename, const char* pfx, const char* pat, Bool_t doAdd, Double_t scaleFactor)
{
cout << " Reading histograms from file: " << filename << endl << flush ;
TFile inf(filename) ;
//inf.ReadAll() ;
TList* list = inf.GetListOfKeys() ;
TIterator* iter = list->MakeIterator();
TRegexp re(pat,kTRUE) ;
std::cout << "pat = " << pat << std::endl ;
gDirectory->cd("Rint:") ;
TObject* obj ;
TKey* key ;
std::cout << "doAdd = " << (doAdd?"T":"F") << std::endl ;
std::cout << "loadHist: reading." ;
while((key=(TKey*)iter->Next())) {
Int_t ridx = TString(key->GetName()).Index(re) ;
if (ridx==-1) {
continue ;
}
obj = inf.Get(key->GetName()) ;
TObject* clone ;
if (pfx) {
// Find existing TH1-derived objects
TObject* oldObj = 0 ;
if (doAdd){
oldObj = gDirectory->Get(Form("%s_%s",pfx,obj->GetName())) ;
if (oldObj && !oldObj->IsA()->InheritsFrom(TH1::Class())) {
oldObj = 0 ;
}
}
if (oldObj) {
clone = oldObj ;
if ( scaleFactor > 0 ) {
((TH1*)clone)->Sumw2() ;
((TH1*)clone)->Add((TH1*)obj, scaleFactor) ;
} else {
((TH1*)clone)->Add((TH1*)obj) ;
}
} else {
clone = obj->Clone(Form("%s_%s",pfx,obj->GetName())) ;
}
} else {
// Find existing TH1-derived objects
TObject* oldObj = 0 ;
if (doAdd){
oldObj = gDirectory->Get(key->GetName()) ;
if (oldObj && !oldObj->IsA()->InheritsFrom(TH1::Class())) {
oldObj = 0 ;
}
}
if (oldObj) {
clone = oldObj ;
if ( scaleFactor > 0 ) {
((TH1*)clone)->Sumw2() ;
((TH1*)clone)->Add((TH1*)obj, scaleFactor) ;
} else {
((TH1*)clone)->Add((TH1*)obj) ;
}
} else {
clone = obj->Clone() ;
}
}
if ( scaleFactor > 0 && !doAdd ) {
((TH1*) clone)->Sumw2() ;
((TH1*) clone)->Scale(scaleFactor) ;
}
if (!gDirectory->GetList()->FindObject(clone)) {
gDirectory->Append(clone) ;
}
std::cout << "." ;
std::cout.flush() ;
}
std::cout << std::endl;
inf.Close() ;
delete iter ;
}
示例6: nextkey
extern "C" void pdf_calcer_MC(int n_pdfSet, char** pdf_sets, char* outfile, char* out_par, char* infile, char* main_hist, char* shortname)
{
vector< vector<TH1D*> > h1_PDF_scaled;
vector<string> histos;
for(int i = 0; i < n_pdfSet; i++) {
histos.push_back(pdf_sets[i]);
}
TString histname_n = main_hist;
TFile* Tinfile = new TFile(infile,"READ");
TH1D* h1_scaled_mt;
for(int i = 0; i < n_pdfSet; i++) {
TIter nextkey( Tinfile->GetListOfKeys() );
TKey *key;
vector< TH1D* > temphist;
while ( (key = (TKey*)nextkey()) ) {
Tinfile->cd();
TObject *myobj = key->ReadObj();
if ( myobj->InheritsFrom( "TH1" )) {
TString histname(myobj->GetName());
if (histname.EndsWith(histname_n+"_"+histos[i])) {
TH1D* hist = (TH1D*) myobj->Clone(myobj->GetName());
hist -> Rebin(1);
temphist.push_back(hist);
}
if (histname.EndsWith(histname_n) && i == 0) {
TH1D* hist = (TH1D*) myobj->Clone(myobj->GetName());
hist -> Rebin(1);
h1_scaled_mt = hist;
}
}
}
h1_PDF_scaled.push_back(temphist);
}
TH1D* h1_err_0;
TH1D* h1_err_1; /// for upper & lower uncertainty histograms
TH1D* h1_mean;
int nBins=h1_scaled_mt->GetNbinsX();
float xLow=h1_scaled_mt->GetBinLowEdge(1);
float xHigh=h1_scaled_mt->GetBinLowEdge(h1_scaled_mt->GetNbinsX()+1);
TString n_shortname = shortname;
h1_err_0 = (TH1D*) h1_scaled_mt-> Clone(n_shortname+"_up");
h1_err_1 = (TH1D*) h1_scaled_mt-> Clone(n_shortname+"_down");
h1_mean = (TH1D*) h1_scaled_mt-> Clone(n_shortname+"_mean");
vector<float> NNPDF_error;
vector<float> NNPDF_mean;
vector<float> NNPDF_mean_error;
vector< vector<Float_t> > nnpdf_error_and_mean;
nnpdf_error_and_mean= NNPDF_weighted_mean(h1_PDF_scaled);
NNPDF_error = nnpdf_error_and_mean.at(0);
NNPDF_mean = nnpdf_error_and_mean.at(1);
NNPDF_mean_error = nnpdf_error_and_mean.at(2);
for (int i=1; i<=h1_err_0->GetNbinsX(); i++) {
h1_err_0 -> SetBinContent(i, NNPDF_mean[i-1] + NNPDF_error[i-1]);
h1_err_1 -> SetBinContent(i, NNPDF_mean[i-1] - NNPDF_error[i-1]);
h1_mean -> SetBinContent(i, NNPDF_mean[i-1]);
h1_err_0 -> SetBinError(i, NNPDF_mean_error[i-1]);
h1_err_1 -> SetBinError(i, NNPDF_mean_error[i-1]);
h1_mean -> SetBinError(i, NNPDF_mean_error[i-1]);
}
TFile* Toutfile = new TFile(outfile,out_par);
Toutfile -> cd();
//Toutfile->mkdir("pdf");
//Toutfile -> cd("pdf/");
h1_err_0 -> Write();
h1_err_1 -> Write();
h1_mean -> Write();
Toutfile -> Close();
Tinfile -> Close();
//return true;
}
示例7: inf
loadHist(const char* filename, const char* pfx=0, const char* pat="*", Bool_t doAdd=kFALSE)
{
TFile inf(filename) ;
//inf.ReadAll() ;
TList* list = inf.GetListOfKeys() ;
TIterator* iter = list->MakeIterator();
TRegexp re(pat,kTRUE) ;
cout << "pat = " << pat << endl ;
gDirectory->cd("Rint:") ;
TObject* obj ;
TKey* key ;
cout << "doAdd = " << (doAdd?"T":"F") << endl ;
cout << "loadHist: reading." ;
while(key=(TKey*)iter->Next()) {
Int_t ridx = TString(key->GetName()).Index(re) ;
if (ridx==-1) {
continue ;
}
obj = inf->Get(key->GetName()) ;
TObject* clone ;
if (pfx) {
// Find existing TH1-derived objects
TObject* oldObj = 0 ;
if (doAdd){
oldObj = gDirectory->Get(Form("%s_%s",pfx,obj->GetName())) ;
if (oldObj && !oldObj->IsA()->InheritsFrom(TH1::Class())) {
oldObj = 0 ;
}
}
if (oldObj) {
clone = oldObj ;
((TH1*)clone)->Add((TH1*)obj) ;
} else {
clone = obj->Clone(Form("%s_%s",pfx,obj->GetName())) ;
}
} else {
// Find existing TH1-derived objects
TObject* oldObj = 0 ;
if (doAdd){
oldObj = gDirectory->Get(key->GetName()) ;
if (oldObj && !oldObj->IsA()->InheritsFrom(TH1::Class())) {
oldObj = 0 ;
}
}
if (oldObj) {
clone = oldObj ;
((TH1*)clone)->Add((TH1*)obj) ;
} else {
clone = obj->Clone() ;
}
}
if (!gDirectory->GetList()->FindObject(clone)) {
gDirectory->Append(clone) ;
}
cout << "." ;
cout.flush() ;
}
cout << endl;
inf.Close() ;
delete iter ;
}
示例8: GetCentK
TH1* GetCentK(TDirectory* top, Double_t c1, Double_t c2, Int_t s,
TLegend* l)
{
TString dname; dname.Form("cent%06.2f_%06.2f", c1, c2);
dname.ReplaceAll(".", "d");
TDirectory* d = top->GetDirectory(dname);
if (!d) {
Warning("GetCetnK", "Directory %s not found in %s",
dname.Data(), top->GetName());
return;
}
TDirectory* det = d->GetDirectory("details");
if (!det) {
Warning("GetCetnK", "Directory details not found in %s",
d->GetName());
d->ls();
return;
}
TObject* o = det->Get("scalar");
if (!o) {
Warning("GetCetnK", "Object scalar not found in %s",
det->GetName());
return;
}
if (!o->IsA()->InheritsFrom(TH1::Class())) {
Warning("GetCetnK", "Object %s is not a TH1, but a %s",
o->GetName(), o->ClassName());
return;
}
TH1* h = static_cast<TH1*>(o->Clone());
Color_t col = cc[(s-1)%10];
h->SetLineColor(col);
h->SetMarkerColor(col);
h->SetFillColor(col);
h->SetFillStyle(1001);
// h->SetTitle(Form("%5.2f-%5.2f%% #times %d", c1, c2, s));
h->SetTitle(Form("%2.0f-%2.0f%% + %d", c1, c2, s-1));
TF1* f = new TF1("", "[0]",-2.2,2.2);
f->SetParameter(0,s-1);
f->SetLineColor(col);
f->SetLineStyle(7);
f->SetLineWidth(1);
// h->Scale(s);
h->Add(f);
h->GetListOfFunctions()->Add(f);
f->SetParameter(0,s);
for (Int_t i = 1; i <= h->GetNbinsX(); i++) {
if (TMath::Abs(h->GetBinCenter(i)) > 2) {
h->SetBinContent(i,0);
h->SetBinError(i,0);
}
}
TLegendEntry* e = l->AddEntry(h, h->GetTitle(), "f");
e->SetFillColor(col);
e->SetFillStyle(1001);
e->SetLineColor(col);
return h;
}
示例9: moveDirHistsToStacks
void stackPlotter::moveDirHistsToStacks(TDirectory* tdir, TString histname, int color){
if(debug)
std::cout << "stackPlotter::moveDirHistsToStacks" << std::endl;
// get metainfo from directory, else exit TODO
metaInfo tMI;
tMI.extractFrom(tdir);
if(debug) {
std::cout << "stackPlotter::moveDirHistsToStacks || metaInfo color=" << tMI.color << std::endl;
std::cout << "stackPlotter::moveDirHistsToStacks || metaInfo legendname=" << tMI.legendname<< std::endl;
std::cout << "stackPlotter::moveDirHistsToStacks || metaInfo legendorder=" << tMI.legendorder << std::endl;
}
TIter histIter(tdir->GetListOfKeys());
TObject* cHistObj;
TKey* cHistKey;
if(debug)
std::cout << "stackPlotter::moveDirHistsToStacks || Iterating through histograms." << std::endl;
// loop through keys in the directory
while((cHistKey = (TKey*) histIter())) {
if(histname != cHistKey->GetName()) continue;
cHistObj=tdir->Get(cHistKey->GetName());
if(!cHistObj->InheritsFrom(TH1::Class())) continue;
if(debug)
std::cout << "stackPlotter::moveDirHistsToStacks || Found histogram "
<< cHistKey->GetName() << std::endl;
// prepare the histogram to be added to the stack
TH1* cHist = (TH1*) cHistObj->Clone();
cHist->SetDirectory(0);
TString mapName = cHist->GetName();
std::pair<Int_t,TH1*> newEntry(tMI.legendorder,cHist);
// initialize the stack info if needed
if(!stacksLegEntries_.count(mapName)) {
std::vector<std::pair<Int_t,TH1*> > legInfo(0);
legInfo.push_back(newEntry);
stacksLegEntries_[mapName] = legInfo;
}
cHist->SetFillColor(color);
cHist->SetFillStyle(1001);
cHist->SetMarkerStyle(kNone);
cHist->SetMarkerColor(kBlack);
cHist->SetLineColor(kBlack);
cHist->SetTitle(mapName);
cHist->SetName(tMI.legendname);
std::vector<std::pair<Int_t,TH1*> > legEntries = stacksLegEntries_[mapName];
if(debug)
std::cout << "stackPlotter::moveDirHistsToStacks || legEntries size is " << legEntries.size() << std::endl;
for(size_t i=0; i < legEntries.size(); i++) {
if(legEntries.at(i).second == cHist && legEntries.at(i).first == tMI.legendorder) break;
if(legEntries.at(i).first >= tMI.legendorder) {
if(debug)
std::cout << "stackPlotter::moveDirHistsToStacks || i is " << i << std::endl;
stacksLegEntries_[mapName].insert(stacksLegEntries_[mapName].begin()+i,newEntry);
break;
}
if(i==legEntries.size()-1) {
stacksLegEntries_[mapName].push_back(newEntry);
break;
}
}
if(debug)
std::cout << "stackPlotter::moveDirHistsToStacks || legEntries size is " << legEntries.size() << std::endl;
}
}