//al contrario di V2 qui prima importo e poi elaboro, dato che se li prendo e li elaboro direttamente da fastidio #include "TString.h" #include "TTree.h" #include "TH1F.h" #include "TFile.h" #include "TF1.h" #include "TCanvas.h" #include "TSystemDirectory.h" #include "TSystemFile.h" #include "TGraph.h" #include "TGraphErrors.h" #include "TStyle.h" #include "TPaveStats.h" #include "TPad.h" #include "TMultiGraph.h" #include "TObjArray.h" #include "TObjString.h" #include "TVectorF.h" #include "TMath.h" #include "TList.h" void AnalisiTempiV3(Int_t GapIn=4, Int_t NumGap=5, TString DirectoryPrincipale = "/home/user/Scrivania/dati1008/DatiLaserOct08/") { TSystemFile *file; TList *TempList; TString filename; TString gtitle; TGraph *TempGraph; TSystemDirectory *cDir = new TSystemDirectory("cDir","Scrivania/dati1008/DatiLaserOct08/"); TFile *SaveData = new TFile("SaveData.root","RECREATE"); Double_t *posx; Double_t *posy; TH1F *rumore; TF1 *gaussiana = new TF1("gaussiana", "gaus",-1,1); TF1 *gaussiana1 = new TF1("gaussiana1", "gaus",0,2); Double_t mediarumore, sigmarumore; TH1F *primitempi; Double_t *firsttime=new Double_t[NumGap]; Double_t *velocita=new Double_t[NumGap]; TGraphErrors *grvelocita = new TGraphErrors(NumGap); //TFile *f1 =new TFile("f1.root","RECREATE"); TObjArray *DirArray = new TObjArray(); TObjArray *DirNameArray = new TObjArray(); TString foldername; TObjArray *TempGraphArray; TObjArray *FinalGraphArray = new TObjArray(); TString SubgTitle; for(Int_t i = GapIn; i < (GapIn+NumGap); i++){ cDir->SetDirectory(Form("%s1008-75-25-%dg",DirectoryPrincipale.Data(),i)); DirArray->Add(cDir->GetListOfFiles()); foldername = Form("%s1008-75-25-%dg",DirectoryPrincipale.Data(),i); DirNameArray->Add(new TObjString(foldername)); } for(Int_t i = 0; i < DirArray->GetEntries(); i++){ TempGraphArray = new TObjArray(); TempList = (TList*)DirArray->At(i); foldername = ((TObjString*)DirNameArray->At(i))->String(); cout << "Importing: " << foldername << endl; for(Int_t j = 0; j < TempList->GetEntries(); j++){ file = (TSystemFile*)TempList->At(j); filename = file->GetName(); if(filename.Contains("C2")){ gtitle = Form("Gap:%d-Ev:%d",i+GapIn,j); TempGraph = new TGraph(Form("%s/%s",foldername.Data(),filename.Data()),"%lg,%lg"); TempGraph->SetTitle(gtitle); TempGraphArray->Add(TempGraph); } //file->~TSystemFile(); } FinalGraphArray->Add(TempGraphArray); //TempGraphArray->~TObjArray(); } /* TDatime *CurrentTime = new TDatime(); TFile *SaveData = new TFile("SaveData_of_"+(TString)CurrentTime->GetData()+"_At_"+(TString)CurrentTime->GetTime(),"RECREATE"); */ FinalGraphArray->SetName("GraphArray"); for (int i=GapIn; i<(GapIn+NumGap); i++) { primitempi = new TH1F(Form("primitempigap%d",i),Form("primitempi_gap%d",i),100,0, 6e-6); cout << "Gap :" << i << endl; TempGraphArray = (TObjArray*)FinalGraphArray->At(i-4); for ( int j=0; jGetEntries(); j++) { TempGraph= (TGraph*)TempGraphArray->At(j); gtitle = TempGraph->GetTitle(); posx=new Double_t[TempGraph->GetN()]; posy=new Double_t[TempGraph->GetN()];//ho creato un vettore posizione pari al numero di punti rumore= new TH1F("rumore"+gtitle, "rumore per "+gtitle, 100, -0.01,0.04); for(int k=0; kGetN(); k++) { TempGraph->GetPoint(k,posx[k],posy[k]); if(posx[k]>0.7e-6 && posx[k]<2.3e-6) { rumore->Fill(posy[k]); } } rumore->Fit("gaussiana","Q"); mediarumore=gaussiana->GetParameter(1); sigmarumore=gaussiana->GetParameter(2); /* if( j%100==0){//mi stampa media e sigma ogni cento file cout<< mediarumore << "\t" <Write(); for(int h=1; hGetN()-1;h++) { // if(posy[h]<(mediarumore-5*sigmarumore) && posx[h]>0.5e-6 && posy[h-1]>posy[h] && posy[h+1]>posy[h]) if(posy[h]<(mediarumore-5*sigmarumore) && posx[h]>1e-6) { primitempi->Fill(posx[h]); break; //quando è vera questa condizione esce dal cilclo for } } TempGraph->~TGraph(); } TempGraphArray->~TObjArray(); //fine importazione dati.ora posso trattare i miei tgraph. lavoro in ogni directory gaussiana1->SetRange((i*0.5+0.5)*1e-6,(i*0.5+1.5)*1e-6); primitempi->Fit("gaussiana1","QR"); firsttime[i]=gaussiana1->GetParameter(1); velocita[i]=(39.2+i*10)/firsttime[i]; cout << "velocità nella gap "<< i<<"\t" << velocita[i]<< "mm/s" <SetPoint(i-4, gaussiana1->GetParameter(1)*1e6,i-2);//cm/microsecondo grvelocita->SetPointError(i-4,gaussiana1->GetParameter(2)*1e6,0.1); primitempi->Write(); // primitempi->~TH1F(); } TCanvas *c2 = new TCanvas("c2","c2",800,1000); grvelocita->Fit("pol1"); gStyle->SetOptFit(1); grvelocita->Draw("AP"); grvelocita->SetTitle("drift velocity"); grvelocita->GetXaxis()->SetTitle("#mus"); grvelocita->GetYaxis()->SetTitle("cm"); //f1->Close(); }