X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FTRDPEDESTALda.cxx;h=667c968839c5c8d9cfeb4a33a6c2d1997b195757;hb=1db2829e706062f23a2a642f3ddcc30cc8b8a84f;hp=4ffc67ae3bd55198cae948b1686fb79332168ed9;hpb=5f518e55ce3b489c15821b770827ef77d154c0df;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/TRDPEDESTALda.cxx b/TRD/TRDPEDESTALda.cxx index 4ffc67ae3bd..667c968839c 100644 --- a/TRD/TRDPEDESTALda.cxx +++ b/TRD/TRDPEDESTALda.cxx @@ -8,7 +8,7 @@ DA Type: LDC Number of events needed: 100 Input Files: TRD raw files Output Files: trdCalibration.root -Trigger types used: +Trigger types used: PHYSICS_EVENT */ @@ -31,19 +31,28 @@ extern "C" { #include #include "TROOT.h" #include "TPluginManager.h" +#include "TSystem.h" // // AliRoot includes // #include "AliRawReader.h" #include "AliRawReaderDate.h" -#include "AliTRDrawStreamTB.h" -#include "AliTRDrawStreamBase.h" +#include "AliTRDgeometry.h" #include "AliCDBManager.h" +#include "AliLog.h" + +// +//AMORE +// +#include + // // AliRoot TRD calib classes // #include "AliTRDCalibPadStatus.h" +//functios, implementation below +void SendToAmoreDB(TObject *o, unsigned long32 runNb); /* Main routine Arguments: list of DATE raw data files @@ -86,24 +95,16 @@ int main(int argc, char **argv) { //Instance of AliCDBManager: needed by AliTRDRawStream //AliCDBManager *man = AliCDBManager::Instance(); - //man->SetDefaultStorage("local://$ALICE_ROOT"); + //man->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); //man->SetRun(0); // AliTRDCalibPadStatus object AliTRDCalibPadStatus calipad = AliTRDCalibPadStatus(); Bool_t passpadstatus = kTRUE; + unsigned long32 runNb=0; //run number // setting - // AliTRDrawStreamTB::SetNoDebug(); - AliTRDrawStreamTB::SetNoErrorWarning(); - //AliTRDrawStreamTB::SetForceCleanDataOnly(); - AliTRDrawStreamTB::AllowCorruptedData(); - AliTRDrawStreamTB::DisableStackNumberChecker(); - AliTRDrawStreamTB::DisableStackLinkNumberChecker(); - //AliTRDrawStreamTB::SetSkipCDH(); - //AliTRDrawStreamTB::SetExtraWordsFix(); - //AliTRDrawStreamTB::EnableDebugStream(); - //AliTRDrawStreamTB::SetDumpHead(320); - //AliTRDrawStreamTB::SetDumpHead(80); + //AliTRDrawFastStream::DisableSkipData(); + AliLog::SetGlobalLogLevel(AliLog::kFatal); /* read the data files */ int n; @@ -120,6 +121,7 @@ int main(int argc, char **argv) { /* read the file until EOF */ for(;;) { struct eventHeaderStruct *event; + eventTypeType eventT; /* get next event */ status=monitorGetEventDynamic((void **)&event); @@ -137,21 +139,29 @@ int main(int argc, char **argv) { break; } - if(passpadstatus){ + /* use event - here, just write event id to result file */ + eventT=event->eventType; + + if((eventT==PHYSICS_EVENT) && (passpadstatus)){ AliRawReader *rawReader = new AliRawReaderDate((void*)event); rawReader->Select("TRD"); - AliTRDrawStreamTB *trdRawStream = new AliTRDrawStreamTB((AliRawReader *)rawReader); - //trdRawStream->Init(); - if(!calipad.ProcessEvent((AliTRDrawStreamBase *)trdRawStream,(Bool_t)nevents_total)) passpadstatus = kFALSE; - nevents++; - delete trdRawStream; + // for debug + //rawReader->SelectEquipment(-1,1024,1025); + + Int_t result = calipad.ProcessEvent((AliRawReader *) rawReader); + // 0 error, 1 no input, 2 output + if(result == 2) nevents++; + if(result == 0) passpadstatus = kFALSE; delete rawReader; - + } nevents_total++; + // get the run number + runNb = event->eventRunNb; + /* free resources */ free(event); } @@ -163,9 +173,14 @@ int main(int argc, char **argv) { /* write file in any case to see what happens in case of problems*/ TFile *fileTRD = new TFile(RESULT_FILE,"recreate"); + if(nevents < 30) calipad.Destroy(); calipad.AnalyseHisto(); calipad.Write("calibpadstatus"); fileTRD->Close(); + + /* Send to amore */ + SendToAmoreDB(&calipad,runNb); + /* store the result file on FES */ status=daqDA_FES_storeFile(RESULT_FILE,FILE_ID); @@ -176,4 +191,72 @@ int main(int argc, char **argv) { return status; + } +void SendToAmoreDB(TObject *calipad, unsigned long32 runNb) +{ + //cheet a little -- temporary solution (hopefully) + // + //currently amoreDA uses the environment variable AMORE_DA_NAME to create the mysql + //table in which the calib objects are stored. This table is dropped each time AmoreDA + //is initialised. This of course makes a problem if we would like to store different + //calibration entries in the AMORE DB. Therefore in each DA which writes to the AMORE DB + //the AMORE_DA_NAME env variable is overwritten. + + + // + // The reference data are stored in: + // PadStatus1 for sm-00-01-02 + // PadStatus2 for sm-03-04-05 + // PadStatus3 for sm-06-07-08 + // PadStatus4 for sm-09-10-11 + // PadStatus5 for sm-12-13-14 + // PadStatus6 for sm-15-16-17 + // PadStatus0 if nothing found..means problems + // + + /////////////////// + // Find wich LDC + /////////////////// + Int_t ldcnumber = -1; + Int_t sm = -1; + for (Int_t idet=0; idet<540; idet++) { + AliTRDCalROC *rocMean = ((AliTRDCalibPadStatus *) calipad)->GetCalRocMean(idet, kFALSE); + if ( rocMean ) { + sm = AliTRDgeometry::GetSector(idet); + if((sm==0) || (sm==1) || (sm==2)) ldcnumber = 1; + if((sm==3) || (sm==4) || (sm==5)) ldcnumber = 2; + if((sm==6) || (sm==7) || (sm==8)) ldcnumber = 3; + if((sm==9) || (sm==10) || (sm==11)) ldcnumber = 4; + if((sm==12) || (sm==13) || (sm==14)) ldcnumber = 5; + if((sm==15) || (sm==16) || (sm==17)) ldcnumber = 6; + } + } + const char *amoreDANameorig=gSystem->Getenv("AMORE_DA_NAME"); + + gSystem->Setenv("AMORE_DA_NAME",Form("TRD-dataQA-%02d-%s",ldcnumber,FILE_ID)); + + ///////////////////// + // Send the stuff + //////////////////// + if (ldcnumber>-1){ + TDatime time; + TObjString info(Form("Run: %u; Date: %s",runNb,time.AsSQLString())); + + amore::da::AmoreDA amoreDA(amore::da::AmoreDA::kSender); + Int_t statusDA=0; + statusDA+=amoreDA.Send("Pedestals",calipad); + statusDA+=amoreDA.Send("Info",&info); + if ( statusDA ) + printf("Warning: Failed to write one of the calib objects to the AMORE database\n"); + } else { + printf("Warning: No data found!\n"); + } + + // reset env var + if (amoreDANameorig) gSystem->Setenv("AMORE_DA_NAME",amoreDANameorig); + +} + + +